diff options
Diffstat (limited to 'Master/xemtex/doc/ghostscript')
70 files changed, 92580 insertions, 0 deletions
diff --git a/Master/xemtex/doc/ghostscript/API.htm b/Master/xemtex/doc/ghostscript/API.htm new file mode 100644 index 00000000000..01eff34f577 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/API.htm @@ -0,0 +1,671 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>The Ghostscript Interpreter Application Programming Interface (API)</title> +<!-- $Id: API.htm,v 1.11.2.13.2.6 2003/05/17 14:38:59 giles Exp $ --> +<!-- Supercedes the API in DLL.htm --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>The Ghostscript Interpreter Application Programming Interface (API)</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<ul> +<li><a href="#API">What is the Ghostscript Interpreter API?</a> +<li><a href="#Exported_functions ">Exported functions</a> +<ul> +<li><a href="#revision"><b><tt>gsapi_revision</tt></b></a> +<li><a href="#new_instance"><b><tt>gsapi_new_instance</tt></b></a> +<li><a href="#delete_instance"><b><tt>gsapi_delete_instance</tt></b></a> +<li><a href="#set_stdio"><b><tt>gsapi_set_stdio</tt></b></a> +<li><a href="#set_poll"><b><tt>gsapi_set_poll</tt></b></a> +<li><a href="#set_display_callback"><b><tt>gsapi_set_display_callback</tt></b></a> +<li><a href="#init"><b><tt>gsapi_init_with_args</tt></b></a> +<li><a href="#run"><b><tt>gsapi_run_*</tt></b></a> +<li><a href="#exit"><b><tt>gsapi_exit</tt></b></a> +<li><a href="#return_codes">Return codes</a> +</ul> +<li><a href="#Example_usage">Example usage</a> +<li><a href="#stdio">Standard input and output</a> +<li><a href="#display">Display device</a> +</ul> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<p> +<b>WARNING:</b> The API described in this document is subject to changes in +future releases, possibly ones that are not backward compatible with what +is described here. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + + +<h2><a name="API"></a>What is the Ghostscript Interpreter API?</h2> + +<p> +The Ghostscript interpreter can be built as a dynamic link library +(DLL) on the Windows or OS/2 platforms, as a shared object on the +GNU/Linux platform and as a framework on MacOS X. +With some changes, it could be built as a static library. +This document describes the Application Programming Interface (API) +for the Ghostscript interpreter library. +This should not be confused with the +<a href="Lib.htm">Ghostscript library</a> which provides a graphics +library but not the interpreter. +<p> +This supercedes the old <a href="DLL.htm">DLL</a> interface. +<p> +To provide the interface described in the +<a href="Use.htm">usage documentation</a>, a smaller independent +executable loads the DLL/shared object. +This executable provides all the interaction with the windowing system, +including image windows and, if necessary, a text window. + +<p> +The Ghostscript interpreter library's name and characteristics differ +for each platform: + +<ul> +<li>The Win32 DLL <b><tt>gsdll32.dll</tt></b> has +MULTIPLE NONSHARED data segments. Under Win32s it can be used by only one +program at a time, but under Windows 95/98 or Windows NT it can be called by +multiple programs simultaneously. + +<li>The OS/2 DLL <b><tt>gsdll2.dll</tt></b> has +MULTIPLE NONSHARED data segments and can be called by multiple programs +simultaneously. + +<li>The GNU/Linux shared object <b><tt>libgs.so</tt></b> +can be used by multiple programs simultaneously. + +<li>The MacOS X <b><tt>Ghostscript.framework</tt></b> can also be used +by multiple applications at once. +</ul> + +<p> +The source for the executable is in <b><tt>dw</tt></b>*.* (Windows), +<b><tt>dp</tt></b>*.* (OS/2) and <b><tt>dx</tt></b>*.* (GNU/Linux). +See these source files for examples of how to use the DLL. + +<p> +The source file <tt>dxmainc.c</tt> can serve as an example of how to use the +framework shared component on MacOS X. Just change the header includes to use +the Ghostscript namespace: +<blockquote><pre><tt>#include <Ghostscript/errors.h> +#include <Ghostscript/iapi.h></tt></pre></blockquote> +and link with: +<blockquote><pre><tt>cc -o gsc dxmainc.c -framework Ghostscript</tt></pre></blockquote> +To get a useable executable. <tt>Ghostscript.framework</tt> must be properly +installed in the search path for this to work. + +<p> +At this stage, Ghostscript does not support multiple instances +of the interpreter within a single process. + +<hr> + +<h2><a name="Exported_functions"></a>Exported functions</h2> + +<p> +The functions exported by the DLL/shared object are described +in the header file <a href="../src/iapi.h"><b><tt>iapi.h</tt></b></a> +and are summarised below. Omitted from the summary are +the calling convention (e.g. __stdcall), details of return +values and error handling. + + +<ul> +<li><b><tt> +int +<a href="#revision">gsapi_revision</a> + (gsapi_revision_t *pr, int len)); +</tt></b> + +<li><b><tt> +int +<a href="#new_instance">gsapi_new_instance</a> +(gs_main_instance **pinstance, void *caller_handle); +</tt></b> + +<li><b><tt> +void +<a href="#delete_instance">gsapi_delete_instance</a> +(gs_main_instance *instance); +</tt></b> + +<li><b><tt> +int +<a href="#set_stdio">gsapi_set_stdio</a> +(gs_main_instance *instance, + int(*stdin_fn)(void *caller_handle, char *buf, int len), + int(*stdout_fn)(void *caller_handle, const char *str, int len), + int(*stderr_fn)(void *caller_handle, const char *str, int len)); +</tt></b> + +<li><b><tt> +int +<a href="#set_poll">gsapi_set_poll</a> +(gs_main_instance *instance, int(*poll_fn)(void *caller_handle)); +</tt></b> + +<li><b><tt> +int +<a href="#set_display_callback">gsapi_set_display_callback</a> +(gs_main_instance *instance, display_callback *callback); +</tt></b> + +<li><b><tt> +int +<a href="#init">gsapi_init_with_args</a> +(gs_main_instance *instance, int argc, char **argv); +</tt></b> + +<li><b><tt> +int +<a href="#run">gsapi_run_string_begin</a> +(gs_main_instance *instance, int user_errors, int *pexit_code); +</tt></b> + +<li><b><tt> +int +<a href="#run">gsapi_run_string_continue</a> +(gs_main_instance *instance, + const char *str, unsigned int length, int user_errors, int *pexit_code); +</tt></b> + +<li><b><tt> +int +<a href="#run">gsapi_run_string_end</a> +(gs_main_instance *instance, int user_errors, int *pexit_code); +</tt></b> + +<li><b><tt> +int +<a href="#run">gsapi_run_string_with_length</a> +(gs_main_instance *instance, + const char *str, unsigned int length, int user_errors, int *pexit_code); +</tt></b> + +<li><b><tt> +int +<a href="#run">gsapi_run_string</a> +(gs_main_instance *instance, + const char *str, int user_errors, int *pexit_code); +</tt></b> + +<li><b><tt> +int +<a href="#run">gsapi_run_file</a> +(gs_main_instance *instance, + const char *file_name, int user_errors, int *pexit_code); +</tt></b> + +<li><b><tt> +int +<a href="#exit">gsapi_exit</a> +(gs_main_instance *instance); +</tt></b> + +</ul> + +<h3><a name="revision"></a><b><tt>gsapi_revision()</tt></b></h3> + +<blockquote> +This function returns the revision numbers and strings of the Ghostscript +interpreter library; you should call it before any other interpreter +library functions to make sure that the correct version of the +Ghostscript interpreter has been loaded. + +<blockquote> +<pre> +typedef struct gsapi_revision_s { + const char *product; + const char *copyright; + long revision; + long revisiondate; +} gsapi_revision_t; +gsapi_revision_t r; + +if (gsapi_revision(&r, sizeof(r)) == 0) { + if (r.revision < 650) + printf("Need at least Ghostscript 6.50"); +} +else { + printf("revision structure size is incorrect"); +} +</pre></blockquote> +</blockquote> + + +<h3><a name="new_instance"></a><b><tt>gsapi_new_instance()</tt></b></h3> +<blockquote> +Create a new instance of Ghostscript. +This instance is passed to most other gsapi functions. +The caller_handle will be provided to callback functions. +<b>At this stage, Ghostscript supports only one instance</b>. +</blockquote> + + +<h3><a name="delete_instance"></a><b><tt>gsapi_delete_instance()</tt></b></h3> +<blockquote> +Destroy an instance of Ghostscript. +Before you call this, Ghostscript must have finished. +If Ghostscript has been initialised, you must call +<b><tt>gsapi_exit</tt></b> before <b><tt>gsapi_delete_instance</tt></b>. +</blockquote> + + +<h3><a name="set_stdio"></a><b><tt>gsapi_set_stdio()</tt></b></h3> +<blockquote> +Set the callback functions for stdio +The stdin callback function should return the number of +characters read, 0 for EOF, or -1 for error. +The stdout and stderr callback functions should return +the number of characters written. +</blockquote> + + +<h3><a name="set_poll"></a><b><tt>gsapi_set_poll()</tt></b></h3> +<blockquote> +Set the callback function for polling. +This is used for handling window events or cooperative +multitasking. This function will only be called if +the Ghostscript interpreter was compiled with <b><tt>CHECK_INTERRUPTS</tt></b> +as described in <b><tt><a href="../src/gpcheck.h">gpcheck.h</a></tt></b>. +</blockquote> + +<h3><a name="set_display_callback"></a><b><tt>gsapi_set_display_callback()</tt></b></h3> +<blockquote> +Set the callback structure for the <a href="#display">display</a> +device. If the <a href="#display">display</a> device is used, +this must be called after +<b><tt>gsapi_new_instance()</tt></b> +and before <b><tt>gsapi_init_with_args()</tt></b>. +See <b><tt><a href="../src/gdevdsp.h">gdevdsp.h</a></tt></b> +for more details. +</blockquote> + +<h3><a name="init"></a><b><tt>gsapi_init_with_args()</tt></b></h3> +<blockquote> +Initialise the interpreter. +This calls <b><tt>gs_main_init_with_args()</tt></b> in +<b><tt><a href="../src/imainarg.c">imainarg.c</a></tt></b>. +See below for <a href="#return_codes">return codes</a>. +The arguments are the same as the "C" main function: +argv[0] is ignored and the user supplied arguments +are argv[1] to argv[argc-1]. +</blockquote> + +<h3><a name="run"></a><b><tt>gsapi_run_*()</tt></b></h3> +<blockquote> +The <b><tt>gsapi_run_*</tt></b> functions are like +<b><tt>gs_main_run_*</tt></b> except that the error_object is omitted. +If these functions return <= -100, either quit or a fatal +error has occured. You must call <b><tt>gsapi_exit()</tt></b> next. +The only exception is <b><tt>gsapi_run_string_continue()</tt></b> +which will return <b><tt>e_NeedInput</tt></b> if all is well. +See below for <a href="#return_codes">return codes</a>. +</blockquote> + +<h3><a name="exit"></a><b><tt>gsapi_exit()</tt></b></h3> +<blockquote> +Exit the interpreter. +This must be called on shutdown if <b><tt>gsapi_init_with_args()</tt></b> +has been called, and just before <b><tt>gsapi_delete_instance()</tt></b>. +</blockquote> + +<h3><a name="return_codes"></a>Return codes</h3> + +<p> +The <b><tt>gsapi_init_with_args</tt></b>, <b><tt>gsapi_run_*</tt></b> and +<b><tt>gsapi_exit</tt></b> functions return an integer code. + +<p> +<table width="80%" align="center" cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Return codes from <b><tt>gsapi_*()</tt></b></font><hr> +<tr valign=bottom> + <th align=left>Code + <td> + <th align=left>Status +<tr> <td colspan=3><hr> +<tr valign=top> <td align=left>0 + <td> + <td>No errors +<tr valign=top> <td align=left>e_Quit + <td> + <td>"<b><tt>quit</tt></b>" has been executed. + This is not an error. + <b><tt>gsapi_exit()</tt></b> must be called next. +<tr valign=top> <td align=left>e_NeedInput + <td> + <td>More input is needed by + <b><tt>gsapi_run_string_continue()</tt></b>. + This is not an error. +<tr valign=top> <td align=left>e_Info + <td> + <td>"<b><tt>gs -h</tt></b>" has been executed. + This is not an error. + <b><tt>gsapi_exit()</tt></b> must be called next. +<tr valign=top> <td align=left>< 0 + <td> + <td>Error +<tr valign=top> <td align=left><= -100 + <td> + <td>Fatal error. +<b><tt>gsapi_exit()</tt></b> must be called next. +</table> +</blockquote> + +<p> +The <b><tt>gsapi_run_*()</tt></b> functions do not flush stdio. +If you want to see output from Ghostscript you +must do this explicitly as shown in the example below. + +<p> +When executing a string with <b><tt>gsapi_run_string_*()</tt></b>, +<b><tt>currentfile</tt></b> is the input from the string. +Reading from <b><tt>%stdin</tt></b> uses the stdin callback. +</blockquote> + + + +<h2><a name="Example_usage"></a>Example Usage</h2> +Some overly simple examples of using the Ghostscript interpreter library are: + +<h3>Example 1</h3> +<pre> +/* Example of using GS DLL as a ps2pdf converter. */ + +#ifdef _Windows +/* Compile with: + * cl -D_Windows -Isrc -Febin\ps2pdf.exe ps2pdf.c bin\gsdll32.lib + */ +#include <windows.h> +#define GSDLLEXPORT __declspec(dllimport) +#endif + +#include "errors.h" +#include "iapi.h" + +gs_main_instance *minst; + +int main(int argc, char *argv[]) +{ + int code; + int exit_code; + const char * gsargv[10]; + int gsargc; + gsargv[0] = "ps2pdf"; /* actual value doesn't matter */ + gsargv[1] = "-dNOPAUSE"; + gsargv[2] = "-dBATCH"; + gsargv[3] = "-dSAFER"; + gsargv[4] = "-sDEVICE=pdfwrite"; + gsargv[5] = "-sOutputFile=out.pdf"; + gsargv[6] = "-c"; + gsargv[7] = ".setpdfwrite"; + gsargv[8] = "-f"; + gsargv[9] = "input.ps"; + gsargc=10; + + code = gsapi_new_instance(&minst, NULL); + if (code < 0) + return 1; + code = gsapi_init_with_args(minst, gsargc, gsargv); + gsapi_exit(minst); + + gsapi_delete_instance(minst); + + if ((code == 0) || (code == e_Quit)) + return 0; + return 1; +} +</pre> + +<h3>Example 2</h3> +<pre> +/* Similar to command line gs */ + +#include <stdio.h> +#include "errors.h" +#include "iapi.h" + +/* stdio functions */ +static int GSDLLCALL +gsdll_stdin(void *instance, char *buf, int len) +{ + int ch; + int count = 0; + while (count < len) { + ch = fgetc(stdin); + if (ch == EOF) + return 0; + *buf++ = ch; + count++; + if (ch == '\n') + break; + } + return count; +} + +static int GSDLLCALL +gsdll_stdout(void *instance, const char *str, int len) +{ + fwrite(str, 1, len, stdout); + fflush(stdout); + return len; +} + +static int GSDLLCALL +gsdll_stderr(void *instance, const char *str, int len) +{ + fwrite(str, 1, len, stderr); + fflush(stderr); + return len; +} + +gs_main_instance *minst; +const char start_string[] = "systemdict /start get exec\n"; + +int main(int argc, char *argv[]) +{ + int code; + int exit_code; + + code = gsapi_new_instance(&minst, NULL); + if (code < 0) + return 1; + gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr); + code = gsapi_init_with_args(minst, argc, argv); + if (code == 0) + code = gsapi_run_string(minst, start_string, 0, &exit_code); + gsapi_exit(minst); + + gsapi_delete_instance(minst); + + if ((code == 0) || (code == e_Quit)) + return 0; + return 1; +} +</pre> + +<h3>Example 3</h3> + +Replace main() in either of the above with the following code, +showing how you can feed Ghostscript piecemeal: +<pre> +const char *command = "1 2 add == flush\n"; + +int main(int argc, char *argv[]) +{ + int code; + int exit_code; + + code = gsapi_new_instance(&minst, NULL); + if (code < 0) + return 1; + code = gsapi_init_with_args(minst, argc, argv); + + if (code == 0) { + gsapi_run_string_begin(minst, 0, &exit_code); + gsapi_run_string_continue(minst, command, strlen(command), 0, &exit_code); + gsapi_run_string_continue(minst, "qu", 2, 0, &exit_code); + gsapi_run_string_continue(minst, "it", 2, 0, &exit_code); + gsapi_run_string_end(minst, 0, &exit_code); + } + + gsapi_exit(minst); + + gsapi_delete_instance(minst); + + if ((code == 0) || (code == e_Quit)) + return 0; + return 1; +} +</pre> + + +<h2><a name="Multiple_threads"></a>Multiple threads</h2> +The Ghostscript library should have been compiled with a +thread safe run time library. +Synchronisation of threads is entirely up to the caller. + +<h2><a name="stdio"></a>Standard input and output</h2> +<p> +When using the Ghostscript interpreter library interface, you have a +choice of two standard input/output methods. +<ul> +<li>If you do nothing, the "C" stdio will be used. +<li>If you use <b><tt>gsapi_set_stdio()</tt></b>, all stdio will + be redirected to the callback functions you provide. + This would be used in a graphical user interface environment + where stdio is not available, or where you wish to process + Ghostscript input or output. +</ul> +<p> +The callback functions are described in +<a href="../src/iapi.h"><b><tt>iapi.h</tt></b></a>. + + +<h2><a name="display"></a>Display device</h2> +<p> +The <b><tt>display</tt></b> device is available for use with +the Ghostscript interpreter library. This is described in the file +<b><tt><a href="../src/gdevdsp.h">gdevdsp.h</a></tt></b>. +This device provides you with access to the raster output of +Ghostscript. It is your responsibility to copy this raster +to a display window or printer. +<p> +To use this device, you must provide a callback structure +with addresses of a number of callback functions. +The address of the callback structure is provided using +<b><tt>gsapi_set_display_callback()</tt></b>. +This must be called after +<b><tt>gsapi_new_instance()</tt></b> +and before +<b><tt>gsapi_init_with_args()</tt></b>. +<p> +The callbacks are for device open, close, resize, sync, page, +memory allocation and updating. +Each callback function contains a handle can be set using +<blockquote> + -dDisplayHandle=1234 +</blockquote> +<p> +The device raster format can be configured using +<blockquote> + -dDisplayFormat=NNNN +</blockquote> +Options include +<ul> +<li> native, gray, RGB or CMYK color spaces. +<li> alpha byte (ignored). +<li> 1 to 16 bits/component. +<li> bigendian (RGB) or littleendian (BGR) order. +<li> top first or bottom first raster. +<li> 16 bits/pixel with 555 or 565 bitfields. +</ul> +The format values are described in +<b><tt><a href="../src/gdevdsp.h">gdevdsp.h</a></tt></b>. +The format is flexible enough to support common Windows, OS/2, GNU/Linux +and Mac raster formats. To select the display device with a +Windows 24-bit RGB raster: +<pre> + char **nargv; + char arg1[64]; + char arg2[64]; + char arg3[64]; + code = gsapi_new_instance(&minst, NULL); + gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr); + code = gsapi_set_display_callback(minst, &display_callback); + sprintf(arg1, "-sDEVICE=display"); + sprintf(arg2, "-dDisplayHandle=%d", 0); + sprintf(arg3, "-dDisplayFormat=%d", + DISPLAY_COLORS_RGB | DISPLAY_ALPHA_NONE | DISPLAY_DEPTH_8 | + DISPLAY_LITTLEENDIAN | DISPLAY_BOTTOMFIRST); + nargv = (char **)malloc((argc + 4) * sizeof(char *)); + nargv[0] = argv[0]; + nargv[1] = arg1; + nargv[2] = arg2; + nargv[3] = arg3; + memcpy(nargv + 4, argv + 1, argc * sizeof(char *)); + argc += 3; + code = gsapi_init_with_args(minst, argc, nargv); +</pre> + +<p> +The display device provides you with the address and size of the +raster using the <b><tt>display_size()</tt></b> callback. +You are then responsible for displaying this raster. +Some examples are in +<b><tt><a href="../src/dwmain.c">dwmain.c</a></tt></b> (Windows), +<b><tt><a href="../src/dpmain.c">dpmain.c</a></tt></b> (OS/2) and +<b><tt><a href="../src/dxmain.c">dxmain.c</a></tt></b> (X11/GNU/Linux). + +<p> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + + +<p> +<small>Copyright © 2001 artofcode LLC. All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/C-style.htm b/Master/xemtex/doc/ghostscript/C-style.htm new file mode 100644 index 00000000000..0e17e4d5e0e --- /dev/null +++ b/Master/xemtex/doc/ghostscript/C-style.htm @@ -0,0 +1,1588 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Ghostscript C coding guidelines</title> +<!-- $Id: C-style.htm,v 1.21.2.11.2.5 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: c-style.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Ghostscript C coding guidelines</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Introduction">Introduction</a> +<li><a href="#C_language">C language do's and don'ts</a> +<ul> +<li>Preprocessor: + <a href="#Conditionals">Conditionals</a>, + <a href="#Macros">Macros</a>, + <a href="#Preprocessor_other">Other</a> +<li><a href="#Lexical_elements">Lexical elements</a> +<li><a href="#Scoping">Scoping</a> +<li>Data types: + <a href="#Scalars">Scalars</a>, + <a href="#Arrays">Arrays</a>, + <a href="#Typedefs">Typedefs</a>, + <a href="#Structures">Structures</a>, + <a href="#Unions">Unions</a> +<li><a href="#Expressions">Expressions</a> +<li><a href="#Statements">Statements</a> +<li><a href="#Procedures">Procedures</a> (prototypes and definitions) +<li><a href="#Standard_library">Standard library</a> +</ul> +<li><a href="#Language_extensions">Language extensions</a> +<li><a href="#Stylistic_conventions">Stylistic conventions</a> +<ul> +<li>Formatting: + <a href="#Indentation">Indentation</a>, + <a href="#Spaces">Spaces</a>, + <a href="#Parentheses">Parentheses</a> +<li><a href="#Preprocessor_style">Preprocessor</a> +<li><a href="#Naming">Naming</a> +<li><a href="#Types">Types</a> +<li><a href="#Procedures_style">Procedures</a>, +<li>Miscellany: + <a href="#Local_variables">Local variables</a>, + <a href="#Compiler_warnings">Compiler warnings</a> +</ul> +<li><a href="#File_structuring">File structuring and naming</a> +<ul> +<li><a href="#All_files">All files</a> +<li><a href="#Makefiles">Makefiles</a> +<li><a href="#General_C_code">General C Code</a> +<li><a href="#Headers">Headers (<b><tt>.h</tt></b> files)</a> +<li><a href="#Source">Source (<b><tt>.c</tt></b> files)</a> +</ul> +<li><a href="#Conventions">Ghostscript conventions</a> +<ul> +<li><a href="#Specific_names">Specific names</a>: + <a href="#code"><b><tt>code</tt></b></a>, + <a href="#status"><b><tt>status</tt></b></a> +<li><a href="#Structure_type_descriptors">Structure type descriptors</a> +<li><a href="#Objects">"Objects"</a> +<li><a href="#Error_handling">Error handling</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Introduction"></a>Introduction</h2> + +<p> +This document describes Ghostscript's C coding conventions. It is primarily +<em>prescriptive</em>, documenting what developers should do when writing +new code; the companion developer documentation (<a + href="Develop.htm">Develop.htm</a>) is primarily <em>descriptive</em>, +documenting the way things are. + +<p> +We encourage following the general language usage and stylistic rules for +any code that will be integrated with Ghostscript, even if the code doesn't +use Ghostscript's run-time facilities or have anything to do with +PostScript, PDF, or page description languages. Ghostscript itself follows +some additional conventions; these are documented separately under "<a +href="#Conventions">Ghostscript conventions</a>" below. + +<hr> + +<h2><a name="C_language"></a>C language do's and don'ts</h2> + +<p> +There are several different versions of the C language, and even of the ANSI +C standard. Ghostscript versions through 7.0 were designed to compile on +pre-ANSI compilers as well as on many compilers that implemented the ANSI +standard with varying faithfulness. Ghostscript versions since 7.0 do not +cater for pre-ANSI compilers: they must conform to the ANSI 1989 standard +(ANS X3.159-1989), with certain restrictions and a few conventional +additions. + +<h3>Preprocessor</h3> + +<h4><a name="Conditionals"></a>Conditionals</h4> + +Restrictions: + +<ul> + +<li>Don't assume that <b><tt>#if</tt></b> will treat undefined names as 0. +While the ANSI standard requires this, it may produce a warning. + +<li>In <b><tt>.c</tt></b> files, don't use preprocessor conditionals that +test for individual platforms or compilers. Use them only in header files +named xxx<b><tt>_.h</tt></b>. + +</ul> + +<h4><a name="Macros"></a>Macros</h4> + +<p> +Restrictions: + +<ul> + +<li>Don't redefine a macro, even with the same definition, without using +<b><tt>#undef</tt></b>. + +<li><b><tt>CAPITALIZE</tt></b> macro names unless there is a good reason not +to. + +<li>Don't use a macro call within a macro argument if the call expands to a +token sequence that includes any commas not within parentheses: this +produces different results depending on whether the compiler expands the +inner call before or after the argument is substituted into the macro body. +(The ANSI standard says that calls must be expanded after substitution, but +some compilers do it the other way.) + +<li>Don't use macro names, even inadvertently, in string constants. Some +compilers erroneously try to expand them. + +<li>Don't use macros to define shorthands for casted pointers. For +instance, avoid + +<blockquote><b><tt> +#define fdev ((gx_device_fubar *)dev) +</tt></b></blockquote> + +<p> +and instead use + +<blockquote><b><tt> +gx_device_fubar * const fdev = (gx_device_fubar *)dev; +</tt></b></blockquote> + +<p> +The use of <b><tt>const</tt></b> alerts the reader that this is effectively +a synonym. + +<li>If a macro generates anything larger than a single expression (that is, +one or more statements), surround it with <b><tt>BEGIN</tt></b> and +<b><tt>END</tt></b>. These work around the fact that simple statements and +compound statements in C can't be substituted for each other syntactically. + +</ul> + +<h3><a name="Preprocessor_other"></a>Other</h3> + +<p> +Restrictions: + +<ul> + +<li>Only use <b><tt>#pragma</tt></b> in files that are explicitly identified +as being platform-dependent. Many compilers complain if this is used at +all, and some complain if they don't recognize the specific pragma being +requested (both incorrect according to the ANSI standard). + +</ul> + +<h3><a name="Lexical_elements"></a>Lexical elements</h3> + +<p> +Do not use: + +<ul> + +<li>ANSI trigraphs (??x) +<li>Nested comments (/* /* */ */) (not ANSI compliant, but often accepted) +<li>Multi-character character constants ('abc') +<li>Wide-character character or string constants (L'x', L"x") + +</ul> + +<p> +Restrictions: + +<ul> + +<li>Procedure and static variable names must be 31 characters or less. + +<li>Externally visible procedure and variable names must be unique in the +first 23 characters. + +</ul> + +<h3><a name="Scoping"></a>Scoping (extern, static, ...)</h3> + +<p> +Do not use: + +<ul> + +<li><b><tt>register</tt></b> + +</ul> + +<p> +Restrictions: + +<ul> + +<li>Do not allow a global variable (constant) to have more than one +non-<b><tt>extern</tt></b> definition, even though some ANSI C compilers +allow this. Every global constant should have exactly one definition, in a +<b><tt>.c</tt></b> file, and preferably just one <b><tt>extern</tt></b> +declaration, in a header file. + +<li>Use <b><tt>private</tt></b> instead of <b><tt>static</tt></b> for +procedures and variables declared at the outermost scope of a file. This +allows making such constructs either visible or invisible to profilers by +changing a single <b><tt>#define</tt></b>. + +<li><b><tt>static</tt></b> or <b><tt>private</tt></b> variables must be +<b><tt>const</tt></b> and initialized: non-<b><tt>const</tt></b> statically +allocated variables are incompatible with reentrancy, and we're in the +process of eliminating all of them. + +<li>Do not use <b><tt>extern</tt></b> in <b><tt>.c</tt></b> files, only in +<b><tt>.h</tt></b> files, unless you have a very good reason for it (e.g., +as in <a href="../src/iconf.c">iconf.c</a>). There are too many such +<b><tt>extern</tt></b>s in the code now: we are eliminating them over time. + +<li>Do not declare the same name as both <b><tt>static</tt></b> +(<b><tt>private</tt></b>) and non-<b><tt>static</tt></b> within the same +compilation. (Some compilers complain, some do not.) This is especially a +problem for procedures: it is easy to declare a procedure as +<b><tt>private</tt></b> near the beginning of a file and accidentally not +declare it <b><tt>private</tt></b> where it is defined later in the file. + +<li>Even though the ANSI standard allows initialized external declarations +(<b><tt>extern int x = 0</tt></b>), don't use them. + +</ul> + +<h3><a name="Scalars"></a>Scalars</h3> + +<p> +Restrictions: + +<ul> + +<li>Avoid using <b><tt>char</tt></b>, except for <b><tt>char *</tt></b> +for a pointer to a string. Don't assume that <b><tt>char</tt></b> is +signed; also don't assume it is unsigned. + +<li>Never cast a <b><tt>float</tt></b> to a <b><tt>double</tt></b> +explicitly. ANSI compilers in their default mode do all floating point +computations in double precision, and handle such casts automatically. + +<li>Don't use <b><tt>long long</tt></b>: even though it is in the ANSI +standard, not all compilers support it. Use <b><tt>bits64</tt></b> instead +(see below under "<a href="#Language_extensions">Language extensions</a>"). + +<li>Don't assume anything about whether <b><tt>sizeof(long)</tt></b> is less +than, equal to, or greater than <b><tt>sizeof(ptr)</tt></b>. (However, you +can make such comparisons in preprocessor conditionals using +<b><tt>ARCH_SIZEOF_LONG</tt></b> and <b><tt>ARCH_SIZEOF_PTR</tt></b>.) + +</ul> + +<h3><a name="Arrays"></a>Arrays</h3> + +<p> +Restrictions: + +<ul> + +<li>Don't declare arrays of size 0. (The newer ANSI standard allows this, +but the older one doesn't.) + +<li>Don't declare an array of size 1 at the end of a structure to indicate +that a variable-size array follows. + +<li>Don't declare initialized <b><tt>auto</tt></b> arrays. + +</ul> + +<h3><a name="Typedefs"></a>Typedefs</h3> + +<p> +Restrictions: + +<ul> + +<li>Don't use <b><tt>typedef</tt></b> for function types, such as + +<blockquote> +<b><tt>typedef int proc_xyz_t(double, int *);</tt></b> +</blockquote> + +<p>Many compilers don't handle this correctly -- they will give errors, or +do the wrong thing, when declaring variables of type +<b><tt>proc_xyz_t</tt></b> and/or <b><tt>proc_xyz_t *</tt></b>. Instead, do +this: + +<blockquote> +<b><tt>#define PROC_XYZ(proc) int proc(double, int *)<br> +PROC_XYZ(some_proc); /* declare a procedure of this type */<br> +typedef PROC_XYZ((*proc_xyz_ptr_t)); /* define a type for procedure ptrs */<br> +<br> +proc_xyz_ptr_t pp; /* pointer to procedure */</tt></b> +</blockquote> + +<li>Don't redefine <b><tt>typedef</tt></b>'ed names, even with the same +definition. Some compilers complain about this, and the standard doesn't +allow it. + +</ul> + +<h3><a name="Structures"></a>Structures</h3> + +<p> +Restrictions: + +<li>Don't use anonymous structures if you can possibly avoid it, except +occasionally as components of other structures. Ideally, use the +<b><tt>struct</tt></b> keyword only for declaring named structure types, +like this: + +<blockquote> +<b><tt>typedef struct xxx_s {</tt></b><br> + ... members ...<br> +<b><tt>} xxx_t;</tt></b> +</blockquote> + +<li>Use <b><tt>struct</tt></b> only when declaring structure types, never +for referring to them (e.g., never declare a variable as type +<b><tt>struct xxx_s *</tt></b>). + +<li>Don't assume that the compiler will (or won't) insert padding in +structures to align members for best performance. To preserve alignment, +only declare structure members that are narrower than an <b><tt>int</tt></b> +if there will be a lot of instances of that structure in memory. For such +structures, insert <b><tt>byte</tt></b> and/or <b><tt>short</tt></b> padding +members as necessary to re-establish <b><tt>int</tt></b> alignment. + +<li>Don't declare initialized <b><tt>auto</tt></b> structures. + +</ul> + +<h3><a name="Unions"></a>Unions</h3> + +<p> +Restrictions: + +<ul> + +<li>Use unions only as components of structures, not as typedefs in their +own right. + +<li>Don't attempt to initialize unions: not all compilers support this, even +though it is in the 1989 ANSI standard. + +</ul> + +<h3><a name="Expressions"></a>Expressions</h3> + +<p> +Restrictions: + +<ul> + +<li>Don't assign a larger integer data type to a smaller one without a cast +(<b><tt>int_x = long_y</tt></b>). + +<li>It's OK to use the address of a structure or array element +(<b><tt>&p->e</tt></b>, <b><tt>&a[i]</tt></b>) locally, or pass it to a +procedure that won't store it, but don't store such an address in allocated +storage unless you're very sure of what you're doing. + +<li>Don't use conditional expressions with structure or union values. +(Pointers to structures or unions are OK.) + +<li>For calling a variable or parameter procedure, use +<b><tt>ptr->func(...)</tt></b>. Some old code uses explicit indirection, +<b><tt>(*ptr->func)(...)</tt></b>: don't use this in new code. + +<li>Don't write expressions that depend on order of evaluation, unless the +order is created explicitly by use of <b><tt>||</tt></b>, +<b><tt>&&</tt></b>, <b><tt>?:</tt></b>, <b><tt>,</tt></b>, or +function nesting (the arguments of a function must be evaluated before the +function is called). In particular, don't assume that the arguments of a +function will be evaluated left-to-right, or that the left side of an +assignment will be evaluated before the right. + +<li>Don't mix integer and enumerated types ad lib: treat enumerated types as +distinct from integer types, and use casts to convert between the two. +(Some compilers generate warnings if you do not do this.) + +</ul> + +<h3><a name="Statements"></a>Statements</h3> + +<p> +Restrictions: + +<ul> + +<li>If you use an expression as a statement, other than an assignment or a +function call with <b><tt>void</tt></b> return value, enclose it explicitly +in <b><tt>DISCARD()</tt></b>. + +<li>The type of the operand of a <b><tt>switch</tt></b> must match the type +of the case labels, whether the labels are <b><tt>int</tt></b>s or the +members of an <b><tt>enum</tt></b> type. (Use a cast if necessary.) + +<li>It is OK for one case of a switch to "fall through" into another (i.e., +for the statement just before a case label not to be a control transfer), +but a comment <b><tt>/* falls through */</tt></b> is +required. + +<li>If you are returning an error code specified explicitly (e.g., +<b><tt>return gs_error_rangecheck</tt></b> or +<b><tt>return e_rangecheck</tt></b>), use +<b><tt>return_error()</tt></b> rather than plain <b><tt>return</tt></b>. +However, if the program is simply propagating an error code generated +elsewhere, as opposed to generating the error, use <b><tt>return</tt></b> +(e.g., <b><tt>if (code < 0) return code</tt></b>). + +</ul> + +<h3><a name="Procedures"></a>Procedures</h3> + +<p> +Restrictions: + +<ul> + +<li>Provide a prototype for every procedure, and make sure the prototype is +available at every call site. If the procedure is local to a file +(<b><tt>private</tt></b>), the prototype should precede the procedure, in +the same file; if the procedure is global, the prototype should be in a +header file. + +<li>If a procedure parameter is itself a procedure, do list its parameter +types rather than just using <b><tt>()</tt></b>. For example, + +<blockquote><b><tt> +int foo(int (*callback)(int, int)); +</tt></b></blockquote> + +<p> +rather than just + +<blockquote><b><tt> +int foo(int (*callback)()); +</tt></b></blockquote> + +<li>Don't use the <b><tt>P</tt></b>* macros in new code. (See the +Procedures section of <a href="#Language_extensions">Language extensions</a> +below for more information.) + +<li>Always provide an explicit return type for procedures, in both the +prototype and the definition: don't rely on the implicit declaration as +<b><tt>int</tt></b>. + +<li>Don't use <b><tt>float</tt></b> as the return type of a procedure, +unless there's a special reason. Floating point hardware typically does +everything in double precision internally and has to do extra work to +convert between double and single precision. + +<li>Don't declare parameters as being of type <b><tt>float</tt></b>, +<b><tt>short</tt></b>, or <b><tt>char</tt></b>. If you do this and forget +to include the prototype at a call site, ANSI compilers will generate +incompatible calling sequences. Use <b><tt>floatp</tt></b> (a synonym for +<b><tt>double</tt></b>, mnemonic for "float parameter") instead of +<b><tt>float</tt></b>, and use <b><tt>int</tt></b> or <b><tt>uint</tt></b> +instead of <b><tt>short</tt></b> or <b><tt>char</tt></b>. + +</ul> + +<h3><a name="Standard_library"></a>Standard library</h3> + +<p> +Restrictions: + +<ul> + +<li>Only use library features that are documented in the established ANSI +standard (e.g., Harbison & Steele's book). Do not use procedures that are +"standards" promulgated by Microsoft (e.g., <b><tt>stricmp</tt></b>), or +originate in BSD Unix (e.g., <b><tt>strcasecmp</tt></b>), or were added in +later versions of the standard such as C 9X. + +<li>Do not use any features from <b><tt>stdio.h</tt></b> that assume the +existence of <b><tt>stdin</tt></b>, <b><tt>stdout</tt></b>, or +<b><tt>stderr</tt></b>. See <a href="../src/gsio.h">gsio.h</a> for the full +list. Instead, use <b><tt>gs_stdin</tt></b> et al. + +</ul> + +<hr> + +<h2><a name="Language_extensions"></a>Language extensions</h2> + +<h3>Scoping</h3> + +<dl> + +<dt><b><tt>inline</tt></b> + +<dd><b><tt>inline</tt></b> is available even if the compiler does not +support it. Be aware, however, that it may have no effect. In particular, +do not use <b><tt>inline</tt></b> in header files. Instead, use the +<b><tt>extern_inline</tt></b> facility described just below. + +<dt><b><tt>extern_inline</tt></b> + +<dd>Compilers that do support <b><tt>inline</tt></b> vary in how they decide +whether to (also) compile a closed-code copy of the procedure. Because of +this, putting an <b><tt>inline</tt></b> procedure in a header file may +produce multiple closed copies, causing duplicate name errors at link time. +<b><tt>extern_inline</tt></b> provides a safe way to put +<b><tt>inline</tt></b> procedures in header files, regardless of compiler. +Unfortunately, the only way we've found to make this fully portable involves +a fair amount of boilerplate. For details, please see <a +href="../src/stdpre.h">stdpre.h</a>. + +<dt><b><tt>private</tt></b> + +<dd><b>Use <tt>private</tt></b> instead of <b><tt>static</tt></b> for all +file-local procedures, and also for file-local variables defined at the +outermost level. However, use <b><tt>static</tt></b>, not +<b><tt>private</tt></b>, for variables defined within a procedure. + +<p> +<b><tt>private</tt></b> is normally #define'd as <b><tt>static</tt></b>. +However, it can also be #define'd as empty, which allows profilers to +measure all procedures, and 'nm' to list all interesting statically +allocated variables, not just public ones. + +</dl> + +<h3>Scalar types</h3> + +<dl> + +<dt><b><tt>bool, true, false</tt></b> + +<dd><b><tt>bool</tt></b> is intended as a Boolean type, with canonical +values <b><tt>true</tt></b> and <b><tt>false</tt></b>. In a more reasonable +language, such as Java, <b><tt>bool</tt></b> is an enumerated type requiring +an explicit cast to or from <b><tt>int</tt></b>; however, because C's +conditionals are defined as producing <b><tt>int</tt></b> values, we can't +even define <b><tt>bool</tt></b> as a C <b><tt>enum</tt></b> without +provoking compiler warnings. + +<p> +Even though <b><tt>bool</tt></b> is a synonym for <b><tt>int</tt></b>, treat +them as conceptually different types: + +<ul> +<li>Initialize or set <b><tt>bool</tt></b> variables to <b><tt>true</tt></b> +or <b><tt>false</tt></b>, not 0 or 1. +<li>Use the Boolean operators <b><tt>!</tt></b>, <b><tt>&&</tt></b>, +and <b><tt>||</tt></b> only with Booleans. Don't use the idiom +<b><tt>!!x</tt></b> to create a Boolean that is true iff <b><tt>x</tt></b> +!= 0: use <b><tt>x != 0</tt></b>. +<li>Use an explicit <b><tt>(int)</tt></b> cast to convert a Boolean to an +integer. +</ul> + +<dt><b><tt>byte, ushort, uint, ulong</tt></b> + +<dd>These types are simply shorthands for <b><tt>unsigned char, short, int, +long</tt></b>. + +<dt><b><tt>floatp</tt></b> + +<dd>This is a synonym for <b><tt>double</tt></b>. It should be used for, +and only for, procedure parameters that would otherwise be +<b><tt>float</tt></b>. (As noted above, procedure parameters should not be +declared as <b><tt>float</tt></b>.) + +<dt><b><tt>bits8, bits16, bits32</tt></b> + +<dd>These are unsigned integer types of the given width. Use them wherever +the actual width matters: do <em>not</em>, for example, use +<b><tt>short</tt></b> assuming that it is 16 bits wide. + +<dt><b><tt>bits64</tt></b> + +<dd><strong>****** NOT IMPLEMENTED YET ******</strong> +This is an unsigned 64-bit integer type, but it may not be available on all +platforms. Any code that uses this type should be surrounded by +<b><tt>#if ARCH_HAS_BITS64</tt></b>. + +</dl> + +<h3>Procedures</h3> + +<dl> + +<dt><b><tt>P0(), P1(p1), ..., P16(p1, ..., p16)</tt></b> [deprecated] + +<dd>Nearly all existing code uses these macros for the parameter lists of +procedure prototypes, e.g., +<b><tt>int proc(P2(int a, int b))</tt></b>, to provide +compatibility with pre-ANSI, a.k.a. "traditional" or "K & R", compilers. +Since only ANSI compilers are now supported, don't use these macros in new +code: use the ANSI standard syntax +<b><tt>int proc(int a, int b)</tt></b>. + +</dl> + +<hr> + +<h2><a name="Stylistic_conventions"></a>Stylistic conventions</h2> + +<p> +Ghostscript's coding rules cover not only the use of the language, but also +many stylistic issues like the choice of names and the use of whitespace. +The stylistic rules are meant to produce code that is easy to read. It's +important to observe them as much as possible in order to maintain a +consistent style, but if you find these rules getting in your way or +producing ugly-looking results once in a while, it's OK to break it. + +<h3><a name="Formatting"></a>Formatting</h3> + +<h4><a name="Indentation"></a>Indentation</h4> + +<p> +We've formatted all of our code using the GNU <b><tt>indent</tt></b> program. + +<blockquote><b><tt> +indent -bad -nbap -nsob -br -ce -cli4 -npcs -ncs \<br> + -i4 -di0 -psl -lp -lps somefile.c +</tt></b></blockquote> + +<p> +does a 98% accurate job of producing our preferred style. Unfortunately, +there are bugs in all versions of GNU <b><tt>indent</tt></b>, requiring +both pre- and post-processing of the code. The <b><tt>gsindent</tt></b> +script in the Ghostscript fileset contains the necessary workarounds. + +<p> +Put indentation points every 4 spaces, with 8 spaces = 1 tab stop. + +<p> +For assignments (including chain assignments), put the entire statement on +one line if it will fit; if not, break it after a <b><tt>=</tt></b> and +indent all the following lines. I.e., format like this: + +<blockquote> +var1 <b><tt>=</tt></b> value<b><tt>;</tt></b><br> +var1 <b><tt>=</tt></b> var2 <b><tt>=</tt></b> value<b><tt>;</tt></b><br> +var1 <b><tt>=</tt></b><br> + value<b><tt>;</tt></b><br> +var1 <b><tt>=</tt></b><br> + var2 <b><tt>=</tt></b> value<b><tt>;</tt></b><br> +var1 <b><tt>=</tt></b> var2 <b><tt>=</tt></b><br> + value<b><tt>;</tt></b> +</blockquote> + +<p> +But not like this: + +<blockquote> +var1 <b><tt>=</tt></b><br> +var2 <b><tt>=</tt></b> value<b><tt>;</tt></b> +</blockquote> + +<p> +Indent in-line blocks thus: + +<blockquote> +<b><tt>{</tt></b><br> + ... declarations ...<br> + {{ blank line if any declarations above }}<br> + ... statements ...<br> +<b><tt>}</tt></b> +</blockquote> + +<p> +Similarly, indent procedures thus: + +<blockquote> +return_type<br> +proc_name(... arguments ...)<br> +<b><tt>{</tt></b><br> + ... declarations ...<br> + {{ blank line if any declarations above }}<br> + ... statements ...<br> +<b><tt>}</tt></b> +</blockquote> + +<p> +If a control construct (<b><tt>if</tt></b>, <b><tt>do</tt></b>, +<b><tt>while</tt></b>, or <b><tt>for</tt></b>) has a one-line body, use +this: + +<blockquote> +... control construct ...<br> + ... subordinate simple statement ... +</blockquote> + +<p> +If it has a multi-line body, use this: + +<blockquote> +... control construct ... <b><tt>{</tt></b><br> + ... subordinate code ...<br> +<b><tt>}</tt></b> +</blockquote> + +<p> +If the subordinate code has declarations, see blocks above. + +<p> +For if-else statements, do this: + +<blockquote> +<b><tt>if (</tt></b> ...<b><tt> ) {</tt></b><br> + ... subordinate code ...<br> +<b><tt>} else if (</tt></b> ...<b><tt> ) {</tt></b><br> + ... subordinate code ...<br> +<b><tt>} else {</tt></b><br> + ... subordinate code ...<br> +<b><tt>}</tt></b> +</blockquote> + +<p> +When there are more than two alternatives, as in the example above, use the +above ("parallel") syntax rather than the following ("nested") syntax: + +<blockquote> +<b><tt>if (</tt></b> ...<b><tt> ) {</tt></b><br> + ... subordinate code ...<br> +<b><tt>} else {</tt></b><br> +<b><tt> if (</tt></b> ...<b><tt> ) {</tt></b><br> + ... subordinate code ...<br> +<b><tt> } else {</tt></b><br> + ... subordinate code ...<br> +<b><tt> }</tt></b><br> +<b><tt>}</tt></b> +</blockquote> + +<p> +Similarly, for do-while statements, do this: + +<blockquote> +<b><tt>do {</tt></b><br> + ... body ...<br> +<b><tt>} while (</tt></b> ... condition ... <b><tt>);</tt></b> +</blockquote> + +<h4><a name="Spaces"></a>Spaces</h4> + +<p> +Do put a space: +<ul> +<li>after every comma and semicolon, unless it ends a line; +<li>around every binary operator other than "<b><tt>-></tt></b>" and +"<b><tt>.</tt></b>", although you can omit the spaces around the innermost +operator in a nested expression if you like; +<li>on both sides of the parentheses of an <b><tt>if</tt></b>, <b><tt>for</tt></b>, or <b><tt>while</tt></b>. +</ul> + +<p> +Don't put a space: +<ul> +<li>at the end of a line; +<li>before a comma or semicolon; +<li>after unary prefix operators; +<li>before the parenthesis of a macro or procedure call. +</ul> + +<h4><a name="Parentheses"></a>Parentheses</h4> + +<p> +Parentheses are important in only a few places: + +<ul> +<li>Around the inner subexpressions in expressions that mix +<b><tt>&&</tt></b> and <b><tt>||</tt></b>, even if they are not +required by precedence, for example + +<blockquote><b><tt> +(xx && yy) || zz +</tt></b></blockquote> + +<li>Similarly around inner subexpressions in expressions that mix +<b><tt>&</tt></b>, <b><tt>|</tt></b>, or shifts, especially if mixing +these with other operators, for instance + +<blockquote><b><tt> +(x << 3) | (y >> 5) +</tt></b></blockquote> + +<li>In macro definitions around every use of an argument that logically +could be an expression, for example + +<blockquote><b><tt> +((x) * (x) + (y) * (y)) +</tt></b></blockquote> + +</ul> + +<p> +Anywhere else, given the choice, use fewer parentheses. + +<p> +For stylistic consistency with the existing Ghostscript code, put +parentheses around conditional expressions even if they aren't +syntactically required, unless you really dislike doing this. Note that +the parentheses should go around the entire expression, not the condition. +For instance, instead of + +<blockquote><b><tt> +hpgl_add_point_to_path(pgls, arccoord_x, arccoord_y,<br> + (pgls->g.pen_down) ? gs_lineto : gs_moveto); +</tt></b></blockquote> + +<p> +use + +<blockquote><b><tt> +hpgl_add_point_to_path(pgls, arccoord_x, arccoord_y,<br> + (pgls->g.pen_down ? gs_lineto : gs_moveto)); +</tt></b></blockquote> + +<h3><a name="Preprocessor_style"></a>Preprocessor</h3> + +<h4>Conditionals</h4> + +<p> +Using preprocessor conditionals can easily lead to unreadable code, since +the eye really wants to read linearly rather than having to parse the +conditionals just to figure out what code is relevant. It's OK to use +conditionals that have small scope and that don't change the structure or +logic of the program (typically, they select between different sets of +values depending on some configuration parameter), but where possible, break +up source modules rather than use conditionals that affect the structure or +logic. + +<h4>Macros</h4> + +<p> +Ghostscript code uses macros heavily to effectively extend the rather +weak abstraction capabilities of the C language, specifically in the area of +memory management and garbage collection: in order to read Ghostscript code +effectively, you simply have to learn some of these macros as though they +were part of the language. The current code also uses macros heavily for +other purposes, but we are trying to phase these out as rapidly as possible, +because they make the code harder to read and debug, and to use the +rules that follow consistently in new code. + +<p> +Define macros in the smallest scope you can manage (procedure, file, or +<b><tt>.h</tt></b> file), and <b><tt>#undef</tt></b> them at the end of +that scope: that way, someone reading the code can see the definitions +easily when reading the uses. If that isn't appropriate, define them in as +large a scope as possible, so that they effectively become part of the +language. This places an additional burden on the reader, but it can be +amortized over reading larger amounts of code. + +<p> +Try hard to use procedures instead of macros. Use "<b><tt>inline</tt></b>" +if you really think the extra speed is needed, but only within a +<b><tt>.c</tt></b> file: don't put inline procedures in <b><tt>.h</tt></b> +files, because most compilers don't honor "<b><tt>inline</tt></b>" and +you'll wind up with a copy of the procedure in every <b><tt>.c</tt></b> +file that includes the <b><tt>.h</tt></b> file. + +<p> +If you define a macro that looks like a procedure, make sure it will work +wherever a procedure will work. In particular, put parentheses around every +use of an argument within the macro body, so that the macro will parse +correctly if some of the arguments are expressions, and put parentheses +around the entire macro body. (This is still subject to the problem that an +argument may be evaluated more than once, but there is no way around this in +C, since C doesn't provide for local variables within expressions.) + +<p> +If you define macros for special loop control structures, make their uses +look somewhat like ordinary loops, for instance: + +<blockquote> +<b><tt>BEGIN_RECT(xx, yy) {</tt></b><br> + ... body indented one position ...<br> +<b><tt>} END_RECT(xx, yy);</tt></b> +</blockquote> + +<p> +If at all possible, don't use free variables in macros -- that is, variables +that aren't apparent as arguments of the macro. If you must use free +variables, list them all in a comment at the point where the macro is +defined. + +<h3><a name="Comments"></a>Comments</h3> + +<p> +The most important descriptive comments are ones in header files that +describe structures, including invariants; but every procedure or structure +declaration, or group of other declarations, should have a comment. Don't +spend a lot of time commenting executable code unless something unusual or +subtle is going on. + +<h3><a name="Naming"></a>Naming</h3> + +<p> +Use fully spelled-out English words in names, rather than contractions. +This is most important for procedure and macro names, global variables and +constants, values of <b><tt>#define</tt></b> and <b><tt>enum</tt></b>, +<b><tt>struct</tt></b> and other <b><tt>typedef</tt></b> names, and +structure member names, and for argument and variable names which have +uninformative types like <b><tt>int</tt></b>. It's not very important for +arguments or local variables of distinctive types, or for local index or +count variables. + +<p> +Avoid names that run English words together: +"<b><tt>hpgl_compute_arc_center</tt></b>" is better than +"<b><tt>hpgl_compute_arccenter</tt></b>". However, for terms drawn from +some predefined source, like the names of PostScript operators, use a term +in its well-known form (for instance, <b><tt>gs_setlinewidth</tt></b> +rather than <b><tt>gs_set_line_width</tt></b>). + +<p> +Procedures, variables, and structures visible outside a single +<b><tt>.c</tt></b> file should generally have prefixes that indicate what +subsystem they belong to (in the case of Ghostscript, <b><tt>gs_</tt></b> +or <b><tt>gx_</tt></b>). This rule isn't followed very consistently. + +<h3><a name="Types"></a>Types</h3> + +<p> +Many older structure names don't have <b><tt>_t</tt></b> on the end, but +this suffix should be used in all new code. (The <b><tt>_s</tt></b> +structure name is needed only to satisfy some debuggers. No code other than +the structure declaration should refer to it.) + +<p> +Declare structure types that contain pointers to other instances of +themselves like this: + +<blockquote> +<b><tt>typedef struct xxx_s xxx_t;</tt></b><br> +<b><tt>struct xxx_s {</tt></b><br> + ... members ...<br> + <b><tt>xxx_t *</tt></b>ptr_member_name;<br> + ... members ...<br> +<b><tt>};</tt></b> +</blockquote> + +<p> +If, to maintain data abstraction and avoid including otherwise unnecessary +header files, you find that you want the type <b><tt>xxx_t</tt></b> to be +available in a header file that doesn't include the definition of the +structure <b><tt>xxx_s</tt></b>, use this approach: + +<blockquote> +<b><tt>#ifndef xxx_DEFINED</tt></b><br> +<b><tt># define xxx_DEFINED</tt></b><br> +<b><tt>typedef struct xxx_s xxx_t;</tt></b><br> +<b><tt>#endif</tt></b><br> +<b><tt>struct xxx_s {</tt></b><br> + ... members ...<br> +<b><tt>};</tt></b> +</blockquote> + +<p> +You can then copy the first 4 lines in other header files. (Don't ever +include them in an executable code file.) + +<p> +Don't bother using <b><tt>const</tt></b> for anything other than with +pointers as described below. However, in those places where it is necessary +to cast a pointer of type <b><tt>const T *</tt></b> to type +<b><tt>T *</tt></b>, always include a comment that explains why you are +"breaking const". + +<h4>Pointers</h4> + +<p> +Use <b><tt>const</tt></b> for pointer referents (that is, +<b><tt>const T *</tt></b>) wherever possible and appropriate. + +<p> +If you find yourself wanting to use <b><tt>void *</tt></b>, try to +find an alternative using unions or (in the case of super- and subclasses) +casts, unless you're writing something like a memory manager that really +treats memory as opaque. + +<h3><a name="Procedures_style"></a>Procedures</h3> + +<p> +In general, don't create procedures that are private and only called from +one place. However, if a compound statement (especially an arm of a +conditional) is too long for the eye easily to match its enclosing braces +"<b><tt>{...}</tt></b>" -- that is, longer than 10 or 15 lines -- and it +doesn't use or set a lot of state held in outer local variables, it may be +more readable if you put it in a procedure. + +<h3>Miscellany</h3> + +<h4><a name="Local_variables"></a>Local variables</h4> + +<p> +Don't assign new values to procedure parameters. It makes debugging very +confusing when the parameter values printed for a procedure are not the +ones actually supplied by the caller. Instead use a separate local +variable initialized to the value of the parameter. + +<p> +If a local variable is only assigned a value once, assign it that value at +its declaration, if possible. For example, + +<blockquote> +<b><tt>int x = </tt></b>some expression <b><tt>;</tt></b> +</blockquote> + +<p> +rather than + +<blockquote> +<b><tt>int x;</tt></b><br> +...<br> +<b><tt>x = </tt></b> some expression <b><tt>;</tt></b> +</blockquote> + +<p> +Use a local pointer variable like this to "narrow" pointer types: + +<blockquote> +<b><tt>int</tt></b><br> +someproc(... <b><tt>gx_device *dev</tt></b> ...)<br> +<b><tt>{<br> + gx_device_printer *const pdev = (gx_device_printer *)dev;</tt></b><br> + ...<br> +<b><tt>}</tt></b> +</blockquote> + +<h4><a name="Compiler_warnings"></a>Compiler warnings</h4> + +<p> +The following section refers to the warnings produced by <b><tt>gcc</tt></b>: +your compiler may produce different ones. + +<p> +It's OK if compilation produces the following warnings: + +<ul> +<li><b><tt><name> might be used uninitialized in this function</tt></b> +<li><b><tt>cast discards `const' from pointer target type</tt></b> +</ul> + +<p> +The first of these often occurs because the compiler isn't aware of control +flow restrictions that guarantee the variable will be initialized before +use: if it occurs in new code, check the code carefully, but don't worry +about the message. The second is often unavoidable in code that initializes +or frees a structure that is otherwise <b><tt>const</tt></b> during its +lifetime. +<p> + +Do work hard to eliminate all warnings other than these, +since they often indicate the possible presence of coding errors. +In particular, get rid of warnings about parameter passing or +initialization that discards <b><tt>const</tt></b>, +by using explicit casts. + +<hr> + +<h2><a name="File_structuring"></a>File structuring</h2> + +<h3><a name="All_files"></a>All files</h3> + +<p> +Keep file names within the "8.3" format for portability: +<ul> +<li>Use only letters, digits, dash, and underscore in file names. +<li>Don't assume upper and lower case letters are distinct. +<li>Put no more than 8 characters before the ".", if any. +<li>If there is a ".", put between 1 and 3 characters after the ".". +</ul> + +<p> +For files other than documentation files, use only lower case letters +in the names; for HTML documentation files, capitalize the first letter. + +<p> +Every code file should start with comments containing + +<ol> +<li>a copyright notice, +<li>the name of the file in the form of an RCS Id: + +<blockquote><b><tt> +/*Id$: filename.ext $*/ +</tt></b></blockquote> + +<p> +(using the comment convention appropriate to the language of the file), and + +<li>a summary, no more than one line, of what the file contains. +</ol> + +<p> +If you create a file by copying the beginning of another file, be sure to +update the copyright year and change the file name. + +<h3><a name="Makefiles"></a>Makefiles</h3> + +<p> +Use the extension <b><tt>.mak</tt></b> for makefiles. + +<p> +For each + +<blockquote><b><tt> +#include "xxx.h" +</tt></b></blockquote> + +<p> +make sure there is a dependency on <b><tt>$(xxx_h)</tt></b> in the +makefile. If xxx ends with a "<b><tt>_</tt></b>", this rule still holds, +so that if you code + +<blockquote><b><tt> +#include "math_.h" +</tt></b></blockquote> + +<p> +the makefile must contain a dependency on "<b><tt>$(math__h)</tt></b>" +(note the two underscores "<b><tt>__</tt></b>"). + +<p> +List the dependencies bottom-to-top, like the <b><tt>#include</tt></b> +statements themselves; within each level, list them alphabetically. Do +this also with <b><tt>#include</tt></b> statements themselves whenever +possible (but sometimes there are inter-header dependencies that require +bending this rule). + +<p> +For compatibility with the build utilities on OpenVMS, always put a space +before the colon that separates the target(s) of a rule from the dependents. + +<h3><a name="General_C_code"></a>General C code</h3> + +<p> +List <b><tt>#include</tt></b> statements from "bottom" to "top", that is, +in the following order: + +<blockquote><ol> +<li>System includes (<b><tt>"xxx_.h"</tt></b>) +<li><b><tt>gs*.h</tt></b> +<li><b><tt>gx*.h</tt></b> (yes, <b><tt>gs</tt></b> and <b><tt>gx</tt></b> +are in the wrong order.) +<li><b><tt>s*.h</tt></b> +<li><b><tt>i*.h</tt></b> (or other interpreter headers that don't start +with "<b><tt>i</tt></b>") +</ol></blockquote> + +<h3><a name="Headers"></a>Headers (<b><tt>.h</tt></b> files)</h3> + +<p> +In header files, always use the following at the beginning of a header file +to prevent double inclusion: + +<blockquote> +{{ Copyright notice etc. }}<br><br> + +<b><tt>#ifndef </tt></b><filename><b><tt>_INCLUDED</tt></b><br> +<b><tt>#define </tt></b><filename><b><tt>_INCLUDED</tt></b><br><br> + +{{ The contents of the file }}<br><br> + +<b><tt>#endif /* </tt></b><filename><b><tt>_INCLUDED */</tt></b> +</blockquote> + +<p> +The header file is the first place that a reader goes for +information about procedures, structures, constants, etc., so ensure that +every procedure and structure has a comment that says what it does. Divide +procedures into meaningful groups set off by some distinguished form of +comment. + +<h3><a name="Source"></a>Source (<b><tt>.c</tt></b> files)</h3> + +<p> +After the initial comments, arrange C files in the following order: + +<blockquote><ol> +<li><b><tt>#include</tt></b> statements +<li>Exported data declarations +<li>Explicit externs (if necessary) +<li>Forward declarations of procedures +<li>Private data declarations +<li>Exported procedures +<li>Private procedures +</ol></blockquote> + +<p> +Be flexible about the order of the declarations if necessary to improve +readability. Many older files don't follow this order, often without good +reason. + +<hr> + +<h2><a name="Conventions"></a>Ghostscript conventions</h2> + +<h3><a name="Specific_names"></a>Specific names</h3> + +<p> +The Ghostscript code uses certain names consistently for certain kinds of +values. Some of the commonest and least obvious are these two: + +<h4><a name="code"></a><b><tt>code</tt></b></h4> + +<blockquote> +A value to be returned from a procedure: + +<table cellpadding=0 cellspacing=0> +<tr valign=top> <td align=right>< 0 + <td> + <td>An error code defined in +<a href="../src/gserrors.h">gserrors.h</a> +(or <a href="../src/errors.h">errors.h</a>) +<tr valign=top> <td align=right>0 + <td> + <td>Normal return +<tr valign=top> <td align=right>> 0 + <td> + <td>A non-standard but successful return (which must be documented, preferably with the procedure's prototype) +</table> + +</blockquote> + +<h4><a name="status"></a><b><tt>status</tt></b></h4> + +<blockquote> +A value returned from a stream procedure: + +<table cellpadding=0 cellspacing=0> +<tr valign=top> <td align=right>< 0 + <td> + <td>An exceptional condition as defined in +<a href="../src/scommon.h">scommon.h</a> +<tr valign=top> <td align=right>0 + <td> + <td>Normal return (or, from the "<b><tt>process</tt></b>" procedure, means that more input is needed) +<tr valign=top> <td align=right>1 + <td> + <td>More output space is needed (from the "<b><tt>process</tt></b>" procedure) +</table> +</blockquote> + +<h3><a name="Structure_type_descriptors"></a>Structure type descriptors</h3> + +<p> +The Ghostscript memory manager requires run-time type information for every +structure. (We don't document this in detail here: see the <a +href="Develop.htm#Structure_descriptors">Structure descriptors</a> section +of the developer documentation for details.) Putting the descriptor for a +structure next to the structure definition will help keep the two +consistent, so immediately after the definition of a structure +<b><tt>xxx_s</tt></b>, define its structure descriptor: + +<blockquote> +<b><tt>struct xxx_s {</tt></b><br> + ... members ...<br> +<b><tt>};</tt></b><br> +<b><tt>#define private_st_xxx() /* in </tt></b><filename><tt><b>.c */\</tt></b><br> +<b><tt> gs_private_st_</tt></b><whatever><b><tt>(st_xxx, xxx_t,\</tt></b><br> +<b><tt> "xxx_t", xxx_enum_ptrs, xxx_reloc_ptrs,\</tt></b><br> +<b><tt> </tt></b>... additional parameters as needed ...<b><tt>)</tt></b> +</blockquote> + +<p> +The file that implements operations on this structure +(<filename><b><tt>.c</tt></b>) should then include, near the +beginning, the line: + +<blockquote> +<b><tt>private_st_xxx();</tt></b> +</blockquote> + +<p> +In much existing code, structure descriptors are declared as +<b><tt>public</tt></b>, which allows clients to allocate instances of the +structure directly. We now consider this bad design. Instead, structure +descriptors should always be <b><tt>private</tt></b>; the implementation +file should provide one or more procedures for allocating instances, e.g., + +<blockquote> +<b><tt>xxx_t *gs_xxx_alloc(P1(gs_memory_t *mem));</tt></b> +</blockquote> + +<p> +If it is necessary to make a structure descriptor public, it should be +declared in its clients as + +<blockquote> +<b><tt>extern_st(st_xxx);</tt></b> +</blockquote> + +<h3><a name="Objects"></a>"Objects"</h3> + +<p> +Ghostscript makes heavy use of object-oriented constructs, including +analogues of classes, instances, subclassing, and class-associated +procedures. However, these constructs are implemented in C rather than C++, +for two reasons: + +<ul> + +<li>The first Ghostscript code was written in 1986, long before C++ was +codified or was well supported by tools. Even today, C++ tools rarely +support C++ as well as C tools support C. + +<li>C++ imposes its own implementations for virtual procedures, inheritance, +run-time type information, and (to some extent) memory management. +Ghostscript requires use of its own memory manager, and also sometimes +requires the ability to change the virtual procedures of an object +dynamically. + +</ul> + +<h4>Classes</h4> + +<p> +The source code representation of a class is simply a +<b><tt>typedef</tt></b> for a C <b><tt>struct</tt></b>. See <a +href="C-style.htm#Structures">Structures</a>, above, for details. + +<h4>Procedures</h4> + +<p> +Ghostscript has no special construct for non-virtual procedures associated +with a class. In some cases, the <b><tt>typedef</tt></b> for the class is +in a header file but the <b><tt>struct</tt></b> declaration is in the +implementation code file: this provides an extra level of opaqueness, since +clients then can't see the representation and must make all accesses through +procedures. You should use this approach in new code, if it doesn't +increase the size of the code too much or require procedure calls for very +heavily used accesses. + +<p> +Ghostscript uses three different approaches for storing and accessing +virtual procedures, plus a fourth one that is recommended but not currently +used. For exposition, we assume the class (type) is named +<b><tt>xxx_t</tt></b>, it has a virtual procedure +<b><tt>void (*virtu)(P1(xxx_t *))</tt></b>, and we have a variable +declared as <b><tt>xxx_t *pxx</tt></b>. + +<ol> + +<li>The procedures are stored in a separate, constant structure of type +<b><tt>xxx_procs</tt></b>, of which <b><tt>virtu</tt></b> is a member. The +structure definition of <b><tt>xxx_t</tt></b> includes a member defined as +<b><tt>const xxx_procs *procs</tt></b> (always named +<b><tt>procs</tt></b>). The construct for calling the virtual procedure is +<b><tt>pxx->procs->virtu(pxx)</tt></b>. + +<li>The procedures are defined in a structure of type +<b><tt>xxx_procs</tt></b> as above. The structure definition of +<b><tt>xxx_t</tt></b> includes a member defined as +<b><tt>xxx_procs procs</tt></b> (always named <b><tt>procs</tt></b>). +The construct for calling the virtual procedure is +<b><tt>pxx->procs.virtu(pxx)</tt></b>. + +<li>The procedures are not defined in a separate structure: each procedure +is a separate member of <b><tt>xxx_t</tt></b>. The construct for calling +the virtual procedure is <b><tt>pxx->virtu(pxx)</tt></b>. + +<li>The procedures are defined in a structure of type +<b><tt>xxx_procs</tt></b> as above. The structure definition of +<b><tt>xxx_t</tt></b> includes a member defined as +<b><tt>xxx_procs procs[1]</tt></b> (always named +<b><tt>procs</tt></b>). The construct for calling the virtual procedure is +again <b><tt>pxx->procs->virtu(pxx)</tt></b>. + +</ol> + +<p> +Note that in approach 1, the procedures are in a shared constant structure; +in approaches 2 - 4, they are in a per-instance structure that can be +changed dynamically, which is sometimes important. + +<p> +In the present Ghostscript code, approach 1 is most common, followed by 2 +and 3; 4 is not used at all. For new code, you should use 1 or 4: that way, +all virtual procedure calls have the same form, regardless of whether the +procedures are shared and constant or per-instance and mutable. + +<h4>Subclassing</h4> + +<p> +Ghostscript's class mechanism allows for subclasses that can add data +members, or can add procedure members if approach 1 or 3 (above) is used. +Since C doesn't support subclassing, we use a convention to accomplish it. +In the example below, <b><tt>gx_device</tt></b> is the root class; it has a +subclass <b><tt>gx_device_forward</tt></b>, which in turn has a subclass +<b><tt>gx_device_null</tt></b>. First we define a macro for all the members +of the root class, and the root class type. (As for structures in general, +classes need a structure descriptor, as discussed in <a +href="#Structures">Structures</a> above: we include these in the examples +below.) + +<blockquote><b><tt> +#define gx_device_common\<br> + type1 member1;\<br> + </tt></b>...<b><tt><br> + typeN memberN<br> +<br> +typedef struct gx_device_s {<br> + gx_device_common;<br> +} gx_device;<br> +<br> +#define private_st_gx_device() /* in gsdevice.c */\<br> + gs_private_st_</tt></b><whatever><b><tt>(st_gx_device, gx_device,\<br> + "gx_device", device_enum_ptrs, device_reloc_ptrs,\<br> + </tt></b>... additional parameters as needed ...<b><tt>)</tt></b> +</tt></b></blockquote> + +<p> +We then define a similar macro and type for the subclass. + +<blockquote><b><tt> +#define gx_device_forward_common\<br> + gx_device_common;\<br> + gx_device *target<br> +<br> +typedef struct gx_device_forward_s {<br> + gx_device_forward_common;<br> +} gx_device_forward;<br> +<br> +#define private_st_device_forward() /* in gsdevice.c */\<br> + gs_private_st_suffix_add1(st_device_forward, gx_device_forward,\<br> + "gx_device_forward", device_forward_enum_ptrs, device_forward_reloc_ptrs,\<br> + gx_device, target) +</tt></b></blockquote> + +<p> +Finally, we define a leaf class, which doesn't need a macro because we don't +currently subclass it. (We can create the macro later if needed, with no +changes anywhere else.) In this particular case, the leaf class has no +additional data members, but it could have some. + +<blockquote><b><tt> +typedef struct gx_device_null_s {<br> + gx_device_forward_common;<br> +};<br> +<br> +#define private_st_device_null() /* in gsdevice.c */\<br> + gs_private_st_suffix_add0_local(st_device_null, gx_device_null,\<br> + "gx_device_null", device_null_enum_ptrs, device_null_reloc_ptrs,\<br> + gx_device_forward) +</tt></b></blockquote> + +<p> +Note that the above example is <strong>not</strong> the actual definition of +the <b><tt>gx_device</tt></b> structure type: the actual type has some +additional complications because it has a finalization procedure. See <a +href="../src/gxdevcli.h">src/gxdevcli.h</a> for the details. + +<p> +If you add members to a root class (such as <b><tt>gx_device</tt></b> in +this example), or change existing members, do this in the +<b><tt>gx_device_common</tt></b> macro, not the <b><tt>gx_device</tt></b> +structure definition. Similarly, to change the +<b><tt>gx_device_forward</tt></b> class, modify the +<b><tt>gx_device_forward_common</tt></b> macro, not the structure +definition. Only change the structure definition if the class is a leaf +class (one with no <b><tt>_common</tt></b> macro and no possibility of +subclassing), like <b><tt>gx_device_null</tt></b>. + +<h3><a name="Error_handling"></a>Error handling</h3> + +<p> +Every caller should check for error returns and, in general, propagate them +to <b>its</b> callers. By convention, nearly every procedure returns an +<b><tt>int</tt></b> to indicate the outcome of the call: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td align=right>< 0 + <td> + <td>Error return +<tr valign=top> <td align=right>0 + <td> + <td>Normal return +<tr valign=top> <td align=right>> 0 + <td> + <td>Non-error return other than the normal case +</table></blockquote> + +<p> +To make a procedure generate an error and return it, as opposed to +propagating an error generated by a lower procedure, you should use + +<blockquote> +<b><tt>return_error(</tt></b><em>error_number</em><b><tt>);</tt></b> +</blockquote> + +<p> +Sometimes it is more convenient to generate the error in one place and +return it in another. In this case, you should use + +<blockquote> +<b><tt>code = gs_note_error(</tt></b><em>error_number</em><b><tt>);</tt></b><br> +...<br> +<b><tt>return code;</tt></b> +</blockquote> + +<p> +In executables built for debugging, the <b><tt>-E</tt></b> (or +<b><tt>-Z#</tt></b>) command line switch causes <b><tt>return_error</tt></b> +and <b><tt>gs_note_error</tt></b> to print the error number and the source +file and line: this is often helpful for identifying the original cause of +an error. + +<p> +See the file <a href="../src/gserrors.h">src/gserrors.h</a> for the error +return codes used by the graphics library, most of which correspond directly +to PostScript error conditions. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + + +<p> +<small> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. +</small> + +<p> +<small>Copyright © 1996-2002 artofcode LLC. +All rights reserved.</small> + + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/CJK.htm b/Master/xemtex/doc/ghostscript/CJK.htm new file mode 100644 index 00000000000..9833db35da4 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/CJK.htm @@ -0,0 +1,497 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.or +g/TR/html4/loose.dtd"> +<html> +<head> +<title>Features to support CJK CID-keyed in Ghostscript</title> +<!-- $Id: CJK.htm,v 1.1.4.8.2.5 2003/05/17 14:38:59 giles Exp $ --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Features to support CJK CID-keyed font in Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Font_License">Font license</a> +<li><a href="#About_OCF_fonts">About OCF fonts</a> +<li><a href="#About_CID_keyed_fonts">About CID-keyed fonts</a> +<ul> + <li><a href="#About_CIDFontType0">CIDFontType 0</a> + <li><a href="#About_CIDFontType2">CJK TrueType font and CIDFontType 2</a> +</ul> +<li><a href="#About_CIDFnmap">About "CIDFnmap" of Ghostscript</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>Impatient users looking for step-by-step installation notes for +CJK fonts should check gs-cjk documents at +<a href="http://www.gyve.org/gs-cjk/supplement/"> +http://www.gyve.org/gs-cjk/supplement/</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + + + +<h2><a name="Font_license"></a>Font license</h2> +<p> +As we note in <a href="Fonts.htm#Add_fonts">"Adding your own fonts"</a>, +you have to read the license of fonts carefully. +The fact you obtain the fonts legally does not mean +always that you can use them with Ghostscript. + +Usually, outline fonts for east Asian scripts are licensed under +more restricted conditions in comparison with ASCII or Latin +fonts, because they must provide a large number of glyphs, +more than 8000 glyphs. + +For example, Adobe licenses the Asian font package for Acrobat +Reader as "solely for Acrobat Reader". So even if your system +have pre-installed Acrobat Reader, you cannot use its Asian fonts +in Ghostscript. + + +<h2><a name="About_OCF_fonts"></a>About OCF fonts</h2> +<p> +Prior to PostScript level 2015, PostScript fonts for multibyte encoded +script (Chinese, Japanese, Korean and Vietnamese etc) were implemented +as a collection of many elemental Type1/Type3 fonts and a selector. +Today these fonts are known as OCF (Original Composite Font). +Ghostscript fully supports OCF. + + +<p> +Adobe has announced that OCF is obsolete. +For details of OCF, refer<br> +<blockquote> +"CJKV Information Processing" (Ken Lunde, O'Reilly 1999) p. 281,<br> +"PostScript Language Reference Manual, third edition" p. 357 +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf" +class="offsite"> +href="http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf +</a><br> +"PostScript Language Tutorial and Cookbook, Japanese edition" (Adobe Systems, Incorporated, ASCII Corporation 1989) pp. 241-271,<br> +</blockquote> +and Technical Notes for CID-keyed fonts. + + +<h2><a name="About_CID_keyed_fonts"></a>About CID-keyed fonts</h2> +<p> +In PostScript level 2015, Adobe introduced a new font format +"CID-keyed font" for CJK scripts. +For details of the CID-keyed font format, refer<br> +<blockquote> +"PostScript Language Reference Manual, third edition"</a> p. 364 +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf</a><br> +Technical Specification #5014 "Adobe CMap and CIDFont Files Specification" +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5014.CMap_CIDFont_Spec.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/5014.CMap_CIDFont_Spec.pdf +</a><br> +Technical Specification #5092 "CID-keyed Font Technology Overview" +<a href="http://partners.adobe.com/asn/developer/pdfs/tn/5092.CID_Overview.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/5092.CID_Overview.pdf +</a><br> +</blockquote> +Ghostscript provides the basic functionalities of CID-keyed fonts, +but the "rearranged font" feature is not implemented. +The present functionalities are enough for common usage. +Some Japanese PostScript programs expect that any system that +supports CID-keyed fonts will also support "rearranged font". +Such programs do not work well with ghostscript. +Chinese and Korean scripts were never officially supplied by OCF, +so such problems are rare. + +<p> +The CID-keyed font format has a double layered structure. +The lower layer is a CID-keyed font. The public interface of the +CID-keyed font is a 16-bit CID (character identifier) number +which is given to each unique "glyph" for subsets of various scripts. +This is not a "character" code like ASCII/Unicode/etc. +Adobe specifies CIDs for CJK scripts: +Adobe-CNS1 & 2 (Traditional Chinese Hanzi glyphs), +Adobe-GB1 (Simplified Chinese Hanzi glyphs), +Adobe-Japan1 & 2 (Japanese Kana and Kanji glyphs), +Adobe-Korea1 & 2 (Hangul and Hanja glyphs), +Adobe-HongKong1 (Traditional Chinese Hanzi in HongKong), +and Adobe-Vietnam1 (Chu-Han). +The catalogues of glyphs for some CIDs are published by Adobe, +refer Technical Notes service of Adobe:<br> +<blockquote> +<a +href="http://partners.adobe.com/asn/developer/technotes/fonts.html" +class="offsite"> +http://partners.adobe.com/asn/developer/technotes/fonts.html</a> +</blockquote> + + + + +<p> +A CID-keyed font must provide the CID number interface, +but the format of the glyph data may vary:<br> +<ul> +<li>CIDFontType 0 (FontType 9, CID-keyed Type1 font),</li> +<li>CIDFontType 1 (FontType 10, CID-keyed Type3 font),</li> +<li>CIDFontType 2 (FontType 11, CID-keyed Type42 font - TrueType)</li> +</ul> + + + + + + +<p> +The higher layer is a CMap. A CMap provides a map from the multibyte +character code to the CID of corresponding glyph, under a specified +encoding system. PostScript fonts must provide a character +code interface, so a bare CID-keyed font cannot be used as normal +PostScript font without a CMap (e.g. <tt>findfont</tt>, <tt>show</tt>, +etc are not usable, however <tt>glyphshow</tt> operator is usable for +a bare CID-keyed font). +In a CID-keyed font system, the various encoding systems can be supported +by higher layer only. The lower layer is sharable. + +<p> +A CMap file is stored in the /CMap resource category and the +CID-keyed font file is stored in the /CIDFont resource category. +Several operators introduced for CID-keyed fonts assume these locations, +so CMap and CIDFont must not be stored in the /Font resource used +traditionally used by PostScript fonts. + +<p> +For "named resource category", refer +<a href="Use.htm#PS_resources">Finding PostScript Level 2 resources</a> of Ghostscript. + +<p> +Adobe distributes their official CMap (redistributable but no modification +is permitted) on O'Reilly ftp site: +<blockquote> +<a +href="ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/" +class="offsite"> +ftp://ftp.oreilly.com/pub/examples/nutshell/cjkv/adobe/</a> +</blockquote> + +To use CID-keyed font, these CMap files must be installed into the CMap +resource directory. + + + +<h3><a name="About_CIDFontType0"></a>CIDFontType 0</h2> +<p> +CIDFontType0 is the most standard CIDFont of PostScript. +It consists of two separated parts: PostScript +program and attached binary data. The glyph data is stored in attached +binary part and is dynamically accessed. In comparison with OCF, +loading a CIDFontType0 is light-weight and comsumes less memory. + +<p> +To make Ghostscript recognize a CIDFontType0 font is easy. +If the CIDFontType0 font file is installed into a directory named "CIDFont" +under GenericResourceDir (see +<a href="Use.htm#PS_resources">Finding PostScript Level 2 resources</a>), +Ghostscript will find it when searching for resources in /CIDFont category. + + + + +<h3><a name="About_CIDFontType2"></a>CJK TrueType font and CIDFontType 2</h2> +<p> +In PostScript 2010, Adobe introduced the Type42 font format +to embed a host-based TrueType font into a PostScript program. +For details of the Type42 font format, refer to +<blockquote> +The Type 42 Font Format Specification. Technical Note #5012 +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf" +class="offsite"> +"http://partners.adobe.com/asn/developer/pdfs/tn/5012.Type42_Spec.pdf +</a> +</blockquote> +CIDFontType2 is a CID extension of the Type42 font format. +If Ghostscript is compiled with +<a href="Make.htm#Features_and_devices">ttfont device</a> +and CMap files are installed, Ghostscript is capable of +handling CIDFontType2 resource embedded in PostScript program +or PDF document. +The Type42 font specification notes that Type42 is an installable font +format, but there's no font distributed in the Type42 format. +This is a big difference from the standard PostScript fonts: Type1, Type3 +and CIDFontType0. + +<p> +Ghostscript now provides "on-the-fly CIDFontType2 converter" +for CJK TrueType, similar to the "on-the-fly Type42 converter" for +Roman TrueType fonts. +This does not mean you can perfectly substitute a required PostScript +fonts by a TrueType font. CJK TrueType font often lack many +non-popular glyphs and a few popular glyphs in Adobe CID. +As a result, a TrueType font +(designed as screen font for window system) cannot be a perfect +replacement for an Adobe PostScript font +Refer <a href="CJKTTCID.htm">CJKTTCID.htm</a> for further particulars. + +<p> +The operator <b><tt>.openttcidfont</tt></b> constructs CIDFontType2 +font dictionary from a given TrueType font. <b><tt>.openttcidfont</tt></b> +requires extra CMaps for PDF available from: + +<blockquote> +<a +href="http://partners.adobe.com/asn/developer/technotes/acrobatpdf.html" +class="offsite"> +http://partners.adobe.com/asn/developer/technotes/acrobatpdf.html +</a> +</blockquote> + +The basic syntax of <b><tt>.openttcidfont</tt></b> is:<br> +<blockquote> +<b><tt><ttf_filename> .openttcidfont</tt></b><br> +</blockquote> + +<p> +When a font file in Microsoft's TrueType Collection format +(a font file with suffix <b><tt>.ttc</tt></b> + includes multiple fonts in single file) is given, +the first font in it is used by default. +To specify a font manually, index of the font should be passed +to <b><tt>.openttcidfont</b></tt>, as:<br> + +<blockquote> +<b><tt><ttc_filename> 2 .openttcidfont</tt></b><br> +</blockquote> + +<p> +Old TrueType fonts were encoded by CJK-system specific encodings +(e.g. Big5, Johab, ShiftJIS, etc) without stating what encoding +is used. +On the other hand, recent TrueType fonts are encoded by Unicode, +but included glyphs are limited to specific language. +By default, <b><tt>.openttcidfont</tt></b> detects encoding of +TrueType font and the suitable Adobe CID automatically, but if +you have trouble, these parameters should be specified manually. +To specify Adobe CID and TrueType encoding explicitly, pass a name +object as: + +<blockquote> +<b><tt><ttf_filename> /Adobe-Japan1-ShiftJIS .openttcidfont</tt></b><br> +</blockquote> + +In such syntax, Adobe-Japan1 specifies Adobe CID to be mapped, +and ShiftJIS specifies the encoding of TrueType fonts. +Currently supported Adobe CIDs are:<br> + +<blockquote> +<b><tt>Adobe-CNS1</tt></b><br> +<b><tt>Adobe-GB1</tt></b><br> +<b><tt>Adobe-Japan1</tt></b><br> +<b><tt>Adobe-Japan2</tt></b><br> +<b><tt>Adobe-Korea1</tt></b><br> +</blockquote> + +and, supported TrueType encodings are:<br> + +<blockquote> +<b><tt>Big5</tt></b><br> +<b><tt>Johab</tt></b><br> +<b><tt>PRC</tt></b><br> +<b><tt>ShiftJIS</tt></b><br> +<b><tt>Unicode</tt></b><br> +<b><tt>Wansung</tt></b><br> +</blockquote> + +In addition about on-the-fly CIDFontType2 conversion of TrueType fonts +(of Big5, PRC, ShiftJIS, Wangsung), <tt>.openttcidfont</tt> requires +more extra CMap files which are available from Asian font packages for +Adobe Acrobat Reader. See <a href="Fonts.htm#CMap_Adobe"> "Adobe +CMaps" subsection</a> of "Fonts and font facilities supplied with +Ghostscript" section. + + + +<h2><a name="About_CIDFnmap"></a>About "CIDFnmap" of Ghostscript</h2> +<p> +By applying various CMap to single CIDFont, various font resources +can be generated. To utilize this feature conveniently, "CIDFnmap" +is introduced. CIDFnmap is similar to Fontmap, but it handles resource +name of CIDFont. + +<p> +To map all /Ryumin-Light-* fonts (/Ryumin-Light-H, /Ryumin-Light-RKSJ-H +etc) derived from /Ryumin-Light CIDFont to those from /WadaMin-Regular, +following single entry works enough:<br> + +<blockquote> +<b><tt>/Ryumin-Light /WadaMin-Regular ;</tt></b><br> +</blockquote> + +Also CIDFnmap can define a resource from a file specified with full path, +it is convenient to import resource from out of Ghostscript directory tree:<br> + +<blockquote> +<b><tt>/WadaMin-Regular (/usr/lib/X11/fonts/CIDFont/WadaMin-Regular) ;</tt></b><br> +</blockquote> + +If the given file is TrueType font, CIDFnmap automatically detect it, and +execute <b><tt>.openttcidfont</tt></b>:<br> + +<blockquote> +<b><tt>/HG-MinchoL (/usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf) ;</tt></b><br> +</blockquote> + +Other operands for <b><tt>.openttcidfont</tt></b> (TTC index, CID/encoding +specification) can be specified as:<br> + +<blockquote> +<b><tt> +/HeiseiMin-W3H (/usr/openwin/lib/locale/ja/X11/fonts/TT/HeiseiMin-W3H.ttf) /Adobe-Japan2-Unicode ;<br> +</blockquote> +<blockquote> +/Ryobi-PGothic (/usr/X11R6/lib/X11/fonts/TrueType/tcgothb.ttc) 2 /Adobe-Japan1-Unicode ;<br> +</tt></b> +</blockquote> + + +<p> +For detail, please refer included sample CIDFnmap. For the sites +to get font itself, refer <a href="Fonts.htm">Fonts.htm</a>. + +<dl> +<dt>CIDFnmap.Ore</dt> +<dd> + For free CJK CIDFontType0 fonts manufactured by Adobe. +</dd> + +<dt>CIDFnmap.Bae</dt> +<dd> + For free Hangul TrueType fonts manufactured by Hwan Design Inc.. +</dd> + +<dt>CIDFnmap.ARP</dt> +<dd> + For free Simplified/Traditional Chinese TrueType fonts + manifactured by Arphic Technology. +</dd> + +<dt>CIDFnmap.Koc</dt> +<dd> + Japanese TrueType fonts and free CIDFontType0 version of them, + Kochi Mincho and Gothic. +</dd> + +<dt>CIDFnmap.Sol</dt> +<dd> + For CJK TrueType fonts bundled on Solaris 8 International edition. +</dd> + +<dt>CIDFnmap.Win</dt> +<dd> + For CJK TrueType fonts bundled on Windows. +</dd> + +<dt>CIDFnmap.CJK</dt> +<dd> + Aliasing for printer-based CJK fonts + (/HYGoThic-Medium, /MSung-Light, /Ryumin-Light, /STSong-Light, etc) + and fallback font definitions for missing fonts in PDF. +</dd> + +<dt>CIDFnmap.b5, CIDFnmap.gb, CIDFnmap.ksx, CIDFnmap.sj</dt> +<dd> + Aliasing locale-specific CIDFontNames which are often required + with multi-byte encoding in PS/PDF files. +</dd> + +</dl> + + +<b>NOTE:</b> +In gs7.2x and later release, +"CIDFnmap" feature will be merged into new mapping feature: +"cidfmap" and "CIDFnmap" itself will be removed. + + +<p> +There are CJK samples in <b><tt>examples/cjk</tt></b>: +<b><tt> +all_ac1.ps, all_ag1.ps, all_aj1.ps, all_aj2.ps, all_ak1.ps +</tt></b> +(drawing all glyphs in Adobe CID for Traditional Chinese, +Simplified Chinese, Japanese, Japanese Hojo Kanji, Korean) +<b><tt> +gscjk_ac.ps, gscjk_ag.ps, gscjk_aj.ps, gscjk_ak.ps +</tt></b> +(drawing short texts in horizontal and vertical writing modes) +and multilingual sample <b><tt>iso2022.ps</tt></b> +(this sample loads many fonts for various scripts, quite heavy). +<b><tt>gscjk_*</tt></b> samples are written in Asian character encoding and +iso2022.ps is in ISO-2022, not pure ASCII. +To modify them, an internationalized or binary capable editor +are recommended. + +<p> +For proofing by PostScript printers (for Asian market), +these samples use standard printer-based CJK fonts: +/HYGoThic-Medium, /MSung-Light, /Ryumin-Light, /STSong-Light etc. +To display them correctly by Ghostscript, +printer-based fonts must be aliased to available fonts on Ghostscript. +CIDFnmap.CJK lists known printer-based CJK fonts, +modify it for your own environment. + + + + + +<p> +This section by Suzuki Toshiya and gs-cjk project. +<<a href="mailto:mpsuzuki@gyve.org">mpsuzuki@gyve.org</a>> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<font size=2> + +<p>Copyright © 2001 gs-cjk project +<<a href="http://www.gyve.org/gs-cjk/">http://www.gyve.org/gs-cjk/</a>>. +<p>Copyright © 2002 artofocode LLC. All rights reserved. + +<p>This file is part of GNU Ghostscript. See the +<a href="COPYING">GNU General Public License</a> (the "License") for +full details of the terms of using, copying, modifying, and redistributing +GNU Ghostscript. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +</font> + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/CJKTTCID.htm b/Master/xemtex/doc/ghostscript/CJKTTCID.htm new file mode 100644 index 00000000000..c777bc5b557 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/CJKTTCID.htm @@ -0,0 +1,409 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Adobe CIDs and glyphs in CJK TrueType font</title> +<!-- $Id: CJKTTCID.htm,v 1.1.4.8.2.5 2003/05/17 14:38:59 giles Exp $ --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Adobe CIDs and glyphs in CJK TrueType font</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Overview">Overview</a></li> +<li><a href="#Notes">Adobe CIDs that current Ghostscript can fills by CJK TTF</a></li> +<li><a href="#References">References</a></li> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +This article is written by Taiji Yamada +<<a href="mailto:taiji@aihara.co.jp">taiji@aihara.co.jp</a>>. +He takes full responsibility for the wording and content of this article. + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + + +<h2><a name="Overview"></a>Overview</h2> + +<p> +This note provides information on utilization of CJK (Chinese, +Japanese and Korean) TrueType fonts (TTF) as CIDFoneType 2 (Type11) +CID-keyed fonts from the viewpoint of its validity and limitation. +In order to compose CIDFontType 2 font from CJK TTF on the fly, +Ghostscript uses not only standard CMaps (mapping from character +encoding to CID, we call them ToCID CMaps in following) but also +ToUnicode CMaps (mapping from CID to Unicode) and +ToCode CMaps (mapping from CID to non-Unicode character encodings) +which are freely distributed with Acrobat Reader by Adobe Systems +Incorporated. + +For detail of ToUnicode CMaps, refer +<blockquote> +Adobe Systems Incorporated, +"PDF Reference, Third Edition, Version 1.4", +p. 368 +<a +href="http://partners.adobe.com/asn/developer/acrosdk/docs/filefmtspecs/PDFReference.zip" +class="offsite"> +http://partners.adobe.com/asn/developer/acrosdk/docs/filefmtspecs/PDFReference.zip +</a><br> +Adobe Systems Incorporated, +"ToUnicode Mapping File Tutorial", +Technical Note #5411</a><br> +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5411.ToUnicode.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/5411.ToUnicode.pdf</a><br> +</blockquote> +ToUnicode and ToCode CMaps are designed for text-searching in PDF, +and you should not expect Adobe ToUnicode CMap as a one-to-one map +between Adobe glyph collection and glyph/character in Unicode. + +The current algorithm of Ghostscript to map CIDs to TTF glyph ID +completely depends on Adobe CMaps, TrueType cmap and GSUB tables. + +<p> +The current revision of on-the-fly CIDFontType 2 technology +supports the following kinds Registry-Ordering (RO) of CID-keyed +fonts: + +<tt><pre> + [RO] + Adobe-CNS1 + Adobe-GB1 + Adobe-Japan1 + Adobe-Japan2 + Adobe-Korea1 +</pre></tt><br> + +and doesn't support the following kinds of CID-keyed fonts:<br> + +<tt><pre> + [RO] + Adobe-CNS2 + Adobe-HongKong1 + Adobe-Korea2 + Adobe-Vietnam1 +</pre></tt><br> + +The current revision can handle the following kinds (Encoding in cmap +table) of TrueType fonts as CID-keyed fonts:<br> + +<tt><pre> + [Encoding] [RO] + Unicode Adobe-* + ShiftJIS Adobe-Japan1 + PRC Adobe-GB1 + Big5 Adobe-CNS1 + Wansung Adobe-Korea1 + Johab Adobe-Korea1 +</pre></tt><br> + +and doesn't support UCS-4 Encoding TrueType fonts for the present. In +the case of Unicode Encoding, RO can be detected by reading ``Code +Page Character Range'' of OS/2 table of TTF as follows:<br> + +<tt><pre> + [Encoding] [Code Page] [RO] + Unicode Japanese Adobe-Japan1 + Simplified Chinese Adobe-GB1 + Korean Wansung Adobe-Korea1 + Traditional Chinese Adobe-CNS1 + Korean Johab Adobe-Korea1 +</pre></tt><br> + +For each combination of RO and TTF Encoding, following Adobe CMaps are +applied:<br> + +<tt><pre> + [RO-Encoding] [Supplement limit] + [used CMap] - [Comment] + + Adobe-CNS1-Big5 0 + Adobe-CNS1-ETen-B5 - ToCode CMap + ETen-B5-V - ToCID CMap + ETen-B5-H - ToCID CMap + + Adobe-CNS1-Unicode 3 + Adobe-CNS1-UCS2 - ToUnicode CMap + UniCNS-UCS2-V - ToCID CMap + UniCNS-UCS2-H - ToCID CMap + + Adobe-GB1-PRC 2 + Adobe-GB1-GBK-EUC - ToCode CMap + GBK-EUC-V - ToCID CMap + GBK-EUC-H - ToCID CMap + + Adobe-GB1-Unicode 4 + Adobe-GB1-UCS2 - ToUnicode CMap + UniGB-UCS2-V - ToCID CMap + UniGB-UCS2-H - ToCID CMap + + Adobe-Japan1-ShiftJIS 2 + Adobe-Japan1-90ms-RKSJ - ToCode CMap + 90ms-RKSJ-V - ToCID CMap + 90ms-RKSJ-H - ToCID CMap + + Adobe-Japan1-Unicode 4 + Adobe-Japan1-UCS2 - ToUnicode CMap + UniJIS-UCS2-V - ToCID CMap + UniJIS-UCS2-H - ToCID CMap + + Adobe-Japan2-Unicode 0 + UniHojo-UCS2-V - ToCID CMap + UniHojo-UCS2-H - ToCID CMap + + Adobe-Korea1-Johab 1 + KSC-Johab-V - ToCID CMap + KSC-Johab-H - ToCID CMap + + Adobe-Korea1-Unicode 2 + Adobe-Korea1-UCS2 - ToUnicode CMap + UniKS-UCS2-V - ToCID CMap + UniKS-UCS2-H - ToCID CMap + + Adobe-Korea1-Wansung 1 + Adobe-Korea1-KSCms-UHC - ToCode CMap + KSCms-UHC-V - ToCID CMap + KSCms-UHC-H - ToCID CMap +</pre></tt><br> + +where Supplement values are denoted as the limit determined by the +maximum CID in used CMaps. + +<p> +The Glyph Substitution table (GSUB) of TTF, Single Substitution Format +2 is read for vertically-used glyphs in CIDs. The current revision +doesn't handle any other formats of GSUB, so handling ligatures and +variants as CID-keyed fonts might be tasks to be solved in future. + +<p> +In recent CID-keyed fonts, pre-rotated Latin glyphs are defined, but +the current revision merely maps to normal Latin glyphs. +Ghostscript cannot handle them at present. + +<h2><a name="Notes"></a> +Adobe CIDs that current Ghostscript can fills by CJK TTF</h2> +<p> +Following tables and comments provide the details of validity and +limitation for the individual kinds of CID-keyed fonts composed from +generally-circulated and Unicode TrueType fonts at the current +revision. Naturally, these results of glyphs lacking are affected by +TrueType fonts you use.<br> + +<tt><pre> +Adobe-CNS1 CID-keyed font composed from Traditional Chinese Unicode TTF +----------------------------------------------------------------------- +[ROS] [CID range] [Comment] +Adobe-CNS1-0 0- 505 96,97,124-127,228,260 are lacking + 506- 561 no problem + 562- 594 all glyphs are lacking + 595-13645 no problem + 13646-13748 13646,13647 are lacking + 13749-13998 13996-13998 are lacking + 13999-14098 some glyphs are lacking +Adobe-CNS1-1 14099-17407 lots of glyphs are lacking (*1) +Adobe-CNS1-2 17408-17600 17503,17504 are lacking (*2) +Adobe-CNS1-3 17601-17605 17603 is lacking + 17606-18845 lots of glyphs are lacking (*3) +Adobe-CNS1-4 18846-18961 all glyphs assignment is impossible (*4) +(*1) HK GCCS +(*2) not pre-rotated +(*3) HK SCS +(*4) HK SCS (unused in UniCNS-UCS-2 CMap, though used in UniCNS-UTF8, +UniCNS-UTF16, UniCNS-UTF32, also ETHK-B5, needless to say HKscs-B5) + + +Adobe-GB1 CID-keyed font composed from Simplified Chinese Unicode TTF +--------------------------------------------------------------------- +[ROS] [CID range] [Comment] +Adobe-GB1-0 0- 939 99,695,698,737,935,938 are lacking + 940- 7702 no problem + 7703- 7716 7705,7708 are incorrect +Adobe-GB1-1 7717- 9896 no problem +Adobe-GB1-2 9897-22126 no problem +Adobe-GB1-3 22127-22352 22347,22350,22352 are lacking (*1) +Adobe-GB1-4 22353-22427 all glyphs are not available (*2) + 22428-29058 all glyphs are not available (*3) + 29059-29063 all glyphs are not available (*4) +(*1) not pre-rotated +(*2) additional Hiragana and Katakana, extended Bopomofo glyphs +(*3) the Unified Han Ideographs Extension A +(*4) pre-rotated glyphs + + +Adobe-Japan1 CID-keyed font composed from Japanese Unicode TTF +-------------------------------------------------------------- +[ROS] [CID range] [Comment] +Adobe-Japan1-0 0- 1124 lots of glyphs are lacking or incorrect: + 96-98,127,128,130-133,135-137,226,326, + 390,396,422,424,502,506-509,512,513,515, + 606,607,632 + 1125- 7477 no problem + 7478- 7632 7478 is lacking and 7608,7609 are incorrect + 7633- 8004 lots of glyphs are lacking or incorrect (*4) + 8005- 8283 lots of glyphs are lacking or incorrect: + 8008,8053,8059-8061,8091,8102-8111,8166-8181, + 8189,8190,8227-8229,8260 +Adobe-Japan1-1 8284- 8358 lots of glyphs are lacking or incorrect: + 8295-8297,8300-8302, + 8306,8307,8321,8322,8325,8326 +Adobe-Japan1-2 8359- 8717 no problem + 8718- 8719 8718 is lacking and 8719 is incorrect +Adobe-Japan1-3 8720- 9353 some glyphs are lacking or incorrect (*1) +Adobe-Japan1-4 9354- 9737 some glyphs are lacking or incorrect (*2) + 9738-13319 lots of glyphs are lacking or incorrect (*3) + 13320-15443 all glyphs are variants or lacking (*4) +(*1) not pre-rotated +(*2) not italic form +(*3) many ligature, pre-rotated, pre-rotated and italic form glyphs +(*4) lots of variants are assigned substitutes + + +Adobe-Japan2 CID-keyed font composed from Japanese Unicode TTF +-------------------------------------------------------------- +[ROS] [CID range] [Comment] +Adobe-Japan2-0 0- 6067 no problem + + +Adobe-Korea1 CID-keyed font composed from Korean Unicode TTF +------------------------------------------------------------ +[ROS] [CID range] [Comment] +Adobe-Korea1-0 0- 357 some glyphs are lacking or incorrect: + 61,97,100,104,111,227 + 358- 3435 no problem + 3436- 8055 no problem + 8056- 8190 lots of glyphs are lacking or incorrect: + 8059,8061,8075,8083-8085,8089,8091,8093,8190 + 8191- 9332 no problem +Adobe-Korea1-1 9333-18154 perhaps no problem, but cannot check (*) +Adobe-Korea1-2 18155-18351 some glyphs are lacking +(*) Technical Note on Adobe-Korea1-1,2 has not been published yet[6]. +</pre></tt> + +<p> +The current mapping algorithm based on ToCID CMaps and ToUnicode +CMaps still has problems. The gs-cjk project[7] is considering how +to settle the matters. + + +<h2><a name="References"></a>References</h2> +<ol> +<li>Microsoft Corporation, "OpenType specification" +<a +href="http://www.asia.microsoft.com/typography/otspec/" +class="offsite"> +http://www.asia.microsoft.com/typography/otspec/</a> +</li> + +<li> +Adobe Systems Incorporated, +"Adobe-CNS1-4 Character Collection for CID-Keyed Fonts", +Technical Note #5080 +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5080.Adobe-CNS1-4.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/5080.Adobe-CNS1-4.pdf</a> +</li> + +<li> +Adobe Systems Incorporated, +"Adobe-GB1-4 Character Collection for CID-Keyed Fonts", +Technical Note #5079 +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/5079.Adobe-GB1-4.pdf</a> +</li> + +<li> +Adobe Systems Incorporated, +"Adobe-Japan1-4 Character Collection for CID-Keyed Fonts", +Technical Note #5078 +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5078.Adobe-Japan1-4.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/5078.Adobe-Japan1-4.pdf +</a> +</li> + +<li> +Adobe Systems Incorporated, +"Adobe-Japan2-0 Character Collection for CID-Keyed Fonts", +Technical Note #5097 +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5097.Adobe-Japan2-0.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/5097.Adobe-Japan2-0.pdf +</a> +</li> + +<li> +Adobe Systems Incorporated, +"Adobe-Korea1-0 Character Collection for CID-Keyed Fonts" +Technical Note #5093 +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5093.Adobe-Korea1-0.pdf" +class="offsite"> +http://partners.adobe.com/asn/developer/pdfs/tn/5093.Adobe-Korea1-0.pdf +</a> +</li> + +<li> +Taiji Yamada, "Tips on PostScript" +<a href="http://www.aihara.co.jp/~taiji/tops/" class="offsite"> +http://www.aihara.co.jp/~taiji/tops/</a></li> + +<li>"gs-cjk project" +<a href="http://www.gyve.org/gs-cjk/" class="offsite"> +http://www.gyve.org/gs-cjk/</a></li> +</ol> + + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<font size=2> + +<p>Copyright © 2001 Taiji Yamada <<a href="mailto:taiji@aihara.co.jp">taiji@aihara.co.jp</a>> and +<a href="http://www.gyve.org/gs-cjk/" class="offsite">gs-cjk project</a>. +<p>Copyright © 2002 artofcode LLC. All rights reserved. + +<p>This file is part of GNU Ghostscript. See the +<a href="COPYING">GNU General Public License</a> (the "License") for +full details of the terms of using, copying, modifying, and redistributing +GNU Ghostscript. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +</font> + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/COPYING b/Master/xemtex/doc/ghostscript/COPYING new file mode 100644 index 00000000000..fbdd65f6f8b --- /dev/null +++ b/Master/xemtex/doc/ghostscript/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
diff --git a/Master/xemtex/doc/ghostscript/COPYING.LGPL b/Master/xemtex/doc/ghostscript/COPYING.LGPL new file mode 100644 index 00000000000..cf9b6b99726 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/COPYING.LGPL @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. +^L + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. +^L + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. +^L + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. +^L + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. +^L + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. +^L + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. +^L + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS +^L + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/Master/xemtex/doc/ghostscript/Changes.htm b/Master/xemtex/doc/ghostscript/Changes.htm new file mode 100644 index 00000000000..e3626b64c5e --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Changes.htm @@ -0,0 +1,288 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html><head> +<title>Ghostscript 7.07 change history as of 2003-05-17 15:57:59</title> +<link rel=stylesheet type="text/css" href="gs.css"> +</head><body> + +<!-- cvs command: cvs -d giles@cvs.ghostscript.com:/cvs/ghostscript -Q log -rGS_7_0X_GNU --> + +<ul> +<li><a href="#7.07-Documentation">Documentation</a>, + <a href="#7.07-Procedures">Procedures</a>, + <a href="#7.07-Utilities">Utilities</a>, + <a href="#7.07-Drivers">Drivers</a>, + <a href="#7.07-PDF_Interpreter">PDF Interpreter</a>, + <a href="#7.07-Interpreter">Interpreter</a>, + <a href="#7.07-Library">Library</a>, + <a href="#7.07-Other">Other</a> +</ul> + + +<h2><a name="7.07-Documentation"></a>Documentation</h2><pre> + +Increment the version number after release. (doc/News.htm [1.90.2.18.2.6]: +2003/04/08 11:05:47 giles) + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (doc/Readme.htm [1.31.2.16.2.5]: 2003/04/12 14:02:38 +giles) + +Update the version and data for the 7.07 release. +(doc/API.htm [1.11.2.13.2.6], doc/C-style.htm [1.21.2.11.2.5], +doc/DLL.htm [1.15.2.11.2.5], doc/Develop.htm [1.47.2.18.2.6], +doc/Devices.htm [1.34.2.15.2.6], doc/Drivers.htm [1.21.2.11.2.5], +doc/Fonts.htm [1.22.2.13.2.6], doc/Helpers.htm [1.17.2.11.2.5], +doc/History1.htm [1.13.2.11.2.5], doc/History2.htm [1.13.2.11.2.6], +doc/History3.htm [1.13.2.11.2.6], doc/History4.htm [1.13.2.11.2.6], +doc/History5.htm [1.15.2.11.2.6], doc/History6.htm [1.30.2.11.2.6], +doc/History7.htm [1.5.2.17.2.7], doc/Htmstyle.htm [1.18.2.11.2.5], +doc/Install.htm [1.26.2.13.2.6], doc/Issues.htm [1.15.2.13.2.5], +doc/Language.htm [1.34.2.16.2.5], doc/Lib.htm [1.14.2.11.2.5], +doc/Maintain.htm [1.23.2.12.2.6], doc/Make.htm [1.36.2.19.2.6], +doc/New-user.htm [1.30.2.14.2.6], doc/News.htm [1.90.2.18.2.7], +doc/Projects.htm [1.33.2.11.2.6], doc/Ps-style.htm [1.13.2.11.2.5], +doc/Ps2epsi.htm [1.15.2.12.2.6], doc/Ps2pdf.htm [1.32.2.11.2.5], +doc/Psfiles.htm [1.22.2.12.2.5], doc/Readme.htm [1.31.2.16.2.6], +doc/Release.htm [1.40.2.23.2.6], doc/Source.htm [1.13.2.11.2.5], +doc/Unix-lpr.htm [1.13.2.11.2.5], doc/Use.htm [1.33.2.22.2.6], +doc/Xfonts.htm [1.13.2.11.2.5], doc/gs-vms.hlp [1.12.2.10.2.5], +man/dvipdf.1 [1.10.2.9.2.5], man/font2c.1 [1.10.2.9.2.5], +man/gs.1 [1.10.2.10.2.5], man/gslp.1 [1.10.2.9.2.5], +man/gsnd.1 [1.10.2.9.2.5], man/pdf2dsc.1 [1.10.2.9.2.5], +man/pdf2ps.1 [1.12.2.9.2.5], man/pdfopt.1 [1.10.2.9.2.5], +man/pf2afm.1 [1.10.2.9.2.5], man/pfbtopfa.1 [1.11.2.9.2.5], +man/printafm.1 [1.10.2.9.2.5], man/ps2ascii.1 [1.10.2.9.2.5], +man/ps2epsi.1 [1.10.2.10.2.5], man/ps2pdf.1 [1.14.2.11.2.5], +man/ps2pdfwr.1 [1.13.2.10.2.5], man/ps2ps.1 [1.17.2.9.2.5], +man/wftopfa.1 [1.10.2.9.2.5]: 2003/05/17 14:38:59 giles) + +Update the release notes. (doc/News.htm [1.90.2.18.2.8]: 2003/05/17 14:44:22 +giles) + +</pre><h2><a name="7.07-Procedures"></a>Procedures</h2><pre> + +Increment the version number after release. (version.mak [1.36.2.9.2.5]: +2003/04/08 11:05:47 giles) + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (toolbin/3way.tcl [1.3.6.1.2.1], +toolbin/cvs2hist.py [1.9.2.2.2.1], toolbin/errlist.tcl [1.3.6.1.2.1], +toolbin/gsindent [1.3.6.1.2.1], toolbin/gsmake.tcl [1.5.6.1.2.1], +toolbin/gssubst [1.1.4.1.2.1], toolbin/headers.tcl [1.3.6.1.2.1], +toolbin/leaks.tcl [1.3.6.1.2.1], toolbin/makegnu.tcl [1.3.6.1.2.1], +toolbin/makeset.tcl [1.10.2.3.2.1], toolbin/many2pdf.tcl [1.1.4.1.2.1], +toolbin/pdfinflt.ps [1.1.2.1.2.1], toolbin/pre [1.11.2.3.2.1], +toolbin/precheck.tcl [1.3.6.1.2.1], toolbin/suite.tcl [1.3.6.1.2.1], +toolbin/tmake.tcl [1.3.6.1.2.1]: 2003/04/12 14:02:39 giles) + +Add the bbox device to the default macos shlib build. Bug 686811. +(macos-mcp.mak [1.3.2.8.2.2]: 2003/04/27 23:50:11 giles) + +Add the display device to the default macos shlib build. +(macos-mcp.mak [1.3.2.8.2.3]: 2003/04/27 23:52:55 giles) + +Log message: For the pngalpha device, set the default background color to +white in the bKGD chunk. Add an option -dBackgroundColor=16#RRGGBB to +explicitly set the background color. This is needed by a common web browser +that doesn't correctly support PNG with alpha transparency. DETAILS: +Programs that don't fully support alpha transparency let libpng convert an +RGBA image to RGB. The background color used is either provided by the +program, or in the bKGD chunk, or it falls back to gray. MSIE was defaulting +to a gray background which is not commonly used on web pages. By writing a +white bKGD chunk, PNG files will display correctly against a white +background in MSIE. If a solid color for a web page background is used with +<body bgcolor="#CCCC00">, then PNG images appearing on that page would +need to be created with -dBackgroundColor=16#CCCC00. For textured background +there is no hope. Microsoft needs to fix Internet Explorer. +(libpng.mak [1.10.2.3.2.2]: 2003/05/15 10:05:29 ghostgum) + +Update the version and data for the 7.07 release. +(version.mak [1.36.2.9.2.6]: 2003/05/17 14:39:00 giles) + +</pre><h2><a name="7.07-Utilities"></a>Utilities</h2><pre> + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (lib/Fontmap.ATB [1.2.6.1.2.1], +lib/Fontmap.ATM [1.2.6.1.2.1], lib/Fontmap.GS [1.2.6.1.2.1], +lib/Fontmap.OS2 [1.2.6.1.2.1], lib/Fontmap.SGI [1.2.6.1.2.1], +lib/Fontmap.Sol [1.2.6.1.2.1], lib/Fontmap.Ult [1.2.6.1.2.1], +lib/addxchar.ps [1.2.6.1.2.1], lib/align.ps [1.2.6.1.2.1], +lib/bdftops.ps [1.3.2.2.2.1], lib/caption.ps [1.2.6.1.2.1], +lib/cid2code.ps [1.3.4.1.2.1], lib/docie.ps [1.2.6.1.2.1], +lib/errpage.ps [1.2.6.1.2.1], lib/font2c.ps [1.3.2.1.2.1], +lib/font2pcl.ps [1.2.6.2.2.1], lib/gslp.ps [1.2.6.2.2.1], +lib/gsnup.ps [1.2.6.1.2.1], lib/image-qa.ps [1.3.2.1.2.1], +lib/impath.ps [1.3.4.1.2.1], lib/jispaper.ps [1.2.6.1.2.1], +lib/lines.ps [1.2.6.1.2.1], lib/markhint.ps [1.2.6.1.2.1], +lib/markpath.ps [1.2.6.1.2.1], lib/packfile.ps [1.2.6.2.2.1], +lib/pcharstr.ps [1.2.6.1.2.1], lib/pdf2dsc.ps [1.3.4.2.2.1], +lib/pdfopt.ps [1.10.2.2.2.1], lib/pdfwrite.ps [1.7.2.1.2.1], +lib/pfbtopfa.ps [1.2.6.1.2.1], lib/ppath.ps [1.2.6.1.2.1], +lib/pphs.ps [1.3.2.1.2.1], lib/ps2ai.ps [1.2.6.1.2.1], +lib/ps2ascii.ps [1.3.2.2.2.1], lib/ps2epsi.ps [1.5.2.3.2.1], +lib/rollconv.ps [1.1.8.1], lib/showchar.ps [1.2.6.1.2.1], +lib/stcinfo.ps [1.2.6.1.2.1], lib/stcolor.ps [1.2.6.1.2.1], +lib/stocht.ps [1.3.6.1.2.1], lib/traceimg.ps [1.2.6.2.2.1], +lib/traceop.ps [1.2.6.1.2.1], lib/type1enc.ps [1.2.6.1.2.1], +lib/type1ops.ps [1.2.6.1.2.1], lib/uninfo.ps [1.2.6.1.2.1], +lib/unprot.ps [1.2.6.1.2.1], lib/viewcmyk.ps [1.2.6.2.2.1], +lib/viewgif.ps [1.2.6.1.2.1], lib/viewjpeg.ps [1.1.6.2.2.1], +lib/viewmiff.ps [1.2.6.1.2.1], lib/viewpbm.ps [1.2.6.2.2.1], +lib/viewpcx.ps [1.2.6.2.2.1], lib/viewps2a.ps [1.2.6.1.2.1], +lib/wftopfa.ps [1.2.6.1.2.1], lib/winmaps.ps [1.2.6.1.2.1], +lib/wrfont.ps [1.2.6.1.2.1], lib/zeroline.ps [1.2.6.1.2.1]: 2003/04/12 +14:02:38 giles) + +Avoid calling a null pgsdll_callback, as can happen with the new client api +and CHECK_INTERRUPTS. This fix affects primarily MacOS; similar protections +are already in place for other platforms, although the global was not +explicitly initialized to null. Also return EOFC in the mac stdio stream +process if no callback is defined. Closes bug 686768. Also backports some +code cleanup from HEAD. (gp_mac.c [1.1.4.3.2.2], gp_macio.c [1.2.4.5.2.3]: +2003/04/12 16:37:26 giles) + +Add a missing variable declaration for VMS. Patch from Forrest Cahoon and +Jouk Jansen. (gp_vms.c [1.7.2.3.2.2]: 2003/04/14 13:58:04 giles) + +</pre><h2><a name="7.07-Drivers"></a>Drivers</h2><pre> + +Avoid calling a null pgsdll_callback, as can happen with the new client api +and CHECK_INTERRUPTS. This fix affects primarily MacOS; similar protections +are already in place for other platforms, although the global was not +explicitly initialized to null. Also return EOFC in the mac stdio stream +process if no callback is defined. Closes bug 686768. Also backports some +code cleanup from HEAD. (gdevmac.c [1.1.4.3.2.2]: 2003/04/12 16:37:26 giles) + +In the display device, store the line pointers separately from the bits, so +that the bits can be placed in special memory (e.g. allocated in video +memory). Fixes Bug 686780 display_memalloc() asks for too much memory. If +reopening the display device fails after setting the callback, display an +error message. Allocate the large display bitmap using a low level allocator +to avoid exceeding the memory limit of the previously used device stable +memory allocator. Fixes bugs 686836 "-r doesn't work" and duplicate 686838 +"Ghostscript doesn't do anything". DETAILS: The display memory device and +the raster including line pointers was allocated using the stable allocator +of the display device. This had a limit of 1Mbyte, which was exceeded when +the resolution was greater then 114dpi. This would cause subsequent +allocations to fail, but it appears that nothing else tried to use this +allocator after the display device. The display device was changed to +allocate the line pointers separately to allow the raster to be allocated in +special memory, e.g. video memory or shared memory. This caused the +subsequent allocation of the line pointers to fail when resolution exceeded +114dpi. The modified code now allocates the raster with +gs_alloc_byte_array_immovable, which allocates directly from the C heap, not +subject to any memory limit apart from the overall -K limit if specified, +and is not subject to garbage collection. The normal allocator now has +sufficient memory to allocate the line pointers without problem. The raster +pointer is removed from the pointers that are enumerated during garbage +collection. (gdevdsp.c [1.5.2.5.2.3]: 2003/05/01 10:06:26 ghostgum) + +Log message: For the pngalpha device, set the default background color to +white in the bKGD chunk. Add an option -dBackgroundColor=16#RRGGBB to +explicitly set the background color. This is needed by a common web browser +that doesn't correctly support PNG with alpha transparency. DETAILS: +Programs that don't fully support alpha transparency let libpng convert an +RGBA image to RGB. The background color used is either provided by the +program, or in the bKGD chunk, or it falls back to gray. MSIE was defaulting +to a gray background which is not commonly used on web pages. By writing a +white bKGD chunk, PNG files will display correctly against a white +background in MSIE. If a solid color for a web page background is used with +<body bgcolor="#CCCC00">, then PNG images appearing on that page would +need to be created with -dBackgroundColor=16#CCCC00. For textured background +there is no hope. Microsoft needs to fix Internet Explorer. +(gdevpng.c [1.4.2.1.2.3]: 2003/05/15 10:05:29 ghostgum) + +</pre><h2><a name="7.07-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (lib/pdf_base.ps [1.14.2.1.2.1], +lib/pdf_draw.ps [1.36.2.2.2.1], lib/pdf_font.ps [1.23.2.6.2.1], +lib/pdf_main.ps [1.35.2.7.2.3], lib/pdf_ops.ps [1.17.2.2.2.1]: 2003/04/12 +14:02:39 giles) + +</pre><h2><a name="7.07-Interpreter"></a>Interpreter</h2><pre> + +Increment the version number after release. (lib/gs_init.ps [1.40.2.12.2.2]: +2003/04/08 11:05:47 giles) + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (examples/waterfal.ps [1.3.2.1.2.1], +lib/gs_agl.ps [1.2.6.1.2.1], lib/gs_btokn.ps [1.5.2.1.2.1], +lib/gs_ccfnt.ps [1.5.2.1.2.1], lib/gs_ce_e.ps [1.2.6.1.2.1], +lib/gs_cff.ps [1.10.2.1.2.1], lib/gs_cidcm.ps [1.5.2.2.2.1], +lib/gs_cidfn.ps [1.18.4.5.2.1], lib/gs_cmap.ps [1.11.2.4.2.1], +lib/gs_cmdl.ps [1.2.6.1.2.1], lib/gs_css_e.ps [1.2.6.1.2.1], +lib/gs_dbt_e.ps [1.2.6.1.2.1], lib/gs_diskf.ps [1.2.6.1.2.1], +lib/gs_dpnxt.ps [1.2.6.1.2.1], lib/gs_dps.ps [1.4.6.1.2.1], +lib/gs_dps1.ps [1.2.6.1.2.1], lib/gs_dps2.ps [1.3.4.1.2.1], +lib/gs_dscp.ps [1.4.2.1.2.1], lib/gs_epsf.ps [1.2.6.11.2.3], +lib/gs_fform.ps [1.2.6.1.2.1], lib/gs_fonts.ps [1.13.2.3.2.1], +lib/gs_frsd.ps [1.4.6.1.2.1], lib/gs_icc.ps [1.2.2.1.2.1], +lib/gs_il1_e.ps [1.2.6.1.2.1], lib/gs_il2_e.ps [1.2.6.1.2.1], +lib/gs_init.ps [1.40.2.12.2.3], lib/gs_kanji.ps [1.2.6.1.2.1], +lib/gs_ksb_e.ps [1.2.6.1.2.1], lib/gs_l2img.ps [1.2.6.1.2.1], +lib/gs_lev2.ps [1.7.2.4.2.3], lib/gs_lgo_e.ps [1.3.6.1.2.1], +lib/gs_lgx_e.ps [1.2.6.1.2.1], lib/gs_ll3.ps [1.10.2.2.2.1], +lib/gs_mex_e.ps [1.2.6.1.2.1], lib/gs_mgl_e.ps [1.3.6.1.2.1], +lib/gs_mro_e.ps [1.2.6.1.2.1], lib/gs_pdf_e.ps [1.2.6.1.2.1], +lib/gs_pdfwr.ps [1.11.2.1.2.1], lib/gs_pfile.ps [1.2.6.1.2.1], +lib/gs_rdlin.ps [1.2.6.1.2.1], lib/gs_res.ps [1.16.2.2.2.1], +lib/gs_setpd.ps [1.8.2.2.2.2], lib/gs_statd.ps [1.5.2.2.2.1], +lib/gs_std_e.ps [1.2.6.1.2.1], lib/gs_sym_e.ps [1.2.6.1.2.1], +lib/gs_trap.ps [1.3.6.2.2.1], lib/gs_ttf.ps [1.9.2.4.2.1], +lib/gs_typ32.ps [1.3.2.2.2.1], lib/gs_typ42.ps [1.2.6.1.2.1], +lib/gs_type1.ps [1.5.2.1.2.1], lib/gs_wan_e.ps [1.2.6.1.2.1], +lib/gs_wl1_e.ps [1.2.6.1.2.1], lib/gs_wl2_e.ps [1.2.6.1.2.1], +lib/gs_wl5_e.ps [1.2.6.1.2.1]: 2003/04/12 14:02:38 giles) + +Sort the list of devices in the output of 'gs -h' so they're easier to read. +List the default device separately as it's no longer first. Based on a patch +from Nelson Beebe. Closes bug 416746. Also correct a warning in argproc(). +(imainarg.c [1.13.2.3.2.2]: 2003/04/12 16:43:14 giles) + +In the display device, store the line pointers separately from the bits, so +that the bits can be placed in special memory (e.g. allocated in video +memory). Fixes Bug 686780 display_memalloc() asks for too much memory. If +reopening the display device fails after setting the callback, display an +error message. Allocate the large display bitmap using a low level allocator +to avoid exceeding the memory limit of the previously used device stable +memory allocator. Fixes bugs 686836 "-r doesn't work" and duplicate 686838 +"Ghostscript doesn't do anything". DETAILS: The display memory device and +the raster including line pointers was allocated using the stable allocator +of the display device. This had a limit of 1Mbyte, which was exceeded when +the resolution was greater then 114dpi. This would cause subsequent +allocations to fail, but it appears that nothing else tried to use this +allocator after the display device. The display device was changed to +allocate the line pointers separately to allow the raster to be allocated in +special memory, e.g. video memory or shared memory. This caused the +subsequent allocation of the line pointers to fail when resolution exceeded +114dpi. The modified code now allocates the raster with +gs_alloc_byte_array_immovable, which allocates directly from the C heap, not +subject to any memory limit apart from the overall -K limit if specified, +and is not subject to garbage collection. The normal allocator now has +sufficient memory to allocate the line pointers without problem. The raster +pointer is removed from the pointers that are enumerated during garbage +collection. (idisp.c [1.2.2.2.2.2]: 2003/05/01 10:06:26 ghostgum) + +Security fixes. Add detection of %pipe% device when in SAFER mode. Also fix +detection of 'renamefile' to prevent rename from a file that is not on the +PermitFileControl list. (zfile.c [1.11.2.4.2.2]: 2003/05/17 14:28:33 ray) + +</pre><h2><a name="7.07-Library"></a>Library</h2><pre> + +Increment the version number after release. (gscdef.c [1.15.2.4.2.3]: +2003/04/08 11:05:47 giles) + +Update the version and data for the 7.07 release. (gscdef.c [1.15.2.4.2.4]: +2003/05/17 14:39:00 giles) + +</pre><h2><a name="7.07-Other"></a>Other</h2><pre> + +Test the optimization compiler flag '-O2' before using it since some vendor +compilers have different syntax. (Makefile.in [1.1.4.13.2.3], +configure.ac [1.4.4.12.2.2]: 2003/04/16 13:59:56 giles) + +Include the bbox device in the default autoconf build. +(Makefile.in [1.1.4.13.2.4]: 2003/04/29 18:33:31 giles) + +</pre></body></html> diff --git a/Master/xemtex/doc/ghostscript/Current.htm b/Master/xemtex/doc/ghostscript/Current.htm new file mode 100644 index 00000000000..1d4fd4270f6 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Current.htm @@ -0,0 +1,272 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Information specifically about the current release</title> +<!-- $Id: Current.htm,v 1.13.2.11.2.5 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: current.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Information specifically about Ghostscript 6.0</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<ul> +<li><a href="#New_features">New features (since release 5.50)</a> +<li><a href="#Changes">Changes (since release 5.50)</a> +<li><a href="#Known_problems">Known problems</a> + <ul> + <li><a href="#Usage">Usage</a> + <li><a href="#Limitations">Limitations</a> + <li><a href="#Graphics_bugs">Graphics bugs</a> + <li><a href="#Non_graphics_bugs">Non-graphics bugs</a> + </ul> +</ul> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="New_features"></a>New features (since release 5.50)</h2> + +<p> +(This is not a complete list of new features: see <a href="News.htm">the +news</a> for details.) + +<p> +Ghostscript now handles essentially all of PostScript LanguageLevel 3 and +PDF 1.3 (Acrobat 4.x compatibility). See <a +href="Language.htm"><b>Language.htm</b></a> for details. + +<p> +The PDF writer now implements most of the Acrobat (TM) Distiller parameters +for compressing and downsampling images. + +<p> +The PDF writer now recognizes nearly all varieties of pdfmark, other than +the Distiller 3.0 "named object" pdfmarks and the Distiller 4.0 "document +structure" pdfmarks. + +<p> +The PDF writer now handles text in all fonts, not just the 14 built-in ones, +and implements the Distiller parameters affecting font embedding and +subsetting. (It still usually converts double-byte fonts to bitmaps.) + +<p> +16- and 24-bit X Windows displays are now fully supported. + +<p> +You now need only the header files and shared libraries, not the source +code, if you want to use precompiled versions of the jpeg, libpng, or zlib +libraries. + +<p> +The syntax +<b><tt>%</tt></b><em>iodevice</em><b><tt>%</tt></b><em>filename</em> is now +supported with the <b><tt>-sOutputFile=</tt></b> switch, allowing you to +send raster output to a piped command. + +<p> +You can now use MMK or MMS to build Ghostscript on OpenVMS systems. + +<p> +For driver writers, there are improved facilities for planar output, +rasterizing directly into a driver-provided buffer, detecting bands that are +all white or that only use a subset of the colorants, and providing CRDs +from the driver. + +<p> +The driver API now includes facilities for passing high-level text +operations, completing the set of high-level operations (bitmap images and +vector graphics were implemented in 5.50). See <a href="Drivers.htm">the +documentation</a> for details. + +<p> +Ghostscript as a dynamically linked library is now supported on the Mac as +well as on Windows. + +<p> +GNU readline was supported in most of the beta distributions for 6.0, but +was removed at the last minute because of objections from the Free Software +Foundation. Please see <a href="Make.htm#GNU_readline">here</a> for more +information. + +<h2><a name="Changes"></a>Changes (since release 5.50)</h2> + +<h3>Directories and build procedure</h3> + +<p> +The files in the release now have a more complex directory structure. In +the table below, <em>top</em> refers to the top-level directory, +<b><tt>gs</tt></b><em>n.nn</em>. + +<p> +The <em>top</em><b><tt>/</tt></b> is where you create a link to the +appropriate makefile in <em>top</em><b><tt>/src/</tt></b>. On all systems +other than MS Windows, the build procedure does not write into this +directory. + +<p> +The files included in the Ghostscript release now are found in five +subdirectories. + +<ul> +<li><em>top</em><b><tt>/src/</tt></b> contains the C/C++ source code, the +makefiles, and all other files needed to build the program. The build +procedure reads from this directory but does not write into it. Nothing in +this directory is needed at run time. + +<li><p><em>top</em><b><tt>/lib/</tt></b> contains PostScript and script +files needed at run time. The build procedure reads from this directory but +does not write into it. The contents of this directory are needed at run +time and are copied by the Unix <b><tt>make install</tt></b> command. + +<li><em>top</em><b><tt>/doc/</tt></b> contains documentation. Copied by +<b><tt>make install</tt></b>. + +<li><em>top</em><b><tt>/man/</tt></b> contains Unix <b><tt>man</tt></b> +pages. Copied by <b><tt>make install</tt></b>. + +<li><em>top</em><b><tt>/examples/</tt></b> contains sample PostScript and +PDF files. Copied by <b><tt>make install</tt></b>. + +</ul> + +<p> +The build procedure creates two additional subdirectories, +<em>top</em><b><tt>/obj/</tt></b> (or <b><tt>debugobj</tt></b> or +<b><tt>pgobj</tt></b>) and <em>top</em><b><tt>/bin/</tt></b>. See the +documentation on <a href="Make.htm">how to build Ghostscript</a> for more +information. + +<h2>Other changes</h2> + +<p> +If you are a developer working with the Ghostscript code in any way other +than writing or modifying drivers, please read all of the "Incompatible +changes" sections of the <a href="News.htm">release news</a> for important +information. + +<h2><a name="Known_problems"></a>Known problems</h2> + +<p> +See the <a href="News.htm">release news</a> for details. + +<h3><a name="Usage"></a>Usage</h3> + +<p> +On a DOS system, interrupting the interpreter by typing control-C doesn't +restore the display mode. + +<h3><a name="Limitations"></a>Limitations</h3> + +<p> +<b><tt>serialnumber</tt></b> returns the same value in all copies. + +<p> +Some floating point exceptions terminate the interpreter, rather than +producing a <b><tt>limitcheck</tt></b> error. + +<p> +The <b><tt>DCTEncode</tt></b> filter disregards the <b><tt>Blend</tt></b> +parameter, and uses different <b><tt>QuantTables</tt></b> and +<b><tt>HuffTables</tt></b> from Adobe's. + +<p> +The DCT filters do not support nonintegral sample ratios. Also, +<b><tt>DCTEncode</tt></b> will not create files with Sum(HS×VS)>10 +(regardless of the value of the <b><tt>Relax</tt></b> parameter) because +they violate the JPEG standard; but <b><tt>DCTDecode</tt></b> will read +such files. + +<p> +The size of the execution stack cannot be changed dynamically. (However, +the sizes of the operand and dictionary stacks can be changed.) + +<p> +<b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color spaces are +implemented, but devices that actually produce color separations are not +supported: these color spaces always use the alternate space. The special +color separations <b><tt>All</tt></b> and <b><tt>None</tt></b>, and the +primary separations (<b><tt>Red</tt></b>, <b><tt>Green</tt></b>, etc.), are +not supported. + +<p> +<b><tt>execform</tt></b> and <b><tt>ucache</tt></b> are implemented, but +they do not actually do any caching; <b><tt>setucacheparams</tt></b> and +<b><tt>ucachestatus</tt></b> are dummies. (This only impacts performance, +not functionality.) + +<p> +The <b><tt>image</tt></b> operator honors the <b><tt>Interpolate</tt></b> +flag in the image dictionary only for ImageType 1 and 3 images, only if the +combined transformation (<b><tt>ImageMatrix</tt></b> + CTM) doesn't involve +rotation, skewing, or X-reflection, and only for certain scalings and color +spaces; <b><tt>imagemask</tt></b> doesn't honor <b><tt>Interpolate</tt></b> +at all. + +<p> +Some path-building operations that would generate a device coordinate +larger than +/-2^<small><sup>19</sup></small> will cause a +limitcheck. However, the common ones (<b><tt>[r]moveto</tt></b>, +<b><tt>[r]lineto</tt></b>, <b><tt>[r]curveto</tt></b>, <b><tt>closepath</tt></b>) will not. + +<h3><a name="Graphics_bugs"></a>Graphics bugs</h3> + +<p> +There are no known graphics bugs in this release. + +<h3><a name="Non_graphics_bugs"></a>Non-graphics bugs</h3> + +<p> +The <b><tt>definefont</tt></b> operator (Subrs (type 1 fonts)) expects +arrays but won't accept packed arrays. + +<p> +Syntax errors occurring within a binary token do not produce the error +message specified by the Adobe documentation. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998, 1999 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/DLL.htm b/Master/xemtex/doc/ghostscript/DLL.htm new file mode 100644 index 00000000000..180d4218349 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/DLL.htm @@ -0,0 +1,703 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>How to use the Ghostscript Dynamic Link Library (DLL)</title> +<!-- $Id: DLL.htm,v 1.15.2.11.2.5 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: dll.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>How to use the Ghostscript Dynamic Link Library (DLL)</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<ul> +<li><a href="#DLL">What is the Ghostscript DLL?</a> +<li><a href="#Common_functions">Platform-independent DLL functions</a> +<ul> +<li><a href="#revision"><b><tt>gsdll_revision()</tt></b></a> +<li><a href="#init"><b><tt>gsdll_init()</tt></b></a> +<li><a href="#execute_begin"><b><tt>gsdll_execute_begin()</tt></b></a> +<li><a href="#execute_cont"><b><tt>gsdll_execute_cont()</tt></b></a> +<li><a href="#execute_end"><b><tt>gsdll_execute_end()</tt></b></a> +<li><a href="#exit"><b><tt>gsdll_exit()</tt></b></a> +<li><a href="#lock_device"><b><tt>gsdll_lock_device()</tt></b></a> +</ul> +<li><a href="#Callback">Callback function</a> +<li><a href="#OS2_device">Ghostscript DLL device for OS/2</a> +<ul> +<li><a href="#OS2_bmp"><b><tt>gsdll_get_bitmap()</tt></b></a> +<li><a href="#OS2_example">Example DLL usage for OS/2</a> +</ul> +<li><a href="#Win_device">Ghostscript DLL device for MS Windows</a> +<ul> +<li><a href="#Win_copydib"><b><tt>gsdll_copy_dib()</tt></b></a> +<li><a href="#Win_copypalette"><b><tt>gsdll_copy_palette()</tt></b></a> +<li><a href="#Win_draw"><b><tt>gsdll_draw()</tt></b></a> +<li><a href="#Win_get_row"><b><tt>gsdll_get_bitmap_row()</tt></b></a> +</ul> +<li><a href="#Win16">Ghostscript DLL Device for 16-bit MS Windows</a> +</ul> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<p> +<b>WARNING: The API described in this document is obsolete and will +be removed in the future.</b> +The current Ghostscript Interpreter API +is described in <a href="API.htm">API.htm</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="DLL"></a>What is the Ghostscript DLL?</h2> + +<p> +For the OS/2, Win16 and Win32 platforms, Ghostscript is built as a dynamic +link library (DLL), and to provide the interface described in the <a +href="Use.htm">usage documentation</a>, a smaller independent executable +(<b><tt>.EXE</tt></b>) loads this DLL, which provides all the interaction +with the windowing system, including image windows and, if necessary, a +text window. This document describes the DLL interface, which consists of +eight main functions, <a href="#functions">seven platform-independent +ones</a> provided by the DLL and one, <a href="#Callback">the callback +function</a>, provided by the caller. The DLL provides some other +platform-specific functions for display devices. + +<p> +The DLL's name and characteristics differ among the three platforms: + +<ul> +<li>The <a href="#OS2_device">OS/2 DLL <b><tt>GSDLL2.DLL</tt></b></a> has +MULTIPLE NONSHARED data segments and can be called by multiple programs +simultaneously. + +<li>The <a href="#Win_device">Win32 DLL <b><tt>GSDLL32.DLL</tt></b></a> has +MULTIPLE NONSHARED data segments. Under Win32s it can be used by only one +program at a time, but under Windows 95/98 or Windows NT it can be called by +multiple programs simultaneously. + +<li>The <a href="#Win16">Win16 DLL <b><tt>GSDLL16.DLL</tt></b></a> is a +large-memory model DLL with far static data. Due to the limitations of +16-bit MS Windows -- Windows 3.n -- the DLL can be used by only one program +at a time. +</ul> + +<p> +The source for the executable is in <b><tt>dp</tt></b>*.* (OS/2) and +<b><tt>dw</tt></b>*.* (Windows). See these source files for examples of +how to use the DLL. + +<hr> + +<h2><a name="Common_functions"></a>Platform-independent DLL functions</h2> + +<p> +The seven functions provided by the DLL are +<ul> +<li><b><tt>int GSDLLAPI <a href="#revision">gsdll_revision</a>(char **product, char **copyright, long *gs_revision, long *gs_revisiondate)</tt></b> +<li><b><tt>int GSDLLAPI <a href="#init">gsdll_init</a>(GSDLL_CALLBACK callback, HWND hwnd, int argc, char *argv[]);</tt></b> +<li><b><tt>int GSDLLAPI <a href="#execute_begin">gsdll_execute_begin</a>(void);</tt></b> +<li><b><tt>int GSDLLAPI <a href="#execute_cont">gsdll_execute_cont</a>(const char *str, int len);</tt></b> +<li><b><tt>int GSDLLAPI <a href="#execute_end">gsdll_execute_end</a>(void);</tt></b> +<li><b><tt>int GSDLLAPI <a href="#exit">gsdll_exit</a>(void);</tt></b> +<li><b><tt>int GSDLLAPI <a href="#lock_device">gsdll_lock_device</a>(unsigned char *device, int flag);</tt></b> + +<p> +where <b><tt>GSDLLAPI</tt></b> is defined under OS/2 as + +<blockquote><b><tt> +#define GSDLLAPI +</tt></b></blockquote> + +<p> +and under MS Windows as + +<blockquote><b><tt> +#define GSDLLAPI CALLBACK _export +</tt></b></blockquote> +</ul> + +<h3><a name="revision"></a><b><tt>gsdll_revision()</tt></b></h3> + +<blockquote> +This function returns the revision numbers and strings of the Ghostscript +DLL; you should call it before <b><tt>gsdll_init()</tt></b> to make sure +that the correct version of the Ghostscript DLL has been loaded. For +example + +<blockquote> +<pre>char *product; +char *copyright; +long revision; +long revisiondate; +gsdll_revision(&product, &copyright, &revision, &revisiondate); +</pre></blockquote> + +<p> +You may use <b><tt>NULL</tt></b> pointers if you do not want a particular +value. +</blockquote> + +<h3><a name="init"></a><b><tt>gsdll_init()</tt></b></h3> + +<blockquote> +<b><tt>gsdll_init()</tt></b> must be called after loading the DLL and +before executing any Ghostscript commands. The arguments are the address +of the callback function, a parent window handle, the count of arguments +and an array of pointers to the arguments. For example + +<blockquote> +<pre>char *argv[5]; +argv[0] = "gswin.exe"; +argv[1] = "-Ic:\\gs;c:\gs\\fonts"; +argv[2] = "-dNOPAUSE", +argv[3] = "-sDEVICE=djet500", +argv[4] = NULL; +argc = 4; + +code = gsdll_init(gsdll_callback, hwnd, argc, argv); +</pre></blockquote> + +<p> +<b><tt>hwnd</tt></b> is used as the parent window handle for any windows +created by Ghostscript. <b><tt>hwnd</tt></b> may be <b><tt>NULL</tt></b> +if the caller has no windows, but if it is <b><tt>NULL</tt></b>, you should +avoid using devices which may open windows. + +<p> +A return code of 0 (zero) indicates no errors, and the code may now call +<b><tt>gsdll_execute_begin()</tt></b> or <b><tt>gsdll_exit()</tt></b>. If +the return value is non-zero then <b><tt>gsdll_exit()</tt></b> must not be +called. + +<p> +A return value of <b><tt>GSDLL_INIT_QUIT</tt></b> indicates that one of the +command line files or arguments called "<b><tt>quit</tt></b>", or that +Ghostscript was reading stdin and reached end-of-file. This is not an +error. <b><tt>gsdll_exit()</tt></b> must not be called. + +<p> +A return value of <b><tt>GSDLL_INIT_IN_USE</tt></b> indicates that the DLL +is in use by another application (Windows 3.1 only). The DLL should be +immediately unloaded (or the caller terminated). +<b><tt>gsdll_exit()</tt></b> must not be called. +</blockquote> + +<h3><a name="execute_begin"></a><b><tt>gsdll_execute_begin()</tt></b></h3> + +<blockquote> +This must be called after <b><tt>gsdll_init()</tt></b> and before +<b><tt>gsdll_execute_cont()</tt></b>. +</blockquote> + +<h3><a name="execute_cont"></a><b><tt>gsdll_execute_cont()</tt></b></h3> + +<blockquote> +After successfully calling <b><tt>gsdll_init()</tt></b> and +<b><tt>gsdll_execute_begin()</tt></b>, commands may be given to Ghostscript +with <b><tt>gsdll_execute_cont()</tt></b>. Examples are: + +<blockquote> +<pre>char *command = "1 2 add == flush\n"; +code = gsdll_execute_cont(command, strlen(command)); +command = "qu" +code = gsdll_execute_cont(command, strlen(command)); +command = "it\n" +code = gsdll_execute_cont(command, strlen(command)); +</pre> + +<a name="cont_returns"></a> +<table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Return codes from <b><tt>gsdll_execute_cont()</tt></b></font><hr> +<tr valign=bottom> + <th align=left>Code + <td> + <th align=left>Status +<tr> <td colspan=3><hr> +<tr valign=top> <td align=left>0 + <td> + <td>No errors +<tr valign=top> <td align=left>< 0 + <td> + <td>Error +<tr valign=top> <td align=left><= -100 + <td> + <td>"<b><tt>quit</tt></b>" has been executed, or fatal error. +<b><tt>gsdll_exit()</tt></b> must then be called: do not call +<b><tt>gsdll_execute_end()</tt></b>. +</table> +</blockquote> + +<b><tt>gsdll_execute_cont()</tt></b> +does not flush stdio, so if you want to see output from Ghostscript you +must do this explicitly as shown in the example above. + +<p> +When executing a string with <b><tt>gsdll_execute_cont()</tt></b>, +<b><tt>currentfile</tt></b> is the input from +<b><tt>gsdll_execute_cont()</tt></b>. Reading from <b><tt>%stdin</tt></b> +uses the callback. + +</blockquote> + +<h3><a name="execute_end"></a><b><tt>gsdll_execute_end()</tt></b></h3> + +<blockquote> +If <b><tt>gsdll_execute_cont()</tt></b> did not return an error, then +<b><tt>gsdll_execute_end()</tt></b> must be called after +<b><tt>gsdll_execute_cont()</tt></b> and before +<b><tt>gsdll_exit()</tt></b>. +</blockquote> + +<h3><a name="exit"></a><b><tt>gsdll_exit()</tt></b></h3> + +<blockquote> +Call gsdll_exit() to terminate the Ghostscript DLL. It must be called if a +fatal error has occurred; see the <a href="#cont_returns">return value +of <b><tt>gsdll_execute_cont()</tt></b></a>. After calling +<b><tt>gsdll_exit()</tt></b>, there are two options: + +<ul> +<li>Unload the DLL, either by terminating the application or by +calling <b><tt>DosFreeModule</tt></b> (OS/2) or <b><tt>FreeLibrary</tt></b> (MS Windows). + +<li>Call <b><tt>gsdll_init()</tt></b> again to restart Ghostscript. +</ul> +</blockquote> + +<h3><a name="lock_device"></a><b><tt>gsdll_lock_device()</tt></b></h3> + +<blockquote> +Since the caller may be multithreaded, a lock is needed to control access +to the display device, and <b><tt>gsdll_lock_device()</tt></b> provides that +locking. + +<blockquote> +<pre>int gsdll_lock_device(unsigned char *device, int flag); + /* Lock the device if flag = TRUE */ + /* Unlock the device if flag = FALSE */ + /* device is a pointer to Ghostscript os2dll or mswindll device */ + /* from GSDLL_DEVICE message. */ + /* Return value is the lock count. */ +</pre> + +<table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Locking and unlocking devices</font><hr> +<tr valign=top> <td>To lock a device + <td> + <td><b><tt>gsdll_lock_device(device, 1)</tt></b>; +<tr valign=top> <td>To unlock a device + <td> + <td><b><tt>gsdll_lock_device(device, 0)</tt></b>; +</table> +</blockquote> + +<p> +This function is typically used to lock the device while repainting a +window or copying the device bitmap to the clipboard. Ghostscript may draw +into the device bitmap or update the palette entries while the device is +locked by the caller, but locking the device prevents the Ghostscript DLL +from closing the device or changing its size or depth. + +<p> +Under OS/2, Windows 95/98 and Windows NT, this lock is implemented using a +mutual exclusion semaphore (mutex). The return value is the lock count, +which is either 0 ("unlocked") or 1 ("locked"). The function blocks until +the device is locked by the caller. + +<p> +Under Win16 or Win32s, <b><tt>gsdll_lock_device()</tt></b> always returns +immediately with a lock count as its return value. A lock count of 2 or +more is definite indication of an error, probably calling the function +twice. Access to the device should be controlled by checking the Windows +message queue only when the bitmap is not being accessed. +</blockquote> + +<hr> + +<h2><a name="Callback"></a>Callback function</h2> + +<blockquote> +As an argument to <a href="#init"><b><tt>gsdll_init()</tt></b></a> the +caller must provide a callback function which the DLL invokes for stdio and +to notify the caller about device events. The function provided by the +caller has this prototype: + +<blockquote><b><tt> +int gsdll_callback(int message, char *str, unsigned long count); +</tt></b></blockquote> + +<p> +The Pascal calling convention is not used. An example callback function +is: + +<blockquote> +<pre>int +gsdll_callback(int message, char *str, unsigned long count) +{ +char *p; + switch (message) { + case GSDLL_STDIN: + p = fgets(str, count, stdin); + if (p) + return strlen(str); + else + return 0; + case GSDLL_STDOUT: + if (str != (char *)NULL) + fwrite(str, 1, count, stdout); + return count; + case GSDLL_DEVICE: + fprintf(stdout,"Callback: DEVICE %p %s\n", str, + count ? "open" : "close"); + break; + case GSDLL_SYNC: + fprintf(stdout,"Callback: SYNC %p\n", str); + break; + case GSDLL_PAGE: + fprintf(stdout,"Callback: PAGE %p\n", str); + break; + case GSDLL_SIZE: + fprintf(stdout,"Callback: SIZE %p width=%d height=%d\n", str, + (int)(count & 0xffff), (int)((count>>16) & 0xffff) ); + break; + case GSDLL_POLL: + return 0; /* no error */ + default: + fprintf(stdout,"Callback: Unknown message=%d\n",message); + break; + } + return 0; +} +</pre> + +<table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Messages used by callback</font><hr> +<tr valign=bottom> + <th align=left>Symbol + <td> + <th align=left> + <td> + <th align=left>Use +<tr> <td colspan=5><hr> +<tr valign=top> <td><b><tt>GSDLL_STDIN</tt></b> + <td> + <td>1 + <td> + <td>get <b><tt>count</tt></b> characters to <b><tt>str</tt></b> from stdin, return number of characters read +<tr valign=top> <td><b><tt>GSDLL_STDOUT</tt></b> + <td> + <td>2 + <td> + <td>put <b><tt>count</tt></b> characters from <b><tt>str</tt></b> + to stdout, return number of characters written +<tr valign=top> <td><b><tt>GSDLL_DEVICE</tt></b> + <td> + <td>3 + <td> + <td>device <b><tt>str</tt></b> has been opened if + <b><tt>count</tt></b> = 1, closed if + <b><tt>count</tt></b> = 0 +<tr valign=top> <td><b><tt>GSDLL_SYNC</tt></b> + <td> + <td>4 + <td> + <td>sync_output for device <b><tt>str</tt></b> +<tr valign=top> <td><b><tt>GSDLL_PAGE</tt></b> + <td> + <td>5 + <td> + <td>output_page for device <b><tt>str</tt></b> +<tr valign=top> <td><b><tt>GSDLL_SIZE</tt></b> + <td> + <td>6 + <td> + <td>resize for device <b><tt>str</tt></b>: + LOWORD(<b><tt>count</tt></b>) is new <b><tt>xsize</tt></b>, + HIWORD(<b><tt>count</tt></b>) is new <b><tt>ysize</tt></b> +<tr valign=top> <td><b><tt>GSDLL_POLL</tt></b> + <td> + <td>7 + <td> + <td>Called from <b><tt>gp_check_interrupt()</tt></b><br> + Can be used by the caller to poll the message queue. + Normally returns 0. To abort + <b><tt>gsdll_execute_cont()</tt></b>, return a non-zero + error code until <b><tt>gsdll_execute_cont()</tt></b> + returns. +</table> +</blockquote> +</blockquote> + +<hr> + +<h2><a name="OS2_device"></a>Ghostscript DLL device for OS/2</h2> + +<p> +The <b><tt>os2dll</tt></b> device is provided in the Ghostscript DLL for +use by the caller. No drawing facilities are provided by the DLL because +the DLL may be loaded by a text-only (non-PM) application. The caller is +notified via the <b><tt>gsdll_callback()</tt></b> when a new +<b><tt>os2dll</tt></b> device is opened or closed +(<b><tt>GSDLL_DEVICE</tt></b>), when the window should be redrawn +(<b><tt>GSDLL_SYNC</tt></b> or <b><tt>GSDLL_PAGE</tt></b>) or when the +bitmap size changes (<b><tt>GSDLL_SIZE</tt></b>). +Note that more than one <b><tt>os2dll</tt></b> device may be opened. + +<h3><a name="OS2_bmp"></a><b><tt>gsdll_get_bitmap()</tt></b></h3> + +<blockquote> +<b><tt>gsdll_get_bitmap()</tt></b> returns a pointer to a bitmap in BMP +format. The <b><tt>os2dll</tt></b> device draws into this bitmap. + +<blockquote> +<pre>unsigned long gsdll_get_bitmap(unsigned char *device, unsigned char **pbitmap); + /* return in pbitmap the address of the bitmap */ + /* device is a pointer to Ghostscript os2dll device from GSDLL_DEVICE message */ +</pre></blockquote> + +<p> +The caller can then display the bitmap however it likes, but should lock +the bitmap with <b><tt>gsdll_lock_device()</tt></b> before painting from +it, and unlock it afterwards. The bitmap address does not change until the +<b><tt>os2dll</tt></b> device is closed; however the bitmap size and +palette may change whenever the bitmap is not locked. +</blockquote> + +<h3><a name="OS2_example"></a>Example DLL usage for OS/2</h3> + +<p> +The example here shows a minimal usage of the Ghostscript DLL under OS/2. +The sample callback function above is needed. + +<blockquote> +<pre>#define INCL_DOS +#include <os2.h> +#include <stdio.h> +#include "gsdll.h" + +PFN_gsdll_init pgsdll_init; +PFN_gsdll_execute_begin pgsdll_execute_begin; +PFN_gsdll_execute_cont pgsdll_execute_cont; +PFN_gsdll_execute_end pgsdll_execute_end; +PFN_gsdll_exit pgsdll_exit; + +HMODULE hmodule_gsdll; +char buf[256]; + +int +main(int argc, char *argv[]) +{ +int code; +APIRET rc; + if (!DosLoadModule(buf, sizeof(buf), "GSDLL2", &hmodule_gsdll)) { + fprintf(stderr, "Loaded GSDLL2\n"); + DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_init", (PFN *)(&pgsdll_init)); + DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_execute_begin", (PFN *)(&pgsdll_execute_begin)); + DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_execute_cont", (PFN *)(&pgsdll_execute_cont)); + DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_execute_end", (PFN *)(&pgsdll_execute_end)); + DosQueryProcAddr(hmodule_gsdll, 0, "gsdll_exit", (PFN *)(&pgsdll_exit)); + } + else { + fprintf(stderr, "Can't load GSDLL2\n"); + } + + code = (*pgsdll_init)(gsdll_callback, NULL, argc, argv); + fprintf(stdout,"gsdll_init returns %d\n", code); + code = (*pgsdll_execute_begin)(); + if (code==0) { + while (fgets(buf, sizeof(buf), stdin)) { + code = (*pgsdll_execute_cont)(buf, strlen(buf)); + fprintf(stdout,"gsdll_execute returns %d\n", code); + if (code < 0) + break; + } + if (!code) + code = (*pgsdll_execute_end)(); + code = (*pgsdll_exit)(); + fprintf(stdout,"gsdll_exit returns %d\n", code); + } + rc = DosFreeModule(hmodule_gsdll); + fprintf(stdout,"DosFreeModule returns %d\n", rc); + return 0; +} +</pre></blockquote> + +<hr> + +<h2><a name="Win_device"></a>Ghostscript DLL device for MS Windows</h2> + +<p> +The <b><tt>mswindll</tt></b> device is provided in the Ghostscript DLL for +use by the caller. The caller is notified via the +<b><tt>gsdll_callback()</tt></b> when a new <b><tt>mswindll</tt></b> device +is opened or closed (<b><tt>GSDLL_DEVICE</tt></b>), when the window should +be redrawn (<b><tt>GSDLL_SYNC</tt></b> or <b><tt>GSDLL_PAGE</tt></b>) or +when the bitmap size changes (<b><tt>GSDLL_SIZE</tt></b>). Note that more +than one <b><tt>mswindll</tt></b> device may be opened. + +<p> +Four DLL functions are available to use the <b><tt>mswindll</tt></b> +device. + +<h3><a name="Win_copydib"></a><b><tt>gsdll_copy_dib()</tt></b></h3> + +<blockquote> +Copy the <b><tt>mswindll</tt></b> bitmap to the clipboard. + +<blockquote> +<pre>HGLOBAL GSDLLAPI gsdll_copy_dib(unsigned char *device); + /* make a copy of the device bitmap and return shared memory handle to it */ + /* device is a pointer to Ghostscript device from GSDLL_DEVICE message */ +</pre></blockquote> +</blockquote> + +<h3><a name="Win_copypalette"></a><b><tt>gsdll_copy_palette()</tt></b></h3> + +<blockquote> +Copy the <b><tt>mswindll</tt></b> palette to the clipboard. + +<blockquote> +<pre>HPALETTE GSDLLAPI gsdll_copy_palette(unsigned char *device); +/* make a copy of the device palette and return a handle to it */ +/* device is a pointer to Ghostscript device from GSDLL_DEVICE message */ +</pre></blockquote> +</blockquote> + +<h3><a name="Win_draw"></a><b><tt>gsdll_draw()</tt></b></h3> + +<blockquote> +Display output from the <b><tt>mswindll</tt></b> device. The caller should +create a window and call <b><tt>gsdll_draw()</tt></b> in response to the +<b><tt>WM_PAINT</tt></b> message. The device context <b><tt>hdc</tt></b> +must be for a device because <b><tt>SetDIBitsToDevice()</tt></b> is used. + +<blockquote> +<pre>void GSDLLAPI gsdll_draw(unsigned char *device, HDC hdc, + LPRECT dest, LPRECT src); +/* copy the rectangle src from the device bitmap */ +/* to the rectangle dest on the device given by hdc */ +/* hdc must be a device context for a device (NOT a bitmap) */ +/* device is a pointer to Ghostscript device from GSDLL_DEVICE message */ +</pre></blockquote> +</blockquote> + +<h3><a name="Win_get_row"></a><b><tt>gsdll_get_bitmap_row()</tt></b></h3> + +<blockquote> +Get a BMP header, a palette, and a pointer to a row in the bitmap. This +function exists to allow the bitmap to be copied to a file or structured +storage without the overhead of having two copies of the bitmap in memory +at the same time. + +<p> +Ghostscript can change the palette while the device is locked. Do not call +this function while Ghostscript is busy. + +<blockquote> +<pre>int GSDLLAPI gsdll_get_bitmap_row(unsigned char *device, LPBITMAPINFOHEADER pbmih, + LPRGBQUAD prgbquad, LPBYTE *ppbyte, unsigned int row) +/* If pbmih nonzero, copy the BITMAPINFOHEADER. + * If prgbquad nonzero, copy the palette. + * number of entries copied is given by pbmih->biClrUsed + * If ppbyte nonzero, return pointer to row. + * pointer is only valid while device is locked + */ +</pre></blockquote> +</blockquote> + +<hr> + +<h2><a name="Win16"></a>Ghostscript DLL Device for 16-bit MS Windows</h2> + +<p> +This platform has the most problems of the three. Support for it may be +dropped in future. + +<p> +The Win16 DLL <b><tt>GSDLL16.DLL</tt></b> is a large-memory model DLL with +far static data. Due to the limitations of 16-bit MS Windows, the DLL can +be used by only one program at a time. + +<p> +However, <b><tt>GSDLL16</tt></b> is marked as having SINGLE SHARED data +segments, allowing multiple applications to load it with no error +indication. (The DLL wouldn't load at all if MULTIPLE NONSHARED was used). +Nonetheless, <b>it cannot be used by more than one application at a +time</b>, so applications loading <b><tt>GSDLL16</tt></b> should check the +return value of <b><tt>gsdll_init()</tt></b>: if this value is non-zero, +then <b><tt>GSDLL16</tt></b> is already in use by another application and +should <b><em>not</em></b> be used: <b><tt>GSDLL16</tt></b> should be +unloaded immediately using <b><tt>FreeLibrary()</tt></b>, or the calling +program should quit without attempting to use the library.. + +<p> +The segmented architecture of the Intel 80286 causes the usual amount of +grief when using <b><tt>GSDLL16</tt></b>. Because the callback is called +from the DLL, which is using a different data segment, the callback must be +declared as <b><tt>_far _export</tt></b>: + +<blockquote> +<pre>int _far _export gsdll_callback(int message, char *str, unsigned long count); +</pre></blockquote> + +<p> +Instead of giving <b><tt>gsdll_init()</tt></b> the address of +<b><tt>gsdll_callback()</tt></b>, it should instead be given the address of +a thunk created by <b><tt>MakeProcInstance</tt></b>. This thunk changes +the data segment back to that used by the caller: + +<blockquote> +<pre>FARPROC lpfnCallback; +lpfnCallback = (FARPROC)MakeProcInstance((FARPROC)gsdll_callback, hInstance); +code = (*pgsdll_init)((GSDLL_CALLBACK)lpfnCallback, NULL, argc, argv); +if (!code) { + fprintf(stderr, "GSDLL16 is already in use\n"); + return -1; +} +</pre></blockquote> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Develop.htm b/Master/xemtex/doc/ghostscript/Develop.htm new file mode 100644 index 00000000000..d6080881fc8 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Develop.htm @@ -0,0 +1,4327 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Information for Ghostscript developers</title> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +<!-- $Id: Develop.htm,v 1.47.2.18.2.6 2003/05/17 14:38:59 giles Exp $ --> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Information for Ghostscript developers</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Introduction">Introduction</a> +<li><a href="#Architecture">Architecture</a> +<ul> +<li><a href="#Design_goals">Design goals</a> +<li><a href="#Design_principles">Design principles</a> +<li><a href="#Large_scale_structure">Large-scale structure</a> +<li><a href="#Object_oriented_constructs">Object-oriented constructs</a> +</ul> +<li><a href="#File_roadmap">File roadmap</a> +<ul> +<li><a href="#Substrate">Substrate</a> +<li><a href="#Graphics_library">Graphics library</a> +<ul> +<li><a href="#Library_support">Support</a>, + <a href="#Paths">Paths</a>, + <a href="#Text">Text</a>, + <a href="#Images">Images</a>, + <a href="#Paint">Paint</a>, + <a href="#Clipping">Clipping</a>, + <a href="#Other_graphics">Other graphics</a>, + <a href="#Driver_support">Driver support</a> +</ul> +<li><a href="#Device_drivers">Device drivers</a> +<ul> +<li><a href="#Internal_devices">Internal devices</a>, + <a href="#PS_and_PDF_writers">PostScript and PDF writers</a>, + <a href="#High_level_devices">Other high-level devices</a>, + <a href="#Other_maintained_drivers">Other maintained drivers</a>, + <a href="#Contributed_drivers">Contributed drivers</a> +</ul> +<li><a href="#PostScript_interpreter">PostScript interpreter</a> +<ul> +<li><a href="#Main_program">Main program</a>, + <a href="#Data_structures">Data structures</a>, + <a href="#Interpreter_loop">Interpreter loop</a>, + <a href="#Scanning_parsing">Scanning/parsing</a>, + <a href="#Standard_operators">Standard operators</a>, + <a href="#Non_standard_operators">Non-standard operators</a>, + <a href="#Interpreter_support">Interpreter support</a>, + <a href="#PostScript_code">PostScript code</a> +</ul> +<li><a href="#PDF_interpreter">PDF interpreter</a> +<li><a href="#Build_process">Build process</a> +<ul> +<li><a href="#Makefile_structure">Makefile structure</a>, + <a href="#dev_files">.dev files</a>, + <a href="#Generators">Generators</a>, + <a href="#Build_support">Support</a> +</ul> +<li><a href="#Utilities">Utilities</a> +<ul> +<li><a href="#Utilities_in_PostScript">Utilities in PostScript</a> +<li><a href="#Utility_scripts">Utility scripts</a> +</ul> +</ul> +<li><a href="#Memory_management">Memory management</a> +<ul> +<li><a href="#Memory_manager_architecture">Memory manager architecture</a> +<ul> +<li><a href="#Objects_vs_strings">Objects vs strings</a>, + <a href="#Structure_descriptors">Structure descriptors</a>, + <a href="#Garbage_collection">Garbage collection</a>, + <a href="#Movability">Movability</a>, + <a href="#Parent_hierarchy">Parent hierarchy</a>, + <a href="#Allocator_API">Allocator API</a> +</ul> +<li><a href="#Freeing_storage">Freeing storage</a> +<ul> +<li><a href="#Explicit_freeing">Explicit freeing</a>, + <a href="#Reference_counting">Reference counting</a>, + <a href="#Real_garbage_collection">(Real) garbage collection</a> +</ul> +<li><a href="#Special_implementations">Special implementations</a> +<ul> +<li><a href="#malloc">malloc</a>, + <a href="#Locking">Locking</a>, + <a href="#Retrying">Retrying</a> +</ul> +<li><a href="#Standard_implementation">Standard implementation</a> +<li><a href="#PostScript_interpreter_extensions">PostScript interpreter extensions</a> +<ul> +<li><a href="#Refs">Refs (PostScript "objects")</a>, + <a href="#save_forgetsave_restore">save/.forgetsave/restore</a>, + <a href="#Stable_allocators">Stable allocators</a>, + <a href="#Interpreter_GC">Garbage collection</a> +</ul> +</ul> +<li><a href="#Portability">Portability</a> +<ul> +<li><a href="#Structural">Structural</a> +<ul> +<li><a href="#CPU_and_compiler">CPU and compiler</a>, + <a href="#Library_headers">Library headers</a>, + <a href="#Cross_platform_APIs">Cross-platform APIs</a>, + <a href="#Makefiles">Makefiles</a> +</ul> +<li><a href="#Coding">Coding</a> +<ul> +<li><a href="#Explicit_dependencies">Explicit dependencies</a>, + <a href="#Implicit_dependencies">Implicit dependencies</a> +</ul> +<li><a href="#Platform_specific_code">Platform-specific code</a> +</ul> +<li><a href="#Adding_features_and_options">Adding features and options</a> +<li><a href="#Troubleshooting">Troubleshooting</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a> and the documentation related to <a +href="Maintain.htm">maintaining Ghostscript</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Introduction"></a>Introduction</h2> + +<p> +This document provides a wealth of information about Ghostscript's +internals, primarily for developers actively working on Ghostscript. It is +primarily <strong>descriptive</strong>, documenting the way things are; the +companion <a href="C-style.htm">C style guide</a> is primarily +<strong>prescriptive</strong>, documenting what developers should do when +writing new code. + +<p> +THIS FILE IS A WORK IN PROGRESS. MANY SECTIONS ARE PLACE-HOLDERS. + +<h2><a name="Architecture"></a>Architecture</h2> + +<h3><a name="Design_goals"></a>Design goals</h3> + +<p> +Ghostscript has the following high-level design goals (not listed in order +of importance): + +<ul> +<li>Functionality +<ul> +<li>Ability to interpret the current PostScript and PDF languages, as +defined (and occasionally, in the case of conflict, as implemented) by +Adobe. +<li>Ability to convert PostScript to and from PDF, comparable to +Adobe products. +<li>Ability to produce output for a wide range of resolutions (from +TV-resolution displays to imagesetters) and color models (black and white, +multilevel gray, bilevel or multi-level RGB and CMYK, 6- or 8-color +inkjet printers, spot color). +</ul> +<li>Performance +<ul> +<li>Ability to render PostScript and PDF with commercial-quality performance +(memory usage, speed, and output quality) on all platforms. +<li>Specifically, ability to render PostScript effectively in embedded +environments with constrained RAM, including the ability to put the code and +supporting data in ROM. +</ul> +<li>Licensing +<ul> +<li>Licensing that supports both the Open Source / Free software communities +and a commercial licensing business. +<li>Freedom from licensing restrictions or fees imposed by third parties. +</ul> +<li>Other +<ul> +<li>Easy source portability to any platform (CPU, operating system, and +development tools) that has an ANSI or K&R C compiler. +<li>Support for writing new interpreters and new drivers with no change to +any existing code; specifically, ability to support PCL 5e, PCL 5c, and PCL +XL interpreters, and the ever-changing roster of inkjet printers. +</ul> +</ul> + +<p> +These goals often conflict: part of Ghostscript's claim to quality is that +the conflicts have been resolved well. + +<h3><a name="Design_principles"></a>Design principles</h3> + +<p> +Part of what has kept Ghostscript healthy through many years of major code +revisions and functional expansion is consistent and conscientious adherence +to a set of design principles. We hope the following list captures the most +important ones. + +<h4>Non-preemption</h4> + +<p> +Ghostscript is designed to be used as a component. As such, it must share +its environment with other components. Therefore, it must not require +ownership of, or make decisions about, inherently shared resources. +Specifically, it must not assume that it can "own" either the locus of +control or the management of the address space. + +<p> +Not owning control means that whenever Ghostscript passes control to its +caller, it must do so in a way that doesn't constrain what the caller can do +next. The caller must be able to call any other piece of software, wait for +an external event, execute another task, etc., without having to worry about +Ghostscript being in an unknown state. While this is easy to arrange in a +multi-threaded environment (by running Ghostscript in a separate thread), +multi-threading APIs are not well standardized at this time (December 2000), +and may not be implemented efficiently, or at all, on some platforms. +Therefore, Ghostscript must choose between only two options for interacting +with its caller: to <em>return</em>, preserving its own state in data +structures, or to <em>call back</em> through a caller-supplied procedure. +Calling back constrains the client program unacceptably: the callback +procedure only has the options of either returning, or aborting Ghostscript. +In particular, if it wants (for whatever reason) to multi-task Ghostscript +with another program, it cannot do so in general, especially if the other +program also uses callback rather than suspension. Therefore, Ghostscript +tries extremely hard to return, rather than calling back, for all caller +interaction. In particular: + +<ul> + +<li>For callers that want to pass input to Ghostscript piece by piece, +Ghostscript returns with an <b><tt>e_NeedInput</tt></b> code rather than +using a callback. This allows the caller complete flexibility in its +control structure for managing the source of input. (It might, for example, +be generating the input dynamically.) + +<li>In the future, the same arrangement should be used for input from +<b><tt>stdin</tt></b> and output to <b><tt>stdout</tt></b> and +<b><tt>stderr</tt></b>. + +<li>Likewise, scheduling of Ghostscript's own threads (contexts), currently +done with a callback, should be done with suspension. The Display +Ghostscript project (GNU DGS) is working on this. + +</ul> + +<p> +The one area where suspension is not feasible with Ghostscript's current +architecture is device output. Device drivers are called from deep within +the graphics library. (If Ghostscript were being redesigned from scratch, +we might try to do this with suspension as well, or at least optional +suspension.) + +<p> +Not owning management of the address space means that even though +Ghostscript supports garbage collection for its own data, it must not do any +of the things that garbage collection schemes for C often require: it must +not replace 'malloc' and 'free', must not require its clients to use its own +allocator, must not rely on manipulating the read/write status of memory +pages, must not require special compiler or run-time support (e.g., APIs for +scanning the C stack), must not depend on the availability of +multi-threading, and must not take possession of one of a limited number of +timer interrupts. However, in order not to constrain its own code unduly, +it must also not require using special macros or calls to enter or leave +procedures or assign pointers, and must not constrain the variety of C data +structures any more than absolutely necessary. It achieves all of these +goals, at the expense of some complexity, some performance cost (mostly for +garbage collection), and some extra manual work required for each structure +type allocated by its allocator. The details appear in the <a +href="#Memory_management">Memory management</a> section below. + +<h4>Multi-instantiability</h4> + +<p> +From many years of experience with the benefits of object-oriented design, +we have learned that when the word "the" appears in a software design -- +"the" process scheduler, "the" memory manager, "the" output device, "the" +interpreter, "the" stack -- it often flags an area in which the software +will have difficulty adapting to future needs. For this reason, Ghostscript +attempts to make every internal structure capable of existing in multiple +instances. For example, Ghostscript's memory manager is not a one-of-a-kind +entity with global state and procedures: it is (or rather they are, since +Ghostscript has multiple memory managers, some of which have multiple +instances) objects with their own state and (virtual) procedures. +Ghostscript's PostScript interpreter has no writable non-local data +(necessary, but not sufficient, to allow multiple instances), and in the +future will be extended to be completely reentrant and instantiable. The +device driver API is designed to make this easy for drivers as well. The +graphics library is currently not completely reentrant or instantiable: we +hope this will occur in the future. + +<h4>Late configuration binding</h4> + +<p> +Ghostscript is designed to make configuration choices as late as possible, +subject to simplicity and performance considerations. The major binding +times for such choices are compilation, linking, startup, and dynamic. + +<ul> + +<li>Compilation binds only CPU and compiler characteristics (including data +type size, presence of floating point hardware, and data alignment), and +whether the code will be used for production, debugging, or profiling. + +<li>Linking binds the choice of what features and device drivers will be +included in the executable. (Work is underway to make the choice of drivers +dynamic.) + +<li>Startup binds essentially nothing. Almost every option and parameter +that can appear on the command line can also be changed dynamically. + +<li>The selection of output device, all parameters associated with the +device, the selection of debugging printout and self-checking (in debugging +configurations), the macro-allocation of memory, and almost all other +operational parameters are dynamic. + +</ul> + +<p> +In addition, a number of major implementation decisions are made dynamically +depending on the availability of resources. For example, Ghostscript +chooses between banded and non-banded rendering depending on memory +availability. + +<h3><a name="Large_scale_structure"></a>Large-scale structure</h3> + +<p> +At the largest design scale, Ghostscript consists of 4 layers. Layer N +is allowed to use the facilities of all layers M <= N. + +<ol> + +<li>The bottom layer is called the <a href="#Substrate">substrate</a>. It +includes facilities like memory management, streams, fixed-point arithmetic, +and low-level interfaces to the operating system. The substrate is written +in C, with a little C++ and/or assembler code for some platforms. + +<li>The layer above the substrate is the graphics layer. It consists of two +separate sub-parts. The graphics layer is written in C. + +<ul> + +<li>The <a href="#Graphics_library">graphics library</a> manages graphics +state information for, and decomposes and renders 2-D images described +using, a graphics model that is approximately the union of those of +PostScript, PDF, and PCL 5e/5c/XL. + +<li>The <a href="#Device_drivers">device drivers</a> are called by the +graphics library to produce actual output. The graphics library, and all +higher layers, call device driver procedures only through virtual functions. + +</ul> + +<li>The principal clients of the graphics layer are language interpreters. +Ghostscript as distributed includes the <a +href="#PostScript_interpreter">PostScript interpreter</a>; there are also +interpreters for PCL 5e, PCL 5c, and PCL XL, which are not currently freely +redistributable and are not included in the standard Ghostscript package. +The PostScript interpreter is written partly in C and partly in PostScript. + +<li>The <a href="#PDF_interpreter">PDF interpreter</a> is actually a client +of the PostScript interpreter: it is written entirely in PostScript. + +</ol> + +<p> +The most important interface in Ghostscript is the API between the graphics +library and the device drivers: new printers (and, to a lesser extent, +window systems, displays, plotters, film recorders, and graphics file +formats) come on the scene frequently, and it must be possible to produce +output for them with a minimum of effort and distruption. This API is the +only one that is extensively documented (see <a +href="Drivers.htm">Drivers.htm</a>) and kept stringently backward-compatible +through successive releases. + +<h3><a name="Object_oriented_constructs"></a>Object-oriented constructs</h3> + +<p> +Ghostscript makes heavy use of object-oriented constructs, including +analogues of classes, instances, subclassing, and class-associated +procedures. Since Ghostscript is written in C, not C++, implementing these +constructs requires following coding conventions. The <a +href="C-style.htm#Objects">"Objects"</a> section of the C style guide +explains these. + +<p> +The memory manager API provides run-time type information about each class, +but this information does not include anything about subclassing. See under +<a href="#Structure_descriptors">Structure descriptors</a> below. + +<hr> + +<h2><a name="File_roadmap"></a>File roadmap</h2> + +<p> +This section of the document provides a roadmap to all of the Ghostscript +source files. + +<h3><a name="Substrate"></a>Substrate</h3> + +<h4>Memory manager</h4> + +<p> +See <a href="#Memory_management">below</a>. + +<h4>Streams</h4> + +<dl> + +<dt> +Framework, file and string streams: +<dd> +<a href="../src/gsdsrc.c">src/gsdsrc.c</a>, +<a href="../src/gsdsrc.h">src/gsdsrc.h</a>, +<a href="../src/scommon.h">src/scommon.h</a>, +<a href="../src/sfxboth.c">src/sfxboth.c</a>, +<a href="../src/sfxfd.c">src/sfxfd.c</a>, +<a href="../src/sfxstdio.c">src/sfxstdio.c</a>, +<a href="../src/stream.h">src/stream.h</a>, +<a href="../src/stream.c">src/stream.c</a>, +<a href="../src/strimpl.h">src/strimpl.h</a>. + +<dt> +Standard filters: +<dd> + +<dl> + +<dt> +CCITTFax: +<dd> +<a href="../src/scf.h">src/scf.h</a>, +<a href="../src/scfd.c">src/scfd.c</a>, +<a href="../src/scfdgen.c">src/scfdgen.c</a>, +<a href="../src/scfdtab.c">src/scfdtab.c</a>, +<a href="../src/scfe.c">src/scfe.c</a>, +<a href="../src/scfetab.c">src/scfetab.c</a>, +<a href="../src/scfparam.c">src/scfparam.c</a>, +<a href="../src/scfx.h">src/scfx.h</a>. + +<dt> +DCT (JPEG): +<dd> +<a href="../src/gsjconf.h">src/gsjconf.h</a>, +<a href="../src/gsjmorec.h">src/gsjmorec.h</a>, +<a href="../src/sdcparam.c">src/sdcparam.c</a>, +<a href="../src/sdcparam.h">src/sdcparam.h</a>, +<a href="../src/sdct.h">src/sdct.h</a>, +<a href="../src/sdctc.c">src/sdctc.c</a>, +<a href="../src/sdctd.c">src/sdctd.c</a>, +<a href="../src/sdcte.c">src/sdcte.c</a>, +<a href="../src/sddparam.c">src/sddparam.c</a>, +<a href="../src/sdeparam.c">src/sdeparam.c</a>, +<a href="../src/sjpeg.h">src/sjpeg.h</a>, +<a href="../src/sjpegc.c">src/sjpegc.c</a>, +<a href="../src/sjpegd.c">src/sjpegd.c</a>, +<a href="../src/sjpege.c">src/sjpege.c</a>. + +<dt> +Other compression/decompression: +<dd> +<a href="../src/slzwc.c">src/slzwc.c</a>, +<a href="../src/slzwce.c">src/slzwce.c</a>, +<a href="../src/slzwd.c">src/slzwd.c</a>, +<a href="../src/slzwx.h">src/slzwx.h</a>, +<a href="../src/srld.c">src/srld.c</a>, +<a href="../src/srle.c">src/srle.c</a>, +<a href="../src/srlx.h">src/srlx.h</a>. + +<dt> +Other: +<dd> +<a href="../src/sa85d.c">src/sa85d.c</a>, +<a href="../src/sa85d.h">src/sa85d.h</a>, +<a href="../src/sa85x.h">src/sa85x.h</a>, +<a href="../src/sfilter1.c">src/sfilter1.c</a>, +<a href="../src/sfilter2.c">src/sfilter2.c</a>, +<a href="../src/sstring.c">src/sstring.c</a>, +<a href="../src/sstring.h">src/sstring.h</a>. + +</dl> + +<dt> +Non-standard filters used to implement standard filters: +<dd> +<a href="../src/seexec.c">src/seexec.c</a>, +<a href="../src/sfilter.h">src/sfilter.h</a>, +<a href="../src/shc.c">src/shc.c</a>, +<a href="../src/shc.h">src/shc.h</a>, +<a href="../src/shcgen.c">src/shcgen.c</a>, +<a href="../src/shcgen.h">src/shcgen.h</a>, +<a href="../src/spdiff.c">src/spdiff.c</a>, +<a href="../src/spdiffx.h">src/spdiffx.h</a>, +<a href="../src/spngp.c">src/spngp.c</a>, +<a href="../src/spngpx.h">src/spngpx.h</a>, +<a href="../src/szlibc.c">src/szlibc.c</a>, +<a href="../src/szlibd.c">src/szlibd.c</a>, +<a href="../src/szlibe.c">src/szlibe.c</a>, +<a href="../src/szlibx.h">src/szlibx.h</a>, +<a href="../src/szlibxx.h">src/szlibxx.h</a>. + +<dt> +Non-standard filters: +<dd> +<a href="../src/sbcp.c">src/sbcp.c</a>, +<a href="../src/sbcp.h">src/sbcp.h</a>, +<a href="../src/sbhc.c">src/sbhc.c</a>, +<a href="../src/sbhc.h">src/sbhc.h</a>, +<a href="../src/sbtx.h">src/sbtx.h</a>, +<a href="../src/sbwbs.c">src/sbwbs.c</a>, +<a href="../src/sbwbs.h">src/sbwbs.h</a>, +<a href="../src/smd5.c">src/smd5.c</a>, +<a href="../src/smd5.h">src/smd5.h</a>, +<a href="../src/sarc4.c">src/sarc4.c</a>, +<a href="../src/sarc4.h">src/sarc4.h</a>, +<a href="../src/smtf.c">src/smtf.c</a>, +<a href="../src/smtf.h">src/smtf.h</a>. + +<dt> +Internal filters: +<dd> +a<a href="../src/siinterp.c">src/siinterp.c</a>, +<a href="../src/siinterp.h">src/siinterp.h</a>, +<a href="../src/siscale.c">src/siscale.c</a>, +<a href="../src/siscale.h">src/siscale.h</a>, +<a href="../src/sisparam.h">src/sisparam.h</a>. + +<dt> +Higher-level stream support: +<dd> +<a href="../src/spprint.c">src/spprint.c</a>, +<a href="../src/spprint.h">src/spprint.h</a>, +<a href="../src/spsdf.c">src/spsdf.c</a>, +<a href="../src/spsdf.h">src/spsdf.h</a>, +<a href="../src/srdline.h">src/srdline.h</a>. + +</dl> + +<h4>Platform-specific code</h4> + +See <a href="#Cross_platform_APIs">below</a>. + +<h4>Miscellaneous</h4> + +<dl> + +<dt> +Library top level: +<dd> +<a href="../src/gsinit.c">src/gsinit.c</a>, +<a href="../src/gslib.h">src/gslib.h</a>. + +<dt> +Configuration-related: +<dd> +<a href="../src/gconf.c">src/gconf.c</a>, +<a href="../src/gconf.h">src/gconf.h</a>, +<a href="../src/gscdef.c">src/gscdef.c</a>, +<a href="../src/gscdefs.h">src/gscdefs.h</a>. + +<dt> +Arithmetic: +<dd> +<a href="../src/gsfemu.c">src/gsfemu.c</a>, +<a href="../src/gxarith.h">src/gxarith.h</a>, +<a href="../src/gxdda.h">src/gxdda.h</a>, +<a href="../src/gxfarith.h">src/gxfarith.h</a>, +<a href="../src/gxfixed.h">src/gxfixed.h</a>, +<a href="../src/gxfrac.h">src/gxfrac.h</a>. + +<dt> +Operating system interface: +<dd> +<a href="../src/gserror.h">src/gserror.h</a>, +<a href="../src/gsexit.h">src/gsexit.h</a>, +<a href="../src/gxstdio.h">src/gxstdio.h</a>, +<a href="../src/gxsync.c">src/gxsync.c</a>, +<a href="../src/gxsync.h">src/gxsync.h</a>. + +<dt> +Other: +<dd> +<a href="../src/gsargs.c">src/gsargs.c</a>, +<a href="../src/gsargs.h">src/gsargs.h</a>, +<a href="../src/gserrors.h">src/gserrors.h</a>, +<a href="../src/gsnotify.c">src/gsnotify.c</a>, +<a href="../src/gsnotify.h">src/gsnotify.h</a>, +<a href="../src/gsrect.h">src/gsrect.h</a>, +<a href="../src/gstypes.h">src/gstypes.h</a>, +<a href="../src/gsuid.h">src/gsuid.h</a>, +<a href="../src/gsutil.h">src/gsutil.h</a>, +<a href="../src/gsutil.c">src/gsutil.c</a>, +<a href="../src/gx.h">src/gx.h</a>, +<a href="../src/md5.c">src/md5.c</a>, +<a href="../src/md5.h">src/md5.h</a>. + +</dl> + +<h3><a name="Graphics_library"></a>Graphics library</h3> + +<h4><a name="Library_support"></a>Support</h4> + +<dl> + +<dt> +Bitmap processing: +<dd> +<a href="../src/gsbitcom.c">src/gsbitcom.c</a>, +<a href="../src/gsbitmap.h">src/gsbitmap.h</a>, +<a href="../src/gsbitops.c">src/gsbitops.c</a>, +<a href="../src/gsbitops.h">src/gsbitops.h</a>, +<a href="../src/gsbittab.c">src/gsbittab.c</a>, +<a href="../src/gsbittab.h">src/gsbittab.h</a>, +<a href="../src/gsflip.c">src/gsflip.c</a>, +<a href="../src/gsflip.h">src/gsflip.h</a>, +<a href="../src/gxbitmap.h">src/gxbitmap.h</a>, +<a href="../src/gxbitops.h">src/gxbitops.h</a>, +<a href="../src/gxsample.c">src/gxsample.c</a>, +<a href="../src/gxsample.h">src/gxsample.h</a>. + +<dt> +Functions: +<dd> +<a href="../src/gsfunc.c">src/gsfunc.c</a>, +<a href="../src/gsfunc.h">src/gsfunc.h</a>, +<a href="../src/gsfunc0.c">src/gsfunc0.c</a>, +<a href="../src/gsfunc0.h">src/gsfunc0.h</a>, +<a href="../src/gsfunc3.c">src/gsfunc3.c</a>, +<a href="../src/gsfunc3.h">src/gsfunc3.h</a>, +<a href="../src/gsfunc4.c">src/gsfunc4.c</a>, +<a href="../src/gsfunc4.h">src/gsfunc4.h</a>, +<a href="../src/gsfuncv.c">src/gsfuncv.c</a>, +<a href="../src/gsfuncv.h">src/gsfuncv.h</a>, +<a href="../src/gxfunc.h">src/gxfunc.h</a>. + +<dt> +Parameter lists: +<dd> +<a href="../src/gscparam.c">src/gscparam.c</a>, +<a href="../src/gsparam.c">src/gsparam.c</a>, +<a href="../src/gsparam.h">src/gsparam.h</a>, +<a href="../src/gsparam2.c">src/gsparam2.c</a> (not used), +<a href="../src/gsparams.c">src/gsparams.c</a>, +<a href="../src/gsparams.h">src/gsparams.h</a>, +<a href="../src/gsparamx.c">src/gsparamx.c</a>, +<a href="../src/gsparamx.h">src/gsparamx.h</a>. + +<dt> +I/O-related: +<dd> +<a href="../src/gdevpipe.c">src/gdevpipe.c</a>, +<a href="../src/gsfname.c">src/gsfname.c</a>, +<a href="../src/gsfname.h">src/gsfname.h</a>, +<a href="../src/gsio.h">src/gsio.h</a>, +<a href="../src/gsiodev.c">src/gsiodev.c</a>, +<a href="../src/gsiodevs.c">src/gsiodevs.c</a>, +<a href="../src/gxiodev.h">src/gxiodev.h</a>. + +</dl> + +<h4><a name="Paths"></a>Paths</h4> + +<dl> + +<dt> +Coordinate transformation: +<dd> +<a href="../src/gscoord.c">src/gscoord.c</a>, +<a href="../src/gscoord.h">src/gscoord.h</a>, +<a href="../src/gsmatrix.c">src/gsmatrix.c</a>, +<a href="../src/gsmatrix.h">src/gsmatrix.h</a>, +<a href="../src/gxcoord.h">src/gxcoord.h</a>, +<a href="../src/gxmatrix.h">src/gxmatrix.h</a>. + +<dt> +Path building: +<dd> +<a href="../src/gsdps1.c">src/gsdps1.c</a>, +<a href="../src/gspath.c">src/gspath.c</a>, +<a href="../src/gspath.h">src/gspath.h</a>, +<a href="../src/gspath1.c">src/gspath1.c</a>, +<a href="../src/gspath2.h">src/gspath2.h</a>, +<a href="../src/gxpath.c">src/gxpath.c</a>, +<a href="../src/gxpath.h">src/gxpath.h</a>, +<a href="../src/gxpath2.c">src/gxpath2.c</a>, +<a href="../src/gxpcopy.c">src/gxpcopy.c</a>, +<a href="../src/gxpdash.c">src/gxpdash.c</a>, +<a href="../src/gxpflat.c">src/gxpflat.c</a>, +<a href="../src/gzpath.h">src/gzpath.h</a>. + +<dt> +Path rendering: +<dd> +<a href="../src/gdevddrw.c">src/gdevddrw.c</a>, +<a href="../src/gsdps1.c">src/gsdps1.c</a>, +<a href="../src/gspaint.c">src/gspaint.c</a>, +<a href="../src/gspaint.h">src/gspaint.h</a>, +<a href="../src/gspenum.h">src/gspenum.h</a>, +<a href="../src/gxfill.c">src/gxfill.c</a>, +<a href="../src/gxpaint.c">src/gxpaint.c</a>, +<a href="../src/gxpaint.h">src/gxpaint.h</a>, +<a href="../src/gxstroke.c">src/gxstroke.c</a>. + +<dt> +Clipping: +<dd> +See under <a href="#Clipping">Clipping</a> below. + +</dl> + +<h4><a name="Text"></a>Text</h4> + +<dl> + +<dt> +Fonts, generic: +<dd> +<a href="../src/gsfont.c">src/gsfont.c</a>, +<a href="../src/gsfont.h">src/gsfont.h</a>, +<a href="../src/gxfont.h">src/gxfont.h</a>. + +<dt> +Fonts, specific FontTypes: +<dd> +<a href="../src/gsfcid.c">src/gsfcid.c</a>, +<a href="../src/gsfcmap.c">src/gsfcmap.c</a>, +<a href="../src/gsfcmap.h">src/gsfcmap.h</a>, +<a href="../src/gsfont0.c">src/gsfont0.c</a>, +<a href="../src/gxcid.h">src/gxcid.h</a>, +<a href="../src/gxfcid.h">src/gxfcid.h</a>, +<a href="../src/gxfcmap.h">src/gxfcmap.h</a>, +<a href="../src/gxfont0.h">src/gxfont0.h</a>, +<a href="../src/gxfont1.h">src/gxfont1.h</a>, +<a href="../src/gxfont42.h">src/gxfont42.h</a>, +<a href="../src/gxftype.h">src/gxftype.h</a>, +<a href="../src/gxttf.h">src/gxttf.h</a>. + +<dt> +Character rendering + font cache, generic: +<dd> +<a href="../src/gsccode.h">src/gsccode.h</a>, +<a href="../src/gschar.c">src/gschar.c</a>, +<a href="../src/gschar.h">src/gschar.h</a>, +<a href="../src/gscpm.h">src/gscpm.h</a>, +<a href="../src/gstext.c">src/gstext.c</a>, +<a href="../src/gstext.h">src/gstext.h</a>, +<a href="../src/gxbcache.c">src/gxbcache.c</a>, +<a href="../src/gxbcache.h">src/gxbcache.h</a>, +<a href="../src/gxccache.c">src/gxccache.c</a>, +<a href="../src/gxccman.c">src/gxccman.c</a>, +<a href="../src/gxchar.c">src/gxchar.c</a>, +<a href="../src/gxchar.h">src/gxchar.h</a>, +<a href="../src/gxfcache.h">src/gxfcache.h</a>, +<a href="../src/gxtext.h">src/gxtext.h</a>. + +<dt> +Character rendering, specific FontTypes: +<dd> +<a href="../src/gschar0.c">src/gschar0.c</a>, +<a href="../src/gscrypt1.c">src/gscrypt1.c</a>, +<a href="../src/gscrypt1.h">src/gscrypt1.h</a>, +<a href="../src/gstype1.c">src/gstype1.c</a>, +<a href="../src/gstype1.h">src/gstype1.h</a>, +<a href="../src/gstype2.c">src/gstype2.c</a>, +<a href="../src/gstype42.c">src/gstype42.c</a>, +<a href="../src/gxchrout.c">src/gxchrout.c</a>, +<a href="../src/gxchrout.h">src/gxchrout.h</a>, +<a href="../src/gxhint1.c">src/gxhint1.c</a>, +<a href="../src/gxhint2.c">src/gxhint2.c</a>, +<a href="../src/gxhint3.c">src/gxhint3.c</a>, +<a href="../src/gxop1.h">src/gxop1.h</a>, +<a href="../src/gxtype1.c">src/gxtype1.c</a>, +<a href="../src/gxtype1.h">src/gxtype1.h</a>. + +</dl> + +<h4><a name="Images"></a>Images</h4> + +<dl> + +<dt> +Buffered API (mostly for PostScript interpreter): +<dd> +<a href="../src/gsimage.c">src/gsimage.c</a>, +<a href="../src/gsimage.h">src/gsimage.h</a>. + +<dt> +Generic support: +<dd> +<a href="../src/gsiparam.h">src/gsiparam.h</a>, +<a href="../src/gxiclass.h">src/gxiclass.h</a>, +<a href="../src/gximage.c">src/gximage.c</a>, +<a href="../src/gximage.h">src/gximage.h</a>, +<a href="../src/gxiparam.h">src/gxiparam.h</a>. + +<dt> +Type 1 and 4 images: +<dd> + +<dl> + +<dt> +Setup: +<dd> +<a href="../src/gsiparm4.h">src/gsiparm4.h</a>, +<a href="../src/gximage1.c">src/gximage1.c</a>, +<a href="../src/gximage4.c">src/gximage4.c</a>. + +<dt> +Rendering: +<dd> +<a href="../src/gxi12bit.c">src/gxi12bit.c</a>, +<a href="../src/gxicolor.c">src/gxicolor.c</a>, +<a href="../src/gxidata.c">src/gxidata.c</a>, +<a href="../src/gxifast.c">src/gxifast.c</a>, +<a href="../src/gximono.c">src/gximono.c</a>, +<a href="../src/gxino12b.c">src/gxino12b.c</a>, +<a href="../src/gxipixel.c">src/gxipixel.c</a>, +<a href="../src/gxiscale.c">src/gxiscale.c</a>. + +</dl> + +<dt> +Type 2 images (Display PostScript): +<dd> +<a href="../src/gsiparm2.h">src/gsiparm2.h</a>, +<a href="../src/gximage2.c">src/gximage2.c</a>. + +<dt> +Type 3 images: +<dd> +<a href="../src/gsipar3x.h">src/gsipar3x.h</a>, +<a href="../src/gsiparm3.h">src/gsiparm3.h</a>, +<a href="../src/gximag3x.c">src/gximag3x.c</a>, +<a href="../src/gximag3x.h">src/gximag3x.h</a>, +<a href="../src/gximage3.c">src/gximage3.c</a>, +<a href="../src/gximage3.h">src/gximage3.h</a>. + +<dt> +Other: +<dd> +<a href="../src/gsimpath.c">src/gsimpath.c</a>. + +</dl> + +<h4><a name="Paint"></a>Paint</h4> + +<p> +Ghostscript uses 4 internal representations of color. We list them here in +the order in which they occur in the rendering pipeline. + +<ol> + +<li>Clients of the graphics library normally specify colors using the +<em>client color</em> structure (<b><tt>gs_client_color</tt></b>, defined in +<a href="../src/gsccolor.h">src/gsccolor.h</a>), consisting of one or more +numeric values and/or a pointer to a Pattern instance. This corresponds +directly to the values that would be passed to the PostScript +<b><tt>setcolor</tt></b> operator: one or more (floating-point) numeric +components and/or a Pattern. Client colors are interpreted relative to a +color space (<b><tt>gs_color_space</tt></b>, defined in <a +href="../src/gscspace.h">src/gscspace.h</a> and <a +href="../src/gxcspace.h">src/gxcspace.h</a>, with specific color spaces +defined in other files). Client colors do not explicitly reference the +color space in which they are are interpreted: <b><tt>setcolor</tt></b> uses +the color space in the graphics state, while images and shadings explicitly +specify the color space to be used. + +<li>For ordinary non-Pattern colors, the first step in color rendering +reduces a client color to a <em>concrete</em> color -- a set of values in a +color space that corresponds to the device's color model (except for +possible conversions between DeviceGray, DeviceRGB, and DeviceCMYK), +together with an identification of the associated color space. (The +confusion here between color spaces and color models will have to be cleaned +up when we implement native Separation/DeviceN colors.) Concrete colors are +like the numeric values in a client color, except that they are represented +by arrays of <b><tt>frac</tt></b> values (defined in <a +href="../src/gxfrac.h">src/gxfrac.h</a>) rather than floats. The procedure +for this step is the virtual <b><tt>concretize_color</tt></b> and +<b><tt>concrete_space</tt></b> procedures in the (original) color space. +This step reduces Indexed colors, CIEBased colors, and Separation and +DeviceN colors that use the alternate space. + +<li>The final step requires mapping a concrete color to the device's color +model, done by procedures in <a href="../src/gxcmap.c">src/gxcmap.c</a>. +These procedures combine the following three conceptual sub-steps: + +<ul> + +<li>A possible mapping between Device color spaces, possibly involving black +generation and undercolor removal. The non-trivial cases are implemented in +<a href="../src/gxdcconv.c">src/gxdcconv.c</a>. + +<li>Application of the transfer function(s) (done in-line). + +<li>Halftoning if necessary: see below. + +</ul> + +The result is called (inappropriately) a <em>device color</em> +(<b><tt>gx_device_color</tt></b>, defined in <a +href="../src/gsdcolor.h">src/gsdcolor.h</a> and <a +href="../src/gxdcolor.h">src/gxdcolor.h</a>). For ordinary non-Pattern +colors, a device color is either a pure color, or a halftone. The device +and color model associated with a device color are implicit. The procedure +for this step is the virtual <b><tt>remap_concrete_color</tt></b> procedure +in the color space. + +<li>The pure colors that underlie a device color are opaque <em>pixel +values</em> defined by the device (misnamed <b><tt>gx_color_index</tt></b>, +defined in <a href="../src/gscindex.h">src/gscindex.h</a>). The device with +which they are associated is implicit. Although the format and +interpretation of a pixel value are known only to the device, the device's +color model and color representation capabilities are public, defined by a +<b><tt>gx_color_info</tt></b> structure stored in the device (defined in <a +href="../src/gxdevcli.h">src/gxdevcli.h</a>). Virtual procedures of the +device driver map between pixel values and RGB or CMYK. (This area is +untidy and will need to be cleaned up when we implement native +Separation/DeviceN colors.) + +</ol> + +<p> +Steps 2 and 3 are normally combined into a single step for efficiency, as +the <b><tt>remap_color</tt></b> virtual procedure in a color space. + +<p> +Using a device color to actually paint pixels requires a further step called +<em>color loading</em>, implemented by the <b><tt>load</tt></b> virtual +procedure in the device color. This does nothing for pure colors, but loads +the caches for halftones and Patterns. + +<p> +All of the above steps -- concretizing, mapping to a device color, and color +loading -- are done as late as possible, normally not until the color is +actually needed for painting. + +<p> +All painting operations (fill, stroke, imagemask/show) eventually call a +virtual procedure in the device color, either <b><tt>fill_rectangle</tt></b> +or <b><tt>fill_mask</tt></b> to actually paint pixels. For rectangle fills, +pure colors call the device's <b><tt>fill_rectangle</tt></b> procedure; +halftones and tiled Patterns call the device's +<b><tt>tile_rectangle</tt></b>; shaded Patterns, and painting operations +that involve a RasterOp, do something more complicated. + +<dl> + +<dt> +Color specification: +<dd> +<a href="../src/gsccolor.h">src/gsccolor.h</a>, +<a href="../src/gscolor.c">src/gscolor.c</a>, +<a href="../src/gscolor.h">src/gscolor.h</a>, +<a href="../src/gscolor1.c">src/gscolor1.c</a>, +<a href="../src/gscolor1.h">src/gscolor1.h</a>, +<a href="../src/gscolor2.c">src/gscolor2.c</a>, +<a href="../src/gscolor2.h">src/gscolor2.h</a>, +<a href="../src/gscolor3.c">src/gscolor3.c</a>, +<a href="../src/gscolor3.h">src/gscolor3.h</a>, +<a href="../src/gshsb.c">src/gshsb.c</a>, +<a href="../src/gshsb.h">src/gshsb.h</a>, +<a href="../src/gxcolor2.h">src/gxcolor2.h</a>, +<a href="../src/gxcvalue.h">src/gxcvalue.h</a>. + +<dt> +Color spaces: +<dd> +<a href="../src/gscdevn.c">src/gscdevn.c</a>, +<a href="../src/gscdevn.h">src/gscdevn.h</a>, +<a href="../src/gscie.c">src/gscie.c</a>, +<a href="../src/gscie.h">src/gscie.h</a>, +<a href="../src/gscpixel.c">src/gscpixel.c</a>, +<a href="../src/gscpixel.h">src/gscpixel.h</a>, +<a href="../src/gscscie.c">src/gscscie.c</a>, +<a href="../src/gscsepnm.h">src/gscsepnm.h</a>, +<a href="../src/gscsepr.c">src/gscsepr.c</a>, +<a href="../src/gscsepr.h">src/gscsepr.h</a>, +<a href="../src/gscspace.c">src/gscspace.c</a>, +<a href="../src/gscspace.h">src/gscspace.h</a>, +<a href="../src/gscssub.c">src/gscssub.c</a>, +<a href="../src/gscssub.h">src/gscssub.h</a>, +<a href="../src/gxcdevn.h">src/gxcdevn.h</a>, +<a href="../src/gxcie.h">src/gxcie.h</a>, +<a href="../src/gxcspace.h">src/gxcspace.h</a>. + +<dt> +Color mapping: +<dd> +<a href="../src/gsciemap.c">src/gsciemap.c</a>, +<a href="../src/gscindex.h">src/gscindex.h</a>, +<a href="../src/gscrd.c">src/gscrd.c</a>, +<a href="../src/gscrd.h">src/gscrd.h</a>, +<a href="../src/gscrdp.c">src/gscrdp.c</a>, +<a href="../src/gscrdp.h">src/gscrdp.h</a>, +<a href="../src/gscsel.h">src/gscsel.h</a>, +<a href="../src/gsdcolor.h">src/gsdcolor.h</a>, +<a href="../src/gxcindex.h">src/gxcindex.h</a>, +<a href="../src/gxcmap.c">src/gxcmap.c</a>, +<a href="../src/gxcmap.h">src/gxcmap.h</a>, +<a href="../src/gxctable.c">src/gxctable.c</a>, +<a href="../src/gxctable.h">src/gxctable.h</a>, +<a href="../src/gxdcconv.c">src/gxdcconv.c</a>, +<a href="../src/gxdcconv.h">src/gxdcconv.h</a>, +<a href="../src/gxdcolor.c">src/gxdcolor.c</a>, +<a href="../src/gxdcolor.h">src/gxdcolor.h</a>, +<a href="../src/gxdither.c">src/gxdither.c</a>, +<a href="../src/gxdither.h">src/gxdither.h</a>, +<a href="../src/gxfmap.h">src/gxfmap.h</a>, +<a href="../src/gxlum.h">src/gxlum.h</a>, +<a href="../src/gxtmap.h">src/gxtmap.h</a>. + +<p> +ICC profiles are in some ways a special case of color mapping, but are +not standard in PostScript. + +<dt> +Color mapping: +<dd> +<a href="../src/gsicc.c">src/gsicc.c</a>, +<a href="../src/gsicc.h">src/gsicc.h</a>, + +</dl> + +<p> +Ghostscript represents halftones internally by "whitening orders" -- +essentially, arrays of arrays of bit coordinates within a halftone cell, +specifying which bits are inverted to get from halftone level K to level +K+1. The code does support all of the PostScript halftone types, but they +are all ultimately reduced to whitening orders. + +<p> +Threshold arrays, the more conventional representation of halftones, can be +mapped to whitening orders straightforwardly; however, whitening orders can +represent non-monotonic halftones (halftones where the bits turned on for +level K+1 don't necessarily include all the bits turned on for level K), +while threshold arrays cannot. On the other hand, threshold arrays allow +rapid conversion of images (using a threshold comparison for each pixel) +with no additional space, while whitening orders do not: they require +storing the rendered halftone cell for each possible level as a bitmap. + +<p> +Ghostscript uses two distinct types of rendered halftones -- that is, the +bitmap(s) that represent a particular level. + +<ul> + +<li>Binary halftones. The rendered halftone is a single bit plane; each bit +selects one of two pure colors. These are fast but limited: they are used +for monochrome output devices, or for color devices in those cases where +only two distinct colors are involved in a halftone (e.g., a pure cyan shade +on a CMYK device). The device color for a binary halftone stores a pointer +to the halftone bitmap, and the two pure colors. + +<li>Multi-plane halftones. Internally, each plane is rendered individually. +Since there isn't enough room to store all 2^N pure colors, multi-plane +halftones only store the scaled values for the individual components; the +halftone renderer maps these to the pure colors on the fly, then combines +the planes to assemble an N-bit index into the list of colors for each +pixel, and stores the color into the fully rendered halftone. + +</ul> + +<p> +The halftone level for rendering a color is computed in <a +href="../src/gxdither.c">src/gxdither.c</a>; the actual halftone mask or +tile is computed either in <a href="../src/gxcht.c">src/gxcht.c</a> (for +multi-plane halftones), or in <a href="../src/gxht.c">src/gxht.c</a> and <a +href="../src/gxhtbit.c">src/gxhtbit.c</a> (for binary halftones). + +<dl> + +<dt> +Halftoning: +<dd> +<a href="../src/gsht.c">src/gsht.c</a>, +<a href="../src/gsht.h">src/gsht.h</a>, +<a href="../src/gsht1.c">src/gsht1.c</a>, +<a href="../src/gsht1.h">src/gsht1.h</a>, +<a href="../src/gshtscr.c">src/gshtscr.c</a>, +<a href="../src/gshtx.c">src/gshtx.c</a>, +<a href="../src/gshtx.h">src/gshtx.h</a>, +<a href="../src/gxcht.c">src/gxcht.c</a>, +<a href="../src/gxdht.h">src/gxdht.h</a>, +<a href="../src/gxdhtres.h">src/gxdhtres.h</a>, +<a href="../src/gxht.c">src/gxht.c</a>, +<a href="../src/gxht.h">src/gxht.h</a>, +<a href="../src/gxhtbit.c">src/gxhtbit.c</a>, +<a href="../src/gxhttile.h">src/gxhttile.h</a>, +<a href="../src/gxhttype.h">src/gxhttype.h</a>, +<a href="../src/gzht.h">src/gzht.h</a>. + +</dl> + +<p> +Pattern colors (tiled patterns and shadings) each use a slightly different +approach from solid colors. + +<p> +The device color for a tiled (PatternType 1) pattern contains a pointer to a +pattern instance, plus (for uncolored patterns) the device color to be +masked. The pattern instance includes a procedure that actually paints the +pattern if the pattern is not in the cache. For the PostScript interpreter, +this procedure returns an <b><tt>e_RemapColor</tt></b> exception code: this +eventually causes the interpreter to run the pattern's PaintProc, loading +the rendering into the cache, and then re-execute the original drawing +operator. + +<dl> + +<dt> +Patterns: +<dd> +<a href="../src/gspcolor.c">src/gspcolor.c</a>, +<a href="../src/gspcolor.h">src/gspcolor.h</a>, +<a href="../src/gsptype1.c">src/gsptype1.c</a>, +<a href="../src/gsptype1.h">src/gsptype1.h</a>, +<a href="../src/gxp1fill.c">src/gxp1fill.c</a>, +<a href="../src/gxp1impl.h">src/gxp1impl.h</a>, +<a href="../src/gxpcache.h">src/gxpcache.h</a>, +<a href="../src/gxpcmap.c">src/gxpcmap.c</a>, +<a href="../src/gxpcolor.h">src/gxpcolor.h</a>. + +</dl> + +<p> +The device color for a shading (PatternType 2) pattern also contains a +pointer to a pattern instance. Shadings are not cached: painting with a +shading runs the shading algorithm every time. + +<dl> + +<dt> +Shading: +<dd> +<a href="../src/gsptype2.c">src/gsptype2.c</a>, +<a href="../src/gsptype2.h">src/gsptype2.h</a>, +<a href="../src/gsshade.c">src/gsshade.c</a>, +<a href="../src/gsshade.h">src/gsshade.h</a>, +<a href="../src/gxshade.c">src/gxshade.c</a>, +<a href="../src/gxshade.h">src/gxshade.h</a>, +<a href="../src/gxshade1.c">src/gxshade1.c</a>, +<a href="../src/gxshade4.c">src/gxshade4.c</a>, +<a href="../src/gxshade4.h">src/gxshade4.h</a>, +<a href="../src/gxshade6.c">src/gxshade6.c</a>. + +</dl> + +<p> +In addition to the PostScript graphics model, Ghostscript supports RasterOp, +a weak form of alpha channel, and eventually the full PDF 1.4 transparency +model. The implemention of these facilities is quite slipshod and +scattered: only RasterOp is really implemented fully. There is a general +compositing architecture, but it is hardly used at all, and in particular is +not used for RasterOp. ****** TO BE COMPLETED ****** + +<dl> + +<dt> +Compositing architecture: +<dd> +<a href="../src/gscompt.h">src/gscompt.h</a>, +<a href="../src/gxcomp.h">src/gxcomp.h</a>. + +<dt> +RasterOp: +<dd> +<a href="../src/gdevdrop.c">src/gdevdrop.c</a>, +<a href="../src/gdevrops.c">src/gdevrops.c</a>, +<a href="../src/gsnorop.c">src/gsnorop.c</a>, +<a href="../src/gsrop.c">src/gsrop.c</a>, +<a href="../src/gsrop.h">src/gsrop.h</a>, +<a href="../src/gsropc.c">src/gsropc.c</a>, +<a href="../src/gsropc.h">src/gsropc.h</a>, +<a href="../src/gsropt.h">src/gsropt.h</a>, +<a href="../src/gsroptab.c">src/gsroptab.c</a>, +<a href="../src/gxdevrop.h">src/gxdevrop.h</a>, +<a href="../src/gxropc.h">src/gxropc.h</a>. + +<dt> +Alpha channel and compositing: +<dd> +<a href="../src/gsalpha.c">src/gsalpha.c</a>, +<a href="../src/gsalpha.h">src/gsalpha.h</a>, +<a href="../src/gsalphac.c">src/gsalphac.c</a>, +<a href="../src/gsalphac.h">src/gsalphac.h</a>, +<a href="../src/gsdpnext.h">src/gsdpnext.h</a>, +<a href="../src/gxalpha.h">src/gxalpha.h</a>. + +<dt> +Advanced transparency: +<dd> +<a href="../src/gstparam.h">src/gstparam.h</a>, +<a href="../src/gstrans.c">src/gstrans.c</a>, +<a href="../src/gstrans.h">src/gstrans.h</a>, +<a href="../src/gxblend.c">src/gxblend.c</a>, +<a href="../src/gxblend.h">src/gxblend.h</a>, +<a href="../src/gdevp14.c">src/gdevp14.c</a>. +<a href="../src/gdevp14.h">src/gdevp14.h</a>. +<a href="../src/gdevpnga.c">src/gdevpnga.c</a>. + +</dl> + +<h4><a name="Clipping"></a>Clipping</h4> + +<p> +The Ghostscript graphics library implements clipping by inserting a clipping +device in the device pipeline. The clipping device modifies all drawing +operations to confine them to the clipping region. + +<p> +The library supports three different kinds of clipping: + +<dl> + +<dt> +Region/path clipping +<dd> +This corresponds to the PostScript concept of a clipping path. The clipping +region is specified either by a list of rectangles (subject to the +constraints documented in <a href="../src/gxcpath.h">src/gxcpath.h</a>), or +by a path that is converted to such a list of rectangles. + +<dt> +Stationary mask clipping +<dd> +This corresponds to the mask operand of a PostScript ImageType 3 image. The +clipping region is specified by a bitmap and an (X,Y) offset in the +coordinate space. + +<dt> +Tiled mask clipping +<dd> +This corresponds to the region painted by a PostScript Pattern, for the case +where the Pattern does not completely cover its bounding box but the +combined transformation matrix has no skew or non-orthogonal rotation (i.e., +XStep and YStep map respectively to (X,0) and (0,Y) or vice versa). The +clipping region is specified by a bitmap and an (X,Y) offset in the +coordinate space, and is replicated indefinitely in both X and Y. + +</dl> + +<p> +Note that simply scan-converting a clipping path in the usual way does not +produce a succession of rectangles that can simply be stored as the list for +region-based clipping: in general, the rectangles do not satisfy the +constraint for rectangle lists specified in <a +href="../src/gxcpath.h">src/gxcpath.h</a>, since they may overlap in X, Y, +or both. A non-trivial "clipping list accumulator" device is needed to +produce a rectangle list that does satisfy the constraint. + +<dl> + +<dt> +Clipping support: +<dd> +<a href="../src/gxclip.c">src/gxclip.c</a>, +<a href="../src/gxclip.h">src/gxclip.h</a>. + +<dt> +Region/path clipping: +<dd> +<a href="../src/gxcpath.c">src/gxcpath.c</a>, +<a href="../src/gxcpath.h">src/gxcpath.h</a>, +<a href="../src/gzcpath.h">src/gzcpath.h</a>. + +<dt> +Clipping list accumulator: +<dd> +<a href="../src/gxacpath.c">src/gxacpath.c</a>, +<a href="../src/gzacpath.h">src/gzacpath.h</a>. + +<dt> +Mask clipping support: +<dd> +<a href="../src/gxmclip.c">src/gxmclip.c</a>, +<a href="../src/gxmclip.h">src/gxmclip.h</a>. + +<dt> +Stationary mask clipping: +<dd> +<a href="../src/gxclipm.c">src/gxclipm.c</a>, +<a href="../src/gxclipm.h">src/gxclipm.h</a>. + +<dt> +Tiled mask clipping: +<dd> +<a href="../src/gxclip2.c">src/gxclip2.c</a>, +<a href="../src/gxclip2.h">src/gxclip2.h</a>. + +</dl> + +<h4><a name="Other_graphics"></a>Other graphics</h4> + +<dl> + +<dt> +Miscellaneous graphics state: +<dd> +<a href="../src/gsclipsr.c">src/gsclipsr.c</a>, +<a href="../src/gsclipsr.h">src/gsclipsr.h</a>, +<a href="../src/gsdps.c">src/gsdps.c</a>, +<a href="../src/gsdps.h">src/gsdps.h</a>, +<a href="../src/gsdps1.c">src/gsdps1.c</a>, +<a href="../src/gsistate.c">src/gsistate.c</a>, +<a href="../src/gsline.c">src/gsline.c</a>, +<a href="../src/gsline.h">src/gsline.h</a>, +<a href="../src/gslparam.h">src/gslparam.h</a>, +<a href="../src/gsstate.c">src/gsstate.c</a>, +<a href="../src/gsstate.h">src/gsstate.h</a>, +<a href="../src/gstrap.c">src/gstrap.c</a>, +<a href="../src/gstrap.h">src/gstrap.h</a>, +<a href="../src/gxclipsr.h">src/gxclipsr.h</a>, +<a href="../src/gxistate.h">src/gxistate.h</a>, +<a href="../src/gxline.h">src/gxline.h</a>, +<a href="../src/gxstate.h">src/gxstate.h</a>, +<a href="../src/gzline.h">src/gzline.h</a>, +<a href="../src/gzstate.h">src/gzstate.h</a>. + +</dl> + +<h4><a name="Driver_support"></a>Driver support</h4> + +<dl> + +<dt> +Generic driver support: +<dd> +<a href="../src/gdevdcrd.c">src/gdevdcrd.c</a>, +<a href="../src/gdevdcrd.h">src/gdevdcrd.h</a>, +<a href="../src/gdevemap.c">src/gdevemap.c</a>, +<a href="../src/gsdevice.c">src/gsdevice.c</a>, +<a href="../src/gsdevice.h">src/gsdevice.h</a>, +<a href="../src/gsdparam.c">src/gsdparam.c</a>, +<a href="../src/gsxfont.h">src/gsxfont.h</a>, +<a href="../src/gxdevbuf.h">src/gxdevbuf.h</a>, +<a href="../src/gxdevcli.h">src/gxdevcli.h</a>, +<a href="../src/gxdevice.h">src/gxdevice.h</a>, +<a href="../src/gxrplane.h">src/gxrplane.h</a>, +<a href="../src/gxxfont.h">src/gxxfont.h</a>. + +<dt> +Accessing rendered bits: +<dd> +<a href="../src/gdevdbit.c">src/gdevdbit.c</a>, +<a href="../src/gdevdgbr.c">src/gdevdgbr.c</a>, +<a href="../src/gxbitfmt.h">src/gxbitfmt.h</a>, +<a href="../src/gxgetbit.h">src/gxgetbit.h</a>. + +<dt> +"Printer" driver support: +<dd> +<a href="../src/gdevmeds.c">src/gdevmeds.c</a>, +<a href="../src/gdevmeds.h">src/gdevmeds.h</a>, +<a href="../src/gdevppla.c">src/gdevppla.c</a>, +<a href="../src/gdevppla.h">src/gdevppla.h</a>, +<a href="../src/gdevprn.c">src/gdevprn.c</a>, +<a href="../src/gdevprn.h">src/gdevprn.h</a>, +<a href="../src/gdevprna.c">src/gdevprna.c</a>, +<a href="../src/gdevprna.h">src/gdevprna.h</a>, +<a href="../src/gxband.h">src/gxband.h</a>, +<a href="../src/gxpageq.c">src/gxpageq.c</a>, +<a href="../src/gxpageq.h">src/gxpageq.h</a>. + +<dt> +High-level device support: +<dd> +<a href="../src/gdevvec.c">src/gdevvec.c</a>, +<a href="../src/gdevvec.h">src/gdevvec.h</a>. + +<dt> +Banding: +<dd> +<a href="../src/gxclbits.c">src/gxclbits.c</a>, +<a href="../src/gxcldev.h">src/gxcldev.h</a>, +<a href="../src/gxclfile.c">src/gxclfile.c</a>, +<a href="../src/gxclimag.c">src/gxclimag.c</a>, +<a href="../src/gxclio.h">src/gxclio.h</a>, +<a href="../src/gxclist.c">src/gxclist.c</a>, +<a href="../src/gxclist.h">src/gxclist.h</a>, +<a href="../src/gxcllzw.c">src/gxcllzw.c</a>, +<a href="../src/gxclmem.c">src/gxclmem.c</a>, +<a href="../src/gxclmem.h">src/gxclmem.h</a>, +<a href="../src/gxclpage.c">src/gxclpage.c</a>, +<a href="../src/gxclpage.h">src/gxclpage.h</a>, +<a href="../src/gxclpath.c">src/gxclpath.c</a>, +<a href="../src/gxclpath.h">src/gxclpath.h</a>, +<a href="../src/gxclrast.c">src/gxclrast.c</a>, +<a href="../src/gxclread.c">src/gxclread.c</a>, +<a href="../src/gxclrect.c">src/gxclrect.c</a>, +<a href="../src/gxclutil.c">src/gxclutil.c</a>, +<a href="../src/gxclzlib.c">src/gxclzlib.c</a>. + +</dl> + +<h3><a name="Device_drivers"></a>Device drivers</h3> + +<p> +See <a href="Drivers.htm">doc/Drivers.htm</a> for extensive documentation on +the interface between the core code and drivers. + +<p> +The driver API includes high-level (path / image / text), mid-level +(polygon), and low-level (rectangle / raster) operations. Most devices +implement only the low-level operations, and let generic code break down the +high-level operations. However, some devices produce high-level output, and +therefore must implement the high-level operations. + +<h4><a name="Internal_devices"></a>Internal devices</h4> + +<p> +There are a number of "devices" that serve internal purposes. Some of these +are meant to be real rendering targets; others are intended for use in +device pipelines. The rendering targets are: + +<dl> + +<dt> +Memory devices, depth-independent: +<dd> +<a href="../src/gdevmem.c">src/gdevmem.c</a>, +<a href="../src/gdevmem.h">src/gdevmem.h</a>, +<a href="../src/gdevmpla.c">src/gdevmpla.c</a>, +<a href="../src/gdevmpla.h">src/gdevmpla.h</a>, +<a href="../src/gdevmrop.h">src/gdevmrop.h</a>, +<a href="../src/gsdevmem.c">src/gsdevmem.c</a>, +<a href="../src/gxdevmem.h">src/gxdevmem.h</a>. + +<dt> +Memory devices, specific depths: +<dd> +<a href="../src/gdevm1.c">src/gdevm1.c</a>, +<a href="../src/gdevm2.c">src/gdevm2.c</a>, +<a href="../src/gdevm4.c">src/gdevm4.c</a>, +<a href="../src/gdevm8.c">src/gdevm8.c</a>, +<a href="../src/gdevm16.c">src/gdevm16.c</a>, +<a href="../src/gdevm24.c">src/gdevm24.c</a>, +<a href="../src/gdevm32.c">src/gdevm32.c</a>, +<a href="../src/gdevmr1.c">src/gdevmr1.c</a>, +<a href="../src/gdevmr2n.c">src/gdevmr2n.c</a>, +<a href="../src/gdevmr8n.c">src/gdevmr8n.c</a>. + +<dt> +Alpha-related devices: +<dd> +<a href="../src/gdevabuf.c">src/gdevabuf.c</a>, +<a href="../src/gdevalph.c">src/gdevalph.c</a>. + +<dt> +Other devices: +<dd> +<a href="../src/gdevdflt.c">src/gdevdflt.c</a>, +<a href="../src/gdevhit.c">src/gdevhit.c</a>, +<a href="../src/gdevht.c">src/gdevht.c</a>, +<a href="../src/gdevht.h">src/gdevht.h</a>, +<a href="../src/gdevmrun.c">src/gdevmrun.c</a>, +<a href="../src/gdevmrun.h">src/gdevmrun.h</a>, +<a href="../src/gdevplnx.c">src/gdevplnx.c</a>, +<a href="../src/gdevplnx.h">src/gdevplnx.h</a>, + +</dl> + +<p> +The forwarding devices meant for use in pipelines are: + +<dl> + +<dt> +The bounding box device: +<dd> +<a href="../src/gdevbbox.h">src/gdevbbox.h</a>, +<a href="../src/gdevbbox.c">src/gdevbbox.c</a>. + +<dt> +Clipping devices: +<dd> +See under <a href="#Clipping">Clipping</a> above. + +<dt> +Device filter stack: +<dd> +<a href="../src/gsdfilt.c">src/gsdfilt.c</a>, +<a href="../src/gsdfilt.h">src/gsdfilt.h</a>, + +<dt> +Other devices: +<dd> +<a href="../src/gdevcmap.c">src/gdevcmap.c</a>, +<a href="../src/gdevcmap.h">src/gdevcmap.h</a>, +<a href="../src/gdevnfwd.c">src/gdevnfwd.c</a>. + +</dl> + +<h4><a name="PS_and_PDF_writers"></a>PostScript and PDF writers</h4> + +<p> +Because PostScript and PDF have the same graphics model, lexical syntax, and +stack-based execution model, the drivers that produce PostScript and PDF +output share a significant amount of support code. In the future, the +PostScript output driver should be replaced with a slightly modified version +of the PDF driver, since the latter is far more sophisticated (in +particular, it has extensive facilities for image compression and for +handling text and fonts). + +<dl> + +<dt> +Shared support: +<dd> + +<dl> +Writing fonts: +<dd> +<a href="../src/gdevpsf.h">src/gdevpsf.h</a>, +<a href="../src/gdevpsf1.c">src/gdevpsf1.c</a>, +<a href="../src/gdevpsf2.c">src/gdevpsf2.c</a>, +<a href="../src/gdevpsfm.c">src/gdevpsfm.c</a>, +<a href="../src/gdevpsft.c">src/gdevpsft.c</a>, +<a href="../src/gdevpsfu.c">src/gdevpsfu.c</a>, +<a href="../src/gdevpsfx.c">src/gdevpsfx.c</a>. + +<dt> +Other: +<dd> +<a href="../src/gdevpsdf.h">src/gdevpsdf.h</a>, +<a href="../src/gdevpsdi.c">src/gdevpsdi.c</a>, +<a href="../src/gdevpsdp.c">src/gdevpsdp.c</a>, +<a href="../src/gdevpsds.c">src/gdevpsds.c</a>, +<a href="../src/gdevpsds.h">src/gdevpsds.h</a>, +<a href="../src/gdevpsdu.c">src/gdevpsdu.c</a>. + +</dl> + +<dt> +PostScript output driver ([e]pswrite): +<dd> +<a href="../src/gdevps.c">src/gdevps.c</a>, +<a href="../src/gdevpsu.c">src/gdevpsu.c</a>, +<a href="../src/gdevpsu.h">src/gdevpsu.h</a>. + +<dt> +PDF output driver (pdfwrite): +<dd> +<dl> + +<dt> +Substrate: +<dd> +<a href="../src/gdevpdfo.c">src/gdevpdfo.c</a>, +<a href="../src/gdevpdfo.h">src/gdevpdfo.h</a>, +<a href="../src/gdevpdfr.c">src/gdevpdfr.c</a>, +<a href="../src/gdevpdfu.c">src/gdevpdfu.c</a>. + +<dt> +Text and fonts: +<dd> +<a href="../src/gdevpdfe.c">src/gdevpdfe.c</a>, +<a href="../src/gdevpdff.c">src/gdevpdff.c</a>, +<a href="../src/gdevpdff.h">src/gdevpdff.h</a>, +<a href="../src/gdevpdfs.c">src/gdevpdfs.c</a>, +<a href="../src/gdevpdft.c">src/gdevpdft.c</a>, +<a href="../src/gdevpdfw.c">src/gdevpdfw.c</a>. + +<dt> +Graphics: +<dd> +<a href="../src/gdevpdfc.c">src/gdevpdfc.c</a>, +<a href="../src/gdevpdfd.c">src/gdevpdfd.c</a>, +<a href="../src/gdevpdfg.c">src/gdevpdfg.c</a>, +<a href="../src/gdevpdfg.h">src/gdevpdfg.h</a>, +<a href="../src/gdevpdfv.c">src/gdevpdfv.c</a>. + +<dt> +Images: +<dd> +<a href="../src/gdevpdfb.c">src/gdevpdfb.c</a>, +<a href="../src/gdevpdfi.c">src/gdevpdfi.c</a>, +<a href="../src/gdevpdfj.c">src/gdevpdfj.c</a>. + +<dt> +Other: +<dd> +<a href="../src/gdevpdf.c">src/gdevpdf.c</a>, +<a href="../src/gdevpdfm.c">src/gdevpdfm.c</a>, +<a href="../src/gdevpdfp.c">src/gdevpdfp.c</a>, +<a href="../src/gdevpdfx.h">src/gdevpdfx.h</a>. + +</dl> + +</dl> + +<h4><a name="High_level_devices"></a>Other high-level devices</h4> + +<p> +Currently, the CGM driver is raster-only. If anyone cares seriously about +CGM in the future, this driver should be upgraded to a higher level. + +<dl> + +<dt> +PCL XL output device (pxlmono, pxlcolor): +<dd> +<a href="../src/gdevpx.c">src/gdevpx.c</a>, +<a href="../src/gdevpxat.h">src/gdevpxat.h</a>, +<a href="../src/gdevpxen.h">src/gdevpxen.h</a>, +<a href="../src/gdevpxop.h">src/gdevpxop.h</a>, +<a href="../src/gdevpxut.c">src/gdevpxut.c</a>, +<a href="../src/gdevpxut.h">src/gdevpxut.h</a>. + +<dt> +Other high-level devices: +<dd> +<a href="../src/gdevtrac.c">src/gdevtrac.c</a>. + +</dl> + +<h4><a name="Other_maintained_drivers"></a>Other maintained drivers</h4> + +<p> +The standard Ghostscript distribution includes a collection of drivers, +mostly written by Aladdin Enterprises, that are "maintained" in the same +sense as the Ghostscript core code. + +<dl> + +<dt> +Display drivers: +<dd> +<a href="../src/gdev8bcm.c">src/gdev8bcm.c</a>, +<a href="../src/gdev8bcm.h">src/gdev8bcm.h</a>, +<a href="../src/gdevegaa.asm">src/gdevegaa.asm</a>, +<a href="../src/gdevevga.c">src/gdevevga.c</a>, +<a href="../src/gdevl256.c">src/gdevl256.c</a>, +<a href="../src/gdevpccm.c">src/gdevpccm.c</a>, +<a href="../src/gdevpccm.h">src/gdevpccm.h</a>, +<a href="../src/gdevpcfb.c">src/gdevpcfb.c</a>, +<a href="../src/gdevpcfb.h">src/gdevpcfb.h</a>, +<a href="../src/gdevs3ga.c">src/gdevs3ga.c</a>, +<a href="../src/gdevsco.c">src/gdevsco.c</a>, +<a href="../src/gdevsvga.c">src/gdevsvga.c</a>, +<a href="../src/gdevsvga.h">src/gdevsvga.h</a>, +<a href="../src/gdevvglb.c">src/gdevvglb.c</a>. + +<dt> +Window system drivers: +<dd> + +<dl> + +<dt> +X Windows: +<dd> +<a href="../src/gdevx.c">src/gdevx.c</a>, +<a href="../src/gdevx.h">src/gdevx.h</a>, +<a href="../src/gdevxalt.c">src/gdevxalt.c</a>, +<a href="../src/gdevxcmp.c">src/gdevxcmp.c</a>, +<a href="../src/gdevxcmp.h">src/gdevxcmp.h</a>, +<a href="../src/gdevxini.c">src/gdevxini.c</a>, +<a href="../src/gdevxres.c">src/gdevxres.c</a>, +<a href="../src/gdevxxf.c">src/gdevxxf.c</a>. + +<dt> +Microsoft Windows: +<dd> +<a href="../src/gdevmswn.c">src/gdevmswn.c</a>, +<a href="../src/gdevmswn.h">src/gdevmswn.h</a>, +<a href="../src/gdevmsxf.c">src/gdevmsxf.c</a>, +<a href="../src/gdevwddb.c">src/gdevwddb.c</a>, +<a href="../src/gdevwdib.c">src/gdevwdib.c</a>. + +<dt> +OS/2 Presentation Manager: +<dd> +<a href="../src/gdevpm.c">src/gdevpm.c</a>, +<a href="../src/gdevpm.h">src/gdevpm.h</a>, +<a href="../src/gspmdrv.c">src/gspmdrv.c</a>, +<a href="../src/gspmdrv.h">src/gspmdrv.h</a>. + +</dl> + +<dt> +Raster file output drivers: +<dd> + +<dl> + +<dt> +Fax and TIFF: +<dd> +<a href="../src/gdevfax.c">src/gdevfax.c</a>, +<a href="../src/gdevfax.h">src/gdevfax.h</a>, +<a href="../src/gdevtfax.c">src/gdevtfax.c</a>, +<a href="../src/gdevtfax.h">src/gdevtfax.h</a>, +<a href="../src/gdevtifs.c">src/gdevtifs.c</a>, +<a href="../src/gdevtifs.h">src/gdevtifs.h</a>, +<a href="../src/gdevtfnx.c">src/gdevtfnx.c</a>. + +<dt> +(Low-level) CGM: +<dd> +<a href="../src/gdevcgm.c">src/gdevcgm.c</a>, +<a href="../src/gdevcgml.c">src/gdevcgml.c</a>, +<a href="../src/gdevcgml.h">src/gdevcgml.h</a>, +<a href="../src/gdevcgmx.h">src/gdevcgmx.h</a>. + +<dt> +Other raster file formats: +<dd> +<a href="../src/gdevbit.c">src/gdevbit.c</a>, +<a href="../src/gdevbmp.c">src/gdevbmp.c</a>, +<a href="../src/gdevbmp.h">src/gdevbmp.h</a>, +<a href="../src/gdevbmpa.c">src/gdevbmpa.c</a>, +<a href="../src/gdevbmpc.c">src/gdevbmpc.c</a>, +<a href="../src/gdevjpeg.c">src/gdevjpeg.c</a>, +<a href="../src/gdevmiff.c">src/gdevmiff.c</a>, +<a href="../src/gdevp2up.c">src/gdevp2up.c</a>, +<a href="../src/gdevpcx.c">src/gdevpcx.c</a>, +<a href="../src/gdevpbm.c">src/gdevpbm.c</a>, +<a href="../src/gdevpng.c">src/gdevpng.c</a>, +<a href="../src/gdevpsim.c">src/gdevpsim.c</a>. + +</dl> + +<dt> +Printer drivers: +<dd> + +<dl> + +<dt> +Operating system printer services: +<dd> +<a href="../src/gdevos2p.c">src/gdevos2p.c</a>, +<a href="../src/gdevwpr2.c">src/gdevwpr2.c</a>, +<a href="../src/gdevwprn.c">src/gdevwprn.c</a>. + +<dt> +H-P monochrome printers: +<dd> +<a href="../src/gdevdljm.c">src/gdevdljm.c</a>, +<a href="../src/gdevdljm.h">src/gdevdljm.h</a>, +<a href="../src/gdevdjet.c">src/gdevdjet.c</a>, +<a href="../src/gdevlj56.c">src/gdevlj56.c</a>. + +<dt> +Other printers: +<dd> +<a href="../src/gdevatx.c">src/gdevatx.c</a>. + +</dl> + +</dl> + +<h4><a name="Contributed_drivers"></a>Contributed drivers</h4> + +<p> +This list is likely to be incomplete and inaccurate: see <a +href="../src/contrib.mak">src/contrib.mak</a> for the real one. + +<dl> + +<dt> +Display and window system drivers: +<dd> +<a href="../src/gdev3b1.c">src/gdev3b1.c</a>, +<a href="../src/gdevherc.c">src/gdevherc.c</a>, +<a href="../src/gdevpe.c">src/gdevpe.c</a>, +<a href="../src/gdevsnfb.c">src/gdevsnfb.c</a>, +<a href="../src/gdevsun.c">src/gdevsun.c</a>. + +<dt> +Raster file output drivers: +<dd> +<a href="../src/gdevcfax.c">src/gdevcfax.c</a>, +<a href="../src/gdevcif.c">src/gdevcif.c</a>, +<a href="../src/gdevdfax.c">src/gdevdfax.c</a>, +<a href="../src/gdevifno.c">src/gdevifno.c</a>, +<a href="../src/gdevmgr.c">src/gdevmgr.c</a>, +<a href="../src/gdevmgr.h">src/gdevmgr.h</a>, +<a href="../src/gdevsgi.c">src/gdevsgi.c</a>, +<a href="../src/gdevsgi.h">src/gdevsgi.h</a>, +<a href="../src/gdevsunr.c">src/gdevsunr.c</a>. + +<dt> +Printer drivers: +<dd> +<a href="../lib/bj8.rpd">lib/bj8.rpd</a>, +<a href="../lib/cbjc600.ppd">lib/cbjc600.ppd</a>, +<a href="../lib/cbjc800.ppd">lib/cbjc800.ppd</a>, +<a href="../src/gdev3852.c">src/gdev3852.c</a>, +<a href="../src/gdev4081.c">src/gdev4081.c</a>, +<a href="../src/gdev4693.c">src/gdev4693.c</a>, +<a href="../src/gdev8510.c">src/gdev8510.c</a>, +<a href="../src/gdevadmp.c">src/gdevadmp.c</a>, +<a href="../src/gdevbj10.c">src/gdevbj10.c</a>, +<a href="../src/gdevbjc.h">src/gdevbjc.h</a>, +<a href="../src/gdevbjcl.c">src/gdevbjcl.c</a>, +<a href="../src/gdevbjcl.h">src/gdevbjcl.h</a>, +<a href="../src/gdevccr.c">src/gdevccr.c</a>, +<a href="../src/gdevcdj.c">src/gdevcdj.c</a>, +<a href="../src/gdevclj.c">src/gdevclj.c</a>, +<a href="../src/gdevcljc.c">src/gdevcljc.c</a>, +<a href="../src/gdevcp50.c">src/gdevcp50.c</a>, +<a href="../src/gdevcslw.c">src/gdevcslw.c</a>, +<a href="../src/gdevdjtc.c">src/gdevdjtc.c</a>, +<a href="../src/gdevdm24.c">src/gdevdm24.c</a>, +<a href="../src/gdevepsc.c">src/gdevepsc.c</a>, +<a href="../src/gdevepsn.c">src/gdevepsn.c</a>, +<a href="../src/gdevescp.c">src/gdevescp.c</a>, +<a href="../src/gdevhl7x.c">src/gdevhl7x.c</a>, +<a href="../src/gdevhpij.c">src/gdevhpij.c</a>, +<a href="../src/gdevhpij.h">src/gdevhpij.h</a>, +<a href="../src/gdevijs.c">src/gdevijs.c</a>, +<a href="../src/gdevimgn.c">src/gdevimgn.c</a>, +<a href="../src/gdevl31s.c">src/gdevl31s.c</a>, +<a href="../src/gdevlbp8.c">src/gdevlbp8.c</a>, +<a href="../src/gdevlp8k.c">src/gdevlp8k.c</a>, +<a href="../src/gdevlxm.c">src/gdevlxm.c</a>, +<a href="../src/gdevn533.c">src/gdevn533.c</a>, +<a href="../src/gdevo182.c">src/gdevo182.c</a>, +<a href="../src/gdevokii.c">src/gdevokii.c</a>, +<a href="../src/gdevpcl.c">src/gdevpcl.c</a>, +<a href="../src/gdevpcl.h">src/gdevpcl.h</a>, +<a href="../src/gdevphex.c">src/gdevphex.c</a>, +<a href="../src/gdevpjet.c">src/gdevpjet.c</a>, +<a href="../src/gdevsj48.c">src/gdevsj48.c</a>, +<a href="../src/gdevsppr.c">src/gdevsppr.c</a>, +<a href="../src/gdevstp.c">src/gdevstp.c</a>, +<a href="../src/gdevstc.c">src/gdevstc.c</a>, +<a href="../src/gdevstc.h">src/gdevstc.h</a>, +<a href="../src/gdevstc1.c">src/gdevstc1.c</a>, +<a href="../src/gdevstc2.c">src/gdevstc2.c</a>, +<a href="../src/gdevstc3.c">src/gdevstc3.c</a>, +<a href="../src/gdevstc4.c">src/gdevstc4.c</a>, +<a href="../src/gdevtknk.c">src/gdevtknk.c</a>, +<a href="../src/gdevupd.c">src/gdevupd.c</a>. +<a href="../src/gdevhl12.c">src/gdevhl12.c</a>. + +</dl> + +<h3><a name="PostScript_interpreter"></a>PostScript interpreter</h3> + +<p> +The PostScript interpreter is conceptually simple: in fact, an interpreter +that could execute "3 4 add =" and print "7" was running 3 weeks after the +first line of Ghostscript code was written. However, a number of +considerations make the code large and complex. + +<p> +The interpreter is designed to run in environments with very limited memory. +The main consequence of this is that it cannot allocate its stacks +(dictionary, execution, operand) as ordinary arrays, since the +user-specified stack size limit may be very large. Instead, it allocates +them as a linked list of blocks. See below for more details. + +<p> +The interpreter must never cause a C runtime error that it cannot trap. +Unfortunately, C implementations almost never provide the ability to trap +stack overflow. In order to put a fixed bound on the C stack size, the +interpreter never implements PostScript recursion by C recursion. This +means that any C code that logically needs to call the interpreter must +instead push a continuation (including all necessary state information) on +the PostScript execution stack, followed by the PostScript object to be +executed, and then <em>return</em> to the interpreter. Unfortunately, since +PostScript Level 2 introduces streams whose data source can be a PostScript +procedure, any code that reads or writes stream data must be prepared to +suspend itself, storing all necessary state in a continuation. There are +some places where this is extremely awkward, such as the scanner/parser. + +<p> +The use of continuations affects many places in the interpreter, and even +some places in the graphics library. For example, when processing an image, +one may need to call a PostScript procedure as part of mapping a CIE color +to a device color. Ghostscript uses a variety of dodges to handle this: for +example, in the case of CIE color mapping, all of the PostScript procedures +are pre-sampled and the results cached. The Adobe implementation limits +this kind of recursion to a fixed number of levels (5?): this would be +another acceptable approach, but at this point it would require far more +code restructuring than it would be worth. + +<p> +A significant amount of the PostScript language implementation is in fact +written in PostScript. Writing in PostScript leverages the C code for +multi-threading, garbage collection, error handling, continuations for +streams, etc., etc.; also, we have found PostScript in general more concise +and easier to debug than C, mostly because of memory management issues. So +given the choice, we tended to implement a feature in PostScript if it +worked primarily with PostScript data structures, wasn't heavily used +(example: font loading), or if it interacted with the stream or other +callback machinery (examples: ReusableFileDecode streams, resourceforall). +Often we would add non-standard PostScript operators for functions that had +to run faster or that did more C-like things, such as the media matching +algorithm for setpagedevice. + +</ul> + +<h4><a name="Main_program"></a>Main program</h4> + +<p> +The main program of the interpreter is normally invoked from the command +line, but it has an API as well. In fact, it has two APIs: one that +recognizes the existence of multiple "interpreter instances" (although it +currently provides a default instance, which almost all clients use), and a +completely different one designed for Windows DLLs. These should be unified +as soon as possible, since there are two steadily growing incompatible +bodies of client code. + +<dl> + +<dt> +Files: +<dd> +<a href="../src/gs.c">src/gs.c</a>, +<a href="../src/gserver.c">src/gserver.c</a>, +<a href="../src/iccinit0.c">src/iccinit0.c</a>, +<a href="../src/iinit.c">src/iinit.c</a>, +<a href="../src/iinit.h">src/iinit.h</a>, +<a href="../src/imain.c">src/imain.c</a>, +<a href="../src/imain.h">src/imain.h</a>, +<a href="../src/imainarg.c">src/imainarg.c</a>, +<a href="../src/imainarg.h">src/imainarg.h</a>, +<a href="../src/iminst.h">src/iminst.h</a>, +<a href="../src/main.h">src/main.h</a>. + +</dl> + +<h4><a name="Data_structures"></a>Data structures</h4> + +<p> +The main data structures visible to the PostScript programmers are arrays, +contexts, dictionaries, names, and stacks. + +<p> +Arrays have no unusual properties. See under <a href="#Refs">Refs</a> below +for more information about how array elements are stored. + +<p> +Contexts are used to hold the interpreter state even in configurations that +don't include the Display PostScript multiple context extension. Context +switching is implemented by a complex cooperation of C and PostScript code. + +<p> +Dictionaries have two special properties worth noting: + +<ul> + +<li>They use an optimized storage representation if all the keys are names, +which is almost always the case. + +<li>They interact with a caching scheme used to accelerate name lookup in +the interpreter. + +</ul> + +<p> +Names are allocated in blocks. The characters and hash chains are stored +separately from the lookup cache information, so that in the future, most of +the former can be compiled into the executable and shared or put in ROM. +(This is not actually done yet.) + +<p> +As mentioned above, each stack is allocated as a linked list of blocks. +However, for reasonable performance, operators must normally be able to +access their operands and produce their results using indexing rather than +an access procedure. This is implemented by ensuring that all the operands +of an operator are in the topmost block of the stack, using guard entries +that cause an internal error if the condition isn't met. See <a +href="../src/iostack.h">src/iostack.h</a> for more details. + +<dl> + +<dt> +General data structures: +<dd> + +<dl> + +<dt> +Contexts: +<dd> +<a href="../src/icontext.c">src/icontext.c</a>, +<a href="../src/icontext.h">src/icontext.h</a>, +<a href="../src/icstate.h">src/icstate.h</a>. + +<dt> +Dictionaries: +<dd> +<a href="../src/iddict.h">src/iddict.h</a>, +<a href="../src/idict.h">src/idict.h</a>, +<a href="../src/idict.c">src/idict.c</a>, +<a href="../src/idictdef.h">src/idictdef.h</a>. + +<dt> +Names: +<dd> +<a href="../src/iname.c">src/iname.c</a>, +<a href="../src/iname.h">src/iname.h</a>, +<a href="../src/inamedef.h">src/inamedef.h</a>, +<a href="../src/inameidx.h">src/inameidx.h</a>, +<a href="../src/inames.h">src/inames.h</a>, +<a href="../src/inamestr.h">src/inamestr.h</a>. + +<dt> +Stacks: +<dd> +<a href="../src/isdata.h">src/isdata.h</a>, +<a href="../src/istack.c">src/istack.c</a>, +<a href="../src/istack.h">src/istack.h</a>, +<a href="../src/istkparm.h">src/istkparm.h</a>. + +</dl> + +<dt> +Specific stacks: +<dd> + +<dl> + +<dt> +Dictionary stack: +<dd> +<a href="../src/dstack.h">src/dstack.h</a>, +<a href="../src/estack.h">src/estack.h</a>, +<a href="../src/iddstack.h">src/iddstack.h</a>, +<a href="../src/idsdata.h">src/idsdata.h</a>, +<a href="../src/idstack.c">src/idstack.c</a>, +<a href="../src/idstack.h">src/idstack.h</a>. + +<dt> +Execution stack: +<dd> +<a href="../src/iesdata.h">src/iesdata.h</a>, +<a href="../src/iestack.h">src/iestack.h</a>. + +<dt> +Operand stack: +<dd> +<a href="../src/iosdata.h">src/iosdata.h</a>, +<a href="../src/iostack.h">src/iostack.h</a>, +<a href="../src/ostack.h">src/ostack.h</a>. + +</dl> + +</dl> + +<h4><a name="Interpreter_loop"></a>Interpreter loop</h4> + +<dl> + +<dt> +Files: +<dd> +<a href="../src/interp.c">src/interp.c</a>, +<a href="../src/interp.h">src/interp.h</a>. + +</dl> + +<h4><a name="Scanning_parsing"></a>Scanning/parsing</h4> + +<p> +PostScript parsing consists essentially of token scanning, and is simple in +principle. The scanner is complex because it must be able to suspend its +operation at any time (i.e., between any two input characters) to allow an +interpreter callout, if its input is coming from a procedure-based stream +and the procedure must be called to provide more input data. + +<dl> + +<dt> +Main scanner: +<dd> +<a href="../src/iscan.c">src/iscan.c</a>, +<a href="../src/iscan.h">src/iscan.h</a>, +<a href="../src/iscannum.c">src/iscannum.c</a>, +<a href="../src/iscannum.h">src/iscannum.h</a>, +<a href="../src/scanchar.h">src/scanchar.h</a>, +<a href="../src/scantab.c">src/scantab.c</a>. + +<dt> +Binary tokens: +<dd> +<a href="../src/btoken.h">src/btoken.h</a>, +<a href="../src/ibnum.c">src/ibnum.c</a>, +<a href="../src/ibnum.h">src/ibnum.h</a>, +<a href="../src/inobtokn.c">src/inobtokn.c</a>, +<a href="../src/iscanbin.c">src/iscanbin.c</a>, +<a href="../src/iscanbin.h">src/iscanbin.h</a>. + +<dt> +DSC parsing: +<dd> +<a href="../src/dscparse.c">src/dscparse.c</a>, +<a href="../src/dscparse.h">src/dscparse.h</a>. + +</dl> + +<h4><a name="Standard_operators"></a>Standard operators</h4> + +<dl> + +<dt> +Non-output-related: +<dd> + +<dl> + +<dt> +Filters: +<dd> +<a href="../src/ifilter.h">src/ifilter.h</a>, +<a href="../src/ifilter2.h">src/ifilter2.h</a>, +<a href="../src/ifrpred.h">src/ifrpred.h</a>, +<a href="../src/ifwpred.h">src/ifwpred.h</a>, +<a href="../src/istream.h">src/istream.h</a>, +<a href="../src/zfbcp.c">src/zfbcp.c</a>, +<a href="../src/zfdctd.c">src/zfdctd.c</a>, +<a href="../src/zfdcte.c">src/zfdcte.c</a>, +<a href="../src/zfdecode.c">src/zfdecode.c</a>, +<a href="../src/zfilter.c">src/zfilter.c</a>, +<a href="../src/zfilter2.c">src/zfilter2.c</a>, +<a href="../src/zfilterx.c">src/zfilterx.c</a>, +<a href="../src/zfmd5.c">src/zfmd5.c</a>, +<a href="../src/zfarc4.c">src/zfarc4.c</a>, +<a href="../src/zfproc.c">src/zfproc.c</a>, +<a href="../src/zfrsd.c">src/zfrsd.c</a>, +<a href="../src/zfzlib.c">src/zfzlib.c</a>. + +<dt> +File and stream I/O: +<dd> +<a href="../src/files.h">src/files.h</a>, +<a href="../src/itoken.h">src/itoken.h</a>, +<a href="../src/zbseq.c">src/zbseq.c</a>, +<a href="../src/zdscpars.c">src/zdscpars.c</a>, +<a href="../src/zfile.c">src/zfile.c</a>, +<a href="../src/zfileio.c">src/zfileio.c</a>, +<a href="../src/ztoken.c">src/ztoken.c</a>. + +<dt> +Data structures: +<dd> +<a href="../src/zarray.c">src/zarray.c</a>, +<a href="../src/zdict.c">src/zdict.c</a>, +<a href="../src/zgeneric.c">src/zgeneric.c</a>, +<a href="../src/zpacked.c">src/zpacked.c</a>, +<a href="../src/zstring.c">src/zstring.c</a>. + +<dt> +Functions: +<dd> +<a href="../src/ifunc.h">src/ifunc.h</a>, +<a href="../src/zfunc.c">src/zfunc.c</a>, +<a href="../src/zfunc0.c">src/zfunc0.c</a>, +<a href="../src/zfunc3.c">src/zfunc3.c</a>, +<a href="../src/zfunc4.c">src/zfunc4.c</a>, + +<dt> +Other: +<dd> +<a href="../src/ivmem2.h">src/ivmem2.h</a>, +<a href="../src/zarith.c">src/zarith.c</a>, +<a href="../src/zcontext.c">src/zcontext.c</a>, +<a href="../src/zcontrol.c">src/zcontrol.c</a>, +<a href="../src/zmath.c">src/zmath.c</a>, +<a href="../src/zmatrix.c">src/zmatrix.c</a>, +<a href="../src/zmisc.c">src/zmisc.c</a>, +<a href="../src/zmisc1.c">src/zmisc1.c</a>, +<a href="../src/zmisc2.c">src/zmisc2.c</a>, +<a href="../src/zmisc3.c">src/zmisc3.c</a>, +<a href="../src/zrelbit.c">src/zrelbit.c</a>, +<a href="../src/zstack.c">src/zstack.c</a>, +<a href="../src/ztype.c">src/ztype.c</a>, +<a href="../src/zusparam.c">src/zusparam.c</a>, +<a href="../src/zvmem.c">src/zvmem.c</a>, +<a href="../src/zvmem2.c">src/zvmem2.c</a>. + +</dl> + +<dt> +Output-related: +<dd> + +<dl> + +<dt> +Device management: +<dd> +<a href="../src/zdevcal.c">src/zdevcal.c</a>, +<a href="../src/zdevice.c">src/zdevice.c</a>, +<a href="../src/zdevice2.c">src/zdevice2.c</a>, +<a href="../src/ziodev.c">src/ziodev.c</a>, +<a href="../src/ziodev2.c">src/ziodev2.c</a>, +<a href="../src/ziodevs.c">src/ziodevs.c</a>, +<a href="../src/ziodevsc.c">src/ziodevsc.c</a>, +<a href="../src/zmedia2.c">src/zmedia2.c</a>, +<a href="../src/zdfilter.c">src/zdfilter.c</a>. + +<dt> +Fonts and text: +<dd> +<a href="../src/bfont.h">src/bfont.h</a>, +<a href="../src/ccfont.h">src/ccfont.h</a>, +<a href="../src/iccfont.c">src/iccfont.c</a>, +<a href="../src/icfontab.c">src/icfontab.c</a>, +<a href="../src/ichar.h">src/ichar.h</a>, +<a href="../src/ichar1.h">src/ichar1.h</a>, +<a href="../src/icharout.h">src/icharout.h</a>, +<a href="../src/icid.h">src/icid.h</a>, +<a href="../src/ifcid.h">src/ifcid.h</a>, +<a href="../src/ifont.h">src/ifont.h</a>, +<a href="../src/ifont1.h">src/ifont1.h</a>, +<a href="../src/ifont2.h">src/ifont2.h</a>, +<a href="../src/ifont42.h">src/ifont42.h</a>, +<a href="../src/zbfont.c">src/zbfont.c</a>, +<a href="../src/zcfont.c">src/zcfont.c</a>, +<a href="../src/zchar.c">src/zchar.c</a>, +<a href="../src/zchar1.c">src/zchar1.c</a>, +<a href="../src/zchar2.c">src/zchar2.c</a>, +<a href="../src/zchar32.c">src/zchar32.c</a>, +<a href="../src/zchar42.c">src/zchar42.c</a>, +<a href="../src/zcharout.c">src/zcharout.c</a>, +<a href="../src/zcharx.c">src/zcharx.c</a>, +<a href="../src/zcid.c">src/zcid.c</a>, +<a href="../src/zfcid.c">src/zfcid.c</a>, +<a href="../src/zfcid0.c">src/zfcid0.c</a>, +<a href="../src/zfcid1.c">src/zfcid1.c</a>, +<a href="../src/zfcmap.c">src/zfcmap.c</a>, +<a href="../src/zfont.c">src/zfont.c</a>, +<a href="../src/zfont0.c">src/zfont0.c</a>, +<a href="../src/zfont1.c">src/zfont1.c</a>, +<a href="../src/zfont2.c">src/zfont2.c</a>, +<a href="../src/zfont32.c">src/zfont32.c</a>, +<a href="../src/zfont42.c">src/zfont42.c</a>. + +<dt> +Color, pattern, and halftone: +<dd> +<a href="../src/icie.h">src/icie.h</a>, +<a href="../src/icolor.h">src/icolor.h</a>, +<a href="../src/icremap.h">src/icremap.h</a>, +<a href="../src/icsmap.h">src/icsmap.h</a>, +<a href="../src/iht.h">src/iht.h</a>, +<a href="../src/ipcolor.h">src/ipcolor.h</a>, +<a href="../src/zcie.c">src/zcie.c</a>, +<a href="../src/zcolor.c">src/zcolor.c</a>, +<a href="../src/zcolor1.c">src/zcolor1.c</a>, +<a href="../src/zcolor2.c">src/zcolor2.c</a>, +<a href="../src/zcrd.c">src/zcrd.c</a>, +<a href="../src/zcsdevn.c">src/zcsdevn.c</a>, +<a href="../src/zcsindex.c">src/zcsindex.c</a>, +<a href="../src/zcspixel.c">src/zcspixel.c</a>, +<a href="../src/zcssepr.c">src/zcssepr.c</a>, +<a href="../src/zicc.c">src/zicc.c</a>, +<a href="../src/zhsb.c">src/zhsb.c</a>, +<a href="../src/zht.c">src/zht.c</a>, +<a href="../src/zht1.c">src/zht1.c</a>, +<a href="../src/zht2.c">src/zht2.c</a>, +<a href="../src/zpcolor.c">src/zpcolor.c</a>, +<a href="../src/zshade.c">src/zshade.c</a>, +<a href="../src/ztrans.c">src/ztrans.c</a>. + +<dt> +Images: +<dd> +<a href="../src/iimage.h">src/iimage.h</a>, +<a href="../src/iimage2.h">src/iimage2.h</a>, +<a href="../src/zimage.c">src/zimage.c</a>, +<a href="../src/zimage2.c">src/zimage2.c</a>, +<a href="../src/zimage3.c">src/zimage3.c</a>. + +<dt> +Other graphics: +<dd> +<a href="../src/igstate.h">src/igstate.h</a>, +<a href="../src/zdpnext.c">src/zdpnext.c</a>, +<a href="../src/zdps.c">src/zdps.c</a>, +<a href="../src/zdps1.c">src/zdps1.c</a>, +<a href="../src/zgstate.c">src/zgstate.c</a>, +<a href="../src/zpaint.c">src/zpaint.c</a>, +<a href="../src/zpath.c">src/zpath.c</a>, +<a href="../src/zpath1.c">src/zpath1.c</a>, +<a href="../src/zrop.c">src/zrop.c</a>, +<a href="../src/ztrap.c">src/ztrap.c</a>, +<a href="../src/zupath.c">src/zupath.c</a>. + +</dl> + +<dt> +Operator support: +<dd> +<a href="../src/oparc.h">src/oparc.h</a>, +<a href="../src/opcheck.h">src/opcheck.h</a>, +<a href="../src/opdef.h">src/opdef.h</a>, +<a href="../src/oper.h">src/oper.h</a>, +<a href="../src/opextern.h">src/opextern.h</a>. + +</dl> + +<h4><a name="Non_standard_operators"></a>Non-standard operators</h4> + +<p> +The interpreter includes many non-standard operators. Most of these provide +some part of the function of a standard operator, so that the standard +operator itself can be implemented in PostScript: these are not of interest +to users, and their function is usually obvious from the way they are used. +However, some non-standard operators provide access to additional, +non-standard facilities that users might want to know about, such as +transparency, RasterOp, and in-memory rendering. These are documented at <a +href="Language.htm#Additional_operators">Language.htm#Additional_operators</a>. + +<p> +We don't document the complete set of non-standard operators here, because +the set changes frequently. However, all non-standard operators are +supposed to have names that begin with '.', so you can find them all by +executing the following (Unix) command: + +<blockquote><pre> +grep '{".[.]' src/[zi]*.c +</pre></blockquote> + +<p> +In addition to individual non-standard operators implemented in the same +files as standard ones, there are several independent optional packages of +non-standard operators. As with other non-standard operators, the names of +all the operators in these packages begin with '.'. We list those packages +here. + +<dl> + +<dt> +<a href="../src/zdosio.c">src/zdosio.c</a> +<dd> +Provides access to PC hardware I/O through MS-DOS system calls. Probably no +longer useful. + +<dt> +<a href="../src/zdouble.c">src/zdouble.c</a> +<dd> +Provides "double" floating point arithmetic, using 8-byte strings to hold +values. Developed under a contract; probably used only by the group that +funded the development. + +<dt> +<a href="../src/zsysvm.c">src/zsysvm.c</a> +<dd> +Provides operators for allocating objects in specific VM spaces, +disregarding the current VM mode. + +<dt> +<a href="../src/zccube.c">src/zccube.c</a> +<dd> +Provides an operator for building a color cube from an arbitrary tint +transform, so that tint transforms can be applied from inside the +graphics library without calling back to the PostScript interpreter. + +</dl> + +<h4><a name="Interpreter_support"></a>Interpreter support</h4> + +<p> +Memory management (refs, GC, save/restore) -- see <a +href="#PostScript_interpreter_extensions">below</a>. + +<dl> + +<dt> +Miscellaneous support: +<dd> +<a href="../src/errors.h">src/errors.h</a>, +<a href="../src/ghost.h">src/ghost.h</a>, +<a href="../src/iconf.c">src/iconf.c</a>, +<a href="../src/iconf.h">src/iconf.h</a>, +<a href="../src/idparam.c">src/idparam.c</a>, +<a href="../src/idparam.h">src/idparam.h</a>, +<a href="../src/ilevel.h">src/ilevel.h</a>, +<a href="../src/inouparm.c">src/inouparm.c</a>, +<a href="../src/iparam.c">src/iparam.c</a>, +<a href="../src/iparam.h">src/iparam.h</a>, +<a href="../src/iparray.h">src/iparray.h</a>, +<a href="../src/iutil.c">src/iutil.c</a>, +<a href="../src/iutil.h">src/iutil.h</a>, +<a href="../src/iutil2.c">src/iutil2.c</a>, +<a href="../src/iutil2.h">src/iutil2.h</a>, +<a href="../src/iutilasm.asm">src/iutilasm.asm</a>. + +</dl> + +<h4><a name="PostScript_code"></a>PostScript code</h4> + +<dl> + +<dt> +Initialization and language support: +<dd> + +<dl> + +<dt> +All configurations: +<dd> +<a href="../lib/gs_init.ps">lib/gs_init.ps</a>, +<a href="../lib/gs_statd.ps">lib/gs_statd.ps</a>. + +<dt> +Level 2: +<dd> +<a href="../lib/gs_btokn.ps">lib/gs_btokn.ps</a>, +<a href="../lib/gs_dps1.ps">lib/gs_dps1.ps</a>, +<a href="../lib/gs_dps2.ps">lib/gs_dps2.ps</a>, +<a href="../lib/gs_lev2.ps">lib/gs_lev2.ps</a>, +<a href="../lib/gs_res.ps">lib/gs_res.ps</a>, +<a href="../lib/gs_setpd.ps">lib/gs_setpd.ps</a>. + +<dt> +LanguageLevel 3: +<dd> +<a href="../lib/gs_frsd.ps">lib/gs_frsd.ps</a>, +<a href="../lib/gs_ll3.ps">lib/gs_ll3.ps</a>, +<a href="../lib/gs_trap.ps">lib/gs_trap.ps</a>. + +<dt> +Display PostScript: +<dd> +<a href="../lib/gs_dpnxt.ps">lib/gs_dpnxt.ps</a>, +<a href="../lib/gs_dps.ps">lib/gs_dps.ps</a>. + +<dt> +ICC color profiles: +<dd> +<a href="../lib/gs_icc.ps">lib/gs_icc.ps</a>. + +</dl> + +<dt> +Font loading and support: +<dd> + +<dl> + +<dt> +Font name mapping: +<dd> +<a href="../lib/Fontmap">lib/Fontmap</a>, +<a href="../lib/Fontmap.ATB">lib/Fontmap.ATB</a>, +<a href="../lib/Fontmap.ATM">lib/Fontmap.ATM</a>, +<a href="../lib/Fontmap.GS">lib/Fontmap.GS</a>, +<a href="../lib/Fontmap.OS2">lib/Fontmap.OS2</a>, +<a href="../lib/Fontmap.OSF">lib/Fontmap.OSF</a>, +<a href="../lib/Fontmap.SGI">lib/Fontmap.SGI</a>, +<a href="../lib/Fontmap.Sol">lib/Fontmap.Sol</a>, +<a href="../lib/Fontmap.Ult">lib/Fontmap.Ult</a>, +<a href="../lib/Fontmap.VMS">lib/Fontmap.VMS</a>. + +<dt> +CIDFont name mapping: +<dd> +<a href="../lib/CIDFnmap">lib/CIDFnmap</a>, +<a href="../lib/CIDFnmap.ARP">lib/CIDFnmap.ARP</a>, +<a href="../lib/CIDFnmap.Bae">lib/CIDFnmap.Bae</a>, +<a href="../lib/CIDFnmap.CJK">lib/CIDFnmap.CJK</a>, +<a href="../lib/CIDFnmap.Koc">lib/CIDFnmap.Koc</a>, +<a href="../lib/CIDFnmap.Ore">lib/CIDFnmap.Ore</a>, +<a href="../lib/CIDFnmap.Sol">lib/CIDFnmap.Sol</a>, +<a href="../lib/CIDFnmap.Win">lib/CIDFnmap.Win</a>, +<a href="../lib/CIDFnmap.b5">lib/CIDFnmap.b5</a>, +<a href="../lib/CIDFnmap.gb">lib/CIDFnmap.gb</a>, +<a href="../lib/CIDFnmap.ksx">lib/CIDFnmap.ksx</a>, +<a href="../lib/CIDFnmap.sj">lib/CIDFnmap.sj</a>. + +<dt> +Generic: +<dd> +<a href="../lib/gs_ccfnt.ps">lib/gs_ccfnt.ps</a>, +<a href="../lib/gs_fonts.ps">lib/gs_fonts.ps</a>. + +<dt> +Type 1 and CFF: +<dd> +<a href="../lib/gs_cff.ps">lib/gs_cff.ps</a>, +<a href="../lib/gs_diskf.ps">lib/gs_diskf.ps</a>, +<a href="../lib/gs_type1.ps">lib/gs_type1.ps</a>. + +<dt> +TrueType: +<dd> +<a href="../lib/gs_ttf.ps">lib/gs_ttf.ps</a>, +<a href="../lib/gs_typ42.ps">lib/gs_typ42.ps</a>. + +<dt> +CID-keyed: +<dd> +<a href="../lib/gs_cidcm.ps">lib/gs_cidcm.ps</a>, +<a href="../lib/gs_cidfn.ps">lib/gs_cidfn.ps</a>, +<a href="../lib/gs_cmap.ps">lib/gs_cmap.ps</a>. + +<dt> +Other: +<dd> +<a href="../lib/gs_kanji.ps">lib/gs_kanji.ps</a>, +<a href="../lib/gs_pfile.ps">lib/gs_pfile.ps</a>, +<a href="../lib/gs_typ32.ps">lib/gs_typ32.ps</a>. + +</dl> + +<dt> +Encodings: +<dd> + +<dl> + +<dt> +Adobe-specified: +<dd> +<a href="../lib/gs_ce_e.ps">lib/gs_ce_e.ps</a>, +<a href="../lib/gs_dbt_e.ps">lib/gs_dbt_e.ps</a>, +<a href="../lib/gs_il1_e.ps">lib/gs_il1_e.ps</a>, +<a href="../lib/gs_mex_e.ps">lib/gs_mex_e.ps</a>, +<a href="../lib/gs_mro_e.ps">lib/gs_mro_e.ps</a>, +<a href="../lib/gs_pdf_e.ps">lib/gs_pdf_e.ps</a>, +<a href="../lib/gs_std_e.ps">lib/gs_std_e.ps</a>, +<a href="../lib/gs_sym_e.ps">lib/gs_sym_e.ps</a>, +<a href="../lib/gs_wan_e.ps">lib/gs_wan_e.ps</a>. + +<dt> +Additional: +<dd> +<a href="../lib/gs_il2_e.ps">lib/gs_il2_e.ps</a>, +<a href="../lib/gs_ksb_e.ps">lib/gs_ksb_e.ps</a>, +<a href="../lib/gs_wl1_e.ps">lib/gs_wl1_e.ps</a>, +<a href="../lib/gs_wl2_e.ps">lib/gs_wl2_e.ps</a>, +<a href="../lib/gs_wl5_e.ps">lib/gs_wl5_e.ps</a>. + +<dt> +Pseudo-encodings for internal use: +<dd> +<a href="../lib/gs_css_e.ps">lib/gs_css_e.ps</a>, +<a href="../lib/gs_lgo_e.ps">lib/gs_lgo_e.ps</a>, +<a href="../lib/gs_lgx_e.ps">lib/gs_lgx_e.ps</a>, +<a href="../lib/gs_mgl_e.ps">lib/gs_mgl_e.ps</a>. + +</dl> + +<dt> +Miscellaneous: +<dd> + +<dl> + +<dt> +Other support: +<dd> +<a href="../lib/gs_agl.ps">lib/gs_agl.ps</a>, +<a href="../lib/gs_dscp.ps">lib/gs_dscp.ps</a>, +<a href="../lib/gs_epsf.ps">lib/gs_epsf.ps</a>, +<a href="../lib/gs_pdfwr.ps">lib/gs_pdfwr.ps</a>, +<a href="../lib/gs_rdlin.ps">lib/gs_rdlin.ps</a>. + +<dt> +X Windows icon bitmaps: +<dd> +<a href="../lib/gs_l.xbm">lib/gs_l.xbm</a>, +<a href="../lib/gs_l.xpm">lib/gs_l.xpm</a>, +<a href="../lib/gs_l_m.xbm">lib/gs_l_m.xbm</a>, +<a href="../lib/gs_m.xbm">lib/gs_m.xbm</a>, +<a href="../lib/gs_m.xpm">lib/gs_m.xpm</a>, +<a href="../lib/gs_m_m.xbm">lib/gs_m_m.xbm</a>, +<a href="../lib/gs_s.xbm">lib/gs_s.xbm</a>, +<a href="../lib/gs_s.xpm">lib/gs_s.xpm</a>, +<a href="../lib/gs_s_m.xbm">lib/gs_s_m.xbm</a>, +<a href="../lib/gs_t.xbm">lib/gs_t.xbm</a>, +<a href="../lib/gs_t.xpm">lib/gs_t.xpm</a>, +<a href="../lib/gs_t_m.xbm">lib/gs_t_m.xbm</a>. + +<dt> +Not currently used: +<dd> +<a href="../lib/gs_cmdl.ps">lib/gs_cmdl.ps</a>, +<a href="../lib/gs_fform.ps">lib/gs_fform.ps</a>, +<a href="../lib/gs_l2img.ps">lib/gs_l2img.ps</a>. + +</dl> + +</dl> + +<h3><a name="PDF_interpreter"></a>PDF interpreter</h3> + +<p> +Ghostscript's PDF interpreter is written entirely in PostScript, because its +data structures are the same as PostScript's, and it is much more convenient +to manipulate PostScript-like data structures in PostScript than in C. +There is definitely a performance cost, but apparently not a substantial +one: we considered moving the main interpreter loop (read a token using +slightly different syntax than PostScript, push it on the stack if literal, +look it up in a special dictionary for execution if not) into C, but we did +some profiling and discovered that this wasn't accounting for enough of the +time to be worthwhile. + +<p> +Until recently, there was essentially no C code specifically for the purpose +of supporting PDF interpretation. The one major exception is the PDF 1.4 +transparency features, which we (but not Adobe) have made available to +PostScript code. + +<p> +In addition to patching the <b><tt>run</tt></b> operator to detect PDF +files, the interpreter provides some procedures in <a +href="../lib/pdf_main.ps">lib/pdf_main.ps</a> that are meant to be called +from applications such as previewers. + +<dl> + +<dt> +Files: +<dd> +<a href="../lib/pdf_base.ps">lib/pdf_base.ps</a>, +<a href="../lib/pdf_draw.ps">lib/pdf_draw.ps</a>, +<a href="../lib/pdf_font.ps">lib/pdf_font.ps</a>, +<a href="../lib/pdf_main.ps">lib/pdf_main.ps</a>, +<a href="../lib/pdf_ops.ps">lib/pdf_ops.ps</a>, +<a href="../lib/pdf_sec.ps">lib/pdf_sec.ps</a>. + +</dl> + +<h3><a name="Build_process"></a>Build process</h3> + +<h4><a name="Makefile_structure"></a>Makefile structure</h4> + +<p> +Ghostscript's makefiles embody a number of design decisions and assumptions +that may not be obvious from a casual reading of the code. + +<ul> + +<li>All files are stored in subdirectories. The names of all subdirectories +used in the build process are defined in the top-level makefiles for the +various platforms: there are no "hard wired" directory names in any makefile +rule. Subdirectory names in the makefiles are relative to the directory +that is current at build time: normally this directory is the parent of the +various subdirectories, and holds only a <b><tt>makefile</tt></b>, which in +turn simply references the real top-level makefile in the source +subdirectory. + +<li>All compiler and linker switches are likewise defined by macros, again +preferably in the top-level platform makefile. + +<li>There is an absolute distinction between "source-like" subdirectories, +which are read-only during the build process, and "object-like" +subdirectories, all of whose contents are generated by the build process and +which can be emptied (<b><tt>rm *</tt></b>) at any time with no bad +effects. The source subdirectories are defined by macros named +<b><tt>xxxSRCDIR</tt></b>. + +<li>Object subdirectories may distinguish further between those that hold +the results of the build process that are needed at run time (i.e., that +should be included in a run-time distribution), defined by +<b><tt>BINDIR</tt></b>, and those that are not needed at run time, defined +by <b><tt>xxxGENDIR</tt></b> and <b><tt>xxxOBJDIR</tt></b>. (The +distinction between these is historical and probably no longer relevant.) + +<li>There may be multiple object subdirectories for different build +configurations. On Unix, the <b><tt>obj</tt></b> and <b><tt>bin</tt></b> +directories are used for normal production builds, the +<b><tt>debugobj</tt></b> directory for debugging builds, and the +<b><tt>pgobj</tt></b> directory for profiling builds; other platforms may +use different conventions. The Unix makefiles support targets named +<b><tt>debug</tt></b> and <b><tt>pg</tt></b> for debugging and profiling +builds respectively; other platforms generally do not. + +<li>Makefiles will be maintained by hand. This requires editing the +following makefile elements whenever the relevant source files changes: + +<ul> + +<li>Every header (.h) file must have a corresponding macro definition in a +makefile. If <b><tt>abc.h</tt></b> #includes <b><tt>def.h</tt></b> and +<b><tt>xyz.h</tt></b>, the definition must have the form + +<blockquote><pre> +xyz_h=$(xxxSRCD)xyz.h $(def_h) $(xyz_h) +</pre></blockquote> + +where <b><tt>xxxSRCD</tt></b> is the macro defining the relevant source +directory (including a trailing '/'). Note that the '.' in the file name +has been replaced by an underscore. Note also that the definition must +follow all definitions it references, since some <b><tt>make</tt></b> +programs expand macros in definitions at the time of definition rather than +at the time of use. + +<li>Every .c file must have a corresponding rule in a makefile. If +<b><tt>abc.c</tt></b> #includes <b><tt>def.h</tt></b> and +<b><tt>lmn.h</tt></b>, the rule must have approximately the form + +<blockquote><pre> +$(xxxOBJD)abc.$(OBJ) : $(xxxSRCD)abc.c $(def_h) $(lmn_h) + $(xxCC) $(xxO_)abc.$(OBJ) $(C_) $(xxxSRCD)abc.c +</pre></blockquote> + +where <b><tt>xxxSRCD</tt></b> is as before; <b><tt>xxxOBJD</tt></b> is the +relevant object directory; <b><tt>xxCC</tt></b> defines the name of the C +compiler plus the relevant compilation switches; and <b><tt>xxO_</tt></b> +and <b><tt>C_</tt></b> are macros used to bridge syntactic differences +between different <b><tt>make</tt></b> programs. + +</ul> + +</ul> + +<p> +The requirement to keep makefiles up to date by hand has been controversial. +Two alternatives are generally proposed. + +<ul> + +<li>Programs like <b><tt>makedeps</tt></b>, which generate build rules +automatically from the #include lists in C files. We have found such +programs useless: they "wire in" specific, concrete directory names, not +only for our own code but even for the system header files; they have to be +run manually whenever code files are added, renamed, or deleted, or whenever +the list of #includes in any file changes; and they cannot deal with +different source files requiring different compilation switches. + +<li>MSVC-style "project" files. These are equally useless: they are not +portable across different vendors' tools -- in fact, there may not even be a +usable import/export facility to convert their data to or from text form -- +and they cannot combine configuration-independent data with +configuration-specific data. + +</ul> + +<p> +We have seriously considered writing our own build program in Tcl or Python +that would eliminate these problems, or perhaps porting the tools developed +by Digital's Vesta research project (if we can get access to them); however, +either of these approaches would create potential portability problems of +its own, not to mention difficulties in integrating with others' build +systems. + +<p> +In the meantime, to ease the pain for mortal users and developers on +Unix platforms, we have adopted the standard autoconf tool to +systematically generate an appropriate top-level makefile for the +target system. As currently implemented, its use makes no deep changes +to the Ghostscript build system, but rather generates a makefile, more +or less the same as would be achieved by starting from a +platform-specific toplevel makefile and hand-editing. The relevant +autoconf sources are in <a +href="../src/Makefile.in">src/Makefile.in</a>, and <a +href="../src/configure.ac">configure.ac</a>. These sources are used in +the release process to create a <a href="../configure">configure</a> +script in the toplevel directory of releases. Also, there is an <a +href="../autogen.sh">autogen.sh</a> script to automate the autoconf +process somewhat. The names and locations of these files were chosen +to be clear to those familiar with autoconf, even though they represent +a slight departure from Ghostscript tradition. + +<p> +For more information about makefiles: + +<ul> + +<li>For a detailed list of makefiles, and a discussion of makefile issues +related to portability, see the <a href="#Makefiles">Makefiles</a> section +below. + +<li>For more detailed information about editing configuration information in +makefiles, see <a +href="Make.htm#Makefile_overview">doc/Make.htm#Makefile_overview</a>. + +<li>For a complete example of adding a new driver to a makefile, see <a +href="Drivers.htm#Adding_drivers">doc/Drivers.htm#Adding_drivers</a>. + +<li>For a few more notes on makefile coding conventions, see <a +href="C-style.htm#Makefiles">doc/C-style.htm#Makefiles</a>. + +</ul> + +<h4><a name="dev_files"></a>.dev files</h4> + +<p> +On top of the general conventions just described, Ghostscript's makefiles +add a further layer of structure in order to support an open-ended set of +fine-grained, flexible configuration options. Selecting an option (usually +called a "module") for inclusion in the build may affect the build in many +ways: + +<ul> + +<li>Almost always, it requires linking in some compiled code files. + +<li>It may require running some additional initialization procedures at +startup. + +<li>It may require reading in some additional PostScript files at startup. +For example, a Level 2 PostScript build requires support for PostScript +resources and for setpagedevice, which are implemented in PostScript code. + +<li>It may require adding entries to a variety of internal tables that +catalogue such things as drivers, IODevices, Function types, etc. + +<li>It may require that other particular modules be included. For example, +the "PostScript Level 2" module requires the modules for various filters, +color spaces, etc. + +<li>It may require <em>removing</em> some other (default) module from the +build. For example, the core (Level 1) PostScript build has a "stub" for +binary tokens, which are a Level 2 feature but are referenced by the core +scanner: a Level 2 build must remove the stub. For more information about +this, look for the string <b><tt>-replace</tt></b> in the makefiles and in +<a href="../src/genconf.c">src/genconf.c</a>. + +</ul> + +<p> +Each module is defined in the makefiles by rules that create a file named +<b><em>xxx</em><tt>.dev</tt></b>. The dependencies of the rule include all +the files that make up the module (compiled code files, PostScript files, +etc.); the body of the rule creates the .dev file by writing the description +of the module into it. A program called <b><tt>genconf</tt></b>, described +in the next section, merges all the relevant .dev files together. For +examples of .dev rules, see any of the Ghostscript makefiles. + +<p> +Ultimately, a person must specify the root set of modules to include in a +build (which of course may require other modules, recursively). +Ghostscript's makefiles do this with a set of macros called +<b><tt>FEATURE_DEVS</tt></b> and <b><tt>DEVICE_DEVS</tt>n</b>, defined in +each top-level makefile, but nothing in the module machinery depends on +this. + +<h4><a name="Generators"></a>Generators</h4> + +<p> +Ghostscript's build procedure is somewhat unusual in that it compiles and +then executes some support programs during the build process. These +programs then generate data or source code that is used later on in the +build. + +<p> +The most important and complex of the generator programs is +<b><tt>genconf</tt></b>. <b><tt>genconf</tt></b> merges all the .dev files +that make up the build, and creates three or more output files used in later +stages: + +<ul> + +<li><b><tt>gconfig.h</tt></b>, consisting mainly of macro calls, one call +per "resource" making up the build, other than "resources" listed in the +other output files. + +<li><b><tt>gconfigf.h</tt></b>, produced only for PostScript builds with +compiled-in fonts, consisting of one macro call per font. + +<li>A linker control file whose name varies from one platform to another, +containing the list of compiled code files to be linked. + +<li>If necessary, another linker control file, also varying between +platforms, that contains other information for the linker such as the list +of system libraries to be searched. (On Unix platforms, the two linker +control functions are combined in a single file.) + +</ul> + +<dl> + +<dt> +Source generators: +<dd> + +<dl> + +<dt> +<a href="../src/genarch.c">src/genarch.c</a> +<dd> +Creates a header file containing a variety of information about the hardware +and compiler that isn't provided in any standard system header file. Always +used. + +<dt> +<a href="../src/genconf.c">src/genconf.c</a> (also generates non-source) +<dd> +Constructs header files and linker control files from the collection of +options and modules that make up the build. See above. Always used. + +<dt> +<a href="../src/genht.c">src/genht.c</a> +<dd> +Converts a PostScript halftone (in a particular constrained format) to a C +data structure that can be compiled into an executable. Only used if any +such halftones are included in the build. + +<dt> +<a href="../src/geninit.c">src/geninit.c</a> +<dd> +Converts PostScript initialization files to C data structures that can be +compiled into an executable. Only used when building a PostScript +interpreter, and only if <b><tt>COMPILE_INITS</tt></b> was set to 1 in the +makefile. + +</dl> + +<dt> +Other generators: +<dd> + +<dl> + +<dt> +<a href="../src/echogs.c">src/echogs.c</a> +<dd> +Implements a variety of shell-like functions to get around quirks, +limitations, and omissions in the shells on various platforms. Always used. + +<dt> +<a href="../src/genconf.c">src/genconf.c</a> (also generates source) +<dd> +See above. + +<dt> +<a href="../src/gendev.c">src/gendev.c</a> (not used) +<dd> +Was intended as a replacement for <b><tt>genconf</tt></b>, but was never +completed. + +</dl> + +</dl> + +<h4><a name="Build_support"></a>Support</h4> + +<p> +There are a number of programs, scripts, and configuration files that exist +only for the sake of the build process. + +<dl> + +<dt> +Files for PC environments: +<dd> +<a href="../src/gswin.icx">src/gswin.icx</a>, +<a href="../src/gswin16.icx">src/gswin16.icx</a>, +<a href="../src/bcc32.cfg">src/bcc32.cfg</a>, +<a href="../src/cp.bat">src/cp.bat</a>, +<a href="../src/cp.cmd">src/cp.cmd</a>, +<a href="../src/dw32c.def">src/dw32c.def</a>, +<a href="../src/dwmain.rc">src/dwmain.rc</a>, +<a href="../src/dwmain16.def">src/dwmain16.def</a>, +<a href="../src/dwmain32.def">src/dwmain32.def</a>, +<a href="../src/dwsetup.def">src/dwsetup.def</a>, +<a href="../src/dwsetup.rc">src/dwsetup.rc</a>, +<a href="../src/dwuninst.def">src/dwuninst.def</a>, +<a href="../src/dwuninst.rc">src/dwuninst.rc</a>, +<a href="../src/gs16spl.def">src/gs16spl.def</a>, +<a href="../src/gs16spl.rc">src/gs16spl.rc</a>, +<a href="../src/gsdll2.def">src/gsdll2.def</a>, +<a href="../src/gsdll2.rc">src/gsdll2.rc</a>, +<a href="../src/gsdll32.def">src/gsdll32.def</a>, +<a href="../src/gsdll32.rc">src/gsdll32.rc</a>, +<a href="../src/gsdll32w.lnk">src/gsdll32w.lnk</a>, +<a href="../src/gsos2.def">src/gsos2.def</a>, +<a href="../src/gsos2.icx">src/gsos2.icx</a>, +<a href="../src/gsos2.rc">src/gsos2.rc</a>, +<a href="../src/gspmdrv.def">src/gspmdrv.def</a>, +<a href="../src/gspmdrv.icx">src/gspmdrv.icx</a>, +<a href="../src/gspmdrv.rc">src/gspmdrv.rc</a>, +<a href="../src/gswin.rc">src/gswin.rc</a>, +<a href="../src/gswin32.rc">src/gswin32.rc</a>, +<a href="../src/gswin386.rc">src/gswin386.rc</a>, +<a href="../src/mv.bat">src/mv.bat</a>, +<a href="../src/mv.cmd">src/mv.cmd</a>, +<a href="../src/rm.bat">src/rm.bat</a>, +<a href="../src/rm.cmd">src/rm.cmd</a>, +<a href="../src/turboc.cfg">src/turboc.cfg</a>. + +<dt> +Files for MacOS: +<dd> +<a href="../lib/Info-macos.plist">lib/Info-macos.plist</a>. + +<dt> +Files for OpenVMS: +<dd> +<a href="../src/append_l.com">src/append_l.com</a>, +<a href="../src/copy_one.com">src/copy_one.com</a>, +<a href="../src/rm_all.com">src/rm_all.com</a>, +<a href="../src/rm_one.com">src/rm_one.com</a>. + +<dt> +Other files: +<dd> +<a href="../src/bench.c">src/bench.c</a>, +<a href="../src/catmake">src/catmake</a>, +<a href="../src/ccgs">src/ccgs</a>, +<a href="../src/instcopy">src/instcopy</a>. + +</dl> + +<h3><a name="Utilities"></a>Utilities</h3> + +<p> +Ghostscript comes with many utilities for doing things like viewing bitmap +files and converting between file formats. Some of these are written in +PostScript, some as scripts, and some as scripts that invoke special +PostScript code. + +<h4><a name="Utilities_in_PostScript"></a>Utilities in PostScript</h4> + +<p> +These are all documented in <a href="Psfiles.htm">doc/Psfiles.htm</a>, q.v. + +<h4><a name="Utility_scripts"></a>Utility scripts</h4> + +<p> +Many of these scripts come in both Unix and MS-DOS (<b><tt>.bat</tt></b> +versions; some also have an OS/2 (<b><tt>.cmd</tt></b>) version. The choice +of which versions are provided is historical and irregular. These scripts +should all be documented somewhere, but currently, many of them have man +pages, a few have their own documentation in the doc directory, and some +aren't documented at all. + +<dl> + +<dt> +Script files without PC versions: +<dd> +<a href="../lib/afmdiff.awk">lib/afmdiff.awk</a>, +<a href="../lib/dvipdf">lib/dvipdf</a>, +<a href="../lib/fixmswrd.pl">lib/fixmswrd.pl</a>, +<a href="../lib/lprsetup.sh">lib/lprsetup.sh</a>, +<a href="../lib/pfbtopfa">lib/pfbtopfa</a>, +<a href="../lib/pj-gs.sh">lib/pj-gs.sh</a>, +<a href="../lib/pphs">lib/pphs</a>, +<a href="../lib/printafm">lib/printafm</a>, +<a href="../lib/pv.sh">lib/pv.sh</a>, +<a href="../lib/sysvlp.sh">lib/sysvlp.sh</a>, +<a href="../lib/unix-lpr.sh">lib/unix-lpr.sh</a>, +<a href="../lib/wftopfa">lib/wftopfa</a>. + +<dt> +Script files with PC versions: +<dd> +<a href="../lib/bdftops">lib/bdftops</a>, +<a href="../lib/bdftops.bat">lib/bdftops.bat</a>, +<a href="../lib/bdftops.cmd">lib/bdftops.cmd</a>, +<a href="../lib/eps2eps">lib/eps2eps</a>, +<a href="../lib/eps2eps.bat">lib/eps2eps.bat</a>, +<a href="../lib/eps2eps.cmd">lib/eps2eps.cmd</a>, +<a href="../lib/font2c">lib/font2c</a>, +<a href="../lib/font2c.bat">lib/font2c.bat</a>, +<a href="../lib/font2c.cmd">lib/font2c.cmd</a>, +<a href="../lib/gsbj">lib/gsbj</a>, +<a href="../lib/gsbj.bat">lib/gsbj.bat</a>, +<a href="../lib/gsdj">lib/gsdj</a>, +<a href="../lib/gsdj.bat">lib/gsdj.bat</a>, +<a href="../lib/gsdj500">lib/gsdj500</a>, +<a href="../lib/gsdj500.bat">lib/gsdj500.bat</a>, +<a href="../lib/gslj">lib/gslj</a>, +<a href="../lib/gslj.bat">lib/gslj.bat</a>, +<a href="../lib/gslp">lib/gslp</a>, +<a href="../lib/gslp.bat">lib/gslp.bat</a>, +<a href="../lib/gsnd">lib/gsnd</a>, +<a href="../lib/gsnd.bat">lib/gsnd.bat</a>, +<a href="../lib/pdf2dsc">lib/pdf2dsc</a>, +<a href="../lib/pdf2dsc.bat">lib/pdf2dsc.bat</a>, +<a href="../lib/pdf2ps">lib/pdf2ps</a>, +<a href="../lib/pdf2ps.bat">lib/pdf2ps.bat</a>, +<a href="../lib/pdf2ps.cmd">lib/pdf2ps.cmd</a>, +<a href="../lib/pdfopt">lib/pdfopt</a>, +<a href="../lib/pdfopt.bat">lib/pdfopt.bat</a>, +<a href="../lib/pf2afm">lib/pf2afm</a>, +<a href="../lib/pf2afm.bat">lib/pf2afm.bat</a>, +<a href="../lib/pf2afm.cmd">lib/pf2afm.cmd</a>, +<a href="../lib/ps2ascii">lib/ps2ascii</a>, +<a href="../lib/ps2ascii.bat">lib/ps2ascii.bat</a>, +<a href="../lib/ps2ascii.cmd">lib/ps2ascii.cmd</a>, +<a href="../lib/ps2epsi">lib/ps2epsi</a>, +<a href="../lib/ps2epsi.bat">lib/ps2epsi.bat</a>, +<a href="../lib/ps2epsi.cmd">lib/ps2epsi.cmd</a>, +<a href="../lib/ps2pdf">lib/ps2pdf</a>, +<a href="../lib/ps2pdf.bat">lib/ps2pdf.bat</a>, +<a href="../lib/ps2pdf.cmd">lib/ps2pdf.cmd</a>, +<a href="../lib/ps2pdf12">lib/ps2pdf12</a>, +<a href="../lib/ps2pdf12.bat">lib/ps2pdf12.bat</a>, +<a href="../lib/ps2pdf12.cmd">lib/ps2pdf12.cmd</a>, +<a href="../lib/ps2pdf13">lib/ps2pdf13</a>, +<a href="../lib/ps2pdf13.bat">lib/ps2pdf13.bat</a>, +<a href="../lib/ps2pdf13.cmd">lib/ps2pdf13.cmd</a>, +<a href="../lib/ps2pdf14">lib/ps2pdf14</a>, +<a href="../lib/ps2pdf14.bat">lib/ps2pdf14.bat</a>, +<a href="../lib/ps2pdf14.cmd">lib/ps2pdf14.cmd</a>, +<a href="../lib/ps2pdfwr">lib/ps2pdfwr</a>, +<a href="../lib/ps2pdfxx.bat">lib/ps2pdfxx.bat</a>, +<a href="../lib/ps2ps">lib/ps2ps</a>, +<a href="../lib/ps2ps.bat">lib/ps2ps.bat</a>, +<a href="../lib/ps2ps.cmd">lib/ps2ps.cmd</a>. + +<dt> +Script files with only PC versions: +<dd> +<a href="../lib/gsndt.bat">lib/gsndt.bat</a>, +<a href="../lib/gssetgs.bat">lib/gssetgs.bat</a>, +<a href="../lib/gst.bat">lib/gst.bat</a>, +<a href="../lib/gstt.bat">lib/gstt.bat</a>, +<a href="../lib/lp386.bat">lib/lp386.bat</a>, +<a href="../lib/lp386r2.bat">lib/lp386r2.bat</a>, +<a href="../lib/lpgs.bat">lib/lpgs.bat</a>, +<a href="../lib/lpr2.bat">lib/lpr2.bat</a>, +<a href="../lib/pftogsf.bat">lib/pftogsf.bat</a>, +<a href="../lib/wmakebat.bat">lib/wmakebat.bat</a>. + +</dl> + +<hr> + +<h2><a name="Memory_management"></a>Memory management</h2> + +<h3><a name="Memory_manager_architecture"></a>Memory manager architecture</h3> + +<p> +In many environments, the memory manager is a set of library facilities that +implicitly manage the entire address space in a homogenous manner. +Ghostscript's memory manager architecture has none of these properties: + +<ul> + +<li>Rather than a single library accessed as procedures, Ghostscript +includes multiple allocator types, each of which in turn may have multiple +instances (allocators). Allocators are 'objects' with a substantial set of +virtual functions. + +<li>Rather than managing the entire address space, each allocator manages a +storage pool, which it may or may not be able to expand or reduce by calling +on a 'parent' allocator. + +<li>Rather than a single genus of untyped storage blocks, Ghostscript's +allocators provide two genera -- type-tagged 'objects', and 'strings' -- +with substantially different properties. + +</ul> + +<h4><a name="Objects_vs_strings"></a>Objects vs strings</h4> + +<p> +As noted above, allocators provide two different storage genera. + +<p> +Objects: + +<ul> +<li>Are aligned in storage to satisfy the most stringent alignment +requirement imposed by the CPU or compiler; +<li>Can be referenced only by pointers to their start, not to any internal +location, unless special arrangements are made; +<li>May contain pointers to other objects, or to strings; +<li>Have an associated <em>structure descriptor</em> that specifies their +size (usually) and the location of any pointers contained within them. +</ul> + +<p> +Given a pointer to an object, the allocator that allocated it must be able +to return the object's size and the pointer to its structure descriptor. +(It is up to the client to know what allocator allocated an object.) + +<p> +Strings: + +<ul> +<li>Are not aligned in storage; +<li>Can be referenced by pointers (consisting of a starting address and a +length) to any substring, starting anywhere within the string; +<li>May not contain pointers; +<li>Do not have a structure descriptor. +</ul> + +<p> +The object/string distinction reflects a space/capability tradeoff. The +per-object space overhead of the standard type of allocator is typically 12 +bytes; this is too much to impose on every string of a few bytes. On the +other hand, restricting object pointers to reference the start of the object +currently makes object garbage collection and compaction more +space-efficient. If we were to redesign the standard allocator, we would +probably opt for a different design in which strings were allocated within +container objects of a few hundred bytes, and pointers into the middle of +all objects were allowed. + +<h4><a name="Structure_descriptors"></a>Structure descriptors</h4> + +<p> +Every object allocated by a Ghostscript allocator has an associated +structure descriptor, which the caller provides when allocating the object. +The structure descriptor serves several purposes: + +<ul> +<li>Specifying the size of the object for allocation; +<li>Providing pointer-enumeration and pointer-relocation procedures for +the garbage collector; +<li>Providing an optional finalization procedure to be called when the +object is freed (either explicitly or automatically). +</ul> + +<p> +Structure descriptors are read-only, and are normally defined statically +using one of the large set of <b><tt>gs_private_st_</tt></b> or +<b><tt>gs_public_st_</tt></b> macros in <a +href="../src/gsstruct.h">src/gsstruct.h</a>. + +<p> +While the structure descriptor normally specifies the size of the object, +one can also allocate an array of bytes or objects, whose size is a multiple +of the size in the descriptor. For this reason, every object stores its +size as well as a reference to its descriptor. + +<p> +Because the standard Ghostscript garbage collector is conservative and can +move objects, every object allocated by a Ghostscript allocator must have an +accurate structure descriptor. If you define a new type of object +(structure) that will be allocated in storage managed by Ghostscript, you +<em>must</em> create an accurate descriptor for it, and use that descriptor +to allocate it. The process of creating accurate descriptors for all +structures was long and painful, and accounted for many hard-to-diagnose +bugs. + +<p> +By convention, the structure descriptor for structure type +<b><tt>xxx_t</tt></b> is named <b><tt>st_xxx</tt></b> (this is preferred), +or occasionally <b><tt>st_xxx_t</tt></b>. + +<p> +Note that a structure descriptor is only required for objects allocated by +the Ghostscript allocator. A structure type <b><tt>xxx_t</tt></b> does not +require a structure descriptor if instances of that type are used +<em>only</em> in the following ways: + +<ul> + +<li>Instances are allocated only on the C stack, e.g., as +<b><tt>xxx_t xxx1, xxx2;</tt></b>, or on the C heap, with +<b><tt>malloc</tt></b> or through the Ghostscript "wrapper" defined in <a +href="../src/gsmalloc.h">src/gsmalloc.h</a>. + +<li>Pointers to instances are not stored in places where the garbage +collector will try to trace the pointer. + +<li>Code never attempts to get the structure type or size of an instance +through the allocator API. + +</ul> + +<p> +In general, structures without descriptors are problem-prone, and are +deprecated; in new code, they should only be used if the structure is +confined to a single .c file and its instances are only allocated on the C +stack. + +<dl> +<dt> +Files: +<dd> +<a href="../src/gsstruct.h">src/gsstruct.h</a>, +<a href="../src/gsstype.h">src/gsstype.h</a>. +</dl> + +<h4><a name="Garbage_collection"></a>Garbage collection</h4> + +<p> +The allocator architecture is designed to support compacting garbage +collection. Every object must be able to enumerate all the pointers it +contains, both for tracing and for relocation. As noted just above, the +structure descriptor provides procedures that do this. + +<p> +Whether or not a particular allocator type actually provides a garbage +collector is up to the allocator: garbage collection is invoked through a +virtual procedure. In practice, however, there are only two useful garbage +collectors for Ghostscript's own allocator: + +<ul> +<li>The "real" garbage collector associated with the PostScript interpreter, +described <a href="#Interpreter_GC">below</a>; +<li>A "non" garbage collector that only merges adjacent free blocks. +</ul> + +<dl> +<dt> +Files: +<dd> +<a href="../src/gsgc.h">src/gsgc.h</a>, +<a href="../src/gsnogc.c">src/gsnogc.c</a>, +<a href="../src/gsnogc.h">src/gsnogc.h</a>. +</dl> + +<h4><a name="Movability"></a>Movability</h4> + +<p> +As just noted, objects are normally movable by the garbage collector. +However, some objects must be immovable, usually because some other piece of +software must retain pointers to them. The allocator API includes +procedures for allocating both movable (default) and immovable objects. +Note, however, that even immovable objects must be traceable (have a +structure descriptor), and may be freed, by the garbage collector. + +<h4><a name="Parent_hierarchy"></a>Parent hierarchy</h4> + +<p> +When an allocator needs to add memory to the pool that it manages, it +requests the memory from its <em>parent</em> allocator. Every allocator has +a pointer to its parent; multiple allocators may share a single parent. The +ultimate ancestor of all allocators that can expand their pool dynamically +is an allocator that calls <b><tt>malloc</tt></b>, described <a +href="#malloc">below</a>. However, especially in embedded environments, an +allocator may be limited to a fixed-size pool assigned to it when it is +created. + +<h4><a name="Allocator_API"></a>Allocator API</h4> + +In summary, the allocator API provides the following principal operations: + +<ul> +<li>Allocate and free movable (default) or immovable objects and strings. +<li>Return the structure type and size of an object. +<li>Resize (shrink or grow) movable objects and strings, preserving +the contents insofar as possible. +<li>Report the size of the managed pool, and how much of it is in use. +<li>Register and unregister root pointers for the garbage collector. +<li>Free the allocator itself. +<li>Consolidate adjacent free blocks to reduce fragmentation. +</ul> + +<p> +For details, see <a href="../src/gsmemory.h">src/gsmemory.h</a>. + +<p> +The allocator API also includes one special hook for the PostScript +interpreter: the concept of stable allocators. See the section on <a +href="#save_forgetsave_restore"><b><tt>save</tt></b> and +<b><tt>restore</tt></b></a> below for details. + +<dl> +<dt> +Files: +<dd> +<a href="../src/gsmemraw.h">src/gsmemraw.h</a>, +<a href="../src/gsmemory.c">src/gsmemory.c</a>, +<a href="../src/gsmemory.h">src/gsmemory.h</a>, +<a href="../src/gsstruct.h">src/gsstruct.h</a>, +<a href="../src/gsstype.h">src/gsstype.h</a>. +</dl> + +<h3><a name="Freeing_storage"></a>Freeing storage</h3> + +<p> +Ghostscript's memory management architecture provides three different ways +to free objects: explicitly, by reference counting, or by garbage +collection. They provide different safety / performance / convenience +tradeoffs; we believe that all three are necessary. + +<p> +Objects are always freed as a whole; strings may be freed piecemeal. + +<p> +An object may have an associated finalization procedure, defined in the +structure descriptor. This procedure is called just before the object is +freed, independent of which method is being used to free the object. A few +types of objects have a virtual finalization procedure as well: the +finalization procedure defined in the descriptor simply calls the one in the +object. + +<h4><a name="Explicit_freeing"></a>Explicit freeing</h4> + +<p> +Objects and strings may be freed explicitly, using the +<b><tt>gs_free_</tt></b> virtual procedures in the allocator API. It is up +to the client to ensure that all allocated objects are freed at most once, +and that there are no dangling pointers. + +<p> +Explicit freeing is the fastest method, but is the least convenient and +least safe. It is most appropriate when storage is freed in the same +procedure where it is allocated, or for storage that is known to be +referenced by only one pointer. + +<h4><a name="Reference_counting"></a>Reference counting</h4> + +<p> +Objects may be managed by reference counting. When an object is allocated, +its reference count may be set to 0 or 1. Subsequently, when the reference +count is decremented to 0, the object is freed. + +<p> +The reference counting machinery provides its own virtual finalization +procedure for all reference-counted objects. The machinery calls this +procedure when it is about to free the object (but not when the object is +freed in any other way, which is probably a design bug). This is in +addition to (and called before) any finalization procedure associated with +the object type. + +<p> +Reference counting is as fast as explicit freeing, but takes more space in +the object. It is most appropriate for relatively large objects which are +referenced only from a small set of pointers. Note that reference counting +cannot free objects that are involved in a pointer cycle (e.g., A -> B -> C +-> A). + +<dl> +<dt> +Files: +<dd> +<a href="../src/gsrefct.h">src/gsrefct.h</a>. +</dl> + +<h4><a name="Real_garbage_collection"></a>(Real) garbage collection</h4> + +<p> +Objects and strings may be freed automatically by a garbage collector. See +<a href="#Interpreter_GC">below</a>. + +<h3><a name="Special_implementations"></a>Special implementations</h3> + +<h4><a name="malloc"></a>malloc</h4> + +<p> +As mentioned <a href="#Parent_hierarchy">above</a>, the ultimate ancestor of +all allocators with an expandable pool is one that calls +<b><tt>malloc</tt></b>. + +<dl> +<dt> +Files: +<dd> +<a href="../src/gsmalloc.h">src/gsmalloc.h</a>, +<a href="../src/gsmalloc.c">src/gsmalloc.c</a>. +</dl> + +<h4><a name="Locking"></a>Locking</h4> + +<p> +In a multi-threaded environment, if an allocator must be callable from +multiple threads (for example, if it is used to allocate structures in one +thread that are passed to, and freed by, another thread), the allocator must +provide mutex protection. Ghostscript provides this capability in the form +of a <em>wrapper</em> allocator, that simply forwards all calls to a +<em>target</em> allocator under protection of a mutex. Using the wrapper +technique, any allocator can be made thread-safe. + +<dl> +<dt> +Files: +<dd> +<a href="../src/gsmemlok.h">src/gsmemlok.h</a>, +<a href="../src/gsmemlok.c">src/gsmemlok.c</a>. +</dl> + +<h4><a name="Retrying"></a>Retrying</h4> + +<p> +In an embedded environment, job failure due to memory exhaustion is very +undesirable. Ghostscript provides a wrapper allocator that, when an +allocation attempt fails, calls a client-provided procedure that can attempt +to free memory, then ask for the original allocation to be retried. For +example, such a procedure can wait for a queue to empty, or can free memory +occupied by caches. + +<dl> +<dt> +Files: +<dd> +<a href="../src/gsmemret.h">src/gsmemret.h</a>, +<a href="../src/gsmemret.c">src/gsmemret.c</a>. +</dl> + +<h3><a name="Standard_implementation"></a>Standard implementation</h3> + +<p> +The standard Ghostscript allocator gets storage from its parent (normally +the <b><tt>malloc</tt></b> allocator) in large blocks called +<em>chunks</em>, and then allocates objects up from the low end and strings +down from the high end. Large objects or strings are allocated in their own +chunk. + +<p> +The standard allocator maintains a set of free-block lists for small object +sizes, one list per size (rounded up to the word size), plus a free-block +list for large objects (but not for objects so large that they get their own +chunk: when such an object is freed, its chunk is returned to the parent). +The lists are not sorted; adjacent blocks are only merged if needed. + +<p> +While the standard allocator implements the generic allocator API, and is +usable with the library alone, it includes a special hook for the PostScript +interpreter to aid in the efficient allocation of PostScript composite +objects (arrays and dictionaries). See the section on <a +href="#Refs">Refs</a> below for details. + +<dl> +<dt> +Files: +<dd> +<a href="../src/gsalloc.c">src/gsalloc.c</a>, +<a href="../src/gsalloc.h">src/gsalloc.h</a>, +<a href="../src/gxalloc.h">src/gxalloc.h</a>, +<a href="../src/gxobj.h">src/gxobj.h</a>. +</dl> + +<h3><a name="PostScript_interpreter_extensions"></a>PostScript interpreter extensions</h3> + +<p> +The PostScript interpreter uses an allocator that extends the graphic +library's standard allocator to handle PostScript objects, +<b><tt>save</tt></b> and <b><tt>restore</tt></b>, and real garbage +collection. + +<h4><a name="Refs"></a>Refs (PostScript "objects")</h4> + +<p> +Ghostscript represents what the PLRM calls PostScript "objects" using a +structure called a <b><tt>ref</tt></b>, defined in <a +href="../src/iref.h">src/iref.h</a>; packed refs, used for the elements of +packed arrays, are defined in <a href="../src/ipacked.h">src/ipacked.h</a>. +See those files for detailed information. + +<dl> +<dt> +Files: +<dd> +<a href="../src/ipacked.h">src/ipacked.h</a>, +<a href="../src/iref.h">src/iref.h</a>. +</dl> + +<p> +The PLRM calls for two types of "virtual memory" (VM) space: global and +local. Ghostscript adds a third space, <em>system</em> VM, whose lifetime +is an entire session -- i.e., it is effectively "permanent". All three +spaces are subject to garbage collection. There is a separate allocator +instance for each VM space (actually, two instances each for global and +local spaces; see <a href="#save_forgetsave_restore">below</a>). In a +system with multiple contexts and multiple global or local VMs, each global +or local VM has its own allocator instance(s). + +<p> +Refs that represent PostScript composite objects, and therefore include +pointers to stored data, include a 2-bit VM space tag to indicate in which +VM the object data are stored. In addition to system, global, and local VM, +there is a tag for "foreign" VM, which means that the memory is not managed +by a Ghostscript allocator at all. Every store into a composite object must +check for <b><tt>invalidaccess</tt></b>: the VM space tag values are chosen +to help make this check efficient. See <a +href="../src/ivmspace.h">src/ivmspace.h</a>, <a +href="../src/iref.h">src/iref.h</a>, and <a +href="../src/store.h">src/store.h</a> for details. + +<dl> +<dt> +Files: +<dd> +<a href="../src/ivmspace.h">src/ivmspace.h</a>. +</dl> + +<p> +PostScript composite objects (arrays and dictionaries) are usually small. +Using a separate memory manager object for each composite object would waste +a lot of space for object headers. Therefore, the interpreter's memory +manager packs multiple composite objects (also called "ref-containing +objects") into a single memory manager object, similar to the way the memory +manager packs multiple objects into a chunk (see <a +href="#Standard_implementation">above</a>). See <a +href="../src/gxalloc.h">src/gxalloc.h</a> for details. This memory manager +object has a structure descriptor, like all other memory manager objects. + +<p> +Note that the <b><tt>value.pdict</tt></b>, <b><tt>value.refs</tt></b>, or +<b><tt>value.packed</tt></b> member of a ref must point to a PostScript +composite object, and therefore can point into the middle of a memory +manager object. This requires special handling by the garbage collector (<a +href="#Interpreter_GC">q.v.</a>). + +<dl> +<dt> +Files: +<dd> +<a href="../src/ialloc.c">src/ialloc.c</a>, +<a href="../src/ialloc.h">src/ialloc.h</a>, +<a href="../src/iastate.h">src/iastate.h</a>, +<a href="../src/iastruct.h">src/iastruct.h</a>, +<a href="../src/ilocate.c">src/ilocate.c</a>, +<a href="../src/imemory.h">src/imemory.h</a>, +<a href="../src/istruct.h">src/istruct.h</a>. +</dl> + +<h4><a name="save_forgetsave_restore"></a>save/.forgetsave/restore</h4> + +<p> +In addition to <b><tt>save</tt></b> and <b><tt>restore</tt></b>, Ghostscript +provides a <b><tt>.forgetsave</tt></b> operator that makes things as though +a given <b><tt>save</tt></b> had never happened. (In data base terminology, +<b><tt>save</tt></b> is "begin transaction", <b><tt>restore</tt></b> is +"abort transaction", and <b><tt>.forgetsave</tt></b> is "end/commit +transaction"). <b><tt>.forgetsave</tt></b> was implemented for a specific +commercial customer (who may no longer even be using it): it was a pain to +make work, but it's in the code now, and should be maintained. See the +extensive comments in <a href="../src/isave.c">src/isave.c</a> for more +information about how these operations work. + +<dl> +<dt> +Files: +<dd> +<a href="../src/idosave.h">src/idosave.h</a>, +<a href="../src/isave.c">src/isave.c</a>, +<a href="../src/isave.h">src/isave.h</a>, +<a href="../src/isstate.h">src/isstate.h</a>, +<a href="../src/store.h">src/store.h</a>. +</dl> + +<h4><a name="Stable_allocators"></a>Stable allocators</h4> + +<p> +Even though <b><tt>save</tt></b> and <b><tt>restore</tt></b> are concepts +from the PostScript interpreter, the generic allocator architecture and API +include a feature to support them, called <em>stable</em> allocators. Every +allocator has an associated stable allocator, which tags pointers with the +same VM space number but which is not subject to <b><tt>save</tt></b> and +<b><tt>restore</tt></b>. System VM is intrinsically stable (its associated +stable allocator is the same allocator), so there are only 5 allocators in +ordinary single-context usage: system VM, stable global VM, ordinary global +VM, stable local VM, ordinary local VM. + +<p> +The reason that we cannot simply allocate all stable objects in system VM is +that their refs must still be tagged with the correct VM space number, so +that the check against storing pointers from global VM to local VM can be +enforced properly. + +<p> +All PostScript objects are normally allocated with the non-stable +allocators. The stable allocators should be used with care, since using +them can easily create dangling pointers: if storage allocated with a stable +allocator contains any references to PostScript objects, the client is +responsible for ensuring that the references don't outlive the referenced +objects, normally by ensuring that any such referenced objects are allocated +at the outermost <b><tt>save</tt></b> level. (The original reason for +wanting stable allocators was the PostScript stacks, which are essentially +PostScript arrays but are not subject to <b><tt>save</tt></b> and +<b><tt>restore</tt></b>.) For more examples, search the sources for +references to <b><tt>gs_memory_stable</tt></b>. + +<h4><a name="Interpreter_GC"></a>Garbage collection</h4> + +<p> +The interpreter's garbage collector is a compacting, non-conservative, +mark-and-sweep collector. + +<ul> +<li>It compacts storage because that is the only way to avoid permanent +sandbars, which is essential in limited-memory environments. +<li>It is non-conservative because conservative collectors (which attempt +to determine whether arbitrary bit patterns are pointers) cannot compact. +<li>It uses mark-and-sweep, rather than a more modern copying approach, +because it cannot afford the extra memory required for copying. +</ul> + +<p> +Roots for tracing must be registered with the allocator. Most roots are +registered during initialization. + +<p> +"Mark-and-sweep" is a bit of a misnomer. The garbage collector actually has +5 main phases: + +<ul> +<li>Sweep to clear marks; +<li>Trace and mark; +<li>Sweep to compute relocation; +<li>Sweep to relocate pointers; +<li>Sweep and compact. +</ul> + +<p> +There is some extra complexity to handle collecting local VM only. In this +case, all pointers in global VM are treated as roots, and global VM is not +compacted. + +<p> +As noted above, PostScript arrays and strings can have refs that point +within them (because of <b><tt>getinterval</tt></b>). Thus the garbage +collector must mark each element of an array, and even each byte of a +string, individually. Specifically, it marks objects, refs, and strings +using 3 different mechanisms: + +<ul> + +<li>Objects have a mark bit in their header: see +<a href="../src/gxobj.h">src/gxobj.h</a>, + +<li>Refs and packed refs have a reserved mark bit: see <a +href="../src/iref.h">src/iref.h</a> and <a +href="../src/ipacked.h">src/ipacked.h</a>. + +<li>Strings use a separate bit table, with one bit per string byte: see +<a href="../src/gxalloc.h">src/gxalloc.h</a>, + +</ul> + +<p> +Similarly, it records the relocation information for objects, refs, and +strings differently: + +<ul> + +<li>Objects record relocation in the object header. + +<li>Refs record relocation in unused fields of refs such as nulls that +don't use their <b><tt>value</tt></b> field. Every memory manager object +that stores ref-containing objects as described above has an extra, unused +ref at the end for this purpose. + +<li>Strings use a separate relocation table. + +</ul> + +<dl> +<dt> +Files: +<dd> +<a href="../src/igc.c">src/igc.c</a>, +<a href="../src/igc.h">src/igc.h</a>, +<a href="../src/igcref.c">src/igcref.c</a>, +<a href="../src/igcstr.c">src/igcstr.c</a>, +<a href="../src/igcstr.h">src/igcstr.h</a>, +<a href="../src/ireclaim.c">src/ireclaim.c</a>. +</dl> + +<hr> + +<h2><a name="Portability"></a>Portability</h2> + +<p> +One of Ghostscript's most important features is its great portability across +platforms (CPUs, operating systems, compilers, and build tools). The code +supports portability through two mechanisms: + +<ul> + +<li><a href="#Structural">Structural mechanisms</a> -- segregating +platform-dependent information into files in a particular way. + +<li><a href="#Coding">Coding standards</a> -- avoiding relying on byte +order, scalar size, and platform-specific compiler or library features. + +</ul> + +<h3><a name="Structural"></a>Structural</h3> + +<h4><a name="CPU_and_compiler"></a>CPU and compiler</h4> + +<p> +Ghostscript attempts to discover characteristics of the CPU and compiler +automatically during the build process, by compiling and then executing a +program called <b><tt>genarch</tt></b>. <b><tt>genarch</tt></b> generates a +file <b><tt>obj/arch.h</tt></b>, which almost all Ghostscript files then +include. This works well for things like word size, byte order, and +floating point representation, but it can't determine whether or not a +compiler supports a particular feature, because if a feature is absent, the +compilation may fail. + +<dl> +<dt> +Files: +<dd> +<a href="../src/genarch.c">src/genarch.c</a>, +<a href="../obj/arch.h">obj/arch.h</a>. +</dl> + +<h4><a name="Library_headers"></a>Library headers</h4> + +<p> +Despite the supposed standardization of ANSI C, platforms vary considerably +in where (and whether) they provide various standard library facilities. +Currently, Ghostscript's build process doesn't attempt to sort this out +automatically. Instead, for each library header file +<b><tt><</tt></b><em>xxx</em><b><tt>.h></tt></b> there is a +corresponding Ghostscript source file +<b><tt>src/</tt></b><em>xxx</em><b><tt>_.h</tt></b>, containing a set of +compile-time conditionals that attempt to select the correct platform header +file, or in some cases substitute Ghostscript's own code for a missing +facility. You may need to edit these files when moving to platforms with +unusually non-standard libraries. + +<dl> +<dt> +Files: +<dd> +<a href="../src/ctype_.h">src/ctype_.h</a>, +<a href="../src/dirent_.h">src/dirent_.h</a>, +<a href="../src/dos_.h">src/dos_.h</a>, +<a href="../src/errno_.h">src/errno_.h</a>, +<a href="../src/fcntl_.h">src/fcntl_.h</a>, +<a href="../src/jerror_.h">src/jerror_.h</a>, +<a href="../src/malloc_.h">src/malloc_.h</a>, +<a href="../src/math_.h">src/math_.h</a>, +<a href="../src/memory_.h">src/memory_.h</a>, +<a href="../src/pipe_.h">src/pipe_.h</a>, +<a href="../src/png_.h">src/png_.h</a>, +<a href="../src/stat_.h">src/stat_.h</a>, +<a href="../src/stdio_.h">src/stdio_.h</a>, +<a href="../src/string_.h">src/string_.h</a>, +<a href="../src/time_.h">src/time_.h</a>, +<a href="../src/unistd_.h">src/unistd_.h</a>, +<a href="../src/vmsmath.h">src/vmsmath.h</a>, +<a href="../src/windows_.h">src/windows_.h</a>, +<a href="../src/x_.h">src/x_.h</a>. +</dl> + +<p> +It has been suggested that the GNU <b><tt>configure</tt></b> scripts do the +above better, for Unix systems, than Ghostscript's current methods. While +this may be true, we have found <b><tt>configure</tt></b> scripts difficult +to write, understand, and maintain; and the <b><tt>autoconf</tt></b> tool +for generating <b><tt>configure</tt></b> scripts, which we found easy to +use, doesn't cover much of the ground that Ghostscript requires. + +<h4><a name="Cross_platform_APIs"></a>Cross-platform APIs</h4> + +<p> +For a few library facilities that are available on all platforms but are not +well standardized, or that may need to be changed for special environments, +Ghostscript defines its own APIs. It is an architectural property of +Ghostscript that the implementations of these APIs are the only .c files for +which the choice of platform (as opposed to choices of drivers or optional +features) determines whether they are compiled and linked into an +executable. + +<dl> + +<dt> +API: +<dd> +<a href="../src/gp.h">src/gp.h</a>, +<a href="../src/gpcheck.h">src/gpcheck.h</a>, +<a href="../src/gpgetenv.h">src/gpgetenv.h</a>, +<a href="../src/gpmisc.h">src/gpmisc.h</a>, +<a href="../src/gpsync.h">src/gpsync.h</a>. + +<dt> +Implementation files shared among multiple platforms: +<dd> +<a href="../src/gp_getnv.c">src/gp_getnv.c</a>, +<a href="../src/gp_mktmp.c">src/gp_mktmp.c</a>, +<a href="../src/gp_nsync.c">src/gp_nsync.c</a>, +<a href="../src/gp_psync.c">src/gp_psync.c</a>, +<a href="../src/gp_strdl.c">src/gp_strdl.c</a>, +<a href="../src/gpmisc.c">src/gpmisc.c</a>. + +<dt> +Platform-specific implementation files: +<dd> +<a href="../src/gp_dosfe.c">src/gp_dosfe.c</a>, +<a href="../src/gp_dosfs.c">src/gp_dosfs.c</a>, +<a href="../src/gp_dvx.c">src/gp_dvx.c</a>, +<a href="../src/gp_iwatc.c">src/gp_iwatc.c</a>, +<a href="../src/gp_msdos.c">src/gp_msdos.c</a>, +<a href="../src/gp_mshdl.c">src/gp_mshdl.c</a>, +<a href="../src/gp_msio.c">src/gp_msio.c</a>, +<a href="../src/gp_mslib.c">src/gp_mslib.c</a>, +<a href="../src/gp_mswin.c">src/gp_mswin.c</a>, +<a href="../src/gp_mswin.h">src/gp_mswin.h</a>, +<a href="../src/gp_ntfs.c">src/gp_ntfs.c</a>, +<a href="../src/gp_os2.c">src/gp_os2.c</a>, +<a href="../src/gp_os9.c">src/gp_os9.c</a>, +<a href="../src/gp_stdia.c">src/gp_stdia.c</a>, +<a href="../src/gp_stdin.c">src/gp_stdin.c</a>, +<a href="../src/gp_sysv.c">src/gp_sysv.c</a>, +<a href="../src/gp_unifn.c">src/gp_unifn.c</a>, +<a href="../src/gp_unifs.c">src/gp_unifs.c</a>, +<a href="../src/gp_unix.c">src/gp_unix.c</a>, +<a href="../src/gp_vms.c">src/gp_vms.c</a>, +<a href="../src/gp_wgetv.c">src/gp_wgetv.c</a>, +<a href="../src/gp_win32.c">src/gp_win32.c</a>, +<a href="../src/gp_wsync.c">src/gp_wsync.c</a>. + +</dl> + +<h4><a name="Makefiles"></a>Makefiles</h4> + +<p> +For information on the structure and conventions used within makefiles, see +the <a href="#Makefile_structure">Makefile structure</a> section above. + +<p> +Ghostscript's makefiles are structured very similarly to the cross-platform +library files. The great majority of the makefiles are portable across all +platforms and all versions of <b><tt>make</tt></b>. To achieve this, the +platform-independent makefiles must obey two constraints beyond those of the +POSIX <b><tt>make</tt></b> program: + +<ul> + +<li>No conditionals or <b><tt>include</tt></b>s are allowed. While most +<b><tt>make</tt></b> programs now provide some form of conditional execution +and some form of inclusion, there is no agreement on the syntax. +(Conditionals and includes are allowed in platform-dependent makefiles; in +fact, an inclusion facility is required.) + +<li>There must be a space on both sides of the : that separates the target +of a rule from its dependencies. This is required for compatibility with +the OpenVMS <b><tt>MMS</tt></b> and <b><tt>MMK</tt></b> programs. + +</ul> + +<p> +The top-level makefile for each platform (where "platform" includes the OS, +the compiler, and the flavor of <b><tt>make</tt></b>) contains all the build +options, plus <b><tt>include</tt></b>s for the generic makefiles and any +platform-dependent makefiles that are shared among multiple platforms. + +<p> +While most of the top-level makefiles build a PostScript and/or PDF +interpreter configuration, there are also a few makefiles that build a test +program that only uses the graphics library without any language +interpreter. Among other things, this can be helpful in verifying that no +accidental dependencies on the interpreter have crept into the library or +drivers. + +<p> +For families of similar platforms, the question arises whether to use +multiple top-level makefiles, or whether to use a single top-level makefile +that may require minor editing for some (or all) platforms. Ghostscript +currently uses the following top-level makefiles for building interpreter +configurations: + +<ul> + +<li>Unix (including GNU/Linux): +<ul> +<li><a href="../src/Makefile.in">src/Makefile.in</a>, +template for autoconf-based builds. +<li><a href="../src/unix-gcc.mak">src/unix-gcc.mak</a>, +for Unix with gcc. +<li><a href="../src/unixansi.mak">src/unixansi.mak</a>, +for Unix with an ANSI C compiler other than gcc. +</ul> + +<li>PC: +<ul> +<li><a href="../src/bcwin32.mak">src/bcwin32.mak</a>, +for MS Windows with Borland C++ Builder. +<li><a href="../src/msvc32.mak">src/msvc32.mak</a>, +for MS Windows with Microsoft Visual C (MSVC). +<li><a href="../src/os2.mak">src/os2.mak</a>, +for MS-DOS or OS/2 GCC/EMX environment. +<li><a href="../src/watc.mak">src/watc.mak</a>, +for extended MS-DOS with Watcom C. +<li><a href="../src/watcw32.mak">src/watcw32.mak</a>, +for MS Windows with Watcom C. +</ul> + +<li>Macintosh: +<ul> +<li><a href="../src/macosx.mak">src/macosx.mak</a>, +commandline makefile for MacOS X. +<li><a href="../src/macos-mcp.mak">src/macos-mcp.mak</a>, +dummy makefile to generate an xml project file for Metrowerks Codewarrior. +</ul> + + +<li>Other: +<ul> +<li><a href="../src/all-arch.mak">src/all-arch.mak</a>, +for building on many Unix systems in a networked test environment. +<li><a href="../src/dvx-gcc.mak">src/dvx-gcc.mak</a>, +for DesqView/X with gcc. +<li><a href="../src/openvms.mak">src/openvms.mak</a>, +for OpenVMS with Digital's CC compiler and the MMS build program. +<li><a href="../src/openvms.mmk">src/openvms.mmk</a>, +for OpenVMS with Digital's CC compiler and the MMK build program. +</ul> + +</ul> + +<p> +The following top-level makefiles build the library test program: + +<ul> +<li><a href="../src/ugcclib.mak">src/ugcclib.mak</a>, +on Unix with gcc. +<li><a href="../src/msvclib.mak">src/msvclib.mak</a>, +on MS Windows with MSVC. +<li><a href="../src/watclib.mak">src/watclib.mak</a>, +on extended MS-DOS with Watcom C. +</ul> + +<p> +The MSVC makefiles may require editing to select between different versions +of MSVC, since different versions may have slightly incompatible command +line switches or customary installation path names. The Unix makefiles +often require editing to deal with differing library path names and/or +library names. For details, see <a href="Make.htm#Unix_build">the Unix +section</a> of the documentation for building Ghostscript. + +<dl> + +<dt> +Library test program: +<dd> +<a href="../src/gslib.c">src/gslib.c</a>. + +<dt> +Platform-independent makefiles: +<dd> + +<dl> + +<dt> +Graphics library and support: +<dd> +<a href="../src/contrib.mak">src/contrib.mak</a>, +<a href="../src/devs.mak">src/devs.mak</a>, +<a href="../src/gnudevs.mak">src/gnudevs.mak</a>, +<a href="../src/gs.mak">src/gs.mak</a>, +<a href="../src/lib.mak">src/lib.mak</a>, +<a href="../src/version.mak">src/version.mak</a>. + +<dt> +PostScript interpreter and fonts: +<dd> +<a href="../src/cfonts.mak">src/cfonts.mak</a>, +<a href="../src/int.mak">src/int.mak</a>, +<a href="../src/wmin.mak">src/wmin.mak</a>. + +<dt> +Third-party libraries: +<dd> +<a href="../src/icclib.mak">src/icclib.mak</a>, +<a href="../src/ijs.mak">src/ijs.mak</a>, +<a href="../src/jpeg.mak">src/jpeg.mak</a>, +<a href="../src/libpng.mak">src/libpng.mak</a>, +<a href="../src/zlib.mak">src/zlib.mak</a>. + +</dl> + +<dt> +Shared platform-dependent makefiles: +<dd> + +<dl> + +<dt> +Unix: +<dd> +<a href="../src/unix-aux.mak">src/unix-aux.mak</a>, +<a href="../src/unix-dll.mak">src/unix-dll.mak</a>, +<a href="../src/unix-end.mak">src/unix-end.mak</a>, +<a href="../src/unixhead.mak">src/unixhead.mak</a>, +<a href="../src/unixinst.mak">src/unixinst.mak</a>, +<a href="../src/unixlink.mak">src/unixlink.mak</a>. + +<dt> +Microsoft Windows and MS-DOS: +<dd> +<a href="../src/msvccmd.mak">src/msvccmd.mak</a>, +<a href="../src/msvctail.mak">src/msvctail.mak</a>, +<a href="../src/pcwin.mak">src/pcwin.mak</a>, +<a href="../src/wccommon.mak">src/wccommon.mak</a>, +<a href="../src/wctail.mak">src/wctail.mak</a>, +<a href="../src/winint.mak">src/winint.mak</a>, +<a href="../src/winlib.mak">src/winlib.mak</a>, +<a href="../src/winplat.mak">src/winplat.mak</a>. + +<dt> +Other: +<dd> +<a href="../src/dvx-head.mak">src/dvx-head.mak</a>, +<a href="../src/dvx-tail.mak">src/dvx-tail.mak</a>,<br> +<a href="../src/macos-fw.mak">src/macos-fw.mak</a>, +for building as a MacOS X Framework. + +</dl> + +</dl> + +<h3><a name="Coding"></a>Coding</h3> + +<p> +Coding for portability requires avoiding both <em>explicit</em> +dependencies, such as platform-dependent <b><tt>#ifdef</tt></b>s, and +<em>implicit</em> dependencies, such as dependencies on byte order or the +size of the integral types. + +<h4><a name="Explicit_dependencies"></a>Explicit dependencies</h4> + +<p> +The platform-independent .c files never, ever, use <b><tt>#ifdef</tt></b> or +<b><tt>#if</tt></b> to select code for specific platforms. Instead, we +always try to characterize some abstract property that is being tested. For +example, rather than checking for macros that are defined on those specific +platforms that have 64-bit <b><tt>long</tt></b> values, we define a macro +<b><tt>ARCH_SIZEOF_LONG</tt></b> that can then be tested. Such macros are +always defined in a .h file, either automatically in <b><tt>arch.h</tt></b>, +or explicitly in a <em>xxx</em><b><tt>_.h</tt></b> file, as described in +earlier sections. + +<dl> +<dt> +Files: +<dd> +<a href="../src/std.h">src/std.h</a>, +<a href="../src/stdpre.h">src/stdpre.h</a>. +</dl> + +<h4><a name="Implicit_dependencies"></a>Implicit dependencies</h4> + +<p> +The most common source of byte ordering dependencies is casting between +types (T1 *) and (T2 *) where T1 and T2 are numeric types that aren't merely +signed/unsigned variants of each other. To avoid this, the only casts +allowed in the code are between numeric types, from a pointer type to a long +integral type, and between pointer types. + +<p> +Ghostscript's code assumes the following about the sizes of various types: + +<dl> +<dt>char<dd>8 bits +<dt>short<dd>16 bits +<dt>int<dd>32 or 64 bits +<dt>long<dd>32 or 64 bits +<dt>float<dd>32 bits (may work with 64 bits) +<dt>double<dd>64 bits (may work with 128 bits) +</dl> + +<p> +The code does not assume that the <b><tt>char</tt></b> type is signed (or +unsigned); except for places where the value is always a literal string, or +for interfacing to library procedures, the code uses <b><tt>byte</tt></b> (a +Ghostscript synonym for <b><tt>unsigned char</tt></b>) almost everywhere. + +<p> +Pointers are signed on some platforms and unsigned on others. In the few +places in the memory manager where it's necessary to reliably order-compare +(as opposed to equality-compare) pointers that aren't known to point to the +same allocated block of memory, the code uses the +<b><tt>PTR_</tt></b><em>relation</em> macros rather than direct comparisons. + +<p> +See the files listed above for other situations where a macro provides +platform-independence or a workaround for bugs in specific compilers or +libraries (of which there are a distressing number). + +<h4><a name="Platform_specific_code"></a>Platform-specific code</h4> + +<p> +There are some features that are inherently platform-specific: + +<ul> + +<li>Microsoft Windows requires a lot of special top-level code, and also has +an installer and uninstaller. + +<li>OS/2 requires a little special code. + +<li>MacOS also requires special top-level code (now distributed with the +standard Ghostscript package). + +<li>All platforms supporting DLLs (currently all three of the above) share +some special top-level code. + +</ul> + +<dl> + +<dt> +MS Windows files: +<dd> +<a href="../src/dpmain.c">src/dpmain.c</a>, +<a href="../src/dwdll.c">src/dwdll.c</a>, +<a href="../src/dwdll.h">src/dwdll.h</a>, +<a href="../src/dwimg.c">src/dwimg.c</a>, +<a href="../src/dwimg.h">src/dwimg.h</a>, +<a href="../src/dwinst.cpp">src/dwinst.cpp</a>, +<a href="../src/dwinst.h">src/dwinst.h</a>, +<a href="../src/dwmain.c">src/dwmain.c</a>, +<a href="../src/dwmain.h">src/dwmain.h</a>, +<a href="../src/dwmainc.c">src/dwmainc.c</a>, +<a href="../src/dwnodll.c">src/dwnodll.c</a>, +<a href="../src/dwreg.c">src/dwreg.c</a>, +<a href="../src/dwreg.h">src/dwreg.h</a>, +<a href="../src/dwsetup.cpp">src/dwsetup.cpp</a>, +<a href="../src/dwsetup.h">src/dwsetup.h</a>, +<a href="../src/dwtext.c">src/dwtext.c</a>, +<a href="../src/dwtext.h">src/dwtext.h</a>, +<a href="../src/dwuninst.cpp">src/dwuninst.cpp</a>, +<a href="../src/dwuninst.h">src/dwuninst.h</a>, +<a href="../src/gp_msdll.c">src/gp_msdll.c</a>, +<a href="../src/gp_mspol.c">src/gp_mspol.c</a>, +<a href="../src/gp_msprn.c">src/gp_msprn.c</a>, +<a href="../src/gs16spl.c">src/gs16spl.c</a>, +<a href="../src/gsdllwin.h">src/gsdllwin.h</a>. + +<dt> +OS/2 files: +<dd> +<a href="../src/gsdllos2.h">src/gsdllos2.h</a>. + +<dt> +Unix files: +<dd> +<a href="../src/dxmain.c">src/dxmain.c</a>. +<a href="../src/dxmainc.c">src/dxmainc.c</a>. + +<dt> +Macintosh files: +<dd> +<a href="../src/gdevmac.c">src/gdevmac.c</a>. +<a href="../src/gdevmac.h">src/gdevmac.h</a>. +<a href="../src/gdevmacpictop.h">src/gdevmacpictop.h</a>. +<a href="../src/gdevmacttf.h">src/gdevmacttf.h</a>. +<a href="../src/gdevmacxf.c">src/gdevmacxf.c</a>. +<a href="../src/gp_mac.c">src/gp_mac.c</a>. +<a href="../src/gp_mac.h">src/gp_mac.h</a>. +<a href="../src/gp_macio.c">src/gp_macio.c</a>. +<a href="../src/macgenmcpxml.sh">src/macgenmcpxml.sh</a>. +<a href="../src/macsysstat.h">src/macsysstat.h</a>. +<a href="../src/macsystypes.h">src/macsystypes.h</a>. + +<dt> +VMS files: +<dd> +<a href="../src/vms_x_fix.h">src/vms_x_fix.h</a>. + +<dt> +DLL files: +<dd> +<a href="../src/gsdll.c">src/gsdll.c</a>, +<a href="../src/gsdll.h">src/gsdll.h</a>, +<a href="../src/gdevdsp.c">src/gdevdsp.c</a>, +<a href="../src/gdevdsp.h">src/gdevdsp.h</a>, +<a href="../src/gdevdsp2.h">src/gdevdsp2.h</a>, +<a href="../src/iapi.c">src/iapi.c</a>, +<a href="../src/iapi.h">src/iapi.h</a>, +<a href="../src/idisp.c">src/idisp.c</a>, +<a href="../src/idisp.h">src/idisp.h</a>. +<p> +The new DLL interface (new as of 7.0) is especially useful with the +new display device, so it is included here. Both are due to Russell +Lang. + +</dl> + + +<hr> + +<h2><a name="Adding_features_and_options"></a>Adding features and options</h2> + +<p> +[Ray, please supply more information about what you want here] + +<h2><a name="Troubleshooting"></a>Troubleshooting</h2> + +<p> +The Ghostscript code has many tracing and debugging features that can be +enabled at run time using the <b><tt>-Z</tt></b> command line switch, if the +executable was compiled with <b><tt>DEBUG</tt></b> defined. One +particularly useful combination is <b><tt>-Z@\?</tt></b>, which fills free +memory blocks with a pattern and also turns on run-time memory consistency +checking. For more information, see <a +href="Use.htm#Debugging">doc/Use.htm#Debugging</a>; you can also search for +occurrences of <b><tt>if_debug</tt></b> or <b><tt>gs_debug_c</tt></b> in the +source code. Note that many of these features are in the graphics library +and do not require a PostScript interpreter. + +<p> +The code also contains many run-time procedures whose only purpose is to be +called from the debugger to print out various data structures, including all +the procedures in <a href="../src/idebug.c">src/idebug.c</a> (for the +PostScript interpreter) and the <b><tt>debug_dump_</tt></b> procedures in <a +href="../src/gsmisc.c">src/gsmisc.c</a>. + +<dl> +<dt> +Files: +<dd> +<a href="Use.htm#Debugging">doc/Use.htm#Debugging</a>, +<a href="../src/gdebug.h">src/gdebug.h</a>, +<a href="../src/gsmdebug.h">src/gsmdebug.h</a>, +<a href="../src/idebug.h">src/idebug.h</a>, +<a href="../src/idebug.c">src/idebug.c</a>. +</dl> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 2001 artofcode LLC. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Devices.htm b/Master/xemtex/doc/ghostscript/Devices.htm new file mode 100644 index 00000000000..57d39eec9da --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Devices.htm @@ -0,0 +1,6046 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Details of Ghostscript output devices</title> +<!-- $Id: Devices.htm,v 1.34.2.15.2.6 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: devices.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Details of Ghostscript output devices</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Measurements">Notes on measurements</a> +<li><a href="#IJS">IJS - Inkjet and other raster devices</a> +<li><a href="#Win">MS Windows printers</a> +<li><a href="#File_formats">File formats</a> +<ul> +<li><a href="#JFIF">JPEG file format (JFIF)</a> +<li><a href="#TIFF">TIFF file formats</a> +</ul> +<li><a href="#Display_devices">Display devices</a> +<ul> +<li><a href="#x11_devices">X Window System</a> +</ul> +<li><a href="#HP_ijs">HP Deskjet official drivers</a> +<li><a href="#STP">Gimp-Print (stp) drivers</a> +<li><a href="#HP_color_inkjet">Other H-P color inkjet printers</a> +<ul> +<li><a href="#HP_gdevcdj">Drivers contained in <b><tt>gdevcdj.c</tt></b></a> +<li><a href="#HP_paper_size">Default paper size</a> +<li><a href="#HP_limits">Deskjet physical limits</a> +<li><a href="#HP_command_line">Printer properties (command-line parameters)</a> +<ul> +<li><a href="#HP_bpp">Bits per pixel</a> +<li><a href="#HP_deskjet_properties">Deskjet properties</a> +<li><a href="#HP_paintjet_properties">Paintjet XL300 / Paintjet XL properties</a> +</ul> +<li><a href="#HP_gamma">Gamma correction</a> +<li><a href="#HP_resolution_enhance">HP's resolution-enhanced mode for Inkjet printers</a> +<li><a href="#HP_tips">General tips</a> +</ul> +<li><a href="#BJC_8200">Canon BJC-8200 printer</a> +<li><a href="#BJC">Other Canon BubbleJet (BJC) printers</a> +<ul> +<li><a href="#BJC_history">History</a> +<li><a href="#BJC_build">Configuring and building the BJC drivers</a> +<ul> +<li><a href="#BJC_defaults">Modify values in <b><tt>gdevbjc.h</tt></b></a> +<li><a href="#BJC_CMYK_RGB">CMYK-to-RGB color conversion</a> +<li><a href="#BJC_vertical_centering">Vertical centering of the printable area</a> +<li><a href="#BJC_margins">Page margins</a> +<li><a href="#BJC_compile">Makefile and compilation</a> +</ul> +<li><a href="#BJC_usage">Use of the drivers</a> +<ul> +<li><a href="#BJC_options">Supported Options and Defaults</a> +<li><a href="#BJC_device_info">Device information</a> +<li><a href="#BJC_HW_margins">Hardware margins</a> +<li><a href="#BJC_PPD">PostScript printer description (PPD) files</a> +<li><a href="#BJC_PPD_custom">Customizing the PPD files</a> +</ul> +<li><a href="#BJC_bugs">How to report problems</a> +<li><a href="#BJC_acks">Acknowledgements</a> +</ul> +<li><a href="#STC_epson_stylus">Epson Stylus color printer (see also <b><tt>uniprint</tt></b>)</a> +<ul> +<li><a href="#STC_usage">Usage</a> +<li><a href="#STC_options">Options</a> +<li><a href="#STC_FAQ">Application note and FAQ</a> +<ul> +<li><a href="#STC_FAQ_A3">Support for A3 paper</a> +<li><a href="#STC_FAQ_margins">Margins, PageSize</a> +<li><a href="#STC_FAQ_II_IIS_1500">Stylus Color II / IIs and 1500</a> +</ul> +<li><a href="#STC_recommendations">Recommendations</a> +<ul> +<li><a href="#STC_dither_experiment">Color dithering experiments with <b><tt>gdevstc</tt></b> 1.21</a> +</ul> +<li><a href="#STC_color_transform">Color transformation</a> +<li><a href="#STC_CAM"><b><tt>ColorAdjustMatrix</tt></b></a> +<li><a href="#STC_RGBCMYK_coding">RGB / CMYK coding and transfer, and <b><tt>BitsPerPixel</tt></b></a> +<li><a href="#What_is_weaving">What is weaving?</a> +<li><a href="#STC_print_modes">Print mode parameters</a> +<ul> +<li><a href="#STC_unidirectional"><b><tt>Unidirectional</tt></b></a> +<li><a href="#STC_noweave"><b><tt>Microweave</tt></b>, <b><tt>noWeave</tt></b> and <b><tt>OutputCode=deltarow</tt></b></a> +<li><a href="#STC_model"><b><tt>Model</tt></b></a> +</ul> +<li><a href="#STC_Pitfalls">Bugs and pitfalls</a> +<li><a href="#STC_Tests">Tests</a> +<ul> +<li><a href="#STC_OutputCodes">The various OutputCodes</a> +<li><a href="#STC_printing_time">Printing time related to other options</a> +</ul> +<li><a href="#STC_acks">Acknowledgments</a> +</ul> +<li><a href="#Uniprint">uniprint, a flexible unified printer driver</a> +<ul> +<li><a href="#Uni_state">The state of this driver</a> +<li><a href="#Uni_background">Notes on <b><tt>uniprint</tt></b>'s background</a> +<li><a href="#Uni_make_pfile">Godzilla's guide to the creation of Unified Printer Parameter (<b><tt>.upp</tt></b>) files</a> +<li><a href="#Uni_all_parameters">All parameters in brief</a> +<li><a href="#Uni_honors"><b><tt>Uniprint</tt></b>'s Roll of Honor</a> +<li><a href="#Uni_weaving_howto"><b><tt>Uniprint</tt></b> weaving parameters howto</a></li> +<li><a href="#Uni_esc300">Extension to <b><tt>uniprint</tt></b> for the Epson Stylus Color 300</a></li> +</ul> +<li><a href="#SPARCprinter">Sun SPARCprinter</a> +<ul> +<li><a href="#SPARC_install">Installation</a> +<li><a href="#SPARC_problems">Problems</a> +</ul> +<li><a href="#Apple">Apple dot matrix printer</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. You may also be interested in <a href="Make.htm">how to +build Ghostscript</a> and <a href="Install.htm">install it</a>, as well as +the description of the <a href="Drivers.htm">driver interface</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Measurements"></a>Notes on measurements</h2> + +<p> +Several different important kinds of measures appear throughout this +document: inches, centimeters and millimeters, points, and bits per pixel. + +<dl> +<dt><b>Inches</b> +<dd>1 inch equals 2.54 centimeters. The inch measure is sometimes +represented by "<b>in</b>" or a quotation mark (<b>"</b>) to the right +of a measure, like <b>8.5in</b> or <b>8.5""</b>. Dots per inch, +"<b>dpi</b>", are the common measure of printing resolution for dot-matrix, +laser, and ink-jet printers. U.S. "letter" paper is exactly +8.5in×11in, approximately 21.6cm×27.9cm. (See in the usage +documentation all the <a href="Use.htm#Known_paper_sizes">paper sizes +predefined in Ghostscript</a>.) + +<dt><b>Centimeters</b> and <b>millimeters</b> +<dd>ISO standard paper sizes such as A4 and A3 are commonly represented in +the SI units of centimeters and millimeters. Centimeters are abbreviated +"<b><tt>cm</tt></b>", millimeters "<b><tt>mm</tt></b>". ISO A4 paper is +quite close to 21.0×29.7 centimeters (approximately 8.3×11.7 +inches). + +<dt><b>Points</b> +<dd>Points are a measure traditionally used in the printing trade and now +in PostScript, which specifies exactly 72 points per inch (approximately +28.35 per centimeter). The <a href="Use.htm#Known_paper_sizes">paper sizes +known to Ghostscript</a> are defined in the initialization file +<b><tt>gs_statd.ps</tt></b> in terms of points. + +<dt><b>Bits per pixel</b> +<dd>Commonly abbreviated "<b><tt>bpp</tt></b>". +</dl> + +<hr> + +<h2><a name="IJS"></a>IJS - Inkjet and other raster devices</h2> + +<p> +IJS is a relatively new initiative to improve the quality and ease of +use of inkjet printing with Ghostscript. Using IJS, you can add new +drivers or upgrade existing ones without recompiling Ghostscript. +All driver authors are encouraged to adapt their drivers for IJS, and +if there is an IJS driver available for your printer, it should be +your first choice. The non-ijs raster printer drivers are deprecated +and will be removed in future versions of ghostscript. +</p> + +<p> +Even more importantly, the vast majority of inkjet printers are now +supported by one of the two free collections described below: +<a href="#STP">Gimp-Print</a> and <a href="#HP_ijs">HPIJS</a>. Therefore +the ijs interface is your best bet for such printers from a practical +point of view as well. +</p> + +<p>Please see the <a href="http://www.linuxprinting.org/ijs/">IJS web +page</a> for more information about IJS, including a listing of +IJS-compatible drivers. +</p> + +<p> +A typical command line for IJS is: +</p> + +<blockquote> +<b><tt> +gs -DSAFER -sDEVICE=ijs -sIjsServer=hpijs + -sDeviceManufacturer=HEWLETT-PACKARD -sDeviceModel='DESKJET 990' + -DIjsUseOutputFD -sOutputFile=/dev/usb/lp1 -DNOPAUSE -- + examples/tiger.eps +</tt></b> +</blockquote> + + +<p> +Individual IJS command line parameters are as follows: +</p> + +<dl> +<dt><b><tt>-sIjsServer=</tt></b><em>{path}</em> +<dd>Sets the pathname for the IJS server (ie printer driver). Examples +are "hpijs" and "ijsgimpprint". +Ghostscript will spawn a new process for this driver, and communicate +with it using the IJS protocol. The pathname need not be absolute, +as the PATH environment variable is searched, but it's probably a good +idea for robustness and security. Note also that if -dSAFER is not +specified, it's possible for PostScript code to set this parameter, +so it can cause arbitrary code to be executed. See the section on <a +href="Use.htm#Security">Security</a> for more information. +</dl> + +<dl> +<dt><b><tt>-sDeviceManufacturer=</tt></b><em>{name}</em> +<dt><b><tt>-sDeviceModel=</tt></b><em>{name}</em> +<dd>These parameters select the device according to IEEE-1284 standard +device ID strings. In general, consult the documentation for the +driver to find the appropriate settings. Note that, if the value +contains a space, you'll want to quote the value in your shell, as +in the example above. +</dl> + +<dl> +<dt><b><tt>-sIjsParams=</tt></b><em>{params}</em> +<dd>This parameter allows you to set arbitrary IJS parameters on +the IJS driver. The format is a comma-separated list of +<b><tt>key=value</tt></b> pairs. If it is necessary to send a +value containing a comma or backslash, it can be escaped with +a backslash. Thus, <b><tt>'-sIjsParams=Foo=bar,Baz=a\,b'</tt></b> sets +the parameter Foo to "bar", and Baz to "a,b". +</dl> + +<dl> +<dt><b><tt>-dIjsUseOutputFD</tt></b> +<dd>This flag indicates that Ghostscript should open the output file +and pass a file descriptor to the server. If not set, Ghostscript +simply passes the filename set in OutputFile to the server. In most +cases, this flag won't matter, but if you have a driver which works +only with OutputFD (such as hpijs 1.0.2), or if you're using the +-sOutputFile="|cmd" syntax, you'll need to set it. +</dl> + +<dl> +<dt><b><tt>-dBitsPerSample=</tt></b><em>N</em> +<dd>This parameter controls the number of bits per sample. The +default value of 8 should be appropriate for most work. For monochrome +images, use -dBitsPerSample=1. +</dl> + +<p>Generic Ghostscript options that are particularly relevant for IJS +are summarized below: +</p> + +<dl> +<dt><b><tt>-r</tt></b><em>number</em> +<br><b><tt>-r</tt></b><em>number1</em><b><tt>x</tt></b><em>number2</em> +<dd>Sets the resolution, in dpi. If the resolution is not specified, +Ghostscript queries the IJS server to determine the preferred resolution. +When the resolution is specified, it overrides the value (if any) +preferred by the IJS server. +</dl> + +<dl> +<dt><b><tt>-dDuplex</tt></b> +<dt><b><tt>-dTumble</tt></b> +<dd>These flags enable duplex (two-sided) printing. Tumble controls +the orientation. When Tumble is false, the pages +are oriented suitably at the left or right. When Tumble is true, +the pages are oriented suitably for binding at the top or +bottom. +</dl> + +<dl> +<dt><b><tt>-sProcessColorModel=</tt></b><em>{name}</em> +<dd>Use this flag to select the process color model. Suitable values +include DeviceGray, DeviceRGB, and DeviceCMYK. +</dl> + +<h3>Building IJS</h3> + +<p> IJS is included by default on Unix gcc builds, and also in +autoconf'ed builds. Others may need some makefile tweaking. First, +make sure the IJS device is selected: + +<blockquote> +DEVICE_DEVS2=$(DD)ijs.dev +</blockquote> + +<p> Next, make sure that the path and execution type are set in +the toplevel makefile. The values for Unix are as follows: + +<blockquote> +IJSSRCDIR=ijs +IJSEXECTYPE=unix +</blockquote> + +<p> At present, "unix" and "win" are the only supported values for +IJSEXECTYPE. If neither sounds appropriate for your system, it's +possible that more porting work is needed. + +<p> Last, make sure that ijs.mak is included in the toplevel makefile. +It should be present right after the include of icclib.mak. + +<p> IJS is not inherently platform-specific. We're very much interested +in taking patches from people who have ported it to non-mainstream +platforms. And once it's built, you won't have to recompile Ghostscript +to support new drivers! + +<hr> + +<h2><a name="STP"></a>Gimp-Print drivers</h2> + +<p> +The Gimp-Print driver collection supports a wide variety of inkjet +printers and supports Ghostscript's 'ijs' interface. Just set the +IjsServer parameter to 'ijsgimpprint'. +Please see <a href="http://gimp-print.sourceforge.net/" +class="offsite">http://gimp-print.sourceforge.net/</a> for more +information including supported printers and appropriate options. + +<p> +GNU Ghostscript also includes a special client device for the Gimp-Print +family of drivers. The device itself is called <tt>stp</tt> for historical +reasons. This device will not be supported in future versions of Ghostscript +or Gimp-print. + +<p> +You will need to have the Gimp-Print library installed to use this +device. The library distribution also includes extensive documentation +on supported printers and the options available with each. Thanks to the +Gimp-Print team for all their hard work integrating their excellent +driver suite. + +<p> +Please note that the stp driver interface is only supported through +gimp-print version 4.2. If you have 4.2.1 or later, please use the IJS +interface (described above) instead. + +<h2><a name="HP_ijs"></a>HP Inkjet official drivers</h2> + +<p> +HP provides official drivers for many of their printer models. +In order to use these drivers, you will need the HP Inkjet Server as +well as Ghostscript, available from <a +href="http://hpinkjet.sourceforge.net">http://hpinkjet.sourceforge.net</a>. + +<p> +This version of ghostscript also contains a special client driver 'hpijs' +that predates the current ijs interface. It will not be supported in future +versions of Ghostscript. + +<p> +Thanks to the folks at HP, +especially David Suffield for making these drivers available and working to +integrate it with Ghostscript. + +<hr> + +<h2><a name="Win"></a>MS Windows printers</h2> + +<p> +This section was written by Russell Lang, the author of Ghostscript's +MS Windows-specific printer driver, and updated by +<a href="mailto:Pierre.Arnaud@opac.ch">Pierre Arnaud</a>, +the current maintainer. +</p> + +<p> +The <b><tt>mswinpr2</tt></b> device uses MS Windows printer drivers, and +thus should work with any printer with device-independent bitmap (DIB) +raster capabilities. The printer resolution cannot be selected directly +using PostScript commands from Ghostscript: use the printer setup in the +Control Panel instead. It is however possible to specify a maximum resolution +for the printed document (see below). +</p> + +<p> +If no Windows printer name is specified in <b><tt>-sOutputFile</tt></b>, +Ghostscript prompts for a Windows printer using the standard Print Setup +dialog box. You must set the orientation to Portrait and the page size to +that expected by Ghostscript; otherwise the image will be clipped. +Ghostscript sets the physical device size to that of the Windows printer +driver, but it does not update the PostScript clipping path. +</p> + +<p> +If a Windows printer name is specified in <b><tt>-sOutputFile</tt></b> using +the format <tt>"\\spool\printer_name"</tt>, for instance +</p> + +<blockquote><b><tt> +gs ... -sOutputFile="\\spool\Apple LaserWriter II NT" +</tt></b></blockquote> + +<p> +then Ghostscript attempts to open the Windows printer without prompting +(except, of course, if the printer is connected to <b><tt>FILE:</tt></b>). +Ghostscript attempts to set the Windows printer page size and orientation +to match that expected by Ghostscript, but doesn't always succeed. It uses +this algorithm: +</p> + +<ol> +<li>If the requested page size matches one of the Windows standard page +sizes +/- 2mm, request that standard size.</li> + +<li>Otherwise if the requested page size matches one of the Windows +standard page sizes in landscape mode, ask for that standard size in +landscape.</li> + +<li>Otherwise ask for the page size by specifying only its dimensions.</li> + +<li>Merge the requests above with the defaults. If the printer driver +ignores the requested paper size, no error is generated: it will print on +the wrong paper size.</li> + +<li>Open the Windows printer with the merged orientation and size.</li> +</ol> + +<p> +The Ghostscript physical device size is updated to match the Windows +printer physical device. +</p> + +<h3><a name="Win_properties"></a>Supported command-line parameters</h3> + +<p> +The <b><tt>mswinpr2</tt></b> device supports a limited number of command-line +parameters (e.g. it does not support setting the printer resolution). The +recognized parameters are the following: +</p> + +<blockquote> +<dl> +<dt><b><tt>-sDEVICE=mswinpr2</tt></b></dt> +<dd>Selects the MS Windows printer device. If Ghostscript was not +compiled with this device as the default output device, you have to specify +it on the command line.</dd> + +<dt><b><tt>-dNoCancel</tt></b></dt> +<dd>Hides the progress dialog, which shows the percent of the document page +already processed and also provides a <em>cancel</em> button. This option +is useful if GS is intended to print pages in the background, without any +user intervention.</dd> + +<dt><b><tt>-sOutputFile=</tt></b><b>"\\spool\<em>printer_name</em>"</b></dt> +<dd>Specifies which printer should be used. The <em>printer_name</em> should be +typed exactly as it appears in the Printers control panel, including spaces.</dd> + +</dl> +</blockquote> + +<h3><a name="Win_options"></a>Supported options (device properties)</h3> + +<p> +Several extra options exist which cannot be set through the command-line, +but only by executing the appropriate PostScript setup code. These options +can be set through the inclusion of a setup file on the command-line: +</p> + +<blockquote><b><tt> +gs ... setup.ps ... +</tt></b></blockquote> + +<p> +The <tt>setup.ps</tt> file is responsible for the device selection, therefore +you should not specify the <b><tt>-sDEVICE=mswinpr2</tt></b> option on the +command-line if you are using such a setup file. Here is an example of such +a setup file: +</p> + +<blockquote><pre> +mark + /NoCancel true % don't show the cancel dialog + /BitsPerPixel 4 % force 4 bits/pixel + /UserSettings + << + /DocumentName (Ghostscript document) % name for the Windows spooler + /MaxResolution 360 % maximum document resolution + >> + (mswinpr2) finddevice % select the Windows device driver + putdeviceprops +setdevice +</pre></blockquote> + +<p> +This example disables the progress dialog (same as the <tt><b>-dNoCancel</b></tt> +option), forces a 4 bits/pixel output resolution and specifies additional user +settings, such as the document name (which will be displayed by the Windows +spooler for the queued document) and the maximum resolution (here 360 dpi). +It then finds and selects an instance of the MS Windows device printer +and activates it. This will show the standard printer dialog, since no +<tt><b>/OutputFile</b></tt> property was specified. +</p> + +<p> +The following options are available: +</p> + +<blockquote> +<dl> +<dt><b><tt>/NoCancel <em>boolean</em></tt></b></dt> +<dd>Disables (hides) the progress dialog when set to <em><tt>true</tt></em> or +show the progress dialog if not set or set to <em><tt>false</tt></em>.</dd> + +<dt><b><tt>/OutputFile <em>string</em></tt></b></dt> +<dd>Specifies which printer should be used. The string should be of the form +<tt><b>\\spool\<em>printer_name</em></b></tt>, where the <em>printer_name</em> should be +typed exactly as it appears in the Printers control panel, including spaces.</dd> + +<dt><b><tt>/QueryUser <em>integer</em></tt></b></dt> +<dd>Shows the standard printer dialog (<tt><b>1</b></tt> or any other value), +shows the <em>printer setup dialog</em> (<tt><b>2</b></tt>) or selects the +<em>default Windows printer</em> without any user interaction (<tt><b>3</b></tt>).</dd> + +<dt><b><tt>/BitsPerPixel <em>integer</em></tt></b></dt> +<dd>Sets the device depth to the specified bits per pixel. Currently supported +values are <tt><b>1</b></tt> (monochrome), <tt><b>4</b></tt> (CMYK with screening +handled by Ghostscript) and <tt><b>24</b></tt> (True Color, dithering handled by +the Windows printer driver; this option can produce huge print jobs).</dd> + +<dt><b><tt>/UserSettings <em>dict</em></tt></b></dt> +<dd>Sets additional options, defined in a dictionary. The following properties can +be set: + +<dl> +<dt><b><tt>/DocumentName <em>string</em></tt></b></dt> +<dd>Defines the user friendly document name which will be displayed by the +Windows spooler.</dd> + +<dt><b><tt>/DocumentRange <em>[n1 n2]</em></tt></b></dt> +<dd>Defines the range of pages contained in the document. This information can +be used by the printer dialog, in conjunction with the following property.</dd> + +<dt><b><tt>/SelectedRange <em>[n1 n2]</em></tt></b></dt> +<dd>Defines the selected range of pages. This information will be displayed in +the printer dialog and will be updated after the user interaction. A PostScript +program could check these values and print only the selected page range.</dd> + +<dt><b><tt>/MaxResolution <em>dpi</em></tt></b></dt> +<dd>Specifies the maximum tolerated output resolution. If the selected printer has +a higher resolution than <tt><b>dpi</b></tt>, then Ghostscript will render the +document with a submultiple of the printer resolution. For example, if +<tt><b>MaxResolution</b></tt> is set to 360 and the output printer supports +up to 1200 dpi, then Ghostscript renders the document with an internal +resolution of 1200/4=300 dpi. This can be very useful to reduce the memory +requirements when printing in True Color on some high resolution ink-jet color +printers.</dd> + +</dl></dd> + +</dl> +</blockquote> + +<p> +These properties can be queried through the <tt><b>currentpagedevice</b></tt> +operator. The following PostScript code snippet shows how to do it for some +of the properties: +</p> + +<blockquote><pre> +currentpagedevice /BitsPerPixel get == % displays the selected depth + +currentpagedevice /UserSettings get % get the additional options.. +/us exch def % ..and assign them to a variable + +us /DocumentName get == % displays the document name +us /SelectedRange get == % displays the selected page range + +% other misc. informations (don't rely on them) + +us /Color get == % 1 => monochrome output, 2 => color output +us /PrintCopies get == % displays the number of copies requested +</pre></blockquote> + +<p> +There are a few undocumented informations stored in the <tt><b>UserSettings</b></tt> +dictionary. You should not rely on them. Their use is still experimental and +they could be removed in a future version. +</p> + +<h3><a name="Win_duplex"></a>Duplex printing</h3> + +<p> +If the Windows printer supports the duplex printing feature, then it will +also be available through the <b><tt>mswinpr2</tt></b> device. You can query +for this support through the <b><tt>/Duplex</tt></b> propery of the +<b><tt>currentpagedevice</tt></b>. If it returns <b><tt>null</tt></b>, then +the feature is not supported by the selected printer. Otherwise, <b><tt>true</tt></b> +means that the printer is currently set up to print on both faces of the paper +and <b><tt>false</tt></b> that it is not, but that it can. +</p> + +<p> +The following example shows how to print on both faces of the paper (using +the long side of the paper as the reference): +</p> + +<blockquote><pre> +<< /Duplex true /Tumble false >> setpagedevice +</pre></blockquote> + +<p> +</p> + + +<hr> + +<h2><a name="File_formats"></a>File formats</h2> + +<h3><a name="JFIF"></a>JPEG file format (JFIF)</h3> + +<p> +Ghostscript includes output drivers that can produce <a +href="http://www.ijg.org/">Independent JPEG Group</a> JFIF (JPEG File +Interchange Format) files from PostScript images. <b>Please note</b> that +JPEG is a compression method specifically intended for continuous-tone +images such as photographs, not for graphics, and it is therefore quite +unsuitable for the vast majority of page images produced with PostScript, +which should be saved in a form better for graphics, such as +<a href="http://www.libpng.org/pub/png/">Portable Network Graphics</a> +(PNG) format. If you get crummy-looking JPEG files, don't blame +Ghostscript; instead consult a reference about uses and abuses of JPEG, +such as the JPEG FAQ + +<blockquote> +<a href="http://www.faqs.org/faqs/jpeg-faq/">http://www.faqs.org/faqs/jpeg-faq/</a> +</blockquote> + +<p> +You can use the JPEG output drivers -- <b><tt>jpeg</tt></b> to produce +color JPEG files and <b><tt>jpeggray</tt></b> for grayscale JPEGs -- the +same as other file-format drivers: by specifying the device name and an +output file name, for example + +<blockquote><b><tt> +gs -sDEVICE=jpeg -sOutputFile=foo.jpg foo.ps +</tt></b></blockquote> + +<p> +You can also use the <a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b> +switch</a> to specify the imaging resolution and thus the output file's +size in pixels. The default resolution is normally 72×72dpi. + +<p> +The JPEG devices support several special parameters to control the JPEG +"quality setting" (DCT quantization level). + +<blockquote> +<dl> +<dt><b><tt>-dJPEGQ=</tt></b><b><em>N</em></b> (integer from 0 to 100, default 75) +<dd>Set the quality level <b><em>N</em></b> according to the widely used +IJG quality scale, which balances the extent of compression against the +fidelity of the image when reconstituted. Lower values drop more +information from the image to achieve higher compression, and therefore +have lower quality when reconstituted. + +<dt><b><tt>-dQFactor=</tt></b><b><em>M</em></b> (float from 0.0 to 1.0) +<dd>Adobe's QFactor quality scale, which you may use in place of +<b><tt>JPEGQ</tt></b> above. The QFactor scale is used by PostScript's +DCTEncode filter but is nearly unheard-of elsewhere. +</dl> +</blockquote> + +<p> +At this writing the default JPEG quality level of 75 is equivalent to +<b><tt>-dQFactor=0.5</tt></b>, but the JPEG default might change in the +future. The JPEG drivers could be extended to support additional JPEG +compression options, such as the other DCTEncode filter parameters, but so +far they haven't been. + +<h3><a name="TIFF"></a>TIFF file formats</h3> + +<p> +There are two unrelated sets of TIFF drivers. There are two color TIFF +drivers that produce uncompressed output: + +<blockquote> +<dl> +<dt><b><tt>tiff12nc</tt></b> +<dd>Produces 12-bit RGB output (4 bits per component). +<dt><b><tt>tiff24nc</tt></b> +<dd>Produces 24-bit RGB output (8 bits per component). +</dl> +</blockquote> + +<p> +The remaining TIFF drivers all produce black-and-white output with different +compression modes: + +<blockquote> +<dl> +<dt><b><tt>tiffcrle</tt></b> +<dd>G3 fax encoding with no EOLs +<dt><b><tt>tiffg3</tt></b> +<dd>G3 fax encoding with EOLs +<dt><b><tt>tiffg32d</tt></b> +<dd>2-D G3 fax encoding +<dt><b><tt>tiffg4</tt></b> +<dd>G4 fax encoding +<dt><b><tt>tifflzw</tt></b> +<dd>LZW-compatible (tag = 5) compression +<dt><b><tt>tiffpack</tt></b> +<dd>PackBits (tag = 32773) compression +</dl> +</blockquote> + +<p> +The black-and-white TIFF drivers support creation of files that are +comprised of more than a single strip. Multi-strip files reduce the memory +requirement on the reader, since readers need only store and process one +strip at a time. These drivers provide two parameters beyond the standard +set: + +<blockquote> +<dl> +<dt><b><tt>-dMaxStripSize=</tt><em>N</em></b> (non-negative integer; default = 0) +<dd>Set the maximum (uncompressed) size of a strip. + +<dt><b><tt>-dAdjustWidth=</tt><em>true|false</em></b> (Boolean; default = +true) +<dd>If true, then if the requested page width is close to either A4 (1728 +columns) or B4 (2048 columns), set the page width to A4 or B4 respectively. +</dl></blockquote> + +<p> +The TIFF 6.0 specification, Section 7, page 27, recommends that the size of +each strip be about 8 Kbytes. As an example, to generate the 'tiger' in +tiffg4 format that has the recommended strip size, use: + +<blockquote><pre> +gs -sDEVICE=tiffg4 -sOutputFile=tiger.tif -dMaxStripSize=8192 examples/tiger.ps +</pre></blockquote> + +<p> +If the value of the <b><tt>MaxStripSize</tt></b> parameter is smaller than a +single image row, then no error will be generated, and the TIFF file will be +generated correctly using one row per strip. Note that smaller strip sizes +increase the size of the file by increasing the size of the StripOffsets and +StripByteCounts tables, and by reducing the effectiveness of the compression +which must start over for each strip. + +<p> +If the value of MaxStripSize is 0 (the default), then the entire image will +be a single strip. + + +<hr> + +<h2><a name="Display_devices"></a>Display Devices</h2> + +<p> +Ghostscript is often used for screen display of postscript and pdf documents. +In many cases, a client or 'viewer' application calls the ghostscript engine +to do the rasterization and handles the display of the resulting image itself, +but it is also possible to invoke ghostscript directly and select an output +device which directly handles displaying the image on screen. + +<p> +This section describes the various display-oriented devices that are available +in ghostscript. + +<h3><a name="x11_devices"></a>X Window System</h3> + +<p> +Perhaps the most common use of of a display device is with the X Window System +on unix-like systems. It is the default device on the command line client on +such systems, and is used more creatively by the gv client application. + +<p> +The available devices are: + +<dl> +<dt><b>x11</b> +<dd>This is the default device, handling display on X11R6. + +<dt><b>x11alpha</b> +<dd>This is the x11 device, but with antialiasing. It is equivalent to +invoking the x11 device with the options <tt>-dGraphicsAlphaBits=4 +-dTextAlphaBits=4 -dMaxBitmap=50000000</tt>. + +<dt><b>x11cmyk</b> +<dd>This device rasterizes the image in the CMKY color space, then flattens +it to RGB for display. It's intended for testing only. + +<dt><b>x11mono</b> +<dd>This is a strict black-and-white device for 1-bit monochrome displays. + +<dt><b>x11gray2</b> +<dd>This is a device for 2 bpp (4-level) monochrome displays. + +<dt><b>x11gray4</b> +<dd>This is a device for 4 bpp (16-level) monochrome displays. +</dl> + + +<hr> + +<h2><a name="HP_color_inkjet"></a>H-P color inkjet printers</h2> + +<p> +This section, written by George Cameron, deals with the DeskJet 500C, +DeskJet 550C, PaintJet, PaintJet XL, PaintJet XL300, the DEC LJ250 +operating in PaintJet-compatible mode. + +<h3><a name="HP_gdevcdj"></a>Drivers contained in <b><tt>gdevcdj.c</tt></b></h3> + +<p> +The source module <b><tt>gdevcdj.c</tt></b> contains six generic drivers: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>cdj500</tt></b> + <td> + <td>HP DeskJet 500C and 540C +<tr valign=top> <td><b><tt>cdj550</tt></b> + <td> + <td>HP DeskJet 550C, 560C, 660C, 660Cse +<tr valign=top> <td><b><tt>pjxl300</tt></b> + <td> + <td>HP PaintJet XL300, DeskJet 1200C, and CopyJet +<tr valign=top> <td><b><tt>pjtest</tt></b> + <td> + <td>HP PaintJet +<tr valign=top> <td><b><tt>pjxltest</tt></b> + <td> + <td>HP PaintJet XL +<tr valign=top> <td><b><tt>declj250</tt></b> + <td> + <td>DEC LJ250 +</table></blockquote> + +<p> +All these drivers have 8-bit (monochrome), 16-bit and 24-bit (colour) and +for the DJ 550C, 32-bit (colour, CMYK mode) options in addition to standard +colour and mono drivers. It is also possible to set various +printer-specific parameters from the command line, for example + +<blockquote><b><tt> +gs -sDEVICE=cDeskJet -dBitsPerPixel=16 -dDepletion=1 -dShingling=2 tiger.ps +</tt></b></blockquote> + +<p> +<b>Note:</b> the old names <b><tt>cDeskJet</tt></b>, +<b><tt>cdjcolor</tt></b> and <b><tt>cdjmono</tt></b> drivers have been +retained; however, their functionality duplicates that available using the +drivers above (and <b><tt>cDeskJet</tt></b> is identical to +<b><tt>cdj500</tt></b>). That is, we can use + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>gs -sDEVICE=cdj500 -dBitsPerPixel=24</tt></b> + <td> + <td>for <b><tt>cdjcolor</tt></b>, and +<tr valign=top> <td><b><tt>gs -sDEVICE=cdj500 -dBitsPerPixel=1</tt></b> + <td> + <td>for <b><tt>cdjmono</tt></b> +</table></blockquote> + +<h3><a name="HP_paper_size"></a>Default paper size</h3> + +<p> +If the preprocessor symbol <b><tt>A4</tt></b> is defined, the default paper +size is ISO A4; otherwise it is U.S. letter size (see about +<a href="Use.htm#Known_paper_sizes">paper sizes</a> in the usage +documentation). You can <a href="Use.htm#Paper_size">specify other paper +sizes</a> on the command line, including A3 for the PaintJet XL and +PaintJet XL300, as also explained in the usage documentation. + +<h3><a name="HP_limits"></a>DeskJet physical limits</h3> + +<p> +The DeskJet's maximum printing width is 2400 dots, or 8 inches +(20.32cm). The printer manuals say that the maximum recommended printing +height on the page is 10.3 inches (26.16cm), but since this is obviously +not true for A4 paper, and I have been unable to detect any problems in +printing longer page lengths, this would seem to be a rather artificial +restriction. + +<p> +All DeskJets have 0.5 inches (1.27cm) of unprintable bottom margin, due to the mechanical +arrangement used to grab the paper. Side margins are approximately 0.25 inches (0.64cm) +for U.S. letter paper, and 0.15 inches (0.38cm) for A4. + +<h4><a name="HP_command_line"></a>Printer properties (command-line parameters)</h4> + +<p> +Several printer "properties" have been implemented for these printers. +Those available so far are all integer quantities, and thus may be +specified, for instance, like + +<blockquote> +<b><tt>gs -dBitsPerPixel=32 -dShingling=1</tt></b> ... +</blockquote> + +<p> +which sets the <b><tt>BitsPerPixel</tt></b> parameter to 32 and the +<b><tt>Shingling</tt></b> parameter to 1. + +<h4><a name="HP_bpp"></a>Bits per pixel</h4> + +<p> +If the preprocessor symbol <b><tt>BITSPERPIXEL</tt></b> is defined as an +integer (see below for the range of allowable values), that number defines +the default bits per pixel (bit depth) for the generic drivers. If the +symbol is undefined, the default is 24 bits per pixel. It is, of course, +still possible to specify the value from the command line as described +below. Note also that the <b><tt>cDeskJet</tt></b>, +<b><tt>cdjcolor</tt></b> and <b><tt>cdjmono</tt></b> drivers are unaffected +by setting this symbol, as their default settings are predefined to be 1, 3 +and 24 respectively. + +<p> +All of the drivers in <b><tt>gdevcdj.c</tt></b> accept a command line +option to set the <b><tt>BitsPerPixel</tt></b> property. This gives +considerable flexibility in choosing various tradeoffs among speed, +quality, colour, etc. The valid numbers are: + +<blockquote><dl compact> +<dt><b>1</b> +<dd>A standard Ghostscript monochrome driver, using black ink (by +installing the separate mono cartridge in the case of the DeskJet 500C, or +automatically for the other printers). + +<dt><b>3</b> +<dd>A standard Ghostscript colour driver, using internal dithering. This +is fast to compute and to print, but the clustered dithering can lose some +detail and colour fidelity. + +<dt><b>8</b> +<dd>An "error-diffusion" monochrome driver which uses Floyd-Steinberg +dithering to print greyscale images. The patterns are much more randomised +than with the normal clustered dithering, but the data files can be much +larger and somewhat slower to print. + +<dt><b>16</b> +<dd>A "cheaper" version of the 24-bit driver, which generates +Floyd-Steinberg colour dithered output using the minimum memory (this may +be helpful when using Ghostscript has not been compiled using a 16-bit +build environment). The quality can be almost as good as the 24-bit +version. + +<dt><b>24</b> +<dd>A high-quality colour driver using Floyd-Steinberg dithering for +maximum detail and colour range. However, it is very memory-intensive, and +thus can be slow to compute. It tends to produce rather larger raw data +files, so they can also take longer to print. + +<dt><b>32</b> +<dd>Only for the DeskJet 550C, which uses the black cartridge and the +colour cartridge simultaneously (that is, CMYK printing). This printer can +both be faster and give higher quality than the DeskJet 500C, because of +the true black ink. (Note that the 24-bit mode also permits CMYK printing +on this printer, and uses less memory. Any differences between 24-bit and +32-bit should be small.) +</dl></blockquote> + +<h4><a name="HP_DeskJet_properties"></a>DeskJet properties</h4> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Name + <td> + <th align=left>Type + <td> + <th align=left> +<tr> <td colspan=5><hr> +<tr valign=top> <td><b><tt>BlackCorrect</tt></b> + <td> + <td><b><tt>int</tt></b> + <td> + <td>Colour correction to give better blacks when using the DJ500C in colour mode. For example, the default of 4 reduces the cyan component to 4/5. Range accepted: 0 - 9 (0 = none). +<tr valign=top> <td><b><tt>Shingling</tt></b> + <td> + <td><b><tt>int</tt></b> + <td> + <td>Interlaced, multi-pass printing: 0 = none, 1 = 50%, 2 = 25%, 2 is best and slowest. +<tr valign=top> <td><b><tt>Depletion</tt></b> + <td> + <td><b><tt>int</tt></b> + <td> + <td>"Intelligent" dot-removal: 0 = none, 1 = 25%, 2 = 50%, 1 best for graphics? Use 0 for transparencies. +</table></blockquote> + +<h4><a name="HP_PaintJet_properties"></a>PaintJet XL300 / PaintJet XL properties</h4> + +<blockquote> +<table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Name + <td> + <th align=left>Type + <td> + <th align=left> +<tr> <td colspan=5><hr> +<tr valign=top> <td><b><tt>PrintQuality</tt></b> + <td> + <td><b><tt>int</tt></b> + <td> + <td>Mechanical print quality: -1 = fast, 0 = normal, 1 = presentation. Fast mode reduces ink usage and uses single-pass operation for some media types. Presentation uses more ink and the maximum number of passes, giving slowest printing for highest quality +<tr valign=top> <td><b><tt>RenderType</tt></b> + <td> + <td><b><tt>int</tt></b> + <td> + <td><dl compact> + <dt><b>0</b><dd>driver does dithering + <dt><b>1</b><dd>snap to primaries + <dt><b>2</b><dd>snap black to white, others to black + <dt><b>3</b><dd>ordered dither + <dt><b>4</b><dd>error diffusion + <dt><b>5</b><dd>monochrome ordered dither + <dt><b>6</b><dd>monochrome error diffusion + <dt><b>7</b><dd>cluster ordered dither + <dt><b>8</b><dd>monochrome cluster ordered dither + <dt><b>9</b><dd>user-defined dither (not supported) + <dt><b>10</b><dd>monochrome user-defined dither ns. + </dl> +</table> + +<p> +The PaintJet (non-XL) has no additional properties. + +</blockquote> + +<h3><a name="HP_gamma"></a>Gamma correction</h3> + +<p> +One consequence of using Floyd-Steinberg dithering rather than Ghostscript's +default clustered ordered dither is that it is much more obvious that the +ink dots are rather larger on the page than their nominal 1/180-inch or 1/300-inch +size (clustering the dots tends to minimise this effect). Thus it is often +the case that the printed result is rather too dark. A simple empirical +correction for this may be achieved by preceding the actual PostScript +file to be printed by a short file which effectively sets the gamma for +the device, such as + +<blockquote><b><tt> +gs ... gamma.ps colorpic.ps -c quit +</tt></b></blockquote> + +<p> +where <b><tt>gamma.ps</tt></b> is + +<blockquote> +<pre>%! +/.fixtransfer { + currentcolortransfer 4 { + mark exch + dup type dup /arraytype eq exch /packedarraytype eq or + 1 index xcheck and { /exec load } if + 0.333 /exp load + ] cvx 4 1 roll + } repeat setcolortransfer +} bind odef +.fixtransfer +/setpagedevice { setpagedevice .fixtransfer } bind odef</pre> +</blockquote> + +<p> +This does the gamma correction <b><em>after</em></b> whatever correction +the device might be doing already. To do the correction +<b><em>before</em></b> the current correction, + +<blockquote> +<pre>%! +/.fixtransfer { + currentcolortransfer 4 { + mark 0.333 /exp load 4 -1 roll + dup type dup /arraytype eq exch /packedarraytype eq or + 1 index xcheck and { /exec load } if + ] cvx 4 1 roll + } repeat setcolortransfer +} bind odef +.fixtransfer +/setpagedevice { setpagedevice .fixtransfer } bind odef</pre> +</blockquote> + +<p> +This example sets the gamma for R, G, and B to 3, which seems to work +reasonably well in practice. + +<h3><a name="HP_resolution_enhance"></a>HP's resolution-enhanced mode for Inkjet printers</h3> + +<p> +This feature is available on HP's more recent inkjet printers, including +the DeskJet 520 (mono), 540 (mono or colour) and 560C (mono and colour). +The colour and monochrome drivers for the HP DeskJet 550c are (probably) +the best you will get for use with Ghostscript, for the following reasons. + +<p> +These printers do not offer true 600×300dpi resolution. Those that +print in colour are strictly 300×300dpi in colour mode, while in mono +mode there is a pseudo 600×300dpi mode with the restriction that you +can't print two adjacent dots. In effect what you have is 600dpi dot +positioning, but on average you don't get more dots per line. This +provides the possibility, for instance, to have sharper character outlines, +because you can place dots on the edges nearer to their ideal positions. +This is why it is worth doing. + +<p> +However, HP will not support user-level programming of this +resolution-enhanced mode, one reason being that (I understand) all the dot +spacing has to be done by the driver, and if you get it wrong, you can +actually damage the print head. + +<p> +To summarise, you may lose a smidgin of (potential) text clarity using the +550c drivers (<b><tt>cdj550</tt></b>, <b><tt>cdjcolor</tt></b>, +<b><tt>cdjmono</tt></b> etc.), but other than that, they are the ones for +the job. + +<h3><a name="HP_tips"></a>General tips</h3> + +<p> +For all the printers above, the choice of paper is critically important to +the final results. The printer manuals suggest type of paper, but in +general, smoother, less fibrous types give better results. In particular, +the special ink-jet paper can make a big difference: colours are brighter, +but most importantly, there is almost no colour bleed, even with adjacent +areas of very heavy inking. Similarly the special coated transparencies +also work well (and ordinary transparencies do not work at all!). + +<p> +The Unix procedure <a href="Unix-lpr.htm"><b><tt>unix-lpr.sh</tt></b></a> +provides one example of setting up a multi-option colour PostScript +<b><tt>lpr</tt></b> queue on Unix systems, and includes the ability to +choose a range of different colour options and printer accounting and error +logging. + +<p> +<b>Caveat emptor!</b> It is not always easy for me to test all of these +drivers, as the only colour printer I have here is the DeskJet 500C. I rely +on others to test drivers for the additional machines and report their +findings back to me. + +<hr> + +<h2><a name="BJC_8200"></a>Canon BJC-8200 printer</h2> + +<p> +This section was contributed by the author of the <b><tt>uniprint</tt></b> +configuration files for the Canon BJC-8200, Stephan C. Buchert <<a +href="mailto:scb@stelab.nagoya-u.ac.jp">scb@stelab.nagoya-u.ac.jp</a>>. +These files also handle the Japanese Canon F850 printer. + +<p> +Warning: Usage of this program is neither supported nor endorsed by +the Canon corporation. Please see the Ghostscript <a +href="Public.htm">license</a> regarding warranty. + +<h3>Introduction</h3> + +<p> +The Canon Bubble Jet printer BJC-8200 is designed for printing digital +photos and halftone images. Software drivers for Windows 95-2000 and Mac are +usually included and can be downloaded from the Canon web sites like +<a href="http://consumer.usa.canon.com/bjc/bjc8200/">http://consumer.usa.canon.com/bjc/bjc8200/</a> +for the US market. If these drivers cannot be used for some reason, then at +present Ghostscript is probably the alternative giving the best results. + +<p> +The BJC-8200 has features not found among the specs of earlier bubble jet +models (except the even more advanced BJC-8500) and is advertised to offer: + +<ol> + +<li>microfine droplet technology; + +<li>support for printing on a new type of paper, Photo Paper Pro; + +<li>a printhead capable of printing up to 1200 DpI; + +<li>individual ink tanks for 6 colors; + +<li>an internal status monitor reporting low ink back to a driver; + +<li>an optional color scanner cartridge for up to 600 DpI resolution. + +</ol> + +<p> +Access to features 5 and 6 requires use of the original Canon drivers for +the foreseeable future. This README is about getting the printer features +1-3 working with Ghostscript. No (re)compilation of Ghostscript is normally +required. + +<p> +Ghostscript comes with a relatively highly configurable driver, called +<a href="#Uniprint">uniprint</a>, for printers which understand raster +images in various propriety formats. Most options for this driver are +usually organized into files having the suffix ".upp." Ghostscript +versions >= 5.10 (or even earlier) include such uniprint control files +for the Canon BJC-610. They work also well for some other Canon Bubble +Jet models, for example for my BJC-35vII. But when using them for a +BJC-8200 the result is unsatisfactory. + +<h3>The uniprint control files for the BJC-8200</h3> + +<p> +After some experimenting with the options for uniprint I have obtained quite +satisfactory prints with my printer(*). This distribution includes six new +uniprint control files: + +<ul> +<li>bj8pp12f.upp +<li>bj8hg12f.upp +<li>bj8gc12f.upp +<li>bj8oh06n.upp +<li>bj8ts06n.upp +<li>bj8pa06n.upp +</ul> + +<p> +They are included in Ghostscript >=6.21. For older versions you can put +them anywhere in the Ghostscript search path (type "gs -h" to see the +path), but should perhaps add the files to the directory with the +other *.upp files. This is "/usr/share/ghostscript/gs6.01/lib" in my +RedHat Linux 6.1 box with Aladdin Ghostscript 6.01. + +<p> +Here is an explanation of my file name convention: the prefix "bj8" should +perhaps be used for the Canon BJC-8200 and compatible (like the Japanese +F850 and perhaps the non-Japanese BJC-8500) models. The next two letters +indicate the print media: + +<ul> +<li>pp "Photo Paper Pro" +<li>hg "High Gloss Photo Film" +<li>gc "Glossy Photo Cards" +<li>oh "OHP transparencies" +<li>ts "T-shirt transfer" +<li>pa "Plain Paper" +</ul> + +<p> +The numbers at positions 6 and 7 indicate the resolution + +<ul> +<li>12 1200x1200 DpIxDpI +<li>06 600x600 DpIxDpI +</ul> + +<p> +The last letter stands for a quality factor that effects also the print +speed (presumably related to the number of passes that the printhead makes). + +<ul> +<li>f highest quality +<li>n normal quality +</ul> + +<p> +Printing a postcard size (~10x15 cm^2) image at 1200x1200 DpI^2 takes about +3 minutes. The output of Ghostscript is then typically 4-5 MByte. The +bootleneck seems to be the transfer of the raster image in run-length +encoded Canon format to the printer (via the parallel port on my system) or +the printer's speed, not Ghostscript or the uniprint renderer. + +<h3>Further Optimization for the Canon BJC-8200</h3> + +So far I have only experimented with the printer initialization code at the +beginning of each page (-dupBeginPageCommand) and the resolution (-r). Other +options, particularly the transfer arrays (-dupBlackTransfer, +-dupCyanTransfer, -dupMagentaTransfer, -dupYellowTransfer) and the margins +(-dupMargins) were simply copied from the files for the BJC-610, but they +may need to be changed for optimized performance. + +<p> +Here is information useful for changing or adding uniprint control files for +the BJC-8200: + +<p> +In "-dupBeginPageCommand=..." use the line + +<blockquote> + 1b28 64 0400 04b0 04b0 +</blockquote> + +<p> +for 1200x1200 resolution, and + +<blockquote> + 1b28 64 0400 0258 0258 +</blockquote> + +<p> +for 600x600. The "-r" option in the control file must of course match this +line. Other resolutions might work as well, but I didn't try. + +<p> +Crucial are the numbers in the lines like + +<blockquote><pre> + 1b28 63 0300 3005 04 + ^ ^ + Plain Paper 0 4 Highest quality + OHP transparency 2 . + T-shirt transfer 3 . + Glossy Photo Film 5 . + High Gloss Paper 6 0 Lowest quality + Photo Paper Pro 9 +</pre></blockquote> + +<h3>Outlook</h3> + +<p> +Presently uniprint can use the black (K), cyan (C), magenta (M), and +yellow (Y) colors in the BJC-8200. The unused colors are photo (or +light) cyan (c) and magenta (m). Also the Canon driver seems to use +only CMYK, for example when printing on Photo Paper Pro in "Camera" or +"SuperPhoto" mode. These modes supposedly produce prints of the best +quality that the Canon driver can offer. Other modes of Canon driver +do use up to all six color cartridges (CMYKcm). Therefore expanding +uniprint's capabilities for six colors would be interesting, but it may +not increase the output quality of 6-color printers such as the +BJC-8200 drastically. + +<p> +More control files for uniprint could be added in order to offer more +versatility for controlling the BJC-8200 within a Ghostscript +installation. The number of possible combinations for media type, resolution +and print quality factor is very large, many combinations would not make +much sense, many might be used here and there, but relatively rarely. The +user would have to remember a name for each combination that is used. + +<p> +A better way would be to let the user patch optionally a user owned or +system wide uniprint control file before each print via some print +tool. This is similar to the approach taken by Canon with their driver for +Windows. Similarly a uniprint tool could also incorporate other functions +such as printing test and demo pages and the low ink warning once the +protocol for this is known. Clearly it would be difficult to code such a +uniprint tool for all the platforms where Ghostscript is running. + +<h3>Usage on RedHat Linux</h3> + +<p> +In order to install a BJC-8200 printer on a RedHat Linux system with +RedHat's printtool, you need also to insert with a text editor the contents +of the file <b><tt>bj8.rpd</tt></b> into the RedHat printer database +<b><tt>/usr/lib/rhs/rhs-printfilters/printerdb</tt></b>. Insert it most +appropriately after the section + +<blockquote><pre> +StartEntry: U_CanonBJC610 +. +. +. +EndEntry + +< --- insert here "bj8.rpd" from this distribution: +< --- StartEntry: U_CanonBJC8200 + . + . + . +</pre></blockquote> + +<h3>Contacting the Author</h3> + +<p> +E-mail address: <<a +href="mailto:scb@stelab.nagoya-u.ac.jp">scb@stelab.nagoya-u.ac.jp</a>> + +<p> +Footnotes: + +<p> +(*) Actually I have a F850, not a BJC-8200. That model is sold for the +Japanese market only. The specs and also the external look are the +same as those of the BJC-8200 models for the American and European +markets. I expect that the raster image mode which is used exclusively +by Ghostscript is entirely compatible for both models. + +<p> +Stephan C. Buchert + +<hr> + +<h2><a name="BJC"></a>Other Canon BubbleJet (BJC) printers</h2> + +<p> +This section was contributed by the author of the drivers, Yves Arrouye +(<<a href="mailto:yves.arrouye@usa.net">yves.arrouye@usa.net</a>>, but +please do not send questions to him: he no longer maintains these drivers.) +The drivers handle Canon BJC-600, BJC-4xxx, BJC-70, Stylewriter 2x00, and +BJC-800 printers. + +<h3><a name="BJC_history"></a>History</h3> + +<p> +The BJC-600 driver was written in the first place by Yoshio Kuniyoshi and +later modified by Yves Arrouye. We tried to make it evolve synchronously, +though Yoshio cannot be reached since a long time ago. The drivers are +based on code for the HP printers by George Cameron (in fact, they are in +the same file!), so he's the first person to thank. + +<p> +The 2.00 version of the drivers was a complete rewrite of the driver +(arguments, optimization, colour handling, in short: everything!) by Yves +Arrouye. That release was also the first one to be able to use the full +width of an A3 paper size. PostScript Printer Description (PPD) files for +the drivers were released with version 2.15. They are incomplete, +but they can be used to drive the printers' main features. + +<h3><a name="BJC_build"></a>Configuring and building the BJC drivers</h3> + +<h4><a name="BJC_defaults"></a>Modify values in +<b><tt>gdevbjc.h</tt></b></h4> + +<p> +Configure the drivers by modifying the default values in the file +<b><tt>gdevbjc.h</tt></b> or on the compilation line. If you don't do +that, the drivers use reasonable defaults that make them work "as +expected". All default values shown here are defined in that file. + +<h4><a name="BJC_CMYK_RGB"></a>CMYK-to-RGB color conversion</h4> + +<p> +By default, the drivers use the same algorithm as Ghostscript to convert +CMYK colors to RGB. If you prefer to use Adobe formulas, define +<b><tt>USE_ADOBE_CMYK_RGB</tt></b> when compiling. (See the top of the +file <b><tt>gdevcdj.c</tt></b> to see the difference between the two.) + +<h4><a name="BJC_vertical_centering"></a>Vertical centering of the +printable area</h4> + +<p> +The drivers center the imageable area horizontally but not vertically, so +that what can be printed does use the most of the output media. If you +define <b><tt>BJC_DEFAULT_CENTEREDAREA</tt></b> when compiling, then the +top and bottom margins will be the same, resulting in a (smaller) +vertically centered imageable area also. + +<h4><a name="BJC_margins"></a>Page margins</h4> + +<p> +If you define <b><tt>USE_RECOMMENDED_MARGINS</tt></b>, then the top and +bottom margins will be the same (that is, +<b><tt>BJC_DEFAULT_CENTEREDAREA</tt></b> will be defined for you) and the +margins will be the 12.4mm recommended by Canon. Since margins are +complicated (because one must rely on the mechanical precision of the +printer), the drivers do something about the bottom margin: by default the +bottom margin is 9.54mm for the BJC-600 driver and 7mm for the BJC-800. If +you define <b><tt>USE_TIGHT_MARGINS</tt></b>, then the bottom margin is 7mm +for both drivers (but I never managed to get my own BJC-600 to print a line +on this low bound, hence the larger default). Regardless of the presence +of this definition, <b><tt>USE_FIXED_MARGINS</tt></b> will not allow the +BJC-800 to use the lower 7mm bottom margin, so if you have a problem with +the bottom margin on a BJC-800, just define that (without defining +<b><tt>USE_TIGHT_MARGINS</tt></b>, of course). + +<p> +A quick way to be sure the margins you selected is to print a file whose +contents are: + +<blockquote><b><tt> +%!<br> +clippath stroke showpage +</tt></b></blockquote> + +<p> +If the margins are okay, you will get a rectangle visibly surrounding +the printable area. If they're not correct, one or more of the sides will +be either incomplete or completely unprinted. + +<h4><a name="BJC_compile"></a>Makefile and compilation</h4> + +<p> +Make sure the <b><tt>bjc600</tt></b> or <b><tt>bjc800</tt></b> devices are +in <a href="Make.htm#Features_and_devices"><b><tt>DEVICE_DEVS</tt></b> in +the makefile</a>; that is, look in the makefile for your platform and add +them if necessary -- they may already be there. As of Ghostscript 5.10, +for instance, one makefile has + +<blockquote><b><tt> +DEVICE_DEVS6=bj10e.dev bj200.dev bjc600.dev bjc800.dev +</tt></b></blockquote> + +<h3><a name="BJC_usage"></a>Use of the drivers</h3> + +<p> +There are two drivers here. The "<b><tt>bjc600</tt></b>" one supports the BJC-600 and +BJC-4xxx (maybe the BJC-70 as well) and the "<b><tt>bjc800</tt></b>" one supports the +BJC-800 series. Remarks here that apply to both drivers use the name +"bjc". + +<h4><a name="BJC_options"></a>Supported Options and Defaults</h4> + +<p> +Note: "options", "properties", and "parameters" designate the same thing: +device parameters that you can change. + +<p> +Giving an option an incorrect value causes an error. Unless stated +otherwise, this error will be a rangecheckerror. Options may be set from +the Ghostscript command line (using the <b><tt>-d</tt></b> and +<b><tt>-s</tt></b> switches or other predetermined switches if they have an +effect on the driver) or using the PostScript Level 2 +<b><tt>setpagedevice</tt></b> operator if Ghostscript has been compiled +with the <b><tt>level2</tt></b> or <b><tt>level3</tt></b> device (which it should +<b><tt>;-)</tt></b>). There are <b>no</b> special-purpose operators such as +one was able to find in Level 1 printers. + +<p> +The bjc uses 24 bits per pixel by default (unless you change the value of +<b><tt>BJC_BITSPERPIXEL</tt></b>), corresponding to CMYK printing. +Supported modes are 1 bpp and 4 bpp (gray levels), 8 bpp, 16 bpp, 24 bpp +and 32 bpp (colours). Colours are preferably stored in the CMYK model +(which means, for example, that with 16 bpp there are only 16 different +shades of each color) but it is possible to store them as RGB color for +some depths. Some modes do Floyd-Steinberg dithering and some don't, but +use the default Ghostscript halftoning (in fact, when halftoning is used, +dithering takes also place but because of the low point density it is +usually not efficient, and thus invisible). + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Descriptions of printing modes by bpp and <b><tt>Colors</tt></b></font><hr> +<tr valign=bottom> + <th align=left>bpp + <td> + <th align=left><b><tt>Colors</tt></b> + <td> + <th align=left>Mode +<tr> <td colspan=5><hr> +<tr valign=top> <td>32 + <td> + <td align=center>4 + <td> + <td>CMYK colour printing, Floyd-Steinberg dithering +<tr valign=top> <td>24 + <td> + <td align=center>4 + <td> + <td>The same. (But each primary colour is stored on 6 bits instead of 8.) +<tr valign=top> <td>24 + <td> + <td align=center>3 + <td> + <td>RGB colour printing, Floyd-Steinberg dithering. This mode does + <b><tt>not</tt></b> use the black cartridge (that's why it + exists, for when you don't want to use it <b><tt>;-)</tt></b>). + Each primary colour is stored in 8 bits as in the 32/4 mode, + but black generation and under-color removal are done on the + driver side and not by Ghostscript, so you have no control over + it. (This mode is no longer supported in this driver.) +<tr valign=top> <td>16 + <td> + <td align=center>4 + <td> + <td>CMYK colour printing, halftoned by Ghostscript. F-S dithering + is still visible here (but the halftone patterns are visible + too!). +<tr valign=top> <td>8 + <td> + <td align=center>4 + <td> + <td>The same. (But each primary colour is stored in 2 bits instead of 4.) +<tr valign=top> <td>8 + <td> + <td align=center>3 + <td> + <td>RGB colour printing. This mode is not intended for use. What I + mean is that it should be used only if you want to use custom + halftone screens <b>and</b> the halftoning is broken using the + 8/4 mode (some versions of Ghostscript have this problem). +<tr valign=top> <td>8 + <td> + <td align=center>1 + <td> + <td>Gray-level printing, Floyd-Steinberg dithering +<tr valign=top> <td>1 + <td> + <td align=center>1 + <td> + <td>Gray-level printing halftoned by Ghostscript +</table></blockquote> + +<p> +These modes are selected using the <b><tt>BitsPerPixel</tt></b> <b>and</b> +<b><tt>Colors</tt></b> integer options (either from the command line or in +a PostScript program using <b><tt>setpagedevice</tt></b>). See below. + +<p> +A note about darkness of what is printed: Canon printers do print dark, +really. And the Floyd-Steinberg dithering may eventually darken your image +too. So you may need to apply gamma correction by calling Ghostscript as in + +<blockquote><b><tt> +gs -sDEVICE=bjc600 gamma.ps myfile.ps +</tt></b></blockquote> + +<p> +where <b><tt>gamma.ps</tt></b> changes the gamma correction (here to 3 for +all colors); 0.45 gives me good results, but your mileage may vary. The +bigger the value the lighter the output: + +<blockquote><b><tt> +{ 0.45 exp } dup dup currenttransfer setcolortransfer +</tt></b></blockquote> + +<p> +The drivers support printing at 90dpi, 180dpi and 360dpi. Horizontal and +vertical resolutions must be the same or a limitcheck error will happen. A +rangecheck will happen too if the resolution is not +90 ×2^<small><sup><b>N</b></sup></small>. If the driver +is compiled with <b><tt>-DBJC_STRICT</tt></b> a rangecheck also happens if +the resolution is not one of those supported. This is not the case, as we +expect that there may be a 720dpi bjc some day. + +<p> +Here are the various options supported by the bjc drivers, along with +their types, supported values, effects, and usage: + +<dl> +<dt><b><tt>BitsPerPixel</tt></b> (int) +<dd>Choose the depth of the page. Valid values are 1, 8, 16, 24 (the +default) and 32. + +<p> +Note that when this is set for the first time, the <b><tt>Colors</tt></b> +property is automatically adjusted unless it is also specified. The table +here shows the corresponding color models and the rendering method visible: +"GS" for Ghostscript halftoning and "F-S" for Floyd-Steinberg dithering. +When both are present it means that the dithering of halftones is visible. +Default choices are indicated by asterisk "*". + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=9 bgcolor="#CCCC00"><hr><font size="+1">Valid <b><tt>Colors</tt></b> values for<br>allowed <b><tt>BitsPerPixel</tt></b> values +</font><hr> +<tr valign=bottom> + <th align=left>bpp + <td> + <th align=left><b><tt>Colors</tt></b> + <td> + <th align=left> + <td> + <th align=left>Color model + <td> + <th align=left>Dithering +<tr> <td colspan=9><hr> +<tr valign=top> <td>32 + <td> + <td align=center>4 + <td> + <td> + <td align=center> + <td>CMYK + <td> + <td>F-S +<tr valign=top> <td>24 + <td> + <td align=center>4 + <td> + <td><b>*</b> + <td align=center> + <td>CMYK + <td> + <td>F-S +<tr valign=top> <td> + <td> + <td align=center>3 + <td> + <td> + <td align=center> + <td>RGB + <td> + <td>F-S +<tr valign=top> <td>16 + <td> + <td align=center>4 + <td> + <td> + <td align=center> + <td>CMYK + <td> + <td>GS, F-S +<tr valign=top> <td>8 + <td> + <td align=center>4 + <td> + <td><b>*</b> + <td align=center> + <td>CMYK + <td> + <td>GS +<tr valign=top> <td> + <td> + <td align=center>3 + <td> + <td> + <td align=center> + <td>RGB + <td> + <td>GS +<tr valign=top> <td> + <td> + <td align=center>1 + <td> + <td> + <td align=center> + <td>K (CMYK) + <td> + <td>F-S +<tr valign=top> <td>1 + <td> + <td align=center>1 + <td> + <td><b>*</b> + <td align=center> + <td>K (CMYK) + <td> + <td>GS +</table></blockquote> + +<p>Also note that automagical change of one parameter depending on the +other one does not work in a <b><tt>setpagedevice</tt></b> call. This +means that if you want to change <b><tt>BitsPerPixel</tt></b> to a value +whose valid <b><tt>Colors</tt></b> values do not include the actual +<b><tt>Colors</tt></b> value, you must change <b><tt>Colors</tt></b> too. +</dl> + +<dl> +<dt><b><tt>Colors</tt></b> (int) +<dd>Choose the number of color components from among 1, 3 and 4 (the +default). This setting cannot be used in a PostScript program, only on +Ghostscript's command line. See <b><tt>ProcessColorModel</tt></b> below +for what to use to change the number of colors with PostScript code. + +<p> +Note that setting this property does limit the choices of +<b><tt>BitsPerPixel</tt></b>. As for the previous property, its first +setting may induce a setting of the "other value" +(<b><tt>BitsPerPixel</tt></b> here). The table here indicates valid +combinations with "V", default values with asterisk "*". + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=13 bgcolor="#CCCC00"><hr><font size="+1">Valid <b><tt>BitsPerPixel</tt></b> values<br>for allowed <b><tt>Colors</tt></b> values</font><hr> +<tr valign=top> <td> + <td> + <td> + <td> + <th align=left colspan=9><b><tt>BitsPerPixel</tt></b> OK values<hr> +<tr valign=top> <th>Colors + <td> + <th>Type + <td> + <td>32 + <td> + <td>24 + <td> + <td>16 + <td> + <td>8 + <td> + <td>1 +<tr> <td colspan=13><hr> +<tr valign=top> <td>4 + <td> + <td>CMYK + <td> + <td><b>V</b> + <td> + <td><b>*</b> + <td> + <td><b>V</b> + <td> + <td><b>V</b> + <td> + <td> +<tr valign=top> <td>3 + <td> + <td>RGB + <td> + <td> + <td> + <td><b>*</b> + <td> + <td> + <td> + <td><b>V</b> + <td> + <td> +<tr valign=top> <td>1 + <td> + <td>K + <td> + <td> + <td> + <td> + <td> + <td> + <td> + <td><b>V</b> + <td> + <td><b>*</b> +</table></blockquote> + +<p>Also note that automagical change of one parameter depending on the +other one does not work in a <b><tt>setpagedevice</tt></b> call. This +means that if you want to change <b><tt>Colors</tt></b> to a value whose +valid <b><tt>BitsPerPixel</tt></b> values don't include the actual +<b><tt>BitsPerPixel</tt></b> value, you must change +<b><tt>BitsPerPixel</tt></b> too. +</dl> + +<dl> +<dt><b><tt>ProcessColorModel</tt></b> (symbol) +<dd>A symbol taken from <b><tt>/DeviceGray</tt></b>, +<b><tt>/DeviceRGB</tt></b> or <b><tt>/DeviceCMYK</tt></b> which can be used +to select 1, 3 or 4 colors respectively. Note that this parameter takes +precedence over <b><tt>Colors</tt></b>, and that both affect the same +variable of the driver. (See <b><tt>Colors</tt></b> above for values +combined with <b><tt>BitsPerPixel</tt></b>.) +</dl> + +<dl> +<dt><b><tt>HWResolution</tt></b> (floats array) +<dd>An array of two floats giving the horizontal and vertical resolution in +dots per inch from among 90, 180 and 360 (the default). Both values must +be the same. On the Ghostscript command line, the resolution may be +changed with the <a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b> +switch</a>. +</dl> + +<dl> +<dt><b><tt>ManualFeed</tt></b> (bool) +<dd>Indicate that the sheets won't be fed automatically by the printer, +<b><tt>false</tt></b> by default. (Not meaningful on the BJC-600, I fear.) +</dl> + +<dl> +<dt><b><tt>MediaType</tt></b> (string) +<dd>The media to print on, chosen from among "<b><tt>PlainPaper</tt></b>", +"<b><tt>CoatedPaper</tt></b>", "<b><tt>TransparencyFilm</tt></b>", +"<b><tt>Envelope</tt></b>", "<b><tt>Card</tt></b>" and +"<b><tt>Other</tt></b>". Default is "<b><tt>PlainPaper</tt></b>". For +"<b><tt>Envelope</tt></b>", "<b><tt>Card</tt></b>" or +"<b><tt>Other</tt></b>" the driver puts the printer into thick mode +automatically regardless of the actual media weight. +</dl> + +<dl> +<dt><b><tt>MediaWeight</tt></b> (int or null) +<dd>The weight of the media in grams per square meter. Null (the default) +indicates that the weight is of no importance. If the specified media +weight is greater than 105 (that is, the value of the compilation default +<b><tt>BJC</tt></b>???<b><tt>_MEDIAWEIGHT_THICKLIMIT</tt></b>) then the +printer will be set to use thick paper. +</dl> + +<dl> +<dt><b><tt>PrintQuality</tt></b> (string) +<dd>The quality of printing. +<table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Value + <td> + <th align=left><b><tt>bjc600</tt></b> + <td> + <th align=left><b><tt>bjc800</tt></b> + <td> + <th align=left> +<tr> <td colspan=7><hr> +<tr valign=top> <td><b><tt>Low</tt></b> + <td> + <td> + <td> + <td align=center><b>X</b> + <td> + <td>Has the effect of making only two printing passes instead of four, so should be twice the speed; known as "CN" (Color Normal) mode +<tr valign=top> <td><b><tt>Draft</tt></b> + <td> + <td align=center><b>X</b> + <td> + <td align=center><b>X</b> + <td> + <td>Unlights the "HQ" light on a BJC-600 +<tr valign=top> <td><b><tt>Normal</tt></b> + <td> + <td align=center><b>X</b> + <td> + <td align=center><b>X</b> + <td> + <td>Default for both drivers; lights the "HQ" light on a BJC-600 +<tr valign=top> <td><b><tt>High</tt></b> + <td> + <td align=center><b>X</b> + <td> + <td align=center><b>X</b> + <td> + <td>Means 200% black and 100% CMY; lights the "Bk+" light on a BJC-600 +</table> +</dl> + +<dl> +<dt><b><tt>DitheringType</tt></b> (string) +<dd>Dithering algorithm from between "<b><tt>Floyd-Steinberg</tt></b>" and +"<b><tt>None</tt></b>". "<b><tt>None</tt></b>" is the default for 1/1 print +mode, "<b><tt>Floyd-Steinberg</tt></b>" for other modes. At the moment +this parameter is read-only, though no error is generated if one tries to +change it. This parameter is not of much value at the moment and is here +mainly to reserve the name for future addition of dithering algorithms. +</dl> + +<dl> +<dt><b><tt>PrintColors</tt></b> (int) +<dd>Mask for printing color. If 0, use black for any color; otherwise the +value must be the sum of any of 1 (cyan), 2 (magenta), 4 (yellow) and 8 +(black), indicating which colors will be used for printing. When printing +colour, only colours specified will be printed (this means that some planes +will be missing if a color's value above is omitted). When printing grays, +black is used if it is present in the <b><tt>PrintColors</tt></b>; +otherwise, the image is printed by superimposing each requested color. +</dl> + +<dl> +<dt><b><tt>MonochromePrint</tt></b> (bool) +<dd><b>For <tt>bjc600</tt> only</b>, <b><tt>false</tt></b> by default. +Substitute black for Cyan, Magenta and Yellow when printing -- useful, for +example, to get some monochrome output of a dithered printing This is a +hardware mechanism as opposed to the previous software one. I think that +using this or setting <b><tt>PrintColors</tt></b> to 0 will give the same +results. +</dl> + +<p> +Note that the <b><tt>MediaType</tt></b> and <b><tt>ThickMedia</tt></b> +options will be replaced by the use of the device +<b><tt>InputAttributes</tt></b> and <b><tt>OutputAttributes</tt></b> as +soon as possible. Please note too that the print mode may be reset at the +start of printing, not at the end. This is the expected behaviour. If you +need to reset the printer to its default state, simply print a file that +does just a <b><tt>showpage</tt></b>. + +<h4><a name="BJC_device_info"></a>Device information</h4> + +<p> +Here is other information published by the driver that you will find +in the <b><tt>deviceinfo</tt></b> dictionary. + +<dl> +<dt><b><tt>OutputFaceUp</tt></b> (bool) +<dd>This has the boolean value <b><tt>true</tt></b>, indicating that the +sheets are stacked face up. +</dl> + +<dl> +<dt><b><tt>Version</tt></b> (float) +<dd>In the form <b>M.</b><em>mm</em>pp, where <b>M</b> is the major +version, <em>mm</em> the bjc driver's minor version, and pp the specific +driver minor version (that is, <b><tt>M.</tt></b><em>mm</em> will always be +the same for the <b><tt>bjc600</tt></b> and <b><tt>bjc800</tt></b> +drivers). +</dl> + +<dl> +<dt><b><tt>VersionString</tt></b> (string) +<dd> A string showing the driver version and other indications. At the +moment, things like "a" or "b" may follow the version to indicate alpha or +beta versions. The date of the last change to this version is given in the +form MM/DD/YY (no, it won't adapt to your locale). +</dl> + +<h4><a name="BJC_HW_margins"></a>Hardware margins</h4> + +<p> +The BJC printers have top and bottom hardware margins of 3mm and 7.1mm +respectively (Canon says 7mm, but this is unusable because of the rounding +of paper sizes to PostScript points). The left margin is 3.4mm for A4 and +smaller paper sizes, 6.4mm for U.S. paper sizes, envelopes and cards. It +is 4.0mm for A3 paper on the BJC-800. + +<p> +The maximum printing width of a BJC-600 printer is 203mm. The maximum +printing width of a BJC-800 printer is 289mm on A3 paper, 203mm on +U.S. letter and ISO A4 paper. + +<h4><a name="BJC_PPD"></a>PostScript printer description (PPD) files</h4> + +<p> +The files <b><tt>CBJC600.PPD</tt></b> and <b><tt>CBJC800.PPD</tt></b> (whose +long names are, respectively, <b><tt>Canon_BubbleJetColor_600.ppd</tt></b> +and <b><tt>Canon_BubbleJetColor_800.ppd</tt></b>) are PPD files to drive the +features of the <b><tt>bjc600</tt></b> and <b><tt>bjc800</tt></b> drivers. +They can be used, for example, on NextStep systems (presumably on OpenStep +systems too) and on Unix systems with Adobe's TranScript and +<b><tt>pslpr</tt></b> (not tested). The files are not complete at the +moment. Please note that NextStep's printing interface does not +correctly enforce constraints specified in these files (in UIConstraints +descriptions): you must force yourself to use valid combinations of +options. + +<h4><a name="BJC_PPD_custom"></a>Customizing the PPD files</h4> + +<p> +By default the PPD files are set for U.S. letter size paper, and they use a +normalized transfer function. If you choose to use A4 printing by default, +you must replace "<b><tt>Letter</tt></b>" with "<b><tt>A4</tt></b>" in +these (noncontiguous) lines: + +<blockquote> + [...]<br> +<b><tt>*DefaultPageSize: Letter<br></tt></b> + [...]<br> +<b><tt>*DefaultRegion: Letter<br></tt></b> + [...]<br> +<b><tt>*DefaultImageableArea: Letter</tt></b><br> + [...]<br> +</blockquote> + +<p> +Some versions of Ghostscript have problems with normalized colors, which +makes them add magenta in gray levels. If you experience this problem, +in the PPD file replace the line + +<blockquote><b><tt> +*DefaultTransfer: Normalized +</tt></b></blockquote> + +<p> +with the alternate line + +<blockquote><b><tt> +*DefaultTransfer: Null +</tt></b></blockquote> + +<p> +The "thick media" option is implemented by choosing a value of 120 or 80 +(for thick and thin media respectively) for the <b><tt>MediaWeight</tt></b> +feature of the drivers. If you ever change the threshold for thick media +in the driver code, you may need to change the values in the PPD files too. + +<p> +All customization should be done using the "<b><tt>*Include:</tt></b>" +feature of PPD files so that your local changes will be retained if you +update the PPD files. + +<h3><a name="BJC_bugs"></a>How to report problems</h3> + +<p> +Yves Arrouye no longer maintains this driver, and will not answer questions +about it. If you are posting a question about it in a public form, please +be as descriptive as possible, and please send information that can be used +to reproduce the problem. Don't forget to say which driver you use, and in +what version. Version information can be found in the source code of the +driver or by issuing the following command in a shell: + +<blockquote><b><tt> +echo "currentpagedevice /VersionString get ==" | gs -q -sDEVICE=bjc600 - +</tt></b></blockquote> + +<h3><a name="BJC_acks"></a>Acknowledgements</h3> + +<p> +I am particularly grateful to Yoshio Kuniyoshi <<a +href="mailto:yoshio@nak.math.keio.ac.jp">yoshio@nak.math.keio.ac.jp</a>> +without whom I'd never make these drivers, and also to L. Peter Deutsch, +who answered all my (often silly) questions about Ghostscript's driver +interface. + +<p> +Thanks also to the people who volunteered to beta-test the v2.x BJC +drivers: David Gaudine +<<a href="mailto:david@donald.concordia.ca">david@donald.concordia.ca</a>>, +Robert M. Kenney <<a href="mailto:rmk@unh.edu">rmk@unh.edu</a>>, +James McPherson +<<a href="mailto:someone@erols.com">someone@erols.com</a>> +and Ian Thurlbeck +<<a href="mailto:ian@stams.strath.ac.uk">ian@stams.strath.ac.uk</a>> +(listed alphabetically) were particularly helpful by discovering bugs and +helping find out exact paper margins on printers I don't have access to. + +<p> +And many thanks to Klaus-Gunther Hess +<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> for looking +at the dithering code and devising a good CMYK dithering algorithm for the +Epson Stylus Color, which I then adapted to the code of these drivers. + +<hr> + +<h2><a name="STC_epson_stylus"></a>Epson Stylus color printer (see also <b><tt>uniprint</tt></b>)</h2> + +<p> +This section was contributed by Gunther Hess +<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>>, who also wrote +<b><tt>uniprint</tt></b>, a later set of drivers. You should probably see +the section on <a href="#Uniprint"><b><tt>uniprint</tt></b></a> for whether +it might be better for your uses than this driver. + +<h3><a name="STC_usage"></a>Usage</h3> + +<p> + +This driver is selected with "<b><tt>-sDEVICE=stcolor</tt></b>", producing +output for an Epson Stylus Color at 360dpi resolution by default. But it +can do much more with this printer, and with significantly better quality, +than with the default mode; and it can also produce code for monochrome +versions of the printer. This can be achieved via either command-line +options or Ghostscript input. For convenience a PostScript file is +supplied for use as an initial input file. Try the following command: + +<blockquote> +<b><tt>gs -sDEVICE=stcolor -r</tt></b><b>{Xdpi}</b><b><tt>x</tt></b><b>{Ydpi}</b><b><tt> stcolor.ps</tt></b> <b>{YourFile.ps}</b> +</blockquote> + +<p> +where <b>{Xdpi}</b> is one of 180, 360, or 720 and <b>{Ydpi}</b> is one of +90, 180, 360, or 720. The result should be significantly better. You may +use <b><tt>stcolor.ps</tt></b> with other devices too, but I do not +recommend this, since it does nothing then. <b><tt>stcolor.ps</tt></b> +should be available with binary distributions and should reside in the same +directory as other Ghostscript initialization files or in the same +directory as the files to be printed. Thus if Ghostscript is part of your +printer-spooler, you can insert + +<blockquote><b><tt> +(stcolor.ps) findlibfile { pop run } if pop +</tt></b></blockquote> + +<p> +in files you want to use the improved algorithms. You may want to adapt +<b><tt>stcolor.ps</tt></b> file to your specific needs. The methods and +options for this are described here, but this description is restricted to +Ghostscript options, while their manipulation at the PostScript level is +documented in the material on <a href="Language.htm">the relationship of +Ghostscript and PostScript</a> and in <b><tt>stcolor.ps</tt></b>. + +<h3><a name="STC_options"></a>Options</h3> + +<p> +Now to explain the options (as written on my UNIX system). The order is +somehow related to their use during the printing process: + +<dl> +<dt><b><tt>-dUnidirectional</tt></b> +<dd>Force unidirectional printing, recommended for transparencies +</dl> + +<dl> +<dt><b><tt>-dMicroweave</tt></b> +<dd>Enable the printer's "microweave" feature; see +"<a href="#What_is_weaving">What is weaving?</a>" below. +</dl> + +<dl> +<dt><b><tt>-dnoWeave</tt></b> +<dd>Disable any Weaving (overrides <b><tt>-dMicroweave</tt></b>) +</dl> + +<dl> +<dt><b><tt>-dSoftweave</tt></b> +<dd>Enable the driver's internal weaving. Note that <b><tt>Softweave</tt></b> works <b>only</b> with the original Stylus Color and the PRO-Series. +</dl> + +<dl> +<dt><b><tt>-sDithering=</tt></b><em>{name}</em> +<dd>Select another dithering algorithm (name) from among +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>gscmyk</tt></b> + <td> + <td>fast color output, CMYK process color model (default) +<tr valign=top> <td><b><tt>gsmono</tt></b> + <td> + <td>fast monochrome output +<tr valign=top> <td><b><tt>gsrgb</tt></b> + <td> + <td>fast color output, RGB process color model +<tr valign=top> <td><b><tt>fsmono</tt></b> + <td> + <td>Floyd-Steinberg, monochrome +<tr valign=top> <td><b><tt>fsrgb</tt></b> + <td> + <td>Floyd-Steinberg, RGB process color model (almost identical to the <b><tt>cdj550</tt></b>/<b><tt>bjc</tt></b> algorithm) +<tr valign=top> <td><b><tt>fsx4</tt></b> + <td> + <td>Floyd-Steinberg, CMYK process color model (shares code with <b><tt>fsmono</tt></b> and <b><tt>fsrgb</tt></b>, but is algorithmically really bad) +<tr valign=top> <td><b><tt>fscmyk</tt></b> + <td> + <td>Floyd-Steinberg, CMYK process color model and proper modifications for CMYK +<tr valign=top> <td><b><tt>hscmyk</tt></b> + <td> + <td>modified Floyd-Steinberg with CMYK model ("hs" stands for "hess" not for "high speed", but the major difference from <b><tt>fscmyk</tt></b> is speed) +<tr valign=top> <td><b><tt>fs2</tt></b> + <td> + <td>algorithm by Steven Singer (RGB) should be identical to <b><tt>escp2cfs2</tt></b>. +</table></blockquote> +</dl> + +<dl> +<dt><b><tt>-dBitsPerPixel=</tt></b><em>{1...32}</em> +<dd>number of bits used for pixel storage; the larger the value, the better +the quality -- at least in theory. In <b><tt>fsrgb</tt></b> one can gain +some speed by restricting to 24 bits rather than the default 30. +</dl> + +<dl> +<dt><b><tt>-dFlag0</tt></b> +<dd>causes some algorithms to select a uniform initialisation rather than a +set of random values. May yield a sharper image impression at the cost of +dithering artifacts. (Applies to <b><tt>hscmyk</tt></b> and all fs modes, +except for fs2, which always uses a constant initialization.) +</dl> + +<dl> +<dt><b><tt>-dFlag1</tt></b> ... <b><tt>-dFlag4</tt></b> +<dd>Available for future algorithms. +</dl> + +<dl> +<dt><b><tt>-dColorAdjustMatrix='{</tt></b><em>three, nine, or sixteen +floating-point values</em><b><tt>}'</tt></b> +<dd>This is a matrix to adjust the colors. Values should be between -1.0 +and 1.0, and the number of values depends on the color model the selected +algorithm uses. In RGB and CMYK modes a matrix with 1.0 on the diagonal +produces no transformation. This feature is really required, but I could +not identify a similar feature at the language level, so I implemented it, +but I don't know reasonable values yet. +</dl> + +<dl> +<dt><b><tt>-dCtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b> or +<dt><b><tt>-dMtransfer=</tt></b>..., <b><tt>-dY</tt></b>..., <b><tt>-dK</tt></b>... or +<dt><b><tt>-dRtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b> or +<dt><b><tt>-dG</tt></b>..., <b><tt>-dB</tt></b>... or +<dt><b><tt>-dKtransfer='{</tt></b><em>float float ...</em><b><tt>}'</tt></b> +<dd>Which you use depends on the algorithm, which may be either either +CMYK, RGB or monochrome. The values are arrays of floats in the range from +0 to 1.0, representing the visible color intensity for the device. One may +achieve similar effects with <b><tt>setcolortransfer</tt></b> at the +language level, but this takes more time and the underlying code for the +driver-specific parameters is still required. The size of the arrays is +arbitrary and the defaults are "<b><tt>{0.0 1.0}</tt></b>", which is a +linear characteristic. Most of the code in <b><tt>stcolor.ps</tt></b> are +better transfer arrays. +</dl> + +<dl> +<dt><b><tt>-dKcoding='{</tt></b><em>float...</em><b><tt>}'</tt></b> +<dt><b><tt>-dC</tt></b>..., <b><tt>-dM</tt></b>... etc. +<dd>Arrays between 0.0 and 1.0, controlling the internal coding of the +color values. Clever use of these arrays may yield further enhancements, +but I have no experience yet. (To be discontinued with version 2.x.) +</dl> + +<dl> +<dt><b><tt>-sModel=st800</tt></b> +<dd>Causes output to be suitable for the monochrome Stylus 800 (no weaving, +no color). +</dl> + +<dl> +<dt><b><tt>-sOutputCode=</tt></b><em>{name}</em> +<dd>Can be either "<b><tt>plain</tt></b>", "<b><tt>runlength</tt></b>" or +"<b><tt>deltarow</tt></b>" and changes the ESC/P2 coding technique +used by the driver. The default is to use runlength encoding. +"<b><tt>plain</tt></b>" selects uncompressed encoding and generates +enormous amounts of data. +</dl> + +<dl> +<dt><b><tt>-descp_Band=</tt></b><em>1/8/15/24</em> +<dd>Number of nozzles of scanlines used in printing, Useful only with +<b><tt>-dnoWeave</tt></b>. Larger Values yield smaller code, but this +doesn't increase the printing speed. +</dl> + +<dl> +<dt><b><tt>-descp_Width=</tt></b><em>N</em> +<dd>Number of pixels Printed in each scan Line. (Useful only when tuning +margins; see below) +</dl> + +<dl> +<dt><b><tt>-descp_Height=</tt></b><em>pixels</em> +<dd>Length of the entire page in pixels. (Parameter of +"<b><tt>ESC(C</tt></b>" in default initialization.) +</dl> + +<dl> +<dt><b><tt>-descp_Top=</tt></b><em>scan lines</em> +<dd>Top margin in scan lines. (First parameter of "<b><tt>ESC(c</tt></b>" +in default initialization.) +</dl> + +<dl> +<dt><b><tt>-descp_Bottom=</tt></b><em>scan lines</em> +<dd>Bottom margin in scan lines. (Second parameter of +"<b><tt>ESC(c</tt></b>" in default initialization.) +</dl> + +<dl> +<dt><b><tt>-sescp_Init=</tt></b>"<em>string</em>" +<dd>Override for the initialization sequence. (Must set graphics mode 1 +and units.) +</dl> + +<dl> +<dt><b><tt>-sescp_Release=</tt></b>"<em>string</em>" +<dd>Overrides the release sequence, "<b><tt>ESC @ FF</tt></b>" by +default. +</dl> + +<p> +ESC/P2 allows any resolutions to be valid in theory, but only +<b><tt>-r360x360</tt></b> (the default) and <b><tt>-r720x720</tt></b> (not +on STC-IIs ? and st800) are known to work with most printers. + +<p> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Valid option combinations<br>Stylus I & Pro-Series only</font><hr> +<tr valign=bottom> + <th valign=bottom align=left>Resolution + <td> + <th valign=bottom align=left><b><tt>escp_Band</tt></b> + <td> + <th valign=bottom align=left>Weave usable + <td> + <th valign=bottom align=left><b><tt>escp_Band</tt></b> &<br>number of passes +<tr> <td colspan=7><hr> +<tr valign=top> <td>180x90 + <td> + <td>15 + <td> + <td><b><tt>noWeave</tt></b> + <td> + <td> +<tr valign=top> <td>180x180 + <td> + <td>1 , 8, 24 + <td> + <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b> + <td> + <td>15/2 <b><tt>SoftWeave</tt></b> +<tr valign=top> <td>180x360 + <td> + <td> + <td> + <td> + <td> + <td>15/4 <b><tt>SoftWeave</tt></b> +<tr valign=top> <td>180x720 + <td> + <td> + <td> + <td> + <td> + <td>15/8 <b><tt>SoftWeave</tt></b> +<tr valign=top> <td>360x90 + <td> + <td>15 + <td> + <td><b><tt>noWeave</tt></b> + <td> + <td> +<tr valign=top> <td>360x180 + <td> + <td>1, 8, 24 + <td> + <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b> + <td> + <td>15/2 <b><tt>SoftWeave</tt></b> +<tr valign=top> <td>360x360 + <td> + <td>1, 8, 24 + <td> + <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b> + <td> + <td>15/4 <b><tt>SoftWeave</tt></b> +<tr valign=top> <td>360x720 + <td> + <td> + <td> + <td> + <td> + <td>15/8 <b><tt>SoftWeave</tt></b> +<tr valign=top> <td>720x90 + <td> + <td>15 + <td> + <td><b><tt>noWeave</tt></b> + <td> + <td> +<tr valign=top> <td>720x180 + <td> + <td> + <td> + <td> + <td> + <td>15/2 <b><tt>SoftWeave</tt></b> +<tr valign=top> <td>720x360 + <td> + <td> + <td> + <td> + <td> + <td>15/4 <b><tt>SoftWeave</tt></b> +<tr valign=top> <td>720x720 + <td> + <td>1 + <td> + <td><b><tt>noWeave</tt></b>, <b><tt>Microweave</tt></b> + <td> + <td>15/8 <b><tt>SoftWeave</tt></b> +</table></blockquote> + +<blockquote> +<b>Beware:</b> there are only few validity checks for parameters. A good +example is <b><tt>escp_Band</tt></b>: if you set this, the driver uses your +value even if the value is not supported by the printer. <b>You asked for +it and you got it!</b> +</blockquote> + +<h3><a name="STC_FAQ"></a>Application note and FAQ</h3> + +<p> +Quite a bunch of parameters. Hopefully you never need any of them, besides +feeding <b><tt>stcolor.ps</tt></b> to Ghostscript in front of your input. + +<p> +After answering some questions over fifty times I prepared a FAQ. Here is +version 1.3 of the FAQ, as of <b><tt>stcolor</tt></b> version 1.20 (for +Ghostscript 3.50). + +<h4><a name="STC_FAQ_A3"></a>Support for A3 paper</h4> + +<p> +Yes, this driver supports the A3-size printer: merely set the required +pagesize and margins. A simple way to do this is to specify the +command-line switch "<b><tt>-sPAPERSIZE=a3</tt></b>" or include the +procedure call "<b><tt>a3</tt></b>" in the PostScript prolog section. To +optimize the printable area or set the proper margins, see the next +paragraph. + +<h4><a name="STC_FAQ_margins"></a>Margins, PageSize</h4> + +<p> +I refuse to add code to <b><tt>stcolor</tt></b> that tries to guess the +proper margins or page size, because I found that such guessing is usually +wrong and needs correction in either the source or the parameters. You can +modify <b><tt>stcolor.ps</tt></b> to do that, however. After the line + +<blockquote><b><tt> +mark % prepare stack for "putdeviceprops" +</tt></b></blockquote> + +<p> +insert these lines, which define page size and margins in points: + +<blockquote> +<pre>/.HWMargins [9.0 39.96 12.6 9.0] % Left, bottom, right, top (1/72") +/PageSize [597.6 842.4] % Paper, including margins (1/72") +/Margins [ % neg. Offset to Left/Top in Pixels + 4 index 0 get STCold /HWResolution get 0 get mul 72 div neg + 5 index 3 get STCold /HWResolution get 1 get mul 72 div neg +]</pre></blockquote> + +<p> +Feel free to change the values of <b><tt>.HWMargins</tt></b> and +<b><tt>PageSize</tt></b> to match your needs; the values given are the +defaults when the driver is compiled with "<b><tt>-DA4</tt></b>". This +option or its omission may cause trouble: the Stylus Color can print up to +exactly 8 inches (2880 pixels) at 360dpi. The remaining paper is the +margin, where the left margin varies only slightly with the paper size, +while the right margin is significantly increased for wider paper, such as +U.S. letter size. + +<p> +<b>Note</b> that if you are using an ISO paper size with a version of +<b><tt>stcolor</tt></b> after 1.20 and compiled without +"<b><tt>-DA4</tt></b>", then the default margin is too large, and you need +to add the proper "<b><tt>.HWMargins</tt></b>" to the command line or to +<b><tt>stcolor.ps</tt></b>. + +<h4><a name="STC_FAQ_II_IIS_1500"></a>Stylus Color II / IIs and 1500</h4> + +<p> +First the good news: the driver can print on the Stylus Color II. +Now the bad news: +<ul> +<li>According to Epson support the driver "abuses" the color +capabilities. (See "Future Plans" for details.) +<li>You need some parameters on the command line (or in +<b><tt>stcolor.ps</tt></b>). +<li>I doubted that it would be usable with the Stylus Color IIs, but +it <b>is</b> usable and suffers from mixing problems! +</ul> + +<p> + +To make things work, you <b>MUST</b> disable the driver's internal +weaving (<b><tt>Softweave</tt></b>), in one of these two ways: + +<blockquote> +<b><tt>gs -dMicroweave</tt></b> ...<br> +<b><tt>gs -dnoWeave -descp_Band=1</tt></b> ... +</blockquote> + +<p> +Version 1.90, current as of Ghostscript 5.10, fixes this bug by new default +behaviour. I experienced significantly increased printing speed with the +second variant on the old Stylus Color, when printing mostly monochrome +data. + +<h3><a name="STC_recommendations"></a>Recommendations</h3> + +<p> +The next section is a contribution from Jason Patterson <jason@reflections.com.au> +who evaluated a previous version (1.17). Ghostscript was invoked as follows: + +<blockquote><dl compact> +<dt><b><tt>gs</tt></b> +<dd><b><tt>-sDEVICE=stcolor -r720x720 +-sDithering=</tt></b>... <b><tt>-sOutputFile=escp.out stcolor.ps +whatsoever.ps</tt></b> + +</dl></blockquote> + +<p> +where "..." is the name of the desired algorithm. +<b><tt>stcolor.ps</tt></b> was omitted for the gs-algorithms +(<b><tt>gsmono</tt></b>, <b><tt>gsrgb</tt></b> and <b><tt>gscmyk</tt></b>), +for which it is useless and would not allow the selection of +"<b><tt>gscmyk</tt></b>". + +<h4><a name="STC_dither_experiment"></a>Color dithering experiments with +<b><tt>gdevstc</tt></b> 1.21</h4> + +<p> +Here are data about the EPSON Stylus Color driver's different dithering +methods, based on a little experiment using four good quality scanned +images of quite varied nature, to begin with, a summary of the results of +the four experiments. <b>Sanity note:</b> the results here are from only +four images and a total of 24 printouts (eight on 720dpi paper, sixteen on +plain paper). Your results will almost certainly vary, and your standards +might not be the same as mine, so use these results only as a guide, not as +a formal evaluation. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Quality of output by method</font><hr> +<tr valign=bottom> + <th align=left> + <td> + <th align=left> +<tr> <td colspan=3><hr> +<tr> <td valign=top><b><tt>gsmono</tt></b> +<td> +<td>Pretty much what you'd expect from a mono ordered pattern. +Looks like what a lot of mono laser printers produce. +<tr> <td valign=top><b><tt>fsmono</tt></b> +<td> +<td>Excellent for monochrome. +<tr> <td valign=top><b><tt>gscmyk</tt></b> +<td> +<td>Not very good, but expected from an ordered pattern. +<tr> <td valign=top><b><tt>gsrgb</tt></b> +<td> +<td>A little better than <b><tt>gscmyk</tt></b>. More consistent +looking. +<tr> <td valign=top><b><tt>fs2</tt></b> +<td> +<td>Good, but not quite as good as <b><tt>fsrgb</tt></b>. Gets the +brightness wrong: too light at 720dpi, too dark at 360dpi. +<tr> <td valign=top><b><tt>fsrgb</tt></b> +<td> +<td>Very good, but a little too dark and has a slight blue tint. +<tr> <td valign=top><b><tt>hscmyk</tt></b> +<td> +<td>Excellent. Slightly better than <b><tt>fsrgb</tt></b> and +<b><tt>fs2</tt></b>. Better than <b><tt>fscmyk</tt></b> on +some images, almost the same on most. +<tr> <td valign=top><b><tt>fscmyk</tt></b> +<td> +<td>Best. Very, very slightly better than <b><tt>hscmyk</tt></b>. +On some images nearly as good as the EPSON demos done with +the MS Windows driver. +</table></blockquote> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=4 bgcolor="#CCCC00"><hr><font size="+1">Overall visual quality (1-10), best to worst</font><hr> +<tr valign=top> <th colspan=4 align=left>Monochrome +<tr> <td> + <td><b><tt>fsmono</tt></b> + <td> + <td><b><tt>******************</tt></b> +<tr> <td> + <td><b><tt>gsmono</tt></b> + <td> + <td><b><tt>**********</tt></b> +<tr> <td> + <td> + <td> + <td><b><tt>0 1 2 3 4 5 6 7 8 9 10</tt></b> +<tr> <td colspan=4><hr> +<tr valign=top> <th colspan=4 align=left>Colour +<tr> <td> + <td><b><tt>fscmyk</tt></b> + <td> + <td><b><tt>*******************</tt></b> +<tr> <td> + <td><b><tt>hscmyk</tt></b> + <td> + <td><b><tt>*******************</tt></b> +<tr> <td> + <td><b><tt>fsrgb</tt></b> + <td> + <td><b><tt>******************</tt></b> +<tr> <td> + <td><b><tt>fs2</tt></b> + <td> + <td><b><tt>*****************</tt></b> +<tr> <td> + <td><b><tt>gsrgb</tt></b> + <td> + <td><b><tt>**********</tt></b> +<tr> <td> + <td><b><tt>gscmyk</tt></b> + <td> + <td><b><tt>*********</tt></b> +<tr> <td> + <td> + <td> + <td><b><tt>0 1 2 3 4 5 6 7 8 9 10</tt></b> +</table></blockquote> + +<h3><a name="STC_color_transform"></a>Color transformation</h3> + +<p> +In the initial version of the driver distributed with Ghostscript 3.33, the +parameter "<b><tt>SpotSize</tt></b>" was the only way to manipulate the +colors at the driver level. According to the parameters enumerated above, +this has changed significantly with version 1.16 and above as a result an +ongoing discussion about dithering algorithms and "false color" on the +Epson Stylus Color. This initiated the transformation of the +<b><tt>stcolor</tt></b> driver into a framework for different dithering +algorithms, providing a generalized interface to the internal Ghostscript +color models and the other data structures related to Ghostscript drivers. + +<p> +The main thing such a framework should be able to do is to deliver the +values the dithering algorithm needs; and since this directly influences +the optical image impression, this transformation should be adjustable +without the need for recompilation and relinking. In general the process +can be described as follows: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td colspan=3><b><tt>ColorAdjustMatrix</tt></b> + <td align=center>Coding + <td colspan=3> + <td align=center>Transfer + <td colspan=3> +<tr valign=top> <td>| + <td align=center>Ghostscript color + <td>| + <td align=center>=> + <td>| + <td align=center>Ghostscript raster + <td>| + <td align=center>=> + <td>| + <td align=center>Dithering data + <td>| +<tr valign=top> <td>| + <td> + <td>| + <td> + <td>| + <td align=center>1/2/4/8/16/32-bit + <td>| + <td> + <td>| + <td> + <td>| +<tr valign=top> <td>| + <td align=center>1/3/4 16-bit values + <td>| + <td> + <td>| + <td align=center>1/3/4 values + <td>| + <td> + <td>| + <td align=center>(arbitrary type) + <td>| +</table></blockquote> + +<p> +Due to the limitations on raster storage, information is lost in the first +transformation step, except for the 16-bit monochrome mode. So any color +adjustment should take place before this step and this is where the optional +<b><tt>ColorAdjustMatrix</tt></b> works. + +<p> +The first transformation step, called "coding", is controlled by the +<b><tt>?coding</tt></b> arrays. The decoding process expands the range of +values expontentially to a larger range than that provided by the initial +Ghostscript color model, and is therefore a reasonable place to make +device- or algorithm-specific adjustments. This is where the +<b><tt>?transfer</tt></b> arrays are used. Array access might be not the +fastest method, but its generality is superior, so this step is always +based upon internally algorithm-specific array access. If 8 bits are stored +per color component and if the algorithm uses bytes too, the second +transformation is included within the first, which saves significant +computation time when printing the data. + +<h3><a name="STC_CAM"></a><b><tt>ColorAdjustMatrix</tt></b></h3> + +<p> +The driver supports different values for <b><tt>ProcessColorModel</tt></b>, +which raises the need for different color adjustments. Here +"<b><tt>CAM</tt></b>" stands for "<b><tt>ColorAdjustMatrix</tt></b>". + +<dl> +<dt><b><tt>DeviceGray</tt></b> (three floats) +<dd><pre>if ((r == g) && (g == b)) + K' = 1.0 - R; +else + K' = 1.0 - CAM[0] * R + CAM[1] * G + CAM[2] * B;</pre> + +<p> +According to the <a href="Drivers.htm">documentation on drivers</a>, the +latter (the "else" clause) should never happen. +</dl> + +<dl> +<dt><b><tt>DeviceRGB</tt></b> (nine floats) +<dd><pre>if((r == g) && (g == b)) + R' = B' = G' = R; +else + R' = CAM[0]*R + CAM[1]*G + CAM[2]*B; + G' = CAM[3]*R + CAM[4]*G + CAM[5]*B; + B' = CAM[6]*R + CAM[7]*G + CAM[8]*B;</pre> + +<p> +The printer always uses four inks, so a special treatment of black is +provided. Algorithms may take special action if R, G, and B are all +equal. +</dl> + +<dl> +<dt><b><tt>DeviceCMYK</tt></b> (sixteen floats) +<dd> +<pre>if((c == m) && (m == y)) + K' = max(C,K); + C' = M' = Y' = 0; +else + K = min(C,M,Y); + if((K > 0) && ColorAdjustMatrix_present) { => UCR + C -= K; + M -= K; + Y -= K; + } + + C' = CAM[ 0]*C + CAM[ 1]*M + CAM[ 2]*Y + CAM[ 3]*K; + M' = CAM[ 4]*C + CAM[ 5]*M + CAM[ 6]*Y + CAM[ 7]*K; + Y' = CAM[ 8]*C + CAM[ 9]*M + CAM[10]*Y + CAM[11]*K; + K' = CAM[12]*C + CAM[13]*M + CAM[14]*Y + CAM[15]*K;</pre> + +<p> +Again we have a special black treatment. "<b><tt>max(C,K)</tt></b>" was introduced +because of a slight misbehaviour of Ghostscript, which delivers +black under certain circumstances as (1,1,1,0). Normally, when +no special black separation and undercolor removal procedures +are defined at the PostScript level, either (C,M,Y,0) or (0,0,0,K) +values are mapped. This would make the extended <b><tt>ColorAdjustMatrix</tt></b> +quite tedious, and so during mapping, black separation is done for +(C,M,Y,0) requests; and if there is a <b><tt>ColorAdjustMatrix</tt></b>, undercolor +removal is used too. In other words the default matrix is: + +<blockquote><table> +<tr> <td>1 <td>0 <td>0 <td>1 +<tr> <td>0 <td>1 <td>0 <td>1 +<tr> <td>0 <td>0 <td>1 <td>1 +<tr> <td>0 <td>0 <td>0 <td>1 +</table></blockquote> + +<p> +and it is applied to CMYK values with separated and removed black. Raising +the CMY coefficients while lowering the K coefficients reduces black and +intensifies color. But be careful, because even small deviations from the +default cause drastic changes. +</dl> + +<p> +If no <b><tt>ColorAdjustMatrix</tt></b> is set, the matrix computations are +skipped. Thus the transformation reduces to range inversion in monochrome +mode and black separation in CMYK mode. + +<h3><a name="STC_RGBCMYK_coding"></a>RGB / CMYK coding and transfer, and <b><tt>BitsPerPixel</tt></b></h3> + +<p> +These two (groups of) parameters are arrays of floating-point numbers in +the range 0.0 to 1.0. They control the truncation to the desired number of +bits stored in raster memory (<b><tt>BitsPerPixel</tt></b>) and the ink +density. The "truncation" may become a nonlinear function if any of the +<b><tt>?coding</tt></b> arrays is set. Assume the following Ghostscript +invocation: + +<blockquote><pre>gs -sDEVICE=stcolor -sDithering=fscmyk -dBitsPerPixel=16 \ + -dKcoding='{ 0.0 0.09 0.9 1.0 }' \ + -dMcoding='{ 0.0 0.09 0.9 1.0 }' \ + -dKtransfer='{ 0.0 0.09 0.9 1.0 }' \ + -dYtransfer='{ 0.0 0.09 0.9 1.0 }'</pre> +</blockquote> + +<p> +We may have either or both of <b><tt>?coding</tt></b> and +<b><tt>?transfer</tt></b>, giving four possible combinations. (These four +combinations appear in the given example.) The resulting mapping appears +in the following tables, where except for the internal Indices (4 +components × 4 bits = 16 <b><tt>BitsPerPixel</tt></b>), all values +are normalized to the range 0 to 1. The actual range is 0 to 65535 for the +Ghostscript color and 0 to 16777215 for the ink values delivered to the +<b><tt>fscmyk</tt></b> algorithm. Sorry for the bunch of numbers +following, but you may try this example in conjunction with +<b><tt>stcinfo.ps</tt></b>, which should give you a graphical printout of +the following numbers when you issue a <b><tt>showpage</tt></b> command. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <td> + <td> + <th colspan=5>Cyan<hr> + <td> + <th colspan=5>Magenta<hr> +<tr valign=top> <th>CI/15 + <td> + <th>gs_color_values + <td> + <th>CI + <td> + <th>Ink + <td> + <th>gs_color_values + <td> + <th>CI + <td> + <th>Ink +<tr> <td colspan=13><hr> +<tr valign=top> <td align=center>0.000 + <td> + <td align=center>0.000 - 0.062 + <td> + <td align=right>0 + <td> + <td align=center>0.000 + <td> + <td align=center>-0.123 - 0.123 + <td> + <td align=right>0 + <td> + <td align=center>0.000 +<tr valign=top> <td align=center>0.067 + <td> + <td align=center>0.063 - 0.125 + <td> + <td align=right>1 + <td> + <td align=center>0.067 + <td> + <td align=center>0.123 - 0.299 + <td> + <td align=right>1 + <td> + <td align=center>0.247 +<tr valign=top> <td align=center>0.133 + <td> + <td align=center>0.125 - 0.187 + <td> + <td align=right>2 + <td> + <td align=center>0.133 + <td> + <td align=center>0.299 - 0.365 + <td> + <td align=right>2 + <td> + <td align=center>0.351 +<tr valign=top> <td align=center>0.200 + <td> + <td align=center>0.188 - 0.250 + <td> + <td align=right>3 + <td> + <td align=center>0.200 + <td> + <td align=center>0.365 - 0.392 + <td> + <td align=right>3 + <td> + <td align=center>0.379 +<tr valign=top> <td align=center>0.267 + <td> + <td align=center>0.250 - 0.312 + <td> + <td align=right>4 + <td> + <td align=center>0.267 + <td> + <td align=center>0.392 - 0.420 + <td> + <td align=right>4 + <td> + <td align=center>0.406 +<tr valign=top> <td align=center>0.333 + <td> + <td align=center>0.313 - 0.375 + <td> + <td align=right>5 + <td> + <td align=center>0.333 + <td> + <td align=center>0.420 - 0.447 + <td> + <td align=right>5 + <td> + <td align=center>0.433 +<tr valign=top> <td align=center>0.400 + <td> + <td align=center>0.375 - 0.437 + <td> + <td align=right>6 + <td> + <td align=center>0.400 + <td> + <td align=center>0.447 - 0.475 + <td> + <td align=right>6 + <td> + <td align=center>0.461 +<tr valign=top> <td align=center>0.467 + <td> + <td align=center>0.438 - 0.500 + <td> + <td align=right>7 + <td> + <td align=center>0.467 + <td> + <td align=center>0.475 - 0.502 + <td> + <td align=right>7 + <td> + <td align=center>0.488 +<tr valign=top> <td align=center>0.533 + <td> + <td align=center>0.500 - 0.562 + <td> + <td align=right>8 + <td> + <td align=center>0.533 + <td> + <td align=center>0.502 - 0.529 + <td> + <td align=right>8 + <td> + <td align=center>0.516 +<tr valign=top> <td align=center>0.600 + <td> + <td align=center>0.563 - 0.625 + <td> + <td align=right>9 + <td> + <td align=center>0.600 + <td> + <td align=center>0.529 - 0.557 + <td> + <td align=right>9 + <td> + <td align=center>0.543 +<tr valign=top> <td align=center>0.667 + <td> + <td align=center>0.625 - 0.687 + <td> + <td align=right>10 + <td> + <td align=center>0.667 + <td> + <td align=center>0.557 - 0.584 + <td> + <td align=right>10 + <td> + <td align=center>0.571 +<tr valign=top> <td align=center>0.733 + <td> + <td align=center>0.688 - 0.750 + <td> + <td align=right>11 + <td> + <td align=center>0.733 + <td> + <td align=center>0.584 - 0.612 + <td> + <td align=right>11 + <td> + <td align=center>0.598 +<tr valign=top> <td align=center>0.800 + <td> + <td align=center>0.750 - 0.812 + <td> + <td align=right>12 + <td> + <td align=center>0.800 + <td> + <td align=center>0.612 - 0.639 + <td> + <td align=right>12 + <td> + <td align=center>0.626 +<tr valign=top> <td align=center>0.867 + <td> + <td align=center>0.813 - 0.875 + <td> + <td align=right>13 + <td> + <td align=center>0.867 + <td> + <td align=center>0.639 - 0.715 + <td> + <td align=right>13 + <td> + <td align=center>0.653 +<tr valign=top> <td align=center>0.933 + <td> + <td align=center>0.875 - 0.937 + <td> + <td align=right>14 + <td> + <td align=center>0.933 + <td> + <td align=center>0.715 - 0.889 + <td> + <td align=right>14 + <td> + <td align=center>0.778 +<tr valign=top> <td align=center>1.000 + <td> + <td align=center>0.938 - 1.000 + <td> + <td align=right>15 + <td> + <td align=center>1.000 + <td> + <td align=center>0.889 - 1.111 + <td> + <td align=right>15 + <td> + <td align=center>1.000 +</table></blockquote> + +<p> +The difference between cyan and magenta is the presence of a coding array. +The coding process must map a range of color values to each of the sixteen +component indices. If no coding array is given, this is accomplished +by dividing by 4096, equivalent to a right shift by 12 bits. The +final ink density resides in the given interval and moves from the left to +the right side from 0 to 15. For magenta there is a coding array +and the ink value matches the center of the intervals. But the distribution +of the mapped intervals follows the given coding array and is nonlinear in +the linear color space of Ghostscript. + +<p> +Now let us take a look at the case with transfer arrays: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <td> + <td> + <th colspan=5>Yellow<hr> + <td> + <th colspan=5>Black<hr> +<tr valign=top> <th>CI/15 + <td> + <th>gs_color_values + <td> + <th>CI + <td> + <th>Ink + <td> + <th>gs_color_values + <td> + <th>CI + <td> + <th>Ink +<tr> <td colspan=13><hr> +<tr valign=top> <td align=center>0.000 + <td> + <td align=center>0.000 - 0.062 + <td> + <td align=right>0 + <td> + <td align=center>0.000 + <td> + <td align=center>-0.123 - 0.123 + <td> + <td align=right>0 + <td> + <td align=center>0.000 +<tr valign=top> <td align=center>0.067 + <td> + <td align=center>0.063 - 0.125 + <td> + <td align=right>1 + <td> + <td align=center>0.018 + <td> + <td align=center>0.123 - 0.299 + <td> + <td align=right>1 + <td> + <td align=center>0.067 +<tr valign=top> <td align=center>0.133 + <td> + <td align=center>0.125 - 0.187 + <td> + <td align=right>2 + <td> + <td align=center>0.036 + <td> + <td align=center>0.299 - 0.365 + <td> + <td align=right>2 + <td> + <td align=center>0.133 +<tr valign=top> <td align=center>0.200 + <td> + <td align=center>0.188 - 0.250 + <td> + <td align=right>3 + <td> + <td align=center>0.054 + <td> + <td align=center>0.365 - 0.392 + <td> + <td align=right>3 + <td> + <td align=center>0.200 +<tr valign=top> <td align=center>0.267 + <td> + <td align=center>0.250 - 0.312 + <td> + <td align=right>4 + <td> + <td align=center>0.072 + <td> + <td align=center>0.392 - 0.420 + <td> + <td align=right>4 + <td> + <td align=center>0.267 +<tr valign=top> <td align=center>0.333 + <td> + <td align=center>0.313 - 0.375 + <td> + <td align=right>5 + <td> + <td align=center>0.090 + <td> + <td align=center>0.420 - 0.447 + <td> + <td align=right>5 + <td> + <td align=center>0.333 +<tr valign=top> <td align=center>0.400 + <td> + <td align=center>0.375 - 0.437 + <td> + <td align=right>6 + <td> + <td align=center>0.252 + <td> + <td align=center>0.447 - 0.475 + <td> + <td align=right>6 + <td> + <td align=center>0.400 +<tr valign=top> <td align=center>0.467 + <td> + <td align=center>0.438 - 0.500 + <td> + <td align=right>7 + <td> + <td align=center>0.414 + <td> + <td align=center>0.475 - 0.502 + <td> + <td align=right>7 + <td> + <td align=center>0.467 +<tr valign=top> <td align=center>0.533 + <td> + <td align=center>0.500 - 0.562 + <td> + <td align=right>8 + <td> + <td align=center>0.576 + <td> + <td align=center>0.502 - 0.529 + <td> + <td align=right>8 + <td> + <td align=center>0.533 +<tr valign=top> <td align=center>0.600 + <td> + <td align=center>0.563 - 0.625 + <td> + <td align=right>9 + <td> + <td align=center>0.738 + <td> + <td align=center>0.529 - 0.557 + <td> + <td align=right>9 + <td> + <td align=center>0.600 +<tr valign=top> <td align=center>0.667 + <td> + <td align=center>0.625 - 0.687 + <td> + <td align=right>10 + <td> + <td align=center>0.900 + <td> + <td align=center>0.557 - 0.584 + <td> + <td align=right>10 + <td> + <td align=center>0.667 +<tr valign=top> <td align=center>0.733 + <td> + <td align=center>0.688 - 0.750 + <td> + <td align=right>11 + <td> + <td align=center>0.920 + <td> + <td align=center>0.584 - 0.612 + <td> + <td align=right>11 + <td> + <td align=center>0.733 +<tr valign=top> <td align=center>0.800 + <td> + <td align=center>0.750 - 0.812 + <td> + <td align=right>12 + <td> + <td align=center>0.940 + <td> + <td align=center>0.612 - 0.639 + <td> + <td align=right>12 + <td> + <td align=center>0.800 +<tr valign=top> <td align=center>0.867 + <td> + <td align=center>0.813 - 0.875 + <td> + <td align=right>13 + <td> + <td align=center>0.960 + <td> + <td align=center>0.639 - 0.715 + <td> + <td align=right>13 + <td> + <td align=center>0.867 +<tr valign=top> <td align=center>0.933 + <td> + <td align=center>0.875 - 0.937 + <td> + <td align=right>14 + <td> + <td align=center>0.980 + <td> + <td align=center>0.715 - 0.889 + <td> + <td align=right>14 + <td> + <td align=center>0.933 +<tr valign=top> <td align=center>1.000 + <td> + <td align=center>0.938 - 1.000 + <td> + <td align=right>15 + <td> + <td align=center>1.000 + <td> + <td align=center>0.889 - 1.111 + <td> + <td align=right>15 + <td> + <td align=center>1.000 +</table></blockquote> + +<p> +Yellow uses a transfer array. There is no linear correspondence between +the color and the ink values: this correspondence is defined through the +given array. In other words, the transfer arrays define a nonlinear ink +characteristic, which is exactly the same functionality that PostScript's +"(color)transfer" function provides. + +<p> +While for yellow the intervals match the intervals used with cyan, for +black the intervals match the magenta intervals. But watch the +correspondence between the CI/15 values and the ink density for black: this +is a linear distribution in the ink domain. + +<p> +Not a bad idea, I think. Consider the <b><tt>fs2</tt></b> algorithm: it +uses values in the range 0 to 255. If any transfer array were alone, some +of the 256 possible values would never be used and others would be used for +adjacent intervals several times. Establishing an identical coding array +solves this problem, so the full potential of the algorithm is used. + +<p> +Another useful feature of the coding arrays is that they are internally +normalized to the range 0-1. In 720x720dpi mode the transfer arrays in +<b><tt>stcolor.ps</tt></b> limit the dot density to about 50%, so these +arrays end at 0.5 (and begin at 0.5 for RGB). Because of automatic +normalization, these arrays can also be used as coding arrays. But of +course in the <b><tt>fs2</tt></b> case mentioned above, values from 0 to +127 will never be delivered to the algorithm, while values 128-255 are +delivered for adjacent intervals. + +<p> +To clarify the intended use of the three parameters (parameter groups), keep this in mind: + +<blockquote><ul> +<li><b><tt>ColorAdjustMatrix</tt></b> is never used when transferring gray +values. This restricts it to what the name says: adjustment of colors, +that is, correction for miscolored ink. Do not use it for saturation or +brightness control. + +<li><b><tt>?transfer</tt></b> arrays control the values delivered to the +driver, which in turn controls the ink quantity. Use these arrays to +control saturation and brightness. In general these arrays are identical +for all inks. If they differ they provide a simpler scheme for color +correction, which is not necessarily faster than the +<b><tt>ColorAdjustMatrix</tt></b>. + +<li><b><tt>?coding</tt></b> arrays control the color value intervals mapped +to the internal color indices. +</ul></blockquote> + +<h3><a name="What_is_weaving"></a>What is weaving?</h3> + +<p> +The Epson Stylus Color has a head assembly that contains two physically +identifiable heads, one for black and one for cyan, magenta, and yellow +(CMY). This makes four "logical" heads, one for each color component. +Each of these four heads has several jets at some vertical (Y) distance +from one another, so several horizontal lines can be printed of a given +color during one pass of the heads. From experience I think there are +fifteen jets per color, spaced at 1/90in. + +<p> +So the question arises of how to print at a Y resolution of 360dpi with +90dpi jets. Simply by division one gets 360dpi/90dpi = 4, which tells us +that 4 passes of the head assembly are needed to achieve a Y resolution of +360dpi. + +<p> +Weaving is the method of how the fifteen jets are used to print adjacent +horizontal rows separated here by 1/360 inch: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=17 bgcolor="#CCCC00"><hr><font size="+1">Print-head jets used with and without weaving</font><hr> +<tr> <td> + <td> + <th valign=bottom colspan=7>Weaving<hr> + <td> + <th valign=bottom colspan=7>noWeave<hr> +<tr valign=top> <td> + <th>Pass + <th>1 + <td> + <th>2 + <td> + <th>3 + <td> + <th>4 + <td> + <th>1 + <td> + <th>2 + <td> + <th>3 + <td> + <th>4 +<tr> <th>Row +<tr valign=top> <td align=center>0 + <td> + <td align=center>jet 0 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 0 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- +<tr valign=top> <td align=center>1 + <td> + <td align=center>-- + <td> + <td align=center>jet 1 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 0 + <td> + <td align=center>-- + <td> + <td align=center>-- +<tr valign=top> <td align=center>2 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 2 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 0 + <td> + <td align=center>-- +<tr valign=top> <td align=center>3 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 3 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 0 +<tr valign=top> <td align=center>4 + <td> + <td align=center>jet 1 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 1 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- +<tr valign=top> <td align=center>5 + <td> + <td align=center>-- + <td> + <td align=center>jet 2 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 1 + <td> + <td align=center>-- + <td> + <td align=center>-- +<tr valign=top> <td align=center>6 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 3 + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>-- + <td> + <td align=center>jet 1 + <td> + <td align=center>-- +<tr valign=top> <th>... +</table></blockquote> + +<p> +Now let's assume that the dot diameter is different for each individual +jet, but the average among the jets matches the desired resolution. With +weaving, adjacent rows are printed by different jets, thus some averaging +takes place. Without weaving, adjacent rows are printed by the same jet +and this makes the dot diameter deviations visible as 1/90in stripes on +the paper. + +<h3><a name="STC_print_modes"></a>Print mode parameters</h3> + +<p> +The parameters "<b><tt>Unidirectional</tt></b>", +"<b><tt>Microweave</tt></b>", "<b><tt>noWeave</tt></b>", +"<b><tt>OutputCode</tt></b>", "<b><tt>Model</tt></b>" and the given +resolution control the data generated for the printer. + +<h4><a name="STC_unidirectional"></a><b><tt>Unidirectional</tt></b></h4> + +<p> +Simply toggles the unidirectional mode of the printer. Setting +"<b><tt>Unidirectional</tt></b>" definitely slows printing speed, but may +improve the quality. I use this for printing transparencies, where fast +head movement could smear the ink. + +<h4><a name="STC_noweave"></a><b><tt>Microweave</tt></b>, +<b><tt>noWeave</tt></b> and <b><tt>OutputCode=deltarow</tt></b></h4> + +<p> +The first are two booleans, which implies that four combinations are +possible. Actually only three exist (if you don't count for +<b><tt>deltarow</tt></b>): <b><tt>Softweave</tt></b>, +<b><tt>Microweave</tt></b>, and <b><tt>noWeave</tt></b>. The first and +second are functionally identical, the difference being whether the driver +or the printer does the job. + +<p> +In the default <b><tt>Softweave</tt></b> mode the driver sends the data +properly arranged to the printer, while in <b><tt>Microweave</tt></b> mode, +it is the printer that arranges the data. But in general the host processor +is much faster than the printer's processor, and thus it is faster for the +host do the job. In addition to that, for 720dpi eight passes are +required, and the amount of buffer space needed to buffer the data for the +passes is far beyond the printer's memory. <b><tt>Softweave</tt></b> +requires an odd value of "<b><tt>escp_Band</tt></b>"; the Stylus Color +provides fifteen for that. + +<p> +"<b><tt>OutputCode</tt></b>" controls the encoding used. In the basic +modes, the choice consists of "plain" and "runlength". The computation of +runlength-encoded data does not take much time, less than the data tranfer +to the printer; thus this is the recommended mode, and of course the +default. With the Stylus Color, Epson introduced some new encoding +principles, namely "tiff" and "deltarow". While the first was omitted from +this driver for lack of apparent advantages, "<b><tt>deltarow</tt></b>" is +available as an option. "<b><tt>Softweave</tt></b>" cannot be used with +this encoding, so if <b><tt>OutputCode=deltarow</tt></b> is set, +<b><tt>Microweave</tt></b> becomes the default. Maybe that the size of the +ESC/P2 code becomes smaller, but I have never observed faster printing +speed. Things tend to become slower with <b><tt>deltarow</tt></b> compared +to <b><tt>Softweave</tt></b>. + +<h4><a name="STC_model"></a><b><tt>Model</tt></b></h4> + +<p> +Some ESC/P2 printers such as the Stylus 800 do not offer +<b><tt>Microweave</tt></b> or the commands required to do +<b><tt>Softweave</tt></b>. Setting <b><tt>Model</tt></b> just changes the +defaults and omits some parts of the initialization sequence which are not +compatible with the given printer model. Currently only +"<b><tt>st800</tt></b>" is supported besides the default +<b><tt>stcolor</tt></b>. + +<h3><a name="STC_Pitfalls"></a>Bugs and pitfalls</h3> + +<ul> +<li>The given <b><tt>?coding</tt></b> and <b><tt>?transfer</tt></b> arrays +should be strictly monotonic. + +<li>It is impossible to change <b><tt>WHITE</tt></b>: that's your paper. +Thus RGB transfer should end at 1.0 and CMYK transfer should start at 0.0. + +<li>Usually 8 bits per component yields fastest operation. + +<li>The <b><tt>ColorAdjustMatrix</tt></b> is not used in the reverse +transformation used when Ghostscript does the dithering +(<b><tt>gs</tt></b>* modes). Expect funny results. + +<li>If <b><tt>BitsPerPixel</tt></b> is less than 6, the entire coding and +transfer process does not work. This is always true for the +<b><tt>gs</tt></b>* modes and becomes true for the other modes if +<b><tt>BitsPerPixel</tt></b> is forced to low values. + +<li>720×720dpi printing should never select the <b><tt>gs</tt></b>* +modes and should always use <b><tt>stcolor.ps</tt></b>. (I prefer +360×720.) +</ul> + +<h3><a name="STC_Tests"></a>Tests</h3> + +<p> +This section gives an overview of performance in terms of processing and +printing times, from tests run after version 1.13. Printing was done +offline (simply copying a processed file to the printer) to measure real +printing speed without regard to speed of processing on the host, since at +high resolutions, processing time is the same order of magnitude and thus +may become the limiting factor. + +<h4><a name="STC_OutputCodes"></a>The various OutputCodes</h4> + +<p> +I ran several files though Ghostscript and recorded the size of the +resulting print code, the processing time, and the printing time, at least +for some of the files, always using these options: + +<blockquote><b><tt> +gs -sDEVICE=stcolor -sPAPERSIZE=a4 stcolor.ps - < file.ps +</tt></b></blockquote> + +<p> +(Actually "<b><tt>-sPAPERSIZE=a4</tt></b>" is in my +<b><tt>gs_init.ps</tt></b> since I'm a germ.) + +<p>"<b><tt>deltarow</tt></b>" is the new encoding principle +("<b><tt>ESC . 3 10 10 1</tt></b>") with +<b><tt>Microweave</tt></b> on. It is activated with +"<b><tt>-sOutputCode=deltarow</tt></b>". + +<p>"<b><tt>Softweave</tt></b>" actually means that nothing else was used: +it is the default, and implies that odd v=40/h=10/m=15 mode +("<b><tt>ESC . 1 40 10 15</tt></b>"). + +<p>"<b><tt>Microweave</tt></b>" means "<b><tt>-dMicroweave</tt></b>", +equivalent to "<b><tt>ESC . 1 10 10 1</tt></b>", +with full skip optimization and microweave activated. + +<p> +Finally I wanted to see the plain Kathy Ireland, and used +"<b><tt>-sOutputCode=plain</tt></b>", which just replaces runlength +encoding (RLE) by no encoding, thus using +"<b><tt>ESC . 0 40 10 15</tt></b>". [So sorry +<b><tt>;-)</tt></b> Kathy was still dressed in blue in front of the blue +sea on a blue air cushion -- nice to see but hard to dither.] + +<p> +So here are the results. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=9 bgcolor="#CCCC00"><hr><font size="+1">File sizes and printing speeds with various weaving methods</font><hr> +<tr valign=bottom> + <td> + <td> + <th><b><tt>golfer.ps</tt></b> + <td> + <th><b><tt>colorcir.ps</tt></b> + <td> + <th><b><tt>drawing.ps</tt></b> + <td> + <th><b><tt>brief.ps</tt></b> +<tr> <td colspan=9><hr> +<tr valign=top> <td><b><tt>deltarow</tt></b> + <td> + <td>572751/48.180u + <td> + <td>643374/41.690u + <td> + <td>90142/46.180u/1:50 + <td> + <td>178563/49.350u/2:22 +<tr valign=top> <td><b><tt>Softweave</tt></b> + <td> + <td>559593/46.810u + <td> + <td>669966/44.960u + <td> + <td>296168/48.160u/1:30 + <td> + <td>269808/43.320u/1:55 +<tr valign=top> <td><b><tt>Microweave</tt></b> + <td> + <td>590999/56.060u + <td> + <td>754276/42.890u + <td> + <td>338885/47.060u/1:50 + <td> + <td>282314/44.690u/2:22 +</table></blockquote> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Kathy Ireland</font><hr> +<tr valign=bottom> + <td> + <td> + <th><b><tt>kathy.ps</tt></b> +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>deltarow</tt></b> + <td> + <td>3975334/111.940u/5:35 +<tr valign=top> <td><b><tt>Softweave</tt></b> + <td> + <td>3897112/101.940u/3:10 +<tr valign=top> <td><b><tt>Microweave</tt></b> + <td> + <td>4062829/100.990u/3:15 +<tr valign=top> <td><b><tt>plain/soft</tt></b> + <td> + <td>5072255/104.390u/3:05 +</table></blockquote> + +<p> +It may be that I've not chosen the optimal <b><tt>deltarow</tt></b> code, +but even if it saves at lot of bytes, printing-speed is not increased. + +<p> +At least the printer prefers plain Kathy. In other words, sending 1 +Megabyte or 20% more data has no impact on printing speed. +<b><tt>drawing.ps</tt></b> is an exception to this rule: plain prints +slower than RLE. + +<p> +"Unclever" coding -- especially with <b><tt>deltarow</tt></b> -- can +significantly slow down printing. But even if very significant advantages +in the size of the code are achieved, "<b><tt>deltarow</tt></b>" is not +competitive. <b><tt>colorcir.ps</tt></b> shows savings with +<b><tt>deltarow</tt></b>, but printing is a mess. + +<h4><a name="STC_printing_time"></a>Printing time related to other options</h4> + +<p> +Full page halftone images printed, unless otherwise noted. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=11 bgcolor="#CCCC00"><hr><font size="+1">Printing time related to other options</font><hr> +<tr valign=top> <th>dpi + <td> + <th colspan=3>Print mode + <td> + <th>Size KB + <td> + <th>Time + <td> + <th align=left>Comments +<tr> <td colspan=11><hr> +<tr valign=top> <td>180x180 + <td> + <td>mono + <td> + <td align=right>-/uni + <td> + <td align=right>358 + <td> + <td align=right>1:15 + <td> + <td> +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>-/bi + <td> + <td align=right>358 + <td> + <td align=right>0:45 + <td> + <td> +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>micro/bi + <td> + <td align=right>205 + <td> + <td align=right>0:45 + <td> + <td>Not weaving +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>soft/bi + <td> + <td align=right>179 + <td> + <td align=right>1:25 + <td> + <td> +<tr valign=top> <td> + <td> + <td>color + <td> + <td align=right>-/bi + <td> + <td align=right>641 + <td> + <td align=right>2:45 + <td> + <td> +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>soft/bi + <td> + <td align=right>556 + <td> + <td align=right>1:32 + <td> + <td> +<tr valign=top> <td>360x360 + <td> + <td>mono + <td> + <td align=right>-/uni + <td> + <td align=right>269 + <td> + <td align=right>0:50 + <td> + <td>Monochrome text +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>-/bi + <td> + <td align=right>269 + <td> + <td align=right>0:35 + <td> + <td>Monochrome text +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>micro/bi + <td> + <td align=right>269 + <td> + <td align=right>2:25 + <td> + <td>Monochrome text +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>soft/uni + <td> + <td align=right>250 + <td> + <td align=right>3:15 + <td> + <td>Monochrome text +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>soft/bi + <td> + <td align=right>250 + <td> + <td align=right>1:55 + <td> + <td>Monochrome text +<tr valign=top> <td> + <td> + <td>color + <td> + <td align=right>-/bi + <td> + <td align=right>346 + <td> + <td align=right>1:00 + <td> + <td>Sparse-color page, visible displacements +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>micro/bi + <td> + <td align=right>346 + <td> + <td align=right>1:50 + <td> + <td>Sparse-color page, looks buggy -- printer? +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>soft/bi + <td> + <td align=right>294 + <td> + <td align=right>1:30 + <td> + <td>Sparse-color page, O.K. +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>-/bi + <td> + <td align=right>2218 + <td> + <td align=right>2:45 + <td> + <td>Visible stripes +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>micro/bi + <td> + <td align=right>5171 + <td> + <td align=right>3:17 + <td> + <td> +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>soft/bi + <td> + <td align=right>3675 + <td> + <td align=right>3:05 + <td> + <td> +<tr valign=top> <td>360x720 + <td> + <td>mono + <td> + <td align=right>soft/bi + <td> + <td align=right>2761 + <td> + <td align=right>5:40 + <td> + <td> +<tr valign=top> <td> + <td> + <td>color + <td> + <td align=right>soft/bi + <td> + <td align=right>7789 + <td> + <td align=right>6:15 + <td> + <td>Just a small difference! +<tr valign=top> <td>720x360 + <td> + <td>color + <td> + <td align=right>soft/bi + <td> + <td align=right>7182 + <td> + <td align=right>5:40 + <td> + <td> +<tr valign=top> <td>720x720 + <td> + <td>color + <td> + <td align=right>micro/bi + <td> + <td align=right>14748 + <td> + <td align=right>30:26 + <td> + <td>Actually beyond printer's capabilities +<tr valign=top> <td> + <td> + <td align=right> + <td> + <td align=right>soft/bi + <td> + <td align=right>14407 + <td> + <td align=right>11:08 + <td> + <td> +</table></blockquote> + +<h3><a name="STC_acks"></a>Acknowledgments</h3> + +<p> +This driver was copied from <b><tt>gdevcdj.c</tt></b> (Ghostscript 3.12), +which was contributed by George Cameron, Koert Zeilstra, and Eckhard +Rueggeberg. Some of the ESC/P2 code was drawn from Richard Brown's +<b><tt>gdevescp.c</tt></b>. The POSIX interrupt code (compilation option +<b><tt>-DSTC_SIGNAL</tt></b>) is from Frederic Loyer. Several improvements +are based on discussions with Brian Converse, Bill Davidson, Gero Guenther, +Jason Patterson, ? Rueschstroer, and Steven Singer. + +<p> +While I wish to thank everyone mentioned above, they are by no means +responsible for bugs in the stcolor driver -- just for the features. + +<address> +Gunther Hess<br> +Richard Wagner Strasse 112<br> +D-47057 Duisburg<br> +Germany<br> ++49 203 376273 telephone (MET evening hours)<br> +<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> +</address> + +<hr> + +<h2><a name="Uniprint"></a>uniprint, a flexible unified printer driver</h2> + +<p> +<b><tt>uniprint</tt></b> is a unified parametric driver by Gunther Hess +<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> for several +kinds of printers and devices, including + +<blockquote> +<ul> +<li>any Epson Stylus Color, Stylus, or Stylus Pro +<li>HP PCL/RTL +<li>Canon BubbleJet Color 610 +<li>NEC P2X +<li>Sun raster file format +</ul></blockquote> + +<p> +This driver is intended to <em>become</em> a unified printer driver. If you +consider it ugly, please send me your suggestions for improvements. The +driver will be updated with them. Thus the full explanation of the driver's +name is: + +<blockquote> +Ugly- -> Updated- -> Unified Printer Driver +</blockquote> + +<p> +But you probably want to know something about the functionality. +At the time of this writing uniprint drives: + +<ul> +<li>NEC Pinwriter P2X (24-pin monochrome impact printer, ESC/P style) +<li>Several Epson Stylus Color models (ESC/P2 style) +<li>HP-DeskJet 550c (basic HP-RTL) +<li>Canon BJC 610 +</ul> + +<p> +It can be configured for various other printers without recompilation +and offers uncompressed (ugly) Sun rasterfiles as another format, but +this format is intended for testing purposes rather than real use. +The usage of this driver is quite simple. The typical command line looks +like this: + +<blockquote> +<b><tt>gs @</tt></b>{MODEL}<b><tt>.upp -sOutputFile=</tt></b>{printable file}<b><tt> MyFile.ps -c quit</tt></b> +</blockquote> + +<p> +For example, from my GNU/Linux box: + +<blockquote><b><tt> +gs @stc.upp -sOutputFile=/dev/lp1 tiger.ps -c quit +</tt></b></blockquote> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=6 bgcolor="#CCCC00"><hr><font size="+1">Unified Printer Parameter files distributed with Ghostscript</font><hr> +<tr> <th align=left colspan=6>Canon BJC 610 (color, rendered) +<tr valign=top> <td> + <td><b><tt>bjc610a0.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>plain paper, high speed +<tr valign=top> <td> + <td><b><tt>bjc610a1.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>plain paper +<tr valign=top> <td> + <td><b><tt>bjc610a2.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>coated paper +<tr valign=top> <td> + <td><b><tt>bjc610a3.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>transparency film +<tr valign=top> <td> + <td><b><tt>bjc610a4.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>back print film +<tr valign=top> <td> + <td><b><tt>bjc610a5.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>fabric sheet +<tr valign=top> <td> + <td><b><tt>bjc610a6.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>glossy paper +<tr valign=top> <td> + <td><b><tt>bjc610a7.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>high gloss film +<tr valign=top> <td> + <td><b><tt>bjc610a8.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>high resolution paper +<tr> <td> +<tr valign=top> <td> + <td><b><tt>bjc610b1.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>plain paper +<tr valign=top> <td> + <td><b><tt>bjc610b2.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>coated paper +<tr valign=top> <td> + <td><b><tt>bjc610b3.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>transparency film +<tr valign=top> <td> + <td><b><tt>bjc610b4.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>back print film +<tr valign=top> <td> + <td><b><tt>bjc610b6.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>glossy paper +<tr valign=top> <td> + <td><b><tt>bjc610b7.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>high-gloss paper +<tr valign=top> <td> + <td><b><tt>bjc610b8.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>high resolution paper +<tr> <td> +<tr> <th align=left colspan=6>HP Ink-Printers +<tr valign=top> <td> + <td><b><tt>cdj550.upp</tt></b> + <td> + <td>300×300dpi + <td> + <td>32-bit CMYK +<tr valign=top> <td> + <td><b><tt>cdj690.upp</tt></b> + <td> + <td>300×300dpi + <td> + <td>Normal mode +<tr valign=top> <td> + <td><b><tt>cdj690ec.upp</tt></b> + <td> + <td>300×300dpi + <td> + <td>Economy mode +<tr valign=top> <td> + <td><b><tt>dnj750c.upp</tt></b> + <td> + <td>300×300dpi + <td> + <td>Color -- also good for 450C +<tr valign=top> <td> + <td><b><tt>dnj750m.upp</tt></b> + <td> + <td>600×600dpi + <td> + <td>Monochrome +<tr> <td> +<tr> <th align=left colspan=6>NEC P2X +<tr valign=top> <td> + <td><b><tt>necp2x.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>8-bit (Floyd-Steinberg) +<tr> <td> +<tr> <th align=left colspan=6>Any Epson Stylus Color +<tr valign=top> <td> + <td><b><tt>stcany.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>4-bit, PostScript halftoning +<tr valign=top> <td> + <td><b><tt>stcany_h.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>4-bit, PostScript halftoning +<tr> <td> +<tr> <th align=left colspan=6>Original Epson Stylus and Stylus Pro Color +<tr valign=top> <td> + <td><b><tt>stc.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>32-bit CMYK, 15-pin +<tr valign=top> <td> + <td><b><tt>stc_l.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>4-bit, PostScript halftoning, weaved noWeave +<tr valign=top> <td> + <td><b><tt>stc_h.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>32-bit CMYK, 15-pin Weave +<tr> <td> +<tr> <th align=left colspan=6>Epson Stylus Color II +<tr valign=top> <td> + <td><b><tt>stc2.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>32-bit CMYK, 20-pin, Epson Stylus Color II(s) +<tr valign=top> <td> + <td><b><tt>stc2_h.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>32-bit CMYK, 20-pin, Epson Stylus Color II +<tr valign=top> <td> + <td><b><tt>stc2s_h.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>32-bit CMYK, 20-pin, Epson Stylus Color IIs +<tr> <td> +<tr> <th align=left colspan=6>Epson Stylus Color 200 +<tr valign=top> <td> + <td><b><tt>stc200.upp</tt></b> + <td> + <td>360×720dpi + <td> + <td>Plain Paper +<tr> <td> +<tr> <th align=left colspan=6>Epson Stylus Color 300 +<tr valign=top> <td> + <td><b><tt>stc300.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>32-bit CMYK, plain paper +<tr valign=top> <td> + <td><b><tt>stc300bl.upp</tt></b> + <td> + <td>180×180dpi + <td> + <td>black only, plain paper +<tr valign=top> <td> + <td><b><tt>stc300bm.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>black only, plain paper +<tr> <td> +<tr> <th align=left colspan=6>Epson Stylus Color 500 (good transfer curves for plain paper) +<tr valign=top> <td> + <td><b><tt>stc500p.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>32-bit CMYK, noWeave, plain paper +<tr valign=top> <td> + <td><b><tt>stc500ph.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>32-bit CMYK, noWeave, plain paper +<tr> <td> +<tr> <th align=left colspan=6>Epson Stylus Color 600, 32/90-inch weaving +<tr valign=top> <td> + <td><b><tt>stc600pl.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>32-bit CMYK, 32-pin, plain paper +<tr valign=top> <td> + <td><b><tt>stc600p.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>32-bit CMYK, 32-pin, plain paper +<tr valign=top> <td> + <td><b><tt>stc600ih.upp</tt></b> + <td> + <td>1440×720dpi + <td> + <td>32-bit CMYK, 30-pin, inkjet paper +<tr> <td> +<tr> <th align=left colspan=6>Epson Stylus Color 640 +<tr valign=top> <td> + <td><b><tt>stc640p.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>plain paper? + + + +<tr valign=top> <td> + <td><b><tt>st640p.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>CMYK, plain paper +<tr valign=top> <td> + <td><b><tt>st640pg.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>grayscale, plain paper +<tr valign=top> <td> + <td><b><tt>st640pl.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>CMYK, plain paper +<tr valign=top> <td> + <td><b><tt>st640plg.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>grayscale, plain paper +<tr valign=top> <td> + <td><b><tt>st640ih.upp</tt></b> + <td> + <td>1440×720dpi + <td> + <td>CMYK, inkjet paper +<tr valign=top> <td> + <td><b><tt>st640ihg.upp</tt></b> + <td> + <td>1440×720dpi + <td> + <td>grayscale, inkjet paper + + + + + + +<tr> <td> +<tr> <th align=left colspan=6>Epson Stylus Color 800, 64/180-inch weaving +<tr valign=top> <td> + <td><b><tt>stc800pl.upp</tt></b> + <td> + <td>360×360dpi + <td> + <td>32-bit CMYK, 64-pin, plain paper +<tr valign=top> <td> + <td><b><tt>stc800p.upp</tt></b> + <td> + <td>720×720dpi + <td> + <td>32-bit CMYK, 64-pin, plain paper +<tr valign=top> <td> + <td><b><tt>stc800ih.upp</tt></b> + <td> + <td>1440×720dpi + <td> + <td>32-bit CMYK, 62-pin, inkjet paper +<tr valign=top> <td> + <td><b><tt>stc1520.upp</tt></b> + <td> + <td>1440×720dpi + <td> + <td>32-bit CMYK, 62-pin, inkjet paper +<tr> <td> +<tr> <th align=left colspan=6>Sun raster file +<tr valign=top> <td> + <td><b><tt>ras1.upp</tt></b> + <td> + <td>1-bit + <td> + <td>monochrome (Ghostscript) +<tr valign=top> <td> + <td><b><tt>ras3.upp</tt></b> + <td> + <td>3-bit + <td> + <td>RGB (Ghostscript) +<tr valign=top> <td> + <td><b><tt>ras4.upp</tt></b> + <td> + <td>4-bit + <td> + <td>CMYK (Ghostscript) +<tr valign=top> <td> + <td><b><tt>ras8m.upp</tt></b> + <td> + <td>8-bit + <td> + <td>grayscale (Floyd-Steinberg) +<tr valign=top> <td> + <td><b><tt>ras24.upp</tt></b> + <td> + <td>24-bit + <td> + <td>RGB (Floyd-Steinberg) +<tr valign=top> <td> + <td><b><tt>ras32.upp</tt></b> + <td> + <td>32-bit + <td> + <td>CMYK (CMYK-Floyd-Steinberg) +</table></blockquote> + +<p> +Thanks to Danilo Beuche, Guido Classen, Mark Goldberg and Hans-Heinrich +Viehmann for providing the files for the stc200, hp690, stc500 and the +stc640. Thanks to Michael Lossin <losse@germanymail.com> for the +newer st640 parameter sets. + +<p> +Please note the following: + +<blockquote><ul> +<li>Changing the resolution with Ghostscript's +<a href="Use.htm#Resolution_switch"><b><tt>-r</tt></b> switch</a> is +usually not possible. +<li>For Epson Stylus Color models not listed above, the two +<b><tt>stc500</tt></b> variants are likely to work in addition to +<b><tt>stcany</tt></b>, but their gamma correction might be wrong. +</ul></blockquote> + +<h3><a name="Uni_state"></a>The state of this driver</h3> + +<p> +The coding of <b><tt>uniprint</tt></b> was triggered by the requirements of +the various Stylus Color models and some personal needs for HP and NEC +drivers. Thus the Epson models are well represented among the distributed +parameter files. When this driver entered the beta test phase, three other +drivers appreared on the scene that could be at least partially integrated +into <b><tt>uniprint</tt></b>: <b><tt>cdj850</tt></b> by Uli Wortmann +(available at <a href="http://www.erdw.ethz.ch/~bonk/hp850/hp850.html">http://www.erdw.ethz.ch/~bonk/hp850/hp850.html</a>), +<b><tt>hpdj</tt></b> by Martin Lottermoser, and <b><tt>bjc610</tt></b> by +Helmut Riegler. + +<p> +Uli addresses features of the more recent DeskJet models that will not be +available in <b><tt>uniprint</tt></b> soon. Martin taught me a lesson on +HP-PCL3 headers that will be available in <b><tt>uniprint</tt></b> +soon. Helmut in turn followed an almost similar idea, but targetted +primarily for printing on Canon printers from the pbmplus library. Starting +with version 1.68 of uniprint, BJC support is available. Work on the +<b><tt>hpdj</tt></b> integration will start after the update of my website. + +<h3><a name="Uni_background"></a>Notes on <b><tt>uniprint</tt></b>'s background</h3> + +<p> +<b><tt>uniprint</tt></b> is actually an update of <b><tt>stcolor</tt></b>, +but much more versatile than its predecessor; <b><tt>stcolor</tt></b>, in +its turn, started as a clone of the color DeskJet family of drivers +(<b><tt>cdj</tt></b>*). Finally, <b><tt>cdj</tt></b>* can be considered an +addition of features to the simpler monochrome drivers of Ghostscript. This +addition of features is useful to get an idea of the functionality of +<b><tt>uniprint</tt></b>: + +<blockquote> +<dl> +<dt>Monochrome to advanced color (<b><tt>cdj</tt></b>*): +<dd>This adds color mapping and rendering functions to the driver. +Error diffusion is especially important for the quality of printing. +</dl> + +<dl> +<dt>HP color to Epson Color (<b><tt>stcolor</tt></b>) +<dd>The Epson Stylus Color offered two features simultaneously: it could +produce 720×720dpi output and it could soak the paper. In other +words, it required more color management features inside the driver. This +is still the major conceptual difference in the data generation for HP and +Epson printers. +</dl> + +<dl> +<dt>Weaving techniques (<b><tt>stcolor</tt></b>) +<dd>Besides the internal color management, the Stylus Color did not provide +enough buffer space to operate the printer fast at 720×720dpi. The +use of weaving could yield triple the print speed. Weaving, also called +interleaving, is present in some monochrome drivers too. The new thing in +<b><tt>stcolor</tt></b> was the combination with error diffusion. +Unfortunately the weaving was somehow hard-coded, as the problems with the +newer members of the Stylus Color family of printers demonstrated. +</dl> + +<dl> +<dt>Generalized output format and weaving (<b><tt>uniprint</tt></b>) +<dd>The features mentioned above yield about 90% of +<b><tt>stcolor</tt></b>'s source code; only 10% is related to the +formatting of the output. The idea to make the output format switchable +came up soon after completing <b><tt>stcolor</tt></b>, but its final design +was triggered by the (personal) necessity to drive a NEC P2X and a +Designjet 750c. +</dl></blockquote> + +<p> +Thus <b><tt>uniprint</tt></b> accumulates almost any features that can be +found among the other printer drivers, which clearly has some disadvantage +in processing speed -- true in particular of version 1.75, since it was +targetted for functionality, and several speed-gaining features were +(knowingly) omitted. + +<p> +To summarize and to introduce the terms used in the description of the +parameters, the features of <b><tt>uniprint</tt></b> that can be +parameterized are: + +<blockquote><ul> +<li>color mapping, +<li>color rendering (error diffusion or Floyd-Steinberg), +<li>output format, including +<li>weaving. +</ul></blockquote> + +<h3><a name="Uni_make_pfile"></a>Godzilla's guide to the creation of Unified Printer Parameter (<b><tt>.upp</tt></b>) files</h3> + +<p> +Here is one of the distributed parameter files (<b><tt>stc_l.upp</tt></b>) +with some added comments. Also see the section that describes +<a href="#Uni_all_parameters">all <b><tt>uniprint</tt></b>'s parameters in +brief</a>. + +<pre> +-supModel="Epson Stylus Color I (and PRO Series), 360x360DpI, noWeave" +-sDEVICE=uniprint -- Select the driver +-dNOPAUSE -- Useful with printers +-dSAFER -- Provides some security +-dupColorModel=/DeviceCMYK -- Selects the color mapping +-dupRendering=/ErrorDiffusion -- Selects the color rendering +-dupOutputFormat=/EscP2 -- Selects the output format +-r360x360 -- Adjusts the resolution +-dupMargins="{ 9.0 39.96 9.0 9.0}" -- Establishes (L/B/R/T margins in points) +-dupComponentBits="{1 1 1 1}" -- Map: bits per component (default: 8) +-dupWeaveYPasses=4 -- Weave: Y-passes (default: 1) +-dupOutputPins=15 -- Format/weave: scans per Command +-dupBeginPageCommand="< -- Goes to the printer + 1b40 1b40 -- ESC '@' ESC '@' -> dual reset + 1b2847 0100 01 -- ESC '(' 'G' 1 0 1 -> graphics + 1b2869 0100 00 -- ESC '(' 'i' 1 0 1 -> no HW weave + 1b2855 0100 0A -- ESC '(' 'U' 1 0 10 -> 360dpi + 1b5500 -- ESC 'U' 0 -> bidir print + 1b2843 0200 0000 -- ESC '(' 'C' 2 0 xx -> page length + 1b2863 0400 0000 0000 -- ESC '(' 'c' 4 0 xxxx -> margins +>" -- as it is, unless: +-dupAdjustPageLengthCommand -- Adjust page length in BOP requested +-dupAdjustTopMarginCommand -- Adjust top margin in BOP +-dupAdjustBottomMarginCommand -- Adjust bottom margin in BOP +-dupEndPageCommand="(\033@\014)" -- Last (but one) data to the printer +-dupAbortCommand="(\033@\15\12\12\12\12 Printout-Aborted\15\014)" +</pre> + +<p> +That's short, and if one removes <b><tt>upWeaveYPasses</tt></b> and +<b><tt>upOutputPins</tt></b> it becomes shorter, almost +<b><tt>stcany.upp</tt></b>. This miniature size is because I am most +familiar with ESC/P2, and was able to add defaults for the omitted +parameters. Now a few notes about the parameters used in this example: + +<ul> +<li><b><tt>upModel</tt></b> is a string serving as a comment (and nothing else). + +<li><a href="Use.htm#Output_device"><b><tt>DEVICE</tt></b></a>, +<a href="Use.htm#NoPause"><b><tt>NOPAUSE</tt></b></a>, <a +href="Use.htm#Safer"><b><tt>SAFER</tt></b></a> are well-known Ghostscript +parameters described in the <a href="Use.htm">usage documentation</a>. + +<li><b><tt>upColorModel</tt></b> is one of major <b><tt>uniprint</tt></b> +parameters: it selects the color mapping and in turn the PostScript color +model. It supports the devices <b><tt>/DeviceGray</tt></b>, <b><tt>/DeviceRGBW</tt></b>, <b><tt>/DeviceRGB</tt></b>, <b><tt>/DeviceCMYK</tt></b>, and <b><tt>/DeviceCMYKgenerate</tt></b>. + +<li><b><tt>upRendering</tt></b> selects the (color) rendering, supporting +the values <b><tt>/ErrorDiffusion</tt></b> and <b><tt>/FSCMYK32</tt></b>. +<b><tt>/ErrorDiffusion</tt></b> is similar to <b><tt>fsmono</tt></b>, +<b><tt>fsrgb</tt></b> and <b><tt>fsx4</tt></b> of <b><tt>stcolor</tt></b>, +while <b><tt>/FSCMYK32</tt></b> is (almost) identical to +<b><tt>fscmyk</tt></b> and <b><tt>hscmyk</tt></b>, but is restricted to +32-bit data and should be used in conjunction with +<b><tt>/DeviceCMYKgenerate</tt></b>. + +<li><b><tt>upOutputFormat</tt></b> selects the output method, supporting the values +<b><tt>/SunRaster</tt></b>, <b><tt>/Epson</tt></b>, <b><tt>/EscP2</tt></b>, <b><tt>/EscP2XY</tt></b>, and<b><tt>/Pcl</tt></b>. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>/SunRaster</tt></b> + <td> + <td>creates Sun raster files and requires no other parameters +<tr valign=top> <td><b><tt>/Epson</tt></b> + <td> + <td>is used for the elderly ESC/P format (used by many printers) +<tr valign=top> <td><b><tt>/EscP2</tt></b> + <td> + <td>is used by more recent Epson printers (no X weaving supported) +<tr valign=top> <td><b><tt>/EscP2XY</tt></b> + <td> + <td>supports X-Weaving, used with 1440dpi printers and in <b><tt>stc2s_h</tt></b> +<tr valign=top> <td><b><tt>/Pcl</tt></b> + <td> + <td>HP PCL/RTL-style output formatter without weaving +</table></blockquote> + +<li><b><tt>-r360x360</tt></b> is Ghostscript's standard +<a href="Use.htm#Resolution_switch">resolution switch</a>. + +<li><b><tt>upMargins="{ 9.0 39.96 9.0 9.0}"</tt></b> +has function similar to the Ghostscript parameter +<b><tt>.HWMargins</tt></b>: it sets the left, bottom, right, and top +margins in points. <b><tt>uniprint</tt></b> provides this parameter to +enable automatic left-right exchange if <b><tt>upYFlip</tt></b> is active. + +<li><b><tt>upComponentBits</tt></b> is an array of integers that selects +the bits stored in raster memory, by default 8 bits per component. In this +example, 1 bit is selected for each component, thus turning down the +Floyd-Steinberg algorithm (but still carrying out the time-consuming +computation). The related parameter "<b><tt>upComponentShift</tt></b>" +controls positioning the components within raster memory. Each of the +numbers given corresponds to a component which depends on the selected +"<b><tt>upColorModel</tt></b>": + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td align=center> + <td> + <td align=center><b><tt>/DeviceGray</tt></b> + <td> + <td align=center><b><tt>/DeviceRGBW</tt></b> + <td> + <td align=center><b><tt>/DeviceRGB</tt></b> + <td> + <td align=center><b><tt>/DeviceCMYK</tt></b> + <td> + <td align=center><b><tt>/DeviceCMYKgenerate</tt></b> +<tr> <td colspan=11><hr> +<tr valign=top> <td align=center>0 + <td> + <td align=center>White + <td> + <td align=center>White + <td> + <td align=center>Red + <td> + <td align=center>Black + <td> + <td align=center>Black +<tr valign=top> <td align=center>1 + <td> + <td align=center>-- + <td> + <td align=center>Red + <td> + <td align=center>Green + <td> + <td align=center>Cyan + <td> + <td align=center>Cyan +<tr valign=top> <td align=center>2 + <td> + <td align=center>-- + <td> + <td align=center>Green + <td> + <td align=center>Blue + <td> + <td align=center>Magenta + <td> + <td align=center>Magenta +<tr valign=top> <td align=center>3 + <td> + <td align=center>-- + <td> + <td align=center>Blue + <td> + <td align=center>-- + <td> + <td align=center>Yellow + <td> + <td align=center>Yellow +</table> + +<p> +This order may not be suitable for some printers, so another parameter +"<b><tt>upOutputComponentOrder</tt></b>", also an array of integers, +selects the output order using the numbers on the left. +</blockquote> + +<p> +One group of very important parameters not used in the example above +deserves to be mentioned here: the transfer arrays, named +"<b><tt>up</tt><em>{color}</em><tt>Transfer</tt></b>", where +<b><em>{color}</em></b> is one of the names in the table above. These are +arrays of floats in the range 0.0 - 1.0 representing the color transfer +functions. They are used during mapping and rendering. In the simplest +case, these arrays ensure an equidistant distribution of the stored values +within the device space (which means a nonlinear mapping from Ghostscript's +point of view). If the given array does not cover the entire range from 0 +to 1, which applies for the Stylus Color family at high resolution for some +media, only the relevant part gets mapped to raster memory (meaning that +is's fully utilized) and the rendering takes care of the "overhang" (in +this case the post-diffusion of 1-bit components makes sense). + +<p> +Finally an important note on the transfer arrays: for monochrome devices +the stored component is <b><tt>White</tt></b>, which is the way PostScript +defines these devices, but most printers require <b><tt>Black</tt></b>. +Thus one has to provide a falling "<b><tt>upWhiteTransfer</tt></b>" for +such printers. + +<li><b><tt>upWeaveYPasses</tt></b> is an integer that gives the number of +print head passes required to achieve the requested Ydpi. This makes sense +only if + +<li><b><tt>upOutputPins</tt></b> is set to something greater than 1. Thus +multiple pins or nozzles are transferred with a single command, and of +course such a command must be supported by the device. + +</ul> + +<p> +If no other weave parameters are given, <b><tt>uniprint</tt></b> computes +several defaults which together do no weaving. The <b><tt>/Epson</tt></b> +and <b><tt>/EscP2XY</tt></b> formats take care of +"<b><tt>upWeaveXPasses</tt></b>" too. + +<ul> + +<li><b><tt>upBeginPageCommand</tt></b> represents the data transferred to +the printer whenever a new page begins. Before that, +"<b><tt>upBeginJobCommand</tt></b>" is written to the device only once per +output file. (Intended for the HP PJL sequences). + +<li><b><tt>upAdjustBottomMarginCommand</tt></b>, +<b><tt>upAdjustMediaSize</tt></b>, +<b><tt>upAdjustPageLengthCommand</tt></b>, +<b><tt>upAdjustPageWidthCommand</tt></b>, +<b><tt>upAdjustResolutionCommand</tt></b>, and +<b><tt>upAdjustTopMarginCommand</tt></b> + +<p> +Normally <b><tt>uniprint</tt></b> does not change the +"<b><tt>upBeginPageCommand</tt></b>", nor does it provide a default. +However, if the above boolean values are set, the corresponding values are +changed (provided that the code of the formatters supports this change and +the commands to be adjusted are included in the BOP string). + +<li><b><tt>upEndPageCommand</tt></b> is the fixed termination sequence for +each page, and of course there is an "<b><tt>upEndJobCommand</tt></b>" too. + +<li><b><tt>upAbortCommand</tt></b> is written if <b><tt>uniprint</tt></b>'s +interrupt detection is enabled and a signal is caught. It replaces +"<b><tt>upEndPageCommand</tt></b>" and "<b><tt>upEndJobCommand</tt></b>", +thus allowing the indication of an aborted job. (Ghostscript gets an error +return from <b><tt>uniprint</tt></b> in this case, and abandons further +processing.) + +</ul> + +<p> +For the ESC/P(2) formats all commands represent binary data, while for +the PCL/RTL formatter some of them are formats for <b><tt>fprintf</tt></b>. These strings +<b><em>must</em></b> explicitly have a trailing "\0'. + +<p> +I should write more, but the only recommendation is to +take a look at the various parameter files. Here are a few more hints. + +<ul> +<li>If the Driver rejects a configuration, nothing happens until +<b><tt>showpage</tt></b>; then an error is raised and a message with +"CALL-REJECTED upd_print_page..." is printed on stderr. + +<li><b><tt>uniprint</tt></b> has lots of messages that can be activated by +setting bits in the preprocessor macro <b><tt>UPD_MESSAGES</tt></b>. I +usually use the compile-time option <b><tt>-DUPD_MESSAGES=0x17</tt></b> for +configuration development. (For the semantics, check the +<b><tt>UPD_M_</tt></b> macros in the source.) + +<li>A program "<b><tt>uninfo.ps</tt></b>" distributed with Ghostscript +displays interactively in alphabetical order the contents of the current +pagedevice dictionary. This includes any parameters generated or changed by +<b><tt>uniprint</tt></b>. +</ul> + +<h3><a name="Uni_all_parameters"></a>All parameters in brief</h3> + +<p> +This table gives a brief explanation of every parameter known to +<b><tt>uniprint</tt></b>, listing them in alphabetical order. "[ ]" +denotes that a parameter is an array, and "(RO)" that it is read-only. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">All <b><tt>uniprint</tt></b> parameters</font><hr> +<tr valign=bottom> + <th align=left>Parameter + <td> + <th align=left>Type + <td> + <th align=left>Use +<tr> <td colspan=5><hr> +<tr valign=top> <td><b><tt>upAbortCommand</tt></b> + <td> + <td>String + <td> + <td>End of page and file on interrupt +<tr valign=top> <td><b><tt>upAdjustBottomMarginCommand</tt></b> + <td> + <td>Bool + <td> + <td>Manipulate bottom margin in <b><tt>upBeginPageCommand</tt></b> +<tr valign=top> <td><b><tt>upAdjustMediaSizeCommand</tt></b> + <td> + <td>Bool + <td> + <td>Manipulate <b><tt>Mediasize</tt></b> [intended] +<tr valign=top> <td><b><tt>upAdjustPageLengthCommand</tt></b> + <td> + <td>Bool + <td> + <td>Manipulate page length in <b><tt>upBeginPageCommand</tt></b> +<tr valign=top> <td><b><tt>upAdjustPageWidthCommand</tt></b> + <td> + <td>Bool + <td> + <td>Manipulate page width in <b><tt>upBeginPageCommand</tt></b> +<tr valign=top> <td><b><tt>upAdjustResolutionCommand</tt></b> + <td> + <td>Bool + <td> + <td>Manipulate resolution +<tr valign=top> <td><b><tt>upAdjustTopMarginCommand</tt></b> + <td> + <td>Bool + <td> + <td>Manipulate top margin in <b><tt>upBeginPageCommand</tt></b> +<tr valign=top> <td><b><tt>upBeginJobCommand</tt></b> + <td> + <td>String + <td> + <td>Begin each output file +<tr valign=top> <td><b><tt>upBeginPageCommand</tt></b> + <td> + <td>String + <td> + <td>Begin each page +<tr valign=top> <td><b><tt>upBlackTransfer</tt></b> + <td> + <td>Float[ ] + <td> + <td>Black transfer (CMYK only!) +<tr valign=top> <td><b><tt>upBlueTransfer</tt></b> + <td> + <td>Float[ ] + <td> + <td>Blue transfer +<tr valign=top> <td><b><tt>upColorInfo</tt></b> + <td> + <td>Int[ ] + <td> + <td>struct <b><tt>gx_device_color_info</tt></b> +<tr valign=top> <td><b><tt>upColorModel</tt></b> + <td> + <td>Name + <td> + <td>Select color mapping +<tr valign=top> <td><b><tt>upColorModelInitialized</tt></b> + <td> + <td>Bool (RO) + <td> + <td>Color mapping OK +<tr valign=top> <td><b><tt>upComponentBits</tt></b> + <td> + <td>Int[ ] + <td> + <td>Bits stored per component +<tr valign=top> <td><b><tt>upComponentShift</tt></b> + <td> + <td>Int[ ] + <td> + <td>Positioning within <b><tt>gx_color_index</tt></b> +<tr valign=top> <td><b><tt>upCyanTransfer</tt></b> + <td> + <td>Float[ ] + <td> + <td>Cyan transfer +<tr valign=top> <td><b><tt>upEndJobCommand</tt></b> + <td> + <td>String + <td> + <td>End each file unless <b><tt>upAbortCommand</tt></b> +<tr valign=top> <td><b><tt>upEndPageCommand</tt></b> + <td> + <td>String + <td> + <td>End each page unless <b><tt>upAbortCommand</tt></b> +<tr valign=top> <td><b><tt>upErrorDetected</tt></b> + <td> + <td>Bool (RO) + <td> + <td>Severe (VM) error, not fully operational +<tr valign=top> <td><b><tt>upFSFixedDirection</tt></b> + <td> + <td>Bool + <td> + <td>Inhbits direction toggling in rendering +<tr valign=top> <td><b><tt>upFSProcessWhiteSpace</tt></b> + <td> + <td>Bool + <td> + <td>Causes white-space rendering +<tr valign=top> <td><b><tt>upFSReverseDirection</tt></b> + <td> + <td>Bool + <td> + <td>Run rendering in reverse (if fixed) +<tr valign=top> <td><b><tt>upFSZeroInit</tt></b> + <td> + <td>Bool + <td> + <td>Non-random rendering initialization +<tr valign=top> <td><b><tt>upFormatXabsolute</tt></b> + <td> + <td>Bool + <td> + <td>Write absolute X coordinates +<tr valign=top> <td><b><tt>upFormatYabsolute</tt></b> + <td> + <td>Bool + <td> + <td>Write absolute Y coordinates +<tr valign=top> <td><b><tt>upGreenTransfer</tt></b> + <td> + <td>Float[ ] + <td> + <td>Green transfer +<tr valign=top> <td><b><tt>upMagentaTransfer</tt></b> + <td> + <td>Float[ ] + <td> + <td>Magenta transfer +<tr valign=top> <td><b><tt>upMargins</tt></b> + <td> + <td>Float[ ] + <td> + <td>L/B/R/T margins in points +<tr valign=top> <td><b><tt>upModel</tt></b> + <td> + <td>String + <td> + <td>Comment string, holds some info +<tr valign=top> <td><b><tt>upOutputAborted</tt></b> + <td> + <td>Bool (RO) + <td> + <td>Caught an interrupt +<tr valign=top> <td><b><tt>upOutputBuffers</tt></b> + <td> + <td>Int + <td> + <td>Number of rendering buffers (2^<small><sup><b>N</b></sup></small>) +<tr valign=top> <td><b><tt>upOutputComponentOrder</tt></b> + <td> + <td>Int[ ] + <td> + <td>Order of components when printing +<tr valign=top> <td><b><tt>upOutputComponents</tt></b> + <td> + <td>Int + <td> + <td>Number of written components, not fully operational +<tr valign=top> <td><b><tt>upOutputFormat</tt></b> + <td> + <td>Name + <td> + <td>Select output format +<tr valign=top> <td><b><tt>upOutputFormatInitialized</tt></b> + <td> + <td>Bool (RO) + <td> + <td>Format data OK +<tr valign=top> <td><b><tt>upOutputHeight</tt></b> + <td> + <td>Int + <td> + <td>Output height in pixels +<tr valign=top> <td><b><tt>upOutputPins</tt></b> + <td> + <td>Int + <td> + <td>Number of pins / nozzles per command +<tr valign=top> <td><b><tt>upOutputWidth</tt></b> + <td> + <td>Int + <td> + <td>Output width in pixels +<tr valign=top> <td><b><tt>upOutputXOffset</tt></b> + <td> + <td>Int + <td> + <td>Offset in pixels, if <b><tt>upFormatXabsolute</tt></b> +<tr valign=top> <td><b><tt>upOutputXStep</tt></b> + <td> + <td>Int + <td> + <td>Divisor or multiplier for X coords +<tr valign=top> <td><b><tt>upOutputYOffset</tt></b> + <td> + <td>Int + <td> + <td>Offset in pixels, if <b><tt>upFormatYabsolute</tt></b> +<tr valign=top> <td><b><tt>upOutputYStep</tt></b> + <td> + <td>Int + <td> + <td>Divisor or multiplier for Y coords +<tr valign=top> <td><b><tt>upRasterBufferInitialized</tt></b> + <td> + <td>Bool (RO) + <td> + <td>GS buffer OK +<tr valign=top> <td><b><tt>upRedTransfer</tt></b> + <td> + <td>Float[ ] + <td> + <td>Red transfer +<tr valign=top> <td><b><tt>upRendering</tt></b> + <td> + <td>Name + <td> + <td>Select rendering algorithm +<tr valign=top> <td><b><tt>upRenderingInitialized</tt></b> + <td> + <td>Bool (RO) + <td> + <td>Rendering parameters OK +<tr valign=top> <td><b><tt>upSelectComponentCommands</tt></b> + <td> + <td>String[ ] + <td> + <td>Establish color (output order!) +<tr valign=top> <td><b><tt>upSetLineFeedCommand</tt></b> + <td> + <td>String + <td> + <td>Adjust linefeed (Epson only) +<tr valign=top> <td><b><tt>upVersion</tt></b> + <td> + <td>String (RO) + <td> + <td>Source code version +<tr valign=top> <td><b><tt>upWeaveFinalPins</tt></b> + <td> + <td>Int[ ] + <td> + <td>Number of bottom pins on EOP passes +<tr valign=top> <td><b><tt>upWeaveFinalScan</tt></b> + <td> + <td>Int + <td> + <td>Begin EOP passes (Y-coord) +<tr valign=top> <td><b><tt>upWeaveFinalXStarts</tt></b> + <td> + <td>Int[ ] + <td> + <td>X-pass indices for EOP passes +<tr valign=top> <td><b><tt>upWeaveFinalYFeeds</tt></b> + <td> + <td>Int[ ] + <td> + <td>Y increments for EOP passes +<tr valign=top> <td><b><tt>upWeaveInitialPins</tt></b> + <td> + <td>Int[ ] + <td> + <td>Number of top pins on BOP passes +<tr valign=top> <td><b><tt>upWeaveInitialScan</tt></b> + <td> + <td>Int + <td> + <td>End BOP passes (Y coord) +<tr valign=top> <td><b><tt>upWeaveInitialXStarts</tt></b> + <td> + <td>Int[ ] + <td> + <td>X-pass indices for BOP passes +<tr valign=top> <td><b><tt>upWeaveInitialYFeeds</tt></b> + <td> + <td>int[ ] + <td> + <td>Y increments for BOP passes +<tr valign=top> <td><b><tt>upWeavePasses</tt></b> + <td> + <td>Int + <td> + <td>XPasses × YPasses +<tr valign=top> <td><b><tt>upWeaveXPasses</tt></b> + <td> + <td>Int + <td> + <td>Number of X passes +<tr valign=top> <td><b><tt>upWeaveXStarts</tt></b> + <td> + <td>Int[ ] + <td> + <td>X-pass indices for normal passes +<tr valign=top> <td><b><tt>upWeaveYFeeds</tt></b> + <td> + <td>Int[ ] + <td> + <td>Y increments for normal passes +<tr valign=top> <td><b><tt>upWeaveYOffset</tt></b> + <td> + <td>Int + <td> + <td>Number of blank or incomplete scans at BOP +<tr valign=top> <td><b><tt>upWeaveYPasses</tt></b> + <td> + <td>Int + <td> + <td>Number of X passes +<tr valign=top> <td><b><tt>upWhiteTransfer</tt></b> + <td> + <td>Float[ ] + <td> + <td>White transfer (monochrome devices!) +<tr valign=top> <td><b><tt>upWriteComponentCommands</tt></b> + <td> + <td>String[ ] + <td> + <td>Commands to write each component +<tr valign=top> <td><b><tt>upWroteData</tt></b> + <td> + <td>Bool (RO) + <td> + <td>Something (<b><tt>BeginJob</tt></b>) written to output +<tr valign=top> <td><b><tt>upXMoveCommand</tt></b> + <td> + <td>String + <td> + <td>X positioning command +<tr valign=top> <td><b><tt>upXStepCommand</tt></b> + <td> + <td>String + <td> + <td>Single step to the right +<tr valign=top> <td><b><tt>upYFlip</tt></b> + <td> + <td>Bool + <td> + <td>Flips output along the Y axis +<tr valign=top> <td><b><tt>upYMoveCommand</tt></b> + <td> + <td>String + <td> + <td>Y positioning command +<tr valign=top> <td><b><tt>upYStepCommand</tt></b> + <td> + <td>String + <td> + <td>Single step down +<tr valign=top> <td><b><tt>upYellowTransfer</tt></b> + <td> + <td>Float[ ] + <td> + <td>Yellow transfer +</table></blockquote> + +<h3><a name="Uni_honors"></a><b><tt>uniprint</tt></b>'s Roll of Honor</h3> + +<p> +I should mention all of the people who were involved in +<b><tt>stcolor</tt></b>'s evolution, but I've decided to start from scratch +here for <b><tt>uniprint</tt></b>: + +<blockquote> +<dl> +<dt>John P. Beale +<dd>for testing the <b><tt>stc600</tt></b> modes +<dt>Bill Davidson +<dd>who triggered some weaving research and tested <b><tt>stc2s_h</tt></b> +<dt>L. Peter Deutsch +<dd>who triggered ease of configuration +<dt>Mark Goldberg +<dd>who prepared the <b><tt>stc500</tt></b> transfers +<dt>Scott F. Johnston and Scott J. Kramer +<dd>for testing the <b><tt>stc800</tt></b> modes +<dt>Martin Lottermoser +<dd>for his great commented H-P DeskJet driver +<dt>Helmut Riegler +<dd>for the BJC extension +<dt>Hans-Gerd Straeter +<dd>for some measured transfer curves and more +<dt>Uli Wortmann +<dd>for discussions and his <b><tt>cdj850</tt></b> driver +<dt>My family +<dd>for tolerating my printer-driver hacking +</dl> +</blockquote> + +<address> +Gunther Hess<br> +Duesseldorfer Landstr. 16b<br> +D-47249 Duisburg<br> +Germany<br> ++49 203 376273 telephone (MET evening hours)<br> +<<a href="mailto:ghess@elmos.de">ghess@elmos.de</a>> +</address> +<h3><a name="Uni_weaving_howto"></a><tt>Uniprint</tt> weaving parameters howto</h3> +This section was contributed by Glenn Ramsey.<p> +<p>I wrote this because the documentation was very brief and I really struggled +with it for a while, but it is very simple once you understand what is going +on. +<p>This only describes how to work out the Y parameters, I haven't looked +at the X parameters yet. +<ol> +<li> +<b>Determine the nozzle geometry (upOutputPins)</b> +<p> +You need to know how many nozzles the printer has and the spacing between +them. Usually you can find this out from the printer manual, or the printer +supplier, but you may have to dissect a couple of printer output files +produced with the driver supplied with the printer. There is a utility +called escp2ras<a href="#escp2ras"><sup>*</sup></a> that will help with that. +Sometimes the term pin is used instead of nozzle but they mean the same thing. +<p>The number of nozzles will be the value assigned to the upOutputPins +parameter. +<p>Actually you don't have to print with all the pins available but for +the purpose of demonstration I'll assume that we are using them all. +<p> +<a name="escp2ras"></a>* escp2ras is available from Gunther Hess' page at <a href="http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html">http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html</a> +</li> +<p> +<li><b>Determine how many passes are required (upWeaveYPasses)</b> +<p>The number of passes required is going to depend on the required resolution +and the nozzle spacing. +<blockquote> +<tt>passes = resolution * nozzle spacing +</tt> +</blockquote> +This will be the value assigned to the upWeaveYPasses parameter. +<p>For example if the desired resolution is 360 dpi and the nozzles are +spaced at 1/90in then 360 * 1/90 = 4 passes are required. For 720 dpi 8 +passes would be required. The printer would, of course, have to be capable +of moving the paper in increments of either 360 or 720 dpi too. +</li> +<p> +<li> +<b>Determine the normal Y feed increment (upWeaveYFeeds)</b> +<p> +You need to work out how much to feed the paper so that when the paper +has moved by one head length in however many passes you have then each +row space on the paper has been passed over by at least one nozzle. There +will be one feed value for each pass and the feed values must comply with +the following rules: +<blockquote> +<tt> +<p>sum of feeds = passes * nozzles +<br>feed%passes != 0 (feed is not exactly divisible by passes) +<br>sum of (nozzles - feed) = 0 +</tt> +</blockquote> +<p>For example if passes=4 and nozzles=15, then sum of feeds=60. The feed +values could be 1,1,1,57 or 15,15,15,15 or 14,15,18,13. +<p>These values will be assigned to the upWeaveYFeeds parameter. +<p>You would need to experiment to see what combination looks best on the +printer. +<p>I found it convenient to draw several lines of nozzles and then move +them around to see how the different combinations would fill the paper. +A computer drawing tool makes this easier than pencil and paper (I used +Dia, a GNOME app). The number of nozzles would probably be be a good place +to start. +<p>Remember that if the number of passes is more than 1 then the feed increment +will be less than the nozzle spacing and <tt>passes × feed increment size</tt> +must equal the physical distance between each nozzle. +</li> +<p> +<li> +<b>Determine the beginning of page pins (upWeaveInitialPins)</b> +<p> +These values will be assigned to the upWeaveInitialPins parameter and are +the numbers of nozzles to operate in each of the initial passes at the top +of a page. The nozzles that the values refer to are the topmost nozzles +on the head, nearest the top margin. If the image doesn't start at the +top margin then uniprint doesn't use these feeds. +<p>I don't know a mathematical relation for this except that at least one +of the values must be the number of nozzles, but I'm sure that there must +be one. I used a graphical method, the description that follows refers +to the ascii diagram in below. +<p>Draw a line of nozzles for each pass arranged as they would be using +the normal Y feed increment determined in step 3. In the diagram below +this would be passes 5-8. +<p>Draw a line of nozzles that would print just before the first normal +pass. The feed increment for this pass will be close to and most likely +1 or 2 units less than the feed increment of the last normal pass. In the +example below this line is pass 4 and the feed increment is 13 whereas +the normal feed increment is 15. +<p>Draw each pass before that with a small feed increment so that if all +of the nozzles appearing above the first nozzle of the first normal pass +operate then all of the spaces will be filled. This feed increment is usually +1 except in cases where some jiggery pokery is going on to make the printer +print at an apparent higher resolution than the nozzle diameter. +<p>Now select the nozzles that will operate in each of theses initial passes +so that the paper is filled. In each pass the nozzles must be adjacent +to each other and at least one of the passes will have all the nozzles +operating. I suspect that for each combination of normal Y feed increments +there will only be one set of valid beginning of page increments. +</li> +</ol> +<h4>Example: stc.upp from Aladdin Ghostscript 6.01</h4> +15 nozzles spaced at 1/90 in, 360 dpi requires 4 passes. +<blockquote><tt><pre> +-dupWeaveYPasses=4 +-dupOutputPins=15 +-dupWeaveYFeeds="{15 15 15 15}" +-dupWeaveInitialYFeeds="{1 1 1 13}" +-dupWeaveInitialPins="{ 4 15 11 7}" +</pre></tt></blockquote> +The following diagram shows which nozzles operate during each pass. +<br>Passes 1-4 are beginning of page passes and passes 5-8 are normal passes. +<blockquote> +<p>x=nozzle operates, o=nozzle not used in this pass<tt></tt> +<p><tt> 1 2 3 4 5 6 7 8 - pass no</tt> +<br><tt>0 x</tt> +<br><tt>1 x</tt> +<br><tt>2 x</tt> +<br><tt>3 x</tt> +<br><tt>4 x</tt> +<br><tt>5 x</tt> +<br><tt>6 x</tt> +<br><tt>7 x</tt> +<br><tt>8 x</tt> +<br><tt>9 x</tt> +<br><tt>0 x</tt> +<br><tt>1 x</tt> +<br><tt>2 x</tt> +<br><tt>3 x</tt> +<br><tt>4 x</tt> +<br><tt>5 x</tt> +<br><tt>6 o x</tt> +<br><tt>7 x</tt> +<br><tt>8 x</tt> +<br><tt>9 x</tt> +<br><tt>0 o x</tt> +<br><tt>1 x</tt> +<br><tt>2 x</tt> +<br><tt>3 x</tt> +<br><tt>4 o x</tt> +<br><tt>5 x</tt> +<br><tt>6 x</tt> +<br><tt>7 x</tt> +<br><tt>8 o x</tt> +<br><tt>9 x</tt> +<br><tt>0 x</tt> +<br><tt>1 o x</tt> +<br><tt>2 o x</tt> +<br><tt>3 x</tt> +<br><tt>4 x</tt> +<br><tt>5 o x</tt> +<br><tt>6 o x</tt> +<br><tt>7 x</tt> +<br><tt>8 x</tt> +<br><tt>9 o x</tt> +<br><tt>0 o x</tt> +<br><tt>1 x</tt> +<br><tt>2 x</tt> +<br><tt>3 o x</tt> +<br><tt>4 o x</tt> +<br><tt>5 x</tt> +<br><tt>6 o +x</tt> +<br><tt>7 o x</tt> +<br><tt>8 o x</tt> +<br><tt>9 x</tt> +<br><tt>0 o +x</tt> +<br><tt>1 o x</tt> +<br><tt>2 o x</tt> +<br><tt>3 x</tt> +<br><tt>4 o +x</tt> +<br><tt>5 o x</tt> +<br><tt>6 o x</tt> +<br><tt>7 x</tt> +<br><tt>8 o +x</tt> +<br><tt>9 o x</tt> +<br><tt>0 x</tt> +<br><tt>1 +x</tt> +<br><tt>2 +x</tt> +<br><tt>3 x</tt> +<br><tt>4 x</tt> +<br><tt>5 +x</tt> +<br><tt>6 +x</tt> +<br><tt>7 x</tt> +<br><tt>8 x</tt> +<br><tt>9 +x</tt> +<br><tt>0 +x</tt> +<br><tt>1 x</tt> +<br><tt>2 x</tt> +<br><tt>3 +x</tt> +<br><tt>4 +x</tt> +<br><tt>5 x</tt> +<br><tt>6</tt> +<br><tt>7 +x</tt> +<br><tt>8 +x</tt> +<br><tt>9 x</tt> +<br><tt>0</tt> +<br><tt>1 +x</tt> +<br><tt>2 +x</tt> +<br><tt>3 x</tt> +<br><tt>4</tt> +<br><tt>5 +x</tt> +<br><tt>6 +x</tt> +<br><tt>7 x</tt> +<br><tt>8</tt> +<br><tt>9 +x</tt> +<br><tt>0 +x</tt> +<br><tt>1</tt> +<br><tt>2</tt> +<br><tt>3 +x</tt> +<br><tt>4 +x</tt> +<br><tt>5</tt> +<br><tt>6</tt> +<br><tt>7 +x</tt> +<br><tt>8 +x</tt> +<br><tt>9</tt> +<br><tt>0</tt> +<br><tt>1 +x</tt> +<br><tt>2 +x</tt> +<br><tt>3</tt> +<br><tt>4</tt> +<br><tt>5 +x</tt> +<br><tt>6</tt> +<br><tt>7</tt> +<br><tt>8</tt> +<br><tt>9 +x</tt> +<br><tt>0</tt> +<br><tt>1</tt> +<br><tt>2</tt> +<br><tt>3 +x</tt> +<br><tt>4</tt> +<br><tt>5</tt> +<br><tt>6</tt> +<br><tt>7 +x</tt> +</blockquote> +<p>These parameters would also work: +<blockquote><tt><pre> +-dupWeaveYPasses=4 +-dupOutputPins=15 +-dupWeaveYFeeds="{14 15 18 13}" +-dupWeaveInitialYFeeds="{1 1 1 13}" +-dupWeaveInitialPins="{ 4 11 7 15}" +</pre></tt></blockquote> +<p> +<hr> +<h3><a name="Uni_esc300"></a>Extension to <tt>uniprint</tt> for the Epson Stylus Color 300</h3> +This section was contributed by Glenn Ramsey.<p> +The Epson Stylus Color 300 uses a different command set to other Epson +Stylus Color printers that use the ESC/P2 language. As far as I can +tell its commands are a subset of ESC/P2. In ESC/P2 the colour to be +printed is selected by a 'set colour' command and then the data sent +is only printed in that colour until the colour is changed with another +'set colour' command. The Stylus Color 300 lacks this functionality. +The data sent to the printer maps directly to the ink nozzles and colour +of an output scan line in the printed output is determined by the position +of the scan line within the data. This means that the driver must know +how the nozzles are arranged and must format the output accordingly. +The extension adds a format that I have called EscNozzleMap and adds some + additional parameters to uniprint.<br> +<ul> + <li><b><tt>upOutputFormat</tt></b>selects the output method, and should be set to the value +<b><tt>/EscNozzleMap</tt></b> to select this format. + <blockquote> + <table cellpadding="0" cellspacing="0"> + <tbody> + <tr valign="Top"> + <td><b><tt>/EscNozzleMap</tt></b></td> + <td> </td> + <td>produces output for the Epson Stylus Color 300 + </td> + </tr> + <tbody> + </table> + </blockquote> +</ul> + +<blockquote> + <table cellpadding="0" cellspacing="0"> + <tbody> + <tr> + <th colspan="5" bgcolor="#cccc00"> + <hr><font size="+1"><b><tt>uniprint</tt></b> parameters for the + EscNozzleMap format</font> + <hr></th> + </tr> + <tr valign="Bottom"> + <th align="Left">Parameter + </th> + <td> + </td> + <th align="Left">Type + </th> + <td> + </td> + <th align="Left">Use + </th> + </tr> + <tr> + <td colspan="5"> + <hr></td> + </tr> + <tr valign="Top"> + <td><b><tt>upNozzleMapRowsPerPass</tt></b></td> + <td> + </td> + <td>Int + </td> + <td> + </td> + <td>output rows to generate for each pass of the head + </td> + </tr> + <tr valign="Top"> + <td><b><tt>upNozzleMapPatternRepeat</tt></b></td> + <td> + </td> + <td>Int + </td> + <td> + </td> + <td>no. of rows that correspond to the repeat pattern of the + nozzles + </td> + </tr> + <tr valign="Top"> + <td><b><tt>upNozzleMapRowMask</tt></b></td> + <td> + </td> + <td>Int[] + </td> + <td> + </td> + <td>mask indicating the colour of the nozzles + </td> + </tr> + <tr valign="Top"> + <td><b><tt>upNozzleMapMaskScanOffset</tt></b></td> + <td> + </td> + <td>Int[] + </td> + <td> + </td> + <td>mask indicating the physical position of the nozzles + </td> + </tr> + </tbody> + </table> +</blockquote> + +<h4>A more detailed description of the new parameters</h4> +<ul> + <li><b><tt>upNozzleMapRowsPerPass</tt></b><br> + The number of rows of data that are required to address all nozzles for a + single pass of the head. There will always be this number of rows of output + data generated. I'd expect it to be the same as the total number of nozzles but + it wouldn't break the formatter if it wasn't. So if you wanted to print with + only the 10th nozzle then row 10 would contain data corresponding to the bit + pattern and all of the others would be padded with zeros. + </li> + <li><b><tt>upNozzleMapPatternRepeat</tt></b><br> + The number of nozzles in each repeated group on the printing head. + This parameter must correspond with the length of the upNozzleMapRowMask array. + </li> + <li><b><tt>upNozzleMapRowMask</tt></b><br> + An array of integers that defines the colour of the nozzles on the + head and whether the nozzles will be used to print. The array index + defines the row index for the nozzle in the output data + and the value defines the colour of the nozzle. The mapping + of colours to values is defined in the table below. + <blockquote> + <table cellpadding="0" cellspacing="0"> + <tbody> + <tr valign="Bottom"> + <th align="Left">colour + </th> + <td> + </td> + <th align="center">mask value + </th> + </tr> + <tr> + <td colspan="5"> + <hr></td> + </tr> + <tr valign="Top" align="middle"> + <td><b><tt>K</tt></b></td> + <td> + </td> + <td>1 + </td> + </tr> + <tr valign="Top" align="middle"> + <td><b><tt>C</tt></b></td> + <td> + </td> + <td>2 + </tr> + <tr valign="Top" align="middle"> + <td><b><tt>M</tt></b></td> + <td> + </td> + <td>3 + </td> + </tr> + <tr valign="Top" align="middle"> + <td><b><tt>Y</tt></b></td> + <td> + </td> + <td>4 + </td> + </tr> + <tr valign="Top" align="middle"> + <td><b><tt>no data</tt></b></td> + <td> + </td> + <td>0 + </td> + </tr> + </tbody> + </table> + </blockquote> + A value of 0 means that the nozzle is not used and the row in the output data will be + padded with zeros.<br> + </li> + <li><b><tt>upNozzleMapMaskScanOffset</tt></b><br> + An array of integers that defines the physical position of the nozzles relative + to the first nozzle in the repeated group. The relative distance is measured in + printed line widths and will be different for different printing resolutions. + This parameter is used because the physical spacing of the nozzles may not + correspond to their mapping in the output data. For example the ESC300 has nozzles + physically arranged something like this: + <table> + <tr> + <td bgcolor="#00ffff"> + </td> + <td bgcolor="#ffff00"> + </td> + <td bgcolor="#000000"> + </td> + <td bgcolor="#ff00ff"> + </td> + <td bgcolor="#000000"> + </td> + <td> + </td> + <td bgcolor="#000000"> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td bgcolor="#00ffff"> + </td> + <td bgcolor="#ffff00"> + </td> + <td bgcolor="#000000"> + </td> + <td bgcolor="#ff00ff"> + </td> + <td bgcolor="#000000"> + </td> + <td> + </td> + <td bgcolor="#000000"> + </td> + <td bgcolor="#ffffff"> + </td> + </tr> + <td> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td bgcolor="#00ffff"> + </td> + <td bgcolor="#ffff00"> + </td> + <td bgcolor="#000000"> + </td> + <td bgcolor="#ff00ff"> + </td> + <td bgcolor="#000000"> + </td> + <td> + </td> + <td bgcolor="#000000"> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td> + </td> + <td bgcolor="#00ffff"> + </td> + <td bgcolor="#ffff00"> + </td> + <td>etc ... + </td> + + <tr> + </tr> + </table> + There is a one nozzle width space between the last two nozzles in each group. + In the output data the data for the last nozzle in the group would be in row 5 + (numbering starts at 0) but the nozzle is physically positioned at 6 spaces from + the first nozzle. +</ul> +<h4>Example 1 - Epson Stylus Color 300 - 360 dpi colour</h4> +<blockquote><pre> +-dupWeaveYPasses=6 +-dupOutputPins=11 +-dupWeaveYFeeds="{ 11 11 11 11 11 11 }" +-dupWeaveInitialYFeeds="{ 1 1 1 1 1 7 }" +-dupWeaveInitialPins="{ 2 11 9 7 5 3 }" +-dupNozzleMapRowsPerPass=64 +-dupNozzleMapPatternRepeat=6 +-dupNozzleMapRowMask="{ 2 4 1 3 0 0 }" +-dupNozzleMapMaskScanOffset="{ 0 1 2 3 0 0 }" +</pre></blockquote> +The weaving parameters are the same as for any other uniprint driver +but they must be consistent with the nozzle map parameters. In this printer +the coloured nozzles are spaced at 1/60" so 6 passes are required for 360 +dpi resolution. +<p> +In the example there are 64 rows of data required for each head pass. Each +row must be completely filled with data for each pass so if certain nozzles +do not print in the pass then the rows for those nozzles will be padded +with zeroes. +<P> +The row mask translates to "C Y K M 0 0" so in the output data rows 0,7,13,... +will contain data for cyan, rows 1,8,14,... will contain data for yellow, etc. Rows 4,10,16,... +and 5, 11,15,... will always be padded with zeroes. The <i>upNozzleMapPatternRepeat</i> +parameter defines the length of the mask. +<p> +The row mask is repeated for each group of <i>upNozzleMapPatternRepeat</i> rows +in the output data. In this case there are 64 rows so there will be 10 groups +of "C Y K M 0 0" followed by "C Y K M" which is equivalent to 11 output +pins. +<P> +The <i>upNozzleMaskScanOffset</i> array indicates how the data from the scan +buffer is mapped to the output data. The data is presented to the formatter +as a buffer of four colour scanlines. The index of the scanline being printed, +lets call it y, always corresponds, in this example, to the physical position of +the cyan nozzle but since the nozzles are not on the same horizontal +line then the other colours for the current pass must come from other +scanlines in the scan buffer. The example is { 0 1 2 3 0 0 }, this means that +when printing a 4 colour image the magenta data would come from scanline y+3, +the black from scanline y+2, etc. It would have been possible in this case +to use the array index instead of the <i>upNozzleMaskScanOffset</i> parameter +however the parameter is necessary to be able to use the full capability of the +printer in black only mode. + +<h4>Example 2 - Epson Stylus Color 300 - 180 dpi black only</h4> +<blockquote> +<pre> +-dupMargins="{ 9.0 39.96 9.0 9.0}" +-dupWeaveYPasses=1 +-dupOutputPins=31 +-dupNozzleMapRowsPerPass=64 +-dupNozzleMapPatternRepeat=6 +-dupNozzleMapRowMask="{ 0 0 1 0 1 1}" +-dupNozzleMapMaskScanOffset="{ 0 0 0 0 1 2 }" +</pre> +</blockquote> +In this example there is no weaving. +<p> +The ESC300 has black nozzles evenly physically arranged as K K K but the data must +be sent to the printer as 00K0KK. This is handled by the <i>upNozzleMapRowMask</i> +and <i>upNozzleMaskScanOffset</i> arrays. The <i>upNozzleMapRowMask</i> array is +{ 0 0 1 0 1 1} which translates to { 0 0 K 0 K K } so rows 0, 1 and 3 will always +contain zeros and the other rows will contain data. +<p> +The <i>upNozzleMaskScanOffset</i> array +in this case is { 0 0 0 0 1 2 } so if the data for the 1st nozzle comes from row +y in the scan buffer then the data for the 2nd and 3rd nozzles will come from rows +y+1 and y+2. + +<h4>Example 3 - Epson Stylus Color 300 - 360 dpi black only</h4> +<blockquote> +<pre> +-dupWeaveYPasses=2 +-dupOutputPins=31 +-dupWeaveYFeeds="{31 31}" +-dupWeaveInitialYFeeds="{1 31}" +-dupWeaveInitialPins="{16 31}" +-dupNozzleMapRowsPerPass=64 +-dupNozzleMapPatternRepeat=6 +-dupNozzleMapRowMask="{ 0 0 1 0 1 1}" +-dupNozzleMapMaskScanOffset="{ 0 0 0 0 2 4 }" +</pre> +</blockquote> +In this example 2 weave passes are required to achieve the desired resolution. +<p> +The <i>upNozzleMaskScanOffset</i> array in this case is { 0 0 0 0 2 4 } because +there are two weave passes so if the data for the first nozzle comes from row y +in the scan buffer then the data for the 2nd and 3rd nozzles must come from rows +y+(1*2) and y+(2*2). +<p> +<address> +Glenn Ramsey<br> +glennr at users.sourceforge.net<br> +February 2001 +</address> +<br> +<hr> + +<h2><a name="SPARCprinter"></a>Sun SPARCprinter</h2> + +<p> +This section was contributed by Martin Schulte. + +<p> +With a SPARCprinter you always buy software that enables you to do +PostScript printing on it. A page image is composed on the host, which +sends a bitmap to the SPARCprinter through a special SBUS video interface. +So the need for a Ghostscript interface to the SPARCPrinter seems low, but +on the other hand, Sun's software prints some PostScript drawings +incorrectly: some pages contain a thin vertical line of rubbish, and on +some Mathematica drawings the text at the axes isn't rotated. Ghostscript, +however, gives the correct results. Moreover, replacing proprietary +software should never be a bad idea. + +<p> +The problem is that there has yet been no effort to make the SPARCPrinter +driver behave like a BSD output filter. I made my tests using the script +shown here. + +<h3><a name="SPARC_install"></a>Installation</h3> + +<p> +Add <b><tt>sparc.dev</tt></b> to <b><tt>DEVICE_DEVS</tt></b> and compile +Ghostscript as described in the documentation on <a href="Make.htm">how to +build Ghostscript</a>. Afterwards you can use the following script as an +example for printing after modifying it with the right pathnames -- +including for <b>{GSPATH}</b> the full pathname of the Ghostscript +executable: + +<blockquote> +<pre>outcmd1='/vol/local/lib/troff2/psxlate -r' +outcmd2='<b><em>{GSPATH}</em></b> -sDEVICE=sparc -sOUTPUTFILE=/dev/lpvi0 -' + +if [ $# -eq 0 ] +then + $outcmd1 | $outcmd2 +else + cat $* | $outcmd1 | $outcmd2 +fi +</pre></blockquote> + +<h3><a name="SPARC_problems"></a>Problems</h3> + +<p> +Since <b><tt>/dev/lpi</tt></b> can be opened only for exclusive use, if +another job has it open (engine_ctl_sparc or another Ghostscript are the +most likely candidates), Ghostscript stops with "Error: /invalidfileaccess +in --.outputpage--" + +<p> +In case of common printer problems like being out of paper, a warning +describing the reason is printed to stdout. The driver tries access again +each five seconds. Due to a problem with the device driver (in the kernel) +the reason for printer failure isn't always reported correctly to the +program. This is the case, for instance, if you open the top cover (error +E5 on the printer's display). Look at the display on the printer itself if +a "Printer problem with unknown reason" is reported. Fatal errors cause +the print job to be terminated. + +<hr> + +<h2><a name="Apple"></a>Apple dot matrix printer</h2> + +<p> +This section was contributed by Mark Wedel +<<a href="mailto:master@cats.ucsc.edu">master@cats.ucsc.edu</a>>. + +<p> +The Apple Dot Matrix Printer (DMP) was a parallel predecessor to the +Imagewriter printer. As far as I know, Imagewriter commands are a superset +of the Dot Matrix printer's, so the driver should generate output that can +be printed on Imagewriters. + +<p> +To print images, the driver sets the printer for unidirectional printing +and 15 characters per inch (cpi), or 120dpi. It sets the line feed to 1/9 +inch. When finished, it sets the printer to bidirectional printing, +1/8-inch line feeds, and 12 cpi. There appears to be no way to reset the +printer to initial values. + +<p> +This code does not set for 8-bit characters (which is required). It also +assumes that carriage return-newline is needed, and not just carriage +return. These are all switch settings on the DMP, and I have configured +them for 8-bit data and carriage return exclusively. Ensure that the Unix +printer daemon handles 8-bit (binary) data properly; in my SunOS 4.1.1 +<b><tt>printcap</tt></b> file the string "<b><tt>ms=pass8,-opost</tt></b>" +works fine for this. + +<p> +Finally, you can search <b><tt>devdemp.c</tt></b> for +"<b><tt>Init</tt></b>" and "<b><tt>Reset</tt></b>" to find the strings that +initialize the printer and reset things when finished, and change them to +meet your needs. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996-2002 artofcode LLC. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> + diff --git a/Master/xemtex/doc/ghostscript/Drivers.htm b/Master/xemtex/doc/ghostscript/Drivers.htm new file mode 100644 index 00000000000..c97bfaeb642 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Drivers.htm @@ -0,0 +1,2538 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>The interface between Ghostscript and device drivers</title> +<!-- $Id: Drivers.htm,v 1.21.2.11.2.5 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: drivers.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>The interface between Ghostscript and device drivers</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Adding_drivers">Adding a driver</a> +<li><a href="#KISS">Keeping things simple</a> +<li><a href="#Structure">Driver structure</a> +<ul> +<li><a href="#Structure_definition">Structure definition</a> +<li><a href="#Sophisticated">For sophisticated developers only</a> +</ul> +<li><a href="#coordinates_and_types">Coordinates and types</a> +<ul> +<li><a href="#Coordinate_system">Coordinate system</a> +<li><a href="#Color_definition">Color definition</a> +<li><a href="#Types">Types</a> +</ul> +<li><a href="#Coding_conventions">Coding conventions</a> +<ul> +<li><a href="#Allocating_storage">Allocating storage</a> +<li><a href="#Driver_instance_allocation">Driver instance allocation</a> +</ul> +<li><a href="#Printer_drivers">Printer drivers</a> +<li><a href="#Driver_procedures">Driver procedures</a> +<ul> +<li><a href="#Life_cycle">Life cycle</a> +<li><a href="#Open_close">Open, close, sync, copy</a> +<li><a href="#Color_mapping">Color and alpha mapping</a> +<li><a href="#Pixel_level_drawing">Pixel-level drawing</a> +<ul> +<li><a href="#Bitmap_imaging">Bitmap imaging</a> +<li><a href="#Pixmap_imaging">Pixmap imaging</a> +<li><a href="#Compositing">Compositing</a> + [<a href="#S_spec">S</a>, <a href="#T_spec">T</a>, <a href="#F_spec">f</a>, + <a href="#Compositing_notes">Notes</a>] +</ul> +<li><a href="#Polygon_level_drawing">Polygon-level drawing</a> +<li><a href="#High_level_drawing">High-level drawing</a> +<ul> +<li><a href="#Paths">Paths</a> +<li><a href="#Images">Images</a> [<a href="#Images_notes">Notes</a>] +<li><a href="#Text">Text</a> [<a href="#Text_notes">Notes</a>] +</ul> +<li><a href="#Reading_bits_back">Reading bits back</a> +<li><a href="#Parameters">Parameters</a> +<ul> +<li><a href="#Default_CRD_parameters">Default color rendering dictionary (CRD) parameters</a> +</ul> +<li><a href="#External_fonts">External fonts</a> +<li><a href="#Page_devices">Page devices</a> +<li><a href="#Miscellaneous">Miscellaneous</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a> and the documentation on <a href="Make.htm">how to build +Ghostscript</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Adding_drivers"></a>Adding a driver</h2> + +<p> +To add a driver to Ghostscript, first pick a name for your device, say +"<b><tt>smurf</tt></b>". (Device names must be 1 to 8 characters, begin +with a letter, and consist only of letters, digits, and underscores. Case +is significant: all current device names are lower case.) Then all you +need do is edit <b><tt>contrib.mak</tt></b> in two places. + +<ol> +<li>The list of devices, in the section headed "Catalog". Add +<b><tt>smurf</tt></b> to the list. + +<li>The section headed "Device drivers". + +<p> +Suppose the files containing the smurf driver are called +"<b><tt>joe</tt></b>" and "<b><tt>fred</tt></b>". Then you should add the +following lines: + +<blockquote> +<pre># ------ The SMURF device ------ # + +smurf_=$(GLOBJ)joe.$(OBJ) $(GLOBJ)fred.$(OBJ) +$(DD)smurf.dev: $(smurf_) + $(SETDEV) $(DD)smurf $(smurf_) + +$(GLOBJ)joe.$(OBJ) : $(GLSRC)joe.c + $(GLCC) $(GLO_)joe.$(OBJ) $(C_) $(GLSRC)joe.c + +$(GLOBJ)fred.$(OBJ) : $(GLSRC)fred.c + $(GLCC) $(GLO_)fred.$(OBJ) $(C_) $(GLSRC)fred.c</pre> +</blockquote> + +<p> +and whatever <b><tt>joe.c</tt></b> and <b><tt>fred.c</tt></b> depend on. +If the smurf driver also needs special libraries, for instance a library +named "<b><tt>gorf</tt></b>", then the entry should look like this: + +<blockquote> +<pre>$(DD)smurf.dev : $(smurf_) + $(SETDEV) $(DD)smurf $(smurf_) + $(ADDMOD) $(DD)smurf -lib gorf</pre> +</blockquote> + +<p> +If, as will usually be the case, your driver is a printer driver (as +<a href="#Printer_drivers">discussed below</a>), the device entry should +look like this: + +<blockquote> +<pre>$(DD)smurf.dev : $(smurf_) $(GLD)page.dev + $(SETPDEV) $(DD)smurf $(smurf_)</pre> +</blockquote> + +<p> +or + +<blockquote> +<pre>$(DD)smurf.dev : $(smurf_) $(GLD)page.dev + $(SETPDEV) $(DD)smurf $(smurf_) + $(ADDMOD) $(DD)smurf -lib gorf</pre> +</blockquote> + +<p> +Note that the space before the :, and the explicit compilation rules for the +.c files, are required for portability, +</ol> + +<hr> + +<h2><a name="KISS"></a>Keeping things simple</h2> + +<p> +If you want to add a simple device (specifically, a monochrome printer), you +probably don't need to read the rest of this document; just use the code in +an existing driver as a guide. The Epson and Canon BubbleJet drivers <a +href="../src/gdevepsn.c">gdevepsn.c</a> and <a +href="../src/gdevbj10.c">gdevbj10.c</a> are good models for dot-matrix +printers, which require presenting the data for many scan lines at once; the +DeskJet/LaserJet drivers in <a href="../src/gdevdjet.c">gdevdjet.c</a> are +good models for laser printers, which take a single scan line at a time but +support data compression. For color printers, there are unfortunately no +good models: the two major color inkjet printer drivers, <a +href="../src/gdevcdj.c">gdevcdj.c</a> and <a +href="../src/gdevstc.c">gdevstc.c</a>, are far too complex to read. + +<p> +On the other hand, if you're writing a driver for some more esoteric +device, you probably do need at least some of the information in the rest +of this document. It might be a good idea for you to read it in +conjunction with one of the existing drivers. + +<p> +Duplication of code, and sheer volume of code, is a serious maintenance and +distribution problem for Ghostscript. If your device is similar to an +existing one, try to implement your driver by adding some parameterization +to an existing driver rather than by copying code to create an entirely new +source module. <a href="../src/gdevepsn.c">gdevepsn.c</a> and <a +href="../src/gdevdjet.c">gdevdjet.c</a> are good examples of this approach. + +<hr> + +<h2><a name="Structure"></a>Driver structure</h2> + +<p> +A device is represented by a structure divided into three parts: + +<ul> +<li>procedures that are (normally) shared by all instances of each device; + +<li>parameters that are present in all devices but may be different for +each device or instance; and + +<li>device-specific parameters that may be different for each instance. +</ul> + +<p> +Normally the procedure structure is defined and initialized at compile +time. A prototype of the parameter structure (including both generic and +device-specific parameters) is defined and initialized at compile time, but +is copied and filled in when an instance of the device is created. Both of +these structures should be declared as <b><tt>const</tt></b>, but for backward +compatibility reasons the latter is not. + +<p> +The <b><tt>gx_device_common</tt></b> macro defines the common structure +elements, with the intent that devices define and export a structure along +the following lines. Do not fill in the individual generic parameter values +in the usual way for C structures: use the macros defined for this purpose +in <a href="../src/gxdevice.h">gxdevice.h</a> or, if applicable, <a +href="../src/gdevprn.h">gdevprn.h</a>. + +<blockquote> +<pre>typedef struct smurf_device_s { + gx_device_common; + <b><em>... device-specific parameters ...</em></b> +} smurf_device; +smurf_device gs_smurf_device = { + <b><em>... macro for generic parameter values ...,</em></b> + { <b><em>... procedures ...</em></b> }, /* std_procs */ + <b><em>... device-specific parameter values if any ...</em></b> +};</pre> +</blockquote> + +<p> +The device structure instance <b>must</b> have the name +<b><tt>gs_smurf_device</tt></b>, where <b><tt>smurf</tt></b> is the device +name used in <b><tt>contrib.mak</tt></b>. <b><tt>gx_device_common</tt></b> +is a macro consisting only of the element definitions. + +<p> +All the device procedures are called with the device as the first argument. +Since each device type is actually a different structure type, the device +procedures must be declared as taking a <b><tt>gx_device *</tt></b> as +their first argument, and must cast it to +<b><tt>smurf_device *</tt></b> internally. For example, in the code +for the "memory" device, the first argument to all routines is called +<b><tt>dev</tt></b>, but the routines actually use <b><tt>mdev</tt></b> to +refer to elements of the full structure, using the following standard +initialization statement at the beginning of each procedure: + +<blockquote> +<pre>gx_memory_device *const mdev = (gx_device_memory *)dev;</pre> +</blockquote> + +<p> +(This is a cheap version of "object-oriented" programming: in C++, for +example, the cast would be unnecessary, and in fact the procedure table +would be constructed by the compiler.) + +<h3><a name="Structure_definition"></a>Structure definition</h3> + +<p> +You should consult the definition of struct <b><tt>gx_device_s</tt></b> in +<a href="../src/gxdevice.h">gxdevice.h</a> for the complete details of the +generic device structure. Some of the most important members of this +structure for ordinary drivers are: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>const char *dname;</tt></b> + <td> + <td>The device name +<tr valign=top> <td><b><tt>bool is_open;</tt></b> + <td> + <td>True if device has been opened +<tr valign=top> <td><b><tt>gx_device_color_info color_info;</tt></b> + <td> + <td>Color information +<tr valign=top> <td><b><tt>int width;</tt></b> + <td> + <td>Width in pixels +<tr valign=top> <td><b><tt>int height;</tt></b> + <td> + <td>Height in pixels +</table></blockquote> + +<p> +The name in the structure (<b><tt>dname</tt></b>) should be the same as the +name in <a href="../src/contrib.mak">contrib.mak</a>. + +<h3><a name="Sophisticated"></a>For sophisticated developers only</h3> + +<p> +If for any reason you need to change the definition of the basic device +structure, or to add procedures, you must change the following places: + +<blockquote><ul> +<li>This document and the <a href="News.htm">news document</a> (if you want + to keep the documentation up to date). +<li>The definition of <b><tt>gx_device_common</tt></b> and the procedures + in <a href="../src/gxdevcli.h">gxdevcli.h</a>. +<li>Possibly, the default forwarding procedures declared in + <a href="../src/gxdevice.h">gxdevice.h</a> and implemented in + <a href="../src/gdevnfwd.c">gdevnfwd.c</a>. +<li>The device procedure record completion routines in + <a href="../src/gdevdflt.c">gdevdflt.c</a>. +<li>Possibly, the default device implementation in + <a href="../src/gdevdflt.c">gdevdflt.c</a>, + <a href="../src/gdevddrw.c">gdevddrw.c</a>, and + <a href="../src/gxcmap.c">gxcmap.c</a>. +<li>The bounding box device in <a href="../src/gdevbbox.c">gdevbbox.c</a> + (probably just adding <b><tt>NULL</tt></b> procedure entries if the + new procedures don't produce output). +<li>These devices that must have complete (non-defaulted) procedure vectors: +<ul> +<li>The null device in <a href="../src/gdevnfwd.c">gdevnfwd.c</a>. +<li>The command list "device" in <a href="../src/gxclist.c">gxclist.c</a>. + This is not an actual device; it only defines procedures. +<li>The "memory" devices in <a href="../src/gdevmem.h">gdevmem.h</a> and + <b><tt>gdevm*.c</tt></b>. +<li>The halftoning device in <a href="../src/gdevht.c">gdevht.c</a>. +</ul> +<li>The clip list accumulation "device" in + <a href="../src/gxacpath.c">gxacpath.c</a>. +<li>The clipping "devices" <a href="../src/gxclip.c">gxclip.c</a>, + <a href="../src/gxclip2.c">gxclip2.c</a>, + and <a href="../src/gxclipm.c">gxclipm.c</a>. +<li>The pattern accumulation "device" in + <a href="../src/gxpcmap.c">gxpcmap.c</a>. +<li>The hit detection "device" in <a href="../src/gdevhit.c">gdevhit.c</a>. +<li>The generic printer device macros in + <a href="../src/gdevprn.h">gdevprn.h</a>. +<li>The generic printer device code in + <a href="../src/gdevprn.c">gdevprn.c</a>. +<li>The RasterOp source device in + <a href="../src/gdevrops.c">gdevrops.c</a>. +</ul></blockquote> + +<p> +You may also have to change the code for +<b><tt>gx_default_get_params</tt></b> or +<b><tt>gx_default_put_params</tt></b> in <a +href="../src/gsdparam.c">gsdparam.c</a>. + +<p> +You should not have to change any of the real devices in the standard +Ghostscript distribution (listed in <a href="../src/devs.mak">devs.mak</a> +and <a href="../src/contrib.mak">contrib.mak</a>) or any of your own +devices, because all of them are supposed to use the macros in <a +href="../src/gxdevice.h">gxdevice.h</a> or <a +href="../src/gdevprn.h">gdevprn.h</a> to define and initialize their state. + +<hr> + +<h2><a name="coordinates_and_types"></a>Coordinates and types</h2> + +<h3><a name="Coordinate_system"></a>Coordinate system</h3> + +<p> +Since each driver specifies the initial transformation from user +coordinates to device coordinates, the driver can use any coordinate system +it wants, as long as a device coordinate will fit in an +<b><tt>int</tt></b>. (This is only an issue on DOS systems, where ints are +only 16 bits. User coordinates are represented as floats.) Most current +drivers use a coordinate system with (0,0) in the upper left corner, with +<b><em>X</em></b> increasing to the right and <b><em>Y</em></b> increasing +toward the bottom. However, there is supposed to be nothing in the rest of +Ghostscript that assumes this, and indeed some drivers use a coordinate +system with (0,0) in the lower left corner. + +<p> +Drivers must check (and, if necessary, clip) the coordinate parameters given +to them: they should not assume the coordinates will be in bounds. The +<b><tt>fit_fill</tt></b> and <b><tt>fit_copy</tt></b> macros in <a +href="../src/gxdevice.h">gxdevice.h</a> are very helpful in doing this. + +<h3><a name="Color_definition"></a>Color definition</h3> + +<p> +Ghostscript represents colors internally as RGB or CMYK values. In +communicating with devices, however, it assumes that each device has a +palette of colors identified by integers (to be precise, elements of type +<b><tt>gx_color_index</tt></b>). Drivers may provide a uniformly spaced +gray ramp or color cube for halftoning, or they may do their own color +approximation, or both. + +<p> +The <b><tt>color_info</tt></b> member of the device structure defines the +color and gray-scale capabilities of the device. Its type is defined as +follows: + +<blockquote> +<pre>typedef struct gx_device_color_info_s { + int num_components; /* 1 = gray only, 3 = RGB, */ + /* 4 = CMYK */ + int depth; /* # of bits per pixel */ + gx_color_value max_gray; /* # of distinct gray levels -1 */ + gx_color_value max_rgb; /* # of distinct color levels -1 */ + /* (only relevant if num_comp. > 1) */ + gx_color_value dither_gray; /* size of gray ramp for halftoning */ + gx_color_value dither_rgb; /* size of color cube ditto */ + /* (only relevant if num_comp. > 1) */ +} gx_device_color_info;</pre> +</blockquote> + +<p> +The following macros (in <a href="../src/gxdevice.h">gxdevice.h</a>) provide +convenient shorthands for initializing this structure for ordinary +black-and-white or color devices: + +<blockquote> +<b><tt>#define dci_black_and_white</tt></b> ...<br> +<b><tt>#define dci_color(depth,maxv,dither)</tt></b> ... +</blockquote> + +<p> +The idea is that a device has a certain number of gray levels +(<b><tt>max_gray</tt></b>+1) and a certain number of colors +(<b><tt>max_rgb</tt></b>+1) that it can produce directly. When Ghostscript +wants to render a given RGB or CMYK color as a device color, it first tests +whether the color is a gray level (if <b><tt>num_components</tt></b> is 1, +it converts all colors to gray levels), and if so: + +<blockquote> +If <b><tt>max_gray</tt></b> is large (>= 31), Ghostscript asks the +device to approximate the gray level directly. If the device returns a +valid <b><tt>gx_color_index</tt></b>, Ghostscript uses it. Otherwise, +Ghostscript assumes that the device can represent +<b><tt>dither_gray</tt></b> distinct gray levels, equally spaced along the +diagonal of the color cube, and uses the two nearest ones to the desired +color for halftoning. +</blockquote> + +<p> +If the color is not a gray level: + +<blockquote> +If <b><tt>max_rgb</tt></b> is large (>= 31), Ghostscript asks the device +to approximate the color directly. If the device returns a valid +<b><tt>gx_color_index</tt></b>, Ghostscript uses it. Otherwise, +Ghostscript assumes that the device can represent + +<blockquote> +<b><tt>dither_rgb</tt></b> × <b><tt>dither_rgb</tt></b> × <b><tt>dither_rgb</tt></b> +</blockquote> + +<p> +distinct colors, equally spaced throughout the color cube, and uses two of +the nearest ones to the desired color for halftoning. +</blockquote> + +<h3><a name="Types"></a>Types</h3> + +<p> +Here is a brief explanation of the various types that appear as parameters +or results of the drivers. + +<dl> +<dt><b><tt>gx_color_value</tt></b> (defined in <b><tt>gxdevice.h</tt></b>) +<dd>This is the type used to represent RGB or CMYK color values. It is +currently equivalent to unsigned short. However, Ghostscript may use less +than the full range of the type to represent color values: +<b><tt>gx_color_value_bits</tt></b> is the number of bits actually used, +and <b><tt>gx_max_color_value</tt></b> is the maximum value, equal to +(2^<small><sup><b><tt>gx_max_color_value_bits</tt></b></sup></small>)-1. +</dl> + +<dl> +<dt><b><tt>gx_device</tt></b> (defined in <b><tt>gxdevice.h</tt></b>) +<dd>This is the device structure, as explained above. +</dl> + +<dl> +<dt><b><tt>gs_matrix</tt></b> (defined in <b><tt>gsmatrix.h</tt></b>) +<dd>This is a 2-D homogeneous coordinate transformation matrix, used by +many Ghostscript operators. +</dl> + +<dl> +<dt><b><tt>gx_color_index</tt></b> (defined in <b><tt>gxdevice.h</tt></b>) +<dd>This is meant to be whatever the driver uses to represent a device +color. For example, it might be an index in a color map, or it might be R, +G, and B values packed into a single integer. Ghostscript doesn't ever do +any computations with <b><tt>gx_color_index</tt></b> values: it gets them +from <b><tt>map_rgb_color</tt></b> or <b><tt>map_cmyk_color</tt></b> and +hands them back as arguments to several other procedures. The special +value <b><tt>gx_no_color_index</tt></b> (defined as +<b><tt>(gx_color_index)(-1)</tt></b> ) means "transparent" for some of +the procedures. The type definition is simply: + +<blockquote><b><tt> +typedef unsigned long gx_color_index; +</tt></b></blockquote> +</dl> + +<dl> +<dt><b><tt>gs_param_list</tt></b> (defined in <a +href="../src/gsparam.h">gsparam.h</a>) +<dd>This is a parameter list, which is used to read and set attributes in a +device. See the comments in <a href="../src/gsparam.h">gsparam.h</a>, and +the <a href="#Parameters">description of the <b><tt>get_params</tt></b> and +<b><tt>put_params</tt></b> procedures</a> below, for more detail. +</dl> + +<dl> +<dt><b><tt>gx_tile_bitmap</tt></b> (defined in +<a href="../src/gxbitmap.h">gxbitmap.h</a>) +<br><b><tt>gx_strip_bitmap</tt></b> (defined in +<a href="../src/gxbitmap.h">gxbitmap.h</a>) +<dd>These structure types represent bitmaps to be used as a tile for +filling a region (rectangle). <b><tt>gx_tile_bitmap</tt></b> is an older +type lacking <b><tt>shift</tt></b> and <b><tt>rep_shift</tt></b>; +<b><tt>gx_strip_bitmap</tt></b> has superseded it, and it should not be +used in new code. Here is a copy of the relevant part of the file: + +<blockquote> +<pre>/* + * Structure for describing stored bitmaps. + * Bitmaps are stored bit-big-endian (i.e., the 2^7 bit of the first + * byte corresponds to x=0), as a sequence of bytes (i.e., you can't + * do word-oriented operations on them if you're on a little-endian + * platform like the Intel 80x86 or VAX). Each scan line must start on + * a (32-bit) word boundary, and hence is padded to a word boundary, + * although this should rarely be of concern, since the raster and width + * are specified individually. The first scan line corresponds to y=0 + * in whatever coordinate system is relevant. + * + * For bitmaps used as halftone tiles, we may replicate the tile in + * X and/or Y, but it is still valuable to know the true tile dimensions + * (i.e., the dimensions prior to replication). Requirements: + * width % rep_width = 0 + * height % rep_height = 0 + * + * For halftones at arbitrary angles, we provide for storing the halftone + * data as a strip that must be shifted in X for different values of Y. + * For an ordinary (non-shifted) halftone that has a repetition width of + * W and a repetition height of H, the pixel at coordinate (X,Y) + * corresponds to halftone pixel (X mod W, Y mod H), ignoring phase; + * for a shifted halftone with shift S, the pixel at (X,Y) corresponds + * to halftone pixel ((X + S * floor(Y/H)) mod W, Y mod H). Requirements: + * strip_shift < rep_width + * strip_height % rep_height = 0 + * shift = (strip_shift * (size.y / strip_height)) % rep_width + */ +typedef struct gx_strip_bitmap_s { + byte *data; + int raster; /* bytes per scan line */ + gs_int_point size; /* width, height */ + gx_bitmap_id id; + ushort rep_width, rep_height; /* true size of tile */ + ushort strip_height; + ushort strip_shift; + ushort shift; +} gx_strip_bitmap;</pre> +</blockquote> +</dl> + +<hr> + +<h2><a name="Coding_conventions"></a>Coding conventions</h2> + +<p> +All the driver procedures defined below that return <b><tt>int</tt></b> +results return 0 on success, or an appropriate negative error code in the +case of error conditions. The error codes are defined in <a +href="../src/gserrors.h">gserrors.h</a>; they correspond directly to the +errors defined in the PostScript language reference manuals. The most +common ones for drivers are: + +<blockquote><dl> +<dt><b><tt>gs_error_invalidfileaccess</tt></b> +<dd>An attempt to open a file failed. + +<dt><b><tt>gs_error_ioerror</tt></b> +<dd>An error occurred in reading or writing a file. + +<dt><b><tt>gs_error_limitcheck</tt></b> +<dd>An otherwise valid parameter value was too large for the +implementation. + +<dt><b><tt>gs_error_rangecheck</tt></b> +<dd>A parameter was outside the valid range. + +<dt><b><tt>gs_error_VMerror</tt></b> +<dd>An attempt to allocate memory failed. (If this happens, the procedure +should release all memory it allocated before it returns.) +</dl></blockquote> + +<p> +If a driver does return an error, rather than a simple return statement it +should use the <b><tt>return_error</tt></b> macro defined in <a +href="../src/gx.h">gx.h</a>, which is automatically included by <a +href="../src/gdevprn.h">gdevprn.h</a> but not by <a +href="../src/gserrors.h">gserrors.h</a>. For example + +<blockquote><b><tt> +return_error(gs_error_VMerror); +</tt></b></blockquote> + +<h3><a name="Allocating_storage"></a>Allocating storage</h3> + +<p> +While most drivers (especially printer drivers) follow a very similar +template, there is one important coding convention that is not obvious from +reading the code for existing drivers: driver procedures must not use +<b><tt>malloc</tt></b> to allocate any storage that stays around after the +procedure returns. Instead, they must use <b><tt>gs_malloc</tt></b> and +<b><tt>gs_free</tt></b>, which have slightly different calling conventions. +(The prototypes for these are in <a href="../src/gsmemory.h">gsmemory.h</a>, +which is included in <a href="../src/gx.h">gx.h</a>, which is included in <a +href="../src/gdevprn.h">gdevprn.h</a>.) This is necessary so that +Ghostscript can clean up all allocated memory before exiting, which is +essential in environments that provide only single-address-space +multi-tasking (some versions of Microsoft Windows). + +<blockquote> +<pre>char *gs_malloc(uint num_elements, uint element_size, + const char *client_name);</pre> +</blockquote> + +<p> +Like <b><tt>calloc</tt></b>, but unlike <b><tt>malloc</tt></b>, +<b><tt>gs_malloc</tt></b> takes an element count and an element size. For +structures, <b><tt>num_elements</tt></b> is 1 and +<b><tt>element_size</tt></b> is <b><tt>sizeof</tt></b> the structure; for +byte arrays, <b><tt>num_elements</tt></b> is the number of bytes and +<b><tt>element_size</tt></b> is 1. Unlike <b><tt>calloc</tt></b>, +<b><tt>gs_malloc</tt></b> does <b>not</b> clear the block of storage. + +<p> +The <b><tt>client_name</tt></b> is used for tracing and debugging. It must +be a real string, not <b><tt>NULL</tt></b>. Normally it is the name of the +procedure in which the call occurs. + +<blockquote> +<pre>void gs_free(char *data, uint num_elements, uint element_size, + const char *client_name);</pre> +</blockquote> + +<p> +Unlike <b><tt>free</tt></b>, <b><tt>gs_free</tt></b> demands that +<b><tt>num_elements</tt></b> and element_size be supplied. It also +requires a client name, like <b><tt>gs_malloc</tt></b>. + +<h3><a name="Driver_instance_allocation"></a>Driver instance allocation</h3> + +<p> +All driver instances allocated by Ghostscript's standard allocator must +point to a "structure descriptor" that tells the garbage collector how to +trace pointers in the structure. For drivers registered in the normal way +(using the makefile approach described above), no special care is needed as +long as instances are created only by calling the +<b><tt>gs_copydevice</tt></b> procedure defined in <a +href="../src/gsdevice.h">gsdevice.h</a>. If you have a need to define +devices that are not registered in this way, you must fill in the stype +member in any dynamically allocated instances with a pointer to the same +structure descriptor used to allocate the instance. For more information +about structure descriptors, see <a href="../src/gsmemory.h">gsmemory.h</a> +and <a href="../src/gsstruct.h">gsstruct.h</a>. + +<hr> + +<h2><a name="Printer_drivers"></a>Printer drivers</h2> + +<p> +Printer drivers (which include drivers that write some kind of raster file) +are especially simple to implement. Of the driver procedures defined in the +next section, they only need implement two: <b><tt>map_rgb_color</tt></b> +(or <b><tt>map_cmyk_color</tt></b>) and <b><tt>map_color_rgb</tt></b>. In +addition, they must implement a <b><tt>print_page</tt></b> or +<b><tt>print_page_copies</tt></b> procedure. There are macros in <a +href="../src/gdevprn.h">gdevprn.h</a> that generate the device structure for +such devices, of which the simplest is <b><tt>prn_device</tt></b>; for an +example, see <a href="../src/gdevbj10.c">gdevbj10.c</a>. If you are writing +a printer driver, we suggest you start by reading <a +href="../src/gdevprn.h">gdevprn.h</a> and the <a +href="#Color_mapping">subsection on "Color mapping"</a> below; you may be +able to ignore all the rest of the driver procedures. + +<p> +The <b><tt>print_page</tt></b> procedures are defined as follows: + +<blockquote> +<pre>int (*print_page)(P2(gx_device_printer *, FILE *)) +int (*print_page_copies)(P3(gx_device_printer *, FILE *, int))</pre> +</blockquote> + +<p> +This procedure must read out the rendered image from the device and write +whatever is appropriate to the file. To read back one or more scan lines +of the image, the <b><tt>print_page</tt></b> procedure must call one of the +following procedures: + +<blockquote> +<pre>int gdev_prn_copy_scan_lines(P4(gx_device_printer *pdev, int y, byte *str, + uint size)</pre> +</blockquote> + +<p> +For this procedure, <b><tt>str</tt></b> is where the data should be copied to, and <b><tt>size</tt></b> is +the size of the buffer starting at <b><tt>str</tt></b>. This procedure returns the number +of scan lines copied, or <0 for an error. <b><tt>str</tt></b> need not be aligned. + +<blockquote> +<pre>int gdev_prn_get_bits(gx_device_printer *pdev, int y, byte *str, + byte **actual_data)</pre> +</blockquote> + +<p> +This procedure reads out exactly one scan line. If the scan line is +available in the correct format already, <b><tt>*actual_data</tt></b> is +set to point to it; otherwise, the scan line is copied to the buffer +starting at <b><tt>str</tt></b>, and <b><tt>*actual_data</tt></b> is set to +<b><tt>str</tt></b>. This saves a copying step most of the time. +<b><tt>str</tt></b> need not be aligned; however, if +<b><tt>*actual_data</tt></b> is set to point to an existing scan line, it +will be aligned. (See the description of the <b><tt>get_bits</tt></b> +procedure below for more details.) + +<p> +In either case, each row of the image is stored in the form described in +the comment under <b><tt>gx_tile_bitmap</tt></b> above; each pixel takes +the number of bits specified as <b><tt>color_info.depth</tt></b> in the +device structure, and holds values returned by the device's +<b><tt>map_</tt></b>{<b><tt>rgb</tt></b>,<b><tt>cmyk</tt></b>}<b><tt>_color</tt></b> +procedure. + +<p> +The <b><tt>print_page</tt></b> procedure can determine the number of bytes +required to hold a scan line by calling: + +<blockquote> +<pre>uint gdev_prn_raster(P1(gx_device_printer *))</pre> +</blockquote> + +<p> +For a very simple concrete example, we suggest reading the code in +<b><tt>bit_print_page</tt></b> in <a href="../src/gdevbit.c">gdevbit.c</a>. + +<p> +If the device provides <b><tt>print_page</tt></b>, Ghostscript will call +<b><tt>print_page</tt></b> the requisite number of times to print the +desired number of copies; if the device provides +<b><tt>print_page_copies</tt></b>, Ghostscript will call +<b><tt>print_page_copies</tt></b> once per page, passing it the desired +number of copies. + +<hr> + +<h2><a name="Driver_procedures"></a>Driver procedures</h2> + +<p> +Most of the procedures that a driver may implement are optional. If a +device doesn't supply an optional procedure <b><tt>WXYZ</tt></b>, the entry +in the procedure structure may be either <b><tt>gx_default_WXYZ</tt></b>, +for instance <b><tt>gx_default_tile_rectangle</tt></b>, or +<b><tt>NULL</tt></b> or 0. (The device procedure must also call the +<b><tt>gx_default_</tt></b> procedure if it doesn't implement the function +for particular values of the arguments.) Since C compilers supply 0 as the +value for omitted structure elements, this convention means that statically +initialized procedure structures continue to work even if new (optional) +members are added. + +<h3><a name="Life_cycle"></a>Life cycle</h3> + +<p> +A device instance begins life in a closed state. In this state, no output +operations will occur. Only the following procedures may be called: + +<blockquote><b><tt> +open_device<br> +finish_copydevice<br> +get_initial_matrix<br> +get_params<br> +put_params<br> +get_hardware_params +</tt></b></blockquote> + +<p> +When <b><tt>setdevice</tt></b> installs a device instance in the graphics +state, it checks whether the instance is closed or open. If the instance +is closed, <b><tt>setdevice</tt></b> calls the open routine, and then sets +the state to open. There is currently no user-accessible operation to +close a device instance. Device instances are only closed when they are +about to be freed, which occurs in three situations: + +<ul> +<li>When a <b><tt>restore</tt></b> occurs, if the instance was created since +the corresponding <b><tt>save</tt></b> and is in a VM being restored. I.e., +if the instance was created in local VM since a <b><tt>save</tt></b>, it +will always be closed and freed by the corresponding +<b><tt>restore</tt></b>; if it was created in global VM, it will only be +closed by the outermost <b><tt>restore</tt></b>, regardless of the save +level at the time the instance was created. + +<li>By the garbage collector, if the instance is no longer accessible. + +<li>When Ghostscript exits (terminates). +</ul> + +<h3><a name="Open_close"></a>Open, close, sync, copy</h3> + +<dl> +<dt><b><tt>int (*open_device)(P1(gx_device *))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Open the device: do any initialization associated with making the device +instance valid. This must be done before any output to the device. The +default implementation does nothing. <b>NOTE</b>: Clients should never call +a device's <b><tt>open_device</tt></b> procedure directly: they should +always call <b><tt>gs_opendevice</tt></b> instead. +</dl> + +<dl> +<dt><b><tt>int (*finish_copydevice)(P2(gx_device *dev, const gx_device +*from_dev))</tt></b> <b><em>[OPTIONAL]</em></b> <dd>Perform any cleanup +required after <b><tt>copydevice</tt></b> has created a new device instance +by copying <b><tt>from_dev</tt></b>. If the copy operation should not be +allowed, this procedure should return an error; the copy will be freed. The +default implementation allows copying the device prototype, but does not +allow copying device instances, because instances may contain internal +pointers that should not be shared between copies, and there is no way to +determine this from outside the device. <b>NOTE</b>: Clients should never +call a device's <b><tt>finish_copydevice</tt></b> procedure: this procedure +is only intended for use by <b><tt>gs_copydevice[2]</tt></b>. +</dl> + +<dl> +<dt><b><tt>void (*get_initial_matrix)(P2(gx_device *, gs_matrix *))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Construct the initial transformation matrix mapping user coordinates +(nominally 1/72 inch per unit) to device coordinates. The default +procedure computes this from width, height, and +[<b><tt>xy</tt></b>]<b><tt>_pixels_per_inch</tt></b> on the assumption that +the origin is in the upper left corner, that is +<blockquote> +<b><tt>xx</tt></b> = <b><tt>x_pixels_per_inch</tt></b>/72, <b><tt>xy</tt></b> = 0,<br> +<b><tt>yx = 0, yy = -y_pixels_per_inch</tt></b>/72,<br> +<b><tt>tx = 0, ty = height</tt></b>. +</blockquote> +</dl> + +<dl> +<dt><b><tt>int (*sync_output)(P1(gx_device *))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Synchronize the device. If any output to the device has been +buffered, send or write it now. Note that this may be called several times +in the process of constructing a page, so printer drivers should <b>not</b> +implement this by printing the page. The default implementation does +nothing. +</dl> + +<dl> +<dt><b><tt>int (*output_page)(P3(gx_device *, int num_copies, int flush))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Output a fully composed page to the device. The +<b><tt>num_copies</tt></b> argument is the number of copies that should be +produced for a hardcopy device. (This may be ignored if the driver has +some other way to specify the number of copies.) The <b><tt>flush</tt></b> +argument is true for <b><tt>showpage</tt></b>, false for +<b><tt>copypage</tt></b>. The default definition just calls +<b><tt>sync_output</tt></b>. Printer drivers should implement this by +printing and ejecting the page. +</dl> + +<dl> +<dt><b><tt>int (*close_device)(P1(gx_device *))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Close the device: release any associated resources. After this, output +to the device is no longer allowed. The default implementation does +nothing. <b>NOTE</b>: Clients should never call a device's +<b><tt>close_device</tt></b> procedure directly: they should always call +<b><tt>gs_closedevice</tt></b> instead. +</dl> + +<h3><a name="Color_mapping"></a>Color and alpha mapping</h3> + +<p> +A given driver normally implements either <b><tt>map_rgb_color</tt></b> or +<b><tt>map_cmyk_color</tt></b>, but not both. Black-and-white drivers need +implement neither. Note that the <b><tt>map_xxx_color</tt></b> procedures +must not return <b><tt>gx_no_color_index</tt></b> (all 1s). + +<p> +Note that code in the Ghostscript library may cache the results of calling +one or more of the color mapping procedures. If the result returned by any +of these procedures would change (other than as a result of a change made by +the driver's <b><tt>put_params</tt></b> procedure), the driver must call +<b><tt>gx_device_decache_colors(dev)</tt></b>. + +<dl> +<dt><b><tt>gx_color_index (*map_rgb_color)(P4(gx_device *, +gx_color_value red, gx_color_value green, +gx_color_value blue))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Map a RGB color to a device color. The range of legal values of the +RGB arguments is 0 to <b><tt>gx_max_color_value</tt></b>. The default +algorithm uses the <b><tt>map_cmyk_color</tt></b> procedure if the driver +supplies one, otherwise returns 1 if any of the values exceeds +<b><tt>gx_max_color_value</tt></b> / 2, 0 otherwise. + +<p> +Ghostscript assumes that for devices that have color capability (that is, +<b><tt>color_info.num_components</tt></b> > 1), +<b><tt>map_rgb_color</tt></b> returns a color index for a gray level (as +opposed to a non-gray color) iff red = green = blue. +</dl> + +<dl> +<dt><b><tt>gx_color_index (*map_cmyk_color)(P5(gx_device *, +gx_color_value cyan, gx_color_value magenta, +gx_color_value yellow, gx_color_value black))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Map a CMYK color to a device color. The range of legal values of the +CMYK arguments is 0 to <b><tt>gx_max_color_value</tt></b>. The default +algorithm calls the <b><tt>map_rgb_color</tt></b> procedure, with suitably +transformed arguments. + +<p> +Ghostscript assumes that for devices that have color capability (that is, +<b><tt>color_info.num_components</tt></b> > 1), +<b><tt>map_cmyk_color</tt></b> returns a color index for a gray level (as +opposed to a non-gray color) iff cyan = magenta = yellow. +</dl> + +<dl> +<dt><b><tt>int (*map_color_rgb)(P3(gx_device *, +gx_color_index color, gx_color_value rgb[3]))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Map a device color code to RGB values. The default algorithm returns +(0 if <b><tt>color</tt></b>==0 else <b><tt>gx_max_color_value</tt></b>) for +all three components. +</dl> + +<dl> +<dt><b><tt>gx_color_index (*map_rgb_alpha_color)(P5(gx_device *, +gx_color_value red, gx_color_value green, +gx_color_value blue, gx_color_value alpha))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Map a RGB color and an opacity value to a device color. The range of +legal values of the RGB and alpha arguments is 0 to +<b><tt>gx_max_color_value</tt></b>; <b><tt>alpha</tt></b> = 0 means +transparent, <b><tt>alpha</tt></b> = <b><tt>gx_max_color_value</tt></b> +means fully opaque. The default is to use the +<b><tt>map_rgb_color</tt></b> procedure and ignore alpha. + +<p> +Note that if a driver implements <b><tt>map_rgb_alpha_color</tt></b>, it +must also implement <b><tt>map_rgb_color</tt></b>, and must implement them +in such a way that +<b><tt>map_rgb_alpha_color(dev, r, g, b, gx_max_color_value)</tt></b> +returns the same value as +<b><tt>map_rgb_color(dev, r, g, b)</tt></b>. +</dl> + +<dl> +<dt><b><tt>int (*map_color_rgb_alpha)(P3(gx_device *, +gx_color_index color, gx_color_value rgba[4]))</tt></b> +<b><em>[OPTIONAL]</em></b> +<dd>Map a device color code to RGB and alpha values. The default +implementation calls <b><tt>map_color_rgb</tt></b> and fills in +<b><tt>gx_max_color_value</tt></b> for alpha. + +<p> +Note that if a driver implements <b><tt>map_color_rgb_alpha</tt></b>, it +must also implement <b><tt>map_color_rgb</tt></b>, and must implement them +in such a way that the first 3 values returned by +<b><tt>map_color_rgb_alpha</tt></b> are the same as the values returned by +<b><tt>map_color_rgb</tt></b>. + +<p> +Note that CMYK devices currently do not support variable opacity; alpha is +ignored on such devices. +</dl> + +<dl> +<dt><b><tt>typedef enum { go_text, +go_graphics } graphic_object_type; int +(*get_alpha_bits)(P4(gx_device *dev, +graphic_object_type type))</tt></b> <b><em>[OPTIONAL] [OBSOLETE]</em></b> +<dd>This procedure is no longer used: it is replaced by the +color_info.anti_alias member of the driver structure. However, it still +appears in the driver procedure vector for backward compatibility. It +should never be called, and drivers should not implement it. +</dl> + +<h3><a name="Pixel_level_drawing"></a>Pixel-level drawing</h3> + +<p> +This group of drawing operations specifies data at the pixel level. All +drawing operations use device coordinates and device color values. + +<dl> +<dt><b><tt>int (*fill_rectangle)(P6(gx_device *, int x, +int y, int width, int height, +gx_color_index color))</tt></b> +<dd>Fill a rectangle with a color. The set of pixels filled is {(px,py) | +x <= px < x + width and y <= py < y + height}. In other words, +the point <em>(x,y)</em> is included in the rectangle, as are +<em>(x+w-1,y)</em>, <em>(x,y+h-1)</em>, and <em>(x+w-1,y+h-1)</em>, but +<b><em>not</em></b> <em>(x+w,y)</em>, <em>(x,y+h)</em>, or +<em>(x+w,y+h)</em>. If <b><tt>width</tt></b> <= 0 or +height <= 0, <b><tt>fill_rectangle</tt></b> should return 0 +without drawing anything. + +<p> +Note that <b><tt>fill_rectangle</tt></b> is the only non-optional procedure +in the driver interface. +</dl> + +<h4><a name="Bitmap_imaging"></a>Bitmap imaging</h4> + +<p> +Bitmap (or pixmap) images are stored in memory in a nearly standard way. +The first byte corresponds to <em>(0,0)</em> in the image coordinate +system: bits (or polybit color values) are packed into it left to right. +There may be padding at the end of each scan line: the distance from one +scan line to the next is always passed as an explicit argument. + +<dl> +<dt><b><tt>int (*copy_mono)(P11(gx_device *, +const unsigned char *data, int data_x, int raster, +gx_bitmap_id id, int x, int y, int width, +int height, gx_color_index color0, +gx_color_index color1))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Copy a monochrome image (similar to the PostScript image operator). +Each scan line is raster bytes wide. Copying begins at +(<b><tt>data_x</tt></b>,0) and transfers a rectangle of the given width and +height to the device at device coordinate <em>(x,y)</em>. (If the transfer +should start at some non-zero y value in the data, the caller can adjust +the data address by the appropriate multiple of the raster.) The copying +operation writes device color <b><tt>color0</tt></b> at each 0-bit, and +<b><tt>color1</tt></b> at each 1-bit: if <b><tt>color0</tt></b> or +<b><tt>color1</tt></b> is <b><tt>gx_no_color_index</tt></b>, the device +pixel is unaffected if the image bit is 0 or 1 respectively. If +<b><tt>id</tt></b> is different from <b><tt>gx_no_bitmap_id</tt></b>, it +identifies the bitmap contents unambiguously; a call with the same +<b><tt>id</tt></b> will always have the same <b><tt>data</tt></b>, +<b><tt>raster</tt></b>, and data contents. + +<p> +This operation, with +<b><tt>color0</tt></b> = <b><tt>gx_no_color_index</tt></b>, is +the workhorse for text display in Ghostscript, so implementing it +efficiently is very important. +</dl> + +<dl> +<dt><b><tt>int (*tile_rectangle)(P10(gx_device *, +const gx_tile_bitmap *tile, int x, int y, +int width, int height, gx_color_index color0, +gx_color_index color1, int phase_x, int phase_y))</tt></b> +<b><em>[OPTIONAL] [OBSOLETE]</em></b> +<dd>This procedure is still supported, but has been superseded by +<b><tt>strip_tile_rectangle</tt></b>. New drivers should implement +<b><tt>strip_tile_rectangle</tt></b>; if they cannot cope with non-zero +shift values, they should test for this explicitly and call the default +implementation (<b><tt>gx_default_strip_tile_rectangle</tt></b>) if +shift != 0. Clients should call +<b><tt>strip_tile_rectangle</tt></b>, not <b><tt>tile_rectangle</tt></b>. +</dl> + +<dl> +<dt><b><tt>int (*strip_tile_rectangle)(P10(gx_device *, +const gx_strip_bitmap *tile, int x, int y, +int width, int height, gx_color_index color0, +gx_color_index color1, int phase_x, int phase_y))</tt></b> +<b><em>[OPTIONAL]</em></b> +<dd>Tile a rectangle. Tiling consists of doing multiple +<b><tt>copy_mono</tt></b> operations to fill the rectangle with copies of +the tile. The tiles are aligned with the device coordinate system, to +avoid "seams". Specifically, the (<b><tt>phase_x</tt></b>, +<b><tt>phase_y</tt></b>) point of the tile is aligned with the origin of +the device coordinate system. (Note that this is backwards from the +PostScript definition of halftone phase.) <b><tt>phase_x</tt></b> and +<b><tt>phase_y</tt></b> are guaranteed to be in the range +<em>[0..</em><b><tt>tile->width</tt></b><em>)</em> and +<em>[0..</em><b><tt>tile->height</tt></b><em>)</em> respectively. + +<p> +If <b><tt>color0</tt></b> and <b><tt>color1</tt></b> are both +<b><tt>gx_no_color_index</tt></b>, then the tile is a color pixmap, not a +bitmap: see the next section. + +<p> +This operation is the workhorse for halftone filling in Ghostscript, so +implementing it efficiently for solid tiles (that is, where either +<b><tt>color0</tt></b> and <b><tt>color1</tt></b> are both +<b><tt>gx_no_color_index</tt></b>, for colored halftones, or neither one is +<b><tt>gx_no_color_index</tt></b>, for monochrome halftones) is very +important. +</dl> + +<h4><a name="Pixmap_imaging"></a>Pixmap imaging</h4> + +<p> +Pixmaps are just like bitmaps, except that each pixel occupies more than +one bit. All the bits for each pixel are grouped together (this is +sometimes called "chunky" or "Z" format). For <b><tt>copy_color</tt></b>, +the number of bits per pixel is given by the +<b><tt>color_info.depth</tt></b> parameter in the device structure: the +legal values are 1, 2, 4, 8, 16, 24, or 32. The pixel values are device +color codes (that is, whatever it is that <b><tt>map_rgb_color</tt></b> +returns). + +<dl> +<dt><b><tt>int (*copy_color)(P9(gx_device *, +const unsigned char *data, int data_x, int raster, +gx_bitmap_id id, int x, int y, int width, +int height))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Copy a color image with multiple bits per pixel. The raster is in +bytes, but <b><tt>x</tt></b> and <b><tt>width</tt></b> are in pixels, not +bits. If <b><tt>id</tt></b> is different from +<b><tt>gx_no_bitmap_id</tt></b>, it identifies the bitmap contents +unambiguously; a call with the same <b><tt>id</tt></b> will always have the +same <b><tt>data</tt></b>, <b><tt>raster</tt></b>, and data contents. + +<p> +We do not provide a separate procedure for tiling with a pixmap; instead, +<b><tt>tile_rectangle</tt></b> can also take colored tiles. This is +indicated by the <b><tt>color0</tt></b> and <b><tt>color1</tt></b> +arguments' both being <b><tt>gx_no_color_index</tt></b>. In this case, as +for <b><tt>copy_color</tt></b>, the <b><tt>raster</tt></b> and +<b><tt>height</tt></b> in the "bitmap" are interpreted as for real bitmaps, +but the <b><tt>x</tt></b> and <b><tt>width</tt></b> are in pixels, not +bits. +</dl> + +<h4><a name="Compositing"></a>Compositing</h4> + +<p> +In addition to direct writing of opaque pixels, devices must also support +compositing. Currently two kinds of compositing are defined +(<b><tt>RasterOp</tt></b> and alpha-based), but more may be added in the +future. + +<blockquote> +<b><em>THIS AREA OF THE INTERFACE IS SOMEWHAT UNSTABLE: USE AT YOUR OWN +RISK.</em></b> +</blockquote> + +<dl> +<dt><b><tt>int (*copy_alpha)(P11(gx_device *dev, +const unsigned char *data, int data_x, int raster, +gx_bitmap_id id, int x, int y, int width, +int height, gx_color_index color, int depth))</tt></b> +<b><em>[OPTIONAL]</em></b> +<dd>This procedure is somewhat misnamed: it was added to the interface +before we really understood alpha channel and compositing. + +<p> +Fill a given region with a given color modified by an individual alpha +value for each pixel. For each pixel, this is equivalent to +alpha-compositing with a source pixel whose alpha value is obtained from +the pixmap (<b><tt>data</tt></b>, <b><tt>data_x</tt></b>, and +<b><tt>raster</tt></b>) and whose color is the given color (which has +<b><em>not</em></b> been premultiplied by the alpha value), using the Sover +rule. <b><tt>depth</tt></b>, the number of bits per alpha value, is either +2 or 4, and in any case is always a value returned by a previous call on +the <b><tt>get_alpha_bits</tt></b> procedure. Note that if +<b><tt>get_alpha_bits</tt></b> always returns 1, this procedure will never +be called. +</dl> + +<dl> +<dt><b><tt>int (*create_compositor)(P5(dev_t *dev, +gx_device_t **pcdev, const gs_composite_t *pcte, +const gs_imager_state *pis, gs_memory_t *memory))</tt></b> +<b><em>[OPTIONAL]</em></b> +<dd>Create a new device (called a "compositing device" or "compositor") +that will composite data written to it with the device's existing data, +according to the compositing function defined by <b><tt>*pcte</tt></b>. +Devices will normally implement this in one of the following standard ways: + +<ul> +<li>Devices that don't do any imaging and don't forward any imaging +operations (for example, the null device, the hit detection device, and the +clipping list accumulation device) simply return themselves, which +effectively ignores the compositing function. + +<li>"Leaf" devices that do imaging and have no special optimizations for +compositing (for example, some memory devices) ask the +<b><tt>gs_composite_t</tt></b> to create a default compositor. + +<li>Leaf devices that can implement some kinds of compositing operation +efficiently (for example, monobit memory devices and RasterOp) inspect the +type and values of <b><tt>*pcte</tt></b> to determine whether it specifies +such an operation: if so, they create a specialized compositor, and if not, +they ask the <b><tt>gs_composite_t</tt></b> to create a default compositor. +</ul> + +<p> +Other kinds of forwarding devices, which don't fall into any of these +categories, require special treatment. In principle, what they do is ask +their target to create a compositor, and then create and return a copy of +themselves with the target's new compositor as the target of the copy. +There is a possible default implementation of this approach: if the +original device was <b>D</b> with target <b>T</b>, and <b>T</b> creates a +compositor <b>C</b>, then the default implementation creates a device +<b>F</b> that for each operation temporarily changes <b>D</b>'s target to +<b>C</b>, forwards the operation to <b>D</b>, and then changes <b>D</b>'s +target back to <b>T</b>. However, the Ghostscript library currently only +creates a compositor with an imaging forwarding device as target in a few +specialized situations (banding, and bounding box computation), and these +are handled as special cases. + +<p> +Note that the compositor may have a different color space, color +representation, or bit depth from the device to which it is compositing. +For example, alpha-compositing devices use standard-format chunky color +even if the underlying device doesn't. + +<p> +Closing a compositor frees all of its storage, including the compositor +itself. However, since the <b><tt>create_compositor</tt></b> call may +return the same device, clients must check for this case, and only call the +close procedure if a separate device was created. +</dl> + +<p> +<font size="+1"> +<b><em>[strip_]copy_rop WILL BE SUPERSEDED BY COMPOSITORS</em></b> +</font> + +<dl> +<dt><b><tt>int (*copy_rop)(P15(gx_device *dev, +const byte *sdata, int sourcex, uint sraster, +gx_bitmap_id id, const gx_color_index *scolors, +const gx_tile_bitmap *texture, +const gx_color_index *tcolors, int x, int y, +int width, int height, int phase_x, int phase_y, +int command))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>This procedure is still supported, but has been superseded by +<b><tt>strip_copy_rop</tt></b>. New drivers should implement +<b><tt>strip_copy_rop</tt></b>; if they cannot cope with non-zero shift +values in the texture, they should test for this explicitly and call the +default implementation (<b><tt>gx_default_strip_copy_rop</tt></b>) if +shift != 0. Clients should call <b><tt>strip_copy_rop</tt></b>, +not <b><tt>copy_rop</tt></b>. +</dl> + +<dl> +<dt><b><tt>int (*strip_copy_rop)(P15(gx_device *dev, +const byte *sdata, int sourcex, uint sraster, +gx_bitmap_id id, const gx_color_index *scolors, +const gx_strip_bitmap *texture, +const gx_color_index *tcolors, int x, int y, +int width, int height, int phase_x, int phase_y, +int command))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Combine an optional source image <b>S</b> (as for +<b><tt>copy_mono</tt></b> or <b><tt>copy_color</tt></b>) and an optional +texture <b>T</b> (a tile, as for <b><tt>tile_rectangle</tt></b>) with the +existing bitmap or pixmap <b>D</b> held by the driver, pixel by pixel, +using any 3-input Boolean operation as modified by "transparency" flags: +schematically, set <b>D = f(D,S,T)</b>, computing <b>f</b> in RGB +space rather than using actual device pixel values. <b>S</b> and <b>T</b> +may each (independently) be a solid color, a bitmap with "foreground" and +"background" colors, or a pixmap. This is a complex (and currently rather +slow) operation. The arguments are as follows: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>dev</tt></b> + <td> + <td>the device, as for all driver procedures +<tr valign=top> <td><b><tt>sdata</tt></b>, <b><tt>sourcex</tt></b>, <b><tt>sraster</tt></b>, <b><tt>id</tt></b>, <b><tt>scolors</tt></b> + <td> + <td>specify <b>S</b>, <a href="#S_spec">see below</a> +<tr valign=top> <td><b><tt>texture</tt></b>, <b><tt>tcolors</tt></b> + <td> + <td>specify <b>T</b>, <a href="#T_spec">see below</a> +<tr valign=top> <td><b><tt>x</tt></b>, <b><tt>y</tt></b>, <b><tt>width</tt></b>, <b><tt>height</tt></b> + <td> + <td>as for the other copy and fill procedures +<tr valign=top> <td><b><tt>phase_x</tt></b>, <b><tt>phase_y</tt></b> + <td> + <td>part of <b>T</b> specification, <a href="#T_spec">see below</a> +<tr valign=top> <td><b><tt>command</tt></b> + <td> + <td><a href="#F_spec">see below</a> +</table></blockquote> +</dl> + +<h5><a name="S_spec"></a>The source specification S</h5> + +<p> +As noted above, the source <b>S</b> may be a solid color, a bitmap, or a +pixmap. If <b>S</b> is a solid color: + +<ul> +<li><b><tt>sdata</tt></b>, <b><tt>sourcex</tt></b>, +<b><tt>sraster</tt></b>, and <b><tt>id</tt></b> are irrelevant. + +<li><b><tt>scolors</tt></b> points to two <b><tt>gx_color_index</tt></b> +values; <b><tt>scolors[0]</tt></b> = <b><tt>scolors[1]</tt></b> = the +color. +</ul> + +<p> +If <b>S</b> is a bitmap: + +<ul> +<li><b><tt>sdata</tt></b>, <b><tt>sourcex</tt></b>, +<b><tt>sraster</tt></b>, and <b><tt>id</tt></b> arguments are as for +<b><tt>copy_mono</tt></b> or <b><tt>copy_color</tt></b> +(<b><tt>data</tt></b>, <b><tt>data_x</tt></b>, <b><tt>raster</tt></b>, +<b><tt>id</tt></b>), and specify a source bitmap. + +<li><b><tt>scolors</tt></b> points to two <b><tt>gx_color_index</tt></b> +values; <b><tt>scolors[0]</tt></b> is the background color (the color +corresponding to 0-bits in the bitmap), <b><tt>scolors[1]</tt></b> is the +foreground color (the color corresponding to 1-bits in the bitmap). +</ul> + +<p> +If <b>S</b> is a pixmap: + +<ul> +<li><b><tt>sdata</tt></b>, <b><tt>sourcex</tt></b>, +<b><tt>sraster</tt></b>, and <b><tt>id</tt></b> arguments are as for +<b><tt>copy_mono</tt></b> or <b><tt>copy_color</tt></b> +(<b><tt>data</tt></b>, <b><tt>data_x</tt></b>, <b><tt>raster</tt></b>, +<b><tt>id</tt></b>), and specify a source pixmap whose depth is the same as +the depth of the destination. + +<li><b><tt>scolors</tt></b> is <b><tt>NULL</tt></b>. +</ul> + +<p> +Note that if the source is a bitmap with background=0 and foreground=1, and +the destination is 1 bit deep, then the source can be treated as a pixmap +(scolors=<b><tt>NULL</tt></b>). + +<h5><a name="T_spec"></a>The texture specification T</h5> + +<p> +Similar to the source, the texture <b>T</b> may be a solid color, a bitmap, +or a pixmap. If <b>T</b> is a solid color: + +<ul> +<li>The texture pointer is irrelevant. + +<li><b><tt>tcolors</tt></b> points to two <b><tt>gx_color_index</tt></b> +values; <b><tt>tcolors[0]</tt></b> = <b><tt>tcolors[1]</tt></b> = the +color. +</ul> + +<p> +If <b>T</b> is a bitmap: + +<ul> +<li>The texture argument points to a <b><tt>gx_tile_bitmap</tt></b>, as for +the <b><tt>tile_rectangle</tt></b> procedure. Similarly, +<b><tt>phase_x</tt></b> and <b><tt>phase_y</tt></b> specify the offset of +the texture relative to the device coordinate system origin, again as for +<b><tt>tile_rectangle</tt></b>. The tile is a bitmap (1 bit per pixel). + +<li><b><tt>tcolors</tt></b> points to two <b><tt>gx_color_index</tt></b> +values; <b><tt>tcolors[0]</tt></b> is the background color (the color +corresponding to 0-bits in the bitmap), <b><tt>tcolors[1]</tt></b> is the +foreground color (the color corresponding to 1-bits in the bitmap). +</ul> + +<p> +If <b>T</b> is a pixmap: + +<ul> +<li>The texture argument points to a <b><tt>gx_tile_bitmap</tt></b> whose +depth is the same as the depth of the destination. + +<li>tcolors is <b><tt>NULL</tt></b>. +</ul> + +<p> +Again, if the texture is a bitmap with background=0 and foreground=1, and +the destination depth is 1, the texture bitmap can be treated as a pixmap +(tcolors=<b><tt>NULL</tt></b>). + +<p> +Note that while a source bitmap or pixmap has the same width and height as +the destination, a texture bitmap or pixmap has its own width and height +specified in the <b><tt>gx_tile_bitmap</tt></b> structure, and is +replicated or clipped as needed. + +<h5><a name="F_spec"></a>The function specification f</h5> + +<p> +"Command" indicates the raster operation and transparency as follows: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th>Bits + <td> + <td> +<tr valign=top> <td>7-0 + <td> + <td>raster op +<tr valign=top> <td>8 + <td> + <td>0 if source opaque, 1 if source transparent +<tr valign=top> <td>9 + <td> + <td>0 if texture opaque, 1 if texture transparent +<tr valign=top> <td>?-10 + <td> + <td>unused, must be 0 +</table></blockquote> + +<p> +The raster operation follows the Microsoft and H-P specification. It is an +8-element truth table that specifies the output value for each of the +possible 2×2×2 input values as follows: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th>Bit + <td> + <th>Texture + <td> + <th>Source + <td> + <th>Destination +<tr> <td colspan=7><hr> +<tr valign=top> <td align=center>7 + <td> + <td align=center>1 + <td> + <td align=center>1 + <td> + <td align=center>1 +<tr valign=top> <td align=center>6 + <td> + <td align=center>1 + <td> + <td align=center>1 + <td> + <td align=center>0 +<tr valign=top> <td align=center>5 + <td> + <td align=center>1 + <td> + <td align=center>0 + <td> + <td align=center>1 +<tr valign=top> <td align=center>4 + <td> + <td align=center>1 + <td> + <td align=center>0 + <td> + <td align=center>0 +<tr valign=top> <td align=center>3 + <td> + <td align=center>0 + <td> + <td align=center>1 + <td> + <td align=center>1 +<tr valign=top> <td align=center>2 + <td> + <td align=center>0 + <td> + <td align=center>1 + <td> + <td align=center>0 +<tr valign=top> <td align=center>1 + <td> + <td align=center>0 + <td> + <td align=center>0 + <td> + <td align=center>1 +<tr valign=top> <td align=center>0 + <td> + <td align=center>0 + <td> + <td align=center>0 + <td> + <td align=center>0 +</table></blockquote> + +<p> +Transparency affects the output in the following way. A source or texture +pixel is considered transparent if its value is all 1s (for instance, 1 for +bitmaps, <tt>0xffffff</tt> for 24-bit RGB pixmaps) <b><em>and</em></b> the +corresponding transparency bit is set in the command. For each pixel, the +result of the Boolean operation is written into the destination iff neither +the source nor the texture pixel is transparent. (Note that the H-P +RasterOp specification, on which this is based, specifies that if the +source and texture are both all 1s and the command specifies transparent +source and opaque texture, the result <b><em>should</em></b> be written in +the output. We think this is an error in the documentation.) + +<h5><a name="Compositing_notes"></a>Notes</h5> + +<p> +<b><tt>copy_rop</tt></b> is defined to operate on pixels in RGB space, +again following the H-P and Microsoft specification. For devices that +don't use RGB (or gray-scale with black = 0, white = all 1s) as their +native color representation, the implementation of <b><tt>copy_rop</tt></b> +must convert to RGB or gray space, do the operation, and convert back (or +do the equivalent of this). Here are the <b><tt>copy_rop</tt></b> +equivalents of the most important previous imaging calls. We assume the +declaration: + +<blockquote><b><tt> +static const gx_color_index white2[2] = { 1, 1 }; +</tt></b></blockquote> + +<p> +Note that <b><tt>rop3_S</tt></b> may be replaced by any other Boolean operation. +For monobit devices, we assume that black = 1. + +<blockquote> +<pre>/* For all devices: */ +(*fill_rectangle)(dev, x, y, w, h, color) ==> + + { gx_color_index colors[2]; + colors[0] = colors[1] = color; + (*dev_proc(dev, copy_rop))(dev, NULL, 0, 0, gx_no_bitmap_id, colors, + NULL, colors /*irrelevant*/, + x, y, w, h, 0, 0, rop3_S); + } + +/* For black-and-white devices only: */ +(*copy_mono)(dev, base, sourcex, sraster, id, + x, y, w, h, (gx_color_index)0, (gx_color_index)1) ==> + + (*dev_proc(dev, copy_rop))(dev, base, sourcex, sraster, id, NULL, + NULL, white2 /*irrelevant*/, + x, y, w, h, 0, 0, rop3_S); + +/* For color devices, where neither color0 nor color1 is gx_no_color_index: */ +(*copy_mono)(dev, base, sourcex, sraster, id, + x, y, w, h, color0, color1) ==> + + { gx_color_index colors[2]; + colors[0] = color0, colors[1] = color1; + (*dev_proc(dev, copy_rop))(dev, base, sourcex, sraster, id, colors, + NULL, white2 /*irrelevant*/, + x, y, w, h, 0, 0, rop3_S); + } + +/* For black-and-white devices only: */ +(*copy_mono)(dev, base, sourcex, sraster, id, + x, y, w, h, gx_no_color_index, (gx_color_index)1) ==> + + (*dev_proc(dev, copy_rop))(dev, base, sourcex, sraster, id, NULL, + NULL, white2 /*irrelevant*/, + x, y, w, h, 0, 0, + rop3_S | lop_S_transparent); + +/* For all devices: */ +(*copy_color)(dev, base, sourcex, sraster, id, + x, y, w, h) ==> [same as first copy_mono above] + +/* For black-and-white devices only: */ +(*tile_rectangle)(dev, tile, x, y, w, h, + (gx_color_index)0, (gx_color_index)1, px, py) ==> + + (*dev_proc(dev, copy_rop))(dev, NULL, 0, 0, gx_no_bitmap_id, + white2 /*irrelevant*/, + tile, NULL, + x, y, w, h, px, py, rop3_T) +</pre></blockquote> + +<h3><a name="Polygon_level_drawing"></a>Polygon-level drawing</h3> + +<p> +In addition to the pixel-level drawing operations that take integer device +coordinates and pure device colors, the driver interface includes +higher-level operations that draw polygons using fixed-point coordinates, +possibly halftoned colors, and possibly a non-default logical operation. + +<p> +The <b><tt>fill_</tt></b>* drawing operations all use the center-of-pixel +rule: a pixel is colored iff its center falls within the polygonal region +being filled. If a pixel center <em>(X+0.5,Y+0.5)</em> falls exactly on +the boundary, the pixel is filled iff the boundary is horizontal and the +filled region is above it, or the boundary is not horizontal and the filled +region is to the right of it. + +<dl> +<dt><b><tt>int (*fill_trapezoid)(P10(gx_device *dev, +const gs_fixed_edge *left, const gs_fixed_edge *right, +fixed ybot, fixed ytop, bool swap_axes, +const gx_drawing_color *pdcolor, +gs_logical_operation_t lop))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Fill a trapezoid. The bottom and top edges are parallel to the x +axis, and are defined by <b><tt>ybot</tt></b> and <b><tt>ytop</tt></b>, +respectively. The left and right edges are defined by <b><tt>left</tt></b> +and <b><tt>right</tt></b>. Both of these respresent lines (<b><tt>gs_fixed_edge</tt></b> +is defined in <a href="../src/gxdevcli.h">gxdevcli.h</a> and consists +of <b><tt>gs_fixed_point</tt></b> <b><tt>start</tt></b> and <b><tt>end</tt></b> points). +The y coordinates of these lines need not have any specific relation to +<b><tt>ybot</tt></b> and <b><tt>ytop</tt></b>. The routine is defined this way so +that the filling algorithm can subdivide edges and still guarantee +that the exact same pixels will be filled. If +<b><tt>swap_axes</tt></b> is set, the meanings of X and Y are +interchanged. +</dl> + +<dl> +<dt><b><tt>int (*fill_parallelogram)(P9(gx_device *dev, +fixed px, fixed py, fixed ax, fixed ay, fixed bx, +fixed by, const gx_drawing_color *pdcolor, +gs_logical_operation_t lop))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Fill a parallelogram whose corners are <em>(px,py)</em>, +<em>(px+ax,py+ay)</em>, <em>(px+bx,py+by)</em>, and +<em>(px+ax+bx,py+ay+by)</em>. There are no constraints on the values of +any of the parameters, so the parallelogram may have any orientation +relative to the coordinate axes. +</dl> + +<dl> +<dt><b><tt>int (*fill_triangle)(P9(gx_device *dev, fixed px, +fixed py, fixed ax, fixed ay, fixed bx, fixed by, +const gx_drawing_color *pdcolor, +gs_logical_operation_t lop))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Fill a triangle whose corners are <em>(px,py)</em>, +<em>(px+ax,py+ay)</em>, and <em>(px+bx,py+by)</em>. +</dl> + +<dl> +<dt><b><tt>int (*draw_thin_line)(P7(gx_device *dev, +fixed fx0, fixed fy0, fixed fx1, fixed fy1, +const gx_drawing_color *pdcolor, +gs_logical_operation_t lop))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Draw a one-pixel-wide line from <em>(fx0,fy0)</em> to +<em>(fx1,fy1)</em>. +</dl> + +<dl> +<dt><b><tt>int (*draw_line)(P6(gx_device *dev, int x0, int y0, +int x1, int y1, gx_color_index color))</tt></b> +<b><em>[OPTIONAL] [OBSOLETE]</em></b> +<dd>This procedure is no longer used: it is replaced by the draw_thin_line +procedure. However, still appears in the driver procedure vector for +backward compatibility. It should never be called, and drivers should not +implement it. +</dl> + +<h3><a name="High_level_drawing"></a>High-level drawing</h3> + +<p> +In addition to the lower-level drawing operations described above, the +driver interface provides a set of high-level operations. Normally these +will have their default implementation, which converts the high-level +operation to the low-level ones just described; however, drivers that +generate high-level output formats such as CGM, or communicate with devices +that have firmware for higher-level operations such as polygon fills, may +implement these high-level operations directly. For more details, please +consult the source code, specifically: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <th align=left>Header + <td> + <th align=left>Defines +<tr valign=top> <td><a href="../src/gxpaint.h">gxpaint.h</a> + <td> + <td><b><tt>gx_fill_params</tt></b>, <b><tt>gx_stroke_params</tt></b> +<tr valign=top> <td><a href="../src/gxfixed.h">gxfixed.h</a> + <td> + <td><b><tt>fixed</tt></b>, <b><tt>gs_fixed_point</tt></b> (used by + <b><tt>gx_*_params</tt></b>) +<tr valign=top> <td><a href="../src/gxistate.h">gxistate.h</a> + <td> + <td><b><tt>gs_imager_state</tt></b> (used by <b><tt>gx_*_params</tt></b>) +<tr valign=top> <td><a href="../src/gxline.h">gxline.h</a> + <td> + <td><b><tt>gx_line_params</tt></b> (used by <b><tt>gs_imager_state</tt></b>) +<tr valign=top> <td><a href="../src/gslparam.h">gslparam.h</a> + <td> + <td>line cap/join values (used by <b><tt>gx_line_params</tt></b>) +<tr valign=top> <td><a href="../src/gxmatrix.h">gxmatrix.h</a> + <td> + <td><b><tt>gs_matrix_fixed</tt></b> (used by <b><tt>gs_imager_state</tt></b>) +<tr valign=top> <td><a href="../src/gspath.h">gspath.h</a>, <a href="../src/gxpath.h">gxpath.h</a>, <a href="../src/gzpath.h">gzpath.h</a> + <td> + <td><b><tt>gx_path</tt></b> +<tr valign=top> <td><a href="../src/gxcpath.h">gxcpath.h</a>, <a href="../src/gzcpath.h">gzcpath.h</a> + <td> + <td><b><tt>gx_clip_path</tt></b> +</table></blockquote> + +<p> +For a minimal example of how to implement the high-level drawing operations, +see <a href="../src/gdevtrac.c">gdevtrac.c</a>. + +<h4><a name="Paths"></a>Paths</h4> + +<dl> +<dt><b><tt>int (*fill_path)(P6(gx_device *dev, +const gs_imager_state *pis, gx_path *ppath, +const gx_fill_params *params, +const gx_drawing_color *pdcolor, +const gx_clip_path *pcpath))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Fill the given path, clipped by the given clip path, according to the +given parameters, with the given color. The clip path pointer may be +<b><tt>NULL</tt></b>, meaning do not clip. +</dl> + +<dl> +<dt><b><tt>int (*stroke_path)(P6(gx_device *dev, +const gs_imager_state *pis, gx_path *ppath, +const gx_stroke_params *params, +const gx_drawing_color *pdcolor, +const gx_clip_path *pcpath))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Stroke the given path, clipped by the given clip path, according to the +given parameters, with the given color. The clip path pointer may be +<b><tt>NULL</tt></b>, meaning not to clip. +</dl> + +<dl> +<dt><b><tt>int (*fill_mask)(P13(gx_device *dev, +const byte *data, int data_x, int raster, +gx_bitmap_id id, int x, int y, int width, +int height, const gx_drawing_color *pdcolor, int depth, +int command, const gx_clip_path *pcpath))</tt></b> +<b><em>[OPTIONAL]</em></b> +<dd>Color the 1-bits in the given mask (or according to the alpha values, +if <b><tt>depth</tt></b> > 1), clipped by the given clip path, +with the given color and logical operation. The clip path pointer may be +<b><tt>NULL</tt></b>, meaning do not clip. The parameters +<b><tt>data</tt></b>, ..., <b><tt>height</tt></b> are as for +<b><tt>copy_mono</tt></b>; depth is as for <b><tt>copy_alpha</tt></b>; +command is as for <b><tt>copy_rop</tt></b>. +</dl> + +<h4><a name="Images"></a>Images</h4> + +<p> +Similar to the high-level interface for fill and stroke graphics, a high-level +interface exists for bitmap images. The procedures in this part of the +interface are optional. + +<p> +Bitmap images come in a variety of types, corresponding closely (but not +precisely) to the PostScript ImageTypes. The generic or common part of all +bitmap images is defined by: + +<blockquote> +<pre>typedef struct { + const gx_image_type_t *type; + gs_matrix ImageMatrix; +} gs_image_common_t;</pre> +</blockquote> + +<p> +Bitmap images that supply data (all image types except +<b><tt>image_type_from_device</tt></b> (2)) are defined by: + +<blockquote> +<pre>#define gs_image_max_components 5 +typedef struct { + << gs_image_common_t >> + int Width; + int Height; + int BitsPerComponent; + float Decode[gs_image_max_components * 2]; + bool Interpolate; +} gs_data_image_t;</pre> +</blockquote> + +<p> +Images that supply pixel (as opposed to mask) data are defined by: + +<blockquote> +<pre>typedef enum { + /* Single plane, chunky pixels. */ + gs_image_format_chunky = 0, + /* num_components planes, chunky components. */ + gs_image_format_component_planar = 1, + /* BitsPerComponent * num_components planes, 1 bit per plane */ + gs_image_format_bit_planar = 2 +} gs_image_format_t; +typedef struct { + << gs_data_image_t >> + const gs_color_space *ColorSpace; + bool CombineWithColor; +} gs_pixel_image_t;</pre> +</blockquote> + +<p> +Ordinary PostScript Level 1 or Level 2 (<b><tt>ImageType</tt></b> 1) images +are defined by: + +<blockquote> +<pre>typedef enum { + /* No alpha. */ + gs_image_alpha_none = 0, + /* Alpha precedes color components. */ + gs_image_alpha_first, + /* Alpha follows color components. */ + gs_image_alpha_last +} gs_image_alpha_t; +typedef struct { + << gs_pixel_image_t >> + bool ImageMask; + bool adjust; + gs_image_alpha_t Alpha; +} gs_image1_t; +typedef gs_image1_t gs_image_t;</pre> +</blockquote> + +<p> +Of course, standard PostScript images don't have an alpha component. For +more details, consult the source code in <a +href="../src/gsiparam.h">gsiparam.h</a> and <b><tt>gsiparm*.h</tt></b>, +which define parameters for an image. + +<p> +The <b><tt>begin[_typed_]image</tt></b> driver procedures create image +enumeration structures. The common part of these structures consists of: + +<blockquote> +<pre>typedef struct gx_image_enum_common_s { + const gx_image_type_t *image_type; + const gx_image_enum_procs_t *procs; + gx_device *dev; + gs_id id; + int num_planes; + int plane_depths[gs_image_max_planes]; /* [num_planes] */ + int plane_widths[gs_image_max_planes] /* [num_planes] */ +} gx_image_enum_common_t;</pre> +</blockquote> + +<p> +where <b><tt>procs</tt></b> consists of: + +<blockquote> +<pre>typedef struct gx_image_enum_procs_s { + + /* + * Pass the next batch of data for processing. + */ +#define image_enum_proc_plane_data(proc)\ + int proc(P4(gx_device *dev,\ + gx_image_enum_common_t *info, const gx_image_plane_t *planes,\ + int height)) + + image_enum_proc_plane_data((*plane_data)); + + /* + * End processing an image, freeing the enumerator. + */ +#define image_enum_proc_end_image(proc)\ + int proc(P3(gx_device *dev,\ + gx_image_enum_common_t *info, bool draw_last)) + + image_enum_proc_end_image((*end_image)); + + /* + * Flush any intermediate buffers to the target device. + * We need this for situations where two images interact + * (currently, only the mask and the data of ImageType 3). + * This procedure is optional (may be 0). + */ +#define image_enum_proc_flush(proc)\ + int proc(P1(gx_image_enum_common_t *info)) + + image_enum_proc_flush((*flush)); + +} gx_image_enum_procs_t;</pre> +</blockquote> + +<p> In other words, <b><tt>begin[_typed]_image</tt></b> sets up an +enumeration structure that contains the procedures that will process the +image data, together with all variables needed to maintain the state of the +process. Since this is somewhat tricky to get right, if you plan to create +one of your own you should probably read an existing implementation of +<b><tt>begin[_typed]_image</tt></b>, such as the one in <a +href="../src/gdevbbox.c">gdevbbox.c</a> or <a +href="../src/gdevps.c">gdevps.c</a>. + +<p> +The data passed at each call of <b><tt>image_plane_data</tt></b> consists of +one or more planes, as appropriate for the type of image. +<b><tt>begin[_typed]_image</tt></b> must initialize the +<b><tt>plane_depths</tt></b> array in the enumeration structure with the +depths (bits per element) of the planes. The array of +<b><tt>gx_image_plane_t</tt></b> structures passed to each call of +<b><tt>image_plane_data</tt></b> then defines where the data are stored, as +follows: + +<blockquote> +<pre>typedef struct gx_image_plane_s { + const byte *data; + int data_x; + uint raster; +} gx_image_plane_t;</pre> +</blockquote> + +<dl> +<dt><b><tt>int (*begin_image)(P9(gx_device *dev, +const gs_imager_state *pis, const gs_image_t *pim, +gs_image_format_t format, gs_int_rect *prect, +const gx_drawing_color *pdcolor, +const gx_clip_path *pcpath, gs_memory_t *memory, +gx_image_enum_common_t **pinfo))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Begin the transmission of an image. Zero or more calls of +<b><tt>image_plane_data</tt></b> will follow, and then a call of +<b><tt>end_image</tt></b>. The parameters of <b><tt>begin_image</tt></b> +are as follows: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>pis</tt></b> + <td> + <td>pointer to an imager state. The only relevant elements of the + imager state are the CTM (coordinate transformation matrix), + the logical operation (<b><tt>RasterOp</tt></b> or + transparency), and the color rendering information. +<tr valign=top> <td><b><tt>pim</tt></b> + <td> + <td>pointer to the <b><tt>gs_image_t</tt></b> structure that + defines the image parameters +<tr valign=top> <td><b><tt>format</tt></b> + <td> + <td>defines how pixels are represented for + <b><tt>image_plane_data</tt></b>. See the description of + <b><tt>image_plane_data</tt></b> below +<tr valign=top> <td><b><tt>prect</tt></b> + <td> + <td>if not <b><tt>NULL</tt></b>, defines a subrectangle of the + image; only the data for this subrectangle will be passed to + <b><tt>image_plane_data</tt></b>, and only this subrectangle should + be drawn +<tr valign=top> <td><b><tt>pdcolor</tt></b> + <td> + <td>defines a drawing color, only needed for masks or if + <b><tt>CombineWithColor</tt></b> is true +<tr valign=top> <td><b><tt>pcpath</tt></b> + <td> + <td>if not <b><tt>NULL</tt></b>, defines an optional clipping path +<tr valign=top> <td><b><tt>memory</tt></b> + <td> + <td>defines the allocator to be used for allocating bookkeeping + information +<tr valign=top> <td><b><tt>pinfo</tt></b> + <td> + <td>the implementation should return a pointer to its state + structure here +</table></blockquote> + +<p> +<b><tt>begin_image</tt></b> is expected to allocate a structure for its +bookkeeping needs, using the allocator defined by the memory parameter, and +return it in <b><tt>*pinfo</tt></b>. <b><tt>begin_image</tt></b> should not assume that +the structures in <b><tt>*pim</tt></b>, <b><tt>*prect</tt></b>, or +<b><tt>*pdcolor</tt></b> will survive the call on +<b><tt>begin_image</tt></b> (except for the color space in +<b><tt>*pim->ColorSpace</tt></b>): it should copy any necessary parts of +them into its own bookkeeping structure. It may, however, assume that +<b><tt>*pis</tt></b>, <b><tt>*pcpath</tt></b>, and of course +<b><tt>*memory</tt></b> will live at least until <b><tt>end_image</tt></b> +is called. + +<p> +<b><tt>begin_image</tt></b> returns 0 normally, or 1 if the image does not +need any data. In the latter case, <b><tt>begin_image</tt></b> does not +allocate an enumeration structure. +</dl> + +<dl> +<dt><b><tt>int (*begin_typed_image)(P9(gx_device *dev, +const gs_imager_state *pis, const gs_matrix *pmat, +const gs_image_common_t *pim, gs_int_rect *prect, +const gx_drawing_color *pdcolor, +const gx_clip_path *pcpath, gs_memory_t *memory, +gx_image_enum_common_t **pinfo))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>This has the same function as <b><tt>begin_image</tt></b>, except +<ul> +<li>The image may be of any <b><tt>ImageType</tt></b>, not only +<b><tt>image_type_simple</tt></b> (1); + +<li>The image format is included in the image structure, not supplied as a +separate argument; + +<li>The optional <b><tt>pmat</tt></b> argument provides a matrix that +substitutes for the one in the imager state; + +<li>For mask images, if <b><tt>pmat</tt></b> is not <b><tt>NULL</tt></b> +and the color is pure, <b><tt>pis</tt></b> may be <b><tt>NULL</tt></b>. +</ul> +</dl> + +<p> +The actual transmission of data uses the procedures in the enumeration +structure, not driver procedures, since the handling of the data usually +depends on the image type and parameters rather than the device. These +procedures are specified as follows. + +<dl> +<dt><b><tt>int (*image_plane_data)(P4(gx_device *dev, +gx_image_enum_common_t *info, +const gx_image_plane_t *planes, int height))</tt></b> +<dd>This call provides more of the image source data: specifically, +<b><tt>height</tt></b> rows, with <b><tt>Width</tt></b> pixels supplied for +each row. + +<p> +The data for each row are packed big-endian within each byte, as for +<b><tt>copy_color</tt></b>. The <b><tt>data_x</tt></b> (starting X position +within the row) and <b><tt>raster</tt></b> (number of bytes per row) are +specified separately for each plane, and may include some padding at the +beginning or end of each row. Note that for non-mask images, the input data +may be in any color space and may have any number of bits per component (1, +2, 4, 8, 12); currently mask images always have 1 bit per component, but in +the future, they might allow multiple bits of alpha. Note also that each +call of <b><tt>image_plane_data</tt></b> passes complete pixels: for example, for +a chunky image with 24 bits per pixel, each call of +<b><tt>image_plane_data</tt></b> passes 3N bytes of data (specifically, +3 × Width × height). + +<p> +The interpretation of planes depends on the <b><tt>format</tt></b> member of +the <b><tt>gs_image[_common]_t</tt></b> structure: + +<ul> +<li>If the format is <b><tt>gs_image_format_chunky</tt></b>, +<b><tt>planes[0].data</tt></b> points to data in "chunky" format, in which +the components follow each other (for instance, RGBRGBRGB....) + +<li>If the format is <b><tt>gs_image_format_component_planar</tt></b>, +<b><tt>planes[0 .. N-1].data</tt></b> point to data for the +<b><em>N</em></b> components (for example, <b><em>N</em></b>=3 for RGB +data); each plane contains samples for a single component, for instance, +RR..., GG..., BB.... Note that the planes are divided by component, not by +bit: for example, for 24-bit RGB data, <b><em>N</em></b>=3, with 8-bit +values in each plane of data. + +<li>If the format is <b><tt>gs_image_format_bit_planar</tt></b>, +<b><tt>planes[0 .. N*B-1].data</tt></b> point to data for the +<b><em>N</em></b> components of <b><em>B</em></b> bits each (for example, +<b><em>N</em></b>=3 and <b><em>B</em></b>=4 for RGB data with 4 bits per +component); each plane contains samples for a single bit, for instance, R0 +R1 R2 R3 G0 G1 G2 G3 B0 B1 B2 B3. Note that the most significant bit of +each plane comes first. +</ul> + +<p> +If, as a result of this call, <b><tt>image_plane_data</tt></b> has been called with all +the data for the (sub-)image, it returns 1; otherwise, it returns 0 or an +error code as usual. + +<p> +<b><tt>image_plane_data</tt></b>, unlike most other procedures that take bitmaps as +arguments, does not require the data to be aligned in any way. + +<p> +Note that for some image types, different planes may have different +numbers of bits per pixel, as defined in the <b><tt>plane_depths</tt></b> array. +</dl> + +<dl> +<dt><b><tt>int (*end_image)(P3(gx_device *dev, void *info, +bool draw_last))</tt></b> +<dd>Finish processing an image, either because all data have been supplied +or because the caller has decided to abandon this image. +<b><tt>end_image</tt></b> may be called at any time after +<b><tt>begin_image</tt></b>. It should free the info structure and any +subsidiary structures. If <b><tt>draw_last</tt></b> is true, it should +finish drawing any buffered lines of the image. +</dl> + +<h5><a name="Images_notes"></a>Notes</h5> + +<p> +While there will almost never be more than one image enumeration in +progress -- that is, after a <b><tt>begin_image</tt></b>, +<b><tt>end_image</tt></b> will almost always be called before the next +<b><tt>begin_image</tt></b> -- driver code should not rely on this +property; in particular, it should store all information regarding the +image in the info structure, not in the driver structure. + +<p> +Note that if <b><tt>begin_[typed_]image</tt></b> saves its parameters in +the info structure, it can decide on each call whether to use its own +algorithms or to use the default implementation. (It may need to call +<b><tt>gx_default_begin</tt></b>/<b><tt>end_image</tt></b> partway +through.) [A later revision of this document may include an example here.] + +<h4><a name="Text"></a>Text</h4> + +<p> +The third high-level interface handles text. As for images, the interface +is based on creating an enumerator which then may execute the operation in +multiple steps. As for the other high-level interfaces, the procedures are +optional. + +<dl> +<dt><b><tt>int (*text_begin)(P9(gx_device *dev, +gs_imager_state *pis, const gs_text_params_t *text, +gs_font *font, gx_path *path, +const gx_device_color *pdcolor, +const gx_clip_path *pcpath, gs_memory_t *memory, +gs_text_enum_t **ppte))</tt></b> <b><em>[OPTIONAL]</em></b> + +<dd> +Begin processing text, by creating a state structure and storing it in +<b><tt>*ppte</tt></b>. The parameters of <b><tt>text_begin</tt></b> are as +follows: +</dl> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>dev</tt></b> + <td> + <td>The usual pointer to the device. +<tr valign=top> <td><b><tt>pis</tt></b> + <td> + <td>A pointer to an imager state. All elements may be relevant, + depending on how the text is rendered. +<tr valign=top> <td><b><tt>text</tt></b> + <td> + <td>A pointer to the structure that defines the text operation + and parameters. See <a href="../src/gstext.h">gstext.h</a> for details. +<tr valign=top> <td><b><tt>font</tt></b> + <td> + <td>Defines the font for drawing. +<tr valign=top> <td><b><tt>path</tt></b> + <td> + <td>Defines the path where the character outline will be appended + (if the text operation includes <b><tt>TEXT_DO_...PATH</tt></b>), + and whose current point indicates where drawing should occur + and will be updated by the string width (unless the text + operation includes <b><tt>TEXT_DO_NONE</tt></b>). +<tr valign=top> <td><b><tt>pdcolor</tt></b> + <td> + <td>Defines the drawing color for the text. Only relevant if + the text operation includes <b><tt>TEXT_DO_DRAW</tt></b>. +<tr valign=top> <td><b><tt>pcpath</tt></b> + <td> + <td>If not <b><tt>NULL</tt></b>, defines an optional clipping path. + Only relevant if the text operation includes + <b><tt>TEXT_DO_DRAW</tt></b>. +<tr valign=top> <td><b><tt>memory</tt></b> + <td> + <td>Defines the allocator to be used for allocating bookkeeping + information. +<tr valign=top> <td><b><tt>ppte</tt></b> + <td> + <td>The implementation should return a pointer to its state + structure here. +</table></blockquote> + +<p> +<b><tt>text_begin</tt></b> must allocate a structure for its bookkeeping +needs, using the allocator defined by the <b><tt>memory</tt></b> parameter, +and return it in <b><tt>*ppte</tt></b>. <b><tt>text_begin</tt></b> may +assume that the structures passed as parameters will survive until text +processing is complete. + +<p> +Clients should not call the driver <b><tt>text_begin</tt></b> procedure +directly. Instead, they should call <b><tt>gx_device_text_begin</tt></b>, +which takes the same parameters and also initializes certain common elements +of the text enumeration structure, or <b><tt>gs_text_begin</tt></b>, which +takes many of the parameters from a graphics state structure. For details, +see <a href="../src/gstext.h">gstext.h</a>. + +<p> +The actual processing of text uses the procedures in the enumeration +structure, not driver procedures, since the handling of the text may depend +on the font and parameters rather than the device. Text processing may also +require the client to take action between characters, either because the +client requested it (<b><tt>TEXT_INTERVENE</tt></b> in the operation) or +because rendering a character requires suspending text processing to call an +external package such as the PostScript interpreter. (It is a deliberate +design decision to handle this by returning to the client, rather than +calling out of the text renderer, in order to avoid potentially unknown +stack requirements.) Specifically, the client must call the following +procedures, which in turn call the procedures in the text enumerator. + +<dl> +<dt><b><tt>int gs_text_process(P1(gs_text_enum_t *pte))</tt></b> +<dd>Continue processing text. This procedure may return 0 or a negative +error code as usual, or one of the following values (see +<a href="../src/gstext.h">gstext.h</a> for details). + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>TEXT_PROCESS_RENDER</tt></b> + <td>The client must cause the current character to be rendered. + This currently only is used for PostScript Type 0-4 fonts + and their CID-keyed relatives. +<tr valign=top> <td><b><tt>TEXT_PROCESS_INTERVENE</tt></b> + <td>The client has asked to intervene between characters. + This is used for <b><tt>cshow</tt></b> and <b><tt>kshow</tt></b>. +</table></blockquote> +</dl> + +<dl> +<dt><b><tt>int gs_text_release(P2(gs_text_enum_t *pte, +client_name_t cname))</tt></b> <dd>Finish processing text and release +all associated structures. Clients must call this procedure after +<b><tt>gs_text_process</tt></b> returns 0 or an error, and may call it at +any time. +</dl> + +<p> +There are numerous other procedures that clients may call during text +processing. See <a href="../src/gstext.h">gstext.h</a> for details. + +<h5><a name="Text_notes"></a>Notes</h5> + +<p> +Note that unlike many other optional procedures, the default implementation +of <b><tt>text_begin</tt></b> cannot simply return: like the default +implementation of <b><tt>begin[_typed]_image</tt></b>, it must create and +return an enumerator. Furthermore, the implementation of the +<b><tt>process</tt></b> procedure (in the enumerator structure, called by +<b><tt>gs_text_process</tt></b>) cannot simply return without doing +anything, even if it doesn't want to draw anything on the output. See the +comments in <a href="../src/gxtext.h">gxtext.h</a> for details. + +<h3><a name="Reading_bits_back"></a>Reading bits back</h3> + +<dl> +<dt><b><tt>int (*get_bits_rectangle)(P4(gx_device *dev, +const gs_int_rect *prect, gs_get_bits_params_t *params, +gs_int_rect **unread))</tt></b> <b><em>[OPTIONAL]</em></b> + +<dd> +Read a rectangle of bits back from the device. The <b><tt>params</tt></b> +structure consists of: + +<table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>options</tt></b> + <td> + <td>the allowable formats for returning the data +<tr valign=top> <td><b><tt>data[32]</tt></b> + <td> + <td>pointers to the returned data +<tr valign=top> <td><b><tt>x_offset</tt></b> + <td> + <td>the X offset of the first returned pixel in data +<tr valign=top> <td><b><tt>raster</tt></b> + <td> + <td>the distance between scan lines in the returned data +</table> + +<p> +<b><tt>options</tt></b> is a bit mask specifying what formats the client is +willing to accept. (If the client has more flexibility, the implementation +may be able to return the data more efficiently, by avoiding representation +conversions.) The options are divided into groups. + +<blockquote><dl> +<dt><b><em>alignment</em></b> +<dd>Specifies whether the returned data must be aligned in the normal +manner for bitmaps, or whether unaligned data are acceptable. + +<dt><b><em>pointer or copy</em></b> +<dd>Specifies whether the data may be copied into storage provided by the +client and/or returned as pointers to existing storage. (Note that if +copying is not allowed, it is much more likely that the implementation will +return an error, since this requires that the client accept the data in the +implementation's internal format.) + +<dt><b><em>X offset</em></b> +<dd>Specifies whether the returned data must have a specific X offset +(usually zero, but possibly other values to avoid skew at some later stage +of processing) or whether it may have any X offset (which may avoid skew in +the <b><tt>get_bits_rectangle</tt></b> operation itself). + +<dt><b><em>raster</em></b> +<dd>Specifies whether the raster (distance between returned scan lines) +must have its standard value, must have some other specific value, or may +have any value. The standard value for the raster is the device width +padded out to the alignment modulus when using pointers, or the minimum +raster to accommodate the X offset + width when copying (padded out to the +alignment modulus if standard alignment is required). + +<dt><b><em>format</em></b> +<dd>Specifies whether the data are returned in chunky (all components of a +single pixel together), component-planar (each component has its own scan +lines), or bit-planar (each bit has its own scan lines) format. + +<dt><b><em>color space</em></b> +<dd>Specifies whether the data are returned as native device pixels, or in +a standard color space. Currently the only supported standard space is +RGB. + +<dt><b><em>standard component depth</em></b> +<dd>Specifies the number of bits per component if the data are returned in +the standard color space. (Native device pixels use +<b><tt>dev</tt></b>-><b><tt>color_info.depth</tt></b> bits per pixel.) + +<dt><b><em>alpha</em></b> +<dd>Specifies whether alpha channel information should be returned as the +first component, the last component, or not at all. Note that for devices +that have no alpha capability, the returned alpha values will be all 1s. +</dl></blockquote> + +<p> +The client may set more than one option in each of the above groups; the +implementation will choose one of the selected options in each group to +determine the actual form of the returned data, and will update +<b><tt>params[].options</tt></b> to indicate the form. The returned +<b><tt>params[].options</tt></b> will normally have only one option set per +group. + +<p> +For further details on <b><tt>params</tt></b>, see <a +href="../src/gxgetbit.h">gxgetbit.h</a>. For further details on +<b><tt>options</tt></b>, see <a href="../src/gxbitfmt.h">gxbitfmt.h</a>. + +<p> +Define w = <b><tt>prect</tt></b>->q.x - <b><tt>prect</tt></b>->p.x, h += <b><tt>prect</tt></b>->q.y - <b><tt>prect</tt></b>->p.y. If the +bits cannot be read back (for example, from a printer), return +<b><tt>gs_error_unknownerror</tt></b>; if raster bytes is not enough space +to hold <b><tt>offset_x</tt></b> + w pixels, or if the source rectangle +goes outside the device dimensions (p.x < 0 || p.y < 0 || q.x > +<b><tt>dev</tt></b>->width || q.y > <b><tt>dev</tt></b>->height), +return <b><tt>gs_error_rangecheck</tt></b>; if any regions could not be +read, return <b><tt>gs_error_ioerror</tt></b> if unpainted is +<b><tt>NULL</tt></b>, otherwise the number of rectangles (see below); +otherwise return 0. + +<p> +The caller supplies a buffer of <b><tt>raster</tt></b> × h +bytes starting at <b><tt>data[0]</tt></b> for the returned data in chunky +format, or <b><em>N</em></b> buffers of +<b><tt>raster</tt></b> × h bytes starting at +<b><tt>data[0]</tt></b> through +<b><tt>data[</tt></b><b><em>N-1</em></b><b><tt>]</tt></b> in planar format +where <b><em>N</em></b> is the number of components or bits. The contents +of the bits beyond the last valid bit in each scan line (as defined by w) +are unpredictable. data need not be aligned in any way. If +<b><tt>x_offset</tt></b> is non-zero, the bits before the first valid bit +in each scan line are undefined. If the implementation returns pointers to +the data, it stores them into <b><tt>data[0]</tt></b> or +<b><tt>data[</tt></b><b><em>0..N-1</em></b><b><tt>]</tt></b>. + +<p> +If not all the source data are available (for example, because the source +was a partially obscured window and backing store was not available or not +used), or if the rectangle does not fall completely within the device's +coordinate system, any unread bits are undefined, and the value returned +depends on whether unread is <b><tt>NULL</tt></b>. If unread is +<b><tt>NULL</tt></b>, return <b><tt>gs_error_ioerror</tt></b>; in this case, +some bits may or may not have been read. If unread is not +<b><tt>NULL</tt></b>, allocate (using <b><tt>dev</tt></b>->memory) and +fill in a list of rectangles that could not be read, store the pointer to +the list in <b><tt>*unread</tt></b>, and return the number of rectangles; in +this case, all bits not listed in the rectangle list have been read back +properly. The list is not sorted in any particular order, but the +rectangles do not overlap. Note that the rectangle list may cover a +superset of the region actually obscured: for example, a lazy implementation +could return a single rectangle that was the bounding box of the region. +</dl> + +<dl> +<dt><b><tt>int (*get_bits)(P4(gx_device *dev, int y, +byte *data, byte **actual_data))</tt></b> +<b><em>[OPTIONAL]</em></b> +<dd>Read scan line <b><tt>y</tt></b> of bits back from the device into the +area starting at data. This call is functionally equivalent to + +<blockquote> +<pre>(*get_bits_rectangle) + (dev, {0, y, dev->width, y+1}, + {(GB_ALIGN_ANY | (GB_RETURN_COPY | GB_RETURN_POINTER) | GB_OFFSET_0 | + GB_RASTER_STANDARD | GB_FORMAT_CHUNKY | GB_COLORS_NATIVE | + GB_ALPHA_NONE), + {data}})</pre></blockquote> + +<p> +with the returned value of +<b><tt>params</tt></b>-><b><tt>data[0]</tt></b> stored in +<b><tt>*actual_data</tt></b>, and will in fact be implemented this way if +the device defines a <b><tt>get_bits_rectangle</tt></b> procedure and does +not define one for <b><tt>get_bits</tt></b>. (If +<b><tt>actual_data</tt></b> is <b><tt>NULL</tt></b>, +<b><tt>GB_RETURN_POINTER</tt></b> is omitted from the options.) +</dl> + +<h3><a name="Parameters"></a>Parameters</h3> + +<p> +Devices may have an open-ended set of parameters, which are simply pairs +consisting of a name and a value. The value may be of various types: +integer (int or long), boolean, float, string, name, <b><tt>NULL</tt></b>, +array of integer, array of float, or arrays or dictionaries of mixed types. +For example, the <b><tt>Name</tt></b> of a device is a string; the +<b><tt>Margins</tt></b> of a device is an array of two floats. See +<a href="../src/gsparam.h">gsparam.h</a> for more details. + +<p> +If a device has parameters other than the ones applicable to all devices +(or, in the case of printer devices, all printer devices), it must provide +<b><tt>get_params</tt></b> and <b><tt>put_params</tt></b> procedures. If +your device has parameters beyond those of a straightforward display or +printer, we strongly advise using the <b><tt>_get_params</tt></b> and +<b><tt>_put_params</tt></b> procedures in an existing device (for example, +<a href="../src/gdevcdj.c">gdevcdj.c</a> or <a +href="../src/gdevbit.c">gdevbit.c</a>) as a model for your own code. + +<dl> +<dt><b><tt>int (*get_params)(P2(gx_device *dev, +gs_param_list *plist))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Read the parameters of the device into the parameter list at +<b><tt>plist</tt></b>, using the <b><tt>param_write_*</tt></b> +macros or procedures defined in <a href="../src/gsparam.h">gsparam.h</a>. +</dl> + +<dl> +<dt><b><tt>int (*get_hardware_params)(P2(gx_device *dev, +gs_param_list *plist))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Read the hardware-related parameters of the device into the parameter +list at plist. These are any parameters whose values are under control of +external forces rather than the program -- for example, front panel +switches, paper jam or tray empty sensors, etc. If a parameter involves +significant delay or hardware action, the driver should only determine the +value of the parameter if it is "requested" by the +<b><tt>gs_param_list</tt></b> [<b><tt>param_requested</tt></b>(plist, +<b><tt>key_name</tt></b>)]. This function may cause the asynchronous +rendering pipeline (if enabled) to be drained, so it should be used +sparingly. +</dl> + +<dl> +<dt><b><tt>int (*put_params)(P2(gx_device *dev, +gs_param_list *plist))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Set the parameters of the device from the parameter list at +<b><tt>plist</tt></b>, using the <b><tt>param_read_</tt></b>* +macros/procedures defined in <a href="../src/gsparam.h">gsparam.h</a>. All +<b><tt>put_params</tt></b> procedures must use a "two-phase commit" +algorithm; see <a href="../src/gsparam.h">gsparam.h</a> for details. +</dl> + +<h4><a name="Default_CRD_parameters"></a>Default color rendering +dictionary (CRD) parameters</h4> + +<p> +Drivers that want to provide one or more default CIE color rendering +dictionaries (CRDs) can do so through <b><tt>get_params</tt></b>. To do +this, they create the CRD in the usual way (normally using the +<b><tt>gs_cie_render1_build</tt></b> and <b><tt>_initialize</tt></b> +procedures defined in <a href="../src/gscrd.h">gscrd.h</a>), and then write +it as a parameter using <b><tt>param_write_cie_render1</tt></b> defined in +<a href="../src/gscrdp.h">gscrdp.h</a>. However, the TransformPQR procedure +requires special handling. If the CRD uses a TransformPQR procedure +different from the default (identity), the driver must do the following: + +<ul> +<li>The TransformPQR element of the CRD must include a +<b><tt>proc_name</tt></b>, and optionally <b><tt>proc_data</tt></b>. The +<b><tt>proc_name</tt></b> is an arbitrary name chosen by the driver to +designate the particular TransformPQR function. It must not be the same as +any device parameter name; we strongly suggest it include the device name, +for instance, "<b><tt>bitTPQRDefault</tt></b>". + +<li>For each such named TransformPQR procedure, the driver's +<b><tt>get_param</tt></b> procedure must provide a parameter of the same +name. The parameter value must be a string whose bytes are the actual +procedure address. +</ul> + +<p> +For a complete example, see the <b><tt>bit_get_params</tt></b> procedure in +<a href="../src/gdevbit.c">gdevbit.c</a>. Note that it is essential that +the driver return the CRD or the procedure address only if specifically +requested (<b><tt>param_requested(...)</tt></b> > 0); otherwise, errors +will occur. + +<h3><a name="External_fonts"></a>External fonts</h3> + +<p> +Drivers may include the ability to display text. More precisely, they may +supply a set of procedures that in turn implement some font and text +handling capabilities, described in <a href="Xfonts.htm">a separate +document</a>. The link between the two is the driver procedure that +supplies the font and text procedures: + +<dl> +<dt><b><tt>xfont_procs *(*get_xfont_procs)(P1(gx_device *dev))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Return a structure of procedures for handling external fonts and text +display. A <b><tt>NULL</tt></b> value means that this driver doesn't +provide this capability. +</dl> + +<p> +For technical reasons, a second procedure is also needed: + +<dl> +<dt><b><tt>gx_device *(*get_xfont_device)(P1(gx_device *dev))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Return the device that implements <b><tt>get_xfont_procs</tt></b> in a +non-default way for this device, if any. Except for certain special +internal devices, this is always the device argument. +</dl> + +<h3><a name="Page_devices"></a>Page devices</h3> + +<dl> +<dt><b><tt>gx_device *(*get_page_device)(P1(gx_device *dev))</tt></b> +<b><em>[OPTIONAL]</em></b> +<dd>According to the Adobe specifications, some devices are "page devices" +and some are not. This procedure returns <b><tt>NULL</tt></b> if the +device is not a page device, or the device itself if it is a page device. +In the case of forwarding devices, <b><tt>get_page_device</tt></b> returns +the underlying page device (or <b><tt>NULL</tt></b> if the underlying +device is not a page device). +</dl> + +<h3><a name="Miscellaneous"></a>Miscellaneous</h3> + +<dl> +<dt><b><tt>int (*get_band)(P3(gx_device *dev, int y, +int *band_start))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>If the device is a band device, this procedure stores in +<b><tt>*band_start</tt></b> the scan line (device Y coordinate) of the band +that includes the given Y coordinate, and returns the number of scan lines +in the band. If the device is not a band device, this procedure returns 0. +The latter is the default implementation. +</dl> + +<dl> +<dt><b><tt>void (*get_clipping_box)(P2(gx_device *dev, +gs_fixed_rect *pbox))</tt></b> <b><em>[OPTIONAL]</em></b> +<dd>Stores in <b><tt>*pbox</tt></b> a rectangle that defines the device's +clipping region. For all but a few specialized devices, this is +<em>((0,0),(width,height))</em>. +</dl> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Fonts.htm b/Master/xemtex/doc/ghostscript/Fonts.htm new file mode 100644 index 00000000000..add24f89d7f --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Fonts.htm @@ -0,0 +1,1288 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Fonts and font facilities supplied with Ghostscript</title> +<!-- $Id: Fonts.htm,v 1.22.2.13.2.6 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: fonts.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Fonts and font facilities supplied with Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#About">About Ghostscript fonts</a> +<li><a href="#Free_fonts">Ghostscript's free fonts</a> +<li><a href="#Other_fonts">Other free fonts</a> +<ul> +<li><a href="#Computer_Modern">Computer Modern Fontmap</a> +<li><a href="#CID_Adobe">CJK CID-keyed fonts by Adobe</a> +<li><a href="#CMap_Adobe">Adobe CMaps</a> +<li><a href="#Chinese">Free Chinese (Hanzi) fonts</a> +<li><a href="#Japanese">Free Japanese (Kanji) fonts</a> +<li><a href="#Korean">Free Korean (Hangul and Hanja) fonts</a> +<li><a href="#Cyrillic">Free Cyrillic fonts</a> +<li><a href="#Partial_Unicode_fonts">(Partial) Unicode fonts</a> +</ul> +<li><a href="#Get_fonts">How Ghostscript gets fonts when it runs</a> +<li><a href="#Platform_fonts">Platform fonts</a> +<li><a href="#Add_fonts">Adding your own fonts</a> +<ul> +<li><a href="#Convert_BDF">Converting BDF fonts</a> +</ul> +<li><a href="#For_developers">For developers only</a> +<ul> +<li><a href="#Font_contents">Contents of fonts</a> +<li><a href="#Precompiling">Precompiling fonts</a> +<li><a href="#Short_identifiers">Precompiling fonts on platforms with identifier length limits</a> +<li><a href="#Unique_IDs">Font names and unique IDs</a> +<li><a href="#Codes">Codes used to make font file names</a> +</ul> +<li><a href="#Use_gs_fonts_with_X">Using Ghostscript fonts on X Windows displays</a> +<ul> +<li><a href="#Using_xset">Using <b><tt>xset</tt></b></a> +<li><a href="#Font_permanent_installation">Permanent installation</a> +<ul> +<li><a href="#Configure_xfs">Configuring the <b><tt>xfs</tt></b> font server</a> +<li><a href="#Configure_Xfree86">Xfree86 display servers</a> +</ul> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="About"></a>About Ghostscript fonts</h2> + +<p> +Ghostscript is distributed with two kinds of files related to fonts: + +<ul> +<li>the fonts themselves in individual files, and +<li>a file "<tt><b>Fontmap</b></tt>" that defines for +Ghostscript which file represents which font. +</ul> + +<p> +Most of the font files supplied with Ghostscript have the extension +<tt><b>.pfb</b></tt>, and a few have <tt><b>.pfa</b></tt> or +<tt><b>.gsf</b></tt>. Each file defines one ordinary PostScript Type 1 +outline font which any PostScript language interpreter can use. Files with +<tt><b>.pfa</b></tt> or <tt><b>.pfb</b></tt> extensions are also compatible +with Adobe Type Manager (ATM) and with tools that don't include a full +PostScript language interpreter; files with <tt><b>.gsf</b></tt> extension +are incompatible with ATM and other tools. Ghostscript compiled with the +"ttfont" option can also use TrueType fonts with the extension +<tt><b>.ttf</b></tt>. + +<p><a name="Fontmap"></a> +When Ghostscript needs a font, it must have some way to know where to look +for it: that's the purpose of the <b><tt>Fontmap</tt></b> file, which +associates the names of <em>fonts</em> such as <b><tt>/Times-Roman</tt></b> +with the names of font <em>files</em>, such as +<tt><b>n021003l.pfb</b></tt>. <b><tt>Fontmap</tt></b> can also create +aliases for font names, so that for instance, +<b><tt>/NimbusNo9L-Regu</tt></b> means the same font as +<b><tt>/Times-Roman</tt></b>. + +<hr> + +<h2><a name="Free_fonts"></a>Ghostscript's free fonts</h2> + +<p> +Two sets of free fonts are supplied for Ghostscript: + +<ul> +<li>35 commercial-quality Type 1 basic PostScript fonts -- Times, +Helvetica, Courier, Symbol, etc. -- contributed by URW++ Design and +Development Incorporated, of Hamburg, Germany +(<a href="http://www.urwpp.de/">http://www.urwpp.de/</a>). Fontmap names +them all. + +<li>A miscellaneous set including Cyrillic, kana, and fonts derived from +the free Hershey fonts, with improvements (such as adding accented +characters) by Thomas Wolff. The Hershey-based fonts are quite different +from traditional printer or display fonts; you can read about them in more +detail in the <a href="Hershey.htm">documentation on Hershey fonts</a>. + +</ul> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Font packages</font><hr> +<tr> <td><b>System</b> + <td> + <td><b>File name</b> + <td> + <td><b>Contents</b> + <td> + <td><b>Types</b> +<tr> <td colspan=7><hr> +<tr valign=top> <td>Unix + <td> + <td><b><tt>gnu-gs-fonts-std-#.##.tar.gz</tt></b> + <td> + <td>Basic + <td> + <td><b><tt>.afm</tt></b>, + <b><tt>.pfb</tt></b>,<br><b><tt>.pfm</tt></b> <tr valign=top> <td> + <td> + <td><b><tt>gnu-gs-fonts-other-#.##.tar.gz</tt></b> + <td> + <td>Miscellaneous + <td> + <td><b><tt>.afm</tt></b>, + <b><tt>.gsf</tt></b>,<br><b><tt>.pfa</tt></b>, <b><tt>.pfm</tt></b> + +</table> +</blockquote> + +<p> +"#.##" and "###" are the version number with and without punctuation. The +fonts are not updated every release, so just use the most recent +versions. +Fonts can be found at + +<blockquote> +<a href="ftp://ftp.gnu.org/gnu/ghostscript/" +class="offsite">ftp://ftp.gnu.org/gnu/ghostscript/</a> (and mirrors)<br> +</blockquote> + +<hr> + +<h2><a name="Other_fonts"></a>Other free fonts</h2> + +<h3><a name="Computer_Modern"></a>Computer Modern Fontmap</h3> + +<p> +Don Knuth's Computer Modern fonts are popular, free, and widely available. +A Fontmap appropriate for these fonts is available from: + +<blockquote> +<a +href="ftp://tug.ctan.org/tex-archive/fonts/cm/ps-type1/contrib/Fontmap.cmr" +class="offsite"> +ftp://tug.ctan.org/tex-archive/fonts/cm/ps-type1/contrib/Fontmap.cmr</a> +</blockquote> + +<p> +or from other <a href="New-user.htm#CTAN">CTAN</a> sites. + +<h3><a name="Chinese"></a>Free Chinese (Hanzi) fonts</h3> + +<p> +A free PostScript font for Traditional Chinese "KaiSu" in +<a href="CJK.htm#About_OCF_fonts">OCF</a> format, +originally provided courtesy of Jackson Technology, +Ltd., Taiwan under the GPL and now distributed by the Taiwan NeXT User +Group, is available from: + +<blockquote> +<a +href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/hanzi/" +class="offsite"> +ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/hanzi/ +</a> +</blockquote> + +<h3><a name="Japanese"></a>Free Japanese (Kanji) fonts</h3> + +<p> +Mr. Norio Katayama has done some work to make Ghostscript work well with +Kanji fonts. An easy-to-install Kanji font for Ghostscript, with +installation instructions, is at + +<blockquote> +<a +href="http://www.enel.ucalgary.ca/People/far/howto/gs-ttf.html" +class="offsite"> +http://www.enel.ucalgary.ca/People/far/howto/gs-ttf.html +</a> +</blockquote> + +<p> +The same site has patches to make Ghostscript work with Japanese OCF fonts via VFlib, +with documentation in both English and Japanese: + +<blockquote> +<a +href="http://www.enel.ucalgary.ca/People/far/howto/gs-vflib.html" +class="offsite"> +http://www.enel.ucalgary.ca/People/far/howto/gs-vflib.html +</a> +</blockquote> + +<p> +Here are some other resources in Japanese relating to VFlib and using +Ghostscript with Japanese OCF fonts: + +<blockquote><dl compact> +<dt><a href="http://kakugawa.aial.hiroshima-u.ac.jp/~kakugawa/Hacks/" +class="offsite">http://kakugawa.aial.hiroshima-u.ac.jp/~kakugawa/Hacks/</a> +<dt><a href="http://itohws03.ee.noda.sut.ac.jp/~matsuda/VFlib-FT/" +class="offsite">http://itohws03.ee.noda.sut.ac.jp/~matsuda/VFlib-FT/</a> +<dd>Author <<a href="mailto:matsuda@itohws01.ee.noda.sut.ac.jp">matsuda@itohws01.ee.noda.sut.ac.jp</a>> +</dl></blockquote> + +<h3><a name="Korean"></a>Free Korean (Hangul and Hanja) fonts</h3> + +<p> +Hwan Design Inc. created Hangul TrueType fonts (including Hanja) +and released under license similar to BSD. +These fonts can be used as <a href="CJK.htm#About_CID_keyed_fonts"> +CID-keyed font</a> via on-the-fly CIDFontType2 conversion. Refer +<a href="CJK.htm">CJK.htm</a> + +<blockquote> +<a href="ftp://ftp.mizi.com/pub/baekmuk/" +class="offsite"> +ftp://ftp.mizi.com/pub/baekmuk/</a> +</blockquote> + + +<h3><a name="Cyrillic"></a>Free Cyrillic fonts</h3> + +<p> +N. Glonty and A. Samarin created in 1989 a Cyrillic extension of TeX's +"Computer Modern" fonts, now freely available through the +<a href="New-user.htm#CTAN">Comprehensive TeX Archive Network</a> (CTAN), +for instance at + +<blockquote> +<a +href="ftp://ctan.tug.org/tex-archive/fonts/cyrillic/cmcyr/" +class="offsite"> +ftp://ctan.tug.org/tex-archive/fonts/cyrillic/cmcyr/ +</a> +</blockquote> + +<hr> + +<h3><a name="Partial_Unicode_fonts"></a>(Partial) Unicode fonts</h3> + +<p> +George W. Wilson is distributing some free partial Unicode fonts he created. +These fonts currently lack Arabic and CJK characters, but they include a +very large subset of the remaining Unicode set. They are available in both +Type 1 and TrueType formats. See + +<blockquote> +<a href="http://bibliofile.mc.duke.edu/gww/fonts/Unicode.html" +class="offsite">http://bibliofile.mc.duke.edu/gww/fonts/Unicode.html</a> +</blockquote> + +<h2><a name="Get_fonts"></a>How Ghostscript gets fonts when it runs</h2> + +<p> +Fonts occupy about 50KB each, so Ghostscript doesn't load them all +automatically when it runs. Instead, as part of normal initialization +Ghostscript runs a file <tt><b>gs_fonts.ps</b></tt>, which arranges to load +fonts on demand using information from the font map. To preload all of the +known fonts, invoke the procedure + +<blockquote><tt><b> +loadallfonts +</b></tt></blockquote> + +<p> +The file <tt><b>prfont.ps</b></tt> contains code to print a sample page of +a font. Load this program by including it in the <tt><b>gs</b></tt> +command line or by invoking + +<blockquote><tt><b> +(prfont.ps) run +</b></tt></blockquote> + +<p> +Then to produce a sampler of a particular font XYZ, invoke + +<blockquote><tt><b> +/XYZ DoFont +</b></tt></blockquote> + +<p>For example, + +<blockquote><tt><b> +/Times-Roman DoFont +</b></tt></blockquote> + +<p> +For more information about how Ghostscript loads fonts during execution, +see <a href="Use.htm#Font_lookup">here</a>. + +<hr> + +<h2><a name="Platform_fonts"></a>Platform fonts</h2> + +<p> +Ghostscript displays text on screen using whatever font technology is +provided by the system on which it runs, by calling the system's API to +display text. On platforms with X Windows, this is X Windows; on MS +Windows it may be TrueType or ATM; Ghostscript neither knows nor cares. + +<p> +The PostScript language specifies that fonts are data structures with +particular contents (for instance, they include a bounding box for the +font, an Encoding vector to specify the character set, etc.), and it is +common for PostScript files to use this fact; also, characters can be used +as clipping regions, and can be arbitrarily algorithmically rotated, +skewed, expanded or condensed, etc. Most of this information is available +in some form from the underlying graphics system, but one crucial piece is +not: the actual scalable outlines of the characters, which Ghostscript +needs in order to implement both clipping with character shapes and +arbitrarily transformed characters. Consequently + +<blockquote> +Ghostscript needs the scalable outlines of any font mentioned in a +document, and loads them from the disk (<tt><b>.pfa</b></tt>, +<tt><b>.pfb</b></tt>, or <tt><b>.gsf</b></tt> +file) in the usual way, even if it uses the platform's font machinery to +display the characters. In other words, Ghostscript must still be able to +find its font files. +</blockquote> + +<p> +To make matters worse, platforms use different names for their standard +fonts. For example, the Times Roman font, for which PostScript files use +the name "<b><tt>Times-Roman</tt></b>", may be known as +"<b><tt>Times-Roman</tt></b>", "<b><tt>Times Roman</tt></b>", +"<b><tt>Tms Rmn</tt></b>", +"<b><tt>Times New Roman</tt></b>", or +"<b><tt>TimesNewRoman</tt></b>". The name may even be completely +different: the usual Helvetica-equivalent TrueType font is called +"<b><tt>Arial</tt></b>". It is possible to deal with this situation by +introducing aliases in Fontmap, but there are two reasons why Ghostscript +does not currently do this: + +<ol> +<li>Methods of naming in different systems are so unstandardized that there +seems to be no small set of alternative names likely to cover most +situations. All five of the names above for Times Roman have been seen +under Windows and OS/2, depending on the version of the system, whether it +uses TrueType or ATM, and other unknown factors. + +<li>Each alias takes up space at run time. If each of the standard fonts +has three additional aliases, this might amount to 50KB of wasted space, +which may be a lot on some smaller systems. +</ol> + +<p> +If you don't seem to be getting nice characters on the screen under MS +Windows, you can try adding aliases to Fontmap, according to the +documentation you'll find in there. + +<hr> + +<h2><a name="Add_fonts"></a>Adding your own fonts</h2> + +<p> +Ghostscript can use any Type 0, 1, 3, 4, or 42 font acceptable to +other PostScript language interpreters or to ATM, including MultiMaster +fonts. Beginning with release 4.0, Ghostscript can also use TrueType fonts +if it was compiled with the "ttfont" option. + +<p> +To add fonts of your own, you must edit Fontmap to include at the end an +entry for your new font; the format for entries is documented +in Fontmap itself. Since later entries in Fontmap override earlier +entries, a font you add at the end supersedes any corresponding fonts supplied +with Ghostscript and defined earlier in the file. +In the PC world, Type 1 fonts are customarily given names ending in +<tt><b>.PFA</b></tt> or <tt><b>.PFB</b></tt>. Ghostscript can use these +directly: you just need to make the entry in Fontmap. +To add CID-keyed fonts, refer <a href="CJK.htm">CJK.htm</a>. + +<p> +If you want to use with Ghostscript a commercial fonts +(fonts sold as individual package, + Type 1 and CID fonts bundled to Adobe products, + TrueType fonts bundled to Microsoft Windows and Apple Macintosh, etc), +please read carefully the license that accompanies the font to +satisfy yourself that you may do so legally. + +The license of bundled fonts are usually quite varied: +browsing-only, printable, and embeddable. +The license of the system and the license of fonts on +the system must be descriminated. +Even if you have officially licensed system, +it does not mean you can use bundled fonts as you want. +In addition to, TrueType and OpenType format have internal +flags to restrict embedding, but, unfortunately, +sometimes they does not reflect the license +correctly. +You have to check the license of EACH fonts which you want to +use with Ghostscript. + +We take no responsibility for any possible violations of such licenses. + + +<h3><a name="Convert_BDF"></a>Converting BDF fonts</h3> + +<p> +Ghostscript provides a way to construct a (low-quality) Type 1 font from a +bitmap font in the BDF format popular in the Unix world. The shell script +<tt><b>bdftops</b></tt> (Unix) or the command file +<tt><b>bdftops.bat</b></tt> (DOS) converts a BDF file to a +scalable outline using <tt><b>bdftops.ps</b></tt> . Run the +shell command + +<blockquote><tt><b> +bdftops BDF_filename [AFM_file1_name ...] gsf_filename fontname<br> UniqueID [XUID] [encodingname] +</b></tt></blockquote> + +<p> +The arguments have these meanings: +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><tt><b>BDF_filename</b></tt> + <td> + <td>Input bitmap file in BDF format + <td> + <td> +<tr valign=top> <td><tt><b>AFM_file1_name</b></tt> + <td> + <td>AFM files giving metrics + <td> + <td>(Optional) +<tr valign=top> <td><tt><b>gsf_filename</b></tt> + <td> + <td>Output file + <td> + <td> +<tr valign=top> <td><tt><b>fontname</b></tt> + <td> + <td>Name of the font + <td> + <td> +<tr valign=top> <td><tt><b>UniqueID</b></tt> + <td> + <td>UniqueID (<a href="#Unique_IDs">as described below</a>) + <td> + <td> +<tr valign=top> <td><tt><b>XUID</b></tt> + <td> + <td>XUID, in the form <tt><b>n1.n2.n3...</b></tt> (<a href="#Unique_IDs">as described below</a>) + <td> + <td>(Optional) +<tr valign=top> <td><tt><b>encodingname</b></tt> + <td> + <td>"StandardEncoding" (the default), "ISOLatin1Encoding",<br>"SymbolEncoding", "DingbatsEncoding" + <td> + <td>(Optional) +</table></blockquote> + +<p> +For instance + +<blockquote><tt><b> +bdftops pzdr.bdf ZapfDingbats.afm pzdr.gsf ZapfDingbats 4100000 1000000.1.41 +</b></tt></blockquote> + +<p> +Then make an entry in Fontmap for the <tt><b>.gsf</b></tt> +file (<tt><b>pzdr.gsf</b></tt> in the example) as +<a href="#Add_fonts">described above</a>. + +<hr> + +<h2><a name="For_developers"></a>For developers only</h2> + +<p> +The rest of this document is very unlikely to be of value to ordinary +users. + +<h3><a name="Font_contents"></a>Contents of fonts</h3> + +<p> +As noted above, Ghostscript accepts fonts in the same formats as PostScript +interpreters. Type 0, 1, and 3 fonts are documented in the PostScript +Language Reference Manual (Second Edition); detailed documentation for Type +1 fonts appears in a separate Adobe book. Type 2 (compressed format) fonts +are documented in separate Adobe publications. Type 4 fonts are not +documented anywhere; they are essentially Type 1 fonts with a BuildChar or +BuildGlyph procedure. Types 9, 10, and 11 (CIDFontType 0, 1, and 2) and +Type 32 (downloaded bitmap) fonts are documented in Adobe supplements. +Type 42 (encapsulated TrueType) fonts are documented in an Adobe +supplement; the TrueType format is documented in publications available +from Apple and Microsoft. Ghostscript does not support Type 14 (Chameleon) +fonts, which use a proprietary Adobe format. + +<h3><a name="Precompiling"></a>Precompiling fonts</h3> + +<p> +You can precompile -- convert -- any Type 1 font into C, then compile and +build it into the Ghostscript executable. (Type 1 fonts include any font +whose name ends with <tt><b>.pfa</b></tt> or +<tt><b>.pfb</b></tt>, and it also includes all the +Ghostscript <tt><b>.gsf</b></tt> fonts except the Hershey +fonts.) This has no effect on rendering speed, but it eliminates the time +to load the font dynamically, which may make a big improvement in total +rendering time, especially for multi-page documents. It also reduces the +number of auxiliary files required at run time. Fonts precompiled and +built into Ghostscript this way need not appear in Fontmap, although if +they do appear there, no harm is done. + +<p><a name="font2c"></a> The utility for precompiling fonts is named +<tt><b>font2c</b></tt>. Note that since +<tt><b>font2c</b></tt> uses the PostScript language program +<tt><b>font2c.ps</b></tt>, Ghostscript must already be +available to run it, and Fontmap must contain entries for the fonts you +want to compile. For example, to precompile the Times-Italic font, + +<blockquote><tt><b> +font2c Times-Italic ptmri.c +</b></tt></blockquote> + +<p> +The first argument ("<b><tt>Times-Italic</tt></b>" above) is the font's +name and the second ("<b><tt>ptmri.c</tt></b>") is the name of the +resulting C file. You can use any file name you want, as long as it ends +in "<tt><b>.c</b></tt>". It needn't be limited to eight characters unless +your operating system requires this. If "<b><tt>XYZ.gsf</tt></b>" or +"<b><tt>XYZ.pfa</tt></b>" is the font file's name in Fontmap, +"<b><tt>XYZ.c</tt></b>" is a good choice for the C file. + +<p> +Under VMS, or other systems whose the C compilers limit the length of +identifiers, you must do something slightly more complicated; for that see +the section on <a href="#Short_identifiers">short identifiers in C</a>. On +VMS also, you must quote the font name ("{font name}") to preserve the +name's mixed upper and lower case. For VMS environments in general see +<a href="Make.htm#VMS">the VMS directions</a> in the documentation on +building Ghostscript, and ignore the rest of this section. + +<p> +Note that fonts are not supplied with Ghostscript in precompiled form, since +those files are quite large and can easily be recreated using <a +href="#font2c"><tt><b>font2c</b></tt></a>. There is a makefile target to +run <tt><b>font2c</b></tt> on all the fonts supplied with Ghostscript. +Invoke it with + +<blockquote><b><tt> +make fonts_standard_c +</tt></b></blockquote> + +<p>Besides running <tt><b>font2c</b></tt>, you must compile the fonts and +link them into the executable. To do this, add the compiled fonts feature +to your platform-specific makefile. See the +<a href="Make.htm#Makefile_overview">overview of makefiles</a> in the +documentation on building Ghostscript for the list of makefiles for each +platform. Find the definition of the <tt><b>FEATURE_DEVS</b></tt> macro in +the makefile, which looks something like this: + +<blockquote><tt><b> +FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)dpsnext.dev $(PSD)pipe.dev +</b></tt></blockquote> + +<p> +and add "ccfonts.dev": + +<blockquote><tt><b> +FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)dpsnext.dev $(PSD)pipe.dev $(PSD)ccfonts.dev +</b></tt></blockquote> + +<p> +Next you must add the specific fonts to <tt><b>int.mak</b></tt>, the +platform-independent makefile for the interpreter. This makefile already +has rules for the standard fonts supplied with Ghostscript, so if you just +want to compile the standard fonts, you needn't do anything else. Now we +describe how to compile other fonts into the executable, such as the Utopia +or Kana fonts, or your own fonts. + +<p> +Suppose you want to compile the Kana fonts into the executable. First pick +one of <b><tt>ccfonts10</tt></b> through <b><tt>ccfonts15</tt></b> as the +place you will do this, say <b><tt>ccfonts10</tt></b>. Add your compiled +font file names, for instance + +<blockquote><tt><b> +ccfonts10_=$(CFOBJ)fhirw.$(OBJ) +</b></tt></blockquote> + +<p> +(Note the underscore "_".) If this makes the line too long, use another +line of the same form, for instance, + +<blockquote><tt><b> +ccfonts11_=$(CFOBJ)fkarw.$(OBJ) +</b></tt></blockquote> + +<p> +Just below the <b><tt>ccfonts10_=</tt></b> line is a line + +<blockquote><tt><b> +ccfonts10= +</b></tt></blockquote> + +<p> +(Note no underscore.) Add your own fonts to the end of this line, replacing +dashes ("-") with underscores ("_") in the font names. For instance: + +<blockquote><tt><b> +ccfonts10=Calligraphic_Hiragana +</b></tt></blockquote> + +<p> +Again, if a line becomes too long, add another line of the same form, for +instance, + +<blockquote><tt><b> +ccfonts10=Calligraphic_Hiragana<br> +ccfonts11=Calligraphic_Katakana +</b></tt></blockquote> + +<p> +After all the lines of this form, add a pair of lines to compile each font, +separating these entries from the "ccfonts*" lines and from each other with +a blank line. In our example this becomes + +<blockquote> +<pre>$(CFOBJ)fhirw.$(OBJ): $(CFGEN)fhirw.c $(CCFONT) + $(CFCC) $(CFO_)fhirw.$(OBJ) $(C_) $(CFGEN)fhirw.c + +$(CFOBJ)fkarw.$(OBJ): $(CFGEN)fkarw.c $(CCFONT) + $(CFCC) $(CFO_)fkarw.$(OBJ) $(C_) $(CFGEN)fkarw.c +</pre></blockquote> + +<p> +Finally, run <tt><b>make</b></tt> to build an executable that includes the +fonts you added. They are present in <b><tt>FontDirectory</tt></b> when +Ghostscript starts up. + +<h3><a name="Short_identifiers"></a>Precompiling fonts on platforms with identifier length limits</h3> + +<p> +On some platforms the C compiler or linker limits the number of significant +characters usable in an identifier. On such platforms, you must do a +little extra work. + +<p> +Let <em><b>N</b></em> be the maximum number of significant characters in an +identifier (typically 31). For each font whose name is longer than +<em><b>N</b></em>-5 characters, pick an arbitrary identifier that we will +call the "short name". This can be any string you want, as long as it +contains only letters, digits, and underscores; is no longer than +<em><b>N</b></em>-5 characters; and is different from all other font names +and short names. A good choice for this is the name of the C file. There +is no harm in doing this for fonts with names shorter than +<em><b>N</b></em>-5 characters, but it's unnecessary. + +<p> +You must do two different things for fonts that require a short name. + +<ol> +<li>You must supply the short name as a third argument to +<tt><b>font2c</b></tt>. For example, to compile +<b><tt>NewCenturySchlbk-BoldItalic</tt></b> using the short name +<b><tt>pncbi</tt></b>, + +<blockquote><tt><b> +font2c NewCenturySchlbk-BoldItalic pncbi.c pncbi +</b></tt></blockquote> + +<li> +Then when you add the font name to the definition of one of the ccfonts* +macros in the makefile, use the short name, not the actual font name, for +instance, + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <td>Use + <td> + <td><tt><b>ccfonts12=pncbi</b></tt> +<tr> <td>Rather than + <td> + <td><tt><b>ccfonts12=NewCenturySchlbk_BoldItalic</b></tt> +</table></blockquote> +</ol> + +<p> +Everything else is as described above. This procedure doesn't change the +name of the font in Fontmap or as seen from within Ghostscript; it just +works around a limitation of some older compilers. + +<hr> + +<h3><a name="Unique_IDs"></a>Font names and unique IDs</h3> + +<p> +If you create your own fonts and will use them only within your own +organization, you should use <tt><b>UniqueID</b></tt> values between +4000000 and 4999999, coded like this (see the <a href="#Codes">tables of +codes</a> for font file names below): + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Coding of UniqueID "<tt><b>4TTWVE0</b></tt>"</font><hr> +<tr> <td><tt><b>TT</b></tt> + <td> + <td><a href="#Typeface">Typeface</a> + <td> + <td>two-digit identifier +<tr> <td><tt><b>W</b></tt> + <td> + <td><a href="#Weight">Weight</a> + <td> + <td>normal, bold, etc. +<tr> <td><tt><b>V</b></tt> + <td> + <td><a href="#Variant">Variant</a> + <td> + <td>normal, italic, etc. +<tr> <td><tt><b>E</b></tt> + <td> + <td><a href="#Expansion">Expansion</a> + <td> + <td>normal, condensed, etc. +</table></blockquote> + +<p> +This scheme will not work forever: as soon there are more than 99 +typefaces, or more than 9 weights or variants, we will have to do something +else. But it suffices for the near future. + +<p> +If you plan to distribute fonts, ask Adobe to assign you some UniqueIDs and +also an <tt><b>XUID</b></tt> for your organization. Contact + +<blockquote><address> +Unique ID Coordinator<br> +Adobe Developers Association<br> +Adobe Systems, Inc.<br> +345 Park Avenue<br> +San Jose, CA 95110-2704<br> ++1-408-536-9000 telephone (ADA)<br> ++1-408-536-6883 fax<br> +<a href="mailto:fontdev-person@adobe.com">fontdev-person@adobe.com</a><br> +</address></blockquote> + +<p> +The XUID is a Level 2 PostScript feature that serves the same function as +the UniqueID, but is not limited to a single 24-bit integer. The +<tt><b>bdftops</b></tt> program creates XUIDs of the form +"<tt><b>[-X- 0 -U-]</b></tt>" where "<tt><b>-X-</b></tt>" is the +organization XUID and "<tt><b>-U-</b></tt>" is the UniqueID. (Aladdin +Enterprises' organization XUID, which appears in a few places in various +font-related files distributed with Ghostscript, is 107; do not use this for +your own fonts that you distribute.) + +<p> +Because Ghostscript runs on many different systems, including DOS, the +names of font files can be no longer than 8 characters. We therefore +construct a font's filename <tt><b>FTTWVVVE.gsf</b></tt> +similarly to the construction for temporary UniqueIDs. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Coding of font file name "<tt><b>FTTWVVVE.gsf</b></tt>"</font><hr> +<tr> <td><tt><b>F</b></tt> + <td> + <td><a href="#Foundries">Foundry</a> + <td> + <td> +<tr> <td><tt><b>TT</b></tt> + <td> + <td><a href="#Typeface">Typeface</a> + <td> + <td>two-digit identifier +<tr> <td><tt><b>W</b></tt> + <td> + <td><a href="#Weight">Weight</a> + <td> + <td>normal, bold, etc. +<tr> <td><tt><b>V</b></tt> + <td> + <td><a href="#Variant">Variant</a> + <td> + <td>normal, italic, etc. +<tr> <td><tt><b>E</b></tt> + <td> + <td><a href="#Expansion">Expansion</a> + <td> + <td>normal, condensed, etc. +</table></blockquote> + +<p> +Since a font can have multiple variants (for example, Lucida Regular Sans +Typewriter Italic) we allocate three letters to that; if a font has four +variants, you're on your own. If a font does have multiple variants, it's +best to add the expansion letter "<b><tt>r</tt></b>" to make clear which +letters are variants and which the expansion. This scheme is very close to +the one proposed in "Filenames for fonts", published in the first 1990 +issue of <em>TUGboat</em> (the journal of the TeX Users Group). + +<h3><a name="Codes"></a>Codes used to make font file names</h3> + +<p> +In the following tables we make no attempt to be exhaustive: instead we +have simply allocated entries for those things that we needed for the fonts +that we are actually distributing. + +<p> +<a name="Foundries"></a> +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Font foundry codes</font><hr> +<tr> <th>ID + <th> + <th align=left>Foundry +<tr> <td colspan=3><hr> +<tr> <td><tt><b>b</b></tt> + <td> + <td>Bitstream +<tr> <td><tt><b>f</b></tt> + <td> + <td>Freely distributable and public-domain +<tr> <td><tt><b>hr</b></tt> + <td> + <td>Hershey +<tr> <td><tt><b>n</b></tt> + <td> + <td>IBM +<tr> <td><tt><b>p</b></tt> + <td> + <td>Adobe ("p" for PostScript) +<tr> <td><tt><b>u</b></tt> + <td> + <td>URW[++] +</table></blockquote> + +<p> +<a name="Typeface"></a> +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Typeface codes</font><hr> +<tr valign=bottom> <th>ID + <td> + <th align=left>Name + <td> + <th align=left>Filename<br>prefix + <td> + <th align=left>Source +<tr> <td colspan=7><hr> +<tr> <td><tt><b>08</b></tt> + <td> + <td>Avant Garde + <td> + <td><tt><b>pag</b></tt> + <td> + <td>Adobe +<tr> <td><tt><b>11</b></tt> + <td> + <td>Bookman + <td> + <td><tt><b>pbk</b></tt> + <td> + <td>Adobe +<tr> <td><tt><b>01</b></tt> + <td> + <td>CharterBT + <td> + <td><tt><b>bch</b></tt> + <td> + <td>Bitstream +<tr> <td><tt><b>02</b></tt> + <td> + <td>Courier + <td> + <td><tt><b>ncr</b></tt> + <td> + <td>IBM +<tr> <td><tt><b>03</b></tt> + <td> + <td>Helvetica + <td> + <td><tt><b>phv</b></tt> + <td> + <td>Adobe +<tr> <td><tt><b>04</b></tt> + <td> + <td>New Century Schoolbook + <td> + <td><tt><b>pnc</b></tt> + <td> + <td>Adobe +<tr> <td><tt><b>09</b></tt> + <td> + <td>Palatino + <td> + <td><tt><b>ppl</b></tt> + <td> + <td>Adobe +<tr> <td><tt><b>05</b></tt> + <td> + <td>Symbol + <td> + <td><tt><b>psy</b></tt> + <td> + <td>Adobe +<tr> <td><tt><b>06</b></tt> + <td> + <td>Times + <td> + <td><tt><b>ptm</b></tt> + <td> + <td>Adobe +<tr> <td>-- + <td> + <td>Utopia + <td> + <td><tt><b>put</b></tt> + <td> + <td>Adobe +<tr> <td><tt><b>07</b></tt> + <td> + <td>Zapf Chancery + <td> + <td><tt><b>zc</b></tt> + <td> + <td>public domain +<tr> <td><tt><b>10</b></tt> + <td> + <td>Zapf Dingbats + <td> + <td><tt><b>pzd</b></tt> + <td> + <td>Adobe +<tr> <td><tt><b>12</b></tt> + <td> + <td>public domain Cyrillic + <td> + <td><tt><b>fcy</b></tt> + <td> + <td>public domain +<tr> <td><tt><b>13</b></tt> + <td> + <td>Kevin Hartig Hiragana + <td> + <td><tt><b>fhi</b></tt> + <td> + <td>shareware +<tr> <td><tt><b>14</b></tt> + <td> + <td>Kevin Hartig Katakana + <td> + <td><tt><b>fka</b></tt> + <td> + <td>shareware +<tr> <td><tt><b>90</b></tt> + <td> + <td>Hershey Gothic English + <td> + <td><tt><b>hrge</b></tt> + <td> + <td>freeware +<tr> <td><tt><b>91</b></tt> + <td> + <td>Hershey Gothic Italian + <td> + <td><tt><b>hrit</b></tt> + <td> + <td>freeware +<tr> <td><tt><b>92</b></tt> + <td> + <td>Hershey Gothic German + <td> + <td><tt><b>hrgr</b></tt> + <td> + <td>freeware +<tr> <td><tt><b>93</b></tt> + <td> + <td>Hershey Greek + <td> + <td><tt><b>hrgk</b></tt> + <td> + <td>freeware +<tr> <td><tt><b>94</b></tt> + <td> + <td>Hershey Plain + <td> + <td><tt><b>hrpl</b></tt> + <td> + <td>freeware +<tr> <td><tt><b>95</b></tt> + <td> + <td>Hershey Script + <td> + <td><tt><b>hrsc</b></tt> + <td> + <td>freeware +<tr> <td><tt><b>96</b></tt> + <td> + <td>Hershey Symbol + <td> + <td><tt><b>hrsy</b></tt> + <td> + <td>freeware +</table></blockquote> + +<p> +<a name="Weight"></a> +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Font weight codes</font><hr> +<tr> <th>ID + <td> + <th align=left>Type + <td> + <th align=left>Filename +<tr> <td colspan=5><hr> +<tr> <td><tt><b>0</b></tt> + <td> + <td>normal + <td> + <td><tt><b>r</b></tt> +<tr> <td><tt><b>1</b></tt> + <td> + <td>bold + <td> + <td><tt><b>b</b></tt> +<tr> <td><tt><b>2</b></tt> + <td> + <td>book + <td> + <td><tt><b>k</b></tt> +<tr> <td><tt><b>3</b></tt> + <td> + <td>demi + <td> + <td><tt><b>d</b></tt> +<tr> <td><tt><b>4</b></tt> + <td> + <td>light + <td> + <td><tt><b>l</b></tt> +<tr> <td> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1"><a name="Variant"></a>Font variants</font><hr> +<tr> <th>ID + <td> + <th align=left>Type + <td> + <th align=left>Filename +<tr> <td colspan=5><hr> +<tr> <td><tt><b>0</b></tt> + <td> + <td>normal + <td> + <td><tt><b>r</b></tt> (omitted when weight is normal) +<tr> <td><tt><b>1</b></tt> + <td> + <td>italic + <td> + <td><tt><b>i</b></tt> +<tr> <td><tt><b>2</b></tt> + <td> + <td>oblique + <td> + <td><tt><b>o</b></tt> +<tr valign=top> <td><tt><b>3</b></tt> + <td> + <td>script, handwritten, swash + <td> + <td><tt><b>w</b></tt> +<tr> <td> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1"><a name="Expansion"></a>Expansion</font><hr> +<tr> <th>ID + <td> + <th align=left>Type + <td> + <th align=left>Filename +<tr> <td colspan=5><hr> +<tr> <td><tt><b>0</b></tt> + <td> + <td>normal + <td> + <td><tt><b>r</b></tt> (omitted when weight and variant are normal) +<tr> <td><tt><b>1</b></tt> + <td> + <td>narrow + <td> + <td><tt><b>n</b></tt> +</table></blockquote> + +<hr> + +<h2><a name="Use_gs_fonts_with_X"></a>Using Ghostscript fonts on X Windows displays</h2> + +<p> +The standard X11 distribution can display various kinds of fonts, including +the Adobe Type 1 format, so font files distributed with Ghostscript can be +used on X Windows displays. Beginning with Ghostscript version 6.0, the +font archive contains the directory files needed to map Ghostscript's font +files to XLFDs. Those files are named "<b><tt>fonts.dir</tt></b>" and +"<b><tt>fonts.scale</tt></b>". There are two main methods to configure +your display to use these files. + +<ul> +<li><a href="#Using_xset">With <b><tt>xset</tt></b></a> any user can add a +new directory to the font search path for the duration of a session. +<li>An administrator with root access can <a +href="#Font_permanent_installation">add the Ghostscript font directory +permanently</a> to the <a href="#X_font_catalog">X font server's +catalog</a> or to an <a href="#Xfree86_fontpath">X display server's list of +directories</a>. +</ul> + +<h3><a name="Using_xset"></a>Using <b><tt>xset</tt></b></h3> + +<p> +Users without root access can add the Ghostscript font directories to the +font search path using <b><tt>xset</tt></b>. Such a setting is transient +and must be repeated each time the display server is reset or restarted, +typically at login, so the call to <b><tt>xset</tt></b> should be added to +the user's "<b><tt>.xsession</tt></b>" or "<b><tt>.xinitrc</tt></b>" +startup script to make the fonts available at each login. + +<p> +To add a new font directory, invoke <b><tt>xset</tt></b> like this: + +<blockquote> +<b><tt>xset fp+</tt> <em>{directory}</em></b> +</blockquote> + +<p> +where <b><em>{directory}</em></b> is the full pathname to the directory +containing the fonts on the host running the X display server. For common +Ghostscript installations the path is + +<blockquote> +<b><tt>/usr/local/Ghostscript/share/fonts</tt></b> +</blockquote> + +<h3><a name="Font_permanent_installation"></a>Permanent installation</h3> + +<p> A system administrator, or anyone with the necessary root privilege, +can make Ghostscript's fonts permanently available to the managed X display +servers. This setup depends on the servers and the methods used +to make the fonts available. + +<h4><a name="Configure_xfs"></a>Configuring the <b><tt>xfs</tt></b> font server</h4> + +<p> +An X display server can obtain its font resources from a dedicated X font +server. <b><tt>xfs</tt></b> is a prototype font server included in the X +Consortium X11 distribution. It is configured with a file located in a +directory whose exact location is installation-dependent and could be any +of + +<blockquote><b><tt> +/usr/lib/X11/fs/config +<br>/usr/X11/lib/X11/fs/config +<br>/usr/X11R6/lib/X11/fs/config +</tt></b></blockquote> + +<p> +or some similar name. You can also use <b><tt>xfs</tt></b>'s +"<b><tt>-config</tt></b>" command-line option to specify the location of +the configuration file. + +<p><a name="X_font_catalog"></a> +The configuration file designates a list ("catalog") of directories, each +of which contains fonts and a font mapping database (the file +"<b><tt>fonts.dir</tt></b>"). This list is specified with the +"<b><tt>catalogue=</tt></b>" keyword followed by a list of absolute +directory paths separated by commas. To add the Ghostscript directory, +include its full name in the catalog list, for example: + +<blockquote><b><tt> +catalogue = /usr/local/share/Ghostscript/fonts/, +<br>/usr/X11R6/lib/X11/fonts/misc/, +<br>/usr/X11R6/lib/X11/fonts/Speedo/, +<br>/usr/X11R6/lib/X11/fonts/Type1/, +<br>/usr/X11R6/lib/X11/fonts/75dpi/, +<br>/usr/X11R6/lib/X11/fonts/100dpi/ +</tt></b></blockquote> + +<p> +The fonts are searched in the order the directories are specified, so an +XLFD mapped by the Ghostscript directory could shadow a previous similar +description specified in the following directories. Once the file is +modified, instruct the font server to reload the configuration file by +sending it the USR1 signal: + +<blockquote> +<b><tt>kill -HUP</tt> <em>{pid}</em></b> +</blockquote> + +<p> +where <b><em>{pid}</em></b> is the font server process's numeric process +ID, as obtained with the "<b><tt>ps</tt></b>" command. Be sure to check +that the server is still alive after signaling it: it is very picky and +could decide to shut itself down if something is wrong in the new +configuration. If this happens, restart the server by hand and try to +figure out from its output what's happening. If the font server dies, +display servers using it will experience problems, so be sure to send the +signal from the console or from a display not using that font server! + +<h4><a name="Configure_Xfree86"></a>Xfree86 display servers</h4> + +<p><a name="Xfree86_fontpath"></a> +With the family of Xfree86 display servers, adding a new font directory +permanently requires editing the "<b><tt>/etc/XF86Config</tt></b>" setup +file to add a new "<b><tt>FontPath</tt></b>" to the "<b><tt>Files</tt></b>" +section: + +<blockquote> +<b><tt>Section "Files" +<br> RgbPath "/usr/X11R6/lib/X11/rgb" +<br> FontPath "/usr/local/share/Ghostscript/fonts" +<br> FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled" +<br> FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled" +<br> FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled" +<br> FontPath "/usr/X11R6/lib/X11/fonts/Type1" +<br> FontPath "/usr/X11R6/lib/X11/fonts/Speedo" +<br>EndSection</tt></b> +</blockquote> + +<p> +The fonts are searched in the order the directories are specified, so an +XLFD mapped by the Ghostscript directory could shadow a previous similar +description specified in the following directories. Once this global +configuration is edited, the new fonts become available to all Xfree86 +servers in use on that host. If a server is running, it must be restarted +to take effect: just quit the current session in the usual way. If the +server is under the control of <b><tt>xdm</tt></b>, you may have to kill +it, because it is usually reset only between successive sessions. + +<p> +This section by Bertrand Petit +<<a href="mailto:eegs@phoe.frmug.org">eegs@phoe.frmug.org</a>> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998, 1999, 2000 Aladdin +Enterprises. All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Helpers.htm b/Master/xemtex/doc/ghostscript/Helpers.htm new file mode 100644 index 00000000000..993388cfbde --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Helpers.htm @@ -0,0 +1,303 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>People who have helped with Ghostscript</title> +<!-- $Id: Helpers.htm,v 1.17.2.11.2.5 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: helpers.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>People who have helped with Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<p> +Many people have contributed to the development of Ghostscript. In the +<a href="New-user.htm#Acknowledgments">new-user documentation</a> we give special thanks to a few major contributors; here +we wish to acknowledge and thank the following other people (in +alphabetical order) who have contributed substantially to improving +Ghostscript since its inception in 1986: + +<blockquote> +<dl> +<dt>Hitoshi Aida + <dd>for help with the SunView driver +<dt>Pierre Arnaud + <dd>for bug reports and fixes +<dt>Juan Manuel Acosta + <dd>for LN03+ driver and fixes of arc and circle rendering on SunOS +<dt>William Bader + <dd>for several drivers and bug reports +<dt>Alan Barclay + <dd>for the RGB TIFF drivers +<dt>Nelson H. F. Beebe + <dd>for testing on a wide variety of Unix architectures, and for + the multi-architecture makefile +<dt>Karl Berry and Kathy Hargreaves + <dd>for helping create the fonts originally distributed with + Ghostscript +<dt>James W. Birdsall + <dd>for the IBM ProPrinter driver +<dt>Andrew Birrell + <dd>for a challenging application +<dt>Jan Bottorff + <dd>for help with the Microsoft Windows driver +<dt>Tom Brosnan + <dd>for the Desqview/X port +<dt>Philip Brown + <dd>for the LaserJet IIID duplex additions +<dt>Tobias Burnus + <dd>for many challenging bug reports +<dt>George Cameron + <dd>for DeskJet 500C and 550C drivers +<dt>Maurice Castro + <dd>a collaborator of Russell Lang's +<dt>Jeff Chua + <dd>for the idea and first implementation of + <b><tt>ReopenPerPage</tt></b> +<dt>Phil Conrad + <dd>for originating the PPM utilities and the PCX and GIF drivers, + and lots of bug reports +<dt>Michel Dagenais + <dd>for major help with the DeskJet driver +<dt>John Desrosiers + <dd>for the final work on the Microsoft Visual C++ makefiles, + and for enhancements to the memory manager +<dt>Jim Dunham + <dd>for the OpenVMS makefile +<dt>Gershon Elber + <dd>for improvements to the BGI driver +<dt>Fritz Elfert + <dd>for the Unix file enumeration routine +<dt>George Ferguson + <dd>for some added man pages +<dt>Mike Ferrara + <dd>for help with the LaserJet driver and HP-UX +<dt>Andy Fyfe + <dd>for the BJ200 driver modifications to the BJ10e driver, and for + the 3B1 driver +<dt>Tim Gallivan + <dd>for a port to the Atari ST +<dt>J. Greely + <dd>for help with the PostScript-to-ASCII filter +<dt>Gintautas Grigelionis + <dd>for a set of XBM/XPM icons +<dt>Paul Haeberli + <dd>for the ideas behind better color selection and trapezoid fill + algorithms +<dt>Karl Hakimian + <dd>for the Tek 4693d drivers +<dt>Richard Hesketh + <dd>for GSPreview +<dt>Gunther Hess + <dd>for the unified inkjet printer driver +<dt>Thomas Hiller + <dd>for the Trident TVGA driver +<dt>Frans van Hoesel + <dd>for improvements to the DeskJet driver +<dt>Berthold K. P. Horn + <dd>for a better spot halftone screen +<dt>B. Jackowski and GUST (the Polish TeX users group) + <dd>for improvements to the TrueType font reader, and for the + <b><tt>tiff2ps</tt></b> and <b><tt>ttf2pf</tt></b> utilities +<dt>Jouk Jansen + <dd>for motivating, testing, and providing some of the script + file for the MMK/MMS build procedure +<dt>Earl Johnson + <dd>for the motivation for the <b><tt>ps2ascii</tt></b> utility +<dt>Ray Johnston + <dd>for a first draft of FAKEFONTS and EPSF recognition, and for + many small bug fixes +<dt>Larry Jones + <dd>for simplifying and improving the portability of the pthreads + interface code +<dt>Pete Kaiser + <dd>for beta testing, several versions of the OSF/1 font map, and + an HTML version of the documentation +<dt>Norio Katayama + <dd>for the first implementation of composite fonts, and for + testing and helping debug the later implementation +<dt>Alfred Kayser + <dd>for a DeskJet 500C driver and beta testing +<dt>Richard Keeney + <dd>for help with the SunView driver +<dt>Markku Koppinen + <dd>for a better circle-to-curve algorithm +<dt>Eleftherios Koutsofios + <dd>for help with the SunView driver +<dt>Tom Lane + <dd>for major help with adapting and integrating the IJG code +<dt>Sam Leffler + <dd>for the original TIFF G3 driver, and for finding some subtle + bugs in the CCITTFaxEncode filter +<dt>Jonathan Luckey + <dd>for the high-resolution Imagewriter drivers +<dt>Ken Lunde + <dd>for providing pointers to freely available CJKV font-related + resource +<dt>Ian MacPhedran + <dd>for a sixel driver +<dt>Jim Mayer + <dd>for help with the DeskJet and LaserJet drivers +<dt>Paul McJones + <dd>for help in identifying a variety of bugs +<dt>William L. Menninger + <dd>for a version of the PC display state save/restore code +<dt>Richard Mlynarik + <dd>for a nearly overwhelming volume of improvements and + suggestions +<dt>Ulrich Mueller + <dd>for the LN03 driver +<dt>Daniel Newman + <dd>for major help with VMS and the CCITTFax filters +<dt>Bjorn S. Nilsson + <dd>for major help with VMS, including many updates of the DCL + build scripts and creating the VMS help file +<dt>Roque Donizete de Oliveira + <dd>for testing and debugging, and a "man" page +<dt>Gerbert Orasche + <dd>for some minor bug fixes +<dt>Marc Paquette + <dd>for the original PaintJet driver +<dt>Hal Peterson + <dd>for major help with BDF fonts +<dt>Andy Piper + <dd>for the first draft of the WindowID feature +<dt>Martin Pirker + <dd>for fixing two major problems with TrueType fonts +<dt>Tom Quinn + <dd>for the Canon LBP-8II driver +<dt>Matthias Rabe + <dd>for work on an OS/2 port +<dt>Jerry Roylance + <dd>for help with statusdict +<dt>Dave St. Clair + <dd>for the color Epson/Fujitsu driver +<dt>Jan Sanislo + <dd>for two subtle but vital fixes +<dt>Clemens Schrimpe + <dd>for help with accented characters +<dt>Scott Schwartz + <dd>for improvements to <b><tt>gslp.ps</tt></b> +<dt>Mike Smolenski + <dd>for the Sony drivers +<dt>Snoopy + <dd>for major help with Hershey fonts, and many other contributions +<dt>Karsten Spang + <dd>for the Tektronix 4695/4696 driver +<dt>Andreas Stolcke + <dd>for help with the SunView driver +<dt>Hans-Gerd Straeter + <dd>for finding many obscure bugs +<dt>Christoph Strozyk + <dd>for getting the URW fonts made available +<dt>Alexey Subbotin + <dd>for contributing an interface to GNU readline, and for the + rewritten implementation of == +<dt>Michael Sweet + <dd>for help with the high-density Epson driver +<dt>Guenther Thomsen + <dd>for the mid-density Epson driver +<dt>Gregg Townsend + <dd>for the low-resolution dithering algorithm +<dt>Christian Tschudin + <dd>for fixes to the virtual memory package, and for the original + BubbleJet driver +<dt>Stephen Turnbull + <dd>for help with the DesqView/X port +<dt>Jos Vos + <dd>for the original PBM/PGM/PPM driver, and for much beta testing +<dt>Renze de Waal + <dd>for an improvement to the "<b><tt>SAFER</tt></b>" feature +<dt>Allan Wax + <dd>for the AT&T 6300 modification to the BGI driver +<dt>Mark Wedel + <dd>for the Apple DMP driver +<dt>David Wexelblat + <dd>for the high-resolution 9-pin Epson driver +<dt>George N. White III + <dd>for testing the PDF writer and contributing documentation +<dt>Elizabeth Zwicky + <dd>for some very challenging examples +</dl> +</blockquote> + +<p> +The following people have also helped out by beta testing, by reporting +bugs and/or fixes, or in other ways: + +<blockquote> +Vikas Aggarwal, Michael Almond, +Abramo Bagnara, Malcolm Bennett, David Brooks, +Alex Cherepanov, Jim Collins, +Peter da Silva, Art Dederick, Paul DuBois, +Toerless Eckert, +Bernhard Fabricius, Mark Friedman, Richard Foulk, +Glenn Geers, Dave Goldblatt, Ben Goren, Dirk Grunwald, +Lars Haakedal, Howard B. Halstead, Adam Hammer, George Hartzell, Mike Hoffmann, Charles Hulse, +Brad Jones, Terry Jones, +David Keppel, +Anthony Lee, Marty Leisner, John Lundin Jr., Lee McLoughlin, +Stergios Marinopoulos, Herb Martin, David Mathog, David Maynard, Doug McDonald, Rich Murphey, +Russ Nelson, +Peter Phillips, +Mark Rawling, Philippe Robert, Tomas Rokicki, Wolfgang Rupprecht, +Bill Schelter, Larry Schwimmer, Bakul Shah, +Erik Talvola, Henrik Theiling, Mark A. Thomas, Kjetil Bernhard Thomassen, +Amanda Walker, Peter Wan, John L. Wehle, Carsten Wiethoff, Carl Witty, +Frank Yellin, +Jamie Zawinski +</blockquote> + +<p> +If your name appears on the above list and we've omitted a particular +contribution you made, or if we've accidentally overlooked you entirely, +please forgive us: just let us know at <a href="mailto:raph@artofcode.com">raph@artofcode.com</a>, and you will be +properly acknowledged in the next release. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. All +rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Hershey.htm b/Master/xemtex/doc/ghostscript/Hershey.htm new file mode 100644 index 00000000000..a08bae318b9 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Hershey.htm @@ -0,0 +1,305 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Hershey fonts for Ghostscript</title> +<!-- $Id: Hershey.htm,v 1.3 2000/11/04 05:00:00 giles Exp $ --> +<!-- Originally: hershey.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Hershey fonts for Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This file, unlike the rest of Ghostscript, consists entirely of information +copied from public sources. It therefore is not covered by the +Ghostscript copyright or license: it is in the public domain. + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. You can also read about <a href="Fonts.htm">Ghostscript +fonts</a> in general. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<pre> +Mod.sources: Volume 4, Issue 42 +Submitted by: pyramid!octopus!pete (Pete Holzmann) + +This is part 1 of five parts of the first Usenet distribution of +the Hershey Fonts. See the README file for more details. + +Peter Holzmann, Octopus Enterprises +USPS: 19611 La Mar Court, Cupertino, CA 95014 +UUCP: {hplabs!hpdsd,pyramid}!octopus!pete +Phone: 408/996-7746 + +This distribution is made possible through the collective encouragement +of the Usenet Font Consortium, a mailing list that sprang to life to get +this accomplished and that will now most likely disappear into the mists +of time... Thanks are especially due to Jim Hurt, who provided the packed +font data for the distribution, along with a lot of other help. + +This file describes the Hershey Fonts in general, along with a description of +the other files in this distribution and a simple re-distribution restriction. + +USE RESTRICTION: + This distribution of the Hershey Fonts may be used by anyone for + any purpose, commercial or otherwise, providing that: + 1. The following acknowledgements must be distributed with + the font data: + - The Hershey Fonts were originally created by Dr. + A. V. Hershey while working at the U. S. + National Bureau of Standards. + - The format of the Font data in this distribution + was originally created by + James Hurt + Cognition, Inc. + 900 Technology Park Drive + Billerica, MA 01821 + (mit-eddie!ci-dandelion!hurt) + 2. The font data in this distribution may be converted into + any other format *EXCEPT* the format distributed by + the U.S. NTIS (which organization holds the rights + to the distribution and use of the font data in that + particular format). Not that anybody would really + *want* to use their format... each point is described + in eight bytes as "xxx yyy:", where xxx and yyy are + the coordinate values as ASCII numbers. + +*PLEASE* be reassured: The legal implications of NTIS' attempt to control +a particular form of the Hershey Fonts *are* troubling. HOWEVER: We have +been endlessly and repeatedly assured by NTIS that they do not care what +we do with our version of the font data, they do not want to know about it, +they understand that we are distributing this information all over the world, +etc etc etc... but because it isn't in their *exact* distribution format, they +just don't care!!! So go ahead and use the data with a clear conscience! (If +you feel bad about it, take a smaller deduction for something on your taxes +next week...) + +The Hershey Fonts: + - are a set of more than 2000 glyph (symbol) descriptions in vector + ( <x,y> point-to-point ) format + - can be grouped as almost 20 'occidental' (english, greek, + cyrillic) fonts, 3 or more 'oriental' (Kanji, Hiragana, + and Katakana) fonts, and a few hundred miscellaneous + symbols (mathematical, musical, cartographic, etc etc) + - are suitable for typographic quality output on a vector device + (such as a plotter) when used at an appropriate scale. + - were digitized by Dr. A. V. Hershey while working for the U.S. + Government National Bureau of Standards (NBS). + - are in the public domain, with a few caveats: + - They are available from NTIS (National Technical Info. + Service) in a computer-readable from which is *not* + in the public domain. This format is described in + a hardcopy publication "Tables of Coordinates for + Hershey's Repertory of Occidental Type Fonts and + Graphic Symbols" available from NTIS for less than + $20 US (phone number +1 703 487 4763). + - NTIS does not care about and doesn't want to know about + what happens to Hershey Font data that is not + distributed in their exact format. + - This distribution is not in the NTIS format, and thus is + only subject to the simple restriction described + at the top of this file. + +Hard Copy samples of the Hershey Fonts are best obtained by purchasing the +book described above from NTIS. It contains a sample of all of the Occidental +symbols (but none of the Oriental symbols). + +This distribution: + - contains + * a complete copy of the Font data using the original + glyph-numbering sequence + * a set of translation tables that could be used to generate + ASCII-sequence fonts in various typestyles + * a couple of sample programs in C and Fortran that are + capable of parsing the font data and displaying it + on a graphic device (we recommend that if you + wish to write programs using the fonts, you should + hack up one of these until it works on your system) + + - consists of the following files... + hershey.doc - details of the font data format, typestyles and + symbols included, etc. + hersh.oc[1-4] - The Occidental font data (these files can + be catenated into one large database) + hersh.or[1-4] - The Oriental font data (likewise here) + *.hmp - Occidental font map files. Each file is a translation + table from Hershey glyph numbers to ASCII + sequence for a particular typestyle. + hershey.f77 - A fortran program that reads and displays all + of the glyphs in a Hershey font file. + hershey.c - The same, in C, using GKS, for MS-DOS and the + PC-Color Graphics Adaptor. + +Additional Work To Be Done (volunteers welcome!): + + - Integrate this complete set of data with the hershey font typesetting + program recently distributed to mod.sources + - Come up with an integrated data structure and supporting routines + that make use of the ASCII translation tables + - Digitize additional characters for the few places where non-ideal + symbol substitutions were made in the ASCII translation tables. + - Make a version of the demo program (hershey.c or hershey.f77) that + uses the standard Un*x plot routines. + - Write a banner-style program using Hershey Fonts for input and + non-graphic terminals or printers for output. + - Anything else you'd like! + +This file provides a brief description of the contents of the Occidental +Hershey Font Files. For a complete listing of the fonts in hard copy, order +NBS Special Publication 424, "A contribution to computer typesetting +techniques: Tables of Coordinates for Hershey's Repertory of Occidental +Type Fonts and Graphic Symbols". You can get it from NTIS (phone number is ++1 703 487 4763) for less than twenty dollars US. + +Basic Glyph (symbol) data: + + hersh.oc1 - numbers 1 to 1199 + hersh.oc2 - numbers 1200 to 2499 + hersh.oc3 - numbers 2500 to 3199 + hersh.oc4 - numbers 3200 to 3999 + + These four files contain approximately 19 different fonts in +the A-Z alphabet plus greek and cyrillic, along with hundreds of special +symbols, described generically below. + + There are also four files of Oriental fonts (hersh.or[1-4]). These +files contain symbols from three Japanese alphabets (Kanji, Hiragana, and +Katakana). It is unknown what other symbols may be contained therein, nor +is it known what order the symbols are in (I don't know Japanese!). + + Back to the Occidental files: + +Fonts: + Roman: Plain, Simplex, Duplex, Complex Small, Complex, Triplex + Italic: Complex Small, Complex, Triplex + Script: Simplex, Complex + Gothic: German, English, Italian + Greek: Plain, Simplex, Complex Small, Complex + Cyrillic: Complex + +Symbols: + Mathematical (227-229,232,727-779,732,737-740,1227-1270,2227-2270, + 1294-1412,2294-2295,2401-2412) + Daggers (for footnotes, etc) (1276-1279, 2276-2279) + Astronomical (1281-1293,2281-2293) + Astrological (2301-2312) + Musical (2317-2382) + Typesetting (ffl,fl,fi sorts of things) (miscellaneous places) + Miscellaneous (mostly in 741-909, but also elsewhere): + - Playing card suits + - Meteorology + - Graphics (lines, curves) + - Electrical + - Geometric (shapes) + - Cartographic + - Naval + - Agricultural + - Highways + - Etc... + +ASCII sequence translation files: + + The Hershey glyphs, while in a particular order, are not in an + ASCII sequence. I have provided translation files that give the + sequence of glyph numbers that will most closely approximate the + ASCII printing sequence (from space through ~, with the degree + circle tacked on at the end) for each of the above fonts: + + File names are made up of fffffftt.hmp, + + where ffffff is the font style, one of: + roman Roman + greek Greek + italic Italic + script Script + cyril Cyrillic (some characters not placed in + the ASCII sequence) + gothgr Gothic German + gothgb Gothic English + gothit Gothic Italian + + and tt is the font type, one of: + p Plain (very small, no lower case) + s Simplex (plain, normal size, no serifs) + d Duplex (normal size, no serifs, doubled lines) + c Complex (normal size, serifs, doubled lines) + t Triplex (normal size, serifs, tripled lines) + cs Complex Small (Complex, smaller than normal size) + +The three sizes are coded with particular base line (bottom of a capital + letter) and cap line (top of a capital letter) values for 'y': + + Size Base Line Cap Line + + Very Small -5 +4 + Small -6 +7 + Normal -9 +12 + + (Note: some glyphs in the 'Very Small' fonts are actually 'Small') + +The top line and bottom line, which are normally used to define vertical + spacing, are not given. Maybe somebody can determine appropriate + values for these! + +The left line and right line, which are used to define horizontal spacing, + are provided with each character in the database. + +Format of Hershey glyphs: + +5 bytes - glyphnumber +3 bytes - length of data length in 16-bit words including left&right numbers +1 byte - x value of left margin +1 byte - x value of right margin +(length*2)-2 bytes - stroke data + +left&right margins and stroke data are biased by the value of the letter 'R' +Subtract the letter 'R' to get the data. + +e.g. if the data byte is 'R', the data is 0 + if the data byte is 'T', the data is +2 + if the data byte is 'J', the data is -8 + +and so on... + +The coordinate system is x-y, with the origin (0,0) in the center of the +glyph. X increases to the right and y increases *down*. + +The stroke data is pairs of bytes, one byte for x followed by one byte for y. + +An 'R' in the stroke data indicates a 'lift pen and move' instruction. +</pre> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> + +<hr> + +<p> +<small>Public Domain.</small> +<small>Distributed with Ghostscript 6.50, November 2000</small> + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/History1.htm b/Master/xemtex/doc/ghostscript/History1.htm new file mode 100644 index 00000000000..58dab2ecfc5 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/History1.htm @@ -0,0 +1,436 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>History of Ghostscript versions 1.n</title> +<!-- $Id: History1.htm,v 1.13.2.11.2.5 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: history1.txt --> +<!-- + WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to + re-create the table of contents here, because it will replace the + hand-edited TOC subheads with a separate subhead for each H2 in + the body of the file. Or if you do, first look at the original + TOC to see how to edit it for visual conciseness. +--> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>History of Ghostscript versions 1.n</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Version1.3">Version 1.3 (6/20/89)</a> +<ul> +<li><a href="#V1.3_Interpreter">Interpreter</a>, + <a href="#V1.3_Fonts">Fonts</a>, + <a href="#V1.3_Library">Library</a>, + <a href="#V1.3_Usage_procedures">Usage procedures</a> +</ul> +<li><a href="#Version1.2">Version 1.2 (2/22/89)</a> +<ul> +<li><a href="#V1.2_Interpreter">Interpreter</a>, + <a href="#V1.2_Library">Library</a>, + <a href="#V1.2_Usage_procedures">Usage procedures</a> +</ul> +<li><a href="#Version1.1">Version 1.1 (2/12/89)</a> +<ul> +<li><a href="#V1.1_Interpreter">Interpreter</a>, + <a href="#V1.1_Initialization">Initialization (ghost.ps, gfonts.ps)</a>, + <a href="#V1.1_Library">Library</a>, + <a href="#V1.1_Usage_procedures">Usage procedures</a> +</ul> +<li><a href="#Version1.0">Version 1.0 (8/11/88)</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document is a history of Ghostscript releases numbered 1.n. For more +recent changes, see the the other history documents and, for the latest +versions, the news: + +<blockquote> +<a href="News.htm">News</a><br> +<a href="History4.htm">History of Ghostscript versions 4.n</a><br> +<a href="History3.htm">History of Ghostscript versions 3.n</a><br> +<a href="History2.htm">History of Ghostscript versions 2.n</a><br> +History of Ghostscript versions 1.n (this document)<br> +</blockquote> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + + +<h2><a name="Version1.3"></a>Version 1.3 (6/20/89)</h2> +<pre> +This release should have had a lot more things in it, but time pressure +and the already long delay in getting it out made it necessary to push it +out the door in an incomplete state (e.g., no testing on X systems +whatsoever). + +</pre> +<h3><a name="V1.3_Interpreter"></a>Interpreter</h3> + +<pre> +Makes -d and -D equivalent on the command line. Adds a new switch -s / -S +that defines a name as a string rather than a token. + +Arranges things so that if -sLIB=_a_prefix_ is defined on the command +line, (filename) run will look for _a_prefix_filename before giving up if +filename isn't the name of an accessible file. + +Changes showpage from an operator to a procedure. The definition of +showpage in ghost.ps does a copypage, beeps the console, waits for the +user to type a character (normally a <return>, since line buffering is +always enabled), and then does an erasepage and an initgraphics. + +Adds a new initialization file, gdevs.ps, containing device-dependent +parameters. The default window size for X Windows is properly set to 612 +x 792, i.e., 8.5" x 11". + +Adds a new optional initialization file, statusd.ps, that provides dummy +definitions for the names found in statusdict on LaserWriters. + +Adds a new operator, getenv, to get information from the shell +environment. + +Adds a new predefined operator, defaultdevicename, that returns either (X) +or (EGA) according to how the interpreter was built. + +Adds a new type, devicetype, and new operators deviceparams, getscanlines, +makedevice, makeimagedevice, and setdevice. Changes currentdevice to +return a device object rather than a set of parameters. + +Makes the scanner recognize reals with 'e' exponent notation, and handle +reals with more than 9 digits. + +Fixes a bug that made names starting with digits read incorrectly. + +Fixes a bug in the exp operator that made it not pop its first argument +from the stack. + +Fixes a bug in the rand operator that made it return negative values about +half the time. + +Fixes a bug in equality comparison (eq, ne, and several other operators) +that made unequal operator objects occasionally appear to be equal on DOS +systems. + +Fixes a bug in the bind operator that made it not work on packed arrays. + +Changes the internal representation of dictionaries so they can be +expanded or contracted dynamically. Adds a new operator, setmaxlength, to +change the allocated size of a dictionary. + +Changes sstorei.h so that non-DOS compilers don't encounter the #pragma +directive used by Turbo C. + +Restores the display mode (on MS-DOS systems) when exiting. + +</pre> +<h3><a name="V1.3_Fonts"></a>Fonts</h3> + +<pre> +Makes undefined characters in the standard font display as tilde rather +than blank (or causing an error). Unmapped character codes (those mapped +to .notdef in the encoding) still display as nothing, per the PostScript +manual. + +</pre> +<h3><a name="V1.3_Library"></a>Library</h3> + +<pre> +Adds a new header file, gxbitmap.h, with some new documentation describing +the internal storage format for bitmaps. + +Makes numerous internal changes in the character / font cache, affecting +many of the routines in gxcache.c. + +Fixes a bug in gz_draw_line / gz_fill_trapezoid that made nearly +horizontal lines display wrong. + +Fixes a bug in gs_scale that made scaling not work if the coordinate +system was rotated or skewed. + +Extends the font cache so it will handle characters rotated by multiples +of 90 degrees. + +Changes the second argument of gx_path_bbox and gx_path_is_rectangle to be +a gs_fixed_rect * rather than a fixed [4]. + +Changes gs_matrix_rotate so it handles multiples of 90 degrees as a +special case. + +Changes the definition of the gx_device structure to accommodate the new +device operators, and adds corresponding library calls. + +Changes the type for a device color index from int to gx_color_index +(equivalent to unsigned long). ***NOTE***: this affects existing clients +and drivers in a non-trivial way on MS-DOS systems. + +Changes gs_malloc and gs_free to take a client name string as an argument. + +</pre> +<h3><a name="V1.3_Usage_procedures"></a>Usage procedures</h3> + +<pre> +Changes the compilation rules for Unix systems to not use the -o and -c +compiler flags together, to be compatible with more versions of cc. + +Changes the gcc makefile to use $(GCC) rather than gcc as the compiler +name. + +Moves the -1 flag for the MS-DOS compiler from the cc*.bat files to the +makefile. + +Changes CCDEBUG to CCFLAGS, and adds ASMFLAGS, in DOS makefile. + +Adds -DFOR80386 and /DFOR80386 to enable use of 80386 instructions in +assembly code on DOS systems. + +Merges the DEBUG and gs_DEBUG switches. There is now only a single DEBUG +switch that affects both the interpreter and the library. + +Adds a new compilation switch, -DNOPRIVATE, that makes private (static) +variables and procedures public for debugging and profiling (only needed +on DOS systems). + +Adds the DOS executable (gs.exe and gs.map) to the distribution fileset. + +Adds new platform-specific code files, gp-*.c, for a few things like +reading the clock. + +Adds a new documentation file, drivers.doc, that describes the interface +between Ghostscript and device drivers. + +</pre> + +<hr> + +<h2><a name="Version1.2"></a>Version 1.2 (2/22/89)</h2> + +<h3><a name="V1.2_Interpreter"></a>Interpreter</h3> + +<pre> +Adds the new facilities in version 25 of PostScript: //name for immediate +lookup, packed arrays (setpacking, currentpacking, packedarray operators), +and new font cache parameters (setcacheparams, currentcacheparams +operators). + +Adds new operators (setfileposition, currentfileposition) for random +access to files. + +Extends readhexstring to take either a string or a file, just like token. + +Fixes a bug that caused the 'for' operator (and a couple of others) to +randomly smash memory locations on PC platforms. + +</pre> +<h3><a name="V1.2_Library"></a>Library</h3> + +<pre> +Renames the init_device driver procedure as open_device, and adds a +corresponding close_device. + +Adds new procedures to read and set the cache limit values (implementing +the currentcacheparams and setcacheparams operators). + +</pre> +<h3><a name="V1.2_Usage_procedures"></a>Usage procedures</h3> + +<pre> +Changes the name of the Unix makefile to ux-cc-x.mak, and adds a new Unix +makefile, ux-gcc-x.mak, for using gcc instead of cc. (The latter doesn't +actually work yet.) + +Changes the name of the single built-in font from uglyfont.cp to +ugly10.cp. + +</pre> + +<hr> + +<h2><a name="Version1.1"></a>Version 1.1 (2/12/89)</h2> + +<h3><a name="V1.1_Interpreter"></a>Interpreter</h3> + +<pre> +Makes the scanner treat ^Z (ASCII code 26) as whitespace: it erroneously +treated ^R (ASCII code 22, or octal 26) as whitespace. + +Makes the token and readline operators, and the syntax for comments, +recognize \r (code 13), \n (code 10), and \r\n as equivalent end-of-line +indicators. The token and readline operators will skip over any of these +sequences at the end of a token or line respectively, and a comment will +read through any of these sequences. The other file operators (read, +write, readstring, writestring) do nothing special with these characters. + +Changes the debug switch name from -D to -Z. Adds a -D switch for +defining names in systemdict from the command line. Defines -DDEBUG for +printing out debugging information during initialization, and -DNODISPLAY +for suppressing display output. + +Corrects a bug that prevented the error machinery from working -- in +version 1.0, errors always dumped the stacks and aborted interpretation. + +Corrects a bug that made eq and ne not work for strings. + +Makes the atan (arctangent) operator normalize its results according to +the PostScript convention. + +Makes the div operator check for zero divisor. + +Makes unimplemented operators (resetfile, echo, save, restore, strokepath, +reversepath) truly undefined. + +Makes the interactive loop exit gracefully on end-of-file: in version 1.0 +this caused an infinite loop. + +Implements the status operator. + +Corrects a bug that made the 'for' operator deliver garbage values if one +or more of the operands (start, increment, end) was a real. + +Corrects a bug that made the arc and arcn operators not pop their operands +from the stack. + +Corrects a bug that made the kshow operator crash the interpreter. + +Corrects a bug that made the print operator fail on machines that don't +pass structure arguments by simply pushing the contents of the structure. + +Adds a new operator, imagecharpath, to convert images to +addcharpath-compatible outlines. + +Changes alloc and alloc_free to use char * rather than byte *, and +alloc_free to return void rather than int, making them compatible with the +library's expectations and with malloc/free. + +Explicitly casts all expressions of the form (ptr1 - ptr2) used as +procedure arguments to unsigned, to handle an incompatibility between +Turbo C versions 1.5 and 2.0. + +Changes some of the internal conventions for operators: operators that +push on the operand stack must check for overflow explicitly, and +operators that modify the execution stack must return a special code. +(See oper.h for details.) + +</pre> +<h3><a name="V1.1_Initialization"></a>Initialization (ghost.ps, gfonts.ps)</h3> + +<pre> +Modifies ghost.ps and gfonts.ps so they print debugging information only +if the name DEBUG is defined. (Presumably the user will set this from the +command line with -DDEBUG.) + +Changes ghost.ps so it initializes the nominal screen size to 640 x 350 on +MS-DOS systems as before, but to 612 x 792 on Unix systems, which is an +8.5" x 11" page at 72 pixels per inch. + +</pre> +<h3><a name="V1.1_Library"></a>Library</h3> + +<pre> +Corrects a bug that made the fill and eofill operators (gs_fill and +gs_eofill) not perform a newpath afterward. + +Corrects the bug that made thin, nearly horizontal lines display wrong (as +a series of disconnected dots) in the MS-DOS implementation. + +Fixes a bug in the EGA driver that often made it fill rectangular regions +with black around information being displayed in white. + +Completely changes the internal representation of outline fonts, and +changes btoi.ps (a Ghostscript language program for converting bitmaps to +outlines) to use a new library call, gs_imagecharpath. + +Changes the extension for outline font files from .gf to .cp. + +Adds a new debugging switch, q, that traces all rectangle fill operations. + +Adds a new debugging switch, v, that traces all device-level output calls. + +Explicitly casts pointer differences passed as procedure arguments, as in +the interpreter. + +Makes stringwidth work if there is no current point. In version 1.0, this +gave a nocurrentpoint error. + +</pre> +<h3><a name="V1.1_Usage_procedures"></a>Usage procedures</h3> + +<pre> +Changes the name of the 'read me' file from READ.ME to README. + +Removes a bogus line (invoking the 'mcopy' utility) from the makefile. + +Splits up the makefile into a generic part (ghost.mak) and +platform-specific parts (dos-ega.mak, unix-x11.mak). The latter are what +is actually executed. + +Puts the definitions of the DEBUG and gs_DEBUG compilation flags into the +makefile instead of in ghost.h and gx.h respectively. + +Changes the names of the documentation files to be a little less cryptic. +Changes all the file names to lower-case in the documentation. Adds +installation information to make.doc. + +Changes all function definitions (but not prototype declarations) to ANSI +syntax, and adds a preprocessing step (ansi2knr) to convert them to K&R +syntax on Unix systems. + +Changes the normal MS-DOS link configuration to not assume the presence of +an 80x87 coprocessor, and describes how to increase performance if a +coprocessor is present. + +Changes the names of all the interpreter .c files, except stream.c, to +begin with 'i'. + +</pre> + +<hr> + +<h2><a name="Version1.0"></a>Version 1.0 (8/11/88)</h2> + +<pre> +First version released to the public. +</pre> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p><small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. +All rights reserved.</small> + +<p>This software is provided AS-IS with no warranty, either express or +implied. + +<p> +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/History2.htm b/Master/xemtex/doc/ghostscript/History2.htm new file mode 100644 index 00000000000..62964ee41af --- /dev/null +++ b/Master/xemtex/doc/ghostscript/History2.htm @@ -0,0 +1,5231 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>History of Ghostscript versions 1.n</title> +<!-- $Id: History2.htm,v 1.13.2.11.2.6 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: history2.txt --> +<!-- + WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to + re-create the table of contents here, because it will replace the + hand-edited TOC subheads with a separate subhead for each H2 in + the body of the file. Or if you do, first look at the original + TOC to see how to edit it for visual conciseness. +--> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>History of Ghostscript versions 2.n</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Version2.9.10b">Version 2.9.10-beta (7/28/94)</a> +<ul> +<li><a href="#V2.9.10b_Documentation">Documentation</a>, + <a href="#V2.9.10b_Procedures">Procedures</a>, + <a href="#V2.9.10b_Utilities">Utilities</a>, + <a href="#V2.9.10b_Drivers">Drivers</a>, + <a href="#V2.9.10b_Platforms">Platforms</a>, + <a href="#V2.9.10b_Fonts">Fonts</a>, + <a href="#V2.9.10b_Interpreter">Interpreter</a>, + <a href="#V2.9.10b_Streams">Streams</a>, + <a href="#V2.9.10b_Library">Library</a> +</ul> +<li><a href="#Version2.9.9b">Version 2.9.9-beta (6/23/94)</a> +<ul> +<li><a href="#V2.9.9b_Documentation">Documentation</a>, + <a href="#V2.9.9b_Platforms">Platforms</a>, + <a href="#V2.9.9b_Fonts">Fonts</a>, + <a href="#V2.9.9b_Interpreter">Interpreter</a>, + <a href="#V2.9.9b_Library">Library</a> +</ul> +<li><a href="#Version2.9.8">Version 2.9.8 (6/20/94)</a> +<ul> +<li><a href="#V2.9.8_Documentation">Documentation</a>, + <a href="#V2.9.8_Procedures">Procedures</a>, + <a href="#V2.9.8_Utilities">Utilities</a>, + <a href="#V2.9.8_Drivers">Drivers</a>, + <a href="#V2.9.8_Platforms">Platforms</a>, + <a href="#V2.9.8_Fonts">Fonts</a>, + <a href="#V2.9.8_Interpreter">Interpreter</a>, + <a href="#V2.9.8_Library">Library</a> +</ul> +<li><a href="#Version2.9.7b">Version 2.9.7-beta (6/5/94)</a> +<ul> +<li><a href="#V2.9.7b_Documentation">Documentation</a>, + <a href="#V2.9.7b_Procedures">Procedures</a>, + <a href="#V2.9.7b_Utilities">Utilities</a>, + <a href="#V2.9.7b_Drivers">Drivers</a>, + <a href="#V2.9.7b_Platforms">Platforms</a>, + <a href="#V2.9.7b_Fonts">Fonts</a>, + <a href="#V2.9.7b_Interpreter">Interpreter</a>, + <a href="#V2.9.7b_Library">Library</a> +</ul> +<li><a href="#Version2.9.6b">Version 2.9.6-beta (5/23/94, not distributed to the public)</a> +<ul> +<li><a href="#V2.9.6b_Documentation">Documentation</a>, + <a href="#V2.9.6b_Procedures">Procedures</a>, + <a href="#V2.9.6b_Utilities">Utilities</a>, + <a href="#V2.9.6b_Drivers">Drivers</a>, + <a href="#V2.9.6b_Platforms">Platforms</a>, + <a href="#V2.9.6b_Fonts">Fonts</a>, + <a href="#V2.9.6b_Interpreter">Interpreter</a>, + <a href="#V2.9.6b_Library">Library</a> +</ul> +<li><a href="#Version2.9.5b">Version 2.9.5-beta (4/11/94)</a> +<ul> +<li><a href="#V2.9.5b_Documentation">Documentation</a>, + <a href="#V2.9.5b_Procedures">Procedures</a>, + <a href="#V2.9.5b_Utilities">Utilities</a>, + <a href="#V2.9.5b_Drivers">Drivers</a>, + <a href="#V2.9.5b_Platforms">Platforms</a>, + <a href="#V2.9.5b_Interpreter">Interpreter</a>, + <a href="#V2.9.5b_Library">Library</a> +</ul> +<li><a href="#Version2.9.4b">Version 2.9.4-beta (2/19/94)</a> +<ul> +<li><a href="#V2.9.4b_Procedures">Procedures</a>, + <a href="#V2.9.4b_Utilities">Utilities</a>, + <a href="#V2.9.4b_Drivers">Drivers</a>, + <a href="#V2.9.4b_Platforms">Platforms</a>, + <a href="#V2.9.4b_Interpreter">Interpreter</a>, + <a href="#V2.9.4b_Library">Library</a> +</ul> +<li><a href="#Version2.9.3b">Version 2.9.3-beta (1/19/94)</a> +<ul> +<li><a href="#V2.9.3b_Documentation">Documentation</a>, + <a href="#V2.9.3b_Procedures">Procedures</a>, + <a href="#V2.9.3b_Drivers">Drivers</a>, + <a href="#V2.9.3b_Platforms">Platforms</a>, + <a href="#V2.9.3b_Interpreter">Interpreter</a>, + <a href="#V2.9.3b_Library">Library</a> +</ul> +<li><a href="#Version2.9.2b">Version 2.9.2-beta (1/2/94)</a> +<ul> +<li><a href="#V2.9.2b_Documentation">Documentation</a>, + <a href="#V2.9.2b_Utilities">Utilities</a>, + <a href="#V2.9.2b_Drivers">Drivers</a>, + <a href="#V2.9.2b_Platforms">Platforms</a>, + <a href="#V2.9.2b_Fonts">Fonts</a>, + <a href="#V2.9.2b_Interpreter">Interpreter</a>, + <a href="#V2.9.2b_Library">Library</a> +</ul> +<li><a href="#Version2.9.1b">Version 2.9.1-beta (12/7/93)</a> +<ul> +<li><a href="#V2.9.1b_Utilities">Utilities</a>, + <a href="#V2.9.1b_Interpreter">Interpreter</a>, + <a href="#V2.9.1b_Library">Library</a> +</ul> +<li><a href="#Version2.9b">Version 2.9-beta (12/6/93)</a> +<ul> +<li><a href="#V2.9b_Documentation">Documentation</a>, + <a href="#V2.9b_Procedures">Procedures</a>, + <a href="#V2.9b_Utilities">Utilities</a>, + <a href="#V2.9b_Drivers">Drivers</a>, + <a href="#V2.9b_Platforms">Platforms</a>, + <a href="#V2.9b_Interpreter">Interpreter</a>, + <a href="#V2.9b_Library">Library</a> +</ul> +<li><a href="#Version2.8b">Version 2.8-beta (11/10/93)</a> +<ul> +<li><a href="#V2.8b_Documentation">Documentation</a>, + <a href="#V2.8b_Procedures">Procedures</a>, + <a href="#V2.8b_Utilities">Utilities</a>, + <a href="#V2.8b_Drivers">Drivers</a>, + <a href="#V2.8b_Platforms">Platforms</a>, + <a href="#V2.8b_Fonts">Fonts</a>, + <a href="#V2.8b_Interpreter">Interpreter</a>, + <a href="#V2.8b_Library">Library</a> +</ul> +<li><a href="#Version2.7.2b">Version 2.7.2-beta (10/11/93)</a> +<ul> +<li><a href="#V2.7.2b_Utilities">Utilities</a>, + <a href="#V2.7.2b_Interpreter">Interpreter</a>, + <a href="#V2.7.2b_Library">Library</a> +</ul> +<li><a href="#Version2.7.1b">Version 2.7.1-beta (10/4/93, not distributed to the public)</a> +<ul> +<li><a href="#V2.7.1b_Documentation">Documentation</a>, + <a href="#V2.7.1b_Utilities">Utilities</a>, + <a href="#V2.7.1b_Drivers">Drivers</a>, + <a href="#V2.7.1b_Platforms">Platforms</a>, + <a href="#V2.7.1b_Fonts">Fonts</a>, + <a href="#V2.7.1b_Interpreter">Interpreter</a>, + <a href="#V2.7.1b_Library">Library</a> +</ul> +<li><a href="#Version2.7b">Version 2.7-beta (9/20/93, not distributed to the public)</a> +<ul> +<li><a href="#V2.7b_Documentation">Documentation</a>, + <a href="#V2.7b_Procedures">Procedures</a>, + <a href="#V2.7b_Utilities">Utilities</a>, + <a href="#V2.7b_Drivers">Drivers</a>, + <a href="#V2.7b_Platforms">Platforms</a>, + <a href="#V2.7b_Fonts">Fonts</a>, + <a href="#V2.7b_Interpreter">Interpreter</a>, + <a href="#V2.7b_Library">Library</a> +</ul> +<li><a href="#Version2.6.1">Version 2.6.1 (5/28/93)</a> +<ul> +<li><a href="#V2.6.1_Documentation">Documentation</a>, + <a href="#V2.6.1_Procedures">Procedures</a>, + <a href="#V2.6.1_Utilities">Utilities</a>, + <a href="#V2.6.1_Drivers">Drivers</a>, + <a href="#V2.6.1_Platforms">Platforms</a>, + <a href="#V2.6.1_Fonts">Fonts</a>, + <a href="#V2.6.1_Interpreter">Interpreter</a>, + <a href="#V2.6.1_Library">Library</a> +</ul> +<li><a href="#Version2.6">Version 2.6 (5/9/93)</a> +<ul> +<li><a href="#V2.6_Documentation">Documentation</a>, + <a href="#V2.6_Procedures">Procedures</a>, + <a href="#V2.6_Utilities">Utilities</a>, + <a href="#V2.6_Platforms">Platforms</a>, + <a href="#V2.6_Fonts">Fonts</a>, + <a href="#V2.6_Drivers">Drivers</a>, + <a href="#V2.6_Interpreter">Interpreter</a>, + <a href="#V2.6_Library">Library</a> +</ul> +<li><a href="#Version2.5.2">Version 2.5.2 (9/20/92)</a> +<ul> +<li><a href="#V2.5.2_Procedures">Procedures</a>, + <a href="#V2.5.2_Utilities">Utilities</a>, + <a href="#V2.5.2_Platforms">Platforms</a>, + <a href="#V2.5.2_Drivers">Drivers</a>, + <a href="#V2.5.2_Interpreter">Interpreter</a>, + <a href="#V2.5.2_Library">Library</a> +</ul> +<li><a href="#Version2.5.1">Version 2.5.1 (9/11/92)</a> +<ul> +<li><a href="#V2.5.1_Procedures">Procedures</a>, + <a href="#V2.5.1_Utilities">Utilities</a>, + <a href="#V2.5.1_Platforms">Platforms</a>, + <a href="#V2.5.1_Fonts">Fonts</a>, + <a href="#V2.5.1_Drivers">Drivers</a>, + <a href="#V2.5.1_Interpreter">Interpreter</a>, + <a href="#V2.5.1_Library">Library</a> +</ul> +<li><a href="#Version2.5">Version 2.5 (8/18/92)</a> +<ul> +<li><a href="#V2.5_Procedures">Procedures</a>, + <a href="#V2.5_Utilities">Utilities</a>, + <a href="#V2.5_Platforms">Platforms</a>, + <a href="#V2.5_Fonts">Fonts</a>, + <a href="#V2.5_Drivers">Drivers</a>, + <a href="#V2.5_Interpreter">Interpreter</a>, + <a href="#V2.5_Library">Library</a> +</ul> +<li><a href="#Version2.4.2">Version 2.4.2 (5/8/92)</a> +<ul> +<li><a href="#V2.4.2_Procedures">Procedures</a>, + <a href="#V2.4.2_Utilities">Utilities</a>, + <a href="#V2.4.2_Platforms">Platforms</a>, + <a href="#V2.4.2_Fonts">Fonts</a>, + <a href="#V2.4.2_Drivers">Drivers</a>, + <a href="#V2.4.2_Interpreter">Interpreter</a>, + <a href="#V2.4.2_Library">Library</a> +</ul> +<li><a href="#Version2.4.1">Version 2.4.1 (4/21/92)</a> +<ul> +<li><a href="#V2.4.1_Procedures">Procedures</a>, + <a href="#V2.4.1_Utilities">Utilities</a>, + <a href="#V2.4.1_Drivers">Drivers</a>, + <a href="#V2.4.1_Fonts">Fonts</a>, + <a href="#V2.4.1_Interpreter">Interpreter</a>, + <a href="#V2.4.1_Library">Library</a> +</ul> +<li><a href="#Version2.4">Version 2.4 (3/25/92)</a> +<ul> +<li><a href="#V2.4_Procedures">Procedures</a>, + <a href="#V2.4_Utilities">Utilities</a>, + <a href="#V2.4_Drivers">Drivers</a>, + <a href="#V2.4_Fonts">Fonts</a>, + <a href="#V2.4_Interpreter">Interpreter</a>, + <a href="#V2.4_Library">Library</a> +</ul> +<li><a href="#Version2.3">Version 2.3 (8/28/91)</a> +<ul> +<li><a href="#V2.3_Utilities">Utilities</a>, + <a href="#V2.3_Drivers">Drivers</a> +</ul> +<li><a href="#Version2.2">Version 2.2 (6/1/91)</a> +<ul> +<li><a href="#V2.2_Procedures">Procedures</a>, + <a href="#V2.2_Drivers">Drivers</a>, + <a href="#V2.2_Fonts">Fonts</a>, + <a href="#V2.2_Utilities">Utilities</a>, + <a href="#V2.2_Interpreter">Interpreter</a>, + <a href="#V2.2_Library">Library</a> +</ul> +<li><a href="#Version2.1.1">Version 2.1.1 (1/15/91)</a> +<ul> +<li><a href="#V2.1.1_Build_procedures">Build procedures</a>, + <a href="#V2.1.1_Interpreter">Interpreter</a>, + <a href="#V2.1.1_Drivers">Drivers</a>, + <a href="#V2.1.1_Library">Library</a> +</ul> +<li><a href="#Version2.1">Version 2.1 (12/31/90)</a> +<ul> +<li><a href="#V2.1_Build_procedures">Build procedures</a>, + <a href="#V2.1_Drivers">Drivers</a>, + <a href="#V2.1_Fonts">Fonts</a>, + <a href="#V2.1_Interpreter">Interpreter</a>, + <a href="#V2.1_Library">Library</a> +</ul> +<li><a href="#Version2.0">Version 2.0 (9/12/90)</a> +<ul> +<li><a href="#V2.0_Miscellaneous">Miscellaneous</a>, + <a href="#V2.0_Drivers">Drivers</a>, + <a href="#V2.0_Build_procedures">Build procedures</a>, + <a href="#V2.0_Interpreter">Interpreter</a>, + <a href="#V2.0_Library">Library</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document is a history of Ghostscript releases numbered 2.n. For more +recent changes, see the the other history documents and, for the latest +versions, the new: + +<blockquote> +<a href="News.htm">News</a><br> +<a href="History4.htm">History of Ghostscript versions 4.n</a><br> +<a href="History3.htm">History of Ghostscript versions 3.n</a><br> +History of Ghostscript versions 2.n (this document)<br> +<a href="History1.htm">History of Ghostscript versions 1.n</a> +</blockquote> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<h2><a name="Version2.9.10b"></a>Version 2.9.10-beta (7/28/94)</h2> + +<p> +This is the last 2.9 beta, since 3.0 will be released on July 31. + +<h3><a name="V2.9.10b_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - A | in gs.1 had a \ in front of it instead of \\. + +Adds a paragraph in gs.1 that tells how to select paper size. + +Notes in devs.mak that the cdj550 driver is the best one for the H-P +DeskJet 520, and the pjxl300 driver is the right one for the H-P DeskJet +1200C. + +Notes in make.doc that Watcom C++ 10.0 may require a change in a makefile. + +</pre><h3><a name="V2.9.10b_Procedures"></a>Procedures</h3><pre> +Removes ICCINIT from MODULES.LIS for VMS systems. + +Updates VMS.MAK to support Motif V1.2. + +Updates jpeg.mak to work with version 5alpha4 of the IJG JPEG code. + +</pre><h3><a name="V2.9.10b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - font2c didn't leave extra room in Type 0 font dictionaries for +entries added by definefont. + - font2c left extra information on the stack. + - ansi2knr would remove newline characters within formal argument +lists. + - font2c got an Error: /undefined in makefontprocname. + +Updates ansi2knr to work better with the GNU configure program. + +Updates ansi2knr to handle procedure formal arguments automatically. + +</pre><h3><a name="V2.9.10b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - If a file contained color or gray-scale information followed by a +masked image, the X driver would sometimes invert the polarity of the +image. + +</pre><h3><a name="V2.9.10b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - Unix systems with a 2-argument gettimeofday returned garbage +values for the current time. + - The VMS build script for compiled fonts omitted the requirement +to load gs_ccfnt.ps. + - memory_.h didn't note that System V Unix platforms need memmove. + +On Unix systems, changes the subdirectory of $datadir/ghostscript to just +be the version number (e.g., 2.9.10 rather than gs-2.9.9). + +</pre><h3><a name="V2.9.10b_Fonts"></a>Fonts</h3><pre> +Adds support code for the Wadalab (University of Tokyo) free Kanji font. + +Notes in the documentation in Fontmap that .pfa and .pfb fonts are +compatible with ATM, but .gsf fonts are not. + +Changes the names of Thomas Wolff's expanded Hershey fonts, replacing .gsf +with .pfa. + +</pre><h3><a name="V2.9.10b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - The scanner became confused if the literal names /<< or />> +straddled an input buffer boundary. + - .setlanguagelevel gave an invalidaccess error when +switching from level 2 to level 1. + - currentgstate, setgstate, and copy for gstates didn't do +the necessary access checks. + - The Category resource category didn't define .ResourceFile, so +/Category resourcestatus gave an error. + - The garbage collector didn't trace the structures used by +filenameforall properly on most platforms. + - Automatically expanding systemdict didn't work, but didn't give +an error. + - Automatically expanding a dictionary usually expanded it by too +much. + - systemdict was created too small. + - The garbage collector didn't trace the structures referenced only +from allocator objects, leading to attempts to access freed storage. + - If a chunk was empty, the GC tried to free it even if it had +inner chunks. +* - The outer loop in dict_find_name_by_index() could cause an +addressing fault on segmented machines when looking up Level 2 operators, +because the offset could get decremented past 0. + - The heap_available procedure in gsmemory.c didn't convert +properly to non-ANSI syntax. (New bug in 2.9.9.) + - The ledgertray procedure wasn't implemented. + - The xxxtray procedures didn't set the page size. + - The settumble operator wasn't implemented, even as a dummy. + - glyphshow didn't work with Type 3 fonts. + - Supplying a RenderTable for a CIE color space caused an error. + - The DCT filter code had the jpeg/ subdirectory name "wired in" to +the source files. + +Adds experimental filters for Burrows/Wheeler block sorting compression +(BWBlockSortEncode/Decode), described in DEC SRC Research Report #124, +move-to-front coding (MoveToFrontEncode/Decode), and a simple form of +Huffman coding (BoundedHuffmanEncode/Decode). These are experimental -- do +not rely on them remaining the same (or existing at all) in future +releases! + +Adds all function prototypes needed to pacify strict compilers. + +Removes all explicit references to userdict from the C code. + +Changes the SAFER switch so that it disallows not only explicit writing, +deleting, or renaming of files, but also disallows specifying an explicit +OutputFile for any device (except for the initial device, by means of +-sOutputFile= on the command line). + +</pre><h3><a name="V2.9.10b_Streams"></a>Streams</h3><pre> +Fixes bugs: + - Hex decoding (ASCIIHexDecode stream and <> literals) didn't treat +the data source as read-only (although it restored it to its original +contents). + +Implements move-to-front coding, a simple form of Huffman coding, and +Burrows/Wheeler block sorting compression. + +</pre><h3><a name="V2.9.10b_Library"></a>Library</h3><pre> +Fixes bugs: +* - (The following bug fix was actually implemented somewhere around +version 2.7.) restore didn't purge character cache entries whose keys were +names created more recently than the save. + - gstype1.h declared gs_type1_state_sizeof as an extern, but this +wasn't defined anywhere. + - gs_makeimagedevice didn't set the size of the palette correctly, +which confused the GC. + - gs_makeimagedevice didn't set num_components to 1 for +mapped-color devices with only gray values. +* - The two-color halftoning algorithms truncated when computing the +halftone level, rather than rounding it. +* - If a path being filled had line segments that fell entirely to +the right of the clipping region, part of the path might not be filled. + - The optimized code for 24-bit color didn't ensure properly that +32-bit accesses would be aligned appropriately. + - The miter join check had gotten reversed somewhere along the way. +* - Because x and y were interchanged in the miter check computation, +in some situations the check was inverted. (This is a very old bug!) + - It was believed that strokepath didn't work with dashed lines; +the problem appears to have been an incorrect testing program. + +Adds all function prototypes needed to pacify strict compilers. + +Changes fixed2float so it doesn't cast the result to float, and removes +fixed2double. This produces slightly more accurate results in many places, +and may even be faster (for FPUs that normally generate double rather than +single precision results). + +</pre> + +<h2><a name="Version2.9.9b"></a>Version 2.9.9-beta (6/23/94)</h2> + +<h3><a name="V2.9.9b_Documentation"></a>Documentation</h3><pre> +Puts a pointer to devs.mak in the section of use.doc that talks about +MS-DOS displays. + +</pre><h3><a name="V2.9.9b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - The %pipe% IODevice was omitted on System V platforms. + - The AXP VMS build script needed /NESTED_INCLUDE=PRIMARY in +CC_QUAL to work around a bug in the DEC C compiler. + +</pre><h3><a name="V2.9.9b_Fonts"></a>Fonts</h3><pre> +Fixes bugs: + - gs_lev2.ps redefined .loadFontmap incorrectly. + +</pre><h3><a name="V2.9.9b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - stream_compact used memcpy even though the source and destination +might overlap. + - filter applied to a closed file could cause a crash. + +</pre><h3><a name="V2.9.9b_Library"></a>Library</h3><pre> +Fixes bugs: + - putdeviceparams to a printer didn't close and reopen the device +if only the page size or resolution was changed. + +</pre> + +<h2><a name="Version2.9.8"></a>Version 2.9.8 (6/20/94)</h2> + +<p> +This is the first version that claims to be a full Level 2 +implementation. +It was distributed to satisfy a contractual requirement. +</p> + +<h3><a name="V2.9.8_Documentation"></a>Documentation</h3><pre> +In make.doc: + - Adds a reference to the generic System V section at the end of +the SCO section. + - Notes that DEC OSF/1 systems may require changing the name of the +install program to installbsd. + +Updates drivers.doc to reflect the change from "properties" to +"parameters". + +Updates the Aladdin Enterprises Free Public License to version 1. + +In language.doc, notes that certain device parameters will be phased out. + +</pre><h3><a name="V2.9.8_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The file aa.ps was included in the distribution by mistake. + +Notes in the Unix makefiles that X11R6 probably needs SM and ICE added to +XLIBS. + +</pre><h3><a name="V2.9.8_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - viewjpeg.ps used a non-existent file as its example. + - A temporary string in wrfont.ps was allocated too small. + +Upgrades font2c.ps so it will handle (simple) Type 0 fonts as well as Type +1. + +</pre><h3><a name="V2.9.8_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The TIFF drivers didn't byte-align each scan line. + - gdevtfax.c applied & to an array member of a structure. + +Changes the param_list interface slightly: Implementations of the +put_params driver procedure should now use param_signal_error to report +errors, and should not give up at the first error. (Even though this is a +non-backward-compatible change, old implementations will continue to work; +they just won't deliver complete results to the setpagedevice Policies +machinery.) + +</pre><h3><a name="V2.9.8_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - Removes the time zone adjustment from gp_get_clock in gp_unix.c, +since the value returned by all Unix systems is bogus. + - The DV/X makefile still included the dfaxhigh and dfaxlow drivers. + - gssetmod.com (VMS command file) didn't work properly if the +argument list was empty. + - vms.mak, vms-axp.mak, and modules.lis hadn't been updated to +reflect changes in 2.9.7. + - The MS Windows version wouldn't link (overflowed the 64K primary +data segment). + +</pre><h3><a name="V2.9.8_Fonts"></a>Fonts</h3><pre> +Makes the font substitution algorithm somewhat more intelligent. + +</pre><h3><a name="V2.9.8_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - Enumerating the pointers of a zero-length array of structures +caused a divide by zero. + - iref.h didn't protect itself against multiple inclusion. + - The CCITTFaxEncode filter didn't byte-align the final +end-of-block code if EndOfBlock and EncodedByteAlign were both true. + - make_initial_dict in iinit.c used `name' as a formal parameter +name, which some compilers believe conflicts with a typedef. + - Not all internal operators had registered names. + - The GC used memcpy, rather than bytes_copy, when compacting +objects, even though the source and destination might overlap. + - When debugging was enabled, gc_string_mark could give a spurious +error indication. + - vmstatus returned too small a value for the maximum VM. + - The scanner could get into a loop when reading a radix-85 string. + - The GC could get into a state where it was called after every +allocation (because of the patch setting global = true in ireclaim). + - The general path filling algorithm didn't skip regions that were +completely outside the clipping box. + - The gs_screen_enum structure contained a pointer (porder) that +pointed into the middle of a structure, confusing the GC. + +Implements the BitmapWidths flag in fonts. The default of false means that +we use scalable widths even with xfonts. + +Changes the Generic resource category so that ResourceFileName is optional. + +Changes the .getdeviceparams operator so that it takes an optional +dictionary giving the set of keys whose values are wanted. Changes the +.putdeviceparams operator so that it takes an optional policy dictionary +specifying the action to be taken on errors, and returns a list of keys and +errors if it fails, rather than causing an error. These are +non-backward-compatible changes, but ordinary programs do not use these +operators. + +Changes the names of some internal operators and procedures by adding +a . to the beginning: + currenttime + devicename + +Implements currentpagedevice, and a small subset of setpagedevice. Only +the following keys in the page device dictionary are known to the current +implementation, and the ones marked with * are not actually processed: + PageSize + InputAttributes + MediaColor, MediaWeight, MediaType, InsertSheet + (for InputAttributes matching only) + *ImagingBBox + OutputAttributes + OutputType + (for OutputAttributes matching only) + NumCopies + HWResolution + *Margins + *Orientation (for all devices, not just roll devices) + Policies + Install + BeginPage + EndPage +Does not implement: + - Updating InputAttributes or OutputAttributes by sensing the state + of the device; + - Retrying media matching after an initial failure; + - Automatic handling of portrait vs. landscape page size; + - Recording the CTM after Install as the one to be used for + defaultmatrix, initmatrix, and initgraphics. +Also, media matching is normally disabled (with InputAttributes = null) +for all devices. ****** We had to disable setpagedevice just before +shipping this release, because of interactions with the older device +handling machinery that we could not fix in the time available. + +</pre><h3><a name="V2.9.8_Library"></a>Library</h3><pre> +Fixes bugs: + - 24-bit color (mem_true24_fill_rectangle and _copy_mono) had +algorithm bugs. + - A complex conditional expression in gx_render_gray wouldn't +compile properly with the DECStation 3100 Ultrix 4.3 compiler. + - The GC routines for gx_device_clip didn't handle the case where +the 'current' pointer pointed to list.single. + - gx_add_char_bits used memcpy, rather than bytes_copy, for +compressing character bitmaps, even though the source and destination might +overlap. + - Some compilers require the definition of st_gstate_contents to +precede the definitions of the GC procedures. + - Filling a large rectangle (more than 1K of bitmap) with a colored +halftone overwrote random areas of the stack. + +Changes gs_setcachedevice[2] to take a pointer to an array of floats, +rather than 6 or 10 individual floats. THIS IS A NON-BACKWARD-COMPATIBLE +CHANGE. + +Implements the BitmapWidths flag in fonts. + +</pre> + +<h2><a name="Version2.9.7b"></a>Version 2.9.7-beta (6/5/94)</h2> + +<p> +Yet another pre-3.0 beta. The main features are a fairly reliable +garbage +collector, and function prototypes almost everywhere they are needed. + +<h3><a name="V2.9.7b_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The comment at the beginning of the zfindlibfile procedure was +incorrect. + +Replaces the GNU License (the COPYING file) with version 0 of the new +Aladdin Enterprises Free Public License (the PUBLIC file). + +</pre><h3><a name="V2.9.7b_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The definition of cmykread.dev in gs.mak was incorrect (it +modified color.dev). + +Adds the ability to specify a value for FONTPATH on the command line +(-sFONTPATH=), overriding GS_FONTPATH. + +Replaces the -oper2 configuration resource type with the ability to specify +in the op_def list the dictionary in which operators will be defined. (See +opdef.h for more details.) This is an internal change only. + +</pre><h3><a name="V2.9.7b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - viewgif.ps got an error on interlaced GIF files whose height +wasn't a multiple of 8. + +Changes traceop.ps so it stores the traced operator in the same dictionary +where the operator is currently defined, if possible. + +</pre><h3><a name="V2.9.7b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The new G3 fax drivers crashed on page widths greater than 2623 +(40 * 64 + 63) pixels. (We fixed this by disallowing page widths greater +than approximately twice this.) + - The 24-bit PCX driver had some debugging code accidentally left +in it that produced large volumes of useless console output. + +Removes the previous (Leffler) TIFF/F driver and the TruFax driver. + +</pre><h3><a name="V2.9.7b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - time_.h, gp_unix.c, and gp_sysv.c didn't do the right thing on +SVR4 platforms, where gettimeofday only takes 1 argument. + - The final linking command on Turbo C platforms didn't specify the +COMPDIR directory for the linker. + +</pre><h3><a name="V2.9.7b_Fonts"></a>Fonts</h3><pre> + +Changes the standard Fontmap to use the URW contributed fonts as +work-alikes for Helvetica and Times Roman. + +</pre><h3><a name="V2.9.7b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - The garbage collector wasn't in a consistent state. + - In Level 2 mode, statusdict was allocated in global VM rather +than local VM. + - resourceforall gave an error on the built-in categories such as +Filter. + - The file searching algorithm didn't check the current directory +first. + - When opening a file failed, it didn't return a different error +depending on the problem. + - The CCITTFaxEncode filter crashed on widths larger than 2623 (64 +* 40 + 63) pixels. (We fixed this by disallowing page widths greater than +approximately twice this.) + - The .type1getsbw operator gave an invalidfont error if a +CharString started with anything other than a [h]sbw. (Adobe's published +specs say this is invalid, but some Adobe MultiMaster fonts start with a +callsubr and/or a callothersubr.) + - When printing out the stack with == after an error, the error +handler got a repeated (and ultimately fatal) typecheck error if it +encountered an object of non-standard type. + - The token operator could incorrectly attempt to free a structure +on the stack if it encountered an input buffer boundary. + - string_to_ref didn't correctly set the a_local flag in the string +object it created. + - If the -c switch was the last switch on the command line, +Ghostscript always exited without going into interactive mode. + - copy didn't check for errors when copying a dictionary. + +Makes many minor changes (mostly adding prototypes) to reduce error and +warning messages from gcc and other strict compilers. + +Adds files containing the 4 predefined PDF encodings (MacRoman, MacExpert, +WinAnsi, and PDFDoc). + +</pre><h3><a name="V2.9.7b_Library"></a>Library</h3><pre> +Fixes bugs: + - image_bbox in gxccman.c could produce a division by 0 if a +0-width character was being entered into the cache. + - gx_image_cached_char incorrectly specified a scale of 2x2 rather +than 1x1 if it had to read bits from an xfont. + - Stale pointers in the halftone cache weren't cleared properly by +a restore. (We fixed this by making grestoreall clear the halftone cache.) + - setdash used gs_malloc, rather than the current allocator, for +allocating the dash pattern. + - If one attempted to fill a very wide region with a colored +halftone, gx_dc_ht_colored_fill_rectangle would loop indefinitely. + - The container_offset in clipping devices was set incorrectly, +causing the garbage collector to mangle pointers. + +Changes the fopen routine in IODevices so that it can return an arbitrary +error code, rather than simply succeeding or failing. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE. It only affects IODevice implementations, +of which there are very few. (It doesn't affect ordinary device drivers.) + +Changes the char_metrics xfont procedure so it returns the width as +floating point numbers rather than integers. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE. It only affects xfont implementations, of +which there are very few. + +Makes many minor changes (mostly adding prototypes) to reduce error and +warning messages from gcc and other strict compilers. + +</pre> + +<h2><a name="Version2.9.6b"></a>Version 2.9.6-beta (5/23/94, not +distributed to the public)</h2> + +<p> +This, too, was supposed to be the last beta release for public +release 3.0. +It was created primarily for a user who desperately needed a Level 1 system +that would run properly on a 64-bit hardware architecture. The garbage +collector is badly broken (it's in the middle of an architectural change); +setpagedevice is still not implemented. + +<h3><a name="V2.9.6b_Documentation"></a>Documentation</h3> + +<pre> +Documents the standard location of Type 1 fonts on AIX. + +Changes the last few mentions of Ghostview for Microsoft Windows to GSview +for Windows. + +Notes that Solaris 2.n provides the X11 header files in a different place. + +Changes README to reflect the differentiation between Aladdin Ghostscript +and GNU Ghostscript. + +</pre> +<h3><a name="V2.9.6b_Procedures"></a>Procedures</h3> + +<pre> +Fixes bugs: + - The compilation rules for the modules that call the IJG library +used -Ijpeg rather than -I$(JPEGSRC). + - The rule for gslib.dev omitted echogs$(XE) as a prerequisite. + +Makes it possible to define the values of buildtime, copyright, revision, +revisiondate, and serialnumber in the makefile. + +</pre><h3><a name="V2.9.6b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - The viewgif.ps utility didn't handle local color tables. + +Updates ps2ai.ps to version 1.81. + +</pre><h3><a name="V2.9.6b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The TIFF and fax devices used some identical names, causing +linker complaints. + - The bj10e/bj200 driver inadvertently disabled the sheet feeder. +(The change may not actually fix this bug, since we don't have either of +these printers with a sheet feeder to test it on.) + - The 'bit' device didn't map colors to pixel values correctly. + - The monochrome PCL driver didn't work around the fact that the +Canon LBP4i printer didn't clear its seed row correctly. + +Adds new drivers: + - A user-contributed driver for the H-P DesignJet 650C. + - A user-contributed driver for the Canon LIPS III printer. + - A completely new tiffg3 driver with one based on the new, fast +faxg3 code. This driver does not include any external code, and carries an +Aladdin copyright. + - A tiffg4 driver, also based on the fast CCITT filter code. + +Removes the tiffg3x driver that appeared briefly in 2.9.5, and renames the +previous (Leffler) tiffg3 driver as tiffg3x. + +Adds support for A0, A1, and A2 paper sizes to PCL drivers. + +Changes all the names involving "props" to "params", for consistency with +the header files, some other internal interfaces, and Adobe's terminology. +THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. However, it only affects devices +that implement their own get_props and put_props procedures, of which there +aren't very many. + +</pre><h3><a name="V2.9.6b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - The DV/X makefile used X11 rather than X for the X11 library name. + - The DV/X makefile incorrectly included the PC display drivers. + - The DV/X makefile omitted gp_dosfs.$(OBJ) from the list of +platform-specific files. + - The DV/X makefile used : rather than ; for separating directory +names in GS_LIB_DEFAULT. + - x_.h omitted a needed alias for XtAppSetFallbackResources. + - The makefile entry for System V Unix systems didn't include +gp_unifn.$(OBJ). + - The comment before LDFLAGS in the gcc makefiles incorrectly +suggested using the -x switch on Ultrix platforms. + - The forward declaration of quant_params in zfdct.c upset the Sun +compiler because it declared a parameter as float rather than floatp. +* - The Microsoft C compiler, like the Borland C compilers, only +compares the offset part of segmented pointers. + +</pre><h3><a name="V2.9.6b_Fonts"></a>Fonts</h3><pre> + +Adds a fontmap suitable for use with Adobe Type Basics. + +</pre><h3><a name="V2.9.6b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - The STACK_LOOP_BEGIN macro in istack.h didn't work correctly on +segmented systems. + - The end_phase procedure in igc.c didn't work correctly on +segmented systems. + - Indexed color spaces didn't mark their base space properly when +garbage collecting. + - The garbage collector didn't work on segmented systems, because +it smashed the lsize field of large objects with mark/reloc information. + - Some structures didn't have correct associated GC procedures: +gs_indexed_map, gs_client_pattern, gs_pattern_instance. + - restore could free names or stack segments that were still +referenced. +* - If a packed object caused an error, the error object could be set +to garbage rather than the correct object. +* - Badly designed error handlers which use $error for temporary +storage could cause a dictfull error. + - Some compilers objected to the use of "dict" as a variable name +in a scope where it was defined as a type. + - IODevices were declared const and non-const inconsistently. + - setpagedevice popped one object too many off the stack if the +request included any subdictionaries that needed to be merged. + - More garbage collector bugs were fixed. + - If the current stack block was empty, Level 2 restore would give +a spurious typecheck error. + - The CCITTFaxEncode filter could get confused if it emptied the +input and filled the output at the same time. + - The CCITTFaxEncode filter could insert an extra EOL if it had to +suspend at certain times. + - The new parser for literal strings (as of 2.9.5) could mis-count +internal parentheses if a parenthesis caused the internal buffer collecting +the string to overflow. + - If the current stack block had fewer than 3 elements, +.type1addpath could report a spurious typecheck error. + - Text rendering operations (show, stringwidth, etc.) caused a +crash if the current color was a Pattern that hadn't already been +rasterized. + - If a program did a grestore when the graphics state stack was +empty, the graphics state was initialized to unexpected (and, in some +cases, invalid) values. + - pathforall could cause a bogus stackoverflow if it overflowed the +current stack block. + - Closing an encoding filter with a procedure as target left the +filter on the stack. +* - The outer loop in dict_lookup() could cause an addressing fault +on segmented machines when looking up Level 2 operators, because the offset +could get decremented past 0. + - There was an = instead of an == in a test in scanner_reloc_ptrs. + - The call on gs_reloc_refs in sproc_reloc_ptrs in zfproc.c omitted +the last (gcst) argument. + +(Re-)implements the 2-D case of CCITTFaxEncode, and fixes a couple of bugs +in it. + +Adds DiffEncode and DiffDecode filters that implement color prediction for +the PDF variant of the LZWDecode filter. + +Changes the specification of .oserrorstring to be similar to getenv, +where, etc. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no +user-written code should be using .oserrorstring. + +Adds oversampling for better character rasterizing. + +</pre><h3><a name="V2.9.6b_Library"></a>Library</h3><pre> +Fixes bugs: + - gx_dc_ht_colored_fill_rectangle gave a compiler warning because +of a problem with const pointers. + - dfmul2fixed_vars (in gxfixed.h) omitted the & before vda on +big-endian platforms, causing compilation errors. + - IODevices were declared const and non-const inconsistently. + - The Type 1 rasterizer never enabled overshoot suppression. + - stroke didn't fatten the line properly if stroke adjustment was +enabled, or if the line was horizontal or vertical. +* - The clipping test for characters was too strict by almost 1 +pixel, leading to unnecessary clipping of text at the edge of the clipping +box. +* - The initial clipping box was computed incorrectly for devices +whose initial transformation matrix included a rotation. + +Changed the implementation of clipping lists and show enumerators to use +separate objects rather than embedded objects, to pacify the GC. (This is +an internal change, not visible at the PostScript or API level.) + +Makes the character cache trim off left and right blank areas, as well as +top and bottom. (Internal change.) + +Adds oversampling for better character rasterizing. + +</pre> + +<h2><a name="Version2.9.5b"></a>Version 2.9.5-beta (4/11/94)</h2> + +<p> +This was supposed to be the last beta release before 3.0, but it +won't be. +The only known major defects are the unreliable garbage collector, and the +dummy implementation of setpagedevice/currentpagedevice. + +<h3><a name="V2.9.5b_Documentation"></a>Documentation</h3> + +<pre> +Fixes bugs: + - The file commnew.doc didn't belong in the fileset. + +Notes in the makefiles that SVR4 systems may need to set EXTRALIBS=-lnsl. + +Adds a user-contributed `man' page for the ps2epsi utility. + +</pre><h3><a name="V2.9.5b_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The IJG files didn't compile properly by themselves, because they +didn't have $(AK) in their dependency list. + +Changes back the handling of files named on the command line, so that they +are first sought in the current directory, and if that fails, use the +search path. (2.9.4-beta changed things so that files on the command line +did not use the search path, because as of that version, the search path +doesn't necessarily include the current directory. I consider the "check +the current directory and then use the search path" rule, which is the +MS-DOS standard and was used in Ghostscript prior to 2.9.4, a serious +mistake, since it is one of the best-known security holes in Unix and can +also produce confusing and unexpected results depending on the current +directory; I would much rather have a clear distinction between +user-specified files, which should not use any path searching, and system +files, that only use the defined search path. However, as of this moment, +users seem to want the convenience at the expense of insecurity and +confusion.) + +Adds '.' to the beginning of the search path for MS-DOS platforms, to +conform to the usual MS-DOS file searching convention. + +Adds a -c ("code") switch, which interprets following arguments (until the +next switch) as PostScript tokens. + +Changes the handling of FEATURE_DEVS so that either level1.dev or +level2.dev must normally be selected. THIS IS A NON-BACKWARD-COMPATIBLE +CHANGE for Level 1 systems, which formerly set FEATURE_DEVS to an empty +definition. + +</pre><h3><a name="V2.9.5b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - bench.ps didn't switch back to local VM properly before running +the program being benchmarked. + +Adds a ppmsetpagesize command to the pstoppm utility. + +</pre><h3><a name="V2.9.5b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The PCX and GIF drivers used an incorrect algorithm for computing +the blue component of the color palette, which could cause colors to come +out with not quite enough blue. + - The SPARCprinter driver wouldn't compile with non-ANSI compilers. + +Adds new drivers: + - A user-contributed driver for DEC sixel displays like the VT240 +(sxlcrt, in gdevln03.c, which has a FSF copyright.) + - A much larger and supposedly faster version of the TIFF/F driver +(tiffg3x, in gdevtifx.c), contributed by a user. This has the same +copyright as the TIFF/F driver (gdevtiff.c). + - A driver (faxg3, in gdevfax.c) that produces plain Group 3 fax +output with no header, using the CCITTFaxEncode filter to do the work. +(This is around 2.5-3 times as fast as the other fax drivers distributed +with Ghostscript.) + - A user-contributed driver for the Mitsubishi CP50 color printer. + +Changes the `bit' driver so one can set the Colors and *Values properties. + +Makes the color mapping for PC displays, PCX files, and GIF files identical +(they differed slightly before). + +</pre><h3><a name="V2.9.5b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - VMS used DISPLAY rather than DECW$DISPLAY to get the display name +if opening the display failed. + - Many minor bugs relating to OS/2 and Win32 were fixed. + - On Unix and DV/X platforms, the install script didn't mkdir +$(gsdir), and didn't mkdir the intermediate directory for the man page. + - On BSD and UTek platforms, the declaration of memset in +memory_.h, and the definition in gsmisc.c, conflicted with the ANSI +declaration. + - One of the SPARC compilers compiled the intersection computation +in arc_either (gspath.c) incorrectly. + - The temporary file names created under OS/2 could exceed the 8.3 +length limit. + +</pre><h3><a name="V2.9.5b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - The test files for the IJG library had been damaged by EOL +conversion. + - The garbage collector didn't mark some of the most recently +created names. + - The interpreter would sometimes report a typecheck instead of a +stackunderflow. + - If aload didn't have enough room on the stack, it would report a +rangecheck rather than a stackoverflow. + - zcontext wouldn't compile, because it hadn't been updated to the +new GC interfaces. + - The definition of private_st_stream_proc_state in ifilter.h ended +with a semicolon, which upset some compilers. + - load didn't check to make sure that the dictionaries it examined +had read access. + - cvrs didn't handle negative numbers in radix 2 or 3 properly. + - The allocator could become confused if it was asked to allocate a +large array. + - readline gave an ioerror rather than a rangecheck if it +overflowed the string. + - The allocator didn't free packed arrays properly. + - The allocator's check for LIFO freeing of arrays was off by 1, so +it never succeeded. + - The undercolor removal and black generation procedures weren't +initialized properly. + - If the interpreter couldn't find gs_init.ps, it returned a random +exit code. + - If an operator expected a procedure and didn't get one, it +sometimes gave an invalidaccess rather than a typecheck. + - Unix file enumeration often did the wrong thing if there were +directories in the pattern. + - The ASCIIHexDecode filter read an extra character after the +terminating >. + - scalefont didn't fill in ScaleMatrix properly. + - The CCITTFaxEncode filter crashed if the width of the page wasn't +a multiple of 8 bits. + - The error printing code used .languagelevel, which wasn't defined +in Level 1 configurations. + - setpagedevice didn't pop its argument. + - Definitions in statusdict didn't change according to the current +language level. + - Separation color spaces didn't allow strings as color space names. + - Due to a bug in chunk_locate_ptr, the garbage collector sometimes +decided incorrectly that a pointer was pointing outside collectable space. + - (Many other garbage collector bugs were fixed.) + +Implements additional Level 2 features: + - Garbage collection for strings. + - Expandable operand and dictionary stacks, and the ability to set + the maximum size of these stacks. + - Additional user and system parameters. The following are dummies: + AccurateScreens, JobName, JobTimeout, WaitTimeout. + - Procedure-based filters usable with cvx/exec and token. + - Separation color spaces (always using the alternate space). + (These were theoretically implemented in version 2.6, but they were + never tested and were actually missing most of the implementation.) + - VMThreshold and VMReclaim for invoking GC automatically. + +Adds a hook in iscan.c for parsing DSC comments. + +Adds encoding and decoding filters for the BCP and TBCP protocols. These +are not fully implemented yet: + - The interrupt and status request characters are ignored on input, + and never generated on output; + - The TBCP encoder doesn't emit the start-of-protocol string; + - The TBCP decoder doesn't recognize the end-of-protocol string. + +Factors out Type 1 font capability as a separate feature. + +Changes the names of some files: + packed.h to ipacked.h; + bnum.h to ibnum.h. + +Changes the name of the value.index member of a ref to value.boolval. +(Internal change only.) + +</pre><h3><a name="V2.9.5b_Library"></a>Library</h3><pre> +Fixes bugs: + - The definition of RELOC_PTRS_BEGIN in gsstruct.h wouldn't compile +properly with non-ANSI compilers. + - The JPEG library wouldn't compile properly with non-ANSI compilers. +* - The platform font machinery gave up too easily in some cases. + - CMYK devices needing halftoning converted the CMYK color to RGB. + - The debugging code in arc_add (gspath.c) didn't print the output +values correctly. + +Factors out Type 1 font capability as a separate feature. + +</pre> + +<h2><a name="Version2.9.4b"></a>Version 2.9.4-beta (2/19/94)</h2> + +<h3><a name="V2.9.4b_Procedures"></a>Procedures</h3> + +<pre> +Changes Ghostscript's path searching algorithm so that it does not +automatically look in the current directory first. (The former algorithm +was more MS-DOS-like; the new one is more Unix-like.) If you want to +include the current directory, you must include '.' in the search path. +THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. + +Adds two new resource types for genconf.c: + - -header filexxx.h adds #include "filexxx.h" to gconfig.h. + - -libpath dir adds dir to the list of library search paths. + +</pre><h3><a name="V2.9.4b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - impath.ps (used by bdftops) computed the starting X coordinate +incorrectly, typically causing characters to be displaced slightly to the +right. + - pstoppm.ps didn't handle local and global VM properly. + +Adds a ps2ai.ps utility, contributed by a user, for converting arbitrary +PostScript files into a form compatible with Adobe Illustrator. + +</pre><h3><a name="V2.9.4b_Drivers"></a>Drivers</h3><pre> + +Adds new drivers: + - A user-contributed driver for Imagen Impress laser printers. + - A user-contributed driver for the DEC LA75plus printer. + +</pre><h3><a name="V2.9.4b_Platforms"></a>Platforms</h3><pre> + +Under OS/2, adds the ability to keep Ghostscript in memory for a +specified number of minutes. + +Adds support for Win32 and Win32s. + +Changes the MS Windows platform font interface so that it does not attempt +to render fonts at sizes smaller than 6 pixels. Changes the X Windows +interface, which already did this for 4-point and smaller fonts, to also +use a lower limit of 6 pixels. Also changes the X Windows platform font +machinery so it does not render fonts at sizes larger than 36 pixels: at +large sizes, Ghostscript does a perfectly good job, and some X font servers +rasterize the entire font and lock up the entire window system while doing +so. + +</pre><h3><a name="V2.9.4b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - currentdash always returned a new array of reals, rather than the +actual argument of setdash. + - Strings in binary object sequences read in as integers. + - Because of a bug in chunk_locate_ptr, some large objects didn't +get freed properly. + - If an error occurred while processing an image, Ghostscript would +attempt to free random blocks of storage. + - Input filters discarded trailing data, rather than filling it out +with zeros. (This is now fixed for ASCIIHexDecode and ASCII85Decode; it's +not clear what other filters it should affect.) + - The ASCII85Encode filter produced garbage output for the final +1-4 bytes before EOD. +* - The TIFF output driver produced incorrect output for the second +and subsequent pages if the output was being produced on multiple files. +* - The default handleerror did a 'stop', which was not correct. + - gpcheck.h converted all positive return codes to 0 if interrupt +checking was enabled. + - Images with multiple data sources didn't work. + - Images with 12-bit sample values didn't work. + - Images with a file as the data source read additional data beyond +what was required. + - 2 vmreclaim worked (pretty much), but 1 vmreclaim didn't. + - If %lineedit was opened multiple times, characters from later +openings overwrote characters from earlier ones. + - token returned garbage for the "remaining string" result when +reading from a string, if it actually read all of the string. (New bug in +2.9.2, probably.) + +Implements additional Level 2 features: + - DCTEncode and DCTDecode filters. + - Filters with procedures as the data source or target. + (Except for token and cvx/exec.) + - Garbage collection for names. + +Changes the error printout so that strings are always truncated at 200 +characters. + +For Level 2 systems, changes the initial setting of the object format +parameter from 0 to an appropriate non-zero value. + +* Changes the .quit operator so that it takes two operands, an error object +and an error code; if the latter is negative, the interpreter returns this +as the error code, rather than e_Quit. + +Makes StandardEncoding and ISOLatin1Encoding arrays, rather than packed +arrays, on large-memory systems, for compatibility with certain test +suites. Changes .registerencoding to accept arrays as well as packed +arrays. + +</pre><h3><a name="V2.9.4b_Library"></a>Library</h3><pre> +Fixes bugs: + - Due to an error in cie_mult3, CIE-based colors were badly +mis-mapped. +* - Very narrow (but not empty) rectangles would disappear. +* - Small halftone cells could smash the next higher entry in the +halftone cache. + - The orientation algorithm in gxstroke.c still interchanged +clockwise and counter-clockwise coordinate systems (after having been +"fixed" at least 3 times). + - Stroking 1-pixel-wide lines shortened them, instead of +lengthening them, if non-butt caps were requested. + +Refactors mem_mapped8_copy_mono because of limitations in the bcc32 +compiler. + +</pre> + +<h2><a name="Version2.9.3b"></a>Version 2.9.3-beta (1/19/94)</h2> + +<p>This version was created for evaluation purposes for a few users who +needed Level 2 capability; it was never released to anyone else, even +beta testers. + +<h3><a name="V2.9.3b_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The description of psview and xpsview was incorrect. + +</pre><h3><a name="V2.9.3b_Procedures"></a>Procedures</h3><pre> +Changes the installation directories for Unix and similar systems to put +Ghostscript data in $(datadir)/ghostscript/gs-NN.NN.NN rather than directly +in $(datadir)/ghostscript. (Fonts still go in $(datadir)/ghostscript/fonts.) + +</pre><h3><a name="V2.9.3b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - Some spaces were incorrectly replaced with tabs in the help +message in the 3B1 display driver. + - The BMP driver wrote a spurious scan line at the beginning +of its output. + - The monochrome PCX driver had the two palette elements +interchanged. + +Adds new drivers: + - A user-contributed driver for the Xerox XES printer format. This +has a FSF copyright. + - A user-contributed driver for the Epson AP3250 printer. (This is +the same as the Stylus 800, with slightly different margins.) + - A user-contributed driver for the DEC LA70 printer with some +algorithms for improving text at low resolutions. This has a FSF +copyright. + - A user-contributed driver for an intermediate-resolution mode +for 9-pin "Epson-compatible" printers. + +Changes the name of the Stylus 800 driver from escp2 to st800. + +Adds a compile-time flag to the Epson driver to cope with Panasonic 9-pin +printers, which sometimes have trouble mixing graphics and tabs. + +</pre><h3><a name="V2.9.3b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - The MS Windows driver (gp_mswin.c) referred to iodev.h rather +than gxiodev.h. + - On Unix System V platforms, gp_unifs.c and gdevpipe.c were +incorrectly omitted from the link list. + - (Some?) System V platforms don't have the S_ISDIR macro, +requiring a change in stat_.h. + - The Unix `install' target didn't install gs_std_e.ps and +gs_iso_e.ps. + - No MODULES.LIS file was provided for VMS. + +Adds Desqview/X makefiles that actually work. + +Documents the set of H-P-supplied patches needed to make H-P's +compilers process Ghostscript. + +Changes the MS Windows driver so that if the user presses the Enter key +while the image window has the focus, the text window will be brought to +the top and made the active window. This is useful when viewing a +multi-page document with Ghostscript. + +</pre> +<h3><a name="V2.9.3b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - The definition of public_st_client_color() in gxccolor.h +included an extraneous semicolon. + - The definition of private_st_AXD_state() in sfilter.h included an +extraneous semicolon. + - saxx.c didn't include sfilter.h, which it needed for the +definition of private_st_AXD_state(). + - ialloc_struct failed to create a separate chunk if the structure +was very large. + - setcolorspace didn't allocate the colorspace object in the same +VM space as the graphics state, causing problems when the colorspace was +freed. + - In rare circumstances, currentfile could return an empty array +rather than a file. + - Dictionary keys were always allocated in global VM. + - If NOPLATFONTS was true, definefont didn't check whether the +dictionary was read-only before trying to insert an ExactSize key. + - startjob could get an invalidaccess error, because serverdict was +allocated in global VM. + - Using definefont with an already registered font created a +circular list structure. + - If a PostScript procedure appeared as a CharString in a Type 1 +font, it was always called with the character name, never the character +code. + - The SubFileDecode filter didn't work with a non-empty EOD string +(went into an endless loop). (Probably a new bug in 2.8.) + - save/restore didn't properly restore the maxlength of a +dictionary, causing data to get smashed at random. (New bug in 2.9.) + - save didn't mark objects as old, so a nested restore had no +effect. (New bug in 2.9.2.) + - After returning from an OtherSubrs callback, op_type1_free +freed the saved interpreter state incorrectly. (New bug in 2.7.) + - Level 1 configurations didn't work because .makeoperator gave an +invalidaccess error. (New bug in 2.9.2.) + - ASCII85 string literals didn't work. (Probably a new bug in 2.8.) + - If the current global/local allocation mode was different at the +end of a file than at the beginning, an addressing fault could occur +(gs_unregister_root in gs_run_string). (New bug in 2.9.2.) + - After a setfileposition on a file open for reading, +fileposition would return an incorrect value, even though the stream +was actually repositioned properly. + +Brings the dictionary unpacking code for the DCT filters into line with +Adobe Technical Note 5116, which describes the Picky parameter for +DCTDecode and the NoMarker, Resync, Blend, Picky, and Relax parameters for +DCTEncode. + +Changes the .quit operator so that if given a negative argument, the +interpreter returns this as the error code, rather than e_Quit. + +Changes the Ghostscript integer version number from 100P+10S+T to +10000P+100S+T. + +Changes the default halftone screen for high-resolution devices, both +black-and-white and color. + +</pre><h3><a name="V2.9.3b_Library"></a>Library</h3><pre> +Fixes bugs: + - The software floating multiply code used with USE_FPU=-1 only +worked on little-endian platforms. + - Specifying a left side bearing to .type1addpath produced an +inappropriate offset. + +</pre> + +<h2><a name="Version2.9.2b"></a>Version 2.9.2-beta (1/2/94)</h2> + +<p>This version was distributed only to beta testers. It adds a garbage +collector and full local and global VM support. It is the first version +that sets languagelevel = 2, i.e., claims to be a Level 2 implementation. + +<h3><a name="V2.9.2b_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - make.doc still referred to use_* variables in gdevx.c, and +use.doc didn't explain the use* X resources. + +Notes that -Olimit=1000 is needed to compile Ghostscript on AXP systems +under OSF/1 1.3. + +</pre> + +<h3><a name="V2.9.2b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - viewgif.ps did not work with interlaced images. + - font2c.ps omitted gsmemory.h from the #include list in compiled +fonts. + +</pre><h3><a name="V2.9.2b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The MS Windows driver hadn't been updated to work with the +new additions to the gx_device structure. + - The BMP file driver wrote one scan line too many. + - The cdj driver omitted an important cast to int in the error +diffusion code (FSdither macro). + +Changes the SuperVGA drivers to recognize erasepage and reset the +color table, like the X driver. + +Adds some fragmentary code to begin implementing the PostScript fax +extensions. + +</pre><h3><a name="V2.9.2b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - The procedure initializers for the MS Windows console I/O +were missing the new reset element. + - The makefile entry in bcwin.mak used -fdev rather than -iodev. + - The Borland C++ makefiles exceeded MS-DOS's line length limit if +the compiler files were in the standard Borland directory (BORLANDC). + - Some procedures weren't declared with prototypes in gp_vms.c. + - Some declarations had to be reordered to pacify the VAX compiler. + - Under MS Windows, Ghostscript didn't automatically de-iconify the +text window to display messages on an error exit. + - The Unix makefile rule for gconfig_.h used echogs rather than +./echogs. + - The Microsoft C makefile referred to an obsolete file gs.tr. + - gp_unifs.c used strpbrk and strrchr, which some systems lack. + +Updates the OS/2 code and documentation for compatibility with the current +Ghostscript version. + +</pre><h3><a name="V2.9.2b_Fonts"></a>Fonts</h3><pre> +Fixes bugs: + - The X11 .pfa fonts replaced their .gsf requirements in the +fontmap, but not distributed with the previous (beta) release. + +Adds fontmaps appropriate for use with DEC Ultrix and OSF/1 systems. + +</pre><h3><a name="V2.9.2b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - 4-value entries in the Metrics dictionary were interpreted with +the width and side bearing interchanged. + - Objects large enough to require their own chunk were not freed +properly. + - The GS_FONTPATH scanner didn't deal with the possibility that +opening a file might fail. + - The interrupt and timeout errors incorrectly pushed an error +object on the operand stack. + - imagemask gave an error if it was invoked with a dictionary +argument with a current color space with more than 1 parameter. + - definefont insisted that a new font not have a FID entry. + - Some places didn't cast char to byte when needed. + - An extra element was left on the stack when substituting the +default font for a font whose file couldn't be found. + - The CCITTFaxDecode filter didn't allow the dictionary to be +omitted. (The Adobe documentation doesn't allow this, but Adobe +implementations do.) + - When the input came from a pipe (`-') switch, opening a filter on +currentfile that required more than 1 input byte to make progress would +cause Ghostscript to hang (in sreadbuf). + - The interpreter didn't call gs_set_lib_paths before executing a +compiled-in initialization file. + - A stream could be closed more than once. (New bug in 2.8.) + - The LZW decoder produced incorrect output if a code string was +too long to fit into a single output buffer. (New bug as of 2.8.) + +Implements a special check in def to allow construction of systemdict, +which is stored in global VM but references dictionaries in local VM. + +Implements additional Level 2 features: + - %null% and %ram% IODevices. + - startjob, exitserver. + - Local and global VM (finish). + - Garbage collection (for everything except names and strings). + +Moves the procedures for selecting paper size from systemdict to userdict. + +Sets languagelevel to 2 in Level 2 mode, since essentially all of +Level 2 is now implemented. + +Factors out the Level 1 extended color facilities (CMYK color and +colorimage) as a separate configuration feature. + +Adds some preliminary code to begin implementing the Adobe BCP and TBCP +communication protocols. + +Changes the implementation of save and restore so that the bookkeeping +structures are allocated in the new area, not the old. (This is an +internal change not visible at the PostScript level.) + +</pre><h3><a name="V2.9.2b_Library"></a>Library</h3><pre> +Fixes bugs: + - gdevprn used some preprocessor macros in formal argument +lists that ansi2knr couldn't handle. + - pick_cell_size called gs_distance_transform with a 0 argument +that non-ANSI compilers didn't automatically promote to floating point. + - gs_screen_init called hypot with integer arguments that +non-ANSI compilers didn't automatically promote to floating point. + - Some places didn't cast char to byte when needed. + - The vx/vy origin adjustment for WMode=1 wasn't implemented. + - The pattern cache wasn't initialized properly. + - Composite fonts didn't properly decode strings that started with +an escape sequence, which have a special (undocumented) decoding rule, and +also didn't properly decode strings with multiple consecutive escape +sequences. + +Factors out the Level 1 extended color facilities (CMYK color and +colorimage) as a separate configuration feature. + +</pre> + +<h2><a name="Version2.9.1b"></a>Version 2.9.1-beta (12/7/93)</h2> + +<p>This version was distributed only to beta testers. + +<h3><a name="V2.9.1b_Utilities"></a>Utilities</h3><pre> +Adds a viewgif.ps utility to view GIF files. The current version does not +work with interlaced data, local color tables, or files containing more +than one image. + +</pre><h3><a name="V2.9.1b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - putinterval and copy didn't do the right thing if the source and +destination were aliases for overlapping sections of the same array or +string. + - The DCT filter stub didn't allow the dictionary to be omitted. +(The Adobe documentation doesn't allow this, but Adobe implementations +do.) + +Adds an optional dictionary argument to the LZWDecode filter, containing +InitialCodeLength, FirstBitLowOrder, BlockData, and EarlyChange entries. +Setting these parameters appropriately allows reading (non-interlaced) GIF +data directly. + +</pre><h3><a name="V2.9.1b_Library"></a>Library</h3><pre> +Fixes bugs: + - setdash produced inverted output if the pattern had an odd +number of elements and the offset O had the property that L <= O mod +2*L, where L was the sum of the pattern elements. + +</pre> + +<h2><a name="Version2.9b"></a>Version 2.9-beta (12/6/93)</h2> + +<p>Like 2.7, this version was created to satisfy a contractual +requirement, +and will never be distributed to anyone other than the other party to the +contract. + +<h3><a name="V2.9b_Documentation"></a>Documentation</h3><pre> +Notes that Ghostscript runs on IBM PCs and compatibles under DR DOS +6.0. + +Notes that Ghostscript will run on IBM PCs and compatibles with +Hercules display cards if you redirect text output to a file. + +Notes that the alternate DeskJet 500C driver (djet500c) does not work +on the 550C. + +Gives a list of system-specific directories where Type 1 fonts are +likely to be installed, as a suggested setting for GS_FONTPATH. + +</pre><h3><a name="V2.9b_Procedures"></a>Procedures</h3><pre> +Changes the distribution script so that it stores all text files in the +main source archive with Unix end-of-line conventions, but with DOS +end-of-line conventions in the MS-DOS-specific archive. + +Changes the MS-DOS, MS Windows, and OS/2 makefiles so that 486SX and 486DX +processors are different CPU_TYPEs. (The former, designated by +CPU_TYPE=485, does not include an on-chip FPU.) + +Adds a line to gs_init.ps which can be uncommented to select A4 as +the default paper size. + +Adds a definable CFLAGS macro to the makefiles, allowing -DA4 to +select A4 as the default paper size. + +Adds the H-P printer drivers to the standard Unix configurations. + +</pre><h3><a name="V2.9b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - If there were no unencoded characters, prfont.ps would get +an error. + +Changes ansi2knr to accept a wider range of function declaration syntax, +and to not depend on any Ghostscript header files. + +</pre><h3><a name="V2.9b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - Several drivers (DigiFax, Epson LQ-2550, NEC P6) didn't handle +A4 paper width. + - The IBM ProPrinter wasn't being initialized properly. + - The Epson driver didn't work properly with compilers that +insisted on 'char' being a signed type. + - The Epson driver ignored its end_string argument, producing +incorrect end-of-page behavior on some printers. + +Adds new drivers: + - User-contributed drivers for Bellcore MGR (a window manager most +commonly used with OS-9) devices. + - A user-contributed driver for the CIF file format. + - A user-contributed driver for the HP 2563B line printer. + +Changes the LaserJet 2p, 3, and 4 drivers so they set the initial position +to (0,0) rather than (0,0.25"). (I don't remember why it was the other +way.) + +Implements the PageCount property in all drivers, not just printer +drivers. + +Introduces a new gx_tile_bitmap type, and changes the tile_rectangle +device procedure to take it in place of gx_bitmap. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE. However, it only affects devices that +implement their own tile_rectangle procedures, of which there aren't very +many. + +</pre><h3><a name="V2.9b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - The VMS module lists referred to SDCTD and SDCTE instead of +SDCT. + - The Unix install script tried to install the non-existent file +readme.doc. + - Microsoft C does something bizarre with empty macro parameters, +which caused a problem with the gs_struct_type_... macros. + - The Unix platforms didn't automatically handle the presence +or absence of <dirent.h>. + - The DEC Alpha OSF/1 1.3 library lacks `const' in the prototype +for popen, which requires a workaround. + - The DEC Alpha OSF/1 1.3 X Windows library uses `private' as a +member name. + +Splits off gp_unifs.c, containing code common to "Unix-like" file systems. + +Adds a user-contributed OS-9 platform. + +</pre><h3><a name="V2.9b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - The currentfile cache wasn't updated properly if an executable +file appeared in the middle of a procedure. In particular, eexec-encoded +.PFB fonts often didn't work. + - There was an extraneous `goto top' in scfd.c. + - An integer constant overflowed in iname.c. + - -2147483648 (i.e., -1 << 31) was converted to a float. + - eexec didn't skip the first 4 characters correctly if they were +split across a buffer boundary. + - The font/matrix pair cache didn't properly free entries with only +an XUID that was being deallocated. + +Implements additional Level 2 features: + - Patterns, makepattern, setpattern. + - IODevice resource, setdevparams, currentdevparams. + - OutputDevice resource, setpagedevice, currentpagedevice. + (Partially implemented.) + +Adds a new type t_struct to handle miscellaneous types that are allocated +as objects and that the interpreter doesn't handle specially, and changes +condition, fontID, gstate, lock, and save types to use t_struct. (This is +an internal change, not visible at the language level.) + +Moves the maxlength of a dictionary to its own ref, eliminating the "size +of integer" hack. (This is an internal change, not visible at the +language level.) + +Adds the last OS error number to the error printout. + +Removes the obsolete framedevice operator. + +Implements resetfile (the only Level 1 operator not yet implemented!). + +Changes the name of the getdevice operator to .getdevice. + +</pre><h3><a name="V2.9b_Library"></a>Library</h3><pre> +Fixes bugs: + - A couple of necessary casts from char * to byte * were omitted. + - A Sun compiler required an extra cast to (void *) in the e1 +macro in clip_rect_enum_ptrs in gxcpath.c. + - The gx_dc_ procedures defined in gxdraw.c weren't marked as +'private'. + - The number of "on" pixels in a halftone cell sometimes varied by +1 from cell to cell. + - Mapping a gray level to CMYK didn't subtract it from 1 (to +produce the K component). +* - charpath took hints into account. + +Shuffles the order of some declarations to pacify the VMS C compiler. + +</pre> + +<hr> + +<h2><a name="Version2.8b"></a>Version 2.8-beta (11/10/93)</h2> + +<p>This version was distributed only to beta testers. It adds Type 0 +font +support. It also includes extensive redesign of streams (to eventually +support procedure streams) and device properties (to eventually support +get/setpagedevice and get/setdevparams). + +<h3><a name="V2.8b_Documentation"></a>Documentation</h3> + +<pre> +Notes the change in X11 foreground/background handling. + +Changes README so it no longer claims that Ghostscript works with X11R3. + +Notes (in devs.mak) that the cdjmono driver is the best one to use for the +DeskJet 510. + +</pre><h3><a name="V2.8b_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - echogs wasn't always invoked with ./ on Unix systems. + +Changes the file name unix-ansi.mak to unixansi.mak, so it can be created +on a MS-DOS system. + +Adds a new "feature", ccinit.dev, which compiles and links the +initialization files (gs_*.ps) into the executable, just as ccfonts.dev +compiles and links fonts. If ccinit and ccfonts are both selected, the +only external file needed at run time is Fontmap. Note that you must have +a working version of Ghostscript already in order to create a version that +uses the ccinit feature, just as for ccfonts. + +</pre><h3><a name="V2.8b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - the ps2image utility didn't put a %! on the first line of the +output. + +</pre><h3><a name="V2.8b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The Hercules display driver didn't include definitions for +outport2 and PAGE_HEIGHT_INCHES, which it uses. + - The BGI driver didn't call setactivepage or setvisualpage, +which it needs to do in general. + - The Apple DMP driver declared dmp_print_page rather than +appledmp_print_page, causing a compilation error. + +Changes the X11 driver so that it doesn't use the default foreground and +background colors: you must set foreground and background explicitly for +Ghostscript if you want them to be other than black and white +respectively. + +Adds new user-contributed drivers for: + - The StarJet 48 inkjet printer; + - The GNU/Linux VGALIB display interface. + - OS/2 Presentation Manager. + +Changes the margins of the Epson driver to 0.2, 0.0, 0.0, 0.0, which +more accurately reflect the printer's capabilities. + +Changes the get_props and put_props device procedures to take property +list "objects" with a procedural interface, rather than a data structure +interface. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. It affects all +get_props and put_props procedures. Fortunately, there were only a few +devices that implemented their own get_props and put_props procedures (the +H-P color printers, and the three window systems -- X Windows, MS Windows, +and OS/2 PM). + +</pre><h3><a name="V2.8b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - The meaning of the -p switch for the Watcom compile-and-link +program was changed between Watcom C/386 versions 8.5 and 9.5, causing the +make process to malfunction. + - The SCFTAB and SCFDTAB modules were omitted from the VMS link +list. + +Adds user-contributed code for OS/2. + +Removes the assumption that an 80486 CPU implies the presence of hardware +floating point, since the 486SX and Cyrix 486SLC don't have it. + +</pre><h3><a name="V2.8b_Fonts"></a>Fonts</h3><pre> +Fixes bugs: +* - The GS_FONTPATH scanner didn't recognize .PFB fonts beginning +with %!PS-AdobeFont. +* - The GS_FONTPATH scanner often didn't recognize .PFB fonts at all. + - Type 1 fonts always set the line join, line cap, and miter limit +to known values, rather than using the current values. (Using the current +values doesn't make much sense, but it's apparently what the Adobe +implementations do.) + - DISKFONTS didn't work, because of the change in the Ghostscript +fonts to do a systemdict begin/end (in version 2.7.1). + +</pre><h3><a name="V2.8b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - == didn't produce exactly the same output as the Adobe +interpreters. (Some automated debugging and testing programs care.) + - The CCITTFaxEncode filter could get caught in an infinite loop, +because it failed to mask a byte datum when scanning for runs of black +pixels. + - The write operator gave an error for values outside the range 0 +to 255, rather than just using the low-order 8 bits. + - Some applications call a statusdict procedure named +setresolution without checking first whether it is present; Ghostscript +didn't provide one. + - Reading from a closed stream caused an error instead of +returning EOF. + - Input streams didn't close automatically at EOF. + - findfont was defined as an operator, not a procedure. + - closefile on a closed file gave an error. (It isn't obvious +that the Adobe documentation specifies that it shouldn't, but that's what +Adobe says they do.) + - The LZWDecode filter didn't handle codes representing strings +longer than the buffer size correctly. + - The LZWDecode filter only allowed 4095 codes to be used, rather +than 4096. + - The rand operator produced an infinite string of zeros if +given 0 or 0x7fffffff as the seed. + - When a CDevProc procedure was called, there was an extra +copy of the character name on the operand stack below the operands of +CDevProc. + +Replaces all stream implementations with new ones designed to allow +interruption at arbitrary times. ****** The 2-D case of CCITTFaxEncode +hasn't been converted (but it probably didn't work before, either). + +Implements additional Level 2 features: + - Type 0 (composite) fonts. + +Adds an eexecEncode filter. + +Implements setcolorscreen, which was accidentally omitted from 2.7. + +</pre><h3><a name="V2.8b_Library"></a>Library</h3><pre> +Fixes bugs: +* - In colorimage, if the color space of the image was different +from the current color space, and the first data values on a scan line +were zeros, the wrong color could result. + - The new flatness testing algorithm could overflow, producing +straight lines or obvious polygons instead of curves. + - Images could fail to display pixels after the first non-blank +pixel on a line if halftoned color was required. (This bug was probably +introduced in 2.7.) + - Interpolation between transfer map entries didn't work, because +of a rounding/truncation bug in frac2bits (bug introduced in 2.7.1.) + - cshow did an extra grestore at the end. + +* Implements a hack to slightly displace 1-bit-wide or -high images. This +is necessary to work around a bug in TeX (or dvips?), which uses such +images to draw horizontal and vertical lines without positioning them to +ensure that they cover device pixel centers. + +Adds support for composite fonts (no new client procedures). + +</pre> + +<hr> + +<h2><a name="Version2.7.2b"></a>Version 2.7.2-beta (10/11/93)</h2> + +<p>This version was distributed only to alpha testers. + +<h3><a name="V2.7.2b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - prfont.ps didn't print unencoded characters. + +Improves mergeini.ps to remove embedded comments. + +</pre><h3><a name="V2.7.2b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - An error occurring within the scope of an internal .stopped +didn't pop the command and error name off the stack. +* - The = and == procedures weren't re-entrant. + +* Adds a .writecvs operator that does a cvs to an internal string followed +by a writestring. + +</pre><h3><a name="V2.7.2b_Library"></a>Library</h3><pre> +Fixes bugs: + - grestore freed the path and the clip path in an order that +was likely to lead to memory sandbars. + - moveto + closepath didn't actually close the path. + - moveto + reversepath produced an empty path (no moveto). + - moveto + closepath + reversepath produced an extra lineto. + - reversepath didn't set the current point to the end (i.e., the +former beginning) of the last subpath. + +Adds a "planar" memory device. + +</pre> + +<h2><a name="Version2.7.1b"></a>Version 2.7.1-beta (10/4/93, not distributed to the public)</h2> + +<p>Like 2.7, this version was created to satisfy a contractual +requirement, +and will never be distributed to anyone other than the other party to the +contract. + +<h3><a name="V2.7.1b_Documentation"></a>Documentation</h3><pre> +Documents the GS_OPTIONS environment variable. + +Adds a summary of all environment variables to the documentation +(use.doc). + +Documents the existence of a third free viewer built on Ghostscript. + +</pre><h3><a name="V2.7.1b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - wrfont didn't wrap a systemdict begin / end around the body of +the font. + - wrfont wrote out the Symbol and ZapfDingbats encodings in a way +that only worked if the encoding was known by name. + +Changes bdftops to include an XUID if desired. + +Changes bdftops so that it uses 'show' for unknown ligatures, rather than +executing the characters as subroutines; this makes such ligatures work +properly with xfonts. + +</pre><h3><a name="V2.7.1b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The PCL drivers sent a printer reset (<ESC>E) at the beginning +of every page, instead of only before the first page. + - The PCX driver didn't round up the scan line width in the +header, even though it produced scan lines with the correct (rounded) +number of bytes. + +Adds a new map_rgb_alpha_color procedure. This is a backward-compatible +change; this procedure defaults to calling map_rgb_color. + +</pre><h3><a name="V2.7.1b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - On Unix platforms, the value of the TEMP environment variable +had to end with a '/'. + - On MS-DOS systems, printer output to devices other than PRN +(specifically, LPTn) didn't put the device into binary mode. + +Adds FPU_TYPE to the Unix makefiles, with a default value of 1. + +Removes the mention of Xmu linking problems on the SunOS platform, +since the problem no longer exists. + +Changes the order of X Windows libraries from Xt X11 Xext to Xt Xext X11. +This makes the OSF/1 linker happier. + +</pre><h3><a name="V2.7.1b_Fonts"></a>Fonts</h3><pre> +Fixes bugs: + - All the fonts originated by Aladdin, and the shareware fonts, +had UniqueIDs in the 4xxxxxx range, which is only supposed to be used for +limited-distribution fonts. +* - When Ghostscript loaded a font, it pushed a scratch dictionary +on the dictionary stack, rather than userdict. (Note that this fix also +requires fixing the fonts to include a protective systemdict begin / +end; see below.) +* - When loading a font failed, Ghostscript didn't check the font +name against the default font name properly. + - Ghostscript's own fonts didn't include a systemdict begin / +end to guard against redefinition of names used in the reading +procedures (e.g., index). +* - When Ghostscript scanned a .PFB font to get the FontName, it +didn't skip over the 6-byte header, which could cause confusion or a +syntaxerror. + - Loading a .PFB font that left extra information on the +operand stack didn't work. + +Changes the ZapfDingbats font to use DingbatsEncoding rather than include +a copy of the encoding in itself, if DingbatsEncoding is known. Changes +the Symbol font similarly. + +Removes eexec encryption from the 4 URW fonts, so they will work with +DISKFONTS. + +Adds shareware Hiragana and Katakana fonts (Calligraphic-Hiragana and +Calligraphic-Katakana, by Kevin Hartig). + +Adds GS on the end of the family names of all of Aladdin's own converted +fonts. + +Replaces many of the Hershey fonts with new ones (mostly Type 1) created +by Thomas Wolff, who added accents, accented characters, and other +non-alphabetics. These too now have proper UniqueIDs. + +</pre><h3><a name="V2.7.1b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: +* - imagemask interpreted the Decode array incorrectly (inverted). + - Running out of memory when constructing a path incorrectly +signalled a limitcheck rather than a VMerror. + - restore didn't purge uncached scaled fonts properly. + +Adds alpha (opacity) to the graphics state, and setalpha and +currentalpha operators. + +Redefines erasepage in terms of a new .fillpage operator that fills +the current page with the current color and then does a sync_output. + +Redefines setdevice and putdeviceprops in terms of new .setdevice and +.putdeviceprops operators that return a boolean indicating whether the +page needs to be erased. With this change, operators that erase the page +always call erasepage at the interpreter level rather than calling +gs_erasepage directly. + +</pre><h3><a name="V2.7.1b_Library"></a>Library</h3><pre> +Fixes bugs: + - The null device allowed its size to be reset. + - clippath didn't establish a current point if the clipping +path was empty. +* - The Type 1 font interpreter (gs_type1_interpret) flattened +curves even if it was being invoked for charpath. + - Colored halftones usually didn't come out with the correct +phase, and had several other problems. + - A show or charpath within a BuildChar procedure didn't work. + - Accented characters composed with seac used the base +character width instead of the composed character width. (The Adobe +documentation says these must be the same, but some commercial fonts +don't obey this.) + - setcurrentpoint in the accent of a character composed with +seac didn't take the accent's displacement into account. + +Adds an alpha (coverage) value to the graphics state, and +gs_setalpha/currentalpha procedures. Currently Ghostscript just passes +the alpha value to the driver; it doesn't attempt to emulate alpha +handling if the driver doesn't support it. + +Redefines gs_erasepage to call gs_fillpage. + +Bypasses the fill code if the clipping box is empty. This makes a big +difference for stringwidth, and doesn't hurt anything else. + +Changes frac_1 from 0x7fff to 0x7ff8. This allows exact representation of +practically all useful fractions, since this number (32760) is +2*2*2*3*3*5*7*13. + +Changes float to double in several matrix routines for better accuracy. + +Adds new device properties to implement the deviceinfo operator: +Colors, GrayValues, RedValues, GreenValues, BlueValues, ColorValues. +Also adds HWBitsPerPixel and HWColorMap. + +Changes the sorting algorithm for halftones to use qsort instead of +special code. + +Changes the Type 1 interpreter so that it uses the current point, rather +than (0,0), as the character origin. + +</pre> + +<h2><a name="Version2.7b"></a>Version 2.7-beta (9/20/93, not distributed to the public)</h2> + +<p>This is the first of a series of beta-only versions planned for +release +between 2.6.n and 3.0. This version, in particular, was created to +satisfy a contractual requirement, and will never be distributed to anyone +other than the other party to the contract. + +<h3><a name="V2.7b_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The "HP XLFD extensions" to X11R5 are not specific to H-P +platforms. + - The configuration generation script used rm rather than rm -f. + - gs.1 was installed in $(docdir) rather than $(mandir); +$(mandir) wasn't defined. + - ansi2knr.1 was installed in $(docdir), which was +inappropriate because ansi2knr itself wasn't installed anywhere. + +Moves documentation for versions 2.4.x and 2.5.x to history.doc. + +Moves the documentation on how to add devices to the configuration +from devs.mak to make.doc. + +Changes the name of readme.doc to current.doc, since the presence of +two "readme" files was confusing to users. + +Documents how to use the Microsoft Windows PostScript printer driver +to convert TrueType fonts to Type 1 fonts embedded in the document. + +Corrects several errors in the documentation of the get_bits driver +procedure. + +Documents the fact that X11R3 is no longer supported. + +Removes the last references to "Ghostscript" from the comments in the +gs_*.ps files. The only remaining reference, other than the boilerplate +comments at the beginning of each file, is in the message at the end of +gs_init.ps. + +Documents the use of WMAKEL rather than WMAKE with the Watcom compiler. + +</pre><h3><a name="V2.7b_Procedures"></a>Procedures</h3><pre> +Fixes bugs: +* - The Unix install script used gs rather than $(GS) as the name of +the executable. +* - The Unix install script didn't copy gs_dbt_e.ps to $(gsdatadir). + - genconf.c used ps2 as a variable name; ps2 is a predefined +preprocessor symbol in the VSC compiler used by IBM. + - @-expansion didn't interact properly with -- and -+. + - The Unix install script didn't copy COPYING to $(docdir), +and copied README to $(gsdatadir) rather than $(docdir). + - ps2ascii used /bin/sh -f, which is an incorrect flag. + +Removes all uses and mentions of USG (a now-obsolete GNU convention) +as a synonym for SYSV. + +Removes filter.dev and dps.dev from FEATURE_DEVS if level2.dev is +included, since they don't add anything beyond level2.dev. + +Changes the ccgs script to explictly remove the old .o file before +doing the mv, for the benefit of people who have changed mv to prompt +before overwriting. Changes the configuration script to use rm -f +for the same reason. + +Changes the -Z switch so an empty list of options does nothing, rather +than turning on all options. + +Adds a -@ switch which is like -- and -+ except that it does +@-expansion of arguments. + +Changes genconf so it takes patterns from the command line that describe +how to write the linker control files, rather than having the patterns +built in. + +Changes -d and -D so that if no value is supplied, the default is +true rather than null. + +</pre><h3><a name="V2.7b_Utilities"></a>Utilities</h3><pre> +Fixes bugs: +* - The ps2ascii script still referenced ps2ascii.ps under its +old name gs_2asc.ps. +* - ps2image.ps had a 'pop' missing in the written-out +definition of 'max' in the boilerplate code it put at the beginning +of compressed files. +* - ps2image.ps got a typecheck if a scan line had no repeated +data in it anywhere. + - wrfont.ps didn't handle CharStrings or Subrs that weren't +strings. + - mergeini.ps produced an init file that incorrectly +attempted to load the Symbol and Dingbats encodings dynamically. + +Removes the gsview.bat file, since it was confusingly named and not +generally useful. + +Changes bdftops back to using encrypted CharStrings, for compatibility +with Adobe interpreters, but also changes lenIV to 0, to save a little +more space. + +Changes the traceop utility so it makes traced operators appear to be +operators, and so it will replace a definition in systemdict if explicitly +requested to do so and systemdict is writable. + +Adds a printafm utility for printing the metrics of fonts in AFM format. + +</pre><h3><a name="V2.7b_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The cdj driver was missing a few type casts that were needed to +satisfy pedantic compilers. + - For banded devices, many of the non-displaying target routines +were getting called with the original device as the first argument, not +the target device. (This didn't make any difference in practice, because +gdev_prn_open explicitly copied the non-rendering procedures back into the +procedure vector.) +* - The X driver didn't catch and discard bogus errors on +XFreeColors, which faulty servers generate. +* - The X driver gave up on color allocation too easily. +* - The X driver dynamic color table size could become negative. +* - x_lookup_font could return platform fonts of very small sizes, +which have very inaccurate metrics. +* - The ESCP/2 driver was incorrectly named gdevescp2 in devs.mak. + - The Apple DMP driver used #if 0 / #endif instead of comment +brackets, and was incorrectly named "dmp" instead of "appledmp" in +the source code. +* - The X driver didn't free dynamic colors at the start of each page. +* - The X driver didn't bind foreground/background defaults tightly. +* - The X driver didn't check for GHOSTVIEW_COLORS properly. +* - The X driver freed too many colors if an allocation request failed. +* - The X driver didn't check return value of gs_malloc for being NULL. +* - The DeskJet/LaserJet driver used an incorrect command for +end-of-page. +* - The DeskJet/LaserJet driver incorrectly reset the printer at the +beginning of every page. +* - The PCX driver put an old version number in the header, and +didn't pad scan lines to an even number of bytes. + - The BMP driver used a variable named `quad', which is a +reserved word on some platforms. +* - The TIFF driver didn't handle A4 or B4 size paper correctly. +* - The X11 driver incorrectly demanded the Xmu library, which was +not needed and which caused link errors on some versions of SunOS. +* - X11 font matching scheme was too loose, causing overlaps and +other problems. +* - X11 Font Extensions (rotated and mirrored fonts) did not work +properly on NCD terminals. +* - When freeing the rgb cube/gray ramp, the parameters to gs_free() +did not exactly match the parameters to gs_malloc(). +* - Ghostscript failed to warn the user when it could not allocate +the original color cube/gray ramp and dropped back to a smaller +cube/ramp, or from color to mono. +* - x_release could cause Ghostscript to fail if a font was freed +after the device was closed. + - The X driver continued to ask the server for colors even after a +request failed, causing colored images to display very slowly. + +* Adds a pcxgray driver to provide 8-bit gray scale output in PCX format. + +Adds a pcx24b driver to provide 24-bit RGB color PCX output. + +* Adds a LaserJet 4 driver. + +Adds a user-contributed driver for the DEC LA70 (very similar to the LA75). + +Substantially improves the performance of the PxM drivers by eliminating +an unnecessary copying step and by writing each scan line with a single +fwrite when possible. + +Moves the gray-scale and 24-bit RGB device color mapping routines to +gxcmap.c from gdevpcx.c and (nowhere). + +Allows window granularities smaller than 64K in the VESA driver. + +Changes the LaserJet margins again. + +</pre><h3><a name="V2.7b_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - Platforms where stat doesn't return a st_blocks value +computed the block count wrong. + - In gp_vms.c, the call on SYS$FILESCAN needed two uint *s +rather than a long * and a struct *. +* - The VMS script files referenced IBSCAN instead of ISCAN2, +and omitted GDEVXXF. +* - The UUENCODEd icons for the MS Windows platform were omitted +from the fileset. +* - On MS-DOS systems, filenameforall didn't interpret * alone +as a pattern matching all files. + +Adds wildcard matching capability to filenameforall under Unix. + +Removes gp_file_status from the platform interface, since all +platforms provide identical stat calls in the C library. + +Adds DesqView/X (using djgcc and go32) as a platform. + +Removes the S3 driver from the standard PC configurations. + +Adds documentation for compiling Ghostscript on the Intergraph Clipper. + +Updates the documentation to add a better list of X Windows font +names for the Sun platform. + +</pre><h3><a name="V2.7b_Fonts"></a>Fonts</h3><pre> + +Creates an external file (gs_dbt_e.ps) with the ZapfDingbats encoding +(actually in 2.6.1, but not documented there). + +Changes the names of the Cyrillic fonts to Shareware-Cyrillic-Regular +and Shareware-Cyrillic-Italic, keeping Cyrillic, Cyrillic-Regular, +and Cyrillic-Italic as aliases. + +* Removes the requirement that the FontName in the font file be the same +as the name in Fontmap. (This requirement led to the need for aliases, +and was extremely confusing to users.) + +* Adds a GS_FONTPATH environment variable containing a list of directories +that should be scanned automatically for fonts. + +* Gets rid of the Ugly font, and changes the default to the IBM Courier +font, which is freely distributable. + +</pre><h3><a name="V2.7b_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - cvs didn't check for stack underflow. +* - zht2.c didn't include alloc.h. +* - execstackoverflow cleared the e-stack instead of just +cutting it back. + - if and ifelse incorrectly reported typecheck instead of +stackunderflow. + - Copying a dictionary could alter some items even if a later +item causes an invalidaccess error because of an attempted store of a +local object into global VM. + - bitshift and cvrs assumed that longs occupied 32 bits. +* - exitserver didn't check the password, and always succeeded. + - Font loading didn't suppress all output messages if QUIET +was set. +* - The interpreter incorrectly pushed its exit procedure on +the e-stack if it was called again after an interrupt. +* - The interpreter didn't treat timeout like interrupt in +terms of re-executing the current operation. +* - `show' operators popped their operands before they were +sure they wouldn't be interrupted. +* - rotate with a matrix operand didn't check for multiples of +90 degrees. + - In the system name table, ge was misspelled eg, and +pathforall was misspelled pathfoall. +* - file_close_file attempted to free the buffer even if it was an +externally supplied string (specifically, the argument of gs_run_string). + - setprintername (in gs_statd.ps) set printername rather than +.printername. + +Implements additional Level 2 features: + - Indexed color space with lookup procedure. + - sethalftone, except for the transfer function override, + and currenthalftone. + +Implements OtherSubrs for indices greater than 3 (required for +MultiMaster fonts). + +Implements black generation and undercolor removal. + +Changes `store' from a C procedure to a PostScript procedure. + +Changes idiv back so it requires integer operands, per the Adobe +documentation but not per some old Adobe interpreters. + +* Adds many new paper sizes to gs_statd.ps. It now includes ISO a0-a10 +and b0-b10, and CAD sizes archA-archE. + +Implements `status' for non-%os% files. (This is currently a no-op, +but the framework is there.) + +Changes the error handler so it normally uses = rather than == to print +the operand stack, to avoid recursive errors. + +* Adds time slicing capability to the interpreter. + +Implements setcolorscreen/currentcolorscreen. + +</pre><h3><a name="V2.7b_Library"></a>Library</h3><pre> +Fixes bugs: +* - Rectangles with vertices specified in clockwise order were +drawn as 0-width lines. +* - The string matching function reported that 'abcdefg' +matched the pattern 'abcde'. +* - The bounding box of non-rectangular clipping paths was not +being marked as valid, so cached characters would simply get +discarded as being outside the bounding box. + - erasepage filled the page with the device's white color, +not with gray level 1 passed through the transfer function. +* - Colors with equal R/G/B or C/M/Y components were rendered +incorrectly if the 3 or 4 transfer functions were not all the same. +* - Because of a bug in rc_unshare, using CIE color would give +random errors (such as /invalidaccess in --for--). +* - setbbox didn't round the coordinates properly, which could +cause erroneous rangecheck errors with coordinates on the edge of the +box. +* - Color halftones "flipped over" at the 50% point, inverting +foreground and background. + - Quite a few places assumed that longs occupied 32 bits. +* - kshow passed an incorrect c1 value to the procedure. + - The debugging code in update_x_list in gxfill.c didn't take +into account the possibility that the active line at x_first might be +deleted. + - gx_image_cached_char called the xfont render_char procedure an +extra time if it failed with required=0 and succeeded with required=1. +(This was just a small inefficiency, not a logic bug.) + - Non-rectangular clipping regions weren't computed correctly, +because accum_add_rect didn't handle overlapping rectangles. + - Drivers didn't report file system errors (such as file system +full) as an ioerror. +* - setdevice didn't reset the charpath and setcachedevice flags. + - The Zortech compiler produced wrong code for the uid_equal +macro; uid_equal is now a procedure. + +Passes OtherSubrs arguments back to the caller correctly for indices +greater than 3. + +Implements black generation and undercolor removal. + +Removes gdev_mem_ensure_byte_order, which was no longer used or useful. + +Removes gstdev.c (device tracing), since it hasn't been used in a +long time and is of little value given a reasonable debugger. + +Changes the interface to the xfont char_metrics and render_char +procedures to allow them to return 1. + +Changes 32-bit memory devices so they use CMYK color mapping rather +than RGB mapping with an unused byte. + +Implements gs_setcolorscreen/currentcolorscreen. + +Implements Level 2 halftones, except for the transfer function override. + +Implements a hack to make zero-width rectangles display as one pixel wide, +to work around a bug in the Microsoft Windows PostScript driver. +Currently the hack only works for vertical lines, not horizontal ones. + +</pre> + +<hr> + +<h2><a name="Version2.6.1"></a>Version 2.6.1 (5/28/93)</h2> + +<p>This is primarily a bug-fix release for 2.6, with a couple of minor +additions. + +<h3><a name="V2.6.1_Documentation"></a>Documentation</h3><pre> + +Adds proper `man' pages ansi2knr.1 and gs.1. + +</pre><h3><a name="V2.6.1_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The Unix makefile produced an incorrect linker command if +EXTRALIBS was not empty. + - The Unix install commands didn't copy devices.doc, +ps2epsi.doc, and xfonts.doc to the documentation directory. + - echogs.c didn't include <sys/types.h>, which is needed for +time_t on some systems. + - malloc_.h used <malloc.h> rather than <stdlib.h> on +NeXTStep systems. + +Changes the configuration procedure to use a C program rather than +complex shell scripts. + +</pre><h3><a name="V2.6.1_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - The boilerplate produced by ps2image used the 'max' +operator, which is not a standard PostScript operator. + - The winmaps.ps utility had 'floring' instead of 'florin' in +the OEMEncoding table. + - quit.ps was omitted from the PC distribution. + +Changes the name of the dicttomark procedure to .dicttomark. + +Renames gs_2asc.ps as ps2ascii.ps, so it matches the names of the +script files. + +</pre><h3><a name="V2.6.1_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The pbmraw driver was writing out RGG instead of RGB values. + - The X11 driver used NULL in a place where it should have +used None. + - For multi-file output, the GIF driver didn't write a header +at the beginning of each file. + - The Epson driver didn't honor the -A4 compilation switch, +didn't put (0,0) at the physical corner of the page, and was too +liberal about using tabs instead of spaces. + +Replaces the color handling algorithms in the X Windows driver with +new, much better ones. + +Makes the PC display drivers recognize the -A4 compilation switch, +like the printer drivers. + +Adds new user-contributed drivers: + - A driver for Epson printers that use the ESC/P 2 control +language, such as the Stylus 800. + - A driver for the Apple Dot Matrix Printer and Imagewriter. + +Adds a new get_xfont_device driver procedure. This is a +backward-compatible change, since there is a sensible default. + +</pre><h3><a name="V2.6.1_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - On VMS, gconfig.h didn't have #include "gsconfig.h" as its +first line. + - gconfig.c compiled incorrectly on the RS/6000 because the +compiler evaluated a constant of the form (x<<y)+z incorrectly. + - Quite a few files that used the mem... functions didn't +include memory_.h, which caused trouble on some bsd4.2 systems. + - The definition of zfont_char_xglyph confused one of the AIX +compilers. + - On VMS, DEC C allows extra arguments for fopen, but gcc doesn't. + - On the MS Windows platform, 2.6 used gdevwddb rather than +gdevwdib; the latter is almost always faster. + - The PC .zip files didn't include the Windows .ICO and .RES +files in either GSEXE.ZIP or GSFILES.ZIP. + +On PC platforms, adds an option (FPU_TYPE=-1) to optimize for +machines lacking a floating point processor. + +</pre><h3><a name="V2.6.1_Fonts"></a>Fonts</h3><pre> + +Adds 4 new fonts contributed by URW. These have a URW copyright and +are governed by the GNU License. + +Documents the fact that font names in Fontmap can be strings, not +only names. + +Adds DingbatsEncoding as a predefined encoding (in addition to +Standard, ISOLatin1, and Symbol). + +</pre><h3><a name="V2.6.1_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - memchr (used in zfile.c) isn't available on all platforms. + - languagelevel was defined as an operator rather than an +integer. + - iccfont.c referred to name_StandardEncoding instead of +#include'ing font.h and referring just to StandardEncoding. + - The CCITTFaxDecode filter didn't work on 32- (or 64-) bit +machines, because of a bug in more_bits(). + - The structures recording an allocation within the scope of +a save could get allocated unnecessarily, because they weren't +properly marked as free when an array was freed. + +Renames the following Ghostscript-specific operators by adding a '.' +at the front: makeoperator, setdebug, setmaxlength, stringmatch, +type1decrypt, type1encrypt. + +Adds a real implementation of glyphshow. + +</pre><h3><a name="V2.6.1_Library"></a>Library</h3><pre> +Fixes bugs: + - Discarding fractional character coordinates in the Type 1 +rasterizer led to some rendering anomalies (e.g., characters 1 pixel +too high). + - If a font had a non-standard encoding (i.e., not +StandardEncoding, ISOLatin1Encoding, or SymbolEncoding), Ghostscript +would never invoke the platform font code. + - The RGB to HSB color conversion algorithms produced +nonsensical values. + - struct cached_char_s was defined redundantly in gxcdir.h, +causing compilation problems on some systems. + - 32-bit color devices didn't work properly on little-endian +machines (arrange_bytes in gdevmem2 was wrong). + - The scaled font cache could confuse two fonts with the same +UniqueID and different Encodings. + - Under many common circumstances (first use of a character +was with stringwidth, the font was renamed, the font encoding was +changed), xfonts would not be used. + +Adds gs_glyphshow. + +</pre> + +<h2><a name="Version2.6"></a>Version 2.6 (5/9/93)</h2> + +<p>The main new feature in this release is the ability to use platform +fonts. It also adds many more Level 2 PostScript facilities. + +<h3><a name="V2.6_Documentation"></a>Documentation</h3><pre> + +Corrects some errors in the documentation of the makeimagedevice operator. + +Adds operand and result types to the comments at the beginning of all the +operators. + +Adds new sections on installation in use.doc. + +Reinstates history.doc as a repository for old and no longer interesting +history information. + +Adds a new file, devices.doc, with documentation for specific devices. + +Points out that font2c must be run with a Fontmap that includes the fonts +being converted, and that its arguments must be quoted with "" on VMS +systems. + +Notes that the font name in the Fontmap must be the same as the FontName +in the font. + +Adds a list of the Level 2 facilities not provided by Ghostscript. + +Identifies bug-ghostscript@prep.ai.mit.edu as an alias for the +gnu.ghostscript.bug newsgroup. + +Points out explicitly that -sOutputFile=- sends output to stdout, and +requires using the -q switch. + +Documents the use of tar_cat to construct the Unix makefiles. + +Adds a new file, xfonts.doc, that describes the external font interface. + +Documents the fact that drivers must use gs_malloc and gs_free rather than +malloc and free. + +Documents the *.sh (shell script) files. + +Adds brief documentation on some additional development tool .ps files. + +Documents the TEMP and GS_OPTIONS environment variable. + +Points out the need to run Windows in 386 Enhanced mode on machines +that have less than 6 Mb of RAM. + +Consolidates documentation on compiler switches in make.doc (some of +it had been in the unix*.mak files). + +</pre><h3><a name="V2.6_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - \'s in arguments following -- were doubled. + +Includes the full set of filters automatically if the level2 feature +is selected. + +Extends DEVICE_DEVS... up to DEVS9. Adds DEVICE_DEVS1 as well. + +Renames turboc.mak and tbcplus.mak as tc.mak and bc.mak. + +Makes @-files use the library path (GS_LIB, -I). + +Changed the Unix install script to use install <file> <destfile> +rather than install <file> <directory>. + +Adds a GS_OPTIONS environment variable that acts like an implicit @-file +at the beginning of the command line (i.e., may contain switches and +initialization files). + +Renames sym__enc.ps as gs_sym_e.ps. + +Adds a user-contributed shell script for using Ghostscript with an +H-P printer spooler. + +Adds level1.ps to the set of installed utility files. + +Extends the TEMP environment variable (the directory for scratch +files) to work on Unix as well as MS-DOS. + +Changes the MS Windows makefile to generate gswin.exe rather than +gs.exe, and the Watcom makefile to generate gs386.exe. + +Moves the "product" string from gs_init.ps to iinit.c. + +Adds a GS macro to the makefiles, to allow choosing the name of the +executable. + +</pre><h3><a name="V2.6_Utilities"></a>Utilities</h3><pre> +Fixes bugs: +* - font2c did the wrong thing (still) for fonts that didn't +use StandardEncoding, ISOLatin1Encoding, or SymbolEncoding. +* - impath.ps had a fatal bug (wrong operand order for +charstack_write) that caused bdftops to fail. + - gslp didn't wrap or truncate lines. + - gslp didn't handle tabs in a second or subsequent column +properly. + - The definition of ashow in gs_2asc.ps incorrectly undid the +increment following the last character. + - The definition of awidthshow in gs_2asc.ps failed to pop +two entries from the stack, and also tested the character against the +wrong value. + +Adds a shell script (sysvlp.sh) that interfaces Ghostscript with the +System V 3.2 lp interface. + +Adds ps2ascii and ps2epsi script/batch files. + +Adds a new utility, mergeini.ps, for concatenating all the +Ghostscript initialization files into a single file, optionally +removing comments and blank lines. + +Adds new switches to gslp: + -q: suppress all printed output. + --detect: check whether the file begins with %!, and if so, + interpret it directly as a PostScript file. + --first-page <page#>: replaces the former -P switch. + --last-page <page#>: replaces the former -Q switch. + --(heading|footing)-(left|center|right) <string>: define + headers/footers. # inserts the page number. + --margin-(top|bottom|left|right) <inches>: define margins. + --spacing <n>: for double, triple, etc. spacing. +Also makes gslp ignore all the enscript flags it doesn't implement. + +Adds an option to wrfont.ps to do encryption at read-in time. (This +allows much better compression of the standard Ghostscript fonts.) +Changes bdftops to use this option. + +Changes gslp to accept wild cards in file names. + +Replaces landscap.ps with a new one contributed by a user. + +Changes the compression scheme used in ps2image to a much more +effective one. Writing images is much slower than with the previous +scheme, but reading is not. + +</pre><h3><a name="V2.6_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - SCFDTAB and SCFTAB were omitted from the VMS module lists. + - Function prototypes were not being used with the Watcom +compiler. + - On MS-DOS platforms, if the value of the TEMP variable had +a trailing : or \, Ghostscript appended a \ anyway. + - Under Windows, changing the size or resolution of the image +closed and reopened the window. + - Ghostscript would not build correctly with the Watcom compiler +if DOS4G=quiet was not set, because the DOS4GW copyright message was sent +to stdout. +* - Finally gets Ghostscript to run properly on the RS/6000, by +adding a compiler bug workaround to arc_add and arc_either. +* - Finally gets Ghostscript to compile properly on Sun SPARC +systems, by adding a compiler bug workaround in scan_number. + +Changes the default MS-DOS configuration from 8086/8088 to 80286. + +Adds all the SuperVGA drivers to the BC++ and Watcom executables +(except for the VESA driver in the Watcom executable). + +Adds a makefile (msc.mak) for the Microsoft C/C++ 7.0 platform. This +is currently a MS-DOS, not a MS Windows, platform. + +Changes gp_enumerate_files_init so it takes a gs_memory_procs *, not +separate proc_alloc_t and proc_free_t arguments; also, it must +enumerate precisely the requested set of files, not a superset. THIS +IS A NON-BACKWARD-COMPATIBLE CHANGE. It affects all gp_*.c files. + +Adds the P*M drivers and bit.dev to the standard configuration on +Unix platforms. + +Changes the Watcom makefile so it uses the WATCOM environment variable (by +default) as the base directory for the Watcom executables. + +Adds the MS Windows COMMDLG.DLL and SHELL.DLL files to the set of +files incorporated in GSEXE.ZIP, since the new MS Windows code uses +them, and they aren't provided with Windows 3.0. + +Makes major revisions to the MS Windows platform and driver code, to +support the gsview front end, and also to remove the dependence on the +Borland EasyWin library. NOTE: Compiling the MS Windows code now requires +Borland C++ 3.1 (not 3.0). + +Changes time_.h so that Ghostscript will compile and run on A/UX. + +Changes the MS-DOS implementation of file enumeration so it always +treats \s in the file name as literal characters, not escapes, unless +there are two \\s in a row. This does the most sensible thing given +the DOS file naming conventions. + +Adds a %pipe% file device under Unix. + +Adds a makefile for Watcom C under MS Windows. This is very preliminary; +in particular, NO display output is supported. + +</pre><h3><a name="V2.6_Fonts"></a>Fonts</h3><pre> +Fixes bugs: + - fonts.mak referred to ncri and puti rather than ncrri and +putri. + - cyr and cyri had the wrong protection. + - The Hershey fonts left the font on the stack when they were +loaded. +* - The FontName of an aliased font was the original FontName +from the file, not the alias. +* - Fontmap.BTS had incorrect entries for AvantGarde-Demi and +AvantGarde-DemiOblique. + - Ghostscript pushed userdict, rather than an empty writable +dictionary, onto the stack when loading a font, leading to name clashes. + +Adds a new cfonts.mak with a full set of rules for compiling all the +standard Ghostscript fonts (except the Hershey fonts) into C. + +Adds UniqueIDs to the Hershey fonts, and removes the UniqueIDs from +the Hershey entries in the Fontmap. + +Adds a new Fontmap for VAX/VMS with DECWindows/Motif. + +Changes MakeHersheyFont so it takes the encoding as an additional +parameter, and changes the Hershey-Symbol font to use SymbolEncoding. + +</pre><h3><a name="V2.6_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The !@*&^%#@$ PCL drivers *still* didn't do the right thing +about vertical spacing: the <ESC>*p+<n>Y command works on all PCL 3, +4, and 5 printers *except* the LaserJet IIp. + - The cdj driver used recursive macros (height, t_margin, +b_margin) that not all compilers handled correctly. + - The djtc driver used some assignments including =*, which +some compilers dislike. + - The S3 driver wouldn't compile correctly with the Watcom +compiler. + - The makefile entry for the S3 driver was wrong. + - The SuperVGA drivers returned an error, rather than using +the highest available resolution, if a too-high resolution was +requested. + - The GIF driver produced an incorrect header for images +wider or taller than 32K pixels. + - The GIF driver wasn't able to handle multi-page documents +correctly. + - The margins on the DeskJet were still not correct. + - Some ANSI C compilers rejected a complex expression in +gdevpccm.c. + - Printer drivers didn't recover cleanly from problems in +opening the scratch files. + - The BJ-10e driver used the same name `out' for a label and +a variable. + - The SCO ODT compiler couldn't handle sizeof(ppdev->fname). + - The Epson driver used the wrong value for ESC in the +initialization string. + +Adds new drivers: + - Drivers to produce MS Windows .BMP format output. + - A new ATI Wonder display driver (800x600, 16 colors) and a +1024x768 mode for the existing driver. + +Adds new user-contributed drivers: + - A driver for the Tektronix 4693d color printer. This carries a +university copyright. + - A driver for the SPARCprinter. + - A driver for the Canon BJ200 printer. + - A driver for the IBM ProPrinter. + - A driver for the DEC LJ250 printer, which has a +PaintJet-compatible mode. + - A replacement driver for the Sony NWP533. + - A driver that writes TIFF/F (Group 3 fax) files. This carries +an external copyright. + - A driver for the C.Itoh M8510 printer. + - A driver for the Okidata MicroLine 182 9-pin dot-matrix printer. + - A Hercules Graphics driver. + - A driver for printers under MS Windows. + - A driver for direct frame buffer addressing under SCO Unix +and Xenix and AT&T SVR4. + +Changes the get_bits driver procedure so it always reads a single +scan line, and optionally does not copy the data. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE. However, this change does not affect +any existing printer driver, since these all go through intermediate +routines in gdevprn.c. + +Changes gdevprn.h, and the relevant printer drivers, so that -DA4 +will change the default paper size for any printer driver. + +Allows the use of NULL or 0 for default procedures in the driver +procedure vector. + +Adds an optional map_cmyk_color procedure to the driver procedure +vector. + +Changes the Epson driver so that the minimum amount of white space +required to use a tab is an easily changed parameter. + +Changes the BGI driver to use separate segments for the Borland +device drivers, to reduce the risk of overflowing a segment. + +Adds an optimization option (normally enabled) to the PGM and PPM drivers +such that they revert to PBM or (for PPM) PGM if the page can be +represented that way. + +Adds a new (optional) driver procedure to get the procedure vector +for external fonts. + +Adds an argument to gp_open_printer to indicate whether the file should be +opened in binary or text mode. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. +However, this change does not affect any existing printer driver, since +these all go through intermediate routines in gdevprn.c. + +Changes the LN03/LA50/LA75 driver so it uses a text record mode to open +the output file under VMS (by adding an argument to gp_open_printer to +indicate this.) + +Allows (indeed, encourages) drivers to use far_data to declare the device +structure, primarily to avoid overflowing the 64K data segment under MS +Windows. Changes the file output drivers and many of the printer drivers +to declare their device structures as far_data. + +Replaces the AT&T 3B1 driver with an updated version (from the same +contributor). + +Changes the Epson BJ driver and the SPARCprinter driver so they align +the (0,0) point of the page with the physical corner of the paper +rather than with the origin of the printable area. + +Removes the EIZO MDB-10 driver, since it caused complications for the +EGA and VGA drivers and is not a widely used device. + +</pre><h3><a name="V2.6_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - The entry for the copydevice operator in the operator table +was initialized incorrectly. + - printobject and writeobject didn't handle nested arrays. + - restore didn't properly close the current file (if +appropriate), causing an invalidaccess error. + - buildfont required the presence of a valid, 4-element +FontBBox. (The Red Books say it's required, but Adobe interpreters +don't require it; some DEC software generates a 3-element FontBBox.) + - resourceforall had several bugs; it didn't do even +approximately the right thing. There were quite a few other problems +with the implementation of resources. + - setfont, makefont, and scalefont would accept a font with +no FID entry. +* - Loading a .PFB font left the file open (until the next +restore or quit). + - The default (null) font didn't include a PaintType entry, +which some PostScript files expected. +* - The ASCIIHexDecode filter sometimes thought the underlying +stream was at EOF even when there was (at most one buffer's worth of) +data left. + - iscan.c included <ctype.h> before std.h, causing type name +clashes on some systems. +* - save and restore didn't handle the pointers in the graphics +state correctly; for example, the current font wasn't restored +properly. + - Binary object sequences at the top interpreter level didn't +get executed immediately. + - On high-resolution devices, the default transfer function +converted almost-white grays to very light grays rather than white. + - The `string' operator was checking the string length +against max_uint rather than max_ushort, which could cause invalid +lengths to be accepted. +* - deviceinfo caused a stackunderflow error. +* - idiv could give incorrect results for quotients or +remainders that didn't fit in 24 bits. +* - The ASCII85Encode filter padded trailing bytes with 1's +rather than 0's. +* - The ASCII85Decode filter had a typo that produced incorrect +results if there were exactly 2 trailing bytes. + - findlibfile didn't push a copy of the file name if it was +the name of a special (%) file. + - setduplexmode was not defined in statusdict, causing +/undefined errors from some poorly designed input files. +* - The CCITTFaxDecode filter had several bugs in 2-D decoding. +* - The ASCII85Decode filter didn't read ahead to detect EOD if +it fell precisely on a buffer boundary. + - If a file mentioned on the command line redefined `start', +Ghostscript would run the new definition rather than the built-in one +after processing all the files on the command line. + - The SCO ODT compiler couldn't handle the conditionals in the +ngetc (iscan.c) and sgetc* (stream.h) macros. + - makefont and scalefont didn't cache the PostScript dictionaries +for scaled fonts. + - Changing the elements of the Encoding of a font dynamically +didn't take effect if the character was already cached. + - makefont and scalefont didn't add the (undocumented) OrigFont +and ScaleMatrix entries to the new font. +* - findfont insisted that the font name be a string or a name. + - filenameforall could cause an incorrect transfer of control +if no files matched the pattern. +* - ISOLatin1Encoding had hyphen instead of minus at code 45. + - restore didn't reset saved_cbot and saved_ctop correctly; +as a result, some freed blocks could get abandoned rather than put on +the free list. + - Some numerical constants in zarith.c assumed that longs +occupied 32 bits. + +Implements additional Level 2 features: + - %device%file names (only the "os" device is provided). + - <~ ~> for ASCII-85 strings. + - Binary error messages. + - BuildGlyph. + - CCITTFaxDecode filter entries EndOfBlock, Rows, and + (undocumented) FirstBitLowOrder. + - {set/current}{color/colorspace/overprint/colorrendering/ + blackgeneration/undercolorremoval}. (See below under library + for limitations.) + - Decode for the dictionary form of image. + - File access modes a, r/w/a+. + - Font entries CDevProc, Metrics2, and WMode. + - Font operators cshow, findencoding, rootfont, and + setcachedevice2. + - glyphshow (emulated with PostScript code). + - languagelevel. + - realtime. + - setbbox. + - (Subset of) system and user parameters. + - xshow, yshow, and xyshow. + - XUIDs for fonts. + +Moves the installation of systemdict and the initial allocation of +globaldict (if relevant) and userdict from gs_init.ps to iinit.c. + +Makes Level 2 features dynamically selectable through the +.setlanguagelevel operator; disables all Level 2 features +(specifically including automatic dictionary expansion) unless the +level2 feature is included and active. + +Adds the .knownget operator for speeding up system procedures. + +Renames the type1addpath operator as .type1addpath; adds an optional +left side bearing argument; changes it so it does not do the +setcachedevice, fill, or stroke, but does do a moveto for the +character width. Changes Type1BuildChar appropriately. (All this is +needed to make WMode work.) + +Removes the .setmetrics operator, which is no longer needed. + +* Changes the meaning of the user_errors argument to gs_run_file and +gs_run_string so that -1 means always return on an error, 0 means +only return on an error not within a `stopped'. + +Adds all the necessary checks and operators for local/global VM, but +doesn't actually implement local/global mode. + +Changes setcachedevice back so that it requires 4 numbers on the +stack rather than a 4-element array. (It was changed to be the other +way in release 2.0, but that was because I didn't realize that fonts +had to have an executable FontBBox, and some of the Ghostscript fonts +didn't.) + +Changes all the filter operators from .filterxxx to .filter_xxx, and +removes the need to enumerate them in gs_init.ps. + +Adds .oserrno and .oserrorstring operators for getting the last OS +error (in the current context). + +Changes gs_finit similarly to gp_exit. Adds gs_exit_with_code that +takes both an exit status and a Ghostscript error code. + +Changes the name of name.h to iname.h. + +Adds support for the `interrupt' error (but doesn't provide any standard +way of generating one, other than through the gp_check_interrupts polling +function). + +Adds copyright to systemdict. + +Changes the spot halftone screen to an elliptical screen supplied by +Berthold K. P. Horn. + +Adds a check that the first token in gs_init.ps is an integer. In +conjunction with other code in gs_init.ps, this should catch all attempts +to run Ghostscript with a gs_init.ps that doesn't match the executable. + +Changes all relevant occurrences of sizeof to size_of in order to +work with the buggy SVR4.2 C compiler. + +Changes gp_exit so it is passed both the Ghostscript error code and +the exit status code as arguments. This is backward-compatible for +all but the pickiest compilers. + +Adds a call on gp_check_interrupts() after fwrite calls in the stream +machinery. This prevents lengthy console output from locking out +other programs. + +Changes a couple of occurrences of op_def_ptr in iinit.c to work around a +`const' bug in Sun's SC1.0 compiler. + +Adds a special hack in the 'where' operator to work around a bug in Aldus +Freehand 2.x. + +Changes all empty argument lists from () to (void), which is the ANSI +C syntax. + +Adds a hack to ignore ^[ and ^D^[ tokens, to work around the prologue +and epilogue emitted by the MS Windows LaserJet IV driver. + +Defines the processcolors operator, which should not be needed, but +is required because of bugs in Lotus 1-2-3 and Adobe PhotoShop. + +Changes the allocator (ialloc) to fill all allocated and/or freed +blocks with a marker if gs_alloc_debug is set, as gs_malloc and +gs_free already do. + +</pre><h3><a name="V2.6_Library"></a>Library</h3><pre> +Fixes bugs: + - 16-bit memory devices stored the bytes of each pixel in the +wrong order. + - copy_mono did the wrong thing when copying 1 source chunk +to 2 destination chunks with polarity inverted. (This probably +didn't affect any actual uses of Ghostscript.) +* - The compile-time check for ints being 2 or 4 bytes used the +#error directive, which most compilers don't recognize. + - arc and arcn didn't do the right thing for degenerate +(single-point) arcs, or for arcs drawn in the "wrong" direction that +were multiples of 360 degrees. + - charpath did the wrong thing with Type 3 fonts. + - copyscanlines gave an error if the buffer was too large. + - The copy_mono procedure (used for text and halftones) for +2- and 4-bit-per-pixel memory and printer devices incorrectly +incremented the destination pointer after every pixel, instead of +only after every byte. + - The fill_rectangle procedure (used for graphics) for 2- and +4-bit-per-pixel memory and printer devices, if given any color other +than all 0's or all 1's, multiplied the X coordinate and width by 2 +or 4, thereby filling the wrong area. + - The use of 'data' in both gs_type1_data and gs_font upset +the VMS compiler. + - The `Flex' feature wasn't implemented for Type 1 fonts, +which caused serious errors in rendering some fonts that use it. +(Unfortunately, some Adobe fonts violate the specification, so we had +to implement Flex to always use a curve.) +* - Stem width adjustment was too eager, producing very strange +effects on small characters with tight curves (a curve point could +get snapped to the other side of the open area). + - The allocator didn't align structures adequately on +machines where sizeof(long) or sizeof(char *) was 8 bytes. + - The test for IEEE floating point gave an incorrect +(negative) result on machines where sizeof(long) was 8 bytes. + - genarch.c assumed that the result of subtracting two +pointers was an int, leading to a garbage arch.h file on systems +where this was false. +* - The Type 1 font interpreter incorrectly reset the adjusted +path position to be the same as the unadjusted path position whenever +it returned control to the client (in particular, for callothersubr), +leading to discontinuities and distortions in the character shapes. +* - Accented characters in Type 1 fonts often misplaced the +accent to the left. + - gsmisc.c wouldn't compile on machines with 64-bit pointers, +because _pad was 0, and ANSI compilers don't accept 0-length arrays. + - pathforall got confused if the client procedures modified +the path. + - The command list file representation limited X and Y +coordinates to 15 bits. +* - stroke could produce spikes or other garbage for mitered +joins as a result of stroke adjustment. + - The params_size field of the null device was wrong, so +scaling the null device produced unpredictable results. + +Changes monobit memory devices to always store data big-endian. This +eliminates byte-swapping, at the cost of slightly slower rendering. + +Removes the memswab* routines, since they are no longer needed. + +Implements gs_cshow_[n_]init, which provides support for cshow, and +gs_xyshow_[n_]init, which provides support for {x,y,xy}show. + +Adds an optional left side bearing argument to gs_type1_interpret. + +Changes gs_type1_interpret so it does not do a setcachedevice, fill, +or stroke, but only appends the character outline to the path +(including a moveto for the character width.) + +Removes gs_setmetrics, which is no longer needed. + +Implements gs_setcachedevice2, which provides support for +setcachedevice2. + +Speeds up gsave/grestore by allocating, deallocating, and copying as +much as possible of the graphics state in a single operation. + +Implements gs_{set/current}{color/colorspace/overprint/colorrendering/ +blackgeneration/undercolorremoval}. Device, indexed (with table, not +with procedure), CIE, and (substituted) separation colors are +supported; some of the setup code for patterns is also present. + +Increases the size of temporary file names in gdevprn.h from 30 +characters to 60. + +Changes the character cache to be allocated dynamically in chunks. + +Splits gxcache.c into gxccache.c (fast "hit" code) and gxccman.c (all +other code). + +Changes all occurrences of sizeof to size_of in order to work with the +buggy SVR4.2 C compiler. + +Adds a new concept of "external fonts", which allow a driver to +substitute its own fonts for the ones obtained through the normal +font machinery. + +Changes all empty argument lists from () to (void), which is the ANSI +C syntax. + +</pre> + +<hr> + +<h2><a name="Version2.5.2"></a>Version 2.5.2 (9/20/92)</h2> + +<p>This is yet another bug fix release to (finally!) get the PCL drivers +working again. + +<h3><a name="V2.5.2_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The comment in devs.mak for cdjcolor said it used 8 bits +per pixel, rather than the correct 24. + +Adds gsbj/dj/lj/lp and gslp.ps to the installed files on Unix +systems. + +Removes dps.dev and level2.dev from the standard configurations on +all platforms, since the presence of the setcolor operator was +causing the output of some common applications to fail. + +</pre> + +<h3><a name="V2.5.2_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - font2c produced invalid output for any font that didn't use +StandardEncoding or ISOLatin1Encoding. + +</pre> + +<h3><a name="V2.5.2_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - gp_sysv.c required an extern long timezone. + +</pre> + +<h3><a name="V2.5.2_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The PCL drivers were *still* doing the wrong thing about +zeroing the seed row for Mode 3 compression. + - Setting the resolution with -r didn't work under Windows. + - The Windows driver got a stack overflow if it was ever +asked to display a bit image wider than 32 pixels. + - The Tseng driver didn't sense the model (ET3000 vs. ET4000) +correctly. + +Adds the eps9high device to the standard MS-DOS makefiles. + +</pre> + +<h3><a name="V2.5.2_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - gs_run_string used gs_user_errors (a global) rather than +user_errors (its argument) to control error handling. (This does not +affect normal operation of Ghostscript, only use as a server.) + - eexec popped the top element of the dictionary stack +afterwards even if the encrypted code had pushed something onto it. +This caused problems for some badly written PostScript code. + - The printed form of real numbers didn't always include a +decimal point, causing compatibility problems. + +Makes -s and -d work for device properties. + +Increases the cache limit on large-memory systems. + +Adds a check to ensure that the revision of gs_init.ps matches that +of the interpreter. + +Adds the .knownget operator. + +</pre><h3><a name="V2.5.2_Library"></a>Library</h3><pre> +Fixes bugs: + - The raster computation in clist_render_init, and the +computation of state_size in clist_open, didn't widen an operand to +long, leading to possibly incorrect operation for 24-bit-per-pixel +printers on MS-DOS systems. + - The flatness was set too large for Type 1 characters, +leading to visible straight edges instead of curves at large sizes. + - Type 1 fonts that contained out-of-range coordinates would +produce garbled output. (This was not a problem with the standard +Ghostscript fonts, or with Adobe Type Manager fonts.) + - gschar0.c wouldn't compile, because it referred to a +non-existing structure member penum->chr. (This had no effect on +Ghostscript's operation.) + - The curve flattener required line segments to be no more +than 8 x the flatness in length, leading to an enormous number of +segments. + - pathforall would cause an addressing fault if the path +consisted of only a moveto. + +Refactors some header files so that std.h is always included before +any system header file that might include sys/types.h. + +Adds logic for removing top and bottom blank rows in cached +characters. (This is the beginning of compression for the cache.) + +Changes the arguments of memswab2/4 from char * to byte *, for more +accurate type conformance. + +</pre> + +<h2><a name="Version2.5.1"></a>Version 2.5.1 (9/11/92)</h2> + +<p>This is the usual bug fix re-release. + +<h3><a name="V2.5.1_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The makefile rules for compiled fonts had a circular +dependency. + - `make begin' didn't work properly on all platforms. + +Ensures that all batch files end with a newline. (The absence of the +newline was confusing the GNU diff program.) + +Documents the fact that the -dASCIIOUT switch no longer exists. + +</pre><h3><a name="V2.5.1_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - pstoppm didn't `bind' its internal procedures. + - grestoreall would undo the output device selected by +pstoppm. + +Changes the utilities for reading and writing Type 1 character +outlines so they can work with stack representations as well as +arrays. + +Removes the pfbtogs.ps, phonbook.ps, and showpbm.ps utilities from +the distribution. + +Adds a gslj utility to parallel gslp and gsdj. + +</pre><h3><a name="V2.5.1_Platforms"></a>Platforms</h3> + +<pre> +Adds the DeskJet 500C drivers (cdeskjet/cdj*) to the MS-DOS / Borland +C++, MS-DOS / Watcom C/386, and MS-Windows configurations. + +Removes the PCX file driver from the MS Windows executable, because +the static data segment exceeded 64K. + +Makes some changes in the Unix System V platform file (gp_sysv.c) and +in time_.h and unixtail.mak to accommodate the 3B1. + +</pre><h3><a name="V2.5.1_Fonts"></a>Fonts</h3><pre> +Fixes bugs: + - The Charter-Italic font was named bchi.pfa rather than +bchri.pfa. + - The Cyrillic fonts (cyr.gsf, cyri.gsf) were omitted from +the fileset. + - Ghostscript incorrectly assumed that all Type 1 fonts had a +FontInfo dictionary. + - .loadfont used false PFBDecode, so a few .PFB fonts would +get errors because the first eexec byte would be whitespace. + +Changes font2c and its supporting code so that compiled fonts are +location-independent. + +</pre><h3><a name="V2.5.1_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The margins for the H-P printers were still wrong. + - The H-P drivers accidentally cleared the compression seed +row when switching compression modes. + - Some of the H-P drivers used the wrong control codes for +skipping blank lines. + +Adds user-supported drivers for the AT&T 3B1 console device, and for +the NEC P6+ printer. + +Updates the SunView driver with a new version supplied by a(nother) +user. + +Changes the X Windows driver so the Ghostscript window doesn't get +input focus. + +Changes the common code for the printer drivers so that if it can +allocate a full bitmap but there isn't at least a minimum amount of +memory left afterwards, it switches to banding. + +Changes the Windows driver so it handles devices with more than 8 +bits per pixel. (We haven't been able to test this.) + +Adds a read-only PageCount device property (for printer devices +only). + +Changes all Aladdin-supported drivers to clip drawing requests to the +((0,0), (width,height)) rectangle of device space. + +</pre><h3><a name="V2.5.1_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - Closing a NullEncode filter always gave an ioerror. + - If a single-character name occurred 1 character before the +end of an input buffer, the character would be doubled. + - The procedures in gs_statd.ps didn't use "bind". + - Setting the page size didn't work properly with devices +with rotated coordinate systems. + - If an error occurred, and the error object wasn't the last +element of its procedure, the interpreter would re-execute the error +object after running the error handler. + - Memory devices didn't get resized if HWSize was changed, +leading to out-of-bounds memory accesses. + +Moves revision and revisiondate from gs_init.ps to iinit.c. Adds a +-v switch that just prints these out. + +Arranges things so that if Ghostscript is reading from a pipe (`-' +switch on the command line) and encounters an error, it exits with +status 1 rather than 0. + +Changes the interpreter interface so the caller explicitly passes a +pointer for storing an error object. + +</pre><h3><a name="V2.5.1_Library"></a>Library</h3><pre> +Fixes bugs: + - The automatic adjustment of the scaling for variant paper +sizes caused the image to get expanded when it should have been +contracted, and vice versa. + - The curve flattener insisted that each line segment be no +more than 2 x the flatness in length, leading to an enormous number +of segments even when not necessary for accuracy. + - flattenpath and strokepath discarded a trailing moveto. + - strokepath treated "0-width" lines as really having a width +of zero, rather than one pixel. + - Buffered devices weren't closed and reopened if the amount +of buffer space was changed. + - stroke used the line cap at the beginning of each subpath +even if the subpath was closed. + +Removes the requirement that the clipping rectangle fall in the +non-negative quadrant of device space. (This was causing problems +for Ghostview, but removing it required adding the extra clipping +step to the drawing routines in the drivers.) + +</pre> + +<h2><a name="Version2.5"></a>Version 2.5 (8/18/92)</h2> + +<p>This version adds Type 1 hinting, CCITTFax encoding and decoding, and +Microsoft Windows support, as well as the usual minor improvements +and bug fixes. + +<h3><a name="V2.5_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - GSIMPATH, SLZWD, and SLZWE were omitted from the VMS +makefiles, and GSIM2OUT was not removed. + - landscap.ps messed up the current path. + +Adds new switches: + -dSAFER disables file writing and directory modification. + -dESTACKPRINT causes errors to print the execution stack with +== instead of =. + -sOutputFile=<string> replaces -sOUTPUTFILE (which is still +recognized) for setting the output file or pipe for the default +(printer) device. + -sPAPERSIZE=<sizename> initializes the paper size. + -dBufferSpace=<number> sets the buffer size for the default +(printer) device. + +For Unix systems, changes the directories in GS_LIB_DEFAULT from +`pwd` to $(gsdatadir), i.e., normally $(datadir)/ghostscript, where +datadir is normally /usr/local/lib. + +Adds a note in the header file to the effect that the X Windows +driver expects to find header files in $(XINCLUDE)/X11, not in +$(XINCLUDE). + +Changes -q so it defines QUIET as true instead of null (so it can be +used in the middle of the command line as well as at the beginning). + +Renames the history.doc file as NEWS. + +</pre> + +<h3><a name="V2.5_Utilities"></a>Utilities</h3> + +<h3><a name="V2.5_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - The stack size was not getting increased on the Watcom +platform. + +Removes "b" from the scratch file opening modes in gp_unix.c and +(conditionally) in gdevprn.c, to pacify the DECstation Ultrix system. + +Adds a makefile (bcwin.mak) and a platform file (gp_mswin.c) for +Microsoft Windows. + +On MS-DOS platforms (including Windows), uses the TEMP environment +variable to designate the directory for scratch files. + +Changes std.h so that the VMS C compiler uses function prototypes and +'const'. + +Changes the VMS cc makefile so it doesn't use ansi2knr. + +</pre><h3><a name="V2.5_Fonts"></a>Fonts</h3><pre> +Fixes bugs: + - findfont left an extra entry on the stack if it couldn't +find the default font. + +Renames bchi, ncri, and puti as bchri, ncrri, and putri, to conform +with the naming scheme for other fonts. + +Adds $(CCFLAGS) to the command line used for compiling fonts. + +Converts the .pfa fonts (CharterBT, IBM Courier, and Utopia) to .gsf, +by removing eexec encryption and also removing some mysterious +unmapped characters from Courier. This makes these fonts work with +DISKFONTS. + +Changes the implementation of compiled fonts so they are read-only +and sharable (no external references). (They are, however, not +position-independent.) + +Provides a way to use compiled fonts on platforms that limit the +number of characters in an identifier. + +Adds public-domain Cyrillic and Cyrillic-Italic fonts. + +Adds a 'userdict begin' to .loadfont, because Type 3 fonts produced +by Fontographer expect a writable dictionary on the top of the stack. + +Changes definefont for Type 1 fonts to insert UnderlinePosition and +UnderlineThickness entries in FontInfo if they are absent, because +many word processors incorrectly assume these entries are present. + +</pre><h3><a name="V2.5_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The documentation in use.doc said that the densities for +9-pin Epson printers were 60x60 to 240x60, rather than 60x72 to +240x72. + - gdevprn.c smashed one byte beyond the end of the string +given as the OutputFile device property. + - The X11 driver used XVisualIDFromVisual, which is not +defined in X11R3. + - The SunView driver modified the input data, which was +declared as const. + - The LaserJet IIP and III drivers shifted the page 185 +pixels to the left and 0.25" down, because the initialization string +was incorrect. + - The PCX driver wrote 16-bit values using the byte ordering +of the platform, rather than always LSB first. + - For vertical spacing, the LaserJet and DeskJet drivers used +a command that spaces N/300", rather than N scan lines, but gave it a +parameter in scan lines. + - The VESA driver didn't allocate a full 256-byte buffer for +reading the mode information from the BIOS, causing the stack to get +smashed by newer VESA implementations. + - The VESA driver didn't use the scan line length returned by +the BIOS, causing garbage output for some cards and some resolutions. + - The generic printer driver didn't free the bitmap when +closing the device, if it fit entirely in memory. + - The PaintJet driver allocated its data areas on the stack +instead of with gs_malloc. + - The generic printer driver didn't attempt to increase the +buffer size if it was too small. + - The band list driver didn't split large bitmaps properly, +leading to garbled characters at high resolutions. + - The GIF and PCX drivers used a color map that often turned +gray colors into non-grays. + +Changes the default put_props procedure so that if the device is +open, setting HWSize and/or HWResolution closes the device and +reopens it. + +Adds a driver for Microsoft Windows 3.n. + +Updates the 'cdj' and 'dj500c' DeskJet 500C drivers with new versions. +(This are user-contributed drivers.) + +Changes gdev_prn_put_props so OutputFile can be changed dynamically. + +Updates the DEC LN03 driver to also handle the LA50 and LA75. (This +is a user-contributed driver with a FSF copyright.) + +Changes the LaserJet/DeskJet driver so that -DA4 in the makefile +makes A4 paper the default. The driver now also sends an appropriate +page size selection command to the printer if the printer supports it. + +Changes all the Aladdin-supported drivers to return appropriate error +codes rather than -1. + +Adds a driver for the S3 86C911, a PC graphics accelerator used in +the popular Diamond Stealth board. This is the first driver that +uploads character bitmaps to a device; others will probably follow. + +Adds user-supplied code to the Epson driver so it will do triple +passes on 9-pin printers for higher resolution. + +Adds user-supplied code for the PaintJet XL to the PaintJet driver. + +</pre><h3><a name="V2.5_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - zdps1.c didn't include alloc.h. + - On 32-bit systems, if maxlength of a dictionary was less +than the actual allocated space, length could become larger than +maxlength. + - flushfile didn't actually flush data when reading. + - The ASCII85Decode filter signalled EOF prematurely. + - The scanner interpreted .3D.glorp as the number 0.3, rather +than as a name. + - Closing a file freed the stream structure, creating +dangling references if there were other file objects pointing to the +same stream. + - eexec called handleerror if an error occurred, instead of +letting the error propagate to an enclosing stopped. + - gs.h made perror illegal, instead of defining it in terms +of strerror. + - One-character names weren't being allocated at +initialization, so they could be left dangling after a restore. + - Internal gsaves (i.e., the ones in show and setcachedevice) +didn't also save istate, so setfont inside a BuildChar procedure +might cause the font outside to get changed. + - The allocator incorrectly freed objects in the current +chunk that were older than the current save. + - mark was just an object, rather than an operator, so 'bind' +didn't bind it. (This is theoretically a problem for null, true, and +false also, but even more unlikely to be a problem in practice.) + - packed_get didn't cast packed integers to int, so negative +integer elements of packed arrays came out wrong. + - quit just did a gs_exit, instead of returning to the driver +in an orderly way. + - Because check_type_access checked for errors in the wrong +order, sometimes type errors were reported as access errors. + - eq didn't check for stack underflow. + - Some of the stream_procs structures weren't properly +declared const, leading to link errors on VMS. + +Implements currentcolor, currentcolorspace, setcolor, and +setcolorspace (for DeviceGray, DeviceRGB, and DeviceCMYK only). + +Implements the dictionary form of image and imagemask. All the pairs +in the Decode array must be the same; Interpolate is ignored. The +only supported color spaces are DeviceGray, DeviceRGB, and +DeviceCMYK. + +Implements files as allowable sources for the image operators. + +Removes the index field from the name structure, moving it to the +'size' field of name refs. + +Changes the unread/sungetc operation to require that the character be +the same as the last one read from the file. + +Adds fflush calls to some debugging printout routines, because Unix +sometimes buffers terminal output. + +Implements the CCITTFaxEncode and CCITTFaxDecode filters. Implements +the general case of the SubFileDecode filter. + +Changes definefont to treat a UniqueID of 0 as equivalent to no +UniqueID, because Fontographer output apparently often violates the +specification in this way. + +Changes the default printer screen from 32.5 to 46 cells/inch. (The +old value was appropriate for a hand-rotated cell with two spots in +it.) + +Changes the utility routines to allow an integral real wherever an +integer parameter is expected in a dictionary, because Fontographer +produces fonts that violate the Adobe specification in this way. + +Adds a `dosio' feature that provides direct access to memory and to +I/O ports under MS-DOS. (This feature is not included in the +standard executables, of course.) + +Changes the default character cache limit to a 1/4" x 1/4" character +at the default resolution, rather than basing it on the preallocated +cache size. + +Removes support for t_color objects, which haven't actually been used +for several releases. + +Implements setcmykcolor and currentcmykcolor as operators, so they +will interact properly with setcolorspace and currentcolorspace. + +Changes the name of the file.h header file to files.h, to work around +a bug in the VMS header library. + +Adds command line switches @file (to treat file as more command line, +to get around the DOS 128-character command line limit) and -ffile +(so one can specify file names that begin with - or @). + +Changes the PFBDecode filter so it takes an additional boolean that +says whether or not to convert binary packets to hex. (Conversion to +hex and back to binary accounted for a substantial amount of the time +required to load .PFB fonts.) + +Splits off `copydevice' as a separate operator again. + +</pre><h3><a name="V2.5_Library"></a>Library</h3><pre> +Fixes bugs: + - In the VMS environment, string_.h used its own prototypes +for the str... and mem... functions instead of <string.h> + - gx_alloc_char_bits declared cdsize as long, but didn't +shorten it when passing it to shorten_cached_char. + - Stroking didn't suppress fattening of the lines. + - kshow didn't update the cached CTM information in the show +enumerator when returning from the callout, so further characters +could get drawn in the wrong place. + - When a memory device returned its initial matrix, it +smashed the padding fields, which contained the interpreter's type +information. + - setcachedevice didn't set the initial matrix in the cache +memory device. + - image_set_rgb (in the image operators) didn't do a +gx_color_from_rgb, so in principle one could sometimes get incorrect +colors in an image. + - The decision about whether or not to cache a character +bitmap incorrectly compared the character size against cmax rather +than cdata_size. + - show didn't reset the in_cachedevice flag in the graphics +state, so characters rendered by a recursive show were never cached. + - clip and eoclip didn't release the intermediate flattened +clip path, causing memory to be lost. + - The tile_diff routine didn't handle the case of two +identical tiles properly; this produced garbage in the band list +file. + - stringwidth didn't round the character origin to an +integral pixel; this interacted badly with hinting, causing +improperly hinted characters to wind up in the cache. + - Bitmaps (including characters) were displaced, as well as +being clipped, if they intersected the top of a clipping region. + - In gxclist and gdevmem1, the raster computation (although +not the result) could overflow an int on 16-bit machines. + +Implements decoding (sample mapping) for image and imagemask. + +Implements hinting for Type 1 fonts, based on (but not copying) the +algorithms from the X11R5 tape. + +Changes curve rasterizing to use sampling, rather than recursive +subdivision, for characters. This produces noticeably better output. +Speed penalty for non-cached characters is less than 10% at display +resolutions, up to 50% for 300 dpi printers. + +Implements gs_setcmykcolor and gs_currentcmykcolor. These are +semi-fake, since they simply convert the color to and from RGB, but +the former does set the current color space properly. + +Changes clipping regions so they use the any-part-of-pixel rule +rather than the center-of-pixel rule. This helps avoid dropouts when +using very small regions. + +Implements stroke adjustment. + +</pre> + +<hr> + +<h2><a name="Version2.4.2"></a>Version 2.4.2 (5/8/92)</h2> + +<p> +This is another quick release. It finally fixes rotated halftone +screens, and cleans up a few minor problems from 2.4.1. + +<p> +This release is being distributed only to beta testers and commercial +licensees, since I don't want to be distracted from working on 2.5. + +<h3><a name="V2.4.2_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - UTRACE still appeared in the VMS makefiles. + - The support files (*.bat, *.doc, *.gsf, *.ps, Fontmap, +COPYING, README) weren't included in the MS-DOS tar file. + - The Unix install script didn't install landscap.ps. + +Replaces the type1imagepath operator with PostScript code (impath.ps, +type1ops.ps) based on the new .imagepath operator. + +Renames LICENSE as COPYING. + +</pre><h3><a name="V2.4.2_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - pcharstr.ps had an occurrence of Subrs rather than /Subrs, +causing it to not print the Subrs, or to get an error if there were +none. + - font2c.ps didn't get the const declarations for string +dictionaries quite right. + - The missing newline at the end of gsbj.bat confused GNU +diff. + - ansi2knr would go into an infinite loop if a statement +exceeded its internal buffer size. + - Compiled fonts would get processed by ansi2knr, which +messed them up. + +</pre><h3><a name="V2.4.2_Platforms"></a>Platforms</h3><pre> +Fixes bugs: + - Ghostscript didn't supply equivalents for rename and +gettimeofday, which some System V platforms lack. + - The missing newline at the end of gp_dosfb.c confused GNU +diff. + +Changes the Borland makefiles so that stack checking is only enabled +if DEBUG or TDEBUG is set. + +</pre><h3><a name="V2.4.2_Fonts"></a>Fonts</h3> + +<pre> +Changes the names of the Utopia fonts from utrg/utb/utbi/uti to +putr/putb/putbi/puti, for consistency with the rest of the font names. +Changes cour/courb/courbi/couri to ncrr/ncrb/ncrbi/ncri likewise. + +Replaces the Charter fonts with the CharterBT fonts donated by +Bitstream to the X11R5 distribution. + +Adds font aliasing capability to Fontmap. Replaces +Courier-[Bold]Oblique and ZapfChancery-MediumItalic by aliases. + +Changes the FontBBox of the Hershey fonts to be an executable, rather +than a literal, array. + +</pre><h3><a name="V2.4.2_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The GIF driver omitted a `private' on the definition of +gif_print_page. + - The GIF driver wrote 16-bit values using the byte ordering +of the platform, rather than always LSB first. + - George Cameron's DeskJet 500C driver had an incorrect +control sequence for skipping blank lines. + +Adds 'const' in many places, including the tile and bitmap arguments +of the tile_rectangle, copy_mono, and copy_color driver routines. +THIS IS A DRIVER INTERFACE CHANGE. (Printer drivers are not +affected, since they don't implement these routines.) + +Adds a driver for the Trident TVGA. + +</pre><h3><a name="V2.4.2_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - alloc_free sometimes incorrectly chose to put an unaligned +block in an old segment on a freelist. + - The default undercolor removal function returned its +argument rather than returning 0. + +Adds NullEncode and SubFileDecode to the standard filters, since +bdftops uses the latter. + +Adds RunLengthEncode and RunLengthDecode to the optional filters. + +Removes the type1imagepath operator. (It is still available as +PostScript code, impath.ps.) Replaces it with a simpler outline +tracing operator .imagepath. + +Adds 'const' in many places. + +Makes fileposition (but not setfileposition) legal for NullEncode +filters. + +Changes the default transfer function for high-resolution devices +from the identity function to the square root function. + +Moves array_get from zgeneric.c to iutil.c. + +Changes uses of fopen to add a "b" to the access mode, rather than +relying on the _fmode global variable on MS-DOS platforms. + +Allows use of the -Z switch even when gsmain.c wasn't compiled with +-DDEBUG, since other modules might have been. + +Reorganizes gs.c and gsmain.c so that the latter can be used in +server environments. + +Replaces all uses of stdin/out/err with gs_stdin/out/err. + +Makes the number of permanent entries on the dictionary stack a +parameter, to allow inserting globaldict in the future. + +Changes BlueShift in the Type 1 font Private dictionary to allow real +numbers. (This differs from the Adobe specification, but at least +one commercial font has a real number for BlueShift.) + +</pre><h3><a name="V2.4.2_Library"></a>Library</h3><pre> +Fixes bugs: + - The doubling check in init_ht (gxht.c) still sometimes +thought there was enough room to double the tile when there actually +wasn't. + - Rotated halftone screens didn't work. + - gxarith.h used #ifdef vax, rather than #if +!arch_floats_are_IEEE, to test whether IEEE floats were being used. + - pathforall didn't report a trailing moveto. + +Replaces gs_type1imagepath with gs_imagepath. + +Allows sOUTPUTFILE=-, meaning output to stdout. + +Adds 'const' in many places. + +Replaces all uses of stdin/out/err with gs_stdin/out/err. + +</pre> + +<h2><a name="Version2.4.1"></a>Version 2.4.1 (4/21/92)</h2> + +<p>This is a quick release to fix minor problems discovered in 2.4, and +to add a few improvements that didn't quite make it into 2.4. It +also adds GIF and PCX file support. + +<h3><a name="V2.4.1_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - Some makefile dependencies, and the ccgs script, caused trouble +for parallel versions of `make'. + - Compiling genarch with -O with gcc on the RS/6000 produced a +buggy executable. + +Fixes some minor problems in make.doc. + +Adds DEVICE_DEVS2..5 to handle long device lists. + +Removes the need to set GS_RUN_EXE when using the Watcom compiler on +MS-DOS systems. + +Gets rid of gs_ccfnt.ps, merging its function into gs_fonts.ps. + +Gets rid of gconfig.ps; this information is now compiled in gconfig.c. + +</pre><h3><a name="V2.4.1_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - The palette for pstoppm in 8-bit mode didn't contain all 8 +primary colors. + - font2c used just values_ to mean &values_[0]; some compilers +couldn't handle this. + +Makes font2c insert `const' in many appropriate places. + +</pre><h3><a name="V2.4.1_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The SunView driver had not been updated properly for 2.4 and was +pretty thoroughly broken. + - None of the printer drivers worked properly with the Watcom +compiler, because stdprn was doing \n -> \r\n substitution. + - If the generic printer driver couldn't allocate the requested +size command list buffer, it gave up rather than trying to allocate a +smaller buffer. + - The SuperVGA drivers (except for the VESA driver) didn't +work with the Watcom compiler, because a couple of places in the +drivers weren't truncating the offset of "segmented" pointers +properly. + - Some of the H-P used <esc>*b#Y rather than <esc>*p+#Y for +vertical positioning; this apparently is wrong, at least for the +LJIIp. + +Removes the dependence of the X Windows driver on Xt, Xext, and Xmu. As a +result, Ghostscript will not install a standard colormap itself, but it +will use one if one is already installed. + +Adds a set of drivers for Portable Bitmap, Graymap, and Pixmap file +formats. + +Adds drivers for monochrome, EGA/VGA-style, and SuperVGA-style PCX +file formats. + +Adds drivers for monochrome and 256-color GIF file formats. + +</pre><h3><a name="V2.4.1_Fonts"></a>Fonts</h3><pre> +Adds ZapfChancery-MediumItalic as a copy of ZapfChancery-Oblique. + +</pre><h3><a name="V2.4.1_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - A value with l_new set could 'escape' to save level 0 on a +stack; if stored, it prevented the slot from being saved and restored +properly. + - 16#7fffffff + 1 gave the floating point equivalent of -2^31, not +2^31. + - The PFBDecode filter computed the packet length incorrectly if +the 0x8000-bit of the length was set. + - 5-byte numbers in Type 1 CharStrings complained of a rangecheck +if they exceeded 16 bits, rather than if they exceeded the integer part of +a fixed. + - (, ), and \ appearing in file name arguments in the command +line did not work properly. + +Adds 'const' in many places. + +Changes the random number generator to be the same as the one used in +Level 2 PostScript (as reported by Ed Taft on comp.lang.postscript). + +Exits with code 1 rather than code 0 on an unrecoverable error detected at +the PostScript level. + +Makes dictionaries expand automatically when they fill up. + +Adds gp_exit to complement gp_init. + +Changes dictionaries to always allocate a power of 2 entries on +32-bit machines. Changes the name table to allocate indices +scattered, so dictionary lookup doesn't have to do a multiply to +scramble the index. + +Changes the handling of currentfile to do "shallow binding" so stack +searching is almost never required. + +</pre><h3><a name="V2.4.1_Library"></a>Library</h3><pre> +Fixes bugs: + - arc and arcn got a numeric exception if the radius was zero. + - The undocumented 15 opcode in Type 1 fonts wasn't ignored. + - PaintType 3 wasn't allowed. (It isn't clear what it should +mean; we treat it as equivalent to 0.) + - The VAX/VMS C compiler was generating incorrect code for the +chi_bits and cmask macros in gdevmem, producing incorrect output. + - If the result of the slow algorithm for intersecting clipping +paths was a rectangle, the wrong thing happened (cbox didn't get set). + - gx_path_is_rectangle didn't recognize open rectangles. + - clist_change_tile didn't check properly whether the tile +size had changed, so changing the screen could produce invalid band +files. + - The image operators did the wrong thing in the 1-for-1 +case, interleaving N bytes of data with 7*N bytes of garbage. + - stroke sometimes handled bevel and miter joins wrong in +reflected coordinate systems. + - init_ht checked incorrectly whether there was enough room +to Y-replicate tiles, so sometimes it did it when it shouldn't have. + - stroke sometimes thought lines were thin when they weren't. + +Adds 'const' in many places. + +Adds support for 2- and 4-bit-per-pixel memory devices. + +</pre> + +<h2><a name="Version2.4"></a>Version 2.4 (3/25/92)</h2> + +<p>This is a major release that adds SuperVGA support, support for +Metrics, +settable device properties, and incremental font loading. It also +includes important performance improvements, based on rewrites of some key +algorithms, and quite a few new Level 2 / Display PostScript facilities. + +<h3><a name="V2.4_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The rule for compiling gconfig.c didn't include the -I switches. + - .bat files were being distributed with a \n line terminator +rather than \r\n. + - A CLOSE MODULE_LIST was needed after END_COMPILE: in the VMS +command files. + - Unix systems couldn't handle multiple drivers with overlapping +sets of files. + - -s<name> defined <name> as a null, rather than as an empty string. + +Adds gconfig.ps to the list of needed configuration files. + +Changes the way that the makefile handles nested .h files, so that it +doesn't have to `touch' them. + +Adds the loadallfonts procedure to gs_fonts.ps. + +Changes the standard DOS configuration to include VGA, EGA, VESA, Epson, +BubbleJet, and H-P printer drivers. + +Renames ghost.mak as gs.mak, and gdevs.mak as devs.mak. + +Adds a USE_ASM flag so that one can build a DOS version of Ghostscript +without having an assembler. + +Splits off common code from the two MS-DOS makefiles into tccommon.mak. + +Replaces the COPYING and LICENSE files with a new LICENSE file containing +version 2 of the GNU General Public License. + +Removes DEVICES and DEVICE_OBJS from the makefiles, since they are no +longer needed. + +Adds a GS_DEVICE environment variable to supply a default device name if +desired. + +Adds ansihead.mak and unix-ansi.mak, to parallel [g]cc-head.mak and +unix-[g]cc.mak, for other ANSI C compilers. + +Changes the way that optional features are defined in the makefiles, so +that they actually work. + +Adds support for the Watcom C/386 compiler. + +Allows # in the command line as equivalent to =, to compensate for +brain-damaged MS-DOS shell. + +Adds -sOUTPUTFILE= to set the output file or pipe. + +Adds -dWRITESYSTEMDICT to leave systemdict writable. + +</pre><h3><a name="V2.4_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - pcharstr.ps insisted on having Subrs be present in the font. + - pcharstr.ps decoded negative numbers between -108 and -1131 +incorrectly. + - pfbtogs.ps didn't handle packets longer than 64K correctly. + +Changes the bdftops utility so that it makes entries for UnderlinePosition +and UnderlineThickness in FontInfo, and so that it always records a +FullName (the FontName if no other is provided). + +Changes the name of the pfbtops utility to pfbtogs, because groff already +includes a program called pfbtops. + +Adds the gslp utility for doing "line printing" of text files, similar to +enscript + lpr. + +Adds a new variable DITHERPPI that enables a different dither pattern, +claimed to be better for printers. + +Adds the font2c utility for compiling Type 1 fonts into C, so they can be +linked into an executable rather than loaded dynamically. + +</pre><h3><a name="V2.4_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - gdev_prn_copy_scan_lines was erroneously masking the last byte +of data even on color printers, as was paintjet_print_page. + - The TruFax driver had a couple of compilation errors, since it +hadn't been compiled in a while. + - The BGI driver sometimes didn't consult BGIPATH when looking for +.BGI files. + - initclip did the wrong thing with memory devices. + - The BGI driver didn't look in BGIDIR for .BGI files. + - The Epson driver didn't set the right margin properly with +ESC+Q. + - The BJ-10e driver was badly broken. + - gdev_prn_open/close_printer didn't reset the command list file, +so it was taking quadratic time to print multi-page documents. + +Adds color to the SunView driver. + +Adds selectable resolution (75, 100, 150, or 300 DPI) to the +DeskJet/LaserJet driver. + +Changes gssetdev so that drivers can specify special libraries to be +loaded, as well as object files. + +Adds a driver for VESA-compliant SuperVGA displays. This driver handles +all resolutions from 640 x 400 up to 1280 x 1024, in 256-color mode. The +default is VGA resolution (640 x 480). + +Adds a driver for the ATI Wonder SuperVGA card, and for SuperVGA cards +using the Tseng Labs ET3000 or ET4000 chip such as the STB VGA EM-16 and +the Orchid ProDesigner II (256-color modes only). + +Adds a driver for Trident and Tseng Labs SuperVGA cards in 800 x 600, +16-color modes (for cards with only 256K of memory). + +Adds user-contributed drivers for the Ricoh 4081, DEC LN03, Canon LBP-8II, +and H-P DeskJet 500C printers. + +Adds Tim Theisen's Ghostview changes to the X11 driver. + +MAKES NON-BACKWARD-COMPATIBLE CHANGES TO THE DRIVER PROCEDURE INTERFACE as +follows: + + - Changes map_rgb_color and map_color_rgb to always work in a + 16-bit color value space, rather than a space defined by the + maximum number of distinct colors provided by the device. + + - Adds an argument to the output_page procedure to indicate + whether the procedure is being called for copypage or + showpage, and a num_copies argument. + + - Adds a gx_bitmap_id to the copy_ and tile_ procedures, so that + drivers can cache bitmaps in the server or device if they want + to. + + - Removes fill_trapezoid and tile_trapezoid. + + - Adds a new get_bits procedure for reading the bits back from the + driver buffer (when possible), replacing copy_scan_lines. + This procedure takes a new argument describing padding and + byte swapping, and returns a different value from + copy_scan_lines. + + - Adds get_props and put_props procedures for accessing arbitrary + additional properties of devices. The interface is quite + complex, but provides a great deal of flexibility. + +See drivers.doc for details. + +Changes gdev_mem_bytes_per_scan_line to gdev_prn_bytes_per_scan_line. + +Adds a user-contributed driver for DigiBoard, Inc.'s fax software. + +</pre><h3><a name="V2.4_Fonts"></a>Fonts</h3> + +<pre> +Changes Type1BuildChar so it uses the information from the Metrics +dictionary in the font, if Metrics is present. + +Changes findfont (.loadfont) so it recognizes .PFB fonts and can load them +directly. Also changes .loadfont to disable packing temporarily, because +some fonts rely on procedures being writable (!). + +</pre><h3><a name="V2.4_Interpreter"></a>Interpreter</h3><pre> +Fixes bugs: + - The hypot function is not available on some Unix systems. + - Ghostscript didn't flush and close files when exiting. + - In statusdict, the /margins procedure used .leftmargin, but +/setmargins used .lmargin. + - An out-of-range putinterval would simply do nothing, rather than +reporting an error. + - If an attempt to allocate a block larger than the allocator's +chunk size (20K) failed, the allocator would erroneously think it had +succeeded. + - The bind operator made the top-level procedure read-only, as +well as interior procedures. + - gs.c copied 1 extra character for the value of strings defined +on the command line with -s...=, which could smash the first byte of the +next object in memory. + - copying a dictionary erroneously required the maxlength of the +destination to be greater than or equal to the maxlength of the source, +rather than the length of the source. + - undef didn't correctly decide when to mark a deleted entry as +deleted vs. free; as a result, some keys couldn't be looked up properly +after an undef. + - type1encrypt and type1decrypt didn't set the size of the result +properly. + - cvi and cvr didn't allow leading or trailing whitespace in +strings. + - cvs didn't cause an error if the destination string was too +short. + - Many operators didn't check correctly for stack underflow (off +by 1). + - `for' used reals, rather than integers, if the limit was a real, +even if the initial value and increment were integers. + - `restore' didn't properly invalidate copies of the save object +being restored from; `save dup restore restore' would crash. + - `restore' sometimes didn't undo stores into matrices that were +stored into by operators. (The identity matrix always had l_new set.) + - readline gave a rangecheck if the input line exactly filled the +string. + - `--' as the last switch on the command line caused a crash +rather than an error message. + - On MS-DOS systems, filenameforall didn't handle patterns with a +drive or directory specifier properly. + - stroke sometimes called gz_draw_line_fixed even if the line went +outside the clipping box by 1 pixel. + +Changes the loop that binds procedure "operators" to entirely disable the +handling of the typecheck error, rather than to use stopped. This cuts +initialization time significantly, and also eliminates about 35K of wasted +space (for saving the stacks). + +Changes the version "operator" so it returns 47.0. Adds "revision" to +define the Ghostscript version # x 100. + +Adds gscurrentresolution and gssetresolution procedures for getting and +setting the device resolution. + +Adds -r<res> and -r<xres>x<yres> as command line options for setting +device resolution. + +Adds a facility for incrementally loading the individual CharStrings of a +Ghostscript font from the disk. This can save a lot of memory, at the +expense of slower rendering. (It is intended primarily for MS-DOS +systems.) + +Changes findlibfile to return the name of the file that was actually +opened, as well as the file itself, when the operation succeeds. + +Changes the name of the main entry to the interpreter from interpret to +gs_interpret, because of a conflict with a Data General library procedure. + +Adds the .setmetrics operator to set the metrics for the current +character for Type 1 fonts. + +Adds more LaserWriter-specific entries to statusdict. + +Gives names to all the internal `operators', so they will print out +reasonably when an error occurs. + +Extends the status operator to accept a string and return file +information, as defined for Level 2 PostScript. + +Adds the filter operator and some specific filters: ASCII85Encode, +ASCII85Decode, ASCIIHexEncode, ASCIIHexDecode, eexecDecode, NullEncode, +PFBDecode, and the null case of SubFileDecode. + +Extends the scanner to recognize the Level 2 << and >> tokens. + +Adds a facility for extracting the text strings from a PostScript file and +writing them out in a simple format (selected by -dASCIIOUT, implemented +by gs_2asc.ps). + +Implements all of the remaining Display PostScript facilities that are +also in Level 2 (i.e., everything in section A.1.3 of the PostScript +Language Reference Manual, Second Edition, that is not also in section +A.1.2). The virtual memory operations are all stubs; the new halftone +options are not fully implemented. + +Changes makeimagedevice to use a string of gray or RGB values, rather than +an array of color objects, to specify the palette. Removes +currentgscolor and setgscolor from the interpreter, but leaves t_color +objects in, since they may be useful later. + +Adds getdeviceprops and putdeviceprops for manipulating device properties. +Currently defined properties for all devices: InitialMatrix, HWResolution, +HWSize, Name. Currently defined properties for printers: BufferSpace, +MaxBitmap, OutputFile. OutputFile allows |command for piping on Unix +systems. + +Removes deviceparams and makedevice. Adds devicedefaultmatrix. + +Implements reversepath. + +Makes copy work on devices. + +MS-DOS specific +- - - - - - - - + +Fixes bugs: + - iutilasm.asm wouldn't assemble with newer versions of MASM if +CPU_TYPE was set to 286 or above. + - CPU_TYPE=386 didn't properly substitute the faster +multiply/divide routines under Turbo C++ or Borland C++, only under the +original Turbo C. + +</pre><h3><a name="V2.4_Library"></a>Library</h3><pre> +Fixes bugs: + - A curve whose first and last points were the same wouldn't get +drawn at all. + - A bug in the Turbo C++ compiler generated bad code when shifting +a long right by 1 bit. + - If stroking a dashed line ever encountered a segment that was +completely blank, Ghostscript would indirect through a null pointer. + - arc and arcn gave an error if the radius was negative. + - stroke always used the general algorithm, even if the line was +guaranteed to be thin. + - arc and arcn erroneously reduced the angles mod 360. + - Very large or negative 32-bit numbers in Type 1 fonts didn't +work properly on MS-DOS systems (the ff0000 bits got set to zero). + - Color printer devices rendering entirely in memory only +allocated a monochrome-sized bitmap. + - clip and eoclip didn't intersect the paths properly in the +general case. + - charpath erroneously rounded the current point to an integral +value, causing characters to be spaced improperly. + - The definition of max_color_param got some compilers confused. + - charpath always used quadratic time and space, and dropped all +but the last character when used with a Type 3 font. + - Stroking a path with a 180 degree angle would incorrectly miter +instead of beveling. + - Type 1 fonts used the current flatness for curves, which could +produce bad (and inconsistent) results. + - Stroking a degenerate line segment produced incorrect results. + +Changes the character cache to use the UniqueID as the key, when +available, instead of the font pointer. This dramatically improves +performance when fonts are getting removed and reloaded because of page +isolation with save/restore. + +Removes some unnecessary casts to (float) from gsmatrix.c and gscoord.c. + +Changes the Type 1 interpreter so that it rounds line and curve endpoints +to the center of the nearest half-pixel, and omits null line segments. +This both speeds up rendering at small sizes and improves output quality. + +Changes gs_deviceparams to return resolution as well as extent; changes +gs_makedevice to accept resolution as well as extent. + +Replaces the algorithm for approximating circular arcs with curves with a +more accurate one. + +Changes gs_point and gs_rect to use doubles rather than floats. + +Adds gs_setmetrics, for overriding Type 1 font metrics for the current +character. + +Changes clipping to use lists of rectangles rather than path intersection. + This makes a big difference when clipping bitmaps (including characters). + +Changes the character cache to discard entries incrementally, rather than +clearing the entire cache when it fills up. + +Changes the implementation of transfer functions to use a cached map, +built when the transfer function is set. This makes transfer functions +work properly in all situations, including images. + +Defines a .quit operator that takes an exit code, and redefines quit in +terms of it. + +Adds support for 16-bit-per-pixel devices in gdevmem. + +Adds gs_copydevice and gs_deviceinitialmatrix; removes gs_deviceparams and +gs_makedevice. + +Changes setscreen to ensure that the cell is always at least 4x4 pixels in +size. + +</pre> + +<h2><a name="Version2.3"></a>Version 2.3 (8/28/91)</h2> + +<p>This is a minor release to fix two bugs and add the PaintJet driver, +which +didn't make it into 2.2. + +<h3><a name="V2.3_Utilities"></a>Utilities</h3><pre> +Changes the pstoppm utility so it counts pages correctly even in the +presence of arbitrary saves and restores. + +</pre><h3><a name="V2.3_Drivers"></a>Drivers</h3><pre> +Adds a new, "supported" PaintJet driver. + +Changes the Epson driver to use ESC+D rather than ESC+\ for horizontal +positioning, since many printers don't support the latter. + +Adds horizontal double-density (two-pass) printing to the Epson driver, so +it can do 240 x 60 and 360 x 180 densities. (Vertical double density is +not supported yet.) + +</pre> + +<hr> + +<h2><a name="Version2.2"></a>Version 2.2 (6/1/91)</h2> + +<p> +The purpose of this release is to add save/restore, and a few +miscellaneous Level 2 P*stScr*pt features such as undef. It also includes +major improvements in graphics quality and in handling of high-resolution +printers. + +<h3><a name="V2.2_Procedures"></a>Procedures</h3><pre> +Changes the version numbering to M.mpp rather than M.m.p, so that +`version' can be a real number for those programs that insist on it. + +Renames ghost.ps as gs_init.ps, gfonts.ps as gs_fonts.ps, and statusd.ps +as gs_statd.ps. The initialization files now all are named gs_*.ps. + +Renames gdevs.{c,h,tl} as gconfig.{c,h,tl}. + +Changes the relevant makefiles and command files so that a single build +can contain several drivers that share code, e.g., the Epson driver and +the DeskJet driver. + +Changes gs_init.ps so it relies on an external gconfig.ps file rather than +making a specific test for the presence of Level 2 features. + +Adds an entry for uglyr.gsf to the makefile. + +Removes the distinction between CCA and CCNA, since most of the files now +contain constructs that require non-ANSI compilation on MS-DOS platforms. + +Adds a `man' page for the ansi2knr utility. + +Changes the documentation (use.doc) to show how to use -sDEVICE=<device>, +or the selectdevice procedure, to select devices by name. + +Adds DEVICE_DEVS to the makefiles (analogous to DEVICES and DEVICE_OBJS). +This finally makes the make procedure fully automatic. + +Adds the name of the initialization file (gs_init.ps) as a +platform-specific makefile parameter, GS_INIT. + +Removes the test program gt.{c,tr} from the fileset, since it is not +useful to users. + +Moves the Symbol encoding vector to a separate file (symbol_e.ps), from +which it is loaded when first used. + +Changes the error handler so it can handle errors that occur while reading +the initialization files. + +Extends ansi2knr so it can handle `void' and `...' in parameter lists. + +Adds quit.ps to the set of installed files. + +MS-DOS-specific changes +- - - - - - - - - - - - + +Adds the VGA and BGI drivers to the standard MS-DOS configuration, and +makes VGA the default. + +Adds a `+' and a newline at the end of gs.tr, to avoid problems with file +transfer programs or editors that add a newline at the end of files. + +Changes the name of msdos.mak to turboc.mak, and creates a new tbcplus.mak +makefile for use with Turbo C++ and Borland C++. + +Changes the extension of the loader response files from .tl to .tr. + +Changes the default search path from c:/ghost and c:/ghost/fonts to c:/gs +and c:/gs/fonts. + +Changes the directory separator from `|' back to ';', since it appears +that DOS can handle a ; in a command line if it is prefixed with \. + +Unix-specific changes +- - - - - - - - - - - + +Changes the uses of install in unixtail.mak so they only install a single +file at a time, which is all that the standard Unix install allows. + +Removes the duplicate files (README/readme, LICENSE/license, +COPYING/copying, Fontmap/fontmap). + +Changes the ld flags from LDPLAT to LDFLAGS. + +Adds XCFLAGS and XLDFLAGS. These are concatenated with CFLAGS and LDFLAGS +respectively. The intention is that they be set from the `make' command +line if desired. + +VMS-specific changes +- - - - - - - - - - + +Repairs the omission of ZPACKED from the VMS build lists. + +</pre> + +<h3><a name="V2.2_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The SunView driver produced semi-garbage on little-endian +platforms (Sun-386i) because it didn't swap the bit order. + - The X driver would dump core if it couldn't open the display and +the DISPLAY environment variable wasn't set. + - The X driver relied on white = 0, black = ones in a couple of +places; + - The X driver would return an error, instead of clipping, if +asked to display outside the window. + - The X driver would create inappropriately sized windows, because +it believed the server's report of the screen resolution. + +Adds Fran Taylor's Private Eye driver to gdevs.mak and the fileset (not +supported by Aladdin Enterprises). + +Adds Neil Ostroff's TruFax driver to gdevs.mak and the fileset (not +supported by Aladdin Enterprises). + +Makes the scratch file template for the printer drivers a per-platform +quantity (gp_scratch_file_name_template). Puts the default scratch files +for Unix in /usr/tmp rather than /tmp. + +Changes the SunView driver to prevent the Ghostscript window from being +destroyed (which badly confuses the interpreter). + +Extends the Epson driver to handle a variety of print densities in both X +and Y, to handle 24-pin as well as 8-pin graphics, and to allow optional +specification of default density in the makefile (gdevs.mak). + +Refactors the printer drivers so that a single driver handles both DeskJet +and LaserJet. Adds LaserJet drivers that use the new compression modes on +the LJ IId/IIp and LJ III. + +Changes all the printer drivers to use band lists rather than bitmap +paging as the buffering method. (The individual drivers need only a +one-line change to replace mem_copy_scan_lines with +gdev_prn_copy_scan_lines with a different argument.) + +Adds the halftone phase as additional arguments to tile_rectangle and +tile_trapezoid. + +Adds an entirely new and much simpler PaintJet driver, using the new band +list interface. + +Adds margin information to the device structure. This is currently only +relevant for printer devices. + +Adds BGIPATH and BGIUSER environment variables, allowing additional +control of the BGI driver. + +Changes the x/y_pixels_per_inch member of the device structure from int to +float. + +</pre> + +<h3><a name="V2.2_Fonts"></a>Fonts</h3> + +<pre> +Patches gs_fonts.ps so definefont will add an isFixedPitch entry to +FontInfo if there isn't one there. + +Removes the old "type 7 path" encoding code from gs_fonts.ps. + +Changes bdftops so it puts isFixedWidth and ItalicAngle entries in the +FontInfo dictionary of the fonts it creates, since some P*stScr*pt +programs rely on this. + +Changes bdftops so it synthesizes as many missing characters as possible +out of the ones that are there (in particular: synthesizes accents out of +punctuation marks, and accented characters using seac.) The results +aren't all that good, but they're a lot better than having characters +missing out of the font. + +</pre><h3><a name="V2.2_Utilities"></a>Utilities</h3><pre> +Adds a pfbtops utility for converting .PFB fonts to standard Ghostscript +fonts. + +Fixes bugs: + - ps2image didn't reset things properly between pages for +multi-page documents. + +</pre><h3><a name="V2.2_Interpreter"></a>Interpreter</h3><pre> +Makes Ghostscript recognize `-' alone as meaning that it should read from +standard input as though it were a file. This allows Ghostscript to +accept a pipe as input. + +Fixes bugs: + - seac in type1addpath used the current font's encoding, not +StandardEncoding. + - type1decryptfile (eexec) didn't recognize binary (as opposed to +hex) representation. + - Mentioning a name whose value was a no-access object caused an +invalidaccess error. + - There was a bogus definition of `run' in zfile.c. + - The interpreter didn't handle end-of-file on stdin properly. + - Real numbers with an 'e' or 'E' but no decimal point were not +recognized. + - On MS-DOS systems, inside strings, \ followed by a newline was +not discarded properly. + - On MS-DOS systems, the long unsigned divide routine sometimes +gave incorrect answers. Among other things, this caused alternate-radix +numbers sometimes to crash the interpreter. + - cvrs didn't do the right thing about reals or negative integers. + - .echo.mode was being reset with def instead of store, and was +defined in systemdict rather than userdict. + - setgray and settransfer didn't interact properly. + - 16#80000000 was being interpreted as a signed integer (and +converted to a real) rather than an unsigned one. + - atan returned 0 sometimes when it should have returned 180. + - currentcmykcolor was defined wrong. + +Removes the filename operator, since no standard Ghostscript code used it, +and it caused problems with some P*stScr*pt files. + +Implements new operators: filenameforall, selectfont (as a procedure), +stringmatch, undef. + +Adds new standard procedures: selectdevice. + +For MS-DOS, requires that the operand and execution stacks be located in +the data segment, and uses short pointers to address them. This produces +significantly smaller and faster code. (These changes are not visible to +users or library clients.) + +Changes the assignment of attribute bits, and adds new bits for +save/restore and the garbage collector. Changes many of the macros in +store.h to support save/restore. (These changes are not visible to users +or library clients.) Implements save and restore. + +Moves type names from gs_init.ps to ghost.h and ztype.c. + +Moves error names from gs_init.ps to errors.h and iinit.c. + +Introduces gp.h as a documented interface to the platform-specific files. + +Adds the -- switch, which allows Ghostscript programs to take arguments +from the command line. + +Changes many uses of the name `name' to something else, to avoid upsetting +the Microsoft C compiler. + +Really implements packed arrays -- they took the same amount of space as +ordinary arrays in previous versions. + +Changes exitserver in serverdict so that it just clears the stacks. (This +isn't the correct fix, but it will do as a workaround.) + +Makes many miscellaneous small changes to pacify various compilers. + +Changes gs_fonts.ps so that when "quiet" mode is selected (-q switch), +Ghostscript doesn't print anything when loading fonts or when substituting +for undefined characters. + +Defines the name consisting of just a control-D as a no-op, because some +P*stScr*pt-generating applications put control-Ds in their output. + +Implements halftone phase (sethalftonephase and currenthalftonephase +operators). + +Removes the -E switch, since it is no longer useful. + +Changes the -w and -h switches to a single -g (geometry) switch, with +usage -g<width>x<height>. Makes the -h switch, and a new -? switch, print +usage help. + +Implements correct handling of stack overflow errors (makes an array out +of the contents of the overflowing stack, and resets the stack, before +invoking the error handler). + +Adds t_oparray (`operators' defined as procedures) and the makeoperator +operator. This is so that programs like the Distillery that rely on all +operators being bound by `bind' will work properly. + +Adds a new NOPAUSE flag to suppress the prompt and pause at copypage and +showpage. + +</pre><h3><a name="V2.2_Library"></a>Library</h3><pre> +Fixes bugs: + - gs_type1_interpret didn't store the encryption state or the skip +count before returning to let the client handle a seac or an endchar in +the middle of a seac. + - The definition of the Type 1 operator ce_testadd was based on +wrong information; the operator takes only 2 operands and does something +unknown. + - mem_true24_copy_mono wasn't incrementing the destination pointer +if the color was transparent, leading to garbled characters. + - gx_lookup_fm_pair would sometimes look at one entry beyond the +end of the cached font/matrix pair area. (This probably had no practical +effect.) + - gs_type1_interpret didn't save the current point when returning +to the client for a callothersubr, causing some characters to be rendered +displaced (such as some of the chess pieces in chess.ps). + - gs_setgray, gs_sethsbcolor, gs_setrgbcolor, gs_setflat, and +gs_setlinewidth gave errors for out-of-range operands rather than forcing +them into range. + - Transfer functions were not actually supported. + - The area fill algorithm failed on certain complex paths. + - The current point was sometimes defined when a BuildChar +procedure was called. + - Stroking a degenerate line didn't display anything for round +caps or joins. + - If the ends of a curve had exactly the same X coordinate, the +curve sometimes wouldn't be displayed. + - Very thin lines that went outside the clipping region would +sometimes be displayed as dashed, or not at all. + - The translation in a FontMatrix was ignored. + - Very wide, shallow lines would color extraneous pixels when +using bevel or miter joins. + - Dashed lines didn't join properly at the beginning of a closed +path. + - 0-degree arcs didn't add the appropriate line (possibly +degenerate) to the path. + - gs_type1_interpret didn't reset the callsubr stack when starting +the base character of a seac, which caused confusion if the accent's +endchar fell inside a Subr. + - Non-monochrome memory memory devices weren't checking the +arguments of the drawing procedures properly. + - The initial clipping rectangle for memory devices was being +computed wrong. + - Null devices had a semi-infinite clipping rectangle instead of +an empty one. + - gs_setlinewidth was treating negative arguments as zero, instead +of taking the absolute value. + - imagemask with a dithered color used a solid color rather than +the dithered one. + +Tweaks the area fill and image rendering algorithms to be a little more +liberal with paint when being used to render characters. + +Changes the name of the 8-bit mapped color memory device from +mem_mapped_color_device to mem_mapped8_color_device. + +Changes the memory devices so that on little-endian platforms, they can +store the bytes within a word in either order. (Little-endian order +allows efficient 32-bit updating, big-endian is required when displaying +or writing to a printer or a file.) + +Implements halftone phase. + +Replaces the trapezoid fill algorithm with a much more accurate one +inspired by a contribution from Paul Haeberli. This also changes the +graphics convention back to filling only pixels whose center falls within +the region to be filled. + +Changes the character cache to allocate headers and bits contiguously out +of a single ring buffer. + +Changes gs_imagemask and gs_imagemask_init to take a thickness adjustment +parameter. + +Changes gs_setcachedevice and gs_setcharwidth to take the graphics state +as a parameter. + +Renames gx_device_memory_bitmap_size as gdev_mem_bitmap_size, +mem_copy_scan_lines as gdev_mem_copy_scan_lines, and +mem_bytes_per_scan_line as gdev_mem_bytes_per_scan_line. + +</pre> + +<hr> + +<h2><a name="Version2.1.1"></a>Version 2.1.1 (1/15/91)</h2> + +<p>This is a sub-release distributed to fix a few early bugs in 2.1, +just in +time for the new GNU master tape. + +<h3><a name="V2.1.1_Build_procedures"></a>Build procedures</h3><pre> +Removes all of the (undebugged) Level 2 code from the fileset, as well as +the (unused) file gdevvga.c. + +Changes the tar file so that the files are stored in the directory +gs<version> rather than simply gs, e.g., gs211. + +</pre><h3><a name="V2.1.1_Interpreter"></a>Interpreter</h3><pre> +Changes the scanner so that \ is recognized within strings regardless of +whether the scanner is reading from a string or from a file. This is +compatible with newer P*stScr*pt interpreters, and with the newer +P*stSc*pt language specification, but not with the older specification in +the original PostScript Language Reference Manual. + +</pre><h3><a name="V2.1.1_Drivers"></a>Drivers</h3><pre> +Fixes the max_value macro in gdevmem.c so that compilers won't complain +about a left shift by 32. + +Adds 'byte' to the list of types that gdevx.c must sidestep because header +files use them. + +</pre><h3><a name="V2.1.1_Library"></a>Library</h3><pre> +Changes the computation of penum->unpack in gsimage.c so as not to upset +compilers that don't treat procedures and pointers to procedures as +compatible types for conditional expressions. + +</pre> +<h2><a name="Version2.1"></a>Version 2.1 (12/31/90)</h2> + +<p>This is primarily a bug fix release to clean up problems in 2.0. It +also implements a first cut at the new color operators. + +<h3><a name="V2.1_Build_procedures"></a>Build procedures</h3><pre> +Changes the separator for multiple directories in MS-DOS from ';' to '|', +since there is no way to include a ';' in a command line. + +Adds <dir>/fonts to the default search path, where <dir> is c:/ghost for +MS-DOS systems and `pwd` for Unix systems. + +Adds new documentation describing how to direct output to the printer. + +Changes the PROCTYPE and USE8087 options in MSDOS.MAK to CPU_TYPE and +FPU_TYPE. The latter now indicates the type of FPU to generate code for, +if any. + +</pre> + +<h3><a name="V2.1_Drivers"></a>Drivers</h3> + +<pre> +Adds a driver for the Canon BubbleJet BJ10e. + +Modifies the EGA driver to handle (non-standard) frame buffers larger than +64K. Adds drivers for the VGA and for the EIZO MDB-10 (a 1024 x 768 frame +buffer). + +Changes the X driver so that it clips to the window dimensions, rather +than reporting an error. + +Notes that the H-P LaserJet driver, like the DeskJet driver, works under +Unix as well as MS-DOS. + +Adds support for 120 X DPI mode, and for the LQ-1500, to the Epson driver. + +</pre><h3><a name="V2.1_Fonts"></a>Fonts</h3><pre> +Fixes bugs in bdftops: + - It was using /UniqueId instead of /UniqueID as the key for the +font unique ID. This effectively disabled the font cache. + - The definition for .notdef was bogus -- an invalid CharString. + +Changes ghost.ps and gfonts.ps so that NullFont is the initial font, +rather than Ugly. + +Arranges things so that when attempting a font substitution, if the +default font is not found, NullFont is used instead. + +Extends bdftops so that if certain easily synthesized characters are +missing from a font, it will attempt to synthesize them using available +characters. + +</pre><h3><a name="V2.1_Interpreter"></a>Interpreter</h3><pre> +Extends the -T switch to allow specifying a printf template for the +arguments of the procedure being traced. + +Fixes bugs: + - /0 was interpreted as equivalent to 0 (a number) rather than a +literal name. + - packedarray was defined as being like array, instead of like +array followed by astore. + - Many minor and harmless type mismatches (and a couple of very +minor genuine bugs) were upsetting the Apollo C compiler. + - exp was incorrectly failing in certain cases with a negative +first argument. + - copyscanlines incorrectly required at least 4 elements on the +operand stack, although it correctly only used the top 3. + - readhexstring incorrectly read 1 byte even if the string length +was zero. + - Not every place that expected an array would accept a packed +array. + - Very complex paths (and infrequently other things) could produce +a 'memory leak'. + - / alone would skip following whitespace and gather following +characters, rather than creating an empty name. + - ghost.ps left newerror defined as true in $error, which resulted +in an erroneous error report if a program executed a 'stop'. + - The definition of exitserver in serverdict didn't clear the +stack. + - currentfile returned an executable file, rather than a literal +one. + - setfont for Type 1 fonts didn't check the UniqueID in the font +dictionary against the one in the font's Private dictionary. + - A value stored in a dictionary under the key /xxx couldn't be +retrieved using the key (xxx), and vice versa. + - charpath with a Type 1 font on a string containing a 'space' +would produce garbage (it released the parent path inappropriately). + - bytesavailable did not work properly for terminal input. + +Changes the interface to the memory allocator so that it always takes an +element size and an element count, like calloc instead of malloc (but note +that alloc does *not* clear just-allocated blocks). Gets rid of the +special 'dynamic' allocation procedures. + +Changes the random number operators to use a better implementation. + +Changes the idiv operator so it will accept any numbers, not just +integers, as arguments. (The PostScript manual doesn't allow this, but +implementations apparently do.) + +Provides semi-fake but usable definitions for all of the color PostScript +extensions, including a real implementation of colorimage. + +No longer uses the name 'null', which is apparently reserved by Microsoft +C. Makes a number of other minor changes required to pacify the Microsoft +C compiler. + +Implements %statementedit and %lineedit. (%statementedit is equivalent to +%lineedit, which is wrong.) Changes the interactive interpreter to use +%statementedit. + +Changes the scanner to accept null, ctrl-K (vertical tab), and ctrl-L +(form feed) as whitespace. Ctrl-L terminates a comment, null and ctrl-K +do not. + +Allows a literal string as the 'proc' argument(s) for image, imagemask, +and colorimage. + +Adds the following operators/procedures: arct, cleardictstack, deletefile, +renamefile. + +Defines =print as a synonym for =, for the benefit of LaserPrep. + +Implements non-zero PaintType for the show operators (but not for +charpath) for Type 1 fonts. + +Adds the ISOLatin1Encoding encoding vector. + +Renames currentcolor and setcolor as currentgscolor and setgscolor, to +avoid conflict with the Level 2 PostScript names. Removes colorhsb, +colorrgb, hsbcolor, and rgbcolor. + +</pre><h3><a name="V2.1_Library"></a>Library</h3><pre> +Fixes bugs: + - In a couple of places, a 0 was being passed as a pointer +argument without casting, which confused the Microsoft C compiler. + - Image devices were not recognized properly in debugging +configurations. + - Inverted-color monochrome image devices were not recognized +properly. + - Images that exactly fill the drawing area rendered very slowly, +because they erroneously used the general clipping algorithm. + - Images that are 1-for-1 with the device were incorrectly scaled +by a factor of 8 in X. + - Rounding artifacts sometimes caused characters to be unevenly +offset vertically by 1 pixel. + - Type 1 fonts that used the Flex feature resulted in garbled +images. + - The show operator routines would incorrectly fill or stroke a +path that existed at the time the show was started. + - setscreen truncated the cell size instead of rounding, which +could produce off-by-1 anomalies. + - stroke would sometimes produce garbage (or nothing at all) for +very narrow lines. + - path filling would only color the pixels whose centers fell +inside the path: the Adobe specification requires coloring a pixel if any +part of it falls inside the path. + +Changes the Epson printer driver so that it drives the printer directly +rather than writing to a file. + +Changes pathbbox so that if the path is empty but there is a current +point, it returns a null rectangle at the current point. + +Changes gs_image_init to take an additional parameter (after bps) giving +the number of samples per pixel (1, 3, or 4), and an indication of whether +the samples for each pixel are together or separated (-3 or -4). + +Renames the gs_image_data and gs_imagemask_data procedures as gs_image and +gs_imagemask, and removes the old versions of the latter. + +Adds gs_colorimage. + +Replaces Snoopy's color dithering algorithm with one contributed by Paul +Haeberli. + +Changes gs_setgray, gs_[set]hsbcolor, and gs_[set]rgbcolor so that they +coerce arguments outside the range [0..1] back into the range, instead of +signalling an error. + +Makes a number of minor changes required to pacify the Microsoft C +compiler. + +Changes gs_arcto so that if the last argument is a null pointer, the +tangent points are not returned. + +Removes gs_type1addpath, which is not useful. (Clients must call +gs_type1_init and gs_type1_interpret directly.) + +Implements the 'seac' opcode for Type 1 fonts, allowing fonts with accented +characters to display properly. + +Implements the undocumented 'testadd' opcode for Type 1 fonts, which is +used by some Adobe fonts. + +Renames gs_currentcolor and gs_setcolor as gs_currentgscolor and +gs_setgscolor. Removes gs_colorhsb, gs_colorrgb, gs_hsbcolor, and +gs_rgbcolor. + +</pre> + +<hr> + +<h2><a name="Version2.0"></a>Version 2.0 (9/12/90)</h2> + +<p>The main purpose of this release is to add fonts, support for +multiple +devices, and imaging into memory. It also fixes a number of miscellaneous +bugs. (Unfortunately, accurate records of the bugs fixed are not +available.) The changes were so extensive that we chose to increment the +major version number. + +<h3><a name="V2.0_Miscellaneous"></a>Miscellaneous</h3><pre> +Doesn't attempt to open the .MAP file on Unix systems. + +Adds mention of statusd.ps to interp.doc. + +Notes that Turbo C 2.0, not 1.5, is required for building the MS-DOS +version. + +Adds a DEVICES= line to the makefile, and allows multiple devices. + +Documents, in interp.doc, the X Windows resources that Ghostscript +recognizes. + +Adds three PostScript masters to the fileset: chess.ps (+ cheq.ps), +golfer.ps, and escher.ps. + +</pre><h3><a name="V2.0_Drivers"></a>Drivers</h3><pre> +Changes the names of all the device drivers. See gdevs.mak for the +updated list. + +Adds a (working) driver for SunView. + +Adds drivers for the Sony NeWS frame buffer, and the Sony Microsystems +NWP533 printers. These drivers were contributed by users, so we aren't +prepared to answer questions about them. + +Adds a driver for the Borland Graphics Interface (BGI) for MS-DOS systems. +Note that to use this driver with a non-EGA/VGA display, you need a .BGI +file appropriate for your hardware. (The Ghostscript executable includes +the EGA/VGA driver.) + +Adds a driver for Epson printers. The driver has only been tested on an +LX-800, and on an H-P DeskJet in FX-80 emulation mode, but may work on +other models. The driver could be adapted to work on Unix systems, but as +distributed, it only works on MS-DOS systems. + +Adds a driver for the Hewlett-Packard DeskJet printer. The driver could +be adapted to work on Unix systems, but as distributed, it only works on +MS-DOS systems. + +The X Windows driver no longer waits for the user to type a character +before bringing up the initial display. + +Adds information to drivers.doc describing how to change the definition of +the device structure and procedure table. + +Extends the tile_rectangle and tile_trapezoid driver procedures to +interpret color0 = color1 = gx_no_color_index as meaning that the tile is +actually colored, not a mask. + +</pre><h3><a name="V2.0_Build_procedures"></a>Build procedures</h3><pre> +Changes the tar file so it puts everything in a directory called gs. + +Removes the -ansi switch for gcc (this was causing problems with <math.h> +on some systems). + +Changes LDPLAT to the string -X, which is appropriate for most Unix +systems (but not for SunOS 4.n). + +Adds EXTRALIBS to the makefile, for specifying additional libraries to be +linked in. + +Adds a 'clean' target for 'make', to get rid of all temporary files, the +binaries, and the executable. + +Changes names of system-specific files from gp-xxx.c to gp_xxx.c. + +Adds support for VMS (gp_vms.c and ghost.dcl). + +Creates a new file gdevs.mak, and reorganizes the other makefiles, so that +the choice of which device driver(s) to include is isolated in a single +line in the platform-specific makefile. + +Changes the standard MS-DOS makefile so it builds for 8088/86 (not 80386), +with neither -DNOPRIVATE nor -DDEBUG. + +Changes the name of the MS-DOS makefile from dos-ega.mak to msdos.mak, and +the Unix makefiles from ux-[g]cc-x.mak to unix-[g]cc.mak. + +Updates drivers.doc to describe how to add new drivers in gdevs.mak. + +Removes gdevs.ps: the drivers are now responsible for specifying the size +of the imaging region. + +</pre><h3><a name="V2.0_Interpreter"></a>Interpreter</h3><pre> +Adds a makefile macro GS_LIB_DEFAULT and an environment variable GS_LIB to +define a search path for the library (initialization and font) files, and +implements the -I switch for the same purpose (replacing -sLIB=, which was +never actually implemented). See interp.doc for details. + +No longer clears the operand stack between interactive inputs. No longer +prints the contents of the operand stack after every input in debug mode. + +Doesn't "eat" the character that the user types to proceed after a +showpage, unless it's an isolated <return>. + +Changes the prompt so that it says + GS> +if the operand stack is empty, or + GS<n> +if there are n > 0 elements on the operand stack. + +Adds -w and -h switches to the command line, equivalent to -dWIDTH= and +-dHEIGHT= except that they require numeric arguments. + +Adds -q (quiet startup) switch to the command line, which suppresses some +initial messages and also has an effect equivalent to -dQUIET. + +Fixes bugs: + - = and == caused an error on some kinds of objects if the object +didn't have read access. + - cvs didn't print operator names. + - The definition of dynamic_begin in iscan.c caused the DEC VMS C +compiler to produce incorrect code. + - mul didn't return a correct (real) result when multiplying a +very large integer by an integer that wasn't very large. + - eq and ne didn't work on files, fonts, save objects, and some +operators. + - The scanner would sometimes blow up on floating point numbers +beginning with a '.'. + - flushfile didn't pop its argument from the stack. + - put and putinterval would store into a packed array. + - a few operators didn't check properly for stack underflow. + - cvrs produced wrong output for radix values greater than 10. + - The scanner would convert upper-case letters in alternate-radix +numbers wrong on Unix systems. + - String comparisons other than equality often produced the wrong +result if the strings were of different lengths. + - An ifelse as the last thing inside a forall would confuse the +execution stack. + - There were some omitted casts and 'private' declarations that +made the GNU compiler unhappy. + - There was a memory leak in the image[mask] operators that caused +516 bytes to be permanently lost each time one of them was used. + - Quoted strings of length greater than 50 and less than 100 would +get mangled when being read in. + - The scanner didn't consume the whitespace character following a +token, so programs that read data out of the program file could get +confused. + - Under rare circumstances, an object of size between 249 and 255 +bytes could get allocated on top of another object. + +Allows bind to bind packed arrays, even though they aren't normally +writable. + +Changes the length operator to allow a name as the argument. (The +PostScript manual doesn't allow this, but implementations apparently do.) + +Changes the setcachedevice operator to allow the bounding box to be +specified as a 4-element array instead of 4 scalars. (The PostScript +manual doesn't allow this, but implementations apparently do.) + +Removes a line from ghost.ps that accidentally disabled the font cache. + +Implements memory devices (makeimagedevice, copyscanlines, and makedevice +for image devices). makeimagedevice is implemented only for 1, 8, 24, and +32 bits per pixel. + +Changes the deviceparams operator so it pushes a mark on the stack below +the parameters. This is to allow for devices that have more than the +standard set of parameters. + +Replaces defaultdevicename with two new operators, getdevice and +devicename. + +Adds a flushpage operator that flushes any outstanding buffered output to +the screen. This is not the same as copypage: on printers, copypage +actually prints a page, whereas flushpage may do nothing; on displays, +flushpage and copypage may both flush output to a server. + +Adds an unread operator for pushing back a character into a file. + +Adds a description of proposed grayimage and colorimage operators to +ghost.doc, even though they aren't implemented yet. + +Changes the name of the currentfileposition operator to fileposition. + +Removes the framedevice operator, since the new device operators supersede +it. + +Adds a writeppmfile operator, for writing the contents of a memory device +to a ppm file. + +Makes Ghostscript work even when the >> operator doesn't sign-extend +negative numbers. (This has not been tested.) + +Adds the Symbol encoding to ghost.ps. + +Adds two new file-related operators, filename and findlibfile. See +ghost.doc and interp.doc for details. + +Adds type1encrypt and type1decrypt operators for manipulating Adobe Type 1 +encoded fonts. + +Changes the imagecharpath and addcharpath operators to type1imagepath and +type1addpath. These operators now work with the Adobe Type 1 font +encoding. + +Adds the type1decryptfile operator for reading Adobe Type 1 encrypted +fonts. + +</pre><h3><a name="V2.0_Library"></a>Library</h3><pre> +Fixes bugs: + - curveto and lineto didn't check for the current point being +defined. + - stringwidth would fail if there was no current point. + - There were omitted casts that made the GNU compiler unhappy. + - Line caps and joins didn't always work. + - Dashed lines didn't work at all. + - If you read out the current matrix while inside a BuildChar +procedure, the result was garbage. + - image[mask] would crash if you gave it a single string with more +than 64K-1 pixels (MS-DOS only). + - Filling with a gray pattern sometimes wrote into pixels beyond +the right edge of the region (MS-DOS only). + - The font cache would mistake fonts for each other if both fonts +had a default (unsupplied) "unique ID". + - When a character was entered into the font cache for the first +time, sometimes it would display as garbage and/or displaced vertically +from its proper position. + +Implements gs_makeimagedevice, gs_copyscanlines, gs_getdevice, +gs_devicename, gs_flushpage, gs_writeppmfile, gs_type1encrypt, +gs_type1decrypt, gs_type1imagepath, and gs_type1addpath procedures +corresponding to the new operators in the interpreter (see preceding +section). + +Changes [gs_]setdevice so that it does an erasepage when it first opens +the device. + +Changes definition of gx_device structure as follows. NOTE: THIS AFFECTS +ALL DRIVERS. + + - Removes bits_from_MSB (which wasn't actually used, in any case). + Ghostscript now assumes officially, as it always did in + practice, that device bitmaps are stored MSB first, i.e., X=0 + corresponds to the 0x80 bit in the first byte. + + - Removes the initial_matrix member, which wasn't actually being + set up. + + - Adds a new member 'name', a string giving the device name. + + - Adds new members 'x_pixels_per_inch' and 'y_pixels_per_inch'. + These are only used by the default initial_matrix procedure + (see below). + + - Adds a new procedure 'output_page'. The default implementation + (gx_default_output_page) just calls the sync_output procedure. + + - Adds a new procedure 'get_initial_matrix'. The default + procedure uses the width, height, and x/y_pixels_per_inch + members to compute the matrix, assuming that X values run from + right to left, and Y values run from top to bottom. + +Changes the names of the allocation procedure types gs_proc_alloc and +gs_proc_free to proc_alloc_t and proc_free_t, and moves them from gs.h to +std.h. + +Makes Ghostscript work even when the >> operator doesn't sign-extend +negative numbers. (This has not been tested.) + +</pre> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/History3.htm b/Master/xemtex/doc/ghostscript/History3.htm new file mode 100644 index 00000000000..88fdbb934a1 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/History3.htm @@ -0,0 +1,8597 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>History of Ghostscript versions 3.n</title> +<!-- $Id: History3.htm,v 1.13.2.11.2.6 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: history3.txt --> +<!-- + WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to + re-create the table of contents here, because it will replace the + hand-edited TOC subheads with a separate subhead for each H2 in + the body of the file. Or if you do, first look at the original + TOC to see how to edit it for visual conciseness. +--> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>History of Ghostscript versions 3.n</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Version3.70p1">Version 3.70 patch 1 (6/24/96)</a> +<ul> +<li><a href="#V3.70p1_Procedures">Procedures</a>, + <a href="#V3.70p1_Drivers">Drivers</a> +</ul> +<li><a href="#Version3.70">Version 3.70 (limited) (6/23/96)</a> +<ul> +<li><a href="#V3.70_Documentation">Documentation</a>, + <a href="#V3.70_Procedures">Procedures</a>, + <a href="#V3.70_Drivers">Drivers</a>, + <a href="#V3.70_Platforms">Platforms</a>, + <a href="#V3.70_Fonts">Fonts</a>, + <a href="#V3.70_Interpreter">Interpreter</a>, + <a href="#V3.70_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.70_Streams">Streams</a>, + <a href="#V3.70_Library">Library</a> +</ul> +<li><a href="#Version3.69">Version 3.69 (limited) (6/14/96)</a> +<ul> +<li><a href="#V3.69_Documentation">Documentation</a>, + <a href="#V3.69_Procedures">Procedures</a>, + <a href="#V3.69_Utilities">Utilities</a>, + <a href="#V3.69_Drivers">Drivers</a>, + <a href="#V3.69_Platforms">Platforms</a>, + <a href="#V3.69_Fonts">Fonts</a>, + <a href="#V3.69_Interpreter">Interpreter</a>, + <a href="#V3.69_Library">Library</a> +</ul> +<li><a href="#Version3.68p4">Version 3.68 patch 4 (5/23/96)</a> +<ul> +<li><a href="#V3.68p4_Documentation">Documentation</a>, + <a href="#V3.68p4_Procedures">Procedures</a>, + <a href="#V3.68p4_Drivers">Drivers</a>, + <a href="#V3.68p4_Platforms">Platforms</a>, + <a href="#V3.68p4_Fonts">Fonts</a>, + <a href="#V3.68p4_Interpreter">Interpreter</a>, + <a href="#V3.68p4_Library">Library</a> +</ul> +<li><a href="#Version3.68p3">Version 3.68 patch 3 (5/17/96)</a> +<ul> +<li><a href="#V3.68p3_Procedures">Procedures</a>, + <a href="#V3.68p3_Utilities">Utilities</a>, + <a href="#V3.68p3_Drivers">Drivers</a>, + <a href="#V3.68p3_Platforms">Platforms</a>, + <a href="#V3.68p3_Interpreter">Interpreter</a>, + <a href="#V3.68p3_Library">Library</a> +</ul> +<li><a href="#Version3.68p2">Version 3.68 patch 2 (5/13/96)</a> +<ul> +<li><a href="#V3.68p2_Documentation">Documentation</a>, + <a href="#V3.68p2_Procedures">Procedures</a>, + <a href="#V3.68p2_Drivers">Drivers</a>, + <a href="#V3.68p2_Interpreter">Interpreter</a>, + <a href="#V3.68p2_Streams">Streams</a>, + <a href="#V3.68p2_Library">Library</a> +</ul> +<li><a href="#Version3.68p1">Version 3.68 patch 1 (5/10/96)</a> +<ul> +<li><a href="#V3.68p1_Procedures">Procedures</a> +</ul> +<li><a href="#Version3.68">Version 3.68 (limited) (5/9/96)</a> +<ul> +<li><a href="#V3.68_Documentation">Documentation</a>, + <a href="#V3.68_Procedures">Procedures</a>, + <a href="#V3.68_Utilities">Utilities</a>, + <a href="#V3.68_Drivers">Drivers</a>, + <a href="#V3.68_Platforms">Platforms</a>, + <a href="#V3.68_Fonts">Fonts</a>, + <a href="#V3.68_Interpreter">Interpreter</a>, + <a href="#V3.68_Streams">Streams</a>, + <a href="#V3.68_Library">Library</a> +</ul> +<li><a href="#Version3.67">Version 3.67 (limited) (4/12/96)</a> +<ul> +<li><a href="#V3.67_Documentation">Documentation</a>, + <a href="#V3.67_Procedures">Procedures</a>, + <a href="#V3.67_Platforms">Platforms</a>, + <a href="#V3.67_Interpreter">Interpreter</a>, + <a href="#V3.67_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.67_Library">Library</a> +</ul> +<li><a href="#Version3.66">Version 3.66 (limited) (4/8/96)</a> +<ul> +<li><a href="#V3.66_Documentation">Documentation</a>, + <a href="#V3.66_Procedures">Procedures</a>, + <a href="#V3.66_Utilities">Utilities</a>, + <a href="#V3.66_Drivers">Drivers</a>, + <a href="#V3.66_Platforms">Platforms</a>, + <a href="#V3.66_Fonts">Fonts</a>, + <a href="#V3.66_Interpreter">Interpreter</a>, + <a href="#V3.66_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.66_Streams">Streams</a>, + <a href="#V3.66_Library">Library</a> +</ul> +<li><a href="#Version3.65">Version 3.65 (limited) (3/9/96)</a> +<ul> +<li><a href="#V3.65_Documentation">Documentation</a>, + <a href="#V3.65_Procedures">Procedures</a>, + <a href="#V3.65_Utilities">Utilities</a>, + <a href="#V3.65_Drivers">Drivers</a>, + <a href="#V3.65_Platforms">Platforms</a>, + <a href="#V3.65_Interpreter">Interpreter</a>, + <a href="#V3.65_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.65_Streams">Streams</a>, + <a href="#V3.65_Library">Library</a> +</ul> +<li><a href="#Version3.64">Version 3.64 (limited, incremental) (1/27/96)</a> +<ul> +<li><a href="#V3.64_Documentation">Documentation</a>, + <a href="#V3.64_Procedures">Procedures</a>, + <a href="#V3.64_Utilities">Utilities</a>, + <a href="#V3.64_Drivers">Drivers</a>, + <a href="#V3.64_Platforms">Platforms</a>, + <a href="#V3.64_Interpreter">Interpreter</a>, + <a href="#V3.64_Streams">Streams</a>, + <a href="#V3.64_Library">Library</a> +</ul> +<li><a href="#Version3.63">Version 3.63 (limited, incremental) (1/14/96)</a> +<ul> +<li><a href="#V3.63_Documentation">Documentation</a>, + <a href="#V3.63_Procedures">Procedures</a>, + <a href="#V3.63_Utilities">Utilities</a>, + <a href="#V3.63_Drivers">Drivers</a>, + <a href="#V3.63_Platforms">Platforms</a>, + <a href="#V3.63_Interpreter">Interpreter</a>, + <a href="#V3.63_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.63_Streams">Streams</a>, + <a href="#V3.63_Library">Library</a> +</ul> +<li><a href="#Version3.62">Version 3.62 (limited, incremental) (12/26/95)</a> +<ul> +<li><a href="#V3.62_Documentation">Documentation</a>, + <a href="#V3.62_Procedures">Procedures</a>, + <a href="#V3.62_Interpreter">Interpreter</a>, + <a href="#V3.62_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.62_Library">Library</a> +</ul> +<li><a href="#Version3.61">Version 3.61 (limited) (12/10/95)</a> +<ul> +<li><a href="#V3.61_Documentation">Documentation</a>, + <a href="#V3.61_Procedures">Procedures</a>, + <a href="#V3.61_Utilities">Utilities</a>, + <a href="#V3.61_Drivers">Drivers</a>, + <a href="#V3.61_Platforms">Platforms</a>, + <a href="#V3.61_Fonts">Fonts</a>, + <a href="#V3.61_Interpreter">Interpreter</a>, + <a href="#V3.61_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.61_Streams">Streams</a>, + <a href="#V3.61_Library">Library</a> +</ul> +<li><a href="#Version3.60">Version 3.60 (limited) (11/20/95)</a> +<ul> +<li><a href="#V3.60_Documentation">Documentation</a>, + <a href="#V3.60_Procedures">Procedures</a>, + <a href="#V3.60_Utilities">Utilities</a>, + <a href="#V3.60_Drivers">Drivers</a>, + <a href="#V3.60_Platforms">Platforms</a>, + <a href="#V3.60_Fonts">Fonts</a>, + <a href="#V3.60_Interpreter">Interpreter</a>, + <a href="#V3.60_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.60_Streams">Streams</a>, + <a href="#V3.60_Library">Library</a> +</ul> +<li><a href="#Version3.53">Version 3.53 (1/10/96)</a> +<ul> +<li><a href="#V3.53_Documentation">Documentation</a>, + <a href="#V3.53_Procedures">Procedures</a>, + <a href="#V3.53_Utilities">Utilities</a>, + <a href="#V3.53_Drivers">Drivers</a>, + <a href="#V3.53_Platforms">Platforms</a>, + <a href="#V3.53_Fonts">Fonts</a>, + <a href="#V3.53_Interpreter">Interpreter</a>, + <a href="#V3.53_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.53_Streams">Streams</a>, + <a href="#V3.53_Library">Library</a> +</ul> +<li><a href="#Version3.52">Version 3.52 (limited) (10/6/95)</a> +<ul> +<li><a href="#V3.52_Procedures">Procedures</a>, + <a href="#V3.52_Interpreter">Interpreter</a>, + <a href="#V3.52_Library">Library</a> +</ul> +<li><a href="#Version3.51">Version 3.51 (9/27/95)</a> +<ul> +<li><a href="#V3.51_Documentation">Documentation</a>, + <a href="#V3.51_Procedures">Procedures</a>, + <a href="#V3.51_Utilities">Utilities</a>, + <a href="#V3.51_Drivers">Drivers</a>, + <a href="#V3.51_Platforms">Platforms</a>, + <a href="#V3.51_Interpreter">Interpreter</a>, + <a href="#V3.51_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.51_Library">Library</a> +</ul> +<li><a href="#Version3.50">Version 3.50 (limited) (9/24/95)</a> +<ul> +<li><a href="#V3.50_Procedures">Procedures</a>, + <a href="#V3.50_Utilities">Utilities</a>, + <a href="#V3.50_Drivers">Drivers</a>, + <a href="#V3.50_Interpreter">Interpreter</a>, + <a href="#V3.50_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.50_Library">Library</a> +</ul> +<li><a href="#Version3.49">Version 3.49 (limited) (9/20/95)</a> +<ul> +<li><a href="#V3.49_Documentation">Documentation</a>, + <a href="#V3.49_Procedures">Procedures</a>, + <a href="#V3.49_Drivers">Drivers</a>, + <a href="#V3.49_Platforms">Platforms</a>, + <a href="#V3.49_Interpreter">Interpreter</a>, + <a href="#V3.49_Library">Library</a> +</ul> +<li><a href="#Version3.48">Version 3.48 (limited) (9/17/95)</a> +<ul> +<li><a href="#V3.48_Documentation">Documentation</a>, + <a href="#V3.48_Procedures">Procedures</a>, + <a href="#V3.48_Drivers">Drivers</a>, + <a href="#V3.48_Platforms">Platforms</a>, + <a href="#V3.48_Interpreter">Interpreter</a>, + <a href="#V3.48_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.48_Library">Library</a> +</ul> +<li><a href="#Version3.47">Version 3.47 (limited) (9/14/95)</a> +<ul> +<li><a href="#V3.47_Documentation">Documentation</a>, + <a href="#V3.47_Procedures">Procedures</a>, + <a href="#V3.47_Utilities">Utilities</a>, + <a href="#V3.47_Drivers">Drivers</a>, + <a href="#V3.47_Platforms">Platforms</a>, + <a href="#V3.47_Fonts">Fonts</a>, + <a href="#V3.47_Interpreter">Interpreter</a>, + <a href="#V3.47_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.47_Streams">Streams</a>, + <a href="#V3.47_Library">Library</a> +</ul> +<li><a href="#Version3.46">Version 3.46 (limited) (9/4/95)</a> +<ul> +<li><a href="#V3.46_Documentation">Documentation</a>, + <a href="#V3.46_Procedures">Procedures</a>, + <a href="#V3.46_Utilities">Utilities</a>, + <a href="#V3.46_Drivers">Drivers</a>, + <a href="#V3.46_Platforms">Platforms</a>, + <a href="#V3.46_Interpreter">Interpreter</a>, + <a href="#V3.46_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.46_Library">Library</a> +</ul> +<li><a href="#Version3.45">Version 3.45 (limited) (8/27/95)</a> +<ul> +<li><a href="#V3.45_Documentation">Documentation</a>, + <a href="#V3.45_Procedures">Procedures</a>, + <a href="#V3.45_Utilities">Utilities</a>, + <a href="#V3.45_Drivers">Drivers</a>, + <a href="#V3.45_Platforms">Platforms</a>, + <a href="#V3.45_Interpreter">Interpreter</a>, + <a href="#V3.45_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.45_Streams">Streams</a>, + <a href="#V3.45_Library">Library</a> +</ul> +<li><a href="#Version3.44">Version 3.44 (limited) (8/21/95)</a> +<ul> +<li><a href="#V3.44_Documentation">Documentation</a>, + <a href="#V3.44_Procedures">Procedures</a>, + <a href="#V3.44_Utilities">Utilities</a>, + <a href="#V3.44_Drivers">Drivers</a>, + <a href="#V3.44_Platforms">Platforms</a>, + <a href="#V3.44_Interpreter">Interpreter</a>, + <a href="#V3.44_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.44_Library">Library</a> +</ul> +<li><a href="#Version3.43">Version 3.43 (limited) (8/10/95)</a> +<ul> +<li><a href="#V3.43_Documentation">Documentation</a>, + <a href="#V3.43_Procedures">Procedures</a>, + <a href="#V3.43_Platforms">Platforms</a>, + <a href="#V3.43_Fonts">Fonts</a>, + <a href="#V3.43_Interpreter">Interpreter</a>, + <a href="#V3.43_Streams">Streams</a>, + <a href="#V3.43_Library">Library</a> +</ul> +<li><a href="#Version3.42">Version 3.42 (limited) (8/2/95)</a> +<ul> +<li><a href="#V3.42_Documentation">Documentation</a>, + <a href="#V3.42_Procedures">Procedures</a>, + <a href="#V3.42_Platforms">Platforms</a>, + <a href="#V3.42_Interpreter">Interpreter</a>, + <a href="#V3.42_Streams">Streams</a>, + <a href="#V3.42_Library">Library</a> +</ul> +<li><a href="#Version3.41">Version 3.41 (limited) (7/27/95)</a> +<ul> +<li><a href="#V3.41_Documentation">Documentation</a>, + <a href="#V3.41_Procedures">Procedures</a>, + <a href="#V3.41_Utilities">Utilities</a>, + <a href="#V3.41_Drivers">Drivers</a>, + <a href="#V3.41_Platforms">Platforms</a>, + <a href="#V3.41_Fonts">Fonts</a>, + <a href="#V3.41_Interpreter">Interpreter</a>, + <a href="#V3.41_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.41_Streams">Streams</a>, + <a href="#V3.41_Library">Library</a> +</ul> +<li><a href="#Version3.40">Version 3.40 (limited) (6/28/95)</a> +<ul> +<li><a href="#V3.40_Documentation">Documentation</a>, + <a href="#V3.40_Procedures">Procedures</a>, + <a href="#V3.40_Utilities">Utilities</a>, + <a href="#V3.40_Platforms">Platforms</a>, + <a href="#V3.40_Interpreter">Interpreter</a>, + <a href="#V3.40_Streams">Streams</a>, + <a href="#V3.40_Library">Library</a> +</ul> +<li><a href="#Version3.39">Version 3.39 (limited) (6/24/95)</a> +<ul> +<li><a href="#V3.39_Documentation">Documentation</a>, + <a href="#V3.39_Procedures">Procedures</a>, + <a href="#V3.39_Utilities">Utilities</a>, + <a href="#V3.39_Platforms">Platforms</a>, + <a href="#V3.39_Fonts">Fonts</a>, + <a href="#V3.39_Interpreter">Interpreter</a>, + <a href="#V3.39_Streams">Streams</a>, + <a href="#V3.39_Library">Library</a> +</ul> +<li><a href="#Version3.38">Version 3.38 (limited) (6/18/95)</a> +<ul> +<li><a href="#V3.38_Documentation">Documentation</a>, + <a href="#V3.38_Procedures">Procedures</a>, + <a href="#V3.38_Utilities">Utilities</a>, + <a href="#V3.38_Drivers">Drivers</a>, + <a href="#V3.38_Platforms">Platforms</a>, + <a href="#V3.38_Fonts">Fonts</a>, + <a href="#V3.38_Interpreter">Interpreter</a>, + <a href="#V3.38_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.38_Streams">Streams</a>, + <a href="#V3.38_Library">Library</a> +</ul> +<li><a href="#Version3.37">Version 3.37 (limited) (5/11/95)</a> +<ul> +<li><a href="#V3.37_Documentation">Documentation</a>, + <a href="#V3.37_Procedures">Procedures</a>, + <a href="#V3.37_Utilities">Utilities</a>, + <a href="#V3.37_Drivers">Drivers</a>, + <a href="#V3.37_Fonts">Fonts</a>, + <a href="#V3.37_Interpreter_PostScript">Interpreter (PostScript)</a>, + <a href="#V3.37_Interpreter_PDF">Interpreter (PDF)</a> +</ul> +<li><a href="#Version3.36">Version 3.36 (limited) (5/4/95)</a> +<ul> +<li><a href="#V3.36_Documentation">Documentation</a>, + <a href="#V3.36_Procedures">Procedures</a>, + <a href="#V3.36_Drivers">Drivers</a>, + <a href="#V3.36_Interpreter">Interpreter</a>, + <a href="#V3.36_Library">Library</a> +</ul> +<li><a href="#Version3.35">Version 3.35 (internal) (5/2/95)</a> +<ul> +<li><a href="#V3.35_Documentation">Documentation</a>, + <a href="#V3.35_Procedures">Procedures</a>, + <a href="#V3.35_Utilities">Utilities</a>, + <a href="#V3.35_Drivers">Drivers</a>, + <a href="#V3.35_Platforms">Platforms</a>, + <a href="#V3.35_Fonts">Fonts</a>, + <a href="#V3.35_Interpreter">Interpreter</a>, + <a href="#V3.35_Library">Library</a> +</ul> +<li><a href="#Version3.34">Version 3.34 (internal) (4/18/95)</a> +<ul> +<li><a href="#V3.34_Documentation">Documentation</a>, + <a href="#V3.34_Procedures">Procedures</a>, + <a href="#V3.34_Interpreter">Interpreter</a>, + <a href="#V3.34_Library">Library</a> +</ul> +<li><a href="#Version3.33">Version 3.33 (4/13/95)</a> +<ul> +<li><a href="#V3.33_Documentation">Documentation</a>, + <a href="#V3.33_Procedures">Procedures</a>, + <a href="#V3.33_Utilities">Utilities</a>, + <a href="#V3.33_Drivers">Drivers</a>, + <a href="#V3.33_Platforms">Platforms</a>, + <a href="#V3.33_Fonts">Fonts</a>, + <a href="#V3.33_Library">Library</a> +</ul> +<li><a href="#Version3.32">Version 3.32 (4/7/95)</a> +<ul> +<li><a href="#V3.32_Documentation">Documentation</a>, + <a href="#V3.32_Procedures">Procedures</a>, + <a href="#V3.32_Utilities">Utilities</a>, + <a href="#V3.32_Drivers">Drivers</a>, + <a href="#V3.32_Platforms">Platforms</a>, + <a href="#V3.32_Interpreter">Interpreter</a>, + <a href="#V3.32_Streams">Streams</a>, + <a href="#V3.32_Library">Library</a> +</ul> +<li><a href="#Version3.31">Version 3.31 (4/2/95)</a> +<ul> +<li><a href="#V3.31_Documentation">Documentation</a>, + <a href="#V3.31_Procedures">Procedures</a>, + <a href="#V3.31_Utilities">Utilities</a>, + <a href="#V3.31_Drivers">Drivers</a>, + <a href="#V3.31_Platforms">Platforms</a>, + <a href="#V3.31_Interpreter">Interpreter</a>, + <a href="#V3.31_Streams">Streams</a>, + <a href="#V3.31_Library">Library</a> +</ul> +<li><a href="#Version3.30">Version 3.30 (beta) (3/21/95)</a> +<ul> +<li><a href="#V3.30_Documentation">Documentation</a>, + <a href="#V3.30_Utilities">Utilities</a>, + <a href="#V3.30_Drivers">Drivers</a>, + <a href="#V3.30_Interpreter_PostScript">Interpreter (PostScript)</a>, + <a href="#V3.30_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.30_Library">Library</a> +</ul> +<li><a href="#Version3.29">Version 3.29 (internal) (3/8/95)</a> +<ul> +<li><a href="#V3.29_Documentation">Documentation</a>, + <a href="#V3.29_Procedures">Procedures</a>, + <a href="#V3.29_Utilities">Utilities</a>, + <a href="#V3.29_Fonts">Fonts</a>, + <a href="#V3.29_Drivers">Drivers</a>, + <a href="#V3.29_Interpreter_PostScript">Interpreter (PostScript)</a>, + <a href="#V3.29_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.29_Streams">Streams</a>, + <a href="#V3.29_Library">Library</a> +</ul> +<li><a href="#Version3.28">Version 3.28 (beta) (2/13/95)</a> +<ul> +<li><a href="#V3.28_Documentation">Documentation</a>, + <a href="#V3.28_Procedures">Procedures</a>, + <a href="#V3.28_Utilities">Utilities</a>, + <a href="#V3.28_Drivers">Drivers</a>, + <a href="#V3.28_Interpreter">Interpreter</a>, + <a href="#V3.28_Library">Library</a> +</ul> +<li><a href="#Version3.27">Version 3.27 (beta)(withdrawn) (2/8/95)</a> +<ul> +<li><a href="#V3.27_Documentation">Documentation</a>, + <a href="#V3.27_Procedures">Procedures</a>, + <a href="#V3.27_Utilities">Utilities</a>, + <a href="#V3.27_Drivers">Drivers</a>, + <a href="#V3.27_Platforms">Platforms</a>, + <a href="#V3.27_Fonts">Fonts</a>, + <a href="#V3.27_Interpreter">Interpreter</a>, + <a href="#V3.27_Streams">Streams</a>, + <a href="#V3.27_Library">Library</a> +</ul> +<li><a href="#Version3.26">Version 3.26 (beta) (2/1/95)</a> +<ul> +<li><a href="#V3.26_Documentation">Documentation</a>, + <a href="#V3.26_Procedures">Procedures</a>, + <a href="#V3.26_Utilities">Utilities</a>, + <a href="#V3.26_Drivers">Drivers</a>, + <a href="#V3.26_Platforms">Platforms</a>, + <a href="#V3.26_Interpreter">Interpreter</a>, + <a href="#V3.26_Streams">Streams</a>, + <a href="#V3.26_Library">Library</a> +</ul> +<li><a href="#Version3.25">Version 3.25 (beta) (1/24/95)</a> +<ul> +<li><a href="#V3.25_Documentation">Documentation</a>, + <a href="#V3.25_Procedures">Procedures</a>, + <a href="#V3.25_Drivers">Drivers</a>, + <a href="#V3.25_Platforms">Platforms</a>, + <a href="#V3.25_Interpreter">Interpreter</a>, + <a href="#V3.25_Library">Library</a> +</ul> +<li><a href="#Version3.24">Version 3.24 (beta) (1/17/95)</a> +<ul> +<li><a href="#V3.24_Documentation">Documentation</a>, + <a href="#V3.24_Procedures">Procedures</a>, + <a href="#V3.24_Drivers">Drivers</a>, + <a href="#V3.24_Platforms">Platforms</a>, + <a href="#V3.24_Fonts">Fonts</a>, + <a href="#V3.24_Interpreter">Interpreter</a>, + <a href="#V3.24_Interpreter_PostScript">Interpreter (PostScript)</a>, + <a href="#V3.24_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.24_Streams">Streams</a>, + <a href="#V3.24_Library">Library</a> +</ul> +<li><a href="#Version3.23">Version 3.23 (beta) (1/5/95)</a> +<ul> +<li><a href="#V3.23_Documentation">Documentation</a>, + <a href="#V3.23_Procedures">Procedures</a>, + <a href="#V3.23_Utilities">Utilities</a>, + <a href="#V3.23_Drivers">Drivers</a>, + <a href="#V3.23_Platforms">Platforms</a>, + <a href="#V3.23_Fonts">Fonts</a>, + <a href="#V3.23_Interpreter_PostScript">Interpreter (PostScript)</a>, + <a href="#V3.23_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V3.23_Streams">Streams</a>, + <a href="#V3.23_Library">Library</a> +</ul> +<li><a href="#Version3.22">Version 3.22 (beta) (11/30/94)</a> +<ul> +<li><a href="#V3.22_Procedures">Procedures</a>, + <a href="#V3.22_Drivers">Drivers</a>, + <a href="#V3.22_Platforms">Platforms</a>, + <a href="#V3.22_Fonts">Fonts</a>, + <a href="#V3.22_Interpreter">Interpreter</a>, + <a href="#V3.22_Streams">Streams</a>, + <a href="#V3.22_Library">Library</a> +</ul> +<li><a href="#Version3.21">Version 3.21 (beta) (11/17/94)</a> +<ul> +<li><a href="#V3.21_Documentation">Documentation</a>, + <a href="#V3.21_Procedures">Procedures</a>, + <a href="#V3.21_Utilities">Utilities</a>, + <a href="#V3.21_Drivers">Drivers</a>, + <a href="#V3.21_Platforms">Platforms</a>, + <a href="#V3.21_Fonts">Fonts</a>, + <a href="#V3.21_Interpreter">Interpreter</a>, + <a href="#V3.21_Streams">Streams</a>, + <a href="#V3.21_Library">Library</a> +</ul> +<li><a href="#Version3.20">Version 3.20 (beta) (10/31/94)</a> +<ul> +<li><a href="#V3.20_Documentation">Documentation</a>, + <a href="#V3.20_Procedures">Procedures</a>, + <a href="#V3.20_Utilities">Utilities</a>, + <a href="#V3.20_Drivers">Drivers</a>, + <a href="#V3.20_Platforms">Platforms</a>, + <a href="#V3.20_Fonts">Fonts</a>, + <a href="#V3.20_Interpreters">Interpreters</a>, + <a href="#V3.20_Library">Library</a> +</ul> +<li><a href="#Version3.13">Version 3.13(private) (10/3/94)</a> +<ul> +<li><a href="#V3.13_Documentation">Documentation</a>, + <a href="#V3.13_Procedures">Procedures</a>, + <a href="#V3.13_Utilities">Utilities</a>, + <a href="#V3.13_Drivers">Drivers</a>, + <a href="#V3.13_Platforms">Platforms</a>, + <a href="#V3.13_Fonts">Fonts</a>, + <a href="#V3.13_Interpreter">Interpreter</a>, + <a href="#V3.13_Streams">Streams</a>, + <a href="#V3.13_Library">Library</a> +</ul> +<li><a href="#Version3.12">Version 3.12 (9/29/94)</a> +<ul> +<li><a href="#V3.12_Documentation">Documentation</a>, + <a href="#V3.12_Procedures">Procedures</a>, + <a href="#V3.12_Drivers">Drivers</a>, + <a href="#V3.12_Platforms">Platforms</a>, + <a href="#V3.12_Interpreter">Interpreter</a>, + <a href="#V3.12_Streams">Streams</a>, + <a href="#V3.12_Library">Library</a> +</ul> +<li><a href="#Version3.1.1">Version 3.1.1 (9/25/94)</a> +<ul> +<li><a href="#V3.1.1_Documentation">Documentation</a>, + <a href="#V3.1.1_Procedures">Procedures</a>, + <a href="#V3.1.1_Drivers">Drivers</a>, + <a href="#V3.1.1_Platforms">Platforms</a>, + <a href="#V3.1.1_Interpreter">Interpreter</a> +</ul> +<li><a href="#Version3.1">Version 3.1 (9/20/94)</a> +<ul> +<li><a href="#V3.1_Documentation">Documentation</a>, + <a href="#V3.1_Procedures">Procedures</a>, + <a href="#V3.1_Drivers">Drivers</a>, + <a href="#V3.1_Interpreter">Interpreter</a>, + <a href="#V3.1_Streams">Streams</a>, + <a href="#V3.1_Library">Library</a> +</ul> +<li><a href="#Version3.0.3">Version 3.0.3 (9/16/94)</a> +<ul> +<li><a href="#V3.0.3_Documentation">Documentation</a>, + <a href="#V3.0.3_Procedures">Procedures</a>, + <a href="#V3.0.3_Utilities">Utilities</a>, + <a href="#V3.0.3_Drivers">Drivers</a>, + <a href="#V3.0.3_Platforms">Platforms</a>, + <a href="#V3.0.3_Fonts">Fonts</a>, + <a href="#V3.0.3_Streams">Streams</a>, + <a href="#V3.0.3_Interpreter">Interpreter</a>, + <a href="#V3.0.3_Library">Library</a> +</ul> +<li><a href="#Version3.02">Version 3.02 (8/30/94)</a> +<ul> +<li><a href="#V3.02_Documentation">Documentation</a>, + <a href="#V3.02_Procedures">Procedures</a>, + <a href="#V3.02_Utilities">Utilities</a>, + <a href="#V3.02_Drivers">Drivers</a>, + <a href="#V3.02_Platforms">Platforms</a>, + <a href="#V3.02_Fonts">Fonts</a>, + <a href="#V3.02_Interpreter">Interpreter</a>, + <a href="#V3.02_Streams">Streams</a>, + <a href="#V3.02_Library">Library</a> +</ul> +<li><a href="#Version3.01">Version 3.01 (8/14/94)</a> +<ul> +<li><a href="#V3.01_Documentation">Documentation</a>, + <a href="#V3.01_Procedures">Procedures</a>, + <a href="#V3.01_Utilities">Utilities</a>, + <a href="#V3.01_Drivers">Drivers</a>, + <a href="#V3.01_Platforms">Platforms</a>, + <a href="#V3.01_Fonts">Fonts</a>, + <a href="#V3.01_Interpreter">Interpreter</a>, + <a href="#V3.01_Streams">Streams</a>, + <a href="#V3.01_Library">Library</a> +</ul> +<li><a href="#Version3.0">Version 3.0 (8/1/94)</a> +<ul> +<li><a href="#V3.0_Documentation">Documentation</a>, + <a href="#V3.0_Procedures">Procedures</a>, + <a href="#V3.0_Utilities">Utilities</a>, + <a href="#V3.0_Drivers">Drivers</a>, + <a href="#V3.0_Platforms">Platforms</a>, + <a href="#V3.0_Fonts">Fonts</a>, + <a href="#V3.0_Interpreter">Interpreter</a>, + <a href="#V3.0_Streams">Streams</a>, + <a href="#V3.0_Library">Library</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document is a history of Ghostscript releases numbered 3.n. For more +recent changes, see the the other history documents and, for the latest +versions, the news: + +<blockquote> +<a href="News.htm">News</a><br> +<a href="History4.htm">History of Ghostscript versions 4.n</a><br> +History of Ghostscript versions 3.n (this document)<br> +<a href="History2.htm">History of Ghostscript versions 2.n</a><br> +<a href="History1.htm">History of Ghostscript versions 1.n</a> +</blockquote> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<h2><a name="Version3.70p1"></a>Version 3.70 patch 1 (6/24/96)</h2> + +<p> +This contains a few last-minute patches before the release. + +<h3><a name="V3.70p1_Procedures"></a>Procedures</h3><pre> +Comments out the color inkjet drivers in the cc-based makefile, because a +bug in Sun's cc prevents them from compiling. (cc-head.mak) + +</pre><h3><a name="V3.70p1_Drivers"></a>Drivers</h3><pre> +Fixes bugs: + - The os2prn driver smashed memory. (gdevos2p.c) + - Some initialized structures weren't declared 'static'. +(gdevpdf.c, gdevpdfm.c) + - The PNG driver wouldn't compile with some older versions of the +PNG library. (gdevpng.c) + +</pre> + +<h2><a name="Version3.70"></a>Version 3.70 (limited) (6/23/96)</h2> + +<p> +This is the candidate fileset for 4.0. Aside from one optimization +for the PDF writer, the only changes are bug fixes. + +<h3><a name="V3.70_Documentation"></a>Documentation</h3><pre> + +Renames all the documentation files from *.doc to *.txt, since the .doc +extension didn't give any information about the format of the file. +(readme, *.doc, *.txt) + +Notes that IJG JPEG library v6[a] is now required. (jpeg.mak) + +Brings ps2pdf.1 up to date. (ps2pdf.1) + +Adds a new file describing Aladdin's C coding practices. (c-style.txt) + +Updates the man pages to refer to version 4.0. (gs.1, pdf2ps.1, ps2ascii.1, +ps2pdf.1) + +</pre><h3><a name="V3.70_Procedures"></a>Procedures</h3><pre> + +Changes some file names to fit within the MS-DOS 8.3 limit. (gs.mak) + +Adds the PDF writer to the remaining 32-bit configurations (Watcom, OS/2, +MSC). (watc.mak, watcwin.mak, os2.mak, msc.mak, msvcwint.mak) + +Changes the -sFONTMAP= switch so it can take a list of font names, like a +search path. (use.txt) + +</pre><h3><a name="V3.70_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Signed and unsigned values were mixed inconsistently. (gdevcdj.c) + - PDF files could contain e-format floating point numbers, which the +PDF specification doesn't allow. (gdevpdfx.h, gdevpdf*.c) + - The PDF writer didn't handle glyphshow properly. (gs_pdfwr.ps) + - The PDF writer did the wrong thing with fonts whose FontMatrix had +a non-zero translation component. (gs_pdfwr.ps, gdevpdft.c) + - The stand-alone bounding box device could crash when setting +parameters. (gdevbbox.c) + - The mswinpr2 driver smashed memory. (gdevwpr2.c) + +Changes the PDF writer so that if it encounters a re-encoded character, it +tries to map it to an encoded character in the standard (ISO Latin-1) +encoding rather than converting the entire string containing it to a bitmap. +This dramatically improves output file size for files with a few divergently +encoded characters, but it may cause the text in the PDF file to differ from +the text in the PostScript input. (gdevpdft.c) + +Disallows BitsPerPixel=16 in the MS Windows and OS/2 drivers, since this bit +depth is not supported by Windows and would require special extra buffering. +(install.txt, dwtext.h, dwtext.cpp, gdevmswn.c, gdevpm.c, gdevwpr2.c) + +</pre><h3><a name="V3.70_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - On the PC platforms, file names weren't changed to reflect the +value of CONFIG. (gs.mak, bc*.mak, ms*.mak, os2.mak, tc*.mak, watc*.mak, +wccommon.mak) + +Modifies some makefiles for greater reusability. (bclib.mak, watclib.mak) + +</pre><h3><a name="V3.70_Fonts"></a>Fonts</h3><pre> + +Changes the font searching rules in the following NON-BACKWARD-COMPATIBLE +way: (gs_fonts.ps, gs_res.ps) + - -sFONTMAP=files specifies a list of files containing fontmaps; +previously, it specified only a single fontmap file. + - If -sFONTMAP= is not used, the interpreter reads the Fontmaps from +*all* directories on the search path, and does so even if FONTPATH or +GS_FONTPATH is set; previously, it read only the first Fontmap, and only if +[GS_]FONTPATH was not set. + - Fontmap(s) take precedence over [GS_]FONTPATH; previously, +[GS_]FONTPATH caused Fontmap to be ignored. (You can still force Fontmap to +be ignored with -dNOFONTMAP.) + - Earlier [GS_]FONTPATH entries take precedence over later; +previously, later entries took precedence over earlier. Note that this is +different from Fontmap: earlier Fontmaps in the search path take precedence +over later, but within a single Fontmap, later entries take precedence over +earlier (for backward compatibility). + - [GS_]FONTPATH is consulted only if there is no Fontmap entry for a +font, or no Fontmap entry leads to successful loading; previously, +[GS_]FONTPATH was always consulted at startup. + - If loading a font fails, the interpreter tries the next Fontmap +entry; previously, it fell back to font substitution. + +</pre><h3><a name="V3.70_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Filters didn't peek ahead for an EOD (see Streams below). +(zfileio.c, zpaint.c) + +Splits up a file to allow internal access to user and system parameters even +in Level 1. (zmisc2.c, zusparam.c) + +Adds LIBPATH as a predefined name in systemdict. Its value is an array of +strings comprising the library search path. (imain.c) + +</pre><h3><a name="V3.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - A Dests dictionary entry with an array (rather than a dictionary) +value caused an error. (pdf_main.ps) + - Rotated pages could have incorrect translation and/or clipping. +(pdf_main.ps) + +</pre><h3><a name="V3.70_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - If a buffer boundary fell just before an EOD, and the client read +exactly as much data as was present before the EOD, filters didn't consume +the EOD. (This is required as a tricky consequence of the Adobe +specification.) (stream.h, strimpl.h, stream.c) + +</pre><h3><a name="V3.70_Library"></a>Library</h3><pre> + +Fixes bugs: + - An extra column of bits could get turned on at the right edge of +masked or monochrome images. (gximage2.c) + - Rasterizing very long curves could cause arithmetic errors or +floating point overflows. (gxpcopy.c) + - Banding with large line widths could truncate curves or introduce +spurious lines. (gxclpath.c) + +</pre> + +<hr> + +<h2><a name="Version3.69"></a>Version 3.69 (limited) (6/14/96)</h2> + +<p> +More bug fixes, plus one irresistible new feature: the ability to use +TrueType fonts as freely as Type 1 fonts. Also, one new feature (outside +clipping) that was needed for Aladdin's PCL XL project. We incremented the +version number because of the change in trapezoid and path filling (see +under Library below). + +<h3><a name="V3.69_Documentation"></a>Documentation</h3><pre> +Brings documentation about fonts up to date. (fonts.doc) + +Updates current.doc to reflect changes since 3.53. (current.doc) + +Updates the DLL documentation to reflect recent changes. (dll.doc) + +Documents a workaround for the code generation bug in gcc 2.7.x. (make.doc) + +Changes the contact information for potential commercial customers in +Europe. (new-user.doc) + +Updates the OS/2 documentation to make it current. (install.doc, make.doc) + +Documents -dCOLORSCREEN=0. (use.doc) + +</pre><h3><a name="V3.69_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - 'make clean' didn't work in the Watcom environment. +(wmakebat.bat, gs.mak, msc.mak, msvcwint.mak, os2.mak, tccommon.mak, +unixhead.mak, wccommon.mak) + - The X11 libraries were listed in an incorrect order. +(ansihead.mak, cc-head.mak, gcc-head.mak, ugcclib.mak, unix-end.mak) + - The OS/2 makefile didn't ignore errors from `erase' commands. +(os2.mak) + +Adds the PDF writer to the 32-bit MS Windows configuration. (bcwin32.mak) + +Adds the PNG drivers to the 32-bit MS Windows platform, since they now +compile properly. (bcwin32.mak) + +Changes the ttfont feature so that it refers to support for direct usage of +TrueType fonts; puts support for Type 42 fonts into a separate feature +(type42). (gs.mak, int.mak) + +Adds direct TrueType font support to the Windows platforms. (bcwin.mak, +bcwin32.mak) + +Rewrites vms.mak to be structured more like the other makefiles. (vms.mak, +modules.lis) + +Makes the device lists in vms-*.mak the same as those for the Unix +configurations. (vms-cc.mak, vms-decc.mak, vms-gcc.mak) + +Changes the default X library directory for gcc to /usr/X11/lib. +(gcc-head.mak) + +Adds the list of devices to --help, since HylaFax depends on this. +(imainarg.c) + +Adds -dCOLORSCREEN=0 to indicate use of 4 separate color screens with the +same frequency and angle. (gs_init.ps) + +</pre><h3><a name="V3.69_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - When ps2epsi encountered a blank page, it called the +(undocumented) .quit operator with only one argument, causing a stack +underflow. (ps2epsi.ps) + - An extraneous file was included in the fileset. (checkacc.ps) + - A file was omitted from the fileset. (bench.c) + - Images in PostScript files produced by pdf2ps were processed about +50 times slower than they should have been. (gs_pdf.ps) + +</pre><h3><a name="V3.69_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - An #include was omitted. (gdevpdfi.c) + - The BJC driver could get into an inconsistent state. (gdevcdj.c) + - Braces were omitted around the values for two initialized byte +arrays. (gdevpcx.c) + - A function used 'float' in its argument list, causing problems in +mixed ANSI/non-ANSI compilation. (gdevcdj.c) + - signed and unsigned char pointers were used inconsistently. +(gdevcdj.c, gdevcgml.c) + - Some header files weren't protected against double inclusion. +(gdevprn.h, gdevtifs.h) + - The 24-bit PNG driver included unnecessary copies of the color +mapping procedures. (gdevpng.c) + +Fixes bugs in the PDF writer: + - The PDF writer sometimes produced a double // in front of a filter +name. (gdevpdfi.c) + - The PDF writer produced zero-width, zero-height images for +non-standard fonts. (bug introduced since 3.68) (gdevpdfi.c) + - The PDF writer got confused if the input file invoked +setpagedevice. (gdevpdfp.c) + - The PDF writer put annotations on the page after the one they were +supposed to be on. (gdevpdf.c) + - The PDF writer sometimes failed to set the font when needed. +(gdevpdf.c) + - The PDF writer could produce in-line images that were too large. +(gdevpdfi.c) + - The PDF writer didn't scale explicit character and word spacing +(ashow/widthshow/awidthshow) properly. (gdevpdft.c) + - The PDF writer didn't copy named destination or article title +strings, possibly leading to dangling pointers. (gdevpdf.c, gdevpdfm.c) + - The PDF writer produced incorrect output for re-encoded fonts. +(It now converts any string containing characters in non-standard positions +to bitmaps; this will be fixed in a later release.) (gs_pdfwr.ps, +gdevpdfx.h, gdevpdfp.c, gdevpdft.c) + +Updates a few drivers for the change in the handling of band device +procedures. (gdevcp50.c, gdevdjet.c) + +Updates the X Windows driver for strip halftones. (gdevx.c) + +Adds anti-aliasing capability to the os2pm device. (gdevpm.c) + +Increases the sizes of some tables in the PDF writer. (gdevpdfx.h) + +</pre><h3><a name="V3.69_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - A patch for the MS Windows platform was accidentally omitted. +(gp_mswin.c) + - A block of code was accidentally duplicated. (dwmain.cpp) + - An identifier exceeded VAX VMS C's limit of 31 characters. +(gscspace.h) + - File name enumeration didn't work properly on Unix systems +(still/again). (gp_unifs.c) + - On MS Windows, If you closed Ghostscript with the system menu, you +only closed the text window; Ghostscript kept running and you had to use the +task manager to kill it. (dwmain.cpp, dwmainc.cpp, dwtext.cpp) + - Some DLL-related typedefs were not consistent. (dwdll.h, gsdll.h, +dpmainc.c, dwdll.cpp) + - Attempts to call the DLL before it was initialized were not +detected. (gsdll.c) + - Bitmap line lengths were rounded up even on 32-bit Windows, which +doesn't want this. (gdevwdib.c) + +Further improves the handling of attempts to use the DLL when it is already +in use. (dwdll.cpp, gsdll.c) + +Adds a DLL-compatible main program for OS/2. (dpmainc.c, gp_os2.c, gsdll.c) + +</pre><h3><a name="V3.69_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The WingDings TrueType font wasn't loaded properly. (gs_ttf.ps) + +Makes changes so that TrueType fonts can appear in the Fontmap and can be +loaded directly. (gs_fonts.ps, gs_ttf.ps) + +</pre><h3><a name="V3.69_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Executing a .quit with only 1 element on the operand stack caused +an invalid access. (zcontrol.c) + - The usage help message contained incorrect double %%s. +(imainarg.c) + - If an initialization file tried to use any Encodings other than +the 4 registered ones, it couldn't find them. (gs_init.ps, gs_res.ps) + - Places that expected arrays of coordinates (rectangles, +x/y/xyshow) didn't accept packed arrays. (ibnum.c, zdps1.c) + - filterdict was still visible after initialization. (gs_init.ps) + - The usage error message wasn't terminated by a newline. +(imainarg.c) + - setcacheparams (or setting the MaxFontCache user parameter) didn't +actually affect the size of the character cache. (zfont.c, zmisc2.c) + - The main interpreter loop declared iref as a ref *, even though it +may only be a ref_packed *. (iref.h, interp.c) + +Changes the character cache so it ignores absurd FontBBox values. Nothing +in the Adobe spec suggests doing this, but it is necessary for handling +questionable output produced by PageMaker 5.0 (an Adobe product!). +(zchar1.c) + +Changes some type declarations slightly to reduce the number of 'discarding +const' compiler warnings. (igc.h, igc.c, igcref.c) + +Adds .setclipoutside and .currentclipoutside operators for accessing the new +outside clipping capability. (zpath.c) + +Adds the dictionary stack to the information printed in case of a fatal +problem. (imain.c) + +Adds .set/currentrenderalgorithm operators for testing. (zrop.c) + +</pre><h3><a name="V3.69_Library"></a>Library</h3><pre> + +Fixes bugs: + - The TrueType rasterizer didn't map quadratic to cubic splines +well, and didn't handle off-curve points at the end of a contour properly. +(gstype42.c) + - An #include was omitted. (gsimage.c, gxclimag.c) + - Some compilers complained about statements with no effect, or +comma operators with no effect on the left. (gschar.c, gxcpath.c, gxfill.c) + - TrueType or Type 42 glyphs with a repeat count that crossed a +contour boundary produced incorrect output. (gstype42.c) + - TrueType / Type 42 composite glyphs involving rotation were placed +incorrectly. (gstype42.c) + - Type 42 fonts with an absent or incorrect FontBBox could fail to +produce output. (gstype42.c) + - Some header files weren't protected against double inclusion. +(gsio.h, gdebug.h) + - Decoding filters didn't "look ahead" to detect EOD, so if the last +read operation before closing the filter ended just before the EOD mark, the +EOD mark might not be absorbed. (stream.h, stream.c) + - Filling paths consisting of multiple subpaths that overlap in Y +produced slightly inaccurate output. We were unable to find a way to fix +this without making a NON-BACKWARD-COMPATIBLE change in the interface for +the recently introduced fill_trapezoid device procedure. (gxdevice.h, +gdevbbox.c, gdevddrw.c, gdevnfwd.c, gxfill.c) + - When banding, get_bits didn't detect calls with out-of-range Y +values. (gxclread.c) + - setcacheparams didn't actually affect the size of the character +cache. (gsfont.h, gxbcache.h, gxfcache.h, gschar.c, gsfont.c, gxbcache.c, +gxccman.c, gxclbits.c) + - When banding, colored halftones could be mangled. (gxclread.c) + +Fixes bugs in the bounding box device: + - The bounding box device could give bizarre results if any objects +crossed the lower edge of the page. (gdevbbox.c) + - The bounding box device could get a memory access error when +processing image data. (gdebbox.c) + - The bounding box device ran the default drawing algorithms even if +it had no target (performance bug only). (gdevbbox.c) + - The bounding box device computed an incorrect (too small) box for +partially clipped bitmap images. (gdevbbox.c) + - The bounding box device got confused by files that filled the +entire page with a background color. (gdevbbox.c) + - The bounding box device produced infinite-height boxes for certain +kinds of data. (gdevbbox.c) + +Changes some type declarations slightly to reduce the number of 'discarding +const' compiler warnings. (gsmemory.h, gsstruct.h) + +Adds the capability of clipping to the outside rather than the inside of the +clipping path. This is required for emulating an obscure feature of the +Microsoft Windows GDI. (gspath.h, gxclpath.h, gxpath.h, gxcpath.h, +gzcpath.h, gspath.c, gxacpath.c, gxclpath.c, gxclread.c, gxcpath.c.) + +Makes it possible for band devices to select the underlying memory device +used to accumulate the actual bits. This is required for (at least) PCL5 +emulation. This requires adding a procedure to the gx_device_printer +structure, which, for devices that initialize the structure without using +the macros in gdevprn.h or access the printer-specific procedures directly, +is a NON-BACKWARD-COMPATIBLE change. (gdevprn.h, gxclist.h, gxdevice.h, +gdevdflt.c, gdevprn.c, gxclread.c) + +Speeds up handling of rotated or halftoned masked images. (gximage2.c) + +Adds an output_page procedure to the bounding box device, for testing. +(gdevbbox.c) + +Adds a sample device that keeps track of the "render algorithm", for PCL5c +emulation. (gdevrrgb.c) + +</pre> + +<h2><a name="Version3.68p4"></a>Version 3.68 patch 4 (5/23/96)</h2> + +<p> +More minor bug fixes, mostly related to the MS Windows implementation. + +<h3><a name="V3.68p4_Documentation"></a>Documentation</h3><pre> +Further updates various doc files to make them more useful to new users. +(NEWS, README, current.doc, helpers.doc, new-user.doc) + +Adds user-contributed documentation for ps2pdf. (ps2pdf.doc, unix-end.mak) + +Documents a bug in the Borland C++ 4.52 compiler, and where to find the +patch for it. (make.doc) + +</pre><h3><a name="V3.68p4_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - A command line exceeded the MS-DOS 120 character limit. +(devs.mak) + +A file was accidentally omitted from the fileset. (wmakebat.bat) + +</pre><h3><a name="V3.68p4_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Many of the 'show' operators didn't work properly if the PDF +writer was included in the configuration. (gs_pdfwr.ps) + - x_wrap_get_bits was ridiculously slow. (It still is, but not +quite as ridiculously.) (gxcindex.h, gdevxalt.c) + - The PDF writer generated CR instead of CalRGB, which is legal per +the Adobe spec but not compatible with some Adobe Acrobat products. +(gdevpdfi.c) + - Some signed/unsigned discrepancies caused compilation warnings. +(gdevpdfm.c, gdevpdfp.c, gdevpdft.c) + +Fixes bugs in the Windows driver: + - An accidentally opened tiny window didn't get closed. +(gdevwdib.c) + - The name DllInit was misleading, and this procedure wasn't being +called whtn the DLL was loaded, so the DLL couldn't know the instance +handle. (gp_mswin.c) + - The code didn't recognize Win32s (vs. Windows 95) correctly. +(dwmain.cpp, gdevwdib.c, gp_mswin.h, gp_mswin.c, gsdll16.rc) + - Some compiler warnings needed fixing. (gdevwdib.c) + - gsdll16.def and gsdll32.def were different. (gsdll32.def) + - A GPF leaving the 16-bit DLL loaded could make the DLL permanently +unusable. (dwmain.cpp) + - Two obsolete files were still included in the fileset. +(gswin.def, gswin32.def) + +Adds a compile-time option to the 'bit' drivers to expand 4-bit pixels to +32-bit. This was required for tracking down customer problems, because the +only tools we have available for displaying CMYK images require 32 bits per +pixel. (gdevbit.c) + +</pre><h3><a name="V3.68p4_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - In DEC C, <time.h> does define the timeval struct. (time_.h) + +Changes gsdll_init() to take an additional argument, a window handle. This +is a NON-BACKWARD-COMPATIBLE change. (dll.doc, dwdll.h, gsdll.h, dwdll.cpp, +dwmain.cpp, dwmainc.cpp, gsdll.c) + +</pre><h3><a name="V3.68p4_Fonts"></a>Fonts</h3><pre> + +Updates more Fontmaps to include the new URW++ fonts. (Fontmap.OS2, +Fontmap.ATM) + +</pre><h3><a name="V3.68p4_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The default operator array table wasn't big enough. (iinit.c) + - Some signed/unsigned discrepancies caused compilation warnings. +(imain.c, imainarg.c, zfile.c) + +Adds encoding vectors for Windows 3.1 Latin 1, Latin 2, and Latin 5 +encodings. None of these are loaded in the standard configuration. +(gs_wl{1,2,5}_e.ps) + +</pre><h3><a name="V3.68p4_Library"></a>Library</h3><pre> + +Fixes bugs: + - Some tracing output was incorrect or missing. (gxdither.c) + - Resized objects in the C heap had incorrect bookkeeping +information (bug introduced in 3.68). (gsmemory.c) + - Image pixels that fell exactly on device half-pixel boundaries +could get discarded. (gximage0.c) + - The bounding box device didn't set a variable properly and didn't +implement end_image, leading to invalid memory accesses. (gdevbbox.c) + - Fonts with BuildChar routines written in C didn't work properly +with kshow or xyshow. (gschar.c) + +Adds some additional tracing output for Patterns. (gxpcmap.c) + +Adds tracing output for freeing malloc'ed blocks at the end of execution. +(gsmemory.c) + +Adds a gs_dashpath procedure that expands dashes in the same way that +gs_flattenpath expands curves. (gspath.h, gspath1.c) + +</pre> + +<h2><a name="Version3.68p3"></a>Version 3.68 patch 3 (5/17/96)</h2> + +<p> +More bug fixes during the beta test period. AccurateScreens now works +properly. + +<h3><a name="V3.68p3_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The help message was too long to fit on a PC screen or standard +terminal. (imainarg.c) + - Failure to run tar_cat wasn't detected. (unix-end.mak, +unixtail.mak) + +</pre><h3><a name="V3.68p3_Utilities"></a>Utilities</h3><pre> +Fixes bugs: + - In the PostScript files produced by pdf2ps, images using ASCII85 +encoding would cause a typecheck error. (gs_pdf.ps) + - pdf2ps wrote out strings longer than 200 characters incorrectly. +(pdf_2ps.ps) + +</pre><h3><a name="V3.68p3_Drivers"></a>Drivers</h3><pre> + +Fixes bugs in gdevcdj.c (according to the author, we have no way to test +this): + - The driver used to use Colors as well as ProcessColorModel to +define the process color model. (devices.doc, gdevbjc.h, gdevcdj.c) + - Incorrect or inconsistent settings of BitsPerPixel and +ProcessColorModel, or setting one but not the other, could leave the driver +in an inconsistent state. (gdevcdj.c) + +Fixes bugs in the MS Windows driver: + - Insufficient memory for the backing bitmap could cause a GPF. +(gdevmswn.c, gdevwdib.c) + - Invalid parameters could cause a crash within the DLL code. +(gdevwdib.c) + +Adds a user-contributed driver for the CalComp Raster Format. (devs.mak, +gdevccr.c) + +Adds an anti-aliasing option for MS Windows. (gdevmswn.c, gdevwdib.c) + +</pre><h3><a name="V3.68p3_Platforms"></a>Platforms</h3><pre> + +Fixes bugs in the Windows platform: + - One had to type "quit" twice to exit. (dwdll.h, dwdll.cpp) + +</pre><h3><a name="V3.68p3_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Platform fonts didn't work properly if the document's primary +encoding was the standard MS Windows encoding. (ifont.h, gs_wan_e.ps) + - stringwidth with a Type 1 font could give a spurious typecheck +error (bug introduced in 3.65). (zcharout.c) + - If a DOS editor added a ^Z to the end of the Fontmap file, an +error occurred during initialization. (gs_fonts.ps) + - Halftones that didn't specify a value for AccurateScreens +sometimes ignored the setting of the AccurateScreens user parameter. +(zht2.c) + +</pre><h3><a name="V3.68p3_Library"></a>Library</h3><pre> + +Fixes bugs: + - gs_join_none was defined, but not implemented. (gxstroke.c) + - A bookkeeping list for fonts could get confused, causing invalid +memory accesses. (gsfont.c) + - An I/O error or internal error would cause the band list +rasterizer to go into an infinite loop. (gxclread.c) + - The algorithm for choosing screen angles and frequencies produced +poor results. (gshtscr.c) + - Color screens were broken (bug introduced in 3.68). (gxdht.h, +gzht.h, gsht.c, gshtscr.c) + +</pre> + +<h2><a name="Version3.68p2"></a>Version 3.68 patch 2 (5/13/96)</h2> + +<p> +This is another set of patches for the next general release. + +<h3><a name="V3.68p2_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - Windows NT and Windows 95 implementations were identified as +"under development" rather than available. (README) + - There were several other minor errors in the README file. +(README) + - The claimed current IJG JPEG version was incorrect. (jpeg.mak) + +Splits off information for new users into a separate file. (README, +new-user.doc) + +</pre><h3><a name="V3.68p2_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - gettimeofday takes 2 arguments on SVR4 systems more recent than +SVR4.0. (make.doc, ansihead.mak, cc-head.mak, gcc-head.mak, time_.h) + +Changes the default Unix data installation directory from /usr/local/lib to +/usr/local/share, which seems to be favored by more recent Unix systems +(except for some GNU/Linux versions, which still use /usr/local/lib, and BSD/OS, +which puts Ghostscript in /usr/contrib/lib.) (ansihead.mak, cc-head.mak, +gcc-head.mak, ugcclib.mak) + +Changes the unset commands in the Unix script to assignments, because a few +older Unix shells don't provide unset. (unixtail.mak) + +</pre><h3><a name="V3.68p2_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - An #include incorrectly referred directly to a system header. +(gdevpdft.c) + - CMYK devices took an excessive amount of time clearing the page to +white. (gdevm32.c) + +Adds a compile-time option to the 'bit' drivers to remove top and bottom +whitespace. This change was required in order to track down a customer bug. +(gdevbit.c) + +</pre><h3><a name="V3.68p2_Interpreter"></a>Interpreter</h3><pre> + +Updates the interpreter for the split in the gstate API. (igstate.h) + +</pre><h3><a name="V3.68p2_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - Some compilers don't define NULL widely enough. (spngp.c) + +</pre><h3><a name="V3.68p2_Library"></a>Library</h3><pre> + +Fixes bugs: + - There was a minor typo (& for &&) that didn't affect execution. +(gxccman.c) + - There was a trailing comma in an enumeration. (gsiparam.h) + - Internal and public interfaces weren't separated properly. THIS +IS A NON-BACKWARD-COMPATIBLE CHANGE for clients using certain undocumented +interfaces to the graphics state. (gsstate.h, gxstate.h, gzstate.h, +gsstate.c) + - A 'private' declaration was missing (yet again). (gxclimag.c) + +</pre> + +<h2><a name="Version3.68p1"></a>Version 3.68 patch 1 (5/10/96)</h2> + +<p> +This is the first bug fix (patch) incremental release for the next +general release. + +<h3><a name="V3.68p1_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - Many Windows-specific files were omitted from the previous +fileset: dw*.rc, dw*.cpp. + +</pre> + +<h2><a name="Version3.68"></a>Version 3.68 (limited) (5/9/96)</h2> + +<p> +This release cleans up the new Windows files, mostly implements the +high-level driver API for bitmap images, and adds practical strip +(AccurateScreens) halftoning. This is the first "serious beta" fileset for +the next general release. It still has more problems than I would have +liked. + +<h3><a name="V3.68_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The names of the executable files for MS Windows were out of date. +(make.doc) + - gxcindex.h still referred to "drawing color". (gxcindex.h) + - The name of the default font directory for Unix systems was +incorrect. (make.doc) + +Moves the list of files required for installation, and some other +installation instructions, from make.doc to install.doc. (install.doc, +make.doc) + +Adds a description of the PNGPredictor filters. (language.doc) + +Updates the documentation of the higher-level driver procedures to match the +specification changes. (drivers.doc) + +Documents the change in the Watcom build procedure. (make.doc) + +Improves the documentation of bitmap IDs. (gxbitmap.h) + +Adds documentation for the new strip_tile_rectangle and strip_copy_rop +driver procedures. (drivers.doc) + +Changes the few remaining direct FTP addresses in README to URLs. (README) + +Notes that zlib does not compile correctly on IRIX 6.n with optimization. +(make.doc) + +Adds references to PDF and TrueType fonts to language.doc. (language.doc) + +Updates fonts.doc to remove references to fonts.mak. (fonts.doc) + +Describes how to substitute an LZW compressor for the LZW-compatible +compressor provided in the standard release. (make.doc) + +</pre><h3><a name="V3.68_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Some lines had exceeded the 120-character limit of the +MS-DOS shell. (int.mak) + - The configuration files weren't generated correctly when CONFIG +wasn't an empty string. (unixhead.mak) + +Factors out shared DLL makefile rules into a new file. (bcwin.mak, +bcwin32.mak, dwcommon.mak) + +Makes the cp and rm commands into makefile parameters, allowing automatic +generation of build scripts even in the MS-DOS and MS Windows environments +where the shell requires the CALL command for sub-scripts. (*.mak, +genconf.c) + +Adds the PDF writer to the default Unix configurations. (ansihead.mak, +cc-head.mak, gcc-head.mak) + +Adds TrueType support to all Level 2 configurations. (int.mak) + +Removes fonts.mak, which is no longer relevant. (fonts.mak) + +Brings the font compilation procedures up to date. (cfonts.mak, int.mak) + +</pre><h3><a name="V3.68_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - There was an extra 'show' in one file. (align.ps) + +</pre><h3><a name="V3.68_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The bit devices were missing the map_color_rgb procedure. +(gdevbit.c) + - The MS Windows driver sent a redundant message. (gdevmswn.c) + +Adds a device that keeps track of the page bounding box. This device is not +included in any standard configuration. (drivers.doc, gdevbbox.h, +gsmatrix.h, gsstruct.h, gxdevice.h, gdevbbox.c, gdevnfwd.c, gsmatrix.c) + +Updates the PDF writer to track the changes in the high-level driver API, +and to write out images in a reasonable way. NOTE: the current +implementation doesn't write out CIE color space parameters, so CIE-color +images won't be colored accurately. (gdevpdf.c, gdevpdfi.c) + +Adds a forwarding procedure for tile_rectangle. (gxdevice.h, gdevnfwd.c) + +Changes the copyright notices on the PDF writer to be the same as on the +rest of Ghostscript. (gdevpdf*.[ch]) + +Updates Gunther Hess's Epson Stylus Color driver from 1.21 to 1.90. (Aladdin +Enterprises takes no responsibility for this driver: if you have questions, +contact the author.) (devices.doc, devs.mak, gdevstc*.c, gdevstc.h) + +</pre><h3><a name="V3.68_Platforms"></a>Platforms</h3><pre> + +Removes some obsolete MS Windows files and #defines. (gp_mswtx.h, +gp_mswtx.c, gp_mswin.h) + +Works around a memory limitation in the Watcom make utility. (wmakebat.bat) + +</pre><h3><a name="V3.68_Fonts"></a>Fonts</h3><pre> + +Changes the standard Fontmap from using the low-quality fonts converted from +bitmaps to using high-quality fonts recently contributed by URW++. +(Fontmap, Fontmap.GS) + +</pre><h3><a name="V3.68_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - A macro containing an if-else, and a macro generating a compound +statement, could cause incorrect grouping of 'if' statements. (files.h, +ostack.h) + - .setrasterop didn't pop its operand. (zrop.c) + - A rounding inaccuracy could cause bounding box rangecheck errors. +(gsdps1.c) + - CIE-based images in PDF files didn't work. (gs_pdf.ps) + - The page parameter .MediaSize didn't get updated when PageSize was +set. (This is just the most recent manifestation of the setpagedevice +morass.) (gs_setpd.ps) + - %lineedit and %statementedit were limited to 160 characters. +(zfileio.c, ziodev.c) + - Compiled initialization files didn't work properly. (geninit.c, +gs_l2img.ps) + - Attempting to parse a command line with argc = 0 caused a crash. +(imainarg.c) + +Renames some files to allow separating the non-DLL 'main' procedure into a +separate file, and to make the file naming more consistent: + gs.c (except for 'main') => imainarg.c + gsmain.c => imain.c +gs.c now consists only of 'main'. The name gs.c is still inconsistent (it +should be i- something), but at least it's consistent with the name of the +executable. (*.mak, imain.h, iminst.h, imainarg.h, gs.c, gsmain.c, imain.c, +imainarg.c) + +Adds PNGPredictorEncode/Decode filters, and increases the size of filterdict +slightly to make room for them. (iinit.c, zfpngp.c) + +Makes zwrite external, per a customer request. (opextern.h, zfileio.c) + +Updates clients to work with the new API-based bitmap imaging calls. +(iimage.h, zcolor1.c, zimage2.c, zpaint.c) + +Updates clients for the split in gscspace.h. (zcie.c, zcolor1.c, zcolor2.c, +zcsindex.c, zcssepr.c, zimage2.c, zpaint.c, zpcolor.c) + +Updates clients for strip-based halftones. (zpcolor.c) + +Updates the initialization code to pass the correct (system) allocator to +the library initialization. (imain.c) + +</pre><h3><a name="V3.68_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - If a filter reached EOD exactly at the end of reading data for +certain operations, it didn't get closed automatically. (stream.c) + - The LZW-compatible encoding filter reset procedure had an +incorrect return type. (slzwce.c) + +Changes the ASCIIHexEncode filter to insert \ns in fewer places, to be +somewhat more compatible with the Adobe implementation. (sstring.c) + +Adds PNGPredictorEncode/Decode filters that implement the pixel prediction +algorithms in the PNG specification. (We'd like to use the code in the PNG +library, but it's too deeply embedded in the rest of the PNG machinery, and +it also doesn't provide for suspendable I/O.) (spngpx.h, spngp.c) + +</pre><h3><a name="V3.68_Library"></a>Library</h3><pre> + +Fixes bugs: + - A test for pure color was backwards, causing garbage output or +possible address or floating point exceptions. (gxclpath.c) + - A macro containing an if-else could cause incorrect grouping of +'if' statements. (gsrefct.h) + - The default implementation of RasterOp didn't handle the device +depth correctly. (gdevmrop.c) + - The memory device implementation of RasterOp truncated 24-bit +constant source or texture values to 8 bits. (gdevmrop.c) + - A typo caused the garbage collector to miss an internal buffer +used when rendering images. (gximage.h) + - gs_debug_out was only defined if DEBUG was set. (gdebug.h) + - The raster of horizontally replicated tiles was incorrect. +(gxht.c) + - A data type might not be declared, causing a compilation error. +(gscoord.h) + - Empty TrueType glyphs weren't handled properly. (gstype42.c) + - Fonts with a build procedure written in C could cause an invalid +memory access. (gschar.c) + - The initial point of a band list path sometimes didn't get +written, causing excess or missing filled regions. (gxclpath.c) + - Characters between 49 and 56 bits wide were rendered incorrectly +when banding. (gxclbits.c) + +Renames gsimage*.c as gximage*.c, to reflect more accurately the position of +these files in the architecture. (gsimage*.c, gximage*.c) + +Fully implements the high-level bitmap image calls in the driver API. This +includes some driver API changes; however, this part of the API was clearly +documented as not stable enough to rely on. (gxdevice.h, gximage.h, +gdevbbox.c, gdevddrw.c, gdevnfwd.c, gsimage.c, gximage*.c) + +Splits the color space header into client and implementation, as with many +others. (gscspace.h, gxcspace.h, gximage.h, gscie.c, gscolor.c, gscolor1.c, +gscolor2.c, gscsepr.c, gsimage.c, gspcolor.c, gsstate.c, gxcmap.c, +gxpcmap.c) + +Extends band lists to handle high-level images. NOTE: This facility is +patched out because there is not yet a way to pass the necessary color +rendering information through the band list. (gxcldev.h, gxclist.h, +gxclpath.h, gxclimag.c, gxclist.c, gxclpath.c, gxclread.c) + +Implements fixed2float and float2fixed more efficiently on machines with +slow floating point. (gxfixed.h, gscoord.c, gsmisc.c) + +Makes one further NON-BACKWARD-COMPATIBLE change in the existing +higher-level driver procedures (fill_path, stroke_path, fill_mask): we make +the imager state pointer an explicit argument, rather than a member of the +gx_fill/stroke_params structure. We now consider the specification of these +procedures stable, and have removed the "subject to change" notice from the +documentation. (gxdevice.h, gxpaint.h, gdevbbox.c, gdevnfwd.c, gxacpath.c, +gxclpath.c, gxclread.c, gxfill.c, gxpaint.c, gxstroke.c) + +Extends halftone bitmaps to include "strip" and "shift" information, +allowing halftone cells with arbitrary angles to be stored in space +proportional to the number of bits in the cell rather than the square of the +number of bits. This requires adding new (optional) strip_tile_rectangle +and strip_copy_rop driver procedures that are like tile_rectangle and +copy_rop respectively but accept a strip bitmap rather than an ordinary +tile; these procedures supersede tile_rectangle and copy_rop (although these +also remain, defined in terms of the new ones). This also requires making +small but NON-BACKWARD-COMPATIBLE changes in several internal interfaces. +(gdevmem.h, gdevprn.h, gsdcolor.h, gxbcache.h, gxbitmap.h, gxcldev.h, +gxclip2.h, gxclist.h, gxdevice.h, gxdevrop.h, gxdht.h, gxfcache.h, +gxhttile.h, gxpcolor.h, gzht.h; gdevabuf.c, gdevbbox.c, gdevdflt.c, +gdevm*.c, gdevmpla.c, gdevmrop.c, gdevnfwd.c, gsht.c, gsht1.c, gshtscr.c, +gspcolor.c, gsstate.c, gxcht.c, gxclbits.c, gxclip2.c, gxclist.c, +gxclpath.c, gxclread.c, gxcpath.c, gxdcolor.c, gxdither.c, gxht.c, +gximage2.c, gxpcmap.c, ...) + +Adds "no join" as a line join type. NOTE: this is not actually implemented +yet. (gslparam.h) + +Changes the initialization code so that it passes the system allocator as an +argument to module initialization procedures. While this is theoretically a +NON-BACKWARD-COMPATIBLE change, module initialization procedures are not +documented and presumably are not used by any code outside the +implementation. (gscdefs.h, gconf.c, gdevmrop.c, gsinit.c, gxclimag.c, +gxclpath.c) + +Splits up gs_lib_init into two procedures, allowing specification of a +different default allocator for the library. (gslib.h, gsinit.c) + +Adds a resize_object operation to the allocator API. (gsmemory.h, +gsalloc.c, gsmemory.c) + +</pre> + +<h2><a name="Version3.67"></a>Version 3.67 (limited) (4/12/96)</h2> + +<p> +This release restructures the MS Windows and OS/2 code to be primarily DLL- +rather than EXE-based. See under Platforms below for more news. This +release was put out in a hurry in order to get the new DLL code into +testers' hands; it has more rough edges than usual. + +<h3><a name="V3.67_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - A definition & use comment was incorrect. (scanchar.h) + - William Bader's e-mail address was wrong. (README) + +Adds documentation for the new begin_image, image_data, and end_image +procedures. THIS INTERFACE IS STILL SUBJECT TO CHANGE. (drivers.doc) + +</pre><h3><a name="V3.67_Procedures"></a>Procedures</h3><pre> + +Renames all the *core.dev modules as *lib.dev. (int.mak, *lib.mak, vms.mak, +gdevmrop.c) + +Updates all the remaining makefiles to IJG JPEG version 6a. (*.mak) + +Moves the configuration parameter definitions from gconf.c to a new file +gscdefs.c. (bcwin*.mak, *lib.mak, gs.mak, int.mak, lib.mak, unixtail.mak, +vms.mak, gconf.c, gscdefs.c) + +</pre><h3><a name="V3.67_Platforms"></a>Platforms</h3><pre> + +Restructures the MS Windows and OS/2 code to be primarily DLL- rather than +EXE-based. This involves two minor NON-BACKWARD-COMPATIBLE changes to the DLL +interface, documented near the end of dll.doc: + + - Adding argv and argc as arguments to gsdll_init. + + - Adding a new message type, GSDLL_POLL, to the callback procedure. + +(bcwin*.mak, devs.mak, os2.mak, dll.doc, install.doc, dw*.*, gsdll*.*, +gdevms*.*, gdevpm.c, gdevw*.c, gp_mswin.c, gp_os2.c, gsos2.def, gswin.rc) + +Adds the BMP drivers to the Watcom platform. (watc.mak) + +</pre><h3><a name="V3.67_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - gs.c assumed the presence of stdio. (gs.c) + +Defines a new API entry point that is the equivalent of command line +invocation. (imain.h, imainarg.h, gs.c) + +Changes clients to conform to the changes in gsimage.h. (zimage2.c, +zpaint.c) + +Speeds up the search operator slightly. (zstring.c) + +</pre><h3><a name="V3.67_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - If the PDF interpreter was present, running a PostScript file +didn't close the file properly if it caused an error. (pdf_main.ps) + +Speeds up embedded font loading by making an internal buffer bigger. +(pdf_font.ps) + +</pre><h3><a name="V3.67_Library"></a>Library</h3><pre> + +Fixes bugs: + - There could be some non-zero garbage between the width and the +next multiple of bitmap_align_mod for copy_alpha. (The driver API +specification explicitly allows this, but it upset one customer.) +(gxccman.c) + - Nibble-swapped alpha values could be displaced in memory by one +pixel, damaging the output. (gdevabuf.c) + +Makes further changes towards adding high-level bitmap image calls to the +driver API. This includes the following minor NON-BACKWARD-COMPATIBLE +changes to the interface defined in gsimage.h: + + - changing MultipleDataSources from a member of the gs_image_t + structure to an argument of gs_image_init; + + - changing the default image parameter values from constant + structures to procedures that initialize the structure. + +As far as we know, this doesn't affect any existing client code. +(gsimage.h, gsiparam.h, gxdevice.h, gdevddrw.c, gdevnfwd.c, gsimage.c, +gspcolor.c, gxccache.c) + +Removes an unnecessary level of call for path filling. (gxpaint.h, +gxfill.c, gxpaint.c) + +</pre> + +<h2><a name="Version3.66"></a>Version 3.66 (limited) (4/8/96)</h2> + +<p> +This release adds support for TrueType fonts and Type 42 (encapsulated +TrueType) PostScript fonts. The MS Windows driver now interacts properly +with the garbage collector. This release also includes a new, high-quality +set of free fonts. + +<h3><a name="V3.66_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The list of generic makefiles had gotten out of date. (make.doc) + +Adds a mention of the bmv program, created by a user and available under the +GPL. (README) + +Notes that a bug in gcc 2.7.x prevents these versions from compiling +Ghostscript. (make.doc) + +Clarifies the meaning of "inverted" masks. (gsimage.h) + +Improves the documentation of the stack sizing parameters. (interp.c) + +Improves the documentation of the copy_rop driver procedure. +(drivers.doc) + +Notes that all subclasses of gx_device must explicitly include the +device_finalize finalization procedure. (gxdevice.h) + +Updates the documentation of the high-level driver API to reflect the change +in gx_drawing_color, and the addition of the new polygon and image drawing +procedures. (drivers.doc) + +Updates the documentation for building zlib and libpng. (make.doc) + +</pre><h3><a name="V3.66_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The environment space overflowed on some inferior Unix systems. +(unixtail.mak) + +Adds a ttfont.dev "feature" for including the TrueType interpreter and the +ability to handle Type 42 fonts. A new procedure, .loadttfont, allows +loading a TrueType font directly (by converting it to a Type 42 on the fly). +(gs.mak, int.mak, lib.mak) + +Updates the makefiles and procedures to libpng 0.88 and zlib 1.0. +(libpng.mak, zlib.mak) + +</pre><h3><a name="V3.66_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - pdf2ps could produce lines longer than 255 characters. +(pdf_2ps.ps) + +Removes some unnecessary and error-inviting code from pdf2dsc. (pdf2dsc.ps) + +Updates lines.ps to test the new stroke code more fully. (lines.ps) + +Allows omitting the second argument of ps2pdf, as for ps2epsi. (ps2pdf) + +</pre><h3><a name="V3.66_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A routine was incorrectly declared "private". (I wish gcc caught +this!) (gdevpdf.c) + - A 'const' was omitted in a parameter list. (gdevpdfp.c) + - Some imported procedures didn't have prototypes declared. +(gdevpdft.c) + - The ProcSet list for PDF files didn't include Text when it was +needed. (gdevpdfx.h, gdevpdf.c, gdevpdft.c) + - Text in PDF output ignored the color setting. (gs_pdfwr.ps, +gdevpdft.c) + - Text in PDF output could be positioned incorrectly. (gdevpdft.c) + - pdfmarks could produce an error when producing PDF output. +(gs_pdfwr.ps) + +Slightly improves the text output of the PDF writer. (gs_pdfwr.ps, +gdevpdft.c) + +Defines driver procedures for filling trapezoids (with the parallel edges +parallel to a coordinate axis), parallelograms (with arbitrary orientation), +triangles (ditto), and minimum-width lines (ditto). (Note that the last of +these obsoletes the former draw_line procedure.) (gdevmem.h, gdevprn.h, +gxdevice.h, gxdraw.h (deleted), gdevddrw.c, gdevdflt.c, gdevht.c, +gdevnfwd.c, gsimage[12345].c, gxacpath.c, gxclist.c, gxclip2.c, gxcpath.c, +gxdraw.c (deleted), gxfill.c, gxpcmap.c, gxstroke.c) + +Adds "sketched" driver procedures for high-level bitmap / pixmap image +drawing. In this release, the argument lists are incomplete, and the +procedures are stubs: don't try to use them! [see previous entry] + +Changes the screen update strategy for the X Windows driver from a +compile-time option to a settable run-time variable. (gdevx.c) + +Patches around a problem with libpng 0.88 that can't be fixed without +editing a configuration file. (gdevpng.c) + +</pre><h3><a name="V3.66_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - %g formats with sscanf don't work on NeXT systems. (gdevpdft.c, +iutil.c, zdouble.c) + - getenv could be declared inconsistently. (gp_unix.c) + +</pre><h3><a name="V3.66_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The Type 1 font interpreter sometimes set the flatness too large. +(gstype1.c) + - Fonts defined by definefont could never be garbage collected. +(gsstruct.h, gxfcache.h, gxfont.h, gxfont0.h, gxfont1.h, gsfont.c, +gsfont0.c) + - Type 0 fonts weren't garbage collected properly. (gsfont0.c) + - Compiled fonts caused a compilation error (bug introduced in +3.65). (ifont.h) + - If a Type 1 font used hint replacement, hints could be applied +more than once, distorting the character shape. (gxtype1.h, gxhint3.c) + - Oversampling wasn't applied to large enough characters. +(gschar.c) + +</pre><h3><a name="V3.66_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The scanner accepted /[, /], /<<, and />> as literal names (and +similarly for //). It isn't obvious from the Red Book, but the Adobe +implementations don't accept these. What a nuisance! (gs_btokn.ps, +gs_init.ps, pdf_2ps.ps, pdf_base.ps, pdf_main.ps, iscan.c) + - A spurious stackoverflow could occur under unusual conditions. +(istack.c) + - The values of OrigFont and ScaleMatrix in scaled fonts reflected +only the most recent scaling operation, not the original font and the +combined scaling operation. (zfont.c) + - The default size of systemdict had become slightly too small. +(iinit.c) + - Type 1 characters defined by PostScript procedures were called +incorrectly. (zcharout.c) + +Removes the papersize operator from statusdict, since it is not documented +anywhere in the Adobe literature and didn't interact properly with the +various ways of setting the page size. (gs_statd.ps) + +Changes the one client of sskip to match the changed API. (zpaint.c) + +Changes clients to reflect the creation of sstring.h. (iscan.h, zfilter.c) + +Adds PSStringEncode as an accessible filter. (zfilter.c) + +Adds support for TrueType and Type 42 fonts. (gs_fonts.ps, gs_ttf.ps, +gs_typ42.ps, bfont.h, icharout.h, ifont.h, zchar1.c, zchar42.c, zcharout.c, +zfont1.c, zfont2.c, zfont42.c) + +Adds a few ANSI sheet sizes (commented out, for documentation only). +(gs_statd.ps) + +</pre><h3><a name="V3.66_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Clients who called pdfopen/close rather than runpdf could get an +error (PSLevel1 undefined). (pdf_main.ps) + - Some masked images were displayed with black and white inverted. +(gs_pdf.ps) + - In Level 1 output produced by pdf2ps, images caused a syntaxerror. +(gs_pdf.ps) + - If a PDF file had multiple xref sections and later sections added +new objects, an error occurred. (pdf_main.ps) + - Some very old Level 1 interpreters couldn't deal with a file +object embedded in a procedure. (gs_pdf.ps) + +</pre><h3><a name="V3.66_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The PSStringEncode filter didn't always produce printable 7-bit +output. (sstring.c) + - The CCITTFaxDecode filter didn't implement DamagedRowsBeforeError. +(scfx.h, scfd.c) + - Interpolated images displayed nothing if the data stream ended +before the image height was reached. (siscale.h, gsimage5.c, siscale.c) + +Changes the sskip stream procedure so that it takes an additional argument +where it returns the actual number of bytes skipped. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE in the API. However, as far as we know, +there are no external clients of this procedure. (stream.h, stream.c) + +Splits up sfilter.h so that the headers correspond more directly with the +implementations. (sfilter.h, sstring.h, sstring.c) + +</pre><h3><a name="V3.66_Library"></a>Library</h3><pre> + +Fixes bugs: + - The default device in the library configuration was device 1, not +device 0. (bclib.mak, ugcclib.mak, watclib.mak, gslib.c) + - Patterns could be rendered with small gaps between them. +(gspcolor.c) + - Large characters could render inaccurately because of a numerical +boundary condition. (gxpcopy.c) + - The show_gstate pointer in the graphics state was not managed +properly, possibly leading to dangling pointers or GC errors. (gsstate.c) + - Bitmaps could get shifted to the left if ALPHA_LSB_FIRST was +selected (bug introduced in 3.53). (gsbitops.c) + - The garbage collector could move devices in memory, causing +problems with command list devices. (gxdevice.h, gsdevice.c) + +Continues restructuring the image handling code in preparation for adding a +high-level driver operation. (gsimage[12345].c) + +Starts to implement passing color mapping information (transfer function, +black generation, undercolor removal, CRD, halftoning) in the band list. +(gxfmap.h, gscolor.c, gscolor1.c, gsht1.c, gsstate.c) + +Speeds up the path filling code a little more. (gxdraw.c) + +Removes the workaround for the gcc 2.7.0/1/2 optimizer bug, since this +turned out to cause more trouble than it was worth. (stdpre.h) + +Speeds up stroking dramatically for the case of butt or square caps, bevel +or beveled miter joins, and no fill adjustment, by filling parallelograms +and triangles directly rather than constructing and filling paths. This is +an important common case for CAD drawings. (gxdraw.h, gxdraw.c, gxstroke.c) + +Adds support for TrueType and Type 42 fonts. (gxfont.h, gxfont42.h, +gstype42.c) + +Extends the memory manager to allow allocating objects that the garbage +collector won't move. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for +implementors of memory managers, but clients aren't supposed to have any of +these. (gsmemory.h, gsmemory.c, gsalloc.c) + +Makes dynamically created instances of registered devices immovable. +(gsdevice.c) + +Unifies gx_drawing_color with (makes it equivalent to) gx_device_color. +THIS IS A NON-BACKWARD-COMPATIBLE CHANGE for implementors of the +higher-level driver procedures (fill_path, stroke_path, fill_mask). We +regret that this was necessary, but the documentation in drivers.doc does +warn the reader: "DO NOT ASSUME THESE OPERATIONS WILL REMAIN UNCHANGED IN +FUTURE RELEASES." These three procedures, at least, should now be stable. +(gsdcolor.h, gxcindex.h, gxdcolor.h, gxdevice.h, gximage.h, gxpaint.h, +gxpcolor.h, gdevdflt.c, gdevpdf.c, gdevpdfi.c, gdevxalt.c, gsimage.c, +gsimage2.c, gspcolor.c, gxacpath.c, gxccache.c, gxcht.c, gxclpath.c, +gxclread.c, gxdcconv.c, gxdither.c, gxfill.c, gxdraw.c, gxht.c, gxpaint.c, +gxpcmap.c, gxstroke.c) + +</pre> + +<h2><a name="Version3.65"></a>Version 3.65 (limited) (3/9/96)</h2> + +<p> +This release adds garbage collection for device instances. ****** NOTE: +Because of changes in memory management, if you are using the MS Windows +driver (mswin), you must run with -dNOGC. This is a temporary problem which +will be fixed before the next beta release. + +<h3><a name="V3.65_Documentation"></a>Documentation</h3><pre> +Documents the C API equivalent of a -d switch for setting a flag like +NOPAUSE. (imain.h) + +Splits off the NEWS entries for versions 3.0 through 3.33 into a new +file. (history3.doc) + +Adds a man page for ps2pdf. (ps2pdf.1) + +Documents the new memory management aspects of device drivers, and corrects +many other aspects of driver documentation that had become inaccurate. +(drivers.doc) + +Updates the documentation for the gs_*.ps files. (psfiles.doc) + +Replaces .type1addpath with .type1execchar. (language.doc) + +Adds some more documentation on how band lists do read/write switching. +(gxclist.h) + +Adds a reference to the new Genscript program, a free Ghostscript-based +replacement for enscript. (README) + +Notes that no further changes will be accepted for the gdevcdj.c file, which +has gotten completely out of hand. (gdevcdj.c). + +Documents the TextAlphaBits and GraphicsAlphaBits device parameters. +(language.doc) + +</pre><h3><a name="V3.65_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - gs_pdfwr.ps and pdf2ps.1 weren't installed on Unix systems. +(unix-end.mak) + - The pdf2ps shell script didn't accept any options. (pdf2ps) + - The rule for srle.$(OBJ) incorrectly specified a dependency on +srld.c. (lib.mak) + - The rule for command lists didn't include stream.$(OBJ). +(lib.mak) + - The stack size for one configuration was set too small. +(watclib.mak) + +Speeds up genconf by eliminating redundant file reading and processing. +(genconf.c) + +Moves the pixel-difference filters from int.mak to lib.mak. (int.mak, +lib.mak) + +Moves the library parts of the HSB color and Level 1 path (arcs, pathbbox, +path enumeration) options from int.mak to lib.mak, and adds them to the +library makefiles. (int.mak, lib.mak; bclib.mak. ugcclib.mak, watclib.mak) + +</pre><h3><a name="V3.65_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - pdf2ps would fail if it encountered a font with a standard +encoding. (pdf_2ps.ps) + +Adds new switches to pdf2ps: + -dPSBinaryOK allows writing binary image data in the output. +(pdf_2ps.ps) + -dPSLevel1 forces Level 1 compatible output. (int.mak, +unix-end.mak, gs_l2img.ps, gs_pdf.ps, pdf_2ps.ps, pdf_main.ps) + -dPSNoProcSet causes the ProcSet to be loaded at run time, not at +conversion time -- primarily useful for debugging. (pdf_2ps.ps) + +Adds a utility for viewing PCX files, so we can preview high-resolution +output in a reasonable compressed format. (unix-end.mak, viewpcx.ps) + +</pre><h3><a name="V3.65_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Some compilers require an extra #include to define structures even +if they are only referenced by pointers. (int.mak, gdevpdf.c, gdevpdfp.c) + - A procedure name was duplicated. (gdevpdfi.c) + - A pdfmark between a gsave and a grestore could cause a +rangecheck error. (gdevpdfp.c) + - A pdfmark between a gsave and a grestore could cause the +grestore to do an inappropriate initgraphics. (gs_pdfwr.ps) + - The pdfwrite driver could reinitialize the output file +unpredictably. (gdevpdfp.c) + - The PCX drivers didn't clear padding bytes at the ends of scan +lines. (gdevpcx.c) + - The PCX drivers didn't set the "version" field correctly (this was +OK in 2.6.1, bug introduced sometime since then). (gdevpcx.c) + - Whoever last touched the color inkjet drivers completely broke the +handling of the BitsPerPixel parameter, again. We were able to half-fix it, +but the code is impossible to understand, let alone modify safely. +(gdevcdj.c) + - Anti-aliased characters didn't work with banding. (gxclpath.c) + - The PGM/PPM drivers didn't recognize black-and-white pages for +optimization to PBM, only gray or colored. (gdevpbm.c) + - The color inkjet drivers initialized the params_size field of the +static instance incorrectly, resulting in garbage in the last few structure +members when instances were copied. (gdevcdj.c) + - The 24-bit PCX driver didn't pad each scan line to an even number +of bytes. (gdevpcx.c) + - The svga16 driver initialized its procedures incorrectly. +(gdevpcfb.c) + +Adds text writing capability to the PDF writer. In its present form, this +is a very bad hack: it only works for the 14 built-in fonts with their +standard encodings. (gdevpdfx.h, gdevpdf.c, gdevpdfp.c, gdevpdft.c) + +Adds garbage collection and finalization for device instances (gscdefs.h, +gsdevice.h, gxdevice.h, gconf.c, gdevmrop.c, gsdevice.c, gslib.c, gsmain.c). +(See the "Driver instance allocation" section of drivers.doc for more +details about what is required to make this work.) + + - When an open device is freed (explicitly, by garbage collection, +or by 'restore'), if the device was allocated dynamically by Ghostscript's +standard allocator, the device's close procedure will be called. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE for dynamically created devices, which +formerly were not closed automatically, even when Ghostscript exited. + + - Device instances allocated in GC-able space will be traced +like other objects, assuming they have proper structure descriptors. + +Provides a (very slow but correct) default implementation of copy_alpha. +(gxcindex.h, gdevdflt.c, gsimage4.c) + +Removes the implementation of copy_alpha in gdevpbm.c, since this is now +implemented (more efficiently) in gdevm24.c. (gdevpbm.c) + +Adds TextAlphaBits and GraphicsAlphaBits as readable parameters for all +devices. (gsdparam.c, gdevpbm.c, gdevsvga.c) + +</pre><h3><a name="V3.65_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - There were some attempts to coerce long to short pointers +on segmented platforms. (gsdparam.c, gstype1.c) + - The stack could overflow on the 16-bit MS Windows platform. +(gxfill.c, gxclread.c) + - The DLL callback parameter for window resize events was computed +incorrectly on 16-bit systems. (gdevwdib.c) + - A file included gxdevice.h unnecessarily. (bcwin.mak, +bcwin32.mak, msvcwint.mak, gp_mswin.c) + +</pre><h3><a name="V3.65_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Storing into a read-only dictionary with def or store was +allowed. (dstack.h) + - If the interpreter allocated extra space for a dictionary +to round its storage size up to a power of 2, it was possible for +length to exceed maxlength. (idict.c, iinit.c) + - The if and ifelse operators didn't check that their +'procedure' arguments were actually procedures. (interp.c, zcontrol.c) + - The undef operator was defined even in Level 1 +configurations. (We need this capability for all configurations, so +we always define .undef.) (zdict.c, gs_*.ps, pdf_*.ps) + - In Level 1 configurations, copying a dictionary should copy the +access attributes, but it didn't. We have to work around this +compatibility quirk in a lot of places. (gs_cidfn.ps, gs_cmap.ps, +gs_dps1.ps, gs_fonts.ps, gs_init.ps, gs_l2img.ps, gs_lev2.ps, gs_pdf.ps, +gs_pfile.ps, gs_res.ps, gs_setpd.ps, gs_type1.ps, zdict.c) + - DSC comments that crossed a buffer boundary didn't call the +scan_dsc_proc. (iscan.c) + - "statusdict /setpage get exec" caused an error. (gs_statd.ps) + - The default size of systemdict had become slightly too small. +(iinit.c) + - Doing a showpage or copypage would cause the equivalent of a +setpagedevice at the next restore or grestore. We aren't entirely sure that +the fix we made doesn't have bad side-effects. (gs_setpd.ps) + - Not all filters accepted (and ignored) an optional dictionary +parameter on the stack. (ifilter.h, zfbcp.c, zfdecode.c, zfilter.c, +zfilterx.c, zfzlib.c, zmisc1.c) + - The PixelDifference filters required a Columns parameter, rather +than defaulting it to 1. (spdiffx.h, zfdecode.c) + - Contrary to the NEWS entry for release 3.60, the LZW filters did +not implement pixel differencing. (zfdecode.c, zfilter2.c) + - readstring with a 0-length string didn't signal a rangecheck. +This doesn't make a lot of sense to me, but it's what the Adobe +documentation specifies. Unfortunately, we have to work around this in a +number of places that assumed the sensible definition (return () true +without reading anything). (gs_l2img.ps, pdf_font.ps, zfileio.c) + - Encoded number strings didn't work (bug introduced in 3.64). +(ibnum.c) + - The allocator could produce spurious "free large 0x...... chunk +not found" messages. (These didn't cause any harm, but they were +disturbing.) (gsalloc.c) + +Changes the default transfer function for high-resolution devices so +that it is the identity function if the device is continuous-tone. +(gs_init.ps) + +Undoes the "subversion" of zgetdevice noted in release 3.61, since it +is now possible to copy devices safely. (zdevice.c) + +Changes the implementation of the garbage collector and restore so that +object finalization code may safely free objects. (igc.c, isave.c) + +Reimplements essentially all of Type 1 BuildChar in C. (gs_init.ps, +gs_type0.ps (deleted), gs_type1.ps, ifont.h, zchar.c, zchar1.c, zfont.c) + +Reimplements DISKFONTS as a separate feature (diskfont.dev), and changes it +to use Type 4 fonts rather than special machinery. Currently this feature +is included only in the makefiles for 16-bit architectures. (bc.mak, +bcwin.mak, int.mak, tc.mak, gs_diskf.ps, gs_fonts.ps, gs_type1.ps) + +Converts the library search path from a list of strings to a (PostScript) +array of strings, one string per directory. (iminst.h, main.h, gs.c, +gsmain.c, zfile.c) + +Adds a hook procedure scan_comment_proc for processing all comments, +similar to scan_dsc_proc. If both are set, scan_comment_proc is used only +for non-DSC comments. (iscan.h, iscan.c) + +</pre><h3><a name="V3.65_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Encrypted PDF files produced a random error (usually ioerror in +--token--) rather than a meaningful message. (pdf_main.ps) + - Color space setting didn't work. (gs_pdf.ps) + - The algorithm for skipping a possible blank line following the +'stream' keyword wasn't robust enough. (We aren't sure the new algorithm is +exactly right, either.) (pdf_base.ps) + +Gets rid of the special handling of the LZW decoding filter, since the +filter itself now handles the Predictor facility. (pdf_base.ps) + +</pre><h3><a name="V3.65_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - Configurations with LZW encoding but not decoding had an +undefined reference. (lib.mak, slzwc.c, slzwd.c) + - The LZW-compatible encoder didn't provide a 'reset' procedure. +(slzwce.c) + - The PixelDifference filters didn't work for most parameter +combinations in which each pixel took up more than 1 byte. (spdiff.c) + - Temporary write streams could cause an infinite loop. (We only +need such streams for the Predictor = 2 case of LZWEncode: this is why the +bug never showed up before.) (stream.c) + +Adds an optional reinitialization procedure to the stream template. Note +that this is not the same as the PostScript 'reset' operation or the stream +resetting operation invoked by sreset: the reinit procedure in the template +reinitializes any internal state of the encoder or decoder without affecting +buffered data. (scommon.h, strimpl.h, sbcp.c, sbhc.c, slzwce.c, slzwd.c, +slzwe.c, smtf.c, spdiff.c, srle.c) ****** NOT DONE YET: sbwbs.c, szlibd.c, +szlibe.c + +Adds a decoding stream for the run-length compression used in PCX. +(spcxx.h, spcxd.c) + +</pre><h3><a name="V3.65_Library"></a>Library</h3><pre> + +Fixes bugs: + - A recent edit introduced an extraneous right parenthesis. +(gpcheck.h) + - A minor nit in a macro could cause incorrect grouping of 'if' +statements under implausible conditions. (gsmdebug.h) + - The first data plane buffer of an image enumerator didn't get +marked during garbage collection. (gsimage.c) + - The Watcom C compiler required splitting up a declaration. +(gxcmap.h) + - The extern declarations for the tables in gconf.c weren't gathered +together in one place. (gscdefs.h, gxiodev.h, gconf.c, gsdevice.c, gslib.c, +gsinit.c, gsiodev.c) + - charpath and show produced different output. We fixed this by +undoing a "bug fix", introduced in version 2.9, which suppressed hinting and +coordinate rounding for charpath; we aren't sure this won't cause some +obscure problems to reappear. (gstype1.c) + - Clipping with a rectangle usually created a 3-rectangle clipping +list, slowing down all drawing operations (performance bug only). +(gxacpath.c) + - stroking in a rotated coordinate system sometimes thought lines +were always thin when they actually weren't. (gxstroke.c) + - An unsigned quantity wasn't properly converted to signed, possibly +causing band path coordinates to get mangled. (gxclread.c) + - A bug in the Borland compiler caused an unsigned quantity to be +interpreted as signed, causing band path coordinates to get mangled. +(gxclread.c) + +Changes structure type pointers on 16-bit segmented systems to full +32-bit pointers. This will increase time and space requirements very +slightly on these systems. (gsmemory.h, gxobj.h) + +Changes the memory manager so that object finalization code may safely free +objects. (gsmemory.h, gsstruct.h, gsalloc.c, gsmemory.c) + +Refactors the Type 1 CharString interpreter so it can be included in +the imager library. (gstype1.h, gxtype1.h, gstype1.c) + +Starts to refactor the implementation of band lists in memory so that it can +use any encoding/decoding filter. Currently this choice is made at compile +time, but it could easily be made dynamic. (gxclmem.h, gxclmem.c) + +Starts to refactor image rendering so that, like path filling and stroking, +it only uses imager state and can be done after banding. (gxcmap.h, +gxdraw.h, gximage.h, gsimage*.c, gxcmap.c) + +Speeds up copy_mono for 2-bit-per-pixel devices a little. (gdevm2.c) + +Implements an optimized copy_alpha for 24-bit memory devices. (gdevmem.h, +gdevm24.c) + +Speeds up filling rectangles significantly. (gsbitops.c) + +Changes the band list rasterizer to use the memory space of the device +rather than the C heap: our allocator is considerably faster than malloc. +(gxclread.c) + +Speeds up stroking a little, especially in 90 degree rotated coordinate +systems. (gxstroke.c) + +</pre> + +<h2><a name="Version3.64"></a>Version 3.64 (limited, incremental) (1/27/96)</h2> + +<p> +This release fixes a few more bugs, including some serious bugs in band +lists, and adds pdfmark processing to the PDF writer. The PDF writer is +still not fit for real use, since it converts all text characters into 720 +dpi bitmaps and turns images into zillions of tiny rectangles (!), but it +should be producing legal output. + +<h3><a name="V3.64_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - Frans van Hoesel's e-mail address was incorrect. (gdevdjet.c) + - The man page for ansi2knr was out of date. (ansi2knr.1) + - The description of a procedure was out of date. (gxdcolor.h) + +Notes that several "optional" features are required in order to obtain the +full PostScript Level 1 functionality at the library level. (lib.doc) + +Documents the top-level interpreter API. (imain.h) + +Adds details on differences between the imager API and the PostScript +graphics operators. (lib.doc) + +Notes (here, in NEWS) that the change for device prototypes in 3.61 made the +protection attributes of a device significant for the first time. Only the +writable attribute is significant so far. (news) + +</pre><h3><a name="V3.64_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The .dev rules in the library makefiles didn't list echogs as a +dependency. (jpeg.mak, libpng.mak, zlib.mak) + - The install rule tried to install gs.1.1 etc. rather than gs.1 +etc. (unix-end.mak) + - The install rule tried to install some nonexistent *.1 files. +(unix-end.mak) + +Adds 'help' and '?' procedures to assist users who don't read the +documentation. (gs_init.ps) + +Adds -A-, -E-, and -Z-... to turn off debugging flags. (gs.c) + +Adds a -dDELAYBIND switch to delay binding operators, to allow special +packages like pstotext to redefine them. (gs_init.ps) + +</pre><h3><a name="V3.64_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - Fonts produced by rollconv.ps left a couple of items on the +operand stack, and left array packing set to true. (rollconv.ps) + +Makes ansi2knr require that the first token after a function header be a +left brace on the next line, so it can cope with some macros in IJG release +6a. Also updates it to work better without the GNU configure machinery, and +on some old compilers. (ansi2knr.c) + +Changes align.ps so it can be used directly to determine the margin +parameters. (align.ps, psfiles.doc) + +</pre><h3><a name="V3.64_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The TIFF/F (G3 and G4) drivers were broken (bug introduced in +3.60). (gdevtfax.c) + - The PDF writer produced invalid output for 0-width, 0-height +images. (gdevpdfi.c) + - The PDF writer wasn't a page device. (gdevpdf.c) + - The PDF writer assigned the Contents node rather than the Pages +node as the Parent of each page. (gdevpdfx.h, gdevpdf.c) + +Corrects the margin information for the DeskJet printers to be the actual +values observed on a printer; all of the values in the file were wrong. +(gdevdjet.c) + +Adds pdfmark recognition and conversion to the PDF writer. All documented +pdfmarks (ANN, ARTICLE, DEST, DOCINFO, DOCVIEW, LNK, OUT, PAGE, PAGES, PS) +are recognized and converted, but some of them are not converted correctly. +(gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfm.c) + +Adds recognition of all Distiller parameters, except *ImageDict, to the PDF +writer. Currently only ASCII85EncodePages actually has any effect. +(gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c) + +Ensures that PDF output files include at least a default Info dictionary. +(gdevpdf.c) + +Changes the handling of coordinates in PDF output files so that the scale is +always 72 dpi, and so that each graphics operator is on a line by itself, +for compatibility with Adobe Illustrator. (gdevpdfx.h, gdevpdf*.c) + +Adds a driver for ImageMagick's MIFF format. The driver currently only +produces 24-bit, direct color, RLE compressed output. (gdevmiff.c) + +</pre><h3><a name="V3.64_Platforms"></a>Platforms</h3><pre> + +Changes the gp_check_interrupts platform procedure so that instead of just +returning a Boolean, it can now also return a negative error code. THIS IS +(THEORETICALLY) A NON-BACKWARD-COMPATIBLE CHANGE. However, since all +implementations of this procedure should only have been returning 0 or 1 up +to now, no existing code should need to be changed. (gpcheck.h, gsmisc.c) + +</pre><h3><a name="V3.64_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - devicenames was accidentally deleted. (gs_init.ps) + - -dFAKEFONTS could cause the memory manager to waste a lot of time. +(gs_dps1.ps) + - Using -r or -dFIXEDMEDIA with a non-page device caused an error. +(gs_init.ps) + - A VMS compiler reserves the word "readonly", which was used as a +parameter name. (imain.h, gsmain.c) + - A garbage collection during the execution of x/y/xyshow with an +array providing the values could get confused. (ibnum.h, ichar.h, stream.h, +ibnum.c, iscanbin.c, zchar.c, zchar2.c, zdps1.c, zupath.c) + - Errors in encoded number strings produced a typecheck rather than +a rangecheck error. (ibnum.c, zupath.c) + +Updates the DCT filters for IJG release 6a. (zfdctc.c) + +Provides an API call for getting the real stdio files. (imain.h, +gs.c, gsmain.c) + +</pre><h3><a name="V3.64_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - If the CCITTFaxEncode stream encountered an output buffer boundary +while processing the last scan line of input, it could fail to process some +the scan line. (scfe.c) + - A couple of pointers weren't always initialized, possibly +confusing the garbage collector. (stream.c) + - The weighting coefficient structures used for image scaling +weren't declared properly for the garbage collector. (siscale.h, siscale.c) + +</pre><h3><a name="V3.64_Library"></a>Library</h3><pre> + +Fixes bugs: + - Unrotated patterns always used the bounding box size as the step, +rather than XStep/YStep. (gspcolor.c) + - Alpha computations for graphics could be seriously incorrect (bug +introduced in 3.6x). (gdevabuf.c) + - The length of the next_data_x command for the fill_mask operation +was incorrect, causing the band list to become confused (bug introduced in +3.63). (gxclpath.c) + - An extern was omitted, causing linker warnings. (gxdevice.h) + - RasterOps could cause an invalid access because the palette +for a memory device wasn't set. (gdevmrop.c) + - gximage.h was included unnecessarily. (gspaint.c) + - Color screens caused a segmentation fault (bug introduced in +3.6x). (gxcht.c) + - cshow returned the width in an incorrect coordinate system. +(gscoord.h, gschar.c) + - Filling or stroking a path that lay entirely off the page in the ++X or +Y direction could corrupt memory (bug introduced in 3.6x). +(gxclpath.c) + - When banding, painting characters with halftones produced random +results (bug introduced in 3.6x). (gxclpath.c) + - When banding, characters could get clipped when they shouldn't be +(bug introduced in 3.6x). (gxclpath.c) + - The default implementation of fill_mask could discard clipped +bitmaps (bug introduced in 3.6x). (gdevdflt.c) + - Non-halftoned 24-bit colors could get garbled when banding (bug +introduced in 3.6x). (gxclist.c) + - When banding, if a stroked path had subpaths that fell entirely +outside the current band, the rest of the path was drawn in the wrong place +(bug introduced in 3.6x). (gxclpath.c) + +Speeds up image interpolation on machines with slow floating point. +(siscale.h, siscale.c) + +Speeds up interpolated images when using device color spaces. (gxcvalue.h, +gxfrac.h, gdevht.c, gxcmap.c, gsimage.c, gsimage3.c) + +Speeds up color mapping a little by removing tests and calls in favor of +code copying. (gxcmap.c) + +Implements RasterOp for 24-bit RGB devices. (gdevm8.c, gdevm24.c, +gdevmrop.c) + +</pre> + +<h2><a name="Version3.63"></a>Version 3.63 (limited, incremental) (1/14/96)</h2> + +<p> +This release has the usual collection of bug fixes, and two significant +additions: AccurateScreens, and the first draft of a PostScript->PDF +converter ("distiller"). + +<h3><a name="V3.63_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - Some documentation for pstoppm.ps was out of date. (psfiles.doc) + - Documentation for acctest.ps, view*.ps, and zeroline.ps was +missing. (psfiles.doc) + - The documentation for rollconv.ps omitted the .CSR file. +(rollconv.ps) + +Removes an inappropriate RCS Id line. (gs.1) + +Adds a list of paper sizes to the man page. (gs.1) + +Suggests that driver authors use parameterization rather than copying when +possible. (drivers.doc) + +Adds an announcement of Ghostscript support on CompuServe. (README) + +Documents the new -dCOLORSCREEN switch and the existing -dDITHERPPI=lpi +switch. (use.doc) + +Notes that the OS/2 implementation now requires EMX/GCC 0.9b rather than +0.9a. (install.doc) + +Adds some new man pages. (pdf2ps.1, ps2ascii.1) + +Greatly expands lib.doc. (lib.doc) + +</pre><h3><a name="V3.63_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The pg target for Unix platforms didn't include some necessary +additional X11 libraries. (unix-end.mak) + - The Unix library makefile didn't define CCAUX or CCLEAF. +(ugcclib.mak) + - Unix systems didn't `install' some .ps files. (unix-end.mak) + +Extends genconf so that features at the library level can have +initialization procedures. (gconf.c, genconf.c, gsinit.c) + +Adds a -dCOLORSCREEN[=false] switch to force enabling or disabling of +4-color screens. (gs_init.ps, gs_setpd.ps) + +</pre><h3><a name="V3.63_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The prfont utility didn't leave enough of a margin on the left. +(prfont.ps) + - The ps2ascii utility still created files _temp_.out and _temp_.err +even though they are no longer used. (ps2ascii.ps) + - The acctest.ps file was empty, rather than including a test +program. (acctest.ps) + +Adds ps2pdf[.bat] scripts for invoking the new pdfwrite driver. (ps2pdf, +ps2pdf.bat, unix-end.mak) + +</pre><h3><a name="V3.63_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The x11alpha driver had a patch that suppressed output in many +cases. (gdevxalt.c) + - The X driver set up a parameter incorrectly in copy_color. +(gdevx.c) + - An explicit cast was needed to handle a 'const' problem. +(gdevpng.c) + +Adds a pdfwrite driver that creates syntactically correct PDF output. The +output is only reasonable for fill/stroke graphics, not for text or images. +(iscan.h, sa85x.h, sfilter.h, gdevpdf.c, sfilter2.c, zfdecode.c) + +</pre><h3><a name="V3.63_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The test for WinExec failure on Win32 was incorrect. (gp_mswin.c) + - getenv was declared redundantly on OS/2. (gp_os2.c) + - gs16spl.c was missing <string.h>. (gs16spl.c) + +</pre><h3><a name="V3.63_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Images read data in smaller and smaller increments (performance +bug only). (zpaint.c) + - Images with MultipleDataSources=true and two or more DataSources +referencing the same stream could get confused. (zpaint.c) + - Invoking setpagedevice with an undefined key, even with Policy = +1, caused an error. (gs_setpd.ps) + - IEEE floats in binary tokens or encoded number strings were read +incorrectly on CPUs that use non-IEEE floating point. (ibnum.c) + +Adds a 'const' to the second parameter of zimage_setup. (zimage2.c, +zpaint.c) + +Encapsulates the filling of free memory blocks in a macro. (igc.c, +igcstr.c) + +</pre><h3><a name="V3.63_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - If the first line of a file began with % but the line was longer +than 255 characters, an error occurred. (pdf_main.ps) + - Masked images didn't set the color before drawing. (gs_pdf.ps) + - Extraneous blank lines in the trailer or cross-reference region +caused an error. (pdf_base.ps, pdf_main.ps) + +</pre><h3><a name="V3.63_Streams"></a>Streams</h3><pre> + +Speeds up image interpolation a little. Much more could be still be done. +(siscale.c) + +</pre><h3><a name="V3.63_Library"></a>Library</h3><pre> + +Fixes bugs: + - An error in handling a boundary condition could cause a horizontal +streak of pixels to be turned on or off when it shouldn't be. (gxfill.c) + - The new scan-line-based filling loop could write pixels twice. +(The old trapezoid-based loop still does write pixels twice.) (gxfill.c) + - For multi-plane images, gs_image_next only sets *pused for the +last plane; this wasn't documented. (gsimage.h) + - Images with MultipleDataSources=true and two or more DataSources +referencing the same stream could get confused. (gsimage.h, gsimage0.c) + - 12-bit gray images caused an invalid memory access. (gsimage.c) + - Nearly-zero-thickness lines didn't get filled, because the hack +that compensates for this peculiarity of the MS Windows PostScript driver +accidentally got disabled. (gxfill.c) + - Some casts to remove 'const' were omitted. (gxclread.c) + - 1-line-high bitmaps could get written in the band list with an +inconsistent number of bytes, causing errors when reading. (gxcldev.h, +gxclbits.c, gxclist.c, gxclpath.c, gxclread.c) + - Isolated dots produced by round caps usually disappeared. (They +still disappear sometimes.) (gxstroke.c) + - On 16-bit platforms, the computation of t2 and t3 in +gx_curve_x_at_y could overflow, leading to incorrect output. (gxpcopy.c) + - Stroking horizontal or vertical lines could produce variations of +1 pixel in the line width. (gxstroke.c) + - The default clipping region for band rendering was too large, +leading to wasted work. (gxclread.c) + - Guarantees no double pixel writing when necessary, i.e., when a +non-idempotent RasterOp is selected. (gsropt.h, gxfill.c) + - For unrotated black-and-white images, one column of pixels at the +right edge of the image might be incorrect. (gsimage1.c) + - A const pointer was passed inappropriately. (gxistate.h, +gscoord.c) + - CIE color conversion could address 1 element beyond the end of an +array, with unpredictable results. (gscie.c) + +Separates out the higher-level band list facilities, so they can be an +optional feature. (lib.mak, gxcldev.h, gxclpath.h, gxclbits.c, gxclist.c, +gxclpath.c, gxclread.c) + +Implements bitmap (fill_mask) clipping in the band list. (gxcldev.h, +gxclpath.h, gxclist.c, gxclpath.c, gxclread.c) + +Starts to separate out the RasterOp facility as an optional feature. +(lib.mak, gxdevice.h, gxdevrop.h, gdevdflt.c, gdevmrop.c) + +Encapsulates the filling of free memory blocks in a macro, at the request of +a licensee. (gdebug.h, gsmdebug.h, gsmemory.h, gs.c, gsalloc.c, gsmemory.c, +gxbcache.c) + +Speeds up fill_rectangle for 32-bit devices. (gdevm32.c) + +Speeds up path writing in band lists a little. (gxclpath.c) + +Implements AccurateScreens along the lines described in the Adobe +documentation. The current implementation can produce very large +super-cells, so it will not always be able to actually increase the screen +accuracy. (gxdht.h, gsht.c, gshtscr.c) + +</pre> + +<h2><a name="Version3.62"></a>Version 3.62 (limited, incremental) (12/26/95)</h2> + +<p> +This release makes some licensee-requested improvements in the garbage +collector and fixes a couple of minor bugs. It also constitutes a +checkpoint for the forthcoming forked 3.53 release. + +<h3><a name="V3.62_Documentation"></a>Documentation</h3><pre> +Notes that for Win32s, gs16spl.exe must be in the same directory as +gswin32.exe. (install.doc) + +Changes `3.N' to a real version number in the man page. (gs.1) + +Adds a reference to dos-psv, another "dumb terminal" user interface for +Ghostscript intended for MS-DOS users. (README) + +</pre><h3><a name="V3.62_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The stack size for some of the PC platforms was set too small. +(watc.mak, watcwin.mak) + +Changes the default value of ORIENT1 from false to true, i.e., assumes that +a value of 1 for the orientation parameter of setpageparams indicates +portrait orientation. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. It only +affects files created for roll-media imagesetters. (gs_init.ps, use.doc) + +</pre><h3><a name="V3.62_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The definition of the op_index_op_array_table macro had an +incorrect trailing semicolon. (opdef.h) + - Setting the PageSize policy to 1 and then trying to set the page +size caused an error if FIXEDMEDIA was selected. (gs_setpd.ps) + +Changes the garbage collector marking phase so that instead of just using a +single block (allocated, free, or default) for the mark stack, it can chain +all three types of block together. (igc.h, igc.c, igcstr.c, ilocate.c) + +Refactors the garbage collector slightly to reduce inter-module +dependencies. (int.mak, igc.h, igcstr.h, igcstr.c) + +Changes the garbage collector to keep track of ranges within each chunk that +must be scanned if the mark stack overflows. (gxalloc.h, igc.c) + +Adds [write]===[only] procedures, which act like == but also print the +contents of dictionaries, and ppstack, which acts like pstack but uses ===. +Changes ESTACKPRINT and OSTACKPRINT to use === rather than ==. (gs_init.ps, +gs_setpd.ps) + +</pre><h3><a name="V3.62_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - If a PDF file substituted a calibrated color space for the +DeviceGray or DeviceRGB color space using a ColorSpace resource, the +PostScript file that pdf2ps produced from that PDF file caused an error. +(gs_pdf.ps) + +</pre><h3><a name="V3.62_Library"></a>Library</h3><pre> + +Fixes bugs: + - The debugging code for checking the sorting of line lists didn't +check for an empty list. (gxfill.c) + +</pre> + +<h2><a name="Version3.61"></a>Version 3.61 (limited) (12/10/95)</h2> + +<p> +This limited release fixes a few bugs (including a couple that significantly +affected character quality) and also includes some substantial performance +improvements. + +<h3><a name="V3.61_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The directory name for the PNG library was incorrect. +(libpng.mak) + - The analysis of curve monotonocity in gxpcopy.c had an error. +(gxpcopy.c) + +Changes the subdirectory names for zlib and libpng to be consistent. +(make.doc) + +Documents a possible problem with object file format incompatibilities in +certain versions of GNU/Linux. (make.doc) + +Documents the new distinction between devices and device prototypes. +(language.doc) + +Adds a pointer to DEC's free pstotext utility. (README) + +</pre><h3><a name="V3.61_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - zlib.mak omitted some files in the encoding module dependencies. +(zlib.mak) + - os2.mak referred to png.mak rather than libpng.mak. (os2.mak) + - The png devices didn't include gdevpccm.$(OBJ) as a required file. +(devs.mak) + - Some modules in lib.mak referred to stream.h, which was defined in +int.mak. (int.mak, lib.mak) + - Quite a few dependencies on header files were missing from the +makefiles. (int.mak, lib.mak, *.mak) + +Adds a 'pg' target to the Unix makefiles, for building profiling +configurations. (unix-end.mak) + +</pre><h3><a name="V3.61_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - Type 1 fonts in which some characters are defined by PostScript +procedures couldn't be compiled. (ccfont.h, iccfont.c, font2c.ps) + - pdf2ps didn't write Widths or Encoding in the converted file, +producing incorrect spacing and incorrect characters. (pdf_2ps.ps) + - markhint.ps didn't handle the Type 1 'div' operator, causing +typecheck errors. (markhint.ps) + - markhint.ps ignored the hstem3 and vstem3 hints. (markhint.ps) + +Changes the rollconv.ps utility to produce files whose names conform to the +8.3 length restriction, and to reduce the fixed RAM overhead for Kanji +fonts. (rollconv.ps) + +Adds a utility for detecting compiler problems that affect Ghostscript. +(bughunt.sh) + +</pre><h3><a name="V3.61_Drivers"></a>Drivers</h3><pre> + +Adds anti-aliasing capability (-dTextAlphaBits and -dGraphicsAlphaBits) to +the PGM and PPM drivers. (gdevpbm.c) + +Declares the static_procs member of the device structure as const *. This +should have been done a long time ago! (drivers.doc, gxdevice.h) + +</pre><h3><a name="V3.61_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - Printing didn't work in 32-bit MS Windows environments. +(bcwin32.mak, gdevmswn.c, gp_mswin.c) + - There were some compatibility problems with IBM C. (os2.mak, +gsdll.h, gdevpm.c, gp_os2.c) + +Adds the PNG drivers to the 32-bit MS Windows and OS/2 makefiles. +(bcwin32.mak, os2.mak) + +Adds a conditional to work around a bug in gcc 2.7.x (it didn't recognize +that the target of a const T * might still be mutable through aliasing). +(stdpre.h) + +</pre><h3><a name="V3.61_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Rasterizing a character in a Type 1 font with an invalid FontBBox +left some garbage on the operand stack (bug introduced in 3.52 or 3.60). +(gs_type1.ps) + - The font substitution algorithm could fail or loop. (gs_fonts.ps) + +Adds a little more support for CID fonts and CMaps. (gs_cidfn.ps, +gs_cmap.ps) + +</pre><h3><a name="V3.61_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - An #include <memory_.h> was missing. (ziodev.h) + - Scanner-detected errors (primarily syntaxerror) didn't report the +file position. (gs_init.ps) + - Rotated characters were rendered incorrectly (bug introduced in +3.52). (gstype1.c) + - Some compilers got upset about the use of 'dict' as a variable +name. (zdict.c) + - Operand stack overflows sometimes didn't set the "requested" field +correctly. (interp.c) + - Using -dBufferSpace= with a non-printer device caused an error. +(gs_init.ps) + +Adds zlibEncode/Decode filters. (int.mak, zfzlib.c) + +Separates devices from device prototypes. Prototypes, which lack the +writable attribute, cannot be installed as the current device or have their +parameters changed. This change allows Ghostscript to be exited and +restarted without being reloaded, which solves some problems with DLL +usage. ****** WE HAD TO SUBVERT THIS CHANGE BECAUSE OF MEMORY MANAGER +PROBLEMS, by making zgetdevice return a writable reference to the +prototype. (We finally fixed this in release 3.65.) (gs_init.ps, iref.h, +opcheck.h, zdevice.c, ztype.c, zwppm.c) + +Extends the client API to allow for pushing values onto the operand stack. +(imain.h, gs.c, gsmain.c) + +Defines a .setdefaultscreen procedure that sets the default halftone screen, +transfer function, and stroke adjustment for the current device. Changes +selectdevice and setpagedevice so that they call .setdefaultscreen; +setpagedevice calls .setdefaultscreen before calling the Install procedure, +so that Install can set different parameters if it wishes. Note that +setdevice does not do this. (gs_init.ps, gs_setpd.ps) + +</pre><h3><a name="V3.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Tf set the current text font twice, and interacted with pdf2ps in +an awkward way. (gs_pdf.ps, pdf_2ps.ps, pdf_font.ps) + - If a font had variant Widths, it could get confused in the cache +with the underlying font. (pdf_font.ps) + - If a character appeared twice in an encoding and the font +specified different Widths values for the two occurrences, the last Width +would be used. We patched this to ignore zero Widths, which is not the +correct solution but which almost always produces correct output. +(pdf_font.ps) + - Arrays containing nulls didn't print out correctly (bug introduced +in 3.60). (gs_init.ps) + - Some PDF files contain very large dictionaries, which caused a +stackoverflow. (pdf_base.ps) + +Speeds up the initial processing of PDF files by caching the map from page +numbers to page objects, and by not scanning the outlines if we aren't +producing PostScript output. (pdf_2ps.ps, pdf_base.ps, pdf_main.ps) + +</pre><h3><a name="V3.61_Streams"></a>Streams</h3><pre> + +Adds zlibEncode/Decode filters. (lib.mak, szlibx.h, szlibc.c, szlibd.c, +szlibe.c) + +</pre><h3><a name="V3.61_Library"></a>Library</h3><pre> + +Fixes bugs: + - glyphshow displayed a character with code 0 rather than the +requested character (bug introduced in 3.60.) (gschar.c) + - If trimming white space around a character reduced its raster, the +character was garbled in the cache (bug introduced in 3.60.) (gxccman.c) + - colorimage would incorrectly convert white pixels to black if the +image color space was CMYK, the current color space was not CMYK, and the +number of bits per pixel was 4 or 8. (gsimage2.c) + - One of the clipping tests for images was backwards (bug introduced +in 3.60). (gsimage.c) + - Type 1 fonts that used the Flex feature applied hints to the path +multiple times, causing dropouts, uneven stems, and other problems (bug +probably introduced in 3.21). (gstype1.c) + - If a Type 1 font used the Flex feature within the accent of an +accented character defined with seac, the shape of the accent could be +distorted. (gxtype1.h, gstype1.c) + - If a Type 1 font changed hints using the hint replacement facility +when the last operation was a closepath, the old hints would be applied a +second time, distorting the shape. (gxhint3.c) + - Band lists could read garbage beyond the end of data for a band, +causing unpredictable errors (bug introduced in 3.60). (gxclread.c) + - If the bounding box of the path for fill_path or stroke_path went +outside the device page boundary when banding, out-of-bounds memory +references occurred (bug introduced in 3.60). (gxdevice.h, gxclpath.c) + +Adds an alternative implementation of the core path filling algorithm that +is much faster on objects with curves but doesn't handle Y fattening. This +is the implementation that will normally be used for rasterizing characters. +This implementation rasterizes curves directly, without flattening them. +(gxfixed.h, gxpath.h, gzpath.h, gsdps1.c, gxfill.c, gxpcopy.c, gxpdash.c) + +Speeds up the flattening of curves substantially by omitting more redundant +points. (gxpcopy.c) + +Speeds up character bitmap compression a little more. (gsbitops.h, +gdevabuf.c, gsbitops.c, gxccman.c) + +Speeds up anti-aliased graphics a bit by computing a bounding box before +converting from oversampling to alpha values, and by speeding up the +bounding box computation itself. (gsbitops.h, gdevabuf.c, gsbitops.c, +gxccman.c) + +</pre> + +<h2><a name="Version3.60"></a>Version 3.60 (limited) (11/20/95)</h2> + +<p> +(Note: release numbers 3.54 through 3.59 were deliberately skipped.) This +internal release includes a major redesign of band lists in order to reduce +their size for embedded implementations, to move towards supporting "vector" +output formats, and to further separate the imager library from the language +interpreters. + +<h3><a name="V3.60_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - A comment was incorrect. (viewpbm.ps) + - The PixelDifference filters were not documented. (language.doc) + - The change from currenttime to .currenttime wasn't documented. +(language.doc) + - gs.1 incorrectly stated that the default font directory name +included the version number. (gs.1) + - The -g and -r switches didn't specify that the units for their +arguments are pixels and pixels per inch respectively. (use.doc) + - The PageOffset page device parameter wasn't listed. +(language.doc) + +Changes copy_mono and copy_color to optional procedures. (drivers.doc) + +Adds a reference to ps_view.ps, a "dumb terminal" user interface for +Ghostscript intended for MS-DOS users. (README) + +Splits off the documentation on installing Ghostscript into a separate file. +(readme, install.doc, use.doc) + +Adds documentation on the data format produced by the standard LZWEncode +filter. (readme, lzwce.doc) + +Clarifies XLIBDIR vs. XLIBDIRS. (make.doc) + +Adds user-contributed documentation on building Ghostscript under QNX. +(make.doc) + +</pre><h3><a name="V3.60_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The rule for building dfaxhigh.dev had a typo. (devs.mak) + - The dependencies for gdevpipe.h were missing errno__h and +string__h. (unixtail.mak) + - The geninit program (the implementation of COMPILE_INITS=1) didn't +parse the command line properly, and didn't check for PostScript files +properly. (geninit.c) + - ccfontab.c was omitted from the fileset. The easiest way to fix +this was to rename it to icfontab.c. (gs.mak, int.mak, ccfontab.c) + - The Unix makefiles installed caption.ls (a typo) rather than +caption.ps. (unix-end.mak) + - XLIBDIR, for dynamic library access, wasn't defined. (*head.mak, +*tail.mak, ugcclib.mak) + +Adds the PNG and ZLIB makefiles to the fileset. (*.mak, png.mak, zlib.mak, +tar_cat) + +Puts the PixelDifference filters in the standard Level 2 set, since the LZW +filters may invoke them (a post-Red Book addition to the PostScript language +definition). (int.mak) + +Adds -Wcast-qual to the gcc compiler flags. (gcc-head.mak) + +Adds the PNG drivers to the standard Unix configurations. +(ansi/cc-/gcc-head.mak) + +Adds a -dNOFONTPATH switch to suppress any consultation of the FONTPATH +variable or the GS_FONTPATH environment variable. (gs_fonts.ps, gs_init.ps) + +</pre><h3><a name="V3.60_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The default scaling for viewing PBM files was computed +incorrectly. (viewpbm.ps) + - ps2ascii left a value on the stack for each unrecognized character +it processed, eventually causing a stackoverflow. (ps2ascii.ps) + +Changes viewpbm.ps so that it simply defines P1 through P6, allowing PBM +files to be executed with 'run'. (viewpbm.ps) + +Adds a small benchmark to crudely measure hardware/system performance. The +same file can either be compiled as a C program or executed as a PostScript +program. (bench.c) + +Adds a few PPD files to the distribution. There will probably be more as +time goes on. (tar_gs, unix-end.mak) + +Updates the Unix lpr scripts to handle a wider variety of device options. +(unix-lpr.doc, lprsetup.sh, unix-lpr.sh) + +Adds a utility for converting files produced by Macromedia's Rollup program +to a Type 0 form directly usable by Ghostscript. (rollconv.ps) + +</pre><h3><a name="V3.60_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Forwarding devices passed an incorrect first argument when +forwarding a copy_rop operation. (gsdevice.c) + - Because of a typo, the LaserJet drivers had incorrect margins. +This was probably a new bug in 3.5x. (gdevdjet.c) + - A private name was duplicated. (gdevtfax.c) + - The x11alpha driver passed invalid colors to the X library. +(gdevxalt.c) + - The x11alpha driver set the blue component of colors incorrectly. +(gdevxalt.c) + - Some `const' declarations were missing. (gdevtifs.c, gdevtfnx.c, +gdevxxf.c) + - The size of A4 paper was slightly inconsistent across drivers. +(gdevdjet.c, gdevl256.c) + +Provides default implementations of copy_mono and copy_color in terms of +fill_rectangle. (gxdevice.h, gsdevice.c) + +Adds forwarders for sync_output and output_page. (gxdevice.h, gsdevice.c) + +Adds new optional procedures to the driver interface: + - fill_path for filling a path with a color; + - stroke_path for stroking a path; + - fill_mask for painting a color through a mask. +The default implementations use the existing rasterizer algorithms. This +involves a NON-BACKWARD-COMPATIBLE change to the parameters of a few +internal routines: + gs_currentlineparams + gx_fill_path, gx_fill_path_only, gx_path_expand_dashes, gx_path_flatten +and two externally visible routines not part of standard PostScript: + gs_setfilladjust, gs_currentfilladjust +(gdevmem.h, gdevprn.h, gspath.h, gspenum.h, gxcpath.h, gxdevice.h, gxdraw.h, +gxpaint.h, gxpath.h, gscoord.c, gsdevice.c, gspaint.c, gsstate.c, +gxacpath.c, gxclist.c, gxclread.c, gxcpath.c, gxdraw.c, gxfill.c, gxpaint.c, +gxpcmap.c, gxpcopy.c, gxstroke.c) + +Makes major changes to the dithering algorithm for the color DeskJet and +BubbleJet drivers, contributed by a user. (gdevcdj.c) + +Adds a contributed 12-bit RGB TIFF driver. (gdevtfnx.c) + +</pre><h3><a name="V3.60_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The printjob created by Ghostscript was called "Ghostscirpt" +instead of "Ghostscript". (gp_os2.c) + - An "export" declaration was omitted from DllInit. (gp_mswin.c) + +Removes gp_get_clock (its interface was changed from calendar +days/milliseconds to epoch seconds/nanoseconds in an undocumented, +NON-BACKWARD-COMPATIBLE change in 3.51), and adds a new gp_get_realtime +procedure that returns epoch seconds/nanoseconds. This too is a +NON-BACKWARD-COMPATIBLE change; it is required because we overlooked the +prior change in a batch of user-contributed code. (gp.h, gp_*.c) + +</pre><h3><a name="V3.60_Fonts"></a>Fonts</h3><pre> + +Adds Heavy as a synonym for Bold when doing intelligent font substitution. +(gs_fonts.ps) + +</pre><h3><a name="V3.60_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The setup for the CCITTFax filters set the 'raster' element +redundantly. (zfdecode.c) + - currentscreen and currentcolorscreen could give an error if the +current screen was set with sethalftone (or, for currentscreen, +setcolorscreen). (gs_dps1.ps) + - The font operators didn't work properly if a PostScript file +redefined certain operator names. (gs_res.ps) + - The CCITTFax filters imposed a limit of 9999 Rows or Columns. The +new limit is 32000. (zfdecode.c) + - Streams could get removed from a bookkeeping list prematurely, and +wind up dangling. (zfile.c) + - The garbage collector didn't ask for large enough a mark stack, +and only used half of what it got. (This was only a performance problem.) +(igc.c) + - Two private names duplicated names in a vendor library. (zbseq.c) + - Type 1 fonts didn't enforce the maximum value of BlueScale, which +caused some faulty fonts produced by Fontographer to produce incorrect +output. (zfont1.c) + - cvs / cvrs / = didn't produce Adobe-compatible output. +(gs_init.ps, iutil.h, iutil.c, zfileio.c) + - Multiple -I switches set the search path incorrectly. (gsmain.c) + - Many `const' declarations were missing. (icie.h, idparam.h, +iref.h, iutil.h, idparam.c, iinit.c, ilocate.c, iname.c, interp.c, iparam.c, +iutil.c, zcie.c, zfile.c, zgstate.c, ziodev.c, ztype.c) + - Fonts could wind up with a pointer to the wrong VM space, causing +potential GC or save/restore confusion. (zfont2.c) + - upath could leave garbage on the stack if it failed. (gs_dps1.ps) + +Speeds up rasterizing characters into the cache a little. (gs_type0.ps) + +Changes the default limit on the size of cached characters from the maximum +of (18 points or 5 times the "average" character size) to (18 points or 1% +of the total cache size). (gs_init.ps) + +Adds the DecodedByteAlign parameter to the CCITTFax filters. (zfdecode.c) + +Updates some code for compatibility with the new fill_path driver procedure. +(zupath.c) + +Replaces .set/currentfilladjust with .set/currentfilladjust2, and defines +the former in terms of the latter. (gs_init.ps, zgstate.c) + +Extends the make[word]imagedevice operators to accept palette values of 16, +24, and 32, for creating true-color image devices. (zdevice.c) + +Changes realtime to match the definition of gp_get_realtime. (zmisc.c) + +Removes the [.]currenttime operator. realtime provides interval timing in +milliseconds; the %Calendar% IODevice provides calendar times. (zmisc.c) + +Extends the LZW filters to handle the PDF Predictor (pixel-differencing) +option. (zfdecode.c, zfilter2.c, zfpdiff.c (deleted)) + +</pre><h3><a name="V3.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - The length of an image's data was sometimes calculated +incorrectly, causing an error when converting PDF to PostScript. +(pdf_draw.ps) + - If word spacing and/or text spacing was non-zero, an error could +occur. (gs_pdf.ps) + - Text that was both filled and stroked caused an error. +(gs_pdf.ps) + +</pre><h3><a name="V3.60_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - When closing an encoding filter stream whose target was also a +filter, the latter could get called incorrectly with last = 1, possibly more +than once, leading to premature EOD markers. (stream.c) + - The LZW-compatible encoder put out an incorrect end-of-data code. +(slzwce.c) + - The LZW-compatible encoder didn't put out a reset code soon +enough. (slzwce.c) + - Some `const' declarations were missing. (siscale.c) + - Doing a sgets on a closed stream could call sreadbuf, possibly +causing an error. (stream.c) + +Adds a new (optional) set_defaults procedure to the stream template, which +sets the stream parameters to default values. We only implement it for a +few stream types. (scfx.h, scommon.h, slzwx.h, spdiffx.h, srlx.h, +strimpl.h, scfd.c, scfe.c, slzwce.c, slzwd.c, slzwe.c, spdiff.c, srld.c, +srle.c) + +Adds a new parameter to the CCITTFax filters, DecodedByteAlign. This is an +integer N, which must be a power of 2 between 1 (2^0) and 16 (2^4), that +specifies that decoded data scan lines are always a multiple of N bytes. +The encoding filter skips data in each scan line from Columns to the next +multiple of N bytes; the decoding filter pads each scan line to a multiple +of N bytes. Default value: 1. (scfx.h, scfd.c, scfe.c) + +Increases the maximum width of a scan line for the CCITTFaxEncode filter to +32000 pixels. (scf.h) + +</pre><h3><a name="V3.60_Library"></a>Library</h3><pre> + +Fixes bugs: + - Cached characters sometimes had extra blank space on the left, +leading to some unnecessary bit-shuffling when imaging them. (gxccman.c) + - In rare cases, gray halftones called gx_color_load unnecessarily. +(gxdither.c) + - The list of all-bands commands wasn't initialized/reset properly. +(gxclist.c, gxclread.c) + - Rendering an anti-aliased character to a non-anti-aliased device +didn't free the temporary bitmap, causing memory to be lost. (gxccache.c) + - Dash patterns where the offset exactly reached a run of length 0 +skipped over the 0-length run. (gsline.c) + - Rectangles closed with both lineto and closepath weren't +recognized as rectangles. This is only a performance bug. (gxpath2.c) + - Because of a typo in a macro formal parameter list, a private name +was duplicated. (gsstruct.h) + - Text display operations didn't update the current character in the +enumerator structure during the fastest path through the code. This only +matters to one very unusual commercial client. (gschar.c) + - Some `const' declarations were missing. (gsparam.h, gxistate.h, +stdpre.h; gdevm1.c, gsalloc.c, gsfont.c, gsimage3.c, gsmemory.c, gsmisc.c, +gspcolor.c, gstype1.c, gxfill.c, gxpcopy.c) + +Changes the header files to assume that gcc on Solaris defines +__svr4__ and that, in this case, <string.h> has the right stuff in it. +(memory_.h) + +Refactors the character cache to share structures with a similar cache +used by band lists. Eventually the band list may be able to reference +the character cache directly, saving a lot of copying. (gxbcache.h, +gxfcache.h, gsfont.c, gxbcache.c, gxccache.c, gxccman.c) + +Speeds up getting the side bearing and width of a Type 1 charstring a +little. (gxtype1.h, gstype1.c) + +Redesigns band lists so that they can cache character bitmaps as well as +halftone bitmaps. Characters may be written for all bands, not just the +band(s) they appear in, depending on the setting of the CHAR_ALL_BANDS_COUNT +parameter in gxclbits.c. (gxcldev.h, gxclist.h, gxclbits.c, gxclist.c, +gxclread.c) + +Adds G4 fax compression for band list bitmaps. (gxcldev.h, gxclist.c, +gxclread.c) + +Incorporates the new set_defaults procedure into the memory-based band list +implementation. (gxclmem.c) + +Implements a halftoning device that can be used in a device pipeline. +(gdevht.h, gzht.h, gdevht.c, gxcht.c) + +Factors out imager state from the full graphics state. This division is +preliminary and subject to change. (gxistate.h, gxop1.h, gzstate.h, +gsline.c, gsstate.c, gstype1.c, gxhint*.c) + +Implements passing fill operations in the band list, except for pattern +color or colored halftones. (gxcldev.h, gxclist.h, gxclist.c, gxclread.c) + +Implements passing stroke operations in the band list, except for pattern +color or colored halftones. (gsline.h, gslparam.h, gxline.h, gzline.h, +gsline.c; gxcldev.h, gxclist.h, gxclist.c, gxclread.c) + +Implements the ability to represent halftoned characters in the band list. +(gxccache.c) + +Starts to implement the ability to do halftoning during the rendering phase +rather than before writing the band list (currently for black-and-white +devices only). Doing this required NON-BACKWARD-COMPATIBLE changes to the +interfaces of a few internal procedures: + gx_check_tile_size, gx_render_device_{color,gray} +(gxdcolor.h, gxdht.h, gzht.h, gsht.c, gsimage1.c, gsmisc.c, gspcolor.c, +gsstate.c, gxcht.c, gxclbits.c, gxdither.c, gxht.c) + +Implements passing clipping information in the band list. (gzcpath.h, +gxacpath.c, gxclpath.c, gxclread.c, gxcpath.c) + +Removes the gs_state * parameter from the device color fill_rectangle +procedures and many of their callers, since it is no longer needed. This is +a non-backward-compatible change to an internal API. (gdevmrop.h, +gxdcolor.h, gxdraw.h, gxpaint.h, gdevmrop.c, gsimage.c, gspcolor.c, gxcht.c, +gxclread.c, gxdraw.c, gxfill.c, gxht.c, gxpaint.c, gxstroke.c) + +Removes gxdevice.h from gzstate.h, since not all modules requiring access to +the graphics state need to know the implementation of devices. This entails +adding gxdevice.h to the include lists for some modules. (gxchar.h, +gxcpath.h, gxcvalue.h, gxdevice.h, gxtype1.h, gzstate.h; gschar.c, +gscoord.c, gsdevice.c, gsimage1.c, gsimage2.c, gsimage3.c, gspaint.c, +gspath.c, gsstate.c, gstype1.c, gxccache.c, gxccman.c, gxhint1.c, gxhint2.c, +gxhint3.c, gxpaint.c) + +Adds a compile-time option, ALPHA_LSB_FIRST, which causes alpha-sampled +characters to be nibble-reversed in the cache. This was created for a +specialized application and does not interact well with the rest of the +code. (gsbitops.c) + +Substantially reduces the space required to represent 24- or 32-bit colors +in the band list, by using more aggressive color differencing. (gxcldev.h, +gxclist.c, gxclread.c) + +Changes the allocation of unique IDs for halftone tiles to use the gray +level rather than the number of 1-bits as the increment to a base ID; this +allows more efficient (delta) representation of halftone indices in the band +list. (gxcldev.h, gxclist.c, gxclread.c, gxht.c) + +Substantially speeds up entering anti-aliased characters in the cache, by +removing white space before compressing rather than vice versa. +(gsbitops.c, gxccman.c) + +</pre> + +<hr> + +<h2><a name="Version3.53"></a>Version 3.53 (1/10/96)</h2> + +<p> +This is an anomalous, out-of-sequence release requested by a commercial +licensee. It consists of 3.52 plus the following retrofits from 3.60 +through 3.63: + - PDF interpreter and pdf2ps; + - Type 1 rasterizer fixes; + - Type 1 rasterizer and polygon fill performance improvements; + - MS Windows and OS/2 fixes; + - A few other important fixes. +It does NOT fix all problems reported since 3.52. + +<p> +The list of changes below indicates which subsequent release was the source +of each change. In several cases, minor editing of the change was required +to make it compatible with 3.52. + +<h3><a name="V3.53_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + [3.61] The analysis of curve monotonocity in gxpcopy.c had an error. +(gxpcopy.c) + +[3.63] Notes that the OS/2 implementation now requires EMX/GCC 0.9b rather +than 0.9a. (use.doc) + +[3.62] Notes that for Win32s, gs16spl.exe must be in the same directory as +gswin32.exe. (use.doc) + +[3.62] Adds a reference to dos-psv, another "dumb terminal" user interface +for Ghostscript intended for MS-DOS users. (README) + +[3.61] Adds a pointer to DEC's free pstotext utility. (README) + +[3.60] Adds a reference to ps_view.ps, a "dumb terminal" user interface for +Ghostscript intended for MS-DOS users. (README) + +</pre><h3><a name="V3.53_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + [3.60] The geninit program (the implementation of COMPILE_INITS=1) +didn't parse the command line properly, and didn't check for PostScript +files properly. (geninit.c) + [3.60] ccfontab.c was omitted from the fileset. The easiest way to +fix this was to rename it to icfontab.c. (gs.mak, int.mak, ccfontab.c) + [3.60] The definition of pdfread.dev did an ADDMOD, not a SETMOD. +(int.mak) + +[3.60] Adds a -dNOFONTPATH switch to suppress any consultation of the +FONTPATH variable or the GS_FONTPATH environment variable. (gs_fonts.ps, +gs_init.ps) + +</pre><h3><a name="V3.53_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + [3.61] pdf2ps didn't write Widths or Encoding in the converted file, +producing incorrect spacing and incorrect characters. (pdf_2ps.ps) + [3.60] ps2ascii left a value on the stack for each unrecognized +character it processed, eventually causing a stackoverflow. (ps2ascii.ps) + +[3.61] Changes the rollconv.ps utility to produce files whose names conform +to the 8.3 length restriction, and to reduce the fixed RAM overhead for +Kanji fonts. (rollconv.ps) + +[3.60] Adds a utility for converting files produced by Macromedia's Rollup +program to a Type 0 form directly usable by Ghostscript. (rollconv.ps) + +</pre><h3><a name="V3.53_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + [3.60] Because of a typo, the LaserJet drivers had incorrect +margins. This was probably a new bug in 3.5x. (gdevdjet.c) + [3.60] A private name was duplicated. (gdevtfax.c) + [3.60] The x11alpha driver passed invalid colors to the X library. +(gdevxalt.c) + [3.60] The x11alpha driver set the blue component of colors +incorrectly. (gdevxalt.c) + +</pre><h3><a name="V3.53_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + [3.63] The test for WinExec failure on Win32 was incorrect. +(gp_mswin.c) + [3.63] getenv was declared redundantly on OS/2. (gp_os2.c) + [3.63] gs16spl.c was missing <string.h>. (gs16spl.c) + [3.61] Printing didn't work in 32-bit MS Windows environments. +(bcwin32.mak, gdevmswn.c, gp_mswin.c) + [3.61] There were some compatibility problems with IBM C. (os2.mak, +gsdll.h, gdevpm.c, gp_os2.c) + [3.60] The printjob created by Ghostscript was called "Ghostscirpt" +instead of "Ghostscript". (gp_os2.c) + [3.60] An "export" declaration was omitted from DllInit. +(gp_mswin.c) + +[3.61] Adds a conditional to work around a bug in gcc 2.7.x (it didn't +recognize that the target of a const T * might still be mutable through +aliasing). (stdpre.h) + +</pre><h3><a name="V3.53_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + [3.61] Rasterizing a character in a Type 1 font with an invalid +FontBBox left some garbage on the operand stack (bug introduced in 3.52 or +3.60). (gs_type1.ps) + [3.61] The font substitution algorithm could fail or loop. +(gs_fonts.ps) + +[3.60] Adds Heavy as a synonym for Bold when doing intelligent font +substitution. (gs_fonts.ps) + +</pre><h3><a name="V3.53_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + [3.63] Invoking setpagedevice with an undefined key, even with +Policy = 1, caused an error. (gs_setpd.ps) + [3.62] Setting the PageSize policy to 1 and then trying to set the +page size caused an error if FIXEDMEDIA was selected. (gs_setpd.ps) + [3.61] Rotated characters were rendered incorrectly (bug introduced +in 3.52). (gstype1.c) + [3.60] currentscreen and currentcolorscreen could give an error if +the current screen was set with sethalftone (or, for currentscreen, +setcolorscreen). (gs_dps1.ps) + [3.60] Streams could get removed from a bookkeeping list +prematurely, and wind up dangling. (zfile.c) + [3.60] Multiple -I switches set the search path incorrectly. +(gsmain.c) + [3.60] Fonts could wind up with a pointer to the wrong VM space, +causing potential GC or save/restore confusion. (zfont2.c) + [3.60] upath could leave garbage on the stack if it failed. +(gs_dps1.ps) + +[3.61] Extends the client API to allow for pushing values onto the operand +stack. (imain.h, gs.c, gsmain.c) + +[3.61] Defines a .setdefaultscreen procedure that sets the default halftone +screen, transfer function, and stroke adjustment for the current device. +Changes selectdevice and setpagedevice so that they call .setdefaultscreen; +setpagedevice calls .setdefaultscreen before calling the Install procedure, +so that Install can set different parameters if it wishes. Note that +setdevice does not do this. (gs_init.ps, gs_setpd.ps) + +[3.60] Speeds up rasterizing characters into the cache a little. +(gs_type0.ps) + +[3.60] Changes the default limit on the size of cached characters from the +maximum of (18 points or 5 times the "average" character size) to (18 points +or 1% of the total cache size). (gs_init.ps) + +[3.60] Implements parts of the Type 1 BuildChar callout in C. (gs_type1.ps, +zchar.c) + +</pre><h3><a name="V3.53_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + [3.62] If a PDF file substituted a calibrated color space for the +DeviceGray or DeviceRGB color space using a ColorSpace resource, the +PostScript file that pdf2ps produced from that PDF file caused an error. +(gs_pdf.ps) + [3.61] Tf set the current text font twice, and interacted with +pdf2ps in an awkward way. (gs_pdf.ps, pdf_2ps.ps, pdf_font.ps) + [3.61] If a font had variant Widths, it could get confused in the +cache with the underlying font. (pdf_font.ps) + [3.61] If a character appeared twice in an encoding and the font +specified different Widths values for the two occurrences, the last Width +would be used. We patched this to ignore zero Widths, which is not the +correct solution but which almost always produces correct output. +(pdf_font.ps) + [3.61] Arrays containing nulls didn't print out correctly (bug +introduced in 3.60). (gs_init.ps) + [3.61] Some PDF files contain very large dictionaries, which caused +a stackoverflow. (pdf_base.ps) + [3.60] The length of an image's data was sometimes calculated +incorrectly, causing an error when converting PDF to PostScript. +(pdf_draw.ps) + [3.60] If word spacing and/or text spacing was non-zero, an error +could occur. (gs_pdf.ps) + [3.60] Text that was both filled and stroked caused an error. +(gs_pdf.ps) + +[3.61] Speeds up the initial processing of PDF files by caching the map from +page numbers to page objects, and by not scanning the outlines if we aren't +producing PostScript output. (pdf_2ps.ps, pdf_base.ps, pdf_main.ps) + +</pre><h3><a name="V3.53_Streams"></a>Streams</h3><pre> + +Fixes bugs: + [3.60] When closing an encoding filter stream whose target was also +a filter, the latter could get called incorrectly with last = 1, possibly +more than once, leading to premature EOD markers. (stream.c) + [3.60] The LZW-compatible encoder put out an incorrect end-of-data +code. (slzwce.c) + [3.60] The LZW-compatible encoder didn't put out a reset code soon +enough. (slzwce.c) + [3.60] Doing a sgets on a closed stream could call sreadbuf, +possibly causing an error. (stream.c) + +</pre><h3><a name="V3.53_Library"></a>Library</h3><pre> + +Fixes bugs: + [3.63] On 16-bit platforms, the computation of t2 and t3 in +gx_curve_x_at_y could overflow, leading to incorrect output. (gxpcopy.c) + [3.61] glyphshow displayed a character with code 0 rather than the +requested character (bug introduced in 3.60.) (gschar.c) + [3.61] If trimming white space around a character reduced its +raster, the character was garbled in the cache (bug introduced in 3.60.) +(gxccman.c) + [3.61] colorimage would incorrectly convert white pixels to black if +the image color space was CMYK, the current color space was not CMYK, and +the number of bits per pixel was 4 or 8. (gsimage2.c) + [3.61] Type 1 fonts that used the Flex feature applied hints to the +path multiple times, causing dropouts, uneven stems, and other problems (bug +probably introduced in 3.21). (gstype1.c) + [3.61] If a Type 1 font used the Flex feature within the accent of +an accented character defined with seac, the shape of the accent could be +distorted. (gxtype1.h, gstype1.c) + [3.61] If a Type 1 font changed hints using the hint replacement +facility when the last operation was a closepath, the old hints would be +applied a second time, distorting the shape. (gxhint2.c, gxhint3.c) + [3.60] Cached characters sometimes had extra blank space on the +left, leading to some unnecessary bit-shuffling when imaging them. +(gxccman.c) + [3.60] The list of all-bands commands wasn't initialized/reset +properly. (gxclist.c) + [3.60] Because of a typo in a macro formal parameter list, a private +name was duplicated. (gsstruct.h) + [3.60] Text display operations didn't update the current character +in the enumerator structure during the fastest path through the code. This +only matters to one very unusual commercial client. (gschar.c) + +[3.61] Adds an alternative implementation of the core path filling algorithm +that is much faster on objects with curves but doesn't handle Y fattening. +This is the implementation that will normally be used for rasterizing +characters. This implementation rasterizes curves directly, without +flattening them. (gxfixed.h, gxpath.h, gzpath.h, gxdraw.c, gxfill.c, +gxpcopy.c) + +[3.61] Speeds up the flattening of curves substantially by omitting more +redundant points. (gxpcopy.c) + +[3.61] Speeds up character bitmap compression a little more. (gsbitops.h, +gdevabuf.c, gsbitops.c, gxccman.c) + +[3.61] Speeds up anti-aliased graphics a bit by computing a bounding box +before converting from oversampling to alpha values, and by speeding up the +bounding box computation itself. (gsbitops.h, gdevabuf.c, gsbitops.c, +gxccman.c) + +[3.60] Speeds up getting the side bearing and width of a Type 1 charstring a +little. (gxtype1.h, gstype1.c) + +[3.60] Adds a compile-time option, ALPHA_LSB_FIRST, which causes +alpha-sampled characters to be nibble-reversed in the cache. This was +created for a specialized application and does not interact well with the +rest of the code. (gsbitops.c) + +[3.60] Substantially speeds up entering anti-aliased characters in the +cache, by removing white space before compressing rather than vice versa. +(gsbitops.c, gxccman.c) + +</pre> + +<h2><a name="Version3.52"></a>Version 3.52 (limited) (10/6/95)</h2> + +<p> +This is an incremental release to fix a few problems in 3.51. Since it is +being made in an environment with no network connectivity, it will probably +not be released to the general public. ****** THE CHANGES MARKED WITH *** +BELOW WERE LOST IN THE PROCESS OF SHUFFLING FILESETS BETWEEN ENVIRONMENTS. +THEY ARE INCORPORATED IN 3.60 BUT NOT IN 3.52. ****** + +<h3><a name="V3.52_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The fileset included a meaningless empty file. (acctest.ps) + *** The definition of pdfread.dev did an ADDMOD, not a SETMOD. +(int.mak) + +</pre><h3><a name="V3.52_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The RunLengthEncode filter used with a dictionary argument could +give a spurious error. (zfilter.c) + - The fast form of the 'dup' operator failed to check for stack +overflow, which could lead to memory smashing. (interp.c) + *** Level 1 configurations gave errors during initialization. +(ialloc.c, iinit.c, ireclaim.c) + *** Attempting to look up or insert a noaccess string as a +dictionary key converted the string to a name rather than giving an error. +(idict.h, idict.c) + +Adds a C implementation of the .dicttomark (>>) procedure. (gs_init.ps, +zdict.c) + +*** Implements parts of the Type 1 BuildChar callout in C. (gs_type1.ps, +ifont.h, zchar.c, zfont1.c, zfont2.c) + +</pre><h3><a name="V3.52_Library"></a>Library</h3><pre> + +Fixes bugs: + - Braces were missing in an initializer. (gxdcolor.h) + - Composite fonts with a non-zero translation in the FontMatrix +positioned characters incorrectly. (gschar.c) + *** gsparam.c wouldn't compile with some versions of the Borland +compiler. (gsparam.c) + +Speeds up the handling of curve segments in Type 1 fonts a little. +(gstype1.c) + +Speeds up displaying very short strings a little. (gschar.c) + +*** Implements parts of the Type 1 BuildChar callout in C. (gxfont.h) + +</pre> + +<h2><a name="Version3.51"></a>Version 3.51 (9/27/95)</h2> + +<p> +This is the first public release since 3.33. Its main features are a +working setpagedevice, a working PDF interpreter, and a working PDF to PS +converter. + +<h3><a name="V3.51_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The -dSHORTERRORS switch wasn't documented in enough places. +(current.doc, use.doc) + - The DLL documentation was internally inconsistent. (dll.doc) + - The %pipe% file name syntax wasn't documented. (language.doc) + +</pre><h3><a name="V3.51_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - caption.ps wasn't installed properly. (unix-end.mak) + - geninit depended on $(gconfig_h) in an improper way. (geninit.c, +int.mak, *.mak) + - One script lacked the #!/bin/sh header. (gsdj500) + +Adds the 24-bit color TIFF driver to all configurations that support +black-and-white TIFF. (*.mak) + +</pre><h3><a name="V3.51_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - align.ps was omitted from the fileset. (psfiles.doc, align.ps, +unix-end.mak) + +</pre><h3><a name="V3.51_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A driver had some \s in formal parameter lists. (gdevcdj.c) + - A driver had some improper &s. (gdevtifs.c) + - The default MS Windows printer driver was very slow. (gdevwpr2.c) + - The (newly restructured) TIFF drivers could produce a memory +access error. (gdevtifs.c) + - The CGM drivers referred to an obsolete structure member. +(gdevcgm.c) + - The black-and-white H-P drivers didn't set the margins properly +(again). (gdevdjet.c) + - Several of the most common printer drivers omitted some scan lines +at the bottom of the page. (gdevprn.h, gdevprn.c) + +At the request of the main OS/2 developer, adds a printer device for OS/2. +(gdevos2p.c, os2.mak) + +Makes many changes to the stcolor driver, submitted by the developer just +before the release. (devices.doc, unix-end.mak, gdevstc.h, gdevstc*.c, +stcinfo.ps, stcolor.ps, stcinfo.ps) + +</pre><h3><a name="V3.51_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - usertime (and realtime) were broken on VMS. (gp_vms.c) + - The 32-bit MS Windows DLL control file had a typo. (gsdll32.def) + +Removes the color inkjet drivers from the 16-bit Windows executable, because +they overflow the 64K default data segment; adds PCX, TIFF, and BMP output +formats. (bcwin.mak) + +</pre><h3><a name="V3.51_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - A routine was declared 'private' inconsistently. (zcie.c) + - -dSHORTERRORS didn't remove enough non-Adobe error output. +(gs_init.ps) + +</pre><h3><a name="V3.51_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - The ProcSet relied on the presence of NullFont. (gs_pdf.ps) + +</pre><h3><a name="V3.51_Library"></a>Library</h3><pre> + +Fixes bugs: + - There was an extraneous \ outside a macro. (gsline.c) + - Scaling up a black-and-white image could caused many scan lines to +be inverted. (gsimage1.c) + - The initial clipping path did not take Margins into account +properly. (gxdevice.h, gdevxalt.c, gscoord.c, gsdevice.c, gsdevmem.c, +gsdparam.c, gspath.c) + - If banding was required, characters could come out as solid black +rectangles. (gxclist.c, gxclread.c) + +</pre> + +<h2><a name="Version3.50"></a>Version 3.50 (limited) (9/24/95)</h2> + +<p> +This is the last limited bug-fix release during beta test. The color +DeskJet drivers are broken (they sometimes produce black rectangles instead +of characters); we will fix this in the next release. +<p> +The following issues have been postponed to an unspecified future release: +<ul> +<li> - Filling areas often writes pixels twice, causing incorrect +output +with certain unusual RasterOp values. [1.814] +<li> - The tar.gz archives should include a subdirectory like +gs-3.46/ in +the file names. +<li> - The CCITTFaxDecode filter should skip initial junk if +EndOfLine = +true. [1844 8/24/95, NRE] +</ul> + +<h3><a name="V3.50_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - The name of the new 24-bit TIFF driver was incorrect in one place. +(vms.mak) + +</pre><h3><a name="V3.50_Utilities"></a>Utilities</h3><pre> + +Adds a new utility to put a caption in a box at the bottom of each page. +(caption.ps) + +</pre><h3><a name="V3.50_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The PC display devices weren't page devices. Probably all the +other display and window system devices should be made page devices too, but +we aren't going to bother tracking them down. (gdevpcfb.c) + - There was a lot of duplicated code in the TIFF drivers. +(gdevtifs.h, gdevtfax.c, gdevtfnx.c, gdevtifs.c) + +Updates the bjc600 / bjc800 drivers with changes from the author. +(devices.doc, gdevbjc.h, gdevcdj.c) + +</pre><h3><a name="V3.50_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Building with COMPILE_INITS=1 produced a stackunderflow error. +(gs_pdf_e.ps) + - An internal operator didn't have a name. (ztoken.c) + - Some error and information messages weren't in the Adobe format. +(gs_fonts.ps, gs_init.ps) + - Some common Adobe compatibility operators weren't implemented: +pagemargin, pageparams, setpagemargin. (gs_statd.ps, gs_lev2.ps) + - setpageparams set Margins rather than PageOffset. (gs_lev2.ps) + - setpage and setpageparams didn't set Orientation. (gs_lev2.ps) + - If the end of an input buffer fell just after the / of a literal +name, a memory access error could occur. (iscan.c) + - When the interpreter returned from gs_[main_]run_string_continue, +there could be an extra value on the operand stack. (iscan.h, istream.h, +interp.c, iscan.c, zfileio.c, zfproc.c, zpaint.c, ztoken.c) + - If the character cache was disabled, or if a character was too +large to be cached, returning from a font BuildChar procedure could do an +erasepage. (zchar.c) + +A minor change was required for compatibility with the library change for +image devices. (zdevice.c) + +Adds a -dSHORTERRORS switch that changes some of the common error and +warning messages for greater Adobe compatibility. (gs_init.ps, gs_fonts.ps) + +</pre><h3><a name="V3.50_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - If a CharProc for a Type 3 font did a BT/ET, the graphics state +could get confused. (gs_pdf.ps) + - If a Tf occurred inside a BT/ET, it didn't take effect on +subsequent BT/ETs. (gs_pdf.ps) + +</pre><h3><a name="V3.50_Library"></a>Library</h3><pre> + +Fixes bugs: + - There was no way to control whether an image device was a page +device. Fixing this required a NON-BACKWARD-COMPATIBLE CHANGE to +gs_makewordimagedevice and gs_initialize_wordimagedevice to take a Boolean +page_device argument. Fortunately, this change affects only a few obscure +library clients. (gsdevice.h, gsdevmem.c) + +Adds translation capability to clipping devices. This isn't used anywhere +yet. (gxcpath.h, gxcpath.c) + +Adds procedures for doing unaligned copy_xxx operations. These were added +for a customer. (gxdevice.h, gsdevice.c) + +Changes the (undocumented) return value of gs_setcachedevice[2]: they used +to return 1 if the current show operation was a non-displaying one +(stringwidth or cshow), and now return 1 if the cache device was just +installed. This change was required to fix the BuildChar page clearing bug +in the interpreter. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE, but as far as +I know, there aren't any external clients of these routines. (gschar.h, +gschar.c) + +</pre> + +<hr> + +<h2><a name="Version3.49"></a>Version 3.49 (limited) (9/20/95)</h2> + +<p> +This is another bug-fix release during beta test. There are other bugs +outstanding, but the ones I know about right now are all platform-specific. + +<h3><a name="V3.49_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - make.doc didn't mention that the .def files are needed to build a +MS Windows executable. (make.doc) + +</pre><h3><a name="V3.49_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - There were some forward references to macro definitions in the +makefiles. (int.mak, lib.mak) + - The default device for library configurations was the null page +device, not the first device in DEVICE_DEVS. (ugcclib.mak) + +</pre><h3><a name="V3.49_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The BJC600 / BJC800 drivers were missing a header file. +(gdevbjc.h, gdevcdj.c) + - A procedure name was used in two different files. (gdevcdj.c) + - The PCX driver didn't return an error code in case of failure. +(gdevpcx.c) + - The X Windows driver produced some confusing warning messages. +(gdevxini.c) + - Some names were duplicated between drivers. (gdevepsc.c) + - The X driver maintained its own, peculiar initial matrix even if +Ghostview wasn't involved. (gdevx.c) + +With the permission of the author, changes the 24-bit TIFF license from GNU +to Aladdin. (gdevtfnx.c) + +</pre><h3><a name="V3.49_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS build scripts were out of sync with the makefiles (again). +(modules.lis, vms.mak) + +</pre><h3><a name="V3.49_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - When the requested media size matched an available size exactly +with a 90 degree rotation, Orientation was ignored. (zmedia2.c) + +Makes zcurrentdevice extern. (opextern.h, zdevice.c) + +</pre><h3><a name="V3.49_Library"></a>Library</h3><pre> + +Fixes bugs: + - A couple of places used memcpy instead of memmove. (gxclread.c) + - If a bitmap image was compressed with RLE compression in a band +list, it would cause an error on decompression. (gxclread.c) + - The representation of colors in the band list was needlessly +inefficient. (gxcldev.h, gxclist.c, gxclread.c) + - When using colored halftones, snowflak.ps crashed with an invalid +memory access. More generally, any use of halftones could cause the garbage +collector to make an invalid access. (gsstate.c) + +Adds some more code for paths in band lists, but again doesn't activate it. +(gxcldev.h, gxpath.h, gzline.h, gsline.c, gspath1.c, gxclist.c, gxclread.c, +gxpath.c) + +</pre> + +<h2><a name="Version3.48"></a>Version 3.48 (limited) (9/17/95)</h2> + +<p> +This is the second bug-fix release during beta test. Among other things, it +fixes a bug introduced in 3.47 that caused all PDF files to give an error. + +<p> +******NOTE: the BJC600 and BCJ800 drivers do not work in this release, +because we didn't get a file from the author in time. They will compile, +but not run. This will be fixed in the next round. + +<h3><a name="V3.48_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - Alan Barclay's contact information was wrong. (README) + +</pre><h3><a name="V3.48_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The linker path for Watcom C++ 10.5 was wrong. (wccommon.mak) + - There was a syntax error in a batch file. (pdf2ps.bat) + - The VMS build script didn't have entries for some printers. +(vms.mak) + +Adds the bjc600 and bjc800 devices on all platforms that already include the +color DeskJet devices. (*.mak) + +</pre><h3><a name="V3.48_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The H-P drivers didn't reposition the cursor properly at the +beginning of pages after the first page, causing the image to be shifted +down slightly and cut off at the bottom. (gdevdjet.c) + - The x11alpha driver was extremely slow. (gdevxalt.c) + - The -g switch by itself didn't work for the X Windows driver. +(gdevxini.c) + - .installpagedevice can get a rangecheck on MS Windows because the +HWColorMap can change spontaneously. (gs_setpd.ps) + +Updates the bjc600 and bjc800 drivers with new versions from Yves Arrouye. +(gdevcdj.c) + +Adds a user-contributed driver that writes uncompressed 24-bit RGB TIFF +images in a format that is standard on NeXT platforms. This driver is +governed by the GNU license and is therefore separated from the rest of the +Aladdin distribution. (gdevtfnx.c) + +</pre><h3><a name="V3.48_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - There was an undefined reference to clock_gettime on some Unix +systems. (gp_unix.c) + - The new gp_fopen routine had several errors. (gp_vms.c) + +</pre><h3><a name="V3.48_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Some routines that should be main-instance-specific weren't. +(imain.h, main.h, gsmain.c) + - sethalftone with a Type 2 or Type 4 halftone didn't work on CMYK +devices. (zht2.c) + - Setting A4 paper as the default in gs_init.ps, or specifying +-dPAPERSIZE, conflicted with -g. (gs_init.ps) + - The maximum value of a single-precision float wasn't correct on +VAX systems. (math_.h, iscannum.c) + - Some integer expressions were passed as floating point arguments. +(gs.c, zmedia2.c) + - Media selection in setpagedevice was broken (again), as of 3.46. +(gs_setpd.ps, zmedia2.c) + +</pre><h3><a name="V3.48_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Substituted color spaces caused an error. (gs_pdf.ps, +pdf_draw.ps) + +</pre><h3><a name="V3.48_Library"></a>Library</h3><pre> + +Fixes bugs: + - If a halftone had no non-default components that matched the +device's primary colors, the result would be a solid color rather than a +halftone using the default screen. (gsht.c) + - sethalftone with a Type 2 or Type 4 halftone didn't work on CMYK +devices. (gxht.h, gsht.c, gsht1.c) + - The new gp_fopen routine wasn't being used. (gsiodev.c) + - A mixing of float and fixed values caused a clipping region to be +possibly incorrect by up to 1 pixel. (gspaint.c) + - A function definition was inconsistent with the prototype. +(gspath1.c) + +Adds preliminary code for including paths in band lists, but doesn't +activate any of it. (lib.mak, gxcldev.h, gxclist.c, gxclread.c) + +</pre> + +<h2><a name="Version3.47"></a>Version 3.47 (limited) (9/14/95)</h2> + +<p> +This is a bug-fix release during beta test. It is meant to have no new +functionality, although in the case of setpagedevice that's stretching +things a little. + +<h3><a name="V3.47_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The Mac documentation still referred to IJG JPEG v5a rather than +v6. (make.doc) + - The RasterOp texture device was identified incorrectly. +(gdevmrop.c) + - use.doc and psfiles.doc didn't mention the PDF-related files. +(psfiles.doc, use.doc) + - psview is no longer available. (README) + - current.doc didn't document the recognized setpagedevice keys. +(current.doc) + +</pre><h3><a name="V3.47_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Many utility programs weren't included in the Unix 'install' list. +(unix-end.mak) + - It wasn't at all convenient to make configurations without the BCP +or other non-standard filters. (*.mak, int.mak, modules.lis, zfilter2.c, +zfilterx.c) + - The gconfig.c and iconfig.c files weren't deleted after +compilation. (int.mak, lib.mak) + - unix-end.mak referred to the nonexistent macros INT{1,2}_MAK. +(unix-end.mak) + - The rules for building the dfax drivers were incorrect. (devs.mak) + - Omitting filter.dev produced an undefined reference. (int.mak) + +Adds a customer-contributed makefile for Microsoft Visual C++ 2.n under +Windows NT. (msvcwint.mak) + +</pre><h3><a name="V3.47_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The JPEG utility didn't support the new progressive JPEG modes, +and didn't invert Adobe Photoshop output as needed. (viewjpeg.ps) + - The printafm utility had a single font name wired in. (printafm, +printafm.ps) + - The CIE lookup simulation had several bugs. (docie.ps) + - pdf2ps[.bat] were missing from the fileset. + - Files produced by pdf_2ps didn't include the GS_PDF ProcSet. +(gs_pdf.ps, pdf_2ps.ps, pdf_base.ps, pdf_main.ps) + +</pre><h3><a name="V3.47_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Bits read back from an EGA or VGA device were incorrect. +(gdevpcfb.c) + - The 24-bit PCX run length compressor used a slow algorithm. +(gdevpcx.c) + - gdevstc.c wouldn't compile with the Borland compiler. (gdevstc.c) + - There was a typo in the OS/2 PM driver. (gdevpm.c) + - .installpagedevice gets a rangecheck on X Windows because the +HWColorMap can change spontaneously. (gs_setpd.ps) + - The left margin for the DeskJet 500 was wrong. (gdevdjet.c) + - The two notions of "margin" (offset of 0,0 from physical page +corner vs. unprintable area around edges of physical page) were still +confused. We've now fixed this for the H-P monochrome printers, but it's +probably still confused for all other printers. (gdevprn.h, gdevdjet.c) + +</pre><h3><a name="V3.47_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The Windows print spooler header file wasn't included when it +needed to be, and some other Win32-specific changes were missing. +(gsdll32.def, gp_mswin.c) + - Windows DLLs didn't parse "s in the command "arguments" correctly. +(gsdll.c) + +</pre><h3><a name="V3.47_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - FAKEFONTS could get the font directories into inconsistent states. +(gs_dps1.ps, gs_fonts.ps) + - The substitutions for Adobe's Myriad and Minion fonts weren't +appropriate. (gs_fonts.ps) + +</pre><h3><a name="V3.47_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - If pathforall got an error computing the user-space points on a +path, it could cause an invalid access. (zpath1.c) + - A 'private' declaration were omitted. (Why doesn't gcc catch +this??) (zcie.c) + - Setting GS_FONTPATH produced a stackunderflow error. +(gs_fonts.ps) + - currentscreen caused a typecheck if the screen had been set by +setcolorscreen. (gs_dps1.ps) + - setcolorrendering tried to cache values computed from the color +space even if the current color space wasn't a CIE space. (zcrd.c) + - Out-of-range numbers like 10E38 caused a floating point exception. +(iscannum.c) + - Giving a closed readable file as input for a filter caused an +invalidaccess. (files.h, interp.c, zfilter.c) + - setpagedevice opened the default device even with -dNODISPLAY. +(gs_init.ps, gs_setpd.ps) + - realtime returned the same value as usertime. (gs_lev2.ps, +zmisc.c) + - Storing a local value into systemdict caused some redundant code +to be executed. (zdict.c) + - Files with a very long first line could cause a rangecheck error. +(gs_init.ps) + - The PageOffset page device parameter was ignored. (gs_setpd.ps) + - The Orientation page device parameter wasn't handled properly. +(gs_setpd.ps, idparam.h, idparam.c, zmedia2.c) + - setpagedevice could set device parameters twice, with an +incomplete update the first time. (gs_setpd.ps) + +</pre><h3><a name="V3.47_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Readers confused the internal pdfrun procedure with the public +runpdf procedure. (pdf_*.ps) + +</pre><h3><a name="V3.47_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - Closed streams had a NULL state pointer, causing problems for some +clients. (stream.c) + - Group 4 decoding could get an ioerror if an end-of-buffer occurred +in a horizontal code sequence between a makeup code and the termination +code. (scfd.c) + +</pre><h3><a name="V3.47_Library"></a>Library</h3><pre> + +Fixes bugs: + - Some 'private' declarations were omitted. (Why doesn't gcc catch +these??) (gdevmrop.c, gxht.c) + - Patterns could produce bad output in the band list. (gxclist.c) + - RasterOp wasn't implemented at all for 2- or 4-bit devices. (In +this release, we implement only a subset, and without handling transparency +properly.) (gdevm2.c, gdevm4.c, gdevmrop.c) + - Drawing operations and text sometimes didn't apply the RasterOp +when they should, and vice versa. (gxdcolor.h, gxdraw.c) + - setcolorrendering tried to cache values computed from the color +space even if the current color space wasn't a CIE space. (gscie.h, +gscie.c) + - Some CIE color spaces produced very distorted colors. (gscie.c) + - setpagedevice opened a window even with -dNODISPLAY. (gsdevice.c, +gsdparam.c) + - realtime returned the same value as usertime. (gp.h, time_.h, +gp_*.c) + - The library level attempted to handle the Orientation page device +parameter. (gxdevice.h, gdevbit.c, gsdevice.c, gsdparam.c, gspath.c) + - Severely non-linear CIE encoding/decoding functions produced +seriously skewed colors near the ends of the color value range. This +problem can now be alleviated, at a significant cost in performance, by +changing configuration parameters at the beginning of gscie.h. (gscie.h, +gscie.c) + - Files FTP'ed in binary mode weren't being opened properly on VMS. +(gp.h, gp_*.c, gsiodev.c) + - A header file had an inconsistent declaration. (math_.h) + +Adds a new gp_get_usertime procedure to gp.h. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE, affecting only platform implementors. It +was necessary to fix the realtime/usertime bug. (gp.h, time_.h, gp_*.c) + +Adds a new gp_fopen procedure to gp.h. THIS IS A NON-BACKWARD-COMPATIBLE +CHANGE, affecting only platform implementors. It was necessary to fix the +binary file problem on VMS. (gp.h, gp_*.c) + +</pre> + +<h2><a name="Version3.46"></a>Version 3.46 (limited) (9/4/95)</h2> + +<p> +This is the "serious beta test" release for the next public release. It +finishes implementing RasterOp in the graphics state, and the remaining +commonly used parts of setpagedevice. + +<h3><a name="V3.46_Documentation"></a>Documentation</h3><pre> +Documents some possible problems when building with DJGPP v2.0-beta. +(make.doc) + +Adds documentation on using Ghostscript as a PDF interpreter. (use.doc) + +Notes linking problems with the Watcom 10.0 environment. (make.doc) + +</pre><h3><a name="V3.46_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The rule for $(ccfonts).dev was wrong. (gs.mak) + +Makes some additional filters into 'features'. (devs.mak, gs.mak) + +Splits off 2 new makefiles from gs.mak, which had gotten very large: lib.mak +(graphics library) and int.mak (interpreters). (tar_cat, tar_cat.bat, +*.mak) + +Adds a new 'config-clean' target that may be helpful in changing +configuration definitions. (gs.mak) + +Notes in the relevant makefiles that on Unix and DVX systems, one should not +edit 'makefile' or the concatenated makefile, but should edit the individual +subfile and run tar_cat. (ansihead.mak, cc-head.mak, dgc-head.mak, +gcc-head.mak, devs.mak) + +Updates the Watcom makefiles to handle Watcom release 10.5, in which many +executables moved to different directories. (watc.mak, watcwin.mak, +wccommon.mak) + +Adds a pdf2ps shell script. (pdf2ps, pdf2ps.bat) + +Adds a -sFONTMAP= switch to specify the name of the Fontmap file. +(gs_fonts.ps) + +Adds a -u<name> switch to undefine a name from systemdict. (interp.h, gs.c, +iinit.c) + +Adds a -dFIXEDRESOLUTION switch to parallel -dFIXEDMEDIA. Makes -g set +FIXEDMEDIA and -r set FIXEDRESOLUTION. (gs_init.ps, gs_setpd.ps, gs.c) + +Changes some build procedures to avoid problems with read-only source files. +(gs.mak, int.mak, lib.mak) + +</pre><h3><a name="V3.46_Utilities"></a>Utilities</h3><pre> + +Adds a utility for emulating the CIE color mapping algorithms. (docie.ps) + +</pre><h3><a name="V3.46_Drivers"></a>Drivers</h3><pre> + +Changes the x11alpha device so that it uses 32-bit pixels with 8 bits of +alpha. (gdevxalt.c) + +Updates the Epson Stylus Color driver to Gunther Hess's release 1.17. +(devs.mak, unix-end.mak, devices.doc, stcolor.ps, gdevstc.h, gdevstc*.c) + +Updates the alternate X drivers for the change from PageSize to MediaSize. +(gdevxalt.c) + +Makes Duplex an optional parameter of printer devices rather than of all +devices. (gdevprn.h, gxdevice.h, gsdparam.c, gdevdjet.c, gdevprn.c) + +</pre><h3><a name="V3.46_Platforms"></a>Platforms</h3><pre> + +Makes pipes (%pipe% file syntax) a selectable option on Unix platforms, +rather than always being included. (ansihead.mak, cc-head.mak, +gcc-head.mak, ugcclib.mak, unixtail.mak) + +</pre><h3><a name="V3.46_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - colorimage, and the dictionary form of image with +MultipleDataSources = true, didn't check that all the data sources were of +the same type. (zpaint.c) + - colorimage, and dictionary-type images with MultipleDataSources = +true, usually didn't work properly with files. (zpaint.c) + - grestoreall left a dangling pointer to the transfer function +cache. (gsstate.c) + - Changes made by setpagedevice could get 'lost' and not installed +in the current page device dictionary. (gs_setpd.ps) + - The Install procedure was called before the new page device +dictionary had gotten installed. (gs_setpd.ps) + - If a grestore/grestoreall/restore/setgstate operation switched +page devices, the new page device didn't get installed properly. +(gs_setpd.ps, opextern.h, zdevice2.c, zdps1.c) + - If the current screen was a Type 1 halftone, currentscreen and +currentcolorscreen returned frequency = 60, angle = 0 rather than the +Frequency and Angle from the halftone (see Adobe TN 5085). (gs_dps1.ps, +gs_init.ps) + - setscreen with a Type 1 halftone dictionary didn't insert the +frequency and angle into the dictionary (see Adobe TN 5085). (gs_dps1.ps) + - upath didn't include a trailing moveto in the bounding box. +(gs_dps1.ps, zpath1.c) + - setpagedevice didn't automatically rotate or scale the image when +necessary. (gs_setpd.ps, zmedia2.c) + +Moves the RasterOp operators to a separate file. (iutil.h, iutil.c, +zgstate.c, zrop.c) + +Eliminates the unnecessary "wrapper" around .setdevice. (zdevice2.c) + +Establishes the convention that all interpreter callbacks into PostScript +code use procedure names that begin with %; documents this in gs_init.ps. +Changes Type1BuildChar and Type1BuildGlyph to %Type1BuildChar and +%Type1BuildGlyph. (gs_init.ps, gs_type1.ps, zfont0.c, zfont1.c) + +Changes image / imagemask / colorimage for the new library API. (zimage2.c, +zpaint.c) + +Reorganizes font loading to make compiled fonts and Fontmap interact better +with each other. (gs_ccfnt.ps, gs_fonts.ps, gs_init.ps, gs_res.ps) + +Implements parameter collection for the new CIEBasedDEF[G] color spaces, but +doesn't actually implement the color spaces themselves. (icie.h, zcie.c, +zcrd.c) + +Renames iconfig.c as iconf.c to avoid problems with read-only source files. +(iconf.c) + +</pre><h3><a name="V3.46_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - PDF to PostScript conversion didn't work. (pdf_main.ps) + +Shifts most of the work in the PDF interpreter from the reader to the +ProcSet. This simplifies the code considerably and also makes it easier to +modify. (gs_pdf.ps, pdf_draw.ps, pdf_font.ps, pdf_main.ps) + +</pre><h3><a name="V3.46_Library"></a>Library</h3><pre> + +Fixes bugs: + - 'static' was omitted in a place that some compilers require it. +(gxccman.c) + - Some compilers don't allow a variable with the same name as a +preprocessor macro with arguments. (gscie.c) + - Some places did a "return -1" rather than a proper error return. +(gsdevice.c, gxclist.c) + - An external declaration had a typo. (gsrop.h) + - An extra semicolon upset some compilers. (gzpath.h) + - Printer devices that didn't use the standard macros for generating +their procedure vector wound up being considered as non-page devices. +(gdevprn.c) + - Some compilers truncated identifiers longer than 31 characters. +(gscspace.h, zcie.c, gscie.c) + - upath didn't include a trailing moveto in the bounding box. +(gspath.h, gspath1.c) + - RasterOp value 126 returned an incorrect result. (gsroptab.c) + +Finishes implementing RasterOp in the graphics state. (gdevmrop.h, gsrop.h, +gsropt.h, gsstate.h, gxbitmap.h, gxcindex.h, gxdcolor.h, gxdevice.h, +gzstate.h, gdevmrop.c, gscolor.c, gsdevice.c, gsimage.c, gsimage1.c, +gsimage2.c, gsimage3.c, gspcolor.c, gsrop.c, gsstate.c, gxacpath.c, +gxccache.c, gxcht.c, gxcmap.c, gxdither.c, gxdraw.c, gxht.c) + +Changes forwarding devices so they forward get_bits by default. This +probably doesn't affect any existing code. (gxdevice.h, gsdevice.c) + +Changes the API for gs_image[mask]_init to pass a structure rather than a +very large number of scalars. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE, +motivated by the addition of further image parameters to support RasterOp. +Since there are no external clients of the library yet, it shouldn't matter. +(gsimage.h, gsimage.c, gslib.c, gxccache.c) + +Redefines the device "page size" as being the size of the actual media, +changing the name of the gx_device PageSize member to MediaSize, the name of +the PageSize device parameter to .MediaSize (but keeping PageSize as +equivalent, for backward compatibility), and the name of the +gx_device_set_page_size procedure to gx_device_set_media_size (keeping the +old name as a macro). THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. It is +necessary to make setpagedevice work, and to avoid confusion about what +"page size" means. It potentially affects any device driver, but almost +none of the device drivers distributed with Ghostscript are affected, and +those have been updated. (gsparam.h, gxdevice.h, gsdevice.c, gsdparam.c, +gspath.c) + +Renames gconfig.c as gconf.c to avoid problems with read-only source files. +(gconf.c) + +Adds an API procedure for setting a bitmap pattern. (gscolor2.h, +gspcolor.c) + +</pre> + +<h2><a name="Version3.45"></a>Version 3.45 (limited) (8/27/95)</h2> + +<p> +The purpose of this release is to fix some minor bugs reported by commercial +licensees, and to add two enhancements: optional RenderTable interpolation +for CIE color, and reducing the temporary space used during character +caching (also for a licensee). + +<h3><a name="V3.45_Documentation"></a>Documentation</h3><pre> + +Notes that the only valid return values from get_alpha_bits are 1, 2, and 4. +(drivers.doc) + +Notes that the get_bits driver procedure will return a pointer to aligned +data, but does not require the caller's data area to be aligned. +(drivers.doc) + +</pre><h3><a name="V3.45_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Many of the printer and file output drivers in devs.mak still +included gdevprn.$(OBJ) in their dependencies. (devs.mak) + - PDEVH was used before it was defined. (devs.mak) + - GENCONF_XE was used before it was defined. (unixhead.mak, +unix-end.mak) + +Makes it possible to switch sfile implementations without editing gs.mak. +(gs.mak) + +Makes it possible to specify alternate compiled font tables without editing +gs.mak. (gs.mak) + +Allows quoted arguments in @-files, e.g., + -sOutputFile="a file name with spaces" +(gs.c) + +</pre><h3><a name="V3.45_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The ps2ascii script could fail to delete temporary files in case +of an abnormal exit. (ps2ascii) + +</pre><h3><a name="V3.45_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The MS Windows printer capability test was wrong. (gdevwpr2.c) + - The MS Windows and OS/2/PM displays weren't page devices. +(gdevwdib.c, gdevpm.c) + +Gets rid of all direct references to dev->PageSize in drivers. (gdevl256.c, +gdevvglb.c) + +</pre><h3><a name="V3.45_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The 32-bit MS Windows configuration file for the Borland C++ +compiler was missing from the fileset. (bcc32.cfg, tar_gs) + +Makes the printer devices in the OS/2 implementation capable of outputting +directly to the print spooler. (use.doc, gp_os2.c) + +Makes printing on Windows NT and Windows 95 use the printer queue. +(gp_mswin.c, gswin32.rc) + +</pre><h3><a name="V3.45_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Copying a null device produced an uninitialized pointer. +(gsdevice.c) + - The dictionary returned by deviceinfo wasn't read-only. +(gs_lev2.ps) + - If a filter's init code failed, an entry on the operand stack +(usually the top) could be smashed. (files.h, zfile.c, zfilter.c) + +Adds const in a few places that needed it. (zwppm.c) + +Adds interpolation to the CIE RenderTable lookup. (icie.h, zcie.c, zcrd.c) + +</pre><h3><a name="V3.45_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Allows PDF files with control-character garbage at the end, and up to 250 +characters of garbage at the beginning. The latter is only supported by +runpdf, not by run. (pdf_base.ps, pdf_main.ps) + +</pre><h3><a name="V3.45_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - A 1-D CCITTFaxDecode stream could give an error if an input buffer +boundary fell just before a 0-length termination code. (scfx.h, scfd.c) + +</pre><h3><a name="V3.45_Library"></a>Library</h3><pre> + +Fixes bugs: + - A variable was used before being set, which could cause band +devices to become confused when processing colored halftones. (gxclist.c) + - Some of the color and tile bookkeeping for band lists was wrong +(as of 3.44), causing tiled areas to be filled with garbage. (gxclist.c, +gxclread.c) + - Colored Patterns showed up blank on devices whose native +representation of `black' was a non-zero value. The fix removes the +'cached' member of the gx_device structure, and requires monobit memory +devices to have a palette; this is a NON-BACKWARD-COMPATIBLE CHANGE for +anyone who was foolish enough to statically initialize a gx_device structure +without using the macros in gxdevice.h or gdevprn.h. (gdevmem.h, +gxdevice.h, gxdevmem.h, gdevm1.c, gdevmrop.c, gsdevice.c, gxcpath.c, +gxdither.c) + +Provides the framework for band devices to implement alpha (anti-aliasing). +(gxcldev.h, gdevprn.c, gsdevice.c, gxclist.c, gxclread.c) + +Implements an efficient API for enumerating paths using device coordinates. +(gspath.h, gxpath.h, gzpath.h, gspath1.c, gxpath2.c) + +Changes the character cache logic so that when rasterizing large +anti-aliased characters, it converts the oversampled bits to alpha values on +the fly rather than waiting until it has rasterized the entire character. +This saves a lot of temporary space, at the expense of some extra time and +lower quality results for Type 3 characters that don't use a single fill or +imagemask operation to draw the character. This enhancement requires adding +a member to the gx_device structure (max_fill_band), which is a +NON-BACKWARD-COMPATIBLE CHANGE for badly written drivers (see above). +(gxchar.h, gxdevice.h, gxpaint.h, gdevabuf.c, gschar.c, gspaint.c, +gxccache.c, gxccman.c, gxfill.c) + +Changes the palette member of memory devices from gs_string to +gs_const_string. (gdevmem.h, gxdevmem.h, gdevmem.c, gdevm1.c) + +Starts to decouple halftoning from the graphics state machinery, so +it can be applied after banding rather than before. (gxdcolor.h, +gxdht.h, gxdither.h, gzht.h, gxcmap.c, gxdither.c, gxdraw.c) + +Starts to decouple path filling from the graphics state machinery, so +that we can pass paths through band lists. (gxpaint.h, gxfill.c) + +Adds interpolation to the CIE RenderTable lookup. This is optional, enabled +by #define CIE_RENDER_TABLE_INTERPOLATE in gscie.h. (gscie.h, gxctable.h, +gscie.c, gxctable.c) + +</pre> + +<h2><a name="Version3.44"></a>Version 3.44 (limited) (8/21/95)</h2> + +<p> +This includes a few bug fixes, but its main purpose is to add two new +features: monobit and 8-bit gray-scale RasterOp (at the driver level, not at +the gstate level yet), and (compressed) band lists in RAM. Of course, these +new features may have introduced new bugs! + +<h3><a name="V3.44_Documentation"></a>Documentation</h3><pre> +Adds contact information for a user working on NeXT machines. (README) + +Notes that Ghostscript runs on FreeBSD. (README) + +Adds copy_rop (the RasterOp operation) to the driver interface. +(drivers.doc) + +Adds FONTPATH information for more operating systems. (use.doc) + +</pre><h3><a name="V3.44_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The tar_cat script needed a #!/bin/sh to execute correctly on all +platforms. (tar_cat) + - There were a number of minor errors in the makefiles. (gs.mak, +unixhead.mak) + - Level 2 configurations without command lists had two undefined +references. (gs.mak) + - Some shells required an extra ';' to terminate an 'if' command. +(ugcclib.mak, unix-end.mak, unixtail.mak) + +Updates the JPEG code to the officially released version 6 of the IJG +library. See jpeg.mak for information on where to find this library. +(jpeg/*, jpeg.mak, *.mak, modules.lis) + +Adds a definition of XEAUX to the makefiles to parallel CCAUX, primarily for +cross-compilation environments. All references to <some-program>$(XE) must +be replaced by $(<SOME-PROGRAM>_XE), where some-program={$(GS), ansi2knr, +echogs, genarch, genconf, geninit}. This is a NON-BACKWARD-COMPATIBLE +CHANGE, required in order for the makefiles to work in cross-compiled +environments. (For non-cross-compiled environments, it currently doesn't +matter.) (gs.mak, *.mak) + +</pre><h3><a name="V3.44_Utilities"></a>Utilities</h3><pre> + +Updates ps2ai.ps to version 2.13. (ps2ai.ps) + +Changes all the utility shell scripts to include #!/bin/sh, to use exec, and +to pass the original arguments using "$@". (bdftops, font2c, gsbj, gsdj, +gslj, gslp, gsnd, wftopfa) + +</pre><h3><a name="V3.44_Drivers"></a>Drivers</h3><pre> + +Adds the requirement that all page-oriented devices (i.e., those that use +gdevprn.h and implement the print_page procedure) include page.dev in their +dependencies and use $(SETPDEV) rather than $(SETDEV) in their makefile rule +bodies. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. Without this change, the +command list logic (over 25K of unnecessary object code) would have to be +included in every configuration. (gs.mak, devs.mak, echogs.c) + +Adds a user-contributed driver for the Okidata Microline (IBM compatible) +dot matrix printers. (gdevokii.c) + +Adds copy_rop (the RasterOp operation) to the driver interface. Currently, +only monobit and 8-bit gray-scale devices implement it. (gxdevice.h, +gsdevice.c) + +Adds the ability to read back bits from the display to the x11 devices. +(x_.h, gdevx.c, gdevxalt.c) + +</pre><h3><a name="V3.44_Platforms"></a>Platforms</h3><pre> + +Makes some minor changes to support QNX. (stat_.h) + +Removes the mswinprn driver from the 16-bit Windows configuration, because +the 64K default data segment overflowed. (bcwin.mak) + +</pre><h3><a name="V3.44_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Type 1 fonts didn't accept packed arrays for Subrs or OtherSubrs. +(zchar1.c, zfont1.c) + - TBCP-encoded files (yes, I know there isn't supposed to be any +such thing) didn't automatically activate TBCP decoding. (gs_init.ps) + - Fonts with invalid FID entries weren't detected. (zfont.c) + +Speeds up dictionary operations slightly by removing redundant checks for +nulls. (zdict.c) + +Starts adding support for the new CIEBasedDEF and CIEBasedDEFG color spaces. +(gs_l2img.ps, gs_lev2.ps, igstate.h, zcrd.c) + +Adds access operators for RasterOp and transparency in the graphics state. +(They don't actually do anything yet.) (zgstate.c) + +</pre><h3><a name="V3.44_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - PDFDocEncoding was missing characters 24-31. (gs_pdf_e.ps) + +Moves the definition of pdfmark from systemdict to userdict so that Adobe +PostScript files won't think the interpreter is a distiller. (gs_pdf.ps) + +</pre><h3><a name="V3.44_Library"></a>Library</h3><pre> + +Fixes bugs: + - Some JPEG images had bands of garbage alternating with bands of +valid data. IJG v6 fixed this -- see above. + - With FPU_TYPE = -1, the cosine routine returned incorrect values +for angles above 270 degrees. (gsmisc.c) + - CIE color conversion didn't work on 16-bit systems. (gscie.h, +gscie.c) + +Partially implements reducing the intermediate space for rasterizing +anti-aliased characters by compressing the oversampled representation to an +alpha array incrementally. (gdevmem.h, gxchar.h, gxdevmem.h, gdevabuf.c, +gschar.c, gspaint.c, gxccman.c) + +Starts adding support for the new CIEBasedDEF and CIEBasedDEFG color spaces. +(gscie.h, gscspace.h, gscie.c) + +Completes the implementation of band lists in RAM. To select this feature, +change the definition of cl_impl in gs.mak from clfile to clmem. (Someday +we'll make this easier.) (gxclmem.h, gxclmem.c) + +Finishes implementing RasterOp and transparency at the driver level for +monobit and 8-bit gray-scale devices, and implements some of the framework +for general multiple-bit-per-pixel devices. See drivers.doc for +documentation. (gsropt.h, gxcldev.h, gxclist.h, gdevm1.c, gdevm8.c, +gdevmem.c, gdevmrop.c, gschar.c, gxclist.c, gxclread.c) + +Implements the ability to include commands applicable to all bands, rather +than an individual band, in the band list. Eventually this will be used for +passing halftones through the band list. (gxcldev.h, gxclist.h, gxclist.c) + +Adds support for 2-bit-deep 'word' memory devices. (gdevmem.h, gxdevmem.c, +gdevm2.c) + +Changes the initialization for memory devices so that they determine their +polarity from the device for which they are buffering the image (if any). +This is a subtle change. (gdevmem.h, gdevmem.c, gdevm1.c, gsdevmem.c) + +</pre> + +<h2><a name="Version3.43"></a>Version 3.43 (limited) (8/10/95)</h2> + +<p> +Fixes a few more minor bugs, and changes FEATURE selection back to +essentially the way it was before 3.41. + +<h3><a name="V3.43_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - A ~ was missing in a URL. (README) + +Adds information about an Amiga port of Ghostscript. (README) + +Removes a file called gs.1.c, which appears to be an obsolete version of +gs.1. + +Adds DCX documentation to the PCX driver. (We don't support DCX yet, but we +might in the future.) (gdevpcx.c) + +Adds information about getting Type 1 fonts from H-P if you have an H-P +PostScript printer. (use.doc) + +</pre><h3><a name="V3.43_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The auxiliary programs wouldn't compile with ANSI compilers that +don't accept K&R syntax. (ccgs, gs.mak, ugcclib.mak, *head.mak, +unixtail.mak, echogs.c, genarch.c, genconf.c, geninit.c) + +Reinstates FEATURE_DEVS in the makefiles, getting rid of FEATURE1..10. THIS +IS A NON-BACKWARD-COMPATIBLE CHANGE, but it puts things back the way they +were before 3.41, with one exception: compiling the PostScript +initialization code into the executable is now a separate macro +COMPILE_INITS with a definition of 0 or 1, instead of the ccinit 'feature'. +(gs.mak, *.mak, fonts.doc, make.doc) + +Adds a CCLEAF macro to the makefiles, for optimizing the compilation of +modules containing only leaf procedures. (gs.mak, *.mak) + +Adds a CONFIG makefile variable that helps in maintaining multiple variants +in a single directory. (gs.mak, *.mak) + +</pre><h3><a name="V3.43_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - An extern for exit() (in <stdlib.h>) was omitted. (gp_vms.c) + +</pre><h3><a name="V3.43_Fonts"></a>Fonts</h3><pre> + +Reorganizes the compiled font facility so that fonts can be compiled and +turned into a library by third parties. (gs.mak, font2c.ps, gs_ccfnt.ps, +ccfont.h, iccfont.c, ccfontab.c) + +</pre><h3><a name="V3.43_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - internaldict was implemented as a dictionary in systemdict and an +operator in userdict, rather than as an operator in systemdict. This caused +a noaccess error when loading certain Type 1 fonts. (gs_init.ps, +gs_type1.ps) + - xfonts couldn't handle modified encodings. (zfont2.c) + +Changes the build date printout in the help message to YYYY-MM-DD. (gs.c) + +Adds native support for Multiple Master fonts (WeightVector). (zfont1.c) + +Implements sin and cos more efficiently (by table lookup with linear +interpolation) on machines with slow (or no) floating point. (zmath.c) + +Separates out the code for 'reading' the .ps initialization files, for the +new COMPILE_INITS arrangement. (imain.h, gconfig.c, gsmain.c, iconfig.c, +iccinit0.c, iinit.c) + +</pre><h3><a name="V3.43_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The CCITTFaxDecode filter could read up to 3 bytes beyond EOD. +This fix doesn't quite cover all cases, but at least it makes things better. +(ghc.h, sbhc.c, scfd.c) + +</pre><h3><a name="V3.43_Library"></a>Library</h3><pre> + +Fixes bugs: + - After a nocurrentpoint error from a show operation with a +composite font, the bookkeeping was confused and could cause an access +error. (gschar.c) + - xfonts couldn't handle modified encodings. (gsccode.h, gxchar.h, +gxfont.h, gxxfont.h, gschar.c, gxccache.c) + +Makes .charboxpath able to use cached character information. (gxchar.h, +gschar.c) + +Adds native support for Multiple Master fonts (OtherSubrs 14-18). +(gxfont1.h, gstype1.c) + +Improves the hashing functions for the character cache. (gxfcache.h, +gxccman.c) + +Adjusts the character oversampling algorithm to reduce thickening for +devices with alpha capability. (gsbitops.c) + +Improves the encoding of the band list for certain kinds of small +rectangles. (gxcldev.h, gxclist.c, gxclread.c) + +Implements sin and cos efficiently on machines with slow (or no) floating +point. (gxfarith.h, gsmatrix.c, gsmisc.c, gspath1.c) + +</pre> + +<h2><a name="Version3.42"></a>Version 3.42 (limited) (8/2/95)</h2> + +<p> +Fixes a few significant problems in 3.41, and brings the DLL code up to +date. + +<h3><a name="V3.42_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - language.doc still referred to rectappend rather than .rectappend. +(language.doc) + +Adds documentation on the Macintosh port. (readme, make.doc) + +Updates the DLL documentation. (dll.doc) + +Documents the BCP and TBCP filters as non-experimental. (language.doc) + +</pre><h3><a name="V3.42_Procedures"></a>Procedures</h3><pre> + +Changes the build date printout to YYYY-MM-DD. (gs_init.ps) + +</pre><h3><a name="V3.42_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS build script had gotten out of sync with the makefiles +(again). (vms.mak, modules.lis) + +Brings the MS Windows and OS/2 platforms up to date with the rest of the +code, including DLL support for OS/2. (os2.mak, gsdll*.def, gdevswn.c, +gdevpm.c, gdevwdib.c, gp_mswin.c, gp_os2.c, gsdll.c, gsmain.c) + +Adds a new platform-specific routine gp_do_exit, as an alias for the C +library `exit' call. (gp.h, gsdll.c, gsmain.c, gp_*.c) + +</pre><h3><a name="V3.42_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - .forgetsave at the outermost level didn't clear the l_new bit, +causing changes to be undone improperly. (isave.c) + - A 'void' formal parameter list upset some compilers (as it should +have). (gsmain.c) + +Adds a .charboxpath operator that appends to the current path the bounding +boxes of the characters of a string. (zchar.c, zchar1.c) + +</pre><h3><a name="V3.42_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - A procedure was declared private inconsistently. (siscale.c) + +</pre><h3><a name="V3.42_Library"></a>Library</h3><pre> + +Fixes bugs: + - The library test program didn't do a necessary initial gsave. +(gslib.c) + - The fix for landscape monobit images in 3.41 could smash memory. +(gsimage1.c) + - 1-pixel-wide lines drawn with image or imagemask still disappeared +sometimes. (gsimage.c) + +Does some more preparatory work for the implementation of command lists in +RAM. (gdevprn.h, gxclio.h, gxclist.h, gxclfile.c, gxclist.c, gxclread.c) + +Adds a gs_charboxpath procedure that appends to the current path the +bounding boxes of the characters of a string. (gschar.h, gscpm.h, +gstype1.h, gxchar.h, gxpath.h, gxtype1.h, gzstate.h, gschar.c, gspaint.c, +gstype1.c, gxpath.c) + +</pre> + +<h2><a name="Version3.41"></a>Version 3.41 (limited) (7/27/95)</h2> +<p> +Another incremental release with bug fixes and customer-requested +enhancements. This release was intended to include the full setpagedevice +media matching and adjustment algorithm, but we discovered some +architectural problems during development, and have postponed it. + +<h3><a name="V3.41_Documentation"></a>Documentation</h3><pre> + +Replaces the build instructions for NeXTSTEP with more up-to-date and +accurate ones. (make.doc) + +Notes that some extra manual steps are required when cross-compiling. +(make.doc) + +Documents how to define new 'features' in the makefile. (gs.mak) + +</pre><h3><a name="V3.41_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The build rule for ccinit.dev was circular. Fixing this required +a small but NON-BACKWARD-COMPATIBLE change in the way that features are +selected in the makefiles (FEATURE_DEVS replaced by FEATURE1..10). (*.mak, +fonts.doc, make.doc) + +Changes the build rule for gconfig.h to be less likely to overrun MS-DOS's +command line length limit. (gs.mak) + +Adds a -dFIXEDMEDIA switch to indicate that the media size should be +considered fixed after initialization. (gs_init.ps) + +</pre><h3><a name="V3.41_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - traceimg.ps incorrectly referred to .stdout. (traceimg.ps) + - prfont.ps didn't display unencoded characters correctly. +(prfont.ps) + - ps2epsi didn't give correct bounding box information. (ps2epsi, +ps2epsi.ps) + - ps2epsi produced DSC comments that didn't fully conform to the +Adobe standard. (ps2epsi, ps2epsi.ps) + +Allows viewpbm.ps to take multiple files on the command line. (viewpbm.ps) + +</pre><h3><a name="V3.41_Drivers"></a>Drivers</h3><pre> + +Adds a preliminary, contributed PNG driver. THIS IS NOT USABLE YET -- DON'T +TRY TO USE IT. (png.mak, gdevpng.c) + +Increases the maximum allowable scan line width for the TIFF drivers from +5183 pixels to 12863 pixels. (scf.h) + +</pre><h3><a name="V3.41_Platforms"></a>Platforms</h3><pre> + +Updates the MS Windows DLL code to export the new, suspendable run_string +interface. (gsdll.h, gsdll.c, dll.doc) + +</pre><h3><a name="V3.41_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - There were several errors in cfonts.mak. (cfonts.mak) + - The compiled fonts option didn't offer both free and standard +configurations. (gs.mak) + - A bug in the handling of Encoding resources prevented compiled +fonts from working. (gs_res.ps) + +Adds a little more support for CID-keyed fonts. They still aren't anywhere +near usable. (gs_cidfn.ps, gs_type1.ps) + +Adds a new Fontmap for Solaris 2.3. (Fontmap.Solaris) + +Adds support for Type 4 fonts (Type 1 fonts with their own BuildChar +procedures), including the CCRun procedure in internaldict. (gs_fonts.ps, +gs_res.ps, gs_type1.ps) + +</pre><h3><a name="V3.41_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - showpage and copypage didn't honor NumCopies in a page device. +(gs_setpd.ps, zdevice2.c) + - currentpagedevice returned incorrect information if the current +device wasn't a page device. (gs_setpd.ps) + - currentpagedevice didn't guarantee the presence of InputAttributes +and OutputAttributes. (gs_setpd.ps) + - The l_new bit wasn't set properly when a dictionary changed from +packed to unpacked keys, leading to unnecessary saves. (idict.c) + - Streams requiring intermediate buffering could read ahead too far, +causing input data to be skipped. (zfilter.c) + - cshow didn't reset the font to the base font when calling the +procedure. (zchar2.c) + - The Install procedure in a page device didn't set the default CTM. +(gs_setpd.ps, zmatrix.c) + - findlibfile didn't handle special files like %stdin correctly. +(zfile.c) + - setpagedevice didn't implement media matching. (gs_setpd.ps, +zdevice2.c, zmedia2.c, zmatrix.c) + - Some floating point numbers didn't print out with enough digits to +read back in with the identical value. (iutil.c) + - Integers that overflowed 31 bits (but not 32 bits) were converted +to negative integers rather than correct positive reals. (iscannum.c) + +Removes an experimental operator that called the image scaling/interpolation +code. (zimage2.c) + +Adds a -sSUBSTFONT=<fontname> switch that substitutes the given font for all +unknown fonts, bypassing the normal intelligent substitution algorithm. +(gs_fonts.ps) + +Adds the Revision system parameter. (zmisc2.c) + +Adds a .knownundef operator that does an undef and returns true iff the key +was formerly present. (zdict.c) + +Makes the maximum length of names be 256 if EXTEND_NAMES is being used, 16K +otherwise. (inamedef.h, iname.c) + +Adds internaldict. (gs_init.ps, iinit.c) + +Adds support for Type 4 fonts. (bfont.h, zchar.c, zchar1.c, zfont1.c, +zfont2.c) + +Changes .encodingdict to EncodingDirectory, for compatibility with Adobe +interpreters. (gs_init.ps, gs_kanji.ps, gs_res.ps) + +Adds superexec, an undocumented operator that is equivalent to exec but +suppresses all invalidaccess checks. NOT COMPLETED YET; currently superexec +is equivalent to exec. (zcontrol.c) + +</pre><h3><a name="V3.41_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - .stderr was used but is no longer defined. (pdf_base.ps) + +</pre><h3><a name="V3.41_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - Not all streams initialized their state pointer. (stream.c, +sfile.c, sfileno.c) + +Adds a filter for the smoothed image scaling algorithm. Eventually this +filter will require very little intermediate storage; right now it still +needs to buffer the entire intermediate image. (siscale.h, siscale.c) + +Increases the maximum allowable scan line width for the CCITTFaxEncode +filter from 5183 pixels to 12863 pixels. (scf.h) + +</pre><h3><a name="V3.41_Library"></a>Library</h3><pre> + +Fixes bugs: + - setpagedevice didn't update NumCopies correctly. (gdevprn.c, +gsdparam.c) + - The newly optimized code for monobit bitmaps could cause an +out-of-bounds memory access and/or make unaligned references. (gsimage1.c) + - setpagedevice with unknown keys could cause an /undefined error. +(gsdparam.c) + - cshow didn't reset the font to the base font when calling the +procedure. (gschar.h, gschar.c) + - The Install procedure in a page device didn't set the default CTM. +(gzstate.h, gschar.c, gscoord.c, gsdevice.c) + - Very non-linear EncodeABC procedures in a color rendering +dictionary could produce very inaccurate results. (gscie.h, gscie.c) + - The line_ptrs pointer in memory devices didn't get relocated if +the bitmap was moved during garbage collection, leading to memory smashing. +(gdevmem.c) + - setpagedevice didn't implement media matching. (gsdparam.c, +gscoord.c) + - 'word' memory devices weren't recognized as memory devices. +(gdevmem.c) + - makeimagedevice allocated, and then didn't free, an unnecessary +palette for monobit devices. (gsdevmem.c) + - The hack for 1-bit-wide images didn't work consistently, +particularly in landscape orientation. (gsimage.c, gsimage0.c) + +Adds an .IgnoreNumCopies page device parameter that causes #copies and +NumCopies to be ignored. (gxdevice.h, gsdevice.c, gsdparam.c) + +Removes the .IsPageDevice device parameter. (gsdparam.c) + +Converts the image scaling/interpolation code to a filter. (gximage.h, +gsimage.c, gsimage0.c, gsimage3.c) + +Adds support for Type 4 fonts. (gxfont.h) + +Adds a default implementation of parameter lists, designed to be usable +easily from C code. (gsparam.h, gsparam.c) + +</pre> + +<h2><a name="Version3.40"></a>Version 3.40 (limited) (6/28/95)</h2> + +<p> +This is another incremental limited release for delivery of a couple of +important bug fixes (pixel 'holes' in rotated images, setpagedevice errors +on some platforms) and an enhancement (architectural support for band lists +in RAM). + +<h3><a name="V3.40_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The FTP location of the EMX DLLs was incorrect. (use.doc) + +</pre><h3><a name="V3.40_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - A couple of build rules for IJG v6 were omitted. (jpeg.mak) + +</pre><h3><a name="V3.40_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - prfont.ps wouldn't print more than 128 unencoded characters. +(prfont.ps) + +</pre><h3><a name="V3.40_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - setpagedevice often caused /undefined errors on MS Windows and +OS/2 platforms. (gdevmswn.c, gdevpm.c) + - The VMS module list had gotten out of sync with the makefiles +(again). (modules.lis) + +</pre><h3><a name="V3.40_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - A couple of casts betwen char * and byte * were omitted. +(gsmain.c) + - gs_[main_]run_file_open wasn't exported properly. (imain.h, +main.h, gsmain.c) + +</pre><h3><a name="V3.40_Streams"></a>Streams</h3><pre> + +Changes the DCTEncode filter to return an error if it wasn't supplied enough +data before being closed. (sdcte.c) + +</pre><h3><a name="V3.40_Library"></a>Library</h3><pre> + +Fixes bugs: + - The coordinate computations for all filling operations were +slightly inaccurate, leading to pixel 'holes' in rotated images. (gxdda.h, +gximage.h, gsimage*.c, gxdraw.c, gxfill.c) + +Undoes an "optimization" (inlining the normal, fast case of a procedure) +that actually hurt performance. (gxclist.c) + +Refactors the command list code so that it in the future it will be able to +store command lists either in RAM or in the file system. (gdevprn.h, +gxcldev.h, gxclio.h, gxclist.h, gdevprn.c, gxclfile.c, gxclist.c, +gxclread.c) + +Changes the interface to the path filling code to take separate X and Y +adjustment values. (gxpaint.h, gspaint.c, gxfill.c) + +Makes the command list allocate a small tile cache if the device doesn't +need halftones. (gxclist.c) + +</pre> + +<hr> + +<h2><a name="Version3.39"></a>Version 3.39 (limited) (6/24/95)</h2> + +<p> +This is again an incremental release primarily for delivery of enhancements +(suspendable string input in particular) to commercial customers, and with a +few bug fixes. + +<h3><a name="V3.39_Documentation"></a>Documentation</h3><pre> +Notes that PDF files and repositioning PostScript files do not work if +Ghostscript was compiled with VAX C. (use.doc) + +Notes the requirement for EOD lookahead in decoding filters. (strimpl.h) + +</pre><h3><a name="V3.39_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - There were a number of undefined or used-before-defined variables +in the makefiles. (devs.mak, dvx-head.mak, unixhead.mak, gs.mak) + - Some commands in the makefile exceeded the MS-DOS limit of 120 +characters. (gs.mak) + +Adds a -P and -P- switch to control whether the search path automatically +includes `.' as its first element. Moves the default value of this choice +(SEARCH_HERE_FIRST) from gsmain.c to iminst.h. (iminst.h, gs.c, gsmain.c, +use.doc) + +Makes some makefile changes in anticipation of the IJG v6 release. (*.mak) + +</pre><h3><a name="V3.39_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - font2c generated invalid C procedure names from font names that +contained non-alphanumerics other then '-'. (font2c.ps) + - font2c generated a single element of incorrect type for numeric +arrays of zero length. (font2c.ps) + +</pre><h3><a name="V3.39_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS build scripts had gotten out of sync (again). (vms*.mak, +modules.lis) + +</pre><h3><a name="V3.39_Fonts"></a>Fonts</h3><pre> + +Makes the FONTPATH directory scanner accept fonts that begin with +%!PS-AdobeFont or %!FontType1 with no following `-'. (gs_fonts.ps) + +</pre><h3><a name="V3.39_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - eq and ne on arrays or dictionaries required read access. +(zrelbit.c) + - An include was missing. (zcsindex.c) + - .forgetsave at the outermost level didn't reset the l_new flag in +changed slots, leading to an anomalous (although perhaps not harmful) state. +(isave.c) + - Dictionary growing or unpacking would both save and free the old +keys array, leading to a dangling reference. (idict.c) + +Changes gs_interpret so that for .quit with a negative operand <= -100, +gs_interpret returns e_Fatal rather than the operand. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE, but as far as we know, it doesn't affect +anyone. (interp.c) + +Adds an API to allow feeding string input to the interpreter in pieces. +(errors.h, imain.h, main.h, gs.c, gsmain.c, interp.c, zcontrol.c, zfilter.c) + +Adds new predicates .identeq and .identne that test "pointer equality", even +for numbers and strings. (iutil.h, iutil.c, zrelbit.c) + +Changes a few uses of return_error to return in places that don't lead +directly to a PostScript error. (idict.c) + +</pre><h3><a name="V3.39_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The logic for skipping up to a 0xff byte when decoding JPEG data +could skip too much. (sdctd.c, sjpegd.c) + - If a buffer boundary fell in the middle of, or just before, an +EOD, some decoding filters could stop reading too soon. (sbcp.c, smtf.c, +sstring.c) + +Makes some minor changes in anticipation of the IJG v6 release. +(gsjmorec.h) + +</pre><h3><a name="V3.39_Library"></a>Library</h3><pre> + +Fixes bugs: + - A declaration should have been removed. (gsdll.c) + - The library initialization/termination API wasn't declared. +(gslib.h, gsinit.c, gsmain.c) + - A variable and a preprocessor macro with the same name confused +VAX C. (gxclist.c) + - Image devices with depth 2-8 and only gray shades in the palette +didn't set color_info correctly. (gsdevice.c) + +Speeds up unrotated black-and-white images further by making them render +directly into a memory device when possible. (gxdevmem.h, gsimage1.c) + +</pre> + +<h2><a name="Version3.38"></a>Version 3.38 (limited) (6/18/95)</h2> + +<p> +This release incorporates several customer-requested enhancements (cleaner +separation of the graphics library from the interpreter, option for >64K +names, true garbage collection of names, better handling of halftones on +band devices). It is intended primarily for those customers, but is +intended as a dry run for the next public release. + +<h3><a name="V3.38_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - gx_bitmap had not been updated to gx_tile_bitmap. +(drivers.doc) + +</pre><h3><a name="V3.38_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The man page extension in the Unix makefiles was still $(manext), +not $(man1ext). (unix-end.mak) + - 'make clean' didn't remove gs_init.c. (gs.mak) + +Restructures the makefiles to better separate the language interpreters from +the graphics core. (gs.mak) + +Adds a -dNOPROMPT switch to suppress the end-of-page prompts (but still wait +for the user to type a newline). This is different from -dNOPAUSE, which +suppresses both the prompts and the wait. (gs_init.ps) + +</pre><h3><a name="V3.38_Utilities"></a>Utilities</h3><pre> + +Replaces the mergeini.ps program with an equivalent (actually slightly +better) version written in C. (gs.mak, *.mak, psfiles.doc, use.doc, +geninit.c) + +</pre><h3><a name="V3.38_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The color DeskJet drivers wouldn't compile with a K&R compiler, +because some of the procedure definitions weren't in the restricted syntax +that ansi2knr requires. (gdevcdj.c) + - The color DeskJet drivers wouldn't compile because of a bug in +Sun's cc. (gdevcdj.c) + +Changes the BJ-10e(x) margins to be identical to those of the BJ-200. +(gdevbj10.c) + +Changes the LaserJet margins in response to a user's request. (gdevdjet.c) + +Changes the psmono driver to produce slightly larger files that execute +faster on typical Level 1 printers. (gdevpsim.c) + +Changes the psmono driver so that it does not scale the image to fit the +page size, but instead scales it to be the same physical size on the page. +THIS IS A NON BACKWARD COMPATIBLE CHANGE. However, for full-page images, it +will not have any visible effect. (gdevpsim.c) + +</pre><h3><a name="V3.38_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - There were some problems associated with printing in 32-bit +Windows environments. (gp_mswin.c) + - The IBM RS/6000 needs both <time.h> and <sys/time.h>. (time_.h) + +Adds the PDF interpreter to the standard MS Windows configuration. +(bcwin.mak) + +</pre><h3><a name="V3.38_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The entry for Courier-BoldItalic in cfonts.mak incorrectly named +it as Courier-Italic. (cfonts.mak) + - The files for Courier-Italic in cfonts.mak were inconsistently +named ncrri instead of ncri. (cfonts.mak) + - The rules in cfonts.mak covered only the fonts distributed with +the free versions of Ghostscript, omitting some of the standard set of 35. +(cfonts.mak) + - The maximum number of stem hints per character in Type 1 fonts +wasn't large enough for complex Asian characters. (gxtype1.h) + +Adds a -dNOFONTMAP switch to suppress loading the Fontmap file. +(gs_init.ps, gs_fonts.ps) + +</pre><h3><a name="V3.38_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - One of the GC marking routines for halftones had a typo, +possibly leading to an invalid access. (zht2.c) + - The GC could store beyond the end of the mark stack, +possibly smashing some characters of a string or name. (igc.c) + - If the allocator allocated a new ref object from a +freelist, the bookkeeping for the current ref object could get +confused. (ialloc.c) + - The GC didn't remove names properly from the hash table. +(iname.c) + - If a DOS editor added a ^Z to the end of an initialization file, +an error occurred during initialization. (gs_init.ps) + - If an initialization file had any lines longer than 128 +characters, .skipeof would get an error. (gs_init.ps) + - makepattern could create structures in global VM pointing to +structures in local VM. (zpcolor.c) + - The default color rendering dictionary didn't specify large enough +ranges for some intermediate values. (gs_lev2.ps) + - Files being freed by a restore weren't unlinked properly, leading +to dangling pointers. (zfile.c) + - The interpreter used strlen without a prototype. (interp.c) + - Indexed or Separation colors with a CIE base or alternate space +didn't work. (zcie.c) + - The Watcom C 10.0 compiler produced incorrect code for an +overlapping structure assignment. (zcsindex.c) + +Removes limit of 64K names, if EXTEND_NAMES is defined at compile +time. (*.mak, idebug.h, iminst.h, iname.h, gs.c, gsmain.c, idebug.c, +iname.c) + +Makes the garbage collector really collect names. (iname.h, inamedef.h, +isstate.h, igc.c, iname.c, isave.c) + +Restructures some files to better separate the language interpreters +from their support code. (gconfig.c, iconfig.c, iinit.c) + +Restructures some files to better separate the language interpreters +from the graphics core. (iastate.h, iastruct.h, ialloc.c) + +Allows the operands of cshow to be in either order on the stack. Adobe +interpreters apparently allow this, even though it's not documented. +(zchar2.c) + +Adds a hack in cvs to truncate non-standard operator names, rather than +giving a rangecheck, to work around the "max err string" problem in some +common error handlers. (ztype.c) + +Changes the print string for unregistered operators from operator_0x... to +@0x.... (iutil.c) + +Changes the garbage collector so it tries to allocate a large mark stack, to +avoid going into its 'slow' mode if the mark stack overflows. (igc.c) + +</pre><h3><a name="V3.38_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Stroked text used the text matrix, rather than just the +CTM, for scaling the line width, which could lead to inappropriately +wide lines. (gs_pdf.ps) + - Fonts based on other than a 1000-unit scale (i.e., with a +FontMatrix other than [0.001 0 0 0.001 0 0]) didn't scale Widths to +match the font scaling. (pdf_font.ps) + +Implements the PDF 1.1 color space extensions, except for Lab space. +(gs_pdf.ps, pdf_draw.ps) + +Implements the Rotate key for pages. (pdf_main.ps) + +</pre><h3><a name="V3.38_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - When the garbage collector closed a file stream, the stream +incorrectly attempted to free the buffer. (stream.c) + +Separates out some stream implementations to better distinguish the +graphics core from the language interpreters. (smtf.h, sfilter1.c, +smtf.c, srld.c, srle.c) + +</pre><h3><a name="V3.38_Library"></a>Library</h3><pre> + +Fixes bugs: + - Compressing characters being entered in the cache could cause an +invalid memory access. (gsbitops.c) + - The setbbox bounding box check was slightly inaccurate. +(gsdps1.c) + - makepattern could create structures in global VM pointing to +structures in local VM. (gscolor2.h, gspcolor.c) + - Out-of-range values during CIE color conversion led to random +results. (gscie.c) + - On output devices with non-inverted Y axes (such as MS Windows), +Interpolated images would smash memory. (gsimage.c) + - 90 degree rotated zero-width images caused an invalid memory +access. (gsimage1.c) + - If #copies was zero, showpage could create bogus empty output +files. (gdevprn.c) + - PageCount didn't take #copies into account. (gsdevice.c) + - Indexed or Separation colors with a CIE base or alternate space +didn't work. (gscie.h, gscie.c) + +Implements triangular line caps and joins, in anticipation of adding +a PCL5 interpreter. (gsline.h, gxstroke.c) + +Moves some procedures around for better separation of library from +interpreter. (gsinit.c, gslib.c, gsmain.c, gsmisc.c) + +Moves the standard allocator from the interpreter to the library. +(gsalloc.h, gxalloc.h, gxobj.h, gsalloc.c) + +Starts to change the representation of paths slightly to make it possible to +identify arcs. This change is backward-compatible for all code except +callers of gx_path_add_arc. (gxpath.h, gspath1.c, gxpath.c, gxstroke.c) + +Adds some framework for keeping track of RasterOp and "transparency" in the +graphics state, although these don't actually have any effect yet. +(gsrop.h, gsropt.h, gsstate.h, gxcldev.h, gzstate.h, gsrop.c, gsstate.c, +gxclist.c, gxclread.c) + +Adds a compile-time option for using the Adobe RGB<->CMYK conversion rules. +(gxdcconv.c) + +Adds a driver procedure for identifying band devices. This change is +backward-compatible for all existing devices. (gdevmem.h, gxdevice.h, +gsdevice.c, gxclip2.c, gxclist.c, gxcpath.c) + +Speeds up gray-scale images on devices requiring banding, and enables +further optimizations, by reintroducing the distinction between banded and +non-banded devices. (gxdevice.h, gdevprn.c, gsimage1.c) + +Reduces the size of the band list for halftoned images by encoding tile +indices more compactly. (gxcldev.h, gxclist.h, gxclist.c, gxclread.c) + +Extends the band list so it can cache more than 256 halftone tiles, and to +make better decisions about tile caching. (gxcldev.h, gxclist.h, gxclist.c, +gxclread.c) + +</pre> + +<h2><a name="Version3.37"></a>Version 3.37 (limited) (5/11/95)</h2> + +<p> +Another bug fix release distributed only to customers. + +<h3><a name="V3.37_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - Some documentation about parameter lists was incorrect. +(gsparam.h) + - The documentation did not note that one cannot "pipe" PDF files +into the interpreter. (use.doc) + +Adds documentation for the BJC-600 to devices.doc. (devices.doc) + +</pre><h3><a name="V3.37_Procedures"></a>Procedures</h3><pre> + +Changes the debugging switch for OS calls from -Z0 to -Ze, and adds -Z0 for +high-level GC tracing. (use.doc, gp_unifs.c, ialloc.c, igc.c) + +</pre><h3><a name="V3.37_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The ps2ascii shell script included an erroneous @d. (ps2ascii) + +Enhances ps2ascii to output color and rectangle fill/stroke information if +COMPLEX is defined. (ps2ascii.ps) + +</pre><h3><a name="V3.37_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - the BJC-600 driver didn't handle BitsPerPixel correctly. +(gdevcdj.c) + +</pre><h3><a name="V3.37_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Some buggy Type 1 fonts confused the Type 1 font reader. +(gs_fonts.ps, gs_type1.ps, pdf_font.ps) + +</pre><h3><a name="V3.37_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre> + +Fixes bugs: + - .registerencoding didn't accept mixedarrays, which could cause an +error if an encoding was loaded long after initialization. (zfont2.c) + - If a program did a lot of saves and restores, the garbage +collector could get invoked much too often. (iastate.h, ialloc.c, igc.c, +isave.c) + +Changes the name of the rectappend operator to .rectappend, since it isn't a +standard PostScript operator. (zdps1.c) + +</pre><h3><a name="V3.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - PDF files didn't interact properly with ps2ascii. (gs_pdf.ps) + - setdash wouldn't accept a packed array. (zgstate.c) + - PDF files with incorrect generation numbers in object references +produced an error rather than a warning. (pdf_base.ps) + +</pre> + +<h2><a name="Version3.36"></a>Version 3.36 (limited) (5/4/95)</h2> + +<p> +This is a limited-distribution release for distributing bug fixes to a few +customers. + +<h3><a name="V3.36_Documentation"></a>Documentation</h3><pre> +Adds some environment variables to the man page. (gs.1) + +</pre><h3><a name="V3.36_Procedures"></a>Procedures</h3><pre> + +Adds the psmono device to all 32-bit configurations. (*.mak) + +Moves the psmono and 'bit' devices to DEVICE_DEVS12 to avoid exceeding the +120-character maximum length of the DOS command line. (*.mak) + +</pre><h3><a name="V3.36_Drivers"></a>Drivers</h3><pre> + +Changes the pgm[raw] and ppm[raw] drivers so they do *not* automatically +switch to pbm or pgm/ppm respectively if this is possible for the particular +page being rendered; adds pgnm[raw] and pnm[raw] drivers that *do* do this. +THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. However, existing programs will +still work; they just won't produce the smallest and simplest possible +output. (devs.mak, gdevpbm.c) + +</pre><h3><a name="V3.36_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - A multi-level restore didn't free gstates allocated by +intermediate saves, causing some global VM to be lost until a garbage +collection. (isave.h, isave.c, zvmem.c) + +Speeds up restore by skipping the scan of the character cache if no new +names have been allocated since the save. (zfont.c) + +Extends the client API to allow for popping return values off the operand +stack. (imain.h, gs.c, gsmain.c) + +</pre><h3><a name="V3.36_Library"></a>Library</h3><pre> + +Modifies the character oversampling algorithms to help prevent dropouts. +(gsbitops.c, gschar.c) + +</pre> + +<h2><a name="Version3.35"></a>Version 3.35 (internal) (5/2/95)</h2> + +<p> +This is another internal "snapshot" version. + +<h3><a name="V3.35_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - Some of the file names in the `man' page had gotten out of date. +(gs.1) + - Two references to .PageCount hadn't been changed to PageCount. +(language.doc, devarch.doc) + +</pre><h3><a name="V3.35_Procedures"></a>Procedures</h3><pre> + +Puts writeppmfile back in the standard Unix and DV/X configurations, since +gsftopk uses it. Also puts the PDF reader in all 32-bit configurations. +(*.mak) + +Moves the BMP devices to DEVICE_DEVS11 to avoid exceeding the 120-character +maximum length of the DOS command line. (bcwin.mak, bcwin32.mak, os2.mak) + +</pre><h3><a name="V3.35_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - unix-lpr.sh didn't handle 32-bit devices. (unix-lpr.sh) + - unix-lpr.sh still used the name .PageCount rather than PageCount. +(unix-lpr.sh) + - font2c gave an error when trying to write general procedures in +font dictionaries. (font2c.ps) + +Adds a pdf2dsc.ps utility for writing out fake DSC-compliant PostScript code +to invoke the PDF reader, for the benefit of viewer programs that aren't +PDF-aware. (unix-end.mak, pdf2dsc.ps) + +</pre><h3><a name="V3.35_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The TIFF drivers put out incorrect PageNumber values. +(gdevtfax.c) + - Printer (and file output) devices got closed and reopened +unnecessarily when changing parameters. (gdevprn.c) + - Printer (and file output) devices didn't check for invalid formats +following a % in OutputFile. (devs.mak, gdevprn.c) + - 1-bit memory devices were not considered page devices, unlike all +other memory devices. (gsdevice.c) + - The black-and-white H-P printers didn't close the printer +properly, causing printing not to happen under MS Windows. (gdevprn.c) + - Some compilers didn't like initializing a const char * to NULL. +(gdevlbp8.c) + +Changes the X Windows driver so that if Ghostview specifies a bounding box, +this also sets ImagingBBox. (gdevxini.c) + +At the request of a customer, adds 1-, 4-, 8-, 24-, and 32-bit-deep memory +devices that store bits in 32-bit units rather than byte units. (gdevmem.h, +gxdevmem.h, gdevmem.c, gdevm1.c, gdevm2.c, gdevm4.c, gdevm8.c, gdevm16.c, +gdevm24.c, gdevm32.c) + +Adds a new MS Windows printer driver, mswinpr2, that uses a DIB rather than +a DDB. (gdevwpr2.c) + +</pre><h3><a name="V3.35_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - A routine wouldn't compile because of a bug in the SGI C compiler. +(zcsindex.c) + - Some declarations were inconsistent when compiling for segmented +environments. (gscie.c) + - A routine wouldn't compile because of a bug in the VAX C compiler. +(gscie.c) + +Turns on compiler optimization for OS/2; adds PDF support and more devices +for Win32 and OS/2. (bcwin.mak, bcwin32.mak, os2.mak) + +</pre><h3><a name="V3.35_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Font loading used 'setglobal' without binding it, which caused +some EPS files to signal errors. (gs_fonts.ps) + - A zero-length string with offset = 0 in a binary object sequence +caused an error. (iscanbin.c) + +Adds a LOCALFONTS switch that causes Ghostscript to load Type 1 fonts into +the current VM, rather than global VM. According to Adobe, this is what +Adobe printers (but not other interpreters, such as DPS and CPSI) do. +(gs_init.ps, gs_fonts.ps) + +</pre><h3><a name="V3.35_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The 'note' page size command caused pages to be clipped +improperly. (gs_statd.ps) + +Adds "word" image devices. (gs_init.ps, zdevice.c) + +Starts converting the interpreter to use an explicit instance pointer. This +is very fragmentary so far and not really supported. (main.h, gs.c, +gsmain.c, iccinit.c) + +</pre><h3><a name="V3.35_Library"></a>Library</h3><pre> + +Adds "word" image devices. (gsdevice.h, gsdevice.c) + +Removes the requirement that ImagingBBox[0] and [1] be non-negative. (The +Adobe specification requires this, but Ghostscript supports more general +initial CTMs than the Adobe spec.) (gsdparam.c) + +</pre> + +<h2><a name="Version3.34"></a>Version 3.34 (internal) (4/18/95)</h2> + +<p> +This is a "snapshot" version made for internal purposes. It was never +released to anyone. + +<h3><a name="V3.34_Documentation"></a>Documentation</h3><pre> +Updates commprod.doc to be fully consistent with the AGFPL. (commprod.doc) + +</pre><h3><a name="V3.34_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - tar_x was out of date. (tar_x) + - tar_gs assumed that if any PC executables were present, gs.exe +would exist. (tar_gs) + - jpeg.mak said the current IJG version was 5b, but the makefiles +actually referred to version 5a. (jpeg.mak) + - The build rule for the LIPS III driver was incorrect. (devs.mak) + - Some definitions in the makefiles occurred out of order. +(ansihead.mak, cc-head.mak, gcc-head.mak, unixhead.mak, unixtail.mak) + - The build rule for dvx-gcc.mak was incorrect. (unix-end.mak) + +</pre><h3><a name="V3.34_Interpreter"></a>Interpreter</h3><pre> + +Restructures the CIE caches to move much more of the computation from color +mapping time to cache loading time. (zcie.c) + +</pre><h3><a name="V3.34_Library"></a>Library</h3><pre> + +Fixes bugs: + - Color conversion of 12-bit images was very slightly inaccurate. +(gxfrac.h) + +Changes the transfer function, black generation, and undercolor removal +caches so that they sample at 1024 points and don't interpolate, rather than +sampling at 256 points and interpolating. This significantly improves the +speed of colored image rendering. ****** LIMITED TO 256 POINTS BECAUSE OF +O-STACK SIZE LIMIT. ****** (gxfmap.h, gxcmap.c) + +Restructures the CIE caches to move much more of the computation from color +mapping time to cache loading time. (gscie.h, gscie.c) + +</pre> + +<h2><a name="Version3.33"></a>Version 3.33 (4/13/95)</h2> + +<p> +A few more last-minute bug fixes. This is, finally, the first public +release since 3.12. + +<h3><a name="V3.33_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - There was a reference to "VAX with OSF/1", which doesn't exist, +and an incorrect reference to VAX with Ultrix. (make.doc) + - The Unix makefiles incorrectly stated that gsdatadir was only +relevant to `make install'. (ansihead.mak, cc-head.mak, dgc-head.mak, +gcc-head.mak) + - Notes that DV/X users should use the zip version of the JPEG +library. (jpeg.mak) + +</pre><h3><a name="V3.33_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - A command line had gotten too long for the MS-DOS shell. +(gs.mak) + - The VMS DEC C script didn't explicitly select DEC C. +(vms-decc.mak) + - The VMS MODULES.LIS omitted SPDIFF and ZFPDIFF. (modules.lis) + - The VMS script had an incorrect entry. (vms.mak) + - The `if' fix in 3.31 broke some Unix systems with different +implementations of sh. (unix-end.mak) + - The makefile definition of gscspace_h was out of order. (gs.mak) + - An extra ; got written in gconfig_.h on DV/X platforms. +(dvx-tail.mak) + - '.' was incorrectly prepended to the library search list on DV/X +platforms. (dgc-head.mak) + - The build rules for unix*.mak didn't work on DV/X. (unix-end.mak) + +Adds a description of the -c quit switch to the help message. (gs.c) + +For the DV/X platform, changes /usr/include to /djgpp/include as the place +to look for header files. I'm not sure this is always correct. +(dvx-tail.mak) + +</pre><h3><a name="V3.33_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2ascii would cause an error if given a font that didn't have an +'X' character. (ps2ascii.ps) + - ps2ascii didn't intercept the Level 2 string display operators. +(ps2ascii.ps) + +</pre><h3><a name="V3.33_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The Stylus Color driver had an incorrect type name. (gdevstc.c) + +</pre><h3><a name="V3.33_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - -dBitsPerPixel= didn't work properly for MS Windows or OS/2 PM. +(gdevmswn.c, gdevpm.c) + - The Win32 platform didn't compile properly. (memory_.h) + +</pre><h3><a name="V3.33_Fonts"></a>Fonts</h3><pre> + +Improves the font substitution algorithm to take the face name into account +in more cases. (gs_fonts.ps) + +</pre><h3><a name="V3.33_Library"></a>Library</h3><pre> + +Fixes bugs: + - Unrotated black-and-white bitmaps with an inverted device X axis +were displaced in X. (gsimage1.c) + +</pre> + +<h2><a name="Version3.32"></a>Version 3.32 (4/7/95)</h2> + +<p> +More bug fixes. This is still not a public release. + +<h3><a name="V3.32_Documentation"></a>Documentation</h3><pre> +Further clarifies the "two-phase commit" algorithm for device put_params +procedures. (drivers.doc, gsparam.h) + +Adds a note about a compiler bug under Ultrix 4.4. (make.doc) + +</pre><h3><a name="V3.32_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Some installation scripts could fail because some implementations +of sh take the status of an `if' condition as the status of the `if' +command. (unix-end.mak) + +Adds "maintainer-clean" as a synonym for "real-clean". (gs.mak) + +Adds a -dORIENT1 switch that defines orientation = 1 as portrait for +setpage[params]. (use.doc, gs_init.ps, gs_lev2.ps, gs_statd.ps) + +</pre><h3><a name="V3.32_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2ascii didn't redirect %stdout completely. (ps2ascii.ps) + - ps2ascii didn't preserve the local/global VM mode. (ps2ascii.ps) + - ps2ascii didn't handle fonts with an all-zero or missing bounding +box correctly. (ps2ascii.ps) + - viewpbm didn't scale the image properly. (viewpbm.ps) + +</pre><h3><a name="V3.32_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The CGM driver wrote out an incorrect color precision value. +(gdevcgm.c) + - The SGI bitmap driver was named "sgi" rather than "sgirgb". +(gdevsgi.c) + - The PCX driver didn't round up an odd line length for gray-scale +output. (gdevpcx.c) + - The PCX driver produced incorrect output for gray-scale or 4- or +8-bit color. (gdevpcx.c) + +</pre><h3><a name="V3.32_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS MODULES.LIS file had gotten out of sync with the Unix +makefiles (again). (modules.lis) + +</pre><h3><a name="V3.32_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Some compilers won't accept '\l', even in the false arm of a +preprocessor conditional. (scanchar.h) + - A procedure was declared with an incorrect argument type. +(zcsindex.c) + - The scaled font cache didn't copy XUIDs properly. (bfont.h, +zfont.c, zfont2.c) + - status could return true even if the file was closed. (zfile.c) + +</pre><h3><a name="V3.32_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The LZW filters were factored improperly. (modules.lis, gs.mak, +vms.mak, slzwx.h, slzwc.c, slzwd.c) + +Changes the DCTDecode filter for compatibility with Adobe implementations: + - Ignore bytes preceding the 0xff that marks the beginning of the +JPEG data. (sdctd.c) + - Set MAX_BLOCKS_IN_MCU to 64. (jpeg.mak, gsjpglib.h) + +</pre><h3><a name="V3.32_Library"></a>Library</h3><pre> + +Fixes bugs: + - The "two-phase commit" for device parameters wasn't fully +implemented. (gsiodev.c) + - Asking for a device color map before the device was opened could +cause a crash. (gsdparam.c) + - The scaled font cache didn't copy XUIDs properly. (gxfont.h, +gsfont.c) + - 90 or 270 degree rotated black-and-white bitmaps (including +bitmapped fonts such as downloaded TrueType fonts) with an inverted device Y +axis were displaced in Y. (gsimage1.c) + - On high-resolution devices, parts of regions filled with halftones +could fail to be painted. (gxclist.c) + +</pre> + +<h2><a name="Version3.31"></a>Version 3.31 (4/2/95)</h2> + +<p> +A few final bug fixes for the release. Includes significant speed +improvements for CIE color, and a first draft of a low-level CGM driver. + +<h3><a name="V3.31_Documentation"></a>Documentation</h3><pre> +Notes that the BJC600 driver also works for the BJC4000. (devs.mak) + +</pre><h3><a name="V3.31_Procedures"></a>Procedures</h3><pre> + +At the suggestion of a user, changes the default protections for installed +files on Unix and DV/X systems from 775/664 to 755/644. (*head.mak) + +At the suggestion of a user, adds a -dNOCIE switch to substitute DeviceGray +and DeviceRGB color spaces for CIEBasedA and CIEBasedABC spaces +respectively. (gs_init.ps, gs_lev2.ps) + +</pre><h3><a name="V3.31_Utilities"></a>Utilities</h3><pre> + +Changes gslp and its relatives to use ISOLatin1Encoding for output, and to +send almost all printout to stderr rather than stdout (for use as a filter +under Unix). (gslp.ps) + +</pre><h3><a name="V3.31_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The fax/TIFF driver no longer exported gdev_fax_print_page, which +the DigiFax driver needs. (gdevtfax.c) + - The color DeskJet drivers gave an error for BitsPerPixel=3. +(gdevcdj.c) + - The "Windows printer" driver was setting its margins in points +rather than inches. (gdevwprn.c) + - The BJ10 and BJ200 drivers calculated vertical skip distances +wrong. (gdevbj10.c) + - The BJ10 and BJ200 drivers output two garbage bytes following the +initialization string. (gdevbj10.c) + +Adds a preliminary driver that produces low-level CGM output. (gdevcgml.h, +gdevcgmx.h, gdevcgm.c, gdevcgml.c) + +</pre><h3><a name="V3.31_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS files had gotten out of sync with the other makefiles +(again). (modules.lis, vms.mak) + - The MS Windows and OS/2-PM drivers hadn't been updated to handle +BitsPerPixel as a standard parameter. (gdevmswn.c, gdevpm.c) + +Removes the TIFF drivers from the Windows platform, and restores the BMP +drivers. (bcwin.mak) + +</pre><h3><a name="V3.31_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The CIE color mapping cache could produce anomalous results +for the default (all zero values) color if some of the mapping +functions were non-linear. (zcie.c) + - MultiMaster font substitution got confused if substituted +fonts had their FontName changed. (gs_fonts.ps) + - A procedure was declared as private inconsistently. (zdevcal.c) + - Some pointer relocation procedures didn't work correctly on +systems with sizeof(T *) > sizeof(int). (istack.c) + - The freelist vector wasn't large enough to handle graphics state +objects on 64-bit systems, leading to severe memory sandbars. (iastate.h) + - The debugging messages from the allocator had gotten inconsistent +and hard to use. (ialloc.c) + - Mixing save/restore with allocation could cause the GC never to +get run. (isave.c) + +Speeds up the mapping of CIE colors. (zcie.c) + +Adds a .namestring operator for getting the string of a name without having +to copy it. (zstring.c) + +</pre><h3><a name="V3.31_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The IJG code needed a couple more flags set for IJG v6. +(gsjmorec.h) + - Some pointer relocation procedures didn't work correctly on +systems with sizeof(T *) > sizeof(int). (stream.c) + +</pre><h3><a name="V3.31_Library"></a>Library</h3><pre> + +Fixes bugs: + - The end-test for the fast case of monobit images was wrong, +leading to out-of-range memory accesses. (gsimage1.c) + - Monobit images rotated by 270 degrees displayed incorrectly. +(gsimage1.c) + - If a Type 1 font used hint replacement, some parts of the outline +before the hint replacement ignored the old hints. (gstype1.c) + - Some compilers didn't accept a variable name that was the same as +a macro with parameters. (gxht.c) + - A procedure was declared as private inconsistently. (gdevm1.c) + - Some pointer relocation procedures didn't work correctly on +systems with sizeof(T *) > sizeof(int). (gdevmem.c, gsstate.c) + - The test on FORCE_HINTS_TO_BIG_PIXELS was backwards. This bug was +supposed to have been fixed in 3.30, but somehow the fix got lost. +(gstype1.c) + - 90 degree rotated monobit images could drop some scan lines. +(gsimage*.c) + +Speeds up the mapping of CIE colors. (gscie.h, gxcmap.h, gscie.c, gxcmap.c) + +Speeds up color images (non-interpolated, 1-8 bits per component) by adding +a cache for mapped color values. (gximage.h, gsimage.c, gsimage1.c, +gsimage2.c) + +Shrinks the band list file slightly by using only as many bytes as necessary +for writing out colors, rather than always using 4 bytes. (gxclist.c, +gxclread.c) + +</pre> + +<h2><a name="Version3.30"></a>Version 3.30 (beta) (3/21/95)</h2> + +<p> +More bug fixes. The garbage collector and PDF interpreter finally appear to +work reliably. + +<h3><a name="V3.30_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - language.doc had gotten out of date. (language.doc) + +</pre><h3><a name="V3.30_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - Changes in the handling of %stdout had broken ps2ascii. +(gs_dps1.ps, ps2ascii.ps) + +Improves ps2ascii to skip empty strings and not output redundant font +changes. (ps2ascii.ps) + +</pre><h3><a name="V3.30_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The fax and TIFF drivers didn't free all their working storage. +(This bug was fixed in 3.27, and the fix somehow got lost.) (gdevtfax.c) + +Adds new drivers: + - sgirgb, to produce SGI RGB raster files. (gdevsgi.c) + - tiffcrle, to produce output in TIFF "CCITT 1-dimensional Huffman +RLE" format (Group 3 fax with no EOLs). (gdevtfax.c) + - tifflzw, to produce output in TIFF LZW format (using the existing +CCITTFaxEncode filter code). (gdevtfax.c) + - tiffpack, to produce output in TIFF PackBits format. (gdevtfax.c) + +</pre><h3><a name="V3.30_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre> + +Fixes bugs: + - If the current screen was set with a halftone, setcolorscreen +wouldn't accept what currentcolorscreen returned. (gs_dps1.ps) + - debug_print_full_ref didn't print t_oparray objects correctly. +(idebug.c) + - The internal data for a font could be allocated in a different VM +space from the font dictionary, causing dangling pointers. (zfont2.c) + - definefont became confused if a program failed to delete the FID +from a re-encoded font. (This is questionable PostScript, but dvips does +it.) (zfont2.c) + - If a BuildChar procedure did a save before the setcachedevice and +a restore afterwards, the memory manager would attempt to free the cache +device after it had already been freed by the restore, leading to damaged +freelists. (gschar.c) + - setresolution (in statusdict) was ignored. (gs_lev2.ps, +gs_statd.ps) + - If a string containing a string containing a \ was passed to the +token operator, the \ was not recognized properly in a Level 2 environment. +(iscan.c) + - A couple of default dictionary sizes had become too small. +(iinit.c) + +Makes DOS EOF (control-Z, 0x1a) a self-delimiting token, like left bracket. +THIS IS A NON-BACKWARD-COMPATIBLE CHANGE, but it should not have any adverse +effects. (gs_init.ps, iscan.c, iscantab.c) + +Distinguishes arch_small_memory from arch_ints_are_short, and adds a new +-Z. switch to force small-memory table sizes regardless of actual memory +size. (dstack.h, idict.c, zpcolor.c, zvmem2.c) + +</pre><h3><a name="V3.30_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - A page with no Contents caused an error. (pdf_main.ps) + - Executing a Form resource caused an error. (pdf_draw.ps) + - Outlines with open entries caused an error. (pdf_main.ps) + - Embedded Type 3 fonts caused an error. (pdf_draw.ps, pdf_font.ps) + - The Widths array of fonts was ignored. (pdf_font.ps) + +</pre><h3><a name="V3.30_Library"></a>Library</h3><pre> + +Fixes bugs: + - Freeing an entry in the pattern cache didn't clear the pointers to +the raster data, producing a dangling reference that confused the garbage +collector. (gxpcmap.c) + - The test on FORCE_HINTS_TO_BIG_PIXELS was backwards. (gstype1.c) + - The pattern cache bookkeeping was incorrect. (gxpcmap.c) + - Depending on the order in which pointers were relocated, the +garbage collector could incorrectly relocate pointers from the character +cache. (gxfcache.h, gsfont.c, gxccache.c, gxccman.c) + +Changes the fast case of black-and-white images so it aligns scaled images +with the device coordinate system, to improve performance. (gsimage1.c) + +Extends the coordinate transformation routines to handle absurdly large +translation values in the CTM as long as the final device device coordinates +are within fixed-point range. (gxmatrix.h, gxpath.h, gschar.c, gscoord.c, +gsmatrix.c, gxhint2.c, gxpath2.c) + +Distinguishes arch_small_memory from arch_ints_are_short, and adds a new +-Z. switch to force small-memory table sizes regardless of actual memory +size. (gdevprn.h, gxpcolor.h, gzht.h, std.h, gsfont.c, gsht1.c, gspaint.c, +gsstate.c, gxcht.c, gxht.c, gxpcmap.c) + +</pre> + +<hr> + +<h2><a name="Version3.29"></a>Version 3.29 (internal) (3/8/95)</h2> + +<p> +Another bug-fix release. This release processes all but 7 of the 500+ files +on the Adobe Acrobat Sampler CD-ROM without giving an error. The garbage +collector finally appears to be stable. This version was created for a +customer; it was not released to the general public or even to the beta test +list. + +<h3><a name="V3.29_Documentation"></a>Documentation</h3><pre> +Documents the possible need to set LD_RUN_PATH on SVR4 platforms. +(make.doc) + +Expands the description of the device life cycle, and of the constraints on +put_params procedures. (drivers.doc) + +Adds an explicit copyright notice to the Aladdin Ghostscript Free Public +License. (PUBLIC) + +Clarifies that the Win32s documentation also applies to Windows NT. +(make.doc) + +</pre><h3><a name="V3.29_Procedures"></a>Procedures</h3><pre> + +Removes the obsolete writeppmfile operator from the standard configurations. +(gs.mak) + +Changes the Watcom makefiles to work properly with Watcom C/C++ 10.0. +(make.doc, msc.mak, watc.mak, watcwin.mak, wccommon.mak) + +</pre><h3><a name="V3.29_Utilities"></a>Utilities</h3><pre> + +Adds a wftopfa utility for converting the Wadalab fonts to usable Type 0 and +Type 1 form. (wftopfa) + +</pre><h3><a name="V3.29_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Entries added automatically by definefont (FontInfo, ExactSize) +could cause a font dictionary to become full. (gs_fonts.ps, gs_type1.ps) + - wrfont.ps couldn't deal with very long CharStrings. (wrfont.ps) + +Makes the name of the Fontmap file an easily editable parameter. +(gs_fonts.ps) + +Adds a utility for converting the Wadalab font to usable Type 0 and Type 1 +form. (wrfont.ps, wftopfa.ps) + +</pre><h3><a name="V3.29_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The top margin for printer (and fax) devices was computed +incorrectly, using the X resolution rather than the Y resolution. +(gdevprn.h) + - Changing the page size or resolution of a printer device closed +and reopened the device unnecessarily. (gdevprn.c) + - Changing the page size of the X11 device didn't change the initial +matrix, so (0,0) didn't wind up in the lower left corner. (gdevx.c) + - The bit devices didn't allow changing the number of bits per +pixel. (gdevbit.c) + +Adds a settable .IsPageDevice boolean device parameter to the X Windows +driver. The default value is true. (gdevx.h, gdevx.c) + +Changes the PPM driver so that it chooses between PBM/PGM/PPM on a +page-by-page basis, rather retaining the most general format ever required +by any page. (gdevpbm.c) + +</pre><h3><a name="V3.29_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre> + +Fixes bugs: + - The current page device could be null, rather than an empty +dictionary. (igstate.h, zchar.c, zdevice.c, zdevice2.c, zgstate.c) + - The scanner didn't signal an error for names or strings that were +too long. (iscan.c) + - A missing header file upset the VAX compilers. (ztype.c) + - Some places expecting dictionary operands didn't check the type, +because they incorrectly assumed that the dict_check_read/write macro did +this. (idict.h, zdevice2.c, zht2.c, zmisc2.c) + - The definition of quit in systemdict wasn't disabled within +encapsulated jobs. (gs_lev2.ps) + - resetfile gave an error if the file was closed, rather than doing +nothing. (zfileio.c) + - The scanner attempted to free an uninitialized pointer if it +reached EOF after a / or //. (iscan.c) + - A restore in a different file than the corresponding save caused +an invalidrestore error. (gs_init.ps) + - The default value of EndOfData in RunLengthDecode streams was set +to false. (zfilter.c) + - .registerencoding didn't invoke the save machinery correctly, +leading to GC problems. (zfont2.c) + - The facility for overriding .printerror didn't work correctly. +(gs_init.ps) + - gs_run_file_open wasn't public. (gsmain.c) + - The interpreter returned e_undefined for undefined error names, +rather than the error code. (interp.c) + - Allocation in system memory (specifically, adding a block to a +stack) couldn't trigger automatic garbage collection. (interp.c, igc.c, +zvmem2.c) + - A restore in a different invocation of gs_run_string than the +corresponding save would stop reading the string. (files.h, gsmain.c, +iccinit.c, zfile.c) + - The Type 1 rasterizer state included a pointer into the middle of +an object, confusing the garbage collector. (zchar1.c, zfont1.c) + - When the garbage collector deleted a name, it didn't zero out the +string pointer. (iname.c) + - On platforms where obj_align_mod > 4, the memory manager could +access 1 beyond the end of its freelists. (iastate.h) + - makefont and scalefont didn't check the type of their font operand +soon enough. (zfont.c) + - restore didn't finalize the objects it freed. (isave.c) + - restore didn't free system VM. (isave.c) + - Freeing a ref array that occupied an entire chunk didn't free the +chunk. (ialloc.c) + +Adds a .runexec operator which implements the 'close if error' function of +run. (zfile.c, zfileio.c) + +Moves the obsolete writeppmfile operator into a separate file. (zfileio.c, +zwppm.c) + +Makes the statistics returned by the memory manager more accurate. +(ialloc.c, zvmem.c) + +Adds a (read-only) %Calendar% IODevice. (zdevcal.c) + +Adds a "hook" in the character operators to allow external code to +intervene; this is needed for a customer. (ichar.h, zchar.c, zchar2.c) + +Makes control-D (0x04) a self-delimiting token, like left bracket. THIS IS +A NON-BACKWARD-COMPATIBLE CHANGE, but it should not have any adverse +effects. (scanchar.h, iscan.c, iscantab.c) + +Changes the error stack printout so that it puts line breaks between items +iff the items are being printed with ==. (gs_init.ps) + +Uses finalization to close streams being freed. (igc.c, zfile.c, ziodev.c) + +</pre><h3><a name="V3.29_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Embedded Type 1 fonts that invoked save and restore while being +read caused an error. (pdf_font.ps) + - Large files that referenced a non-alphabetic font for the first +time late in the file could cause an error. (pdf_main.ps) + +</pre><h3><a name="V3.29_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - SubFileDecode streams didn't copy partial matches of the EOD +string into their output. (sfilter1.c) + +Makes switching between read and write modes a stream procedure. (stream.h, +sfile.c, sfileno.c, stream.c, zfileio.c) + +Makes file streams close themselves when finalized. (We can't do this for +other streams, because finalization procedures aren't allowed to free +storage explicitly.) (stream.h, sfile.c, sfileno.c, stream.c) + +</pre><h3><a name="V3.29_Library"></a>Library</h3><pre> + +Fixes bugs: + - The obsolete files gcdefs.h and gsfile.c were still included in +the fileset. + - A number of places didn't deal with null patterns properly (p_tile +== 0). (gxdcolor.h, gspcolor.c, gxpcmap.c) + - The pattern tiling algorithm was numerically unstable, especially +if the X/YStep vectors were close to the axes. (gxcolor2.h, gspcolor.c, +gxpcmap.c) + - setdeviceparams checked the values of read-only byte array +parameters incorrectly. (gsdparam.c) + - The statistics macros in gxfill.c didn't use DO_NOTHING when +disabled. (gxfill.c) + - Changing the orientation of a device closed and reopened the +device unnecessarily. (gsdparam.c) + - ioerrors occurring when writing command lists weren't reported +properly. (gxclist.h, gxclist.c) + - Errors from device procedures weren't always propagated up to +clients. (gsimage1.c, gsimage3.c, gxclip2.c, gxclist.c) + - Overflowing the fixed-point translation values in the CTM caused a +floating point exception rather than a limitcheck. (gxmatrix.h, gscoord.c) + - charpath set the current point correctly, but didn't append a +moveto element to the path. (This mostly affected Mathematica output.) +(gzpath.h) + - Image devices mapped colors incorrectly. (gdevmem.c, gdevm16.c) + - On devices with color capability but fewer than 4 bits per pixel, +color halftones didn't work (and could cause an arithmetic exception). +(gxdither.c) + - Black-on-white memory devices didn't map colors properly. +(gdevprn.h, gxdevice.h, gxdevmem.h, gdevmem.c, gdevm1.c, gsdevice.c) + - Memory devices with a non-zero origin in their initial matrix +clipped the image improperly. (gsdevice.c) + - The Type 1 rasterizer state included a pointer into the middle of +an object, confusing the garbage collector. (gstype1.h, gxfont1.h, +gxtype1.h, gstype1.c, gxhint2.c) + - The band rasterizer could produce garbled output for images +(including characters) on 64-bit architectures. (gxclread.c) + - Bounding boxes (for pathbbox and setbbox) could be slightly +inaccurate. (gsmatrix.c) + - On 64-bit architectures, halftone tiles less than 16 bits wide +were handled incorrectly. (gxclist.c) + +Adds an .IsPageDevice boolean device parameter (normally read-only). +(gsdparam.c) + +Removes the library code for implementing the obsolete writeppmfile +operator. (gswppm.c) + +Makes the default matrix (for initmatrix and defaultmatrix) a settable +parameter in the graphics state. (gscoord.h, gzstate.h, gscoord.c, +gsdevice.c, gsdparam.c) + +Makes the statistics returned by the memory manager more accurate. +(gsmemory.h) + +Adds a compile-time flag to choose whether or not to force Type 1 hints to +"big pixel" boundaries when oversampling. (gstype1.c) + +Changes the .PageCount device parameter back to PageCount, because the +change broke some scripts. (gsdparam.c) + +Adds optimization for 90 degree rotated images with pure colors. +(gximage.h, gsimage.c, gsimage1.c) + +Changes the band rasterizer so that replicated halftone tiles are written on +the band list in unreplicated form. (gsbitops.h, gxcldev.h, gsbitops.c, +gxclist.c, gxclread.c, gxht.c) + +Changes the .HWBitsPerPixel device parameter to BitsPerPixel. (drivers.doc, +language.doc, gdevcdj.c, gdevstc.c, gsdparam.c) + +</pre> + +<h2><a name="Version3.28"></a>Version 3.28 (beta) (2/13/95)</h2> + +<p> +Another bug-fix beta release. The number of bugs being fixed in each of +these sub-releases does exceed the number of new bugs introduced, but the +latter number is discouragingly high. + +<h3><a name="V3.28_Documentation"></a>Documentation</h3><pre> +Adds some information about handling VMS file attributes for files +transferred by FTP. (use.doc) + +</pre><h3><a name="V3.28_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - unix-gcc.mak said the static linkage switch for SunOS was -Bstatic +rather than -static. (unix-gcc.mak) + - Some dependency lists in gs.mak were out of date. (gs.mak) + +</pre><h3><a name="V3.28_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - markhint.ps didn't check for protected fonts. (markhint.ps) + +</pre><h3><a name="V3.28_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The cdj driver had a byte/char agreement problem. (gdevcdj.c) + - The cdj driver attempted to initialize a dynamic array. +(gdevcdj.c) + +Removes the setting of InputAttributes and OutputAttributes from the H-P +drivers, since this causes more problems than it solves. (gdevdjet.c) + +</pre><h3><a name="V3.28_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - makeoperator assigned incorrect attributes to operators. (bug +introduced in 3.27) (opdef.h, iinit.c, iutil.c, zmisc.c) + +</pre><h3><a name="V3.28_Library"></a>Library</h3><pre> + +Fixes bugs: + - gs_makeimagedevice didn't set the caller's pointer to the newly +created device. (bug introduced in 3.27) (gsdevice.c) + - There were still some mismatches between char * and byte * values. +(gsdparam.c) + - The halftone replication algorithm could produce inappropriately +large replicated masks. (gxht.c) + - stroke usually did the wrong thing for degenerate (single-point) +subpaths. (gxstroke.c) + +</pre> + +<h2><a name="Version3.27"></a>Version 3.27 (beta)(withdrawn) (2/8/95)</h2> + +<p> +Yet another bug-fix beta release. This release had so many serious problems +(the most serious being at least one changed file that the release tool +failed to include in the fileset) that it was withdrawn less than a day +after it was issued. + +<h3><a name="V3.27_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The NEWS for 3.26 didn't mention the fact that the stdxxx stream +interface used by MS Windows, OS/2, and Macintosh implementations had +changed. (NEWS) + - The file public.doc wasn't distributed with the previous fileset. + +Brings the NeXTSTEP documentation up to date for NeXTSTEP releases 3.2 and +subsequent. (make.doc) + +</pre><h3><a name="V3.27_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Some dependency lists in gs.mak were out of date. (gs.mak) + - A 'fi;' was missing in the Unix install script. (unix-end.mak) + - There was no VMS build script for the PDF options. (vms.mak) + - The VMS script used CC_QUALI instead of CC_QUAL in several places. +(vms.mak) + +</pre><h3><a name="V3.27_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2epsi's usage prompt referred to "pstoepsi". (ps2epsi) + - ps2epsi set PATH and LOCALPATH unilaterally. (ps2epsi) + +Comments out the sample usage line at the end of viewjpeg.ps. (viewjpeg.ps) + +</pre><h3><a name="V3.27_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The fax and tiff drivers didn't free all of their working storage. +(gdevtfax.c) + +Adds user-contributed drivers for the BJC 600 and ESC/P printers. +(devs.mak, gdevcdj.c) + +</pre><h3><a name="V3.27_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - Some necessary casts of string parameters to (const byte *) were +omitted. (gp_mswin.c, gp_os2.c) + +Adds the psmono and bit* drivers, and removes the p*m drivers, in the OS/2, +32-bit MS-DOS, and 32-bit Windows configurations. (bcwin32.mak, os2.mak, +watc.mak) + +</pre><h3><a name="V3.27_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The Fontmap for Ultrix had somehow become slightly incorrect. +(Fontmap.Ult) + +Removes the font file names from the dependency lists in cfonts.mak. This +makes cfonts.mak readily usable with any set of fonts, but it also means +that it will always run font2c, rather than being able to avoid this if the +.c file is up to date. (cfonts.mak) + +</pre><h3><a name="V3.27_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Some operators could fail if the stdxxx streams weren't currently +open. (files.h, zfileio.c, ziodev.c) + - setpagedevice didn't handle unrecognized keys properly. +(gs_setpd.ps) + - The value returned for the HWColorMap device parameter was +allocated incorrectly, confusing the garbage collector. (iparam.c) + - Typing ahead at the >>showpage<< prompt no longer caused all +further pages to be processed without stopping. (gs_init.ps) + - Setting DEVICEWIDTHPOINTS or DEVICEHEIGHTPOINTS on the command +line caused a typecheck. (gs_init.ps) + - The garbage collector didn't handle halftone threshold arrays +properly. (zht2.c) + - setdefaulttimeouts caused an error on Level 2 systems. +(gs_lev2.ps) + - cvi and cvr weren't equivalent to token followed by a type check. +(iscan.h, iscannum.h, iscan.c, iscannum.c, ztoken.c, ztype.c) + - In Level 2 systems, image and colorimage didn't allow 12 bits per +sample. (zpaint.c) + - If debugging was enabled, the garbage collector printed spurious +error messages about the allocator objects not being in a chunk. (ialloc.c) + - restore didn't reset the count of operator procedures, so the +operator procedure table could fill up. Fixing this required splitting the +op_array_table into a global table and a local table. (opdef.h, iinit.c, +iutil.c, zmisc.c) + - .forgetsave could leave a dangling pointer in the memory manager, +causing an access error. (ialloc.c, isave.c) + - Freed objects weren't always marked as freed, which could confuse +the memory validator. (ialloc.c) + - .forgetsave didn't mark inner chunk headers as free, leading to +access errors. (isave.c) + +Changes the representation of operator procedures so that they point +directly to their definition in the op_array_table. (iref.h, opdef.h, +idebug.c, igc.c, igcref.c, interp.c, zmisc.c) + +Removes .makeglobaloperator. (zmisc.c) + +Adds patches to discard some common garbage produced by H-P-oriented +applications and drivers. (gs_init.ps) + +Changes the >>showpage<< prompt so that if the input reaches EOF, the +interpreter still stops after the next >>showpage<<, rather than processing +all subsequent pages. This is a consequence of the bug fix that +automatically reopens the stdxxx files. + +Adds an optional dictionary parameter for the RunLengthEncode/Decode +filters, to allow specifying EndOfData. The default is true. (zfilter.c) + +Adds ByteTranslateEncode/Decode filters. (zfilter2.c) + +</pre><h3><a name="V3.27_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The K > 0 option of the CCITTFaxDecode filter switched back to 2-D +encoding if an output buffer boundary fell in the middle of a 1-D line, and +signalled an error if an input buffer boundary fell in the middle of an EOL. +(scfd.c) + +Adds an EndOfData flag to the RunLengthEncode/Decode filters. If true, RLE +generates 128 as EOD, and RLD recognizes it; if false, RLE does not mark +EOD, and RLD ignores 128. (srlx.h, gxclist.c, gxclread.c, sfilter1.c) + +Adds ByteTranslateEncode/Decode streams. (sbtx.h, sfilter2.c) + +</pre><h3><a name="V3.27_Library"></a>Library</h3><pre> + +Fixes bugs: + - There were some mismatches between char * and byte * values. +(gsdparam.c) + - Failure to round a scaling coordinate caused one-for-one +black-and-white images to render slower than they should. (gsimage.c) + - Setting PageSize without setting HWResolution could cause an +invalid memory access. (gsdparam.c) + - The garbage collector didn't handle halftone threshold arrays +properly. (gxht.h, gsht.c, gsht1.c) + +</pre> + +<h2><a name="Version3.26"></a>Version 3.26 (beta) (2/1/95)</h2> + +<p> +Yet another bug-fix beta release, still not ready for public release. + +<h3><a name="V3.26_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The description of device properties had gotten out of sync with +the code. (language.doc) + +Splits off documentation specific to the Aladdin (non-GNU) release into a +separate file. (readme, public.doc, unix-end.mak) + +Adds a pointer to a collection of other free fonts (including some Cyrillic +ones) available on the net. (public.doc) + +</pre><h3><a name="V3.26_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - On VMS systems with both VAX C and DEC C installed, the build script +used VAX C rather than DEC C. (vms.mak) + - zfdecode.c didn't have a build rule. (gs.mak) + - Several macros in the makefile were used before they were defined. +(gs.mak) + - Several macros in the makefile were used without being defined. +(gs.mak) + +Replaces the gssetdev, gssetmod, and gsaddmod scripts with more variants of +echogs. (echogs.c, gs.mak) + +</pre><h3><a name="V3.26_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The ps2ascii shell script passed a -f flag to the shell, which not +all shells recognize. (ps2ascii) + +</pre><h3><a name="V3.26_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Due to a typo in an initialization string, the H-P printers didn't +reset the top margin to zero. (gdevdjet.c) + +Adds InputAttributes and OutputAttributes entries to the H-P drivers. (This +should probably be generic to all printers.) (gdevdjet.c) + +Replaces the contributed Epson Stylus Color driver with a newer version. +(devices.doc, gdevstc.c) + +</pre><h3><a name="V3.26_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - DEC C complained about 'abs' and 'exit' not being declared. (x_.h) + - gp_mswin.c and gp_os2.c wouldn't compile. (gp_mswin.c, gp_os2.c, +ziodev.c) + +</pre><h3><a name="V3.26_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The default CIE rendering dictionary gave everything a magenta tint. +(gs_lev2.ps) + - Changing HWResolution and PageSize in the same call of +setpagedevice produced an incorrect HWSize. (gsdparam.c) + - .putdeviceparams didn't accept all the keys that .getdeviceparams +returned. (gsdparam.c) + - The default handler for interrupt and timeout errors didn't push a +current object (command) on the stack. (gs_init.ps) + - The garbage collector didn't handle strings larger than 64K +properly. (iastate.h, ialloc.c, igcstr.c) + +Adds media matching and Policy consultation to the implementation of +setpagedevice. (gs_setpd.ps) + +Adds a MaxGlobalVM system parameter. (zmisc2.c) + +</pre><h3><a name="V3.26_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The CCITTFaxEncode filter could access a byte beyond the end of +the allocated area. (scfe.c) + - The CCITTFaxDecode filter could get an ioerror if a buffer +boundary fell in exactly the wrong place. (scfd.c) + +</pre><h3><a name="V3.26_Library"></a>Library</h3><pre> + +Fixes bugs: + - The garbage collector didn't trace colored halftones properly. +(gzht.h) + - The garbage collector didn't relocate the bitmap pointers in +halftone caches properly. (gzht.h, gxht.c) + +Adds the ability to transmit dictionaries through the param_list mechanism +(specifically, as device parameters). This change is +non-backward-compatible only for implementors of parameter lists, which only +exist within the Ghostscript core. (gsparam.h, iparam.h, iparam.c) + +Removes the InitialMatrix device property. (gsdparam.c) + +</pre> + +<h2><a name="Version3.25"></a>Version 3.25 (beta) (1/24/95)</h2> + +<p> +Yet another bug-fix beta release. There are still at least half a dozen +significant known bugs to be fixed before a public release. + +<h3><a name="V3.25_Documentation"></a>Documentation</h3><pre> +Notes that on Unix systems, one should not edit 'makefile', but should edit +the individual subfile and run tar_cat. THIS IS A NON-BACKWARD-COMPATIBLE +CHANGE. (make.doc) + +Adds information on the Macintosh implementation. (readme) + +</pre><h3><a name="V3.25_Procedures"></a>Procedures</h3><pre> +Fixes bugs: + - make clean failed on Unix systems where rm -f requires at least one +file name. (gs.mak) + - math_.h was omitted from many dependency lists. (gs.mak) + +</pre><h3><a name="V3.25_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The X Windows and MS Windows draw-line routines couldn't possibly +produce sufficiently correct output (since the interface only provides integer +coordinates). (gdevx.c, gdevwddb.c) + +In response to patent-related actions by Unisys and CompuServe, removes the +GIF driver. (*.mak) + +Changes dci_std_color (and std_device_std_color_* and prn_device_std_*) so +that if the number of bits per pixel is 32, the device is defined as CMYK +rather than RGB. (gxdevice.h) + +Removes the tseng8 device, which is no longer useful. (devs.mak, gdevsvga.c) + +Adds pseudo-alpha support to the SVGA drivers, via the TextAlphaBits and +GraphicsAlphaBits device parameters. (gdevsvga.h, gdevsvga.c) + +Adds a user-contributed driver for the Epson Stylus Color printer. (devs.mak, +gdevstc.c, devices.doc) + +</pre><h3><a name="V3.25_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS build scripts had gotten out of sync (again). (vms*.mak) + +</pre><h3><a name="V3.25_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The emulator name array was incorrectly declared const in one place. +(gs.c) + - A closed file could incorrectly appear to be 'eq' to another file +(open or closed). (iutil.c) + - If %stdin/%stdout/%stderr was ever closed, it couldn't be +reopened. (gs_btokn.ps, gs_init.ps, files.h, zfile.c, zfileio.c, zfilter.c, +zfproc.c, ziodev.c) + +Changes (almost) all the operator routines to 'static'. (z*.c) + +</pre><h3><a name="V3.25_Library"></a>Library</h3><pre> + +Fixes bugs: + - The raster value for replicated tiles in the halftone cache was +incorrect, causing unaligned memory accesses. (gxht.c) + - stroke and strokepath could produce slightly inaccurate output +(leading to slight visible anomalies) as a result of stroke adjustment. +(gxstroke.c) + - Attempting to draw an arc with zero radius could cause a numeric +exception. (gspath1.c) + - Setting the Orientation of a device to null resulted in actually +setting it to a random value. (gsdparam.c) + - charpath, stringwidth, and cshow attempted to remap the current +color unnecessarily. (gschar.c) + +Adds the ability to trace calls on the sqrt function (and possibly other math +functions in the future.) (math_.h, gsmisc.c) + +Adds additional interrupt checks in the banding code. (gxclist.c, gxclread.c) + +</pre> + +<h2><a name="Version3.24"></a>Version 3.24 (beta) (1/17/95)</h2> + +<p> +This was supposed to be a public release, but too many bugs showed up in 3.23, +so this is another bug-fix beta release. This is the first release with a +working PDF reader. + +<h3><a name="V3.24_Documentation"></a>Documentation</h3><pre> +Notes that Solaris requires using installbsd instead of install. (make.doc) + +</pre><h3><a name="V3.24_Procedures"></a>Procedures</h3><pre> + +Changes 'make mostlyclean' so that it doesn't delete the Ghostscript +executable (but deletes everything else that 'make clean' does). (gs.mak) + +Changes the link list generator so it eliminates duplicate library requests. +(genconf.c) + +Factors the interpreter further so as to include less unnecessary PostScript +support in the PDF interpreter. (gs.mak, zpath.c, zpath1.c) + +Adds a printout of the available language interpreters to the -h message. +(genconf.c, gs.c, iinit.c, gs.mak) + +</pre><h3><a name="V3.24_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The alternate X drivers used a cast in an initializer, causing a +compilation error on some platforms. (gdevxalt.c) + +Adds a driver for the LaserJet IIID, including duplex printing if specified by +the Duplex page device parameter. (gdevdjet.c) + +Adds Orientation to the bit device. (gdevbit.c) + +</pre><h3><a name="V3.24_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - There was an extraneous pfen-> in the NT file system module, causing +a compilation error. (gp_ntfs.c) + - The DLL code referred to an obsolete symbol a_foreign. (gsdll.c) + - The VMS build scripts omitted the LaserJet 4 driver. (vms-*.mak) + - The VMS build scripts had several other minor errors. (vms.mak) + +</pre><h3><a name="V3.24_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Defining a font alias in global VM with a name that was a string in +local VM caused an error. (gs_fonts.ps) + - The font compiler referred to an obsolete symbol a_foreign. +(font2c.ps) + +</pre><h3><a name="V3.24_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - There was an extraneous '#' before an extern declaration. +(gsmain.c) + - The interpreter could (incorrectly) attempt to expand the e-stack. +(istack.h, interp.c, istack.c) + - zfproc.c called memcpy but didn't include memory_.h. (zfproc.c) + - A garbage collection occurring within a 'save' would often smash +memory. (igc.c) + - If the last character returned by the procedure of a procedure-based +filter was \r, readline could get an endless loop. (zfileio.c) + - Saving a change to a ref member of a structure confused the garbage +collector. (isave.h, isave.c, zdict.c) + - The -Zu debugging printout could cause an access error under rare +circumstances. (isave.c) + - Save objects could get allocated in global VM, causing dangling +references. (zvmem.c) + - The vmsave object created by the interpreter for a save didn't get +freed properly if the memory manager created an invisible save level, which +could cause the next garbage collection to crash. (zvmem.c) + - 'run' always printed an error message, rather than letting the +top-level control loop do it. (gs.c, gs_init.ps) + +Adds support for duplex devices. (gxdevice.h, gsdparam.c, gs_statd.ps, +gs_setpd.ps) + +Adds the beginnings of support for CID-keyed fonts. (gs_cidfn.ps) + +Changes the format of the stack dump printed for errors, to make it easier to +read. (gs_init.ps) + +</pre><h3><a name="V3.24_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre> + +Fixes bugs: + - The .local/global allocation operators always allocated in system +VM. (zsysvm.c) + - setpage[params] caused an error. (gs_lev2.ps) + - If an error occurred during a cshow or (x|y|xy)show, the interpreter +freed the enumerator twice. (zchar.c, zchar2.c) + +Changes setpageparams so that orientation = 0 means portrait. This is not +compatible with AGFA's convention for roll-feed devices, but it is compatible +with the more common cut-sheet printers. (gs_statd.ps) + +Adds meaningful values for the Emulator resource. (gsmain.c, gs_res.ps) + +Makes -Z? validate the state of memory before and after save and restore. +(ialloc.h, igc.h, ialloc.c, igc.c, ilocate.c, zvmem.c) + +</pre><h3><a name="V3.24_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - The Unix install script didn't install the PDF files if they were +present. (unix-end.mak) + - PDF to PostScript conversion didn't work at all. (It still doesn't +work very well.) (pdf_2ps.ps, pdf_main.ps) + - Images with an Indexed color space and no Decode entry caused an +error. (pdf_draw.ps) + - The 'Page <n>' messages were printed even if QUIET was set. +(pdf_main.ps) + +Changes the interpreter so that when it encounters an unknown operator, it +prints an error message and continues, rather than signalling an error. +(pdf_base.ps) + +Makes F a synonym for f if there is nothing on the operand stack, to +compensate for a bug in some Adobe software. (pdf_base.ps) + +Changes pdfgetpage so it uses 1-origin rather than 0-origin indexing. THIS IS +A NON-BACKWARD-COMPATIBLE CHANGE. (pdf_main.ps) + +</pre><h3><a name="V3.24_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The Group 3 2-D and Group 4 encoders produced incorrect output if a +scan line beginning with a black pixel was followed by a scan line beginning +with a white pixel. (scfe.c) + - A SubFileDecode filter with a count of 1 and a non-empty EOD string +would smash memory. (sfilter1.c) + +Updates the DCT filters so they will work with the latest version (5a) of the +IJG library. (*.mak, jpeg.mak, sjpegerr.c) + +</pre><h3><a name="V3.24_Library"></a>Library</h3><pre> + +Fixes bugs: + - A call with integer parameters to a procedure with floating point +arguments didn't work on non-ANSI compilers. (gsimage.c) + - Arcs could get turned into polygons if the scaling values in the CTM +were very large and the radius was (in user space coordinates) very small. +(gspath.c) + - The current point was defined when a BuildChar procedure was called. +(This bug was documented as fixed in version 2.2!) (gschar.c) + +Adds support for Orientation and Duplex page device parameters, for those +devices that support these. (gdevprn.h, gxdevice.h, gsdevice.c, gsdparam.c) + +</pre> + +<h2><a name="Version3.23"></a>Version 3.23 (beta) (1/5/95)</h2> + +<p> +This is almost entirely a bug fix release. It also includes a largely working +PDF reader. This is intended as the beta test release for the next public +release. + +<h3><a name="V3.23_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - COPYLEFT, COPYING, NEWS, PUBLIC, README, and the standard Fontmap +were omitted from the 3.22 fileset. + +Documents the use of the -oldc switch to work around a compiler crash on +the DECstation. + +Expands and clarifies the documentation for building the DesqView/X version +with djgcc. (make.doc) + +Adds documentation on the "600x300" H-P inkjet printers, explaining why +this alleged higher resolution is not available. (devices.doc) + +Adds to the PUBLIC license a warning that it is not a GNU License, and a +requirement to include a copy of or a pointer to the License in any written +material. (PUBLIC) + +Documents the fact that Ghostscript *does* attempt to look up files in the +current directory first. (use.doc) + +</pre><h3><a name="V3.23_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - In VMS.MAK, .JPEG should have been changed to .JPEG-5 in a few +places. (vms.mak) + +Adds the pjxl300 driver to all configurations that include the other color +DeskJet drivers. Replaces pjet and pjetxl with pj and pjxl. (*.mak) + +Makes 'run' recognize PDF files if the PDF reader is included. +(pdf_main.ps) + +</pre><h3><a name="V3.23_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - viewjpeg.ps needed the test for languagelevel = 2 at the +beginning of the file. (viewjpeg.ps) + - prfont.ps used 'min', which isn't a standard PostScript operator. +(prfont.ps) + - prfont.ps created Encoding vectors that weren't 256 elements +long. (prfont.ps) + +Adds the gsdj500 script to the installation list. (unix-end.mak) + +Changes the Unix "line printer" shell scripts to add the date to the page +header. (gsbj, gsdj, gsdj500, gslj) + +Changes ansi2knr so that it will work properly on systems where the ctype +macros don't handle 8-bit characters correctly. (ansi2knr.c) + +</pre><h3><a name="V3.23_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Some compilers don't allow casts in initialization expressions. +(gdevx.c, gdevxalt.c) + - The cdj drivers didn't initialize the color_info structure +properly. (gdevcdj.c) + +Adds another alternate X Windows driver, x11mono, that is a black-and-white +device. (devs.mak, gdevxalt.c) + +Adds a user-contributed driver for the Apple Imagewriter LQ. (devs.mak, +gdevadmp.c) + +</pre><h3><a name="V3.23_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS MODULES.LIS file had gotten out of sync with the makefile +(again); GDEVABUF and GSBITOPS were missing. (modules.lis) + - The VMS script file had gotten out of sync with the makefile +(again). (vms.mak) + - The MS Windows platform code didn't recognize Windows 95 (Windows +4.0) as equivalent to Windows NT. (gp_mswin.c) + - File name enumeration didn't work on OS/2 or win32. (gp_ntfs.c, +gp_os2.c) + - -sOutputFile= didn't work under MS Windows. (gp_mswin.c) + +Changes the SCO Unix direct frame buffer driver so it generates in-line +instructions to access the frame buffer, for a dramatic speed improvement. +(gdevpcfb.h, gdevsco.c) + +</pre><h3><a name="V3.23_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - If a font couldn't be found in the Fontmap, a recursion loop +sometimes occurred. (gs_fonts.ps) + - Aliases for global fonts weren't automatically created as global, +possibly leading to a recursion loop. (gs_dps1.ps, gs_fonts.ps) + - If a font was loaded into global VM within an inner save, the restore +deleted it from FontDirectory but not from SharedFontDirectory, causing a +possible recursion loop. (gs_dps1.ps, gs_fonts.ps, idict.h, idict.c, zdict.c) + +Further improves the algorithm for substituting for unknown fonts. +(gs_fonts.ps) + +</pre><h3><a name="V3.23_Interpreter_PostScript"></a>Interpreter (PostScript)</h3><pre> + +Fixes bugs: + - zcontrol.c had an assignment of const char * to const byte *, +which some compilers don't like. (zcontrol.c) + - Setting an Indexed color space based on a CIE space caused an +attempt to free a random block of memory. (zcsindex.c) + - Some compilers don't like mixing conditionals and casts in +initialization expressions. (iref.h) + - Some calculations of table sizes for string garbage collection +didn't work if sizeof(long) != 4, leading to smashed strings. (iastate.h, +ialloc.c, igcstr.c) + - Strings longer than about 7000 bytes smashed their chunk header +and confused the garbage collector. (ialloc.c) + - Some compilers needed iccfont.c to include strimpl.h. +(iccfont.c) + - The obsolete file zcspace2.c was still included in the fileset. + - If the command line included any @-files that required searching +the library path, a limitcheck would occur. (zfile.c) + - The insideness testing operators caused a memory access error, +because the procedure vector hadn't been updated to provide a default +get_alpha_bits procedure. (zupath.c) + - gcheck didn't check for stack underflow. (zvmem2.c) + - cleardictstack could fail to clear the dictionary stack if the +stack had overflowed into additional blocks. (zdict.c) + - If the '-' switch was selected, resources weren't released +properly on exit. (gs.c) + - Setting a Pattern color space based on a CIE space caused an +invalid memory access. (zcsindex.c) + - The garbage collector didn't treat refs properly on machines with +short ints. (igcref.c) + - Operators with more than 16 arguments could break the +interpreter. (interp.h, iinit.c, interp.c) + - save/restore didn't restore the setting of the current allocator +VM (local/global). (isstate.h, isave.c) + - stdpre.h declared exit as an extern, instead of letting gsmain.c +declare it. (stdpre.h, gsmain.c) + - gs.c used fputs to print help messages rather than fprintf. +(gs.c) + - Interrupts failed to re-execute the operation that was +interrupted. (interp.c) + - Low-resolution CMYK devices didn't use separate screens for each +color plane as the default. (gs_init.ps) + - filterdict wasn't getting undef'ed at the end of initialization. +(gs_init.ps) + - gstate operations were broken (bug introduced in 3.02). +(zdevice2.c) + - resourceforall didn't remove the resource dictionary from the +dictionary stack when calling the client-supplied procedure. (gs_res.ps) + - currentcolor with an Indexed color space returned a real rather +than an integer. (zcolor2.c) + - setshared / setglobal left the stack in an unobvious state if +they were given a non-Boolean argument. (gs_dps1.ps) + - sethalftone followed by currenthalftone returned an invalid value. +(zht2.c) + - Empty strings produced spurious garbage collector error messages. +(gsstruct.h, scommon.h, igc.c, igcstr.c, iname.c) + - The garbage collector didn't trace Separation color spaces properly. +(gscsepr.c) + +Changes defineresource so that it does not, by default, make instances +read-only. (gs_res.ps) + +Adds .{local,global}{array,dict,packedarray,string} operators for creating +objects in a specific VM space. (zsysvm.c, gs_dps1.ps) + +Adds definitions of setpage and setpageparams to statusdict. (gs_setpd.ps, +gs_statd.ps) + +Alleviates some performance problems in the garbage collector. (igc.c) + +</pre><h3><a name="V3.23_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - PDF files that used filters with parameters caused a typecheck +error because the arguments to 'filter' were reversed. (pdf_base.ps) + - The (undocumented) PDF 1.1 ability to specify link and annotation +destinations indirectly was not supported. (pdf_main.ps) + - The (undocumented) PDF ability to specify a null page in a link +destination was not supported. (pdf_main.ps) + - The PDF encodings weren't loaded properly in a system with both +PS Level 2 and PDF features. (gs_res.ps, gs_init.ps) + - If the next line after a stream keyword was blank, the line +wasn't skipped, which matters for binary data. (pdf_base.ps) + - A Q operator with no matching q operator caused an error. +(pdf_draw.ps) + - The text position wasn't preserved across a fill or stroke +operator. (gs_pdf.ps, pdf_draw.ps) + - Embedded Type 3 fonts didn't work. (pdf_base.ps, pdf_draw.ps, +pdf_main.ps) + - Masked images with no Decode value had their polarity inverted. +(pdf_draw.ps) + - Embedded Type 1 fonts referenced from within a stream didn't +work. (pdf_font.ps) + +Changes the PDF code so that it automatically recognizes PDF files as such. +(pdf_main.ps) + +Splits out the PixelDifference filters as a separate "feature". (gs.mak) + +</pre><h3><a name="V3.23_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - Closing the primary input stream caused an invalid memory access. +(stream.c) + - Increasing the size of a buffer within a save resulted in a +dangling reference after the restore. (files.h, sfilter.h, zfile.c, +zfilter.c) + - The garbage collector didn't properly trace streams that referenced +strings directly. (stream.h, stream.c, ziodev.c) + +</pre><h3><a name="V3.23_Library"></a>Library</h3><pre> + +Fixes bugs: + - An extraneous \ upset some compilers. (gdevabuf.c) + - Uncolored Patterns that completely filled their bounding box +caused an invalid memory access. (gspcolor.c) + - If a color image required clipping, black or white pixels might +be rendered with incorrect (random) colors. (gxcpath.c) + - Reference counts for color spaces were sometimes set too high, so +they would only be freed by restore or garbage collection. (gscolor.c) + - The character cache could get confused if the Encoding for the +character wasn't a name. (gschar.c) + - Character outlines were always rendered with flatness = 0, +causing very bad performance for large characters. (gzstate.h, gschar.c, +gsimage.c, gxfill.c, gxstroke.c) + - If a device (presumably uninitialized) had a +color_info.num_components of zero, an invalid memory access could occur. +(gsdparam.c) + - Intersecting clipping paths that are not both rectangular didn't +properly set the outer box of new clipping path, leading to unnecessary +computation. (gxcpath.h, gxacpath.c, gxcpath.c) + - A call passed false instead of NULL. (gschar.c) + - On machines where sizeof returns a long, genarch.c failed. +(genarch.c) + - xfonts were consulted, incorrectly, even for stroked characters. +(gxccman.c) + - gstate/currentgstate/setgstate didn't work properly. (gsline.c, +gsstate.c) + - On CMYK devices needing halftoning, colors with C = M = Y were +always converted to gray shades. (gxcmap.c) + - Isolated horizontal lines, or the horizontal edges of rectangles, +could get drawn with one or both end pixels missing. (gxfill.c) + +Changes the character cache back so it oversamples characters at small +sizes. (gschar.c) + +Changes all occurrences of (void)x to discard(x), and defines discard in +stdpre.h as a cast to void, to make it possible to pacify compilers that +don't accept this construct for some kinds of x. (gpcheck.h, stdpre.h, +store.h, gdevmswn.c, gp_mswin.c, gscoord.c, gxclread.c, igc.c, sfile.c, +sfileno.c, zcie.c, zht2.c, ziodev.c, zmisc1.c) + +Increases the size of the halftone cache on large-memory machines from 35K +to 100K. This substantially improves halftoning performance at higher +resolutions. (gxht.c) + +</pre> + +<h2><a name="Version3.22"></a>Version 3.22 (beta) (11/30/94)</h2> + +<p> +This is primarily a bug fix release. It also includes limited anti-aliased +graphics capability. This release was not distributed to the public. + +<h3><a name="V3.22_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The definition of ghost_h was misplaced, so changes in it or its +antecedents didn't force recompilation of its dependents. (gs.mak) + +Actually implements the -Z+ switch, for forcing small stack blocks. +(interp.c) + +Makes the -dSAFER switch disable the %pipe syntax for file names, even for +reading. (gs_init.ps) + +</pre><h3><a name="V3.22_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The dfax drivers incorrectly set EncodedByteAlign to false. +(gdevdfax.c) + - softwareValue and dateTimeValue were declared as byte rather than +char. (gdevtfax.c) + +</pre><h3><a name="V3.22_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS DEC C compilers declare delete in unixio.h, and doesn't +declare unlink anywhere. (stdio_.h) + - The VMS compilers declare malloc and free in stdlib.h, which +wasn't being included in malloc_.h. (malloc_.h) + - The SCO Unix C compiler needs both <sys/time.h> and <time.h>. +(time_.h) + - The VMS compilers declare abs in stdlib.h, which wasn't being +included anywhere. (gshtscr.c) + - The definition for A4 paper in VMS-AXP.MAK was incorrect. +(vms-axp.mak) + +Renames VMS-AXP.MAK as VMS-DECC.MAK, with some changes that make it +appropriate for DEC C on both VAX and AXP platforms. (vms-axp.mak => +vms.decc.mak) + +</pre><h3><a name="V3.22_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - gs_kanji.ps got an invalidaccess error. (gs_kanji.ps) + +</pre><h3><a name="V3.22_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - An off-by-1 test in the roll operator caused it to smash the +stack if the operand stack had overflowed into additional blocks. +(zstack.c) + - The default CIE color rendering dictionary didn't assume a +reasonable intermediate (XYZ) space. (gs_lev2.ps) + - CIE color mapping tables weren't traced properly by the garbage +collector. (gscie.h, gscie.c, zcie.c) + - If the very last character of a file was a ^M, the scanner +(incorrectly) signaled a syntaxerror. (iscan.c) + - If an operator could return both a typecheck and a +stackunderflow, it always returned a stackunderflow, which doesn't match +the behavior of Adobe interpreters. (opcheck.h, idparam.c, interp.c, +iutil.c, z*.c) + - astore, dictstack, and execstack could return a spurious +invalidaccess error (or fail to detect an invalid access) if the operand +stack had overflowed into additional blocks. (istack.c) + - The garbage collector didn't relocate pointers to names! (Bug +introduced in 3.20.) (iname.h) + - If the dictionary stack overflowed into additional blocks, the +cached value pointer for a name could get set incorrectly, and also not get +relocated by the garbage collector. (idict.c) + - If the dictionary stack overflowed into additional blocks, the +post-GC fixup of cached value pointers in names could cause an addressing +error. (igc.c) + - With the -Z? switch set, the garbage collector could incorrectly +report that objects or strings weren't in any chunk. (igc.c) + - << /a 1 /a 2 >> /a get gave the value 2 rather than 1. +(gs_init.ps) + - Numbers in binary object sequences and encoded number arrays +didn't work properly on machines where sizeof(short) != 2 or sizeof(long) +!= 4. (ibnum.c) + - The put operator for dictionaries allowed null as a key. +(idict.h, idict.c) + - >> didn't give an error if there were an odd number of values on +the stack above the next mark. (gs_init.ps) + - Operations that explicitly freed ref objects (setting a CIE +colorspace, resizing a dictionary, popping a block off a stack) could +corrupt storage. (ialloc.c) + - The -Z@ switch, which fills freed blocks with a recognizable bit +pattern, could incorrectly overwrite freed blocks in previous save levels, +causing invalid memory accesses. (ialloc.c) + - Since streams freed by a restore weren't marked as free, they +could confuse the garbage collector and lead to invalid memory accesses. +(zfile.c) + - If one of the built-in dictionaries overflowed during +initialization, no error was reported -- entries were simply discarded. +(iinit.c) + - If the level2.dev feature was combined with certain other +features, the current languagelevel was 2 when some gs_*.ps files were +loaded, causing them to load incorrectly. (gs_btokn.ps, gs_setpd.ps) + - If readline read a line that ended with only a CR (no LF) +followed by an end-of-file, it incorrectly closed the stream. (zfileio.c) + +Adds a .cond operator, similar to the Lisp multi-arm conditional. +(zcontrol.c) + +Adds a .makeglobaloperator operator, allowing the definition of operator +procedures in local VM that turn into global operators, provided the save +level is zero. (iref.h, opdef.h, iinit.c, interp.c, zmisc.c) + +Note: the fix for returning typecheck vs. stackunderflow requires that all +operators (or other code) that uses return_error(e_typecheck) to indicate +an incorrect object type on the operand stack must change this to +return_op_typecheck(op), where op points to the operand. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE. + +Implements string array and name array parameters for parameter lists. +(gsparam.h, iparam.c) + +Brings filterdict inside the INITIAL_DICTIONARIES conditional. (iinit.c) + +Adds a .currentscreenlevels operator that returns the number of +distinguishable halftone levels. (zht.c) + +</pre><h3><a name="V3.22_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The 2-D case of CCITTFaxDecode could get confused by an input +data buffer boundary that fell immediately after a horizontal code. +(scfd.c) + - The LZW decoder didn't detect invalid data unless DEBUG was +selected at build time. (slzwd.c) + +</pre><h3><a name="V3.22_Library"></a>Library</h3><pre> + +Fixes bugs: + - The clipping region accumulator could refer to a clipping +rectangle even after it had been freed. (No effect on execution unless the +-Z@ switch was selected.) (gxacpath.c) + - setbbox expanded the bounding box, but didn't place a limit on +further path elements, if the current path wasn't empty. (gsdps1.c) + - setbbox didn't make sufficient allowance for rounding. +(gsdps1.c) + +Implements the ProcessColorModel parameter (read-only) for all devices. +(gsdparam.c) + +Adds a gs_currentscreenlevels procedure that returns the number of +distinguishable halftone levels. (gsht.c) + +</pre> + +<h2><a name="Version3.21"></a>Version 3.21 (beta) (11/17/94)</h2> + +<p> +This is primarily a bug fix release. It also includes a substantial +improvement in the Type 1 font hinting algorithms. This release was not +distributed to the public. + +<h3><a name="V3.21_Documentation"></a>Documentation</h3><pre> +Fixes bugs: + - The `man' page referred to gnu.ghostscript.bug rather than +comp.lang.postscript. (gs.1) + +Documents the special entries in operator definition tables that allow +switching dictionaries. (opdef.h) + +</pre><h3><a name="V3.21_Procedures"></a>Procedures</h3><pre> + +Moves the definition of JSRCDIR to the individual platform makefiles, to +make it easier to change on platforms that don't have file links. (*.mak) + +</pre><h3><a name="V3.21_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ansi2knr didn't recognize that a line ending with } couldn't be a +function definition. (ansi2knr.c) + - ps2epsi always returned an empty bounding box. (ps2epsi, +ps2epsi.bat) + +</pre><h3><a name="V3.21_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The bitrgb device had an invalid depth of 3. (gdevbit.c) + +Replaces the color mapping code in the X driver with a much faster +algorithm, courtesy of Tim Theisen. (gdevx.h, gdevx.c, gdevxini.c) + +</pre><h3><a name="V3.21_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - Two variable names were misspelled. (gdevpm.c, gp_mswin.c) + - It wasn't possible to compile a non-DLL configuration under OS/2. +(os2.mak) + - Compilation under Microsoft C/C++ 8.0 gave errors. (gp_mswin.h, +gp_mswin.c, gshtscr.c) + +Adds some more devices to the OS/2 makefile. (os2.mak) + +</pre><h3><a name="V3.21_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - wrfont.ps, and hence bdftops, didn't write out the FontType or +PaintType. (Bug introduced since 2.6.1) (wrfont.ps) + - wrfont.ps omitted a 'begin' and 'end', causing -! or -| to be +undefined when the font was loaded. (Bug introduced since 2.6.1) +(wrfont.ps) + +</pre><h3><a name="V3.21_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - make_tasv_old called make_tasv_new with extra arguments. +(store.h) + - currentcacheparams only returned 2 values instead of 3. +(zfont.c) + - ustroke popped one element too many off the stack if a matrix was +supplied. (zupath.c) + - inu[eo]fill popped one element too many off the stack. +(zupath.c) + - The color rendering dictionary was initialized to null rather +than a valid dictionary. (gs_lev2.ps) + - An invalid IODevice resource named "9" got created. (gs_res.ps) + - bytesavailable often caused an error rather than returning -1. +(zfileio.c, stream.c) + - The insideness testing operators always returned true if the +aperture was defined by a user path rather than a point. (zupath.c) + - If INITIAL_DICTIONARIES was defined in the makefile, the +definition of the initial_dictionaries array was missing a comma. +(iinit.c) + - Even if userdict appeared in INITIAL_DICTIONARIES, gs_init.ps set +its maxlength to 200. (gs_init.ps) + - Setting a CIE color space left a garbage value on the stack. +(zcie.c) + - If a file or filter was opened and then closed, opening a file +subsequently within a 'save' could lead to a memory access error in the +garbage collector. (zfile.c) + - Setting an Indexed or Separation color space could cause a crash +either in the garbage collector or when printing out the e-stack. +(icsmap.h, zcsindex.c, zcssepr.c) + - Invoking a filter with an invalid data source or sink could cause +a memory access error (bug introduced in 3.20). (zfilter.c) + - Invoking stringwidth on a font whose BuildChar procedure did a +save could cause a memory manager error or infinite loop, because +stringwidth attempted to use an inapplicable shortcut. (gschar.c) + - The bounding box for rendering stroked Type 1 characters didn't +take square caps and miter joins into account. (gs_type1.ps) + - Invoking filter with DCTDecode or DCTEncode could cause an +addressing error if no dictionary argument was supplied. (zfdctd.c, +zfdcte.c) + - The Generic resource, the Font resource, and half a dozen +resources with no predefined instances all shared the same Instances +dictionary. (gs_res.ps) + - The temporary null device allocated for stringwidth was never +freed. (gschar.h, gschar.c, zchar.c) + - Internal operators, and structures that might be freed on stack +unwinding, could "escape" from the e-stack. (zcontrol.c, ztype.c) + - makefont and scalefont didn't properly handle a font whose +Encoding had been changed. (bfont.h, zfont.c, zfont2.c) + - Type 1 fonts with PaintType = 2 incorrectly checked for an xfont. +(gxfont.h, gschar.c, gsfont.c, zchar1.c, zfont1.c, zfont2.c) + - Specifying a string argument with -d...=(...) or -d...=<...> +would cause an invalidaccess error. (gs.c) + - The environment for encapsulated jobs didn't rebind quit to stop +in userdict. (gs_lev2.ps) + - restore didn't deal properly with open files on the e-stack. +(zvmem.c) + - Even with the '-' switch, Ghostscript would try to read ahead in +the input stream rather than processing input character-by-character. +(ziodev.c) + - If an error occurred with a unreadable dictionary on any stack, +the standard error printer would get into an error loop and exit the +interpreter. (gs_init.ps) + - The for_roots macro in igc.c used ap rather than mem as its +second formal parameter. (This typo had no effect on the executable +program.) (igc.c) + - If saving the stacks for an error caused a GC request, a value +could get stored into an improper variable on the C stack, causing havoc. +(interp.c) + - setdash checked to make sure that the distance array had read +access; Adobe interpreters don't check this. (zgstate.c) + - The roots for gs_run_string and gs_interpret weren't registered +properly, which could cause a dangling reference in the case of a restore +whose save had been done earlier. (gsmain.c, interp.c) + +Adds an OpenOutputFile Boolean device parameter for printer devices; if +true, the device opens the OutputFile at the time the device is opened, +instead of waiting for the first showpage. This helps with synchronization +when the OutputFile is a pipe. (gdevprn.h, gdevprn.c) + +Changes the BEGIN/END_OP_DEFS macros to require an explicit { and } at each +use. (gsmain.c, interp.c, z*.c) + +Arranges things so that the operators that the interpreter handles +specially are assigned the first N operator indices [internal change only]. +(interp.h, iinit.c, interp.c) + +Changes the operators max and min to .max and .min, to avoid conflicts with +PostScript programs that use these names for variables and also use 'bind'. +THIS IS A NON-BACKWARD-COMPATIBLE CHANGE from programs that depend on +'bind' binding in these operators; however, we have also defined procedures +max and min that just call the operators, which should take care of any +ordinary code. (*.ps, zrelbit.c) + +</pre><h3><a name="V3.21_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The pfb_state pointer in the eexecDecode filter state wasn't +marked as traceable for the garbage collector. (sfilter.h) + - The eexec decoding filter could access invalid memory or return +garbage under some conditions. (Bug introduced in 3.12.) (zmisc1.c) + - The eexec decoding filter would incorrectly ask for more input if +the output buffer was full. (seexec.c) + +</pre><h3><a name="V3.21_Library"></a>Library</h3><pre> + +Fixes bugs: + - Some compilers reserve the word 'try'. (gshtscr.c) + - Some compilers don't like line continuations (\) within a +preprocessor macro formal parameter list. (gdevprn.h, gxdevice.h) + - Memory devices created with an inverted palette (0=white, +1=black) interchanged white and black in fill operations. (gdevmem1.c) + - The 'bits' variable in mem_mono_copy_mono was unused on +little-endian machines. (gdevmem1.c) + - Some garbage collector procedures were declared 'private' +inconsistently. (gscie.c) + - The new anti-aliased text capability accidentally caused all +characters to be oversampled. (gschar.c) + - Type 1 fonts with PaintType = 2 and StrokeWidth = 0 came out with +many pixels missing because of oversampling. (gschar.c) + - Type 1 font stem hints were not being processed correctly. +(gstype1.h, gxtype1.h, gstype1.c, gxhint2.c, gxhint3.c, gxpath.c) + - The tracing message for 9/7 composite fonts incorrectly +identified them as 1/7 fonts. (gschar0.c) + - If a 1/7 or 9/7 composite font was a child of a non-modal font, +the font number of the child font was computed incorrectly. (gschar0.c) + +Splits up the various memory devices into one file per depth [internal +change only]. (gdevm*.c) + +</pre> + +<h2><a name="Version3.20"></a>Version 3.20 (beta) (10/31/94)</h2> + +<p> +This version contains some support for a PDF interpreter; however, the PDF +code itself is not ready for release yet. It also includes anti-aliased text +capability. This release was not distributed to the public. + +<h3><a name="V3.20_Documentation"></a>Documentation</h3><pre> +Notes that the FAQ has moved to smallo.ruhr.de:pub/ghost/gs.faq. (readme) + +Documents various implementation limits. (language.doc) + +</pre><h3><a name="V3.20_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - bcp.dev wasn't included in the list of dependencies for +level1.dev. (gs.mak) + +Changes the printout of version numbers so that it is always A.BC, +rather than A.B if C is zero. (gs.c, gs_init.ps) + +</pre><h3><a name="V3.20_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - font2c didn't correctly handle Metrics or Metrics2 dictionaries +whose entries were arrays rather than scalars. (font2c.ps, ccfont.h, +iccfont.c) + - font2c didn't handle CDevProc. (font2c.ps, ccfont.h, iccfont.c) + - genconf could get a stack overflow on small machines. +(genconf.c) + +Changes mergeini.ps so it can take arguments on the command line specifying +the input and output files. (mergeini.ps) + +Adds a gsdj500 shell script to parallel gsdj500.bat. (gsdj500) + +</pre><h3><a name="V3.20_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The X driver didn't mask dynamically assigned colors properly, so +it could request the same color over and over again. (gdevx.c) + +Adds two alternate X Windows drivers, for helping debug drivers with other +color models: + - x11alpha, an RGB device with 4-bit alpha capability (for + copy_alpha only); + - x11cmyk, a 1-bit-per-component CMYK device. +(devs.mak, gdevxalt.c) + +Changes the left margin of the lj4dith driver to 0.26". (gdevcdj.c) + +</pre><h3><a name="V3.20_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - If <sys/time.h> didn't exist, time_.h didn't always include +<time.h>. (time_.h) + - The OS/2 platform wouldn't compile. (gdevpm.c) + - The auxiliary VMS command files sometimes got blank lines +inserted when going through EOL conversion. (vms.mak; delete gs_.com) + - The VMS makefiles didn't include the Level 1 operators in +level1.dev. (vms.mak) + - The VMS gcc makefile didn't handle undefined DEVICE_DEVSn +variables properly. (vms*.mak) + - The VMS makefiles didn't recognize DEVICE_DEVS{1,2,5,7}. +(vms.mak) + +At the request of a Unix expert, changes all the Unix shell scripts to use +exec gs ... "$@" rather than gs ... $*. (gsnd, gsbj, gsdj, gslj, gslp) + +Modifies the JPEG library so that it uses 4K less of the automatic data +segment in 16-bit environments. (bcwin.mak, jpeg.mak, sjpeg.c, sjpegerr.c) + +Adds the bmp drivers back into the 16-bit MS Windows executable, since they +will fit now. (bcwin.mak) + +</pre><h3><a name="V3.20_Fonts"></a>Fonts</h3><pre> + +Makes the font substitution algorithm recognize the word Roman as calling +for a serif font. (gs_fonts.ps) + +</pre><h3><a name="V3.20_Interpreters"></a>Interpreters</h3><pre> + +Fixes bugs: + - The fix in 3.13 for the inexact function values at 0 didn't work. +(zcontrol.c) + - Level 1 configurations referenced an undefined procedure +gs_currenthalftone. (gsht.c, gsht1.c) + - Specifying any device properties (including -r and -g) on the +command line caused an error. (gs_init.ps) + - The forward declaration of cfont_name_array_create was +incorrect. (iccfont.c) + - save and restore could get called before the graphics state stack +had been initialized properly. (gs_mex_e.ps) + - Some encodings weren't loaded properly. (gs.mak, gs_mex_e.ps, +gs_mro_e.ps, gs_pdf_e.ps, gs_wan_e.ps) + - Zero-height images were allowed, but zero-width images +weren't. (zpaint.c) + - Neither zero-width nor zero-height images popped their +arguments from the operand stack. (zpaint.c) + - lib_file_fopen overwrote its file name argument, causing havoc +with @-files. (gxiodev.h, gdevpipe.c, gsiodev.c, zfile.c) + - The garbage collector got confused if there were any arrays or +dictionaries with 8K or more elements. (igcref.c) + - >> could leave the stacks in a questionable state if it failed. +(gs_init.ps) + - The Category resource category didn't implement undefineresource. +(gs_res.ps) + - When the token operator read the last token from a string, it +left an unchanged string on the stack instead of an empty string. +(stream.c) + - noaccess didn't give an invalidaccess error when applied to the +permanent dictionaries. (dstack.h, idict.c, ztype.c) + - Overflowing the exec stack wasn't handled properly. (istack.h, +istack.c) + - The garbage collector cleared the cached value pointers in names, +causing interpretation to slow down substantially. (idict.c, igc.c, +iname.c) + - 0 dict created a dictionary with a maxlength of 1. (idict.c) + +Changes the default size of the execution stack from 150 to 250, to match +the Adobe "typical" value. (interp.c) + +Moves the operator definitions out of the automatic data segment. +(opdef.h, iinit.c, z*.c) + +Adds operators that allow creation of objects in system space: +.systemvmstring, .systemvmarray, .systemvmpackedarray, .systemvmdict, +.systemvmcheck. (zsysvm.c) + +Renames gcdefs.h as gscdefs.h. + +Allocates names in system space rather than global space. (gsmain.c) + +Changes the memory manager so that it allows programs to create objects in +system space. (iref.h, iutil.h, ivmspace.h, ...) + +Changes the implementation of filters so they appear in their own +dictionary named filterdict. (gs_init.ps, z*.c) + +Changes the implementation of color spaces so each one has its own +setcolorspace procedure, defined in a new dictionary named +colorspacedict. (gs_lev2.ps, z*.c) + +Adds a new debugging switch, $, that always initializes all fields in a +ref, in order to keep Purify happy. (store.h) + +</pre><h3><a name="V3.20_Library"></a>Library</h3><pre> + +Fixes bugs: + - The page size for image devices was always set to (0, 0). +(gsdevice.c) + - The PageSize computation in gx_default_put_params could overflow +on 16-bit machines. (gsdparam.c) + - An omitted 'static' on an initialized array caused a compiler +error. (gxccman.c) + - If interpolated image rendering was requested but not +actually carried out, gs_image_cleanup could attempt to free a random +pointer. (gsimage.c) + - Some compilers only retain 23 characters of procedure names, but +some procedure names weren't unique in the first 23 characters. (gscie.c, +gscolor.c, gscolor1.c, gxcmap.c) + - The garbage collector didn't trace device colors properly. +(gxdcolor.h, gzht.h, gsimage1.c, gspcolor.c, gxcht.c, gxcmap.c, gxdraw.c, +gxht.c) + - For CMYK devices, the transfer functions were being applied to +the CMYK values rather than the complemented RGBW values. (gxcmap.c) + - Memory devices used their own color mapping procedures rather +than those of the target; this could cause incorrect colors for patterns on +devices with more than 1 bit per pixel. (gxdevmem.h, gdevmem1.c, gdevpm.c, +gdevprn.c, gdevwdib.c, gschar.c, gsdevice.c, gxccache.c, gxccman.c, +gxclip2.c, gxclread.c, gxpcmap.c) + - The garbage collector didn't trace image enumerators properly in +the image_render_simple case. (gsimage.c) + - stroke produced different-looking output for thin (zero-width) +lines depending on whether or not clipping was invoked. (gxstroke.c) + - If a clipping list changed from multiple rectangles to a single +rectangle, it could fail to clip properly thereafter. (gxacpath.c) + +Adds two new device procedures: alpha_bits and copy_alpha. This change is +backward-compatible for all existing devices. (gdevmem.h, gxdevice.h, +gsdevice.c, gxclip2.c, gxclist.c, gxcpath.c) + +Changes the implementation of color halftones so that, when appropriate, it +generates a single cell and uses the device tile_rectangle procedure. +(gzht.h, gsht.c, gxcht.c, gxclist.c, gxclread.c) + +Adds partial support for the Orientation page device parameter. +(gsdevice.c) + +Adds support for anti-aliased characters using 2 or 4 bits of alpha. +(gxfcache.h, gschar.c, gxccache.c) + +</pre> + +<hr> + +<h2><a name="Version3.13"></a>Version 3.13(private) (10/3/94)</h2> + +<p> +This release was created for a customer; it was not distributed to the +public. + +<h3><a name="V3.13_Documentation"></a>Documentation</h3><pre> +Notes in make.doc that the file names in the IJG archive distributed with +Ghostscript do not include the gsA.BC/ prefix. (make.doc) + +Adds a cross-reference to make.doc to the Watcom makefiles. (watc.mak, +watcwin.mak, wccommon.mak) + +</pre><h3><a name="V3.13_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The makefile rule for gconfig.h et al had a couple of blank lines +in the middle of it. (gs.mak) + +</pre><h3><a name="V3.13_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - wrfont.ps didn't add a lenIV entry to the Private dictionary if +it was needed. (wrfont.ps) + +Adds a packfile.ps utility that allows compressing multiple files into a +single file for environments with very little permanent storage. +(gs_pfile.ps, packfile.ps, wrfont.ps) + +</pre><h3><a name="V3.13_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The {tiff,fax}{g32d,g4} devices could produce incorrect output. +See under Streams below. + - The dfax drivers referred to the obsolete structure member +EncodedEOLAlign. (gdevdfax.c) + +Changes the default bit order for TIFF/F output to little-endian, which is +apparently what the majority of TIFF decoders like best. The bit order for +the fax drivers is still big-endian. (gdevdfax.c, gdevtfax.c) + +</pre><h3><a name="V3.13_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS build script used -a rather than -w for creating +gconfig_.h. (vms.mak) + - The VMS build script didn't create gconfigv.h. (vms.mak) + - The VMS Fontmap had incorrect entries for the Bitstream Charter +fonts. (fontmap.vms) + - The VMS MODULES.LIS file assumed the JPEG library files were in +directory JPEG rather than JPEG-5. (modules.lis) + +</pre><h3><a name="V3.13_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Using DISKFONTS resulted in an invalidaccess error. +(gs_fonts.ps) + +</pre><h3><a name="V3.13_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The standard transfer function considered gray values above +roughly 0.994 equivalent to white; 0.999 is a better value. (gs_init.ps) + - The transfer, black generation, and undercolor removal functions +gave slightly inexact results for an input value of 0. (zcolor.c, +zcontrol.c) + - setpagedevice gave an /undefined error if it did not recognize a +key, rather than ignoring the key. (zdevice.c, gs_init.ps, gs_lev2.ps, +gs_setpd.ps) + +Changes .putdeviceparams to take an additional argument, a Boolean that +says whether or not unrecognized keys should be reported as /undefined +errors. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, no user-written +code should be calling .putdeviceparams. (zdevice.c) + +</pre><h3><a name="V3.13_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The Group 3 2-D and Group 4 fax encoders could emit incorrect +output. (scfe.c) + - The algorithm for constructing optimal Huffman codes could +produce invalid codes in some rare cases. (shcgen.c) + +</pre><h3><a name="V3.13_Library"></a>Library</h3><pre> + +Fixes bugs: + - Rectangles closed with lineto rather than closepath weren't +recognized as rectangles. (This only affected performance, not +functionality.) (gxpath2.c) + - The xfont lookup_font procedure could get called with a matrix +whose translation components had never been initialized. (gxccman.c) + - Some compilers don't allow \ in the formal argument list of a +preprocessor macro. (gdevprn.h, gxdevice.h) + +</pre> + +<h2><a name="Version3.12"></a>Version 3.12 (9/29/94)</h2> + +<p> +This is another bug fix release, the first Level 2 release that we believe +is reasonably reliable. + +<h3><a name="V3.12_Documentation"></a>Documentation</h3><pre> + +Adds some text warning about making copies of the makefile. (make.doc) + +</pre><h3><a name="V3.12_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - There were a number of unnecessary dependencies on $(MAKEFILE) in +gs.mak, left over from before the existence of gconfigv.h. (gs.mak) + - JPEGSRC was defined in gs.mak rather than in jpeg.mak. (gs.mak, +jpeg.mak) + +Changes the version numbering scheme back to A.BC, since people seem to be +adapting to the change, and this allows using the version number directly +as a MS-DOS directory name. (gconfig.c, gdevtfax.c, gs.c, gs_init.ps) + +Updates the JPEG library to version 5 (official release) of the IJG code. +(jpeg/*, jpeg.mak) + +</pre><h3><a name="V3.12_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The TIFF/F driver put out invalid PageNumber and Software +entries. (gdevtifs.h, gdevtfax.c) + - The TIFF/F and fax Group 3 2-D drivers used K=3 and K=5 instead +of K=2 and K=4. (gdevtfax.c) + - The TIFF/F and fax Group 3 2-D drivers emitted improperly aligned +output. (See under Streams below.) + - The MS Windows driver didn't resize the window properly in +response to changing the device parameters. (gdevmswn.c) + +Because of complementary bugs in various C compilers, changes all the +non-printer devices to use a different set of macros. (gdevmem.h, +gdevpcfb.h, gdevprn.h, gdevsvga.h, gxdevice.h, gdev{3b1, bgi, herc, l256, +pe, pm, sun, vglb, wddb, wdib, wprn, x}.c, gsdevice.c, gxacpath.c, +gxclip2.c, gxcpath.c, gxpcmap.c, zupath.c) + +Changes the X11 driver to ignore the "margins" specified by Ghostview. +This is apparently necessary for Ghostview to handle landscape display +properly. (gdevxini.c) + +Adds a WindowID parameter to the X11 device, to allow setting the window +for the output. (gdevx.h, gdevx.c, gdevxini.c) + +</pre><h3><a name="V3.12_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The definition of BEGINFILES in os2.mak occurred too late in the +file to have the desired effect. (os2.mak) + +</pre><h3><a name="V3.12_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Updating the list of allocated file objects at a restore didn't +clear the prev pointer of the new head, which could cause the garbage +collector to encounter an invalid pointer. (Bug introduced by .forgetsave +in 3.0.3.) (zfile.c) + +</pre><h3><a name="V3.12_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The CCITTFaxEncode filter with K > 0 and EncodedByteAlign = true +incorrectly aligned the 1-D/2-D bit as the last bit of a byte, rather than +the first bit. (scfx.h, scfe.c) + - eexec could loop indefinitely under certain conditions. +(seexec.c) + - eexec's algorithm for recognizing text vs. binary encoding didn't +work properly in some cases that don't conform to the Adobe Type 1 Font +Format documentation. (seexec.c) + - Closing a stream didn't clear out the strm and state pointers, +which could cause invalid accesses by the garbage collector. (stream.c) + +</pre><h3><a name="V3.12_Library"></a>Library</h3><pre> + +Fixes bugs: + - fill_loop could loop indefinitely under certain conditions. +(Introduced by a bug fix in 3.1.) (gxfill.c) + - fill/eofill sometimes failed to paint parts of a region. +(Introduced by a bug fix in 3.1.1.) (gxfill.c) + - Non-convex clipping paths sometimes omitted thin horizontal +slivers of the region. (Probably introduced by the "thin graphics" fix in +3.1.) (gxacpath.c) + +</pre> + +<h2><a name="Version3.1.1"></a>Version 3.1.1 (9/25/94)</h2> + +<p> +This is primarily a bug fix release. It was originally intended for some +commercial licensees, but beta testers found too many problems with it. + +<h3><a name="V3.1.1_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - NEWS didn't indicate that there was a non-backward-compatible +change in the gx_device structure -- specifically, that l_margin, +b_margin, r_margin, and t_margin were replaced by macros named +dev_l_margin(dev), etc. (news) + +Describes the two-phase commit requirement for device put_params +procedures. (drivers.doc, gsparam.h) + +</pre><h3><a name="V3.1.1_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The new S macro in genarch.c didn't work on compilers that do +macro substitution within string constants (which is forbidden by the ANSI +standard). (genarch.c) + +</pre><h3><a name="V3.1.1_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Driver put_params implementations didn't observe a "two-phase +commit" discipline; this could lead to the current device in the graphics +state being closed, and other inconsistencies. (gsparam.h, gxdevice.h, +iparam.h, gdevbit.c, gdevcdj.c, gdevmswn.c, gdevpcfb.c, gdevpm.c, +gdevprn.c, gdevx.c, gsdevice.c, gsdparam.c, zdevice.c, ziodev2.c, zmisc2.c) +THIS IS A NON-BACKWARD-COMPATIBLE CHANGE; however, it only affects +put_params implementations, of which there are few. + +NOTE THE NON-BACKWARD-COMPATIBLE CHANGE IN THE gx_device STRUCTURE UNDER +'Documentation' ABOVE. (gdevescp.c, gdevsj48.c, gdevsppr.c, gdevxini.c) + +</pre><h3><a name="V3.1.1_Platforms"></a>Platforms</h3><pre> + +Ensures that the Unix makefiles all include all the variants of TIFF/F and +fax drivers. (ansihead.mak, cc-head.mak, gcc-head.mak) + +</pre><h3><a name="V3.1.1_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Most of the contents of statusdict were missing when +running a Level 2 system in Level 1 mode. (zmisc2.c) + +</pre> + +<h2><a name="Version3.1"></a>Version 3.1 (9/20/94)</h2> + +<p> +This release finally includes a usable subset implementation of +setpagedevice, including all the machinery needed to address the +long-standing "margins" problems. + +<h3><a name="V3.1_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - t_oparray objects weren't identified as behaving differently +depending on whether they were marked executable. (iref.h) + - drivers.doc had gx_color_value instead of gx_color_index in +the description of color mapping. (drivers.doc) + +Updates drivers.doc to reflect the change from static_procs to +std_procs in the gx_device structure. (drivers.doc) + +</pre><h3><a name="V3.1_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The commands for building the JPEG library used rm instead +of rm -f. (jpeg.mak) + +</pre><h3><a name="V3.1_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The X Windows driver hadn't been updated to reflect some +name changes in members of the gx_color_info structure. (gdevx.h, +gdevx.c, gdevxini.c) + +Changes all non-printer drivers so that they use the new std_device_body +macros. (gdev*.c) + +Adds a print_page_copies procedure for printer drivers, allowing the +driver to receive num_copies. (gdevprn.h, gdevprn.c) + +</pre><h3><a name="V3.1_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - ref_memory_enum/reloc_ptrs were declared inconsistently. +(ialloc.c) + - If the operand of restore was invalid, the restore did +nothing, instead of giving a typecheck. (zvmem.c) + - In Level 2, the margins and setmargins compatibility +operators were defined incorrectly in terms of current/setpagedevice. +(gs_lev2.ps) + +Enables .makeoperator to make local operators as well as global ones. +(opdef.h, iinit.c, zmisc.c, zpacked.c) + +Finishes implementing the TransferFunction entry in halftone +dictionaries. (zht1.c, zht2.c) + +Adds .set/currentfilladjust operators for access to the fill +adjustment parameter in the graphics state. (zgstate.h) + +Removes the deviceinitialmatrix operator. (zdevice.c) + +Changes defaultmatrix from a procedure to an operator. (zmatrix.c) + +Sets the fill adjustment to 0.5 for high-resolution devices, effectively +implementing Adobe's any-part-of-pixel filling rule. (gs_init.ps) + +Implements a small but useful subset of setpagedevice. (gs_lev2.ps) + +</pre><h3><a name="V3.1_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The eexec decoder incorrectly concluded that its data was +in hex form if the first data character was whitespace. (seexec.c) + +</pre><h3><a name="V3.1_Library"></a>Library</h3><pre> + +Fixes bugs: + - Thin graphics (e.g., lines or rectangles) with small angles +relative to the X axis rendered with many points missing. (gxdraw.c, +gxfill.c) + - The character cache rejected oversampled characters if the +scaled-up size was too large, even if the scaled-down size wasn't. +(gxchar.h, gschar.c, gxccache.c, gxccman.c) + - A call on sqrt with an integer argument didn't promote it +explicitly to double, which is required for non-ANSI compilers. +(gshtscr.c) + +Finishes implementing the TransferFunction entry in halftone +dictionaries. (gsht1.c) + +Modifies the character oversampler so it can produce gray scale +output instead of a 1-bit mask. We don't actually make use of this +ability yet. (gxccman.c) + +Adds gs_set/currentfilladjust for access to the fill adjustment +parameter in the graphics state. (gsstate.h, gsstate.c) + +Changes the names of the last few routines beginning with gz_ to +begin with gx_ instead. (gzdraw.h => gxdraw.h, gsimage*.c, gxdraw.c, +gxfill.c, gxstroke.c) + +Properly implements the PageSize, Margins, .HWMargins, and ImagingBBox +device parameters for all devices. (gscoord.c, gsdparam.c, gspath2.c) +Implements the NumCopies device parameter for printer devices. +(gdevprn.c) + +Implements std_device_body macros to help insulate statically initialized +non-printer devices from future changes in the gx_device structure. +(gxdevice.h, ... many .c files ...) + +</pre> + +<hr> + +<h2><a name="Version3.0.3"></a>Version 3.0.3 (9/16/94)</h2> + +<p> +This is primarily a bug fix release; it also implements most of the +remaining Level 2 loose ends (except for setpagedevice). + +<h3><a name="V3.0.3_Documentation"></a>Documentation</h3><pre> + +Changes code that refers to "Ghostscript" to use the correct product +name from gs_product. (gs.mak, gdevpbm.c, gdevsun.c, gswppm.c) + +Documents the new .forgetsave operator. (language.doc) + +Clarifies the distinction between commercial licensing and single-copy +end-user sales. (readme) + +</pre><h3><a name="V3.0.3_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The compilation rule for gdevadmp.c was missing from the +makefile. (devs.mak) + +Changes the version numbering scheme back to A.B.C, since too many +people got confused by the change to A.BC. (gconfig.c, gs.c, +gs_init.ps) + +Adds a -dNOGC switch to prevent the garbage collector from being +enabled. (gs_init.ps) + +</pre><h3><a name="V3.0.3_Utilities"></a>Utilities</h3><pre> + +Removes the ps2image utility, since the new psmono driver replaces it. + +</pre><h3><a name="V3.0.3_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The TIFF drivers incorrectly assumed that short and ulong +were the same size as TIFF_short and TIFF_ulong, causing problems on +64-bit systems. (gdevtfax.c) + - The EGA/VGA driver didn't do gray halftones properly if it +was configured as a monochrome or 8-color device. (gdevpcfb.h) + - The comment in gdevevga.c incorrectly identified the file +as gdevpcfb.c. (gdevevga.c) + +Changes the PC display drivers to save and restore more of the BIOS +state. (gdevpcfb.h, gdevevga.c, gdevpcfb.c, gdevsco.c) + +Adds a new psmono driver that does the same thing as ps2image, faster +and more conveniently. (gdevpsim.c) + +Replaces the X11 driver with the one from 3.01, since the color +handling rewrite in 3.02 introduced serious bugs. (gdevx.h, gdevx.c, +gdevxini.c) + +</pre><h3><a name="V3.0.3_Platforms"></a>Platforms</h3><pre> + +Changes the definition of gx_no_color_index to work around one of the +bugs in the SGI Irix compiler. (gxdcolor.h) + +Rewrites the installation commands in unix-end.mak so they don't have +very long lines. (unix-end.mak) + +</pre><h3><a name="V3.0.3_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Fonts that used 2- or 4-element arrays in the Metrics dictionary +interpreted the width and side bearing interchanged with each other. +(gs_type1.ps) + - Setting FONTPATH on the command line didn't work. (gs_fonts.ps) + +</pre><h3><a name="V3.0.3_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The stream position wasn't updated properly if sgets +crossed a buffer boundary. (stream.c) + +Extends the BoundedHuffman filters so they can encode and decode runs of +zeros specially, and so they mark and detect EOD. (sbhc.h, shc.h, sbhc.c, +zfilter2.c) + +Provides an alternate implementation of file streams which doesn't use +stdio buffering and which works around the System V "interrupted system +call" problem. (stream.c, sfile.c, sfileno.c) + +Increases the maximum LZW output code from 3000 to 4095. (slzwe.c) + +</pre><h3><a name="V3.0.3_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Opening a filter on a file of the wrong access type (read +vs. write) didn't cause an error. (stream.h, sbasic.c, zfile.c, zfileio.c) + - save performed an extra, unnecessary gsave. (zvmem.c) + - sethalftone always gave a /undefined error. (zht2.c) + - eexec decryption read too much data from the input -- in +Level 2, it isn't allowed to read 512 characters ahead. (sfilter.h, +strimpl.h, seexec.c, sstring.c, zfileio.c, zmisc1.c) + - The scanner was too aggressive about allocating additional +space for strings on small machines. (iscan.c) + - The AccurateScreens flag in Type 1 and Type 2 halftone +dictionaries was being ignored. (zht2.c) + - The Level 2 definition of margins in statusdict didn't +allow for Margins being undefined in the current page device. +(gs_lev2.ps) + - The Interpolate flag was being ignored in image +dictionaries. [implemented in library] + - The TransferFunction option was being ignored in halftone +dictionaries. (zht2.c) + - Type 5 halftones usually didn't work, because they called +the wrong (or an invalid) spot function. (zht2.c) + +Implements a .forgetsave operator that effectively causes a given save (and +all more recent saves) to disappear. (isave.h, stream.h, isave.c, zfile.c, +zvmem.c) + +</pre><h3><a name="V3.0.3_Library"></a>Library</h3><pre> + +Fixes bugs: + - In the 1-operand form of the image operator, a Decode value of [1 +0] with 8-bit sample values and a single data source was treated the same +as [0 1]. (gsimage1.c) + - Some Monotype fonts put a callsubr between an OtherSubr call and +the following 'pop' opcodes (which the Adobe documentation forbids); The +Type 1 font interpreter gave an invalidfont error rather than allowing +this. (gxtype1.h, gstype1.c) + - Patterns didn't implement XStep and YStep properly. +(gxpcolor.h, gspcolor.c, gxclip2.c) + - Clipping regions were sometimes 1 pixel too small at the edges; +this could cause vertical and horizontal lines produced by certain Windows +drivers to disappear. (gzpath.h, gxacpath.c, gxcpath.c, gxfill.c) + - Oversampling cached rotated characters produced very bad +results (many dropouts). (gschar.c) + - Rendering a DeviceGray color on a DeviceCMYK device applied +the transfer function to all 4 components, not just to the K +component. (gxcmap.c) + - A screen specified with setcolorscreen didn't take effect +properly on CMYK devices. (gsht.c) + +Implements the Interpolate option for images. Currently this is only +implemented for portrait-orientation images (no rotation, skewing, or +X-reflection). (gscspace.h, gximage.h, gscie.c, gscolor.c, gscolor1.c, +gscolor2.c, gspcolor.c, gxcmap.c, gsimage.c, gsimage2.c, gsimage3.c) + +Implements AccurateScreens, but only in the form of a larger limit on +the size of a halftone super-cell. (gxht.h, gsht.c, gsht1.c) + +Starts to implement the TransferFunction option for halftones. +(gzht.h, gzstate.h, gsht.c, ...too many others to list...) + +</pre> + +<h2><a name="Version3.02"></a>Version 3.02 (8/30/94)</h2> + +<p> +This is another bug fix release. It was distributed only to a few people, +since the new X Windows color mapping code is not reliable yet. + +<h3><a name="V3.02_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - make.doc, but not unixtail.mak, called for setting PLATFORM=unix_ +on SVR4 platforms. (unixtail.mak) + - drivers.doc contained some wording that suggested that +Ghostscript always used RGB colors internally. (drivers.doc) + - The definition of gx_device in drivers.doc had gotten out of sync +with gxdevice.h. (drivers.doc) + - README claimed that Ghostscript is not compatible with the +VAX/VMS DEC C compiler, which is no longer true. (readme) + +Adds a new section on printer drivers to drivers.doc. (drivers.doc) + +Adds a large number of new display boards to the 800x600 SVGA section of +use.doc. (use.doc) + +Adds a bug report form to the README file. (readme) + +Notes that OSF/1 AXP systems require changing the definition of INSTALL +from install to installbsd. (make.doc) + +</pre><h3><a name="V3.02_Procedures"></a>Procedures</h3><pre> + +Removes -Wno-uninitialized from the gcc flags, and fixes all the places (in +Aladdin's code only) that need to be fixed to pacify gcc after doing this. +(gcc-head.mak, gdevgif.c, gdevmem2.c, gdevpcl.c, gs.c, gsht1.c, gsimpath.c, +gsutil.c, gxclread.c, gxpcopy.c, gxstroke.c, idict.c, iscannum.c, stream.c, +zdevice2.c) (NOT FINISHED YET) + +Adds a FAKEFONTS switch that makes fake entries in FontDirectory for +unloaded fonts, for the benefit of programs that think they can find all +the available fonts by scanning FontDirectory. (gs_fonts.ps, gs_init.ps) + +</pre><h3><a name="V3.02_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2epsi didn't work, because setdevice now erases the page. +(ps2epsi.ps) + - ps2epsi didn't work, because -dNODISPLAY installs a null device +with 0 width and height. The fix -- to remove the -dNODISPLAY -- is not +satisfactory, because it opens an unnecessary window. (ps2epsi) + +</pre><h3><a name="V3.02_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - gdev_fax_open was incorrectly declared static in gdevtfax.c, +causing the extern reference in the dfax drivers not to be resolved. +(gdevtfax.c) + - devs.mak included a duplicate definition of gdevmswn_h. +(devs.mak) + - The fax drivers didn't link properly in Level 1 systems, because +shc.c was omitted from their dependency list. (gs.mak, devs.mak) + - The TIFF/F drivers didn't set RowsPerStrip properly. +(gdevtfax.c) + - The TIFF/F drivers didn't byte-align the EOL properly. (scfx.h, +gdevdfax.c, gdevtfax.c, scfe.c, zfilter2.c) + - The rule for compiling gdevpccm.c incorrectly specified +dependency on gs.h rather than gx.h. (devs.mak) + - The rule for compiling gdevtfax.c didn't include time_.h as a +dependency. (devs.mak) + - The mode 2 compression routine for the DeskJet/LaserJet printers +was broken. (gdevpcl.c) + +Removes the -O0 from the compilation rule for gdevsco.c, since it was +misplaced to begin with. (devs.mak) + +Adds a maxDynamicColors X resource to control dynamic allocation in the +color map. Replaces the X color lookup algorithms with completely new +ones, for a substantial performance gain. (gdevx.h, gdevx.c, gdevxini.c) + +Adds PageNumber, Software, and DateTime entries to the TIFF/F drivers. +(gdevtifs.h, gdevtfax.c) + +Changes the margins for the LaserJet 4 to 0. (gdevdjet.c) + +Adds a user-contributed LaserJet 4 driver that does Floyd-Steinberg +dithering. (gdevcdj.c) + +</pre><h3><a name="V3.02_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The exit codes for Ghostscript should be different on VMS. +(iastate.h, gs.c, gsmain.c, igc.c, igcref.c) + - The VMS DEC C compiler declares malloc and free in stdlib.h, and +delete and unlink in stdlib.h. (malloc_.h, stdio_.h) + - st_prn_device wasn't defined, which upset the VMS linker even +though there were no references. (gdevprn.h) + - stdpre.h didn't bring in the right headers when running gcc on +SCO Unix, causing compilation warnings/errors. (stdpre.h) + - The definition of rename in gp_sysv didn't include const for the +arguments. (gp_sysv.c) + - The definition of gettimeofday in gp_sysv didn't return any +value. (gp_sysv.c) + - time_.h didn't work on MS-DOS systems. (time_.h) + - math_.h didn't include <math.h> when compiling with gcc on VMS +systems. (math_.h) + - DesqView/X doesn't have a 'cat' command, which caused problems in +the linking step. (dvx-tail.mak) + +Changes the definitions of popen in gdevpipe.c and gp_unix.c so they don't +specify the argument list. This is an attempt to get around the fact that +there is no easy way to detect whether the available header files declare +popen correctly (with const arguments), incorrectly (with non-const +arguments), or not at all. (gdevpipe.c, gp_unix.c) + +Replaces VMS.MAK, VMS-CC.MAK, and VMS-AXP.MAK with new versions provided by +a user. (vms.mak, vms-cc.mak, vms-axp.mak) + +Changes the 16-bit Borland makefiles so their standard configuration is +Level 1 plus color.dev (CMYK color and colorimage). (bc.mak, bcwin.mak) + +</pre><h3><a name="V3.02_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - cfonts.mak still referred to some .gsf files that have been +replaced by .pfa files. (cfonts.mak) + - Compiled fonts got entered into FontDirectory, but didn't get +registered as resources. (gs_ccfnt.ps) + - The Cyrillic, Kana, Hershey .gsf, and URW fonts didn't include a +necessary systemdict begin/end, which caused them to fail in badly designed +environments. (fonts/f*.gsf, fonts/h*.gsf, fonts/?0*.gsf) + +Changes the default target directory in cfonts.mak from fonts/c to .; +changes the names of the Zapf Chancery compiled font procedures from c* to +zc*. (cfonts.mak) + +Adds more fonts from the Adobe Type Manager package for MS Windows to +Fontmap.ATM. (fontmap.atm) + +Adds the entire set of 35 standard fonts to the ccfonts feature in gs.mak; +removes all the compilation rules for compiled fonts, since these rules are +in cfonts.mak already. (gs.mak) + +</pre><h3><a name="V3.02_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - kshow executed a null, rather than the correct procedure, between +the characters of the string, and got a typecheck error at the end. +(zchar.c) + - MultiMaster fonts computed their side bearing and width +incorrectly, producing incorrect output. (zchar1.c) + - There was no structure definition for gs_type1_state, so a GC +during the execution of an OtherSubrs procedure could scramble pointers in +the saved state. (zchar1.c, zfont1.c; also affects library, see below) + - kshow didn't work properly if the kerning procedure changed the +depth of the operand or dictionary stack. (zchar.c) + - If the element count for roll was too large by only 1 or 2, the +result was a crash rather than a rangecheck. (zstack.c) + - restore didn't undo currentgstate. (igstate.h, store.h, +gsstate.c, zdevice2.c, zdps1.c, ztype.c) + - The scanner didn't set the local bit properly in a suspended +state. (iscan.c) + - copypage disregarded #copies. (gs_init.ps) + - An incorrectly declared pointer led to addressing faults on +16-bit systems. (zchar1.c) + - The cache for Separation colors was allocated with one element +too few. (zcsindex.c) + +Changes `executive' so that if an error other than EOF occurs in the +reading of the statement, the interpreter prints the error message, but +control remains in the executive loop. (This isn't a very good fix; a +better one will require refactoring executive / execute / run.) +(gs_init.ps) + +Changes dictionary undo saving to use the new ref_must_save macro [internal +change only]. (idict.c) + +Moves configuration definitions from iinit.c to gconfig.c. (gcdefs.h, +interp.h, gconfig.c, gs.c, iinit.c, zmisc2.c, gs.mak) + +Moves =string from systemdict to userdict for Adobe compatibility. +(gs_init.ps) + +Starts to implement the Interpolate flag in image dictionaries. See under +Library below for restrictions. (zpaint.c, zimage2.c) + +</pre><h3><a name="V3.02_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - stream_compact attempted to compact a read-only string being used +as the data source of a filter. (sbasic.c, stream.c) + +Adds an EncodedEOLAlign flag to the CCITTFaxEncode stream, to allow direct +generation of TIFF/F output. (scfx.h, scfe.c, zfilter2.c) + +</pre><h3><a name="V3.02_Library"></a>Library</h3><pre> + +Fixes bugs: + - There was no structure definition for gs_type1_state, so a GC +during the execution of an OtherSubrs procedure could scramble pointers in +the saved state. (gxfont1.h, gxtype1.h, gstype1.c, gxhint2.c) + - A couple of calls had to discard const, but didn't include the +necessary cast. (gxpcmap.c) + - makeimagedevice refused to accept an empty image. (gsdevice.c) + - The extra parentheses around arguments in memory_.h caused some +compilers to fail. (memory_.h) + - Floating point overflows during coordinate conversion terminated +Ghostscript. (gxfarith.h, gxfixed.h, gsmatrix.c, gsmisc.c) + - Accents still weren't getting placed properly on characters +created with seac. (gstype1.c, gxhint2.c) + - The SGI C compiler couldn't handle the (perfectly legal) +definitions of dev_init_[open_]misc. (gxdevice.h) + - string_.h caused some problems with gcc on some versions of +Solaris. (string_.h) + - The halftone levels for color screens were computed incorrectly. +(gzht.h, gxdither.c) + - Color screens sometimes had vertical stripes of solid color +interspersed. (gxcht.c) + - Colors could get mapped incorrectly if a compiler aggressively +(and incorrectly) reordered the computation of procedure arguments +involving the unit_frac macro. (gxcmap.c) + - setcachedevice[2] insisted that the corners of the bounding box +be given in the correct order, i.e., llx < urx and lly < ury. (gschar.c) + - The image operator gave a limitcheck on unrotated 1-bit-per-pixel +images whose width in device coordinates exceeded 65529. (gsimage.c) + - The garbage collector didn't trace the input data of an +in-progress image operator correctly. (gsimage.c) + +Changes the max_rgb and dither_rgb members of gx_device_color_info to +max_color and dither_colors, since Ghostscript now uses these for CMYK +devices as well. Also changes dither_gray to dither_grays. (gdevmem.h, +gdevprn.h, gxdevice.h, gdevbit.c, gdevcdj.c, gdevprn.c, gdevxini.c, +gsdparam.c, gxcht.c, gxcmap.c) + +Starts to implement the Interpolate option for images. Currently this is +only implemented for image, not imagemask, and only for rotations that are +multiples of 90 degrees (possibly with reflection). (gsimage.h, +gsiscale.h, gximage.h, gsimage.c, gsimage1.c, gsiscale.c) + +Starts to implement XStep and YStep in pattern dictionaries. (gxdcolor.h, +gxpcolor.h, gspcolor.c, gxpcmap.c) + +</pre> + +<h2><a name="Version3.01"></a>Version 3.01 (8/14/94)</h2> + +<p> +This is a patch release to fix early problems in release 3.0, and to clean +up a few known loose ends. + +<h3><a name="V3.01_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - language.doc still documented the devicename procedure, which has +been withdrawn. (language.doc) + - drivers.doc didn't specify under what circumstances each +procedure could be called. (drivers.doc) + - current.doc said that setcachedevice and makeimagedevice wouldn't +accept packed arrays, but neither of these operators takes any array +arguments. (current.doc) + - current.doc said that definefont didn't interact properly with +the resource machinery, which apparently is no longer true. (current.doc) + - make.doc incorrectly gave the name of the DVX makefile as +dvx-djg.mak rather than dvx-gcc.mak. (make.doc) + - In one place, devices.doc incorrectly used -sBitsPerPixel= rather +than -dBitsPerPixel=. (devices.doc) + +Notes that a kernel bug in SCO Unix makes Ghostscript not work correctly in +some circumstances. (use.doc) + +</pre><h3><a name="V3.01_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - devs.mak incorrectly referred to gdevjetp.c instead of +gdev3852.c. (devs.mak) + - The obsolete file gsprops.c was accidentally included in the +fileset. + +Changes the version numbering scheme from A.BCC to A.B[C]. E.g., this +release will be 3.01, not 3.001. (gs_init.ps, gs.c, iinit.c) + +Adds the LaserJet 4 driver to all makefiles that already include the +LaserJet 3 driver. (*.mak) + +Adds the BJ-200 driver to all makefiles that already included the BJ-10e +driver. (*.mak) + +Splits the Unix 'install' target into install-exec and install-data. Moves +the executable scripts from gsdatadir to a new directory scriptdir, which +defaults to bindir. (ansihead.mak, cc-head.mak, gcc-head.mak, +unix-end.mak) + +</pre><h3><a name="V3.01_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - genconf had fixed buffer sizes built into it, which it could +overrun its working storage without checking. (genconf.c) + +Removes RCS or SCCS headers from two utility files. (pj-gs.sh, +printafm.ps) + +</pre><h3><a name="V3.01_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The new dfaxhigh and dfaxlow drivers didn't set +state.EncodedByteAlign to false. (gdevdfax.c) + - The sunview driver assumed that the device would be open before +map_rgb_color was called. (gdevsun.c) + - The CP50 driver incremented page_count itself, rather than +letting the core library do it. (gdevcp50.c) + - The GIF driver(s) could loop indefinitely under certain +circumstances. (gdevgif.c) + - The Group 4 fax drivers incorrectly included end-of-line codes in +the output. (gdevtfax.c, gdevdfax.c) + - The Group 4 fax drivers could put out an EOB in the middle of the +data. (scfe.c) + - The DesignJet 650C driver didn't use the correct compression +mode. (gdevcdj.c) + - The Hercules and EGA/VGA/SVGA drivers computed the page height +incorrectly according to the A4 switch. (gdevherc.c, gdevpcfb.h) + +Changes the page_count and showpage_count members of the device structure +from int to long. (gxdevice.h, gdevprn.c, gsdparam.c) + +Changes the faxg3, faxg32d, and faxg4 drivers so that, like the TIFF and +dfax drivers, they adjust the page size to one of the three CCITT standard +sizes if this is reasonable. (gdevtfax.c) + +Splits the bit driver into bit, bitrgb, and bitcmyk. Adds bitrgb and +bitcmyk to all makefiles that included bit. (*.mak, devs.mak, gdevbit.c) + +Replaces the atiw16, tseng16, and tvga16 SuperVGA drivers with a single +svga16 driver that allows specifying the display mode number. (devs.mak, +gdevpcfb.c) + +</pre><h3><a name="V3.01_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The MS Windows and OS/2 drivers allocated their terminal input +buffers in a way that could cause the GC to crash. (gp_mswin.c, gp_os2.c) + - The handling of gettimeofday on SVR4 platforms was incorrect. +(time_.h, gp_sysv.c, gp_unix.c) + - On some platforms, function prototypes were not enabled even if +__STDC__ was defined. (stdpre.h) + - The VMS build script referred to an obsolete feature lev2only. +(vms.mak) + +Changes the DVX platform so that stdprn is buffered. This should improve +printing performance dramatically. (gp_dvx.c) + +</pre><h3><a name="V3.01_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Setting DISKFONTS resulted in a reference to FontFileDirectory +before it was defined. (gs_type1.ps, gs_fonts.ps) + - /Font findresource gave an error rather than doing font +substitution. (gs_res.ps) + - FontDirectory wasn't rebound to GlobalFontDirectory when global +VM was current. (gs_res.ps, zdict.c) + - Type 1 fonts weren't loaded into global VM. (gs_fonts.ps) + - In the standard Fontmap, the Utopia fonts had extension .gsf +rather than .pfa. (fontmap.gs) + - Fonts whose FontBBox was [0 0 0 0] were not displayed, or were +displayed as tiny dots. (gs_type1.ps) + +</pre><h3><a name="V3.01_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - dict_put could read from the variable pvslot before it was used. +(This was harmless, since the value was never actually used; it just upset +Purify.) (idict.c) + - Binary object sequences could cause addressing faults. +(iscanbin.c) + - The attributes on names were set incorrectly in binary object +sequences. (iscanbin.c) + - gs.c duplicated (in some cases incorrectly) some definitions in +interp.h. (gs.c) + - gs_lib_paths was declared const in one place and non-const in +another. (zfile.c) + - file_restore and font_restore had inconsistent const declarations +for their argument. (isave.c) + - iodev_os_open_file was missing its last formal parameter. +(ziodev.c) + - gs.c declared gs_devicename with an incorrect extern. (gs.c) + - undefinefont didn't interact properly with the resource +machinery. (gs_lev2.ps) + - The declaration for swap_entry used a typedef name as a formal +parameter, which upset some compilers. (zmisc2.c) + - Including the ccinit feature could cause the garbage collector to +make an invalid access. (stream.c) + - The check for t_[a]struct types in ztype.c was incorrect. +(ztype.c) + - After the collection of halftone samples, temporary data +structures were freed incorrectly. (gzht.h, gsht1.c, zht.c) + - Images with source width between 489 and 492 crashed the +memory manager. (iastate.h) + +Makes it possible to define SEARCH_HERE_FIRST (gsmain.c) in the makefile. +(gsmain.c) + +Splits the Level 2 resource machinery into a separate file. (gs_lev2.ps, +gs_res.ps, gs.mak, unix-end.mak, vms.mak). + +Changes the names of the DiffEncode/Decode filters to +PixelDifferenceEncode/Decode, and splits them off into a separate +"feature". (gs.mak, zfilter2.c, zfpdiff.c, spdiff.c, spdiffx.h) + +Adds experimental code for filtered image scaling. DON'T USE THIS CODE. +(zimage2.c) + +</pre><h3><a name="V3.01_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The CCITTFaxEncode filter could put out an EOB in the middle of +the data. (scfe.c) + +Splits off the PixelDifferenceEncode/Decode filters into a separate +"feature". (gs.mak) + +</pre><h3><a name="V3.01_Library"></a>Library</h3><pre> + +Fixes bugs: + - gs_setcachedevice could return a garbage error code. (gschar.c) + - joins on stroked lines were incorrect if the device coordinate +system mapped +Y to +Y. (gxstroke.c) + - If gsmisc.c supplied versions of missing library routines, they +could clash with the names of the real ones if those were present +unexpectedly. (memory_.h, gsmisc.c) + - The initialization expression for is_open in the +dev_init_misc_open macro included a cast, which some compilers don't allow. +(gxdevice.h, gsdevice.c, gxclip2.c, gxpcmap.c) + - In Type 1 fonts, character that specified their side bearing and +width with sbw rather than hsbw gave an invalidfont error. (gstype1.c) + - Some procedures were declared inconsistently with regard to const +arguments. (gscie.c, gxpcmap.c, gxacpath.c, gxcmap.c) + - A few places still assumed that pointers occupied 4 bytes. +(gxclist.c) + - Rendering a gray halftone on a CMYK device called the device's +map_rgb_color procedure instead of map_cmyk_color. (gxdither.c) + +Renames gsfile.c as gswppm.c. (gsfile.c, gswppm.c) + +Implements the ability to cache arbitrarily transformed characters. This +is currently enabled by a compile-time flag in gschar.c. (gschar.c) + +</pre> + +<h2><a name="Version3.0"></a>Version 3.0 (8/1/94)</h2> + +<p> +This is the first full Level 2 version released to the public. +Unfortunately, we were not able to include setpagedevice in this release. + +<h3><a name="V3.0_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - README didn't mention Aladdin's European distributor. + - psfiles.doc didn't describe some of the newer gs_*.ps files. + +Notes that gcc -O2 (version 2.5.8 of gcc) generates incorrect code for some +modules on the H-P RISC architecture. + +Notes that on AXP platforms running VMS, DEC C V4.0 is required. + +</pre><h3><a name="V3.0_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - 'make clean' didn't delete devs.tr or t.tr. + - devs.mak was missing the entry for faxg32d. + - unixansi.mak omitted some drivers that were included in +unix-cc.mak and unix-gcc.mak. + +Updates jpeg.mak to reference version 5beta1 of the IJG JPEG code. + +Changes the version numbering scheme from A.B.C to A.B[CC]. I.e., the +first sub-release after 3.0 will be 3.01 or 3.001, not 3.0.1. + +</pre><h3><a name="V3.0_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2ascii didn't do a setglobal. + +Adds an option to ansi2knr to convert ... to va_alist/va_dcl. + +</pre><h3><a name="V3.0_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The newly added faxg32d driver didn't have an entry in devs.mak. + - The BMP, GIF, and PCX drivers wrote out an incorrect color +palette (the blue values were too small). + - The vgalib driver had some compilation problems. + - The TIFF drivers didn't produce correct multi-page output. + +Adds faxg32d and tiffg32d drivers. + +Reinstates the DigiFax drivers, which were withdrawn when the new fax +drivers were added. + +</pre><h3><a name="V3.0_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - gs_btokn.ps and gs_ccfnt.ps weren't installed on Unix platforms. + - The VMS module list omitted SBHC, included a non-existent GXDASH, +and had incorrect names for some of the IJG JPEG files. + - The VMS build scripts (vms*.mak) had incorrect "boilerplate". + - The VMS script file gssetmod.com had \r characters in it, as well +as \n characters. + - The echogs and genarch utilities didn't return the correct exit +codes under VMS. + - The VMS Fontmap had incorrect entries for the Courier and Charter +fonts. + - When running under Ghostview, Ghostscript didn't drain the input +pipe. (We fixed this with a temporary patch in gs.c; this isn't a good +solution for the longer term.) + +</pre><h3><a name="V3.0_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The free AvantGarde, Bookman, and Palatino font families had +incorrect FontBBox values. + - The 'f' and 'j' in the free AvantGarde-DemiOblique, +Bookman-DemiItalic, Bookman-LightItalic, and Palatino-Italic fonts were +chopped off on the right. (The bitmaps were chopped off in the original +BDF fonts from which these fonts were made.) ****** THIS PROBLEM WAS NOT +ACTUALLY FIXED. ****** + +</pre><h3><a name="V3.0_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - gs -h and gs -v didn't print the tertiary version number correctly. + - Binary object sequences with no strings or names didn't read in +correctly. + - Binary object sequences that crossed an input buffer boundary +didn't read in correctly. + - Binary object sequences read in as {[e1 .. en] e1 ... en} instead +of {[e1 ... en]}. (New bug in 2.9.x.) + - setpattern didn't set the current color space correctly if the +current color space wasn't a Pattern space. + - If the current color space was an uncolored Pattern space but the +current color was a colored Pattern, currentcolor returned extra values on +the operands stack. + - .buildfont1 in gs_type1.ps didn't force binding of the old +definition, causing ps2ascii to loop endlessly. + +Adds a facility for writing and reading dictionaries in binary object +sequences. This is experimental and subject to change in the future. + +</pre><h3><a name="V3.0_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - gs_run_string and ccinit didn't have any way to mark the string +as "foreign", which confused the GC. + +</pre><h3><a name="V3.0_Library"></a>Library</h3><pre> + +Fixes bugs: + - gxchar.h had an extra comma after the last element of the +show_width_status enum, which upset some compilers. + - stroke and strokepath didn't correctly skip zero-length segments +if the line width was less than one pixel, or if there was a closed subpath +consisting entirely of zero-length segments. + - strokepath sometimes incorrectly added a moveto at the end of the +path. +</pre> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/History4.htm b/Master/xemtex/doc/ghostscript/History4.htm new file mode 100644 index 00000000000..35e67000138 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/History4.htm @@ -0,0 +1,3980 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>History of Ghostscript versions 4.n</title> +<!-- $Id: History4.htm,v 1.13.2.11.2.6 2003/05/17 14:38:59 giles Exp $ --> +<!-- Originally: history4.txt --> +<!-- + WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to + re-create the table of contents here, because it will replace the + hand-edited TOC subheads with a separate subhead for each H2 in + the body of the file. Or if you do, first look at the original + TOC to see how to edit it for visual conciseness. +--> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>History of Ghostscript versions 4.n</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Version4.81">Version 4.81 (6/1/97)</a> +<ul> +<li><a href="#V4.81_Documentation">Documentation</a>, + <a href="#V4.81_Procedures">Procedures</a>, + <a href="#V4.81_Utilities">Utilities</a>, + <a href="#V4.81_Drivers">Drivers</a>, + <a href="#V4.81_Platforms">Platforms</a>, + <a href="#V4.81_Interpreter">Interpreter</a>, + <a href="#V4.81_Library">Library</a> +</ul> +<li><a href="#Version4.80">Version 4.80 (limited) (5/28/97)</a> +<ul> +<li><a href="#V4.80_Documentation">Documentation</a>, + <a href="#V4.80_Procedures">Procedures</a>, + <a href="#V4.80_Utilities">Utilities</a>, + <a href="#V4.80_Drivers">Drivers</a>, + <a href="#V4.80_Platforms">Platforms</a>, + <a href="#V4.80_Fonts">Fonts</a>, + <a href="#V4.80_Interpreter">Interpreter</a>, + <a href="#V4.80_Streams">Streams</a>, + <a href="#V4.80_Library">Library</a> +</ul> +<li><a href="#Version4.74">Version 4.74 (limited) (5/5/97)</a> +<ul> +<li><a href="#V4.74_Documentation">Documentation</a>, + <a href="#V4.74_Utilities">Utilities</a>, + <a href="#V4.74_Drivers">Drivers</a>, + <a href="#V4.74_Interpreter">Interpreter</a>, + <a href="#V4.74_Streams">Streams</a>, + <a href="#V4.74_Library">Library</a> +</ul> +<li><a href="#Version4.73">Version 4.73 (limited) (4/19/97)</a> +<ul> +<li><a href="#V4.73_Documentation">Documentation</a>, + <a href="#V4.73_Procedures">Procedures</a>, + <a href="#V4.73_Utilities">Utilities</a>, + <a href="#V4.73_Drivers">Drivers</a>, + <a href="#V4.73_Platforms">Platforms</a>, + <a href="#V4.73_Interpreter">Interpreter</a>, + <a href="#V4.73_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.73_Streams">Streams</a>, + <a href="#V4.73_Library">Library</a> +</ul> +<li><a href="#Version4.72">Version 4.72 (limited) (4/14/97)</a> +<ul> +<li><a href="#V4.72_Documentation">Documentation</a>, + <a href="#V4.72_Procedures">Procedures</a>, + <a href="#V4.72_Drivers">Drivers</a>, + <a href="#V4.72_Platforms">Platforms</a>, + <a href="#V4.72_Interpreter">Interpreter</a>, + <a href="#V4.72_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.72_Streams">Streams</a>, + <a href="#V4.72_Library">Library</a> +</ul> +<li><a href="#Version4.71">Version 4.71 (limited) (3/31/97)</a> +<ul> +<li><a href="#V4.71_Documentation">Documentation</a>, + <a href="#V4.71_Procedures">Procedures</a>, + <a href="#V4.71_Drivers">Drivers</a>, + <a href="#V4.71_Interpreter">Interpreter</a>, + <a href="#V4.71_Streams">Streams</a>, + <a href="#V4.71_Library">Library</a> +</ul> +<li><a href="#Version4.70">Version 4.70 (limited) (3/26/97)</a> +<ul> +<li><a href="#V4.70_Documentation">Documentation</a>, + <a href="#V4.70_Procedures">Procedures</a>, + <a href="#V4.70_Drivers">Drivers</a>, + <a href="#V4.70_Platforms">Platforms</a>, + <a href="#V4.70_Interpreter">Interpreter</a>, + <a href="#V4.70_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.70_Streams">Streams</a>, + <a href="#V4.70_Library">Library</a> +</ul> +<li><a href="#Version4.61">Version 4.61 (limited) (3/13/97)</a> +<ul> +<li><a href="#V4.61_Documentation">Documentation</a>, + <a href="#V4.61_Procedures">Procedures</a>, + <a href="#V4.61_Drivers">Drivers</a>, + <a href="#V4.61_Platforms">Platforms</a>, + <a href="#V4.61_Interpreter">Interpreter</a>, + <a href="#V4.61_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.61_Streams">Streams</a>, + <a href="#V4.61_Library">Library</a> +</ul> +<li><a href="#Version4.60">Version 4.60 (limited) (3/2/97)</a> +<ul> +<li><a href="#V4.60_Documentation">Documentation</a>, + <a href="#V4.60_Procedures">Procedures</a>, + <a href="#V4.60_Drivers">Drivers</a>, + <a href="#V4.60_Platforms">Platforms</a>, + <a href="#V4.60_Fonts">Fonts</a>, + <a href="#V4.60_Interpreter">Interpreter</a>, + <a href="#V4.60_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.60_Streams">Streams</a>, + <a href="#V4.60_Library">Library</a> +</ul> +<li><a href="#Version4.51">Version 4.51 (limited) (2/9/97)</a> +<ul> +<li><a href="#V4.51_Procedures">Procedures</a>, + <a href="#V4.51_Drivers">Drivers</a>, + <a href="#V4.51_Platforms">Platforms</a>, + <a href="#V4.51_Interpreter">Interpreter</a>, + <a href="#V4.51_Streams">Streams</a>, + <a href="#V4.51_Library">Library</a> +</ul> +<li><a href="#Version4.50">Version 4.50 (limited) (1/31/97)</a> +<ul> +<li><a href="#V4.50_Documentation">Documentation</a>, + <a href="#V4.50_Procedures">Procedures</a>, + <a href="#V4.50_Drivers">Drivers</a>, + <a href="#V4.50_Platforms">Platforms</a>, + <a href="#V4.50_Interpreter">Interpreter</a>, + <a href="#V4.50_Streams">Streams</a>, + <a href="#V4.50_Library">Library</a> +</ul> +<li><a href="#Version4.41">Version 4.41 (private) (1/21/97)</a> +<ul> +<li><a href="#V4.41_Procedures">Procedures</a>, + <a href="#V4.41_Drivers">Drivers</a>, + <a href="#V4.41_Fonts">Fonts</a>, + <a href="#V4.41_Interpreter">Interpreter</a>, + <a href="#V4.41_Streams">Streams</a>, + <a href="#V4.41_Library">Library</a> +</ul> +<li><a href="#Version4.40">Version 4.40 (private) (1/13/97)</a> +<ul> +<li><a href="#V4.40_Documentation">Documentation</a>, + <a href="#V4.40_Utilities">Utilities</a>, + <a href="#V4.40_Drivers">Drivers</a>, + <a href="#V4.40_Interpreter">Interpreter</a>, + <a href="#V4.40_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.40_Library">Library</a> +</ul> +<li><a href="#Version4.39">Version 4.39 (limited) (1/1/97)</a> +<ul> +<li><a href="#V4.39_Documentation">Documentation</a>, + <a href="#V4.39_Procedures">Procedures</a>, + <a href="#V4.39_Utilities">Utilities</a>, + <a href="#V4.39_Drivers">Drivers</a>, + <a href="#V4.39_Interpreter">Interpreter</a>, + <a href="#V4.39_Streams">Streams</a>, + <a href="#V4.39_Library">Library</a> +</ul> +<li><a href="#Version4.38">Version 4.38 (limited) (12/20/96)</a> +<ul> +<li><a href="#V4.38_Interpreter">Interpreter</a>, + <a href="#V4.38_Streams">Streams</a>, + <a href="#V4.38_Library">Library</a> +</ul> +<li><a href="#Version4.37">Version 4.37 (limited) (12/10/96)</a> +<ul> +<li><a href="#V4.37_Fonts">Fonts</a>, + <a href="#V4.37_Interpreter">Interpreter</a>, + <a href="#V4.37_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.37_Library">Library</a> +</ul> +<li><a href="#Version4.36">Version 4.36 (limited) (12/3/96)</a> +<ul> +<li><a href="#V4.36_Documentation">Documentation</a>, + <a href="#V4.36_Drivers">Drivers</a>, + <a href="#V4.36_Interpreter">Interpreter</a>, + <a href="#V4.36_Library">Library</a> +</ul> +<li><a href="#Version4.35">Version 4.35 (limited) (11/24/96)</a> +<ul> +<li><a href="#V4.35_Documentation">Documentation</a>, + <a href="#V4.35_Procedures">Procedures</a>, + <a href="#V4.35_Interpreter">Interpreter</a>, + <a href="#V4.35_Streams">Streams</a>, + <a href="#V4.35_Library">Library</a> +</ul> +<li><a href="#Version4.34">Version 4.34 (limited) (11/18/96)</a> +<ul> +<li><a href="#V4.34_Documentation">Documentation</a>, + <a href="#V4.34_Procedures">Procedures</a>, + <a href="#V4.34_Drivers">Drivers</a>, + <a href="#V4.34_Interpreter">Interpreter</a>, + <a href="#V4.34_Streams">Streams</a>, + <a href="#V4.34_Library">Library</a> +</ul> +<li><a href="#Version4.33">Version 4.33 (limited) (11/6/96)</a> +<ul> +<li><a href="#V4.33_Documentation">Documentation</a>, + <a href="#V4.33_Procedures">Procedures</a>, + <a href="#V4.33_Interpreter">Interpreter</a>, + <a href="#V4.33_Library">Library</a> +</ul> +<li><a href="#Version4.32">Version 4.32 (limited) (11/1/96)</a> +<ul> +<li><a href="#V4.32_Documentation">Documentation</a>, + <a href="#V4.32_Drivers">Drivers</a>, + <a href="#V4.32_Platforms">Platforms</a>, + <a href="#V4.32_Fonts">Fonts</a>, + <a href="#V4.32_Interpreter">Interpreter</a>, + <a href="#V4.32_Library">Library</a> +</ul> +<li><a href="#Version4.31">Version 4.31 (limited) (10/27/96)</a> +<ul> +<li><a href="#V4.31_Documentation">Documentation</a>, + <a href="#V4.31_Procedures">Procedures</a>, + <a href="#V4.31_Platforms">Platforms</a>, + <a href="#V4.31_Interpreter">Interpreter</a>, + <a href="#V4.31_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.31_Streams">Streams</a>, + <a href="#V4.31_Library">Library</a> +</ul> +<li><a href="#Version4.30">Version 4.30 (limited) (10/23/96)</a> +<ul> +<li><a href="#V4.30_Documentation">Documentation</a>, + <a href="#V4.30_Drivers">Drivers</a>, + <a href="#V4.30_Platforms">Platforms</a>, + <a href="#V4.30_Fonts">Fonts</a>, + <a href="#V4.30_Interpreter">Interpreter</a>, + <a href="#V4.30_Library">Library</a> +</ul> +<li><a href="#Version4.21">Version 4.21 (limited) (10/17/96)</a> +<ul> +<li><a href="#V4.21_Documentation">Documentation</a>, + <a href="#V4.21_Procedures">Procedures</a>, + <a href="#V4.21_Drivers">Drivers</a>, + <a href="#V4.21_Platforms">Platforms</a>, + <a href="#V4.21_Fonts">Fonts</a>, + <a href="#V4.21_Interpreter">Interpreter</a>, + <a href="#V4.21_Library">Library</a> +</ul> +<li><a href="#Version4.20">Version 4.20 (limited) (10/13/96)</a> +<ul> +<li><a href="#V4.20_Documentation">Documentation</a>, + <a href="#V4.20_Procedures">Procedures</a>, + <a href="#V4.20_Utilities">Utilities</a>, + <a href="#V4.20_Drivers">Drivers</a>, + <a href="#V4.20_Interpreter">Interpreter</a>, + <a href="#V4.20_Library">Library</a> +</ul> +<li><a href="#Version4.10">Version 4.10 (limited) (9/25/96)</a> +<ul> +<li><a href="#V4.10_Documentation">Documentation</a>, + <a href="#V4.10_Utilities">Utilities</a>, + <a href="#V4.10_Drivers">Drivers</a>, + <a href="#V4.10_Interpreter">Interpreter</a>, + <a href="#V4.10_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.10_Library">Library</a> +</ul> +<li><a href="#Version4.03">Version 4.03 (9/23/96)</a> +<ul> +<li><a href="#V4.03_Documentation">Documentation</a>, + <a href="#V4.03_Procedures">Procedures</a>, + <a href="#V4.03_Drivers">Drivers</a>, + <a href="#V4.03_Fonts">Fonts</a>, + <a href="#V4.03_Streams">Streams</a> +</ul> +<li><a href="#Version4.02">Version 4.02 (9/19/96)</a> +<ul> +<li><a href="#V4.02_Documentation">Documentation</a>, + <a href="#V4.02_Procedures">Procedures</a>, + <a href="#V4.02_Utilities">Utilities</a>, + <a href="#V4.02_Drivers">Drivers</a>, + <a href="#V4.02_Platforms">Platforms</a>, + <a href="#V4.02_Interpreter">Interpreter</a>, + <a href="#V4.02_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V4.02_Streams">Streams</a>, + <a href="#V4.02_Library">Library</a> +</ul> +<li><a href="#Version4.01">Version 4.01 (7/10/96)</a> +<ul> +<li><a href="#V4.01_Documentation">Documentation</a>, + <a href="#V4.01_Procedures">Procedures</a>, + <a href="#V4.01_Utilities">Utilities</a>, + <a href="#V4.01_Platforms">Platforms</a>, + <a href="#V4.01_Platforms">Platforms</a>, + <a href="#V4.01_Interpreter">Interpreter</a>, + <a href="#V4.01_Library">Library</a> +</ul> +<li><a href="#Version4.0">Version 4.0 (6/28/96)</a> +<ul> +<li><a href="#V4.0_Documentation">Documentation</a>, + <a href="#V4.0_Procedures">Procedures</a>, + <a href="#V4.0_Utilities">Utilities</a>, + <a href="#V4.0_Drivers">Drivers</a>, + <a href="#V4.0_Platforms">Platforms</a>, + <a href="#V4.0_Interpreter">Interpreter</a>, + <a href="#V4.0_Streams">Streams</a>, + <a href="#V4.0_Library">Library</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document is a history of Ghostscript releases numbered 4.n. For more +recent changes, see the the other history documents and, for the latest +versions, the news: + +<blockquote> +<a href="News.htm">News</a><br> +History of Ghostscript versions 4.n (this document)<br> +<a href="History3.htm">History of Ghostscript versions 3.n</a><br> +<a href="History2.htm">History of Ghostscript versions 2.n</a><br> +<a href="History1.htm">History of Ghostscript versions 1.n</a> +</blockquote> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<h2><a name="Version4.81"></a>Version 4.81 (6/1/97)</h2> + +<p> +This is a last-minute set of bug fixes before the 5.0 release. + +<h3><a name="V4.81_Documentation"></a>Documentation</h3><pre> + +Adds some overlooked helpers to the list. (helpers.txt) + +</pre><h3><a name="V4.81_Procedures"></a>Procedures</h3><pre> + +Makes a distinction between 2-part and 3-digit version numbers. +(version.mak, vms.mak) + +</pre><h3><a name="V4.81_Utilities"></a>Utilities</h3><pre> + +Develops the Type 1 to CFF converter a little further; it is still NOT +USABLE. (t1tot2.ps) + +Removes the pstoppm.ps script, since the p*m drivers supersede it. +(pstoppm.ps, unix-end.mak) + +</pre><h3><a name="V4.81_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The PDF writer sometimes omitted an ET command before setting the +clip path. (gdevpdf.c) + - The PDF writer didn't initialize the "vector" state, leading to +some redundant output (performance bug only). (gdevpdf.c) + - The PDF writer wrote clip paths even when they included the entire +page (performance bug only). (gdevpdf.c) + +Changes the PDF writer so that it recognizes not only the 14 built-in fonts +but any font with the same UniqueID and metrics. This covers some common +cases of re-registering a font with a variant Encoding. (gs_pdfwr.ps) + +</pre><h3><a name="V4.81_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - SEARCH_HERE_FIRST was accidentally set to 0 on MS Windows +platforms. (bcwin32.mak, msvc4.mak, msvc5.mak, watcw32.mak) + +Adds code to remove "" around arguments in the command line passed to +WinMain (MS Windows platforms). (dwmain.cpp, dwmainc.cpp) + +</pre><h3><a name="V4.81_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - setsystemparams was broken. (gs_lev2.ps) + - restore was broken if -dNOBIND was invoked. (gs_dps1.ps) + - deviceinfo returned much more information than it should. +(gs_dps.ps) + - The fix for the default EndPage procedures not popping their page +count operand from the stack was wrong. (gs_init.ps, gs_setpd.ps) + +</pre><h3><a name="V4.81_Library"></a>Library</h3><pre> + +Fixes bugs: + - The saved character origin took the translation component of the +FontMatrix into account, which caused charpath on fonts with non-zero +translation in the FontMatrix to produce incorrect results. (gschar.c) + +Removes incorrect access attributes on a couple of files. (gdevpdfm.c, +gxclist.h) + +</pre> + +<h2><a name="Version4.80"></a>Version 4.80 (limited) (5/28/97)</h2> + +<p> +This is the candidate fileset for the 5.0 release. + +<h3><a name="V4.80_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The one-line description of the color image rendering module was +incorrect. (gximage3.c) + - Some of the VMS documentation was out of date. (make.txt, +use.txt) + - The description of the file name separator for -sFONTMAP= was +wrong. (use.txt) + - PSFile was misspelled PSfile. (use.txt) + - There were some minor typos. (gstype1.h) + - The build instructions had a lot of obsolete information for PC +environments, and didn't cover Microsoft Visual C++. (make.txt) + +Explains that -sPAPERSIZE= only specifies the default papersize, and that +forcing a particular paper size also requires -dFIXEDMEDIA. (use.txt) + +Adds information about building with GNU make on OpenVMS. (make.txt) + +Clarifies the meaning of EOFC for streams. (strimpl.h) + +Documents the new dictionary argument for the eexecDecode filter. +(language.doc) + +</pre><h3><a name="V4.80_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - gs_epsf.ps didn't get installed on Unix systems. (unix-end.mak) + - The code wouldn't build with libpng 0.95b. (libpng.mak) + - One of the VMS scripts used CC_QUAL instead of CC_DEF. +(vms-cc.mak) + - version.mak wasn't included in a dependency list. (unix-end.mak) + +Brings the VMS DCL script up to date again (for the last time, we hope). +(vms.mak) + +Modifies all platform-independent uses of upper-case command line arguments +to deal properly with VMS, where the shell converts all command line +arguments to lower case, without requiring quotation. (devs.mak, gs.mak, +int.mak, lib.mak, zlib.mak) + +Moves the compilation rules for the third-party libraries into gs.mak, so +they can be used to compile the callers as well. (gs.mak, jpeg.mak, +libpng.mak, zlib.mak) + +Adds a set of files that allow building on OpenVMS using GNU make (slightly +patched). The timing on this is unfortunate, but we've wanted this for a +very long time. NOTE: be sure to look in the OpenVMS section of make.txt +for information on patching GNU make. (openvms.mak, append_l.com, +rm_all.com, rm_one.com, copy_one.com) + +Adds new makefiles for building on 32-bit Windows with Borland, Watcom, and +Microsoft Visual C++ (versions 4.x and 5.0). The timing on this is +unfortunate too, but having this capability is so important that we couldn't +pass it up. (bcwin32.mak, msvc4.mak, msvc5.mak, msvccom.mak, watcw32.mak, +wincom.mak) + +Removes now-obsolete makefiles. (dwcommon.mak, msc.mak, msvcwint.mak, +mscbegin.bat, watcwin.mak) + +</pre><h3><a name="V4.80_Utilities"></a>Utilities</h3><pre> + +Extends echogs to work in VMS environments, where the shell converts all +command line arguments to lower case, without requiring quotation. +(echogs.c) + +Adds a sketch of a utility for converting Type 1 fonts to CFF. DOESN'T WORK +YET: DON'T TRY TO USE IT. (t1tot2.ps, type1ops.ps, writecff.ps) + +</pre><h3><a name="V4.80_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A type declaration wasn't compatible with libpng 0.95. +(gdevpng.c) + - kshow wasn't handled properly when producing PDF output. +(gs_pdfwr.ps) + - The PDF writer put out unnecessary ET/BT commands. (gdevpdfx.h, +gdevpdf.c, gdevpdfi.c, gdevpdfm.c, gdevpdft.c) + - The PCL XL writer put out real numbers for the miter limit, which +are not allowed (!). (gdevpx.c) + - The PCL XL writer didn't combine successive curves into a single +curve command (performance bug only). (gdevpx.c) + - The PCL XL writer could write uncompressed images with a tag +saying they were compressed. (gdevpx.c) + - The PCL XL writer always selected U.S. letter paper, rather than +the requested size. (gdevpxen.h, gdevpx.c) + - The PCL XL writer reselected the paper size on every page, even if +it hadn't changed. (gdevpx.c) + - The PCL XL writer always used shorts for line and curve +coordinates, rather than using bytes when possible (performance bug only). +(gdevpx.c) + - Because of a compiler bug, a macro with argument conflicted with a +variable name. (gdevpdfx.h, gdevpdf.c) + - A picky compiler objected to an extern for an undefined structure. +(gdevpsdf.h) + - The PDF writer sometimes didn't reset the clipping path, causing +bitmaps or rectangle to disappear. (gdevpdf.c, gdevpdfi.c) + - The PDF writer produced invalid output if the first page was +blank. (gdevpdf.c) + - The AutoRotatePages parameter for PostScript and PDF output (which +doesn't actually do anything yet) incorrectly expected a Boolean value +rather than an enumeration. (gdevpsdf.h, gdevpsdf.c) + - Some places returned -1 for an error without calling gs_note_error +or gs_return_error. (gdevm1.c, gdevmpla.c, gdevrun.c, gxclpath.c) + - The PCL XL writer produced extremely large files because it didn't +download character bitmaps. (OK, this isn't really a bug fix.) (gdevpx.c) + - The forwarding implementation of get_page_device didn't do the +right thing. (gdevnfwd.c) + - The x11alpha device didn't implement get_params properly, leading +to anomalous behavior. (gdevxalt.c) + - The PDF writer produced incorrect Count values for outlines: the +count only counted descendant leaves, omitting intermediate nodes. +(gdevpdfm.c) + +Removes an assumption that images have at most 4 components. (gdevpdfi.c) + +Adds an x11gray2 device, primarily for debugging. (devs.mak, gdevxalt.c) + +Updates the unified printer driver with a newer version. (uninfo.ps, +gdevupd.c, *.upp) + +</pre><h3><a name="V4.80_Platforms"></a>Platforms</h3><pre> + +Adds the P*M devices and the X11 devices (commented out) to the OS/2 +makefile. (os2.mak) + +Updates the MS Windows platform to be compatible with Microsoft Visual C++ +(as well as Watcom and Borland compilers). (gsdll32.def, gdevmswn.h, +gp_mswin.h, gsdll.h, dwimg.cpp, dwmain.cpp, dwmainc.cpp, dwtext.cpp, +gdevwdib.c, gdevwprn.c, gdevwpr2.c, gp_mswin.c, gsdll.c) + +</pre><h3><a name="V4.80_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Certain synthetic fonts incorrectly were loaded into local rather +than global VM. (These fonts are not part of the standard distribution.) +(gs_fonts.ps, gs_pfile.ps, *ss*.ps) + +</pre><h3><a name="V4.80_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The FAKEFONTS scan could leave junk on the stack. (gs_fonts.ps) + - Dynamically loading known encodings on demand left junk on the +stack, causing a typecheck error. (gs_res.ps) + - Some 'static' declarations were missing (gcc lossage). (iname.c) + - Some internal operators didn't have names, leading to unhelpful +error printout. (zfileio.c) + - The resource "operators" didn't always restore the stacks properly +on an error. (gs_res.ps) + - The CID font code left a garbage value on the stack during +loading. (gs_cidfn.ps) + - The defineresource implementation for built-in resources like +FMapType didn't leave the resource "value" on the stack. (gs_res.ps) + - If an operator defined by a procedure was bound into a packed +procedure, the stack-protection feature wasn't effective. (interp.c) + - findfont didn't restore the stack if it failed. (gs_res.ps) + - The showpage count passed to the BeginPage and EndPage procedures +was incremented only if a page was printed, rather than for every invocation +of showpage. (gs_init.ps, zdevice2.c) + - The default EndPage procedures didn't pop their page count operand +from the stack. (gs_init.ps, gs_setpd.ps) + - If the argument of findfont wasn't a name or a string, and no font +with that key had been registered, an error occurred. (gs_fonts.ps, +gs_res.ps) + +Updates most of the remaining pseudo-operators to take advantage of stack +protection. (gs_btokn.ps, gs_cmap.ps, gs_dps1.ps, gs_dps2.ps, gs_fonts.ps, +gs_lev2.ps, gs_pdfwr.ps) + +Splits the image operators into a separate file from the path painting +operators. (This should have been done a long time ago.) (iimage.h, +zimage.c, zpaint.c) + +Adds more of the implementation of the NeXT alpha and compositing +operations, under an #ifdef DPNEXT. (iimage.h, zcolor1.c, zdpnext.c, +zimage.c) + +Adds more of the implementation of DPS contexts. These are still not +usable. (icontext.h, icontext.c, zcontext.c, zmath.c) + +Changes the help message to describe -dBATCH instead of -c quit. +(imainarg.c) + +Recognizes the dictionary argument for the eexecDecode filter. (zmisc1.c) + +</pre><h3><a name="V4.80_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The tracing message when starting to decode 1-D fax data reported +the run_color incorrectly. (scfd.c) + - In the CCITTFaxDecode filter, if a buffer boundary fell between a +makeup code and a final zero-length termination code, an ioerror could +occur. (scfd.c) + - Per Adobe, in the CCITTFaxDecode filter, EndOfBlock = true should +cause Rows to be ignored. (scfd.c) + - If an output stream returned EOFC, an infinite loop might result. +This problem (and the fix) are in the same fragile code as the EOD fix in +4.74, and we may again have introduced a new bug. (stream.c) + +Changes the eexecDecode filter so that instead of a number, it can take a +dictionary with two keys, seed and lenIV. (Having eexecDecode skip initial +bytes at all was a design bug that is too late to fix.) (sfilter.h, +seexec.c) + +</pre><h3><a name="V4.80_Library"></a>Library</h3><pre> + +Fixes bugs: + - The default mapping from RGB+alpha to RGB didn't lighten +(premultiply) the color according to the alpha value. (gxcmap.c) + - The angle error metric for rational tangent screen parameters +should be simply the difference in angle, not a ratio. (gshtscr.c) + - gs_setcolorscreen and gs_sethalftone didn't initialize an +allocator pointer, leading to memory access errors. (gsht1.c) + - If a banded image was clipped, an invalid band list could be +produced. (gxclimag.c) + - A picky compiler wouldn't allow an enum to be &&'ed with a +boolean. (gschar.c) + - A short-sighted compiler didn't allow the use of actual procedure +names (as opposed to procedure variables) in a conditional expression. +(gxfill.c) + - A compiler objected to a name longer than 31 characters. (gzht.h, +gsht.c, gxclread.c) + - The height computations for banded images were not consistent, +possibly leading to invalid band lists. (gxclimag.c) + - copypage didn't reset the band writer and band reader bookkeeping +consistently, leading to incorrect output and possible errors. (gxcldev.h, +gxclist.c, gxclread.c) + - When banding, changing the halftone could lead to accessing memory +after freeing it. (gxclread.c) + - When using disk files for band storage, showpage didn't actually +delete or truncate the band list file, possibly causing subsequent copypage +operations to become confused. (gxclfile.c) + - When banding, having more than one image operator in progress at a +time confused the rasterizing pass and could produce arbitrary errors. From +PostScript, this can only happen in the case of an image whose data source +was a procedure-based stream that itself invoked an image operator: this is +a senseless and perverse thing to do, but it shouldn't break the code (and a +Genoa CET file actually does it). (gxclist.h, gxclimag.c, gxclist.c) + - Some picky compilers objected to negating unsigned values. +(gsuid.h, gsht.c, gsmemory.c, gxpcopy.c) + - When banding, if a 90- or 270-degree rotated monobit image was +clipped, invalid memory accesses could occur. (gximage.h, gximage1.c) + - The showpage count passed to the BeginPage and EndPage procedures +was incremented only if a page was printed, rather than for every invocation +of showpage. Fixing this requires removing the incrementing of the count +from the library level altogether. (gsdevice.c) + - When rendering a subrectangle of an image, the X DDA was +initialized incorrectly, causing possible errors. We think this only +affected certain banded images. (gxdda.h) + +Adds a provision for images with an alpha component, under an #ifdef DPNEXT. +****** THE BANDING CODE HAS NOT BEEN UPDATED YET. ****** (gsiparam.h, +gxcmap.h, gxdither.h, gximage.h, gsimage.c, gxclimag.c, gxclread.c, +gxcmap.c, gximage.c, gximage3.c, gximage4.c ****** NOT DONE YET ******, +gximage5.c) + +Adds a return_if_error macro to capture the common idiom of making a call +and then returning its value if that value is negative (error). (gserror.h) + +</pre> + +<hr> + +<h2><a name="Version4.74"></a>Version 4.74 (limited) (5/5/97)</h2> + +<p> +This fileset is supposed to fix all remaining errors reported by the Genoa +CET, and is intended to be the last incremental test fileset before the 5.0 +release. + +<h3><a name="V4.74_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - Mark procedures are *not* executed in the normal return case. +(estack.h) + - The line_params element of a gs_imager_state is *not* allocated +separately. (gsstate.c) + - The value passed to the PDF writer for text is a dictionary, not +an array. (gdevpdft.c) + +Improves the documentation of gstate memory management. (gsstate.c) + +Documents end_status = EOFC for writing streams. (stream.h, strimpl.h) + +Clarifies memory management for halftones and device halftones. (gsht1.h, +gxdht.h, gxht.h, gzht.h) + +Removes the "experimental" tag from the PostScript and EPS writers. +(devs.mak) + +</pre><h3><a name="V4.74_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The viewpcx utility scaled images improperly. (viewpcx.ps) + - If a PDF file used F instead of f for filling a path, pdf2ps +didn't output the fill operation. (pdf_base.ps) + +Changes the ps2pdf script so that, like pdf2ps, it allows debugging +switches. (ps2pdf) + +</pre><h3><a name="V4.74_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The vgalib driver didn't clip monobit images properly. +(gdevvglb.c) + - The X driver asked for exposure events to be reported, but never +read them, causing the event queue to grow indefinitely. (gdevxini.c) + - The "vector" drivers and the PDF writer didn't properly keep track +of whether the current clipping region was the default one. (gs_pdfwr.ps, +gdevvec.h, gdevvec.c, gdevpdf.c, gdevpdft.c) + - The PDF writer had word and character spacing interchanged. +(gdevpdft.c) + - The PDF writer scaled word and character spacing incorrectly. +(gdevpdft.c) + +</pre><h3><a name="V4.74_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The user object operators didn't leave the stack in a clean state +if they failed. (gs_dps2.ps) + - UserObjects wasn't actually defined. (gs_dps2.ps) + - deviceinfo and set/currenthalftonephase were defined even if the +dps feature wasn't selected. (int.mak, gs_dps.ps, gs_dps1.ps, gs_lev2.ps, +zdps.c, zdps1.c) + - The dps feature didn't automatically include the level2 feature, +which it needs. (int.mak) + - The DPS user names mechanism didn't work, since the user names +array was subject to save and restore. (It still doesn't really work -- +there is no provision for expanding the user names array, which is created +with length 0.) (gs_btokn.ps, ivmspace.h, zbseq.c, zdps.c) + - The DPS context operators didn't do all the necessary error +checking. (zcontext.c) + - The debugging printout for names printed the name index in hex +without identifying it as such. (idebug.c) + - Adding the first non-name key (or name key with a name index +beyond 4K) to a dictionary that had any deleted entries could cause some +entries to apparently disappear. (idict.c) + - If a sub-table of the name table was freed during garbage +collection, memory could be left in an inconsistent state. (iname.c, igc.c) + - findfont didn't restore the stacks reliably if an error occurred. +(gs_fonts.ps) + - definefont with an invalid Type 0 font sometimes added a FID entry +(with a dangling pointer) if it failed. (Recovering properly from a VMerror +during font creation would require a much more complicated fix than this, +but since we expect a garbage collection to occur in that case, we aren't +concerned about it.) (zfont0.c) + - Reading parameter values from a dictionary could access beyond the +end of the array that keeps track of which entries had been referenced. +(idict.h, idict.c, iparam.c) + - Halftone data was allocated in the current VM rather than in the +same VM as the halftone dictionary or procedure. (Fixing this includes +updating code as necessary for the change in halftone and device halftone +allocation.) (iht.h, ivmspace.h, zht.c, zht1.c, zht2.c) + - Closed non-executable files on the e-stack could cause a restore +to be invalid. (zvmem.c) + +Adds skeleton code for the NeXT Display PostScript alpha and compositing +operators. This is not ready for use yet! (errors.h, gs_dpnxt.ps, +zdpsnext.c) + +Implements more of state saving and restoring for Display PostScript +contexts. This is not ready for use yet either. (int.mak, icontext.h, +istack.h, icontext.c, zcontext.c) + +Adds stub code for the Display PostScript view clip operators. (gs_dps.ps, +zdps.c) + +Removes the obsolete PPM-writing operator. (int.mak, vms.mak, *.mak, +zwppm.c) + +Makes the random number generator state public so it can be stored in the +context state. (zmath.c) + +Changes the flag for forcing global garbage collection to a run-time +variable, for debugging. (igc.c) + +Changes the handling of job control so that it doesn't use procedures that +produce an execstackoverflow when being printed. (gs_init.ps) + +Updates code as necessary for the change in reference counting. (zcie.c, +zcrd.c) + +Updates code as necessary for the change in off-stack gstate copying. +(zdps1.c) + +Removes a small bit of obsolete code. (interp.c) + +</pre><h3><a name="V4.74_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - An output stream that was not the last one in a pipeline could +incorrectly be asked to write its EOD marker more than once. (The fix is +very fragile and may have introduced new bugs.) (stream.c) + +</pre><h3><a name="V4.74_Library"></a>Library</h3><pre> + +Fixes bugs: + - The gx_device_halftone_release procedure was declared in two +different header files. (gzht.h) + - Off-stack copying of gstates could lead to a situation where +different parts of a single gstate were owned by different allocators; this +could cause them to be freed improperly, corrupting memory. We fixed this +partly by making the mixed ownership situation work, and partly by copying +more of the gstate when off-stack gstates are involved. Unfortunately, the +fixes are subtle and may have introduced new bugs. (gsstate.h, gsht.c, +gsht1.c, gspcolor.c, gsstate.c) + - If an error occurred while creating a Pattern instance, the +partially initialized instance structure wasn't freed. (gspcolor.c) + - Halftones and device halftones didn't allocate their clones or +their subsidiary structures with the correct allocator. (gsht.c, gsht1.c) + - The error statement when allocating a reference-counted object had +to be a control transfer. (gsrefct.h) + - Copying gstates incorrectly copied the memory and saved pointers, +and the pointer to the dash pattern. (gsstate.c) + - Flatness values less than 0.5 produced far more line segments than +necessary (roughly the square of the required number). Fixing this may have +bad effects on character quality -- this remains to be seen. (gxpflat.c) + - An error during installation of a halftone could leave things in +an inconsistent state. (gsht.c) + - The API didn't provide enough flexibility with respect to memory +management for halftones, or guarantee consistent allocation of a halftone +and its subelements. (gsht1.h, gsht.c, gsht1.c, gshtscr.c) + - Releasing a path didn't clear enough pointers to ensure clean +garbage collection. (gxpath.c) + - Finalizing or discarding a (cached) scaled font didn't properly +unlink it from the scaled_fonts list. (gsfont.c) + - Invoking an image operator within the BuildChar procedure for a +charpath caused an infinite loop. (gsimage.c) + - The bookkeeping for the scaled font cache was incorrect: the count +didn't always get decremented when a scaled font was freed. (gsfont.c) + - "High level" masked images were written incorrectly in the band +list as black-and-white images. (gxclimag.c) + - For "high level" images with fewer than 4 samples per pixel, +non-standard Decode values were written incorrectly in the band list. +(gxclimag.c) + - The color wasn't set correctly for "high level" masked images. +(gxclimag.c) + - The fastest case of monobit image rendering could get a memory +access error if the image lay partly outside the page. (gximage1.c) + - Clipping with an empty path was a no-op, rather than clipping out +everything. (gxcpath.c) + +Makes reference-counted objects remember which allocator owns them: this +entails a NON-BACKWARD-COMPATIBLE change to some of the macros for reference +counting. This was necessary to fix the off-stack gstate copying problem. +(gsrefct.h, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, gscsepr.c, +gsstate.c, gxclread.c) + +Refactors the unpacking of image data, to make unpacking available as a +general facility. (gximage.h, gxsample.h, gximage.c, gximage0.c, +gximage1.c, gximage4.c, gxsample.c) + +Enhances -Z? so that before freeing an object, it checks that the object was +owned by the correct allocator. (gsalloc.c) + +</pre> + +<h2><a name="Version4.73"></a>Version 4.73 (limited) (4/19/97)</h2> + +<p> +This is an incremental bug fix release made primarily to provide a +synchronization point for an upcoming trip. + +<h3><a name="V4.73_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - A reference to the uniprint documentation was incorrect. +(current.txt) + - -Olimit 1000 is not enough now for DEC Ultrix, 1200 is required; +this is also required for SGI IRIX. (make.txt) + +Adds argument/result comments to all the operators defined in gs_lev2.ps. +(Eventually we will do this for all operators defined as PostScript +procedures.) (gs_lev2.ps) + +</pre><h3><a name="V4.73_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The makefiles didn't provide a default value for GCONFIG_EXTRAS. +(gs.mak) + +</pre><h3><a name="V4.73_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - pdf2ps didn't work with TrueType or compressed Type 1 fonts. +(gs_pdf.ps, pdf_2ps.ps, pdf_font.ps) + +</pre><h3><a name="V4.73_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A cast from byte to char was omitted. (gdevpdfm.c) + +</pre><h3><a name="V4.73_Platforms"></a>Platforms</h3><pre> + +Updates the VMS script (again). (vms.mak) + +</pre><h3><a name="V4.73_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - A module that used strlen didn't include string_.h. (zdevice.c) + - Because of some bad PostScript code in FrameMaker output, identity +rather than unity black generation and undercolor removal functions are +required on black-and-white devices. (gs_init.ps) + - A harmless internal error during initialization left bogus +information in $error. (gs_cidfn.ps) + - startjob didn't clear the execution stack. Fixing this required +NON-BACKWARD-COMPATIBLE changes to the internal operators .instopped, .stop, +and .stopped, which are not supposed to be used by any external code. +(startjob will still give errors if executed in a file that isn't being +piped from stdin; this will take longer to fix.) (gs_init.ps, gs_lev2.ps, +iref.h, imain.c, interp.c, zcontrol.c, zfile.c) + +Adds a new .execn operator, part of the startjob changes, that allows +pushing multiple items on the exec stack. Eventually this will allow us to +get rid of many dynamically created closures. (zcontrol.c) + +</pre><h3><a name="V4.73_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Landscape-mode PDF files weren't rotated properly. (gs_pdf.ps, +pdf_main.ps) + +Makes the default PDF configuration notify users more informatively when +encountering an encrypted file. (pdf_sec.ps) + +</pre><h3><a name="V4.73_Streams"></a>Streams</h3><pre> + +Makes the RunLengthEncode filter always generate optimally compressed +output. We did this because we thought one of the Genoa CET files loops +forever if this is not the case; but we were wrong. (srle.c) + +</pre><h3><a name="V4.73_Library"></a>Library</h3><pre> + +Fixes bugs: + - If one coordinate of a position or distance overflowed the +internal representable range, the other coordinate became garbage. (bug +introduced in 4.70) (gspath.c) + - The bounding box computation for strokes was slightly too large +(sometimes much too large). (gxpaint.h, gdevbbox.c, gxclpath.c, gxstroke.c) + +Adds (under an #if 0) an experimental alternate halftone cell choice +algorithm. (gshtscr.c) + +Adds a better comment to a particularly obscure line of C code. +(gxclimag.c) + +</pre> + +<h2><a name="Version4.72"></a>Version 4.72 (limited) (4/14/97)</h2> + +<p> +This is another bug fix release, motivated mostly by Genoa testing. It also +updates the new uniprint driver with a major revision, and upgrades CFF +support a little bit. + +<h3><a name="V4.72_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - -dNOGC only disables default automatic garbage collection, not all +garbage collection. (use.txt) + - Apparently a different set of flags is needed for newer H-P +compilers. (make.txt) + +Replaces the tiny FAQ with a pointer to the on-line FAQ. (use.txt) + +Updates the documentation for the uniprint driver. (devices.txt) + +Clarifies the fact that Ghostscript reads Fontmap files from *all* +directories in the search list. (use.txt) + +Notes that building on GNU/Linux may require SM and ICE in the list of X +libraries. (make.txt) + +</pre><h3><a name="V4.72_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - An -include type42 was omitted from the level2 module description. +(int.mak) + - A mention of $(ECHOGS) in the rule for sfile should have been +$(ECHOGS_XE). (lib.mak) + - The pcx2up sample device should have been put in devs.mak rather +than lib.mak. (devs.mak, lib.mak) + - scanchar.h and scantab.c belong in the library, not the +interpreter. (devs.mak, int.mak, lib.mak) + - Some _h definitions were used before being defined, or weren't +defined at all. (devs.mak, lib.mak) + - The JPEG driver was missing a dependency. (devs.mak) + - The PDF writer was missing a dependency. (devs.mak) + - Building Level 1 systems was no longer possible. (int.mak) + +Updates the VMS build scripts. (vms.mak, vms-decc.mak) + +Adds *.upp to the list of files installed under Unix. (unix-end.mak) + +Adds rules to the Unix makefiles to build two library files: gs.a, +consisting of the entire PostScript/PDF interpreter lacking only gs.c, and +gslib.a, consisting of the graphics library without the gslib.c test driver. +(ansihead.mak, cc-head.mak, gcc-head.mak, unixtail.mak) + +</pre><h3><a name="V4.72_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The PS/EPS writers could generate a reference to an undefined +name. (gdevps.c) + - The PDF writer produced incorrect output for multi-level outlines. +(gdevpdfm.c) + - The PDF writer didn't convert /Action to /A, and /Action/Subtype +to /S, in Annot dictionaries. (gdevpdfm.c) + - The PDF writer didn't work in Level 1 systems. (gs_pdfwr.ps) + - The PDF writer didn't transform /Rect and /R values to current +user coordinates. (gs_pdfwr.ps, gdevpdfx.h, gdevpdfm.c) + - The PNG writer could refer to the 3 predefined stdio files even in +environments where this was undesirable. (gdevpng.c) + - The PDF writer had a compiled-in limit of 100 pages of output. +(gdevpdfx.h, gdevpdf.c) + +Updates the uniprint driver with a major revision that uses device +parameters that can be set from the command line, rather than PostScript +code, for configuration choices. (gdevupd.c, *.upp) + +</pre><h3><a name="V4.72_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - gp_enumerate_files_next had no way to return an error. (gp.h, +gp_dosfe.c, gp_ntfs.c, gp_os2.c, gp_unifs.c, gp_vms.c) ****** NOT +IMPLEMENTED YET ****** + - On the Watcom platform, CPU_TYPE >= 486 didn't automatically set +FPU_TYPE to 387. (wccommon.mak) + +</pre><h3><a name="V4.72_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Caching the current device in userdict could create dangling +references. (gs_init.ps, gs_pdfwr.ps, zdevice.c) + - If an error occurred in a BuildChar or BuildGlyph procedure, the +graphics state stack wasn't restored. (ichar.h, zchar.c, zchar2.c) + - There was an obsolete check for a structure when cleaning up after +a show operator. (zchar.c) + - Attempting to show a character with no associated glyph in a Type +3 font with a BuildGlyph procedure caused an error. (zchar.c) + - noaccess on a read-only dictionary didn't give an error. +(ztype.c) + - The dictionary passed to a Pattern's PaintProc was the original +template, not the copy made by makepattern. (gs_lev2.ps) + - Invalid font parameters could result in partially constructed +fonts, which caused problems for restore. (zfont0.c, zfont2.c) + - Files run under job control caused an error when terminating. +(gs_init.ps) + - setpagedevice didn't protect itself against malfunctioning +BeginPage or EndPage procedures. (The protection is still not perfect.) +(gs_setpd.ps) + - .type42execchar called font_param redundantly. (zchar42.c) + - The font operators didn't protect themselves well enough against +bogus font dictionaries. (zfont.c, zfont0.c) + - If an error occurred within a stringwidth, the graphics state +stack wasn't restored properly. (zchar.c) + - If an error occurred within the PaintProc of a form, the graphics +state stack was left with an extra entry. (gs_lev2.ps) + - Registering a font under a second name could corrupt data +structures. (zfont2.c) + - Different scalings of the same font should have "equal" fontIDs, +to match the Adobe implementations. (iutil.c) + - Errors detected by PostScript code during initialization either +allowed execution to continue or produced a hex stack dump, instead of just +producing a message and exiting. (interp.c) + - The memory validator didn't validate chunks at previous save +levels. (ilocate.c) + - The Level 1 size of systemdict was too small. (iinit.c) + - Attempting to define a Category resource in local VM gave a +typecheck error rather than an invalidaccess. (gs_res.ps) + - Building Level 1 systems was no longer possible. (zusparam.c) + +Rearranges the interpreter code slightly so that all operator invocations go +through a single procedure when debugging. (interp.c) + +Adds a -K<numK> switch to limit the total amount of memory that Ghostscript +can acquire. (imainarg.c) + +Makes the memory validator check packed refs more carefully. (ilocate.c) + +Makes the memory validator check explicitly for pointers to freed objects. +(igc.c, ilocate.c) + +Makes the memory validator check dictionaries more carefully. (ilocate.c) + +Makes the memory validator check refs embedded in structures. (ilocate.c) + +Adds a debugging option that bypasses the garbage collector entirely. +(igc.c) + +Adds debugging options to validate memory before/after save/restore. +(zvmem.c) + +Removes the patch for the uniprint driver, since it is no longer needed. +(gs_init.ps) + +Implements real-number operands in CFF fonts. (gs_cff.ps) + +Implements non-default charsets in CFF fonts. (gs_cff.ps) + +</pre><h3><a name="V4.72_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - The PDF 1.2 "marked content" operators weren't defined. +(pdf_main.ps) + - Streams with binary data whose first character was an EOL (\n) +didn't parse properly. Unfortunately, the way we fixed this may break some +other files. (pdf_base.ps) + - PDF 1.2 #nn escape syntax in names wasn't recognized. ****** This +is implemented with an inefficient hack that should be moved down into C. +However, I don't want to risk introducing new bugs during the beta test +period. ****** (pdf_base.ps) + - The interpreter had a limit of 64K objects. Removing this limit +required changing a basic data structure -- admittedly a risky thing to do +during beta test. (pdf_base.ps, pdf_main.ps) + - TJ didn't multiply the offsets by the font size, causing incorrect +character positioning. (gs_pdf.ps) + +</pre><h3><a name="V4.72_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The ASCIIHexDecode filter read an extra character in case of +error. (sstring.c) + +Adds more tracing output to the CCITTFaxDecode stream. (scfd.c) + +</pre><h3><a name="V4.72_Library"></a>Library</h3><pre> + +Fixes bugs: + - The allocator client name for rendering bitmap patterns was +incorrect. (Only affects tracing output.) (gspcolor.c) + - The check for exceeding the overall allocation limit was +incorrect, because of unsigned arithmetic. (Only affects limitation of +total allocation, which is only used for debugging and benchmarking.) +(gsmemory.c) + - The 0'th component of colored screens wasn't passed through the +band list, possibly causing access errors when rasterizing. (gxclimag.c, +gxclread.c) + - setbbox could get an overflow without detecting it. (gsdps1.c) + - Images with only one component but MultipleDataSources = true +could cause a memory access error. (gximage.c) + - The buffer for unpacking 12-bit-per-sample image data was too +small, causing memory corruption. (gximage.c) + - 12-bit-per-sample images with multiple data sources sometimes +didn't pass correct pointers to image_data. (gsimage.c) + - If an image data stream reached EOF before supplying enough data +for the entire image, memory corruption could occur. (zpaint.c) + - When a device halftone was freed, some pointers in the halftone +cache weren't cleared, leading to possible dangling references. (gsstate.c) + - Invalid font parameters could result in partially constructed +fonts, which caused problems for restore. (gxfont0.h, gsfont.c) + - If an error occurred within a stringwidth, the graphics state +stack wasn't restored properly. (gschar.c) + - The (static) limit on the size of a command line argument was too +small. (gsargs.h) + - Building Level 1 systems was no longer possible. (gxdht.h, +gsht.c, gsht1.c) + - Truncation instead of rounding caused colors on gray-scale devices +to come out very slightly too dark. (gxcmap.c) + - The Decode mapping table constructed for images was slightly +inaccurate for ranges other than [0 1] or [1 0]. (gximage.c) + +</pre> + +<h2><a name="Version4.71"></a>Version 4.71 (limited) (3/31/97)</h2> + +<p> +This is a bug fix release during the beta test period. + +<h3><a name="V4.71_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - A larger value of -Olimit is now needed to optimize gxclread.c. +(make.txt) + - Some comments were incorrect. (gdevbbox.h, sfilter1.c) + +Updates the GPL with a newer version from FSF. (COPYLEFT) + +Notes that the gcc 2.7.x code generation bug is fixed in 2.7.2.1. +(make.txt) + +</pre><h3><a name="V4.71_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Some streams required by high-level drivers were incorrectly +grouped with the interpreter rather than the library. (int.mak, lib.mak) + - The choice of implementation for file streams was buried in an +obscure place, rather than being included in the configuration definitions +at the head of each makefile. (We believe there are no more such buried +parameters.) This involved a NON-BACKWARD-COMPATIBLE change in the way this +choice was specified. (lib.mak, *.mak) + - Some dependencies were missing. (lib.mak) + +</pre><h3><a name="V4.71_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A variable was used before being initialized, causing get_bits +(and raster ops) to fail when using alternate X devices. (bug introduced in +4.70.) (gdevxalt.c) + - Some 'private' declarations were omitted. (It is infuriating that +gcc doesn't check for this!) (gdevps.c, gdevpx.c) + - A few character strings were used as byte arrays without a cast. +(gdevpx.c) + - The EPS writer didn't write a correct bounding box, and didn't +write it at the beginning of the file. (gdevvec.h, gsstruct.h, gdevps.c, +gdevvec.c) + - x_copy_color specified an incorrect (too large) image width. +Apparently this only mattered because it could cause invalid memory +accesses. (gdevx.c) + - x_copy_mono also specified too large an image width. It's not +clear this made any difference. (gdevx.c) + - The default implementation of strip_copy_rop didn't clamp Y values +to legal values for get_bits. (gdevmrop.c) + +</pre><h3><a name="V4.71_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Some initialization files prematurely switched the interpreter +into Level 2 mode, causing some Level 2 operators not to be defined. (bug +introduced in 4.60 or later.) (gs_cff.ps, gs_cidfn.ps, gs_cmap.ps, +gs_init.ps, gs_res.ps) + +</pre><h3><a name="V4.71_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The choice of procedure names for the file-descriptor-based +implementation of file streams was buried in a .c file, rather than being +chosen in the makefile. (sfile.c[deleted], sfileno.c[deleted], sfxstdio.c, +sfxfd.c, sfxboth.c) + +</pre><h3><a name="V4.71_Library"></a>Library</h3><pre> + +Fixes bugs: + - rcurveto was broken -- it drew curves to random points. (bug +introduced in 4.61.) (gspath.c) + - A trailing comma in an enum definition upset some compilers. (bug +introduced in 4.70.) (gstype1.h) + - Type 1 fonts with hint replacement could produce anomalous or +clipped output, or even missing lines. (Also cleans up some out-of-date +formatting.) (gxtype1.h, gstype1.c, gxhint2.c) + - Removes some conditionals for choosing between old and new +algorithms. (gxhint3.c) + - makebitmappattern required that the bitmap consist of only a +single tile repetition. (gspcolor.c) + - Some computations on RasterOps didn't take transparency into +account properly. (gdevmrop.c) + - The structure definition for imager and graphics states had an +incorrect offset for line_params, causing the garbage collector not to mark +or relocate dash patterns, possibly causing memory faults, FPEs, or invalid +output. (bug introduced since 4.03.) (gsstate.c) + - 'show' operators gave a limitcheck for unreasonable coordinates, +even if limit clamping was enabled. (gschar.c) + +Implements banded filling and stroking with colored halftones, in addition +to pure colors and binary halftones. Since we are in a beta test period, +actual use of this feature (but *not* all the code implementing it) is +disabled under an #ifdef FUTURE. (gsdcolor.h, gxcldev.h, gxclpath.h, +gxdht.h, gxhttype.h, gsht.c, gxclimag.c, gxclpath.c, gxclread.c) + +</pre> + +<h2><a name="Version4.70"></a>Version 4.70 (limited) (3/26/97)</h2> + +<p> +This fileset fixes the one outstanding compilation problem on PC platforms +and the old problem of limitchecks for out-of-bounds coordinates, and adds a +variety of new features, including the ability to save away the band lists +for pages and rasterize them later and/or elsewhere in any order and +combination. This is the first "serious beta" candidate for the next +general release. + +<p> +Fileset numbers 4.62 through 4.69 were skipped deliberately. + +<h3><a name="V4.70_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The list of special -d and -s switches was out of date. (use.txt) + - The name of the zlibDecode filter was incorrectly written +zlibEncode. (language.txt) + +Documents where to find out how to install gcc 2.7.x on SGI IRIX 6.x. +(make.txt) + +Documents a makefile patch required on NeXTStep. (make.txt) + +Documents how to patch gcc to fix the AXP code generation bug. (make.txt) + +Adds documentation for the new unified printer driver. (devices.txt) + +</pre><h3><a name="V4.70_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - 'make distclean' didn't remove a couple of files. (gs.mak) + - A library module didn't include a necessary dependency. (lib.mak) + - A new .ps file wasn't installed properly. (unix-end.mak) + - File write dates weren't updated properly on PC platforms, causing +unnecessary rebuilding. (cp.bat, gs.mak, msc.mak, msvcwint.mak, os2.mak, +tccommon.mak, wccommon.mak, zlib.mak) + - An unnecessary explicit compilation line for gdevcdj.c caused +problems in the Mac environment. (devs.mak) + - The VMS scripts were out of sync again. (vms.mak) + - The VMS build scripts didn't include the new JPEG driver. +(vms-*.mak) + - A number of makefile macros were referenced before being defined. +(devs.mak, lib.mak, int.mak, *.mak) + - libpng.mak didn't work with PVERSION=90. (libpng.mak, zlib.mak) + +Separates install-scripts from install-exec and install-data. +(unix-end.mak) + +Moves the definition of SEARCH_HERE_FIRST from iminst.h to the makefiles. +(*.mak, iminst.h, iconf.c, imain.c) + +Adds a -dBATCH switch that causes Ghostscript to exit after processing the +files named on the command line. (gs_init.ps) + +Adds the PostScript, EPS, and PCL XL writers, and the color and gray-scale +JPEG drivers, to all Unix configurations. (ansihead.mak, cc-head.mak, +gcc-head.mak) + +</pre><h3><a name="V4.70_Drivers"></a>Drivers</h3><pre> + +NOTE: because of a change in an internal interface (clist_output_page), the +cp50 driver no longer works. This is a user-contributed driver for which we +take no responsibility. + +Fixes bugs: + - gdevcdj.c wasn't compatible with ansi2knr. (gdevcdj.c) + - 'private' was omitted from some declarations. (gdevjpeg.c) + - The PostScript writer didn't keep track of the current color +properly. (gdevps.c) + - RESOLUTION was misspelled in a header. (gdevbjc.h) + - Some compilers objected to the use of a floating point initial +resolution value. (gdevbjc.h) + - Some compilers didn't allow static initialization of a union. +(gsdcolor.h) + - If a TIFF driver got an error when initializing the CCITTFax +encoder, it returned a bogus error code. (gdevtfax.c) + - The PDF writer produced incorrect output for Indexed color space +images. (gdevpdfi.c) + - For many fatal error conditions, the X driver called exit() +instead of returning an error. (gdevx*.c) + +Adds new drivers: + - epswrite, an EPS-writing driver (instead of making EPS output a +parametric option of the PostScript-writing device). (devs.mak, gdevps.c) + - pcxcmyk, a 4-bit CMYK PCX driver. This is probably only useful +for debugging CMYK color rendering. (gdevpcx.c) + - jpeggray, a JPEG driver that produces gray-scale rather than color +output. Thanks to Tom Lane for contributing this. (gdevjpeg.c) + - uniprint, a unified printer driver for a wide variety of inkjet +printers. Thanks to Gunther Hess for contributing this. (gdevupd.c) + +Adds the resolution (pHYs) to the output of the PNG drivers. (gdevpng.c) + +Adds recognition of the ASCII85EncodePages parameter to the PostScript and +EPS writers. (gdevps.c) + +Makes the new JPEG driver write a JFIF header, which contains the image +resolution. (gdevjpeg.c) + +Changes the "vector" device support interface so relative movement can be +detected easily. THIS IS STILL SUBJECT TO CHANGE WITHOUT NOTICE. +(gdevvec.h, gdevpsdf.c, gdevps.c, gdevpx.c, gdevvec.c) + +Changes the PostScript, EPS, and PDF writers to recognize curves and lines +that can be represented more efficiently. (gdevpsdf.h, gdevpsdf.c, +gdevps.c) + +Adds a new parameter to the PDF writer, FirstObjectNumber. This defines the +first object number that will be used in the output. The default, and +minimum, value is 1; the maximum value is approximately 2^31. This is for +the benefit of dvipdf; we don't expect it to be used otherwise. In fact, +using it appears to produce files that Adobe Acrobat Reader won't accept, +even though the files are perfectly compliant with the published PDF +specification. (gdevpdfx.h, gdevpdf.c, gdevpdfp.c) + +</pre><h3><a name="V4.70_Platforms"></a>Platforms</h3><pre> + +Removes the makefile for the 16-bit Borland C++ platform. This was the last +supported 16-bit platform; we expect to gradually drop all 16-bit +concessions from the code itself. (bcwin.mak) + +</pre><h3><a name="V4.70_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The initial size of systemdict was too small, causing the +interpreter to slow down substantially. (iinit.c) + - A library module depended on an interpreter module. (zcsindex.c) + - A logically necessary (but accidentally always available) #include +was missing. (ifont.h) + +Moves set/currentoverprint to a more appropriate module. (zcolor2.c, +zcssepr.c) + +Changes the default transfer functions so that they do something reasonable +when given operands outside the legal [0..1] range. We only do this to work +around a bug in FrameMaker output, which uses the transfer function as the +screen function (!). (gs_init.ps) + +Changes the CMap construction algorithm to use the new, more compact +representation. (zfcmap.c) + +Adds support for Adobe's Compact Font Format. Many individual features are +not implemented yet: see the comment in the source code for details. +(gs_cff.ps) + +Adds support for Type 2 charstrings in Type 1 fonts. (ifont.h, zfont1.c) + +Changes the Type 1 character rendering operator for the library change in +Type 1 fonts. (zchar1.c, zfont1.c) + +Initializes the graphics state limit clamp flag to true. (zgstate.c) + +Temporarily adds a configuration file for the new unified printer driver, +and arranges for it to be read at startup. This arrangement will be +replaced very soon by a different one based on command line parameters. +(gs_init.ps, uniprint.ps) + +</pre><h3><a name="V4.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Adds support for Compact Font Format fonts. (pdf_font.ps) + +</pre><h3><a name="V4.70_Streams"></a>Streams</h3><pre> + +Adds a glue procedure needed for the new jpeggray driver. (sjpeg.h, +sjpege.c) + +Removes the width limit of 32K in the CCITTFaxEncode filter. The new limit +is absurdly large (about 50M). (scf.h, scfx.h, scfe.c) + +</pre><h3><a name="V4.70_Library"></a>Library</h3><pre> + +Fixes bugs: + - A library module depended on an interpreter module. (gxcolor2.h, +gscolor2.c) + - When rendering a band, clipping was sometimes used when it wasn't +necessary. (Performance only.) (gxclread.c) + - Stroking didn't check the path against the device clipping box in +the absence of an explicit (non-default) clipping path. (Performance only.) +(gxstroke.c) + - A reference to an opaque type upset a couple of compilers. +(gxclread.c) + - Negative 32-bit numbers in Type 1 fonts didn't work properly on +64-bit systems. (gstype1.c) + - A logically necessary (but accidentally always available) #include +was missing. (gxbitmap.h) + - A header wasn't protected against double inclusion. (gxclist.h) + - Clipping devices didn't store their actual width and height. +(gxcpath.c) + - The slow-case check for thin lines was incorrect. (gxstroke.c) + - Images didn't compute their clipping boxes correctly if there +wasn't an explicit clipping path. (This must be a very recent bug, since it +creates an overflow condition that prevents monochrome images from being +rendered at all.) (gximage.c) + +Moves set/currentoverprint to a more appropriate module. For clients of +gs_set/currentoverprint, this is a NON-BACKWARD-COMPATIBLE CHANGE, since the +header file is now separate. (gscolor2.h, gscsepr.h, gscolor2.c, gscsepr.c) + +Replace the MetroWerks work-around with a different, more general one. +(gdevmem.h, gdevmem.c, gxdevice.h) + +Speeds up the Type 1 interpreter a little. (gstype1.c, gxhint3.c) + +Redesigns the internal representation of CMaps to be more space-efficient. +(gxfcmap.h, gschar0.c, gsfcmap.c) + +Implements a facility for saving away pages and rendering them later. +Currently this requires the pages to be represented as band lists on files, +and only allows X translation when rendering. This involves adding the +following new printer device parameters: + BandHeight + BandWidth + BandBufferSpace +Also changes the names of the printer device parameter elements from +use_buffer_space to BufferSpace and from max_bitmap to MaxBitmap for +consistency. (gdevprn.h, gxcldev.h, gxclio.h, gxclist.h, gxclmem.h, +gxclpage.h, gxdevmem.h, gdevmem.c, gdevp2up.c, gdevprn.c, gxclmem.c, +gxclpath.c, gxclread.c) + +Changes the band list implementation API to allow closing a file without +deleting it, and to allow reopening an existing file. This is a +NON-BACKWARD-COMPATIBLE change to a deep internal interface. (gxclio.h, +gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c) + +Speeds up rendering of colored halftones, by recognizing cases where one or +more planes don't actually require screening, unrolling a loop, and doing +basic clipping before halftoning. (gxcht.c) + +Adds a graphics state parameter, gs_set/currentlimitclamp, that changes the +handling of out-of-range coordinates to clamp them in a way that produces +approximately the intended output most of the time, rather than causing a +limitcheck. Currently this is only designed to work with the basic path +construction operations ([r]moveto, [r]lineto, [r]curveto, closepath); it +does not work with many other operations such as show, flattenpath or the +rectangle operations. Note also that while currentpoint will return the +correct (unclamped) value, reading out the path with pathforall will return +clamped values. This involves NON-BACKWARD-COMPATIBLE changes to the path +structure (but not to any public interfaces). (gxpath.h, gxtype1.h, +gzpath.h, gzstate.h, gspath.c, gspath1.c, gsstate.c, gstype1.c, gxpaint.c, +gxpath.c, gxpath2.c, gxpcopy.c) + +Adds support for Type 2 charstrings. Some features are not implemented yet: +see gstype2.c for details. (gscrypt1.h, gstype1.h, gxfont1.h, gxop1.h, +gxtype1.h, gstype1.c, gstype2.c, gxhint2.c, gxhint3.c, gxtype1.c) + +</pre> + +<hr> + +<h2><a name="Version4.61"></a>Version 4.61 (limited) (3/13/97)</h2> + +<p> +This fileset cleans up many compiler warnings. It adds support for +CMap-encoded fonts, and a driver that writes JPEG images. + +<h3><a name="V4.61_Documentation"></a>Documentation</h3><pre> + +Corrects an error in the description of the internal CodeMap structure. +(gs_cmap.ps) + +Documents the fact that the optimizer in gcc 2.7.2.1 is broken on AXP +machines. (make.txt) + +Corrects the name of the .setglobal/.currentglobal procedures. (zvmem2.c) + +Updates current.txt in preparation for the release. (current.txt) + +</pre><h3><a name="V4.61_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The VMS script was out of date again. (vms.mak) + - CIDFont support unnecessarily required composite font support. +(int.mak) + - CMap and CIDFont support had improper dependencies on +initialization order. (lib.mak, int.mak) + - Some dependencies were missing in the JPEG library code. +(jpeg.mak) + +Adds the new JPEG driver to all standard configurations. (*.mak) + +</pre><h3><a name="V4.61_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A dependency was omitted from the makefile. (devs.mak, gdevps.c) + +Cleans up some warnings from picky compilers. Some of these actually +indicated problems, such as unreachable code. (gdevpdfx.h, gdevbj10.c, +gdevcdj.c, gdevpdfp.c, gdevstc.c) + +Adds a JPEG-writing driver. Currently this only produces RGB output and +only has a QFactor parameter, but eventually it could take all the other +parameters of the DCTEncode filter. (devs.mak, int.mak, lib.mak, +gdevjpeg.c) + +Refactors the PDF and PostScript output drivers so that both of them +understand all the relevant documented PDF distiller parameters. (The +PostScript driver currently disregards nearly all of them.) (gdevpdfx.h, +gdevpsdf.h, gdevvec.h, gdevpdf*.c, gdevps.c, gdevpsdf.c, gdevpx.c) + +</pre><h3><a name="V4.61_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The MetroWerks C compiler gave an inexplicable error on a +particular initialization. (gdevmem.h, gdevmem.c) + +</pre><h3><a name="V4.61_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The insideness testing operators sometimes reported hits +incorrectly. (zupath.c) + - Mixed-type arithmetic used floats rather than doubles when +converting integers, possibly leading to loss of precision. (zarith.c, +zrelbit.c) + - composefont was defined in a private dictionary, not in +systemdict. (gs_cmap.ps) + - composefont didn't work, for several different reasons. +(gs_cmap.ps) + - After a Type 1 font called an OtherSubr, an invalid memory access +usually occurred, because of an incorrect attempt to free a data structure. +(zchar1.c) + - 2 .setlanguagelevel gave an error if globaldict hadn't been +defined yet. (zmisc2.c) + +Cleans up some warnings from picky compilers. Some of these actually +indicated problems, such as unreachable code, or failure to check for +(implausible) out-of-range data. (idict.c, idparam.c, igc.c, iinit.c, +imain.c, iscan.c, zbseq.c, zchar1.c, zdps1.c) + +Adjusts clients for a change in the internal character cache structure and +the introduction of the font next-glyph procedure. (zfont.c, zfont0.c) + +Refactors the Level 1 / Level 2 interpreter split slightly so that composite +fonts don't require all of Level 2. (int.mak, gs_dps1.ps, gs_dps2.ps) + +Adds FMapType 9 (CMap-encoded) composite font support. (int.mak, +gs_cmap.ps, ifont.h, zfcmap.c, zfont.c, zfont0.c) + +</pre><h3><a name="V4.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Adds recognition of /Identity values for BG, UCR, and TR functions in +ExtGState resources. (General function values still aren't recognized.) +(pdf_draw.ps) + +Centralizes the handling of inherited attributes. (pdf_draw.ps, +pdf_main.ps) + +Starts to add support for Type 0 fonts. (pdf_font.ps, pdf_main.ps) + +</pre><h3><a name="V4.61_Streams"></a>Streams</h3><pre> + +Cleans up some warnings from picky compilers. Some of these actually +indicated problems, such as unreachable code. (shc.h, scfd.c, sfilter2.c, +siscale.c, stream.c) + +</pre><h3><a name="V4.61_Library"></a>Library</h3><pre> + +Fixes bugs: + - Some picky compilers disliked certain conditional expressions. +(gxclread.c) + - Some picky compilers couldn't handle an extraneous semicolon. +(gdevvec.h) + - A cast from byte ** to const byte ** was missing. (gdevvec.c) + - Resizing the levels array of a halftone order when banding could +cause invalid memory accesses. (bug introduced in 4.60) (gxclread.c) + - One picky compiler didn't allow taking the address of an extern +undefined structure. (lib.mak, gxclread.c) + - When rendering Type 1 fonts, character overshoot was usually +suppressed when it shouldn't have been, often producing "squashed" +characters. (gxhint1.c) + - On systems where sizeof(long) > sizeof(int), coordinate values of +more than 22 bits were passed through the band list incorrectly, producing +incorrect output. (gxclread.c) + +Cleans up some warnings from picky compilers. Some of these actually +indicated problems, such as unreachable code or (hypothetical) loss of +precision. (gsdevice.c, gshsb.c, gsht.c, gsstate.c, gstype1.c, gxclimag.c, +gxclpath.c, gxclread.c, gxpdash.c) + +Makes using font hints conditional, for debugging. (gxhint1.c) + +Adds library-level support for FMapType 9 (CMap-encoded) composite fonts. +There is still no support for rearranged fonts. (gsccode.h, gsfcmap.h, +gsstruct.h, gxfcache.h, gxfcmap.h, gxfont.h, gxfont0.h, gschar.c, gschar0.c, +gsfcmap.c, gsfont.c, gsfont0.c) + +Splits band list control and utilities from rectangle-oriented commands, +because a file was getting too big. (gxclist.c, gxclrect.c) + +Moves the temporary file names for command lists from the printer device +structure to the command list structure; moves opening and closing the +temporary files from gdev_prn_alloc/free to clist_open/close. (gdevprn.h, +gxclist.h, gdevprn.c, gxclist.c, gxclread.c) + +Changes the command list storage implementation interface to pass the file +name to the clist_rewind and clist_fseek functions, for the benefit of OSs +that require closing and reopening a file to switch between reading and +writing. This is a NON-BACKWARD-COMPATIBLE change in a non-public +interface. (gxclio.h, gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c) + +Changes the get_outline procedure in Type 42 fonts to return the length of +the outline data as well as the pointer. This is a NON-BACKWARD-COMPATIBLE +change in a semi-public interface. (gxfont42.h, gstype42.c) + +</pre> + +<h2><a name="Version4.60"></a>Version 4.60 (limited) (3/2/97)</h2> + +<p> +This fileset moves color rendering up from the graphics state to the imager +state so that color rendering can happen after banding. It also shifts +image rendering to the rendering pass of banding for many common cases +(often referred to inaccurately as "high-level image" capability). The +changes involved are substantial and in some respects subtle, so +unfortunately it is quite possible that some new bugs have been introduced. + +<p> +This fileset also includes improvements to the new PCL XL driver +(pxlmono/color), and introduces an experimental PostScript driver (pswrite). + +<h3><a name="V4.60_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The argument list of colorimage was incorrect. (zcolor1.c) + - false .charboxpath incorrectly claimed to create the correct path +even when the CTM was not well-behaved. (language.txt) + - The discussion of the "main program" files was out of date. +(make.txt) + +Updates the OS/2 EMX documentation. (make.txt) + +Modifies the Aladdin Ghostscript Free Public License slightly so it may be +applied to other software packages. (PUBLIC) + +Updates inaccurate build documentation for several Unix platforms. +(make.txt, ansihead.mak, cc-head.mak, gcc-head.mak, libpng.mak) + +Notes a problem with the MIPSpro 7.1 compiler. (make.txt) + +</pre><h3><a name="V4.60_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Most makefiles didn't include version.mak. (msc.mak, +msvcwint.mak, os2.mak, tctail.mak, wctail.mak) + - There was an incorrect dependency for the Windows printer device. +(devs.mak) + +Moves the PDF writer to devs.mak. (devs.mak, int.mak) + +Updates the main VMS script to be structured like version.mak. (vms.mak) + +</pre><h3><a name="V4.60_Drivers"></a>Drivers</h3><pre> + +Factors out the stream-writing procedures from the PDF writer, so they can +be shared with the new PostScript writer. (gdevpdfs.h => gdevpstr.h, +gdevpdfx.h, gdevpsdf.h, gdevpdf.c, gdevpdfi.c, gdevpdfs.c => gdevpstr.c, +gdevpdft.c, gdevpsdf.c) + +Adds a PostScript writer (pswrite), similar to the PDF and PCL XL drivers. +Currently this handles fill/stroke graphics and Level 1 images; everything +else (including text) is turned into bitmaps. (devs.mak, gdevps.c) + +Changes the names of the PCL XL drivers from hpxmono/color to pxlmono/color. +(devs.mak, gdevpx.c) + +Updates the "vector" device support interface. THIS IS STILL SUBJECT TO +CHANGE WITHOUT NOTICE. (gdevvec.h, gdevpx.c, gdevvec.c) + +Makes the vgalib driver a page device. This seems bizarre, but it's +necessary for setpagedevice to work with it. (gdevvglb.c) + +Updates some drivers for the new color mapping interfaces. (gdevpx.c) + +Updates the user-contributed Canon LBP-8II and LIPS III driver. +(gdevlbp8.c) + +</pre><h3><a name="V4.60_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The workaround for Ultrix's incorrect implementation of sh -e +still didn't work. (unixtail.mak) + - The definition of offset_of didn't work on the Mac. (stdpre.h) + +Updates the OS/2 EMX linker command per input from a user. (os2.mak) + +</pre><h3><a name="V4.60_Fonts"></a>Fonts</h3><pre> + +Adds .pss (apparently used by Adobe for Multiple Master font instances) to +the list of extensions skipped by the GS_FONTPATH directory scanner. +(gs_fonts.ps) + +</pre><h3><a name="V4.60_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Programs that rebind null, true, and/or false could cause all +kinds of problems. We've only fixed a couple of the places that might be +affected (findfont, quit), by wrapping an explicit "systemdict begin/end" +around the code; fixing this completely would probably require wrapping this +implicitly around almost every pseudo-operator, which would be too +expensive. (gs_fonts.ps, gs_lev2.ps) + - In a Level 2 system, grestoreall stopped one level too early. +(zdevice2.c) + - setpagedevice didn't restore the stack properly if it got an +error. (gs_setpd.ps) + +Changes the GC pointer enumeration interface to reduce the number of +'discarding const' warnings. See under Library below. (igc.c) + +Updates the interpreter for the change in the imager / graphics state split. +(zpcolor.c) + +Makes the stack-restoring behavior of pseudo-operators non-optional. +(interp.c) + +</pre><h3><a name="V4.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - PDFDocEncoding and WinAnsiEncoding incorrectly had `minus' at +position 45 rather than `hyphen'. (gs_pdf_e.ps, gs_wan_e.ps) + +</pre><h3><a name="V4.60_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - A header file wasn't protected against double inclusion. +(stream.h) + - any_abs was redefined. (spngp.c) + - The CCITTFaxDecode filter didn't fully initialize the "previous +line" for 2-D decoding, so if the very first line of data was 2-D, an +out-of-bounds memory access could occur. (scfd.c) + +</pre><h3><a name="V4.60_Library"></a>Library</h3><pre> + +Fixes bugs: + - gs_image_next could read too much data, causing errors at the +interpreter level. (gsimage.c) + - The bitmaps stored in the Pattern cache were usually freed, +leaving dangling pointers. (gsdcolor.h, gxpcache.h, gxpcolor.h, gsstate.c, +gxpcmap.c) + - There was still one assignment to a const structure, and there +were some unnecessary const-discarding casts. (gxclread.c) + - If a character in a Type 3 font was defined by executing 'show' +type commands, charpath did the wrong thing (didn't pick up the paths +created by the inner show). Similarly, if it uses 'stroke', true charpath +did the wrong thing (appended the path rather than the strokepath path). +(gxchar.h, gschar.c, gspaint.c) + - A header file wasn't protected against double inclusion. +(gserror.h) + - The new fast implementation of rectfill didn't handle rectangles +with negative width/height. (bug introduced in 4.32) (gsdps1.c) + - Reading banded high-level images calculated the image height +incorrectly, (usually) causing a rangecheck. (gxclread.c) + - When reading band data, a memory fault could occur if the halftone +cache hadn't been allocated yet. (gxht.c) + - The imager state data for high-level images wasn't written soon +enough. (gxclimag.c) + - High-level images computed bounding boxes incorrectly, so they +could write some garbage data in the band list, and could also fail to write +some information. (gsmatrix.h, gxmatrix.h, gxclimag.c) + - High-level images wrote the raster value incorrectly in the band +list. (gxclimag.c) + - Images with non-zero initial source X and non-portrait orientation +were displaced on the page. (In practice, this only applied to some banded +high-level images.) (gximage.c) + - The bounding box device didn't forward output_page calls, causing +pages to be dropped or overprinted. (gdevbbox.c) + - The band renderer considered all non-zero return codes as errors, +rather than only negative codes. (gxclread.c) + - An unnecessary extern hadn't been removed. (gxclimag.c) + - Some macros didn't parenthesize uses of their arguments, causing +syntax errors. (gsrefct.h) + - The screen phase and color_info weren't set correctly when +rendering bands. (gsstate.h, gsht.c, gxclread.c) + - A header file didn't declare all the opaque types it used. +(gsdevice.h) + - Indexed color spaces didn't work with banded images. (They still +don't -- the check for writing the color space, and the code for reading the +table or map, are incomplete.) (gxclist.h, gxclpath.h, gxclimag.c, +gxclpath.c, gxclread.c) + +In preparation for implementing post-banding halftoning: + + - Moves color rendering information, including alpha value, from +graphics state to imager state; also moves the allocator pointer. This is +quite a subtle change, and may have a significant bug tail. (gxdcolor.h, +gxht.h, gxistate.h, gzstate.h, gschar.c, gsdps1.c, gspaint.c, gsstate.c, +gxclread.c) + + - Changes all the relevant color space and color mapping procedures +so they take a const gs_imager_state * (and, in some cases, a [const] +gx_device *) instead of a const gs_state *. This is a +non-backward-compatible change, but it only affects internal interfaces. +(gsdcolor.h, gxcmap.h, gxcspace.h, gxdcconv.h, gxdcolor.h, gxdither.h, +gxpcolor.h, gzht.h, gschar.c, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, +gscsepr.c, gsdevice.c, gsimage.c, gspcolor.c, gxcht.c, gxcmap.c, gxdcconv.c, +gxdcolor.c, gxht.c, gximage.c, gximage[2345].c, gxpcmap.c) + + - Changes the color and color space reference count adjustment +procedures similarly, to take a gs_memory_t * instead of a gs_state_t *. +(gxcspace.h, gscie.c, gscolor.c, gscolor2.c, gscsepr.c, gspcolor.c) + + - Changes the gs_halftone in the graphics state from being part of +the gs_state_contents to being an independent reference-counted object. +This too may have a significant bug tail. (gxht.h, gxistate.h, gsht.c, +gsstate.c) + + - Changes the image processing code so it no longer assumes that the +gs_imager_state is actually a gs_state. (gximage.h, gximage.c, gximage2.c, +gximage3.c, gximage4.c, gximage5.c) + + - Adds a unique ID value to device halftones, so that it's possible +to detect (non-)changes quickly. (gxdht.h, gsht.c) + +Finishes the code for writing and reading color rendering information in the +band list. This involves changes to several band list opcodes. (gsht.h, +gsht1.h, gxcldev.h, gxclist.h, gxclpath.h, gxdht.h, gzht.h, gsht.c, gsht1.c, +gxclbits.c, gxclimag.c, gxclist.c, gxclread.c) + +Changes the garbage collector pointer enumeration procedure interface +slightly to reduce the number of 'discarding const' warnings. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE for anyone who didn't use the +ENUM_PTRS_BEGIN[_PROC] macro to start a pointer enumeration procedure (which +should be no one). (gsstruct.h, gsmemory.c) + +Corrects a few more needlessly const-discarding casts. (gxfcache.h, +gxccache.c) + +Checks for file reading errors when rasterizing bands. (gxclread.c) + +</pre> + +<hr> + +<h2><a name="Version4.51"></a>Version 4.51 (limited) (2/9/97)</h2> + +<p> +This version contains a more reasonable high-level PCL XL driver. The VMS +build script is working again, we think. + +<h3><a name="V4.51_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The gsdll_h macro wasn't defined all the places it was needed. +(devs.mak, os2.mak) + +</pre><h3><a name="V4.51_Drivers"></a>Drivers</h3><pre> + +Continues to develop the "vector" driver infrastructure and the PCL XL +driver. EVERYTHING IN THESE FILES IS SUBJECT TO CHANGE WITHOUT NOTICE. +(gdevvec.h, gdevvec.c) + +Brings the PCL XL driver up to usable quality for graphics. Most +fill/stroke graphics, and portrait-orientation bitmap images up to 8 bits +per pixel, are converted directly to their PCL XL equivalents. Text is +still treated as bitmaps. Both gray-scale and color output are now +supported. (devs.mak, gdevpx.c) + +</pre><h3><a name="V4.51_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - When using gsos2.exe with gsdll2.dll, reducing the size of the +page bitmap caused a limitcheck error with the message + Failed to decommit memory in pm_alloc_bitmap, rc = 87 (gdevpm.c) + - The scripts that construct gconfig_.h failed on Ultrix, because +Ultrix's implementation of sh -e is incorrect. (unixtail.mak, ugcclib.mak) + - Some systems that have sys/times.h don't define CLK_TCK, making a +compilation fail. (time_.h) + +</pre><h3><a name="V4.51_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - An omitted semicolon wasn't detected by gcc. (idict.c) + +Removes a source of unnecessary duplication by getting the revision number +and date from version.mak. (gs.mak, int.mak, version.mak, gscdef.c) + +</pre><h3><a name="V4.51_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The minimum buffer sizes for the RunLengthDecode filter hadn't +been changed to reflect the algorithm improvement made in release 4.38. +(srld.c) + +Changes the RunLengthEncode filter so it can make progress with only a +2-byte output buffer. (srlx.h, srle.c) + +</pre><h3><a name="V4.51_Library"></a>Library</h3><pre> + +Fixes bugs: + - Because of a typo, the slow general algorithm was always used for +monochrome images. (Performance bug only, but a serious one.) (gximage2.c) + - Dots (zero-length lines with round caps and zero dot length) +caused an infinite loop. (bug introduced in 4.40) (gxstroke.c) + - Some image data unpacking procedures were always required, but +weren't always included. (bug introduced in 4.50) (gximage.c, gximage0.c, +gximage3.c) + - Images with 8 bits per pixel and non-identity Decode produced +garbage. (bug introduced later than 4.03) (gximage0.c) + - Some necessary casts and omitted punctuation weren't detected by +gcc. (gxpath.h, gsargs.c, gsstate.c, gxclread.c, gxpdash.c) + - The band list became confused if a band had no commands at all. +(gxclread.c) + - If a path included a closepath followed by a moveto to the same +point, it could be written incorrectly in the band list. (bug probably +introduced in 3.60) (gxclpath.c) + +Changes some internal computations for arcs from float to double for greater +accuracy. (gspath1.c) + +</pre> + +<h2><a name="Version4.50"></a>Version 4.50 (limited) (1/31/97)</h2> + +<p> +This release contains an experimental high-level PCL XL driver, a little +more support for CID/CMap fonts, and the usual bug fixes. NOTE: the VMS +build script is known to be out of sync with the makefiles again; we still +don't see any alternative to constant struggles with this problem. + +<h3><a name="V4.50_Documentation"></a>Documentation</h3><pre> + +Corrects the -h message, which gave an incorrect file name for the bug +report form. (imainarg.c) + +Removes documentation for 16-bit MS-DOS platforms with the Borland compiler. +(fonts.txt, make.txt, new-user.txt, use.txt) + +</pre><h3><a name="V4.50_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The Watcom library makefile didn't define the directory +information for libpng and zlib. (watclib.mak) + +Moves the selection of band list implementation (file- vs. RAM-based) and +the compression filter for RAM-based band lists up to the top-level +makefiles. Again, this is a NON-BACKWARD-COMPATIBLE procedure change. +(lib.mak, *.mak) + +Moves the selection of version number for all platforms (except VMS, as +usual) to a separate file. This will reduce the number of files that need +editing when the version number changes. (ansihead.mak, cc-head.mak, +gcc-head.mak, ugcclib.mak, version.mak, tar_cat) + +</pre><h3><a name="V4.50_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - An error in the (unsupported) SGI RGB driver could cause crashes +or incorrect output. (gdevsgi.c) + +Starts to create a framework for structured output ("vector") drivers (PDF, +PostScript, PCL XL, etc.) (gdevbbox.h, gdevvec.h, gsdcolor.h, gsstruct.h, +gxdevice.h, gdevvec.c) + +Moves default page size parameters to a more accessible header. (gdevprn.h, +gxdevice.h, gdevx.c) + +Adds a driver that produces properly structured PCL XL output. This is +highly experimental and not ready for use yet. (gdevpx.c) + +</pre><h3><a name="V4.50_Platforms"></a>Platforms</h3><pre> + +Removes support for 16-bit MS-DOS platforms with the Borland compiler. For +the moment, 16-bit MS Windows is still supported. (bc.mak, bcflags.mak, +bclib.mak, tc.mak) + +</pre><h3><a name="V4.50_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - File-based CIDFonts (with delayed, incremental loading of +character outlines) didn't work. (gs_cidfn.ps) + +Finishes implementing the definition of CMap resources, except for +rearranged fonts. (gs_cidfn.ps, gs_cmap.ps) + +Adds a little more CMap support code. (zcid.c) + +Removes the .setcurrentfile operator, since it doesn't solve the problem it +was intended to address. (zcontrol.c) + +Adapts the interpreter to use the new argument processing code. +(imainarg.c) + +</pre><h3><a name="V4.50_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The CCITTFaxDecode filter could access as much as 3 bytes beyond +the end of a buffer, causing an invalid memory access. (This is essentially +the same bug that was fixed for the CCITTFaxEncode filter in 4.38.) +(scfd.c) + +</pre><h3><a name="V4.50_Library"></a>Library</h3><pre> + +Fixes bugs: + - Painting an image without having set up any halftone could cause a +crash. (gxht.c) + - In a very obscure case, an occasional scan line of landscape +images could get corrupted. (gximage0.c) + - Because of a rounding error, patterns could fail to be painted in +certain cases. (gxpcolor.h, gspcolor.c, gxpcmap.c) + - Very large line widths or miter limits could cause the computation +of stroke expansion to overflow. (gxpaint.h, gdevbbox.c, gxclpath.c, +gxstroke.c) + - The phase could be incorrect for simple patterns. (gspcolor.c) + - The default implementation of copy_mono used an incorrect +RasterOp. (gdevdflt.c) + - The default implementation of fill_masked didn't increment the row +pointer, causing characters to appear as solid rectangular blocks. +(gxdcolor.c) + +Eliminates an unnecessary gsave and grestore from rectfill and rectstroke if +the path was null. (gsdps1.c) + +Adds a limit on the amount of space that the default (C heap) allocator will +allocate, and a record of the maximum amount allocated, to help testing +embedded products. (gsmemory.c) + +Changes the band list algorithm for deciding how many replicas of a halftone +tile to store in the tile cache. The previous algorithm was too liberal, +which could cause the cache to overflow and many unnecessary bitmaps to be +written in the band list. (gxclbits.c) + +Writes clipping with a rectangle more compactly in the band list. +(gxfixed.h, gxclpath.c) + +Adds new band list commands for representing 90- and 180-degree arcs +compactly. (gxclpath.h, gxclpath.c, gxclread.c) + +Repackages handling of general monochrome images, color images, and 12-bit +and interpolated images, so that they are included optionally rather than in +all configurations. (int.mak, lib.mak, gximage.h, gximage.c, +gximage[12345].c) + +Changes the structure definition for devices to include no-op pointer +enumeration and relocation, so they can have subclasses. (gxdevice.h) + +Adds a library facility for processing command line arguments with +@-expansion. (gsargs.h, gsargs.c) + +</pre> + +<hr> + +<h2><a name="Version4.41"></a>Version 4.41 (private) (1/21/97)</h2> + +<p> +This release adds a PCL XL output driver, and a few performance +improvements. + +<h3><a name="V4.41_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The zlib library used an incorrect header file when compiling. +(zlib.mak) + +Changes the names of the preprocessor symbols indicating the presence of +system header files to be consistent with the ones used by GNU configure. +(dvx-tail.mak, ugcclib.mak, unixtail.mak, vms.mak; dirent_.h, time_.h; +gp_unix.c) + +Changes the method for choosing the compression filter for RAM-based band +lists. This is a NON-BACKWARD-COMPATIBLE change in the makefile. (lib.mak) + +</pre><h3><a name="V4.41_Drivers"></a>Drivers</h3><pre> + +Adds black-and-white and 8-bit gray PCL XL (PCL 6) drivers for the LaserJet +5 and 6 family. This driver is extremely simple and just emits bitmaps; +future drivers will use more PCL XL high-level constructs. (gdevlj56.c) + +</pre><h3><a name="V4.41_Fonts"></a>Fonts</h3><pre> + +Updates the free font distribution to add the URW Grotesk and Antiqua fonts. + +</pre><h3><a name="V4.41_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - gs -h and -v returned with a non-zero exit code on all platforms. +(This is necessary under Windows, to keep the message visible on the screen, +but nowhere else.) (imainarg.c) + - Resizing a dictionary could exceed dict_max_size, causing memory +corruption. (dstack.h, idict.h, idict.c, zdict.c) + +Adds .setlinecap and .setlinejoin that can use the extended range of line +cap/join values, and redefines setlinecap and setlinejoin in terms of them. +(gs_init.ps, zgstate.c) + +</pre><h3><a name="V4.41_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The CCITTFaxDecode filter with EncodedByteAlign = true skipped to +a byte boundary before checking for an EOL. This may be wrong if EndOfLine += true; we aren't at all sure what should happen if EndOfLine = false. +(scfd.c) + +Adds a "no wrapper" option to the zlib streams, to optionally suppress the +time-consuming integrity checksum computation. (szlibx.h, szlibc.c, +szlibd.c, szlibe.c) + +</pre><h3><a name="V4.41_Library"></a>Library</h3><pre> + +Fixes bugs: + - Dashed lines with zero-length drawn segments (dots) that fell +exactly on a corner produced inappropriate output. (pcl/test19.pxs) +(gxpdash.c, gxstroke.c) + - Dashed lines didn't set the segment notes properly. (gxpdash.c) + - The bounding box device didn't free a bookkeeping structure at the +end of processing an image. (gdevbbox.c) + - Curve points could get computed incorrectly when using emulated +floating point. (gxpcopy.c) + - The 1-element cache for curve_x_at_y didn't work if Y was +decreasing. (gxfixed.h, gxpcopy.c) + +Distinguishes between error and informational exits. (stdpre.h) + +Defines and checks maximum values for line cap and join parameters. +(gslparam.h, gsline.c) + +Removes the 'not last' segment note, since it is not used for anything. +(gxpath.h, gspath1.c, gxpath2.c, gxpcopy.c, gxpflat.c, gxstroke.c) + +Changes the memory freeing algorithm for RAM-based band lists back to the +original one, since the "improved" one had more bugs than it was worth +chasing. (gxclmem.c) + +Speeds up the A * B / C algorithm a little. (gsmisc.c) + +Speeds up curve_x_at_y by recognizing more cases that don't require the slow +A * B / C algorithm. (gxpcopy.c) + +Changes the path filling code so it uses fill-by-trapezoids even if +fill_adjust is zero, as long as the flatness is at least 1 pixel. +(gxfill.c) + +Removes the (unneeded) floating point operations from gx_curve_log2_samples. +(gxpflat.c) + +Changes the memory-based implementation of band lists so that it constructs +the compressor and decompressor by calling procedures rather than +instantiating templates: this allows setting filter parameters to +non-default values. (gxclmem.h, gxcllzw.c, gxclmem.c, gxclzlib.c) + +</pre> + +<h2><a name="Version4.40"></a>Version 4.40 (private) (1/13/97)</h2> + +<p> +This version finally handles the last graphics model discrepancies between +PostScript and PCL, by correctly implementing null joins, minimum dot +lengths, and tangent-aligned curve ends. It also contains some significant +performance improvements, and as usual a few bug fixes. + +<h3><a name="V4.40_Documentation"></a>Documentation</h3><pre> + +Documents the new accurate curves and path dashing operators. +(language.txt) + +</pre><h3><a name="V4.40_Utilities"></a>Utilities</h3><pre> + +Adds switches for genconf to set and unset a prefix for file names. +(genconf.c) + +</pre><h3><a name="V4.40_Drivers"></a>Drivers</h3><pre> + +Adds recognition of the new Distiller 3.0 parameters to the PDF writer. +(None of them have any effect yet.) (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, +gdevpdfp.c) + +Converts all the output functions in the PDF writer from being file-based to +using streams, in anticipation of adding compression. (gdevpdfs.h, +gdevpdfx.h, gdevpdf*.c, gdevpdfs.c) + +</pre><h3><a name="V4.40_Interpreter"></a>Interpreter</h3><pre> + +Adds operators for accessing the new accurate curves flag in the graphics +state. (zgstate.c) + +Adds an operator for invoking gs_dashpath. (zpath1.c) + +</pre><h3><a name="V4.40_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Indexed color spaces whose base space was a CIE space caused an +error. (pdf_draw.ps) + +</pre><h3><a name="V4.40_Library"></a>Library</h3><pre> + +Fixes bugs: + - A pointer was declared const incorrectly. (gxcpath.c) + - Filling with a pattern often failed to pass a non-null bitmap ID, +causing excessive writing in the band list. (Performance bug only.) +(gspcolor.c) + - The bounding box device didn't discount copy_mono or draw_line +operations drawing in white. (gdevbbox.c) + - The bounding box device didn't read out the bounding box correctly +as the PageBoundingBox device parameter. (It did return it correctly +through the gx_device_bbox_bbox procedure.) (gdevbbox.c) + - The default implementation of fill_triangle drew nothing or +incorrect output if the corners of the triangle were specified in certain +orders (ax < 0 or bx < 0) (i.e., the previous "fix" had a bug). +(gdevddrw.c) + +Changes tile size from always being set in all bands to being 'known' by +bands individually. (gxclist.h, gxcldev.h, gxclbits.c, gxclist.c) + +Computes an additional value in advance when rendering images. (gximage.h, +gximage1.c, gximage2.c) + +Replaces some slow loops with calls of memmove. (gxclmem.c) + +Provides a fixed-point implementation of A * B / C for machines with slow +floating point. (gxfixed.h, gsmisc.c) + +Extends the "device color" type to implement filling masked regions as well +as rectangles. (gxdcolor.h, gdevdflt.c, gspcolor.c, gxcht.c, gxdcolor.c, +gxht.c) + +Makes unclipped monobit portrait and landscape images and image masks use +the new masked fill capability of device colors. (gximage.h, gximage.c, +gximage1.c, gximage2.c) + +Adds a macro for determining pointer alignment. (stdpre.h, gdevdflt.c) + +When floating point is slow, uses a different, faster algorithm for +gx_curve_x_at_y. (gxpcopy.c) + +Improves performance by adding a one-element cache for gx_curve_x_at_y. +(gzpath.h, gxpcopy.c) + +Reduces overhead when banded images are pre-rasterized (currently, always). +(gxclimag.c) + +Adds a rendering cost estimate field to each band in a band list. This +field isn't actually used for anything yet; eventually, the intent is that +bands with a high cost will get rendered, and stored in compressed form, +before starting the engine. (gxclist.h) + +Adds the concept of 'notes' for path segments, to allow remember what +segments constitute a single curve or arc. Currently we set these properly +for everything except dashed paths. (gxclpath.h, gxpath.h, gzpath.h, +gspath1.c, gxclpath.c, gxclread.c, gxpath.c, gxpath2.c, gxpcopy.c) + +When the dot length is non-zero, changes curve stroking to always use bevel +joins within each curve rather than the current join. This prevents a +"bristly" look with no join and butt caps. (gxstroke.c) + +Adds an "accurate curves" capability that makes the last line segment of a +flattened curve actually be tangent to the curve, which in turn makes +flat-end caps be correctly perpendicular to the tangent. (gxpath.h, +gxpcopy.c) + +Adds an "accurate curves" flag in the graphics state. (gsline.h, +gxclpath.h, gxistate.h, gsline.c, gspath.c, gspath1.c, gxclpath.c, +gxclread.c, gxfill.c, gxstroke.c) + +Changes the meaning of "no join" (gs_join_none) so that instead of producing +no join and butt caps, it produces whatever the current cap is. This is +compatible with the H-P definition. (gxstroke.c) + +Implements non-zero dot length for dash patterns. (gxpdash.c) + +Splits off the curve flattening algorithms into a separate file. +(gxpcopy.c, gxpflat.c) + +</pre> + +<hr> + +<h2><a name="Version4.39"></a>Version 4.39 (limited) (1/1/97)</h2> + +<p> +This version was created only to accompany a release of the PCL XL +interpreter. It was withdrawn the day after it was released, because the +tools used to produce it put the wrong files in the filesets. + +<h3><a name="V4.39_Documentation"></a>Documentation</h3><pre> + +Adds a more detailed description of the third-party ps_view viewer +interface. (new-user.txt) + +Corrects an error in a reference to the PSLRM. (lib.txt) + +Documents the change in .makeoperator. (language.txt) + +Updates the FTP location of the zlib sources. (zlib.mak) + +</pre><h3><a name="V4.39_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The Unix library makefile didn't include the necessary definitions +for libpng and zlib. (ugcclib.mak) + +Allows selecting the compression filters for memory-based band lists in the +makefile. Makes zlib (deflate) the default compressor for memory-based band +lists. (lib.mak) + +</pre><h3><a name="V4.39_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - prfont.ps wouldn't print unencoded characters in Type 42 fonts. +(prfont.ps) + +</pre><h3><a name="V4.39_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The H-P monochrome driver didn't put out enough initialization +commands at the beginning of each page to make each page printable +independently. (gdevdjet.c) + +</pre><h3><a name="V4.39_Interpreter"></a>Interpreter</h3><pre> + +Changes ref_stack_count_inline so it never does a procedure call. +(istack.h) + +Changes .makeoperator so that operator procedures save the stack depths, and +restore the stack pointers (if possible) if the operator encounters an +error. This is a NON-BACKWARD-COMPATIBLE CHANGE; it requires rewriting the +'stop' and 'stopped' pseudo-operators (and, if there were any, any other +pseudo-operators that interact with the error handling machinery) in C. +(gs_init.ps, interp.c, zcontrol.c) + +Adds recognition of the LeadingEdge, MediaClass, and RollFedMedia keys in a +page device dictionary, per the Adobe supplement for their version 2017 +interpreter. This involves a NON-BACKWARD-COMPATIBLE change to the +(undocumented) .matchpagesize operator. (gs_setpd.ps, zmedia2.c) + +Makes necessary changes for compatibility with the added parameters for the +zlib filters. (zfzlib.c) + +</pre><h3><a name="V4.39_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The zlib encoder returned EOFC when it should have returned 0. +(szlibe.c) + +Adds optional parameters and reset procedures for the zlib filters. +(szlibx.h, szlibc.c, szlibd.c, szlibe.c) + +</pre><h3><a name="V4.39_Library"></a>Library</h3><pre> + +Fixes bugs: + - Displaying characters with a non-standard RasterOp could cause an +invalid memory access. (gdevdflt.c) + - Banding sometimes used an incorrect RasterOp. (gxclread.c) + - When banding, mixing Patterns and halftones could confuse the +bookkeeping of tile size, leading to incorrect generation of the band list +and error messages or confusion when rasterizing. (gxclist.h, gxclbits.c, +gxclread.c) + - If only the dash pattern offset changed, and not any of the other +dash-related parameters, the new offset wasn't written in the band list, +causing incorrect output. (gxclpath.c) + - Oversized halftone tiles didn't report their error code properly. +(gxclbits.c) + - Oversized halftone tiles with RasterOp caused an error. +(gxclist.c) + - When banding, RasterOp transfers that crossed a band boundary +didn't access the correct source data on bands other than the first. +(gxclist.c) + - There were redundant copies of the code for writing a RasterOp +value in the band list. (gxclimag.c, gxclpath.c) + - Oversized patterns or halftones produced garbled output. +(gxclbits.c) + - The check for oversized patterns or halftones was slightly +incorrect, leading to the possibility of writing out a tile that would +overflow the reading buffer and corrupt memory. (gxclbits.c) + - When banding, RasterOp wasn't applied to fill and stroke +operations, and wasn't applied correctly to characters. (gdevdflt.c, +gxclimag.c, gxclread.c) + - The RasterOp-related optimizations for black-and-white images +sometimes produced incorrect output. (gximage.c, gximage2.c) + - The default implementation of fill_triangle didn't draw anything +if the corners of the triangle were specified in certain orders (ax < 0 or +bx < 0). (gdevddrw.c) + - Painting with a Pattern could pass out-of-range phase values to +driver procedures. (gspcolor.c) + - Because of an off-by-1 error, halftones or patterns passed through +the band list could write past the end of their allocated space in the band +tile cache, leading to incorrect output or possible arithmetic exceptions or +memory access errors. (gsbitops.c) + +Adds -Z: for printing only the minimal command list statistics. (gxclist.c, +gxclread.c) + +Expands band list tracing so it includes all of the data associated with the +command, not just the command name and a few command parameters. +(gxclread.c) + +Adds free lists for strings. Currently these are only used in +non-garbage-collected environments. (gxalloc.h, gsalloc.c, gsnogc.c) + +Adds a procedure for copying a path structure, and an (internal) accessor +for the current path in the graphics state. (gxpath.h, gspath.c, gxpath.c) + +Speeds up filling characters with halftones a little bit. (gdevdflt.c) + +Changes the memory-based implementation of band lists so it can use any +compression / decompression filter, so it only compresses when it has +allocated a specified amount of buffer storage, and so it releases its +buffer storage at the end of each page. (gxclmem.h, gxclmem.c) + +Speeds up counting the number of 1-bits in a byte, which is used in some +image processing algorithms. (gsbittab.h, gsbittab.c) + +Reduces the band list space required for changing tile size. (gxcldev.h, +gxclbits.c, gxclread.c) + +</pre> + +<h2><a name="Version4.38"></a>Version 4.38 (limited) (12/20/96)</h2> + +<p> +Adds support for a couple of undocumented features in Type 1 fonts. + +<h3><a name="V4.38_Interpreter"></a>Interpreter</h3><pre> + +Adds handling of the Type 1 font subroutineNumberBias (an optional entry in +the Private dictionary) and lenIV = -1 features at the interpreter level. +(zchar1.c, zfont1.c) + +</pre><h3><a name="V4.38_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The CCITTFaxEncode filter could access as much as 3 bytes beyond +the end of a buffer, causing an invalid memory access. (scfe.c) + +Changes the RunLengthDecode filter so it can make progress (produce output) +with only a 1-byte output buffer. (srlx.h, srld.c) + +</pre><h3><a name="V4.38_Library"></a>Library</h3><pre> + +Fixes bugs: + - The sine and cosine of multiples of 90 degrees weren't exact. +(gxfarith.h, gsmisc.c) + - The expanded bounding box computation for strokes didn't take into +account the possibility of overflow. (gxstroke.c) + - The allocator didn't fill freed strings with the 'free' mark. +(gsalloc.c) + - When using a pattern with RasterOp, the phase was computed +incorrectly, leading to anomalous filling patterns. (gspcolor.c) + - Patterns with a non-zero translation in the matrix passed to +makepattern didn't translate the pattern origin properly. (gxcolor2.h, +gxpcolor.h, gspcolor.c) + +Adds a subroutineNumberBias field to Type 1 fonts. This is an undocumented +feature of the Type 1 font format. (gxfont1.h, gstype1.c) + +Interprets lenIV = -1 in Type 1 fonts as meaning that the CharStrings are +unencrypted. This too is an undocumented feature of the Type 1 format. +(gxfont1.h, gxtype1.h, gstype1.c, gstype2.c) + +Changes gs_clippath so it returns more reasonable outlines. (There are too +many programs that rely on being able to stroke the result of clippath, even +though both the Adobe and H-P literature specifically say the results are +unpredictable.) (gxcpath.h, gxcpath.c) + +</pre> + +<h2><a name="Version4.37"></a>Version 4.37 (limited) (12/10/96)</h2> + +<p> +This version implements separate halftone phase for source and texture, +required for PCL XL implementation. + +<h3><a name="V4.37_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Loading a native TrueType font without a 'post' table caused an +error. (gs_ttf.ps) + +</pre><h3><a name="V4.37_Interpreter"></a>Interpreter</h3><pre> + +Extends the interpreter to handle the new separate halftone phases for the +RasterOp source and texture. (gs_dps1.ps, zdps1.c) + +Makes a small change to accommodate a library change supporting Type 2 +charstrings. (zfont1.c) + +</pre><h3><a name="V4.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Implements the FontFile2 key for embedded TrueType fonts. (pdf_font.ps) + +Starts to implement the FontFile3 key for compressed Type 1 fonts. This +code is currently disabled, because none of the necessary underlying C is +written yet. (pdf_font.ps) + +</pre><h3><a name="V4.37_Library"></a>Library</h3><pre> + +Fixes bugs: + - The floating point emulator often returned incorrect results (too +many bugs to list). (This is not used in any standard configuration.) +(gsfemu.c) + - The new copy_for procedure for gstates incorrectly declared an +argument as const. (gxstate.h, gsstate.c) + - If a curve had to be split twice along the same axis to make it +monotonic, the split points could still be returned in the wrong order, +possibly causing curved edges to turn into straight lines, and the algorithm +still produced the wrong results if the curve had to be split twice along a +single axis. This is the second time we have "fixed" these problems and the +4th time we have "fixed" the curve monotonizing algorithm. (gxpcopy.c) + - Setting halftones cause a memory leak, because the subsidiary +objects of the device halftone weren't freed properly. Fixing this required +changing the graphics state implementation from allocating a device halftone +for each gstate to managing the device halftone with reference counting. +(gxdht.h, gzstate.h, gsht.c, gsstate.c) + +Provides an optimized version of ldexp for FPU-less configurations, and +changes one key algorithm to use it. (gxfixed.h, gsmisc.c, gxpcopy.c) + +Speeds up imagemask with a halftone a little. (This will eventually require +more serious optimization.) (gximage2.c) + +Adds a -Z* switch for tracing varieties of image rendering. (gximage.c) + +Recognizes that if the logical operation is equivalent to D = S (after +accounting for a constant texture, if any), or if it is equivalent to D = ~S +or D = D {&,|}{S,~S} and D and S are both monobit and both colors are pure, +imaging with RasterOp can be executed without invoking RasterOp. (gsropt.h, +gximage.c) + +Makes coordinate transformations with landscape matrices execute as fast as +with portrait matrices. (gxmatrix.h, gscoord.c, gsmatrix.c) + +Adds some sketch code for interpreting Type 2 charstrings. It compiles, but +it makes no pretense of being runnable. (gstype1.h, gxop1.h, gxtype1.h, +gstype2.h, gxfont1.h, gstype1.c, gstype2.c) + +Extends the library to allow setting separate halftone phases for the +RasterOp source and texture, which is needed to implement halftone screens +that behave like those in H-P's PCL XL printers. (gscsel.h, gsstate.h, +gxcmap.h, gxcspace.h, gxdcolor.h, gxdither.h, gxpcolor.h, gzht.h, gzstate.h, +gscie.c, gscsepr.c, gsht.c, gspcolor.c, gxcht.c, gxcmap.c, gxdcolor.c, +gxht.c, gximage.c, gximage[2345].c, gspcmap.c) ****** STILL NEED TO UPDATE +BANDING CODE, grep FOR phase ****** + +Removes the rc_header member from the gs_halftone structure, since we don't +need it after all. (gxht.h) + +</pre> + +<h2><a name="Version4.36"></a>Version 4.36 (limited) (12/3/96)</h2> + +<p> +This version fixes a number of library bugs related to RasterOp, Patterns, +and memory management. + +<h3><a name="V4.36_Documentation"></a>Documentation</h3><pre> + +Changes the definition of texture transparency to match the peculiar H-P +specification. (drivers.txt, language.txt) + +</pre><h3><a name="V4.36_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - x_get_bits didn't flush updates to the frame buffer, leading to +possibly incorrect data being returned. (gdevx.c) + - x_get_bits added padding to the scan line being copied, possibly +corrupting memory. (gdevx.c) + +Changes the x11mono driver to define white = 0, black = 1 to more closely +model black-and-white printers. (This is an internal change that doesn't +affect the output.) (gdevxalt.c) + +</pre><h3><a name="V4.36_Interpreter"></a>Interpreter</h3><pre> + +Removes some code that is no longer needed, by virtue of the fix for the +memory leak in Pattern remapping. (zpcolor.c) + +</pre><h3><a name="V4.36_Library"></a>Library</h3><pre> + +Fixes bugs: + - Patterns wider than 1024 bits caused a rangecheck. (gxclip2.h, +gxclip2.c) + - Dash patterns never got freed. The fix for this slows down gsave +and grestore slightly, but we don't see any way around it. (gsline.c, +gsstate.c) + - If the CTM was very non-uniform in X and Y, stroke sometimes +didn't recognize thin lines as being thin, leading to dropouts. +(gxstroke.c) + - RasterOps that didn't use S or T still took S or T transparency +into account. (gdevmrop.c) + - RasterOps with no source didn't handle the possibility that the +device color for black might have a value other than 0. (gxdcolor.h, +gspcolor.c, gxcht.c, gxdcolor.c, gxht.c) + - White pixels in halftones on black-and-white devices apparently +are *not* supposed to be treated as opaque for RasterOp. (gxcht.c, gxht.c) + - clippath caused memory to be lost until a restore or a garbage +collection. (gspath.c) + - Clipping lists weren't ever freed, and clipping paths sometimes +weren't freed, causing memory to be lost until a restore or a garbage +collection. (gzacpath.h, gxacpath.c, gxcpath.c) + - Freeing a pattern instance referenced a pointer after it had been +freed, causing an invalid memory access. (gspcolor.c) + - Remapping a Pattern color lost track of the temporary gstate, +memory devices, and possibly the mask, causing memory to be lost until a +restore or GC. (gxpcolor.h, gxpcmap.c) + - Remapping a Pattern color could cause paths to be marked as +shared, preventing them from being freed until a restore or GC. (gxpcmap.c) + +Enhances the non-tracing garbage collector so that if there are no strings +allocated at all, it resets the string allocation pointers. (gsnogc.c) + +Optimizes the black-and-white RasterOp implementation by recognizing cases +that can be implemented directly by fill_rectangle, copy_mono, or +tile_rectangle. (gdevmrop.h, gsropt.h, gdevmrop.c, gsroptab.c) + +Changes -ZA so it no longer produces [P] tracing messages for path +construction. (gxpath.c) + +Adds a gx_pattern_cache_winnow procedure for selectively removing entries +from the Pattern cache, similar to gx_purge_selected_cached_chars. +(gscolor2.h, gxpcolor.h, gxpcmap.c) + +Adds the Pattern UID to Pattern cache entries. (gxpcolor.h, gxpcmap.c) +****** MUST HANDLE XUID POINTERS ON GC (RELOC) & RESTORE (CLEAR LIKE HT +CACHE) ****** + +Makes gs_gstate free the path representation of the clipping path if it's a +rectangle, since reconstructing it is cheap and otherwise the path segments +would not be freeable until a restore or GC. (gsstate.c) + +Extends the "client data" interface for gstates so that the copy procedure +can determine why it is being called. (gxstate.h, gsstate.c) + +</pre> + +<h2><a name="Version4.35"></a>Version 4.35 (limited) (11/24/96)</h2> + +<p> +This contains the usual bug fixes, and two minor enhancements: an option for +handling EPSF files with binary headers, and support for file-based +resources. + +<h3><a name="V4.35_Documentation"></a>Documentation</h3><pre> + +Documents the new EPSF-reading capability. (gs.mak) + +</pre><h3><a name="V4.35_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Some obsolete definitions were accidentally left in the rules for +compiling fonts into the executable. (int.mak) + +</pre><h3><a name="V4.35_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - initgraphics left the current color space in an inconsistent +state. (bug introduced in 4.32) (zgstate.c) + - restore didn't properly rebind FontDirectory to either Local or +SharedFontDirectory according to the current VM selection. (gs_dps1.ps) + - If FontDirectory was redefined, many things broke. (gs_ccfnt.ps, +gs_dps1.ps, gs_fonts.ps, gs_pdfwr.ps) + - If a resource provided a file name but the file couldn't be +opened, an error occurred. (gs_res.ps) + - flushfile didn't work with procedure-based streams. (zfileio.c) + +Adds a feature (epsf.dev) that allows the interpreter to recognize and +handle MS-DOS EPSF files with a binary header. (int.mak, gs_epsf.ps, +gs_init.ps, pdf_main.ps) + +Adds (internal) .getuserparam and .getsystemparam operators for getting the +value of a single user or system parameter. (gs_lev2.ps, zusparam.c) + +To support file-based resources, implements the FontResourceDir, +GenericResourceDir, and GenericResourcePathSep system parameters, and +ResourceFileName for the built-in resource categories. (gs_init.ps, +gs_lev2.ps, gs_res.ps) + +</pre><h3><a name="V4.35_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The 2-D CCITTFaxDecode filter became confused if a buffer boundary +fell between a horizontal make-up code and its terminating code, typically +causing an ioerror. (scfd.c) + +</pre><h3><a name="V4.35_Library"></a>Library</h3><pre> + +Fixes bugs: + - Using the null color could confuse the reference counts for color +spaces, causing memory access errors. (gscolor.c) + - Images with CombineWithColor = true caused memory access error, +because a structure element wasn't initialized. (gdevmrop.c) + - gs_setnullcolor tried to return an error code, even though it was +declared as returning void. (Why doesn't gcc catch this??) (gscolor.h, +gscolor.c) + - gs_setnullcolor was declared inconsistently as taking a const or +non-const argument. (gscolor.h) + - Small color tiles in the band list were not read in correctly. +(gxclread.c) + - The band list could get confused, causing ioerrors, invalid memory +accesses, or garbled output, because the algorithms for computing the size +of bitmaps when writing and when reading had gotten inconsistent. This code +has been broken and "fixed" at least 4 or 5 times. (gxcldev.h, gxclbits.c, +gxclread.c) + - When using banding, characters that extended off the page +vertically in the -Y direction came out garbled. (gxclimag.c) + - The bounding box device didn't compute the box correctly for +trapezoids. (gdevbbox.c) + - The fastest case of rendering monochrome images could cause +unaligned data accesses. (bug introduced recently.) (gximage.h, +gximage1.c) + - TrueType characters with no contours could cause an invalid memory +access. (gstype42.c) + - Composite TrueType characters weren't rendered properly. +(gstype42.c) + +Adds a get_outline procedure to the Type 42 font header, to provide a +callback for getting the outline data for a glyph. (gxfont42.h, gstype42.c) + +</pre> + +<h2><a name="Version4.34"></a>Version 4.34 (limited) (11/18/96)</h2> + +<p> +This release adds a little more support for CID-keyed fonts and for PCL +emulation, and a bit more of the machinery for passing images through the +band list. + +<h3><a name="V4.34_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The RasterOp source device wasn't listed as an internal device in +drivers.txt. (drivers.txt) + +Corrects a statement regarding the pstotext license. (new-user.txt) + +</pre><h3><a name="V4.34_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The Watcom makefile for the library didn't work properly if +certain variables were overridden from the command line. (watclib.mak) + - The library code inadvertently depended on an interpreter header +file. (*.mak) + +</pre><h3><a name="V4.34_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Some very picky compilers complained about assigning 0 to a +variable of an enum type. (gdevpdfx.h, gdevpdf.c) + +</pre><h3><a name="V4.34_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Some very picky compilers didn't like a cast from a pointer type +to an int type. (idebug.c) + - Some very picky (and non-ANSI-compliant) compilers didn't allow +assigning an int to a variable of enumerated type. (zfont2.c, zht2.c) + - The library code inadvertently depended on an interpreter header +file. (iref.h) + +Restructures the font building code slightly to support CID fonts better. +(gs_cidfn.ps, bfont.h, zcid.c, zfont0.c, zfont1.c, zfont2.c, zfont42.c) + +Adds a .setcurrentfile operator to allow disk-based fonts to keep their file +open. (gs_cidfn.ps, zcontrol.c) + +</pre><h3><a name="V4.34_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - Some very picky compilers didn't like the computation (const byte +*)0 - 1. (stream.c) + - A cast to ulong was omitted. (smtf.c) + - Some compilers got confused by typedefs in the zlib header files. +(szlibd.c, szlibe.c) + +</pre><h3><a name="V4.34_Library"></a>Library</h3><pre> + +Fixes bugs: + - A header file didn't select the proper system header on all POSIX +systems. (malloc_.h) + - A subclass/superclass type discrepancy upset some compilers. +(gsline.h, gsline.c, gxpdash.c) + - Some very picky compilers didn't accept the previous definition of +the offset_of macro. (stdpre.h) + - Some very picky (and non-ANSI-compliant) compilers didn't like +mixing int and enumerated types. (gsropt.h, gzstate.h, gdevmrop.c, +gdevrrgb.c, gsrop.c, gxclist.c) + - A cast was missing. (gslib.c) + - The gs_setxxxtransparent procedures interpreted their argument +backwards (i.e., as "opaque" rather than "transparent"). (gsrop.c) + - Intersecting clipping paths didn't reset the logical operation to +the default, causing a possible crash. (gsrop.h, gsrop.c, gxacpath.c) + - Pattern accumulation didn't reset the logical operation to the +default, possibly causing incorrect output. (gspcolor.c) + - If a Type 1 character ended with a curve and a closepath, a +microscopic line could result, causing output anomalies. (gstype1.c) + - Stroking a path with a mix of thin and non-thin lines could cause +extraneous lines to appear. (gxstroke.c) + - Zero-width rectangles were painted even when fill adjustment was +turned off. (gxpaint.c, gxstroke.c) + - The algorithm for dividing a curve into monotonic pieces could +produce incorrect results, causing anomalies when filling curved regions +with zero fill adjustment. (gxpcopy.c) + - The algorithms for outside clipping were wrong, causing some +inside regions not to be clipped. (gxcpath.c) + - The white pixels in halftones weren't treated as unconditionally +opaque for RasterOp. (gxht.c, gxcht.c) + - Images with RasterOp didn't work properly. (gdevmrop.c, +gximage[2345].c, gxpcmap.c) + - The library code inadvertently depended on an interpreter header +file. (gxalloc.h, genarch.c) + - An important optimization for stroking (recognizing portrait, +landscape, and unscaled CTMs) was commented out. WE DON'T HAVE ANY RECORD +OF WHY WE DID THIS, AND RESTORING IT MAY INTRODUCE NEW BUGS. (gxstroke.c) + - Bitmap images with non-zero data_x values were passed through the +band list incorrectly, possibly causing vertical "streaks" in the output. +(gxcldev.h, gxclread.c) + - If a curve had to be split twice along the same axis to make it +monotonic, the split points were returned in the wrong order, possibly +causing curved edges to turn into straight lines. (gxpcopy.c) + +Changes the debugging printout format for paths so the output can be +processed mechanically more easily. (gxpath.c) + +Adds gs_glyphpath, like charpath but taking a glyph rather than a string of +character codes. (gschar.h, gschar.c) + +Adds an internal concept of a "null color", a color that doesn't actually +mark any pixels. (gscolor.h, gsdcolor.h, gxdcolor.h, gscolor.c, gxdcolor.c) + +Takes the next incremental steps towards passing images through the band +list: + - Implements the ability to pass some color mapping information +(transfer functions, black generation, undercolor removal) through the band +list. (gxclist.h, gxclimag.c, gxclist.c, gxclread.c) + +</pre> + +<h2><a name="Version4.33"></a>Version 4.33 (limited) (11/6/96)</h2> + +<p> +This release fixes yet another obscure bug in the recently rewritten fast +loops for image rendering. (These loops have caused more problems than any +other single module of the entire library.) It also adds preliminary +support for CID-keyed fonts (CIDFonts only, not CMaps yet) and some library +extensions for supporting HP-GL/2. + +<h3><a name="V4.33_Documentation"></a>Documentation</h3><pre> + +Adds considerable new material to the C style document. (c-style.txt) + +Changes -cckr to -ansi in the SGI build procedure. (make.txt) + +Corrects an error in the description of the .type42execchar operator. +(gs_typ42.ps) + +</pre><h3><a name="V4.33_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The 'man' pages were installed in the documentation directory as +well as in the man directory. (unix-end.mak) + +</pre><h3><a name="V4.33_Interpreter"></a>Interpreter</h3><pre> + +Adds support for CID-keyed fonts. There is no CMap support yet, and some +things are done with hacks. (int.mak, gs_cidfn.ps, gs_cmap.ps, ichar.h, +zchar.c, zchar2.c, zchar42.c, zfont2.c, zfont42.c, zcid.c) + +Adds operators for accessing the new dash adaptation and dot length +parameters in the graphics state. (gs_init.ps, zgstate.c) + +</pre><h3><a name="V4.33_Library"></a>Library</h3><pre> + +Fixes bugs: + - The fast case of monobit image rendering could overwrite memory. +(gximage1.c) + - The new fast implementation of rectfill didn't check for +fixed-point overflow. (gsdps1.c) + - Internally, fonts with no name all appeared to have the same name, +possibly confusing the xfont machinery. (gxccman.c) + - A cast to remove const was omitted, upsetting some compilers. +(gximage1.c) + - The driver's stroke_path routine was not called if the logical +operation was not the default one. (gxpaint.c) + +Adds support for CID-keyed fonts. (gsccode.h, gxfont.h) + +Adds a new "dash pattern adaptation" flag in the imager state. When this +flag is set and a dash pattern is in effect, each line segment will receive +an integral number of repetitions of the dash pattern (if necessary, rounded +up). (gsline.h, gxline.h, gsline.c, gsstate.c, gxpdash.c) + +Adds a new "dot length" parameter to the imager state. If this parameter is +non-zero, it gives a length for rendering dots (zero-length lines). See +language.txt for details. (gsline.h, gxline.h, gsline.c, gsstate.c, +gxstroke.c) + +Extends band lists so they can handle dash pattern adaptation and dot +length. (gxcldev.h, gxclpath.h, gxclpath.c, gxclread.c) + +Adds a floating point emulator to allow more realistic profiling of +configurations without a FPU. (gsfemu.c) + +</pre> + +<h2><a name="Version4.32"></a>Version 4.32 (limited) (11/1/96)</h2> + +<p> +This fixes a couple more bugs, most notably the infamous "pixel stripe" bug. + +<h3><a name="V4.32_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The documentation said that Ghostscript could not interpret +encrypted PDF files. (language.txt) + - A number of Ghostscript's extensions to the PostScript language +were missing. (language.txt) + +</pre><h3><a name="V4.32_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A compiler complained about initializing an unsigned variable with +a negative value. (gdevx.c) + - An off-by-1 allocation error could cause memory overwriting. +(gdevepsc.c) + +</pre><h3><a name="V4.32_Platforms"></a>Platforms</h3><pre> + +Declares a pointer 'const' that is actually only used for reading. +(gp_unifs.c) + +</pre><h3><a name="V4.32_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The code for adding nominal UnderlinePosition and +UnderlineThickness entries to FontInfo assumed (incorrectly) that all Type 1 +fonts had FontBBox entries. (gs_type1.ps) + +Brings CIDFont support closer to reality. It doesn't work yet, though. +(gs_cidfn.ps, gs_fonts.ps, gs_init.ps, gs_res.ps, gs_typ42.ps) + +</pre><h3><a name="V4.32_Interpreter"></a>Interpreter</h3><pre> + +Removes a redundant implementation of initgraphics. (gs_init.ps) + +Speeds up rectfill a little for the common case (4 numbers on the stack). +(zdps1.c) + +</pre><h3><a name="V4.32_Library"></a>Library</h3><pre> + +Fixes bugs: + - Zero-width, 1-bit-deep, landscape or portrait images could +overwrite memory ad lib. (gximage1.c) + - A procedure was declared 'static' inconsistently, upsetting many +compilers (but not gcc, which, in contradiction to the ANSI standard, +doesn't check this properly). (gxcpath.c) + - A local variable was initialized with a value computed from a +variable that hadn't been set yet, leading to possibly incorrect coloring of +the first run of pixels in images with 12 bits per sample. (gximage4.c) + - A compiler complained about initializing an unsigned variable with +a negative value. (shcgen.c) + - A rounding problem could produce a vertical stripe of 1 (or on +very large images possibly more) incorrect pixels at the right edge of a +1-bit-deep image. (gxdda.h, gximage1.c) + +Speeds up gs_rectfill substantially for the portrait/landscape case with a +rectangular clipping region. (gsdps1.c) + +Adds a parameter so we can include gx_line_params in subclasses. (gzline.h) + +</pre> + +<h2><a name="Version4.31"></a>Version 4.31 (limited) (10/27/96)</h2> + +<p> +This is primarily a bug fix release for 4.30, which we had hoped wouldn't be +necessary.... + +<h3><a name="V4.31_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The comment describing the order of coefficients in a CTM written +on the band list was wrong. (gxclpath.h) + +</pre><h3><a name="V4.31_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - bug-form.txt wasn't installed by 'make install'. (unix-end.mak) + - The default flags in ugcclib.mak didn't take the gcc code +generation bug into account. (ugcclib.mak) + +</pre><h3><a name="V4.31_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - MetroWerks CodeWarrior predefines true and false, causing +compilation errors on the Mac. (stdpre.h) + +</pre><h3><a name="V4.31_Interpreter"></a>Interpreter</h3><pre> + +Updates code for the change in the ENUM_PTR macros. (iscan.c) + +Changes the allocator to keep track of "lost" ref space separately, to allow +an independent check on its activities. (gxalloc.h, ialloc.c, isave.c) + +Changes the garbage collector API slightly to allow implementation of the +API in applications other than PostScript interpreters. (ivmspace.h, +ireclaim.c, igc.c) + +</pre><h3><a name="V4.31_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Implements the PDF 1.1 BX and EX operators. (pdf_base.ps, pdf_main.ps) + +</pre><h3><a name="V4.31_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - Some (harmless) pointer incompatibilities upset some compilers. +(szlibd.c, szlibe.c) + +Updates code for the change in the ENUM_PTR macros. (stream.c) + +</pre><h3><a name="V4.31_Library"></a>Library</h3><pre> + +Fixes bugs: + - A label in the ENUM_PTR procedure generating macros was often not +referenced, leading to compiler warnings. (gsstruct.h, gxxfont.h, +gdevmem.c, gschar.c, gscolor2.c, gsdevice.c, gsfont0.c, gsht.c, gsstate.c, +gxcpath.c, gximage.c) + - Using the gstate version of setflat rather than the imager version +caused compiler warnings (and, in some cases, errors). (gstype1.c) + - Non-standard ImageMatrix values for banded images didn't work. +(This wasn't actually used.) (gxclread.c) + - imagemask with a halftone and portrait orientation colored some +inappropriate pixels. (bug introduced in 4.30) (gximage2.c) + - When banding, if a character straddled a band boundary the first +time it occurred, all occurrences of it were clipped. (bug introduced in +4.2x or 4.30) (gxclimag.c) + - Degenerate clipping rectangles sometimes got turned into +non-degenerate ones by swapping the min and max coordinates. (gxcpath.c) + - Resizing an object either allocated a new object unnecessarily +(performance bug only), or in very rare cases could corrupt memory. +(gsalloc.c) + - Very small objects didn't get put on a free list when freed. +(Performance bug only.) (gsalloc.c) + - Some pointers were incorrectly declared 'const', upsetting some +compilers. (gxclread.c) + +Adds more tracing output for -ZL. (gxclread.c) + +Changes the -Za tracing output slightly to aid mechanical analysis of +allocation traces: allocation events now always include a '+', deallocation +events always include a '-', and the address is always the address of the +object data and not the header. (gsalloc.c, gsmemory.c) + +Changes the allocator to keep track of "lost" object and string space +separately, to allow an independent check on its activities. (gxalloc.h, +gsalloc.c) + +Changes the allocator to use 'memmove' in an obvious place. (gsalloc.c) + +Provides a garbage collector API at the library level to allow +implementation of the API in applications other than PostScript +interpreters. (gsgc.h) + +</pre> + +<h2><a name="Version4.30"></a>Version 4.30 (limited) (10/23/96)</h2> + +<p> +The main purpose of this release is to implement a substantial change in the +"high level" image API, after which we believe this API will be stable. + +<h3><a name="V4.30_Documentation"></a>Documentation</h3><pre> + +Documents the changes in the begin_image and image_data device procedures. +(drivers.txt) + +</pre><h3><a name="V4.30_Drivers"></a>Drivers</h3><pre> + +Speeds up the PDF writer a little by reducing the amount of allocation, +which was causing very frequent garbage collections. (gs_pdfwr.ps, +gdevpdft.c) + +Updates the PDF writer for the change in begin_image/image_data. +(gdevpdfi.c) + +</pre><h3><a name="V4.30_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - Some versions of the SGI IRIX compiler have a bug that causes them +to try to expand macros that require arguments even when the macro name +isn't followed by a left parenthesis. (gdevsgi.h, gdevsgi.c) + - The IBM RS6000 compilers now provide <stdlib.h>, so our +definitions of malloc and free caused a conflict. (malloc_.h) + +</pre><h3><a name="V4.30_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Many Fontmaps included obsolete references to an old +Helvetica-Narrow font. (Fontmap.*) + +Makes the GS_FONTPATH directory scanner a little more liberal about what +files it examines: it will now examine any file whose first line begins with +%!PS-Adobe or %!FontType. (gs_fonts.ps) + +To match an apparent Adobe convention, augments findfont so that if a font +isn't in the Fontmap, it will try to load a file whose name is the same as +the font name. (gs_fonts.ps) + +To make some questionable Apple font inquiry code work, augments the +FAKEFONTS facility so that it sets the FontType of fake fonts to 1. +(gs_fonts.ps) + +</pre><h3><a name="V4.30_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - .checkpassword, .putdeviceparams, .putdevparams, setsystemparams, +and setuserparams didn't free the results byte array, causing a memory leak +(until the next garbage collection). (zdevice.c, ziodev.c, zusparam.c) + +</pre><h3><a name="V4.30_Library"></a>Library</h3><pre> + +Fixes bugs: + - The code for emulating floating point multiplication with +conversion to fixed point didn't detect overflow correctly, which could +produce incorrect results instead of a limitcheck. (gsmisc.c) + - A macro cast a pointer incorrectly, leading to spurious compiler +warnings. (gxfixed.h) + - The code for emulating fixed-to-float conversion computed the +exponent incorrectly. (gsmisc.c) + - The algorithm for advancing a DDA a given number of steps (not +actually used anywhere before this version) was wrong. (gxdda.h) + - The clipping box returned by clipping devices was incorrect, +causing parts of the page to disappear. (bug introduced in 4.20) +(gxcpath.c) + +Changes the begin_image and image_data device procedures: + - begin_image now takes an optional subrectangle instead of a set of +shape flags. + - image_data now always takes complete rows of pixels, takes a +source X offset, and returns 1 when it has received all the data. + +The change in begin_image and image_data is a NON-BACKWARD-COMPATIBLE CHANGE +IN A PUBLIC INTERFACE; however, this interface was still designated "subject +to change", per the notes for release 3.67 and the documentation in +drivers.txt. (gsiparam.h, gxclpath.h, gxdda.h, gxdevice.h, gximage.h, +gdevbbox.c, gdevnfwd.c, gsimage.c, gxclimag.c, gxclread.c, gximage.c, +gximage?.c) + +</pre> + +<hr> + +<h2><a name="Version4.21"></a>Version 4.21 (limited) (10/17/96)</h2> + +<p> +The purpose of this release is to fix bugs reported in 4.0x, 4.10, and 4.20. + +<h3><a name="V4.21_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The Ghostscript man page had a .TH in the middle. (gs.1) + +</pre><h3><a name="V4.21_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The shared version of zlib was always called libgz; on most +systems, it is now called libz (but not on Red Hat Linux, where libz is a +library for dealing with time zones). (*.mak, gs.mak, libpng.mak, zlib.mak) + - The pdf2dsc.1 man page wasn't installed on Unix systems. +(unix-end.mak) + - font2c generated procedures named gsf_xxx, but genconf assumed +they were named gs_f_xxx. (int.mak) + +</pre><h3><a name="V4.21_Drivers"></a>Drivers</h3><pre> + +Updates the user-contributed LBP-8II driver to correct unspecified problems. +(gdevlbp8.c) + +Adds a user-contributed driver for Avance Logic SuperVGA cards. +(gdevsvga.c, devs.mak) + +</pre><h3><a name="V4.21_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - On Windows NT, a 32-bit parameter was truncated to 16 bits, +preventing drawing of scroll bars of the image window when the window is +uncovered. (dwimg.cpp) + +</pre><h3><a name="V4.21_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The free URW Grotesk and Antiqua fonts were omitted from the +distribution. + +</pre><h3><a name="V4.21_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Defining a new global instance of a built-in resource +(ColorRendering, ColorSpace, Form, Halftone, Pattern, ProcSet) caused an +invalidaccess error. (gs_res.ps) + - pathbbox with no current path left an extra item on the stack when +the error occurred. (gs_init.ps) + - findresource for an undefined resource instance didn't preserve +the contents of the stack. (gs_res.ps) + +Adds a new file providing a procedural interface with a very rudimentary +form of job encapsulation. (gserver.c) + +Changes the initial value of MaxOpStack to 20000, for the sake of a few +badly-behaved files. (gs_init.ps, pdf_base.ps) + +</pre><h3><a name="V4.21_Library"></a>Library</h3><pre> + +Fixes bugs: + - If the image operators failed to allocated their bookkeeping +structure, the result was a crash rather than VMerror. (gximage.c) + - gx_default_fill_triangle (currently used only to implement the +fastest case of stroke) had a typo that could cause a numeric exception or +incorrect output, and another typo that could produce incorrect output. +(gdevddrw.c) + - When banding, if the first occurrence of a character fell partly +off the page, all occurrences of that character on the page could be clipped +or mangled. (gxclbits.c, gxclimag.c) + - When testing whether it's worthwhile compressing a bitmap for +banding, the compressor was allowed to generate a lot more output than +needed to make the test. (gxclbits.c) + - Certain cases of unrotated gray-scale images dropped the first or +last pixel of each scan line. (gximage2.c) + - In rare cases, a run of pixels in a image could get erroneously +displayed in the same color as the previous run, because of a cache +bookkeeping bug. (gximage3.c) + - The sample driver for the library had gotten inconsistent with a +header file. (gslib.c) + - A declaration was followed by an extraneous semicolon, which upset +some compilers. (gxht.h) + - Missing parentheses caused a test for thin lines to be incorrect. +(gxstroke.c) + +</pre> + +<h2><a name="Version4.20"></a>Version 4.20 (limited) (10/13/96)</h2> + +<p> +This release has internal changes for future support of banded image +processing, but no externally visible changes. Its primary purpose is to +incorporate speedups for clipped images. It does *not* incorporate fixes +for all problems reported in 4.0x or 4.10. + +<h3><a name="V4.20_Documentation"></a>Documentation</h3><pre> + +Documents the new get_clipping_box device procedure. (drivers.txt) + +</pre><h3><a name="V4.20_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - There were many, many minor inconsistencies between the makefiles +and the source code. (We finally have an automated tool to detect these.) +(devs.mak, int.mak, lib.mak, unixtail.mak; gsutil.c, zwppm.c) + - Some makefile rules weren't properly terminated by a blank line. +(lib.mak) + +</pre><h3><a name="V4.20_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The comments in gslp.ps had gotten out of date. (gslp.ps) + +Adds --no-eject-file and --no-eject-formfeed switches to gslp.ps, to allow +packing files in multi-column printouts. (gslp.ps) + +</pre><h3><a name="V4.20_Drivers"></a>Drivers</h3><pre> + +Adds a user-contributed driver for the Epson LP-8000 laser printer. +(gdevlp8k.c) + +Adds a DisplayMode parameter to the vgalib device. (gdevvglb.c) + +Removes the requirement of typing a character at the end of each page using +the vgalib driver. THIS IS A USER-VISIBLE, NON-BACKWARD-COMPATIBLE CHANGE. +(gdevvglb.c) + +</pre><h3><a name="V4.20_Interpreter"></a>Interpreter</h3><pre> + +Updates code to accommodate the new get_clipping_box device procedure. +(zupath.c) + +</pre><h3><a name="V4.20_Library"></a>Library</h3><pre> + +Fixes bugs: + - When a CTM was passed through the band list, it didn't get +translated to match the band coordinate system. (This had no effect, +because the translation part of the CTM was never used.) (gxclread.c) + +Adds a ',' debugging switch to disable high-level operations when banding. +(gxclpath.c) + +Adds an optional get_clipping_box device procedure, so that filling and +stroking can clip more aggressively. (gdevmem.h, gdevprn.h, gxdevice.h, +gxpaint.h, gxpath.h, gzacpath.h, gdevdflt.c, gdevht.c, gdevnfwd.c, +gxacpath.c, gxclip2.c, gxclist.c, gxcpath.c, gxpcmap.c, gxfill.c, +gxstroke.c) + +Speeds up clipped filling and stroking, by checking against the device +clipping box. (gxfill.c, gxstroke.c) + +Adds the ability to clip with a rectangle a clipping path being accumulated, +and uses it to do more aggressive clipping when banding. (gzacpath.h, +gxacpath.c, gxclread.c) + +Speeds up clipping of objects lying partly above or below the clipping +region. (gxcpath.c) + +Speeds up clipping vertically-oriented objects (such as 90 degree rotated +images or vertical rectangles) with convex clipping regions, by checking for +vertical rectangles contained in multiple clipping rectangles. (gxcpath.c) + +Speeds up the handling of 90 degree rotated gray-scale images. (gximage2.c) + +Enhances the band list so that it can contain commands for a range of bands, +not just a single band or all bands. (gxcldev.h, gxclist.h, gxclbits.c, +gxclist.c, gxclread.c) + +Adds an operation to the DDA structure, for eventual support of clipped +images. (gxdda.h) + +Factors out some macros useful for generating bit-transformation tables. +(gsbittab.h, gsbittab.c, gsflip.c) + +</pre> + +<hr> + +<h2><a name="Version4.10"></a>Version 4.10 (limited) (9/25/96)</h2> + +<p> +This release adds local garbage collection, and a number of performance +improvements for garbage collection in general. We will support it for one +or two OEMs, but it is not a public release. + +<h3><a name="V4.10_Documentation"></a>Documentation</h3><pre> + +Moves documentation for all releases before 4.0 to history3.txt. (NEWS, +history3.txt) + +</pre><h3><a name="V4.10_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - pdf2dsc.ps didn't have a proper license notice. (pdf2dsc.ps) + +</pre><h3><a name="V4.10_Drivers"></a>Drivers</h3><pre> + +Adds a psgray driver, like psmono, to produce 8-bit gray PostScript (level +1) images. (devs.mak, *.mak, gdevpsim.c) + +Changes the psmono driver to allow runs of up to 255 repeated bytes. +(gdevpsim.c) + +</pre><h3><a name="V4.10_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - setdevice erased the page even if this wasn't necessary. +(zdevice.c) + +Speeds up the garbage collector, primarily by speeding up pointer +relocation. (int.mak, ipacked.h, iref.h, ialloc.c, igc.c, igcref.c) + +Actually implements local garbage collection. (igc.h, ivmspace.h, igc.c, +igcref.c, igcstr.c, ireclaim.c) + +Adds some additional error checking for the -Z? switch. (ilocate.c) + +Moves a utility for color mapping from the interpreter to the library. +(icolor.h, zcolor.c) + +Adds a MinScreenLevels user parameter. (zusparam.c) + +</pre><h3><a name="V4.10_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Adds partial support for the PDF 1.2 gs operator, reverse engineered from a +PDF 1.2 file. (pdf_draw.ps) + +</pre><h3><a name="V4.10_Library"></a>Library</h3><pre> + +Fixes bugs: + - The test for "thin" stroked lines incorrectly claimed some +non-thin lines were thin. (gxstroke.c) + - The computations for halftone cells didn't work for non-square +pixels. (gxdht.h, gsht.c, gsht1.c, gshtscr.c) + +Speeds up the garbage collector a little. (gsstruct.h, gxalloc.h, +gxfcache.h, gsfont.c) + +Replaces references to private statically allocated color spaces with +references to shared dynamically allocated ones, which are guaranteed to be +fully filled-in. (gscie.c) + +Moves a utility for color mapping from the interpreter to the library. +(gxfmap.h, gxcmap.c) + +Makes available an imager analogue of setmatrix. (gscoord.h, gscoord.c) + +Adds a parameter to control the minimum number of halftone screen levels. +If a halftone cell has fewer pixels than this number, it will be replicated +(similar to what AccurateScreens does) until the replicated screen has +enough levels. (gxht.h, gshtscr.c) + +</pre> + +<hr> + +<h2><a name="Version4.03"></a>Version 4.03 (9/23/96)</h2> + +<p> +This was an emergency re-release of 4.02 to fix the stdin redirection +problem. It has essentially no other changes. + +<h3><a name="V4.03_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - Solaris 2.x has /usr/ucb/install, not installbsd. (make.txt) + +Updates current.txt to mention the ability to share libpng and libgz. +(current.txt) + +</pre><h3><a name="V4.03_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - A rule assumed that the makefile was named `makefile'. +(unixtail.mak) + +</pre><h3><a name="V4.03_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The stcolor drivers had an off-by-1 error that could cause them to +write into unallocated memory. (gdevstc.c) + - The Imagen driver wouldn't compile with gcc. (gdevimgn.c) + +</pre><h3><a name="V4.03_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The Solaris fontmap had gotten out of date. (Fontmap.Sol) + +</pre><h3><a name="V4.03_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The test for stdin being non-seekable could leave the file error +flag set, which caused an infinite loop when trying to read from the file +later. (sfile.c, sfileno.c) + +</pre> + +<h2><a name="Version4.02"></a>Version 4.02 (9/19/96)</h2> + +<p> +This release fixes a few more bugs, and adds the ability to read encrypted +PDF files and some PDF 1.2 files. + +<p> +This release was withdrawn after a few days because the stdin redirection +fix, which was made at the last minute, cause Ghostview to hang. + +<h3><a name="V4.02_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The list of required support files was incorrect. (install.txt) + - The descriptions of file name lookup weren't accurate. (use.txt) + - A J should have been an H. (gxbitmap.h) + +Updates the documentation about encrypted PDF files. (new-user.txt) + +Documents what the 13 base PDF fonts are. (ps2pdf.txt) + +Fixes a tiny typo. (c-style.txt) + +Adds a user-contributed man page for the new pdf2dsc script. (pdf2dsc.1) + +Updates the government restricted rights notice in the Aladdin Ghostscript +Free Public License. (PUBLIC) + +Adds the URL of test files to the bug report form. (new-user.txt) + +Puts the bug reporting form in a separate file. (readme, bug-form.txt, +new-user.txt) + +Notes that map_xxx_color procedures should not return gx_no_color_index. +(drivers.txt) + +Notes that Ghostscript supports the Flate filters. (language.txt) + +Documents the use of the system libpng and zlib. (make.txt, gs.mak) + +Notes that Borland C++ 5.0 and 5.01 will not compile Ghostscript correctly. +(make.txt) + +</pre><h3><a name="V4.02_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Using both DELAYBIND and SAFER caused problems. (pstotext uses +DELAYBIND.) (gs_init.ps) + +</pre><h3><a name="V4.02_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - Some pdf2ps machinery interfered with the PDF interpreter. +(pdf_2ps.ps, pdf_main.ps) + - In the output of pdf2ps, page numbers in link destinations were +too high by 1. (pdf_main.ps) + - viewpbm didn't handle value ranges other than [0..255] correctly. +(viewpbm.ps) + +Adds a user-contributed shell script to invoke pdf2dsc.ps. (pdf2dsc, +unix-end.mak) + +Adds a switch to the genconf utility to set the prefix for generated +procedure names. (genconf.c) + +Adds the option of using system libraries (possibly shared) for libpng +and/or zlib. (*head.mak, msc*.mak, os2.mak, tccommon.mak, wccommon.mak; +libpng.mak, zlib.mak) + +</pre><h3><a name="V4.02_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The X11 display devices ignored the -DA4 compile-time option. +(gdevx.c) + - The garbage collector could scramble the state of the CGM drivers. +(gxdevice.h, gdevcgm.c) + - An identifier of more than 31 characters upset the VAX DEC C +compiler. (gdevcgml.h, gdevcgml.c) + - In case of an error in trying to set the CoreDistVersion distiller +parameter, a variable could be used without initialization. (gdevpdfp.c) + - When DEBUG is selected, the X Windows driver referenced _Xdebug, +which is not defined in (at least the VMS version of) DECWindows. (x_.h, +gdevxini.c) + - Some map_cmyk_color implementations could return "transparent". +(gdevbit.c) + - Setting GraphicsAlphaBits or TextAlphaBits in the P*M drivers +caused an error. (gdevpbm.c) + - If a user cancelled printing under MS Windows, a confusing error +resulted, and a temporary file wasn't deleted. (gdevwpr2.c) + - The map_color_rgb procedure for the bit devices produced incorrect +results. (This probably had no effect in practice.) (gdevbit.c) + - The os2prn device produced incorrect output. (gdevos2p.c) + - The OS/2 PM device didn't detect PM applications correctly. +(gdevpm.c) + - The MS Windows printer driver didn't automatically detect the +printer's color capabilities. (gdevwpr2.c) + - The BJC-610 driver didn't print at 720 dpi. (gdevcdj.c) + - The static prototypes of many devices didn't include the far_data +keyword. (gdev3852.c, gdev4081.c, gdevbgi.c, gdevcgm.c, gdevht.c, +gdevimgn.c, gdevl256.c, gdevmrop.c, gdevn533.c, gdevnfwd.c, gdevnp6.c, +gdevo182.c, gdevpcfb.c, gdevpdf.c, gdevpe.c, gdevpm.c, gdevs3ga.c, +gdevsnfb.c, gdevsppr.c, gdevsun.c, gdevsvga.c, gdevtknk.c, gdevvglb.c, +gdevwddb.c, gdevwprn.c, gdevx.c, gdevxalt.c) + - The (original) deskjet driver collapsed print lines towards the +left margin. (gdevdjet.c) + +Adds to the pgm/pgnm/ppm/pnm[raw] drivers the ability to set the maximum +pixel value, by setting any of the Gray/Red/Green/BlueValues device +parameters. (gdevpbm.c) + +Adds pkm[raw] drivers, which do all their internal computations in CMYK and +convert the data to RGB as they write the file. (gdevpbm.c) + +</pre><h3><a name="V4.02_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The VMS script referred to old versions of the third-party +libraries. (vms.mak) + - Under VMS with DEC C, attempting to open a new file fails. +(gp_vms.c) + - If you tried to print (gp_printfile) under Windows on a system +with no printers installed, Ghostscript caused a GPF. (gp_mswin.c) + +Restores support for a non-DLL MS Windows platform. (bcwin32.mak, +dwnodll.cpp) + +Adds a new MS Windows DLL call, gsdll_get_bitmap. (gsdll16.def, +gsdll32.def, dll.txt, gdevwdib.c) + +Fixes a variety of other small Windows- and OS/2-related problems, mostly +related to printing. (gp_mswin.h, dpmainc.c, dwmain.cpp, dwmainc.cpp, +gdevmswn.c, gdevpm.c, gdevwpr2.c, gp_mswin.c) + +</pre><h3><a name="V4.02_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The value of /newerror in $error was true at the end of +initialization. We now reset it after each internal use of stopped if +necessary. (gs_dps1.ps, gs_fform.ps, gs_fonts.ps, gs_init.ps, gs_pdf.ps, +gs_res.ps, gs_type1.ps) + - setpagedevice (and finddevice) didn't recognize Default. +(gs_init.ps) + - When running with -dNODISPLAY, calling gssetresolution would cause +a crash. (gs_init.ps) + - A particular combination of save, .forgetsave, and garbage +collection could cause a memory access error in restore. (isave.c) + - Some references to systemdict were affected if a user redefined +the name /systemdict. (gs_cmdl.ps, gs_fonts.ps, gs_kanji.ps, gs_dps1.ps, +gs_init.ps, gs_res.ps, gs_statd.ps, gs_type1.ps) + - The insideness testing operators caused an invalid memory access. +(drivers.txt, zupath.c) + - If a readline reached an input buffer boundary between the \r and +\n of a 2-character EOL, an error could occur. (zfileio.c) + - setdevparams caused an error. (gs_lev2.ps) + +Changes file names beginning with ./ or ../ so they are recognized as +"absolute" and not subject to the search path. (gp_dosfs.c, gp_ntfs.c, +gp_os2.c, gp_unifn.c) + +Changes the exit code for -h or --help from 0 to 1, so an invoking program +will keep the output around for the user to look at. (imainarg.c) + +Adds the FlateEncode and FlateDecode filters; adds PNG pixel prediction to +the LZW filters. These additions are required for PDF 1.2 and will be part +of PostScript Level 3. (int.mak, lib.mak, zfdecode.c, zfilter2.c, zfzlib.c, +zfpngp.c [deleted]) + +</pre><h3><a name="V4.02_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - The copyright notices on some files didn't mention the Aladdin +free license. (pdf_*.ps) + - Some references to systemdict were affected if a user redefined +the name /systemdict. (pdf_font.ps) + - The value of /newerror in $error was true at the end of +initialization. We now reset it after each internal use of stopped if +necessary. (pdf_main.ps) + - stdin redirection failed for PDF files even if the new stdin was +seekable. (pdf_main.ps) + - The Rotate key rotated pages in the wrong direction. +(pdf_main.ps) + +Adds a minimal "security socket" to the interpreter. This does not include +any actual decryption code; such code is available elsewhere (see +new-user.txt). (int.mak, pdf_base.ps, pdf_main.ps, pdf_sec.ps) + +Adds a PDF 1.2 capability: + - The destination in a Dest array can be a page number as well as a +page object. (pdf_main.ps) + +</pre><h3><a name="V4.02_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - stdin was assumed to be non-seekable. (sfile.c, sfileno.c) + +</pre><h3><a name="V4.02_Library"></a>Library</h3><pre> + +Fixes bugs: + - Garbage collection could corrupt a pointer in Type 0 fonts. +(gxfont0.h, gsfont0.c) + - When applying hints to a Type 1 font outline, the last point could +sometimes get moved twice, causing output anomalies. (gxhint3.c) + - An #include needed for debugging was missing. (gxcmap.h) + - Graphics states included a no-longer-used private color space +object. (gsstate.c) + - Images could get clipped randomly in the X direction. (I don't +understand why this problem hasn't shown up more often, since it's been +there since release 4.00.) (gximage.c) + - The arct and arcto operators failed to draw the line to the +starting point of the arc. (bug introduced in 4.01) (gspath1.c) + - Prefix subclasses of simple structures caused an invalid memory +access. (gsstruct.h) + - The variable fheight was sometimes unused. (gstype1.c) + - igcd and imod didn't have prototypes in an appropriate header +file, and were declared extern in several places. (gsdcolor.h, gsline.h, +gxarith.h, gxdht.h, gsht.c, gshtscr.c, gsimage.c, gsline.c, gstype1.c, +gxclimag.c) + - When using a non-identity RenderTable in a CIE rendering +dictionary, all colors came out too light. (gscie.c) + - When using anti-aliased graphics, stroked lines were rendered too +thin. (gspaint.c) + - The default map_cmyk_color implementations could return +"transparent". (gxcmap.c) + - The number of bits of alpha requested when rendering anti-aliased +characters could exceed 4. (gschar.c) + - Multi-screen halftones could cause errors or infinite looping when +banding. (This problem predates 4.0; I don't know why it didn't show up +before.) (gxcldev.h, gxclist.c, gxclread.c) + - Skewed or rotated gray-scale images, or masks with a halftoned +color, omitted one line of pixels and displaced the image by one pixel. +(gximage2.c) + +Adds an implementation of realloc, for systems that don't have one that +works. I don't know how to determine this automatically, so for the moment, +the code uses our own implementation on GNU/Linux (where realloc is known to be +broken, at least in some releases) and nowhere else. (malloc_.h, +gsmemory.c, gsmisc.c) + +Removes the "OLD" algorithms from the Type 1 hinting source code, since they +are no longer executed. (If necessary, they can be retrieved from an older +version.) (gxhint3.c) + +</pre> + +<h2><a name="Version4.01"></a>Version 4.01 (7/10/96)</h2> + +<p> +This fixes a few minor bugs discovered since the 4.0 release. + +<h3><a name="V4.01_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - An installation directory name was wrong. (make.txt, +unix-lpr.txt) + - A URL was wrong. (devices.txt) + - A reference to use.doc hadn't been updated. (gs.1) + - Some references to /usr/local/lib hadn't been updated. (gs.1) + - The NEWS file and history* files still referred to *.doc rather +than *.txt. (NEWS, history*.txt) + +Adds a note about compilation on Digital Unix. (make.txt) + +Clarifies that calling gs_exit calls gs_finit automatically. (imain.h) + +Adds a pointer to the PDF encryption patch. (Ridiculous U.S. export control +laws don't allow including the patch itself in the main fileset.) +(new-user.txt) + +Adds a help file for VMS. (gs-vms.hlp) + +</pre><h3><a name="V4.01_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - vms.mak had gotten out of sync with the makefiles (again). +(vms.mak) + - DEVICE{WIDTH,HEIGHT}POINTS didn't override PAPERSIZE. +(gs_init.ps) + - The Microsoft C makefiles had gotten out of date. (msc.mak) + +The (few) GNU-Licensed drivers were accidentally omitted from the fileset. + +Modifies a makefile for greater reusability. (watclib.mak) + +Adds a 'debug' target for making Unix debugging configurations. +(unix-end.mak) + +</pre><h3><a name="V4.01_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - Some uses of 'run' should be changed to runlibfile. (bdftops.ps, +impath.ps, markhint.ps, packfile.ps, showchar.ps, waterfal.ps, wftopfa.ps, +wrfont.ps) + - Some debugging code hadn't been removed. (gslp.ps) + +Adds a new utility, viewcmyk.ps, for viewing 4-bit CMYK data. (psfiles.txt, +unix-end.mak, viewcmyk.ps) + +Improves pdf2dsc by including Title and CreationDate DSC comments (these are +displayed by Ghostview) and reducing the size of typical output files by a +factor of about 3. (pdf2dsc.ps) + +Incorporates major changes (claimed to be improvements) to ps2ascii +contributed by a user. If you have problems with it, please contact him, +not Aladdin. (ps2ascii.ps) + +</pre><h3><a name="V4.01_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The X value of a bounding box could be computed incorrectly. +(gdevbbox.c) + +</pre><h3><a name="V4.01_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The Windows DLL sometimes didn't clean up properly. (dll.txt, +dpmainc.c, dwdll.cpp, dwmain.cpp, dwmainc.cpp, gsdll.c, gsdll.h) + +</pre><h3><a name="V4.01_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Reading from a filter could hang forever, because a buffer was +allocated 1 byte too small. (zfilter.c) + - The search path could become garbage under some circumstances. +(imain.c) + - A dangling reference to a stack-allocated variable could corrupt +memory if a client mixed interpreter calls and direct C calls. (interp.c) + - Printing an object to a procedure-based filter could cause an +invalid memory access. (zfileio.c) + +</pre><h3><a name="V4.01_Library"></a>Library</h3><pre> + +Fixes bugs: + - Setting parameters for an unopened device could cause an access +error or invoke the wrong put_params procedure. (gsdparam.c) + - Reading from a filter could hang forever, because a buffer was +allocated 1 byte too small. (stream.h) + - If the current device was the nullpage device, doing a [g]save, +selecting a different device, and doing a [g]restore caused an error. +(gsdparam.c) + +Adds the ability to append arcs without the initial lineto, for PCL +emulation. (gspath.h, gspath1.c) + +</pre> + +<h2><a name="Version4.0"></a>Version 4.0 (6/28/96)</h2> + +<p> +This is the first public release since 3.53, with a few more last-minute +patches beyond 3.70. + +<h3><a name="V4.0_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - Many makefiles still referred to .doc files rather than .txt. +(cfonts.mak, devs.mak, gs.mak, int.mak, libpng.mak, unix-end.mak, watc.mak, +watcwin.mak, wccommon.mak, zlib.mak) + - Some FONTPATH-related information was out of date. (use.txt) + - The installation directory for fonts was incorrect. (install.txt) + - The libpng and zlib versions were out of date. (libpng.mak, +zlib.mak) + - Some information about GSview was incorrect or incomplete. +(new-user.txt) + - make.txt said it described installation as well as building. +(make.txt) + +Notes that the current release of zlib won't compile and link correctly with +Sun cc. (make.txt) + +Adds a little more detail to the C style document. (c-style.txt) + +</pre><h3><a name="V4.0_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Some documentation files weren't installed. (unix-end.mak) + - Some dependencies were incorrect. (bcwin32.mak) + - 'make begin' and 'make clean' deleted too many and/or the wrong +files. (bcwin.mak, bcwin32.mak) + - libpng.mak didn't work with libpng version 0.89c. (libpng.mak) + - -d<var>=<name> was equivalent to -d<var>=/<name>, and there was no +way to set a variable to true, false, or null. (use.txt, gs_init.ps, +iinit.c, imainarg.c) + +Removes the modules.lis file, which is no longer used. + +Undoes detecting automatically the need to run tar_cat -- the mechanism +didn't work, and caused confusion. (unix-end.mak) + +Updates the makefiles to libpng version 0.89, but allows them to work with +either 0.88 or 0.89. (*.mak) + +</pre><h3><a name="V4.0_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - Showing the details of a protected font caused an error. +(markhint.ps) + +</pre><h3><a name="V4.0_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A copyright notice was wrong. (gs_pdfwr.ps) + - PDF link annotations could get written with two Dest keys. +(gdevpdfm.c) + - MakeProcInstance and FreeProcInstance were called on platforms +where it wasn't appropriate. (gdevwpr2.c, gdevwprn.c, gp_mswin.c) + - On X servers that return very large values for the "virtual +screen" size in millimeters but correct values for the screen size in +pixels, a rangecheck could occur. (gdevxini.c) + - The bounding box device could return garbage if stroke or fill was +ever invoked with an empty path. (gdevbbox.c) + +Replaces the LBP8 driver with a revised one contributed by a user. +(gdevlbp8.c, devs.mak) + +</pre><h3><a name="V4.0_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - Some Windows menu parameters were incorrect. (gsdll16.rc, +gsdll32.rc) + +</pre><h3><a name="V4.0_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - .getdevparams sometimes returned duplicate entries for /Type. +(ziodev2.c) + - File names weren't parsed or concatenated properly on all +platforms. (gs_fonts.ps, zfile.c) + - Filter lookahead caused problems with special files. (zfproc.c) + - If a TransformPQR procedure in a CIE color rendering dictionary +didn't pop its 4 array arguments, an error occurred. (gs_lev2.ps, zcrd.c) + +</pre><h3><a name="V4.0_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - Filter lookahead caused problems with special files. (bug +introduced in 3.70) (stream.h) + +</pre><h3><a name="V4.0_Library"></a>Library</h3><pre> + +Fixes bugs: + - .getdevparams sometimes returned duplicate entries for /Type. +(gxiodev.h, gsiodev.c) + +</pre> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/History5.htm b/Master/xemtex/doc/ghostscript/History5.htm new file mode 100644 index 00000000000..ec62a06d68d --- /dev/null +++ b/Master/xemtex/doc/ghostscript/History5.htm @@ -0,0 +1,13454 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>History of Ghostscript versions 5.n</title> +<!-- $Id: History5.htm,v 1.15.2.11.2.6 2003/05/17 14:38:59 giles Exp $ --> +<!-- + WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to + re-create the table of contents here, because it will replace the + hand-edited TOC subheads with a separate subhead for each H2 in + the body of the file. Or if you do, first look at the original + TOC to see how to edit it for visual conciseness. +--> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>History of Ghostscript versions 5.n</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Version5.99">Version 5.99 (beta) (1999-12-18)</a> +<ul> +<li><a href="#5.99_Incompatible_changes">Incompatible changes</a>, + <a href="#5.99_Documentation">Documentation</a>, + <a href="#5.99_Procedures">Procedures</a>, + <a href="#5.99_Utilities">Utilities</a>, + <a href="#5.99_Drivers">Drivers</a>, + <a href="#5.99_Platforms">Platforms</a>, + <a href="#5.99_Fonts">Fonts</a>, + <a href="#5.99_PDF_writer">PDF writer</a>, + <a href="#5.99_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.99_Interpreter">Interpreter</a>, + <a href="#5.99_Streams">Streams</a>, + <a href="#5.99_Library">Library</a> +</ul> +<li><a href="#Version5.98">Version 5.98 (beta) (1999-12-01)</a> +<ul> +<li><a href="#5.98_Incompatible_changes">Incompatible changes</a>, + <a href="#5.98_Documentation">Documentation</a>, + <a href="#5.98_Procedures">Procedures</a>, + <a href="#5.98_Utilities">Utilities</a>, + <a href="#5.98_Drivers">Drivers</a>, + <a href="#5.98_Fonts">Fonts</a>, + <a href="#5.98_PDF_writer">PDF writer</a>, + <a href="#5.98_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.98_Interpreter">Interpreter</a>, + <a href="#5.98_Streams">Streams</a>, + <a href="#5.98_Library">Library</a> +</ul> +<li><a href="#Version5.97">Version 5.97 (beta) (11/22/99)</a> +<ul> +<li><a href="#5.97_Incompatible_changes">Incompatible changes</a>, + <a href="#5.97_Documentation">Documentation</a>, + <a href="#5.97_Procedures">Procedures</a>, + <a href="#5.97_Utilities">Utilities</a>, + <a href="#5.97_Drivers">Drivers</a>, + <a href="#5.97_Platforms">Platforms</a>, + <a href="#5.97_PDF_writer">PDF writer</a>, + <a href="#5.97_Interpreter">Interpreter</a>, + <a href="#5.97_Library">Library</a> +</ul> +<li><a href="#Version5.96">Version 5.96 (beta) (11/12/99)</a> +<ul> +<li><a href="#5.96_Incompatible_changes">Incompatible changes</a>, + <a href="#5.96_Documentation">Documentation</a>, + <a href="#5.96_Procedures">Procedures</a>, + <a href="#5.96_Utilities">Utilities</a>, + <a href="#5.96_Drivers">Drivers</a>, + <a href="#5.96_Platforms">Platforms</a>, + <a href="#5.96_PDF_writer">PDF writer</a>, + <a href="#5.96_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.96_Interpreter">Interpreter</a>, + <a href="#5.96_Streams">Streams</a>, + <a href="#5.96_Library">Library</a> +</ul> +<li><a href="#Version5.95">Version 5.95 (beta) (11/1/99)</a> +<ul> +<li><a href="#5.95_Incompatible_changes">Incompatible changes</a>, + <a href="#5.95_Documentation">Documentation</a>, + <a href="#5.95_Procedures">Procedures</a>, + <a href="#5.95_Utilities">Utilities</a>, + <a href="#5.95_Drivers">Drivers</a>, + <a href="#5.95_Platforms">Platforms</a>, + <a href="#5.95_Fonts">Fonts</a>, + <a href="#5.95_PDF_writer">PDF writer</a>, + <a href="#5.95_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.95_Interpreter">Interpreter</a>, + <a href="#5.95_Library">Library</a> +</ul> +<li><a href="#Version5.94">Version 5.94 (beta) (9/30/99)</a> +<ul> +<li><a href="#5.94_Incompatible_changes">Incompatible changes</a>, + <a href="#5.94_Documentation">Documentation</a>, + <a href="#5.94_Procedures">Procedures</a>, + <a href="#5.94_Utilities">Utilities</a>, + <a href="#5.94_Drivers">Drivers</a>, + <a href="#5.94_Platforms">Platforms</a>, + <a href="#5.94_Fonts">Fonts</a>, + <a href="#5.94_PDF_writer">PDF writer</a>, + <a href="#5.94_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.94_Interpreter">Interpreter</a>, + <a href="#5.94_Streams">Streams</a>, + <a href="#5.94_Library">Library</a> +</ul> +<li><a href="#Version5.93">Version 5.93 (beta) (9/11/99)</a> +<ul> +<li><a href="#5.93_Incompatible_changes">Incompatible changes</a>, + <a href="#5.93_Documentation">Documentation</a>, + <a href="#5.93_Procedures">Procedures</a>, + <a href="#5.93_Utilities">Utilities</a>, + <a href="#5.93_Drivers">Drivers</a>, + <a href="#5.93_Platforms">Platforms</a>, + <a href="#5.93_PDF_writer">PDF writer</a>, + <a href="#5.93_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.93_Interpreter">Interpreter</a>, + <a href="#5.93_Streams">Streams</a>, + <a href="#5.93_Library">Library</a> +</ul> +<li><a href="#Version5.92">Version 5.92 (beta) (9/2/99)</a> +<ul> +<li><a href="#5.92_Documentation">Documentation</a>, + <a href="#5.92_Procedures">Procedures</a>, + <a href="#5.92_Utilities">Utilities</a>, + <a href="#5.92_Drivers">Drivers</a>, + <a href="#5.92_PDF_writer">PDF writer</a>, + <a href="#5.92_Interpreter">Interpreter</a>, + <a href="#5.92_Streams">Streams</a> +</ul> +<li><a href="#Version5.91">Version 5.91 (beta) (8/30/99)</a> +<ul> +<li><a href="#5.91_Documentation">Documentation</a>, + <a href="#5.91_Utilities">Utilities</a>, + <a href="#5.91_Drivers">Drivers</a>, + <a href="#5.91_Platforms">Platforms</a>, + <a href="#5.91_Fonts">Fonts</a>, + <a href="#5.91_PDF_writer">PDF writer</a>, + <a href="#5.91_Library">Library</a> +</ul> +<li><a href="#Version5.90">Version 5.90 (beta) (8/20/99)</a> +<ul> +<li><a href="#5.90_Incompatible_changes">Incompatible changes</a>, + <a href="#5.90_Documentation">Documentation</a>, + <a href="#5.90_Procedures">Procedures</a>, + <a href="#5.90_Utilities">Utilities</a>, + <a href="#5.90_Drivers">Drivers</a>, + <a href="#5.90_Platforms">Platforms</a>, + <a href="#5.90_Fonts">Fonts</a>, + <a href="#5.90_PDF_writer">PDF writer</a>, + <a href="#5.90_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.90_Interpreter">Interpreter</a>, + <a href="#5.90_Streams">Streams</a>, + <a href="#5.90_Library">Library</a> +</ul> +<li>(Version 5.89 deliberately omitted.) +<li><a href="#Version5.88">Version 5.88 (tester) (8/3/99)</a> +<ul> +<li><a href="#5.88_Incompatible_changes">Incompatible changes</a>, + <a href="#5.88_Documentation">Documentation</a>, + <a href="#5.88_Procedures">Procedures</a>, + <a href="#5.88_Drivers">Drivers</a>, + <a href="#5.88_Platforms">Platforms</a>, + <a href="#5.88_Fonts">Fonts</a>, + <a href="#5.88_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.88_Interpreter">Interpreter</a>, + <a href="#5.88_Streams">Streams</a>, + <a href="#5.88_Library">Library</a> +</ul> +<li><a href="#Version5.87">Version 5.87 (tester) (6/29/99)</a> +<ul> +<li><a href="#5.87_Incompatible_changes">Incompatible changes</a>, + <a href="#5.87_Documentation">Documentation</a>, + <a href="#5.87_Procedures">Procedures</a>, + <a href="#5.87_Drivers">Drivers</a>, + <a href="#5.87_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.87_Interpreter">Interpreter</a>, + <a href="#5.87_Library">Library</a> +</ul> +<li><a href="#Version5.86">Version 5.86 (tester) (6/14/99)</a> +<ul> +<li><a href="#5.86_Incompatible_changes">Incompatible changes</a>, + <a href="#5.86_Documentation">Documentation</a>, + <a href="#5.86_Procedures">Procedures</a>, + <a href="#5.86_Utilities">Utilities</a>, + <a href="#5.86_Drivers">Drivers</a>, + <a href="#5.86_Platforms">Platforms</a>, + <a href="#5.86_Fonts">Fonts</a>, + <a href="#5.86_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.86_Interpreter">Interpreter</a>, + <a href="#5.86_Streams">Streams</a>, + <a href="#5.86_Library">Library</a> +</ul> +<li><a href="#Version5.85">Version 5.85 (tester) (5/29/99)</a> +<ul> +<li><a href="#5.85_Incompatible_changes">Incompatible changes</a>, + <a href="#5.85_Documentation">Documentation</a>, + <a href="#5.85_Procedures">Procedures</a>, + <a href="#5.85_Utilities">Utilities</a>, + <a href="#5.85_Drivers">Drivers</a>, + <a href="#5.85_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.85_Interpreter">Interpreter</a>, + <a href="#5.85_Library">Library</a> +</ul> +<li><a href="#Version5.84">Version 5.84 (tester) (5/19/99)</a> +<ul> +<li><a href="#5.84_Incompatible_changes">Incompatible changes</a>, + <a href="#5.84_Procedures">Procedures</a>, + <a href="#5.84_Utilities">Utilities</a>, + <a href="#5.84_Drivers">Drivers</a>, + <a href="#5.84_Platforms">Platforms</a>, + <a href="#5.84_Interpreter">Interpreter</a>, + <a href="#5.84_Streams">Streams</a>, + <a href="#5.84_Library">Library</a> +</ul> +<li><a href="#Version5.83">Version 5.83 (tester) (5/13/99)</a> +<ul> +<li><a href="#5.83_Incompatible_changes">Incompatible changes</a>, + <a href="#5.83_Documentation">Documentation</a>, + <a href="#5.83_Procedures">Procedures</a>, + <a href="#5.83_Utilities">Utilities</a>, + <a href="#5.83_Interpreter">Interpreter</a>, + <a href="#5.83_Library">Library</a> +</ul> +<li><a href="#Version5.82">Version 5.82 (tester) (4/24/99)</a> +<ul> +<li><a href="#5.82_Incompatible_changes">Incompatible changes</a>, + <a href="#5.82_Documentation">Documentation</a>, + <a href="#5.82_Procedures">Procedures</a>, + <a href="#5.82_Utilities">Utilities</a>, + <a href="#5.82_Drivers">Drivers</a>, + <a href="#5.82_Platforms">Platforms</a>, + <a href="#5.82_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.82_Interpreter">Interpreter</a>, + <a href="#5.82_Library">Library</a> +</ul> +<li><a href="#Version5.81">Version 5.81 (tester) (4/14/99)</a> +<ul> +<li><a href="#5.81_Incompatible_changes">Incompatible changes</a>, + <a href="#5.81_Procedures">Procedures</a>, + <a href="#5.81_Utilities">Utilities</a>, + <a href="#5.81_Drivers">Drivers</a>, + <a href="#5.81_Fonts">Fonts</a>, + <a href="#5.81_Platforms">Platforms</a>, + <a href="#5.81_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.81_Interpreter">Interpreter</a>, + <a href="#5.81_Library">Library</a> +</ul> +<li><a href="#Version5.80">Version 5.80 (tester) (4/6/99)</a> +<ul> +<li><a href="#5.80_Incompatible_changes">Incompatible changes</a>, + <a href="#5.80_Procedures">Procedures</a>, + <a href="#5.80_Utilities">Utilities</a>, + <a href="#5.80_Drivers">Drivers</a>, + <a href="#5.80_Fonts">Fonts</a>, + <a href="#5.80_Platforms">Platforms</a>, + <a href="#5.80_Interpreter">Interpreter</a>, + <a href="#5.80_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.80_Streams">Streams</a>, + <a href="#5.80_Library">Library</a> +</ul> +<li>(Versions 5.74 - 5.79 deliberately omitted.) +<li><a href="#Version5.73">Version 5.73 (tester) (3/19/99)</a> +<ul> +<li><a href="#5.73_Incompatible_changes">Incompatible changes</a>, + <a href="#5.73_Documentation">Documentation</a>, + <a href="#5.73_Procedures">Procedures</a>, + <a href="#5.73_Drivers">Drivers</a>, + <a href="#5.73_Interpreter">Interpreter</a>, + <a href="#5.73_Library">Library</a> +</ul> +<li><a href="#Version5.72">Version 5.72 (tester) (3/17/99)</a> +<ul> +<li><a href="#5.72_Incompatible_changes">Incompatible changes</a>, + <a href="#5.72_Documentation">Documentation</a>, + <a href="#5.72_Procedures">Procedures</a>, + <a href="#5.72_Utilities">Utilities</a>, + <a href="#5.72_Drivers">Drivers</a>, + <a href="#5.72_Fonts">Fonts</a>, + <a href="#5.72_Interpreter">Interpreter</a>, + <a href="#5.72_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.72_Streams">Streams</a>, + <a href="#5.72_Library">Library</a> +</ul> +<li><a href="#Version5.71">Version 5.71 (tester) (3/3/99)</a> +<ul> +<li><a href="#5.71_Incompatible_changes">Incompatible changes</a>, + <a href="#5.71_Documentation">Documentation</a>, + <a href="#5.71_Procedures">Procedures</a>, + <a href="#5.71_Utilities">Utilities</a>, + <a href="#5.71_Drivers">Drivers</a>, + <a href="#5.71_Fonts">Fonts</a>, + <a href="#5.71_Interpreter">Interpreter</a>, + <a href="#5.71_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.71_Streams">Streams</a>, + <a href="#5.71_Library">Library</a> +</ul> +<li><a href="#Version5.70">Version 5.70 (internal) (2/20/99)</a> +<ul> +<li><a href="#5.70_Incompatible_changes">Incompatible changes</a>, + <a href="#5.70_Documentation">Documentation</a>, + <a href="#5.70_Procedures">Procedures</a>, + <a href="#5.70_Utilities">Utilities</a>, + <a href="#5.70_Drivers">Drivers</a>, + <a href="#5.70_Fonts">Fonts</a>, + <a href="#5.70_Interpreter">Interpreter</a>, + <a href="#5.70_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.70_Streams">Streams</a>, + <a href="#5.70_Library">Library</a> +</ul> +<li><a href="#Version5.69">Version 5.69 (internal) (2/4/99)</a> +<ul> +<li><a href="#5.69_Procedures">Procedures</a>, + <a href="#5.69_Utilities">Utilities</a>, + <a href="#5.69_Drivers">Drivers</a>, + <a href="#5.69_Interpreter">Interpreter</a>, + <a href="#5.69_Streams">Streams</a>, + <a href="#5.69_Library">Library</a> +</ul> +<li><a href="#Version5.68">Version 5.68 (internal) (1/29/99)</a> +<ul> +<li><a href="#5.68_Incompatible_changes">Incompatible changes</a>, + <a href="#5.68_Documentation">Documentation</a>, + <a href="#5.68_Procedures">Procedures</a>, + <a href="#5.68_Utilities">Utilities</a>, + <a href="#5.68_Drivers">Drivers</a>, + <a href="#5.68_Fonts">Fonts</a>, + <a href="#5.68_Platforms">Platforms</a>, + <a href="#5.68_Interpreter">Interpreter</a>, + <a href="#5.68_Streams">Streams</a>, + <a href="#5.68_Library">Library</a> +</ul> +<li><a href="#Version5.67">Version 5.67 (internal) (1/8/99)</a> +<ul> +<li><a href="#5.67_Incompatible_changes">Incompatible changes</a>, + <a href="#5.67_Documentation">Documentation</a>, + <a href="#5.67_Procedures">Procedures</a>, + <a href="#5.67_Utilities">Utilities</a>, + <a href="#5.67_Drivers">Drivers</a>, + <a href="#5.67_Fonts">Fonts</a>, + <a href="#5.67_Interpreter">Interpreter</a>, + <a href="#5.67_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.67_Streams">Streams</a>, + <a href="#5.67_Library">Library</a> +</ul> +<li><a href="#Version5.66">Version 5.66 (internal) (11/25/98)</a> +<ul> +<li><a href="#5.66_Incompatible_changes">Incompatible changes</a>, + <a href="#5.66_Documentation">Documentation</a>, + <a href="#5.66_Procedures">Procedures</a>, + <a href="#5.66_Utilities">Utilities</a>, + <a href="#5.66_Drivers">Drivers</a>, + <a href="#5.66_Platforms">Platforms</a>, + <a href="#5.66_Interpreter">Interpreter</a>, + <a href="#5.66_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.66_Streams">Streams</a>, + <a href="#5.66_Library">Library</a> +</ul> +<li><a href="#Version5.65">Version 5.65 (internal) (11/13/98)</a> +<ul> +<li><a href="#5.65_Incompatible_changes">Incompatible changes</a>, + <a href="#5.65_Documentation">Documentation</a>, + <a href="#5.65_Procedures">Procedures</a>, + <a href="#5.65_Utilities">Utilities</a>, + <a href="#5.65_Drivers">Drivers</a>, + <a href="#5.65_Platforms">Platforms</a>, + <a href="#5.65_Interpreter">Interpreter</a>, + <a href="#5.65_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.65_Library">Library</a> +</ul> +<li><a href="#Version5.64">Version 5.64 (internal) (11/5/98)</a> +<ul> +<li><a href="#5.64_Incompatible_changes">Incompatible changes</a>, + <a href="#5.64_Documentation">Documentation</a>, + <a href="#5.64_Procedures">Procedures</a>, + <a href="#5.64_Drivers">Drivers</a>, + <a href="#5.64_Library">Library</a> +</ul> +<li><a href="#Version5.63">Version 5.63 (internal) (11/4/98)</a> +<ul> +<li><a href="#5.63_Incompatible_changes">Incompatible changes</a>, + <a href="#5.63_Documentation">Documentation</a>, + <a href="#5.63_Procedures">Procedures</a>, + <a href="#5.63_Drivers">Drivers</a>, + <a href="#5.63_Interpreter">Interpreter</a>, + <a href="#5.63_Library">Library</a> +</ul> +<li><a href="#Version5.62">Version 5.62 (internal) (10/31/98)</a> +<ul> +<li><a href="#5.62_Incompatible_changes">Incompatible changes</a>, + <a href="#5.62_Documentation">Documentation</a>, + <a href="#5.62_Drivers">Drivers</a>, + <a href="#5.62_Interpreter">Interpreter</a>, + <a href="#5.62_Library">Library</a> +</ul> +<li><a href="#Version5.61">Version 5.61 (internal) (10/28/98)</a> +<ul> +<li><a href="#5.61_Documentation">Documentation</a>, + <a href="#5.61_Procedures">Procedures</a>, + <a href="#5.61_Utilities">Utilities</a>, + <a href="#5.61_Drivers">Drivers</a>, + <a href="#5.61_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.61_Streams">Streams</a>, + <a href="#5.61_Library">Library</a> +</ul> +<li><a href="#Version5.60">Version 5.60 (internal) (10/18/98)</a> +<ul> +<li><a href="#5.60_Incompatible_changes">Incompatible changes</a>, + <a href="#5.60_Documentation">Documentation</a>, + <a href="#5.60_Procedures">Procedures</a>, + <a href="#5.60_Utilities">Utilities</a>, + <a href="#5.60_Drivers">Drivers</a>, + <a href="#5.60_Platforms">Platforms</a>, + <a href="#5.60_Interpreter">Interpreter</a>, + <a href="#5.60_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.60_Streams">Streams</a>, + <a href="#5.60_Library">Library</a> +</ul> +<li>(Versions 5.51 - 5.59 deliberately omitted.) +<li><a href="#Version5.50">Version 5.50 (9/16/98)</a> +<ul> +<li><a href="#5.50_Documentation">Documentation</a>, + <a href="#5.50_Procedures">Procedures</a>, + <a href="#5.50_Utilities">Utilities</a>, + <a href="#5.50_Drivers">Drivers</a>, + <a href="#5.50_Platforms">Platforms</a>, + <a href="#5.50_Interpreter">Interpreter</a>, + <a href="#5.50_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.50_Library">Library</a> +</ul> +<li><a href="#Version5.40">Version 5.40 (beta) (9/10/98)</a> +<ul> +<li><a href="#5.40_Documentation">Documentation</a>, + <a href="#5.40_Procedures">Procedures</a>, + <a href="#5.40_Utilities">Utilities</a>, + <a href="#5.40_Drivers">Drivers</a>, + <a href="#5.40_Platforms">Platforms</a>, + <a href="#5.40_Library">Library</a> +</ul> +<li><a href="#Version5.39">Version 5.39 (beta) (9/8/98)</a> +<ul> +<li><a href="#5.39_Drivers">Drivers</a>, + <a href="#5.39_Library">Library</a> +</ul> +<li><a href="#Version5.38">Version 5.38 (beta) (9/3/98)</a> +<ul> +<li><a href="#5.38_Documentation">Documentation</a>, + <a href="#5.38_Drivers">Drivers</a>, + <a href="#5.38_Interpreter">Interpreter</a>, + <a href="#5.38_Library">Library</a> +</ul> +<li><a href="#Version5.37">Version 5.37 (beta) (8/31/98)</a> +<ul> +<li><a href="#5.37_Documentation">Documentation</a>, + <a href="#5.37_Procedures">Procedures</a>, + <a href="#5.37_Utilities">Utilities</a>, + <a href="#5.37_Drivers">Drivers</a>, + <a href="#5.37_Fonts">Fonts</a>, + <a href="#5.37_Interpreter">Interpreter</a>, + <a href="#5.37_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.37_Streams">Streams</a>, + <a href="#5.37_Library">Library</a> +</ul> +<li><a href="#Version5.36">Version 5.36 (beta) (8/25/98)</a> +<ul> +<li><a href="#5.36_Documentation">Documentation</a>, + <a href="#5.36_Utilities">Utilities</a>, + <a href="#5.36_Drivers">Drivers</a>, + <a href="#5.36_Platforms">Platforms</a>, + <a href="#5.36_Fonts">Fonts</a>, + <a href="#5.36_Interpreter">Interpreter</a>, + <a href="#5.36_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.36_Streams">Streams</a>, + <a href="#5.36_Library">Library</a> +</ul> +<li><a href="#Version5.35">Version 5.35 (beta) (8/18/98)</a> +<ul> +<li><a href="#5.35_Documentation">Documentation</a>, + <a href="#5.35_Drivers">Drivers</a>, + <a href="#5.35_Fonts">Fonts</a>, + <a href="#5.35_Interpreter">Interpreter</a>, + <a href="#5.35_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#5.35_Library">Library</a> +</ul> +<li><a href="#Version5.34">Version 5.34 (beta) (8/16/98)</a> +<ul> +<li><a href="#V5.34_Documentation">Documentation</a>, + <a href="#V5.34_Procedures">Procedures</a>, + <a href="#V5.34_Drivers">Drivers</a>, + <a href="#V5.34_Interpreter">Interpreter</a>, + <a href="#V5.34_Library">Library</a> +</ul> +<li><a href="#Version5.33">Version 5.33 (beta) (8/14/98)</a> +<ul> +<li><a href="#V5.33_Platforms">Platforms</a>, + <a href="#V5.33_Fonts">Fonts</a>, + <a href="#V5.33_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.33_Library">Library</a> +</ul> +<li><a href="#Version5.32">Version 5.32 (beta) (8/13/98)</a> +<ul> +<li><a href="#V5.32_Procedures">Procedures</a>, + <a href="#V5.32_Interpreter">Interpreter</a>, + <a href="#V5.32_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.32_Library">Library</a> +</ul> +<li><a href="#Version5.31">Version 5.31 (limited) (8/11/98)</a> +<ul> +<li><a href="#V5.31_Drivers">Drivers</a>, + <a href="#V5.31_Interpreter">Interpreter</a>, + <a href="#V5.31_Library">Library</a> +</ul> +<li><a href="#Version5.30">Version 5.30 (limited) (8/10/98)</a> +<ul> +<li><a href="#V5.30_Documentation">Documentation</a>, + <a href="#V5.30_Procedures">Procedures</a>, + <a href="#V5.30_Drivers">Drivers</a>, + <a href="#V5.30_Platforms">Platforms</a>, + <a href="#V5.30_Fonts">Fonts</a>, + <a href="#V5.30_Interpreter">Interpreter</a>, + <a href="#V5.30_Streams">Streams</a>, + <a href="#V5.30_Library">Library</a> +</ul> +<li><a href="#Version5.28">Version 5.28 (limited) (8/3/98)</a> +<ul> +<li><a href="#V5.28_Documentation">Documentation</a>, + <a href="#V5.28_Procedures">Procedures</a>, + <a href="#V5.28_Utilities">Utilities</a>, + <a href="#V5.28_Drivers">Drivers</a>, + <a href="#V5.28_Platforms">Platforms</a>, + <a href="#V5.28_Interpreter">Interpreter</a>, + <a href="#V5.28_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.28_Streams">Streams</a>, + <a href="#V5.28_Library">Library</a> +</ul> +<li><a href="#Version5.27">Version 5.27 (limited) (7/18/98)</a> +<ul> +<li><a href="#V5.27_Documentation">Documentation</a>, + <a href="#V5.27_Procedures">Procedures</a>, + <a href="#V5.27_Drivers">Drivers</a>, + <a href="#V5.27_Platforms">Platforms</a>, + <a href="#V5.27_Interpreter">Interpreter</a>, + <a href="#V5.27_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.27_Library">Library</a> +</ul> +<li><a href="#Version5.26">Version 5.26 (limited) (7/7/98)</a> +<ul> +<li><a href="#V5.26_Procedures">Procedures</a>, + <a href="#V5.26_Drivers">Drivers</a>, + <a href="#V5.26_Fonts">Fonts</a>, + <a href="#V5.26_Interpreter">Interpreter</a>, + <a href="#V5.26_Library">Library</a> +</ul> +<li><a href="#Version5.25">Version 5.25 (limited) (7/1/98)</a> +<ul> +<li><a href="#V5.25_Documentation">Documentation</a>, + <a href="#V5.25_Procedures">Procedures</a>, + <a href="#V5.25_Platforms">Platforms</a>, + <a href="#V5.25_Fonts">Fonts</a>, + <a href="#V5.25_Interpreter">Interpreter</a>, + <a href="#V5.25_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.25_Drivers">Drivers</a>, + <a href="#V5.25_Library">Library</a> +</ul> +<li><a href="#Version5.24">Version 5.24 (limited) (6/17/98)</a> +<ul> +<li><a href="#V5.24_Documentation">Documentation</a>, + <a href="#V5.24_Procedures">Procedures</a>, + <a href="#V5.24_Utilities">Utilities</a>, + <a href="#V5.24_Drivers">Drivers</a>, + <a href="#V5.24_Platforms">Platforms</a>, + <a href="#V5.24_Fonts">Fonts</a>, + <a href="#V5.24_Interpreter">Interpreter</a>, + <a href="#V5.24_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.24_Streams">Streams</a>, + <a href="#V5.24_Library">Library</a> +</ul> +<li><a href="#Version5.23">Version 5.23 (limited) (5/14/98)</a> +<ul> +<li><a href="#V5.23_Documentation">Documentation</a>, + <a href="#V5.23_Procedures">Procedures</a>, + <a href="#V5.23_Utilities">Utilities</a>, + <a href="#V5.23_Drivers">Drivers</a>, + <a href="#V5.23_Platforms">Platforms</a>, + <a href="#V5.23_Fonts">Fonts</a>, + <a href="#V5.23_Interpreter">Interpreter</a>, + <a href="#V5.23_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.23_Streams">Streams</a>, + <a href="#V5.23_Library">Library</a> +</ul> +<li><a href="#Version5.22">Version 5.22 (limited) (2/19/98)</a> +<ul> +<li><a href="#V5.22_Documentation">Documentation</a>, + <a href="#V5.22_Procedures">Procedures</a>, + <a href="#V5.22_Utilities">Utilities</a>, + <a href="#V5.22_Drivers">Drivers</a>, + <a href="#V5.22_Interpreter">Interpreter</a>, + <a href="#V5.22_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.22_Streams">Streams</a>, + <a href="#V5.22_Library">Library</a> +</ul> +<li><a href="#Version5.21">Version 5.21 (limited) (1/19/98)</a> +<ul> +<li><a href="#V5.21_Documentation">Documentation</a>, + <a href="#V5.21_Procedures">Procedures</a>, + <a href="#V5.21_Drivers">Drivers</a>, + <a href="#V5.21_Fonts">Fonts</a>, + <a href="#V5.21_Interpreter">Interpreter</a>, + <a href="#V5.21_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.21_Library">Library</a> +</ul> +<li><a href="#Version5.20">Version 5.20 (limited) (1/8/98)</a> +<ul> +<li><a href="#V5.20_Documentation">Documentation</a>, + <a href="#V5.20_Procedures">Procedures</a>, + <a href="#V5.20_Utilities">Utilities</a>, + <a href="#V5.20_Drivers">Drivers</a>, + <a href="#V5.20_Platforms">Platforms</a>, + <a href="#V5.20_Fonts">Fonts</a>, + <a href="#V5.20_Interpreter">Interpreter</a>, + <a href="#V5.20_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.20_Streams">Streams</a>, + <a href="#V5.20_Library">Library</a> +</ul> +<li><a href="#Version5.10">Version 5.10 (11/23/97)</a> +<ul> +<li><a href="#V5.10_Documentation">Documentation</a>, + <a href="#V5.10_Procedures">Procedures</a>, + <a href="#V5.10_Utilities">Utilities</a>, + <a href="#V5.10_Drivers">Drivers</a>, + <a href="#V5.10_Interpreter">Interpreter</a>, + <a href="#V5.10_Library">Library</a> +</ul> +<li><a href="#Version5.07">Version 5.07 (limited) (10/31/97)</a> +<ul> +<li><a href="#V5.07_Documentation">Documentation</a>, + <a href="#V5.07_Drivers">Drivers</a>, + <a href="#V5.07_Library">Library</a> +</ul> +<li><a href="#Version5.06">Version 5.06 (limited) (10/7/97)</a> +<ul> +<li><a href="#V5.06_Documentation">Documentation</a>, + <a href="#V5.06_Procedures">Procedures</a>, + <a href="#V5.06_Utilities">Utilities</a>, + <a href="#V5.06_Drivers">Drivers</a>, + <a href="#V5.06_Interpreter">Interpreter</a>, + <a href="#V5.06_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.06_Library">Library</a> +</ul> +<li><a href="#Version5.05">Version 5.05 (limited) (9/24/97)</a> +<ul> +<li><a href="#V5.05_Platforms">Platforms</a>, + <a href="#V5.05_Drivers">Drivers</a>, + <a href="#V5.05_Interpreter">Interpreter</a>, + <a href="#V5.05_Interpreter_PDF">Interpreter (PDF)</a> +</ul> +<li><a href="#Version5.04">Version 5.04 (limited) (9/21/97)</a> +<ul> +<li><a href="#V5.04_Documentation">Documentation</a>, + <a href="#V5.04_Procedures">Procedures</a>, + <a href="#V5.04_Utilities">Utilities</a>, + <a href="#V5.04_Drivers">Drivers</a>, + <a href="#V5.04_Interpreter">Interpreter</a>, + <a href="#V5.04_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.04_Library">Library</a> +</ul> +<li><a href="#Version5.03">Version 5.03 (8/8/97)</a> +<ul> +<li><a href="#V5.03_Documentation">Documentation</a>, + <a href="#V5.03_Procedures">Procedures</a>, + <a href="#V5.03_Drivers">Drivers</a>, + <a href="#V5.03_Platforms">Platforms</a>, + <a href="#V5.03_Fonts">Fonts</a>, + <a href="#V5.03_Interpreter">Interpreter</a>, + <a href="#V5.03_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.03_Library">Library</a> +</ul> +<li><a href="#Version5.02">Version 5.02 (7/28/97)</a> +<ul> +<li><a href="#V5.02_Documentation">Documentation</a>, + <a href="#V5.02_Procedures">Procedures</a>, + <a href="#V5.02_Utilities">Utilities</a>, + <a href="#V5.02_Drivers">Drivers</a>, + <a href="#V5.02_Platforms">Platforms</a>, + <a href="#V5.02_Fonts">Fonts</a>, + <a href="#V5.02_Interpreter">Interpreter</a>, + <a href="#V5.02_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.02_Library">Library</a> +</ul> +<li><a href="#Version5.01">Version 5.01 (6/22/97)</a> +<ul> +<li><a href="#V5.01_Documentation">Documentation</a>, + <a href="#V5.01_Procedures">Procedures</a>, + <a href="#V5.01_Utilities">Utilities</a>, + <a href="#V5.01_Drivers">Drivers</a>, + <a href="#V5.01_Platforms">Platforms</a>, + <a href="#V5.01_Interpreter">Interpreter</a>, + <a href="#V5.01_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#V5.01_Library">Library</a> +</ul> +<li><a href="#Version5.0">Version 5.0 (6/6/97)</a> +<ul> +<li><a href="#V5.0_Documentation">Documentation</a>, + <a href="#V5.0_Procedures">Procedures</a>, + <a href="#V5.0_Interpreter">Interpreter</a>, + <a href="#V5.0_Library">Library</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document is a record of changes in Ghostscript releases numbered 5.n. +For earlier versions, see the the history documents: + +<blockquote> +<a href="History4.htm">History of Ghostscript versions 4.n</a><br> +<a href="History3.htm">History of Ghostscript versions 3.n</a><br> +<a href="History2.htm">History of Ghostscript versions 2.n</a><br> +<a href="History1.htm">History of Ghostscript versions 1.n</a> +</blockquote> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<p> +Within each release, news appears in the following order: Incompatible +changes, Documentation, Procedures, Utilities, Drivers, Platforms, Fonts, +Interpreter, Streams (included under Interpreter through release 2.9.9), +Library. Changes marked with a * were made available as patches to a +previous release. + +<hr> + +<h2><a name="Version5.99"></a>Version 5.99 (beta) (1999-12-18)</h2> + +<h3><a name="5.99_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Procedures) + - All platform-specific makefiles must now define the Q macro. + - Ghostscript now exits with an error status if an error occurs in a +file named on the command line, a -c command, or piped input. +(Utilities) + - ps2epsi now disables setpagedevice: the bounding box of the EPSI +output file is recorded only in the %%BoundingBox comment. +(Drivers) + - The return type of gdev_vector_close_file is changed from void +to int. +(Interpreter) + - The name of the predefined stochastic halftone is changed to +StochasticDefault. (This change was actually made in 5.98.) + - The compht feature is replaced by stocht. + - Font searching now looks in FontResourceDir. + - The ASCIIHexEncode filter now produces upper-case output. +(Library) + - The type returned by compiled halftone resource access procedures +is changed. + +</pre><h3><a name="5.99_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - A stray character had gotten added to the beginning of a file. +(doc/Use.htm) + - Many minor HTML errors had crept in. (doc/*.htm, doc/gsdoc.el) + +Updates the docmentation on the mswinpr2 driver. (doc/Devices.htm) + +Notes that GNU make currently does not work on OpenVMS. (doc/Make.htm) + +Documents the fact that x/y_pixels_per_inch are deprecated. (gxdevcli.h) + +Documents certain bugs in ps2pdf. (doc/Ps2pdf.htm) + +Documents the addition of FontResourceDir to the font search process. +(doc/Use.htm) + +Documents the new arrangement for B paper sizes. (doc/Psfiles.htm, +doc/Use.htm, doc/gs-vms.hlp, man/gs.1) + +Removes the "under development" warning from the text API and +get_bits_rectangle documentation, and adds a little more detail. +(doc/Drivers.htm) + +Adds new user-contributed documentation for installing and using Ghostscript +fonts with X Windows. (doc/Fonts.htm, doc/Readme.htm, doc/Use.htm) + +Adds building with the Watcom compiler to the release process. +(doc/Release.htm) + +Adds an "Improving performance" section to the user documentation. +(doc/Use.htm) + +Adds a note to the C style guide about order of evaluation. +(doc/C-style.htm) + +Documents the new stocht.ps file. (doc/Psfiles.htm) + +</pre><h3><a name="5.99_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - A missing dependency caused builds on certain platforms to fail. +(int.mak) + - $(EXP) was missing before various utility invocations. (int.mak) + - VMS converts all unquoted arguments to lower case. In order to +work around this, we have added a platform-specific makefile macro Q, which +is defined as a quote mark on VMS and as an empty string on all other +platforms, and used it to quote the few mixed-case values in the makefiles. +We removed the obsolete QQ macro from os2.mak as well. (cfonts.mak, +dvx-head.mak, int.mak, openvms.mak, openvms.mmk, os2.mak, unixhead.mak, +wccommon.mak, winlib.mak) + - PSRCDIR was incorrectly referenced as PNGSRCDIR in one place. +(all-arch.mak) + - winint.mak had a conditional that Watcom's make program didn't +accept. (winint.mak) + +Adds a makefile entry to allow compilation with libpng 1.0.5. (libpng.mak) + +Updates the Borland C++ makefile to work with C++Builder 4. (bcwin32.mak) + +Updates the Unix installation makefile to install stocht.ps. (unixinst.mak) + +</pre><h3><a name="5.99_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - ps2epsi didn't disable setpagedevice. (lib/ps2epsi) + - geninit needed <stdlib.h> for 'exit'. (geninit.c) + - Some invocations of utilities didn't deal with VMS's habit of +converting arguments to lower case. (geninit.c, cfonts.mak) + - The ps2pdf*.bat files didn't produce a usage message if no +arguments were provided. (lib/ps2pdf.bat, lib/ps2pdf12.bat, +lib/ps2pdf13.bat) + - Removes some warnings from the Windows uninstaller. +(dwuninst.cpp) + +Upgrades the halftone compiler to handle Type 5 halftones. (genht.c) + +Makes the initialization string compiler recognize sections of the code +where binary tokens are allowed, and convert literal hex strings within such +sections to binary-token strings, which take less space and load faster. +(geninit.c) + +Adds a utility file to define b0 ... b6 as selecting JIS B paper sizes. +(unixinst.mak, lib/jispaper.ps) + +Modifies the font printing utility to sort unencoded characters. +(lib/prfont.ps) + +Adds a small utility to help use the StochasticDefault halftone. +(lib/stocht.ps) + +</pre><h3><a name="5.99_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The output of the epswrite driver couldn't be embedded in another +file, because it assumed it was invoked with an empty operand stack. +(gdevps.c) + - "Vector" drivers didn't detect I/O errors such as filling up the +disk. (gdevvec.h, gdevpdf.c, gdevps.c, gdevpx.c, gdevvec.c) + - The bookkeeping for image color spaces when banding was incorrect, +possibly causing memory access errors. (gxclist.h, gxclimag.c, gxclist.c) + - The cljet5 driver didn't place the image on the page correctly. +(gdevclj.c) + - 16-bit X11 devices with R/G/B widths other than 5/6/5 sometimes +failed to map colors correctly. (gdevxcmp.h, gdevxcmp.c) + - The cljet5c driver omitted a needed cast. (gdevcljc.c) + +Adds new x11rg16x and x11rg32x devices to test X Windows with unusual pixel +layout. (devs.mak, gdevxalt.c) + +Works around a bug in Acrobat Distiller 4 (and perhaps some other PostScript +interpreters) that causes an error if CCITTFaxDecode with /EndOfBlock = true +is given data with no EOB (terminated by the end of the data stream +instead). (gdevps.c) + +</pre><h3><a name="5.99_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - The absence of mktemp on the Watcom platform caused a linking +error under Windows. (watc.mak, watcw32.mak, gp_iwatc.c, gp_mktmp.c) + +</pre><h3><a name="5.99_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - findfont, /Font resourcestatus, and /Font resourceforall weren't +consistent. (lib/gs_fonts.ps, lib/gs_res.ps) + - Very large TrueType fonts caused a stackoverflow. (lib/gs_ttf.ps) + +</pre><h3><a name="5.99_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - Errors in pdfmark and setdistillerparams were ignored (!). +(lib/gs_pdfwr.ps) + - The PUT pdfmark didn't allow adding dictionaries to stream-type +objects. (The pdfmark documentation says this isn't allowed, but we think +this is an oversight, since it is reasonable and unambiguous and Acrobat +Distiller allows it.) (gdevpdfm.c) + - The token scanner used to substitute object names in pdfmark +parameters sometimes added an extra character on the end. (gdevpdfr.c) + - ashow and [a]widthshow produced incorrect text spacing. (bug +introduced by an optimization in 5.97) (gdevpdft.c) + - setdistillerparams left its argument on the stack. +(lib/gs_pdfwr.ps) + - 0-height images caused errors either at conversion or at rendering +time. (gdevpdfi.c) + - If the FontMatrix included a translation component, text was +positioned incorrectly. NOTE: this fix may not handle x/y/xyshow. +(gdevpdft.c) + - Out-of-range user-space coordinates could get generated for +rectangles. NOTE: they can still get generated for general paths. +(gdevpdfd.c) + - Widths weren't written for renamed built-in fonts. We fixed this +partly by improving the algorithm for recognizing built-in fonts. +(gdevpdff.h, gdevpdff.c, gdevpdft.c) + +Works around the Acrobat limitation that user-space coordinates must not +exceed 32K. (fix from Artifex) (gdevpdfp.c) + +Works around an Acrobat Reader 3 bug with printing files including Type 3 +fonts: with the "Download Fonts Once" option, AR3 only emits the font subset +referenced on the first page where the font appears. (gdevpdfx.h, +gdevpdf.c, gdevpdft.c) + +</pre><h3><a name="5.99_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Type 3 fonts weren't handled properly as a marking context, so if +a CharProc referenced a resource in the font, an error would occur. +(lib/pdf_fonts.ps) + - 0-height images caused an error. (lib/pdf_draw.ps) + +</pre><h3><a name="5.99_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Errors weren't propagated properly. (bug introduced in 5.98 by +enhanced error recovery code) (imainarg.h, gs.c, imainarg.c) + - Errors in -c commands or in files named on the command line +sometimes allowed execution to continue, and did not terminate with an +abnormal status. (lib/gs_init.ps) + +Changes the binary token scanner so that if the stream buffer is in foreign +space, binary-token strings will not be copied, but will be referenced +directly in the buffer. This parallels what is done for name strings. +(iscanbin.c) + +Changes the stochastic halftone from multiple Type 3s to a Type 5. +(lib/ht_ccsto.ps, int.mak) + +Replaces the compht feature with a new feature called stocht. If this +feature is selected, the StochasticDefault halftone resource will be +pre-loaded into Ghostscript. If COMPILE_INITS=1, all the halftone data +(threshold array, order and bits arrays) will be efficiently compiled into +the executable. (int.mak) + +Replaces (...\n) print with (...) = everywhere. (lib/gs_cmdl.ps, +lib/gs_fonts.ps, lib/gs_init.ps, lib/gs_setpd.ps, lib/pdf_base.ps, +lib/pdf_font.ps, lib/pdf_main.ps, lib/pdf_sec.ps) + +Adds support for JIS B paper sizes: statusdict will now include isob0..6 and +jisb0..6 operators, with b0..6 normally aliased to the former. +(lib/gs_statd.ps, lib/jispaper.ps) + +Adds a b5tray procedure; limits the valid arguments for setpagetype to the +Adobe-defined values 0 and 1. (lib/gs_statd.ps) + +Updates clients for the change in the gs_image_* API. (zimage.c) + +Makes the default halftone lookup procedure more reasonable. +(lib/gs_init.ps, lib/gs_ll3.ps) + +</pre><h3><a name="5.99_Streams"></a>Streams</h3><pre> + +Fixes problems: + - An error condition when closing a file stream wasn't reported +properly. (sfxfd.c, sfxstdio.c) + +For greater Adobe compatibility, changes the ASCIIHexEncode filter to +produce upper-case output. (sstring.c) + +</pre><h3><a name="5.99_Library"></a>Library</h3><pre> + +Fixes problems: + - The gs_image_* API didn't work for ImageType 3 images. Fixing +this required a small (but backward-compatible) API change. (fix mostly +provided by Artifex) (gsimage.h, gsimage.c) + - The change in the bbox device in 5.95 broke it for the case where +it was being used in a pipeline. (gdevbbox.c) + - A possible overflow wasn't detected when stroking lines with very +large coordinates. (gxstroke.c) + - A mask was sized incorrectly. (gsdcolor.h) + +Updates the runtime support for compiled halftones. (gxdhtres.h, gscdefs.h, +gconf.c, gxclrast.c, gxhtbit.c) + +Replaces all references to the now-deprecated x/y_pixels_per_inch with +HWResolution[0/1]. (gsdevice.c, gxclist.c, gxpcmap.c) + +</pre> + +<hr> + +<h2><a name="Version5.98"></a>Version 5.98 (beta) (1999-12-01)</h2> + +<h3><a name="5.98_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Library) + - The return type of init_proc is changed from void to int. + - The return types of gs_lib_init* are changed from void to int. +(Interpreter) + - The return types of gs_[main_]init*, gs_[main_]add_lib_path, +gs_[main_]set_lib_paths, and a number of internal initialization-related +procedures are changed from void to int. + +</pre><h3><a name="5.98_Documentation"></a>Documentation</h3><pre> + +Improves the documentation of the clist_render_rectangle procedure. +(gxclist.h) + +Makes it clear that pre-public-release filesets should not be redistributed. +(doc/Tester.htm) + +Clarifies that the parameters for the X driver are command line switches, +not X resources. (doc/Use.htm) + +Improves the documentation of ps2pdf in response to some user comments. +(doc/Ps2pdf.htm) + +Documents the initial settings of the distiller parameters. +(doc/Ps2pdf.htm) + +Documents the UniqueIDs assigned to Aladdin. (lib/gs_fonts.ps) + +Updates the documentation for the stochastic halftone mask. (doc/Make.htm) + +Removes some obsolete material. (doc/Release.htm) + +</pre><h3><a name="5.98_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The new ps2pdf* scripts weren't included in the Unix install list. +(unixinst.mak) + - The directory names were missing in BEGINFILES. (openvms.mak) + - The .pl and .sh scripts weren't included in the Unix install list. +(unixinst.mak) + +Updates all-arch.mak with a newer version from its contributor. +(all-arch.mak) + +Updates the makefiles for a change in eexec modularization. (devs.mak, +int.mak, lib.mak) + +</pre><h3><a name="5.98_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - The dvipdf usage message was incorrect. (lib/dvipdf) + +Adds a utility for mechanically adding the Adobe extended Latin characters +(primarily Central European accented letters) to a font. Eventually we +would like to integrate this into the font loader and/or make extended +versions of the standard 35 fonts. (lib/addxchar.ps) + +</pre><h3><a name="5.98_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - psdf_sorted_glyphs_include didn't handle empty lists correctly. +(gdevpsdf.c) + - A reference to a #defined constant hadn't been converted to upper +case. (gdevpsdf.h) + - Acrobat Reader couldn't handle <> as the definition of +Notice in an embedded font's FontInfo dictionary: it requires a () +string. (gdevpsd1.c) + - The [e]pswrite driver didn't take stroked paths into account when +computing the bounding box. (gdevps.c) + +Updates gdevwpr2.c with a new version from its most recent author. +(gdevwpr2.c) + +</pre><h3><a name="5.98_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - The FONTPATH file scanner wasn't protected against errors. +(lib/gs_fonts.ps) + - Some badly designed Chinese TrueType fonts, whose 'post' table +gives the name .null to all glyphs, didn't work properly. (lib/gs_ttf.ps) + - The shareware Katakana font had an incorrect UniqueID. +(fonts/fkarw.gsf) + +Adds all of the PostScript 3 fonts to the intelligent substitution tables. +(lib/gs_fonts.ps) + +Changes the FONTPATH scanner to allow a %%BeginFont: line as the first line +of a font. Nothing in Adobe's documentation suggests that this is +acceptable, but some fonts have it. (lib/gs_fonts.ps) + +Releases an updated set of the URW fonts, fixing the braceleftbt problem in +the Symbol font and a couple of missing characters in the ZapfDingbats +fonts, and adding the Euro glyph to the alphabetic fonts. The new archive +also includes fonts.scale and fonts.dir files for use with X Windows +(mkfontdir and xfs). + +Centralizes the definition of Aladdin's XUIDs. (lib/gs_fonts.ps, +lib/gs_ttf.ps) + +</pre><h3><a name="5.98_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - The algorithm for making font names unique didn't take subset +prefixes into account. (gdevpdff.h, gdevpdff.c, gdevpdfw.c) + - Computing character bounding boxes was taking an inordinate amount +of time. (performance problem only) (gdevpdff.c) + - The pdf_image_writer and pdf_image_enum structures didn't have GC +descriptors, possibly causing memory corruption. (gdevpdfi.c) + - PostScript files containing images with premature end-of-data were +converted to PDF files with premature end-of-data, which Acrobat doesn't +accept. (gdevpdfo.h, gdevpdfx.h, gdevpdfi.c, gdevpdfo.c, gdevpdfu.c) + - Pattern resources whose image was written in-line omitted a needed +gsave (q). (bug introduced in 5.94) (gdevpdfi.c) + - The similarity between a font and a base font wasn't computed +correctly, leading to some unnecessary writing of Widths for standard fonts. +(gdevpdft.c) + - Embedding a stream in the psdf_binary_writer caused garbage +collector problems, because there could be pointers to that stream from +elsewhere. (gdevpsdf.h, gdevpsdf.c) + - The algorithms for deciding whether a font was script or serif +were very inaccurate. (The revised ones are only somewhat better.) +(gdevpdff.c) + - Re-encoded characters in subset fonts weren't handled correctly. +We work around this by writing the entire font if the character doesn't +appear in the font's encoding. This is inefficient but will always produce +correct output. (gdevpdff.h, gdevpdff.c, gdevpdft.c, gdevpdfw.c) + - The meaning of bit 6 in the Flags was supposed to have changed in +PDF 1.2, but didn't. (gdevpdff.h, gdevpdff.c, gdevpdfw.c) + - The Widths array didn't get written out for embedded subsets of +the built-in fonts. (gdevpdfw.c) + - Planar images weren't handled correctly, and could cause memory +corruption. (gdevpdfi.c) + - Patterns still weren't scaled correctly; in fact, the "fix" in +5.94 can't possibly have worked, and we don't understand why it seemed to. +(gdevpdfi.c) + +Recants the belief that the default encoding for embedded fonts is +StandardEncoding (see 5.95): the appearance of this was a symptom of having +multiple fonts with the same name. (gdevpdft.c) + +Removes FONT_EMBED_UNKNOWN, which is meaningless (a decision is always made +about whether to embed a font). (gdevpdff.h, gdevpdff.c, gdevpdft.c) + +Changes the algorithm for picking the base font so that it produces more +efficient output for certain cases of re-encoded fonts. (gdevpdft.c) + +</pre><h3><a name="5.98_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Fonts were getting renamed unnecessarily. (performance and PDF +output size problem only) (lib/pdf_font.ps) + - Fonts with Widths but no FontDescriptor caused an error. +(lib/pdf_font.ps) + - TrueType fonts processed the Encoding key in the font the same way +as other font types, which is not correct. (lib/pdf_font.ps) + - For embedded Type 3 fonts, the Widths entry in a font didn't +override the width in the CharProc. (lib/pdf_font.ps, lib/pdf_ops.ps) + - If a page had multiple Contents streams, and one of the streams +ended with values on the operand stack, an error might occur. +(lib/pdf_main.ps) + - Ts and Tz within a text object didn't take effect immediately. +(lib/pdf_ops.ps) + - sc[n] and SC[N] could cause an error because Do left an extra item +on the stack temporarily. (lib/pdf_draw.ps) + +</pre><h3><a name="5.98_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Getting the unscaled outline for a Type 1 font didn't disable +hinting. (mostly a performance problem) (zchar1.c) + - Error conditions during initialization weren't recognized. Fixing +this required changing various return types from void to int. (ialloc.h, +iinit.h, imain.h, interp.h, ialloc.c, iinit.c, imain.c) + - HalftoneMode didn't affect setscreen or setcolorscreen. +(lib/gs_init.ps, lib/gs_ll3.ps) + +Makes the interpreter quit with a message, rather than a stack dump, if it +can't open the initial device and DEBUG is not set. (lib/gs_init.ps) + +Adds .setlimitclamp and .currentlimitclamp operators to access the limit +clamp flag in the graphics state. (zgstate.c) + +Changes the names of the stochastic halftone mask to be more descriptive. +(lib/ht_ccsto.ps, int.mak, unixinst.mak) + +</pre><h3><a name="5.98_Streams"></a>Streams</h3><pre> + +Adds the ability to forbid using hex encoding when writing strings. +(spsdf.h, spsdf.c) + +</pre><h3><a name="5.98_Library"></a>Library</h3><pre> + +Fixes problems: + - Computing the width of a glyph unnecessarily constructed the +entire outline. (performance problem only) (gxtype1.c) + - Getting the unscaled width of a glyph in a Type 1 font didn't +disable hinting. (mostly a performance problem) (gxtype1.c.) + - The "unknown device" GC descriptor is no longer used. (gsdevice.c) + - Some compilers *still* complained about end-of-loop code not being +reached. (gxpath2.c) + - Mixing float and double values sometimes caused spurious lines to +be drawn when stroking very short lines with large widths. (fix from +Artifex) (gxpdash.c) + - The code for handling crossing lines in the path filling algorithm +sometimes computed line crossings incorrectly, causing excessive +computation. (gxfill.c) + - When oversampling for anti-aliasing, the flatness parameter was +not scaled, leading to unnecessarily accurate curve rendering. (gspaint.c) + - An extra grestore in a Pattern PaintProc could cause a crash. +(gxpcmap.c) + - Error conditions during initialization weren't recognized. Fixing +this required changing the return type of init_proc, and various other +internal procedures, from void to int. (std.h, gslib.h, gscdefs.h, +gshtscr.c, gsiodev.c, gslib.c, gsutil.c) + +Splits off the Type 1 encryption/decryption code into a separate file for +sharing with the eexec streams. (gscrypt1.c, gxtype1.c) + +</pre> + +<hr> + +<h2><a name="Version5.97"></a>Version 5.97 (beta) (11/22/99)</h2> + +<p> +This is the next beta for 6.0. We believe the pdfwrite driver (ps2pdf) now +finally produces Acrobat-acceptable output, with reasonable handling of +fonts, and have also fixed the problem with high-level image banding. We +are cautiously hopeful that this is a "real" beta candidate. + +<h3><a name="5.97_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Drivers) + - The default CompatibilityLevel in the pdfwrite driver is now back +to 1.3. +(Library) + - The seac_data procedure of a Type 1 font must now be able to +return the glyph and/or the actual outline data. + +</pre><h3><a name="5.97_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - A <br> was missing. (doc/Release.htm) + - The final step of copying releases to www.aladdin.com was missing. +(doc.Release.htm) + +Documents the new situation with the ps2pdf* scripts. (doc/Ps2pdf.htm) + +Documents the simplification of the pthreads code. (doc/Helpers.htm, +doc/Make.htm) + +Adds a requirement to the license that modifications include the name and +e-mail address of the author, and the date and purpose of the modification. +(doc/Public.htm) + +Adds a link to the documentation for setdistillerparams. (doc/Ps2pdf.htm) + +</pre><h3><a name="5.97_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - On OpenVMS, the test for whether the bin and obj subdirectories +already existed was incorrect. (openvms.mak, openvms.mmk) + - The recently updated Borland/Inprise makefile deleted some temp +files prematurely. (bcwin32.mak) + - The dependencies for the Unix install-scripts and install-data +targets were incorrect. (unixinst.mak) + +Updates the RPM spec files. (gs.rps, gs-fonts.rps, rpm-conf.dif) + +Adds support for compilation with Borland/Inprise C++Builder 3. +(bcwin32.mak, winint.mak) + +Adds a note on font installation under Red Hat Linux 6. (doc/Install.htm) + +</pre><h3><a name="5.97_Utilities"></a>Utilities</h3><pre> + +Adds ps2pdf12 and ps2pdf13 scripts to select the PDF output level +explicitly; makes ps2pdf a wrapper for ps2pdf12. (lib/ps2pdf, +lib/ps2pdf.bat, lib/ps2pdf12, lib/ps2pdf12.bat, lib/ps2pdf13, +lib/ps2pdf13.bat, lib/ps2pdfwr, lib/ps2pdfwr.bat) + +Updates the Windows install/setup program to display the Aladdin start menu +folder on a successful install, so that the user gets some feedback that all +went well. (dwinst.cpp, dwsetup.cpp) + +</pre><h3><a name="5.97_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The lj5{mono,gray} drivers didn't send the page size to the +printer. (gdevpxut.h, gdevlj56.c, gdevpx.c, gdevpxut.c) + - The pxl drivers didn't handle out-of-range points properly. +(gdevvec.c, gdevpx.c) + - The bmpa drivers didn't produce multi-page output files correctly +-- all pages but the first were blank. (The bmp format is supposed to be +single-page, but at least some readers handle multi-page files correctly.) +(gdevbmpa.c) + - The code for writing embedded TrueType fonts was broken. (bug +probably introduced in 5.9x) (gdevpsdt.c) + +Removes an unused variable. (gdevbmpa.c) + +</pre><h3><a name="5.97_Platforms"></a>Platforms</h3><pre> + +Replaces the 4 pthreads files, which included a dependence on the non-POSIX +<semaphore.h>, with a single file that uses only pthreads procedures. +(gp_psync.c, gp_posem.c [deleted], gp_pthr.c [deleted], gp_ptsem.c +[deleted], gp_semon.c [deleted]) + +</pre><h3><a name="5.97_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - Whether or not to write the Widths array was implicit in the data +structures rather than explicit, so it was sometimes written unnecessarily. +(gdevpdfx.h, gdevpdff.c, gdevpdft.c) + - Fonts based on the 14 built-in fonts didn't set BaseFont to the +name of the built-in font. (gdevpdff.c) + - The determination of whether a glyph was available was incorrect +for embedded fonts, leading some glyphs to be turned into bitmaps +unnecessarily. (gdevpdft.c) + - Apparently Acrobat Reader gets confused if different subsets of +the same font have different FirstChar and LastChar values, so we have to +write the full Widths array each time. (gdevpdfx.h, gdevpdff.c, gdevpdft.c) + - A structure member wasn't initialized when processing pdfmark +annotations, possibly causing a memory access error. (gdevpdfm.c) + - The typedef for gx_device_pdf had a typo. (gdevpdfx.h) + - Each embedded font subset had its own FontDescriptor and its own +font data, confusing Acrobat Reader. Fixing this required sharing +FontDescriptors among multiple fonts and making FontDescriptors +pseudo-resources. (gdevpdff.h, gdevpdfx.h, gdevpdf.c, gdevpdff.c, +gdevpdft.c, gdevpdfw.c) + - Incrementally defined embedded Type 1 fonts didn't write out +correct Widths. (gdevpdff.c) + - PDF resources didn't consistently record the gs_id of the +structure they represented, possibly causing resources to be duplicated +unnecessarily. (gdevpdff.c, gdevpdfu.c) + +Reinstates PDF text output. (gdevpdf.c) + +Changes the default CompatibilityLevel in the pdfwrite device back to 1.3, +since the ps2pdf scripts now make it easy to choose the PDF level. +(gdevpdf.c) + +When possible, uses the widths obtained from the font, rather than the +default implementation of text_process, to complete the text_process +operation. This greatly speeds up the conversion process. (gdevpdft.c) + +Allows character remapping (but not reencoding) of TrueType fonts. +(gdevpdft.c) + +Factors the definitions for cos objects and font-related objects into header +files more thoroughly. (gdevpdff.h, gdevpdfo.h, gdevpdfx.h, gdevpdf.c, +gdevpdff.c, gdevpdfi.c, gdevpdfm.c, gdevpdfr.c, gdevpdft.c, gdevpdfu.c) + +Makes the names of some structure elements correspond more directly to keys +in PDF directories. (gdevpdff.h, gdevpdff.c, gdevpdft.c) + +Splits off the font-writing code, since a source file was getting too big. +(gdevpdff.h, gdevpdff.c, gdevpdfw.c) + +Adds CharSet information to embedded Type 1 font descriptors. (gdevpdfw.c) + +Makes all font names in the output unique, selected by static bool +MAKE_FONT_NAMES_UNIQUE. (gdevpdff.h, gdevpdff.c, gdevpdft.c) + +Reinstates support for one special case of composite fonts (8/8 mapping with +the high order byte always zero) that is used by the AdobePS4 Windows +driver. (gdevpdft.c) + +Changes the assumption about the default encoding for embedded TrueType +fonts from StandardEncoding to no known encoding. (gdevpdft.c) + +Changes FONT_EMBED_BASE14 to FONT_EMBED_STANDARD for greater +descriptiveness. (gdevpdff.h, gdevpdff.c, gdevpdft.c) + +</pre><h3><a name="5.97_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The same-font test for Type 1 fonts didn't correctly identify +re-encoded fonts with unchanged metrics. (zfont1.c) + - If a save level was split into multiple internal save objects, +some changes could get undone before objects were finalized. (isave.c) + - When releasing all of memory, stable allocators weren't finalized. +(isave.c) + - Some compilers gave annoying and needless warnings about integer +overflow. (store.h) + - There was a signed/unsigned char * mismatch. (iccfont.c) + +Adds a debugging procedure. (idebug.h, idebug.c) + +Changes the Type 1 font seac_data procedure to match the new API. +(zchar1.c) + +</pre><h3><a name="5.97_Library"></a>Library</h3><pre> + +Fixes problems: + - The GC didn't know about the pointers to the tables for Indexed +color spaces when banding, occasionally causing the tables to be written as +garbage. This is the real fix for the problem discovered in 5.96. +(gsiparam.h, gxclist.h, gxiparam.h, gxclimag.c, gxclist.c, gxclpath.c) + - With 'async' drivers, multi-page files didn't render properly +(they got a rangecheck error on every page after the first one). +(gdevprna.c) + - Some compilers still complained about end-of-loop code not being +reached. (gxpath2.c) + - The scaled font cache required that a font have a UID in order to +be a candidate for caching. (gsfont.c) + - An obsolete check caused slight discrepancies between banded and +non-banded output. (gxstroke.c) + - The glyph_outline procedure for TrueType fonts transformed the +width by the scaling matrix twice. (gstype42.c) + +Removes some now-unnecessary extern_st declarations. (gdevbbox.c, +gdevplnx.c, gximage3.c) + +Removes some initializations that read uninitialized locations and are +logically unnecessary. (gsalloc.c, gscolor.c) + +Adds makefile rules for compiling the MD5 implementation. (lib.mak) + +Makes the seac_data of a Type 1 font return the glyph and/or the actual +outline data. This is necessary because some Type 1 fonts don't have the +accents in the same positions as StandardEncoding, but use seac anyway. +(gxfont1.h) + +Changes the Type 1 font interpreter to match the new seac_data API. +(gxtype1.c) + +</pre> + +<hr> + +<h2><a name="Version5.96"></a>Version 5.96 (beta) (11/12/99)</h2> + +<p> +This is the next beta for 6.0. To meet a need of our commercial licensing +partner for a PostScript LL3 release, we are releasing this fileset with all +font handling in the PDF writer disabled, as well as high-level image +banding. This is a temporary measure: we will reinstate PDF text in 5.97, +and high-level image banding as soon as we can straighten out its memory +management problems. + +<h3><a name="5.96_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Procedures) + - All Unix 'make' programs must now predefine MAKE as the name of +the program. +(Interpreter) + - zcolor_remap_one now returns o_push_estack rather than 0 in the +case where it doesn't actually have to sample the procedure. +(Library) + - Multi-plane halftones (when needed) are now used for all CMYK +devices, not only if setcolorscreen was executed. + - Font implementors must now provide a same_font procedure. + +</pre><h3><a name="5.96_Documentation"></a>Documentation</h3><pre> + +Makes it clear that gsnup.ps is very simple and naive. (doc/Psfiles.htm, +lib/gsnup.ps) + +Documents the new -Z_ switch. (doc/Use.htm) + +Documents that SYNC=nosync allows building on systems that don't support +multi-threading. (doc/Make.htm) + +Adds documentation for building on Macintosh Rhapsody systems. +(doc/Make.htm) + +Adds a reference to the new all-arch.mak file. (doc/Helpers.htm, +doc/Make.htm) + +Notes that ps2pdf does preserve the color space for images. +(doc/Ps2pdf.htm) + +Documents the new self-extracting archive for MS Windows. (doc/Install.htm, +doc/Release.htm) + +Further improves the documentation of the PDF text machinery. (gdevpdfx.h) + +Reorganizes the build information for Unix. (doc/Make.htm) + +Adds information on building Ghostscript under BSDI. (doc/Make.htm) + +Notes that versions of zlib before 1.1.3 may cause an error on rare +occasions. (zlib.mak) + +Fixes a few other minor problems. (doc/Current.htm, doc/Devices.htm, +doc/DLL.htm, doc/Install.htm, doc/Language.htm, doc/Make.htm, +doc/New-user.htm, doc/Ps2pdf.htm, doc/Source.htm, doc/Use.htm) + +</pre><h3><a name="5.96_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - dctd.dev and dcte.dev were defined in $(PSD), but referenced in +$(GLD). (devs.mak, int.mak, lib.mak) + - pipe.dev was defined in $(GLD), but referenced in $(PSD). +(bcwin32.mak, dvx-gcc.mak, msvc32.mak, unix-gcc.mak, unixansi.mak, +unixtrad.mak) + - XLIBDIRS was included in the linker command even if none of the +X drivers were used. (devs.mak, dvx-tail.mak, ugcclib.mak, unixlink.mak) + - The OpenVMS makefile didn't create the obj and bin directories +properly. (openvms.mak) + - 'make debug' and 'make pg' didn't work on Unix systems where the +make program was named something other than make. (unix-end.mak) + +Introduces a new top-level makefile macro, STDLIBS, that is -lm for all +reasonable platforms but null for Rhapsody. (dvx-gcc.mak, dvx-tail.mak, +ugcclib.mak, unix-gcc.mak, unixansi.mak, unixlink.mak, unixtrad.mak) + +Adds Nelson Beebe's contributed multi-architecture Unix makefile. +(all-arch.mak) + +Makes it theoretically possible in theory to build the new Windows +install/uninstall program with the Borland compiler. However, since this +requires Borland C++ 4.52 and we only have 4.5, this is disabled in +bcwin32.mak. (bcwin32.mak, winint.mak) + +</pre><h3><a name="5.96_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - The default for gsnup.ps was 3x2 landscape, rather than 2x2 +portrait. (lib/gsnup.ps) + - gslp.ps was broken (by the changes made to support gsnup.ps). +(lib/gslp.ps) + +Adds a -link switch to genconf, to allow verbatim copying of commands into +the linker command line. (genconf.c) + +Edits files to add missing $Id lines and module summary comments, and to +delimit module summary comments from further material. (dwinst.h, +dwsetup.h, dwuninst.h, bench.c, dwuninst.cpp) + +Makes it possible to build the new Windows install/uninstall program with +the Borland compiler. (dwinst.cpp, dwsetup.cpp, dwsetup.def, dwsetup.rc, +dwuninst.cpp, dwuninst.def) + +</pre><h3><a name="5.96_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - Embedded Type 1 fonts lacked some 'def' commands. (gdevpsd1.c) + - Multiple Master Font instances weren't written out correctly. +(gdevpsd1.c) + +Edits files to add missing $Id lines and module summary comments, and to +delimit module summary comments from further material. (gdev8bcm.h, +gdevht.h, gdevpccm.h, gdevpcl.h, gdevsvga.h, gdevx.h, gdev3852.c, +gdev8510.c, gdevadmp.c, gdevcd8.c, gdevcif.c, gdevclj.c, gdevhl7x.c, +gdevifno.c, gdevimgn.c, gdevl31s.c, gdevmeds.c, gdevmswn.c, gdevos2p.c, +gdevpe.c, gdevpm.c, gdevsj48.c, gdevtknk.c, gdevupd.c, gdevwddb.c, +gdevwpr2.c, gdevwprn.c) + +</pre><h3><a name="5.96_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - The pthreads wrapper had a procedure type mismatch. We fixed this +by making it allocate and free a wrapper object, as the Windows wrapper +does. (gp_pthr.c) + +Edits files to add missing $Id lines and module summary comments, and to +delimit module summary comments from further material. (dwimg.h, dwmain.h, +gsdll.h, gp_msio.c, gp_mswin.c) + +Removes an unnecessary #include <semaphore.h>. (gp_semon.c) + +Adds a module that implements semaphores using the pthreads mutex +facilities, as an alternative to gp_posem.c. Unfortunately, using this +module causes immediate crashes on both GNU/Linux and BSDI, and we don't know +why. (Let us know if you figure it out.) (gp_ptsem.c) + +</pre><h3><a name="5.96_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - The character and word spacing weren't recognized as being reset +by a PDF grestore. (gdevpdfx.h, gdevpdfu.c) + - Fonts that couldn't be embedded were always converted to bitmaps, +rather than becoming candidates for non-embedded representation (if +EmbedAllFonts is false and the font doesn't appear on the AlwaysEmbed list). +(gdevpdfx.h, gdevpdff.c, gdevpdft.c) + - Stream-type Cos objects were written with no (0-length) data. +(gdevpdfm.c) + - Reencoded base 14 fonts were not recognized as such, leading to +excessive font embedding. (gdevpdfx.h, gdevpdf.c, gdevpdff.c, gdevpdft.c) + - Fonts were embedded by default even if EmbedAllFonts was false. +(gdevpdft.c) + +Changes MaxSubsetPct to 35 to match Acrobat Distiller. (gdevpsdf.h) + +Adds some tracing output (-Z_). (gdevpdff.c, gdevpdft.c) + +Temporarily disables font handling in the PDF writer, to meet a need of our +commercial licensing partner. All text will be converted to code-scrambled +Type 3 bitmap fonts. (gdevpdf.c) + +</pre><h3><a name="5.96_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - The sh operator caused an invalidaccess error for shadings that +required a DataSource. (lib/pdf_draw.ps) + - The test for whether a Widget appearance was a Form or a +collection of sub-appearances was incorrect, causing an /undefined error in +the latter case. (lib/pdf_draw.ps) + - If the FontName in a Font descriptor differed from the BaseFont +name in the Font object, the interpreter used the two inconsistently, +sometimes causing the wrong font to be used. (lib/pdf_font.ps) + - ICCBased color spaces caused an error. (lib/pdf_draw.ps) + +Works around the fact that Acrobat Distiller produces files in which a +Widget's Form appearance lacks Type and Subtype keys. (lib/pdf_draw.ps) + +</pre><h3><a name="5.96_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Failure in allocating the name table would cause a crash. +(iname.c) + - Shadings with procedure-based filters didn't work. +(lib/gs_ll3.ps, ifilter.h, zfileio.c, zfproc.c) + - Some compilers complained about arithmetic on an enum. (iparam.c) + - Setting a transfer or similar function to the identity function +didn't set the cached values, so the setting didn't consistently take +effect. (icolor.h, zcolor.c) + - If the C library's implementation of sprintf with a %g format ever +produced a number with an exponent but no decimal point, a crash would +occur. (iutil.c) + - The PageDeviceName page device parameter wasn't supported. +(lib/gs_lev2.ps, lib/gs_setpd.ps) + - A public procedure wasn't declared extern if DEBUG wasn't set. +(igc.h) + - Because of a typo, loading resources automatically from a file +always failed. (bug introduced in 5.94) (lib/gs_res.ps) + +Edits files to add missing $Id lines and module summary comments, and to +delimit module summary comments from further material. (files.h, iastate.h, +ibnum.h, ichar.h, ifilter.h, iimage.h, iimage2.h, iparam.h, isave.h, +iscan.h, isstate.h, istream.h, iutil.h, opcheck.h, scanchar.h) + +Adds a font similarity testing procedure for Type 1/2/4 fonts. (zfont1.c) + +</pre><h3><a name="5.96_Streams"></a>Streams</h3><pre> + +Edits files to add missing $Id lines and module summary comments, and to +delimit module summary comments from further material. (sbhc.h, sbtx.h, +sbwbs.h, sdct.h, scfdgen.c, scfdtab.c, shcgen.h, siscale.h, sjpeg.h, +slzwx.h, smtf.h, spdiffx.h, spngpx.h, srlx.h) + +</pre><h3><a name="5.96_Library"></a>Library</h3><pre> + +Fixes problems: + - Making a transformed font inappropriately copied the font's +notification list. (gsfont.c) + - Some compilers complained about end-of-loop code not being +reached. (gxpath2.c) + - The first two arguments of scale_delta was swapped, causing +anomalous output for certain Type 1 fonts with curves where the starting and +ending points had the same X or Y coordinate. (gxhint3.c) + - Large smoothness values produced blocky output. (gxshade.c) + - When banding, in a region where a CMYK halftone had no K at all, +the output was likely to be black rather than the correct color. (gxcht.c) + - Interpolated images with mirrored X scaling weren't mirrored. +(gxiscale.c) + - Interpolated images were truncated. (gxiscale.c) + - Halftone caches could have a dangling pointer to a transfer map in +the halftone order. (gxht.c) + - The next-character code returned for kshow was the same as the +current character. (bug probably introduced in 5.86) (gstext.c) + - The GC didn't know about the pointers to the tables for Indexed +color spaces when banding, occasionally causing the tables to be written as +garbage. In the process of investigating this, we discovered that the GC +didn't know about *any* of the pointers in the structures used to track +banded images. ****** NOT FIXED, TOO MUCH RISK OF INTRODUCING FURTHER +BUGS. ****** Instead, we disabled high-level image banding in this fileset. +(gxclimag.c) + +Changes the name of a variable from ppc to ppcr, because an Apple compiler +inappropriately defines the name ppc when compiling on a PowerPC. +(gxshade6.c) + +Edits files to add missing $Id lines and module summary comments, and to +delimit module summary comments from further material. (gdevbbox.h, +gscoord.h, gscpixel.h, gsfname.h, gsfont.h, gsimage.h, gslib.h, gsmdebug.h, +gspaint.h, gspath.h, gspath2.h, gxalloc.h, gxclipm.h, gxclpage.h, +gxclpath.h, gxcmap.h, gxcoord.h, gxcpath.h, gxdda.h, gxdevmem.h, gxfcache.h, +gxfont.h, gximage.h, gxiodev.h, gxpaint.h, gxpath.h, gxpcolor.h, gzacpath.h, +gzcpath.h, gzht.h, gzpath.h, md5.h, gxdither.c, md5.c) + +Adds a prototype for debug_find_pointers. (gxalloc.h) + +Adds a font procedure for testing whether two fonts are the same in various +ways. This is needed so that the PDF writer can do a reasonable job of +identifying reencoded and renamed versions of the base 14 fonts. (gxfont.h, +gsfont.c) + +Changes a macro to a procedure and improves some commenting. (gxhint3.c) + +Changes the halftoning code so that multi-plane halftones are always used on +CMYK devices, even if only a single halftone is set (setscreen or +HalftoneType 1). (gxcht.c, gxdither.c) + +</pre> + +<hr> + +<h2><a name="Version5.95"></a>Version 5.95 (beta) (11/1/99)</h2> + +<p> +There were several new problems in 5.94, some of them severe. We hope this +beta candidate fixes them without introducing any new ones. It also fixes +some minor problems not reported in 5.93. + +<p> +We think we have finally found the right workarounds for Acrobat and +specification problems so that pdfwrite output (with CompatibilityLevel +either 1.2 or 1.3) both conforms as closely as possible to the published PDF +specification and works with Acrobat Reader (3 or 4 respectively) for both +displaying and printing. + +<p> +NOTE: The default level of output from the pdfwrite device (ps2pdf) has been +changed back to PDF 1.2 (Acrobat 3 compatible), because this is what the +majority of users want. For PDF 1.3 output, use -dCompatibilityLevel=1.3. + +<p> +Note: some post-6.0 code is included under an #ifdef POST60. + +<h3><a name="5.95_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Drivers) + - The default CompatibilityLevel in the pdfwrite device (ps2pdf) is +now 1.2 rather than 1.3. + - pdfwrite now discards information after the last showpage rather +than producing an additional page. +(Library) + - The is_monotonic procedure of a function now returns a result that +indicates the direction of monotonicity of each value separately. + - The coordinate system used internally by the bbox device is now +upright (lower left corner = (0,0) rather than upper left corner). (This +should not make any difference to clients, who should always have been using +default user space coordinate.) + +</pre><h3><a name="5.95_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - A couple of URLs were incorrect or out of date. (doc/Readme.htm, +doc/Use.htm) + - There was a typo in a comment. (gxfont.h) + - An old bug had been fixed, but the documentation had not been +updated to reflect this. (doc/Current.htm) + +Documents the requirement to change SYNC from posync to fbsdsync on FreeBSD. +(doc/Make.htm) + +Adds references to Adobe's on-line documentation. (doc/Readme.htm) + +Updates the release procedure to mention adding .ps files. +(doc/Release.htm) + +Adds documentation for the bbox device. (doc/Use.htm) + +Documents the new gsnup.ps utility. (doc/Psfiles.htm) + +Modifies the gslp utility for greater page independence and smaller output +files. (lib/gslp.ps) + +Documents the fact that the default output from pdfwrite is PDF 1.2. +(doc/Ps2pdf.htm) + +Adds Inprise (as the new name of the Borland tools) in a few places. +(doc/Make.htm) + +Updates the release documentation slightly. (doc/Release.htm) + +</pre><h3><a name="5.95_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - FreeBSD uses a different name for the pthreads implementation. +(lib.mak, unixansi.mak, unix-gcc.mak, unixtrad.mak) + +Encapsulates gsnogc.$(OBJ) in a gsnogc.dev module, to make it more sharable. +(lib.mak) + +</pre><h3><a name="5.95_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - guilsinglleft and guilsinglright were misspelled. +(lib/ps2ascii.ps) + - The ps2pdf script didn't handle the -I switch correctly. We fixed +this by including the options twice, both before and after the automatically +supplied options. (lib/ps2pdf, lib/ps2pdf.bat) + +Adds an install/uninstall program for Windows 9x, including optional +generation of a self-extracting executable, written by Ghostgum Software Pty +Ltd. This program is not actually used yet. (msvc32.mak, winint.mak, +dwinst.*, dwsetup.*, dwuninst.*) + +Adds a new environment parameter to arch.h, ARCH_DIV_NEG_POS_TRUNCATES. +(genarch.c) + +Adds a utility for N-up printing. (unixinst.mak, lib/gsnup.ps) + +Changes ps2pdf so that if showpage has ever been executed, any partial page +after the last showpage is discarded rather than made into an additional +page. This is consistent with printers, and correctly handles BeginPage +procedures that draw backgrounds. (gdevpdf.c) + +</pre><h3><a name="5.95_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The TIFF drivers could produce incorrectly sorted tag tables. +(gdevtifs.c) + - The OS/2 PM driver had an incorrect #include. (gdevpm.c) + - Embedded Type 1 fonts that used seac didn't automatically include +the constituent glyphs. (gdevpsd1.c) + - Embedded Type 1 fonts wrote the wrong font name in the first +(comment) line. (gdevpsd1.c) + - Deleting elements from the AlwaysEmbed or NeverEmbed list could +cause a memory access error. (gdevpsdp.c) + - The string and string array members of psdf_distiller_params were +omitted from the GC descriptor, causing memory corruption. (gdevpsdf.h, +gdevpsdf.c, gdevpsdp.c) + - When using "async" printing, the buffer device was destroyed too +soon. (fix from Artifex) (gdevbmpa.c) + +Adds (partial) parsing for the new Acrobat Distiller 4.0 parameters, under +#ifdef POST60. The put_params code isn't finished. (gdevpsdf.h, +gdevpsdp.c) + +</pre><h3><a name="5.95_Platforms"></a>Platforms</h3><pre> + +Changes product to productfamily as the Windows registry key. (gp_wgetv.c) + +</pre><h3><a name="5.95_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - guilsinglleft and guilsinglright were misspelled in +MacRomanEncoding and MacGlyphEncoding. (lib/gs_mro_e.ps) + - plusminus was misspelled in MacGlyphEncoding. (lib/gs_mgl_e.ps) + - braceleftbt was misspelled as bracelefttbt in the Symbol font. +(fonts/s050000l.pfb) ****** NOT DISTRIBUTED YET ****** + - euro was incorrectly included at position 240 in the Symbol +encoding. (lib/gs_sym_e.ps) + - Zcaron and zcaron weren't included in WinAnsiEncoding (this is new +for PDF 1.3). (lib/gs_wan_e.ps) + - Euro replaced currency in MacRomanEncoding. We had to change this +back, even though the Mac does use code 219 for Euro, for compatibility with +Adobe documentation. (lib/gs_mro_e.ps) + - TrueType fonts with more glyphencoding entries than glyphs could +cause errors. (lib/gs_ttf.ps) + +Adds the Adobe Central European encoding. (lib/gs_ce_e.ps, unixinst.mak) + +Adds more tracing to the TrueType font loader. (lib/gs_ttf.ps) + +Adds the remaining PDF Encodings to the predefined set. (lib/gs_lgo_e.ps, +lib/gs_lgx_e.ps, lib/gs_mex_e.ps, lib/gs_mgl_e.ps, lib/gs_mro_e.ps) + +</pre><h3><a name="5.95_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - When printing an error message, a pointer/length string was +incorrectly treated as a C string. (gdevpdfm.c) + - The treatment of text was completely broken by "improvements" made +in 5.94. We think we've put things back to a state that at least isn't any +worse than 5.93. (gdevpdfx.h, gdevpdff.c, gdevpdft.c) + - The test for whether a glyph was present in a glyph set was wrong, +possibly causing an infinite loop. (This never happened, because the code +was masked by other bugs.) (gdevpdft.c) + - Testing the PDF compatibility level didn't work correctly, because +of float/double mismatches. (gdevpdfx.h, gdevpdfp.c) + - Embedded TrueType fonts were still written in binary even if +ASCII85EncodePages was true. (gdevpdff.c) + - Embedded TrueType subsets didn't use Flags to indicate that they +had a non-standard cmap. (gdevpdff.c) + - Contrary to the obvious reading of the PDF specification, it +appears that the default encoding for embedded fonts, if no BaseEncoding is +specified, is StandardEncoding, *not* the built-in encoding of the font +itself; and that any differences from StandardEncoding must be listed +explicitly. (gdevpdft.c) + +Adds parsing for the new Acrobat Distiller 4.0 parameters, under #ifdef +POST60. (lib/gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c) + +Ensures that the Mac encodings are loaded when writing PDF. (devs.mak) + +Works around an Acrobat 3 bug: The only cmap table that works in TrueType +fonts is format 0, which can only reference glyphs up to 255. Consequently, +a TrueType font whose Encoding references glyphs above 255 cannot be +embedded (as a font). (gdevpdft.c) + +Changes the default CompatibilityLevel from 1.3 to 1.2. The majority of +users are running Acrobat 3. (gdevpdf.c) + +</pre><h3><a name="5.95_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - The T* operator was changed incorrectly to use the negative of the +leading value. (lib/pdf_ops.ps) + - The Tz value scaled the X offset for Td and TD (which it +shouldn't), occasionally causing strings to be displaced horizontally. +(lib/pdf_ops.ps) + - sc[n]/SC[N] didn't work with 1-value color spaces, because the +code incorrectly assumed the operand stack contained only the values on the +PDF operand stack. (bug introduced by Annotation rendering in 5.94) +(lib/pdf_base.ps, lib/pdf_draw.ps, lib/pdf_main.ps, lib/pdf_ops.ps) + - The HTP key in the graphics state caused an error if the +interpreter didn't implement sethalftonephase. (lib/pdf_draw.ps) + - If there was no Names tree, invalid links (string Dest values) +caused an error instead of being ignored. (lib/pdf_main.ps) + - An annotation with a Thread action caused an error. +(lib/pdf_main.ps) + +Adds table entries, but not implementation, for the op and OPM keys in +ExtGState dictionaries. (lib/pdf_draw.ps) + +Works around a bug in Adobe Acrobat Distiller 4.0 for Windows: it uses the +value /Default with the BG, UCR, and TR keys in an ExtGState. +(lib/pdf_draw.ps, lib/pdf_main.ps) + +Adds additional tracing for Functions. (lib/pdf_draw.ps) + +Implements the BG2, UCR2, and TR2 keys in ExtGStates. (lib/pdf_draw.ps) + +</pre><h3><a name="5.95_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - There was a (harmless) signed/unsigned mismatch. (imainarg.c) + - If build_gs_simple_font had to add any elements to the font +dictionary, a temporary pointer to the CharStrings could become invalid, +causing crashes or confusion. (zbfont.c) + - The check for known Encodings included some pseudo-Encodings. +(zbfont.c) + - The error object wasn't reset to null before each call of the +interpreter, possibly causing the garbage collector to mark it even if it no +longer existed. (interp.c) + +Adds productfamily as a new predefined name, for the benefit of the Windows +registry. (iinit.c) + +Changes the default color smoothness to 0.02 to match Adobe RIPs. +(lib/gs_ll3.ps) + +Adds using the glyph_info procedure for Type 1 fonts, needed to fix the +problem with seac and Type 1 embedded fonts. (zfont1.c) + +</pre><h3><a name="5.95_Library"></a>Library</h3><pre> + +Fixes problems: + - Memory devices that may execute RasterOp must be initialized with +an allocator (for temporary bitmaps), but sometimes they weren't. +(gdevdrop.c) + - The computation of colors_used for images could cause arithmetic +exceptions and/or produce incorrect results. (fix from Artifex) +(gxclimag.c) + - A dead variable was getting incremented in a loop. (Small +performance bug only.) (gsfunc0.c) + - The cached is_monotonic value in a function head was incorrectly +declared bool rather than int. (gsfunc.h) + - The clip operators didn't always recognize empty clipping regions: +sometimes they retained a 1-pixel-wide region. (gxcpath.c) + - The bbox device could get into a recursion loop if it had a +non-null target with a non-standard fill_path procedure. (gdevbbox.c) + - The procedure u32 was defined in two places. (gsutil.h, +gdevpsdt.c, gsutil.c, gstype42.c) + - The DataSource member of a sampled function wasn't reported to the +garbage collector. (gsfunc0.h, gsfunc0.c) ****** MUST DO THE SAME FOR +SHADINGS ****** + - All name-type parameters (device and other) were converted as +strings rather than names. (gsparam.c) + - Using a mask Pattern with an anti-aliased device could make +invalid memory accesses and cause a crash. (gxpcmap.c) + - math_.h was included unnecessarily. (gxfill.c, gxhint3.c) + - In a few places, (fixed-point) coordinates were truncated towards +zero rather than taking the floor. (It's likely that this had no effect.) +(gxfill.c, gxpcopy.c) + - The join and cap values weren't taken into account when dividing a +stroked path into bands, possibly causing some caps or joins to be dropped +if they fell exactly at band boundaries. (gxclpath.c) + - An arithmetic overflow in gx_adjust_if_empty could produce +incorrect output. (gxfill.c) + - Because the bbox device used a Y-inverted coordinate system, it +could produce incorrect results for out-of-bounds coordinates. (gdevbbox.c) + - The default font_info procedure didn't compute MISSING_WIDTH if +IS_FIXED_WIDTH wasn't requested. (gsfont.c) + - space_params wasn't managed properly, causing problems if the +device altered the default values. (fix from Artifex) (gdevprn.c) + - The Macintosh cmap table for embedded TrueType fonts was written +incorrectly. (gdevpsdt.c) + - The OS/2 table for embedded TrueType fonts could be inconsistent +with the cmap table. (gdevpsdt.c) + - In embedded subset TrueType fonts, loca entries beyond the last +occupied glyph contained garbage. (gdevpsdt.c) + - Embedded TrueType subsets didn't include the components of +composite glyphs. (gdevpsdf.h, gdevpsd1.c, gdevpsdf.c, gdevpsdt.c) + +Changes the is_monotonic procedure of Functions so that it reports the +direction of monotonicity of each value independently. This allows a larger +class of functions to be detected as monotonic. (gsfunc.h, gsfunc0.c, +gsfunc3.c) + +Works around a bug in Fontographer that causes it to produce (or at least +allow users to produce) Type 1 fonts using seac in which the side bearing of +the accented character differs from the side bearing of the base glyph. The +published Type 1 specification and Adobe's engineers agree that such fonts +are invalid, but the authors of Fontographer don't seem to care (this is the +4th Fontographer bug that we have had to patch around so far). (gxtype1.h, +gstype1.c, gxtype1.c) + +Adds gs_productfamily, for the benefit of the Windows registry. (gscdefs.h, +gscdef.c) + +Adds a glyph_info procedure for Type 1 fonts, needed to fix the problem with +seac and Type 1 embedded fonts. (gxfont1.h, gxtype1.c) + +Adds a gs_resize_struct_array procedure that either allocates or resizes an +object. We have wanted this for quite a while. (gsmemory.h, gsmemory.c) + +Adds the remaining PDF Encodings to the predefined set. Also adds string +names for the "real" encodings. (gsccode.h) + +Adjusts the format of embedded TrueType fonts to be closer to that produced +by Acrobat Distiller, in the hope of making Acrobat Reader accept them. +(gdevpsdf.h, gdevpsdt.c) + +</pre> + +<hr> + +<h2><a name="Version5.94"></a>Version 5.94 (beta) (9/30/99)</h2> + +<p> +This is (intended to be) the last beta candidate for the 6.0 release. Most +changes other than added documentation are bug fixes. In order to address a +last-minute problem report, we implemented a subset of Annotation rendering +for PDF files. + +<p> +At the request of the Free Software Foundation, we removed support for GNU +readline from the Aladdin Ghostscript fileset. See <a +href="Make.htm#GNU_readline">here</a> for more information. + +<p> +We suspect that Acrobat's bugs and limitations still prevent embedded +TrueType fonts in files created by the pdfwrite device from working +properly, but we have neither the time nor the means to test this properly. + +<h3><a name="5.94_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Procedures) + - For OpenVMS with MMK or MMS, the third-party libraries are now +located in [.<lib>] rather than [-.<lib>]. + - The OpenVMS makefiles now select the same set of devices as the +Unix makefiles. + - The MS Windows and MS-DOS default installation directory is now +c:\Aladdin\gs#.# rather than c:\gs. + - All top-level makefiles now need a definition of BUILD_TIME_GS. +(Drivers) + - The cljet5 driver is renamed cljet5pr; there is a new cljet5 +driver that doesn't attempt (and fail) to handle page rotation. +(Interpreter) + - .getiodevice may return null. +(Library) + - IODevices may now have a null name. + +</pre><h3><a name="5.94_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The documentation of font searching was still wrong in both +places. (doc/Fonts.htm, doc/Use.htm) + +Notes that certain CodeWarrior code generation options produce incorrect +code. (doc/Make.htm) + +Removes an inaccurate and obsolete comment. (lib/pdf_font.ps) + +Notes that newer versions of the SGI compiler use a different switch for +setting the optimization limit. (doc/Make.htm) + +Notes that there may be code generation bugs in MSVC5 and later. +(doc/Make.htm) + +Documents the new Fontmap.SGI file. (doc/Use.htm) + +Updates the documentation on installing Ghostscript on MS Windows. +(doc/Install.htm) + +Documents the removal of the GNU readline interface. (doc/Current.htm, +doc/Make.htm) + +</pre><h3><a name="5.94_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The instcopy script, supposed to handle incompatibilities between +Unix `install' commands, didn't work. (instcopy, unixinst.mak) + - The Windows makefiles had an extra occurrence of `.' at the +beginning of the default search path. (bcwin32.mak, msvc32.mak, +msvclib.mak, watc*.mak) + - The OpenVMS makefile didn't automatically create the bin and obj +directories if needed. (openvms.mak) + +Changes the OpenVMS MMK/MMS makefile to expect the third-party libraries in +a subdirectory of the current directory, rather than a subdirectory of the +parent. This makes it compatible with all the other makefiles. +(openvms.mmk) + +Changes the OpenVMS makefiles to select the same set of devices as the Unix +makefiles. (openvms.mak, openvms.mmk, unixansi.mak) + +Changes the Windows and OS/2 default search paths to match the new +convention of installation rooted at c:\Aladdin. (bcwin32.mak, msvc32.mak, +msvclib.mak, os2.mak, watc.mak, watclib.mak, watcw32.mak) + +</pre><h3><a name="5.94_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - The Type 1/2 CharString printer didn't handle undefined opcodes +correctly. (lib/type1ops.ps) + - There was no Unix script for pf2afm. (lib/pf2afm) + - The Type 1/2 font printing utilities didn't default lenIV to -1 +for Type 2, and didn't handle lenIV = -1 correctly in some places. +(lib/type1ops.ps) + - The font2c utility used the version of font2c.ps from whatever +existing Ghostscript executable was in the search path. Fixing this +required adding a new parameter in all top-level makefiles, BUILD_TIME_GS. +(cfonts.mak, bcwin32.mak, dvx-gcc.mak, msvc32.mak, openvms.mak, openvms.mmk, +os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak, watcw32.mak) + - The pfbtopfa usage message was incorrect. (lib/pfbtopfa.ps) + +</pre><h3><a name="5.94_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The pswrite driver didn't reset the clipping path when writing +low-level images, possibly causing output to be clipped incorrectly. +(gdevps.c) + - The PNG drivers implicitly declared png_init_io. Fixing this is +only possible in libpng versions 1.0.3 and later. (gdevpng.c) + - The cljet5 driver (now cljet5pr) set rotated = true if the page +was rotated, but didn't set it to false if the page wasn't rotated. +(gdevclj.c) + - Embedded Type 1 fonts didn't include any FontInfo elements. +(gdevpsd1.c) + - Specifying the DCTEncode filter for compressing images caused a +crash. This problem is hard to fix correctly because of the complicated +initialization requirements of the JPEG encoder. We patched around it by +substituting FlateEncode (when available) for DCTEncode. (gdevpsdi.c) + +Renames the cljet5 driver, which has special (and incorrect) hacks to handle +page rotation for the PCL interpreter, as cljet5pr; adds a new cljet5 driver +without the hacks. (gdevclj.c) + +</pre><h3><a name="5.94_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - On MS Windows and OS/2 systems, the wstdio pseudo-IODevice showed +up as an instance of the IODevice resource category, causing problems. +(gp_msio.c, gp_os2.c) + +Adds a set of XBM/XPM icons in 4 sizes, contributed by Gintautas Grigelionis +(eragigr@ki.ericsson.se). (lib/gs*.xbm, lib/gs*.xpm, unixinst.mak) + +Brings the Windows and OS/2 code up to date, fixing some minor problems. +(gdevpm.c, gp_os2.c, gsos2.rc, gspmdrv.rc, os2.mak, pcwin.mak) + +</pre><h3><a name="5.94_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - The font directory scanner (FONTPATH) didn't recognize TrueType +fonts tagged as 'true' rather than 0x00010000. (lib/gs_ttf.ps) + +Changes the TrueType font loader to use ISOLatin1Encoding for constructing +the CharStrings if there is a Microsoft Unicode cmap and no glyph names in +the post table. This seems like a hack, but we aren't sure what the right +approach would be. (lib/gs_ttf.ps) + +Adds a Fontmap for SGI IRIX. This just comments out those fonts that are +provided by DPS. (lib/Fontmap.SGI) + +</pre><h3><a name="5.94_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - Writing Patterns could cause a memory access error. (bug +introduced recently) (gdevpdfi.c) + - Filling with a pattern didn't reset the clipping path, possibly +causing output to be clipped incorrectly. (gdevpdfi.c) + - Patterns weren't scaled correctly. (gdevpdfi.c) + - The data for large Patterns could exceed Acrobat Reader's limit on +the length of a string. (gdevpdfi.c) + - copy_color did an extra gsave and concat. (gdevpdfi.c) + - Repeated color images weren't detected (performance bug only). +(gdevpdfi.c) + - Names including control characters or spaces produced invalid +output. (gdevpdfx.h, gdevpdfu.c) + - A matrix multiply was in the wrong order, causing fonts with +non-zero translation in the FontMatrix to render at incorrect coordinates +(sometimes off the page). + - If a font had one of the 14 standard names but had some characters +defined by PostScript procedures, the output file would be invalid. +(gdevpdft.c) + - The graphics state line parameters were kept in two different +copies, causing bookkeeping errors. (gdevpdfx.h, gdevpdf.c, gdevpdfd.c, +gdevpdfu.c) + - If a page's BeginPage procedure did anything other than erase the +page to white, the resulting PDF file was invalid. (gdevpdf.c) + - Articles with the same title weren't merged properly. +(gdevpdfm.c) + - The Threads element of the catalog wasn't an indirect object. +(gdevpdf.c) + - Thread actions incorrectly converted the destination (thread +title) to a name, rather than leaving it as a string. (gdevpdfm.c) + - Fonts with the same name as the built-in ones, but not the +standard definitions, produced possibly incorrect output. (gdevpdff.c) + - The writer didn't recognize attempts to use Encodings with the +standard fonts that mentioned characters not present in the font's glyph +set. (gdevpdft.c) + +Ensures that the WinAnsiEncoding is loaded when writing PDF. (devs.mak) + +</pre><h3><a name="5.94_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - The default (identity) CMap didn't map CID 0 to glyph 0. +(pdf_fonts.ps) + - TrueType fonts with an explicit Encoding didn't work properly. +(lib/gs_ttf.ps) + - If an embedded Type 1 font executed definefont more than once, +the wrong thing would happen. (lib/pdf_font.ps) + - The T* operator used the negative of the leading value. +(lib/pdf_ops.ps) + +Implements a subset of Annotation rendering: only Widget annotations, only +Normal appearance, only S and D borders, no rounded-corner borders. We did +this at the very last minute before the release, in order to respond to a +bug report, and it probably has some bugs. (lib/pdf_draw.ps, +lib/pdf_main.ps) + +</pre><h3><a name="5.94_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - If an input buffer boundary fell at exactly the wrong place, an +image whose input was coming from a stream could fail to read the stream EOD +marker. (This is quite an old bug.) (zimage.c) + - On MS Windows and OS/2 systems, the wstdio pseudo-IODevice showed +up as an instance of the IODevice resource category, causing problems. +(lib/gs_res.ps, ziodev.c) + - errorinfo in $error was undefined, rather than null, initially and +after errors that didn't set it deliberately. (lib/gs_init.ps) + - The InkParams resource category was defined even in systems that +didn't support in-RIP trapping. (lib/gs_ll3.ps, lib/gs_res.ps, +lib/gs_trap.ps) + - CID fonts with 0-length data caused an error. (lib/gs_cidfn.ps) + - Type 10 halftone dictionaries were broken -- perhaps they never +had worked. (lib/gs_ll3.ps) + +Makes FontInfo entries available through the extended font API, needed to +allow embedded Type 1 fonts to include those entries. (zfont1.c) + +Makes it possible to determine whether the current file is a resource file, +needed to allow distinguishing between built-in and input-embedded fonts. +(lib/gs_ccfnt.ps, lib/gs_fonts.ps, lib/gs_init.ps, lib/gs_res.ps, +lib/gs_type1.ps, zfont.c) + +Moves support for GNU readline from the main Ghostscript fileset to the +GNU-specific fileset. (unix-gcc.mak, int.mak, gp_gnrdl.c => +src/gnu/gp_gnrdl.c, gnu/src/gnudevs.mak) + +</pre><h3><a name="5.94_Streams"></a>Streams</h3><pre> + +Fixes problems: + - The CCITTFaxDecode filter didn't correctly handle the case where +the last code of a 1-D row was a black code and occurred less than 7 or 8 +bits before the end of the input stream. (We thought we fixed this in 5.86, +but we missed one case.) (scfd.c) + - If an input buffer boundary fell at exactly the wrong place, an +image whose input was coming from a stream could fail to read the stream EOD +marker. (This is quite an old bug.) Fixing this involved a possibly risky +change to the definition of sbuf_min_left and the already fragile logic in +sreadbuf: the fix does solve this problem, but we aren't at all certain it +didn't introduce new ones. (stream.h, stream.c) + +</pre><h3><a name="5.94_Library"></a>Library</h3><pre> + +Fixes problems: + - The default implementation of copy_tile didn't pass the bitmap id +for complete tiles, missing potential optimizations (performance bug only). +(gdevdbit.c) + - The patch edges of ShadingType 7 shadings were ordered +incorrectly, producing incorrect output in some cases where the surface +folds over itself. (gxshade6.c) + - Flushing internal buffers when rendering an image didn't clip the +flushed data, producing incorrect output. (gxidata.c) + - Non-zero data_x values for banded images produced incorrect band +list data. (It's astounding that this problem hasn't shown up before.) +(gxclimag.c) + - Banded images rotated by 90 degrees could produce "seams" or +garbage if they crossed band boundaries. (This is at least the third time +we have "fixed" this problem.) (gxclimag.c, gxifast.c) + - Circles or ellipses defined by pairs of 180-degree arcs produced +incorrect output when banding. (gxclpath.c, gxclrast.c) + - setgray et al simply cleared the Pattern pointer in the client +color rather than adjusting its reference count. (gscolor.c, gscolor1.c) + - The saved graphics state for bitmap/pixmap patterns contained a +reference to the Pattern color, causing Patterns to be retained when they +shouldn't be and causing unwanted recursion when freeing them. (gsptype1.c) + - Patterns containing halftoned CMYK colors rendered as all black. +(bug probably introduced in 5.6x) (gxcht.c) + - Because of a typo, CMYK halftoning with only a single plane could +put too much yellow into the output. This appears to be quite an old bug. +(gxdither.c) + - The error code from running out of band list memory wasn't +propagated if the condition was detected in cmd_put_drawing_color, causing +low-memory recovery not to be invoked. (gxclpath.c) + - (Same error code problem) in clist_change_tile. (gxclbits.c) + +Adds more font attributes to the set available through a standard API. +(gxfont.h) + +Adds more statistics to the filling algorithm. (gxfill.c) + +Adds an is_resource flag to fonts, to indicate that they originated from a +resource rather than being embedded in an input file. (gxfont.h, gsfont.c) + +</pre> + +<hr> + +<h2><a name="Version5.93"></a>Version 5.93 (beta) (9/11/99)</h2> + +<p> +This is the next candidate for the 6.0 release. As with 5.92, all changes +other than added documentation are bug fixes. + +<h3><a name="5.93_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Library) + - Every stream whose state includes any GC-traceable pointers must +now have a set_defaults procedure that clears those pointers. + +</pre><h3><a name="5.93_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - There was an extra /ul tag. (doc/Release.htm) + - Fontmap.GS wasn't mentioned as needing to be installed. +(doc/Install.htm) + - Some documentation for the handling of seac was incorrect. +(gxtype1.c) + +Removes references to installbsd, which are no longer relevant. +(doc/Install.htm) + +Updates the information on building with NeXTSTEP. (doc/Make.htm) + +</pre><h3><a name="5.93_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The install command had unpredictably different syntax from one +"standard" Unix system to another, causing `make install' to fail. We +replaced the install command with our own script. (instcopy, dvx-gcc.mak, +unix-gcc.mak, unixansi.mak, unixtrad.mak) + +</pre><h3><a name="5.93_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - pcharstr.ps loaded type1ops.ps with run rather than runlibfile, +causing an error. (lib/pcharstr.ps) + +</pre><h3><a name="5.93_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - Attempting to embed a font whose Encoding included characters not +present in the font produced invalid output. (gdevpsd1.c) + - Allocating a stream state didn't (automatically) clear all its +internal pointers, possibly causing GC memory access errors. (gdevpsds.c) + - An #include of string_.h should have been memory_.h. (gdevpsdf.c) + +Disables compression for very small images. (gdevpsdi.c) + +</pre><h3><a name="5.93_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - Compiling gp_msio with MSVC's /MD switch caused a compile-time +error. (gp_msio.c) + +</pre><h3><a name="5.93_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - A bookkeeping object was allocated with the wrong allocator, +possibly causing access errors or garbage output. (gdevpdfu.c) + - Certain Patterns weren't treated as such, leading to very large +output files. (gdevpdfi.c) + - If one of the base 14 fonts had a non-standard FontMatrix, the +output disregarded this fact. This could cause double obliquing. +(gdevpdfx.h, gdevpdff.c, gdevpdft.c) + - Articles never got an object ID assigned. (bug introduced in +5.91) (gdevpdfm.c) + +</pre><h3><a name="5.93_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Changes the PDF interpreter to allow abbreviated filter names like /Fl for +all streams, not just in-line images. This directly contradicts the +published PDF specification, but Acrobat Reader allows it. +(lib/pdf_base.ps) + +</pre><h3><a name="5.93_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Compiled fonts were broken by the introduction of i_ctx_p. +(lib/font2c.ps, ccfont.h, iccfont.c) + - Allocating a stream state didn't (automatically) clear all its +internal pointers, possibly causing GC memory access errors. (zfproc.c) + +</pre><h3><a name="5.93_Streams"></a>Streams</h3><pre> + +Fixes problems: + - Allocating a stream state didn't (automatically) clear all its +internal pointers, possibly causing GC memory access errors. (scfx.h, +slzwx.h, spngpx.h, strimpl.h, sbwbs.c, sdctc.c, seexec.c, sfilter1.c, +siscale.c, szlibc.c) + - The PNG predictor streams could fail to process some data at the +end of the input. (spngp.c) + +</pre><h3><a name="5.93_Library"></a>Library</h3><pre> + +Fixes problems: + - Some obsolete definitions for Turbo C could produce references to +an undefined procedure (setmem) at link time. (memory_.h, string_.h) + +</pre> + +<hr> + +<h2><a name="Version5.92"></a>Version 5.92 (beta) (9/2/99)</h2> + +<p> +This is the next candidate for the 6.0 release. All changes other than +added documentation are bug fixes. + +<h3><a name="5.92_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The News for 5.91 didn't include a summary. (doc/News.htm) + - The documentation for Microsoft platforms didn't mention that you +must add the Ghostscript bin and lib directories to the PATH. (doc/Use.htm) + +Adds a file describing Aladdin's process for building, testing, and +releasing Ghostscript. (doc/Readme.htm, doc/Release.htm) + +</pre><h3><a name="5.92_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - Fontmap.GS is now required, but wasn't installed. (unixinst.mak) + - A couple of documentation files weren't installed. (unixinst.mak) + +</pre><h3><a name="5.92_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - The ps2pdf script for MS Windows used the wrong name for the +executable. (lib/ps2pdf.bat) + +</pre><h3><a name="5.92_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - An uninitialized variable annoyed some compilers. (gdevpsdt.c) + - The PostScript-writing driver used the wrong allocator, causing +possible memory access errors. (gdevps.c) + - The PostScript-writing driver didn't clear a pointer, causing +possible GC errors. (gdevps.c) + - The PostScript-writing driver didn't have a correct GC descriptor, +causing pointers to be corrupted. (gdevpsdf.h, gdevps.c, gdevpsdf.c) + - Embedded Type 1 fonts unnecessarily filled individual Encoding +slots with /.notdef. (gdevpsd1.c) + - A large constant produced warnings on some compilers. (gdevpsdt.c) + +</pre><h3><a name="5.92_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - Once again, gcc didn't complain about an ANSI-illegal extra +semicolon in a declaration list. (gdevpdfo.h) + - Adds a cast to work around the fact that some compilers declare +the return type of memchr as char * rather than void *. (gdevpdfr.c) + - The bookkeeping for whether a font had been written and freed was +inverted, causing some fonts to be written many times and other fonts not to +be written at all. (gdevpdf.c) + +</pre><h3><a name="5.92_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - More places needed workarounds for the alignment aliasing gcc bug. +The bug only occurs if a pointer variable is dereferenced through a cast to +a stricter alignment and then dereferenced later in its original form, so it +doesn't affect very many places. (igc.c, igcref.c, isave.c) + +</pre><h3><a name="5.92_Streams"></a>Streams</h3><pre> + +Makes the stream GC descriptor public for subclassing. (stream.h, stream.c) + +</pre> + +<hr> + +<h2><a name="Version5.91"></a>Version 5.91 (beta) (8/30/99)</h2> + +<p> +This is the next beta for 6.0. It includes a major rewrite of the parts of +the PDF writer that deal with resources and pdfmarks, as well as the usual +bug fixes. There are still problems with embedded fonts, both TrueType +(which sometimes don't show up at all) and Type 1 (which sometimes confuse +Acrobat Reader 3). + +<h3><a name="5.91_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - An HTML tag was misplaced in the News file. (doc/News.htm) + +Notes that the Solaris FONTPATH scanning problem may be fixed. +(doc/Use.htm) + +</pre><h3><a name="5.91_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - Many of the margin and width computations in ps2epsi.ps (not +written by Aladdin) were wrong -- off by 1. It's only because the bugs +masked each other or cancelled each other out that the code didn't produce +errors more of the time. (lib/ps2epsi.ps) + +</pre><h3><a name="5.91_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - Font subset glyphs weren't sorted early enough, causing Type 1 +embedded fonts to be written with inconsistent lengths. (gdevpsd1.c) + +Changes the BMP drivers so that they set the resolution in the BMP header +rather than leaving it at 0. This solves some problems reported by users, +but may cause others. (gdevbmpc.c) + +</pre><h3><a name="5.91_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - A change made in 5.90 was incorrect (we couldn't test it, because +MS Windows and OS/2 systems can't be used over a network). (gp_msio.c, +gp_os2.c) + +Adds some conditionalization to work around a bug in some recent versions of +gcc/egcs. (stdpre.h, interp.c) + +</pre><h3><a name="5.91_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - If the extension of a font file name on GS_FONTPATH included any +upper-case characters, the font would not be found. (lib/gs_fonts.ps) + +Allows fontmaps to contain <string> run or .runlibfile, to get rid of the +Fontmap -> Fontmap.GS link that VMS can't handle. (lib/gs_fonts.ps) + +</pre><h3><a name="5.91_PDF_writer"></a>PDF writer</h3><pre> + +Fixes problems: + - Very long arguments for pdfmark caused an ioerror, because the +buffer used for converting them was fixed-length. (lib/gs_pdfwr.ps) + - pdfmarks couldn't refer to objects that hadn't been defined yet. +(gdevpdfx.h, gdevpdfo.c) + - When a DOCVIEW pdfmark added an OpenAction key to the Catalog, +it omitted the / before the name. (gdevpdfm.c) + - Font resources could be written in the middle of a page contents +stream. (bug introduced in 5.90) (gdevpdff.c, gdevpdfu.c) + - As usual, there were some signed/unsigned char * mismatches that +gcc didn't detect. (gdevpdff.c, gdevpdfm.c, gdevpdfo.c) + - Fonts used on a page but freed before the end of the page were +omitted from the page's resource dictionary. (gdevpdfx.h, gdevpdf.c, +gdevpdff.c, gdevpdft.c) + - /D or /Dest keys in Action pdfmark dictionaries dropped the first +character of their value. (gdevpdfm.c) + - If a pdfmark added annotations to a page after the end of that +page had been reached, those annotations would be lost. (gdevpdf.c) + - ANN, LNK, DEST, and PS pdfmarks ignored the object name, if any. +(Only OBJ and BP processed the name.) Unfortunately, fixing this required a +complete overhaul of the way that resources and PDF objects were represented +internally. The result is both simpler and more general, but it involved a +major upheaval in the PDF writer code. (lib/gs_pdfwr.ps, gdevpdfo.h, +gdevpdfx.h, gdevpdf.c, gdevpdff.c, gdevpdfi.c, gdevpdfm.c, gdevpdfo.c, +gdevpdfr.c, gdevpdft.c, gdevpdfu.c) + - EP pdfmarks didn't close any open text context. (gdevpdfm.c) + +Adds debugging code to check the consistency of the embedded Type 1 font +writer. (gdevpdff.c) + +Makes /A and /F at the top level of an annotation or outline pdfmark +equivalent to /Action and /File respectively. See the code for more +information. (gdevpdfm.c) + +</pre><h3><a name="5.91_Library"></a>Library</h3><pre> + +Fixes problems: + - Degenerate Bezier curves could cause a division by zero. +(gxpcopy.c) + - Some macros used in non-FPU configurations were missing some +needed uses of const, and in one case an additional cast. (gxfarith.h, +gxfixed.h) + +Changes the discard macro to upper-case. (stdpre.h) + +</pre> + +<hr> + +<h2><a name="Version5.90"></a>Version 5.90 (beta) (8/20/99)</h2> + +<p> +This is the first real candidate for the 6.0 release. It does not fix all +known bugs, but it includes all planned functionality. New in this fileset: +<ul> +<li> - FunctionType 4 for PDF files. +<li> - Alternate printer images for PDF files (-dUsePrinterImages + switch). +<li> - pdfwrite support for PDF "Cos objects" (without compression for + streams). +<li> - pdfwrite support for graphics objects named with BP/EP/SP + (without compression for the object definition). +<li> - pdfwrite font subsetting and embedded TrueType fonts. +</ul> + +<h3><a name="5.90_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Interpreter) + - ref_stack_init now takes an additional argument. + - no_time_slice_proc is removed -- use 0 instead. +(Library) + - Notification client procedures and the gs_notify_ procedures +take different arguments. + - The common part of a gs_function_t structure has changed. + - gs_text_enum_init now returns a value that can indicate an error. + - The font font_info procedure now takes an additional argument. + - The IODevice open_device procedure is now defined as returning +0 or 1 under specific circumstances. + - gxp1fill.h is renamed gxp1impl.h. + - Allocators now have an additional procedure they must implement, +and a state member they must initialize. + - Most of the gs..basic.. structure definition macros have been +renamed. The ptrs1_stringsN structure definition macros are removed. + - Implementations of the text API now must provide a resync +procedure rather than a restart procedure. + +</pre><h3><a name="5.90_Documentation"></a>Documentation</h3><pre> + +Documents the new -dUsePrinterImages switch, and the expanded meaning of +-Z~. (doc/Use.htm) + +Updates FSF's address in documentation. (lib/Fontmap.GS, lib/Fontmap.Sol, +gdevcd8.c) + +Brings the PDF writer (ps2pdf) documentation up to date. (doc/Ps2pdf.htm) + +Updates the current-release documentation. (doc/Current.htm, +doc/Readme.htm) + +Updates the problem-reporting procedure for contributed drivers, and some +other new-user information. (doc/New-user.htm) + +</pre><h3><a name="5.90_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Because of a typo, the file gs_mgl_e.ps wasn't installed (on Unix +systems) by 'make install'. (unixinst.mak) + - The .dev files for drivers didn't depend on devs.mak. (devs.mak) + - The X driver didn't include a needed dependency on the bbox +device. (devs.mak) + +Incorporates the pdfmin package into the pdf package, since pdfmin was only +provided for very small-memory environments and is no longer useful. +(int.mak) + +Adds additional prototype-checking switches, which are important on 64-bit +platforms and useful on all platforms, to the gcc compilation line. +(unix-gcc.mak) + +</pre><h3><a name="5.90_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - A backquote was misplaced in the Unix ps2pdf script. (lib/ps2pdf) + - Some example files didn't have %! headers. (examples/alphabet.ps, +examples/waterfal.ps) + - ansi2knr didn't handle preprocessor directives within a function +header. (ansi2knr.c) + +Cleans up some minor compiler complaints. (genarch.c, genconf.c, echogs.c) + +</pre><h3><a name="5.90_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The PostScript writer sometimes failed to reset the clip path, +causing parts of the output to be omitted or to appear incorrectly. +(gdevvec.c) + - There was a type mismatch in a conditional. (gdevxini.c) + - A constant array wasn't declared as static. (gdevpsdt.c) + - Once again, there were some signed / unsigned char mismatches that +gcc apparently can't be forced to detect. (gdevpsdt.c) + - The alternative X drivers didn't have GC descriptors, which could +lead to memory corruption. (gdevxalt.c) + - The alternative X drivers didn't handle the closing of the +underlying X driver correctly, leading to a dangling pointer. (gdevxalt.c) + - Font subsetting didn't eliminate duplicate glyphs (glyphs +referenced more than once from the Encoding vector.) (gdevpsd1.c, +gdevpsdt.c) + - Type 1 font subsetting didn't ensure the presence of .notdef. +(gdevpsd1.c) + - The embedded TrueType font writer wrote all 16-bit values +incorrectly. This could explain a lot! (gdevpsdt.c) + +Cleans up public functions with no previous prototype. (gdevtfax.h, +gdevx.h, gdevdfax.c, gdevtfax.c, gdevx.c, gdevxini.c, gdevxxf.c) + +Adds some procedures to support font subsetting. (gdevpsdf.h, gdevpsdf.c) + +Adds an alternate font name for writing TrueType fonts. (gdevpsdt.c) + +Makes the TrueType font writer generate an OS/2 table, a Macintosh cmap, and +a name table (for the font name), as well as a Windows cmap and post, if +necessary. (gdevpsdf.h, gdevpsdt.c) + +</pre><h3><a name="5.90_Platforms"></a>Platforms</h3><pre> + +Updates a couple of clients for the change in the IODevice open_device +procedure, eliminating some undesirable externs. (gp_msio.c, gp_os2.c) + +</pre><h3><a name="5.90_Fonts"></a>Fonts</h3><pre> + +Adds OS/2 and maxp to the list of tables that must be preserved when loading +TrueType fonts. (lib/gs_ttf.ps) + +Registers the complete lists of glyphs in the Adobe Latin fonts as +pseudo-encodings. (lib/gs_lgo_e.ps, lib/gs_lgx_e.ps, unixinst.mak) + +</pre><h3><a name="5.90_PDF_writer"></a>PDF writer</h3><pre> + +Fixes bugs: + - One built-in font was sometimes substituted for another. +(gdevpdff.c) + - Use of composite fonts often produced a rangecheck error. +(gdevpdft.c) + - The structures for named objects were freed twice. (gdevpdfx.h, +gdevpdf.c, gdevpdfo.c) + - The code to avoid writing a blank between a Td command and +following text was fragile and still incorrect after being "fixed" twice. +We removed this minor optimization, at a small cost in file size when not +compressing. (gdevpdft.c) + - No Names tree was generated for named destinations specified as +strings. Rather than do this, we now convert string destinations to names. +This doesn't scale up well, but it is simple and also is compatible with all +PDF versions from 1.1 on. (gdevpdfm.c) + - Fonts that define characters incrementally, such as the TrueType +fonts written by some versions of the AdobePS Windows driver, could omit +characters if embedded. Fixing this required delaying writing out fonts +until the font was about to be freed or the writer was closed. (gdevpdfx.h, +gdevpdff.c, gdevpdft.c) + +Cleans up public functions with no previous prototype. (gdevpdfx.h, +gdevpdf.c, gdevpdfm.c) + +Updates client code for the change in gs_text_enum_init. (gdevpdft.c) + +Makes some changes towards handling show operations that must be split up +internally into multiple operations using different fonts. (gdevpdfx.h, +gdevpdff.c, gdevpdft.c) + +Implements the PUT pdfmark for the built-in objects (Catalog, DocInfo, +Page<#>, ThisPage, PrevPage, NextPage). This required deferring writing out +page objects until the end of the document. (lib/gs_pdfwr.ps, gdevpdfx.h, +gdevpdf.c, gdevpdff.c, gdevpdfm.c, gdevpdfo.c, gdevpdfu.c) + +Adds table entries, but not parsing, checking, or functionality, for the new +Acrobat 4 pdfmarks related to document logical structure. (gdevpdfm.c) + +Implements stream-type Cos objects. (lib/gs_pdfwr.ps, gdevpdfx.h, +gdevpdf.c, gdevpdfm.c, gdevpdfo.c, gdevpdfp.c, gdevpdfu.c) + +Implements BP/EP/SP pdfmarks. (gdevpdfx.h, gdevpdf.c, gdevpdfi.c, +gdevpdfm.c) + +Changes enumeration and #defined names to upper case, and adds _t to type +names. (gdevpdfx.h, gdevpdf*.c) + +Adds an OS/2 table for embedded fonts if missing. (gdevpdff.c) + +Makes the allocator for the PDF device's internal structures be the stable +allocator of the device's allocator, not the C heap. This required +correcting a number of GC descriptors. (gdevpdfx.h, gdevpdf.c, gdevpdfu.c) + +Replaces the text restart procedure with the new resync procedure. +(gdevpdft.c) + +</pre><h3><a name="5.90_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Failure to find a font in the Resources dictionary signalled an +/undefinedfont error (which does not exist) rather than /invalidfont. +(lib/pdf_font.ps) + +Implements FunctionType 4 functions. (lib/pdf_draw.ps, zfunc4.c) + +Implements the -dUsePrinterImages switch to use "alternate" printer images +when rendering. (lib/pdf_draw.ps) + +</pre><h3><a name="5.90_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Some pointers were declared as ref * that actually could be +ref_packed *, potentially confusing compilers that follow the new, stricter +ANSI C rules about alignment aliasing. (idebug.h, idebug.c, igc.c, +igcref.c, zmisc.c) + - cshow didn't restore the root font after executing the procedure, +producing incorrect results if the procedure did a setfont. (ichar.h, +zcfont.c, zchar.c) + - A needed const-breaking cast was omitted. (zmisc.c) + - The memory validator could cause an unaligned access. (ilocate.c) + - restore could free parts of the stacks that were still in use. We +fixed this long-standing problem using the new concept of stable allocators. +(interp.c) + +Moves the implementation of the abs operator to C, required for FunctionType +4 support. (lib/gs_init.ps, zarith.c) + +Makes more operator procedures public, required for FunctionType 4 support. +(zarith.c, zmath.c, zrelbit.c, ztype.c) + +Adds an additional parameter to ref_stack_init, to allow creating a +temporary stack without having an allocator. (istkparm.h, istack.h, +interp.c, istack.c) + +Cleans up public functions with no previous prototype. (files.h, ichar.h, +icstate.h, ifilter2.h, ifrpred.h, ifwpred.h, igcstr.h, iimage.h, iimage2.h, +iinit.h, imain.h, interp.h, iscanbin.h, ivmem2.h, oparc.h, opextern.h, +icontext.c, igc.c, iinit.c, imain.c, inobtokn.c, interp.c, iscan.c, +iscanbin.c, zchar.c, zcharout.c, zcolor.c, zcolor1.c, zcontrol.c, zdevice.c, +zdpnext.c, zdps.c, zfdecode.c, zfile.c, zfilter2.c, zfont0.c, zfunc0.c, +zfunc3.c, zfzlib.c, zgeneric.c, zht1.c, zht2.c, zimage.c, zimage2.c, +ziodev.c, zmath.c, zpath1.c, zupath.c, zusparam.c, zvmem.c, zvmem2.c) + +Updates client code for the tweak in the definition of the IODevice +open_device procedure. (ziodev.c) + +Implements stable local and global VM allocators. This required changing +more places than we would have liked. (ialloc.c, igc.c, ilocate.c, imain.c, +interp.c, ireclaim.c, isave.c, zcontext.c) + +Removes the global member of gs_ref_memory_t, since it isn't used. +(gxalloc.h, ialloc.c, zcontext.c) + +Adds more tracing to the relocation phase of the garbage collector. +(igcref.c) + +</pre><h3><a name="5.90_Streams"></a>Streams</h3><pre> + +Fixes problems: + - jpeg_open_backing_store no longer had the correct arguments. +(This had no effect in practice, since the procedure was never called.) +(sjpegc.c) + +Cleans up public functions with no previous prototype. (scfdgen.c, +scfetab.c, sjpegc.c, slzwce.c, slzwd.c, stream.c) + +Adds some tracing to the image scaling stream. (siscale.c) + +</pre><h3><a name="5.90_Library"></a>Library</h3><pre> + +Fixes bugs: + - A null OutputFile name could cause an error. (gxdevice.h, +gsdevice.c, gsfname.c) + - Shading with non-monotonic Functions produced incorrect output. +(gxshade1.c) + - An #undef didn't match the #define it was supposed to cancel. +(gxchar.c) + - The default next_char_glyph procedure didn't handle FROM_CHARS or +FROM_SINGLE_CHAR data sources. (gstext.c) + - When finalizing a forwarding device, the target pointer in the +device wasn't cleared, leading to an incorrect attempt to access it later. +(gdevnfwd.c) + - Interpolated images were broken, probably since 5.81. +(gxiscale.c) + - Some color space implementation procedures hadn't been updated to +add 'const' to the color space argument. (gscie.c) + - A constant had a signed/unsigned ambiguity on systems where +sizeof(long) > 4. (gsccode.h) + - The font font_info procedure didn't provide for scaling. +(gxfont.h) + +Simplifies the notification mechanism to remove the concept of client and +generating object. Registration now just takes a closure (procedure + +opaque data); events pass the closure data and event data. (gsnotify.h, +gsfont.c, gsnotify.c) + +Changes gs_notify_unregister so that it can unregister all registrations of +a particular client rather than only one. (gsnotify.h, gsnotify.c) + +Adds support for "vanilla" Functions at the library level. (gsfunc.h, +gsfunc.c) + +Adds some tracing for Functions. (gsfunc3.c) + +Redefines function monotonicity to indicate whether the function is +increasing or decreasing, and implements monotonicity correctly for all +FunctionTypes except 4. (gsfunc.h, gxfunc.h, gsfunc0.c, gsfunc3.c) + +Makes Type 0 fonts check that they are being used with a string, not a +character or (a) glyph(s). (gxtext.h, gschar.c, gschar0.c, gstext.c, +gxchar.c) + +Cleans up public functions with no previous prototype. (gdevmem.h, +gpcheck.h, gscie.h, gserror.h, gsmemory.h, gxcie.h, gxcldev.h, gxclpath.h, +gxcmap.h, gxcspace.h, gxfixed.h, gxfont0.h, gxp1fill.h [deleted], +gxp1impl.h, math_.h, std.h, gconf.c, gdevdrop.c, gdevm1.c, gdevm2.c, +gdevm4.c, gdevm8.c, gdevm24.c, gdevmr1.c, gdevmr2n.c, gdevprn.c, gsbittab.c, +gscdef.c, gscie.c, gsciemap.c, gscspace.c, gscscie.c, gsdevmem.c, +gsdparam.c, gshtscr.c, gsimpath.c, gsiodev.c, gsmisc.c, gsnorop.c, gspath.c, +gspcolor.c, gsptype1.c, gsropc.c, gsutil.c, gxacpath.c, gxclist.c, +gxcpath.c, gxi12bit.c, gxicolor.c, gxifast.c, gximono.c, gxiscale.c, +gxp1fill.c, gxpath2.c) + +Gets rid of some remaining vestiges of 16-bit ints. (gdevm1.c, gsbitops.c) + +Adds procedures to register clients for notification when a font is freed. +(gxfont.h, gsfont.c) + +Defines the IODevice open_device procedure as returning 1 if it opened a new +stream, 0 if it returned an existing stream. This eliminates some awkward +externs. + +Adds the concept of a stable allocator -- an allocator that allocates from +the same heap and in the same VM space as another allocator, but is not +subject to save and restore. (gsmemory.h, gsmemraw.h, gsalloc.c, +gsmalloc.c, gsmemlok.c, gsmemret.c, gsnogc.c) + +Adds some new macros to make defining new kinds of fixed-format structures +simpler. (gsstruct.h) + +Replaces the text processing restart procedure with a more general resync +procedure, which can be used to restart partway through a string. We retain +gs_text_restart for backward compatibility and general usefulness. +(gstext.h, gxtext.h, gdevbbox.c, gstext.c, gxchar.c) + +Adds the Adobe Latin glyph sets as pseudo-encodings. (gsccode.h) + +</pre> + +<hr> + +<h2><a name="Version5.88"></a>Version 5.88 (tester) (8/3/99)</h2> + +<p> +This fileset adds the ability to reference and embed TrueType fonts in PDF +output. Unfortunately, even though the resulting PDF files work fine with +Ghostscript itself, Acrobat Reader apparently can't handle embedded TrueType +fonts with non-standard Encodings. We hope to fix this problem during the +6.0 beta test period. + +<p> +This fileset also adds the ability to buffer X Windows output in a +client-side bitmap. This is typically more efficient than trying to push +many small commands through the X client/server knothole, especially if +bitmap images or RasterOp are involved. + +<p> +Some reported problems have been deliberately left unfixed: we will need +every minute of the 13 days before the start of the 6.0 beta test period to +implement the last few items of functionality scheduled for the 6.0 release, +and we can fix problems (but not add functionality) during the beta test +period. + +<h3><a name="5.88_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Library) + - The box_device member of the bbox device is replaced by the +box_data member, with a different meaning. + - The x_rect structure is removed; all uses are changed to +gs_int_rect. + - gdevpstr.h is renamed spprint.h. + - The parameter printing procedures are moved from gdevpsdf.[hc] to +spsdf.[hc]. + - Clients must now allocate gs_font* objects using gs_font_alloc or +gs_font_base_alloc, not directly with gs_alloc_struct. + - The first (vptr) argument of enum_ptrs procedures is now const *. +EV_CONST is no longer defined. + - The pep argument of enum_ptrs procedures is now enum_ptr_t * +rather than const void **. + - The font glyph_pieces procedure is replaced with an option for +glyph_info. + - The font encode_char procedure now takes an additional glyph_space +argument. + - The o_large flag in object headers is renamed o_alone; o_lmark and +o_lsize no longer exist. The DO_LARGE and DO_SMALL macros for enumerating +objects in a chunk are also removed. + +</pre><h3><a name="5.88_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - News entries since 5.72 had a missing <li> in the table of +contents entry. (doc/News.htm) + - gs_text_params_t still referred to REPLACE_X_WIDTHS and +REPLACE_Y_WIDTHS rather than REPLACE_WIDTHS. (gstext.h) + +Clarifies that the font glyph_outline procedure must append a final moveto +for the advance width. (gxfont.h) + +Clarifies that the font enumerate_glyph procedure enumerates glyphs in an +unpredictable order. (gxfont.h) + +Documents that reference counted freeing procedures for structures with +finalization must free the structure itself first rather than last. +(gsrefct.h) + +Updates documentation on building Ghostscript on MS-DOS and MS Windows. +(doc/Make.htm) + +Adds some documentation on how the makefiles are / should be structured. +(doc/Source.htm) + +Documents the new parameters for the X driver. (doc/Use.htm) + +Updates the language documentation to refer properly to PostScript +LanguageLevel 3 and PDF 1.3. (doc/Language.htm) + +</pre><h3><a name="5.88_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - An omitted space in a makefile caused an incompatibility with the +VMS build utilities. (lib.mak) + - The gsindent script was omitted from the fileset. (gsindent) + - The core library didn't include stream.c, which is now required. +(lib.mak) + - The workaround for the peculiarities of the Watcom compiler's +command line syntax didn't work. (zlib.mak) + - A DOS command line overflowed in the makefile. We patched this by +deleting the bmpgray device from the Borland Windows platform. +(bcwin32.mak) + +Provides a .lnk file required by the revised linking procedures on MS +Windows. (gsdll32w.lnk) + +Straightens out the Watcom makefiles so that it is possible to build a +Windows executable and DLL using the Watcom compiler. This required moving +some parameters around in the other PC makefiles. (bcwin32.mak, +msvccmd.mak, watc.mak, watcw32.mak, wccommon.mak, winint.mak, winlib.mak) + +</pre><h3><a name="5.88_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The X driver reported the wrong parameter name for errors in the +value of the WindowID or .IsPageDevice parameter. (gdevxini.c) + - The X driver calculated the Y window dimension incorrectly when +resizing the window if X and Y resolutions were different. (Never happens +in practice.) (gdevxini.c) + - The bmpasep8 device was defined as gx_device_printer rather than +gx_device_async. (gdevbmpa.c) + - Some casts between signed and unsigned char * were missing. +(gdevpdff.c, gdevpdft.c) + - The PDF writer didn't handle reencoded characters properly in +non-embedded fonts. (gdevpdfx.h) + - The PDF writer allocated new structures while being closed, +causing memory corruption if the close procedure was called for +finalization. (gdevpdff.c, gdevpsd1.c) + - The PDF writer tried to close the resource file twice. (bug +introduced since 5.50) (gdevpdf.c) + - The PDF writer failed to work around a bug in Acrobat 3 Reader's +Print function related to re-encoded fonts. (gdevpdft.c) + - The PDF writer incorrectly specified ASCII85Encode rather than +ASCII85Decode for non-binary embedded fonts. (gdevpdff.c) + - The PDF writer didn't handle embedded fonts with a non-standard +FontMatrix correctly. (gdevpdft.c) + - The PDF writer didn't handle reassigned characters correctly. +(gdevpdft.c) + - When embedding a Type 1 font, the PDF writer didn't check that the +font contains only CharStrings (no PostScript procedures), no non-standard +OtherSubrs, and no CDevProc. (gdevpsd1.c) + - There was an unused label in the mswinpr2 driver. (gdevwpr2.c) + - The X driver didn't flush buffered output before reading back +bits from the display. (gdevx.c) + - The X driver still didn't set up the color mapping tables +correctly -- in particular, it didn't initialize cman.color_to_rgb before +setting up the dither ramp or cube. This is at least the third time we have +"fixed" this problem. (gdevxcmp.c) + +Removes the remaining uses of gs_malloc, gs_free, and gs_memory_default from +Aladdin's non-display drivers. (gdevbit.c, gdevbmp.c, gdevbmpa.c, +gdevcgm.c, gdevclj.c, gdevcljc.c, gdevdjet.c, gdevlj56.c, gdevmiff.c, +gdevpbm.c, gdevpcx.c, gdevpng.c, gdevpsim.c, gdevtfax.c, gdevtfnx.c, +gdevxalt.c) + +Adds a MaxBitmap parameter to the X driver: the driver will maintain a +full-window pixmap in memory if it requires no more space than MaxBitmap. +The default value of this parameter is 0, meaning never use a client-side +bitmap. (gdevx.h, gdevx.c, gdevxini.c, gdevxxf.c) + +Moves the X device closing and get/put parameters procedures from gdevx.c to +gdevxini.c. (gdevx.c, gdevxini.c) + +Removes some remaining uses of gs_malloc and gs_free from the X driver. +Note that this requires making the X device structure properly +garbage-collectable. (gdevx.h, gsstruct.h, gdevxini.c) + +Removes the remaining uses of 'register' from the X driver. (gdevx.c, +gdevxini.c) + +Removes the remaining uses of the obsolete far_data keyword from Aladdin's +non-PC drivers. (gdevbmp.c, gdevbmpa.c, gdevcgm.c, gdevlj56.c, gdevmiff.c, +gdevp2up.c) + +Improves the X driver's algorithm for deciding when to update the screen, +and makes its parameters available for reading and setting. (gdevx.h, +gdevx.c, gdevxini.c) + +In the X driver's color mapper, improves performance slightly by replacing +multiplies and divides with shifts and table lookups in the normal case of +standard color maps. (gdevxcmp.h, gdevxcmp.c) + +Moves some filter-related code from the driver level to the stream level. +(gdevpsdf.c) + +Moves some utilities for printing values in ASCII form from the driver level +to the stream level. (devs.mak, gdevpdfx.h, gdevpstr.h [deleted], gdevps.c, +gdevpsde.c, gdevpsdf.c, gdevpsdp.c, gdevpstr.c [deleted]) + +Upgrades the PDF writer to handle TrueType fonts as well as Type 1. +(gdevpdfx.h, gdevpsdf.h, gdevpdff.c, gdevpdft.c, gdevpsde.c => gdevpsd1.c, +gdevpsdt.c) + +Starts to implement font subsetting in the PDF writer. (gdevpdfx.h, +gdevpsdf.h, gdevpdff.c, gdevpsd1.c, gdevpsdt.c) + +Partially implements WMode when writing font descriptors. (gdevpdff.c) + +Changes psdf_binary_writer so that adding the ASCII85 filter in +psdf_begin_binary doesn't require allocating any memory. (gdevpsdf.h, +gdevpsdf.c) + +Makes the PDF writer guess the Ascent and StemV values for embedded fonts +when it can't determine them by examining the font. (gdevpdff.c) + +Makes the PDF writer able to handle xshow and yshow (TEXT_REPLACE_WIDTHS). +(gdevpdft.c) + +Updates code to reflect the addition of glyph_space to the font encode_char +and enumerate_glyph procedures. (gdevpsdf.h, gdevpdff.c, gdevpdft.c, +gdevpsd1.c, gdevpsdf.c, gdevpsdt.c) + +Removes some unnecessary #includes. (gdevxres.c) + +Removes the sample driver-based CRD from the variant X drivers, since this +created a pointless dependency. (The `bit' drivers still provide this +feature, for testing.) (gdevxalt.c) + +Changes the default compatibility level of PDF output from 1.2 (Acrobat 3) +to 1.3 (Acrobat 4). (gdevpdf.c) + +</pre><h3><a name="5.88_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - A comment included an extra /*. (gp_mswin.c) + - The definitions for min and max in a couple of files disagreed +with the ones typically provided in system header files. (dwimg.cpp, +dwtext.cpp) + +Removes some unnecessary code related to generating temporary file names. +(gp_iwatc.c) + +</pre><h3><a name="5.88_Fonts"></a>Fonts</h3><pre> + +Changes the loader for TrueType fonts to keep the 'instructions', which are +required if the font is going to be written out in a PDF file. +(lib/gs_ttf.ps) + +Adds some more debugging output to the TrueType font loader. +(lib/gs_ttf.ps) + +Registers the MacGlyphEncoding so it can be made available to the PDF +writer. (lib/gs_mgl_e.ps, lib/gs_ttf.ps, unixinst.mak, gsccode.h, ifont.h) + +</pre><h3><a name="5.88_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - The serif and small-caps flags in the FontDescriptor were ignored +when doing font substitution. (lib/gs_fonts.ps, lib/pdf_font.ps) + - The ri operator was undefined. We added a dummy definition. +(lib/pdf_ops.ps) + - The redefinitions of restore could cause a recursion loop. +(lib/gs_fform.ps, lib/gs_lev2.ps) + - There was an extra gsave executed for each page, causing the +graphics state stack to grow deeper and deeper, which caused problems when +wrapping up at the end of execution. (lib/pdf_main.ps) + +Implements the sh operator. (lib/pdf_draw.ps) + +Works around a bug in some PDF files generated by Adobe's PDF library (?), +which attempt to create a font Encoding array with more than 256 elements. +(lib/pdf_font.ps) + +</pre><h3><a name="5.88_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The GNU readline completion code (which Aladdin did not write) was +completely wrong. (gp_gnrdl.c) + - The top-level restore sometimes tried to restore global VM an +extra time, leading to memory corruption. (bug probably introduced in 5.85) +(isave.c) + - The glyph_ref procedure was defined in two different places +(inconsistently). (ichar.h, zchar.c, zchar1.c) + +Restructures the name table to improve cache coherence and to make it +possible to store initial name strings in ROM. (iname.h, inamedef.h, +inames.h, inamestr.h, igc.c, iname.c, isave.c) + +Changes the scanner so it doesn't copy name strings when scanning a compiled +init string. This reduces RAM requirements by about 20K when using compiled +initialization. (iscan.c) + +Removes redundant FontBBox correction code, since this is now handled by the +library. (zfont42.c) + +Updates the Type 1 and Type 42 font code to implement the new font +procedures. (icharout.h, zcharout.c, zchar1.c, zchar42.c, zfont1.c, +zfont42.c) + +Simplifies the code that checks whether a grestore needs to do a +setpagedevice. (zdevice2.c) + +Updates code to reflect the change of the vptr argument of enum_ptrs +procedures to const *. (igcref.c) + +Updates code to reflect the change in the pep argument of enum_ptrs +procedures to enum_ptr_t *. (igc.h, iscan.h, istruct.h, igc.c, igcref.c, +ilocate.c, iscan.c) + +Updates code to reflect the addition of glyph_space to the font encode_char +and enumerate_glyph procedures. (bfont.h, ifont.h, zbfont.c, zfont1.c, +zfont32.c, zfont42.c) + +Cleans up some code details. (idebug.h, ifunc.h, iparray.h, istream.h, +zfunc.c) + +Removes some no longer needed test code. (zfont1.c) + +Updates memory manager code to reflect the change from o_large to o_alone. +(igc.c, igcref.c, ilocate.c, isave.c) + +Changes the printed font substitution message to be closer to what some +Adobe products print if SHORTERRORS is defined. (Thanks to Andrew Chilvers +for the suggestion.) (lib/gs_fonts.ps) + +</pre><h3><a name="5.88_Streams"></a>Streams</h3><pre> + +Fixes problems: + - The fix in 5.85 for ASCII85Encode EOLs was wrong and caused a word +of data to be dropped occasionally. (sfilter2.c) + +Moves some filter-related code from the driver level to the stream level. +(stream.h, stream.c) + +Moves some utilities for printing values in ASCII form from the driver level +to the stream level. (lib.mak, spprint.h, spsdf.h, spprint.c, spsdf.c) + +Adds some more tracing output for image scaling. (siscale.c) + +</pre><h3><a name="5.88_Library"></a>Library</h3><pre> + +Fixes problems: + - The bbox device's check for whether a rectangle filled the entire +page was wrong. (gdevbbox.c) + - The bbox device didn't correctly handle parallelograms, triangles, +or thin lines with points specified in other than ascending order. +(gdevbbox.c) + - The bbox device smashed the reference count of the text enumerator +it created, causing a memory leak. (gdevbbox.c) + - The bbox device didn't copy back all the dynamic information from +a subsidiary text enumerator, with unpredictable results. (gxtext.h, +gdevbbox.c, gstext.c) + - The default implementation of glyph_info for fonts incorrectly +reported that it returned values for all members, not just the ones it knew +about. (gsfont.c) + - The profiling implementation of memset was incorrect, leading to +memory smashing. (gsmisc.c) + - The default implementation of glyph_info had a memory leak. +(gsfont.c) + - The default implementation of character rendering didn't correctly +handle the case where the character was in the cache and only the character +width was requested. (gxchar.c) + - Text processing didn't correctly handle REPLACE_WIDTHS if the X +and Y width arrays were different. (The PostScript interpreter never does +this.) (gstext.h, gstext.c, gxchar.c) + - Compositing devices weren't initialized properly, leading to +invalid accesses. This is the last (?) bit of the device reference counting +bug tail. (gsalphac.c, gsropc.c) + +Changes the bbox device to make the procedures for managing the bounding box +virtual, so the X device can be a subclass. (gdevbbox.h, gdevbbox.c) + +Changes the bbox device so it always adds the bounding box after doing the +drawing operation rather than before, for the benefit of the buffering X +device. (gdevbbox.c) + +Removes some remaining uses of gs_memory_default. (gdevdrop.c) + +Removes all uses of the obsolete far_data keyword from the library. +(gconf.c, gdevbbox.c) + +Changes the bbox device so it doesn't run drawing algorithms twice if it has +a target that uses the default implementation. (gdevbbox.c) + +Speeds up the implementation of fill_rectangle for 16-bit memory devices. +(gdevm16.c) + +Makes TrueType fonts implement the new font procedures. (gxfont42.h, +gxmatrix.h, gsmatrix.c, gstype42.c) + +Adds a gs_id to gs_font objects, so that fonts with the same name can be +distinguished reliably without relying on the address. (gxfont.h, gsfont.c) + +Makes the vptr argument of enum_ptrs procedures be const *. This is a +long-overdue change. (gsstype.h, gxxfont.h, gsalloc.c, gsfont.c, +gsmemory.c) ****** REDO THE CONST-BREAKING CASTS IN gsfont.c ****** + +Changes the pep argument of enum_ptrs from const void ** to enum_ptr_t *, to +get rid of some hacks in enum_ptrs implementations that had to construct +temporary gs_strings. (gsstruct.h, gsstype.h, gstext.h, gsalloc.c, +gscolor2.c, gsfont.c, gsmemory.c, gstext.c) + +Adds a general mechanism that provides for an arbitrary number of clients to +be notified when an event occurs. For the moment, we only use it to notify +PDF writers when a font is about to be freed. (gsnotify.h, gsnotify.c) + +Makes fonts use the new notification mechanism to notify clients when the +font is about to be freed. (gxfont.h, gsfont.c) + +Adds a gs_text_set_cache procedure to parallel restart and retry. +(gstext.h, gxtext.h, gstext.c) + +Adds a glyph_space argument to the font encode_char and enumerate_glyph +procedures, so that clients can choose between glyph names and glyph indices +in environments that use both. (gsccode.h, gxchar.h, gxfont.h, gxfont42.h, +gsfont.c, gstype42.c, gxchar.c) + +Changes the bbox device so it optionally considers white to be opaque. +(gdevbbox.h, gdevbbox.c) + +Cleans up some code details. (gshsb.h) + +Adds a hack to suppress warning messages from the Watcom compiler about +testing constant values. (stdpre.h) + +Replaces the glyph_pieces font procedure with a GLYPH_INFO_PIECES option for +glyph_info. (gxfont.h, gxfont42.h, gsfont.c, gstype42.c) + +Adds a font_info font procedure, similar to glyph_info but giving +information about the font as a whole. (gxfont.h) + +In order to fix a bug in resizing large objects, gets rid of the concept of +large objects entirely, replacing it with the concept of an 'alone' object +that is guaranteed to be the only object in its chunk. (gxalloc.h, gxobj.h, +gsalloc.c) + +Adds some more tracing output for interpolated images. (gxiscale.c) + +Adds a _long parameter setting procedure to parallel _bool, _enum, and _int. +(gsparamx.h, gsparamx.c) + +</pre> + +<hr> + +<h2><a name="Version5.87"></a>Version 5.87 (tester) (6/29/99)</h2> + +<p> +In this fileset, the pdfwrite device finally handles general Type 1 fonts, +and can write them in both embedded and non-embedded form. This fileset +also contains a few more changes to the text API, and some incompatible +changes to the gs_font procedure vector: more such changes are likely. It +also fixes a couple of long-standing pdfmark bugs. + +<p> +NOTE: there are known problems in PDF output with non-embedded fonts (fonts +represented only by a descriptor): some characters will be missing, and +because of bugs in Acrobat's Print function, even more characters will be +missing or wrong when printing from Acrobat. We will fix our problems, and +work around Acrobat's bugs, in the next couple of filesets. + +<h3><a name="5.87_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Library) + - Text enumerators now have a release procedure. + - gx_device_text_begin no longer stores its arguments into the +enumerator: the driver text_begin procedure must do this. + - The argument list for the font encode_char procedure no longer +includes the enumerator, and the second argument is now a gs_char rather +than a gs_char *. + - The font next_char procedure is removed. (It has been obsolete +for a while.) The next_glyph procedure is renamed next_char_glyph. + - The first argument of the font init_fstack, build_char, and +next_glyph procedures is changed from gs_show_enum * to gs_text_enum_t *. + - gx_font_stack[_item] is renamed gx_font_stack[_item]_t. + - New font procedures have been added, of which two (enumerate_glyph +and glyph_outline) are required. The font procedure vector has been +reorganized. + - The Type 1 font next_glyph procedure is replaced by the gs_font +enumerate_glyph procedure. + - psdf_embed_type1_font is renamed psdf_write_type1_font, and has +an additional argument. + - psdf_alloc_param_printer takes slightly different arguments; +print_binary_ok and print_ASCII85_ok are now upper-case. + +</pre><h3><a name="5.87_Documentation"></a>Documentation</h3><pre> + +Reorganizes the driver API documentation slightly, documents the fact that +get_alpha_bits and draw_line are obsolete, and documents the driver text +API. (doc/Drivers.htm) + +Documents an additional Irix configuration where the compiler doesn't work. +(doc/Make.htm) + +</pre><h3><a name="5.87_Procedures"></a>Procedures</h3><pre> + +Moves the %pipe% IODevice into lib.mak, since it is now included on Windows +as well as Unix. (lib.mak, unix-aux.mak) + +Adds the bmpgray driver to all platforms that include the other BMP drivers. +(bcwin32.mak, msvc32.mak, os2.mak, unix-gcc.mak, watc.mak, watcw32.mak) + +</pre><h3><a name="5.87_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The PS and PDF writers didn't maintain the font embedding lists +correctly. (gdevpsdp.c) + - The CreationDate in PDF output was always set to the current date, +and couldn't be set with a pdfmark. We now don't set CreationDate at all, +since it is supposed to be the creation date of the original document, not +of the PDF file. (gdevpdfm.c, gdevpdfu.c) + - The Producer in PDF output couldn't be set with a pdfmark. +(gdevpdfx.h, gdevpdf.c, gdevpdfm.c, gdevpdfu.c) + - pdfmarks with /Action /GoTo incorrectly retained the Action key. +(gdevpdfm.c) + - pdfmarks didn't substitute /Dest => /D or /File => /F correctly. +(gdevpdfm.c) + +Updates the PDF writer to use the new text API rather than the show +pseudo-parameter. (gdevpdfx.h, gdevpdf.c, gdevpdfp.c, gdevpdft.c) + +Changes pdf_open_document so that it opens the document even if some +resources have been allocated. (gdevpdf.c) + +Splits off pdfwrite utilities from top-level control, since the file was +getting too big. (gdevpdfx.h, gdevpdf.c, gdevpdfu.c) + +When writing PDF, avoids resetting the word spacing parameter if the string +doesn't contain any spaces, and the character spacing parameter if the +string has no more than 1 character. (gdevpdft.c) + +Splits off PDF font handling from text handling, since the file was getting +too big. (gdevpdfx.h, gdevpdff.c, gdevpdft.c) + +Implement both embedded and non-embedded fonts beyond the base 14 in the PDF +writer. This code doesn't work very reliably yet. (gdevpdfx.h, gdevpdff.c, +gdevpdft.c) + +Adds a bmpgray driver that produces 8-bit gray-scale output. (devs.mak, +gdevbmp.c) + +Updates the PDF writer for changes in the gs_font procedure vector. +(gdevpdff.c, gdevpdft.c) + +Updates the Type 1 font writer for changes in the gs_font procedure vector, +and adds some output options. (gdevpsdf.h, gdevpsde.c) + +Changes the printing parameter list implementation to take all of its +parametric arguments in the params structure, and changes the names of the +options. (gdevpsdf.h, gdevpsde.c, gdevpsdf.c, gdevpdff.c, gdevpdfi.c, +gdevpdfu.c) + +</pre><h3><a name="5.87_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Indexed color spaces didn't allow the base space to be an indirect +reference. (lib/pdf_draw.ps) + - The CS and cs operators didn't accept a literal color space name +(as opposed to a color space resource name). (lib/pdf_draw.ps) + - Some PDF 1.2 files had a SM entry in graphics state dictionaries, +even though this is not documented and requires a LL3 interpreter. +(lib/pdf_draw.ps) + - Generated font names included a % character, which could cause +problems for ps2pdf. (lib/pdf_font.ps) + +</pre><h3><a name="5.87_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The calculation of the final index when enumerating the pointers +in a context state was incorrect. (source bug only, no effect on execution) +(icontext.c) + +Updates the interpreter's glue code for the changes in the PDF writer. +(lib/gs_pdfwr.ps) + +Updates a client to use gs_font_alloc. (zbfont.c) + +Updates clients for changes in the gs_font procedure vector. (zbfont.c, +zchar1.c, zfont0.c, zfont1.c, zfont32.c) + +Updates a client for the change to psdf_write_type1_font. (zfont1.c) + +</pre><h3><a name="5.87_Library"></a>Library</h3><pre> + +Fixes problems: + - Some code used rc_decrement_only instead of gx_device_retain. +(Stylistic bug only.) (gschar.c) + - The finalize procedure for the character cache device could get +unset and/or the retained flag cleared, leading to a reference count not +getting decremented. (gxccman.c) + - Allocating a show enumerator didn't clear the show_gstate member. +(Probably no effect in practice.) (gschar.c) + - Cleaning up at the end of text processing was not consistent and +sometimes didn't get done. The old API used explicit and separate client +allocation (gs_show_enum_alloc), release (gs_show_enum_release), and freeing +(gs_free_object); release, but not free, was automatic at the end of +processing (in show_finish). The new API has allocation in gs_text_begin or +gx_device_text_begin, no implicit release or free, and a single +gs_text_release call to handle both release and free. Reconciling these +required adding an auto_release flag in the gs_show_enum structure to +indicate which API was used to create it, and a release procedure. (The +auto_release flag is only needed for backward compatibility with clients +that use the old API. Ghostscript itself no longer has such clients, but +the PCL interpreters do.) (gxchar.h, gxtext.h, gdevbbox.c, gschar.c, +gstext.c, gxchar.c) + - We were burned once again by gcc's acceptance of private/public +procedure mismatches. (gxchar.c) + - A line break was missing between the return type and a procedure +name. (gsstate.c) + - Show enumerators had an incorrect GC descriptor. (gxchar.c) + - Text enumerators didn't terminate their list properly. (gstext.c) + +Adds a debugging procedure that finds all the pointers to an object. This +uses the GC's pointer enumeration procedures, so it will only work if all +structures have correct GC descriptors. (Of course, we think this is true +of all of Ghostscript.) The current implementation doesn't trace refs. +(gsalloc.c) + +Removes remaining references from gxchar.c to procedures defined in +gschar.c. The standard Ghostscript build now no longer needs gschar.c, +although we will keep it for the moment for backward compatibility. +(gschar.c, gxchar.c) + +Removes an obsolete reference to gs_show_enum. (gstype1.h) + +Adds definitions for the built-in encoding indices. (gsccode.h, gxfont.h, +gxxfont.h) + +To make text_begin implementations callable, requires them, rather than +gx_device_text_begin, to save their parameters in the enumerator structure. +(gxtext.h, gstext.c, gxchar.c) + +Adds a TEXT_DO_CHARWIDTH alternative to the text operation, to just advance +the current point by the character width (stringwidth rmoveto). (gscpm.h, +gstext.h, gxchar.c, gxpath.c) + +Adds procedures to allocate and initialize fonts. (gxfont.h, gsfont.c) + +Starts to revise the gs_font procedure vector to create a real "font socket" +API, adding several new procedures. This is a NON-BACKWARD-COMPATIBLE +change, and there probably are more to come. (gxchar.h, gxfont.h, gsfont.c, +gstext.c, gxchar.c) + +Moves the Type 0 font stack from gs_show_enum to gs_text_enum_t, and renames +its types to gx_font_stack_[item_]t. Also moves cmap_code. (gxchar.h, +gxtext.h, gschar0.c, gstext.c, gxchar.c) + +Moves the glyph enumeration procedure from Type 1 fonts to general fonts, +changing its name to enumerate_glyph. (gxfont1.h) + +Changes the debugging code for reference counting to call procedures, to +allow better breakpointing. (gsrefct.h, gsmemory.c) + +</pre> + +<hr> + +<h2><a name="Version5.86"></a>Version 5.86 (tester) (6/14/99)</h2> + +<p> +This fileset includes the first batch of changes for the new driver-based +text API. Unfortunately, a few of them are non-backward-compatible. +WARNING: This API is UNSTABLE and should not be used yet. This includes the +APIs and structures in gxtext.h, and to a lesser extent those in gstext.h. + +<h3><a name="5.86_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Interpreter) + - The default initialization of fonts now sets next_glyph rather +than next_char. +(Library) + - The font argument of the driver text_begin procedure is no +longer declared as const. + - Text enumerators now have a is_width_only and current_width +procedures; the restart procedure is renamed retry, and there is a new +restart procedure that does something different. + - The scale member of gs_text_enum_t is renamed log2_scale. + - gs_show_restore_font is removed. + - The current_char, current_glyph, width, and log2_current_scale +members of gs_show_enum are removed (replaced by members of gs_text_enum_t). + - The current_width member of gs_text_enum_t is removed. + - Replaces TEXT_REPLACE_{X,Y}_WIDTHS with a single +TEXT_REPLACE_WIDTHS. + +</pre><h3><a name="5.86_Documentation"></a>Documentation</h3><pre> + +Fixes a number of outdated URLs. (doc/Devices.htm, doc/Fonts.htm, +doc/Install.htm, doc/Language.htm, doc/Make.htm, doc/New-user.htm) + +Documents the name change from gs_iso_e.ps to gs_il1_e.ps. +(doc/Psfiles.htm) + +Documents the fact that a double % may be needed on MS systems. +(doc/Use.htm) + +Documents that reversepath discards a trailing moveto, for compatibility +with Adobe implementations. (gxpath2.c) + +</pre><h3><a name="5.86_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - Some punctuation was omitted that affects builds on VMS systems. +(gs.mak) + - 'make install' didn't install doc/History5.htm. (unixinst.mak) + - The Borland makefile put some generated files in the top-level +directory rather than the build directory. (bcwin32.mak) + +Updates the Unix install script for the name change of gs_iso_e.ps. +(unixinst.mak) + +Moves the GNU-licensed drivers to a separate makefile. (contrib.mak, +gnu/src/gnudevs.mak) + +Adds pipe.dev to the BC++, MSVC++, and OS/2 (GCC/EMX) platforms. +(bcwin32.mak, dvx-gcc.mak, msvc32.mak, msvclib.mak) + +</pre><h3><a name="5.86_Utilities"></a>Utilities</h3><pre> + +Fixes problems: - The usage message for pdf2ps was incorrect. (lib/pdf2ps, + lib/pdf2ps.bat) + +</pre><h3><a name="5.86_Drivers"></a>Drivers</h3><pre> + +Removes all remaining uses of #define'd casts in connection with ENUM_PTRS +and RELOC_PTRS procedures. (gdevpdf.c, gdevpdfo.c) + +Adds a user-contributed driver for the Oki Data OkiPage 4w+ LED printer. +This is a GPL'ed driver. (contrib.mak, gnu/src/gdevop4w.c) + +</pre><h3><a name="5.86_Platforms"></a>Platforms</h3><pre> + +Adds a %handle% IODevice (mshandle.dev) to recognize file names of the form +%handle%NNNNNNNN under MS Windows. GSview uses this feature in place of +pipes, which are an open industry standard not supported by MS Windows. +(msvc32.mak, winlib.mak, gp_mshdl.c) + +</pre><h3><a name="5.86_Fonts"></a>Fonts</h3><pre> + +Adds the ISO 8859-2 encoding to the stock of built-in encodings. +(lib/gs_il2_e.ps, lib/gs_iso_e.ps => lib/gs_il1_e.ps) + +</pre><h3><a name="5.86_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Using a colored pattern with an uncolored Pattern color space +caused an error. (lib/pdf_draw.ps) + - Embedded CIDFontType 2 fonts didn't work, and embedded TrueType +fonts did an extra definefont. (lib/gs_ttf.ps, lib/pdf_font.ps, +lib/pdf_ops.ps) ****** IN PROGRESS ****** + +</pre><h3><a name="5.86_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Some files hadn't been updated for the removal of the gs_imemory +static. (int.mak, gp_gnrdl.c, imain.c, ztrap.c) + - %statementedit could append a spurious character if the last +character of the statement was not whitespace. (bug probably introduced in +5.8x) (ziodev.c) + - The show operators didn't properly handle the special case of +executing within a cshow procedure for a non-CID font. (zchar.c) + - cshow applied to a composite font didn't scale the current font +correctly (in fact, at all). (zcfont.c) + - If an error occurred within the procedure called by +resourceforall, it wasn't reported. (lib/gs_res.ps) + - flushfile and closefile didn't correctly handle filters that only +write a fixed amount of data. (zfileio.c) + - cshow didn't restore the font reliably after executing the +procedure. (ichar.h, zcfont.c, zchar.c) + - An execstackoverflow error might temporarily leave the execution +stack in an invalid state. (interp.c) + +Cleans up some macros. (iname.c, isave.c, iscan.c) + +Removes all remaining uses of #define'd casts in connection with ENUM_PTRS +and RELOC_PTRS procedures. (icontext.c, iname.c, isave.c, iscan.c, +istack.c, zcontext.c, zfproc.c) + +Adds a run-time warning message if gp_gnrdl.c is included in a non-GNU +build. (gp_gnrdl.c) + +Converts clients to use the gs_text procedures that replace the gs_show +procedures, and to use gs_text_enum_t rather than gs_show_enum as the +enumerator type. (ichar.h, zbfont.c, zcfont.c, zchar.c, zchar1.c, +zchar32.c, zchar42.c, zcharout.c, zcharx.c, zfont.c, zfont0.c, zfont1.c, +zfont32.c, zimage.c, zimage2.c) + +Updates the initialization code for the name change of gs_iso_e.ps. +(lib/gs_init.ps) + +Splits off the definitions relating to name indices, in anticipation of +defining some name indices statically. (inamedef.h, inameidx.h, iname.c) + +</pre><h3><a name="5.86_Streams"></a>Streams</h3><pre> + +Fixes problems: + - The pixel-difference filters didn't initialize the previous sample +to 0 at the beginning of each row. (spdiff.c) + - The CCITTFaxDecode filter didn't correctly handle the case where +the last code of a row occurred less than 7 or 8 bits before the end of the +input stream. (scf.h, shc.h, scfd.c) + - Flushing filters didn't work. (stream.c) + - The DCTEncode filter gave an error if asked to write to a string +with less than 100 bytes of free space left when the end of the input data +was reached. (sdct.h, sdcte.c) + +Removes all remaining uses of #define'd casts in connection with ENUM_PTRS +and RELOC_PTRS procedures. (stream.c) + +Changes the ASCII85Encode stream to reliably insert a newline at least once +every 80 characters, rather than unreliably after at most 80 characters of +data. (sfilter2.c) + +Cleans up some formatting. (stream.c) + +</pre><h3><a name="5.86_Library"></a>Library</h3><pre> + +Fixes problems: + - A client wasn't updated for the change in the declaration of +gx_dht_proc. (bug introduced in 5.84) (genht.c) + - When rendering a 12-bit-per-sample color image, the device color +wasn't initialized, possibly causing a memory access error when comparing +the current color with the previous one. (gxi12bit.c) + - arch_floats_are_IEEE was incorrectly defined as +arch_floats_are_ieee. (bug introduced in 5.83) (std.h) + - Decoding of IEEE floats on non-IEEE systems was wrong. (ibnum.c) + - The fast case of masked images in Pattern color spaces didn't +work. (bug introduced since 5.50) (gxifast.c) + - cshow gave an error if there was no current point. (gxchar.c) + +Replaces TEXT_REPLACE_{X,Y}_WIDTHS with a single TEXT_REPLACE_WIDTHS. +(gstext.h, gstext.c) + +Cleans up some macros. (gdevddrw.c, gsfont.c, gsht1.c) + +Removes all remaining uses of #define'd casts in connection with ENUM_PTRS +and RELOC_PTRS procedures. (gdevddrw.c, gdevplnx.c, gsalloc.c, gschar.c, +gscolor.c, gscolor2.c, gscrd.c, gscsepr.c, gscspace.c, gsdevice.c, gsdsrc.c, +gsfcmap.c, gsfont.c, gsfont0.c, gsht1.c, gshtscr.c, gsimage.c, gspcolor.c, +gsptype1.c, gsstate.c, gstext.c, gxcmap.c, gxht.c, gxipixel.c, gxmclip.c, +gxtype1.c) + +Adds gs_c_param_list_write_more, to switch a C parameter list back to write +mode without clearing it. (gsparam.h, gscparam.c) + +Adds gs_grestore_only, to do a grestore without requiring 2 entries on the +graphics state stack. (gsstate.h, gsstate.c) + +Completes a first bridge between the new driver text_begin procedure and the +existing text API defined in gschar.h. The changes are backward-compatible +for both clients of the APIs and (the few) implementors of text_begin, +except that the font argument of text_begin is no longer const. Note that +gschar.h is no longer used by any client, and in fact is deprecated. +(gschar.h, gstext.h, gxfcache.h, gxtext.h, gzstate.h, gdevbbox.c, +gdevnfwd.c, gschar.c, gsfont.c, gsfont0.c, gstext.c) + +Mostly splits off the existing text procedures from the default +implementation of the new text facilities. (lib.mak, gxchar.h, gschar.c, +gxchar.c) + +Makes the structure descriptor for gs_state public, for testing in gxchar.c. +(gzstate.h, gsstate.c) + +Adds is_width_only and current_width procedures to the text enumerator; +renames restart as retry, and adds a restart procedure for restarting with +different parameters. (gstext.h, gxtext.h, gdevbbox.c, gschar.c, gstext.c, +gxchar.c) + +Makes the masks for the subgroups of text operation parameters public. +(gstext.h) + +Removes members of gs_show_enum that are superseded by members of +gs_text_enum_t: current_char, current_glyph, width, and log2_current_scale. +(gxchar.h, gxchar.c) + +Adds aliases for popen and pclose under WIN32. (pipe_.h) + +Moves gs_incachedevice from gschar.h to gsstate.h. (gschar.h, gsstate.h) + +</pre> + +<hr> + +<h2><a name="Version5.85"></a>Version 5.85 (tester) (5/29/99)</h2> + +<p> +This fileset removes a few more writable statics, and adds uniform support +for %filedevice%filename syntax in OutputFile. Unfortunately, removing the +static that held the interpreter's allocator group was almost as much of an +upheaval as removing the statics for the interpreter stacks. + +<h3><a name="5.85_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Interpreter) + - context_state_alloc now takes an additional parameter, as do +obj_cvp, make_packed_array, parse_real_file_name, ref_stack_store, +sread/write_proc, terminate_file_name, and a number of other internal +interpreter procedures. + - scan_number now does not mark the result as new. + - The _param_list_read/write procedures now take an additional +gs_ref_memory_t * parameter. + - It is no longer possible to store pointers to the interpreter's +allocator group (gs_dual_memory_t) in structures or variables across a +garbage collection. + - The save_level instance variable is moved from gs_dual_memory_t +to gs_ref_memory_t. + - op_show_finish_setup can now fail. + - fname.h is renamed gsfname.h; the procedure names and parameters +for %device%name file names are changed. + - gx_imager_stroke_add now takes an additional argument; a NULL +value for the device argument of gx_stroke_path_only is no longer valid. + - gx_make_clip_translate_device now takes a memory parameter, and no +container parameter; gx_make_clip_device no longer takes a container +parameter; gx_mask_clip_initialize and tile_clip_initialize now take a +memory parameter. + +</pre><h3><a name="5.85_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The language documentation still referred to outside clipping. +(doc/Language.htm) + +Documents the new curve join graphics state parameter. (doc/Language.htm) + +Documents the fact that the OutputFile device parameter now supports the +%device%file syntax. (gp.h, doc/Use.htm) + +Documents the licensing problems related to GNU readline. (int.mak, +unix-gcc.mak, gp_gnrdl.c) + +</pre><h3><a name="5.85_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The bmpa devices needed gdevppla. (bug introduced in 5.84) +(devs.mak) + - The bmpa devices were accidentally included in the DEVICE_DEVS +setting in the distributed fileset. (unix-gcc.mak) + - msvclib.mak was missing some definitions. (msvclib.mak) + +Adds a CC_NO_WARN macro for those few files that produce tons of warnings +that we can't work around. (bcwin32.mak, dvx-gcc.mak, msvccmd.mak, +openvms.mak, openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak, +unixtrad.mak, watcw32.mak, wccommon.mak, devs.mak, lib.mak, zlib.mak) + +Adds version.mak to msvclib.mak, so library clients can track the version. +(msvclib.mak) + +</pre><h3><a name="5.85_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - -replace didn't work if it was the last item of a module +description. (genconf.c) + +</pre><h3><a name="5.85_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - CCITTFax-compressed bitmaps sometimes used both a Rows value and +an end-of-block indicator, which some PostScript implementations don't +handle properly. (gdevpsdf.h, gdevps.c, gdevpsdf.c) + +Removes an unused procedure and macro. (gdevlj56.c) + +</pre><h3><a name="5.85_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - The interpreter cached objects even if the reference had the wrong +generation number, causing errors if a correct reference occurred later. +(lib/pdf_base.ps) + - Embedded TrueType fonts using the Macintosh encoding sometimes +caused an error. (lib/gs_ttf.ps) + +</pre><h3><a name="5.85_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Multiple contexts were broken (probably since 5.80). Fixing this +required adding a parameter to context_state_alloc, to provide systemdict. +(icontext.h, icontext.c, interp.c) + - setpagedevice didn't accept the 4-element PageSize values that +appear in the InputAttributes dictionary. (zmedia2.c) + - BuildChar/BuildGlyph was "short circuited" even in some cases +where it wasn't safe to do so. (ichar.h, zchar.c, zcharout.c) + - The show operators didn't properly handle the special case of +executing within a cshow procedure. (ichar.h, zcfont.c, zchar.c, zcharx.c) + - The -dDOINTERPOLATE switch had gotten broken somehow. +(lib/gs_init.ps) + - The is_identity flag wasn't properly cleared when loading cached +CIE mapping values, causing incorrect output. (zcie.c) + +Removes the writable static for the context scheduler. (zcontext.c) + +Removes the writable static for the interpreter's group of allocators +(gs_imemory). This too turned out to be a massive change with many +NON-BACKWARD-COMPATIBLE changes required in internal procedures. (bfont.h, +files.h, fname.h, ialloc.h, ifunc.h, imemory.h, interp.h, iparam.h, +iparray.h, ipcolor.h, isave.h, iscannum.h, istack.h, istream.h, iutil.h, +store.h, ialloc.c, icontext.c, idebug.c, idict.c, iinit.c, imain.c, +imainarg.c, interp.c, iparam.c, ireclaim.c, isave.c, iscan.c, iscanbin.c, +iscannum.c, isstate.h, istack.c, iutil.c, zarray.c, zbfont.c, zcontext.c, +zdict.c, zfname.c, zdps.c, zdps1.c, zfcmap.c, zdict.c, zfile.c, zfilter.c, +zfont.c, zfont0.c, zfproc.c, zfreuse.c, zfunc.c, zfunc0.c, zfunc3.c, +zgeneric.c, zht2.c, ziodev.c, ziodev2.c, zpacked.c, zpcolor.c, zshade.c, +zupath.c, zvmem.c) + +Adds a gs_memory_t * argument to obj_cvp. This is part of the work for +removing the gs_imemory static: we note it separately because it affects +code beyond the interpreter. (iutil.h, gp_gnrdl.c, iutil.c, zfileio.c) + +Updates interpreter code for the addition of new_mask, test_mask, and +save_level to gs_ref_memory_t, and the removal of save_level from +gs_dual_memory_t. (ialloc.h, ialloc.c, isave.c) + +Adds a gs_ref_memory_t * argument to all the _param_list_read/write +procedures. (iparam.h, iparam.c, zcrd.c, zdevice.c, zfdctd.c, zfdcte.c, +zfdecode.c, zfilter2.c, ziodev2.c, zusparam.c) + +Changes the hack in file_alloc_stream that determines whether a gs_memory_t +* is actually a gs_ref_memory_t *. The former code tested specifically +whether the allocator was one of the current interpreter allocators; the new +code simply tests the procedure vector. We aren't 100% sure that this +change will work reliably. (zfile.c) + +Factors common code out of isave.h and store.h. (idosave.h, isave.h, +store.h) + +Removes the reclaim_data member of gs_dual_memory_t, since it is no longer +useful. (imemory.h, ialloc.c, ireclaim.c) + +Makes the default InputAttributes and OutputAttributes elements of page +device dictionaries writable and (if possible) allocated in local VM, to +work around bugs in the output of Word Perfect. (lib/gs_setpd.ps) + +Modifies the interpreter's error printout to indicate whether dictionaries +on the stack(s) are writable. (lib/gs_init.ps) + +Moves support for %device%name file naming into the library. (fname.h, +zfile.c, zfname.c [deleted]) + +Adds interpreter support for the new curve join graphics state parameter. +(zgstate.c) + +</pre><h3><a name="5.85_Library"></a>Library</h3><pre> + +Fixes problems: + - bbox_fill_path device didn't interact with compositors correctly. +(This problem had no practical effect.) (gdevbbox.c) + - kshow didn't check for CID fonts. (gschar.c) + - The bbox and ImageType 3 image enumerators had incorrect GC +descriptors, possibly causing memory-related crashes. (gsstruct.h, +gdevbbox.c, gximage3.c) + - gx_make_clip_[translate_]device took an obsolete container +parameter. (gxcpath.h, gsshade.c, gxccache.c, gxfill.c, gxstroke.c) + - Non-transient clipping devices were used for image clipping, but +the API didn't support creating them. (gxcpath.h, gxclip.c, gximage3.c, +gxipixel.c) + - Some devices were created without setting their memory member, +which caused the GC not to trace pointers to them. (gxmclip.h, gxclip2.h, +gxclip2.c, gximage3.c, gxmclip.c, gxp1fill.c) + - The bbox device didn't handle ImageType 3 images correctly. +(gdevbbox.c) + - When the bbox device passed a stroke operation to the library, it +didn't pass the device, causing absolute-length dots to render incorrectly. +Fixing this required adding a device parameter to the gx_imager_stroke_add +procedure. (gxpaint.h, gdevbbox.c, gxpaint.c) + - The counter control OtherSubrs (12 and 13) weren't implemented. +(This probably had no effect.) (gstype1.c) + - Type 1 stem hints with negative widths didn't work properly. +(gxhint2.c) + - The debugging output for hintmask and cntrmask printed the vstem +and hstem counts in the wrong order. (gstype2.c) + - If the value of the OutputFile device parameter was too long, +the result could be memory corruption rather than a rangecheck error. +(gsdevice.c) + - The dash pattern pointer in the saved imager state of a band list +writer could point inside the writer structure, confusing the garbage +collector. (gxclist.h, gxclpath.c) + +Adds new_mask, test_mask, and save_level instance variables to +gs_ref_memory_t. This too is part of the gs_imemory work: we note it +separately because it is the only piece of this work that affects the +library. (gxalloc.h, gsalloc.c) + +Makes cntrmask at the beginning of a charstring act like vstemhm + cntrmask, +as with hintmask. This is not documented, but we see it used this way in +Type 2 CharStrings. (gstype2.c) + +Cleans up formatting and macros. (gp.h) + +Speeds up the bounding box device by skipping path filling if the entire +path falls within the already-accumulated bounding box, and by defining the +device as 8-bit gray to avoid halftone computation. (gdevbbox.c) + +Adds a procedure, gs_show_use_glyph, for implementing the show-in-cshow +hack. (gschar.h, gschar.c) + +Moves support for %device%file file naming into the library. (lib.mak, +gsfname.h, gxiodev.h, gdevpipe.c, gsfname.c) + +Makes the OutputFile device parameter recognize %device%file syntax, as well +as "-" and (on platforms that support pipes) |command. (gp.h, gxdevice.h, +gdevprn.c, gsdevice.c, gp_unix.c) + +Adds a separate graphics state parameter to indicate how to treat joins +between segments of a flattened curve, for compatibility with Adobe +interpreters (which apparently always use bevel joins). (gsline.h, +gxclpath.h, gxline.h, gsline.c, gsstate.c, gxclpath.c, gxclrast.c, +gxstroke.c) + +Changes code slightly, introducing an unnecessary assignment, in order to +suppress a compiler warning. (gxclpath.c) + +Tweaks the CIE_LOAD_CACHE_BODY macro slightly. (gscie.c) + +</pre> + +<hr> + +<h2><a name="Version5.84"></a>Version 5.84 (tester) (5/19/99)</h2> + +<p> +This fileset completes the implementation of planar rendering, and fixes a +few more bugs, some of them surprisingly old. + +<h3><a name="5.84_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Drivers) + - The dopath vector device implementation procedure was changed to +take an optional matrix argument. +(Library) + - The internal memory__need_ macros are changed to upper case. + +</pre><h3><a name="5.84_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - There was a duplicate entry for GENINIT_XE in the Watcom makefile. +(wctail.mak) + +Adds the duplex-capable LaserJet drivers (ljet3d and ljet4d) to all standard +configurations. (bcwin32.mak, dvx-gcc.mak, msvc32.mak, openvms.mak, +openvms.mmk, os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak, +watcw32.mak) + +Adds a PROFILE compilation switch, similar to DEBUG, to work around the fact +that gprof under GNU/Linux doesn't count time in memset, memcpy, or other C +library procedures. PROFILE will substitute our own versions of memset, +memcpy, and memmove. Currently, this switch is supported only on Unix. +(unix-end.mak) + +Defines a new makefile macro, SYNC, that gives the module name for thread / +synchronization facilities; makes async.dev include this module. This is +posync on Unix and VMS platforms, winsync on MS Windows and OS/2 platforms. +(bcwin32.mak, dvx-gcc.mak, lib.mak, msvc32.mak, msvclib.mak, openvms.mak, +openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, +watc.mak, watclib.mak, watcw32.mak) + +Splits off the rules common to the 3 Windows makefiles (watc, watclib, +winlib) into a separate file, defining new modules winplat.dev and +winsync.dev. (watc.mak, watclib.mak, winlib.mak, winplat.mak) + +Removes -Wcast-align from the gcc switches, since this produces huge numbers +of warnings that we will certainly never get rid of. (unix-gcc.mak) + +</pre><h3><a name="5.84_Utilities"></a>Utilities</h3><pre> + +Enhances the ps2pdf script with a patch contributed by Jim Avera +(avera@fjst.com) so that it can be used as a pipe by specifying "-" for the +input and/or output file. (lib/ps2pdf) + +Modifies ps2ascii to handle landscape pages better. (lib/ps2ascii.ps) + +</pre><h3><a name="5.84_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - PDF output that used Pattern colors on more than one page failed +to include the color space resource in the resource dictionaries of pages +other than the first. (gdevpdf.c) + - The PDF writer emitted bitmap patterns inverted in Y. +(gdevpdfi.c) + - The PCL XL driver's GC descriptor had become incorrect, causing +crashes. (gdevpx.c) + - The pdfwrite driver could still emit coordinates too large for +Acrobat Reader to handle, for stroked lines with an unusual CTM. +(gdevpdfd.c) + - The pxl drivers emitted invalid output for dashed lines. +(gdevpx.c) + - The [e]pswrite and pxl drivers scaled line widths and dash +patterns incorrectly. Fixing this properly involved refactoring the +handling of scaling for paths, and removing gdev_vector_stroke_path. +(gdevpsdf.h, gdevvec.h, gdevpdfd.c, gdevps.c, gdevpsdf.c, gdevpx.c, +gdevvec.c) + - The lj5 drivers didn't pad images to a multiple of 4 bytes per +scan line, producing invalid PCL XL output. (We don't see how they could +ever have worked, in fact.) (gdevpcl.h, gdevlj56.c, gdevpcl.c) + +Adds a user-contributed driver for the DEClaser 2100. This is a GPL'ed +driver. (contrib.mak, gnu/src/gdevln03.c) + +Makes the UsePlanarBuffer parameter, and planar buffering capability, from +the PPM devices available to general printer devices, but in a separate +module to avoid making all printer devices require gdevmpla.c. (gdevppla.h, +gdevpbm.c, gdevppla.c) + +Adds a UsePlanarBuffer parameter to the async BMP drivers, for testing. +(gdevbmpa.c) + +Removes the comment about the instability of the "vector" driver interface. +(gdevvec.h, gdevvec.c) + +</pre><h3><a name="5.84_Platforms"></a>Platforms</h3><pre> + +Splits off the Windows thread and synchronization primitives into a new file +and a new module, winsync.dev. (watc.mak, watclib.mak, winlib.mak, +gp_win32.c, gp_wsync.c) + +</pre><h3><a name="5.84_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - As usual, gcc failed to flag some signed/unsigned char mismatches. +(gp_gnrdl.c, iutil.c) + +Moves the indexed color space cache lookup procedure from the interpreter to +the library. (zcsindex.c) + +</pre><h3><a name="5.84_Streams"></a>Streams</h3><pre> + +Fixes problems: + - If a 2-D CCITTFax stream ended with 1 or 2 "vertical 0" codes, +those codes would be ignored. (scfd.c) + +</pre><h3><a name="5.84_Library"></a>Library</h3><pre> + +Fixes problems: + - gsnogc.h contained an extern for gs_gc_reclaim rather than for +gs_nogc_reclaim. (gsnogc.h) + - Banded images in Indexed color spaces rendered incorrectly. +(gximage.c) + - A function declared some arguments as float rather than floatp. +(gshtx.h, gshtx.c) + - As usual, gcc failed to flag some public/private mismatches. +(gdevmrun.c) + - The tracing output for monobit images printed 8 bits per pixel +rather than 1 bit per pixel. (gxidata.c) + - A Pn macro was used in a header file that didn't include stdpre.h. +(gscdefs.h, gconf.c, genht.c, gxhtbit.c, gxclrast.c) + - get_bits_rectangle for the planar memory device didn't flush the +last byte of each row. (gdevmpla.c) + - When banding, Indexed color spaces using a procedure rather than a +lookup table caused a crash. (gxcolor2.h, gscolor2.c, gxclrast.c) + - When filling a region with a Pattern with a rotated matrix, some +parts of the region could be missed. (bug introduced by a fix in 5.38) +(gxp1fill.c) + +When compiling with gcc, replaces inline with __inline__ to get rid of a +potential warning. (stdpre.h) + +Adds our own implementations of memset, memcpy, and memmove, to work around +the fact that gprof under GNU/Linux doesn't count time in C library procedures. +(memory_.h, string_.h, gsmisc.c) + +Finishes implementing planar rendering for printer / banded devices. +(gdevprn.h, gxclist.h, gxdevbuf.h, gdevprn.c, gxclread.c) + +</pre> + +<hr> + +<h2><a name="Version5.83"></a>Version 5.83 (tester) (5/13/99)</h2> + +<p> +This fileset was driven mostly by commercial licensee demands; it doesn't +fix most of the problems reported in 5.82. It features smaller threshold +halftones, the ability to store halftones in ROM, and a nearly complete +implementation of a planar memory device. + +<p> +Items pushed off to the next fileset: +<ul> +<li> - Finish multi-planar band buffers (requires changing +gdev_prn_render_lines to be based on memory devices rather than buffer +pointers). +<li> - For Adobe compatibility, change stroking so that it always +uses +bevel joins between the segments of a curve (this directly contradicts the +Red Book, but it's what Adobe interpreters do). +<li> - Implement an IdiomSet for Corel Draw fountain fills? +(idioms.ps) +<li> - Change shading so it doesn't install a clip device (make this +a +driver procedure instead), because that prevents clist_fill_path from being +called. +</ul> + +<h3><a name="5.83_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Interpreter) + - The spaces.indexed member of a vm_spaces structure has been +renamed spaces_indexed (a macro). + - The gs_reclaim procedure is changed to a macro, GS_RECLAIM. +(Library) + - The bits member of a halftone order is now called bit_data, and is +opaque; halftone orders are now "objects"; gx_ht_alloc_[ht_]order now take +an additional argument. + - The architectural values in arch.h are now all upper-case. +(std.h defines lower-case synonyms for backward compatibility.) + - The buffer device procedures for printer devices are now collected +in a structure; this also changes the parameters of clist_init_params. + - The parameters of the buffered device setup_buf_device procedure +are changed. + - gx_path_copy_reducing now takes an additional argument, an imager +state, for flattening stroked paths. + - Memory devices now must be created by copying a prototype device, +rather than by initializing individual members, even if they are only being +used for limited purposes. + +</pre><h3><a name="5.83_Documentation"></a>Documentation</h3><pre> + +Documents the new facility for compiled halftones, and the old one for +compiling initialization files. (doc/Make.htm) + +</pre><h3><a name="5.83_Utilities"></a>Utilities</h3><pre> + +Adds a utility for compiling halftones into the executable. Also defines +the dependency lists for the auxiliary programs in lib.mak and int.mak, +rather than replicating them for every platform. (bcwin32.mak, +dvx-tail.mak, gs.mak, int.mak, lib.mak, msvctail.mak, openvms.mak, +openvms.mmk, os2.mak, unix-aux.mak, wctail.mak, genht.c) + +Adds support for halftone "resources" in the makefile. (genconf.c) + +Adds code to determine the primary and secondary CPU cache sizes +empirically. (genarch.c) + +Changes the architecture definition macros from lower to upper case, with +lower-case synonyms in std.h for backward compatibility. (gsjconf.h, std.h, +genarch.c) + +Changes the ps2ai utility so that jtxt3 can be set from the command line, to +allow pstoedit to generate AI3-compatible output. (lib/ps2ai.ps) + +</pre><h3><a name="5.83_Procedures"></a>Procedures</h3><pre> + +Adds some optional library modules to the base library compilation list, so +that compilation errors won't slip through. (lib.mak) + +</pre><h3><a name="5.83_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - A change from char to byte needed to be undone (gcc didn't catch +this). (iutil.c) + +Adds a 167x167 stochastic halftone that CalComp put in the public domain. +(lib/ht_ccbnm.ps, int.mak, unixinst.mak) + +Updates the interpreter for the change to per-VM-spaces garbage collection. +(igc.h, ialloc.c, icontext.c, igc.c, ilocate.c, imain.c, interp.c, +ireclaim.c, isave.c, zfile.c, zht.c, zht1.c, zht2.c) + +Updates places that only use gsstruct.h for extern_st to use gsstype.h +instead. (icontext.h, ifont.h) + +</pre><h3><a name="5.83_Library"></a>Library</h3><pre> + +Fixes problems: + - Some types needed updating to reflect the change in the string +freelists. (gsalloc.c, gsnogc.c) + - clip_copy_color didn't initialize some variables in the fastest +case. (bug probably introduced in 5.83) (gxclip.c) + - The fit_fill_ and fit_copy_ macros didn't always parenthesize +their dev argument. (gxdevice.h) + - The sample_load macros returned the wrong results for depth 1 and +2. Amazingly enough, it appears that this case had never been used. +(gsbitops.h) + - The standard allocator would free chunks even if is_controlled was +true. (gsalloc.c) + - Stroking drew semicircles rather than full circles for round +joins. (gxstroke.c) + - The calculation of how finely to sample a curve to achieve a +particular flatness didn't take line width into account when stroking (the +flatness has to apply to the outside of the stroked curve). (gxpath.h, +gxpcopy.c, gxstroke.c) + +Speeds up the bbox device a little. (gdevbbox.c) + +Speeds up the most common cases of clipping a little. (gxclip.h, +gxacpath.c, gxclip.c) + +Makes halftone orders more "object-oriented", so we can use an alternate +representation that trades time for space. This requires a +NON-BACKWARD-COMPATIBLE CHANGE in the gx_ht_order structure and the +arguments of gx_ht_alloc_[ht_]order. (gxcldev.h, gxdht.h, gzht.h, gsht.c, +gsht1.c, gshtscr.c, gshtx.c, gsistate.c, gxcht.c, gxclimag.c, gxclrast.c, +gxht.c, gxhtbit.c) + +Makes it possible to compile-in halftone threshold arrays and orders (e.g., +in ROM) so they don't take up RAM at execution time. (gscdefs.h, gxdht.h, +gxdhtres.h, gzht.h, gconf.c, gsht.c, gsht1.c, gxclrast.c, gxhtbit.c) + +Adds some statistics to the 24-bit memory device (in DEBUG mode only, as +usual). (gdevm24.c) + +Makes the 24-bit memory device optionally use memcpy for wide rectangle +fills. We thought this got us a factor of 3 speedup on a Pentium with gcc's +library, but it turned out to be a profiler artifact. (gdevm24.c) + +Cleans up some formatting. (gxclip.h) + +Dusts off the run-length-encoded memory device, changing it so it reverts to +the unencoded representation when necessary. This code hasn't been tested, +and is not currently used. (gdevmrun.h, gdevrun.c [deleted], gdevmrun.c) + +Adds more statistics to the clipping device. (gxclip.c) + +Adds an implementation of the MD5 Algorithm defined in RFC 1321, derived +directly from the text of the RFC and not from the reference implementation. +This code uses the zlib license, which is more liberal than the Aladdin or +GNU licenses. (md5.h, md5.c) + +Finishes implementing the planar memory device, including generalizing it to +store varying numbers of bits per plane rather than 1 bit per plane. +(gdevmem.h, gdevmpla.h, gxdevmem.h, gdevmem.c, gdevmpla.c) + +Updates clients to initialize memory devices more fully, now required to +distinguish chunky from planar devices. (gxpcmap.c) + +Mostly implements enhancing printer / banded devices so they can use a +planar memory device for rendering and/or band buffering. The code +currently works only in the non-banded case. (gdevprn.h, gxclist.h, +gxdevbuf.h, gxdevcli.h, gdevprn.c, gxclist.c, gxclread.c) + +For testing, adds a -dUsePlanarBuffer=<boolean> parameter to the PPM devices +to make them use a planar memory device. (gdevpbm.c) + +Cleans up some code formatting. (gdevmem.c) + +Makes the garbage collection procedure separately settable for each group of +VM spaces. (In an environment with "async" rendering, the renderer has its +owm VM space group.) Unfortunately, this involved a NON-BACKWARD-COMPATIBLE +change in the vm_spaces structure. (gsgc.h, gsnogc.h, gsnogc.c) + +Updates a client for the change in gs_reclaim; also makes the renderer +thread use the non-tracing garbage collector. (gdevprna.c) + +Updates the non-tracing GC to reflect its role as a garbage collection +procedure in a vm_spaces. (gsnogc.c) + +Enhances the non-tracing GC so that if a chunk ever contains no strings, the +string marking area reserved for the tracing GC is added to free space. +(gxalloc.h, gsalloc.c, gsnogc.c) + +Changes the font cache allocator to use a different structure descriptor for +its data so that memory dumps will show "font cache bytes" rather than just +"bytes". (gxccman.c) + +Splits gsstruct.h into gsstype.h, which contains enough of the definition of +structure type descriptors to support extern_st, and gsstruct.h, which is +needed to actually define structure types. (gsstruct.h, gsstype.h, +gxfmap.h) + +Updates places that only use gsstruct.h for extern_st to use gsstype.h +instead. (gsbitmap.h, gsccolor.h, gscie.h, gxfont.h, gzpath.h, scommon.h, +gscdevn.c, gscrd.c, gscrdp.c, gsshade.c, gxpath2.c) + +</pre> + +<hr> + +<h2><a name="Version5.82"></a>Version 5.82 (tester) (4/24/99)</h2> + +<p> +This fileset fixes a few odds and ends, removes a couple more writable +statics, and improves performance in a couple of areas. + +<h3><a name="5.82_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Interpreter) + - dict_uid_param now takes an additional argument, the interpreter +context pointer. + - obj_cvp now takes a stream rather than a string. + +</pre><h3><a name="5.82_Documentation"></a>Documentation</h3><pre> + +Documents the -dGraphicsAlphaBits and -dTextAlphaBits switches; reorganizes +the documentation of the -d/-s switches by function. (doc/Use.htm) + +</pre><h3><a name="5.82_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - Building with MSVC didn't work if COMPILE_INITS was selected. +(msvctail.mak) + - The cp script didn't work on all MS-DOS systems, since the systems +are incompatible with each other in undocumented ways. (cp.bat) + - Using ^ in a command line failed on Windows 98. (wccommon.mak) + - Watcom compilation under Windows NT didn't include some needed +headers. (wccommon.mak) + - The Watcom compiler's quoting requirements were inconsistent. +(gs.mak) + - GLCCWIN was used without being defined. The MS DOS/Windows +makefiles really are a tangled mess.... (watc.mak) + - The build directories didn't get created automatically when +compiling with the Watcom compiler. (watc.mak) + +Adds more optimization switches for Watcom compilation. (wccommon.mak) + +</pre><h3><a name="5.82_Utilities"></a>Utilities</h3><pre> + +Adds a pfbtopfa script. (unixinst.mak, lib/pfbtopfa, lib/pfbtopfa.bat, +lib/pfbtopfa.ps) + +</pre><h3><a name="5.82_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - "Vector" drivers (currently only the PCL XL driver) filled +polygons incorrectly. (gdevvec.c) + - The PCL XL drivers produced incorrect output for images. (We +can't understand how they ever could have worked.) (gdevpx.c) + - The PCL XL drivers skipped blank pages. (gdevpx.c) + - The page origin for the clj driver was set incorrectly. (fix from +Artifex) (gdevclj.c) + - The map_color_rgb procedure for the 32-bit CMYK bmp device was +wrong, causing RasterOps to produce incorrect output. (fix from Artifex) +(gdevbmp.c) + +Works around a bug in Acrobat Reader's Print command, by changing the +scaling for bitmap patterns. (gdevpdfi.c) + +Cleans up some formatting and macros. (gdevpx.c) + +Factors out some common parameter-putting utilities. (gdevpsdf.h, +gdevpdfp.c, gdevpsdp.c) + +</pre><h3><a name="5.82_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - The DLL code "knew" it could only be compiled on Windows and OS/2 +platforms. (gsdll.c) + +Removes a Mac-specific file that is now moved to the Mac-specific archive. +(gsdllmac.h [deleted]) + +</pre><h3><a name="5.82_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - An invalidaccess could occur when repositioning the file after +executing an image XObject. (lib/pdf_draw.ps) + - Indexed color spaces gave an error if the underlying space was +represented as a name rather than an array. (bug introduced in 5.80) +(lib/pdf_draw.ps) + +</pre><h3><a name="5.82_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The interpreter reentrancy changes broke the GNU readline +interface. (gp_gnrdl.c, ziodev.c) + - The TrappingType resource category wasn't defined. +(lib/gs_res.ps, lib/gs_trap.ps) + - CIE color spaces in shading patterns didn't work. (lib/gs_ll3.ps) + - Printing a string of more than 200 characters with == was broken. +Fixing this required a NON-BACKWARD-COMPATIBLE change in the argument list +of obj_cvp. (bug introduced in 5.80) (iutil.h, gp_gnrdl.c, idebug.c, +iutil.c, zfileio.c) + +Changes the interpreter trace output to be somewhat more readable. +(interp.c) + +Makes the linking of the binary token scanning procedure static rather than +dynamic. (int.mak, inobtokn.c, iscan.c, zbseq.c) + +Makes the language level a property of the context, eliminating a writable +static. (icstate.h, idparam.h, ilevel.h, icontext.c, idparam.c, iinit.c, +interp.c, zcontext.c, zmisc2.c) + +Updates clients for the change in dict_uid_param. (zbfont.c, zfcmap.c, +zpcolor.c, zshade.c) + +</pre><h3><a name="5.82_Library"></a>Library</h3><pre> + +Fixes problems: + - There was a signed/unsigned char * mismatch. (sfxfd.c) + - Some very picky compilers complained inappropriately about a +const/non-const mismatch. (gxcht.c) + - The format of the string freelists didn't allow chunks with more +than 64K bytes of string area. (gxalloc.h, gsnogc.c) + +Moves the interface definitions for the memory dump debugging code into a +header file. (gxalloc.h, gsalloc.c) + +Makes the standard memory manager recognize more effectively when it can +reset the high-water mark for occupied space in the current chunk. This +turns out to make a big difference in preventing sandbars. (gxalloc.h, +gsalloc.c) + +Makes clipping lists keep track of their minimum and maximum X values, so +that they can return accurate outer clipping boxes, which in turn allows +more effective pre-clipping of filled regions. (gxcpath.h, gxacpath.c, +gxclip.c, gxcpath.c) + +Makes clipping devices cache their clipping box, so they can return it +quickly. (gxcpath.h, gxclip.c) + +Makes the colored halftone logic check bounding boxes before running the +expensive algorithms. This improves performance dramatically for some files +without costing much for the rest. (gxcht.c) + +Adds some more debugging printout for clipping lists. (gxcpath.c) + +Cleans up formatting and macros. (gdevdflt.c, gdevhit.c, gdevnfwd.c) + +Factors out some common parameter-putting utilities. (gsparamx.h, +gsparamx.c, gstrap.c) + +Adds some more tracing output for images. (gxidata.c) + +</pre> + +<hr> + +<h2><a name="Version5.81"></a>Version 5.81 (tester) (4/14/99)</h2> + +<p> +This fileset cleans up most of the bug tail from 5.80, but it doesn't fix +all the reported problems. It also factors out the platform-specific DLL +calls, and extends the DLL API to the Mac. + +<h3><a name="5.81_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Platforms) + - gsdll_get_bitmap is now defined in gsdllos2.h; gsdll_copy_dib, +_copy_palette, _draw, and _get_bitmap_row are now defined in gsdllwin.h. + +(Interpreter) + - zcolor_remap_one may return 0 rather than o_push_estack. (This +change actually occurred in 5.80, but was not documented.) + +(Library) + - The initialized parameters of an image scaling filter are now +stored in a subsidiary structure. + - The names max_support and log2_max_support are changed to +MAX_ISCALE_SUPPORT and LOG2_MAX_ISCALE_SUPPORT. + - The structure definition for the smoothed image scaling filter is +now private, although its descriptor remains public. + - The criteria for when to use Interpolate are now more stringent. + +</pre><h3><a name="5.81_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - gs_trap.ps wasn't installed by `make install'. (unixinst.mak) + - A semicolon was missing in one definition of GS_LIB_DEFAULT. +(watc.mak) + - ll.tr and _temp_.tr weren't created in the obj directory. +(watc.mak, wctail.mak) + - RM_ was defined incorrectly on one platform. (wccommon.mak) + +</pre><h3><a name="5.81_Utilities"></a>Utilities</h3><pre> + +Makes some minor edits in ansi2knr, contributed by a user, to remove gcc +warnings. (ansi2knr.c) + +</pre><h3><a name="5.81_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - There was an int/uint mismatch. (gdevbmpa.c) + - There was a const/non-const mismatch. (gdevbmpa.c) + +Changes the p*m drivers so that they use the default color mapper when +possible, speeding up execution. (gdevpbm.c) + +</pre><h3><a name="5.81_Fonts"></a>Fonts</h3><pre> + +Adds Black as indicating that a bold font should be substituted if +necessary. (lib/gs_fonts.ps) + +</pre><h3><a name="5.81_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - The Watcom NT compiler implements setmode and fileno but not +_setmode and _fileno. (gp_ntfs.c) + - The procedure parameter passed to the Windows _beginthread +procedure had the wrong prototype. (gp_win32.c) + - Watcom's _beginthread procedure takes an extra argument. +(windows_.h, gp_win32.c) + +Extends the DLL API to work on the Mac. This required some restructuring of +the code, and some NON-BACKWARD-COMPATIBLE changes to move +environment-specific calls into environment-specific header files. +(pcwin.mak, os2.mak, winint.mak, dwdll.h, gsdll.h, gsdllmac.h, gsdllos2.h, +gsdllwin.h, dpmainc.c, dwdll.cpp, dwnodll.cpp, gdevmswn.c, gdevpm.c, +gdevwdib.c, gsdll.c) + +</pre><h3><a name="5.81_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Changes the interpreter to handle two more specification-violating +conditions that Adobe Acrobat accepts: truncation of %%EOF to %%EO, and use +of Dest links with no Dests dictionary. (lib/pdf_main.ps) + +</pre><h3><a name="5.81_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - gcc failed to flag initialization of an automatic aggregate, which +is allowed in neither ANSI nor traditional C. (iutil.c) + - The system name table lacked the last 3 entries. +(lib/gs_btokn.ps) + - Interpolated images always wound up at (0, 0). (bug introduced in +5.80) (gxipixel.c) + - The Watcom compiler didn't consider "const uint" and "const +unsigned" to be compatible. (ifunc.h) + - The code to detect identity transfer functions could cause +transfer functions not to be processed at all. (icolor.h, zcolor.c, +zcolor1.c, zht2.c) + - The Level 2 redefinition of restore could do an extra grestore, +possibly creating a temporary reference to a freed object. (zdevice2.c) + +Adds more tracing for undo-saves, and changes a macro to a procedure. +(isave.c) + +Removes some #define'd casts. (isave.c) + +</pre><h3><a name="5.81_Library"></a>Library</h3><pre> + +Fixes problems: + - When banding, the color space wasn't reinitialized for each page. +(gxclist.c) + - The criterion for allowing image interpolation still produced +"mush" for some important classes of image. (gxiscale.c) + - The Watcom compiler didn't consider "const uint" and "const +unsigned" to be compatible. (gscdefs.h, gconf.c) + - Identity black generation and undercolor removal functions weren't +passed through the band list correctly. (gxcldev.h, gxclbits.c, gxclrast.c) + - Once again, gcc failed to give a warning for extern followed by +private. (gxcdevn.h) + - glyphshow set up the text operation in a way that created a +garbage collector error. (gschar.c) + +Makes gs_opendevice complete the device procedure vector if the device +wasn't already open. (gsdevice.c) + +Factors out the image scaling filter so that we can use either Adobe's +algorithm or the Mitchell filter. This involves a NON-BACKWARD-COMPATIBLE +CHANGE in the way the filter parameters are defined. (gximage.h, siscale.h, +sisparam.h, gxclimag.c, gxidata.c, gxiscale.c, siscale.c) + +Makes the criteria for when to use interpolation stricter, since we are +still using the Mitchell filter. (gxiscale.c) + +Starts to implement Adobe's image interpolation algorithm. (siinterp.h, +siinterp.c, gxiscale.c) + +Speeds up RGB interpolated images by detecting runs of output color. +(gxiscale.c) + +Makes the default RGB color mapper a "known" mapper that can be propagated +through device pipelines. (gxdevice.h, gsdevice.c) + +</pre> + +<hr> + +<h2><a name="Version5.80"></a>Version 5.80 (tester) (4/6/99)</h2> + +<p> +This version contains the first, and, we hope, largest wave of changes in +the interpreter required to make the interpreter fully reentrant. +Unfortunately, many externally visible APIs, including the argument list for +operator procedures, required changes. + +<p> +Because of the magnitude of the change, we incremented the version number to +5.80. + +<p> +The non-backward-compatible API changes were confined to the interpreter: +the (very minor) changes to the library required to support interpreter +reentrancy are fully backward-compatible. + +<p> +This fileset also implements DeviceN color spaces (always using the +alternate space), including Indexed spaces over DeviceN spaces, for all uses +except smooth shading. + +<h3><a name="5.80_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Interpreter) + - names_init now takes a gs_ref_memory_t * rather than a gs_memory_t +*. + - type_print_strings, type_name_strings, and +ref_type_properties_data are now REF_TYPE_DEBUG_PRINT_STRINGS, +REF_TYPE_NAME_STRINGS, and REF_TYPE_PROPERTIES_DATA. + - The undocumented .writecvp operator, and obj_cvp, now take an +integer instead of a Boolean to define the type of output desired. + - The argument list for operators is changed from os_ptr to +i_ctx_t *. Many internal interpreter APIs have changed. + - The typedef name for operator procedures is changed from op_proc_p +to op_proc_t. + - gs_interpret now takes an additional context (i_ctx_t **) +argument. + - The interpreter's rescheduling and time-slicing procedures, +gs_interp_reschedule_proc and gs_interp_time_slice_proc, now take a context +(i_ctx_t **) argument. + - The Type 1 interpreter push_value callback is renamed push_values; +the first argument of push_values and pop_value has changed from +gs_font_type1 * to void *. + - dict_put*, dict_copy*, dict_undef, dict_resize, dict_grow, and +dict_unpack now take an additional argument, a dictionary stack where the +dictionary may be present. + +</pre><h3><a name="5.80_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The dependency list for the (dummy) trapping feature was wrong. +(int.mak) + - The directory for jerror_.h was incorrect. (jpeg.mak) + +Removes the never-used -header switch from genconf. (genconf.c) + +Adds priority-sorted resources to genconf, currently used only for image +classes. (genconf.c) + +Adds an imageclass resource to genconf, for what used to be called image +strategies. (genconf.c) + +</pre><h3><a name="5.80_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - ansi2knr didn't recognize id1(id2, xxxxx) as not being a function. +(ansi2knr.c) + - viewpcx still referred to the deleted PCXDecode filter. +(lib/viewpcx.ps) + - strlen was called without being declared. (genarch.c) + +</pre><h3><a name="5.80_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - Some drivers that called gdev_prn_open_printer didn't check the +return code for errors. (gdevdjet.c, gdevhl7x.c) + - The cljet5 driver didn't handle long-edge feed properly. (from +Artifex) (gdevclj.c) + - The [e]pswrite driver could produce incorrect output if the input +file had zero-length lines. (gdevps.c) + - The X driver didn't handle byte-swapped 16-bit displays. +(gdevx.c) + - There was an int/uint mismatch. (gdevbmp.c) + - Some needed headers weren't included. (gdevdcrd.c, gdevpdfo.c) + - The updated mswinpr2 driver wouldn't compile with older Windows +header files. (gdevwpr2.c) + +Removes some unnecessary #includes. (gdevps.c) + +Adds user-contributed drivers for the CoStar LabelWriter II Plus and XL +label printers. (gdevcslw.c) + +Speeds up color mapping for the bitrgb driver a little, by using the default +procedure. (gdevbit.c) + +</pre><h3><a name="5.80_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - TrueType fonts with odd-length glyf definitions caused an +invalidfont error. (lib/gs_ttf.ps) + +Changes the font substitution mechanism slightly to be more useful to the +PDF interpreter. (lib/gs_fonts.ps) + +</pre><h3><a name="5.80_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - Some needed headers weren't included. (watc.mak, watclib.mak, +winlib.mak, gp_win32.c) + +</pre><h3><a name="5.80_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - There were many signed/unsigned char type errors that gcc didn't +catch. (gp_gnrdl.c) + - The operator definition list for zdouble was too long. (int.mak, +zdouble.c) + +Removes some unnecessary #includes. (zchar.c) + +Speeds up names_string_ref. (inamedef.h, inames.h, imain.c, iname.c) + +Speeds up reading string/name array parameters. (iparam.c) + +Refactors the implementation of ==, so that all types other than arrays and +dictionaries are handled in C code. (lib/gs_init.ps, iutil.h, iref.h, +gp_gnrdl.c, idebug.c, iutil.c, zfileio.c, ztype.c) + +Changes the type name for operator procedures from op_proc_p to op_proc_t, +for consistency and also to help detect places that need the argument list +changed. (ichar.h, interp.h, iref.h, opdef.h, interp.c, iutil.c, zchar.c, +zcharx.c, zcontrol.c, zupath.c) + +Changes the argument type for operators from os_ptr to i_ctx_t *. (i_ctx_t +is an alias for gs_context_state_t.) This also requires adding a context +pointer to many internal procedures, or changing an os_ptr argument to +i_ctx_t *. This is a MASSIVE NON-BACKWARD-COMPATIBLE change which we simply +saw no way to avoid if the interpreter was to be made fully re-entrant. See +"Incompatible changes" above for externally visible changes. +(lib/gs_init.ps, bfont.h, btoken.h, dstack.h, estack.h, files.h, ichar.h, +ichar1.h, icharout.h, icie.h, icolor.h, icontext.h, icsmap.h, ifilter.h, +ifont1.h, igstate.h, iht.h, iimage.h, iimage2.h, imain.h, imemory.h, +interp.h, ipacked.h, iref.h, iscan.h, istream.h, opdef.h, oper.h, +opextern.h, ostack.h, ialloc.c, icontext.c, iinit.c, imain.c, inouparm.c, +interp.c, ireclaim.c, iscan.c, iscanbin.c, zarith.c, zarray.c, zbfont.c, +zbseq.c, zcfont.c, zchar.c, zchar1.c, zchar2.c, zchar32.c, zchar42.c, +zcharout.c, zcharx.c, zcid.c, zcie.c, zcolor.c, zcolor1.c, zcolor2.c, +zcontext.c, zcontrol.c, zcrd.c, zcsdevn.c, zcsindex.c, zcspixel.c, +zcssepr.c, zdevice.c, zdevice2.c, zdict.c, zdosio.c, zdouble.c, zdpnext.c, +zdps.c, zdps1.c, zfbcp.c, zfcmap.c, zfdctd.c, zfdcte.c, zfdecode.c, zfile.c, +zfileio.c, zfilter.c, zfilter2.c, zfilterx.c, zfont.c, zfont0.c, zfont1.c, +zfont2.c, zfont32.c, zfont42.c, zfproc.c, zfreuse.c, zfunc.c, zfzlib.c, +zgeneric.c, zgstate.c, zhsb.c, zht.c, zht1.c, zht2.c, zimage.c, zimage2.c, +zimage3.c, ziodev.c, ziodev2.c, zmath.c, zmatrix.c, zmedia2.c, zmisc.c, +zmisc1.c, zmisc2.c, zmisc3.c, zpacked.c, zpaint.c, zpath.c, zpath1.c, +zpcolor.c, zrelbit.c, zrop.c, zshade.c, zstack.c, zstring.c, zsysvm.c, +ztoken.c, ztrap.c, ztype.c, zupath.c, zusparam.c, zvmem.c, zvmem2.c) + +Changes caching for the interpreter's CIE color spaces so that instead of +changing the color space installation procedure to one that schedules the +sampling of the procedures though a back door, it leaves the installation +procedure alone and schedules the sampling in the color-space-specific +setcolorspace operator. This is needed for interpreter reentrancy. +(icie.h, zcie.c, zcrd.c) + +Makes the linkage from the dictionary machinery to the cached values in the +dictionary stack and the name table explicit, by adding a dstack pointer to +all the relevant dict_* procedures. This is needed for interpreter +reentrancy. (iddstack.h, idict.h, idstack.h, idict.c) + +Updates clients for the change in the dictionary API. For each changed +dict_ procedure, we add an idict_ procedure that uses i_ctx_p->dict_stack as +the additional argument. (iddict.h, icontext.c, iinit.c, interp.c, +iparam.c, iscanbin.c, zdps.c, zfcmap.c, zdict.c, zfont.c, zfont0.c, +zgeneric.c, zht2.c, zmisc2.c) + +Changes Pattern color remapping so that it saves information in the +interpreter's part of the graphics state, rather than manipulating the +e-stack directly. This is needed for interpreter reentrancy. (errors.h, +icremap.h, igstate.h, interp.c, zgstate.c, zpcolor.c) + +Adds to the "main instance" structure a pointer to the currently executing +context. This is needed for interpreter reentrancy. (imain.h, iminst.h, +main.h, imain.c, imainarg.c) + +Changes the argument list for operator initialization procedures from void +to i_ctx_t *. (opdef.h, ireclaim.c, zbfont.c, zbseq.c, zcontext.c, zfile.c, +zfont.c, zpcolor.c) + +Changes the initialization of the interpreter's allocators so it doesn't +presume the allocator structure is global. (ialloc.h, ialloc.c, imain.c) + +Factors out the structure definition of the stacks, which is needed for +defining the state of a context, from the API, which is only needed by +actual clients. (icstate.h, idsdata.h, idstack.h, iesdata.h, iestack.h, +iosdata.h, iostack.h, isdata.h, istack.h) + +Changes filter error reporting so that the report_error procedure doesn't +need access to the interpreter. (interp.h, interp.c, zfile.c, zfileio.c) + +Completes the implementation of DeviceN color spaces at the interpreter +level. (lib/gs_res.ps, lib/gs_lev2.ps, lib/gs_ll3.ps, icsmap.h, zcsdevn.c, +zcsindex.c, zcssepr.c, zimage.c) + +Speeds up color mapping for identity transfer, BG, or UCR functions. +(zcolor.c) + +</pre><h3><a name="5.80_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - The L range for Lab color spaces was wrong. (lib/pdf_draw.ps) + - Images in Lab color spaces came out all black. (lib/pdf_draw.ps) + +Improves the font substitution mechanism slightly. (lib/pdf_font.ps) + +</pre><h3><a name="5.80_Streams"></a>Streams</h3><pre> + +Adds an error string to the stream state structure, which stream +implementations can set when returning an error. The motivation is to allow +the PostScript interpreter to put this into $error.errorinfo. (scommon.h, +stream.c) + +</pre><h3><a name="5.80_Library"></a>Library</h3><pre> + +Fixes problems: + - The S_ISCHR fix in 5.73 had a typo. (stat_.h) + - The garbage collector traced dash pattern pointers even if the +pattern had no elements. (gzline.h, gsistate.c) + - Always tracing the clip_path element of gx_device_clist for +garbage collection could cause crashes, because this pointer could be stale. +However, we have to trace this pointer if an image is being processed. +(gxclist.c) + - A close-brace was positioned incorrectly. (No effect on the +working of the code.) (gximage3.c) + - Some macros caused some compilers to complain about functions that +didn't return values. (gsmemlok.c) + - A procedure vector wasn't declared const. (gsmemlok.c) + - Some needed headers weren't included. (gscrdp.c) + - A const pointer was being treated as non-const. (gxcpath.c) + - The algorithm for choosing halftone cell dimensions required an +unreasonably close angle tolerance (0.01 degrees, rather than 1% of a +90-degree possible difference). (gshtscr.c) + +Speeds up arcs a little more. (gspath1.c) + +Removes some unnecessary #includes. (gxclpath.h, gxcpath.h, gzcpath.h, +gxccman.c, gxclip.c, gxcpath.c, gxi12bit.c, gxicolor.c, gxifast.c, +gximono.c, gxiscale.c, gxpcmap.c) + +Cleans up some formatting. (gxpath.c) + +Re-enables image interpolation for images that have at least 8 bits of input +data per pixel. This is still a compromise.... (gxiscale.c) + +Enhances the default implementation of parameter lists so that a C parameter +list can forward unrecognized param_read calls to another parameter list. +This allows constructing incrementally modified parameter lists for internal +purposes. (gsparam.h, gscparam.c) + +Changes the first argument of the Type 1 charstring interpreter push_value +(which is renamed push_values) and pop_value callbacks from the font pointer +to an arbitrary pointer passed in to the interpreter. This is needed for +PostScript interpreter reentrancy. (gstype1.h, gxfont1.h, gxtype1.h, +gstype1.c, gxtype1.c) + +Adds an allocator wrapper that calls a closure to attempt to free up memory +if an allocation fails. This is used for asynchronous operation (waiting +for the page queue to empty) and operation with an optional disk for the +band list. (gsmemret.h, gsmemret.c) + +Adds the retrying wrapper to the malloc allocator. (gsmalloc.c) + +Makes "async" printer devices use the retrying wrapper. (gdevprna.c) + +Makes clist_fill_parallelogram recognize rectangles. This makes a big +difference for images rotated 90 degrees. (gsrect.h, gdevddrw.c, +gxclpath.c) + +Arranges to construct the list of image classes (formerly called strategies) +statically rather than dynamically. (lib.mak, gscdefs.h, gxiclass.h, +gximage.h, gconf.c, gxi12bit.c, gxicolor.c, gxifast.c, gximono.c, +gxipixel.c, gxiscale.c) + +Implements Indexed color spaces for high-level image banding. (gxclist.h, +gxclpath.h, gxclimag.c, gxclrast.c) + +Arranges to construct the blank bitmap for colored patterns statically +rather than dynamically. (gsbitmap.h, gxbitmap.h, gxcht.c) + +Changes FORCE_STRIP_HALFTONES from a #define to a static Boolean. +(gshtscr.c) + +Implements alternate-space DeviceN color spaces. (gscspace.h, gxcdevn.h, +gscdevn.c) + +Implements DeviceN color spaces for images. (gximage.h, gsimage.c, +gxi12bit.c, gxicolor.c, gxidata.c, gximage3.c, gximono.c, gxipixel.c) + +Speeds up color mapping a bit. (gxfmap.h, gsdevice.c, gsstate.c, +gxclbits.c, gxclrast.c, gxcmap.c) + +</pre> + +<hr> + +<h2><a name="Version5.73"></a>Version 5.73 (tester) (3/19/99)</h2> + +<p> +This fileset fixes a few bugs and adds a couple of minor performance +improvements. Its purpose is to fix a fairly serious memory management bug +and a Microsoft-platform compilation problem, both introduced in 5.72. + +<h3><a name="5.73_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Library) + - Removes the restriction on device registration that was introduced +in 5.72. + - gx_[c]path_scale_exp2 are replaced by gx_[c]path_scale_exp2_shared. + +</pre><h3><a name="5.73_Documentation"></a>Documentation</h3><pre> + +Identifies GNU readline support as user-contributed, and adds the author's +name. (int.mak, unix-gcc.mak, gp_gnrdl.c) + +Notes that an edit is required for GNU readline for AIX. (doc/Make.htm) + +Changes the bug reporting e-mail address to bug-gs@aladdin.com. +(doc/Bug-form.htm, doc/New-user.htm, doc/Use.htm, imainarg.c) + +</pre><h3><a name="5.73_Procedures"></a>Procedures</h3><pre> + +Adds FEATURE_DEVS_EXTRA and DEVICE_DEVS_EXTRA, reserved for setting from the +command line. (gs.mak) + +</pre><h3><a name="5.73_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - A needed cast was missing. (gdevx.c) + +</pre><h3><a name="5.73_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - A needed cast was missing. (zfname.c) + - The CFF loader didn't handle empty subsections correctly. +(lib/gs_cff.ps) + - GNU readline gave an error, rather than expanding the input +buffer, when called in response to %lineedit. (files.h, zfileio.c, +ziodev.c) + - GNU readline wasn't always initialized, causing a crash when an +attempt was made to shut it down. (iminst.h, imain.c) + +Adds more tracing to the CFF loader. (lib/gs_cff.ps) + +Adds some deconstifying casts to compensate for broken headers in the GNU +readline package. (gp_gnrdl.c) + +</pre><h3><a name="5.73_Library"></a>Library</h3><pre> + +Fixes problems: + - The bounding box device didn't ignore filling paths consisting +only of a moveto. (gdevbbox.c) + - Some systems have S_IFCHR but not S_ISCHR. (stat_.h) + - The clipping list accumulator didn't merge single rectangles +correctly. (gxacpath.c) + - The clipping list accumulator wasn't aggressive enough about +merging rectangles. (Performance effect only.) (gxacpath.c) + - The page wasn't cleared when installing a new device. (bug +introduced in 5.72) (gsdevice.c) + - With graphics anti-aliasing enabled, executing clip or eoclip +followed by fill or stroke produced incorrect output. (bug introduced +between 5.10 and 5.50) (gxpath.h, gspaint.c, gxcpath.c, gxpath2.c) + - The garbage collector could crash if any banded devices were +active. (bug introduced in 5.72) (gdevprn.c) + +Changes memory management for device instances to allocate the structure +type objects dynamically. This gets rid of a static, and also gets rid of +the requirement that device prototypes be registered, at the expense of an +extra copy of the (small) structure type object per instance of certain +devices. (gscdefs.h, gxdevcli.h, gxdevice.h, gconf.c, gsdevice.c) + +Disables image interpolation for all high-resolution images, not just +black-and-white, since this produces better-looking output. (gxiscale.c) + +Speeds up path bounding box computation a little. (gxpath2.c) + +Speeds up clipping a little. (gxclip.c) + +Cleans up formatting a bit. (gxacpath.c) + +Adds support for libpng version 1.0.3, but (for now) updates only the +OpenVMS and Unix makefiles to use it. (libpng.mak, openvms.mak, +openvms.mmk, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak) + +Attempts to work around picky compilers that don't allow assigning T[M][N] +to const T[M][N]. (gxcht.c) + +</pre> + +<hr> + +<h2><a name="Version5.72"></a>Version 5.72 (tester) (3/17/99)</h2> + +<p> +This fileset finally gets rid of the need to have jpeg, libpng, or zlib +source code on Unix systems that already have these libraries available. It +also starts to add support for general DeviceN color spaces. + +<p> +Works in progress: +<ul> +<li> - Fix Fontmap -> Fontmap.GS link, which VMS can't handle. +<li> - Make x11alpha do real alpha blending. +<li> - spdiff.c is unfinished, partly wrong. +<li> - DeviceN support is in progress. In gxcht.c, +set_ht_colors_le_4 +and set_color_ht_gt_4 don't have any way to color-map >4 planes. +</ul> + +<h3><a name="5.72_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Interpreter) + - The str argument of arg_push_memory_string is no longer const. + - The last argument of print_reloc is now const. + +(Library) + - Clients should never call the device open_device or close_device +procedure directly: they should call gs_opendevice or gs_closedevice. + - The fn_free_functions procedure has been made private. + - The first argument of gs_currentpoint is no longer const. + - References to header files in the third-party libraries must now +include a trailing _, i.e.: jerror_.h jmorecf_.h jpeglib_.h png_.h zconf_.h + - IJG JPEG library versions before v5a are no longer supported. + - ilog2 replaces small_exact_log2. + - Support for "outside" clipping has been removed. + - Clients that define their own devices now must either register +them in the makefile (using the SET[P]DEV[2] macros) or set the stype +pointer in the static prototype to the correct structure type (or at least a +structure type with the correct procedures). + +</pre><h3><a name="5.72_Documentation"></a>Documentation</h3><pre> + +Clarifies the fact that clients should never call the device open_device or +close_device procedure directly. (doc/Drivers.htm) + +Updates contact information for Artifex Software. (doc/Commprod.htm, +doc/New-user.htm) + +Clarifies the fact that Aladdin did not write gdevcdj.c. (gdevcdj.c) + +Documents the new -TTYPAUSE switch. (doc/Use.htm) + +Adds SCO OpenServer 5.0.5 to the list of systems where Ghostscript is known +to build. (doc/Make.htm) + +Notes that the MIPSpro 7.2.1.3m compiler produces incorrect output. +(doc/Make.htm) + +</pre><h3><a name="5.72_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The Unix install directory ($(gsdatadir)) and the Unix default +search path ($(gsdatadir)/lib) weren't compatible. (bug introduced since +5.50) (unixinst.mak) + - The compilation rule for echogs omitted a dependency and also +failed to specify a directory for header files. (unix-aux.mak) + - Third-party library source code was required even if the +corresponding SHARE_xxx option was set to 1. (devs.mak, gs.mak, int.mak, +lib.mak, jpeg.mak) + +Adds a -dTTYPAUSE switch to cause .confirm to read from /dev/tty instead of +stdin, useful when the data input is a pipe. (lib/gs_init.ps) + +</pre><h3><a name="5.72_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - Some preprocessor macros were defined twice on VMS. (echogs.c) + - traceop.ps didn't build operator-tracing procedures in global VM. +(This didn't matter before we introduced local pseudo-operators.) +(lib/traceop.ps) + - geninit produced invalid output or hung if the input files didn't +have the correct EOL representation for the platform. (geninit.c) + +Updates a (probably otherwise obsolete) file for the deletion of the private +JPEG library error message table. (bughunt.sh) + +</pre><h3><a name="5.72_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - A procedure returning void tried to return a value. (gdevtfax.c) + - For 24-bit displays, XGetImage can return an image in which +bits_per_pixel is 32 rather than 24, which is not at all obvious from the +documentation; also, the bit and byte ordering may not be MSBFirst. +(gdevx.c) + - XFree takes a char *, not a void *. (gdevx.c) + - The fix in 5.71 to adjust the width of TIFF images introduced +another bug. (gdevtfax.c) + - If the X driver used a standard colormap, pixel values 255 and +less didn't map back to RGB properly. (bug introduced in 5.71) (gdevxcmp.c) + - The ForceMono addition to gdevbit.c (in 5.71) was incorrect. +(gdevbit.c) + - There was a const mismatch in an extern. (gdevxalt.c) + - Third-party library source code was required even if the +corresponding SHARE_xxx option was set to 1. Fixing this required +referencing all third-party library header files through *_.h files. +(gdevjpeg.c, gdevpdfi.c, gdevpng.c, gdevpsdi.c, gdevpsdp.c) + - There was no way to cause the bounding box device to give up its +reference to the target. (gdevbbox.h, gdevbbox.c) + - pdfwrite crashed if given a 12-bit-per-sample CMYK image when +ConvertCMYKImagesToRGB was true, and produced invalid output for other +12-bit-per-sample images (PDF limits bits-per-sample to 8). (gdevpsdi.c) + - pdfwrite mangled planar images if bits-per-sample was other than +8. (bug introduced since 5.50) (gdevpdfi.c) + +Changes some code to reduce compiler warnings about casts discarding const. +(gdevxalt.c) + +Removes a test that allowed referencing the statically allocated instance of +the alternative X drivers. (gdevxalt.c) + +Changes a reference to small_exact_log2. (gdevsvga.c) + +Greatly improves the PDF writer's handling of simple pattern fills, by +retaining them as pattern fills. (gdevpdfx.h, gdevpdf.c, gdevpdfi.c) + +</pre><h3><a name="5.72_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - Cn in a font name wasn't recognized as indicating a condensed +font. (lib/gs_fonts.ps) + +</pre><h3><a name="5.72_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Third-party library source code was required even if the +corresponding SHARE_xxx option was set to 1. Fixing this required +referencing all third-party library header files through *_.h files. +(zfdctd.c, zfdcte.c) + - An /undefined error occurred on floating point numbers whose +integer part exceeded the size of a long (normally 31 bits) and that also +included a fraction. (iscannum.c) + - ialloc.c included gxarith.h unnecessarily. (ialloc.c) + +When opening a terminal for reading, always sets the buffer size to 1. This +does not apply to %stdin, %lineedit, or %statementedit. (zfile.c) + +Changes code to use the new deconstifying freeing procedures, to remove +deconstifying casts. (gsargs.h, ialloc.h, gsargs.c, zfname.c, zfunc.c) + +Adds a writable packed ref pointer variant to ref.value, to remove compiler +warnings about casts discarding const. (igc.h, iref.h, idict.c, igc.c, +igcref.c) + +Changes the help printouts to use the new printf_program_ident procedure. +(imainarg.c) + +Generalizes clients to handle color spaces that may have more than 4 +components. (zcsdevn.c, zcsindex.c, zcssepr.c, zdpnext.c, zfdecode.c) + +Removes support for outside clipping, which we implemented only because we +misinterpreted a requirement. (zpath.c) + +</pre><h3><a name="5.72_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Selecting a colored Pattern color space caused an error. +(lib/pdf_draw.ps, lib/pdf_ops.ps) + - Reading data from a subfile with no filter caused an error. +(lib/pdf_base.ps) + +Allows mask images to omit BitsPerComponent: Acrobat Reader accepts this +even though the PDF specification requires it to be present (with value = +1). (lib/pdf_draw.ps) + +</pre><h3><a name="5.72_Streams"></a>Streams</h3><pre> + +Fixes problems: + - The PixelDifference filters didn't propagate leftover bits in the +last byte of a row. (bug probably introduced in 5.60) (spdiff.c) + - The 1- and 2-bit-per-pixel PixelDifferenceEncode filters were +broken. (spdiff.c) + +Changes code slightly to remove a warning about an uninitialized variable. +(spdiff.c) + +Extends the PixelDifference filters to handle more than 4 Colors. +s_PDiff_max_Colors is the maximum value. (spdiffx.h, spdiff.c) + +Adds a stream for converting 12-bit samples to 8-bit. (gdevpsds.h, +gdevpsds.c) + +Gets rid of the no longer needed private copy of the JPEG error message +table. (sdcte.c, sdeparam.c, sjpegerr.c [deleted], sjpegc.c) + +</pre><h3><a name="5.72_Library"></a>Library</h3><pre> + +Fixes problems: + - If a 1-bit-per-pixel image terminated early, the last few scan +lines might not be written out. (gxidata.c) + - The bbox device could leave its target in a half-open state, +because it called the open/close_device procedures directly rather than +going through gs_open/closedevice. We "fixed" this by making this device +forward open and close, but conditionally, so that clients can choose. +(gdevbbox.c) + - Third-party library source code was required even if the +corresponding SHARE_xxx option was set to 1. Fixing this required +referencing all third-party library header files through *_.h files. +(sdcparam.c, sdctc.c, sdctd.c, sddparam.c, sjpegc.c, sjpegd.c, sjpege.c, +sjpegerr.c) + - Low-memory recovery in the band list writer sometimes didn't work, +because a test was backwards. (gxcldev.h, gxclist.c) + - Executing a put_params during band rasterizing didn't update +cached values in the imager state. This was probably not a problem in +practice, since the only parameters that affect cached values (device color +space, depth, and color mapping) were very rarely set. (gxclrast.c) + - Converting 12-bit planar images to chunky format could store +beyond the end of the output area and corrupt memory. (gsflip.h, gsflip.c) + - The algorithms for converting 4-plane, 1- and 2-bit planar images +to chunky format were wrong. (gsflip.c) + - Images that lay entirely outside the page could cause a memory +access error. (gxclimag.c) + - The bbox device could return excessively conservative values for +stroked paths. (gxpaint.h, gdevbbox.c, gxpaint.c, gxstroke.c) + - Banding devices now include some pointers that the garbage +collector must trace. (gdevprn.h, gxclist.h, gxdevice.h, gdevprn.c, +gsdevice.c, gxclist.c) + +Adds a gs_opendevice procedure to mirror gs_closedevice. (gsdevice.h, +gsdevice.c) + +Adds deconstifying freeing procedures to the memory manager. This allows us +to have pointers as structure members that should be const * for all +ordinary clients, and still be able to free the referenced objects without a +compiler warning. (gsmemory.h, gsmemory.c) + +Changes code, often to use the new deconstifying freeing procedures, to +remove deconstifying casts. (gspath.h, gxfunc.h, gsfunc.c, gsfunc0.c, +gsfunc3.c, gspath.c, gsptype1.c) + +Changes the eprintf macros so they print the version as well as the program +name. (std.h, gscdef.c, gsmisc.c) + +Adds procedures that update cached values in graphics or imager states after +setting device parameters. Clients should use these when setting parameters +of devices that may be current in graphics or imager states. Note that this +is only a partial solution for a much deeper problem, and may even have to +be replaced at some point. (gsdevice.h, gsdevice.c) + +Defines GS_CLIENT_COLOR_MAX_COMPONENTS (in gsccolor.h), +GX_DEVICE_COLOR_MAX_COMPONENTS (in gxcindex.h), and GS_IMAGE_MAX_COMPONENTS, +and starts to use them where needed, in anticipation of implementing DeviceN +color spaces. (gsccolor.h, gsdcolor.h, gsiparam.h, gsiparm4.h, gxcindex.h, +gxctable.h, gximage.h, gxshade.h, gdevplnx.c, gscdevn.c, gscolor2.c, +gxcht.c, gxclimag.c, gxcmap.c, gxicolor.c, gxctable.c, gxi12bit.c) + +Replaces small_exact_log2 by a procedure ilog2 that computes floor(log2(n)). +(gxarith.h, gsmisc.c, gspaint.c, gxccman.c, gxclimag.c, gxclrect.c) + +Upgrades gsflip.c to handle >4 planes. (gsbitops.h, gsflip.h, gsflip.c) + +Speeds up getting and testing memory device prototypes a little. (gdevmem.c) + +Speeds up adding arcs to a path a little. (gspath1.c) + +Increases the precision of a precomputed constant from float to double. +(gxpath.h) + +Adds a new band list operation to make circles smaller and faster. +(gxclpath.h, gxclpath.c, gxclrast.c) + +Adds an accessor procedure for the start point of the current subpath. +(gxpath.h, gxpath2.c) + +Removes support for outside clipping, which we implemented only because we +misinterpreted a requirement. (gspath.h, gxcldev.h, gxcpath.h, gxpath.h, +gspath.c, gxacpath.c, gxclip.c, gxclpath.c, gxclrast.c, gxcpath.c) + +Changes gs_copydevice to require that static prototypes either be registered +in gx_device_list or have a correct stype pointer. (This is already the +case for all devices in code we distribute.) (gsdevice.c) + +Adds ENUM_PTRS_PROC and RELOC_PTRS_PROC macros for giving a name to the +typed pointer to the object being processed. (gsstruct.h) + +</pre> + +<hr> + +<h2><a name="Version5.71"></a>Version 5.71 (tester) (3/3/99)</h2> + +<p> +This fileset reinstates support for TrueColor X displays, and adds optional +support for GNU readline. It also includes a little more work on the new +driver text API. + +<h3><a name="5.71_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Library) + - The *line_accum* macros are now capitalized; declare_line_accum is +renamed DECLARE_LINE_ACCUM_COPY, and DECLARE_LINE_ACCUM is new. + +</pre><h3><a name="5.71_Documentation"></a>Documentation</h3><pre> + +Documents the CIE joint cache invariant more accurately. (gscie.h) + +Adds a request for xdpyinfo/xwininfo output to the problem reporting form. +(doc/Bug-form.htm) + +</pre><h3><a name="5.71_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The default search path was missing the lib subdirectory on many +platforms. (dvx-gcc.mak, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak, +unixtrad.mak, watc.mak, watclib.mak, watcw32.mak) + - The dependency list for the X Windows drivers was incorrect, +sometimes causing needed recompilation to be omitted. (devs.mak) + +</pre><h3><a name="5.71_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - The representation of maximum unsigned values produced warnings on +some compilers (specifically, gcc with -Wtraditional). (genarch.c) + - Some string variables weren't declared const. (echogs.c, +genarch.c) + - The viewpbm utility was broken for pgm and ppm (but not pbm). +(bug introduced in 5.66) (lib/viewpbm.ps) + +</pre><h3><a name="5.71_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The X driver didn't handle TrueColor displays properly. +(gdevxcmp.h, gdevxcmp.c) + - The alternative X drivers didn't implement get_bits properly. +(gdevxalt.c) + - The X driver specified the byte order incorrectly for displays +with more than 8 bits per pixel. (gdevx.c) + - The X driver used the wrong number of bits for comparing colors on +visuals with fixed color maps. (gdevxcmp.h, gdevxcmp.c) + - Some symbols were multiply defined with -DNOPRIVATE. (gdevbit.c) + - If a file specified a paper size, rather than using the default, +the G3/G4 fax output drivers didn't adjust the width to a legal one for fax +systems. (gdevtfax.c) + +Segregates the resource lists, for which warnings about casting of const to +non-const string types should be suppressed, into a separate file. +(devs.mak, gdevx.h, gdevxini.c, gdevxres.c) + +Splits off the code related to color mapping for X Windows, for greater +understandability. (devs.mak, gdevx.h, gdevxcmp.h, gdevx.c, gdevxcmp.c, +gdevxini.c) + +Changes code slightly to remove warnings about signed/unsigned integer +constants. (gdevxalt.c) + +Changes code to remove unused variables. (gdevx.c, gdevxalt.c) + +Adds a user-contributed driver for the H-P LaserJet 4D. (devs.mak, +gdevdjet.c) + +Makes the bitcmyk driver reset its map_cmyk_color procedure dynamically +according to the depth, allowing more efficient execution in the 1- and +8-bit cases. (gdevbit.c) + +Adds a settable option, AdjustWidth, to control whether the fax-format +drivers (faxg*, tiffcrle, tiffg*) adjust the page width to legal fax values. +Its default value is 1 (do adjust). (devs.mak, gdevtfax.c) + +Adds a ForceMono parameter to the bitcmyk/bitrgb devices to implement a +special monochrome-in-CMYK mode requested by a customer. (gdevbit.c) + +Removes the TRIM_ and EXPAND_BITS_TO_BYTES options from the bit devices, +since they are no longer needed. (gdevbit.c) + +</pre><h3><a name="5.71_Fonts"></a>Fonts</h3><pre> + +Changes the substitution mechanism for condensed / narrow fonts, so that the +PDF interpreter can use it. (lib/gs_fonts.ps) + +</pre><h3><a name="5.71_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The bind operator generated unaligned accesses and might not +operate reliably. (bug introduced in 5.70) (zmisc.c) + - If the BuildChar procedure of a font included an image or +imagemask operator, charpath would (incorrectly) display the character. +(zimage.c) + +Adds a bogus return statement to suppress a compiler warning. (gs.c) + +Changes code slightly to remove warnings about signed/unsigned integer +constants. (store.h, ibnum.c) + +Changes the build date format to %d-%02d-%02d. (lib/gs_init.ps, imainarg.c) + +Rearranges some code to add readline support. (files.h, imain.c, zfileio.c, +ziodev.c) + +Adds support for GNU readline, with several completion keys, contributed by +a user. (int.mak, gs_rdlin.ps, gp_gnrdl.c) + +Changes the font substitution machinery slightly so the PDF interpreter can +use it. (lib/gs_fonts.ps) + +</pre><h3><a name="5.71_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - In-line images caused a syntaxerror or stackunderflow. +(lib/pdf_draw.ps) + - The font substitution mechanism didn't detect Condensed fonts. +(lib/pdf_font.ps) + - The font substitution mechanism didn't use the intelligent +algorithm used for PostScript files. (lib/pdf_font.ps) + +Prints a message when substituting for a font on the basis of its +descriptor. (lib/pdf_font.ps) + +</pre><h3><a name="5.71_Streams"></a>Streams</h3><pre> + +Adds an interface and default implementation for readline. (srdline.h, +stream.h, stream.c) + +</pre><h3><a name="5.71_Library"></a>Library</h3><pre> + +Fixes problems: + - A void procedure attempted to return a value. (stream.c) + - A pointer was declared with an extra *. (gsmemory.c) + - An argument would be stringified with traditional C. (gdevdbit.c) + - The check for validity of the CIE joint caches was wrong, leading +to incorrect output in some obscure cases. (gsciemap.c) + - A tiny rounding inaccuracy could cause an occasional blank line +when rendering adjacent images. (gxipixel.c) + - Some symbols were multiply defined with -DNOPRIVATE. (gsptype2.h) + - If a character was too large to be cached, it didn't use +anti-aliasing, even if TextAlphaBits was >1. (gspaint.c) + +Changes code slightly to remove warnings about signed/unsigned integer +constants. (gsccode.h, gsmisc.c, gxcht.c) + +Changes code to remove a warning about an unhandled case in a switch. +(gsstruct.h, gsmemory.c) + +Changes code to remove unused variables. (gxcindex.h, gdevdbit.c, +gdevprn.c, gxiscale.c) + +Restructures the header files for the new text API, adding the SINGLE +options in text_params, enough new elements in text_enum to store all the +arguments of text_begin, and new elements in text_enum to hold results +returned by text_process. This code is no longer "subject to [arbitrary] +change without notice", although it is still not very stable. (gstext.h, +gxtext.h, gstext.c) + +Changes code to remove warnings about uninitialized variables. (gxipixel.c) + +Changes the syntactic form of some constants yet again to suppress a +different set of compiler warnings. (gxsample.c) + +Adds a procedure to fix the charpath-in-BuildChar problem. (gsimage.h, +gsimage.c, gsptype1.c) + +Speeds up the handling of certain RasterOp cases for CMYK devices. +(gxdevice.h, gxdevmem.h, gdevdrop.c, gdevmem.c, gdevmr8n.c, gdevrops.c) + +Adds a platform-specific interface for reading lines from stdin. This is +intended primarily to support GNU readline. (lib.mak, gp.h, gp_strdl.c) + +</pre> + +<hr> + +<h2><a name="Version5.70"></a>Version 5.70 (internal) (2/20/99)</h2> + +<p> +This fileset includes substantial changes to the interpreter in support of +making it fully reentrant (eliminating writable globals). + +<h3><a name="5.70_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Interpreter) + - The ref_stack structure has been renamed ref_stack_t, and has been +changed substantially. Clients should now access all of its members, other +than the pointers to the current block, through the macros or procedures +defined in istack.h. The STACK_LOOP_{BEGIN,END} macros have been removed. + - The argument of context_state_load is no longer const. + - Each file's table of operator definitions is now limited to 16 +entries. op_def_table[] no longer exists: use op_index_def() instead. + - invalid_file_entry now has an associated VM space, +avm_invalid_file_entry, that must be used in constructing invalid file refs. + - restore will now undo binding of pseudo-operators. Attempting to +bind a local pseudo-operator into a global procedure will cause an +invalidaccess error. + +</pre><h3><a name="5.70_Documentation"></a>Documentation</h3><pre> + +Updates the driver documentation a bit. It probably still includes a lot of +out-of-date text. (doc/Drivers.htm) + +Improves the problem reporting form to make it absolutely clear that test +data are required, and that the problem must be reproducible without using a +viewer. (doc/Bug-form.htm) + +Documents the -dDOINTERPOLATE switch. (doc/Use.htm) + +Documents the difference between public and tester releases, in connection +with making tester releases available to everyone. (doc/New-user.htm) + +Updates the list of history files. (doc/Readme.htm) + +Adds a questionnaire for people who want to be notified of new test +releases. (doc/Readme.htm, doc/Tester.htm) + +</pre><h3><a name="5.70_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - A ! was missing before an include. (bcwin32.mak, msvc32.mak) + - A trailing \ in some macro definitions was quoted incorrectly. +(bcwin32.mak, msvc32.mak) + - An editing error prevented a makefile from working. (bcwin32.mak) + - The 16-bit spooler executable didn't reference its icon correctly. +(gs16spl.rc) + - The Watcom makefiles had gotten badly out of date. (watc.mak, +watclib.mak, wccommon.mak) + - Some DEVICE_DEVS lines were too long for the shell to handle. +(openvms.mmk) + - A space was missing before a colon. (openvms.mmk) + +Updates MSVC support to handle version 6. (msvc32.mak) + +Extends genconf to handle function types as well as image types, and changes +the output for image types. (genconf.c) + +Desupports the use of CONFIG for selecting between multiple configurations, +since parameterized output directories do this better. (bcwin32.mak, +dvx-gcc.mak, gs.mak, int.mak, lib.mak, msvc32.mak, msvclib.mak, openvms.mak, +openvms.mmk, os2.mak, ugcclib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, +watc.mak, watclib.mak, watcw32.mak) + +Adds a -dDOINTERPOLATE switch to force Interpolate in all images. +(lib/gs_init.ps) + +</pre><h3><a name="5.70_Utilities"></a>Utilities</h3><pre> + +Rewrites viewpcx to eliminate dependence on a special filter. +(lib/viewpcx.ps) + +</pre><h3><a name="5.70_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The [e]pswrite and pdfwrite drivers wrote out clipping paths using +the winding number rule even if the path had been set with eoclip. +(gdevpdfd.c, gdevvec.c) + - Some occurrences of ushort should have been gx_color_value. +(gdevpbm.c) + - A comment was accidentally left outside comment quotes. +(gdev3852.c) + - There was a char/byte mismatch not covered by a cast. +(gdevdcrd.c) + - There were still some references to the 'huge' keyword, which has +been superseded by FAR. (gdevwdib.c) + - Some obsolete references to which_colors hadn't been removed. +(gdevwdib.c) + - The [e]pswrite driver produced incorrect output for a curveto or +closepath followed by a lineto and then a moveto. (gdevps.c) + - The [e]pswrite driver could produce incorrect output for paths +ending with a lineto. (gdevps.c) + - The name paper_sizes was used both by a driver and by other code, +causing a problem when building with -dNOPRIVATE. (gdevclj.c) + +Consolidates the X error handling statics into a structure. (gdevxini.c) + +Updates the pdfwrite driver to reflect the addition of state to the +ASCII85Encode filter. (gdevpsdf.c) + +Adds a user-contributed driver for the Lexmark 5700 printer (black-and-white +only). (contrib.mak, gdevlxm.c) + +Updates the mswinpr2 driver with a new, user-contributed one that includes +interaction with the user. (gdevwpr2.c) + +</pre><h3><a name="5.70_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - When TrueType support was present, the FONTPATH scanner didn't +recognize TrueType fonts whose 'type' was "true" rather than the documented +<00 01 00 00>. (lib/gs_ttf.ps) + - When DEBUG was set, loading a TrueType font could cause an +/undefined error. (lib/gs_ttf.ps) + +</pre><h3><a name="5.70_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Local (pseudo-)operators could get bound into global procedures +with 'bind', causing dangling references. Attempting this now causes an +invalidaccess error. Fixing this also required making restore undo binding +of pseudo-operators. (zmisc.c) + - A harmless dictfull error occurring during language level +switching caused an error. (zmisc2.c) + - If given a closed input file, flushfile caused an error, rather +than doing nothing. (zfileio.c) + +Renames the ref_stack structure as ref_stack_t, and factors it so that the +parts set only at initialization are separated from the dynamic parts, in +support of moving the stacks from static to dynamic storage. (icstate.h, +idebug.h, idstack.h, iestack.h, iostack.h, iparam.h, iparray.h, istack.h, +idebug.c, interp.c, iparam.c, istack.c, zcontext.c, zpacked.c, zvmem.c) + +Moves the dynamic part of the stacks in-line in the context structure; gets +rid of the statically allocated stacks. (dstack.h, estack.h, icontext.h, +icstate.h, idstack.h, iestack.h, interp.h, iostack.h, ostack.h, icontext.c, +iinit.c, interp.c, zcontext.c) + +Packages the dictionary lookup statistics in a structure, like the other +statistics. (idict.c) + +Changes from dynamic to static initialization of the function type table. +(int.mak, ifunc.h, iconf.c, zfunc.c, zfunc0.c, zfunc3.c) + +Removes the PCXDecode filter. (zfilterx.c) + +Removes more writable statics. (int.mak, btoken.h, files.h, icstate.h, +igstate.h, ipacked.h, iscan.h, icontext.c, imain.c, iscan.c, iscanbin.c, +zbseq.c, zcolor2.c, zcontext.c, zgstate.c, ziodev.c, zmath.c, zpcolor.c, +zpacked.c) + +Changes the representation of the operator table to avoid allocating a +dynamic copy. This introduces a limit of 16 entries per definition set. +(int.mak, opdef.h, iconf.c, idebug.c, iinit.c, interp.c, iutil.c, +zcontext.c, zcontrol.c, zdict.c, zfileio.c, zgstate.c, ztype.c) + +Includes the ASCII85Decode filter in all configurations, for simplicity. +(iscan.c, zfdecode.c) + +Makes the invalid file reference point to a static object. (files.h, +icontext.c, zfile.c, ziodev.c) + +Changes all dictfull error returns from the dictionary code to use +return_error. This should have been done a long time ago! (idict.c) + +Increases the predefined size of systemdict a little more because .upp files +may define a lot of new entries. (iinit.c) + +Adds a few more interpreter statistics. (interp.c) + +</pre><h3><a name="5.70_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Images never closed the data stream, placing a heavy load on the +garbage collector to clean up streams and stream states. (lib/pdf_draw.ps) + - Streams stored on external files didn't work. (lib/pdf_base.ps) + +Reorganizes code slightly to allocate less memory for in-line images. +(lib/pdf_draw.ps) + +Speeds up some common operations a little. (lib/pdf_base.ps) + +</pre><h3><a name="5.70_Streams"></a>Streams</h3><pre> + +Removes the PCXDecode filter. (spcxx.h [deleted], spcxd.c [deleted]) + +Changes the name of a variable for greater clarity. (stream.c) + +Splits off the ASCII85Decode filter into a separate file, since it turns out +to be convenient to include it in all configurations. (sa85d.h, sa85x.h, +sa85d.c, sfilter2.c) + +Makes an initialization entry point available for non-heap-allocated +streams. (stream.h, stream.c) + +Changes the ASCII85Encode filter so it always produces lines of at most 80 +characters, not counting the EOD marker. THIS IS A NON-BACKWARD-COMPATIBLE +CHANGE, because this filter now needs a state structure, which it didn't +before. (sa85x.h, sfilter2.c) + +</pre><h3><a name="5.70_Library"></a>Library</h3><pre> + +Fixes problems: + - Reference counting of graphics state elements was wrong when +creating multiple contexts, causing memory corruption. (bug probably +introduced in 5.68) (gsstate.c) + - If CIE joint caches were created because the reference count of +the existing caches was >1, the new caches weren't initialized correctly. +(bug introduced in 5.60, found by Ray Johnston.) (gscie.c) + - If Margins are set so that part of the default clipping region +lies outside the ((0,0),(width,height)) device coordinate space, the fast +case of images could cause a memory access error. (gxifast.c) + - In the case of a halftone with more bits than levels, +gx_check_tile_cache could incorrectly return false, causing images to render +more slowly than they should. (gzht.h, gxht.c) + - There was a const mismatch between an argument and the formal +parameter. (gdevprn.h, gdevprn.c, gxclread.c) + - An error in the definition of st_imager_state_num_ptrs caused the +garbage collector to omit marking one pointer in imager states, possibly +causing memory corruption. (gxistate.h) + - The bbox device, used with no target, didn't properly handle +images where more data was provided than needed. (gdevbbox.c) + +Removes any pretense of supporting multiple threads in a single-threaded +environment. Dummy synchronization primitives, however, are still provided. +(gp_nsync.c) + +Removes more writable statics. (gximage.h, gxi12bit.c, gxino12b.c, +gxipixel.c) + +Changes the handling of image types, and adds similar handling for function +types. (gscdefs.h, gconf.c) + +Consolidates the gs_std* files into a structure. (gsio.h, gsmisc.c) + +Speeds up the fastest (common) case of clipping fill_rectangle and copy_mono +operations. We could do the same for the other operations if we wanted. +(gxclip.c) + +Identifies this fileset as a tester release. (gscdef.c) + +</pre> + +<hr> + +<h2><a name="Version5.69"></a>Version 5.69 (internal) (2/4/99)</h2> + +<p> +This incremental fileset fixes minor compilation problems, as well as many +problems with driver-based CRDs (not used by PostScript or PDF). + +<h3><a name="5.69_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The OpenVMS makefile had not been updated properly to reflect the +division of files into subdirectories. (openvms.mak) + - A space was missing before a :. (devs.mak) + - The MMK makefile had not been updated to reflect the renaming of +the psm[raw] devices to pksm[raw]. (openvms.mmk) + +Changes the default name of the build directory for the library test program +from debugobj to libobj, so that one can work with both library and +interpreter builds without interference. (ugcclib.mak) + +Adds -fno-builtin to the gcc switches, to detect failure to declare +functions like memcpy, at a small cost in performance. (ugcclib.mak, +unix-gcc.mak) + +</pre><h3><a name="5.69_Utilities"></a>Utilities</h3><pre> + +Makes a couple of minor fixes to ansi2knr, suggested by users. (ansi2knr.c) + +Updates ps2ai.ps with an improved version from its author. (lib/ps2ai.ps) + +</pre><h3><a name="5.69_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The 32-bit CMYK "async" BMP driver was declared incorrectly as a +non-async device. (gdevbmpa.c) + - Some #includes were missing, because gcc didn't warn about +failures to declare certain standard functions. (x_.h, gdevdcrd.c, gdevx.c) + - The PC frame buffer device still referred to _ss and near. +(gdevpcfb.c) + - The [e]pswrite driver didn't handle bitmaps with a non-zero X bit +offset correctly. (gdevps.c) + - The pdfwrite driver wrote all clipping paths with the winding +number rule, even if they were established by eoclip. (gdevpdfd.c) + - "Vector" drivers wrote all clipping paths with the winding number +rule, even if they were established by eoclip. (gdevvec.c) + +Adds the CRDName parameter to the sample driver-based CRD. (gdevdcrd.c) + +Tweaks the sample driver-based CRD to make it a more realistic (closer to +the PostScript default). (gdevdcrd.c) + +Adds the sample driver-based CRD to the modified X drivers. (devs.mak, +gdevxalt.c) + +</pre><h3><a name="5.69_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Some #includes were missing, because gcc didn't warn about +failures to declare certain standard functions. (zchar1.c) + - Driver CRDs were not supported properly. (zcrd.c, lib/gs_lev2.ps) + +Changes some code because non-int switch expressions are not handled +correctly in pre-ANSI C. (igcref.c, zdevice.c) + +Adds the ability to set the orientation of zero-length "dots". (zgstate.c) + +Adds comments on an alternative shallow-binding design. (dstack.h) + +Changes the threshold for repeatedly rescanning change lists so that it is +based on the cumulative amount of rescanning and not the amount in a single +pass. (isave.c) + +</pre><h3><a name="5.69_Streams"></a>Streams</h3><pre> + +Changes some code because non-int switch expressions are not handled +correctly in pre-ANSI C. (sfilter1.c) + +</pre><h3><a name="5.69_Library"></a>Library</h3><pre> + +Fixes problems: + - Some casts to (gx_device *) were missing. (gschar.c) + - Some #includes were missing, because gcc doesn't warn about +failures to declare certain standard functions. (gdevdgbr.c, gscie.c, +gsmatrix.c, gxshade1.c) + - gxclread.c now needs gdevprn.h to declare certain procedures. We +tried very hard to make the command list machinery not depend on anything +related to printer devices, but at this point we have not succeeded. +(gxclread.c) + - For CRDs set by library clients, the is_identity flags in the +caches were set incorrectly, producing incorrect output. (gscie.h, gscie.c, +gscrd.c, gscrdp.c) + - For CRDs set by library clients, the EncodeABC and RenderTable T +procedures were sampled incorrectly. (gsciemap.c, gscrd.c) + - The interpreter tried to sample the TransformPQR functions in the +PostScript CRD even for driver CRDs. (gscie.h, gscie.c) + - Library assistance was needed for the interpreter to support +driver CRDs properly. (gscrdp.h, gscrdp.c) + - The procedures that accessed cached CIE values didn't round the +index, so accessing already-cached values could wipe out the cache. +(gscie.c) + - The procedure that accessed cached RenderTable.T values simply +wasn't implemented. (gscrd.c) + +Adds an "if (1)" to a macro to suppress "statement not reached" warnings +from stupid compilers. (gsmemlok.c) + +Changes the syntactic form of some constant tables to suppress +signed/unsigned warning messages. (gsbitops.c, gxsample.c) + +Changes some switch statements to if/else because non-int switch expressions +are not handled correctly in pre-ANSI C. (gdevmr8n.c, gxdcolor.c) + +Adds the ability to set the orientation of zero-length "dots". (gsline.h, +gxline.h, gsline.c, gsstate.c, gxstroke.c) + +Adds an allocator state variable to support the change in the rescanning +algorithm. (gxalloc.h) + +</pre> + +<hr> + +<h2><a name="Version5.68"></a>Version 5.68 (internal) (1/29/99)</h2> + +<p> +This fileset implements PatternType 2 (gradient fill) Patterns. All +significant PostScript LanguageLevel 3 features are now implemented, except +for DeviceN color spaces. We have also verified that the MMK script for +OpenVMS also works with MMS. + +<p> +Note that there are significant non-backward compatible changes to memory +management for device instances: we are sorry about this, but just as with +paths in 5.22, we had to fix this design problem at some point. + +<h3><a name="5.68_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Procedures) + - A new makefile, unix-aux.mak, must be included in all Unix +top-level makefiles. (It is included in the ones we distribute.) +unixtail.mak is renamed unixlink.mak. + +(Library) + - The names of the anti-aliasing parameters in the device color_info +structure have been changed. + - Dummy definitions for PC-specific C keywords (_cs, _ds, _ss, near, +far, huge) are no longer provided: these keywords should be removed from +non-PC-specific code. + - The names of the alignment_mod, ptr_le, ptr_lt, ptr_ge, ptr_gt, +and ptr_between macros have been changed to upper case (ALIGNMENT_MOD etc.) + - gs_make_null_device now takes an additional argument. + - The ccolor member of a gx_device_color is no longer inside a +substructure. + - Clients now must initialize Pattern templates with +gs_patternN_init, where N is the PatternType (normally 1), before filling in +the members. + - gs_pattern_instance_common_t is renamed gs_pattern_instance_t; +gs_pattern_instance is renamed gs_pattern1_instance. + - To set the target of a forwarding device, you must now use +gx_device_set_target rather than setting the target member directly. + - Memory management for devices has changed substantially, and in a +subtle way. If you have code that calls the library, please read the +documentation in gxdevcli.h. + - Callers of the driver create_buf_device procedure must always call +it through gdev_create_buf_device, never directly. + - For composite and CID-keyed fonts, the character code returned by +gs_show_current_char and gs_kshow_previous_char is now the full multi-byte +character code rather than just the last byte of the code. + - gdev_cmap_set_method has been replaced by a device parameter, +ColorMappingMethod. + - The CRD pointer parameter for param_write_cie_render1 and +param_put_cie_render1 is no longer const. + +</pre><h3><a name="5.68_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The documentation for resize_object and resize_string didn't allow +the new size to be the same as the old size, didn't describe what data was +preserved, and didn't guarantee to return the same object if the new size +was the same as the old size. (gsmemraw.h, gsmemory.h) + - The documentation for the value returned by the internal +.getmetrics32 operator was incorrect. (zchar32.c) + - The documentation for the special color mapping device didn't say +that the caller had to call gs_setdevice_no_init to update graphics states. +(gdevcmap.h) + +Notes that OPENVMS.MMK works with both MMK and MMS. (doc/Make.htm) + +Adds a note to the C style guide about nested vs. multi-branch 'if' +statements. (doc/C-style.htm) + +Notes that the multi-threaded ("async") drivers require libc version 6 or +higher under GNU/Linux. (doc/Make.htm) + +Notes additional Irix/MIPSpro combinations that compile idict.c incorrectly, +and gives a workaround. (doc/Make.htm) + +Adds a couple more acknowledgements. (doc/Helpers.htm) + +Documents the new -Z^ switch. (doc/Use.htm) + +Documents the new rules about memory management for device instances +(gxdevcli.h, gxdevice.h) + +</pre><h3><a name="5.68_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The "async" BMP devices were accidentally included in the default +list for Unix, leading to a requirement for the POSIX thread package, which +is not available on all systems. (unix-gcc.mak) + - There was a minor typo in the new MMK script. (openvms.mmk) + - The MMK script redefines macros, which MMS does not allow. +(openvms.mmk) + - The gcc version test used gcc rather than $(CC) for the compiler +name. (unix-gcc.mak) + - There was a minor typo in the pcx2up device makefile entry. +(devs.mak) + - Some commands in the Unix install rules referenced sh rather than +$(SHELL). (unixinst.mak) + +Makes (dummy) in-RIP trapping an optional feature, and removes it from the +default configuration. (int.mak, lib.mak) + +Splits off the build rules for the Unix auxiliary programs, so they can be +shared between interpreter and library configurations. (ugcclib.mak, +unix-aux.mak, unix-gcc.mak, unixansi.mak, unixtail.mak [deleted], +unixlink.mak, unixtrad.mak) + +Adds the bitcmyk device to the list of devices for the library test program. +(ugcclib.mak) + +</pre><h3><a name="5.68_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - ansi2knr didn't handle occurrences of '/' or quoted strings inside +an argument list correctly. (ansi2knr.c) + +At the suggestion of a GNU person, makes ansi2knr check for output errors. +(ansi2knr.c) + +</pre><h3><a name="5.68_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - Setting the resolution on the SPARCprinter didn't work. +(gdevsppr.c) + - Even in PDF 1.1 compatibility mode, the PDF writer used a +predictor to compress images. (gdevpsdi.c) + - Reference counting for devices was not implemented consistently. +(gdevxalt.c) + - gcc (again) missed some static / non-static inconsistencies. +(gdevbmpa.c, gdevifno.c) + +Removes all remaining uses of segment identifiers (_cs, _ds, _ss) from +non-PC-specific code. (gdev3852.c, gdevcdj.c, gdevhl7x.c, gdevl256.c, +gdevmgr.c, gdevsgi.c, gdevsppr.c, gdevvglb.c) + +Removes all remaining uses of the 'near' keyword from non-PC-specific code. +(gdevcd8.c, gdevcdj.c, gdevcgm.c) + +Changes uses of round_up to ROUND_UP. (gdevmsxf.c, gdevpcx.c, gdevpx.c, +gdevxxf.c) + +Adds user-contributed support for 16-bit displays to the MS Windows driver. +(gdevmswn.c, gdevwdib.c) + +Adds a user-contributed driver (sunhmono) for the Harlequin variant of 1-bit +Sun raster files. We expect to add other varieties of Sun Raster file +eventually as well. (contrib.mak, gdevsunr.c) + +Adds a user-contributed driver (fs600) for the Kyocera FS-600 laser printer. +(devs.mak, gdevdjet.c) + +Replaces the sample device CRD with a slightly hacked version of the default +PostScript CRD, and moves it to a separate file for greater flexibility in +testing. (gdevdcrd.h, gdevbit.c, gdevdcrd.c) + +Adds standard and "async" 32-bit CMYK BMP drivers (even though this is +outside the published BMP format). (gdevbmp.c, gdevbmpa.c) + +Changes the names of the separated-CMYK PBM drivers from psm to pksm, to be +more descriptive. (devs.mak, openvms.mak, unix-gcc.mak, gdevpbm.c) + +</pre><h3><a name="5.68_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - On MS Windows and OS/2, "(%stdin) (r) file bytesavailable" caused +a crash. (gp_msio.c, gp_os2.c) + +</pre><h3><a name="5.68_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - TrueType fonts with fewer glyph names in post than entries in loca +caused an error. (gs_ttf.ps) + +Adds additional tracing to the TrueType font loader. (lib/gs_ttf.ps) + +Per Adobe, adds the Euro symbol under the name /Euro (capitalized) to +various built-in Encodings. (lib/gs_mro_e.ps, lib/gs_pdf_e.ps, +lib/gs_sym_e.ps, lib/gs_wan_e.ps) + +</pre><h3><a name="5.68_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - An extraneous file got left in the fileset. (lib/pdf_main.ps.sav +[deleted]) + - The number of required arguments for .pathbbox was incorrectly +specified as 0 rather than 1. (zpath1.c) + - Opening a ReusableStreamDecode filter with a string source and no +decoding filters left an extra value on the stack. (lib/gs_ll3.ps) + - Type 32 fonts sometimes didn't display the characters, or +displayed them offset. (lib/gs_typ32.ps) + - In LanguageLevel 3, copypage still called EndPage with 1 rather +than 0. (lib/gs_init.ps) + - The HalftoneName parameter was missing from the trapping parameter +set. (lib/gs_ll3.ps) + - CMap character entries were processed in the wrong order. +(lib/gs_cmap.ps) + - CMap'ed non-CID fonts didn't work properly, because they called +BuildChar with the original character code rather than BuildGlyph with the +mapped glyph. (zchar.c) + - Using an out-of-range CID value with a CIDFont caused an error +rather than substituting a notdef. (lib/gs_cidfn.ps) + - CIDFontType 0 fonts with a GlyphDirectory didn't fall back to the +indexed character data if the CID wasn't in the GlyphDirectory. +(lib/gs_cidfn.ps) + - CIDFontType 0 fonts didn't substitute a notdef at all. +(lib/gs_cidfn.ps) + +Changes uses of round_up to ROUND_UP. (igcstr.c) + +Updates clients for the object-oriented changes to Patterns. (zcolor2.c, +zpcolor.c) + +Implements the rest of PatternType 2. (ipcolor.h, zpcolor.c, zshade.c) + +Makes in-RIP trapping an optional feature. (lib/gs_ll3.ps, lib/gs_trap.ps) + +Updates clients for the change in gs_show_current_char. (zcfont.c, zchar.c) + +Changes the dict_*_param macros to procedures, for easier tracing. This +includes a change in the return value of dict_matrix3_param. (icie.h, +zcie.c, zcrd.c) + +</pre><h3><a name="5.68_Streams"></a>Streams</h3><pre> + +Changes uses of round_up to ROUND_UP. (scfd.c, scfe.c) + +</pre><h3><a name="5.68_Library"></a>Library</h3><pre> + +Fixes problems: + - Once again, gcc failed to flag a static procedure declaration +followed by a non-static definition. (gdevprna.c, gximage3.c) + - Anti-aliasing no longer worked for the x11alpha device. To fix +this, we factored out the anti-aliasing information in the +gx_device_color_info structure. (bug introduced in 5.65) (gxdevcli.h, +gdevabuf.c, gdevdflt.c, gdevxalt.c, gsdparam.c) + - An empty declaration generated an extraneous semicolon. +(gxclip2.h) + - Some macros that generated an if-else construct didn't enclose it +in BEGIN/END, possibly leading to incorrect parsing. (gxobj.h) + - A comment was missing a closing */. (gxpageq.h) + - The handling of the phase in Pattern filling was broken again. We +probably broke it with the "fix" introduced in 5.24. (gxp1fill.c) + - Looking up an undefined IODevice name caused a memory access +error. (bug claimed to be fixed in 5.24) (gsiodev.c) + - The null device installed for stringwidth didn't copy the color +mapping information from its target, causing confusion if the current device +was a pattern accumulator. (gxdevcli.h, gxdevice.h, gschar.c, gsdevice.c, +gxpcmap.c) + - mem_mapped2_copy_mono produced incorrect results for byte-aligned +rectangles exactly 1 byte wide (fix from John D.), and could also access +data 1 byte beyond the end of each source row. (gdevm2.c) + - In the case of a masked image or a RasterOp involving a Pattern, +the garbage collector could fail to follow a pointer, possibly causing +memory corruption. (gsdcolor.h) + - Assigning a double value to a float variable caused an infinite +recursion. (gxshade1.c) + - Failure to detect when the region being filled had become very +small caused excessive recursion. (gxshade4.c) + - The default implementations of resize_object didn't always return +the old object if the old and new sizes were the same. (gsalloc.c, +gsmalloc.c) + - The left side bearing of TrueType characters was sometimes +calculated incorrectly. (gstype42.c) + - The TrueType renderer disregarded the left side bearing values. +We aren't sure that the change we made is right, but it seems to produce +better output. (gstype42.c) + - Shadings used the first Decode entry for both X and Y values. +(gxshade.c) + - Function-based Shadings sometimes omitted part of their output. +(gxshade1.c) + - Function-based Shadings didn't access 4-bit-per-sample data +correctly. (gsfunc0.c) + - The malloc/free-based allocator didn't finalize objects when +freeing them. (gsmalloc.c) + - Reference counting for device instances was not implemented even +close to consistently. THIS IS THE BUG TAIL WE WORRIED ABOUT IN 5.24. +(gxdevcli.h, gxdevice.h, gdevbbox.c, gdevcmap.c, gdevmem.c, gdevnfwd.c, +gdevplnx.c, gdevprn.c, gdevrops.c, gsalphac.c, gschar.c, gsdevice.c, +gsropc.c, gxidata.c, gxmclip.c, gxipixel.c, gxpcmap.c) + - Some device structure definitions failed to include finalization. +(gdevmrop.h, gsstruct.h, gxclip2.h, gxcpath.h, gxdevmem.h, gxmclip.h) + - Reference counting for the device halftone wasn't correct in the +band rasterizer. This must be a recently introduced bug, because otherwise +banding couldn't have worked. (gxclrast.c) + - When banding, high-level images that extended off the page in the +Y direction caused memory access errors. (gxclimag.c) + - [a]widthshow didn't use the correct value for comparison for +composite fonts with FMapType 9 (CMap). (gxchar.h, gschar.c, gschar0.c, +gsfcmap.c) + - The special color mapping device only worked for +device_cmap_monochrome. (gdevcmap.h, gdevcmap.c) + - The definition of gs_memory_locked_release was wrong. +(gsmemlok.h, gsmemlok.c) + - An opaque structure definition (for gx_device) was missing, +creating a need for an otherwise unnecessary #include. (gscrdp.h) + - Certain cached values weren't computed when needed. Fixing this +required removing 'const' from a parameter type. (gscrdp.h, gscrdp.c) + - gxclmem.c #included "gsmalloc.h", which is no longer needed. +(gxclmem.c) + - Memory management for device halftones was incorrect, leading to +objects being freed twice or other memory corruption during band rendering. +(gzht.h, gsht.c, gsstate.c, gxclrast.c, gxistate.c) + - Setting a driver-originated CRD didn't invalidate cached +information, leading to incorrect output. (gscrdp.c) + - A consistency check on driver-originated CRDs was incorrect, +causing valid CRDs to be rejected. (gscrdp.c) + +Removes dummy definitions for old PC-specific language extensions. +(stdpre.h) + +Removes uses of the PC-specific 'huge' keyword. (gdevmem.c) + +Removes uses of the PC-specific 'near' keyword. (gdevabuf.c, gdevbbox.c) + +Changes the pointer comparison macros to upper-case names. (gxalloc.h, +stdpre.h, gsalloc.c, gsmisc.c) + +Changes the alignment_mod macro to upper case. (stdpre.h, gdevdbit.c, +gdevdgbr.c, gsparams.c, gxifast.c) + +Changes the round_up and round_down macros to upper case. We retain the +lower-case definitions for the sake of the PCL code. (gxfcache.h, gxobj.h, +stdpre.h, gdevalph.c, gdevmem.c, gsalloc.c, gspath1.c, gxccman.c, +gxclimag.c, gxifast.c) + +Makes Pattern colors more object-oriented, to support PatternType 2, +splitting gsptype1.c off from gspcolor.c in the process. (gsccolor.h, +gsdcolor.h, gspcolor.h, gsptype1.h, gsptype2.h, gxcolor2.h, gxpcolor.h, +gspcolor.c, gsptype1.c, gxpcmap.c) + +Implements PatternType 2. (gspcolor.h, gsptype1.h, gsptype2.h, gxcolor2.h, +gxpcolor.h, gxshade.h, gspcolor.c, gsptype2.c) + +Changes the interface to shaded filling to make filling rectangles more +efficient. (gsshade.h, gscolor3.c, gsshade.c) + +Improves some macros that didn't handle expressions as arguments. +(gsrect.h) + +Improves tracing of loading the CIE caches. (gscie.c) + +Cleans up some formatting, and replaces some floating point divides with +multiplies. (gstype42.c) + +Adds default values for the MaxSeparations (1), Separations (false), and +SeparationColorNames (empty array) device parameters. (gsdparam.c) + +Adds -Z^ to trace reference counting. (gsrefct.h, gsmemory.c) + +Changes the definition of finalization so that finalization procedures *can* +assume that objects they reference still exist. This is necessary so that +forwarding devices can decrement the reference counts of their targets. +Fortunately, all invocations of finalization (in 'restore', the garbage +collector, and freeing) already have this property. (gsstruct.h) + +Extends CRD initialization so that cached values may be copied from an +existing CRD. (gscrd.h, gscrd.c) + +Adds a wrapper to the driver create_buf_device procedure to increment the +reference count, so that buffer devices can be freely used in graphics +states and as a target. (gxdevcli.h, gdevprn.c, gxclread.c) + +Removes recursion from the shading rendering code, in preparation for making +it interruptible (required for DeviceN color mapping callouts). +(gxshade4.h, gxshade1.c, gxshade4.c, gxshade6.c) + +Monitor-locks the default allocator based on the C heap, if multi-threading +is being supported at all. (lib.mak, gsmalloc.h, gsmalloc.c) + +Speeds up the implementation of mem_true32_copy_mono for the common case. +(gdevm32.c) + +Adds a (disabled) option for defining gx_color_index as a pointer or a +structure, for testing. (gxcindex.h) + +Makes the library test program test the special color mapper more +thoroughly. (gslib.c) + +</pre> + +<hr> + +<h2><a name="Version5.67"></a>Version 5.67 (internal) (1/8/99)</h2> + +<p> +This fileset adds more PostScript LanguageLevel 3 capability: +<ul> +<li> - Complete implementation of shfill. +<li> - Most of the expanded CMap capabilities. +<li> - ReusableStreamDecode filter. +<li> - FontType 2 for CFFs (formerly done in an incompatible way). +<li> - HalftoneMode user parameter. +<li> - HalftoneTypes 6, 10, and 16. +<li> - ImageType 3 images. +<li> - UseCIEColor device parameter. +</ul> + +<p> +It also adds a build script for MMK (which may also work with MMS) under +OpenVMS, and Uli Wortmann's drivers for the H-P color inkjet printers. +Among other bug fixes, it eliminates about half the "possibly uninitialized +variable" compiler warnings. + +<h3><a name="5.67_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Library) + - The default UCR and BG functions are now f(k) = k rather than f(k) += 0. + - The set_[d]fmul2fixed_vars macros have been removed from +gxfixed.h. Clients must use the new CHECK/FINISH_[D]FMUL2FIXED_VARS macros. +(We don't think there are any such clients outside Ghostscript itself.) + - The internal procedure gx_cpath_intersect_slow is replaced with +gx_cpath_intersect_path_slow, with different arguments. + - gs_color_space_type_Device{Gray,RGB,CMYK} are now private. +Clients should use the gs_cspace_Device{Gray,RGB,CMYK} access procedures in +gscspace.h to obtain device color space objects. + - FontType 2 was renamed from ft_CFF to ft_encrypted2. + - FontType 2 fonts now have FontType = ft_encrypted2, rather than +ft_encrypted with CharstringType = 2. CharstringType no longer exists. + - Type 1 / Type 2 fonts now have an additional member, interpret, +that must be initialized. + - gdev_prn_render_lines and gdev_prn_get_band_buffer replace +gdev_prn_locate_overlay_buffer and gdev_prn_get_overlay_bits. "Async" +drivers must now use the new procedures to implement partial-page rendering +recovery. + - Clients that pass ImageType 3 images where the mask and the image +are not scaled identically, or that call image_plane_data without knowing +the image type, must now call gs_image_planes_wanted or +gx_image_planes_wanted in order to find out which subset of the data planes +to pass to the next call of image_plane_data. + - gx_image_enum_common_init now takes slightly different arguments. + - gs_imager_state_initialize now initializes the entire imager +state, including halftone, dev_ht, and ht_cache. + - The argument lists for the plane_data and end_image procedures in +image enumerators have changed. + +</pre><h3><a name="5.67_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The 5.66 News mentioned the non-existent WAITFILE macro, and had +another minor typo. (doc/News.htm) + - The URL for the user-contributed H-P 850c driver was incorrect. +(doc/Devices.htm, contrib.mak) + - The documentation for the driver image API had gotten out of date. +(doc/Drivers.htm) + +Greatly improves documentation for the page queue. (from Artifex 5.50c) +(gxpageq.h) + +Documents the fact that Solaris builds now need -lposix4 for <semaphore.h>. +(doc/Make.htm) + +Adds a stack status comment in .pdfshow. (lib/gs_pdfwr.ps) + +Documents the new -Z` debugging switch. (doc/Use.htm) + +Touches up some formatting in the C style guide, and adds a mention of the +space-before-: rule for makefiles. (doc/C-style.htm) + +Adds documentation for the new H-P 8xx drivers. (doc/Devices.htm) + +Splits off news for versions 5.0 - 5.50 into a separate file. +(doc/History5.htm) + +</pre><h3><a name="5.67_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - On MS Windows platforms, the DLL object file wasn't created in the +proper directory. (from Artifex 5.55) (msvc32.mak) + - cfonts.mak didn't have no-op commands for rules that didn't +contain any commands. (cfonts.mak) + - The version number for libpng was different from libpng's own +version numbering system. (libpng.mak) + - Solaris builds now need -lposix4 for <semaphore.h>. +(unix-gcc.mak, unixansi.mak, unixtrad.mak) + - The makefiles redefined a number of macros, which MMS doesn't +allow. (bcwin32.mak, gs.mak, int.mak, lib.mak, libpng.mak, msvc32.mak, +openvms.mak, openvms.mmk, unix-gcc.mak, unixansi.mak, unixtrad.mak, +version.mak) + +Changes cp.bat and rm.bat to eliminate "File not found" messages. (from +Artifex 5.55) (cp.bat, rm.bat) + +Changes all platform-independent makefiles to add a space before the : that +separates the targets from the dependencies, to allow the makefiles to be +used with MMS/MMK. (cfonts.mak, contrib.mak, devs.mak, gs.mak, int.mak, +jpeg.mak, lib.mak, libpng.mak, zlib.mak) + +Adds a script for compiling Ghostscript on OpenVMS systems with MMK. This +has not been tested extensively. (doc/Make.htm, openvms.mmk) + +Changes the set of optimization switches for MSVC++. We believe the new +switches produce working executables, which /O2 didn't. (msvc32.mak, +msvccmd.mak) + +Updates the default expected libpng version to 1.0.2. (bcwin32.mak, +dvx-gcc.mak, msvc32.mak, msvclib.mak, openvms.mak, os2.mak, ugcclib.mak, +unix-gcc.mak, unixansi.mak, unixtrad.mak, watc.mak, watclib.mak, +watcw32.mak) + +</pre><h3><a name="5.67_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - Default scaling in viewcmyk.ps was broken. (lib/viewcmyk.ps) + +Updates pdf2dsc.ps with a newer (user-contributed) version that generates +DocumentMedia and PageMedia comments. (lib/pdf2dsc.ps) + +</pre><h3><a name="5.67_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - An int * was provided where a uint * was required. (gdevpbm.c) + - ps2ps -dLanguageLevel=1 generated invalid output. (gdevps.c) + - The X drivers crashed on gray-scale displays. (bug probably +introduced in 5.61) (gdevx.c) + - The width and height of the cljet5 device were interchanged. +(from Artifex) (gdevclj.c) + - The PDF writer didn't clip cached characters properly. (bug +introduced somewhere between 3.51 and 5.10) (gdevpdfi.c) + - For stroked paths with a non-uniform CTM, the PDF writer could +emit coordinates larger than 32K, which Acrobat handles incorrectly. +(gdevpdfd.c) + +Restructures some code to suppress bogus "possibly uninitialized variable" +warnings. (gdevpdfm.c, gdevps.c) + +Adds some unnecessary initializations to suppress bogus "possibly +uninitialized variable" warnings. (gdevpbm.c, gdevpdfd.c, gdevvec.c, +gdevxalt.c) + +Rewrites the (contributed) X11 xfont code to remove code duplication. +(gdevx.h, gdevx.c, gdevxini.c, gdevxxf.c) + +Adds a user-contributed driver for the H-P LaserJet 3100 with H-P software. +(gdevmeds.h, gdevl31s.c, gdevmeds.c) + +Adds a user-contributed option for 600 dpi output on H-P DesignJet +650C-compatible printers. (gdevcdj.c) + +Removes unnecessary references to device color spaces. (gdevpdfi.c) + +Changes the [e]pswrite and pdfwrite drivers to use EndOfBlock rather than +Rows for CCITTFax image encoding, producing slightly smaller output. +(gdevpsdf.c) + +Changes the sample async driver to use gdev_prn_render_lines and +gdev_prn_get_band_buffer instead of locate_overlay_buffer and +get_overlay_bits. Unfortunately, because "async" memory management is +broken, we have no way to test the code. (gdevbmpa.c) + +Updates clients for the change in gx_image_enum_common_init. (gdevpdfi.c, +gdevvec.c) + +Adds Uli Wortmann's drivers for the H-P color inkjet printers. +(contrib.mak, gdevcd8.c) + +Adds mode 9 compression to the PCL printer utilities. (gdevpcl.h, +gdevcdj.c, gdevpcl.c) + +Updates implementors for the change in the plane_data and image_end image +processing procedures. (gdevpdfi.c, gdevps.c, gdevpx.c) + +</pre><h3><a name="5.67_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - The PFM files for URW Grotesk and Antiqua had some extraneous ^M +characters inserted before ^J characters. (fonts/u003043t.pfm, +fonts/u004006t.pfm) + - CID-keyed fonts didn't handle GlyphDirectory correctly. +(lib/gs_cidfn.ps) + - CIDFontType 0 fonts with 0-length Subrs caused an error. +(lib/gs_cidfn.ps) + - Malformed TrueType fonts with overlapping tables (which are +nevertheless apparently acceptable to Windows) caused an error. +(lib/gs_ttf.ps) + - The Hershey font repairs documented in fileset 5.24 apparently +never happened: the makeher.ps program was fixed, but the derived fonts were +still broken. (fonts/h*.ps) + - In some Fontmaps, the /Charter-* font names were linked directly +to the Bitstream fonts, rather than being aliases for /CharterBT-*. +(lib/Fontmap.GS, lib/Fontmap.Sol, lib/Fontmap.Ult) + +Makes undefined fonts execute the SubstituteFont procedure in $error, per a +posting by Stephen Zisk of Adobe on pdf-prepress-l on 10/8/97. +(lib/gs_fonts.ps) + +Changes the interpreter-level CIE color space install procedures to reflect +the addition of const to the color space argument. (zcie.c) + +</pre><h3><a name="5.67_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The interpreter appeared to be a distiller even when the current +device was not pdfwrite. We fixed this by patching 'where' to make the +distiller operators visible iff the current device is pdfwrite. We also +moved the setcolor hack in 'where' into PostScript code. (lib/gs_init.ps, +lib/gs_lev2.ps, lib/gs_pdfwr.ps, zmisc2.c) + - The current color space for shfill wasn't identically the same +color space as the one in the shading. (gs_ll3.ps) + +Changes the default UCR and BG functions from f(k) = 0 to f(k) = k. +(lib/gs_init.ps) + +Adds some unnecessary initializations to suppress bogus "possibly +uninitialized variable" warnings. (igc.c, zcie.c) + +Restructures some code slightly to suppress a bogus "possibly uninitialized +variable" warning. (zdevice.c) + +Brings the CMap machinery up to LL3, by allowing a single CMap to reference +multiple fonts (usefont, usematrix, and array CIDSystemInfo). +(lib/gs_cmap.ps, zfcmap.c) + +Finishes implementing ReusableStreamDecode. The implementation is very +inefficient -- it reads the entire contents into a string -- but it passes +the Genoa FTS. (lib/gs_ll3.ps, lib/gs_res.ps, zfreuse.c) + +Changes CFFs with CharstringType = 2 to generate FontType 2 fonts, rather +than FontType 1 with CharstringType = 2, for compatibility with Adobe's LL3 +implementations. (lib/gs_cff.ps, lib/gs_type1.ps, lib/type1ops.ps, bfont.h, +ichar1.h, ifont.h, ifont1.h, zbfont.c, zchar1.c, zchar2.c, zcharx.c, +zfont.c, zfont1.c, zfont2.c) + +Adds the ability to create (with .bytestring) and do a few operations +(currently only length, put, putinterval) on byte arrays. This is needed +for implementing ReusableStringDecode filters with >64K bytes of data, and +for the LL3 halftone types. (zgeneric.c, zstring.c) + +Implements HalftoneMode, and HalftoneTypes 6, 10, and 16. To do this, we +introduce an internal HalftoneType 7. (lib/gs_dps2.ps, lib/gs_init.ps, +lib/gs_ll3.ps, lib/gs_res.ps, zht2.c) + +Finishes implementing ImageType 3 images. (zimage.c, zimage3.c) + +Adds the hooks in ColorSpace defineresource and undefineresource for +detecting definitions that interact with UseCIEColor. (gs_res.ps) + +Implements UseCIEColor at the interpreter level. (lib/gs_dps1.ps, +lib/gs_ll3.ps, zcolor1.c, zcolor2.c, zimage.c, zmisc3.c) + +Touches up some formatting. (igstate.h) + +</pre><h3><a name="5.67_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - A MediaBox with a non-zero llx or lly would produce incorrect +output. The way we fixed this doesn't exactly match Acrobat, but it +produces reasonable output. (based on a change from Artifex 5.55) +(lib/pdf_main.ps) + - Colored patterns didn't work properly. (lib/pdf_draw.ps) + - The resources in a Pattern dictionary weren't made available +during the execution of the PaintProc. (fix from Artifex) (lib/pdf_draw.ps) + +</pre><h3><a name="5.67_Streams"></a>Streams</h3><pre> + +Adds a flag to the ASCIIHexEncode filter to indicate whether or not to write +an EOD, required for Level 1 output from the pswrite device. (sstring.h, +sstring.c) + +Adds a close_at_eod flag to the stream state, for implementing reusable +streams; also cleans up some formatting. (stream.h, stream.c) + +</pre><h3><a name="5.67_Library"></a>Library</h3><pre> + +Fixes problems: + - Black-and-white images with Interpolate = true produced +undesirable artifacts if the image resolution was close to that of the +device. We now disable Interpolate in this case. (gxiscale.c) + - In "async" mode, get_hardware_params did an unnecessary flush and +reopen. (from Artifex 5.50c) (gdevprna.c) + - The computation of the minimum band height for the "async" reader +was incorrect. (from Artifex 5.50c) (gdevbmpa.c) + - The "fix" for reallocating async buffer memory in 5.50 was +incorrect. (from Artifex 5.55) (gdevprn.c) + - The "async" reader called clist_finish_page, which it shouldn't. +(from Artifex 5.50c) (gdevprn.c) + - The image enumeration procedures for ImageType 4 were unnecessary, +since the ImageType 1 code now handles ImageType 4 as well. (gximage4.c) + - The structure descriptor for tile clipping devices was +unnecessary, since these are the same as mask clipping devices. (gxclip2.h) + - There was a trailing comma in an enumeration list. (gsbitops.c) + - Some compilers didn't like initializing a uint with ~0. +(gdevm1.c) + - shfill unnecessarily saved, reset, and restored the graphics +state. (gscolor3.c) + - Radial shadings always extended the shading to radius = 0. +(gxshade1.c) + - An identifier exceeded VMS's limit of 31 characters. (gdevprn.h, +gdevprn.c) + - A header file didn't #include enough of its prerequisites. +(gxpcolor.h) + - Images with non-default ImageMatrix weren't written correctly in +the band list. (bug introduced in 5.60) (gximage1.c) + - Banded images that had to use the default implementation incurred +an extra level of procedure call for each block of data. (gxclimag.c) + - Images rotated by other than a multiple of 90 degrees produced +incorrect output, because pie->rect.p.y was updated after each block of +data, causing image_band_box to produce inconsistent results. (bug +introduced by async changes in 5.50) (gxclimag.c) + - The client_data pointer in client_order halftones wasn't traced +correctly, possibly causing memory corruption if this type of halftone was +used. (These are not currently used by the PostScript interpreter.) +(gsht.c, gsht1.c) + - ImageType 3 images didn't handle subrectangles. (Not a problem +for PostScript, which doesn't generate subrectangles, or for PCL, which +doesn't use them.) (gximage3.c) + - If a VMerror occurred when setting up an ImageType 3 image. an +attempt could be made to free an uninitialized pointer. (gximage3.c) + - ImageType 4 images with 1 to 8 bits per sample and Decode = [1 0] +didn't test transparency correctly. (bug introduced in 5.60) (gximage.h, +gxicolor.c, gximono.c, gxipixel.c) + - setgray, setrgbcolor, sethsbcolor, and setcmykcolor didn't use +gs_cspace_assign, causing code duplication. After this fix, we made the +device color space types private, since there are no longer any references +to them outside gscspace.c. (gxcspace.h, gscolor.c, gscolor1.c, gscspace.c) + - gs_cspace_assign was misspelled cs_cspace_assign. (gscspace.h) + - setgray didn't set the pattern pointer of the current color to 0, +possibly causing the GC to retain patterns it shouldn't. (gscolor.c) + - The dev_ht member of an imager (or graphics) state wasn't included +in the macro that enumerates reference-counted pointers. This probably had +no effect, since the macro isn't used. (gxistate.h) + - When the band rasterizer freed its imager state, the halftone and +device halftone structures weren't freed, possibly causing memory leakage. +(gsistate.c) + +Changes the default UCR and BG functions from f(k) = 0 to f(k) = k, per a +user's suggestion. We aren't sure which matches the Adobe implementations +on color devices. (gxdcconv.c) + +Conditionally removes some variables that are not needed on big-endian +systems. (gdevm1.c) + +Restructures some code to suppress bogus "possibly uninitialized variable" +warnings. (gxfixed.h, gdevddrw.c, gsmatrix.c, gsmisc.c, gxclimag.c) + +Adds a couple of unnecessary initializations to suppress bogus "possibly +uninitialized variable" warnings. (gsbitops.c) + +Implements BBox, Background, and Extend for shadings. (Background isn't +tested yet, because it only takes effect for pattern shading, which isn't +implemented yet.) (gsshade.h, gxacpath.h, gxistate.h, gxpath.h, gscolor3.c, +gsshade.c, gxacpath.c, gxacpath.c, gxcpath.c) + +Brings the CMap machinery up to LL3, by allowing a single CMap to reference +multiple fonts (usefont, usematrix, and array CIDSystemInfo). (gsfcmap.h, +gxfcmap.h, gsfcmap.c) + +Adds more tracing output to the band list reader. (gxclrast.c) + +Cleans up some formatting. (gstext.h, gxtext.h) + +Replaces FontType = 1, CharstringType = 2 with FontType = 2, to match the +Adobe implementations. (gxfont1.h, gxftype.h, gxtype1.h, gstype1.c, +gstype2.c, gxtype1.c) + +Adds new gs_bytestring and gs_const_bytestring structures that may reference +either string or (byte) object storage. (gsstruct.h, gstypes.h, gsmemory.c) + +Implements an additional halftone type (ht_type_threshold2) needed for +HalftoneTypes 6, 10, and 16. We don't extend gshtx.[hc] to deal with this +at this time, since the new type is only needed for the PostScript +interpreter. (gxht.h, gxhttype.h, gzht.h, gsht.c, gsht1.c, gshtscr.c) + +Adds a procedure for division mod M, possibly needed for halftones. +(gxarith.h, gsmisc.c) + +Adds a -Z` debugging switch to turn off high-level images in the band list. +(gxclimag.c) + +Implements gdev_prn_render_lines, as the lowest-level external API for +rendering lines in a banded device. This call replaces the "overlay" calls +for async rendering. (gdevprn.h, gdevprna.h, gxclist.h, gdevprn.c, +gxclread.c) + +Extends the image enumeration API so that the enumerator can indicate what +subset of the input planes it wants delivered on the next call to +image_plane_data. Currently this is only needed for ImageType 3. +(gsimage.h, gxdevcli.h, gxiparam.h, gdevddrw.c, gsimage.c, gximage.c, +gximage3.c) + +Extends the image enumeration structures to handle images that require a +different amount of data for plane N than Width * plane_depths[N]. This +requires a NON-BACKWARD-COMPATIBLE change to the argument list of the +gx_image_enum_common_init procedure. (gxiparam.h, gdevbbox.c, gsimage.c, +gxclimag.c, gximage.c, gximage2.c, gximage3.c, gxipixel.c) + +Updates the copyright date to 1999. (gscdef.c) + +Cleans up formatting, capitalizes macro names, etc. (gximage.h, gxsample.h, +gxipixel.c) + +Adds the UseCIEColor device parameter. (gxdevcli.h, gxdevice.h, gsdparam.c) + +Implements color space substitution (UseCIEColor). (gscolor2.h, gscspace.h, +gscssub.h, gxistate.h, gzstate.h, gscolor.c, gscolor1.c, gscolor2.c, +gscolor3.c, gscssub.c, gslib.c, gspcolor.c, gsstate.c) + +Changes the color space install procedure so that its color space argument +is const. Now all color space implementation procedures take a const +argument. (gscie.h, gxcspace.h, gscdevn.c, gscolor2.c, gscscie.c, +gscspace.c, gscsepr.c, gspcolor.c) + +Changes gs_setcolorspace so its color space argument is const. (gscolor2.h, +gscolor2.c) + +Splits imager state procedures out of gsstate.c, which was getting too +large. (gxistate.h, gsstate.c, gsistate.c) + +Changes gs_imager_state_initialize so it really initializes the whole imager +state. (gsistate.c, gxclrast.c) + +Removes the now-redundant first (device) argument from the plane_data and +end_image procedures in image enumerators. Implementors of these procedures +must now get the device from the enumerator structure. This is a +NON-BACKWARD-COMPATIBLE design cleanup that we have been putting off for +most of a year. Also adds an argument to plane_data so it can tell its +client how many rows of data was used: this is needed for the implementation +of ImageType 3. (gxdevcli.h, gxiparam.h, gdevbbox.c, gdevplnx.c, gsimage.c, +gxclimag.c, gxidata.c, gximage.c, gximage3.c) + +Changes CFFs with CharstringType = 2 to FontType 2 fonts, rather than +FontType 1 with CharstringType = 2, for compatibility with Adobe's LL3 +implementations. (gstype1.h) + +</pre> + +<hr> + +<h2><a name="Version5.66"></a>Version 5.66 (internal) (11/25/98)</h2> + +<p> +This fileset includes the ability to efficiently and conveniently obtain +planar rather than chunky raster output. It also fixes a large number of +minor compilation problems on non-ANSI compilers, and a small number of real +problems. It also implements the PostScript LanguageLevel 3 clipsave and +cliprestore operators. Unfortunately, because of fragility in third-party +code changes that we were forced to include in the base graphics library, +overlapped rasterizing ("async mode") fails: +<ul> +<li> - At 300 dpi, for 4-bit planar devices in the low-memory +("partial + page") condition, and always for 32-bit planar devices. + +<li> - At 600 dpi, for all devices other than monochrome. +</ul> + +<h3><a name="5.66_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Procedures) + - Every platform-specific makefile must now define _D_, the internal +separator for defining preprocessor macros. + - Every platform-specific makefile must now define PSLIBDIR, the +directory holding the PS initialization files at build time. (This need not +be the same as where these files are stored at run time.) + +(Library) + - New elements arch_float_mantissa_bits and +arch_double_mantissa_bits have been added to arch.h. Cross-build +environments that supply arch.h rather than generating it at build time must +add these elements. + - A new GB_SELECT_PLANES option has been added to the options mask +for the get_bits_rectangle driver procedure. Implementations of this +procedure must take this option into account (although they do not have to +implement it). + - The make_buffer_device printer device procedure has been replaced +with create_buf_device, setup_buf_device, and destroy_buf_device. All +clients and implementors of make_buffer_device must be changed, including +users of the clist_init_params macro. + - The gx_device_cmap_procs procedure has been replaced with +gx_get_cmap_procs, which also take an imager state as an argument. Callers +of gx_device_cmap_procs must be changed. + +</pre><h3><a name="5.66_Documentation"></a>Documentation</h3><pre> + +Updates Make.htm to clarify the standard directory structure. +(doc/Make.htm) + +Adds a note about DEC C vs. VAX C for remapping of exit codes. +(doc/Make.htm) + +Clarifies that the end_image procedure frees the enumerator. (gxiparam.h) + +</pre><h3><a name="5.66_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The genxxx utilities didn't compile properly on systems where the +C compiler doesn't automatically search for .h files in the directory of the +.c file. (unixtail.mak) + - Preprocessor definitions require special quoting with Watcom C. +Fixing this required adding a _D_ macro similar to II. This is a +NON-BACKWARD-COMPATIBLE change, since this definition is now required in +each platform-specific makefile. (dvx-head.mak, openvms.mak, os2.mak, +unixhead.mak, wccommon.mak, winlib.mak, zlib.mak) + - The VMS subdirectories didn't include the "." to make the +directory name relative. (openvms.mak) + - Some of the OpenVMS command files were omitted from the +distribution. (copy_one.com, rm_one.com, rm_all.com) + - MMK interprets a final - on a command line as a continuation +marker. (gs.mak) + - gsiparm4_h was used before being defined. (lib.mak) + - Compiled initialization code (COMPILE_INITS=1) was broken because +of the introduction of subdirectories. (bcwin32.mak, dvx-gcc.mak, +msvc32.mak, openvms.mak, os2.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak, +watc.mak, watcw32.mak, int.mak, geninit.c) + - Level 1 configurations would no longer build with the standard set +of drivers. (devs.mak) + - wmake interpreted "&" in a rule command line as calling for +background execution. (wccommon.mak) + +Makes the standard set of features the same on all platforms, namely, psl3 +(PostScript LanguageLevel 3) + pdf (PDF 1.2/1.3) + dpsnext (DPS with NeXT +extensions) + ttfont (ability to load TrueType fonts directly). Unix +platforms add pipe (recognition of %pipe% file names). (bcwin32.mak, +dvx-gcc.mak, msvc32.mak, openvms.mak, os2.mak, unix-gcc.mak, unixansi.mak, +unixtrad.mak, watc.mak, watcw32.mak) + +Adds minimal support for Windows 95/NT compiler versions. (wccommon.mak) + +Notes a set of switches that may work around the optimizer bug in MSVC++ +5.0. (msvccmd.mak) + +</pre><h3><a name="5.66_Utilities"></a>Utilities</h3><pre> + +Adds a switch to genconf to set the escape character, since wmake interprets +"&" in a rule command line as calling for background execution. (genconf.c) + +Makes echogs recognize -+ alone as equivalent to - alone, for the sake of +VMS systems, which interpret a final - as a line continuation marker. +(echogs.c) + +Adds a viewpsm procedure to viewpbm.ps, for reassembling plane-separated +files. (lib/viewpbm.ps) + +</pre><h3><a name="5.66_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - There were places where the code assumed that void * could be +coerced to byte *, which not all C compilers support. (gdevpdfx.h, +gdevpdfo.c) + - The name put_bytes was defined in two places, causing an error +when linking with NOPRIVATE=1. (gdevpx.c) + - The minimum space computation for high-level images and for the +scan line length for the sample async driver was slightly too small. +(gdevbmpa.c) + +Improves the tracing output from the psm driver. (gdevpbm.c) + +Rewrites some macros to eliminate "statement not reached" compiler warnings. +(gdevpx.c) + +Revises the (only) client for changes in the plane-extraction device API. +(gdevpbm.c) + +Adds plane-separated BMP drivers, primarily for testing but also as an +example. bmp[a]sep1 and bmp[a]sep8 produce 1- and 8-bit-per-pixel separated +CMYK. (gdevbmp.h, gdevbmp.c, gdevbmpa.c, gdevbmpc.c) + +</pre><h3><a name="5.66_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - The Watcom environment doesn't provide the st_blocks member of the +stat structure. (stat_.h) + - In its standard configuration, the Watcom environment doesn't +provide stdprn. (gp_iwatc.c) + - Newer versions of DEC C on OpenVMS don't require the remapping +of the exit codes. (stdpre.h) + +Revises the dummy implementation of semaphores, monitors, and threads in an +attempt to make async rendering (just barely) work for the non-overlay case. +Unfortunately, this turned out not to be feasible. (gp_nsync.c) + +</pre><h3><a name="5.66_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Certain DEC compilers assume that a pointer is aligned even if it +is cast to a pointer whose target type has weaker alignment; this produced +"unaligned access" errors in the interpreter. (interp.c) + - A necessary cast was omitted. (zcrd.c) + - Level 1 configurations would no longer run. (lib/gs_init.ps) + +Updates clients to set mask image fattening properly. (zimage.c, zimage2.c) + +Rewrites some macros to eliminate "statement not reached" compiler warnings. +(files.h, istruct.h) + +</pre><h3><a name="5.66_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - The test for whether to honor the Rotate key was backwards. (bug +probably introduced in 5.24) (lib/pdf_main.ps) + +Updates the code to handle improper PDF files in which the startxref and the +following file position appear on the same line rather than (as required by +the spec) two successive lines. (lib/pdf_main.ps) + +</pre><h3><a name="5.66_Streams"></a>Streams</h3><pre> + +Notes a bug in s_DCT_get_quantization_tables. (sdcparam.c) + +</pre><h3><a name="5.66_Library"></a>Library</h3><pre> + +Fixes problems: + - The algorithm for reducing 4-bit chunky to 1-bit separated colors +didn't handle the trailing pixels of a transfer correctly. (gdevplnx.c) + - Banding for RGB devices with multi-plane halftones was broken. +(bug introduced recently) (gxdcolor.c) + - Mask images were written in the band list with inverted polarity. +(bug introduced in 5.60) (gximage1.c) + - Mask images were always fattened. Fixing this required extending +the API, since gs_image_t_init_mask set adjust = true by default (a bad +decision) and we didn't want to change it. (gschar.h, gscpm.h, gsiparam.h, +gzstate.h, gschar.c, gximage1.c) + - The member names push and pop caused problems for compilers whose +preprocessors consider it an error to use a macro defined with arguments as +a name without arguments. (gxfont1.h, gstype1.c) + - Once again, gcc didn't detect some private/non-private mismatches. +(gdevplnx.c, gsalphac.c, gximage2.c, gximage4.c) + - & was used with an array (which gcc doesn't complain about). +(gxshade6.c) + - There were several uses of automatic aggregate initialization, +which not all C compilers support. (gdevprn.c, gdevps.c) + - There were places where the code assumed that void * could be +coerced to byte *, which not all C compilers support. (gdevprn.c) + - Some \ line continuation characters were used inappropriately +(in a macro argument list). (gxclimag.c) + - Some function prototypes didn't use the Pn macros. (gsalloc.c) + - A function definition not at the left margin confused ansi2knr. +(gsfont.c) + - A cast for the result of malloc, needed on systems where malloc +returns a char * rather than a void *, was missing. (gsmalloc.c) + - An occurrence of dev should be pdev. (I can't understand how we +missed this in 5.65.) (gdevprna.c) + - A value was missing from a list of initial structure values, +causing mismatches between subsequent values and the members they +initialized. (gcc treated this as a warning: it should have given an +error.) (gxband.h) + - When setting the tile phase during banding, the old value of the +tile phase was written out rather than the new one. (gxclutil.c) + - The definition of fixed_mult_quo wasn't consistent between systems +with FPU (where it took the floor, and might be slightly inaccurate) and +systems without FPU (where it truncated towards zero, and was accurate). +(gxfixed.h, genarch.c, gsmisc.c) + - Banding devices using multi-screen halftones didn't set the +halftone phase correctly. We have now "fixed" this problem at least 4 +times. (gxclrast.c) + - The name put_bytes was defined in two places, causing an error +when linking with NOPRIVATE=1. (gsparams.c) + - For [x][y]show, the pointers to the width arrays weren't +initialized, causing memory access errors when checking or garbage +collecting. (gschar.c) + - Due to a typo, bitmap characters were fattened too much. +(gximage1.c) + - Some identifiers exceeded VMS's limit of 31 characters. +(gdevprn.h, gscsepr.h, gsdevice.h, gxdevice.h, gdevdflt.c, gdevprn.c, +gscsepr.c, gsdparam.c) + - The device halftone parameter was declared const inappropriately +in some places. (gsdcolor.h, gxdither.h, gxdcolor.c, gxdither.c) + - gdev_mem_raster was used (misleadingly, even though it happened to +produce the correct result) on possibly non-memory devices. (gxclread.c) + - Pure Level 1 configurations had some undefined procedures. +(gscolor1.c, gscspace.c) + - Indexed color images could incorrectly conclude that they didn't +need to re-render halftones, producing incorrect output. (gximono.c) + - gs_device_is_memory returned false for non-banding printer +devices: this didn't used to matter, but it matters now. We changed it to +test the procedures rather than the device name. (gdevmem.c) + - The plane extraction device didn't handle halftoned colors +correctly. (gdevplnx.c) + - If an error occurred while building a Function object, a crash +could occur while freeing the partially built object. (gsfunc.c) + - The plane extraction device didn't handle RasterOps correctly. +(gdevplnx.c) + - The colors-used mask could include some additional, invalid bits. +(gxclrect.c) + - The colors-used mask was updated incorrectly for RasterOps on +subtractive-color devices. (gxclrect.c) + - Memory devices didn't set enough option bits for the case where +get_bits_rectangle had to do conversion. (gdevmem.c) + - The TrueType font rasterizer didn't accept fonts whose 'type' was +"true" rather than the documented <00 01 00 00>. (gstype42.c) + - A bug in the Watcom compiler caused two conditional expressions to +execute incorrectly. (gstype42.c) + - When a page queue was freed, it attempted to free the page_info +resource in the reserve entry, which is actually unused. (gxpageq.c) + - A necessary #include was missing. (gdevmr2n.c) + +Reduces the size of band list entries for halftoned colors somewhat. +(gxclpath.h, gxclpath.c, gxclrast.c) + +Increases the number of saved band color masks per page, mostly for testing. +(gxband.h) + +Rewrites some macros, and one 'for' statement, to eliminate "statement not +reached" compiler warnings. (gxcldev.h, gxpath2.c) + +Corrects a tiny inaccuracy in the computation of trapezoid coordinates. +(gdevddrw.c) + +Edits the trapezoid fill code for greater readability and better +documentation of its functioning. The new code runs a little slower on +compilers that don't support 'inline'. (gdevddrw.c) + +Improves the documentation of the tile phase bookkeeping. (gxclrast.c) + +Documents the fact that fixed_mult_quo takes the floor if the first argument +is negative. (gxfixed.h) + +Finishes implementing clipsave and cliprestore. (gxclipsr.h, gxistate.h, +gzstate.h, gsclipsr.c, gsstate.c) + +Implements driver access to planar, rather than chunky, banding. +(gdevplnx.h, gdevprn.h, gxclist.h, gxdevcli.h, gxrplane.h, gdevplnx.c, +gdevprn.c, gxclread.c) + +Makes it possible to set up memory devices that allocate just the line +pointer table (but not the bitmap), or neither the line pointers nor the +bitmap. (gxdevmem.h, gdevmem.c) + +Moves gx_device_white/black to a more appropriate header file. (gxdcolor.h) + +Moves gx_default_make_buffer_device to a more appropriate file. +(gdevdflt.c, gdevprn.c) + +Adds plane extraction and expansion utility procedures, required for the +extended capability of get_bits_rectangle. (gsbitops.h, gsbitops.c) + +Extends get_bits_rectangle so it can return individual planes rather than +all planes. (gdevplnx.h, gsbittab.h, gxbitfmt.h, gxgetbit.h, gdevdgbr.c, +gdevdrop.c, gdevmem.c, gdevplnx.c, gsalphac.c, gsbittab.c) + +Factors out the two more complex cases of gx_get_bits_copy into single-use +procedures for readability. (gdevdgbr.c) + +Makes public the procedure for reducing a colored halftone to a pure or +binary halftone, needed for planar rendering. (gxdither.h, gxdither.c) + +Moves the client_data pointer from gs_state to gs_imager_state. +(gxistate.h, gzstate.h, gsstate.c) + +Extends the plane extraction device to handle fill_mask and images +efficiently. (gxcmap.h, gdevplnx.h, gdevplnx.c) + +Creates a procedure to make a temporary copy of a gs_imager_state, needed +for planar image processing. (gxistate.h, gsstate.c) + +Makes getting the color mapping procedures for a device a virtual procedure +of the imager state, needed for planar image processing. (gxcmap.h, +gxistate.h, gxcmap.c, gxicolor.c, gximono.c, gxi12bit.c) + +Increases the amount of memory allocated to the asynchronous rasterizer, +since we now may need a dynamically allocated line pointer table for the +target (plane) memory device. (gdevprna.c) + +Adds a record of which bands have "difficult" RasterOps -- RasterOps that +can't be executed, even in principle, in CMYK space. We don't do anything +with this information yet, but we will have to. (gsropt.h, gxband.h, +gxcldev.h, gxclpath.h, gxclist.c, gxclpath.c, gxclrect.c) + +Makes conversion from render_plane indices to bit ranges the responsibility +of the device, not the client. (gxrplane.h) + +</pre> + +<hr> + +<h2><a name="Version5.65"></a>Version 5.65 (internal) (11/13/98)</h2> + +<p> +The main purpose of this fileset is to fix the MS Windows and OpenVMS build +procedures, which have been broken since 5.60. It also adds the ability for +a driver to determine efficiently which colors are used in a given page or +band, which is important for separated color printing, and contains some +early support for plane-separated color printing. + +<h3><a name="5.65_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Procedures) + - Every platform-specific makefile must now define D_ and _D, the +brackets for defining preprocessor macros. + - The unix-cc.mak makefile has been renamed unixtrad.mak, since it +only applies to "traditional C" compilers. + +(Drivers, Library) + - Devices now store their TextAlphaBits and GraphicsAlphaBits values +explicitly. The former get_alpha_bits procedure is obsoleted, and no +longer implemented or called by any code we distribute. + - gx_device_color_info now has additional fields. Code that +constructed gx_color_info_values in any way other than by using the dci_ +macros will no longer work. + +</pre><h3><a name="5.65_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The -sPSFile= switch was still documented, even though it no +longer exists. (doc/Use.htm) + - The - "switch" wasn't documented in the list of switches, +although it was documented elsewhere. (doc/Use.htm) + - The documentation for the PC environments was out of date -- it +didn't mention the use of subdirectories. (doc/Make.htm) + +Updates the documentation on PostScript files to indicate in what directory +the files are distributed. (doc/Psfiles.htm) + +Documents more of the utility procedures used by printer drivers. +(gdevprn.h) + +Notes that the public tar archives may not be compatible with the tar +program in SunOS 4.1.3. (doc/Make.htm) + +Adds documentation on the Unix "make pg" target. (doc/Make.htm) + +Updates documentation to reflect the name change from unix-cc.mak to +unixtrad.mak. (doc/Make.htm) + +Adds some links for the benefit of people who have built Ghostscript before +and therefore skip reading the initial sections of the documentation. +(doc/Make.htm) + +Documents the new -_ switch. (doc/Use.htm) + +Updates the documentation to mention PostScript LanguageLevel 3 and to +remove many references to 16-bit systems. (doc/Language.htm) + +</pre><h3><a name="5.65_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - A cast discarded `const' needlessly. (genconf.c) + - Upper-case echogs switches were getting converted to lower case +on VMS. (jpeg.mak) + - $(EXP) was missing before some invocations of executables. +(gs.mak, jpeg.mak, lib.mak) + - Some dependencies in the Unix install script were incorrect. +(unixinst.mak) + - Because of differences between shells, putting *.upp in the list +of files to be installed didn't work with some shells. (unixinst.mak) + - The PC makefiles were out of date. (bcwin32.mak, pcwin.mak, +winint.mak, winlib.mak, dwmain.rc, gsdll32.rc) + - Some makefiles still used $(DEV) instead of dev. (dvx-tail.mak, +msvclib.mak, openvms.mak, os2.mak, pcwin.mak, watclib.mak, winlib.mak) + - The DEVICE_DEVSn lists overflowed the DOS 120-character command +line limit again. We had to add DEVICE_DEVS16 through 20 to work around +this. (*.mak) + - Preprocessor definitions have a different syntax on VMS. Fixing +this required adding D_ and _D macros, similar to I_ and _I. This is a +NON-BACKWARD-COMPATIBLE change, since these definitions are now required in +each platform-specific makefile. (dvx-head.mak, openvms.mak, os2.mak, +unixhead.mak, wccommon.mak, winlib.mak, zlib.mak) + +Adds command line switches to generate additional warnings when compiling +the auxiliary programs with gcc. (unix-gcc.mak) + +Gets rid of the EXPP and SHP macros, since they aren't used or needed any +longer. (gs.mak, bcwin32.mak, dvx-head.mak, msvccmd.mak, openvms.mak, +os2.mak, unixhead.mak, watcw32.mak, wccommon.mak) + +Changes the Unix EXP to null, since all executables now use an explicit +directory prefix. (unixhead.mak) + +Renames unix-cc.mak as unixtrad.mak, since people with ANSI-compatible cc +were getting confused. (unix-cc.mak [deleted], unixtrad.mak) + +Adds a -_ switch, for piped execution with buffering. (iminst.h, +imainarg.c) + +</pre><h3><a name="5.65_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - The revised ansi2knr didn't recognize "foo(void)" as a procedure +definition. (ansi2knr.c) + - ansi2knr didn't handle function definitions where the last +formal parameter was a procedure parameter. (ansi2knr.c) + +Adds a utility for printing an informative error page if a PostScript job +fails. (lib/errpage.ps, doc/Psfiles.htm, unixinst.mak) + +</pre><h3><a name="5.65_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The [e]pswrite drivers produced incorrect output for images in +non-Device color spaces. We fixed this by causing all other images to be +handled as rectangles. This is clearly not satisfactory: we need to unify +the PS and PDF writers in this area. (gdevps.c) + - The CCITTFaxEncoded data produced by the [e]pswrite driver had +both a Rows value and an EndOfBlock marker, which wasn't compatible with +some Adobe interpreters. (gdevpsdf.c) + - X devices couldn't be copied, because the copy didn't clear the +list of X fonts and therefore tried to free it a second time. (gdevx.c, +gdevxini.c) + - gdevx.h declared a type called rect, conflicting with variables +named rect. (gdevx.h, gdevx.c) + - A function definition wasn't formatted properly to be +recognized by ansi2knr. (gdevupd.c) + - The PCL XL drivers crashed if given a masked image. (gdevpx.c) + +Adds a PBM driver that writes separated CMYK, using the colors-used masks to +skip bands. (devs.mak, gdevpbm.c) + +Updates drivers that formerly supported the TextAlphaBits and +GraphicsAlphaBits parameters themselves. (gdevmswn.h, gdevsvga.h, +gdevpbm.c, gdevmswn.c, gdevpm.c, gdevwdib.c, gdevsvga.c, gdevxalt.c) + +</pre><h3><a name="5.65_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - The stack size on the Watcom platform was set too small. +(watc.mak) + - The OpenVMS platform code and makefiles had gotten out of date. +(gp_vms.c, openvms.mak) + +</pre><h3><a name="5.65_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The size of Indexed color space lookup tables wasn't set, possibly +causing them to be corrupted during garbage collection. (zcsindex.c) + - A function definition wasn't formatted properly to be +recognized by ansi2knr. (icontext.c) + - quit was only rebound to stop in encapsulated jobs, rather than in +any context under control of a job server. Since we don't currently have +any explicit way to indicate whether execution is under control of a job +server, we consider that it is under a job server iff startjob has ever been +executed. (lib/gs_lev2.ps) + +Adds tracing output for removing an entry from a dictionary. (idict.c) + +Slightly improves dictionary deletion so that it can replace a run of +deleted keys with empty keys. (idict.c) + +Adds statistics-gathering to the interpreter. (interp.c) + +Adds more statistics-gathering to the dictionary stack search. (idstack.c) + +Improves the debugging printout of packed arrays. (idebug.c) + +Increases the name table allocation increment from 128 names (1.5K) to 256 +names (3K), to provide better scattering of name indices. (inamedef.h) + +Changes the name count / index mapping to provide better scattering. +(inamedef.h) + +</pre><h3><a name="5.65_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - If a font other than the base 14 wasn't embedded and lacked a +descriptor, an error occurred. (The PDF specification explicitly prohibits +this, but Acrobat PDFWriter 3.02 for Windows produces PDF files with +TrueType fonts that lack a descriptor.) (lib/pdf_font.ps) + +</pre><h3><a name="5.65_Library"></a>Library</h3><pre> + +Fixes problems: + - The computation of colors used by CMYK halftones was incorrect. +(gxclpath.c) + - Some header files had preprocessor directives with a space before +the #, which pre-ANSI compilers don't accept. (gpsync.h, gsjconf.h, +gsmemlok.h, gxsync.h, gxxfont.h) + - A number of prototypes didn't use the Pn macros. (gscolor2.h, +gscsepr.h, gsptype1.h, gspcolor.c) + - A function definition wasn't formatted properly to be +recognized by ansi2knr. (gxcht.c) + - The algorithm for reducing single-plane CMYK halftones to binary +halftones was incorrect (bug introduced in 5.60). (gxdither.c) + - Writing a degenerate triangle or parallelogram in the band list +could cause a memory access error when rasterizing. (gxclrast.c) + +Adds per-band "colors used" information to the information for a saved page, +and procedures (gdev_prn_colors_used and gx_page_info_colors_used, defined +in gdevprn.h) for accessing it. (gdevprn.h, gxband.h, gxclist.h, gdevprn.c, +gxclist.c) + +Adds an internal device that appears to clients as a multi-plane color +device, and extracts a single plane for actual rendering. This device will +be used to support planar output devices. (gdevplnx.h, gsbitops.h, +gdevplnx.c) + +Adds explicit color_info.text_anti_alias_bits and graphics_anti_alias_bits +values in the device state, obsoleting the get_alpha_bits procedure, and +makes them settable for all devices. (gxdevcli.h, gxdevice.h, gdevabuf.c, +gdevdflt.c, gdevnfwd.c, gdevprn.c, gsdparam.c) + +Reformats some code for readability. (gxdither.c) + +Adds a tentative API for a procedure that allows band rasterizing directly +into client's memory. This is tentative because we may need to add the +ability to select an individual plane. (gdevprn.h) + +</pre> + +<hr> + +<h2><a name="Version5.64"></a>Version 5.64 (internal) (11/5/98)</h2> + +<p> +This is another incremental fileset to fix problems for an external +customer. + +<h3><a name="5.64_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Drivers) + - The output_page procedure of all drivers now must call +gx_finish_output_page as its last action. (This doesn't affect ordinary +printer or raster file drivers, which already call a common procedure.) + +</pre><h3><a name="5.64_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The instructions for creating 'makefile' on Unix systems were +out of date. (doc/Make.htm) + +</pre><h3><a name="5.64_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - An omitted return statement caused genconf to malfunction on some +platforms. (genconf.c) + - The replacement of MAKEFILES by TOP_MAKEFILES accidentally changed +some comments that should not have been changed. (bcwin32.mak, gs.mak, +msvctail.mak, openvms.mak, os2.mak, watcw32.mak, wctail.mak, winlib.mak) + +</pre><h3><a name="5.64_Drivers"></a>Drivers</h3><pre> + +Updates drivers to call gx_finish_output_page where needed. (gdev3b1.c, +gdevcgm.c, gdevcp50.c, gdevpdf.c, gdevmswn.c, gdevpm.c, gdevps.c, gdevpx.c, +gdevsnfb.c, gdevwprn.c, gdevx.c) + +</pre><h3><a name="5.64_Library"></a>Library</h3><pre> + +Fixes problems: + - The FontBBox workaround introduced in 5.63 didn't work properly. +(zchar1.c) + - PageCount was getting incremented in the first device of a device +pipeline, rather than in the last one and being propagated back. +(gxdevice.h, gdevbbox.c, gdevdflt.c, gdevnfwd.c, gdevprn.c, gdevprna.c, +gsdevice.c) + +</pre> + +<hr> + +<h2><a name="Version5.63"></a>Version 5.63 (internal) (11/4/98)</h2> + +<p> +This fileset was driven by the development needs of an external customer, +primarily related to asynchronous rendering. It includes a few bug fixes as +well. + +<h3><a name="5.63_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Procedures) + - In the makefiles, changes the name MAKEFILES to TOP_MAKEFILES. + +(Library) + - The pis member of the Type 1 interpreter state was renamed in +order to catch places that assumed it was set. (It may now be 0.) This +should not affect any client code. + - gx_page_queue_dnit and gx_page_queue_finish_dequeue now free the +band list information associated with the page_info in the queue entry. An +explicit call of gx_page_queue_entry_free_page_info is now required to free +this information before any other call of gx_page_queue_entry_free. + +</pre><h3><a name="5.63_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - devs.mak incorrectly referred to msdevs.mak rather than pcwin.mak. +(devs.mak) + +</pre><h3><a name="5.63_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - There was a $ in the makefile that wasn't quoted. (unix-gcc.mak) + - The name MAKEFILES has a special meaning in GNU make which only be +disabled by using a directive that is a syntactic error for standard 'make' +implementations. We had to work around this by changing all occurrences of +MAKEFILES to TOP_MAKEFILES. (*.mak) + - genconf did the wrong thing for modules with names shorter than +5 characters. (genconf.c) + +</pre><h3><a name="5.63_Drivers"></a>Drivers</h3><pre> + +Updates the Canon BJC library, changing the names of the files. This code +is still very preliminary. (gdevbjcl.h, gdevbjcl.c) + +</pre><h3><a name="5.63_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - Some Type 1 fonts have a plausible but incorrect (too-small) +FontBBox, causing some characters to be clipped. We work around this by +enlarging the FontBBox and restarting the rasterization if the outline goes +outside the FontBBox. (zchar1.c) + +</pre><h3><a name="5.63_Library"></a>Library</h3><pre> + +Fixes problems: + - gx_default_strip_copy_rop didn't check for zero width before +dividing by it. (gdevdrop.c) + - Some places that called a procedure returning void tried to use +the return value. (gximage.c, gximage1.c, gximage4.c) + - The flatness for rendering Type 1 characters was set incorrectly +(always set to 0, producing best accuracy at extra cost) for characters not +in portrait orientation. (gxtype1.c) + - clist_begin_typed_image incorrectly used the memory manager client +name "clist_begin_image". (gxclimag.c) + - If a page queue entry was created without a page_info, the entry's +page_info wasn't initialized, probably causing a crash when attempting to +free the (nonexistent) associated band files later. (gxpageq.c) + +More fully supports the use of saved page_info objects for decoupling banded +rendering from band list construction: + - Adds the ability to close and free the command list associated +with a saved page. (gxclist.h, gxclist.c) + - Separates freeing of the band list information associated with a +page queue entry from freeing the entry itself. (gxpageq.h, gxpageq.c) + - Changes the rendering thread for asynchronous band rendering so +that it doesn't try to free the band list information twice. (gdevprna.c) + +Implements triangles and parallelograms in the band list, primarily for the +sake of smooth shading. (gxclpath.h, gxclist.c, gxclpath.c, gxclrast.c) + +Adds a rectangle merging procedure, parallel to rectangle intersection. +This is needed for the FontBBox fix. (gsrect.h) + +Adds logic for keeping track of what pixel values are used in which bands. +Currently this information is not used for anything. (gdevmrop.h, gsropt.h, +gxcldev.h, gxclpath.h, gxclrect.c, gxclpath.c, gxclimag.c) + +Updates a few more files for readability and coding conventions. +(gxband.h, gxpageq.c) + +Updates users of gxband.h and gxpageq.h. (gdevprn.h, gxclist.h, gxpageq.h, +gdevprna.c, gxclpage.c, gxclread.c) + +Moves the definition of the page queue into the (private) implementation +file. (gxpageq.h, gxpageq.c) + +</pre> + +<hr> + +<h2><a name="Version5.62"></a>Version 5.62 (internal) (10/31/98)</h2> + +<p> +This fileset concludes this round of work on (primarily color) performance +improvement. It contains almost no new bug fixes. + +<h3><a name="5.62_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Library) + - Clients that load the CIE caches themselves must now reset the +procedures to the _from_cache values. (This affects the PostScript +interpreter, but no ordinary library clients.) + - gs_cie_compute_wbsd (an internal procedure) was changed to +gs_cie_compute_points_sd, with different parameters. + +</pre><h3><a name="5.62_Documentation"></a>Documentation</h3><pre> + +Adds information about problems with PDF files copied from Macintosh +environments. (doc/Use.htm) + +</pre><h3><a name="5.62_Drivers"></a>Drivers</h3><pre> + +Adds a library for generating Canon BJC commands. This code is subject to +change without notice! (gdevcbjc.h, gdevcbjc.c) + +</pre><h3><a name="5.62_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The structures allocated for CIE RenderTables weren't marked +correctly for garbage collection, possibly mangling the output. (zcie.c) + - The CIE color space procedures weren't reset after the cache was +loaded, producing incorrect output now that it matters. (zcie.c, zcrd.c) + +</pre><h3><a name="5.62_Library"></a>Library</h3><pre> + +Fixes problems: + - Under some circumstances, a setbbox didn't take effect. +(gxpcopy.c) + - The last step of CIE color mapping didn't clamp the very top end +of the range correctly. (gsciemap.c) + +Speeds up bits_replicate_horizontally a bit more. (gsbitops.c) + +Separates the CIE color mapping code from CIE cache loading, since the file +was getting too big. (gscie.h, gscie.c, gsciemap.c) + +Finishes adding the hooks for skipping steps during CIE color mapping when +possible, and implements one case of step-skipping. (gscie.h, gscie.c, +gsciemap.c, gscrd.c) + +Adds more tracing to the CIE color machinery. (gscie.c) + +Changes the default number of tiles for the colored halftone screen caches +from 1 to 4, substantially reducing cache turnover. (gsht1.c, gshtx.c, +gxclrast.c) + +</pre> + +<hr> + +<h2><a name="Version5.61"></a>Version 5.61 (internal) (10/28/98)</h2> + +<p> +More rendering speedups, and fixes for many of the minor problems reported +in 5.50. + +<h3><a name="5.61_Documentation"></a>Docmentation</h3><pre> + +Fixes problems: + - There were still some incorrect references to .txt files. +(gs.mak, libpng.mak) + - Two references to libpng should have referred to libjpeg. +(gs.mak) + +</pre><h3><a name="5.61_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - GNU 'make' treats the name MAKEFILES specially. (unix-gcc.mak) + - genconf didn't sort libraries in the right order. (genconf.c) + - The dependency for ansi2knr, and the invocation of ccgs, didn't +include the directory name. (ccgs, unix-cc.mak) + - The CC_ and CCAUX rules didn't invoke the new ccgs correctly. +(unix-cc.mak) + - There was a typo in a comment. (unixtail.mak) + - gcc versions of the form 2.7.2.f.1 weren't recognized as having +the const-related code generation bug. (unix-gcc.mak) + +Documents workaround for bugs in newer IRIX compilers. (doc/Make.htm) + +</pre><h3><a name="5.61_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - ansi2knr didn't understand the new formatting of the enum_ptrs and +reloc_ptrs procedures, which now don't have a left brace on the same line as +the macro call that defines the procedure. (ansi2knr.c) + +Adds a utility for viewing MIFF files. (lib/viewmiff.ps) + +</pre><h3><a name="5.61_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The X driver could report a depth (e.g., 15 bits) that caused +problems elsewhere. (gdevxini.c) + - With the X driver, if the display is grey-scale or does not have +enough colors to allocate a color ramp, Ghostscript crashed in +x_map_color_rgb due to an array index overflow. (gdevx.c) + - The PDF writer used the X scaling of fonts to determine the point +size rather than the Y scaling, which gives the wrong result for synthetic +condensed fonts. (gdevpdft.c) + - If the last thing written before a flushpage was text, the X +driver might fail to display it. (gdevx.c) + - The PDF writer didn't free the streams created for image +compression, causing a memory leak. (gdevpsdf.c) + - pswrite didn't output a command to set the page size. (gdevps.c) + +Removes an obsolete comment and commented-out line. (gdevxalt.c) + +</pre><h3><a name="5.61_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Explicit (not resource) Indexed color spaces caused an error. +(lib/pdf_draw.ps) + +</pre><h3><a name="5.61_Streams"></a>Streams</h3><pre> + +Fixes problems: + - The PNGPredictor filters didn't free their row buffer. (spngp.c) + - The PNGPredictor filters didn't handle end-of-data correctly. +(spngp.c) + +Changes the eexec filter to ignore % characters when reading +ASCIIHex-encoded data. This is contrary to the Adobe documentation, but one +badly coded prologue requires it. (seexec.c) + +</pre><h3><a name="5.61_Library"></a>Library</h3><pre> + +Fixes problems: + - The definition of TRANSPARENCY_PER_H_P was in the wrong module, +causing it to be ignored. (gdevmrop.h, gdevdrop.c) + - There was a typo in the tracing output for init_tile_cursor. +(gxcht.c) + - gx_get_bits_copy computed the standard raster incorrectly if +the destination used a different color representation from the source, +causing multi-line transfers to be done incorrectly. (gdevdgbr.c) + - Parentheses were missing around the use of width_bits in the +definition of bitmap_raster, possibly causing incorrect computation. +(gxbitmap.h) + - When rendering a Pattern, a singular CTM caused an error even if +the Pattern was empty. (gspcolor.c) + - The lookup table wasn't allocated for device-originated CRDs. +(gscrdp.c) + - If an error occurred when setting up to rasterize a band, +data_bits could be freed without ever having been initialized. (gxclrast.c) + - Processing a CIE-color image with a color space different from the +current color space caused an error. (gscie.c) + - The speedup for bits_replicate_horizontally had an algorithm +error, producing incorrect output. (gsbitops.c) + +Splits up the memory device implementation of RasterOp, since the file was +getting too large. (gdevmem.h, gdevm1.c, gdevm8.c, gdevm16.c, gdevm24.c, +gdevm32.c, gdevmrop.c [deleted], gdevmr1.c, gdevmr2n.c, gdevmr8n.c, +gsnorop.c) + +Cleans up a little formatting. (gsbittab.h) + +Speeds up the default RasterOp implementation some more. (gdevdgbr.c, +gdevdrop.c, gdevmem.c) + +Speeds up testing whether a given halftone level is already present in its +cache. (gzht.h, gxht.c) + +Speeds up 1-bit CMYK halftones a bit more. (gxcht.c) + +Makes filling always use the (much faster) trapezoid-based algorithm if the +region being filled is a rectangle. (gxfill.c) + +</pre> + +<hr> + +<h2><a name="Version5.60"></a>Version 5.60 (internal) (10/18/98)</h2> + +<p> +This fileset incorporates many performance enhancements for 1-bit CMYK +devices, especially for PCL 5c interpretation. + +<p> +This fileset divides the files into subdirectories. In the lists of changed +files, files with no explicit subdirectory name are in the src subdirectory. +The revised OpenVMS and OS/2 makefiles have not been tested. + +<h3><a name="5.60_Incompatible_changes"></a>Incompatible changes</h3><pre> + +(Procedures) + - The instructions for font compilation in doc/Fonts.htm are +different. + - The fileset has been split into multiple directories; the source +code and makefiles are now in src/. + - The top-level makefile requires a definition for BINDIR for the +directory to hold the final executable. + - Every .dev rule of the form + xxx.dev: <list> + $(SETyyy) xxx <items> + $(ADDMOD) xxx <items> +must be changed to + $(DD)xxx.dev: <list> + $(SETyyy) $(DD)xxx <items> + $(ADDMOD) $(DD)xxx <items> +(DD for drivers, PSD for PostScript/PDF-interpreter features, GLD for +graphics library features). Every -include and -replace option in the +makefiles rules, and every element of FEATURE_DEVS and DEVICE_DEVS*, must be +changed similarly. This is very unfortunate, especially since people +editing FEATURE_DEVS and DEVICE_DEVS* must now know which subsystem +implements a particular feature; but we tried 3 different ways to get the +generated .dev files out of the top-level directory, and this was the only +one we could make work. + - Top-level makefiles must define both MAKEFILE and MAKEFILES, +the latter to include any subsidiary makefiles that define configuration +parameters. Dependencies on $(MAKEFILE) must be changed to $(MAKEFILES). + - Color space objects now must either be allocated with the +gs_cspace_build_ procedures or initialized with the gs_cspace_init_ +procedures: building color spaces "by hand" is no longer allowed. + +(Library) + - There are new required elements of the gs_image_type_t structure. + - The binary and colored variants of gx_device_halftone have +changed. (No APIs are affected.) + - If a device changes its (effective) color mapping algorithm other +than as a side effect of put_params, it must call +gx_device_decache_colors(dev). + +</pre><h3><a name="5.60_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - Some files still referred to .doc files rather than .htm. +(gsiparam.h, imain.h) + - Version 5.50 was incorrectly identified as a beta version. +(doc/News.htm) + - The instructions for cross-compilation were seriously +incomplete. (doc/Make.htm) + +Adds a text-only README file. (doc/README) + +Updates the instructions for font compilation. (doc/Fonts.htm) + +Updates the instructions for device and feature selection. (doc/Make.htm) + +Adds material on 8.3 file names, compiler warning messages, and graphics +library error codes to the C style guide. (doc/C-style.htm) + +Adds a note about gx_device_decache_colors. (doc/Drivers.htm) + +Improves formatting slightly. (doc/Install.htm, doc/Use.htm) + +</pre><h3><a name="5.60_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The Unix install script referred to an obsolete ps2image.ps file. +(unixinst.mak) + - The Unix CC script had some duplicated definitions. (unix-cc.mak) + - The DVX makefile referred to int.mak in GLSRC rather than PSSRC. +(dvx-gcc.mak) + - rollconv.ps wasn't installed with the other utilities. +(unixinst.mak) + - Some definitions of MAKEFILE lacked a directory name. (os2.mak, +unix-cc.mak, unixansi.mak, watclib.mak) + - There were inappropriate dependencies on a file with the literal +name `makefile'. (bcwin32.mak, gs.mak, watc32.mak) + - Unix systems didn't use -fomit-frame-pointer when possible. +(unix-cc.mak, unix-gcc.mak, unixansi.mak, unix-end.mak) + +Restructures the source files into multiple subdirectories: + src/ - files needed at build time: *.mak, *.h, *.c, *.cpp, *.icx, *.rc, + *.cmd, ??.bat, *.com, *.rps, *.dif, *.cfg + lib/ - files needed at run time: *_*.ps, *.ppd, *.upp, *.bat + doc/ - documentation other than man pages: *.htm, *.txt + man/ - man pages: *.1 + examples/ - sample input data: *.ps, *.eps, *.pdf +Also incorporates the font compilation makefile into the main makefile, +since the former now depends on parameters defined in the latter. (*.mak) + +****** HAVEN'T SETTLED HOW TO HANDLE .ico FILES ****** + +NOTE: Still need to update: openvms.mak, os2.mak. + +Updates the Unix install script for the directory split. (unixinst.mak) + +Updates the font compilation makefile rules to handle alternate directories. +(cfonts.mak, int.mak) + +****** PROBLEM: cfonts.mak NEEDS CCFONT, BUT int.mak NEEDS CF* FOR ADDING +ONE'S OWN FONTS ****** + +Removes useless dependencies on gs_*.ps files. (int.mak) + +Moves the .dev files into the GEN directories where they belong. (gs.mak, +dvx-tail.mak, msvclib.mak, openvms.mak, os2.mak, pcwin.mak, ugcclib.mak, +unixhead.mak, unixtail.mak, unix-end.mak, watc.mak, watclib.mak, winlib.mak, +echogs.c, genconf.c) ****** NO_OP FOR dvx HASN'T BEEN VERIFIED ****** +NOTE: Still to do: +src/bcwin32.mak +src/dvx-gcc.mak +src/dvx-head.mak +src/dvx-tail.mak +src/msvc32.mak +src/msvccmd.mak +src/msvclib.mak +src/msvctail.mak +src/openvms.mak +src/os2.mak +src/pcwin.mak +src/ugcclib.mak +src/watc.mak +src/watclib.mak +src/watcw32.mak +src/wccommon.mak +src/wctail.mak +src/winint.mak +src/winlib.mak + +Adds a new BINDIR directory for the final executable (and associated files +like resource files). After building, only the contents of BINDIR and lib +are needed for execution. (gs.mak, unix-end.mak) ****** NEED TO DO +openvms.mak, os2.mak, OTHER PC MAKEFILES ****** + +Updates libpng to version 1.0.2. (libpng.mak) + +</pre><h3><a name="5.60_Utilities"></a>Utilities</h3><pre> + +Adds a new switch, -b, to echogs. (echogs.c) + +</pre><h3><a name="5.60_Drivers"></a>Drivers</h3><pre> + +Updates the PDF writer for the change in color space initialization. +(gdevpdfi.c) + +Speeds up the pkmraw driver a bit more. (gdevpbm.c) + +Updates some drivers to use the new CMYK color mapping procedures. +(gdevpbm.c, gdevpcx.c, gdevxalt.c) + +Updates one driver that maintained its own color cache. (gdevxalt.c) + +Removes some compiler warnings (mostly about "uninitialized" variables). +(gdevpdfo.c, gdevpdft.c, gdevpx.c) + +Adds another driver for the H-P Color LaserJet 5/5M. (gdevcljc.c) + +</pre><h3><a name="5.60_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - A change in the MetroWerks C compiler caused the hypot function +to become declared. (math_.h) + +</pre><h3><a name="5.60_Interpreter"></a>Interpreter</h3><pre> + +Updates the compiled font code for updates in the type declarations. +(iccfont.c, icfontab.c) + +Cleans up some more formatting and macros. (ccfont.h, errors.h, icfontab.c, +interp.c) + +Updates clients for the change in color space initialization. (zcsdevn.c, +zcsindex.c, zcspixel.c, zcssepr.c, zpcolor.c) + +Updates the memory validator for the addition of the large-block freelist. +(ilocate.c) + +</pre><h3><a name="5.60_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - If the final %%EOF was followed by any blanks before the newline, +an error would occur. (lib/pdf_main.ps) + +</pre><h3><a name="5.60_Streams"></a>Streams</h3><pre> + +Fixes problems: + - The LZWDecode filter wouldn't handle a file that had 4096-256-2+1 +data items before the reset. (We think this is a bug in the file, but +Acrobat accepts it.) (slzwx.h, slzwd.c) + +Rearranges code slightly to improve readability. (spdiff.c) + +</pre><h3><a name="5.60_Library"></a>Library</h3><pre> + +Fixes problems: + - Changing the resolution (or any other parameter) of the bbox +device from the command line caused an invalid memory access. (gdevbbox.c) + - When banding, if the very first drawing operation involved a +halftone with non-zero phase, an arithmetic exception occurred. +(gxclpath.c) + - When banding, the X offset of the band was negated, producing +incorrect output when placing multiple source pages on a single output page. +(gxclread.c) + - When banding, rotated images crossing band boundaries produced +incorrect output, because the subrectangle X value was inconsistent with the +amount of data transmitted. (gxclimag.c) + - When banding, the clipping check didn't take interpolation support +into account. (gxclimag.c) + - The clipping check for banding used (int) to take the floor of +floating point values, which is wrong for negative values. (gxclimag.c) + - The bounding box device didn't return an empty bounding +rectangle if nothing had been written to it. (gdevbbox.c) + - A value was conditional on a debugging switch even if DEBUG wasn't +defined. (gxcht.c) + - Filling a region with a large colored halftone, a non-default +RasterOp, and a non-null RasterOp source could cause only part of the region +to be filled. (gxcht.c) ****** NOT FIXED YET ****** + - Type 1 fonts that used very large numbers (>= 2^19) caused a +rangecheck. We've fixed this for the only case that seems to matter, namely +<very-large-number> <number> div. (gxtype1.h, gstype1.c) + - The memory-based band list allocator failed to return an error +code from memfile_next_blk. (gxclmem.c) + - When recovering from a low-band-list-memory condition while +writing an image, the record of the current image enumeration +(cdev->image_enum_id) wasn't updated. (gxclimag.c) + - The estimated memory requirement for the band list rasterizer was +too small. (gdevprna.c) + +Adds some tracing to mask clipping. (gxclipm.c) + +Speeds up masked images by doing mask clipping before halftoning, using a +more efficient mask scanning algorithm, and checking for vertical blocks of +1s. (gxclipm.c) + +Speeds up ImageType 4 images greatly by incorporating the color-key check +into the ImageType 1 rendering code. NOTE: the 12-bit case has not been +tested. (gxcpath.h, gximage.h, gxi12bit.c, gxicolor.c, gxifast.c, +gxiinit.c, gximage4.c, gximono.c, gxiscale.c) + +Implements passing ImageType 4 images (and potentially others) through the +band list. This involves adding image parameter writing and reading +procedures to the image type structure. (gscdefs.h, gsiparam.h, gsiparm2.h, +gsiparm4.h, gsmatrix.h, gxclpath.h, gxiparam.h, gconf.c, genconf.c, +gsmatrix.c, gxclimag.c, gxclist.c, gxclpath.c, gxclrast.c, gxiinit.c, +gximage2.c, gximage3.c, gximage4.c) + +Splits off the generic image support code from the ImageType 1 code. +(gxiinit.c [deleted], gximage.c, gximage1.c, gxipixel.c) + +Removes some vestiges of support for 16-bit environments. (gsmisc.c) + +Implements bit-planar images, important for PCL interpretation. +(gsiparam.h, gximage.h, gxiparam.h, gdevddrw.c, gdevpdfi.c, gdevps.c, +gsimage.c, gxclimag.c, gxidata.c, gximage.c, gxipixel.c) ****** NOT TESTED +YET ****** + +Makes closing a memory device that owns its bitmap set the bitmap pointer to +0, for the sake of an application that doesn't handle is_open properly. +(gdevmem.c) + +Speeds up floating-point emulation for single-precision add, subtract, and +multiply. (gsfemu.c) + +Speeds up sampling of transfer functions. (gshtx.c) + +Makes the CIE cache used fixed-point values if the CPU has slow floating +point. (gscie.h) + +Adds a unique ID to color spaces to allow fast detection of reselecting the +same color space. This matters for certain client code that repeatedly +reselects the same color space, since selecting certain color spaces is +expensive. (gscpixel.h, gscspace.h, gxcspace.h, gscolor2.c, gscpixel.c, +gscscie.c, gscspace.c, gspcolor.c, gsstate.c, gximage2.c) ****** NEED TO FIX +gxclrast.c TO ALLOC INDEXED COLOR SPACE ****** + +Speeds up setting Pattern color spaces, by bypassing the install code for +the base space. (gspcolor.c) + +Adds a unique ID to CRDs to allow fast detection of reselecting the same +CRD. This matters for certain client code that does this repeatedly. +(gscie.h, gscrd.h, gscrd.c) + +Detects setting the CRD to one with identical PQR components, and bypasses +an expensive setup step. (gscie.c) + +Speeds up converting pixels between representations (gx_get_bits_copy) for +devices with up to 4 bits per pixel, by caching the pixel values. +(gdevdgbr.c) + +Speeds up the slow default RasterOp algorithm a little. (gdevdrop.c) + +Defines standard mapping procedures for 1-bit-per-component CMYK colors. +Other code can then test for the presence of these procedures and use more +efficient algorithms. (gxdevice.h, gxcmap.c) + +Speeds up some algorithms in the bbox device by making some recursive calls +use a pure color rather than a client-supplied one. (gdevbbox.h, gdevbbox.c) + +Adds a cache for the black and white pixel values to the device structure. +(gxdevcli.h, gxdevice.h, gdevalph.c, gdevnfwd.c, gsdparam.c, gxdcolor.c) + +Makes the code for colored halftones a little more readable. (gxcht.c) + +Speeds up color mapping for CMYK devices by copying the color mapping +procedures into forwarding devices, when applicable. (gdevcmap.c, +gdevmem.c, gsdevice.c, gxclip.c) + +Removes some compiler warnings (mostly about "uninitialized" variables). +(gxcldev.h, gsdevmem.c, gsshade.c, gstype42.c, gxclpath.c, gxfill.c, +gximage3.c, gxpath2.c, gxpcopy.c) + +For the benefit of certain client code that commonly sets a CRD and then +doesn't use it, makes loading of the joint CIE caches lazy (at the library +level). (gscie.h, gscie.c) + +Changes CIE color restriction from a macro to a procedure, since it is +rarely used. (gscie.c) + +Adds code and structures for detecting when CIE Decode and/or Encode +procedures are simply linear transformations, which would allow collapsing +them into the adjacent matrix, but doesn't actually do the collapsing. +(gscie.h, gscie.c) + +Speeds up color halftoning by pre-computing the mask of planes that need to +be halftoned, and preconverting multi-plane halftones to binary or solid +colors when possible. (gsdcolor.h, gxcht.c, gxdcolor.c, gxdither.c, gxht.c) + +Optimizes color mapping for 1-bit-per-component CMYK halftones. (gxcht.c) + +Optimizes null RasterOp sources for black = 1 as well as black = 0. +(gxdcolor.c) + +Modifies the standard allocator so it keeps track of large free blocks as +well as small ones, and uses them to satisfy requests when appropriate. +(gxalloc.h, gsalloc.c) + +Speeds up the horizontal bitmap replication code a bit. (Much more is +possible.) (gsbitops.c) + +Changes gs_image_max_planes to gs_image_max_components to reflect its +function more accurately. (gdevddrw.c) + +</pre> + +<hr> + +<h2><a name="Version5.50"></a>Version 5.50 (9/16/98)</h2> + +<p> +This is the first public release since 5.10. See +<a href="Current.htm">the release summary</a> +for a list of major additions and changes. + +<h3><a name="5.50_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - Many files still referred to .txt rather than .htm files. +(DLL.htm, Make.htm, New-user.htm, Readme.htm, bcwin32.mak, cfonts.mak, +devs.mak, dvx-gcc.mak, dwmainc.cpp, gs-vms.hlp, gxdevcli.h, gxdevice.h, +int.mak, jpeg.mak, libpng.mak, msvc32.mak, msvclib.mak, openvms.mak, +os2.mak, unix-cc.mak, unix-gcc.mak, unixansi.mak, watc.mak, watcw32.mak, +wccommon.mak, zlib.mak) + +Notes that ps2epsi.1 and ps2epsi.txt may be inconsistent or obsolete. +(ps2epsi.1, ps2epsi.txt) + +Adds a reference to Thomas Merz's Ghostscript manual. (Readme.htm) + +Adds instructions for making RPMs. (Install.htm, Make.htm) + +Changes the URL for post-release notes. (Bug-form.htm, Make.htm, +New-user.htm) + +Notes problems with Watcom compilation. (Make.htm) + +</pre><h3><a name="5.50_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - On Unix systems, the documentation files didn't get installed by +`make install'. (unixinst.mak) + - $() was missing around MAKEFILE in a Windows makefile. +(msvc32.mak) + - The dfax drivers didn't include all the necessary files in the +linker list. (contrib.mak) + - The MSVC makefiles didn't allow building the executable in a +different directory. (bcwin32.mak, gs.mak, lib.mak, msvc32.mak, +msvccmd.mak, msvclib.mak, msvctail.mak, os2.mak, watcw32.mak, winint.mak, +winlib.mak) + - The default build directory for the Borland compiler was debugobj +rather than obj. (bcwin32.mak) + +Adds a patch file and some specification files for making RPMs. (gs.rps, +gs-fonts.rps, rpm-conf.dif) + +Removes the docs target in the makefile, since this function is now +performed by another program. (unix-end.mak) + +</pre><h3><a name="5.50_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The jpeg drivers caused a memory access error. (bug introduced in +5.20 by an incorrectly made fix) (gdevjpeg.c) + - The x11cmyk driver implemented map_rgb_color, which it should not +do. (gdevxalt.c) + +Updates a high-level driver for the addition of the bit-planar image format. +(gdevps.c) + +</pre><h3><a name="5.50_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - echogs -h didn't work in environments where char is signed. +(echogs.c) + +</pre><h3><a name="5.50_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - MSVC++ 5.0 produced incorrect code with TDEBUG=0. We "fixed" this +problem by noting in the makefile that TDEBUG must be left set to 1. +(msvc32.mak, msvclib.mak) + +Updates the icons for the MS Windows and OS/2 platforms. (gsgraph.icx, +gsos2.icx, gspmdrv.icx, gstext.icx) + +</pre><h3><a name="5.50_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - setpagedevice didn't update the state correctly when switching to +a new type of device (different OutputDevice value). (gs_setpd.ps) + - The interpreter's initialization depended on BSS being initialized +to 0. (files.h, zfile.c) + +Removes all references to reloc_struct_ptr other than in gsstruct.h. +(igcref.c) + +Adds DEBUG tracing for pdfmarks. (gs_pdfwr.ps) + +Disables TEST code for release. (zcrd.c, zfdcte.c) + +</pre><h3><a name="5.50_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Some third-party software still referred to the obsolete #? +procedure. (pdf_main.ps) + - Destinations with string names weren't properly converted to +pdfmarks. (pdf_main.ps) + - Destinations with S = /Named weren't supported. (pdf_main.ps) + +</pre><h3><a name="5.50_Library"></a>Library</h3><pre> + +Fixes problems: + - Dropout prevention wasn't applied to landscape image masks. +(gximono.c) + - When using async rendering, the renderer's allocator was allocated +with the wrong allocator. (gdevprna.c) + - gx_strip_bitmap and gx_device_mask_clip didn't have proper GC +descriptors, causing crashes if a GC occurred while rendering an ImageType 3 +or 4 image. (gsstruct.h, gxbitmap.h, gxclip2.h, gxclipm.h, gxmclip.h, +gspcolor.c, gxclipm.c, gxmclip.c) + - The buffer for printer devices wasn't reallocated properly for +async devices when the page size changed. We aren't entirely comfortable +with the fix, but it's the best we've got right now. (gdevprn.c) + - Some files wouldn't compile with -dNOPRIVATE. (gxcspace.h, +gscdevn.c, gscolor2.c, gscscie.c, gscsepr.c) + - gp_semaphore_close and gp_monitor_close were defined as not +returning an error code. (gpsync.h, gp_nsync.c, gp_posem.c, gp_semon.c, +gp_win32.c) + - Initialization code depended on BSS being initialized to 0. +(gsiodev.c) + - The special PCL color mapping device didn't handle CMYK devices +correctly in other than "identity" mode. (gdevcmap.c) + +Cleans up a little formatting. (gscie.h, gscpixel.c, gxmclip.c) + +Removes all references to reloc_struct_ptr other than in gsstruct.h. +(gsstruct.h, gsalloc.c, gsdevice.c, gsfont.c, gxcpath.c) + +Patches the async code so that it allocates twice as much space for the +renderer as should be needed, to deal with sandbars. (gdevprna.c) + +</pre> + +<hr> + +<h2><a name="Version5.40"></a>Version 5.40 (beta) (9/10/98)</h2> + +<p> +A few more fixes. This is intended as the candidate fileset for the 5.50 +release. + +<h3><a name="5.40_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The current GNU Ghostscript version was documented as 3.33, not +4.03. (New-user.htm) + - The ansi2knr usage documentation didn't mention --filename. +(ansi2knr.1) + - A projected completion date was too optimistic. (ps2pdf.1) + +Replaces all documentation files with new HTML versions. (*.txt [deleted], +*.htm, index.html, imainarg.c) + +Adds a contributed set of Emacs macros useful for working with Ghostscript +documentation. (gsdoc.el) + +Changes the version and date format slightly in one file for consistency. +(gs-vms.hlp) + +</pre><h3><a name="5.40_Procedures"></a>Procedures</h3><pre> + +Adds a make target (make docs) to touch up documentation files before a +release. (unix-end.mak) + +</pre><h3><a name="5.40_Utilities"></a>Utilities</h3><pre> + +Removes the long-obsolete ps2image.ps utility. (ps2image.ps [deleted]) + +</pre><h3><a name="5.40_Drivers"></a>Drivers</h3><pre> + +Adds a driver for the Color LaserJet 5. (devs.mak, gdevclj.c) + +</pre><h3><a name="5.40_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - Blanks in command lines weren't handled properly. (dwmain.cpp, +dwmainc.cpp) + +</pre><h3><a name="5.40_Library"></a>Library</h3><pre> + +Fixes problems: + - 16-bit devices didn't convert colors to RGB correctly. +(gdevm16.c) + - 16- and 32-bit RasterOp didn't work, because pack_from_standard +didn't handle depths greater than 8. (gdevdrop.c) + - RasterOps with devices with non-standard color representation +sometimes substituted black or white for the source or target. (gdevdrop.c) + - The non-orthogonal case of Axial shading executed the axial-case +code as well. (gxshade1.c) + - copy_color on 4-bit-deep memory devices did an unnecessary +fit_copy check. (gdevm4.c) + - An upcast was missing. (gdevbbox.c) + - View clipping was applied to internal devices, incorrectly. +(gspath.c) + +Revises the implementation of shading so as to reduce the use of macros, +update formatting, and help prepare for PatternType 2 patterns. (gsshade.h, +gxshade.h, gxshade4.h, gscolor3.c, gsshade.c, gxshade.c, gxshade1.c, +gxshade4.c, gxshade6.c) + +</pre> + +<hr> + +<h2><a name="Version5.39"></a>Version 5.39 (beta) (9/8/98)</h2> + +<p> +A couple more small fixes. + +<h3><a name="5.39_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The pkm[raw] drivers didn't work with 32-bit pixels. (gdevpbm.c) + +Adds (fake) 8-, 16-, and 32-bit X11 CMYK devices, for debugging. +Unfortunately, the 16- and 32-bit devices consume the hardware color map and +then no longer behave reasonably; the 8-bit device produces output with +garbled colors (fixed in 5.40). (devs.mak, gdevxalt.c) + +</pre><h3><a name="5.39_Library"></a>Library</h3><pre> + +Fixes bugs: + - All banded devices caused a memory access error. (bug introduced +in 5.38) (gsstate.c) + - The special color mapping device didn't update its state after +put_params. (gdevcmap.c) + - RasterOp on 8-bit non-gray-scale devices didn't handle filling +with constant 0 or 1 properly. (gdevmrop.c) + - The halftone machinery didn't switch from full-size to strip +halftones early enough, possibly allocating very large halftone data +structures. (gshtscr.c) + - If an ioerror (such as a disk- or memory-full condition) occurred +while writing out the band list, the bookkeeping structures were left in an +inconsistent state, causing further problems. (gxclutil.c) + - Some shaded fills didn't check for errors when filling +sub-regions. (gxshade1.c, gxshade4.c) + +Cleans up some formatting. (gxshade6.c) + +</pre> + +<hr> + +<h2><a name="Version5.38"></a>Version 5.38 (beta) (9/3/98)</h2> + +<p> +The sole purpose of this release was to fix some obscure bugs detected by +the Genoa tests and by another Aladdin project. + +<h3><a name="5.38_Documentation"></a>Documentation</h3><pre> + +Updates the list of implemented PostScript LanguageLevel 3 features. +(current.txt) + +</pre><h3><a name="5.38_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The PDF writer did the wrong thing for multi-source images with +more than 180 bytes of data (total) per scan line. (gdevpdfi.c) + - If one used setdistillerparams, [g]restore caused a rangecheck in +.setpagedevice. ****** DISABLED FOR DCT DICTS, SINCE THIS CAUSES A SEGV +****** (gdevpsdp.c) + +</pre><h3><a name="5.38_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - 0-length parameter arrays were given an arbitrary type, confusing +clients. (iparam.c) + - EOD on a write stream caused an error. (zfileio.c) + +</pre><h3><a name="5.38_Library"></a>Library</h3><pre> + +Fixes problems: + - 0-length parameter arrays confused clients that wanted arrays of a +particular type. (gsparam.c) + - Patterns with XStep or YStep smaller than the bounding box didn't +work properly. (gxp1fill.c) + - Resizing an object sometimes copied it unnecessarily. (gsalloc.c) + - Freeing the shared part of a graphics state didn't free its +sub-objects. (gsstate.c) + - The standard allocator didn't free its initial (self-containing) +chunk when asked to free itself. (gsalloc.c) + - The standard allocator didn't attempt to merge free blocks before +giving up. We implemented this by adding another virtual procedure to +allocators, consolidate_free. (gsmemory.h, gsmemraw.h, gsalloc.c, +gsmalloc.c, gsmemlok.c, gsmemory.c) + - The free object merging algorithm thought there were free objects +even when there weren't. (Small performance bug only.) (gsalloc.c) + +Adds some more tracing to pattern filling. (gxclip2.c, gxp1fill.c) + +Replaces the cs_alloc, cs_copy, and cs_undo_alloc macros with procedures. +(gxcspace.h, gscolor2.c, gscsepr.c, gscspace.c, gspcolor.c) + +Moves the free-object merging code from gsnogc.c to gsalloc.c, so it can be +used even in systems that have a garbage collector. (gsalloc.h, gxalloc.h, +gsalloc.c, gsnogc.c) + +</pre> + +<hr> + +<h2><a name="Version5.37"></a>Version 5.37 (beta) (8/31/98)</h2> + +<h3><a name="5.37_Documentation"></a>Documentation</h3><pre> + +Mentions the new cid2code utility in the documentation. (psfiles.txt) + +Documents dpsnext.dev. (gs.mak) + +Notes that clients of ImageType 3 images are responsible for providing the +mask data before the pixel data. (gsiparm3.h) + +</pre><h3><a name="5.37_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The makefiles were missing a dependency of jconfig.h on arch.h. +With this fix, parallel builds (make -jN) work reliably. (jpeg.mak) + +</pre><h3><a name="5.37_Utilities"></a>Utilities</h3><pre> + +Adds a utility for creating maps from CIDs to Unicode. (unixinst.mak, +cid2code.ps) + +</pre><h3><a name="5.37_Drivers"></a>Drivers</h3><pre> + +Removes the %Fax% IODevice code, since it was only a skeleton and Adobe no +longer supports this facility. (devs.mak, gdevpfax.c [deleted]) + +</pre><h3><a name="5.37_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - TrueType fonts whose first code wasn't 0 or 0xf000 didn't display +correctly. (bug introduced in 5.36) (gs_ttf.ps) + - CIDFontType 0 fonts didn't handle being redefined with another +name. (gs_cidfn.ps) + - CIDFontType 0 fonts could get local-into-global-store errors. +(gs_cidfn.ps) + - PDF files couldn't use already-defined CMap resources. +(pdf_font.ps) + - Out-of-range CIDs gave an error rather than using a notdef +character. (gs_cidfn.ps) + +</pre><h3><a name="5.37_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - CIDFontType 4 fonts weren't recognized as CID-keyed. (zchar2.c, +zchar32.c, zfont32.c) + - When recovering from an error in an operator procedure, the +interpreter didn't update the dictionary stack caches. (interp.c) + - startjob didn't reinitialize the stacks or VM space. (gs_lev2.ps) + - Encoding filters with a Predictor always caused an error. +(zfilter2.c) + - currenttrapparams gave an error. (gs_ll3.ps) + - settrapparams had no effect, and left the dictionary on the stack. +(gs_ll3.ps) + +Finishes implementing Type 32 fonts. These fonts don't actually work +directly with the cache -- they store the bitmaps in a compressed form in an +ordinary Dictionary -- but they do behave the way they are specified. +(gs_typ32.ps, zchar32.c, zfont32.c) + +Cleans up formatting and macros in a few more files. (ccfont.h, icharout.h, +icstate.h, iutil.h, iutil2.h, ibnum.c, iccfont.c, iccinit0.c, ilocate.c, +isave.h, isave.c, iscannum.c, iutil.c, iutil2.c) + +Removes or capitalizes a few more macros. (zcontext.c, zcssepr.c, +zusparam.c) + +</pre><h3><a name="5.37_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Color spaces with subsidiary spaces (Indexed, Separation, DeviceN) +sometimes didn't work properly, because they were translated to PostScript +structures more than once. (pdf_draw.ps) + - Type 3 fonts didn't rebind the resource context when executing the +CharProc procedure. (pdf_font.ps) + +</pre><h3><a name="5.37_Streams"></a>Streams</h3><pre> + +Fixes problems: + - The CCITTFax decoder signaled an error if it saw an EOB with +EndOfBlock = false. (According to e-mail from Adobe, EOBs should be +recognized even if EndOfBlock is false, even though the Red Book implies the +opposite.) (scfd.c) + +Cleans up macros and formatting in a few more files. (slzwce.c, sfxfd.c, +sfxstdio.c) + +</pre><h3><a name="5.37_Library"></a>Library</h3><pre> + +Fixes problems: + - Landscape color images usually didn't display. (bug introduced in +5.32) (gxicolor.c) + - If gs_heap_free_object was called with ptr != 0 but bp = 0 (which +is an error), an invalid memory access would occur. (gsmalloc.c) + - The left side bearing was still being added in a second time for +the accent of a seac. (bug probably introduced in 5.20) (gxtype1.c) + - An access error occurred when rendering the very last glyph of a +TrueType font with a 2-byte loca table. (gstype42.c) + - In the fast portrait case of monochrome images, a numerical error +sometimes produced a 1-bit-wide vertical stripe of an incorrect color at the +right edge of the image. (gxifast.c) + - ImageType 3 images with InterleaveType = 3 gave memory access +errors. (gximage3.c) + - Hit detection ignored any part of the aperture that had negative X +or Y coordinates. (gdevhit.c) + - The special color mapping device didn't copy all necessary values +back from its target. (gxdevice.h, gdevbbox.c, gdevcmap.c, gsdevice.c) + - The special color mapping device didn't handle ordinary (Type 1) +images correctly. (gdevcmap.c) + - CMYK halftones complemented both the color and the halftone level: +this produced the right number of pixels turned on (only for linear spot +functions or threshold arrays), but wasn't consistent with either the Adobe +specification or the user's intentions. (gxcht.c) + - The phase of mask Patterns wasn't always set correctly. +(gxp1fill.c) + - The reader side of overlapped band devices was confused about its +open/closed status. (gdevprna.c) + +Renames Type 32 fonts from ft_bitmap to ft_CID_bitmap. (gxftype.h) + +Adds some more tracing for composite font decoding. (gsfcmap.c) + +Adds some more tracing for images. (gxiinit.c) + +Cleans up formatting and macros in a few more files. (gxifast.c) + +Moves the image*_type_data and image*_enum_procs_data definitions from +header files into more appropriate .c files. (gsiparm2.h, gsiparm3.h, +gsiparm4.h, gxiparam.h, gxiinit.c, gximage2.c, gximage3.c, gximage4.c) + +</pre> + +<hr> + +<h2><a name="Version5.36"></a>Version 5.36 (beta) (8/25/98)</h2> + +<p> +Another set of fixes. The free-standing bbox device now produces convenient +%%BoundingBox messages. This fileset also includes support for double-byte +TrueType fonts. + +<h3><a name="5.36_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - There was a minor spacing glitch in one man page. (gs.1) + - The page printed by align.ps didn't make it clear enough what to +do with the numbers it asks users to calculate. (align.ps) + - The sample code for adding gamma adjustment didn't work most of +the time. (devices.txt) + - The prolog produced by pswrite was completely uncommented. +(gdevps.c) + - The documentation didn't note that the string block freelist +(sfree) is sorted in address order. (gxalloc.h) + +Notes that FirstBitLowOrder and LowBitFirst are equivalent. (slzwx.h) + +Notes a change in the FTP site of the free Kanji ("Wadalab") fonts. +(fonts.txt) + +Adds a pointer to the freely available Unicode CMaps. (fonts.txt) + +Changes an obsolete e-mail address for Carsten Emde. (contrib.mak) + +</pre><h3><a name="5.36_Utilities"></a>Utilities</h3><pre> + +Fixes problems: + - The viewgif utility sometimes left 1-scan-line gaps when rendering +interlaced images. (viewgif.ps) + +</pre><h3><a name="5.36_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - In the PDF writer, downsampled images were always written with 8 +bits per sample, not the requested depth. (gdevpsdi.c) + - The 8-to-N-bit compression filter produced an extra byte at the +end of each row, and the N-to-8-bit expansion filter skipped an input byte +at the end of each row. (gdevpsds.c) + - In the PDF writer, the size of downsampled images for changing the +pixel width was set incorrectly, leading to inconsistent image parameters in +the output. (gdevpsdi.c) + - The subsampling filters didn't take a clear position about what to +do with excess input samples beyond a multiple of the reduction factor, +leading to inconsistent image parameters. We added a Boolean to indicate +whether they should discard the samples or use them to create an additional +output sample. (gdevpsds.h, gdevpsdi.c, gdevpsds.c) + - The subsampling filters didn't provide the necessary set_defaults +procedures. (gdevpsds.h, gdevpsds.c) + - Because of a typo, pdfwrite and pswrite printed sequences of 4 +decimal values wrong. (bug introduced during macro removal in 5.25) +(gdevpstr.c) + +Makes the PS writer produce a %%HiResBoundingBox as well as a %%BoundingBox. +(gdevps.c) + +</pre><h3><a name="5.36_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - The Borland makefile didn't include the MT libraries. We added a +MULTITHREAD option to this makefile. (bcwin32.mak) + - The MSVC makefile didn't include the MT switches in the right +place. (msvccmd.mak) + - 'make clean' in the Windows makefiles didn't clean up quite +enough. (bcwin32.mak, msvc32.mak, msvccmd.mak) + - The OS/2 makefile had gotten slightly out of date. (os2.mak) + +Cleans up some formatting. (gp_win32.c) + +</pre><h3><a name="5.36_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - Loading large TrueType fonts caused excessive garbage collection. +(gs_ttf.ps) + +Finishes implementing support for turning double-byte TrueType fonts into +CIDFontType 2 fonts. (gs_ttf.ps) + +</pre><h3><a name="5.36_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - We thought the dictionary returned by currentuserparams should +always be allocated in local VM, but in fact the correct definition is that +it should be allocated in the current VM. The simplest way to make this +work is for setuserparams to copy any string values into global VM. +(gs_lev2.ps) + - 1-input stitching functions didn't allow k = 0. (ifunc.h, +zfunc.c) + - OtherSubrs defined in PostScript no longer worked. (bug probably +introduced when we rewrote the Type 1 code in C) (zchar1.c) + +Cleans up a few compiler warnings (missing empty 'default' cases, unused +variables). (igc.c, iname.c) + +Replaces some uses of RELOC_*_PTR (now deprecated) with RELOC_*_VAR. +(isave.c, iscan.c) + +</pre><h3><a name="5.36_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Resources were re-created on each page, causing (sometimes a lot +of) unnecessary computation. We implemented most of the machinery for +avoiding this, but not the mechanism for actually storing resources in +global VM. (pdf_base.ps, pdf_main.ps) + +Adds a little more debugging code. (pdf_draw.ps) + +</pre><h3><a name="5.36_Streams"></a>Streams</h3><pre> + +Cleans up formatting in a few more files. (sbtx.h, sfilter.h, slzwx.h, +spngpx.h, srlx.h, sstring.h, seexec.c, sfilter1.c, sfilter2.c, smtf.c, +spcxd.c, srld.c, srle.c) + +Replaces a couple of #defines with duplicated (small) structures. (sbtx.h, +sfilter.h, sfilter1.c, sfilter2.c) + +Replaces all uses of RELOC_*_PTR (now deprecated) with RELOC_*_VAR. +(stream.c) + +</pre><h3><a name="5.36_Library"></a>Library</h3><pre> + +Fixes problems: + - If a garbage collection occurred during a string show operation, +memory could be corrupted. (bug introduced in 5.24) (gstext.h, gstext.c) + - A debugging check incorrectly indicated an error when +miter-checking lines with a 0 degree angle between them. (gxstroke.c) + - A structure created for bitmap/pixmap patterns was never freed. +(gspcolor.c) + - Colored halftones didn't work with 24-bit devices. (This case was +never actually used.) (gxcht.c) + - CIE colors didn't remap properly if the current color space was a +Pattern space. (gscie.c) + - In a non-garbage-collected environment, freeing a string in the +current chunk made an unnecessary test. (Minor performance impact only.) +(gsnogc.c) + +Cleans up a few compiler warnings (missing empty 'default' cases, unused +variables). (gsht.c, gsht1.c, gshtscr.c, gsimage.c, gxacpath.c, gxclread.c, +gxicolor.c, gxshade4.c) + +Replaces some uses of RELOC_*_PTR with RELOC_*_VAR. (gsht1.c) + +Changes the printed output of the free-standing bbox device so it produces +%%BoundingBox and %%HiResBoundingBox lines that can be dropped directly into +a DSC header. (gdevbbox.c) + +Speeds up the 4-bit case of copy_mono by about 30%. (gdevm4.c) + +Expands some macros and cleans up formatting, for easier reading and +debugging. Speeds up the color halftone generation algorithm substantially +(up to 40%), by skipping the halftone computation for planes that are known +to be solid-color, and using copy_mono directly if only one plane is not +solid-color. (gxcht.c) + +</pre> + +<hr> + +<h2><a name="Version5.35"></a>Version 5.35 (beta) (8/18/98)</h2> + +<p> +More updates for 5.3x, specifically fixing problems with halftones on banded +CMYK devices. + +<h3><a name="5.35_Documentation"></a>Documentation</h3><pre> + +Fixes problems: + - The URLs for the third-party libraries were out of date. +(make.txt, jpeg.mak, libpng.mak, zlib.mak) + +</pre><h3><a name="5.35_Drivers"></a>Drivers</h3><pre> + +Adds an x11gray4 device for help in debugging. (devs.mak, gdevxalt.c) + +</pre><h3><a name="5.35_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - TrueType fonts with more than 64K of data before or after the +glyfs caused an error. (gs_ttf.ps) + +</pre><h3><a name="5.35_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The dictionary returned by currentuserparams was allocated in the +current VM rather than always in local VM. (gs_lev2.ps) + +</pre><h3><a name="5.35_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - CID-keyed fonts caused an error, because their CDevProc was +incorrect. (pdf_font.ps) + +</pre><h3><a name="5.35_Library"></a>Library</h3><pre> + +Fixes problems: + - A comment was duplicated. (gxht.h) + - The main procedure of the command list reader was so large that it +couldn't be optimized by many compilers, and was very hard to read. +(gxclrast.c) + - Banding devices using multi-screen halftones could get memory +access errors because they didn't clear the halftone caches when changing +halftone parameters. (gxclrast.c) + - Banding devices using multi-screen halftones didn't set the +halftone phase correctly. (gxcht.c, gxclrast.c) + - RasterOp didn't work for 2- or 4-bit gray-scale devices. It still +doesn't work right, but it's closer. (gdevm2.c, gdevm4.c, gdevmrop.c) + - Undefined characters in CMap-based composite fonts caused errors +and possible invalid memory accesses. (gschar0.c) + +</pre> + +<hr> + +<h2><a name="Version5.34"></a>Version 5.34 (beta) (8/16/98)</h2> + +<p> +More updates for 5.3x. + +<h3><a name="V5.34_Documentation"></a>Documentation</h3><pre> + +Updates all of the man pages to new versions. (gs-vms.hlp, gs.1, pdf2dsc.1, +pdf2ps.1, ps2ascii.1, ps2epsi.1, ps2pdf.1, ps2ps.1) + +</pre><h3><a name="V5.34_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The MSVC library makefile incorrectly included gp_msio.c. +(msvclib.mak, winlib.mak) + +</pre><h3><a name="V5.34_Drivers"></a>Drivers</h3><pre> + +Fixes problems: + - The PDF writer unnecessarily checked for other parameters after a +failing show or pdfmark. (gdevpdfp.c) + - The device's BufferSpace parameter was ignored. (bug introduced +by async rendering code in 5.30) (gdevprn.c) + - Banding devices smashed the first 4 bytes of each scan line. (bug +introduced in 5.28) (gxdevmem.h, gdevmem.c, gxclread.c) + - The phase for colored halftones was set wrong. (We have "fixed" +this innumerable times, and it is still probably wrong.) (gxclrast.c) + +Replaces the deprecated gx_device_image_xxx calls with the new gx_image_xxx +calls. (gdevpdfi.c, gdevps.c, gdevpx.c, gdevvec.c) + +</pre><h3><a name="V5.34_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - The equality test for idiom recognition sometimes incorrectly +returned false. (zmisc3.c) + - shfill didn't take the BBox into account. (It still doesn't.) +(gxshade.c) + - The status operator could return an incorrect pages or bytes value +for files larger than 2 Gb, rather than giving an error. (zfile.c) + +</pre><h3><a name="V5.34_Library"></a>Library</h3><pre> + +Fixes problems: + - The hint tables weren't reset after processing the base character +of a 'seac', leading to incorrect hinting and (for Type 2 CharStrings) +possible mis-parsing of the outline data. (gstype2.c) + - When processing a 'seac', the left side bearing was added in +twice, displacing characters to the right. (bug probably introduced in +5.20) (gstype1.c) + - RasterOps didn't set the size of the RasterOp texture device, +which caused filling operations involving a colored halftone to be clipped +to an empty rectangle. (gdevrops.c) + - When filling with a colored halftone, the RasterOp source was +often disregarded. (gxcht.c) + - gx_device_image[_plane]_data and gx_device_end_image took an +unused dev argument, leading to potential confusion. We deprecated the +gx_device_image_plane_data and gx_device_end_image procedures, replacing +them with macros that call their replacements gx_image_plane_data and +gx_image_end (which no longer have the spurious dev argument). (gxdevcli.h, +gxdevice.h, gxiparam.h, gdevbbox.c, gdevddrw.c, gdevdflt.c, gsimage.c, +gslib.c, gxclimag.c, gxclrast.c, gximage2.c, gximage3.c, gximage4.c) + - gs_color_adjust_count, introduced in 5.33 to address the problem +of freeing free-standing patterns, just made things worse. We are replacing +them with gs_pattern_reference, essentially the procedure introduced in 5.31 +that we deleted in 5.33. (gsccolor.h, gspcolor.h, gscolor.c, gspcolor.c) + +Changes hint suppression from a #define to a debugger-settable static. +(gxhint1.c) + +</pre> + +<hr> + +<h2><a name="Version5.33"></a>Version 5.33 (beta) (8/14/98)</h2> + +<p> +This is the third set of updates for 5.30. These updates have been driven +mostly by the needs of another Aladdin project, so they haven't included as +many problem fixes as we would normally make. + +<h3><a name="V5.33_Platforms"></a>Platforms</h3><pre> + +Fixes problems: + - The thread creation procedure for Win32 called a Windows function +rather than the proper C library function. (gp_win32.c) + - In some MS-DOS implementations, the copy command doesn't recognize +the /Y switch. (bcwin32.mak) + +</pre><h3><a name="V5.33_Fonts"></a>Fonts</h3><pre> + +Fixes problems: + - TrueType fonts with *less* than 64K of glyf data stopped working. +(bug introduced in 5.31) (gs_ttf.ps) + +</pre><h3><a name="V5.33_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Using an Identity function left an extra element on the stack. +(pdf_draw.ps) + - The syntax of # in names is different in PDF 1.1 and PDF 1.2, but +the PDF 1.2 syntax was always used. (pdf_base.ps, pdf_main.ps) + +</pre><h3><a name="V5.33_Library"></a>Library</h3><pre> + +Fixes problems: + - Color images still always caused an error. (bug introduced in +5.32) (gxicolor.c) + - Because of a typo, the implementation of image types didn't +compile. (bug introduced in 5.32) (gxiparam.h) + - Free-standing colors (specifically pattern colors) and color +spaces couldn't be freed. This required a NON-BACKWARD-COMPATIBLE change in +an internal API used for managing color and color space reference counts. +(gxcspace.h, gsccolor.h, gscdevn.c, gscolor.c, gscolor2.c, gscscie.c, +gscsepr.c, gscspace.c, gspcolor.c) + +Cleans up a little more formatting. (gscspace.h) + +</pre> + +<hr> + +<h2><a name="Version5.32"></a>Version 5.32 (beta) (8/13/98)</h2> + +<p> +This is the second set of updates for 5.30. + +<h3><a name="V5.32_Procedures"></a>Procedures</h3><pre> + +Fixes problems: + - The OS/2 makefile accidentally omitted the OS/2-PM driver. +(os2.mak) + - The MSVC library makefile didn't work. (msvclib.mak) + - Debugging was turned on in the Borland Windows makefile. +(bcwin32.mak) + - The BEGINFILES2 list was too long in the MSVC makefile. +(msvc32.mak) + +</pre><h3><a name="V5.32_Interpreter"></a>Interpreter</h3><pre> + +Fixes problems: + - .execn wouldn't accept pseudo-operators. (iref.h) + - inustroke with a matrix operand didn't work correctly. (zupath.c) + - ImageType 4 images didn't work. (bug introduced in 5.31) +(zimage3.c) + +</pre><h3><a name="V5.32_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes problems: + - Forms used more than once caused an invalidaccess error. +(pdf_draw.ps) + +</pre><h3><a name="V5.32_Library"></a>Library</h3><pre> + +Fixes problems: + - Using a colored pattern with a Pattern color space that included a +base space could access uninitialized floating point values, possibly +causing an arithmetic trap. (gspcolor.c) + - RasterOp wasn't implemented for 16- and 32- bit devices. +(gdevm16.c, gdevm32.c, gdevmrop.c) + - The library test program relied on copysign, which some C +libraries lack. (gslib.c) + - The gs_free and gs_heap_free_all debugging printout were included +even if DEBUG wasn't defined. (bug introduced in 5.30) (gsmalloc.c) + - Color images always caused an error. (bug introduced in 5.30) +(gxicolor.c) + - Masked images with pis = NULL could cause an error. (gximono.c) + - In landscape orientation, masked images didn't guarantee that the +buffer of mask scan lines would be flushed to the mask clipping device +before processing the data being masked. (gxiparam.h, gxidata.c, gxifast.c, +gximage3.c) + - Images with source transparency set but CombineWithColor = false +could get an error because of trying to paint with an unloaded +color. (caused by a bug fix in 5.30) (gxdcolor.c, gxiinit.c) + +</pre> + +<hr> + +<h2><a name="Version5.31"></a>Version 5.31 (limited) (8/11/98)</h2> + +<p> +This is the first set of updates for 5.30. They fix a few minor build +problems, and some significant problems with bitmap patterns that do not +affect the PostScript or PDF interpreters. + +<h3><a name="V5.31_Drivers"></a>Drivers</h3><pre> + +Moves some casting macros from generic files to the few specific files that +use them. (gdev4693.c, gdevn533.c, gdevsnfb.c) + +</pre><h3><a name="V5.31_Interpreter"></a>Interpreter</h3><pre> + +Changes ImageType 4 images to match the change in the library interface. +(zimage3.c) + +</pre><h3><a name="V5.31_Library"></a>Library</h3><pre> + +Fixes bugs: + - The MaskColor elements of ImageType 4 images were defined as int +rather than uint, truncating the range by 1 bit and causing problems in +comparing the mask color against the pixel samples. (gsiparm4.h, +gximage4.c) + - A needed cast was missing from gs_malloc_memory_release. +(gsmalloc.h) + - A needed cast from byte to char was missing. (gsparams.c) + - Patterns always allocated a mask for rendering, which for large +patterns specified directly as bitmaps allocated a lot of unnecessary +memory. (gxcolor2.h, gspcolor.c, gxp1fill.c, gxpcmap.c) + - Macros simply defining casted versions of variables made the code +hard to debug. We have only removed the ones that are in generic code (not +drivers) and that cast pointers to gx_device or its subclasses: the only +ones removed from header files were prn_dev in gdevprn.h, mdev in gdevmem.h, +and ccdev, crdev, and cwdev in gxcldev.h. gdevmem.h, (gdevprn.h, gxclist.h, +gdevabuf.c, gdevm1.c, gdevm2.c, gdevm4.c, gdevm8.c, gdevm16.c, gdevm24.c, +gdevm32.c, gdevmpla.c, gdevnfwd.c, gdevprn.c, gxacpath.c, gxclimag.c, +gxclist.c, gxclpage.c, gxclpath.c, gxclread.c, gxclrect.c) + - There was no way to free a pattern instance outside the graphics +state. (gspcolor.h, gspcolor.c) + +</pre> + +<hr> + +<h2><a name="Version5.30"></a>Version 5.30 (limited) (8/10/98)</h2> + +<p> +This is the first beta candidate for the 5.50 release. It completes the +merge of the overlapped rasterizing code into the main development line. + +<h3><a name="V5.30_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - Yves Arrouye's e-mail address was out of date. (gdevbjc.h, +gdevcdj.c, contrib.mak, devices.txt, unix-lpr.txt) + +Makes the warning against using SHARE_JPEG=1 even stronger. (make.txt, +dvx-gcc.mak, ugcclib.mak. unix*.mak) + +Removes information about using DCL files on VMS to build Ghostscript. +(make.txt) + +Updates the documentation for begin_typed_image. (drivers.txt) + +</pre><h3><a name="V5.30_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The Unix build procedure didn't create the obj subdirectory +automatically. (unixhead.mak, unix-end.mak) + - gsdll_h wasn't defined for the OS/2 PM device. Fixing this +properly required moving the OS/2 drivers into the same makefile as the MS +Windows drivers, and renaming the file. (devs.mak, msdevs.mak => pcwin.mak, +winlib.mak) + - gsiparm4_h was used before it was defined. (lib.mak) + - Building with shared libaries still used header files in +Ghostscript's directories, not the ones in /usr/include. ****** NOT DONE +YET ****** + - The makefiles all assumed they were located in the current +directory, not in the source directory. (*.mak) + +Adds new 'debugclean' and 'pgclean' targets, parallel to 'debug' and 'pg', +for the Unix platforms. (unix-end.mak) + +Changes the management of .dev files so that on Unix platforms, one can +really maintain standard, debugging, and profiling builds simultaneously. +This is a hack, but a fairly reliable one. (gs.mak, unixhead.mak, +unix-end.mak) + +Adds a dummy thread / semaphore / monitor implementation to all platforms +other than Windows. (dvx-tail.mak, openvms.mak, os2.mak, ugcclib.mak, +unixtail.mak, watc.mak, watclib.mak) + +</pre><h3><a name="V5.30_Drivers"></a>Drivers</h3><pre> + +Updates driver support to use the new write-position stream. (gdevpsdf.c) + +</pre><h3><a name="V5.30_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The Windows Registry calls didn't deal properly with a null +pointer. (gp_wgetv.c) + +Makes a small change in the platform semaphore / monitor API. (gpsync.h, +gxsync.h, gp_win32.c, gxsync.c) + +Adds a dummy thread / semaphore / monitor implementation. Note that with +this implementation, async rendering WILL NOT WORK. (gp_nsync.c) + +Adds pthreads thread creation and POSIX semaphores for Unix platforms. (We +still need to add System V semaphores, which is all that is available on +Solaris and BSDI.) (gp_semon.c, gp_posem.c, gp_pthr.c). + +</pre><h3><a name="V5.30_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - CIDFontType 0 fonts didn't select the proper VM space for adding +entries to font dictionaries, and for loading Subrs strings. (gs_cidfn.ps) + - TrueType fonts with an odd glyfs length didn't work. (gs_ttf.ps) + - TrueType fonts with a Format 3 'post' table didn't work. +(gs_ttf.ps) + - TrueType fonts where the encoding in the 'post' table didn't cover +the entire set of glyfs didn't work. (gs_ttf.ps) + - TrueType fonts with more than 128K of glyfs didn't work. +(gs_ttf.ps) + - TrueType cmap format 6 didn't work. (gs_ttf.ps) + - CIDFontType 0 fonts with hex data didn't skip over the > at the +end of the data. (gs_cidfn.ps) + +</pre><h3><a name="V5.30_Interpreter"></a>Interpreter</h3><pre> + +Works around the fact that gs_shfill can't do a gs_setcolorspace for color +spaces that require interpreter assistance. (gs_ll3.ps) + +Moves clipsave and cliprestore to C code. (gs_ll3.ps, zmisc3.c) + +Updates some files to reflect the redivision of gsmemory.h and gsstruct.h. +(imemory.h, istruct.h, ialloc.c) + +</pre><h3><a name="V5.30_Streams"></a>Streams</h3><pre> + +Adds a stream that just keeps track of the write position. (stream.h, +stream.c) + +Removes the compilation dependency that required all clients of the zlib +filters to be compiled with the zlib source directory in the search path. +(szlibx.h, szlibxx.h, szlib[cde].c) + +</pre><h3><a name="V5.30_Library"></a>Library</h3><pre> + +Fixes bugs: + - ImageType 4 images with >1 input component didn't work. +(gximage4.c) + - Sampled functions didn't keep the fractional part when +interpolating, possibly leading to infinite recursion in shading. +(gsfunc0.c) + - The color error value for shadings was computed incorrectly for +CIE color spaces. (gxshade.c) + - The CharstringType 2 'roll' operator rolled the operands in the +wrong direction. (gstype2.c) + - Images with RasterOp or transparency didn't retain the current +color properly, leading to unpredictable results. (gdevmrop.h, gsropt.h, +gdevddrw.c, gdevrops.c, gxdcolor.c, gxiinit.c, gximage3.c) + - A cast to void * was needed to remove a const modifier. +(gscrdp.c) + - On 8-bit non-gray-scale devices, RasterOp values of all-0s or +all-1s produced the wrong output. (gdevmrop.c) + - The GC procedure for halftone screen enumerators was wrong, +possibly causing invalid memory access errors. This bug predates 5.10. +(gshtscr.c) + - An extra pair of string quotes confused some compilers. +(gsshade.c) + - There were several errors in the CharstringType 2 'flex' +operators. (gstype2.c) + - The structure descriptors for devices weren't initialized in +library-only configurations. (int.mak, gconf.c) + - The Pattern cache got confused if the current device when a +Pattern color was used wasn't the same as the current device when the +Pattern instance was created. (gxpcmap.c) + - The target of forwarding devices wasn't reference-counted +properly. (gsdevice.c) ****** FIXING THIS PROPERLY WILL BE A LOT OF WORK: +WE ONLY FIXED gs_setdevice_no_erase ****** + - As a result of fixing a typo, the structure declaration for +gx_page_queue was private, causing clients not to compile. We left it +private and added an instance allocation procedure. (gxpageq.h, gdevprna.c, +gxpageq.c) + - The mask for ImageType 3 images was clipped (incorrectly). +(gximage3.c) + - Interpolated images with negative X->X values in the CTM were +displaced on the page. (gxiscale.c) + +Finishes integrating the asynchronous rendering code. (gpsync.h, gxclist.h, +gdevprna.c, gsmemlok.c, gxclimag.c, gxclpath.c, gxclutil.c) + +Updates the memory manager API for additional flexibility needed for +asynchronous rendering. (gsmalloc.h, gsmemlok.h, gsmemraw.h, gsalloc.c, +gsmalloc.c, gsmemlok.c) + +Updates the standard memory manager to work with a fixed (externally +supplied) set of chunks, needed for asynchronous rendering, removing some +macros in the process. (gsalloc.h, gsalloc.c) + +Updates some code to use more mnemonic variable names. (gstype2.c, +gxicolor.c) + +Removes some macros for better readability. (gdevmrop.c) + +Adds dummy implementations of clipsave and cliprestore. (gsclipsr.h, +gsclipsr.c) + +Implements an alternative, but completely untested, parameter list +serializer based on streams. (gsparam2.c) + +Moves more of the internal memory manager structures from gsmemory.h to +gsstruct.h. (gsmemory.h, gsstruct.h, gsmemory.c) + +</pre> + +<hr> + +<h2><a name="Version5.28"></a>Version 5.28 (limited) (8/3/98)</h2> + +<p> +This fileset almost finishes merging in the code for overlapped +("asynchronous") interpretation and rasterizing that gave rise to the +side-branch versions 5.13 and 5.14; eliminates all initialized non-constant +globals from the graphics library (but not from the interpreter); and adds a +few more LanguageLevel 3 features (CIEBasedDEF[G] color spaces, CloseSource +and CloseTarget for streams, Separation base space for Indexed color +spaces). + +<p> +We were not originally planning to produce another fileset until the code +merge was completed; however, the schedule demands of another Aladdin +project justify another intermediate fileset. + +<h3><a name="V5.28_Documentation"></a>Documentation</h3><pre> + +Notes that the MSVC++ 5.0 compiler may lock up when compiling gxi12bit.c +with optimization. (make.txt) + +</pre><h3><a name="V5.28_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - psl3 didn't include fzlib. (int.mak) + - The Windows makefile had the wrong name for a DLL. (winint.mak) + - The Borland Windows makefile had several errors. (bcwin32.mak) + +At the request of a user, changes the creation of jconfig.h so it #includes, +rather than copies, arch.h. (jpeg.mak, gsjconf.h) + +</pre><h3><a name="V5.28_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - viewpbm.ps scaled the image wrong. (viewpbm.ps) + +</pre><h3><a name="V5.28_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - clist_close was declared as an open proc rather than a close proc. +(As it happens, this didn't make any difference.) (gxclist.c) + - A comment was improperly terminated. (gxpageq.h) + - A needed #include of memory_.h was missing. (gdevpsde.c) + +Integrates nearly all the rest of the code for asynchronous rendering. +(gdevprn.h, gdevprna.h, gxcldev.h, gxclist.h, gxclpath.h, gxclmem.h, +gdevbmpa.c, gdevprn.c, gdevprna.c, gxclbits.c, gxclimag.c, gxclist.c, +gxclmem.c, gxclpath.c, gxclread.c, gxclrect.c) + +Changes tracing of memory-based clists to occur only if -Z: is selected, +rather than always if the code was compiled with -DDEBUG. Note that this is +a NON-BACKWARD-COMPATIBLE CHANGE (but only affects debugging). (gxclmem.c) + +Implements the NumCopies parameter for all page devices, not just printers. +(gxdevcli.h, gxdevice.h, gdevprn.c, gsdparam.c) + +Splits off command list writing utilities into a separate file, since +gxclist.c was getting too large. (gxclist.h, gxclist.c, gxclutil.c) + +Splits command list reading into control (gxclread.c) and the actual list +interpreter (gxclrast.c), since the file was getting too large. (gxcldev.h, +gxclrast.c, gxclread.c) + +Distinguishes dev_proc_* (defining a general driver procedure) from +prn_dev_proc_* (defining a printer driver procedure). Unfortunately, we +have to keep dev_proc_print_page and _print_page_copies for backward +compatibility. (gdevprn.h) + +Splits out of the BMP driver the parts shared with the async version +(gdevbmp.h, gdevbmp.c, gdevbmpc.c). + +Changes the band rasterizer to implement get_bits_rectangle rather than +get_bits. In some cases, this results in much less computation. +(gxclist.c, gxclread.c) + +Makes the monochrome H-P printer drivers emit a printer reset when closing +the device. According to a user, this helps prevent the ink nozzles from +clogging. (gdevdjet.c) + +</pre><h3><a name="V5.28_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The Windows DLL entry point procedure didn't return a value as it +was supposed to. (gp_mswin.c) + +Removes all remaining initialized but non-constant globals, and ensures that +all non-debugging-related BSS variables in the library are explicitly set to +0 at initialization time. (gp_unix.c) + +Improves an error message slightly. (dwmainc.cpp) + +</pre><h3><a name="V5.28_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The tracing code for restore_resources could access an invalid +address. (isave.c) + - sizeof(procedure) is not allowed in ANSI C++. (opdef.h, +iccfont.c, interp.c, ireclaim.c) + - A variable was declared incorrectly as bin_token_type_t rather +than bin_seq_type_t. (iscanbin.c) + - The behavior of copypage didn't change in LanguageLevel 3. +(gs_init.ps) + - When grestore et al reactivated a page device, they performed an +initgraphics, which should only be performed by showpage. (gs_setpd.ps) + - The RunLengthEncode filter was broken in cases where the caller +supplied a record size. (bug introduced in 5.2x) (zfilter.c) + - A needed #include of memory_.h was missing. (zfreuse.c) + - On machines with sizeof(long) > sizeof(int), the dictionary form +of image and imagemask didn't work. (bug introduced in 5.2x) (zimage2.c) + - exitserver left a 'true' on the operand stack. (gs_lev2.ps) + +Replaces the STACK_LOOP_BEGIN/END macros with procedures. (We retain the +macros for backward compatibility.) (istack.h, istack.c, zchar.c, +zcontrol.c, zdict.c, zvmem.c) + +Reviews the remaining operator files for ease of reading / debugging, +including removing macros where appropriate. (z*.c) + +Changes the dictionary stack printer to indicate whether the dictionary is +allocated in global or local VM. (gs_init.ps) + +Redefines countexecstack and execstack as operators, solely for the sake of +the Genoa [count]execstack tests. (gs_init.ps, zcontrol.c) + +Changes array/string/packedarray forall not to keep an index on the stack, +solely for the sake of the Genoa [count]execstack tests. (zgeneric.c) + +Finishes implementing CIEBasedDEF[G] color spaces. (icie.h, zcie.c) + +Adds a ColorSpace resource instance for sRGB. (gs_lev2.ps, gs_res.ps) + +Implements CloseSource and CloseTarget for filters. ****** DOESN'T WORK IF +AN EXCEPTION OCCURS DURING A NESTED CLOSE. ****** (zfile.c) + +Allows Separation and DeviceN color spaces as the base space for an Indexed +color space. (zcsdevn.c, zcsindex.c, zcssepr.c) + +</pre><h3><a name="V5.28_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - In PDF files, Indexed color spaces with a CIEBasedABC base space +gave an /undefined error. (pdf_draw.ps) + +</pre><h3><a name="V5.28_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The report_error member of the DCT streams wasn't initialized +early enough. (ifilter.h, zfdctd.c, zfdcte.c, zfile.c) + +Changes the zlib filters to use the stream's allocator, rather than the +default allocator, for their private storage. Note that this requires the +stream itself to keep pointers to this storage, for garbage collection. +(szlibx.h, szlibc.c, szlibd.c, szlibe.c) + +Updates some clients to use new, simpler GC structure descriptors. (sdct.h, +sfilter.h, sdctc.c, sfilter1.c) + +Adds a close_strm member for the interpreter's use (CloseSource / +CloseTarget). (stream.h, stream.c) + +</pre><h3><a name="V5.28_Library"></a>Library</h3><pre> + +Fixes bugs: + - gstate, currentgstate, and setgstate didn't handle the effective +clip path properly, possibly leading to dangling pointers. (gsstate.c) + - setrasterop, setsourcetransparent, and settexturetransparent +should all return int rather than void, since they can fail. (gsrop.h, +gsrop.c) + - FunctionType 1 functions didn't clip the output value to the +Range. (gsfunc3.c) + - A needed cast from byte * to char * was missing. (gscrdp.c) + - Some needed #includes of *_.h were missing. (gscrd.c, gscrdp.c, +gxshade6.c) + - The prototype for gx_effective_clip_path wasn't #included in a +needed place. (gsimage.c) + - RasterOp sometimes didn't work properly for devices whose +representation of white wasn't a pixel value of 0. (gxdcolor.h, gdevbbox.c, +gdevdbit.c, gdevvec.c, gslib.c, gxdcolor.c) + - The variable used to detect double declaration of +gs_get_bits_params_t was named incorrectly. (gxdevcli.h, gxgetbit.h) + - gs_[eo]clip never retained the clipping path in its original form. +These routines now retain it in the simple case (the old clipping path is a +rectangle, and the new path is completely contained within it). This +requires a small NON-BACKWARD-COMPATIBLE change in the gx_cpath_intersect +procedure: it no longer updates the new path, and it flattens the path if +needed. To avoid problems, we renamed this procedure as gx_cpath_clip. +(gsdps.c, gspath.c, gxcpath.c) + - If the image was empty, gs_image_common_init didn't free the +lower-level enumerator. (gsimage.c, gxccache.c) + +Removes all remaining initialized but non-constant globals, and ensures that +all non-debugging-related BSS variables in the library are explicitly set to +0 at initialization time. (gxdevice.h, gconf.c, gsdevice.c, gshtscr.c, +gsiodev.c, gsutil.c, gxcht.c) + +Finishes implementing table-driven GC descriptors. We expected it to save +considerable space at negligible time cost; it actually shrank the 1Mb +executable by only about 5K, and slowed down garbage collection by about +2%. (gsfcmap.h, gsstrtab.h [deleted], gsstruct.h, gzpath.h, gsfcmap.c, +gsmemory.c, gsstrtab.c [deleted]) + +Finishes implementing CIEBasedDEF[G] color spaces. (gscie.h, gscie.c) + +Simplifies some code by removing or redefining macros. (gxi12bit.c) + +Removes all patches made for easier retrofitting of 5.2x code into 5.1x +filesets. (gdevdrop.c, gdevmrop.c, gslib.c, gspcolor.c) + +Reviews a few more files for style and readability. (gxbitfmt.h, +gxgetbit.h) + +Allows Separation (and, if included, DeviceN) color spaces as the base space +of an Indexed color space. Unfortunately, this involves introducing a new +distinction in color space types, which entails NON-BACKWARD-COMPATIBLE +changes in the color space and color space type structures. (gxcspace.h, +gscdevn.c, gscolor1.c, gscolor2.c, gscpixel.c, gscscie.c, gscsepr.c, +gscspace.c, gspcolor.c) + +Makes a small addition in order to fix an interpreter bug. (gxfixed.h, +gdevbbox.c) + +</pre> + +<hr> + +<h2><a name="Version5.27"></a>Version 5.27 (limited) (7/18/98)</h2> + +<p> +This is another "in-flight" snapshot made in preparation for the 5.2x / 5.1x +code merge. It completes the driver CRD API. + +<h3><a name="V5.27_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The reference to psview was out of date. (new-user.txt) + +Adds some pointers to Aladdin Ghostscript mirror sites. (new-user.txt) + +Updates the C style guide a little further. (c-style.txt) + +Adds documentation on driver-supplied CRDs. (drivers.txt) + +Updates the JPEG makefile to mention IJG release 6b. (jpeg.mak) + +Updates documentation to reflect the devs.mak / contrib.mak split. (README, +devices.txt, drivers.txt, make.txt, new-user.txt, source.txt, use.txt) + +</pre><h3><a name="V5.27_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - sjpegerr.o was needed even when using the shared JPEG library. +(jpeg.mak) + +Changes the name of the jpeg library directory from jpeg-<version> to just +jpeg, to parallel libpng and zlib. (make.txt, *.mak) + +Creates a separate makefile for contributed drivers. Eventually these +drivers will go in a separate directory. (devs.mak, contrib.mak, *.mak) + +</pre><h3><a name="V5.27_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The pkm driver was absurdly inefficient. (gdevpbm.c) + - The psfax driver (which, admittedly, doesn't come close to +working) no longer compiled. (gdevpfax.c) + - The ARCHAIC mode of the Epson driver emitted an incorrect +character ('r' instead of ^R). (gdevepsn.c) + - The X driver didn't check the calls of XInitImage for error +status. (gdevx.c) + +Updates a client for the change in the names of the gb_ values. (gdevx.c) + +Updates a client for the added param_request procedure. (gdevpsdf.c) + +Reformats all Aladdin-maintained drivers to the new Ghostscript standard +format, using indent. We deliberately did not reformat user-contributed +drivers, since indent mangles a line once in a while and we do not want to +take responsibility for fixing others' code. (*.h, *.c) + +Adds a default CRD specification to the 'bit' device, for testing. +(gdevbit.c) + +Integrates a bit more of the support code for asynchronous rasterizing. +(gxband.h, gxclio.h, gxclist.h, gxclmem.h, gxclfile.c, gxclist.c, gxclmem.c, +gxclread.c, gxpageq.h, gxpageq.c) + +</pre><h3><a name="V5.27_Platforms"></a>Platforms</h3><pre> + +Adds thread support to the Win32 platform. (gp_win32.c) + +</pre><h3><a name="V5.27_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Composite fonts with CID-keyed descendants didn't run the +BuildGlyph procedure. (zchar.c) + - The internal representation of CMaps was built incorrectly. +(zfcmap.c) + - Category resources didn't load from files automatically. +(gs_res.ps) + +Reformats all files to the new Ghostscript standard format, using indent. +(*.h, *.c) + +Reviews most of the operator files for ease of reading / debugging, +including removing macros where appropriate. (z*.c) + +Updates a client for the change in the names of the gb_ values. (zdevice.c) + +Updates a client for the added param_request procedure. (iparam.c) + +Updates clients for the completion of the CRD API. (zcie.c, zcrd.c) + +Increases the initial size of systemdict a little more, to allow for -d and +-s. (iinit.c) + +</pre><h3><a name="V5.27_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Text modes other than 0 didn't work with multiple-byte fonts. +(pdf_ops.ps) + - There were many bugs in the code for Type 0 and CIDFontType 0 +fonts. (pdf_font.ps) + +</pre><h3><a name="V5.27_Library"></a>Library</h3><pre> + +Fixes bugs: + - cshow returned a character code of -1 for composite fonts with +FMapType 9 (CMap-based). (gsfcmap.h, gschar0.c, gsfcmap.c) + - The GC procedure for enumerating show enumerators was broken. +(bug introduced in 5.24 or 5.25) (gschar.c) + - dashpath always copied the path, instead of only copying it if +needed. (gspath1.c) + - The hint replacement fix in 5.24 sometimes thought a path was +closed when it wasn't, producing gross distortions of some characters. +(gxhint3.c) + +Cleans up code for debugging by expanding macros, etc. (gstext.h, +gschar0.c) + +Changes the gb_ values to all caps, in line with general C convention. This +is a NON-BACKWARD-COMPATIBLE change to an as yet rarely-used API. +(gxbitfmt.h, gdevalph.c, gdevdgbr.c, gdevmem.c, gsalphac.c, gximage2.c) + +Enhances the default implementation of parameter lists to allow requesting +individual parameters. This is needed for the driver CRD API. (gsparam.h, +gscparam.c, gsparam.c) + +Completes the API for driver CRDs, also moving some code from gscie.c to +gscrd.c. This involves a NON-BACKWARD-COMPATIBLE change in the prototype of +the TransformPQR procedures. (gscie.h, gscrd.h, gscrdp.h, gscie.c, gscrd.c, +gscrdp.c) + +Reformats all files to the new Ghostscript standard format, using indent. +(*.h, *.c) + +Splits up gdevmrop.c into 3 files: gdevmrop.c (RasterOp implementation for +memory devices), gdevdrop.c (default and device-independent RasterOp +algorithms), and gdevrops.c (RasterOp-source device). (gdevmrop.h, +gdevdrop.c, gdevmrop.c, gdevrops.c) + +</pre> + +<hr> + +<h2><a name="Version5.26"></a>Version 5.26 (limited) (7/7/98)</h2> + +<p> +The purpose of this fileset is to add an API for drivers to provide one or +more device-appropriate CIE rendering dictionaries. Like 5.25, it is a +"snapshot" fileset not made available even to beta testers. + +<h3><a name="V5.26_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - An !endif was omitted. (msvc32.mak) + - A newly needed Windows library was omitted. (msvctail.mak) + - The /Za and /Ze switches were set incorrectly for MSVC. +(bcwin32.mak, msvccmd.mak, watcw32.mak, winint.mak, winlib.mak) + +</pre><h3><a name="V5.26_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A closing bracket was omitted (in code that is ifdef'd out). +(gdevpdf.c) + +</pre><h3><a name="V5.26_Fonts"></a>Fonts</h3><pre> + +Changes the font loader so that instead of pushing systemdict and a small +empty dictionary on the stack before loading a font, it pushes userdict. +This is what Adobe interpreters do, but this will probably break some +PostScript files, specifically ones that redefine 'index'. I don't see how +the Adobe interpreters can possibly do the right thing for such files. +(gs_fonts.ps, gs_type1.ps) + +</pre><h3><a name="V5.26_Interpreter"></a>Interpreter</h3><pre> + +Updates clients for changes in CRD API. This involves some changes in +internal procedures. (gs_lev2.ps, icie.h, zcie.c, zcrd.c) + +</pre><h3><a name="V5.26_Library"></a>Library</h3><pre> + +Fixes bugs: + - Pickling string, name, and array parameters tried to force +inappropriate alignment. (gsparams.c) + - Pickling dictionary parameters wrote the result in the wrong +place. (gsparams.c) + - An occurrence of dev_t should have been gx_device. The compiler +didn't catch this because there happens to be a type named dev_t in +<types.h> (!). (gxclread.c) + +Adds an API for drivers to provide one or more CRDs (as device parameters). +Makes a small but NON-BACKWARD-COMPATIBLE change in the names and argument +lists of the existing CRD API (which is not used by anything in the standard +configuration). (gscie.h, gscrd.h, gscrdp.h, gscie.c, gscrd.c, gscrdp.c, +gslib.c) + +</pre> + +<hr> + +<h2><a name="Version5.25"></a>Version 5.25 (limited) (7/1/98)</h2> + +<p> +This is a "snapshot" fileset created for the purpose of merging with a +separate development branch. While it fixes some significant bugs in 5.24, +it doesn't represent substantial additional progress. + +<h3><a name="V5.25_Documentation"></a>Documentation</h3><pre> + +Completely rearranges the C style guide, updates it to reflect current +practice, and adds a 1-page summary of the most important points. +(c-style.txt) + +Updates the man pages for consistency and to correct minor errors. (*.1) + +Notes that the pjxl300 driver works with the H-P CopyJet. (devices.txt, +devs.mak). + +Notes that in order to deal with over-zealous Solaris security checking, +additional linker switches are needed. (make.txt, unix*.mak) + +</pre><h3><a name="V5.25_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - 'make install' didn't get the executable from the right place. +unixinst.mak) + - COMPILE_INITS=1 didn't work. (int.mak, geninit.c) + - The MSVC makefile updates hadn't been applied to the MSVC-only +devices. (devs.mak) + - The other PC makefiles didn't define GLCCWIN. (bcwin32.mak, +watcw32.mak) + +Adds bounding box testing to the library test program. (ugcclib.mak) + +Reviews and reformats code for maintainability. (genarch.c, geninit.c) + +Moves the MS Windows-specific devices to a new file. (bcwin32.mak, +devs.mak, msdevs.mak, msvc32.mak, watcw32.mak) + +</pre><h3><a name="V5.25_Platforms"></a>Platforms</h3><pre> + +Reviews and reformats header files for maintainability. (vmsmath.h, +windows_.h) + +Removes some no-longer-used files from the fileset. (overlay.h, gp_itbc.c) + +</pre><h3><a name="V5.25_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - Substituted fonts had their FontName set to the requested one. +There was a comment in the code saying that some files that depend on this +happening, but Adobe implementations don't do it. However, aliased fonts in +Fontmap will continue to have the FontName set to the Fontmap key. +(gs_fonts.ps) + +Adds the euro symbol at position 240 (0360) in SymbolEncoding. This is a +PostScript 3 addition, but it's too much work to make it appear there only +if languagelevel >= 3. (gs_sym_e.ps) + +</pre><h3><a name="V5.25_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The bbox device didn't work if its target was itself a forwarding +device. (gdevbbox.c) + - User parameters maintained at the PostScript (as opposed to VM) +level didn't work. (gs_init.ps) + - Idiom recognition didn't work. (gs_init.ps, gs_ll3.ps, zmisc3.c) + - .beginpage and .endpage could cause an error if the current device +was a page device but was installed with setdevice rather than +setpagedevice. (gs_setpd.ps) + +In the interest of readability, replaces all casting macros with separate +variables, other than those used in enum_ptrs and reloc_ptrs procedures. +Note that doing this for rptr in gc_trace in igc.c will have a significant +performance cost on Intel CPUs, unless the compiler has a very good +optimizer, because it introduces another variable competing for scarce +registers in the most performance-critical section of code in the garbage +collector. (ialloc.c, igc.c, iparam.c, isave.c, istack.c, zchar42.c, +zfproc.c, zusparam.c) + +Changes some macros to procedures. (igc.c, ilocate.c, zusparam.c) + +Changes some macros to static quasi-constants (only variable for debugging). +(zvmem.c) + +Adds #include "errors.h" to oper.h, removing it from z*.c. (oper.h, z*.c) + +Reviews and reformats some header files for maintainability. This is an +ongoing project. (bfont.h, errors.h, iinit.c) + +Consolidates and simplifies the reading and writing of binary tokens and +binary object sequences. (bseq.h [deleted], btoken.h, ibnum.h, ibnum.c, +iscanbin.c, zbseq.c) + +Adds dummy user and system parameter entries for all the parameters listed +in Appendix C of the PostScript Red Book: even though the book clearly says +that no PostScript program should rely on the presence of any particular +parameter, PostScript files routinely assume the existence of the parameters +listed in Appendix C. (gs_init.ps, gs_lev2.ps, gs_res.ps) + +Adds dummy user and system parameter entries for the new parameters listed +in the 3010 Supplement. (gs_ll3.ps) + +Adds double-inclusion protection to all header files. (*.h) + +Moves the creation of binary object sequence headers from C to PostScript +code. (zbseq.c, gs_btokn.ps) + +Adds support for multiple FormTypes and ColorRenderingTypes. (gs_init.ps, +gs_lev2.ps, gs_res.ps, zcrd.c) + +Updates structures and clients for the introduction of "raw memory" +allocators. (ialloc.h, igc.h, ialloc.c, imain.c, isave.c) + +In the interest of readability and being able to use GNU indent to create +standard formatting, changes the operator tables from procedures back to +data structures. This change is backward-compatible for all operator files, +although we also edited all of Ghostscript's own operator definitions to +remove the BEGIN_OP_DEFS and END_OP_DEFS macros (which now have to generate +a little unnecessary code for backward compatibility). (opdef.h, iconf.c, +iinit.c, iutil.c, z*.c) + +Splits zchar2.c into a Level 1+ part and a Level 2 part. (zcfont.c, +zchar2.c) + +</pre><h3><a name="V5.25_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Adds font synthesis based on the FontDescriptor. Currently this is very +rudimentary. (pdf_font.ps) + +</pre><h3><a name="V5.25_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The PDF writer didn't default to A4 paper size if A4 was selected +as the default in the makefile. (gdevpdf.c) + - The default implementation of the begin_image procedure always +called the image's begin_image implementation, rather than the device's +begin_typed_image implementation. (gdevddrw.c) + - The bbox device didn't initialize its reference count. +(gdevbbox.c) + - A necessary cast was omitted. (gdevpsde.c) + +Changes some macros to procedures. (gdevpstr.h, gdevpstr.c) + +Adds an internal device to implement the PCL5 special color mapping +algorithms. (gdevcmap.h, gxdevice.h, gdevcmap.c, gdevnfwd.c) + +Adds double-inclusion protection to all header files. (*.h) + +Updates drivers for the change in begin_image. (gdevbbox.c, gdevpdfi.c, +gdevvec.c, gxclimag.c) + +</pre><h3><a name="V5.25_Library"></a>Library</h3><pre> + +Fixes bugs: + - The non-ANSI definitions of CLEAR_MARKS_PROC, ENUM_PTRS_BEGIN_PROC +and RELOC_PTRS_BEGIN were missing a parameter. (gsstruct.h) + - A few necessary casts were omitted. (gsparam.c, gxpcmap.c) + - Images or Patterns with non-default RasterOps could cause crashes. +(gdevmrop.c, gxp1fill.c) + - Exponential Interpolation functions with non-integral positive +exponents incorrectly required the lower bound of the domain to be strictly +positive rather than only non-negative. (gsfunc3.c) + - The attempt to achieve the desired color smoothness when shading +could compute (nearly) forever. (gxshade.c, gxshade1.c) + - The arc change in 5.24 caused arcs to render incorrectly. +(gspath1.c) + - The macro-reducing cleanup in 5.24 introduced a bug in handling +copy operations with negative skew. (gdevm1.c) + +Adds unmasked images and bounding box testing to the library test program. +(gxdevcli.h, gslib.c) + +Changes some macros to procedures. (gxfunc.h, gsfunc.c, gsfunc0.c, +gsfunc3.c) + +Adds double-inclusion protection to all header files. (*.h) + +Reviews and reformats header files for maintainability. (*_.h, dodebug.h +[deleted]) + +Changes the structure of the common part of the image enumerator to include +the device (which may be different from the original device, because of +forwarding), and to access the procedures through a pointer to a const +structure. This is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of +begin_image, since they now must pass the device to +gx_image_enum_common_init. (gximage.h, gxiparam.h, gdevddrw.c, gdevdflt.c, +gxiinit.c, gximage3.c, gximage4.c) + +Adds tests of the new color mapping device to the library test program. +(gslib.c) + +Removes the last vestiges of segmented pointers. (genarch.c, std.h) + +Introduces a "raw memory" API, primarily for managing the underlying memory +pool for embedded systems. This involves a NON-BACKWARD-COMPATIBLE-CHANGE +in the implementation (but not ordinary clients) of allocators. +(gsmemory.h, gsmemraw.h, gxalloc.h, gsalloc.c, gsmalloc.c, gsmemory.c) + +</pre> + +<hr> + +<h2><a name="Version5.24"></a>Version 5.24 (limited) (6/17/98)</h2> + +<p> +In addition to the usual bug fixes, and a few enhancements where temptation +proved irresistible or in response to an external need, this fileset: +<ul> +<li> - Takes the first steps on a major readability cleanup + (4-space indentation instead of 2, replacement of macros by + procedures, ....) + +<li> - Implements a bit more of the DPS functionality, including view + clipping, and gstate stack copying for 'fork'. + +<li> - Starts to sketch a text API for drivers. + +<li> - Changes the Unix makefiles so that they create production +binaries + in a separate directory. +</ul> + +<p> +Again, there are some non-backward-compatible changes required by other +architectural improvements. As always, we have tried to minimize the impact +of such changes on users' code. + +<h3><a name="V5.24_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The -Kn switch wasn't documented. (use.txt) + - The term "Software" was used instead of "Program" in the last +paragraphs of the license. (PUBLIC) + +Adds a couple of missing operators to the list at the end of ostack.h. +(ostack.h) + +Documents more precisely which gstate points to which objects after various +gstate operations. (gsstate.c) + +Corrects some addresses for the Free Software Foundation. (commprod.txt, +new-user.txt) + +Improves the documentation for memory management of color spaces. (gscie.h, +gscolor2.h) + +Updates the list of hardware available to Aladdin. (new-user.txt) + +Documents ReopenPerPage. (language.txt) + +Moves the documentation of image rendering procedures to a better place. +(gximage.h, gxiinit.c) + +Clarifies that old slzwe.c files may not work with current Ghostscript +versions. (make.txt) + +</pre><h3><a name="V5.24_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - psl3.dev didn't include func.dev. (int.mak) + - device and device2 devices weren't sorted together, causing +devices to appear in the list out of order (including, possibly, selecting +the wrong device as default). (genconf.c) + - The mswindll module definition omitted some needed files. +(devs.mak) + +Changes the optimization level for gcc from -O to -O2 for both standard and +profiling builds. (unix-gcc.mak) + +Defines 3 new makefile macros for the Unix platforms, +CFLAGS_{STANDARD|DEBUG|PROFILE}, that give the additional compiler switches +for these 3 compilation options. (unixansi.mak, unix-cc.mak, unix-gcc.mak) + +Changes the Unix makefiles so that by default they create the binaries in an +'obj' subdirectory of the source directory. (unixansi.mak, unix-cc.mak, +unix-gcc.mak, unix-end.mak) + +Updates the MSVC++ makefiles so they allow setting any configuration +parameter from the make command line. (msvc32.mak, msvccmd.mak, msvccom.mak +[deleted], msvclib.mak, msvctail.mak) + +</pre><h3><a name="V5.24_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2ascii was broken. (ps2ascii.ps) + +Adds capability to gslp.ps: + + - Variable-width fonts (but without automatic line breaking); + + - Pair kerning (from AFM file); + + - Inter-character and space width adjustment. + +This project was done for a paying customer. (gslp.ps) + +</pre><h3><a name="V5.24_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The name of the plan9bm device was wrong. (gdevpbm.c) + - The PDF writer wrote incorrect parameters for the CCITTFax filter +used to compress Type 3 font bitmaps. (bug introduced in 5.23) (gdevpdfi.c) + - The PDF writer emitted two 'endobj' lines for Type 3 bitmap fonts. +(gdevpdf.c) + +Removes all remaining uses of _ds and _ss in Aladdin's drivers. (gdevprn.h, +gdevsvga.h, gdevbit.c, gdevcgm.c, gdevdjet.c, gdevmsxf.c, gdevpbm.c, +gdevpccm.c, gdevpcfb.c, gdevpdfi.c, gdevprn.c, gdevsvga.c, gdevtfax.c) + +Renames a local macro named END. (gdevcgml.c) + +Removes all uses of far_data other than for device (but not device2) +prototypes. (gdevbit.c, gdevdjet.c, gdevemap.c, gdevmsxf.c, gdevpbm.c, +gdevpcfb.c, gdevpcx.c, gdevpdf.c, gdevpng.c, gdevps.c, gdevpsim.c, gdevpx.c, +gdevtfax.c, gdevtfnx.c, gdevvglb.c, gdevx.c, gdevxalt.c) + +Adds a psrgb driver that writes PostScript (Level 2) planar, +run-length-compressed, 24-bit RGB images. (gdevpsci.c) + +Starts to define and implement a driver procedure for text. This interface +will certainly change in the future as we get more insight into the division +of responsibility and control flow between generic code, individual drivers, +and internal and external fonts. This involves a major +NON-BACKWARD-COMPATIBLE CHANGE in the gs_show_enum structure (which no +client should be accessing directly). (gdevmem.h, gdevprn.h, gstext.h, +gxchar.h, gxdevcli.h, gxdevice.h, gxtext.h, gdevbbox.c, gdevht.c, +gdevnfwd.c, gschar.c, gschar0.c, gstext.c, gxacpath.c, gxclip.c, gxclip2.c, +gxclipm.c, gxclist.c, gxpcmap.c) + +Extends the parameter list printer to handle names and arrays. (gdevpsdf.c) + +Implements the ability to write out a Type 1 font definition, for embedding +fonts in PDF output. Currently this code isn't called from anywhere, and it +will certainly be subject to change in the future. (gdevpsdf.h, gdevpdfi.c, +gdevpsde.c, gdevpsdf.c) + +Adds the PCL XL Protocol Class 2.0 operators, attributes, and enumerated +values to the relevant header files. (gdevpxat.h, gdevpxen.h, gdevpxop.h) + +Converts some additional devices to -dev2, to make them const. (devs.mak, +gdevjpeg.c) + +To help in debugging, changes all uses of + #define ss ((stream_xxx_state *)st) +to + stream_xxx_state * const ss = (stream_xxx_state *)st; +(gdevpdfi.c, gdevpsdi.c, gdevpsdp.c, gdevpsds.c) + +Massages mem_mono_copy_mono and mem_mono_strip_tile_rectangle to reduce the +use of macros somewhat. (gdevm1.c, gdevmem.h) + +Makes a change to support the change in gs_param_list_common. (gdevpsdf.c) + +Replaces all remaining uses of do { ... } while (0) with BEGIN ... END. +(gdevpdfm.c, gdevpx.c, gdevx.c, gdevxalt.c) + +Adds a ReopenPerPage Boolean device parameter for printers, which causes the +output file to be closed and reopened for each page. This may be helpful in +persuading spoolers to start printing as soon as the first page is +available. (gdevprn.h, gdevprn.c) + +Makes the %-format validator for output file names a procedure, even though +it's only called in one place. (gdevprn.c) + +Updates some clients for the change from std_procs to procs. (gdevp2up.c, +gdevpbm.c, gdevupd.c, + +Removes the use of the CleanFaxData tag (327) from TIFF output, since many +applications don't recognize it and it isn't in the TIFF 6 documentation. +(gdevtifs.h, gdevtfax.c) + +</pre><h3><a name="V5.24_Platforms"></a>Platforms</h3><pre> + +Adds a new gp_setmode_binary platform procedure, to set a file into binary +mode on platforms that distinguish text and binary. (gp.h, gp_*.c) + +</pre><h3><a name="V5.24_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The derived (Bold, Oblique, ...) Hershey fonts were broken. +(fonts/makeher.ps, fonts/h*.ps) + +</pre><h3><a name="V5.24_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - As always, gcc failed to report some signed/unsigned char * +mismatches. (imainarg.c) + - Some needed #includes were missing. (zcrd.c, ztype.c) + - Contexts were always allocated in global VM (should be local VM), +and were freed in the current VM (should be local VM). Fixing this required +changing some internal interfaces defined in icontext.h. (icontext.h, +icontext.c, interp.c, zcontext.c) + - restore did some unnecessary gsaves. (zvmem.c) + - Creating a new context didn't initialize the graphics state +properly, and didn't do the first gsave that grestoreall relies on. +(gs_dps.ps) + - The bookkeeping for open files didn't work with multiple contexts. +Fixing this required a substantial (simplifying) redesign of the +interpreter's bookkeeping for streams in general: this may have introduced +new bugs. (files.h, ireclaim.c, isave.c, zfile.c) + - fork didn't copy the graphics state stack. (zcontext.c) + - The space bits were set incorrectly in the array reference for the +operand stack, causing the garbage collector not to mark the operand stack +of contexts other than the current one. (interp.c) + - LanguageLevel 3 facilities weren't enabled when desired. +(gs_ll3.ps, ilevel.h, opdef.h, iinit.c, zcsdevn.c, zimage3.c, zmisc2.c, +zmisc3.c, zshade.c, ztrap.c) + - flushfile with a procedure-target stream didn't pass the buffered +data to the procedure. We tinkered with this a little, but it still isn't +fixed. (zfilter.c, zfproc.c) + - The top-level color space objects allocated by the CIE color space +setting operators were never freed (until garbage collection). (zcie.c) + - setpagedevice with a 0-size page didn't fail. (gs_setpd.ps, +zmedia2.c) + - If one or more of the matrices in a CIE color space or CRD was +singular, setcolorspace or setcolorrendering could cause a stackoverflow. +(zcie.c) + - defineuserobject didn't work. (I don't see how it could ever have +worked.) (gs_dps2.ps) + - The version string wasn't read-only. (gs_init.ps, gs_lev2.ps, +gs_ll3.ps) + - Some standard resource categories weren't defined (which they need +to be, even if they have no instances). (gs_res.ps, gs_ll3.ps) + - The Trapping ProcSet was empty. (gs_ll3.ps) + - setvmthreshold didn't accept a value of -1. (gs_lev2.ps, +gs_pdfwr.ps, zusparam.c, zvmem2.c) + - Binary tokens containing native reals with swapped byte order +didn't read in properly. (ibnum.c, iscanbin.c) + - In binary object sequences, many executable objects were +incorrectly written out as literal. (zbseq.c) + - String DataSources for shadings didn't work. (zshade.c) + - Parameter dictionaries with integer keys didn't work. (iparam.c) + - A "can't happen" condition caused massive confusion instead of a +rangecheck error. (gs_setpd.ps) + - setcachelimit and setcacheparams were broken, because they no +longer interacted correctly with setuserparams and setsystemparams. +(gs_lev2.ps) + - The source width and height of images was arbitrarily limited to +32767. (zimage2.c) + - The optional dictionary parameter for filters was the last +operand, not the first. (zfbcp.c, zfdecode.c, zfilter.c, zfilter2.c, +zfilterx.c, zfzlib.c) + - If the current color space was Indexed, Separation using the +alternative space, or DeviceN using the alternative space, +currentgray/cmykcolor/hsbcolor/rgbcolor returned 0 rather than the +underlying color. (This was a correction to the Red Book in the 3010 +Language Supplement, Section D.2.4 and D.2.5.) (gscolor.c, gscolor1.c, +gxcspace.h) + +Implements some additional LanguageLevel 3 stream facilities: + - CloseSource and CloseTarget (parsing only). (ilevel.h, zfilter.c) + - Dictionary argument for SubFileDecode. (zfilter.c) + - UnitSize (fully implemented) and LowBitFirst (parsing only) for + LZWDecode. (zfdecode.c) + - ReusableStreamDecode (incomplete). (gs_ll3.ps, zfreuse.c) + +Removes all remaining uses of _ds and _ss. (bfont.h, errors.h, files.h, +icie.h, idict.h, idparam.h, ifunc.h, iscan.h, iutil2.h, opdef.h; iccfont.c, +idict.c, idparam.c, igc.c, iinit.c, iparam.c, iscan.c, iscannum.c, iutil2.c, +zcid.c, zcie.c, zdevice2.c, zfdecode.c, zfile.c, zfileio.c, zfont0.c, +zfont2.c, zfont42.c, zfunc.c, zht2.c, zusparam.c) + +Removes the use of gs_if_debug_c. (zvmem2.c) + +Updates clients for the change in color space num_components. (zcolor2.c, +zcsindex.c, zcssepr.c, zpcolor.c) + +Changes the stack manager so it can ensure an unused margin above the top +element. This is needed for a possible change in the operator API. +(istack.h, istack.c) + +Decouples the definition of the interpreter instance from the definition of +the exported procedures that use it, so that we can use it in more places +internally. (iminst.h, main.h) + +Removes all initialization of static per-context state. (iinit.c, iscan.c, +zmath.c) + +Makes the freeing of VM spaces entirely dependent on the number of contexts +referencing them, removing the special handling of interpreter termination. +(icontext.h, gsalloc.c, icontext.c, inouparm.c, interp.c, zcontext.c, +zusparam.c) ****** IN PROGRESS ****** + +Enables printing of time and memory usage even in non-DEBUG systems, for +benchmarking. (imain.c) + +Adds a .forceundef operator to parallel .forceput. (gs_init.ps, zdict.c) + +Rewrites the Form caching code to use the Pattern cache. (gs_fform.ps) + +Removes all uses of far_data. (imain.c, imainarg.c, iname.c, opdef.h) + +Moves responsibility for null page devices from C code to PostScript code. +(gs_setpd.ps, igstate.h, zdevice2.c, zgstate.c) + +Changes the context scheduler to not store or reload the state when +switching from a context to the same context. (zcontext.c) + +Moves .registerencoding from C code to PostScript code. (gs_init.ps, +zfont2.c) + +Splits off inames.h (API for names and the name table) from iname.h (API for +the interpreter's name table); renames the_nt as the_gs_name_table, and +moves it to imain.c. We would like to rename iname.h as names.h, but there +are too many places that include it. (igc.h, iname.h, inamedef.h, inames.h, +imain.h, idict.c, idstack.c, igc.c, iname.c, interp.c, isave.c) + +Splits off iestack.h and iostack.h from estack.h and ostack.h, as was done +for [i]dstack.h in 5.23. (estack.h, iestack.h, iostack.h, ostack.h, +interp.c) + +Splits off the hit detection device from the user path code, moving it to +the library level where it belongs. (zupath.c) + +Updates the interpreter for the changes in the enum_ptrs, reloc_ptrs, and +clear_marks memory management procedures. (igc.c, igcref.c, ilocate.c, +zcontext.c) + +Removes all uses of 'near' from the interpreter: if short and long calls +have different formats, we rely on the compiler to generate the most +efficient one. (iccfont.c, imainarg.c, iparam.c, zdevice2.c, zdouble.c, +zdps.c, zgstate.c, zmatrix.c, zpath.c, zpath1.c, zrelbit.c, ztype.c) + +Makes a couple of minor changes to support the change in +gs_param_list_common. (iparam.h, iparam.c) + +Changes internaldict to an operator, and executive and findencoding to +procedures, in order to satisfy the Genoa FTS. (gs_dps.ps, gs_init.ps, +gs_res.ps) + +Updates clients for the addition of device reference counting. (zpcolor.c, +zupath.c) + +Replaces all remaining uses of do { ... } while (0) with BEGIN ... END. +(istruct.h, opcheck.h) + +Adds a debugging operator for printing out a Type 1 font. (zfont1.c) + +Updates the Type 1 font operators for the change in the procedure structure. +(zchar1.c, zfont1.c) + +Updates one client for the change in the gs_show_enum structure. (zchar.c) + +Removes an obsolete "hook" put in for a customer. (zchar.c) + +Removes the BigStringEncode filter, which was only used by a former +customer. (zfilter.c) + +</pre><h3><a name="V5.24_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Images defined in non-Device color spaces were broken. +(pdf_draw.ps) + +Removes some vestiges of the old pdf2ps. (pdf_draw.ps, pdf_main.ps) + +Adds some leftover PDF 1.2 features: + + - F, FFilter, and FDecodeParms keys in stream dictionaries. + (pdf_base.ps) + + - Functions, including predefined spot functions. (pdf_draw.ps) + + - Name trees. (pdf_base.ps) + +Adds some PDF 1.3 features. Note that these require a fair amount of +PostScript LanguageLevel 3 support. Note also that none of these have been +tested yet, because we don't have any source of test files. + + - DeviceN and (stubbed) ICCBased color spaces. (pdf_draw.ps, + pdf_ops.ps) + + - Additional extended graphics state parameters. (pdf_draw.ps) + + - Number trees. (pdf_base.ps) + + - Masked images. (pdf_draw.ps) + +Works around a bug in pdfTeX, which can generate Encoding vectors containing +nulls. (pdf_font.ps) + +</pre><h3><a name="V5.24_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - A needed #include of memory_.h was missing. (sdeparam.c) + - The needed input buffer size for the RunLengthEncode filter was +128, but should be 129. (srle.c) + - The ASCII85Encode and ASCIIHexEncode filters sometimes didn't +insert \n characters often enough. (sfilter2.c, sstring.c) + - In one obscure boundary case, the CCITTFaxEncode filter with K = +-1 could emit an extra, incorrect code. (scfe.c) + - The CCITTFaxDecode filter didn't default DamagedRowsBeforeError to +0. (scfx.h) + +Removes all remaining uses of _ds and _ss. (sfilter.h, sbcp.c, scfe.c, +seexec.c, sfilter1.c, sstring.c) + +Removes the use of do_debug. (scfd.c) + +Removes all uses of far_data. (scf.h, scfdgen.c, scfdtab.c, scfetab.c, +sjpegerr.c) + +Removes the save_count member of streams, which is now no longer needed. +(stream.h) + +To help in debugging, changes all uses of + #define ss ((stream_xxx_state *)st) +to + stream_xxx_state * const ss = (stream_xxx_state *)st; +(sbcp.c, sbhc.c, sbwbs.c, scfd.c, scfe.c, sdctc.c, sdctd.c, sdcte.c, +seexec.c, sfilter1.c, sfilter2.c, sfxfd.c, sfxstdio.c, siscale.c, slzwc.c, +slzwce.c, slzwd.c, smtf.c, spdiff.c, spngp.c, srld.c, srle.c, sstring.c, +szlibc.c, szlibd.c, szlibe.c) + +Changes all groups of statistic-gathering variables to be structure +variables named stats_*. (scfe.c) + +Rewrites the CCITTFaxEncode filter to cut down one particularly large and +obnoxious macro, and to simplify the code by allocating an output buffer as +well as an input buffer. (scf.h, scfdgen.c, scfe.c, scfetab.c) + +</pre><h3><a name="V5.24_Library"></a>Library</h3><pre> + +Fixes bugs: + - The masked image clipper sequenced through mask rows incorrectly. +(gxclipm.c) + - gx_[c]path_init_local_shared were declared as returning void, but +could actually return an error. (gxpath.h, gxcpath.c, gxpath.c) + - As always, gcc failed to report some static/non-static +inconsistencies. However, to my dismay, I find that the ANSI C standard +allows these, so I'll have to stop complaining about them. (gxclimag.c, +gxclipm.c) + - As always, gcc failed to report some signed/unsigned char * +mismatches. (gdevpdfi.c, gsparam.c) + - A loop counted on a non-existent zero value to mark the end of the +IODevice table. (gsiodev.c) + - Some needed #includes of memory_.h were missing. (gdevddrw.c, +gscolor2.c, gscrdp.c, gscspace.c, gxclipm.c, gximage3.c, gxshade4.c) + - Pattern device colors didn't have access to the original halftone +phase, making it impossible to handle non-standard X/YStep correctly. +(gsdcolor.h, gspcolor.c) + - Pattern filling disregarded the phase. THIS MAY UNDO A FIX MADE +IN 5.02. WE NEED TO RE-TEST PATTERNS CAREFULLY. (gxp1fill.c) + - restore did some unnecessary gsaves. (gsstate.h, gsstate.c) + - The reference counting macros could read from an object after +freeing it. (gsrefct.h) + - setgstate and currentgstate freed the view clipping path, which +they shouldn't do. (gsstate.c) + - If no view clipping path was set, viewclippath returned the entire +extent of the device, not the imageable area. (gxpath.h, gsdps.c, gspath.c) + - Assigning one stack-allocated path to another incorrectly wound up +sharing their segments. (gxcpath.c, gxpath.c) + - dot_length_absolute was incorrectly declared as float rather than +bool. (gxline.h) + - The test for varying-depth banded images was incorrect, causing +varying-depth images to be treated as constant-depth. (This only affected +ImageType 3 images.) (gxclimag.c) + - Failure to clamp Y values when processing banded images could +cause crashes or invalid band list data. (gxclimag.c) + - The changes in gsparam.c introduced in 5.23 made the coercion of +int arrays to float arrays fail. (gsparam.h, gsparam.c) + - Interpolated banded images could be transmitted incompletely, +causing narrow stripes to be chopped out of their rendering. (gxclimag.c) + - FunctionType 0 functions with 32-bit samples didn't read their +data correctly. (gsfunc0.c) + - Lattice-form Shadings with packed coordinates could crash or +produce incorrect results. (gxshade.c) + - Lattice-form Shadings with packed coordinates always returned an +error. (gxshade4.c) + - If the PaintProc of a Pattern or a Form, or a CharString +procedure, or a similar callback copied the current graphics state with +gstate or currentgstate, a dangling reference to the device could result. +Fixing this required adding a reference count to devices: internally created +devices initialize it to 0, externally visible devices initialize it to 1. +THIS IS A DELICATE CHANGE AND WILL PROBABLY HAVE A BUG TAIL. (gsdevice.h, +gxdevcli.h, gxdevice.h, gdevmem.c, gdevmrop.c, gdevnfwd.c, gschar.c, +gsdevice.c, gsmemory.c, gspaint.c, gsstate.c, gxacpath.c, gxccman.c, +gxclip.c, gxmclip.c, gxpcmap.c) + - The return_if_error macro referred to code rather than code_. +(gserror.h) + - Non-monotonic halftones didn't allocate enough slots in the +halftone cache. (gxht.c) + - setpagedevice with a 0-size page didn't fail. Fixing this +required making the nullpage device provide explicit InputAttributes. +(gdevnfwd.c) + - Halftone angles were often slightly off. (gshtscr.c) + - Banded fill_mask operations (used for characters) were sometimes +broken. This bug was obviously introduced since 5.10; I'm surprised that it +didn't have more serious effects. (gxclread.c) + - Partially transparent patterns didn't work with non-default +RasterOp values. (gxp1fill.c) + - The default implementation of strip_copy_rop didn't handle color +space conversion properly. (gdevmrop.c) + - Hint replacement could cause the initial moveto and final +closepath of a Type 1 outline to differ, confusing the filling code. +(gxhint3.c) + - Interpolated images were truncated at the bottom. (bug probably +introduced in 5.23) (gxiscale.c) + - Using an unsigned type for the index passed to enum_ptrs +procedures caused comparisons against signed values to be incorrect. +(gsstruct.h) + +Rewrites the rectangle list and mask clipping algorithms to use callback +procedures rather than macros. The rectangle list source code grew by 20%, +but the compiled code shrank from 10K to less than 4K; the mask clip source +code and compiled code both shrank. (gxclip.h, gxmclip.h, gxclip.c, +gxclip2.c, gxclipm.c, gxcpath.c) + +Removes all remaining uses of _ds and _ss. (gsmemory.h, gsstruct.h, gzht.h, +stdpre.h, gp_dosfb.c, gsbitops.c, gscie.c, gsht.c, gstype1.c, gstype2.c, +gxclpath.c, gxclread.c, gxcmap.c, gxfill.c, gxi12bit.c, gxop1.h, gxpflat.c, +gxstroke.c, gxtype1.c) + +Changes some GC procedures from explicit code to standard macros. +(gsstruct.h, gscscie.c, gxcht.c) + +For easier debugging, changes gs_debug_c to a procedure; removes +gs_if_debug_c and do_debug. (gdebug.h, gsht1.c, gsmisc.c, gspaint.c, +gxcht.c, gxht.c, gxpcmap.c) + +Changes the num_components member of the color space structure to a +procedure, which is needed because DeviceN color spaces have a variable +number of components; also makes Pattern spaces return -1 - the correct +num_components instead of -1. This is a NON-BACKWARD-COMPATIBLE CHANGE. +Also adds a base_space procedure. (gxcspace.h, gscdevn.c, gscolor1.c, +gscolor2.c, gscpixel.c, gscscie.c, gscsepr.c, gscspace.c, gspcolor.c, +gxiinit.c, gxiscale.c) + +Changes all groups of statistic-gathering variables to be structure +variables named stats_*. (gxclip.c, gxclist.c, gxclpath.c, gxfill.c, +gxifast.c) + +Starts to pull apart gs_makebitmap/pixmappattern to remove the dependency on +masked images. (gspcolor.c) + +Splits the C heap allocator from generic allocator support. (gsmemory.c, +gsmalloc.c) + +Removes all uses of far_data other than references to device (but not +device2) prototypes. (gdevmem.h, gdevmrop.h, gxdevcli.h, gconf.c, +gdevabuf.c, gdevht.c, gdevm*.c, gdevmpla.c, gdevmrop.c, gdevnfwd.c, +gsbittab.c, gsflip.c, gsroptab.c, gxcht.c) + +Adds a streams member to gs_ref_memory_t. The library doesn't use this, but +it greatly simplifies the interpreter's bookkeeping. (gsalloc.h, gxalloc.h, +gsalloc.c) + +Adds some more opaque types to the graphics state structure, rather than +using naked struct types. (gsccolor.h, gzstate.h) + +Introduces the notion of the "effective clip path" in a graphics state. +Painting operators should now call gx_effective_clip_path rather than using +the clip_path member directly. (gxpath.h, gschar.c, gsdps1.c, gsimage.c, +gspaint.c, gspath.c, gxccache.c, gxpaint.c) + +Implements view clipping. (gzstate.h, gspath.c, gsstate.c) + +Starts to pare down the fit_* macros in gxdevice.h, since some people feel +strongly they are hard to follow, and also adds BEGIN/END wrapping. +(gxdevice.h, gdevabuf.c, gdevmem.c, gxclpath.c) + +Refactors the structure definition macros in anticipation of moving to a +more table-driven approach. Replaces ENUM_CALL, ENUM_RETURN_CALL, and +RELOC_CALL with ENUM_USING and RELOC_USING. (gsstruct.h, gdevmem.c, +gshtscr.c, gxcpath.c, gxiinit.c) + +Sketches a table-driven rather than procedural representation for GC +descriptors. We believe this will improve readability, reduce code size, +and perhaps reduce cache thrashing during garbage collection. This requires +a NON-BACKWARD-COMPATIBLE CHANGE to the enum_ptrs, reloc_ptrs, and +clear_marks procedures (to add the structure descriptor as a parameter). +This should not affect any ordinary clients, because they should already +define these procedures using the macros in gsstruct.h, which *are* +backward-compatible; however, they do affect two internal clients that use +their own type tags with unions (color spaces and device colors). +(gsstrtab.h, gsstruct.h, gsalloc.c, gsstrtab.c) + +Updates color spaces for the change in enum_ptrs and reloc_ptrs. +(gxcspace.h, gscdevn.c, gscolor1.c, gscolor2.c, gscpixel.c, gscscie.c, +gscsepr.c, gscspace.c, gspcolor.c) + +Updates device colors for the change in enum_ptrs and reloc_ptrs. +(gsdcolor.h, gxdcolor.h, gxpcolor.h, gspcolor.c, gxcht.c, gxcmap.c, +gxdcolor.c, gxht.c, gxp1fill.c) + +Implements a hit detection device at the library level. (gserrors.h, +gdevhit.c) + +Changes some configuration parameters from #defines to statics. (gschar.c) + +Changes "simple" structures so they no longer have 0 for the enum_ptrs or +reloc_ptrs procedure. This is a NON-BACKWARD-COMPATIBLE CHANGE for +structure-definers that don't use the macros in gsstruct.h (of which there +shouldn't be any). (gsstruct.h, gsalloc.c) + +Adds the structure type name to the debugging printout for freeing objects. +(gsalloc.c) + +To help in debugging, changes all uses of + #define ss ((stream_xxx_state *)st) +to + stream_xxx_state * const ss = (stream_xxx_state *)st; +(gxclread.c) + +Removes all uses of 'near' from the library: if short and long calls have +different formats, we rely on the compiler to generate the most efficient +one. (gscie.c, gscoord.c, gsimpath.c, gsstate.c, gstype2.c, gxclpath.c, +gxclread.c, gxfill.c, gxhint1.c, gxhint2.c, gxhint3.c, gxstroke.c) + +Adds 'inline' to stdpre.h, defined as the empty string on compilers other +than the ones we know accept it. (stdpre.h) + +Adds printout of the subrectangle to ImageType 1 tracing. (gxiinit.c) + +Replaces a few uses of gs_memory_default with dev->memory. (gdevdbit.c, +gxclread.c) + +Improves support for halftone objects not associated with graphics states. +This involves a minor change to the definitions of gs_spot_halftone and +gs_threshold_halftone, to define the transfer function as a closure. This +is slightly NON-BACKWARD-COMPATIBLE in that it requires clients to set +transfer_closure.proc to 0 if they also set transfer to 0. NOTE: the API +defined in gshtx.h is subject to future change. (gscsepnm.h, gshtx.h, +gxdht.h, gxfmap.h, gxht.h, gxtmap.h, gscolor.c, gsht.c, gsht1.c, gshtx.c) + +Changes the Bezier approximation of arcs to cut arcs at absolute multiples +of 90 degrees rather than at intervals of 90 degrees (e.g., an arc from 45 +to 105 would now be cut at 90 rather than being treated as a single +60-degree curve) in order to produce more uniform output and also to ensure +that the bounding box for arcs is more accurate (to pacify the Genoa FTS). +(gxfarith.h, gsmisc.c, gspath1.c) + +Replaces all remaining uses of do { ... } while (0) with BEGIN ... END. +(gsbitops.h, gsdsrc.h, gserror.h, gsmdebug.h, gsrect.h, gxcldev.h, gxfunc.h, +gxop1.h, gxtype1.h, gsalphac.c, gsshade.c, gstype2.c, gstype42.c, +gxclread.c, gxcpath.c, gximage4.c, gxpath.c) + +Adds a user-defined halftone type, to support non-monotonic halftones. We +could make any of the following structures fully object-oriented: + - Halftones (client level) + - Halftone orders (device level, but not rendered) + - Device halftones (device level, fully rendered) +The right place to do this for non-monotonic halftones, which are specified +directly by bit masks, is at the device halftone level. However, there are +too many places that know too much about the implementation of device +halftones and halftone orders right now. WE NEED TO REVISIT THIS AFTER THE +5.1x CODE BRANCH IS TERMINATED. SHOULD ALSO CONVERT UNION TO TYPED UNION +FOR GC -- CODE IS DUPLICATED IN gsht.c VS gshtx.c. (gxdht.h, gxht.h, +gxhttype.h, gshtx.h, gsht.c, gsht1.c, gshtx.c) + +Moves the procedures in Type 1 font data into a structure. This is a +NON-BACKWARD-COMPATIBLE CHANGE, but an internal one. (gxfont1.h, gstype1.c, +gstype2.c, gxtype1.c) + +Extends Type 1 / 2 / 4 fonts to require that they be able to enumerate the +set of glyphs that they define, to allow writing them out. We may propagate +this to all base fonts in the future. (gxfont1.h) + +Provides some utilities for devices that want to define their own +InputAttributes and OutputAttributes. (gdevprn.h, gxdevice.h, gdevprn.c, +gsdparam.c) + +Removes all of the text-display procedures that took null-terminated C +strings as operands. This is NON-BACKWARD-COMPATIBLE. However, since the +memory manager required that all such operands be allocated using +gs_alloc_string, the procedures were never usable with arbitrary C strings +anyway. (gschar.h, gschar.c) + +Renames the gx_device procedure record from std_procs to procs, in +anticipation of more unified support for "objects". This is a +NON-BACKWARD-COMPATIBLE CHANGE for a surprisingly large number of clients +that should have been using dev_proc and set_dev_proc. (gdevbbox.h, +gxdevcli.h, gxdevice.h, gdevdflt.c, gdevdgbr.c, gdevmem.c, gdevprn.c, +gsalphac.c, gsdevice.c, gsropc.c, gxccache.c, gxifast.c) + +Disallows setting of the RasterOp-related graphics state parameters when +a cache device is active. (gsrop.c) + +Changes the tracing printout of path segments to provide enough accuracy to +cover all the fraction bits of a 'fixed'. (gxpath.c) + +</pre> + +<hr> + +<h2><a name="Version5.23"></a>Version 5.23 (limited) (5/14/98)</h2> + +<p> +This fileset adds a number of PostScript LanguageLevel 3 features: library +support for ImageType 3 and 4 (masked) images, PostScript-level support for +ImageType 4, and the shfill operator for smooth shading. It also adds RCS +Id lines to all the files we maintain. It also changes the Unix makefiles +so that they create debugging or profiling binaries in separate directories. + +<p> +This fileset includes an unusually large number of non-backward-compatible +API changes. Most of them don't affect ordinary library clients, but a few +do. These changes, and a few more to come, result from the next (large) +increment in our ongoing project to make the code completely re-entrant (no +non-idempotent writable globals in our own code). This necessarily involves +putting some things that used to be global into structures, some of which +must be added to some interfaces. + +<p> +NOTE: because of a combination of hardware problems, time pressure, and +belated discovery of sloppiness by the original developers of the PC +makefiles, none of the PC makefiles in this fileset work. The Borland +makefiles probably come the closest. + +<h3><a name="V5.23_Documentation"></a>Documentation</h3><pre> + +Adds documentation for: + - The changes in begin_image and related facilities. (drivers.txt) + - The addition of -Z/. (use.txt) + - The new ps2ps utility. (ps2ps.1) + - The new get_hardware_params procedure. (drivers.txt) + - The new -B<size> / -B- switch. (use.txt). + +Improves the documentation for the sample_ macros. (gsbitops.h) + +Adds some documentation on how the debugging/tracing flags work. (gdebug.h) + +Improves the documentation of DDAs. (gxdda.h) + +Documents a subtle change in the meaning of a flag in the PDF +FontDescriptor. (pdf_font.ps) + +Changes the location of the authoritative site for zlib sources. (zlib.mak) + +Corrects a typo. (gsht1.h) + +Removes pdf_2ps.ps from the fileset. (psfiles.txt) + +Adds standard file name comments to all .c and .h files that didn't already +have them. (dodebug.h, gdev3b1.c, gdev8510.c, gdevadmp.c, gdevhl7x.c, +gdevimgn.c, gdevo182.c, gdevpdfx.h, gdevpe.c gdevsco.c, gdevsj48.c, +gdevvglb.c, gsalpha.c, gscolor1.c, gscsepr.h, gsdsc.c, scfetab.c string_.h, +zfunc3.c, zmedia2.c) + +Unifies the nroff styles of the various man pages a bit. (*.1) + +Adds a reference to the CTAN mirror sites. (new-user.txt) + +Notes that the result of rect_intersect may be anomalous. (gsrect.h) + +Improves the documentation for the Distiller parameter handling code. +(gdevpdfp.c, gdevpsdp.c) + +Corrects an ambiguity in the definition of the int_keys argument of +param_begin_xmit_dict. (gsparam.h) + +Adds a new file that will evolve into a reasonable guide to the source code. +(README, source.txt) + +Adds the convention for 'status' and 'code' to the C style guide. +(c-style.txt) + +Improves the documentation for the '-' pseudo-switch. (use.txt) + +Updates the problem reporting form to include the URL for known post-release +problems. (bug-form.txt) + +Documents the availability of sources and binaries for Plan 9. +(new-user.txt) + +</pre><h3><a name="V5.23_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The 'tags' target in the Unix makefiles had an incorrect directory +name. (bug probably introduced since 5.20) (unix-end.mak) + - The ld_tr and CCFLAGS macros were used in the makefiles before +they were defined, causing problems with `make' implementations that +substitute macros into definitions at definition time rather than at use +time. (*.mak) + - Recent Digital Unix versions (4.0 and later) require -std1 when +compiling. (make.txt) + - The Unix library-only makefile had gotten out of date. +(ugcclib.mak) + - pf2afm[.bat] were omitted from the fileset. (master/package.tcl) + - The Borland makefile didn't work, because the Borland compiler +requires specifying the output file name (-o) before the input file name +(-c)! This required changing the order of every compilation command in +every platform-independent makefile. The win*.mak files still need work. +(*.mak) + - None of the non-Unix makefiles specified directory names for the +auxiliary programs. (dvx-tail.mak, os2.mak, wctail.mak, winlib.mak) + - The Windows makefiles lacked build rules for gp_ntfs and gp_win32. +(msvclib.mak, winlib.mak) + +Adds a new debugging switch -Z/ that prints the file name and line number on +all trace messages. (gdebug.h, std.h) + +Changes the Unix 'pg' and 'debug' build targets so that they create the +binaries in a 'pgobj' or 'debugobj' subdirectory of the standard build +directory. This allows keeping all 3 configurations active. (unix-end.mak) + +Adds GEN directories for jpeg, libpng, and zlib. (devs.mak, gs.mak, +jpeg.mak, lib.mak, libpng.mak, zlib.mak) + +Adds a gendev.c that will eventually replace genconf.c. (gendev.c, *.mak) + +Adds -Wcast-align to the gcc compilation switches. (unix-gcc.mak) + +Adds support for libpng 1.0.1. (libpng.mak) + +Notes the use of -R on Solaris and other SVR4 systems. (unix*.mak) + +Removes pdf_2ps.ps from the fileset. (int.mak, unixinst.mak, +pdf_2ps.ps[deleted]) + +Ensures that every file that is copyright, maintained, and distributed by +Aladdin Enterprises has a RCS Id line. In .c and .h files, these lines +currently are only comments, but they could be converted easily to static +strings later if we want to. We had to touch almost every file in the +fileset to do this, but we did *not* change the write dates. (*) + +Makes the build procedure auto-detect whether the installed version of gcc +has the 'const' code generation bug. (gs.mak, lib.mak, unix-gcc.mak) + +Removes 'makefile' as a precondition for ccf32.tr. (I can't quite figure +out why it was there in the first place.) (msvccom.mak) + +Replaces the -F<file> switch with a -B<buffer size> switch that forces all +files to use the run_string interfaces. -B- turns it off. (iminst.h, +imainarg.c) + +Adds a new resource to genconf.c, -replace <module>. This causes <module> +*not* to be included if the module with the -replace resource *is* included. +If two modules -replace each other, either directly or indirectly through +-includes, the result is undefined. (genconf.c) + +Uses -replace to implement a default roplib package. (lib.mak) + +</pre><h3><a name="V5.23_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - unprot.ps stopped working because of the stricter prohibition +against storing local-VM objects into systemdict. (unprot.ps) + +Adds a new ps2ps utility, like pdf2ps, that "distills" PostScript. +(ps2ps, ps2ps.bat) + +Modifies the ps2epsi utility so it can be run outside the ps2epsi script for +testing. (ps2epsi.ps) + +Changes the pdf2ps utility to use the pswrite device. This gets rid of all +conversion problems, at the expense of larger and stupider output files. +(pdf2ps, pdf2ps.bat) + +</pre><h3><a name="V5.23_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Two procedures were declared 'private' inconsistently (thank you +again, gcc). (gdevps.c) + - The author of the uniprint driver sent a fix for an +allocation-related bug and an off-by-one bug. (gdevupd.c) + - The PDF writer incorrectly converted open stroked rectangles (only +3 sides drawn) to closed (4 sides drawn). (gxpath.h, gzpath.h, gdevpdfd.c, +gxpath2.c) + - When banding, filling a character within the PaintProc of a +Pattern could produce memory access errors. (The problem was in +gx_forward_fill_mask, which might affect filling characters in other +situations as well.) (gdevnfwd.c) + - The [e]pswrite driver produced incorrect line widths for stroked +graphics. (gdevps.c) + - The [e]pswrite driver didn't invoke colorimage correctly, so +didn't handle Patterns right. (gdevps.c) + - Vector devices didn't set the color before writing trapezoids, +possibly causing incorrectly colored output. (gdevvec.c) + - Vector devices could give errors on Pattern fills. (gdevvec.c) + - The bbox device retained a pointer to the clipping path, which, +since the path was embedded in the gs_state_contents, confused the garbage +collector, causing memory access errors. We fixed this by de-embedding the +path object: see below. (gsstate.c) + - On some GNU/Linux systems, the X driver could get a memory access +error when displaying patterns. We fixed this by adding calls on XInitImage +in the necessary places when running X11R6. (gdevx.c) + - PDF output didn't check names for unusual characters, and could +produce invalid output if the input included names with those characters. +(gdevpdfx.h, gdevpdf.c, gdevpdfm.c, gdevpdfo.c) + - In the PDF writer, DEST pdfmarks with /Dest but no /Page or /View +didn't generate named destinations. (gdevpdfm.c) + - Printer devices didn't allow . in %-formats in the output file +name. (gdevprn.c) + - The x11cmyk driver didn't read bits back from the screen +correctly. (gdevxalt.c) + - The pcxmono and pcxgray drivers used colored rather than +gray-scale palettes. (gdevpcx.c) + - The PCX drivers could emit repetition counts greater than 15, +confusing some readers. (gdevpcx.c) + +Removes some vestiges of the obsolete draw_line driver procedure. We also +rename the draw_line member of the driver procedure structure as +obsolete_draw_line, so that any uses of it will cause compilation errors, +but we don't remove it from the structure, so that existing driver procedure +vectors will continue to compile (although the draw_line procedure will +never be called). (gxdevcli.h, gdevbbox.c, gdevddrw.c, gdevdflt.c) + +To repair a design error, and at the same time add flexibility needed for +ImageType 3: + + - Removes the image_data and end_image driver procedures, +associating them with the gx_image_enum(_common)_t structure instead. +Clients should call gx_device_image_data and gx_device_end_image instead: we +set the image_data and end_image procedures in the device structures to +these procedures when filling in defaulted procedures. This is a +NON-BACKWARD-COMPATIBLE CHANGE for drivers that implement begin_image, since +they now have to fill the procedures into the enumerator structure. +(gsiparm*.h, gxdevcli.h, gxdevice.h, gxiparam.h, gdevbbox.c, gdevddrw.c, +gdevdflt.c, gdevnfwd.c, gsimage.c, gxclist.c, gxidata.c, gxifast.c, +gxiinit.c, gximage3.c, gximage4.c) + + - Replaces the image_data driver procedure with a plane_data +procedure (now associated with the image enumerator, not the device) that +allows specifying the X offset and raster independently for each plane, and +(depending on the image type) may allow omitting some planes. We provide a +gx_device_image_plane_data procedure parallel to _image_data and _end_image +(see above). (gsiparm*.h, gxdevcli.h, gxiparam.h, gdevbbox.c, gdevddrw.c, +gxidata.c, gxiinit.c, gximage3.c, gximage4.c) + +Updates clients for image processing changes. (gdevvec.h, gdevpdf.c, +gdevpdfi.c, gdevps.c, gdevpx.c, gdevvec.c) + +Enhances [e]pswrite to detect other kinds of opportunities for producing +smaller output. This involves a change in the moveto procedure in the +'vector' interface. (gdevps.c) + +Changes the bbox device so that it automatically detects whether it is being +used as a component in a device pipeline or as a free-standing device, +rather than having to select this in the makefile. (lib.mak, gdevbbox.h, +gdevbbox.c) + +Moves the halftoning driver a bit closer to real usability. (gdevht.h, +gdevht.c) + +Adds some tracing to the color mapping code in the X driver. (gdevx.c) + +Implements setting the Dict and ACSDict parameters for pswrite and pdfwrite. +Dict is effective with the CCITTFaxEncode filter for black-and-white images; +otherwise, these parameters still don't do anything. (gdevpdfi.c, +gdevpsdp.c) ****** READING HUFFMAN TABLES IS NYI, SEE sdcparam.c; SETTING +DOESN'T WORK BECAUSE DCT_set_defaults DOESN'T DO WHAT IT SHOULD ****** + +Updates the PS/PDF writers to reflect the fact that the ASCIIHexEncode +filter now has a state. (gdevpsdf.c) + +Modifies the X driver so that it can draw multiple platform characters at a +time rather than one character per call. (gdevx.h, gdevx.c, gdevxxf.c) + +Takes advantage of the filter stream procedures now available in stream.c. +(gdevjpeg.c, gdevpdf.c, gdevpsdf.c) + +Adds a get_hardware_params procedure, similar to get_params except that it +reads parameters whose values depend on hardware state that may change +without program intervention (e.g., panel switches). The default is that +there are no hardware parameters. (gdevmem.h, gdevprn.h, gsdevice.h, +gxdevcli.h, gxdevice.h, gxacpath.c, gxclip2.c, gxclipm.c, gxclist.c, +gxcpath.c, gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c, +gdevprn.c, gsdparam.c) + +Updates the PS/PDF writer for the change in the parameter list API. +(gdevpsdf.c) + +Makes a few more writable statics const. (gdevos2p.c, gdevpipe.c, +gdevpsim.c, gdevx.c) + +Removes the rrgb sample device, since it now no longer serves any purpose. +(gdevrrgb.c[deleted]) + +Converts some additional devices to -dev2, to make them const. (devs.mak, +gdevbit.c, gdevpbm.c, gdevpcx.c, gdevpsim.c, gdevpng.c, gdevtfax.c, +gdevtfnx.c, gdevx.c, gdevxalt.c) + +Updates a client accessing the preallocated color spaces. (gdevpsdi.c) + +Renames the debugging-related statics in the X driver as X_SOMETHING. +(gdevx.c) + +</pre><h3><a name="V5.23_Platforms"></a>Platforms</h3><pre> + +Makes a few minor changes to support Plan 9. (make.txt, devs.mak, stat_.h, +stdio_.h, time_.h, gdevpbm.c) + +</pre><h3><a name="V5.23_Fonts"></a>Fonts</h3><pre> + +Documents the availability of a free Chinese font. (fonts.txt, +new-user.txt) + +Works around a bug in the Adobe PostScript driver. We though it just output +the FontBBox for Type 42 fonts in the 2048- or 4096-unit character space +rather than a 1-unit space, but in fact it outputs garbage. (zfont42.c, +gstype42.c) + +Augments the handling of Type 42 fonts to recognize the gdir / +GlyphDirectory method of outline definition in addition to the loca / glyf +method, per Adobe versions 2015 and later (undocumented!). (ifont.h, +zfont42.c) + +</pre><h3><a name="V5.23_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Memory management for argument strings was wrong. (gsargs.h, +gsargs.c) + - 1 .setlanguagelevel was broken, because it didn't allow for the +possibility that values could get deleted from systemdict that existed in +level2dict. (bug introduced in 5.x, x <= 10) (zmisc2.c) + - -dFAKEFONTS was broken. (gs_fonts.ps, gs_init.ps) + - copyscanlines was broken. (bug introduced in 5.20) (gs_init.ps) + - The matrix returned by sizeimage was incorrect. (zdpnext.c) + - The implementation of .buildpattern for PatternType 2 was wrong. +(gs_ll3.ps) + - Ghostscript couldn't load TrueType fonts where the amount of data +either before or after the glyf section exceeds 64K. (gs_ttf.ps) ****** WE +BACKED OUT THIS CHANGE, BECAUSE WE HAD TO BACK OUT THE NEXT ONE. ****** + - Ghostscript couldn't load TrueType fonts where the total data is +more than 64K and the offset or length of the glyfs is odd. (gs_ttf.ps) +****** WE BACKED OUT THIS CHANGE: IT BROKE THE PDF INTERPRETER, BECAUSE IT +IMPOSES A NEW REQUIREMENT THAT TTF FILES BE POSITIONABLE. ****** + - Some compilers complained about arithmetic on enums. (interp.c) + - The CIE color space and CRD GC structure definitions were in the +interpreter rather than the library. (zcie.c, zcrd.c) + - NullFont was still present in FontDirectory when currentglobal was +false. (gs_init.ps) + - execform failed with Form resources, because it tried to insert +the Implementation in a read-only dictionary. (gs_fform.ps, gs_lev2.ps) + +Finishes implementing ImageType 4 images, and moves closer to implementing +ImageType 3. (iimage.h, zdps.c, zimage.c, zimage2.c, zimage3.c) + +Updates tracing output to use the new dlprintf macros. (idict.c, igc.c, +igcref.c, igcstr.c, iname.c, interp.c, isave.c, iscan.c, zcie.c, zcontext.c) + +Implements multiproc=true for readimage. (gs_dpnxt.ps) + +Does a bit more work on implementing shading with PatternType 2. +(gs_ll3.ps, zfunc.c, zshade.c) + +Adds a .bitadd operator for adding integers modulo the word size. +(zarith.c) + +Updates filter operators to use the new stream parameter facility. +(iparam.h, iparam.c, zfdecode.c, zfdctc.c[deleted], zfdctd.c, zfdcte.c) + +Updates the implementation of parameter lists for the change from _dict to +_collection. (iparam.c, iparam.h) + +Takes advantage of the filter stream procedures now available in stream.c. +(zfilter.c) + +Adds get_hardware_params to one device procedure vector. (zupath.c) + +Adds .gethardwareparams to parallel .getdeviceparams. (zdevice.c) + +Updates the interpreter's parameter list machinery to match the change in +gsparam.h. (iparam.h, iparam.c) + +Makes more writable statics const. (gs_init.ps, btoken.h, dstack.h, iref.h, +opextern.h, icontext.c, idict.c, igc.c, igcref.c, iinit.c, imainarg.c, +interp.c, iscanbin.c, iutil.c, zbseq.c, zcie.c, zcontrol.c, zdevcal.c, +zdevice2.c, zdps.c, zdps1.c, zfont2.c, zgeneric.c, zgstate.c, ziodev.c, +ziodev2.c, ztype.c) + +Removes an inappropriate reference to PROGRAM_NAME. (imainarg.c) + +Removes set/currentrenderalgorithm, since they are useless for the purpose +for which they were intended. (zrop.c) + +Uncomments code for CIEBasedDEF[G] color spaces, even though these aren't +fully implemented yet. (zcie.c) + +Reimplements StartJobPassword and SystemParamsPassword as no-access strings +in systemdict. (gs_lev2.ps, iutil2.h, iutil2.c, ziodev2.c, zusparam.c) + +Splits off the context state record from icontext.h, so that places that +only need access to state variables don't need to import the +procedures. (icontext.h, icstate.h) + +Updates a client for the change in gs_malloc_limit. (imainarg.c) + +Updates clients for the change in the accessors for predefined color spaces. +(zcolor1.c, zimage.c, zimage2.c) + +Renames the (few) debugging-related statics as I_SOMETHING. (igc.c) + +Splits off idstack.h (API for dictionary stacks) from dstack.h (API for the +interpreter's dictionary stack), and idstack.c (dictionary stack +implementation) from idict.c (dictionary implementation). We should have +done this a long time ago! (dstack.h, idictdef.h, idstack.h, idict.c, +idstack.c, iinit.c, ireclaim.c) + +Folds the cached currentfile pointer into the exec-stack structure. +(estack.h, interp.c) + +Changes clients of gs_register_*_root to eliminate statically allocated +roots. (iinit.c, iname.c, interp.c, zbseq.c, zcontext.c, zfile.c, zfont.c, +zfont2.c, zgstate.c, ziodev.c) + +Adds a ref_free_stack procedure, and reformats the implementation of stacks. +(istack.h, interp.c, istack.c) + +</pre><h3><a name="V5.23_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Pattern colors sometimes caused errors. (gs_pdf.ps) + - A file ending with %%EOF without an EOL caused an error. +(pdf_main.ps) + - Fl wasn't recognized as an abbreviation for FlateDecode in in-line +images. (pdf_draw.ps) + +Removes all code related to converting PDF to PS: it never worked reliably, +and we now support this function with the pswrite device instead. +(gs_pdf.ps => pdf_ops.ps, pdf*.ps) + +</pre><h3><a name="V5.23_Streams"></a>Streams</h3><pre> + +Updates tracing output to use the new dlprintf macros. (shc.h, scfd.c, +scfe.c, shcgen.c) + +Provides the ability to read and set stream initial parameters to/from a +parameter list. This is currently needed only by the PDF/PS writers and the +filter operator, so it is implemented in modules separate from the stream +implementation per se, but it might be useful for other clients too. +(scommon.h, scfparam.c, sdcparam.c, sdct*.c, sdeparam.c, sddparam.c, +gdevpsfp.c[deleted]) + +Changes the ASCII85Encode filter so it never produces two %% at the +beginning of a line, which could mislead document managers or spoolers. +(sfilter2.c) + +Changes the ASCIIHexEncode filter so it always produces lines of exactly 64 +characters, except for the last one. THIS IS A NON-BACKWARD-COMPATIBLE +CHANGE, because this filter now needs a state structure, which it didn't +before. (sstring.h, sstring.c) + +Moves filter_{read,write}_procs to stream.c, changing the names to +s_filter_{read,write}_procs. (stream.h, stream.c) + +Makes creation of JPEG filters set default values for parameters that are +outside the IJG library (Picky and Relax). (sdct.h, sjpegd.c, sjpege.c) + +</pre><h3><a name="V5.23_Library"></a>Library</h3><pre> + +Fixes bugs: + - An error in dda_step_add could theoretically produce anomalies in +images (although we don't think we've ever seen any). (gxdda.h) + - A boundary error in dda_state_next/previous/advance could +theoretically produce anomalies in images by allowing R = 0 (although we +don't think we've ever seen any). (gxdda.h) + - A rounding error in computing the size of portrait images could +produce a spurious 1-pixel-wide line at the edge of the image. (gxifast.c) + - When banding, images with singular or nearly singular CTM or +ImageMatrix could confuse things badly enough to cause memory access errors. +(gxclimag.c) + - Patterns were broken. (bug introduced in 5.21) (gxclip2.c) + - Because some image processing code retained a pointer to the +clipping path, which was embedded inside the gs_state_contents object, +garbage collection could cause crashes. (The only case where we know this +happened was the bounding box device, since we think all other image +enumerators preconstruct a clipping device, which does not retain a pointer +to the clipping path, rather than constructing one from the path on the +fly.) We fixed this by replacing gs_state_contents with individual objects: +see below. + - The *_.h files didn't have double-inclusion protection. (*_.h) + - ImageType 2 images were broken by the change in begin_typed_image. +(gximage2.c) + - Color-setting operators that "substitute the nearest legal value" +didn't substitute it in storage, only when using it. E.g., after +gs_setgray(pgs, 2.0), gs_currentgray(pgs) returned 2.0 rather than 1.0. +This bug has been there since release 1.0! (gxcspace.h, gscie.c, gscolor.c, +gscolor1.c, gscolor2.c, gscdevn.c, gscsepr.c, gscpixel.c, gspcolor.c) + - The RasterOp implementation for 2-bit, 4-bit, and non-gray 8-bit +devices didn't work. (gdevmrop.c) + - The test of whether to use copy_mono, fill_mask, or general +imaging for rendering characters sometimes used copy_mono when not +appropriate. (gxccache.c) + - The default implementation of fill_mask produced solid rectangles, +rather than properly masked output, if the logical operation didn't use its +source operand. (gdevdbit.c) + - Some more files needed double inclusion protection. (gscie.h) + - Checking for interrupts before a return always returned 0 rather +than the correct return code if there was no interrupt. (gsmisc.c) + - Characters within Pattern PaintProcs sometimes didn't get drawn. +(gxpcmap.c) + - The CIE color space and CRD GC structure definitions were in the +interpreter rather than the library. (gscie.h, gscie.c) + - Numeric overflows when setting up the character cache caused +errors rather than simply disabling caching for that character. (gschar.c) + - FORCE_STRIP_HALFTONES was accidentally left set to 1 (in 5.10!), +slowing down all uses of monobit halftones. (gshtscr.c) + +Implements mask clipping, which is needed for ImageType 3 images. +(gxclip2.h, gxclipm.h, gxmclip.h, gxclip2.c, gxclipm.c, gxmclip.c) + +Finishes implementing ImageType 3 and 4 images. (gsimage.h, gsiparam.h, +gsimage.c, gsiparm3.h, gximage3.c, gximage4.c) + +Starts to update the banding code to handle ImageType 3 and 4 images. +(gxclist.h, gxiparam.h, gxclimag.c, gxclist.c, gxiinit.c) + +Make eprintf_program_name, lprintf_file_{and_line,only}, and new +dlprintf_file_{and_line,only} always be procedures, rather than sometimes +macros and sometimes procedures. (std.h, gdebug.h, gsmisc.c) + +Adds new dlprintf, dlputc, and dlputs macros that are like +dprintf/dputc/dputs but also print the source file name and line number at +the beginning of the line if the -Z/ debugging switch is set. The if_debug* +macros now use dlprintf rather than dprintf; many other places also needed +changing. Note that if any place was overlooked, no great harm is done: +printout produced there simply won't include the source file and line number +even if -Z/ is set. (std.h, gdebug.h, gsmisc.c; gdevbbox.c, gdevdbit.c, +gdevdgbr.c, gdevmrop.c, gdevrun.c, gdevsvga.c, gdevx.c, gp_unifs.c, +gsalloc.c, gschar.c, gscoord.c, gsfont.c, gshsb.c, gsht.c, gshtscr.c, +gsmemory.c, gspath.c, gstype1.c, gstype2.c, gxacpath.c, gxccache.c, +gxclimag.c, gxclist.c, gxclpath.c, gxclread.c, gxcpath.c, gxfill.c, +gxidata.c, gxpath.c, gxpcopy.c, gxpflat.c, gxstroke.c) + +Simplifies storage management for graphics states by replacing +gs_state_contents with individual objects. This slows down gsave and +grestore a bit, but eliminates a class of potential obscure bugs. +(gxpath.h, gzstate.h, gsstate.c, gxcpath.c, gxpath.c) + +Adds some more information to the deubgging printout for paths. (gxpath.c) + +Modifies the library test program to test ImageType 3 and 4 images. +(ugcclib.mak, gslib.c) + +Extends the @-file parser to be more shell-like: + + - The sequence \ <newline> is ignored everywhere. + + - If a # appears as the first character on a line outside quotes, + the entire line (including the terminating newline) is ignored. + +(gsargs.h, gsargs.c) + +Changes a stem hint tracing message so that it will print with the correct +line number. (gxhint2.c) + +Moves the 'format' information for images to the image parameter structure. +This entails a NON-BACKWARD-COMPATIBLE CHANGE in the begin_typed_image +driver procedure (which was not guaranteed stable). (gsiparam.h, +gxdevcli.h, gsimage.c, gxiinit.c) + +Adds an optional matrix argument to begin_typed_image, overriding the CTM in +the imager state if present. This is needed to make masks and masked images +line up precisely; this too is a NON-BACKWARD-COMPATIBLE CHANGE. +(gxdevcli.h, gdevbbox.c, gdevddrw.c, gdevnfwd.c, gdevx.c, gxclimag.c, +gxiinit.c, gximage2.c, gximage3.c, gximage4.c) + +Adds a procedure for testing monotonicity of Functions over a given range. +(gsfunc.h, gsfunc0.c, gsfunc3.c) + +Implements smooth shading with shfill. All documented ShadingTypes (1-7) +are implemented. (gscspace.h, gsdsrc.h, gspath.h, gsshade.h, gxshade.h, +gxshade4.h, gscolor.c, gscolor3.c, gsdsrc.c, gsfunc0.c, gsfunc3.c, +gspath1.c, gsshade.c, gxshade.c, gxshade1.c, gxshade4.c, gxshade6.c) + +Changes the TrueType rasterizer to remove the assumption that the entire +loca table is stored contiguously. This may not have any practical effect, +since currently Type 42 fonts never split the loca table across segments. +(gstype42.c) + +Adds a new interface for creating CIE CRDs that provides the parameters as +separate arguments. (gscrd.h, gscrd.c) + +Starts to add the ability for a device to provide one or more default CIE +CRDs as (read-only) device parameters. (Not ready for use yet.) (gscie.h, +gscrdp.h, gscie.c, gscrdp.c) + +Adds a multiple-bit-per-pixel analogue of gs_makebitmappattern, +gs_makepixmappattern, for use by another Aladdin project. (lib.mak, +gsbitmap.h, gsptype1.h, gxbitmap.h, gspcolor.c) + +Changes the API of param_begin_write_dict so that the client can request the +creation of an array rather than a dictionary. This is a +NON-BACKWARD-COMPATIBLE CHANGE for implementors (of which there are only +2.5), but not for clients. (gsparam.h, gsparam.c) + +Adds dynamically typed data to the parameter list interface, and removes the +statically typed procedures. This isn't important for any standard facility +yet. This too is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of +parameter lists. (gsparam.h, gsparams.h, gsparam.c, gsparams.c) + +Adds a new platform-specific API for thread creation and synchronization, +and a memory manager "wrapper" that monitor-locks each call. No code +normally included in this fileset uses any of this machinery as yet. (gp.h, +gpsync.h, gxsync.h, gsmemlok.h, gsmemlok.c, gxsync.c) + +Splits off (PatternType 1) Pattern filling into a separate file, since the +file was getting too big; refactors the filling code to use procedures +rather than macros. (gxp1fill.h, gspcolor.c, gxp1fill.c) + +Makes a few more writable statics const. (gscie.h, gscscie.c, gsdll.c, +gsmemory.c, gsmisc.c, gstype1.c, gstype2.c, gxclpath.c) + +Adds a compile-time option, SYSTEM_CONSTANTS_ARE_WRITABLE, to choose whether +the system configuration values (buildtime, copyright, product, revision, +revisiondate, serialnumber) are const or not. By default they are now +const: THIS IS A NON-BACKWARD-COMPATIBLE CHANGE (affecting only one user). +(lib.mak, openvms.mak, os2.mak, unix-end.mak, wctail.mak, winlib.mak, +gscdefs.h, gscdef.c) + +Removes the dependence of std.h on PROGRAM_NAME. (std.h, gsdll.c, gsmisc.c, +gscdef.c) + +Adds a new member of the color space type structure, the size of the +smallest color space structure that will hold a color space of the given +type. Also removes the obsolete _ds modifier. (gscspace.h, gxcspace.h, +gscdevn.c, gscie.c, gscolor.c, gscolor1.c, gscolor2.c, gscpixel.c, +gscsepr.c, gspcolor.c, gxiinit.c) + +Removes set/currentrenderalgorithm, since they are useless for the purpose +for which they were intended. (gsrop.h, gsropt.h, gdevmrop.c, gsrop.c) + +Splits off gscspace.c from gscolor.c, and gscscie.c from gscie.c. (gscie.c, +gscolor.c, gscscie.c, gscspace.c) + +Adds constructor and accessor procedures for color spaces. (gscie.h, +gscolor2.h, gscsepr.h, gscspace.h, gsptype1.h, gxcolor2.h, gxcspace.h, +gscolor.c, gscolor2.c, gscscie.c, gscsepr.c, gscspace.c, gslib.c, +gspcolor.c) + +Changes the CIEBased color space structures slightly to allow implementation +of the CIEBasedDEF[G] color spaces. (gscie.h, gscie.c) + +Changes gs_malloc_limit from a static to a member of the allocator +structure. This is a NON-BACKWARD-COMPATIBLE CHANGE for clients that +declared this variable as an extern. (gsmalloc.h, gsmemory.c) + +In order to eliminate some statics, changes the static color space accessors +(gs_color_space_Device*) so they require a const gx_imager_state as +parameter, and changes their names as well to avoid confusion. This is a +NON-BACKWARD-COMPATIBLE CHANGE not only in these accessors, but also in +gs_image_t_init_{gray,color}. This is very unfortunate, but we see no way +to avoid it. (gscspace.h, gsiparam.h, gxistate.h, gscolor1.c, gscscie.c, +gscspace.c, gsimage.c, gspcolor.c, gsstate.c, gxclread.c, gxiinit.c, +gximage2.c, gximage3.c, gximage4.c) + +Unifies the handling of const for the IODevice table. (gscdefs.h, +gxiodev.h, gconf.c, gsiodev.c) + +Changes the register_root memory manager call so that a NULL as the pointer +to the root structure asks the memory manager to allocate the root structure +itself. This is a NON-BACKWARD-COMPATIBLE CHANGE for implementors of the +memory manager API (of which there are only 3). (gsmemory.h, gsstruct.h, +gsalloc.c, gsmemory.c) + +Adds a new GC structure type, suffix_add0_local, which is a more efficient +form of suffix_add0 that can be used when the supertype is defined in the +same file as the subtype. (gsbitmap.h, gscie.h, gsshade.h, gsstruct.h) + +Uses the new package replacement facility in the makefile to make RasterOp +optional without tinkering with statics at runtime. (lib.mak, gxdevice.h, +gxdevrop.h, gdevdbit.c, gdevdflt.c, gdevmrop.c, gdevnfwd.c, gsnorop.c, +gsropc.c) + +Makes RasterOp really optional. (gdevmrop.h, gsrop.h, gdevmrop.c, gsrop.c, +gxiinit.c) + +Rewrites bits_fill_rectangle to get rid of nearly all the macros. +(gxbitops.h, gsbitops.c) + +Removes the obsolete _ds from gs_log_error. (gserror.h, gsmisc.c) + +</pre> + +<hr> + +<h2><a name="Version5.22"></a>Version 5.22 (limited) (2/19/98)</h2> + +<p> +This fileset has a few more bug fixes, a major overhaul of memory management +for paths so that we can do view clipping in a reasonable way, and the +ability to build executables in a different directory from the sources. + +<h3><a name="V5.22_Documentation"></a>Documentation</h3><pre> + +Designates gv as the preferred VMS and Unix previewer. (new-user.txt, +use.txt) + +Adds a pointer to post-release documentation. (README) + +Notes that compilation with certain platforms and compilers must turn off +optimization. (make.txt) + +Improves the documentation of the fit_fill and fit_copy macros. +(gxdevice.h) + +</pre><h3><a name="V5.22_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The ccgs script for non-ANSI compilers was no longer flexible +enough to handle all the possible command lines. (ccgs) + - The pdfwrite device was missing on the DesqView/X platform. +(dvx-gcc.mak) + - The System V build procedure was broken. (unixtail.mak) + - A Watcom makefile lacked parentheses around a macro name. +(wctail.mak) + - Some `make' programs drop trailing spaces in macro definitions: we +didn't work around this. (os2.mak, unixhead.mak, winlib.mak) + +Adds support for WCVERSION=11.0 in the Watcom makefiles. (watc.mak, +wccommon.mak) + +Adds a shell script for removing the 'includes' from makefiles, since a very +few Unix systems don't support this capability. (catmake) + +Changes -dNOPROMPT to -dNOPAGEPROMPT, and adds -dNOPROMPT to suppress both +the end-of-page prompt and the executive prompt. (use.txt, gs_init.ps) + +Adds definitions of {GL,PS}{SRC,GEN,OBJ}DIR to the top-level makefiles, +removing these definitions from gs.mak. (*.mak, gs.mak) + +Adds explicit directories to more makefile rules. We can now do builds with +source, GL/PS generated files, and GL/PS object files in 5 different +directories! (*.mak, gsjconf.h) + +</pre><h3><a name="V5.22_Utilities"></a>Utilities</h3><pre> + +Adds a user-contributed utility that runs dvips followed by ps2pdf. +(dvipdf, unixinst.mak) + +</pre><h3><a name="V5.22_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A pointer was incorrectly declared const. (gdevpdfm.c) + - pdfwrite handled the Title element of ARTICLE pdfmarks +incorrectly. (gdevpdfm.c) + - pdfwrite inserted a Dest element in Link annotations even if an A +(Action) key was present. (gdevpdfm.c) + - pdfwrite didn't recognize and convert /Article actions in +pdfmarks. (gdevpdfm.c) + +Replaces some open-coded accesses to path structure elements with macros, in +anticipation of a representation change. (gdevpdfd.c) + +Moves pdfwrite further towards supporting Dict and ACSDict Distiller +parameters. (gdevpsdf.h, gdevpsdp.c, gdevpsfp.c) + +Updates a few places for the change in the path API. (gdevpdfd.c, +gdevvec.c) + +Adds recognition of named object references to the PDF writer, fixing many +bugs in the named object code in the process. (gdevpdfx.h, gdevpdfm.c, +gdevpdfo.c) + +Enhances pswrite to skip fills or strokes of completely empty paths, to +recognize horizontal and vertical lines, and to abbreviate color settings +based on 8-bit fractions. This requires a NON-BACKWARD-COMPATIBLE CHANGE in +the "vector" device interface (which was, however, clearly identified as +subject to change without notice). (gdevpsdf.h, gdevvec.h, gdevps.c, +gdevpsdf.c, gdevpx.c, gdevvec.c) + +</pre><h3><a name="V5.22_Interpreter"></a>Interpreter</h3><pre> + +Updates a few places for the change in the path API. (zupath.c) + +Implements %statementedit properly. (iscan.h, iscan.c, ziodev.c) + +Changes the initialization code so that if DELAYBIND is set, .forcedef and +.forceput remain accessible until .bindnow is called. (gs_init.ps) + +</pre><h3><a name="V5.22_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - An empty Differences array, which Acrobat Distiller 3.02 can emit, +caused a rangecheck error. (pdf_font.ps) + +</pre><h3><a name="V5.22_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - The alternative LZWEncode filter didn't emit a reset code as the +first code, and waited one code too long to emit a reset. (slzwce.c) + +Adds some double-inclusion protection. (scfx.h) + +</pre><h3><a name="V5.22_Library"></a>Library</h3><pre> + +Fixes bugs: + - There was an (incorrect) assignment to a read-only structure +member. (gximage2.c) + - A formal parameter list was incorrect if __PROTOTYPES__ wasn't +defined. (gsroptab.c) + - Some images didn't get clipped properly when banding. This was a +fix for 5.03 that somehow didn't make it into 5.10. (gxclimag.c) + - When banding, dashed lines could cause an invalid memory access. +This was apparently caused by an error in a fix made in 5.04. (gsline.c) + - Images with non-zero data_x could cause an invalid memory access. +(gxiinit.c, gxidata.c) + - The band list rasterizer didn't initialize the image structure +properly, causing control to go to a random address. (gxclread.c) + +Replaces some open-coded accesses to path structure elements with macros, in +anticipation of a representation change. (gxpath.h, gzpath.h, gspath1.c, +gxfill.c, gxpath2.c, gxstroke.c) + +Changes the path and clipping path structures so that segments and clipping +lists are stored in separate, reference-counted structures. This finally +supports reliable freeing of path segments and clipping lists even in the +presence of off-stack gstates, and the ability to store the original +segments of a clipping path, both of which we have wanted for a long time. +Unfortunately, it requires SIGNIFICANT NON-BACKWARD-COMPATIBLE CHANGES TO +THE API FOR PATHS: + Paths: + - adds gx_path_alloc_contained; + - gx_path_init => gx_path_init_local (or nothing); + - gx_path_reset => gx_path_new; + - removes gx_path_share and gx_path_release; + - gx_path_assign => gx_path_assign_{preserve,release}; + - renames gx_path_expand_dashes => gx_path_add_dash_expansion, + gx_path_flatten[_accurate] => gx_path_add_flattened[_accurate], + gx_path_monotonize => gx_path_add_monotonized; + - removes the init Boolean from gx_path_copy[_reversed]. + Clipping paths: + - gx_cpath_init => gx_cpath_init_local (or nothing); + - removes gx_cpath_share and gx_cpath_release_segments; + - gx_cpath_path => gx_cpath_to_path; + - removes the mem argument from gx_cpath_from_rectangle. +We believe that we either renamed or changed the argument list of every API +function that was affected in a non-backward-compatible way, so incompatible +clients will get either compilation or linking errors. (gxpath.h, +gzcpath.h, gzpath.h, gschar.c, gsdps.c, gsdps1.c, gspaint.c, gspath.c, +gspath1.c, gsstate.c, gxacpath.c, gxccache.c, gxclpath.c, gxclread.c, +gxcpath.c, gxfill.c, gxpath.c, gxpath2.c, gxpcmap.c, gxpcopy.c, gxpdash.c, +gxstroke.c) + +Reimplements view clipping bookkeeping to use reference-counted paths. +(gzstate.h, gsdps.c, gsstate.c) + +Adds const in a couple more places. (gxpath2.c) + +If -Z? is enabled, makes the reference counting machinery check for +reference counts going negative. (gsrefct.h) + +Adds the first bit of code for rendering smooth shadings. The code is +nowhere near usable. (gsshade.h, gxshade.h, gsshade.c, gxshade.c) + +Adds BEGIN ... END macros for creating compound statements that are +syntactically equivalent to single statements. (stdpre.h) + +</pre> + +<hr> + +<h2><a name="Version5.21"></a>Version 5.21 (limited) (1/19/98)</h2> + +<p> +This is primarily a bug fix fileset for 5.20, with a little new +functionality (pdfwrite image downsampling and more complete pdfmark +processing). + +<h3><a name="V5.21_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The build procedures still referred to tar_cat. (make.txt) + +Documents some user-developed patches for using certain kinds of Japanese +fonts with Ghostscript. (new-user.txt) + +Notes that on Solaris 2.x systems, it is probably not a good idea to use +Sun's fonts. (use.txt) + +Documents -dSTRICT. (use.txt) + +</pre><h3><a name="V5.21_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The definitions of MAKEFILE in several makefiles was incorrect. +(dvx-gcc.mak, unix-cc.mak, unixansi.mak) + - The build rules for the gp_*.$(OBJ) files lacked a directory name, +confusing most 'make' programs. (*.mak) + - geninit didn't work, because the syntax of psfile_() entries in +gconfig.h had changed. (geninit.c) + - Some files were created and then deleted during building, +preventing [gnu]make -j from working. (lib.mak, int.mak) + +Adds an explicit directory name to more files in the makefiles. (jpeg.mak, +lib.mak) Added in this fileset: + .$(OBJ): jpeg.mak, {dvx-tail,msvclib,openvms,os2,ugcclib,unixtail, + watc,watclib,winint,winlib}.mak + .dev: jpeg.mak + +Removes the default suppression of 'const' with gcc. You must now compile +with gcc 2.7.2.1 or newer, or patch the makefile. (ugcclib.mak, +unix-gcc.mak) + +Removes -DPNG_USE_CONST from the command line for compiling libpng, since +this has never actually worked, and is handled in a different way starting +with libpng 0.97. (gs.mak) + +Adds a -dSTRICT switch that disables some Ghostscript extensions, to be more +helpful in debugging applications that produce output for Adobe and other +RIPs. (gs_init.ps, gs_statd.ps) + +</pre><h3><a name="V5.21_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Many occurrences of 'const' were missing or incorrect. +(gdevpdfd.c, gdevpdfi.c, gdevpdfo.c, gdevpdft.c) + - pdfmark processing was broken by changes introduced in 5.20. +(gs_pdfwr.ps) + - pdfwrite didn't convert /Color => /C or /Title => /T in ANN and +LNK pdfmarks. (gdevpdfm.c) + - pdfwrite didn't convert /Dest => /D or /File => /F in the Action +dictionary of ANN and LNK pdfmarks. (gdevpdfm.c) + - pdfwrite didn't convert a /Launch annotation to an Action with a +dictionary. (gdevpdfm.c) + - pdfwrite didn't convert \n in annotation Contents strings to \r. +(gdevpdfm.c) + - jstrm.state was used before being set. (gdevjpeg.c) + - The SVGA devices were not identified as page devices. +(gdevsvga.c) + - The SPARCPrinter driver returned the address of a local buffer +containing an error string. (gdevsppr.c) + - pdfwrite no longer compressed character bitmaps. (bug introduced +in 5.20) (gdevpdfi.c) + - pdfwrite didn't recognize _objdef syntax everywhere. (gdevpdfx.h, +gdevpdfm.c, gdevpdfo.c) + - pdfwrite didn't recognize and convert Launch and GoToR OUT +pdfmarks. (gdevpdfm.c) + - pdfwrite used a /Dest key rather than a /P key for the page number +in articles. (gdevpdfx.h, gdevpdfm.c) + - pdfwrite didn't save and write the /I dictionary for articles. +(gdevpdfx.h, gsstruct.h, gdevpdf.c, gdevpdfm.c) + +Implements a parameter list "reader" that prints the parameter values on a +stream in PS/PDF syntax. (We need something like this for printing filter +parameters.) (gdevpsdf.h, gdevpdf.c, gdevpsdf.c) + +Implements a write stream that just keeps track of the position. We use +this to determine how much space to allocate for data we're going to save. +(gdevpsdf.h, gdevpsdf.c) + +Implements image downsampling, but not anti-aliasing, for the PDF writer. +(gdevpsdf.h, gdevpsds.h, gdevpsdi.c, gdevpsds.c) + +</pre><h3><a name="V5.21_Fonts"></a>Fonts</h3><pre> + +Adds Frutiger to the built-in list of sans-serif fonts. (gs_fonts.ps) + +</pre><h3><a name="V5.21_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Many occurrences of 'const' were missing. (gsargs.c, ialloc.c, +zdpnext.c, zfunc3.c, zshade.c) + - Some byte * => char * casts were missing. (imainarg.c) + - The stack limit check in .eqproc was wrong. (zmisc3.c) + - The paper sizes a4small and lettersmall weren't implemented. +(gs_statd.ps) + - setuserparams signalled errors on 64-bit systems. (zusparam.c) + +Changes .image2 to track the change in the library. (zdps.c) + +Some improvements were made to the (still not entirely functional) Type 32 +font code. (zchar32.c) + +Updates some filters to use the new procedure for transmitting collections +of parameters. (zfdecode.c) + +Adds ISO paper sizes C0 through C6. (gs_statd.ps) + +Trims down the list of #includes in iconf.c. (iconf.c) + +</pre><h3><a name="V5.21_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - CalGray color spaces with a Gamma value caused an error. +(gs_pdf.ps) + +</pre><h3><a name="V5.21_Library"></a>Library</h3><pre> + +Fixes bugs: + - There was a 'const' conflict in the code for handling ImageType 2 +images. Fixing this properly required a small change in the ImageType 2 +structure. (gsiparm2.h, gximage2.c) + - Many occurrences of 'const' were missing. (gsfunc3.h, gstrap.h, +gxgetbit.h, gdevdgbr.c, gstrap.c, gxclist.c, gxclread.c) + - A couple of enumerations had trailing commas. (gsshade.h, +gxbitfmt.h) + - The gcst parameter was omitted in the non-ANSI version of the +ENUM_PTRS_BEGIN_PROC macro. (gsstruct.h) + - gcc missed a private / non-private discrepancy. (gxpcmap.c) + - An uninitialized variable was used by mistake +(copy_params.options). (gdevdgbr.c) + - The last statement of a procedure was unreachable. (gxclpath.c) + - If a Type 2 font was transformed so that hints were not being +used, hintmask and cntrmask didn't compute the number of following bytes +correctly. (gxtype1.h, gstype2.c, gxtype1.c) + +Factors out some common code in gxclip2.c into macros. (gxclip2.c) + +Starts to reimplement RasterOp using the compositing framework. (gsropc.h, +gxropc.h, gsropc.c) ****** IN PROGRESS ****** + +Adds an equality-testing procedure for device colors. This is used both for +color images (which previously did this adhoc) and for RasterOp compositing. +(gxdcolor.h, gximage.h, gxcht.c, gxdcolor.c, gxht.c, gspcolor.c) + +Implements hintmask (but not cntrmask) for Type 2 CharString fonts. I don't +know any reasonable way to test whether it's working, though. (gxtype1.h, +gstype2.c, gxhint2.c, gxhint3.c, gxtype1.c) + +Adds a more convenient interface for reading and setting sets of parameters. +(gsparam.h, gsparam.c) + +Pulls the decision as to whether to halftone for a given device out into a +macro. Eventually we will do something more sophisticated about this. +(gxdevice.h, gxclist.c, gxcmap.c) + +Breaks apart a macro in anticipation of future usage. (gsrefct.h) + +</pre> + +<hr> + +<h2><a name="Version5.20"></a>Version 5.20 (limited) (1/8/98)</h2> + +<p> +This fileset provides enough of the Display PostScript capabilities to start +running real programs. It also adds the first few LanguageLevel 3 features +(none of which have been tested) and reorganizes the makefile structure +somewhat. There are many internal changes since 5.10, some of them still in +progress, so we expect more problems than usual. + +<p> +This fileset is being provided for testing in two different configurations: +a full release, and a DPS-only package. The latter will be released with +the GPL when it is reasonably complete and reliable. + +<h3><a name="V5.20_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - TrueType fonts on GS_FONTPATH weren't recognized. (use.txt) + - The argument list for gstate was incorrect. (zdevice2.c) + - There were a couple of minor errors in the e-stack documentation. +(estack.h) + - fonts.txt had several errors regarding compiled fonts. +(fonts.txt) + - An out-of-date Aladdin address still appeared in documentation. +(new-user.txt) + +Updates make.txt to reflect the changes in makefile structure. (make.txt) + +Notes the addition of -Z' and -Z". (use.txt) + +Documents the new begin_typed_image, get_bits_rectangle, +map_color_rgb_alpha, and create_compositor driver procedures. (drivers.txt) + +Moves documentation for all releases before 5.0 to history4.txt. (NEWS, +history4.txt) + +Documents the addition of SHARE_JPEGLIB. (make.txt) + +Removes the author's name and e-mail address from the ps2ascii man page, at +his request. (ps2ascii.1) + +Documents the addition of (some) image compression facilities to ps2pdf / +pdfwrite. (ps2pdf.txt) + +Documents the new -dNOINTERPOLATE and -F<n> switches. (use.txt) + +Adds documentation for a user-contributed port to the SMS/QDOS operating +system. (new-user.txt) + +Removes documentation for BGI, which is no longer supported. (use.txt) + +Documents the use of the Registry and the GS_DLL environment variable on +Windows platforms. (install.txt) + +</pre><h3><a name="V5.20_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The OpenVMS makefile referred to EXTEND_NAME rather than +EXTEND_NAMES. (openvms.mak) + - A typo caused a spurious error message from lpr. (unix-lpr.sh) + - The PDF writer didn't include a needed dependency on zlib +compression. (devs.mak) + - The rule for the OS/2 printer device was wrong. (devs.mak) + - The -migrate switch was incorrectly removed from the command line +for pre-4.0 Digital Unix. (make.txt) + - The -r switch was ignored with -dNODISPLAY. (gs_init.ps) + +Adds targets for Type 32 fonts (type32.dev) and PostScript LanguageLevel 3 +(psl3.dev, psl3core.dev, psl3read.dev). (gs.mak, int.mak, lib.mak) + +Changes the documented feature names for PostScript Level 1 and 2 +interpreters from level1/2 to psl1/2. The old names are still recognized +for backward compatibility. (gs.mak, int.mak, *.mak) + +Removes support for building with DCL under VMS. Building under VMS now +requires some version of make, preferably GNU make. THIS IS A +NON-BACKWARD-COMPATIBLE CHANGE, but there was plenty of lead time for users +(it was announced in 5.01, 6/22/97). (vms*.mak[deleted]) + +Starts to add an explicit directory name to every file in the makefiles, to +allow building multiple object versions (e.g., debug, profile, product) or +cross-building for multiple platforms in separate directories without any +makefile editing. (*.mak) Done so far: +(done) _h= devs.mak gs.mak int.mak jpeg.mak lib.mak +(done) .h devs.mak gs.mak int.mak lib.mak zlib.mak + openvms.mak os2.mak ugcclib.mak unix-end.mak + unixtail.mak wctail.mak winint.mak winlib.mak + .$(OBJ): devs.mak int.mak (except ccfonts) + lib.mak (except special compilations) + libpng.mak zlib.mak + .dev: libpng.mak zlib.mak + +Gets rid of tar_cat. Building on Unix platforms now requires that make +recognize the include directive. THIS IS A NON-BACKWARD-COMPATIBLE CHANGE: +rather than editing the *head.mak files, users should now edit the unix*.mak +or dvx*.mak files (which they previously were instructed NOT to do). Aside +from this, we think the change won't actually affect anyone, since most Unix +make programs (include GNU make) do recognize this directive. (*.mak, +ansihead.mak[deleted], cc-head.mak[deleted], gcc-head.mak[deleted], +dgc-head.mak[deleted], tar_*cat[deleted], dvx-gcc.mak, unixansi.mak, +unix-cc.mak, unix-gcc.mak) + +Includes the basic context machinery in every PostScript interpreter +configuration. (int.mak) + +Removes the division between 'low-level' and 'high-level' band list +facilities: we once thought we might make the latter optional, but this no +longer seems useful. (lib.mak) + +Introduces a new category of devices, identified to genconf as -dev2 and +created with SETDEV2 and SETPDEV2. For the moment, these are the same as +existing devices except that their static instance is const, but we plan to +make them quite different in the future: don't attempt to create any. +(devs.mak, gs.mak, genconf.c, gconf.c) + +Removes the obsolete -includef resource from genconf. (genconf.c) + +Removes support for IJG JPEG library v5* from the makefile, since we no +longer support these library versions. (jpeg.mak, lib.mak, +gsjerror.h[deleted], gsjpglib.h[deleted], gsjerror.c[deleted]) + +Makes the JPEG library use floating point if it is fast. (gsjmorec.h) + +Adds a SHARE_JPEG option to the makefiles, with the necessary warning about +possible incompatibilities. (*.mak) + +Replaces the CCC macro in the makefiles with CC_, the various CC* macros +with CC_* (except for CCA2K and CCAUX), and the O macro with O_; removes the +'begin' target and the CCBEGIN macro. THIS IS A NON-BACKWARD-COMPATIBLE +CHANGE, required for the new arrangement of files into directories. (*.mak) + +Replaces all occurrences of -Idir1 -Idir2 ... -Idirn in platform-generic +makefiles with $(I_)dir1 $(II)dir2 ... $(_I)dirn, and defines these macros +in platform-specific makefiles, in order to accommodate OpenVMS command +syntax. (*.mak) + +Adds -fno-common to the default gcc compilation and linking switches, to +improve checking for doubly-defined externs. (unix-gcc.mak) + +Adds a -dNOINTERPOLATE switch to turn off image interpolation. (gs_init.ps) + +Adds a -F<file> switch that runs files through the run_string interface with +an 1-byte buffer. (imainarg.c) + +Allows specifying the name of the gconfig.h file with -DGCONFIG_H= in the +compilation command line, to support certain multi-configuration build +procedures. (int.mak, lib.mak, gconf.h, gconf.c, gscdef.c, iconf.c) + +Splits off the installation targets from unix-end.mak. (unix-end.mak, +unixinst.mak, unix*.mak, ugcclib.mak) + +</pre><h3><a name="V5.20_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - A case label was misplaced. (No effect on normal operation.) +(genconf.c) + - ps2ascii had some Encoding-related problems, and a serious bug +causing the stack to grow indefinitely. (ps2ascii.ps) + +Adds a new font2pcl.ps utility, for converting outline fonts to bitmapped +PCL fonts. (font2pcl.ps) + +At the request of a user, modifies ansi2knr to read stdin if no input file +is supplied, and to accept an optional --filename switch to set the file +name in the #line directive. Also makes ansi2knr write the usage message on +stderr rather than stdout. (ansi2knr.c) + +Adds a user-contributed Perl script that fixes compatibility problems +between MS Word output and Ghostview 1.5. (fixmswrd.pl) + +Adds a new test file that produces some pretty color output. (vasarely.ps, +unix-end.mak) + +Adds a user-contributed utility for producing AFM files from PFA/PFB and +optionally PFM files. (pf2afm.bat, pf2afm.ps) + +</pre><h3><a name="V5.20_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Some 'static' declarations were missing (gcc lossage). (gdevht.c, +gdevmgr.c, gdevpcfb.c, gdevrrgb.c) + - Some 'char *' should have been 'unsigned char *'. (gdevccr.c) + - The PDF writer represented non-rectangular clipping paths in a way +that could cause Acrobat to produce incorrect output. (The fix relies on +the new clipping path enumeration facility.) (gdevpdfd.c) + - get_params for the X device didn't read the WINDOWID and +.IsPageDevice parameters. (gdevx.c) + - A superseded driver was still in the distribution. +(gdevnp6.c[deleted]) + - The PDF writer's default parameters didn't quite match the default +parameters of Adobe Acrobat(TM). (gdevpsdf.h) + - A cast from const byte * to const char * was omitted. +(gdevpdft.c) + - x_map_color_rgb returned incorrect values for values in the dither +cube/ramp. (gdevx.c) + +Adds user-contributed drivers for: + - the Brother HL 720/730 laser printer (gdevhl7x.c); + - the Cirrus Logic CL-GD54xx SuperVGA chipset (in gdevsvga.c). + +Adds stubs or dummy implementations for the new Acrobat Distiller 3.0 +pdfmark features (BP/EP/SP, _objdef/OBJ, PUT/PUTINTERVAL/CLOSE). Features +not yet implemented: + - Predefining Catalog and DocInfo. + - Writing out added Catalog and Info keys. + - Special handling for Page#, Prev/This/NextPage. + - Writing out added keys in Page objects. + - Defining objects for ANN, DEST, LNK, PS. + - Writing out added keys for ANN, BP, DEST, LNK, PS. + - Adding information to streams (PUT, CLOSE). + - Writing out streams. +(gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfi.c, gdevpdfm.c, gdevpdfo.c) + +Removes the DoThumbnails distiller parameter, which Acrobat Distiller 3.0 no +longer supports. (gs_pdfwr.ps, gdevpdfx.h, gdevpdf.c, gdevpdfp.c) + +Starts to eliminate or segregate writable globals that point to +heap-allocated data, as in the interpreter (see below); specifically, makes +all device and xfont procedure structures const in devices that Aladdin +maintains. Note that this involves a NON-BACKWARD-COMPATIBLE CHANGE in the +get_xfont_procs device procedure (to add const to the return type); this +only affects the 3 implementations of xfonts. (gdevprn.h, gdevdjet.c, +gdevm1.c, gdevpccm.c, gdevpdf.c, gdevpdfm.c, gdevpdft.c, gdevps.c, +gdevpsdf.c, gdevpx.c; gxdevice.h, gxxfont.h, gdevbgi.c, gdevbit.c, +gdevbmp.c, gdevdflt.c, gdevdjet.c, gdevlj56.c, gdevmiff.c, gdevmsxf.c, +gdevnfwd.c, gdevpbm.c, gdevpcfb.c, gdevpdf.c, gdevpng.c, gdevprn.c, +gdevps.c, gdevpx.c, gdevs3ga.c, gdevsvga.c, gdevtfax.c, gdevtfnx.c, +gdevvglb.c, gdevwddb.c, gdevwdib.c, gdevwpr2.c, gdevwprn.c, gdevx.c, +gdevxalt.c, gdevxxf.c, gxccman.c) + +Makes the statically allocated device templates const in some devices, using +the new -dev2 device resource type. NOTE: the meaning of -dev2 is subject +to change without notice in future releases. (gdevdjet.c, gdevpdf.c, +gdevps.c, gdevpx.c, gdevvglb.c) + +Adds a new begin_typed_image driver procedure which is called for all types +of images, not just ImageType 1. The default implementation calls +begin_image if the ImageType is 1. (gdevmem.h, gdevprn.h, gsiparam.h, +gxdevice.h, gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c, +gxacpath.c, gxclimag.c, gxclip2.c, gxclist.c, gxcpath.c, gxpcmap.c) + +Adds a new get_bits_rectangle driver procedure which allows reading back an +arbitrary rectangle of bits from the device, not just a single full scan +line. The default implementation calls get_bits, being careful to avoid a +recursion loop; the default implementation of get_bits calls +get_bits_rectangle similarly. This procedure has a lot of flexibility, +almost all of which is ultimately provided by the implementation in memory +devices. (gdevmem.h, gsbitops.h, gxcindex.h, gxdevice.h, gdevbbox.c, +gdevdflt.c, gdevdgbr.c, gdevht.c, gdevm*.c, gdevmem.c, gdevmpla.c, +gdevnfwd.c, gxbitfmt.h, gxclip2.c, gxclist.c, gxclread.c, gxcpath.c, +gxgetbit.h) + +Removes support for the BGI (Borland Graphics Interface) device, since we no +longer support the Borland compilers for MS-DOS. (devs.mak, dvx-head.mak, +openvms.mak, unixhead.mak, gdevbgi.c[deleted]) + +Speeds up x_map_color_rgb by avoiding server access in most cases. +(gdevx.h, gdevx.c, gdevxini.c) + +Implements get_bits_rectangle in the X driver in place of get_bits. +(gdevx.c, gdevxalt.c) + +Implements begin_typed_image for ImageType 2 images in the X driver, as an +example of how a driver can implement this function itself. (gdevx.c) + +Adds a call on the DCTEncode set_defaults procedure, which is now required +(see under Streams below). (gdevjpeg.c) + +Implements a substantial part of the Distiller image compression machinery. +See ps2pdf.txt for details. (gdevpdfx.h, gdevpsdf.h, gdevpdf.c, gdevpdfi.c, +gdevps.c, gdevpsdf.c, gdevpsdi.c, gdevpsdp.c, gdevpsds.c) + +Adds a map_color_rgb_alpha driver procedure, complementing +map_rgb_alpha_color. (gdevmem.h, gdevprn.h, gxdevice.h, +gdevbbox.c, gdevdflt.c, gdevht.c, gdevmrop.c, gdevnfwd.c, gdevprn.c, +gxclip2.c, gxclist.c, gxcmap.c, gxcpath.c) + +Splits off gxdevcli.h (client definitions) from gxdevice.h, which had gotten +very large. This doesn't do much good yet in terms of reducing dependencies +and compilation time, because every client still includes gxdevice.h, but +it's the raw material for doing so in the future. (gxdevcli.h, gxdevice.h) + +Adds alpha tracking to the command list. (gxclpath.h, gxclimag.c, +gxclpath.c, gxclread.c) + +Changes the 'show' pseudo-parameter for the PDF writer so that it takes +multiple additional parameters instead of a dictionary. This greatly +reduces garbage collection overhead. (gs_pdfwr.ps, gdevpdfx.h, gdevpdfp.c, +gdevpdft.c) + +Adds a create_compositor driver call for handling compositing. (gdevbbox.h, +gdevmem.h, gdevprn.h, gsdevice.h, gxdevcli.h, gxdevice.h, gdevbbox.c, +gdevdflt.c, gdevht.c, gdevnfwd.c, gsdevice.c, gxclimag.c, gxclip2.c, +gxclist.c, gxcpath.c, gxpcmap.c) + +Updates drivers to account for the more careful handling of file name +length. (gdevpdfx.h, gdevwprn.c) + +Adds a user-contributed enhancement to make the Epson dot matrix driver work +at 180x60dpi and 240x180dpi for 24 pin printers. (gdevepsn.c) + +</pre><h3><a name="V5.20_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The Windows platform didn't put stdin into binary mode. +(dwmainc.cpp) + +Removes all remaining uses of gs_malloc and gs_free in platform-specific +code. (gp_dosfb.c, gp_vms.c) + +Adds a platform-specific gp_getenv call, to allow the Windows implementation +to consult the Registry. (gp.h, gpgetenv.h, gp_getnv.c, gp_wgetv.c, *.mak, +gp_win32.c) + +Separates out the declaration of popen and pclose, which may be declared +correctly in stdio.h, incorrectly in stdio.h, or not at all, depending on +the platform. (lib.mak, unixtail.mak, pipe_.h, gdevpipe.c, gp_os2.c, +gp_os9.c, gp_unix.c) + +Tweaks the platform-workaround header file conditionals a little more. +(malloc_.h, memory_.h). + +Makes the Windows DLL check the GS_DLL environment/registry variable for the +location of the DLL. (dwdll.cpp) + +Defines the maximum length for the file name returned by +gp_open_scratch_file, and possibly by gp_open_printer. (gp.h, gp_*.c) + +</pre><h3><a name="V5.20_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - A 'flush' was missing from a debugging message. (gs_fonts.ps) + - Type 2 fonts didn't always have a PaintType entry. (gs_cff.ps) + - CIDFontType 0 fonts were broken, probably because of a recently +added validity test in the C code. (gs_cidfn.ps) + - Font types without an Encoding caused an error (in .completefont). +(gs_fonts.ps) + - composefont required the elements of the font array to be actual +fonts, rather than allowing font names. (gs_cidfn.ps) + - composefont required that all elements of the font array have +CIDSystemInfo dictionaries. (Adobe has said that their interpreters don't +check for this in some cases, but it's a bug. Unfortunately, by now it's an +established one.) (zfcmap.c) + +Adds .dir to the list of file suffixes known not to be fonts. (gs_fonts.ps) + +</pre><h3><a name="V5.20_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - A Type 2 font that provided fewer CharStrings than charset +elements caused an error. (gs_cff.ps) + - If a context was joined before it terminated, its stack was never +copied to the joining context. (zcontext.c) + - Freeing a context didn't free most of its substructures. +(icontext.h, istack.h, icontext.c, interp.c, istack.c, zcontext.c) + - save and restore didn't save and restore the user parameters. +(gs_lev2.ps, zvmem2.c) + - %stdin and %stdout weren't defined per-context. (files.h, +icontext.h, icontext.c, ziodev.c) + - Switching contexts didn't clean up the stacks. (The current way +we do this is very inefficient: we should use a special null for filling the +untouched area, so we can use it to detect the high water mark.) +(icontext.c) + - A cast from const to non-const was missing. (zdpnext.c) + - User parameters weren't managed per-context. (The current way we +do this is inefficient.) (gs_dps.ps, gs_init.ps, gs_lev2.ps, isave.h, +icontext.c, iinit.c, isave.c, zcontext.c, zusparam.c) + - Some operand checks weren't wrapped in do { ... } while(0), +possibly leading to incorrect parsing of 'if's. (opcheck.h) + - If a context terminated with unmatched saves, the restores weren't +executed. (isave.h, isave.c, zcontext.c) + - If two or more contexts shared the same global VM, the outermost +restore (which in this case saves only local VM) checked for invalidrestore +incorrectly. (isave.c) + - resourceforall didn't remove its own temporary values from the +operand stack when calling the procedure. (gs_res.ps) + - resourceforall returned local instances even when currentglobal +was true. (gs_res.ps) + - If a context had unmatched saves, other contexts sharing the same +local VM weren't blocked from running. (zcontext.c) + - The NeXT compositing operations (Copy, etc.) weren't defined in +systemdict. (gs_dpnxt.ps) + - In the case of a stack overflow, some garbage could get left on +the stack. (istack.c) + - Stack overflow was reported prematurely -- typically when the +stack depth had reached half the specified limit. (istack.c) + - Freed ref arrays weren't filled with nulls, which could confuse +the garbage collector later. (ialloc.c) + - Certain stack overflow conditions could put a stack into an +anomalous state that confused the garbage collector. (istack.c) + - The maximum stack size could not be set to a value smaller than +the current allocated space, but the minimum value should be the number of +entries actually in use. (istack.c) + - If .buildfont* had to add any elements to the font dictionary, a +temporary pointer to the Encoding, FDepVector, or sfnts could become +invalid, causing crashes or confusion. (zfont0.c, zfont2.c, zfont42.c) + +Changes exit, stop, and .stop so that if there is no matching dynamically +enclosing context (loop or stopped), the effect is a quit, like the Adobe +interpreters, and not an invalidexit. (zcontrol.c) + +Adds support for ImageTypes other than 1. (gs_init.ps, gs_lev2.ps, +gs_res.ps, zimage2.c) + +Adds support for LanguageLevel 3 features: + - Idiom recognition in 'bind'. (gs_init.ps, gs_dps.ps, gs_lev2.ps, +gs_ll3.ps, zmisc3.c) + - HalftoneTypes 6, 10, and 16. (gs_ll3.ps) + - FunctionType resource category. (gs_ll3.ps) + - FunctionType 2 and 3 Functions. (zfunc3.c) + - PatternType 2 and smooth shading (structures and API only, no +algorithms). (gs_init.ps, gs_ll3.ps, gs_res.ps, zshade.c) + - In-RIP trapping (structures and API only, no algorithms). +(gs_ll3.ps, ztrap.c) + - ImageType 3 and 4 (masked images) (structures and parsing only, no +algorithms). (gs_ll3.ps, gs_res.ps, iimage2.h, zimage.c, zimage2.c, +zimage3.c) + - DevicePixel color space. (gs_lev2.ps, zcolor2.c, zcspixel.c) + - DeviceN color space. (gs_lev2.ps, igstate.h, zcsdevn.c) + +Adds support for Type 32 fonts. (gs_cidfn.ps, gs_init.ps, gs_typ32.ps, +zchar32.c, zfont32.c) + +Adds debugging printout to the CFF loader. (gs_cff.ps) + +Removes support for _ds pointers referencing the stacks, since we no longer +support 16-bit implementations. (iref.h, istack.h, interp.c, ireclaim.c, +istack.c) + +Removes all #ifdef DPNEXT conditionalization. (We had intended to use this +to delimit blocks of code to be released with the GPL, but we're now +planning to release a much larger number of files.) (igstate.h, interp.h, +istruct.h, interp.c, zgstate.c) + +Allows user parameters to be implemented partly in PostScript code, since +this is required for some LanguageLevel 3 features (currently only +IdiomRecognition). (gs_lev2.ps) + +Removes most of the references to a global process scheduler. Completing +this will require passing an interpreter state structure to all operators in +place of the operand stack pointer, which we aren't prepared to contemplate +yet. (zcontext.c) + +Adds tracing for context operations, -Z' and -Z". (zcontext.c) + +Changes def so that it doesn't have a special exception for storing +references to local objects into systemdict or its subsidiary dictionaries +during initialization: such stores now must use .forceput (or .forcedef, +defined in gs_init.ps using .forceput); changes .forceput to allow storing a +local reference into any global dictionary, not only systemdict, if the save +level is 0. (gs_dps1.ps, gs_init.ps, gs_lev2.ps, gs_pdfwr.ps, gs_res.ps, +gs_statd.ps, zdict.c) + +Moves all of the initialization of internaldict to PostScript code. +(gs_init.ps, iinit.c, zcontrol.c) + +Moves the JobName user parameter from C to PostScript code. (gs_lev2.ps, +zusparam.c) + +Adds to every dictionary a pointer to the allocator that created it. This +allows us to create and grow dictionaries without having to reference any +global variables. (idict.h, idict.c, iinit.c) + +Implements the localfork operator, which creates contexts with private local +VM. (gs_dps.ps, gs_init.ps, dstack.h, gsalloc.h, ialloc.c, icontext.c, +iinit.c, interp.c, zcontext.c) + +Systematizes reliable access to variables in systemdict and userdict. +(gs_dps1.ps, gs_dps2.ps, gs_fonts.ps, gs_init.ps, gs_lev2.ps, gs_statd.ps, +gs_type1.ps) + +Starts to eliminate or segregate writable globals that point to +heap-allocated data. (Writable globals containing procedures, +run-time-settable switches, pointers to static data, or non-pointer values +that are initialized once and idempotently are OK.) (iconf.c, iinit.c, +imain.c, imainarg.c, interp.c, zfont1.c, zht2.c, ziodev.c, ztype.c, +zupath.c, zusparam.c) + +Adds support for ImageType 2 (device source) images. (gs_dps.ps, zdps.c) + +Adds begin_typed_image to internal device procedure vectors. (zupath.c) + +Increases the maximum stack sizes to match the Adobe implementation more +closely. (gs_init.ps) + +Adds a file_is_invalid macro to work around a bug in the Borland 5.0 +compiler. (files.h, ziodev.c, zvmem.c) + +Changes the character cache to be allocated in the C heap rather than global +VM. This is required because cache chunks are now allocated from the same +allocator as the cache. (zfont.c) + +Implements sizeimage and readimage, including a new .getbitsrect operator. +(gs_dpnxt.ps, gs_init.ps, zdevice.c, zdpnext.c) + +Resets the maximum stack sizes earlier in initialization. (gs_init.ps) + +Tweaks the default CRD slightly (syntactically, not the content). +(gs_lev2.ps) + +Adds support for PatternTypes other than 1. (gs_init.ps, gs_lev2.ps, +gs_res.ps, zpcolor.c) + +Adds a pointer to the C heap allocator to the gs_main_instance structure, +working towards the goal of removing all references to gs_memory_default. +(iminst.h) + +Removes all remaining uses of gs_malloc and gs_free from the interpreter. +(igc.h, igc.c, imain.c, zfdctd.c, zfdcte.c) + +Adds an explicit #include for all remaining uses of gs_memory_default in the +interpreter. (zfdctd.c, zfdcte.c, zvmem.c) + +Adds a map_color_rgb_alpha driver procedure, complementing +map_rgb_alpha_color. (zupath.c) + +Removes the obsolete writeppmfile operator. (zwppm.c[deleted]) + +Updates the implementation of the image operators to match the change from +HasAlpha to Alpha in the image definition structure. (iimage.h, zcolor1.c, +zimage.c) + +Reimplements upath in C code, since UnpaintedPath requires it. (zupath.c) + +Updates interpreter code for the change in the GC interface. (imemory.h, +istruct.h, icontext.c, igc.c, igcref.c, igcstr.c, ilocate.c, iname.c, +isave.c, iscan.c, istack.c, zfproc.c) + +Implements the compositing operators. (zdpnext.c, zdps.c, zupath.c) + +Changes some matrix operators to pass unpacked matrices on the stack. +(zmatrix.c) + +Moves the alpha-related operators to where they belong. (zcolor.c, +zdpnext.c) + +Changes all calls on getenv to gp_getenv. (imainarg.c, zmisc.c) + +</pre><h3><a name="V5.20_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - PostScript pass-throughs caused an error. They are now always +executed; probably we should offer the option of not executing them, for +closer compatibility with Acrobat. (pdf_draw.ps, pdf_main.ps) + - Font resources, unlike all other types of resources, couldn't be +inherited from an ancestor Page(s) object. (pdf_font.ps) + - Resources appearing only in Form or Pattern dictionaries weren't +recognized as being present. (pdf_base.ps, pdf_draw.ps, pdf_main.ps) + +Moves closer to supporting Type 0 (and CID) fonts. (pdf_font.ps) + +</pre><h3><a name="V5.20_Streams"></a>Streams</h3><pre> + +Fixes bugs: + - If the image was very narrow or very shallow, the interpolated +image scaling stream could make an invalid memory reference. (siscale.c) + +Removes the last few references to gs_malloc and gs_free from stream code. +Clients now *must* call the set_defaults procedure for the DCT filters +before initializing them: THIS IS A NON-BACKWARD-COMPATIBLE CHANGE. +(sdct.h, sdctd.c, sdcte.c, sjpegc.c) + +Adds an explicit #include for all remaining uses of gs_memory_default. +(sdctd.c, sdcte.c, szlibd.c, szlibe.c) + +</pre><h3><a name="V5.20_Library"></a>Library</h3><pre> + +Fixes bugs: + - Some files that included shc.h didn't include scommon.h. (shc.h) + - A file didn't include std.h before <stdio.h>. (gslib.c) + - There was an unnecessary extern (cleanup only). (gscsepr.c) + - The uid.xvalues member of gs_client_pattern structures wasn't +traced by the GC. (gspcolor.h) + - If an Interpolated image reached the end of the input at exactly +the wrong time, an assertion could fail. (gxiscale.c) + - With non-ANSI compilers, an integer constant passed to the fmod +library function, which requires a floating point argument, could cause a +floating point exception or an incorrect result. (gsmisc.c) + - An error in computing the bounding box sometimes caused strokes to +print incorrectly (for example, some graduated fills printed incorrectly). +(gxstroke.c) + +Implements an undocumented (!) feature of Type 2 CharStrings, namely that if +the endchar operator is invoked with 4 or 5 operands on the stack, it is +equivalent to the Type 1 seac operator (without the asb operand). This +required changing the implementation of seac so that it does the base +character first, rather than the accent. (gxtype1.h, gstype1.c, gstype2.c, +gxtype1.c) + +Adds support for ImageTypes other than 1. (gsiparam.h, gximage.h, +gxiparam.h, gdevddrw.c, gsimage.c, gximage.c, gximage0.c) + +Adds support for ImageType 2 (device source) images. Currently we only +handle the simplest case (source is not transformed). (gsimage.h, +gsiparm2.h, gsimage.c, gximage2.c) + +Adds support for LanguageLevel 3 features: + - FunctionType 2 and 3 Functions. (gsfunc3.h, gsfunc3.c) + - PatternType 2 and smooth shading (structures and API only, no +algorithms). (gscolor3.h, gsptype2.h, gsshade.h, gxistate.h, gscolor3.c, +gsshade.c) + - In-RIP trapping (structures and API only, no algorithms). +(gstrap.h, gstrap.c) + - ImageType 3 (masked images) (structures and API only, no +algorithms). (gsiparm3.h, gximage3.c) + - ImageType 4 (chroma-keyed masked images). (gsiparm4.h, +gximage4.c) + - DevicePixel color space. (gscpixel.h, gscspace.h, gscpixel.c, +gximono.c) + - DeviceN color space. (gscspace.h, gscdevn.c) + +Removes the #ifdef FUTURE around the code for passing multi-plane and +interpolated images through the band list (version 5.01) and for banded +filling and stroking with colored halftones (version 4.71). This code is +now part of the standard release. (gxcldev.h, gxclpath.h, gxdht.h, +gxhttype.h, gsht.c, gxclimag.c, gxclread.c, gximage.c) + +Adds a _ptrs6 structure definition macro. (gsstruct.h) + +Removes #ifdef DPNEXT conditionalization, as in the interpreter (see above). +(gzstate.h, gsdps.c, gsstate.c, gximage.c, gximage5.c) + +Starts to eliminate or segregate writable globals that point to +heap-allocated data, as in the interpreter (see above). (gsbittab.h, +gscdefs.h, gsdcolor.h, gxclist.h, gxsample.h, gzht.h, gconf.c, gsbitops.c, +gsbittab.c, gscdef.c, gsdparam.c, gsflip.c, gsinit.c, gsmatrix.c, +gspcolor.c, gsstate.c, gxcht.c, gxclist.c, gxcmap.c, gxdcolor.c, gxdither.c, +gxht.c, gximage.c) + +Removes the division between 'low-level' and 'high-level' band list +facilities. (gxcldev.h, gxclimag.c, gxclist.c, gxclpath.c) + +Renames gximage*.c as gxi*.c, since these files apply only to ImageType 1 +images and the use of numerical suffixes was confusing. (gximage.c => +gxiinit.c, gximage0.c => gxidata.c, gximage1.c => gxifast.c, +gximage2.c => gximono.c, gximage3.c => gxicolor.c, gximage4.c => +gxi12bit.c, gximage5.c => gxiscale.c) + +Provides the ability to enumerate a clipping path (based on the clipping +list) using an enumerator, in the same way as an ordinary path. (gxpath.h, +gzcpath.h, gzpath.h, gxcpath.c, gxpath2.c) + +Speeds up mem_mapped4_copy_mono substantially. (gdevm4.c) + +Removes all remaining uses of gs_malloc and gs_free in the library, other +than in drivers. This turned out to require changing a couple of +initialization APIs. (gsfont.h, gslib.h, gxdevice.h, gxfcache.h, gsfont.c, +gxccman.c) + +Reduces the writable statics related to the default (C heap) allocator to a +single pointer. (gsmalloc.h, gsmemory.h, gsinit.c, gsmemory.c) + +Adds support for PatternTypes other than 1. (gscolor2.h, gspcolor.h, +gsptype1.h, gxcolor2.h, gspcolor.c) + +Adds an explicit #include for all remaining uses of gs_memory_default that +aren't covered by gxdevice.h. (gxclmem.c) + +Splits off the default implementations of the bit-copying device procedures, +because the file was getting too large. (gdevdbit.c, gdevdflt.c) + +Adds a procedure for calculating the difference of two rectangles, needed +for Type 2 images. (gsrect.h, gxpath.h, gsutil.c) + +Extends the image machinery to allow alpha values to either precede or +follow color values in image data, replacing HasAlpha with Alpha in the +ImageType 1 image structure. (gsiparam.h, gximage.h, gsimage.c, gxclimag.c, +gxclread.c, gxicolor.c, gxiinit.c, gxiscale.c) + +Extends the path enumeration API to decouple path copying from coordinate +transformation. (gspath.h, gzpath.h, gspath1.c, gxpath2.c) + +Changes the garbage collector interface so that all procedures are passed +through a structure rather than being referenced as externs. This allows +programs other than the GC itself to enumerate and relocate pointers, and +also removes all static dependencies on the GC from the library. This +involves a NON-BACKWARD-COMPATIBLE CHANGE to the argument list of enum_ptrs +procedures, and to the implementation of both enum_ptrs and reloc_ptrs. (We +hope that the new macros we've introduced will avoid non-backward-compatible +changes in the future.) (gsstruct.h, gdevmem.c, gsalloc.c, gscdevn.c, +gscolor.c, gscolor2.c, gscsepr.c, gsdevice.c, gsfont.c, gshtscr.c, +gsimage.c, gsmemory.c, gspcolor.c, gsstate.c, gxcmap.c, gxcpath.c, gxht.c, +gxiinit.c) + +Moves the image compositing code into the library from its inappropriate +home in the interpreter. (gsdpnext.h) + +Splits up gsbitops.h into client interface and implementation support. +Removes some obsolete code at the same time. (gdevmem.h, gsbitops.h, +gxbitops.h, gsbitops.c) + +Creates the concept of compositing functions and compositing devices +(compositors). (gscompt.h, gxcomp.h) + +Implements the default compositor for alpha-based compositing. (gsalphac.h, +gsalphac.c) + +Creates a store_alpha device that adds alpha channel storage to any other +device. (gdevalph.c) + +Moves alpha channel capability into the dpsnext feature, where it should +have been all along. (gsalpha.h, gscolor.h, gsalpha.c, gscolor.c, +gsstate.c) + +Implements color premultiplying by (non-unity) alpha values. Currently we +always premultiply towards white: see gxalpha.h for some comments. +(gxalpha.h, gxcmap.c) + +Reduces the amount of boilerplate in the RasterOp implementation table. +(gsroptab.c) + +Adds an arg_push_temp_string procedure to accommodate the new gp_getenv +call. (gsargs.h, gsargs.c) + +Updates various library APIs to account for the more careful handling of +file name length. (gdevprn.h, gxclio.h, gxclist.h, gsdevice.c, gxclfile.c, +gxclmem.c) + +</pre> + +<hr> + +<h2><a name="Version5.10"></a>Version 5.10 (11/23/97)</h2> + +<p> +This release, not originally planned, greatly reduces the size of PDF files +produced by the pdfwrite device, fixes a number of minor problems in PDF +output, and optionally produces output compatible with Acrobat 2.x, in order +to address problems reported by NSF in processing these files as part of +their FastLane electronic proposal submission process. Aside from that, and +some localized bug fixes, it has minimal changes from 5.03. + +<h3><a name="V5.10_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - ansihead.mak referred to unix-ansi.mak, which is actually named +unixansi.mak. (ansihead.mak) + - README referred to an "If you need help" section that was moved to +new-user.txt. (README) + +Updates build information for HP-UX systems. (make.txt) + +Updates the information for getting Martin Lottermoser's hpdj driver. +(new-user.txt) + +Improves the error message when a user tries to invoke gswin32c without +explicitly selecting a device. (dwmainc.cpp) + +Removes the author's name and e-mail address from the pdf2ps man page, at +his request. (pdf2ps.1) + +Improves the documentation for BandBufferSpace. (language.txt) + +</pre><h3><a name="V5.10_Procedures"></a>Procedures</h3><pre> + +Changes the VMS command files so that they don't echo the commands. +(append_l.com, copy_one.com, rm_all.com, rm_one.com) + +</pre><h3><a name="V5.10_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The "lp" command files all inappropriately set the top margin to +0.1". (lp386.bat, lp386r2.bat, lpgs, lpgs.bat, lpr2, lpr2.bat) + - The lp386[r2].bat command files inappropriately set the +LanguageLevel to 1. (lp386.bat, lp386r2.bat) + +</pre><h3><a name="V5.10_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The PDF writer got confused about the current color if the input +contained text strings separated only by color changes. (gdevpdf.c) + - Some casts between const char * and const byte * were incorrect +(warnings only). (gdevpdft.c) + +Adds a NoCancel parameter to the winpr2 device, which suppresses display of +the dialog box. (gdevwpr2.c) + +</pre><h3><a name="V5.10_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - An "extern" was omitted, causing a duplicate definition of +build_function_procs. (ifunc.h) + - The global pseudo-operator table was too small, causing a +limitcheck in ps2ascii. (iinit.c) + - setcolorspace with a Pattern space with no underlying space would +cause an error if the current color space was a Pattern space. (zpcolor.c) + - The Decode key was optional, not required, in the dictionary form +of image[mask]. (zimage2.c) + +Adds two more PCL/PJL reset sequences to the list of sequences to ignore. +(gs_init.ps) + +</pre><h3><a name="V5.10_Library"></a>Library</h3><pre> + +Fixes bugs: + - Multi-screen color halftones could produce "seams". (gxcht.c) + - A bug in the gcc optimizer on H-P RISC workstations caused all +curves to be output as lines. (gxpflat.c) + - If a non-standard OtherSubr was called before the [h]sbw in a Type +1 font, a crash could occur. (gxhint3.c) + - gxclist.c didn't include string_.h. (gxclist.c) + +</pre> + +<hr> + +<h2><a name="Version5.07"></a>Version 5.07 (limited) (10/31/97)</h2> + +<p> +A few more bug fixes for the 5.10 release. + +<h3><a name="V5.07_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - Some file and directory names hadn't been updated to match the new +directory structure on the primary server. (make.txt, new-user.txt) + +Adds the URL for reaching URW++. (Fontmap.*) + +</pre><h3><a name="V5.07_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Because the C % operator isn't equivalent to 'modulus' for +negative numerators, gx_default_strip_tile_rectangle could crash in some +cases. (gxdevice.h, gdevdflt.c) + - In the PDF writer, Dest values were correct (page numbers) for +GoToR actions, but were incorrect (should be page object references) for +other actions; also, Rect values were transformed, but should not be. +(gdevpdfm.c) + - In the PDF writer, articles and bookmarks could attempt to write +multiple Contents streams, which is not allowed. (gdevpdfx.h, gdevpdf.c, +gdevpdfm.c) + - The PDF writer ignored PS (PostScript pass-through) pdfmarks. +(gdevpdfm.c) + - The PDF writer didn't write out the color space parameters for +CIE-based spaces. (gdevpdfi.c) + +</pre><h3><a name="V5.07_Library"></a>Library</h3><pre> + +Fixes bugs: + - Suffix subclass structures with 4 added pointers skipped the first +pointer in the superclass when garbage collecting, possibly causing invalid +memory accesses. (gsstruct.h) + - An argument list incompatibility in a procedure used in a static +structure initialization upset some compilers. (gsfunc.h, gsfunc0.c) + +</pre> + +<hr> + +<h2><a name="Version5.06"></a>Version 5.06 (limited) (10/7/97)</h2> + +<p> +This fixes a few more bugs in the PDF writer, and a few other very obscure +problems. It also adds support for Functions and brings multiple contexts +closer to working, neither of which we expect actually to be used any time +soon. This is intended to be the candidate fileset for the 5.10 release, +but since we had to tinker with a delicate part of the PDF writer to fix a +problem affecting visual quality with Acrobat, there may be new bugs that +will have to be fixed in yet another candidate fileset. + +<h3><a name="V5.06_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - Jim McPherson's e-mail address was out of date. (devices.txt) + - Invoking ps2pdf with only a single file name is supported on some +versions of Windows NT and OS/2, not only on Unix. (ps2pdf.txt) + - The ps2pdf documentation didn't indicate that ps2pdf can use the +Windows "console mode" executable as well as the MS-DOS executable. +(ps2pdf.txt) + - The list of which Distiller parameters actually have an effect was +incorrect. (gdevpdfp.c) + +Notes that the cdj550 driver is compatible with the H-P 660C and 660Cse. +(devs.mak, devices.txt) + +Adds a note about using Acrobat Reader fonts. (install.txt, use.txt) + +Notes that the LJ 5P, like the 5L, is not a PCL XL printer. (devs.mak) + +Notes problems and possible problems with certain versions of the Borland +C++ compiler. (make.txt) + +Notes the change in -Z:. (use.txt) + +Updates the uniprint documentation for this release. (devices.txt) + +Expands the rationale for the large resolution in the bbox device. +(gdevbbox.c) + +Notes that the H-P DeskJet 600 series can use the djet500 driver with -r600. +(devs.mak) + +</pre><h3><a name="V5.06_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - Vector devices didn't include a necessary dependency on the stream +package. (lib.mak) + - There were several bugs in the ps2pdf.bat file. (ps2pdf.bat) + +Changes -Z: so it prints some summary lines as well as minimal information +about banding. This makes the -ZA trace compatible with our memory leak +tool. (iminst.h, imain.c) + +</pre><h3><a name="V5.06_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2epsi sometimes produced a too-large bounding box, or even +caused a rangecheck. (ps2epsi) + +At the advice of a user, removes the RESOLUTION=100 line from pv.sh. +(pv.sh) + +</pre><h3><a name="V5.06_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The PDF writer produced incorrect output for stroke operations +with unusual CTMs, because PDF, unlike PostScript, applies the CTM to the +path at the time of the fill or stroke, not as the path is being +constructed. (gdevpdfd.c) + - Vector devices returned an error, instead of falling back to the +default implementations, when filling or stroking with a pattern. +(gdevvec.c) + - The PDF writer freed an internal stream structure using the wrong +allocator, possibly causing memory corruption. (gdevpdf.c) + - The uniprint driver had some compilation problems, and possibly +other problems as well (consult the source file). (gdevupd.c, *.upp) + - With -dNOCACHE, the PDF writer wrote all text in the base 14 fonts +twice, once as text and once as outlines. (gs_pdfwr.ps, gdevpdfd.c) + - The PDF writer didn't properly recognize Symbol and ZapfDingbats +as being among the base 14 fonts. (gs_pdfwr.ps) + - When using Acrobat Reader with font smoothing turned on, the base +14 fonts appeared too bold on the screen in files produced by ps2pdf, +because Reader decides that a 100-unit font at 1 unit = 0.1 point should be +bolder than a 10-unit font at 1 unit = 1 point. (gdevpdfx.h, gdevpdf.c, +gdevpdft.c) + - The PDF writer didn't convert View/Page specifications for +bookmark pdfmarks to a Dest key, causing bookmarks not to work. +(gdevpdfm.c) + +Speeds up the PDF writer by only passing the encoding if it isn't +StandardEncoding. (gs_pdfwr.ps, gdevpdft.c) + +Changes the PDF writer's handling of unencoded glyphs. Adds device +parameters ReEncodeCharacters and ReAssignCharacters to control how +unencoded glyphs are handled. (These parameters will go away when we handle +variant encodings in full generality.) (gdevpdfx.h, gdevpdf.c, gdevpdfp.c, +gdevpdft.c) + +</pre><h3><a name="V5.06_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - setpagedevice didn't restore the stack properly if it failed. +(gs_setpd.ps) + - 0 identmatrix didn't cause an error. (gs_init.ps) + - Devices expecting array-valued parameters didn't accept packed +arrays. (iparam.c) + +Starts to de-implement support for special handling of the stacks on +machines with 16:16 addressing. Currently this only happens if DPNEXT is +defined. (istack.h) + +Brings multiple contexts closer to working. The interpreter can now run +some very simple test cases. (int.mak, icontext.h, igstate.h, interp.h, +istruct.h, icontext.c, interp.c, zcontext.c, zgstate.c) + +Adds support for FunctionType 0 Functions. (ifunc.h, iref.h, store.h, +zfunc.c, zfunc0.c) + +Updates a few remaining pseudo-operators in gs_init.ps to take advantage of +automatic operand and dictionary stack restoration: eexec, identmatrix, +pathbbox. Not updated yet: filter. (gs_init.ps) + +</pre><h3><a name="V5.06_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Separation color spaces weren't supported. (gs_pdf.ps, +pdf_draw.ps) + +</pre><h3><a name="V5.06_Library"></a>Library</h3><pre> + +Fixes bugs: + - The size argument to gs_free was wrong in an out-of-memory case. +(This was irrelevant, since gs_free only uses the size argument for +error-checking during debugging.) (gdevprn.c) + - When freeing a block on the C heap, if -Z@ was set, the block's +header wasn't filled with the sentinel pattern. (Only relevant when +debugging.) (gsmemory.c) + - The C heap allocator didn't fix up pointers properly when freeing +a block, causing unpredictable memory corruption after a 'resize' call. +(gsmemory.c) + - Using a show operator inside the procedure of a cshow with a +composite font could cause an invalid access. (gschar.c) + +Adds support for FunctionType 0 Functions. (gsdsrc.h, gsfunc.h, gsfunc0.h, +gxfunc.h, gsdsrc.c, gsfunc.c, gsfunc0.c) + +Moves the GC descriptor for arrays of constant strings to a place where it +is more visible. (gscie.h, gsstruct.h, gscie.c, gsmemory.c) + +</pre> + +<hr> + +<h2><a name="Version5.05"></a>Version 5.05 (limited) (9/24/97)</h2> + +<p> +This fixes a few bugs found in the first few days of testing 5.04. There +will probably be several more small incremental filesets before the next +public release. + +<h3><a name="V5.05_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - The Windows code wouldn't compile with the latest MSVC++, because +Microsoft changed the prototype for fprintf. (gp_msio.c) + +</pre><h3><a name="V5.05_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - A picky compiler complained about some omitted casts. (gdevpdf.c, +gdevpdft.c) + - Writing a PDF file with any synthesized fonts could produce +slightly garbled output or possibly even an invalid memory access, because a +string was not terminated. (gdevpdft.c) + - When writing a PDF file, the first character of a string could get +placed off the page, because of a matrix bookkeeping error. (gdevpdft.c) + +</pre><h3><a name="V5.05_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - In case of an error, setpagedevice executed a 'stop' +unconditionally, rather than just signalling an error through the error +machinery. (gs_setpd.ps) + +</pre><h3><a name="V5.05_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Files with unknown operators caused errors, even if the BX +operator was used to disable the error report. (pdf_base.ps) + +</pre> + +<hr> + +<h2><a name="Version5.04"></a>Version 5.04 (limited) (9/21/97)</h2> + +<p> +This is a test fileset for an unplanned release that greatly reduces the +size of PDF files produced by the pdfwrite device, and also optionally +produces output compatible with Acrobat 2.x, in order to address problems +reported by NSF in processing these files as part of their FastLane +electronic proposal submission process. Aside from that, and some localized +bug fixes, it has minimal changes from 5.03. + +<h3><a name="V5.04_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - George Cameron's address was listed with a domain of .ukis rather +than .uk. (devices.txt) + - The default value of ORIENT1 was given as false rather than true. +(use.txt) + - The documentation for ps2pdf said one can omit the output file +name, but this is only true on Unix systems. (ps2pdf.txt) + - The documentation for ps2pdf didn't make clear that the executable +must be named gs on Microsoft OSs. (ps2pdf.txt) + - ht_cache is actually allocated with the first gstate, not on +demand. (gsstate.c) + +Slightly improves the documentation of .type1execchar. (zchar1.c) + +Clarifies the distinction between Ghostscript (PostScript) commands and +shell commands, for the benefit of users brainwashed by Microsoft. +(use.txt) + +Improves the usage synopsis in the ps2epsi man page. (ps2epsi.1) + +Adds a reference to Uli Wortmann's H-P drivers. (new-user.txt) + +Improves the documentation of GS_FONTPATH, distinguishing it from GS_LIB and +the search path. (use.txt) + +Notes that on some systems, one must substitute 'installbsd' for 'install' +in the makefile and make other edits. (install.txt, ansihead.mak, +cc-head.mak, gcc-head.mak) + +Notes that ps2epsi is no longer maintained. (ps2epsi.ps) + +Clarifies the availability of support. (new-user.txt) + +</pre><h3><a name="V5.04_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - The uniprint driver was accidentally omitted from the default +Watcom (MS-DOS) and OS/2 configurations. (watc.mak, os2.mak) + - The suggested compiler switches for Digital Unix were incorrect. +(make.txt) + - The cp.cmd script file didn't work in the newest versions of OS/2. +(cp.cmd) + - The compilation rules for some Windows-specific files didn't +include ccf32.tr in their dependencies, which could cause the compilation to +fail. (winint.mak) + +Removes the lev2min configuration, since we no longer support 16-bit Windows +environments. (int.mak) + +</pre><h3><a name="V5.04_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2epsi.bat always appended to the output file, rather than +writing over it. (There are probably other bugs in this script file.) +(ps2epsi.bat) + - The output of pdf2ps didn't execute properly on some printers, +especially Level 1 printers. (gs_pdf.ps) + +Makes ps2pdf do an initial 'save', which causes fonts to be retained better +across pages. (ps2pdf, ps2pdf.bat) + +Adds an option to pcharstr.ps to produce C-like rather than PostScript-like +output. (pcharstr.ps) + +</pre><h3><a name="V5.04_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The LaserJet III and higher printers weren't able to print in the +narrow strip between 1/6" and 1/4" from the left edge of the page. +(gdevdjet.c) + - The PCL XL drivers produced incorrect output which often caused a +PCL XL NoCurrentFont error at the beginning of the second page. (gdevpx.c) + - The GC descriptors for the pswrite device and for PS/PDF devices +were incorrect, causing the GC to smash memory. (gdevpsdf.h, gdevps.c) + - The pdfwrite device didn't have a GC descriptor at all. ****** +DISABLED because the device allocates all its temporary structures directly +on the C heap. ****** (gdevpdf.c) + - When the PDF writer wrote out the Dest key in an action +dictionary, it always used a page object instead of a page number, even if +the page was in another file or didn't exist; it now always uses a page +number. (gdevpdfm.c) + - The PDF writer gave an error if a file redefined any of the 14 +known fonts. (gs_pdfwr.ps) + - The PDF writer didn't handle copy_mono with a non-zero sourcex. +(This probably had no effect in practice.) (gdevpdfi.c) + +Splits off gdevpdfd.c (driver drawing procedures) from gdevpdf.c, since the +file was getting too large. (gdevpdfx.h, gdevpdf.c, gdevpdfd.c) + +Adds recognition of the CompressPages, CompatibilityLevel, and +UseFlateCompression device (distiller) parameters to the PDF writer. If +CompressPages is true (default), CompatibilityLevel is 1.2 (default), and +UseFlateCompression is true (default), page contents will be compressed with +Flate ("zip") compression; otherwise, they will not be compressed. + +Restructures the PDF writer to produce much smaller and faster PDF files, by +restructuring its handling of text to defer all resources to the end of the +file, eliminate duplicate Font resources, turn characters into Type 3 fonts +rather than Image XObjects, use more efficient text positioning commands, +and optionally (but by default) Flate-compress the contents streams. Also +removes some unnecessary spaces in the output. (gdevpdfx.h, gdevpdf.c, +gdevpdfd.c, gdevpdfi.c, gdevpdfm.c, gdevpdft.c) + +Improves the PDF writer so that it no longer converts stroke operations with +non-uniform CTMs to fills, and doesn't bother to stroke empty paths at all. +(gdevpdfd.c) + +Speeds up the "alternate" X devices substantially. (gdevxalt.c) + +</pre><h3><a name="V5.04_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - Filling a string with a Pattern caused a crash with the PDF +writer. (gs_pdfwr.ps) + - Converting a file with no marks at all to PDF produced invalid +output. (gdevpdf.c) + - .endpage, which is called at the end of every page, sometimes left +2 extra values on the stack. (gs_setpd.ps) + - A definefont with a Type 1 font lacking a .notdef character didn't +cause an invalidfont error. (bfont.h, zfont1.c, zfont2.c) + - On anti-aliased devices, characters from Type 1 fonts with an +incorrect or missing FontBBox came out a factor of 2 or 4 too small if the +character was small enough to cache. (zchar1.c) + - If a file redefined certain operators, loading Type 1 fonts could +fail. This problem was fixed in an earlier release, and somehow the fix got +undone. (gs_type1.ps) + - cshow didn't set the correct current font when running the +procedure, and didn't restore it properly afterwards. (zchar.c, zchar2.c) + - With certain compilers, the interpreter loop caused unaligned +memory accesses on DEC Alpha systems running Windows NT. (iref.h) + +Adds freelist validation to the memory checker. (ilocate.c) + +Changes the debugging switch for bypassing the garbage collector from +compile-time to run-time. (igc.c) + +Adds the real operators for view clipping (but they don't do anything yet, +because view clipping isn't implemented at the library level). (zdps.c, +zvmem.c) + +Completes the implementation of defineusername. (zdps.c) + +Adds an implementation of wtranslation, by simply reading a device parameter +of the same name. (gs_dps.ps) + +</pre><h3><a name="V5.04_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Lab color spaces weren't implemented, and gave an error. +(gs_pdf.ps) + - Images only worked with built-in color spaces, not color space +resources. (pdf_draw.ps) + - Embedded font subsets were treated as undefined. (pdf_font.ps) + +</pre><h3><a name="V5.04_Library"></a>Library</h3><pre> + +Fixes bugs: + - strokepath sometimes clipped the path to the current clipping +region, which it should never do. (gxstroke.c) + - The initial X/Y position for Type 2 charstrings (CFFs) sometimes +was set incorrectly. (gstype2.c) + - Memory management for dash patterns was still incorrect (despite +the fix in 4.36), possibly causing snarled freelists and invalid memory +references. (gsline.c, gsstate.c) + - The saved gstate of a Pattern instance was freed properly when the +instance was freed by reference counting as a result of setting the color or +color space, but not when the instance was freed by reference counting +anywhere else. (gspcolor.c) + - A test for whether to use a slower form of oversampling was +incorrect. (Probably only a performance bug.) (gschar.c) + - cshow didn't set the correct current font when running the +procedure, and didn't restore it properly afterwards. (gsfont.h, gschar.c, +gsfont.c) + +Improves allocator validity checking when DEBUG is set. (gsalloc.c) + +Adds a couple of missing FontType values. (gxftype.h) + +Changes the default conversions between CMYK and RGB colors back to the +Adobe rules documented in the Red Book, to reduce output differences from +Adobe implementations. (gxdcconv.c) + +Adds a graphics state element for view clipping, under an #ifdef DPNEXT, and +implementations of the view clipping operators (but not the logic for doing +the actual clipping). (gsstate.h, gzstate.h, gsstate.c) + +Removes the redundant clip_rule variable from the graphics state (which +wasn't used for anything). (gzstate.h, gspath.c) + +</pre> + +<hr> + +<h2><a name="Version5.03"></a>Version 5.03 (8/8/97)</h2> + +<p> +The only reason for this release is to fix two serious bugs introduced +between 5.01 and 5.02. We fixed a few other very localized and low-risk +bugs at the same time. + +<h3><a name="V5.03_Documentation"></a>Documentation</h3><pre> + +Removes the "(if relevant)" from the bug reporting form, since about 25% of +the forms are submitted without a URL or any other data. (bug-form.txt) + +Adds a discussion of single-use procedures to the style guide. +(c-style.txt) + +Updates the information about obtaining Ghostscript on physical media. +(new-user.txt) + +Updates the information about ps_view. (new-user.txt) + +</pre><h3><a name="V5.03_Procedures"></a>Procedures</h3><pre> + +Adds the uniprint driver to all platforms. (*.mak) + +Changes the contents of the pc.tar.gz archives: + - Adds *.upp. + - Removes *.res. + - Removes cp.bat, font2c.bat, mv.bat, rm.bat, wmakebat.bat, + cp.cmd, mv.cmd and rm.cmd, and gv-vms.hlp. + +Removes an obsolete script file. (tar_mv) + +</pre><h3><a name="V5.03_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The uniprint driver didn't handle an increase in media height +correctly. (gdevupd.c) + +</pre><h3><a name="V5.03_Platforms"></a>Platforms</h3><pre> + +Fixes bugs: + - Printing to printers other than LPT1 under MS Windows no longer +worked. (bug introduced in 5.02) (gp_mswin.c) + - Drag-and-drop didn't work under Windows NT (or other 32-bit +Windows environments). (dwtext.cpp) + - Sequent systems needed an additional system header file. +(time_.h) + +</pre><h3><a name="V5.03_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - The substitutions Myriad => Times and Minion => Helvetica were +incorrect; they should be the other way around. (gs_fonts.ps) + - MyriadPkg wasn't recognized as a condensed font. (gs_fonts.ps) + - Univers wasn't recognized as mapping to Helvetica. (gs_fonts.ps) + +</pre><h3><a name="V5.03_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - A line of debugging code, printing the sections of 3 regions of +TrueType fonts being loaded, was accidentally left in. (gs_ttf.ps) + - TrueType fonts whose pre-glyf data had odd length were broken +(typically gave a rangecheck error), because of the fix to treat the odd +byte of individual sfnts strings as padding per Adobe documentation. (bug +introduced in 5.02) (gs_ttf.ps) + +</pre><h3><a name="V5.03_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - If a real-number token in a CFF had an even number of nibbles, a +unmatchedmark error would occur. (gs_cff.ps) + - If the strings Index in a CFF included an empty string, a +rangecheck error would occur. (gs_cff.ps) + - CFFs with non-standard Encodings that included standard strings +would get a typecheck error. (gs_cff.ps) + +</pre><h3><a name="V5.03_Library"></a>Library</h3><pre> + +Fixes bugs: + - Using %d in an OutputFile name didn't substitute the page number. +(bug introduced in 5.02) (gsdevice.c) + - In Type 2 CharStrings, if a hintmask occurred at the beginning, it +wasn't recognized as also incorporating the function of vstemhm. +(gstype2.c) + - The data bytes for hintmask and cntrmask weren't printed for +debugging. (gstype2.c) + +</pre> + +<hr> + +<h2><a name="Version5.02"></a>Version 5.02 (7/28/97)</h2> + +<p> +Because of an ISP failure that delayed the 5.0 announcement for 12 days, the +5.01 release only responded to a few days of bug reports; 5.02 fixes some +problems that should have been fixed in 5.01, as well as a large number of +obscure problems uncovered by Genoa testing. + +<h3><a name="V5.02_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - The documentation for building on the Intergraph Clipper was out +of date. (make.txt) + - ESC was claimed to be a self-delimiting character. (gs_init.ps) + - Removes the documentation claiming that ^D and ^Z are +self-delimiting. (language.txt) + - Document that -dSUBSTFONT doesn't create a font with the requested +font name. (use.txt) + - Ghostscript was defined as compatible with PDF 1.1 rather than PDF +1.2. (language.txt) + - The description of gcc problems on Alpha didn't make it clear that +the use of gcc was optional, not required. (make.txt) + - The description of how to use GNU make on VMS systems was +inaccurate. (make.txt) + +Improves the documentation for building on H-P RISC systems. (make.txt) + +Corrects the discussion of Cygnus' licensing terms for the cygwin32 +environment. (make.txt) + +Removes the apology for the poor quality of Ghostscript's TrueType +rasterizer, since the quality is now quite good. (fonts.txt) + +Documents the fact that one must use # rather than = with Watcom C. +(use.txt) + +Documents the updates and additions to the uniprint driver. (devices.txt) + +Adds some material to Aladdin's C style guide. (c-style.txt) + +Documents the fact that using gmake requires VMS 6.2 or later on Alphas and +7.1 (perhaps 7.0) or later on VAXen. (make.txt) + +Adds an example EPS file. (psfiles.txt) + +Adds some information about compiling and linking under OS/2. (make.txt) + +Expands the description of XLIBDIR and XLIBDIRS. (*head.mak) + +Adds a new pointer to information on using a Kanji font with Ghostscript. +(new-user.txt) + +Documents the use of /Resource/<category>/<resource> as the default place +where resources are sought. (use.txt) + +Updates the documentation on building with MSVC++ to reflect the makefile +changes. (make.txt) + +</pre><h3><a name="V5.02_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - In openvms.mak, several ifdef tests were wrong. (openvms.mak) + - One CP command was slightly inconsistent with the others. +(zlib.mak) + - If libz and libpng were both shared, libz was linked first, +resulting in some undefined references. (libpng.mak) + - The VMS makefile didn't interact properly with VMS's version +numbering facility. (copy_one.com) + +Updates the VMS DCL script one last time, to handle libpng version 96. +(vms.mak) + +Restructures the MSVC++ makefiles to allow building the graphics library +without the PostScript interpreter. (bcwin32.mak, msvc4.mak[deleted], +msvc5.mak[deleted], msvc32.mak, msvccom.mak, watcw32.mak, +wincom.mak[deleted], winint.mak, winlib.mak) + +Adds a makefile to create a library-only demo program under MSVC++, like the +ones for Unix/gcc and MS-DOS/Watcom. (msvclib.mak) + +Adds an example EPS file. (ridt91.eps, unix-end.mak) + +Removes support for libpng release 0.88, which is now quite obsolete. +(libpng.mak) + +</pre><h3><a name="V5.02_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - ps2pdf.bat, unlike ps2pdf, didn't accept options. (ps2pdf.bat) + - echogs used 'const' in one place, which wasn't accepted by some +very old compilers. (echogs.c) + - pdf2ps output Orientation, which it shouldn't. (pdf_main.ps) + +Makes the usage message from ps2pdf.bat include the options, like ps2pdf. +(ps2pdf.bat) + +Changes the printpath utility so that its output is legal PostScript code. +(ppath.ps) + +Makes pdf2dsc add DSC comments for the bounding box (if a CropBox is +available in the PDF file) and the orientation. (pdf2dsc.ps) + +</pre><h3><a name="V5.02_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - The get_bits operation wasn't implemented for the vgalib driver. +(gdevvglb.c) + - The dnj650c driver output an extra % near the end of the file. +(gdevcdj.c) + - The definition of pprintd2 didn't have a line break before the +procedure name, confusing ansi2knr. (gdevpstr.c) + - EPS files produced invalid PDF output. (gdevpdf.c) + - "Vector" output devices didn't recognize %d in output file names, +or - for output to stdout. (gdevprn.h, gxdevice.h, gdevprn.c, gdevvec.c, +gsdevice.c) + - With the pdfwrite driver, restore or grestore would cause a +rangecheck error in .installpagedevice if a setpagedevice had been executed. +(gdevpdfp.c) + - The pdfwrite driver produced garbage output for text rotated by +angles that were only infinitesimally different from multiples of 90 +degrees. (gdevpdft.c) + - The pnm[raw] driver didn't handle anti-aliasing properly. +(gdevpbm.c) + - The PDF writer didn't scale the parameters for [a][width]show +correctly. (gs_pdfwr.ps, gdevpdft.c) + +Fixes some minor compilation warnings not affecting code functionality. +(gdevbbox.c, gdevpdfm.c, gshtscr.c, gsmemory.c, gxccman.c, gxfill.c, +gximage0.c) + +Fixes some bugs in the uniprint driver and adds some more printer models. +(gdevupd.c, bjc610a*.upp, bjc610b*.upp, necp2x6.upp, stc1520h.upp) + +Makes a small change for clean compilation on BeOS. (gdevcdj.c) + +Updates the PNG driver to use updated API calls for allocating/initializing +and freeing the PNG structures. (gdevpng.c) + +</pre><h3><a name="V5.02_Platforms"></a>Platforms</h3><pre> + +Refactors the MS Windows code to allow building the library without the +interpreter. (gs_msio.c, gs_mslib.c, gp_mswin.c) + +</pre><h3><a name="V5.02_Fonts"></a>Fonts</h3><pre> + +Fixes bugs: + - definefont was executed twice on TrueType fonts. (No bad +consequences, just unnecessary work.) (gs_ttf.ps) + +</pre><h3><a name="V5.02_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - The fix for the 'stopped' around run_string_* in 5.01 was made +incorrectly. (gs_init.ps) + - Many operators that expect a matrix operand didn't accept packed +arrays. (iutil.c) + - The default CRD didn't have an explicit BlackPoint, which some +Genoa tests require. (gs_lev2.ps) + - A stack protection fix caused setscreen and setcolorscreen with +dictionary operands to give a typecheck. (gs_dps2.ps) + - Executing a string didn't handle tail recursion properly if the +last token was followed by a single whitespace character. (interp.c) + - Clearing the error indication didn't set errorname to null. +(gs_init.ps) + - Some unexpected items appeared on the execution stack, confusing +some of the Genoa tests. (gs_init.ps, istack.h, istack.c, zcontrol.c) + - The dummy definitions for setucacheparams/ucachestatus didn't look +enough like the real ones. (gs_dps2.ps) + - Insideness tests didn't work, because the hit detection device +width and height weren't set up. (zupath.c) + - defineuserobject didn't use the same algorithm for growing the +array as Adobe interpreters. (gs_dps2.ps) + - eq and ne didn't work correctly on save objects. (iutil.c) + - findfont used =string internally, interfering with PostScript +programs that also used it. (gs_fonts.ps) + - cshow didn't set up scaled versions of base fonts as the current +font. (zchar2.c) + - defineresource didn't make the resource value read-only. +(gs_res.ps) + - If inustroke got an error, it could return without an error +indication and without changing the stack. (zupath.c) + - The arrays returned by different invocations of currentcolorspace +with the same device color space weren't guaranteed to be eq. (gs_lev2.ps) + - Out-of-range integers followed by a '.' were converted to names +rather than reals. (iscan.c, iscannum.c) + - resourceforall caused an invalidaccess error if currentglobal was +true but the procedure, template, or scratch string was in local VM. +(gs_res.ps) + - In many places, integer values were converted to floats rather +than doubles, losing precision. (ichar.h, icharout.h, ifont.h, iutil.h, +idparam.c, iparam.c, iutil.c, zchar.c, zchar1.c, zchar42.c, zcharout.c, +zcie.c, zcolor.c, zcolor1.c, zcolor2.c, zcontrol.c, zcsindex.c, zcssepr.c, +zdpnext.c, zdps1.c, zfont.c, zfont2.c, zgstate.c, zhsb.c, zht.c, zmath.c, +zmatrix.c, zmedia2.c, zpath.c, zpath1.c, zupath.c) + - The TransformPQR procedure in the default CRD didn't pop its +auxiliary operands from the stack. (gs_lev2.ps) + - Because of an incorrect stack depth check, setcolorrendering +sometimes produced a stackunderflow. (zcrd.c) + - sethalftone caused an invalidaccess error if the HalfTone type was +not 5, the dictionary was in local VM, and the current VM was global. +(gs_dps2.ps) + - writeobject and printobject caused an invalidaccess error if the +object being written was in local VM and the current VM was global. +(gs_btokn.ps) + - ustrokepath appended the strokepath segments to the current path, +rather than replacing the path. (zupath.c) + - restore incorrectly purged from the character cache any characters +in a font being freed, even if the font had a UID. (zfont.c) + - The definition of zimage_opaque_setup confused ansi2knr. +(zimage.c) + - Type 42 fonts that included the padding byte in each sfnts string +didn't work if sfnts had more than one string. (zfont42.c) + - Doing a garbage collection at the same time as handling a +stackoverflow failed to update the object that needed re-execution, causing +the interpreter to execute random data. (interp.c) + - %stdout and %stderr weren't flushed if they were closed +explicitly. (ziodev.c) + +For greater Adobe compatibility: + - Changes setdash to limit dash patterns to 11 elements. (This is +enforced at the PostScript level: the graphics library doesn't have a +limit.) (gs_init.ps) + - Changes ^D and ^Z so they are not self-delimiting characters, and +changes ^K so it is not a whitespace character. (gs_init.ps, iscan.c, +scantab.c) + - Makes = cause an error on non-read-accessible objects rather than +printing them as --nostringval--. (gs_init.ps) + - When -dSUBSTFONT= is used, makes findfont return the actual named +font, rather than a copy with the FontName changed to the requested one. +(gs_fonts.ps) + - CFF fonts with a non-default FontMatrix caused an error. +(gs_cff.ps) + +Fixes some minor compilation warnings not affecting code functionality. +(iparam.c, zfcmap.c) + +Strengthens the test of o-stack validity in the main interpreter loop in +debug mode. (interp.c) + +Changes the filling rule for Type 1 fonts from winding-number to even-odd. +This affects no properly designed fonts, and seems to match Adobe +interpreters better. (zchar1.c) + +Implements non-standard Encodings in CFF fonts. (gs_cff.ps) + +Changes the default halftone screen for 600 dpi printers from 85 to 106 lpi, +which reduces the number of halftone levels from 50 to 32 but produces +visually better output. (gs_init.ps) + +</pre><h3><a name="V5.02_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - Pattern color spaces weren't supported. (gs_pdf.ps, pdf_draw.ps) + +Causes references to undefined named Destinations to be ignored rather than +giving an error. (pdf_main.ps) + +</pre><h3><a name="V5.02_Library"></a>Library</h3><pre> + +Fixes bugs: + - A 'const' was omitted in a declaration, upsetting several +compilers. (gxclread.c) + - arct and arcto gave an error for negative radii. (gspath1.c) + - The collinearity check for arct[o] could cause some arcs to be +rendered as single points. (gspath1.c) + - Uncolored patterns sometimes came out blank, because the color +wasn't set before calling the PaintProc. (gspcolor.c) + - The phase for masking colored patterns was wrong, producing +incorrect output. (gspcolor.c) + - reversepath always appended the current position to the new path, +rather than only doing so if the path just consisted of a single moveto. +(gxpath2.c) + - cshow didn't restore the current font properly. (gschar.h, +gschar.c) + - The check for whether characters can be cached didn't consider +PaintType values other than 0 and 2. (gschar.c) + - The bounding box device didn't handle PageCount properly. +(gdevbbox.c) + - Uncached fonts with a next_char procedure didn't set the glyph +properly. (gschar.c) + - Parallelograms with ax < bx, ay < by, and the 'a' edge to the +right of the 'b' edge weren't filled, causing pixels to be omitted from some +highly skewed images. (gdevddrw.c) + - 12-bit-per-pixel images in portrait orientation filled each scan +line with the value of the last pixel -- i.e., didn't work. (gximage4.c) + - The path representation of a clipping path could include some +inappropriate, leftover path segments. (gxcpath.c) + - The angle for the miter check was computed in device space rather +than in user space. (gxstroke.c) + - TrueType fonts were lumpy, and the accents of accented characters +were placed incorrectly. (gstype42.c) + - Some macros used for generating device prototypes didn't +parenthesize all uses of their parameters, causing possible errors if the +parameters were expressions rather than numeric constants. (gdevprn.h) + - When banding, strip halftones (typically produced by +AccurateScreens) sometimes didn't have the correct phase. (gxbitmap.h, +gxclread.c) + - A minor change was required for correct compilation with Microsoft +VC++. (memory_.h) + - Under certain conditions, character shapes could get wildly +distorted by hints. (bug introduced in 5.01) (gxhint3.c) + +For greater Adobe compatibility: + - Changes reversepath so that the implicit line created by closepath +is not considered a "segment". (gxpath2.c) + +Fixes some minor compilation warnings not affecting code functionality. +(gstype1.c) + +Changes the font and scaled-font caches so that if the font has a UID +(UniqueID or XUID), the UID and FontType are both considered part of the +key, and we don't cache fonts with non-zero PaintType. (The Red Book says +that changing anything except the Encoding should also change or remove the +UID, but some files don't do this. The current fix is probably not +sufficient, but it is a step in the right direction.) (gxfcache.h, +gxccache.c, gxccman.c) + +Splits off the definitions of font_type and fbit_type into a separate file, +since gxfcache.h now needs font_type. (gxfcache.h, gxfont.h, gxftype.h) + +Makes the Flex feature in Type 1 fonts conform to the published +specification, rather than always producing curves. The comment in the code +(and in the NEWS entry for release 2.6) says that this breaks some very old +Adobe fonts: if this turns out to be a problem, we'll figure out a test that +will do the right thing for these fonts. (gstype1.c) + +Provides 'double' versions of some API functions to accommodate the +increased use of doubles in the interpreter. (gschar.h, gschar.c) + +Adds a compile-time option to force the use of strip halftones, for +debugging. (gshtscr.c) + +Changes the hint snapping algorithm in the Type 1 rasterizer so that it will +only change a stem width by a maximum of 1/2 pixel rather than 1 pixel. +This appears to help with dropouts at certain sizes. (gxhint2.c) + +Makes a few changes for clean compilation on BeOS. (stdpre.h, stat_.h, +gxcpath.c) + +</pre> + +<hr> + +<h2><a name="Version5.01"></a>Version 5.01 (6/22/97)</h2> + +<p> +This fixes a few bugs reported in the 5.0 release. This will be a +commercially supported release. + +<h3><a name="V5.01_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - README referred to an obsolete file devarch.txt. (README) + - The comment on flip4x12 had a typo. (gsflip.c) + - The algorithm comments for adjusted_y_spans_pixel weren't precise +enough. (gxfill.c) + - The usage message printed by the ps2pdf script didn't indicate +that one can now insert options before the input file name. (ps2pdf) + - The file searching documentation didn't indicate that paths +beginning with ./ or ../ are considered "explicit" and not subject to +searching. (use.txt) + - The description of SEARCH_HERE_FIRST in the per-platform makefiles +indicated that it only applied to initialization files, not to files +specified on the command line as well. (*.mak) + - There were still some references to 16-bit implementations. +(install.txt) + +Clarifies that -dNODISPLAY also suppresses output to other devices. +(use.txt) + +Adds the e-mail address for reporting problems to the bug report form, and +also a space to report makefile changes. (bug-form.txt) + +Adds a note under -g indicating that it fixes the media size. (use.txt) + +Adds an explanation of why Ghostscript can't use the system libraries for +the JPEG package. (make.txt) + +Notes that ps2ai doesn't work properly with Adobe's Helvetica-Oblique font, +and other fonts whose original FontMatrix involves skewing or rotation. +(psfiles.txt) + +Updates the uniprint documentation slightly. (devices.txt) + +Notes that the new lj5 drivers do not work with the LJ5L. (devs.mak) + +Modifies the Aladdin Free Public License slightly to make it clearer that +the exception for freely redistributable CD-ROMs only applies if the CD-ROM +is being distributed by itself, not with anything else commercial. (This +has always been the case, but the previous wording wasn't clear enough.) +(PUBLIC) + +Notes that gcc with -O still has code generation problems on H-P RISC +machines. (make.txt) + +Adds a pointer to Martin Lottermoser's hpdj driver. (new-user.txt) + +Enhances and reorganizes the documentation for building Ghostscript, in +response to user feedback. (make.txt, install.txt) + +Adds a description of the EPSF recognition feature. (language.txt) + +</pre><h3><a name="V5.01_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - string__h was misspelled string_h in one place. (lib.mak) + - gs_dps.ps wasn't installed by "make install". (unix-end.mak) + - ccgs (used with non-ANSI C compilers) didn't do the right thing +with -DPNG_USE_CONST. (ccgs) + +Adds support for version 96 of libpng, and updates all the makefiles to +reference it. (libpng.mak, *.mak) + +Updates the MSVC makefiles to get rid of some warning messages and provide a +way to specify a library path for the final link. (msvc*.mak) + +</pre><h3><a name="V5.01_Utilities"></a>Utilities</h3><pre> + +Fixes bugs: + - The usage message for the gslp utility had a minor typo. +(gslp.ps) + - The "line printer" utility didn't expand tabs properly when +producing PostScript output. (gslp.ps) + - The gslp utility didn't automatically include the date. (gslp) + - The line printer scripts didn't pass the script name to the +utility program, so the usage message didn't use the correct name. (gsbj*, +gsdj*, gslj*, gslp*, lp*) + +Modifies the gslp utility so that invoking it with no arguments prints the +usage message. (gslp.ps) + +Adds the ability to specify the number of bits per component to the +CMYK-viewing utility. (viewcmyk.ps) + +Changes the ps2pdf script so that on Windows NT, as on Unix, it allows +omitting the output file name, automatically replacing the extension of the +input file with .pdf. (ps2pdf.bat) + +</pre><h3><a name="V5.01_Drivers"></a>Drivers</h3><pre> + +Fixes bugs: + - Some compilers didn't accept a #define with the macro name on the +next line. (gdevpx.c) + - The procedure dash_pattern_eq was defined in two places. +(gdevpdf.c) + - The uniprint driver sometimes dropped some output or got confused, +because of a misunderstanding about how to update device procedure vectors +properly. (gdevupd.c) + - The PostScript and EPS writers produced binary output for images, +which generally can't be sent to PostScript printers. (gdevpsdf.h, +gdevpdf.c, gdevps.c) + - The EPS writer put a %%EOF at the end of the file, which might +cause problems for some spoolers if the file is embedded in another. +(gdevps.c) + +Changes the implementation of printer drivers so that they flush the output +stream after each page. We aren't absolutely sure that this is a good idea, +but it prevents certain anomalous behavior where the last page isn't ejected +properly. (gdevprn.c) + +Implements a long-delayed update to the mgr drivers, to restore the color +mapping to an older one. (gdevmgr.h, gdevmgr.c) + +Updates the uniprint driver with a number of changes from its author. +(gdevupd.c) + +</pre><h3><a name="V5.01_Platforms"></a>Platforms</h3><pre> + +Adds the JPEG, Postscript, and PCL XL drivers, which are included on all +other platforms, to the MS Windows platforms. (bcwin32.mak, msvc4.mak, +msvc5.mak, watcw32.mak) + +</pre><h3><a name="V5.01_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - composefont defined the resource with the font name and font +directory interchanged. (gs_cmap.ps) + - With dFIXEDMEDIA, documents requesting other sizes caused an error +instead of clipping the page. (gs_init.ps) + - PageSize Policy = 7 wasn't implemented. (However, the current +implementation is wrong.) (gs_setpd.ps, zmedia2.c) + - FontType resource 42 wasn't defined even if Type 42 fonts were +supported; similarly for FontType 9, 10, and 11 for CIDFonts. (gs_cidfn.ps, +gs_res.ps) + - The error handling machinery would break if the name /errordict +was redefined. (gs_init.ps) + - Level 1 systems got an /undefined in .doneshowpage. (zdevice.c, +zdevice2.c) + - Because of an initialization order problem, copy didn't work on +gstates. (zgeneric.c) + +Adds a naive implementation of findcolorrendering. (gs_lev2.ps, gs_res.ps) + +Removes the 'stopped' around run_string[_begin/continue/end] so that, as in +4.03, errors print a hex dump and exit with a non-zero code instead of +printing a readable message and continuing. (We aren't sure that this +change didn't undo the fix in 5.0 regarding calling startjob from +run_string.) (gs_init.ps) + +</pre><h3><a name="V5.01_Interpreter_PDF"></a>Interpreter (PDF)</h3><pre> + +Fixes bugs: + - stdin redirection failed for PDF files even if the new stdin was +seekable. This was fixed in 4.02, but the fix stopped working with the +introduction of .runexec. (pdf_main.ps) + +Makes the cross-reference reader accept a startxref value that points at the +EOL before the xref line. The Adobe documentation doesn't allow this, but +some real files are this way. (pdf_main.ps) + +</pre><h3><a name="V5.01_Library"></a>Library</h3><pre> + +Fixes bugs: + - The bounding box of a completely empty path was reported as +garbage. (gxpath2.c) + - Stroking a path with more than one segment didn't produce correct +output when anti-aliasing was used. (gspaint.c) + - The alpha-buffer device returned an incorrect clipping box, +causing output to be discarded. (gdevabuf.c) + - gx_forward_get_clipping_box passed the wrong device to the target +procedure, producing incorrect results. (gdevnfwd.c) + - The sin/cos procedure did some unnecessary computations +(performance bug only). (gsmisc.c) + - The procedure for adjusting the ends of curves to match the +tangents did some unnecessary computations (performance bug only). +(gxpcopy.c) + - RAM-based banding always gave an invalidfileaccess error, due to a +typo in memfile_fopen. (gxclmem.c) + - The algorithms for deciding whether a line is thin still weren't +correct. (gxstroke.c) + - The fill adjustment values for the any-part-of-pixel case (adjust += 0.5) were (0.5-epsilon, 0.5+epsilon), which colored inappropriate +additional pixels if the higher coordinate was integral. With considerable +trepidation, we have changed this to (0.5-epsilon,0.5), which does the right +thing in every case we can think of. (gxfill.c) + - When banding, paths were clipped to only 0.5 pixel outside their +bounding box, which may be slightly too conservative; 1 pixel is safer. +(gxclpath.c) + - The algorithm for testing whether an adjusted Y value spanned a +pixel center was incorrect, causing some pixels to get colored incorrectly. +(gxfill.c) + - 24-bit devices could cause a memory fault, by accessing a pointer +just beyond the end of the line pointer array. (gdevm24.c) + - Astonishingly enough, the determination of which hints were +applicable to a given segment of a Type 1 character was wrong in several +different places. Fixing this in a way that correctly handled all allowed +permutations of the coordinate system was not simple. (gxfont1.h, +gxhint1.c, gxhint3.c) + - The debugging printout macros didn't include the syntactic hack to +prevent an 'else' from begin assigned to the wrong 'if'. (gdebug.h) + - The bbox device was accidentally limited to 130 x 130 pixels (not +130" x 130"). (bug introduced in 5.0) (gdevbbox.c) + - The bbox device didn't recognize PageBoundingBox in put_params, +causing a possible /undefined error on [g]restore. (gdevbbox.c) + - setlinewidth didn't take the absolute value of its operand. +(zgstate.c) + - Some code formatting was slightly off. (gximage5.c) + - Some extra pixels were written for Interpolated images, but they +were immediately overwritten, so the output was correct. (gximage5.c) + +Changes the data flipping API from a macro to a procedure, adds a return +value, and makes the individual flipping procedures private. (gsflip.h, +gsflip.c) + +Adds (under an #ifdef FUTURE) code to allow passing multi-plane images +through the band list. (gxclpath.h, gxclimag.c, gxclread.c) + +Adds (under an #ifdef FUTURE) code to allow passing interpolated images +through the band list. NOTE: interpolated images will appear slightly +different than without banding, because the part of the image intersecting +each band will be scaled slightly differently in the (device) Y direction. +(gxclpath.h, gxclimag.c, gxclread.c, gximage.c) + +Changes Type 1 hinting so that when it moves points on a curve, it does so +by properly scaling the curve in the given direction. (gxhint3.c) + +</pre> + +<hr> + +<h2><a name="Version5.0"></a>Version 5.0 (6/6/97)</h2> + +<p> +This is the first public release since 4.03. + +<h3><a name="V5.0_Documentation"></a>Documentation</h3><pre> + +Fixes bugs: + - Fontmap.Sol was incorrectly referred to as Fontmap.Solaris. +(use.txt) + - There was still a reference to pstoppm in the documentation. +(psfiles.txt) + - The JPEG DOS source site information was out of date. (jpeg.mak) + - The list of devices included in the distributed Unix makefiles was +out of date. (make.txt) + - The MCU size limitation on the DCT filters was documented +incorrectly. (current.txt) + - The URL for the uniprint driver home page was incorrect. +(devices.txt) + - The makefiles referred to sfilefd.c, which is now named sfxfd.c. +(gs.mak, *.mak) + +Adds a VMS help file. (gs-vms.hlp) + +Removes documentation for Digital Unix (OSF/1) 1.2 and 1.3, which are now +long obsolete, and updates the documentation for current versions. +(make.txt) + +Notes that there may be a problem with libpng version 0.95. (libpng.mak) + +Adds some specific documentation for the JPEG drivers. (devices.txt) + +Adds a suggestion that people compiling Ghostscript check the values of +JVERSION and PVERSION. (make.txt) + +Removes the requirement for setting the LIB environment variable when +compiling with MSVC. (make.txt) + +</pre><h3><a name="V5.0_Procedures"></a>Procedures</h3><pre> + +Fixes bugs: + - There were a number of small errors in the new OpenVMS makefile. +(openvms.mak) + - The MSVC makefiles omitted a necessary switch to work around some +"unspecified Pentium bugs". (msvccom.mak) + - The Borland makefile wasn't even close to working; fixing it +required moving the compilation rule for genarch.exe into the +compiler-specific makefiles. (bcwin32.mak, msvccom.mak, watcw32.mak, +wincom.mak) + - There were some (harmless) undefined macro references in the MSVC +makefile. (msvccom.mak) + +Makes it unnecessary to set the LIB environment variable for MSVC. +(msvc4.mak, msvc5.mak, wincom.mak) + +Adds a note on compiling with the cygwin32 gcc compiler for Windows NT. +(make.txt) + +Updates vms.mak yet again, hopefully for the last time. (vms.mak) + +Moves the CGM, JPEG, and MIFF file formats from DEVICE_DEVS8 to +DEVICE_DEVS14 to shorten command lines; adds pcxcmyk to all platforms that +include PCX format at all; adds jpeggray to all platforms that include jpeg. +(devs.mak, *.mak) + +Adds -DPNG_USE_CONST for compiling libpng, to get rid of compiler warning +messages. (gs.mak) + +Removes obsolete makefiles from the fileset. (tccommon.mak, tctail.mak) + +</pre><h3><a name="V5.0_Interpreter"></a>Interpreter</h3><pre> + +Fixes bugs: + - restore was broken if -dNOBIND was invoked. This fix should have +been in the 4.81 fileset, but was left out due to operator error. +(gs_dps1.ps) + - Some compilers complained about macro argument replacement within +a string literal. (isave.c) + -dSAFER didn't allow opening the %stdxxx files, which caused the +combination of -dSAFER and -dNOBIND to cause an infinite error. +(gs_init.ps) + - If C code used run_string to execute a startjob, an error +occurred. (gs_init.ps) + +</pre><h3><a name="V5.0_Library"></a>Library</h3><pre> + +Fixes bugs: + - Some compilers complained about macro argument replacement within +a string literal. (gxclbits.c, gdevpdfi.c) + - At certain resolutions, a 1-pixel line of the wrong color could +appear at one edge of landscape-oriented monobit images. (This is the 4th +or 5th time we have "fixed" this one infuriatingly fragile piece of code.) +(gxfixed.h, gximage1.c) + - The optimized code for landscape monobit images overlooked the +possibility of partial images, causing parts of images to be translated and +possibly clipped. (Yes, it's that same fragile piece of code.) +(gximage1.c) + - The bounding box device allowed resetting its resolution, which +could cause limitchecks from coordinate overflow. Our fix is to initialize +the device to a very high resolution (4000 dpi), which reduces the maximum +page size it can handle to about 130" on a side. (gdevbbox.c) + - The bounding box device wasn't identified as a page device. +(gdevbbox.c) + - The bounding box device used alone disregarded changes in page +size. (gdevbbox.c) + - One old compiler didn't allow a structure member name to be the +same as a typedef name. (gximage.h, gximage.c, gximage4.c) + - The height and band intersection computations for banded images +still weren't right, leading to inconsistencies in the band list and errors +in the output (typically, thin horizontal white stripes at band boundaries). +(gxclimag.c) + +Adds an extensive memory dump facility to the standard allocator. +Eventually this should be moved into a separate file, but it would be too +disruptive to do this just before a release. (gsalloc.c) + +</pre> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1997, 1998, 1999, 2000 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/History6.htm b/Master/xemtex/doc/ghostscript/History6.htm new file mode 100644 index 00000000000..c6229760705 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/History6.htm @@ -0,0 +1,7293 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>History of Ghostscript versions 6.n</title> +<!-- $Id: History6.htm,v 1.30.2.11.2.6 2003/05/17 14:39:00 giles Exp $ --> +<!-- + WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to + re-create the table of contents here, because it will replace the + hand-edited TOC subheads with a separate subhead for each H2 in + the body of the file. Or if you do, first look at the original + TOC to see how to edit it for visual conciseness. +--> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<table width="100%" border="0"> +<tr><th align="center" bgcolor="#CCCC00"><font size=6>History of Ghostscript versions 6.n</font> +</table> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Version6.64">Version 6.64 (2001-04-07)</a> +<ul> +<li><a href="#6.64_Incompatible_changes">Incompatible changes</a>, + <a href="#6.64-Documentation">Documentation</a>, + <a href="#6.64-Procedures">Procedures</a>, + <a href="#6.64-Utilities">Utilities</a>, + <a href="#6.64-Drivers">Drivers</a>, + <a href="#6.64-PDF_writer">PDF writer</a>, + <a href="#6.64-PDF_Interpreter">PDF Interpreter</a>, + <a href="#6.64-Interpreter">Interpreter</a>, + <a href="#6.64-Streams">Streams</a>, + <a href="#6.64-Library">Library</a>, + <a href="#6.64-Other">Other</a> +</ul> +<li><a href="#Version6.63">Version 6.63 (2001-03-31)</a> +<ul> +<li><a href="#6.63_Incompatible_changes">Incompatible changes</a>, + <a href="#6.63-Documentation">Documentation</a>, + <a href="#6.63-Procedures">Procedures</a>, + <a href="#6.63-Utilities">Utilities</a>, + <a href="#6.63-Drivers">Drivers</a>, + <a href="#6.63-PDF_writer">PDF writer</a>, + <a href="#6.63-PDF_Interpreter">PDF Interpreter</a>, + <a href="#6.63-Interpreter">Interpreter</a>, + <a href="#6.63-Streams">Streams</a>, + <a href="#6.63-Library">Library</a> +</ul> +<li><a href="#Version6.62">Version 6.62 (2001-03-19)</a> +<ul> +<li><a href="#6.62-Documentation">Documentation</a>, + <a href="#6.62-Procedures">Procedures</a>, + <a href="#6.62-Utilities">Utilities</a>, + <a href="#6.62-Drivers">Drivers</a>, + <a href="#6.62-PDF_writer">PDF writer</a>, + <a href="#6.62-PDF_Interpreter">PDF Interpreter</a>, + <a href="#6.62-Interpreter">Interpreter</a>, + <a href="#6.62-Streams">Streams</a>, + <a href="#6.62-Library">Library</a>, + <a href="#6.62-Other">Other</a> +</ul> +<li><a href="#Version6.61">Version 6.61 (2001-02-21)</a> +<ul> +<li><a href="#6.61-Documentation">Documentation</a>, + <a href="#6.61-Procedures">Procedures</a>, + <a href="#6.61-Utilities">Utilities</a>, + <a href="#6.61-Drivers">Drivers</a>, + <a href="#6.61-PDF_writer">PDF writer</a>, + <a href="#6.61-PDF_Interpreter">PDF Interpreter</a>, + <a href="#6.61-Interpreter">Interpreter</a>, + <a href="#6.61-Streams">Streams</a>, + <a href="#6.61-Library">Library</a>, + <a href="#6.61-Other">Other</a> +</ul> +<li><a href="#Version6.60">Version 6.60 (2000-12-31)</a> +<ul> +<li><a href="#6.60_Incompatible_changes">Incompatible changes</a>, + <a href="#6.60-Documentation">Documentation</a>, + <a href="#6.60-Procedures">Procedures</a>, + <a href="#6.60-Utilities">Utilities</a>, + <a href="#6.60-Drivers">Drivers</a>, + <a href="#6.60-PDF_writer">PDF writer</a>, + <a href="#6.60-PDF_Interpreter">PDF Interpreter</a>, + <a href="#6.60-Interpreter">Interpreter</a>, + <a href="#6.60-Streams">Streams</a>, + <a href="#6.60-Library">Library</a>, + <a href="#6.60-Other">Other</a> +</ul> +<li><a href="#Version6.30">Version 6.30 (2000-10-03)</a> +<ul> +<li><a href="#6.30_Incompatible_changes">Incompatible changes</a>, + <a href="#6.30 Documentation">Documentation</a>, + <a href="#6.30 Procedures">Procedures</a>, + <a href="#6.30 Utilities">Utilities</a>, + <a href="#6.30 Drivers">Drivers</a>, + <a href="#6.30 PDF writer">PDF writer</a>, + <a href="#6.30 Interpreter (PDF)">Interpreter (PDF)</a>, + <a href="#6.30 Interpreter">Interpreter</a>, + <a href="#6.30 Streams">Streams</a>, + <a href="#6.30 Library">Library</a>, + <a href="#6.30 ???Other???">???Other???</a> +</ul> +<li><a href="#Version6.23">Version 6.23 (2000-08-07)</a> +<ul> +<li><a href="#6.23_Incompatible_changes">Incompatible changes</a>, + <a href="#6.23 Documentation">Documentation</a>, + <a href="#6.23 Procedures">Procedures</a>, + <a href="#6.23 Utilities">Utilities</a>, + <a href="#6.23 Drivers">Drivers</a>, + <a href="#6.23 PDF writer">PDF writer</a>, + <a href="#6.23 Interpreter (PDF)">Interpreter (PDF)</a>, + <a href="#6.23 Interpreter">Interpreter</a>, + <a href="#6.23 Library">Library</a> +</ul> +<li><a href="#Version6.22">Version 6.22 (2000-07-05)</a> +<ul> +<li><a href="#6.22_Incompatible_changes">Incompatible changes</a>, + <a href="#6.22 Documentation">Documentation</a>, + <a href="#6.22 Procedures">Procedures</a>, + <a href="#6.22 Utilities">Utilities</a>, + <a href="#6.22 Drivers">Drivers</a>, + <a href="#6.22 PDF writer">PDF writer</a>, + <a href="#6.22 Interpreter (PDF)">Interpreter (PDF)</a>, + <a href="#6.22 Interpreter">Interpreter</a>, + <a href="#6.22 Streams">Streams</a>, + <a href="#6.22 Library">Library</a> +</ul> +<li><a href="#Version6.21">Version 6.21 (2000-04-28)</a> +<ul> +<li><a href="#6.21_Incompatible_changes">Incompatible changes</a>, + <a href="#6.21 Documentation">Documentation</a>, + <a href="#6.21 Procedures">Procedures</a>, + <a href="#6.21 Utilities">Utilities</a>, + <a href="#6.21 Drivers">Drivers</a>, + <a href="#6.21 PDF writer">PDF writer</a>, + <a href="#6.21 Interpreter (PDF)">Interpreter (PDF)</a>, + <a href="#6.21 Interpreter">Interpreter</a>, + <a href="#6.21 Streams">Streams</a>, + <a href="#6.21 Library">Library</a> +</ul> +<li><a href="#Version6.20">Version 6.20 (2000-04-06)</a> +<ul> +<li><a href="#6.20_Incompatible_changes">Incompatible changes</a>, + <a href="#6.20 Documentation">Documentation</a>, + <a href="#6.20 Procedures">Procedures</a>, + <a href="#6.20 Utilities">Utilities</a>, + <a href="#6.20 Drivers">Drivers</a>, + <a href="#6.20 PDF writer">PDF writer</a>, + <a href="#6.20 Interpreter (PDF)">Interpreter (PDF)</a>, + <a href="#6.20 Interpreter">Interpreter</a>, + <a href="#6.20 Streams">Streams</a>, + <a href="#6.20 Library">Library</a> +</ul> +<li>(Versions 6.02 - 6.19 deliberately omitted.) +<li><a href="#Version6.01">Version 6.01 (2000-03-17)</a> +<ul> +<li><a href="#6.01_Incompatible_changes">Incompatible changes</a>, + <a href="#6.01 Documentation">Documentation</a>, + <a href="#6.01 Procedures">Procedures</a>, + <a href="#6.01 Utilities">Utilities</a>, + <a href="#6.01 Drivers">Drivers</a>, + <a href="#6.01 PDF writer">PDF writer</a>, + <a href="#6.01 Interpreter (PDF)">Interpreter (PDF)</a>, + <a href="#6.01 Interpreter">Interpreter</a>, + <a href="#6.01 Streams">Streams</a>, + <a href="#6.01 Library">Library</a> +</ul> +<li><a href="#Version6.0">Version 6.0 (2000-02-03)</a> +<ul> +<li><a href="#6.0_Documentation">Documentation</a>, + <a href="#6.0_Procedures">Procedures</a>, + <a href="#6.0_Utilities">Utilities</a>, + <a href="#6.0_Drivers">Drivers</a>, + <a href="#6.0_Platforms">Platforms</a>, + <a href="#6.0_Fonts">Fonts</a>, + <a href="#6.0_PDF_writer">PDF writer</a>, + <a href="#6.0_Interpreter_PDF">Interpreter (PDF)</a>, + <a href="#6.0_Interpreter">Interpreter</a>, + <a href="#6.0_Streams">Streams</a>, + <a href="#6.0_Library">Library</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document is a record of changes in Ghostscript releases numbered 6.n. +For earlier versions, see the the history documents: + +<blockquote> +<a href="History5.htm">History of Ghostscript versions 5.n</a><br> +<a href="History4.htm">History of Ghostscript versions 4.n</a><br> +<a href="History3.htm">History of Ghostscript versions 3.n</a><br> +<a href="History2.htm">History of Ghostscript versions 2.n</a><br> +<a href="History1.htm">History of Ghostscript versions 1.n</a> +</blockquote> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<p> +Within each release, news appears in the following order: Incompatible +changes, Documentation, Procedures, Utilities, Drivers, Platforms, Fonts, +PDF writer (included under Drivers through fileset 5.88), Interpreter, +Streams (included under Interpreter through release 2.9.9), Library. +Changes marked with a * were made available as patches to a previous +release. + +<hr> + +<h1><a name="Version6.64"></a>Version 6.64 (2001-04-07)</h1> + +<p> +This is probably the last beta release before 7.0. Most of the patches +since last time are bug and portability fixes. + +<p> +All problems registered on SourceForge numbered 414104 or lower are +closed, except for the following: 209350, 215256, 219798, 221582, +222534, 222727, 224056, 224863, 226477, 226584, 227684, 227709, +228180, 228641, 230694, 231390, 404255, 404482, 405342, 406285, +406689, 406696, 406979, 407342, 409887, 410371, 411753, 413114, +413669, 413747, 414022, 414104. + +<h3><a name="6.64_Incompatible_changes"></a>Incompatible changes</h3> + +<pre> +(Library) + - The gs_logical_operation_t type now has a bit indicating +PDF 1.4 transparency. +(Build process) + - The default directories for XLIBDIR and XINCLUDE now point +to /usr/X11R6. + + +<h2><a name="6.64-Documentation"></a>Documentation</h2><pre> + +1. Removing the article "Minor Bugs. kshow doesn't restore currentfont after +running proc." due to fixed. 2. Adding article "Buffering in input filters" +to "Differences from Adobe Implementation". (doc/Issues.htm [1.6]: +2001/04/03 15:53:01 igorm) + +Updates Glenn Ramsey's email address in the Epson 300 documentation. +(doc/Devices.htm [1.24]: 2001/04/04 04:25:00 raph) + +Adds request for code-review submissions to identify intended branches. +(doc/Maintain.htm [1.14]: 2001/04/04 07:22:48 raph) + +Move SourceForge bug #226943 to the "Other implementation" section of this +document. The %ram% device has never been a user or customer issue, but it +might be handy to have. (doc/Projects.htm [1.27]: 2001/04/04 16:36:36 rayjj) + +Updates to documentation. Remove the statement that the Inprise compiler is +used for Windows distribution archives. (doc/Bug-info.htm [1.14], +doc/Fonts.htm [1.16], doc/Install.htm [1.20], doc/Make.htm [1.26], +doc/New-user.htm [1.23], doc/Release.htm [1.32], doc/Tester.htm [1.10]: +2001/04/05 08:49:57 ghostgum) + +Adds issues from SourceForge bug numbers: 232334, 233403, 406643. Also adds +missing bug ID for #228808. (doc/Issues.htm [1.7]: 2001/04/05 14:44:39 +rayjj) + +Various documenation fixups. Removes pointer to external pdf_sec.ps now that +the full implementation is in our distribution. Adds note on the +class="offset" attribute to the html style guidelines. (doc/API.htm [1.5], +doc/Bug-form.htm [1.18], doc/Htmstyle.htm [1.13], doc/New-user.htm [1.24], +doc/Psfiles.htm [1.17], doc/Readme.htm [1.25]: 2001/04/06 11:27:00 giles) + +Uses better test for avoiding crash on "gs -h". Also updates API document. +Thanks to Russell Lang. (doc/API.htm [1.6]: 2001/04/07 00:08:08 raph) + +adds a last few doc fixups before the 6.64 beta release. +(doc/Bug-info.htm [1.15], doc/C-style.htm [1.15], doc/Htmstyle.htm [1.14]: +2001/04/07 00:15:02 giles) + +Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers. +(doc/Devices.htm [1.25]: 2001/04/07 00:33:29 raph) + +Corrections to interpreter API documentation. If "gs -h" executed, +gsapi_exit() must be called next. Assign copyright to artofcode LLC. +(doc/API.htm [1.7]: 2001/04/07 01:17:50 ghostgum) + +Updates version number and date in preparation for 6.64 release. Updates +Develop.htm to accurately list source files. (doc/API.htm [1.8], +doc/Bug-form.htm [1.19], doc/Bug-info.htm [1.16], doc/C-style.htm [1.16], +doc/Commprod.htm [1.12], doc/Copying.htm [1.10], doc/Current.htm [1.10], +doc/DLL.htm [1.12], doc/Develop.htm [1.36], doc/Devices.htm [1.26], +doc/Drivers.htm [1.18], doc/Fonts.htm [1.17], doc/Helpers.htm [1.14], +doc/History1.htm [1.10], doc/History2.htm [1.10], doc/History3.htm [1.10], +doc/History4.htm [1.10], doc/History5.htm [1.12], doc/History6.htm [1.25], +doc/Htmstyle.htm [1.15], doc/Install.htm [1.21], doc/Issues.htm [1.8], +doc/Language.htm [1.29], doc/Lib.htm [1.10], doc/Maintain.htm [1.15], +doc/Make.htm [1.27], doc/New-user.htm [1.25], doc/News.htm [1.83], +doc/Projects.htm [1.28], doc/Ps-style.htm [1.10], doc/Ps2epsi.htm [1.11], +doc/Ps2pdf.htm [1.28], doc/Psfiles.htm [1.18], doc/README [1.9], +doc/Readme.htm [1.26], doc/Release.htm [1.33], doc/Source.htm [1.10], +doc/Tester.htm [1.11], doc/Unix-lpr.htm [1.10], doc/Use.htm [1.26], +doc/Xfonts.htm [1.10], doc/gs-vms.hlp [1.9], man/dvipdf.1 [1.7], +man/font2c.1 [1.7], man/gs.1 [1.7], man/gslp.1 [1.7], man/gsnd.1 [1.7], +man/pdf2dsc.1 [1.7], man/pdf2ps.1 [1.9], man/pdfopt.1 [1.7], +man/pf2afm.1 [1.7], man/pfbtopfa.1 [1.8], man/printafm.1 [1.7], +man/ps2ascii.1 [1.7], man/ps2epsi.1 [1.7], man/ps2pdf.1 [1.11], +man/ps2pdfwr.1 [1.8], man/ps2ps.1 [1.14], man/wftopfa.1 [1.7]: 2001/04/07 +07:55:24 raph) + +Trivial doc patch. (doc/Develop.htm [1.37]: 2001/04/07 07:58:50 raph) + +Documentation fixups for broken internal links. (doc/Devices.htm [1.27], +doc/Maintain.htm [1.16], doc/Make.htm [1.28], doc/Release.htm [1.34]: +2001/04/07 08:18:53 giles) + +</pre><h2><a name="6.64-Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - Speed up shading type 1. (lib.mak [1.47]: 2001/04/05 08:32:28 +igorm) + +Adds target to OS/2 makefile to build distribution zip archive. Disables +multiple image windows for OS/2 because we can't tell when subsequent +windows are closed. To allow multiple windows we would need to rewrite +gspmdrv.c. (os2.mak [1.14]: 2001/04/01 10:13:24 ghostgum) + +Remove the bmpa*** devices from the default build. These are example devices +to demonstrate async rendering but do not have any advantages to users over +the bmp*** devices, and their inclusion requires thread support which is not +available on all systems. Resolves SourceForge bug #213799. +(unix-gcc.mak [1.15], unixansi.mak [1.11], unixtrad.mak [1.11]: 2001/04/03 +20:04:46 rayjj) + +updates to support libpng v1.0.9. (all-arch.mak [1.7], bcwin32.mak [1.9], +dvx-gcc.mak [1.9], libpng.mak [1.5], msvc32.mak [1.14], msvclib.mak [1.11], +openvms.mak [1.10], os2.mak [1.15], ugcclib.mak [1.10], unix-gcc.mak [1.16], +unixansi.mak [1.12], unixtrad.mak [1.12], watc.mak [1.11], +watclib.mak [1.11], watcw32.mak [1.10]: 2001/04/04 07:51:15 giles) + +updates to support libpng v1.0.10. OS/2 makefile fixup for v1.0.9 and above +from Russell Lang. (all-arch.mak [1.8], bcwin32.mak [1.10], +dvx-gcc.mak [1.10], libpng.mak [1.6], msvc32.mak [1.15], msvclib.mak [1.12], +openvms.mak [1.11], os2.mak [1.16], ugcclib.mak [1.11], unix-gcc.mak [1.17], +unixansi.mak [1.13], unixtrad.mak [1.13], watc.mak [1.12], +watclib.mak [1.12], watcw32.mak [1.11]: 2001/04/06 07:27:22 giles) + +Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers. +(contrib.mak [1.23]: 2001/04/07 00:33:29 raph) + +Changes default XLIBDIR and XINCLUDE to /usr/X11R6, which is far more likely +than the previous values. (contrib.mak [1.24], ugcclib.mak [1.12], +unix-gcc.mak [1.18], unixtrad.mak [1.14]: 2001/04/07 06:50:27 raph) + +Updates version number and date in preparation for 6.64 release. Updates +Develop.htm to accurately list source files. (version.mak [1.32]: 2001/04/07 +07:55:25 raph) + +</pre><h2><a name="6.64-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - -dDELAYSAFER flag added; append operator fixed in Windows and OS/2 +scripts; literal newlines removed from sed script. Bugs #223896, #230699 +(lib/ps2epsi [1.5], lib/ps2epsi.bat [1.4], lib/ps2epsi.cmd [1.2], +lib/ps2epsi.ps [1.5]: 2001/04/04 04:45:42 alexcher) + - The fileposition operator cannot be used on some data sources. Use +.fileposition (if on Ghostscript) and make some other changes to make this +portable to other PostScript interpreters. SourceForge bug #223005. +(lib/image-qa.ps [1.3]: 2001/04/04 04:54:53 rayjj) + - Previous fix had OutputFile set to a debug value. Restoring it to +NUL (lib/ps2epsi.bat [1.5]: 2001/04/04 05:19:33 alexcher) + - Adds whitespace to sed command in ps2epsi, needed on RedHat Linux 6.2. +(lib/ps2epsi [1.6]: 2001/04/04 21:05:00 raph) + +</pre><h2><a name="6.64-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - JPEG data made GC-traceable to prevent early freeing. Bug # 227090 +gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure +is allocated with a descriptor. sdct.h : defines descriptors for JPEG +structures. sjpegc.c : implements the linked list of JPEG core blocks +sjpegd.c sjpege.c : corrects the initialization order of (de)compress +struct's gsstruct.h : yet another macro for a structure with 1 string and 1 +ptr (gdevjpeg.c [1.3], gdevpsdu.c [1.10]: 2001/04/04 19:20:27 alexcher) + +Integrates patch from hpijs 0.94 so that Ghostscript can use hpijs drivers. +(gdevhpij.c [1.1], gdevhpij.h [1.1]: 2001/04/07 00:33:29 raph) + +</pre><h2><a name="6.64-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - Emits W or W* after path construction operators when outputting +clip paths in the pdfwrite driver, to be correct with respect to the PDF +spec. (gdevpdfd.c [1.14]: 2001/04/07 07:12:52 raph) + +</pre><h2><a name="6.64-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - The search area for %%EOF at the end of PDF file is increased to +4K to cover a file generated by Distiller 3.02b for AIX 4.1.1 Customer #580 +(lib/pdf_main.ps [1.31]: 2001/04/07 01:34:23 alexcher) + - A comment is corrected to match the source. +(lib/pdf_main.ps [1.32]: 2001/04/07 01:47:00 alexcher) + +PDF 1.4 improvements: Fixes garbage collection of device filter stack. +Forces idempotent path drawing in transparency mode. Corrects handling of +Group at toplevel page. (lib/pdf_draw.ps [1.29], lib/pdf_main.ps [1.30]: +2001/04/06 22:23:44 raph) + +</pre><h2><a name="6.64-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Windows poll function now returns a code to interrupt Ghostscript +if the text window is closing. Don't show message box on exit if user closed +the text window. (dwmain.c [1.4], dwtext.c [1.3]: 2001/04/03 11:12:58 +ghostgum) + - equality operation between a pointer and enum constant (with 0 +value) is a syntax error on CodeWarrior. Replacing the enum with NULL. From +Bernd Heller (zdscpars.c [1.10]: 2001/04/04 05:25:32 alexcher) + - Register /All and /None in the name table on look-up. Otherwise an +attempt to set the separation color space fails with /undefined +(zcssepr.c [1.7]: 2001/04/04 16:09:15 alexcher) + - JPEG data made GC-traceable to prevent early freeing. Bug # 227090 +gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure +is allocated with a descriptor. sdct.h : defines descriptors for JPEG +structures. sjpegc.c : implements the linked list of JPEG core blocks +sjpegd.c sjpege.c : corrects the initialization order of (de)compress +struct's gsstruct.h : yet another macro for a structure with 1 string and 1 +ptr (zfdctd.c [1.4], zfdcte.c [1.4]: 2001/04/04 19:20:27 alexcher) + - Set default size of MAX_ESTACK to 5000. This is the minimal fix +recommended by L. Peter Deutsch in the followup to SourceForge bug #224095. +This should be fixed later to handle automatic stack expansion. The +approaches are defined by Peter as #2 and #3. Interim resolution to +SorceForge bug #224095. (interp.c [1.8]: 2001/04/06 06:42:45 rayjj) + - Apparently Japanese Windows uses WM_USER+1 internally and +conflicts with gswin32c messages starting from WM_USER+1. So gswin32c +messages are moved to WM_USER+101 range. Fix from Akira Kakuto +(dwmainc.c [1.4]: 2001/04/06 08:36:02 ghostgum) + - Do not put Windows stdin into binary mode if it is the console +because this returns CR and LF each time the Enter key is pressed. This +caused Ghostscript to not pause at following showpage prompts. +(dwmainc.c [1.5]: 2001/04/06 08:43:29 ghostgum) + - Genoa FTS 035-07.ps got a SEGV error caused by data being +allocated in non-GC memory, but pointer enumumeration giving these pointers +to the GC for tracing. Since these objects didn't have GC type headers bad +things happened. Also change one of the allocations in sjpegc.c to immovable +that was not -- this change was not needed to prevent the crash. +(zfdctd.c [1.5]: 2001/04/07 00:33:22 rayjj) + - Compressed fonts are now recognized as narrow during font +substitution. Customer #580 (lib/gs_fonts.ps [1.11]: 2001/04/07 01:07:01 +alexcher) + - two small issues with compilation under xlc on IBM AIX RS6000, a +name conflict with structures names (u)int64, and trailing commas in enum +declarations. Patch from Dan Coby. Sourceforge bug #414328. +(dscparse.h [1.4]: 2001/04/07 07:28:33 giles) + +Adds target to OS/2 makefile to build distribution zip archive. Disables +multiple image windows for OS/2 because we can't tell when subsequent +windows are closed. To allow multiple windows we would need to rewrite +gspmdrv.c. (dpmain.c [1.3]: 2001/04/01 10:13:24 ghostgum) + +updates to support libpng v1.0.10. OS/2 makefile fixup for v1.0.9 and above +from Russell Lang. (imain.c [1.11]: 2001/04/06 07:27:22 giles) + +Removed unecessary include of Macintosh QDOffscreen.h header (iapi.h [1.2]: +2001/04/06 22:57:46 bdheller) + +Uses better test for avoiding crash on "gs -h". Also updates API document. +Thanks to Russell Lang. (imain.c [1.12]: 2001/04/07 00:08:08 raph) + +Updates version number and date in preparation for 6.64 release. Updates +Develop.htm to accurately list source files. (lib/gs_init.ps [1.33]: +2001/04/07 07:55:25 raph) + +Removes \r\n line ends inadvertently added. (dscparse.h [1.5]: 2001/04/07 +08:07:17 raph) + +</pre><h2><a name="6.64-Streams"></a>Streams</h2><pre> + +Fixes problems: + - JPEG data made GC-traceable to prevent early freeing. Bug # 227090 +gdevjpeg.c gdevpsdu.c sdeparam.c zfdctd.c zfdcte.c : JPEG control structure +is allocated with a descriptor. sdct.h : defines descriptors for JPEG +structures. sjpegc.c : implements the linked list of JPEG core blocks +sjpegd.c sjpege.c : corrects the initialization order of (de)compress +struct's gsstruct.h : yet another macro for a structure with 1 string and 1 +ptr (sdct.h [1.3], sdeparam.c [1.3], sjpegc.c [1.3], sjpegd.c [1.3], +sjpege.c [1.3]: 2001/04/04 19:20:27 alexcher) + - Genoa FTS 035-07.ps got a SEGV error caused by data being +allocated in non-GC memory, but pointer enumumeration giving these pointers +to the GC for tracing. Since these objects didn't have GC type headers bad +things happened. Also change one of the allocations in sjpegc.c to immovable +that was not -- this change was not needed to prevent the crash. +(sjpegc.c [1.4]: 2001/04/07 00:33:22 rayjj) + +</pre><h2><a name="6.64-Library"></a>Library</h2><pre> + +Fixes problems: + - Register /All and /None in the name table on look-up. Otherwise an +attempt to set the separation color space fails with /undefined +(gscsepr.c [1.8]: 2001/04/04 16:09:15 alexcher) + - JPEG data made GC-traceable to prevent early freeing. Bug # 227090 +gsstruct.h : yet another macro for a structure with 1 string and 1 ptr +(gsstruct.h [1.8]: 2001/04/04 18:45:08 alexcher) + - Speed up shading type 1. (gsshade.c [1.4], gxshade1.c [1.9]: +2001/04/05 08:32:28 igorm) + - Some compilers complain that: "Argument of type "stream *" is +incompatible with parameter of type "FILE *". Thanks to Nelson Beebe for +finding this (on SGI). (gs_stdio.h [1.2]: 2001/04/06 03:19:07 rayjj) + - Fixes crashes in Type 4 function evaluator when stack is empty. +(gsfunc4.c [1.5]: 2001/04/06 22:22:38 raph) + +Adds a lop_pdf14 field to logical operators, which is used to force non- +idempotent drawing of paths. (gsropt.h [1.4]: 2001/04/05 23:21:15 raph) + +PDF 1.4 improvements: Fixes garbage collection of device filter stack. +Forces idempotent path drawing in transparency mode. Corrects handling of +Group at toplevel page. (gdevp14.c [1.2], gsstate.c [1.11]: 2001/04/06 +22:23:44 raph) + +</pre><h2><a name="6.64-Other"></a>Other</h2><pre> + +Fixes problems: + - two small issues with compilation under xlc on IBM AIX RS6000, a +name conflict with structures names (u)int64, and trailing commas in enum +declarations. Patch from Dan Coby. Sourceforge bug #414328. +(icclib/icc.c [1.2], icclib/icc.h [1.2]: 2001/04/07 07:28:33 giles) + +Removes \r\n line ends inadvertently added. (icclib/icc.c [1.3], +icclib/icc.h [1.3]: 2001/04/07 08:07:16 raph) + +<hr> + +<h1><a name="Version6.63"></a>Version 6.63 (2001-03-31)</h1> + +<p> +This is the second beta release for the upcoming 7.0 release. This +fileset contains a number of stability improvements for the new +display device, integration of PDF 1.4 rendering with all devices, and +the usual round of bug fixes. + +<p> +All problems registered on SourceForge numbered 411753 or lower are +closed, except for the following: 201955, 202735, 206652, 209350, +213799, 215256, 219798, 220967, 221582, 222534, 222727, 223005, +223754, 223896, 223992, 224056, 224095, 224863, 226477, 226584, +226943, 227090, 227684, 227709, 228180, 228641, 230694, 230699, +231390, 232334, 233403, 404255, 404482, 405313, 406285, 406643, +406689, 406696, 406979, 407342, 409887, 410371, 410722, 411753. + +<h3><a name="6.63_Incompatible_changes"></a>Incompatible changes</h3> + +<pre> +(Library) + - The gs_text_enum_common structure has a new imaging_dev field +which is used by the bbox device to intercept low-level drawing +operations when drawing text. + - There is a new pdf14 device filter used for rendering PDF 1.4 +documents. + + +<h2><a name="6.63-Documentation"></a>Documentation</h2><pre> + +Moves the following SourceForge bugs to the Issues.htm documentation: +201955, 220967, 223992. (doc/Issues.htm [1.2]: 2001/03/20 07:36:30 rayjj) + +Added 2 issues related to JPEG in PDF, Bug 226391 (doc/Issues.htm [1.3]: +2001/03/20 16:41:28 alexcher) + +Adds %printer% device to Windows to allow a printer to be specified as +-sOutputFile="%printer%Printer Name". This replaces the use of +"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old +\\spool\, the new %printer% device does not write a large temporary file. +(doc/Install.htm [1.17]: 2001/03/26 11:28:20 ghostgum) + +Change the search order for the Ghostscript Windows DLL to try the +executable directory before the location specified in the GS_DLL environment +variable. (doc/Install.htm [1.18]: 2001/03/27 09:35:22 ghostgum) + +Some attributes of Catalog object are lost during PDF to PDF conversion +(doc/Issues.htm [1.4]: 2001/03/27 21:03:18 alexcher) + +Increments version number after 6.62 release. (doc/News.htm [1.81]: +2001/03/28 21:27:15 raph) + +Updates dates in preparation for 6.63 beta release. News updated. +(doc/API.htm [1.4], doc/Bug-form.htm [1.17], doc/Bug-info.htm [1.13], +doc/C-style.htm [1.14], doc/Commprod.htm [1.11], doc/Copying.htm [1.9], +doc/Current.htm [1.9], doc/DLL.htm [1.11], doc/Develop.htm [1.35], +doc/Devices.htm [1.23], doc/Drivers.htm [1.17], doc/Fonts.htm [1.15], +doc/Helpers.htm [1.13], doc/History1.htm [1.9], doc/History2.htm [1.9], +doc/History3.htm [1.9], doc/History4.htm [1.9], doc/History5.htm [1.11], +doc/History6.htm [1.23], doc/Htmstyle.htm [1.12], doc/Install.htm [1.19], +doc/Issues.htm [1.5], doc/Language.htm [1.28], doc/Lib.htm [1.9], +doc/Maintain.htm [1.13], doc/Make.htm [1.25], doc/New-user.htm [1.22], +doc/News.htm [1.82], doc/Projects.htm [1.26], doc/Ps-style.htm [1.9], +doc/Ps2epsi.htm [1.10], doc/Ps2pdf.htm [1.27], doc/Psfiles.htm [1.16], +doc/README [1.8], doc/Readme.htm [1.24], doc/Release.htm [1.31], +doc/Source.htm [1.9], doc/Tester.htm [1.9], doc/Unix-lpr.htm [1.9], +doc/Use.htm [1.25], doc/Xfonts.htm [1.9], doc/gs-vms.hlp [1.8], +man/dvipdf.1 [1.6], man/font2c.1 [1.6], man/gs.1 [1.6], man/gslp.1 [1.6], +man/gsnd.1 [1.6], man/pdf2dsc.1 [1.6], man/pdf2ps.1 [1.8], +man/pdfopt.1 [1.6], man/pf2afm.1 [1.6], man/pfbtopfa.1 [1.7], +man/printafm.1 [1.6], man/ps2ascii.1 [1.6], man/ps2epsi.1 [1.6], +man/ps2pdf.1 [1.10], man/ps2pdfwr.1 [1.7], man/ps2ps.1 [1.13], +man/wftopfa.1 [1.6]: 2001/04/01 01:10:54 raph) + +</pre><h2><a name="6.63-Procedures"></a>Procedures</h2><pre> + +Adds %printer% device to Windows to allow a printer to be specified as +-sOutputFile="%printer%Printer Name". This replaces the use of +"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old +\\spool\, the new %printer% device does not write a large temporary file. +(winlib.mak [1.9]: 2001/03/26 11:28:20 ghostgum) + +Adds Windows %printer% device to MS Visual C++ build. (msvc32.mak [1.13]: +2001/03/26 12:00:07 ghostgum) + +Adds icclib subdirectory to tarballs. (toolbin/makeset.tcl [1.7]: 2001/03/28 +21:24:00 raph) + +Increments version number after 6.62 release. (version.mak [1.30]: +2001/03/28 21:27:15 raph) + +Applies PDF 1.4 rendering with all devices. Previously, only pnga device +contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging +model is detected in the source file, it installs the pdf 1.4 rendering +device as a device filter. (lib.mak [1.46]: 2001/04/01 00:30:41 raph) + +Updates dates in preparation for 6.63 beta release. News updated. +(version.mak [1.31]: 2001/04/01 01:10:55 raph) + +</pre><h2><a name="6.63-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - closefile added for procedure based stdio to prevent disabled +stream from appearing valid. (ziodevsc.c [1.2]: 2001/03/27 09:37:10 +ghostgum) + - Avoid rangecheck error when character code exceeds 255. Support +zero-size bitmap used by some fonts for space character. +(lib/bdftops.ps [1.3]: 2001/03/27 20:53:36 alexcher) + - BATCH parameter is added to all bdftops* scripts +(lib/bdftops [1.2], lib/bdftops.bat [1.3], lib/bdftops.cmd [1.2]: 2001/03/27 +21:15:55 alexcher) + - Corrects memory allocation of command line arguments in the +programs which load the Ghostscript interpreter DLL / shared object. +(dxmain.c [1.2]: 2001/03/31 10:09:47 ghostgum) + +Adds %printer% device to Windows to allow a printer to be specified as +-sOutputFile="%printer%Printer Name". This replaces the use of +"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old +\\spool\, the new %printer% device does not write a large temporary file. +(gp_msprn.c [1.1]: 2001/03/26 11:28:20 ghostgum) + +</pre><h2><a name="6.63-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - AutoFilter.* options now select lossless compression for the image +smaller than 64 pixels in any dimension. Bug # 226391 from a free user. +(gdevpsdi.c [1.14]: 2001/03/24 04:17:07 alexcher) + - In the display device, allow NULL as a valid value for +DisplayHandle. Correct the code which requires the device to be closed +before changing the DisplayHandle and DisplayFormat parameters. SourceForge +bug # 411101. (gdevdsp.c [1.2]: 2001/03/28 08:46:15 ghostgum) + - mdev->memory member was set to 0 causing gx_device_enum_ptr() +not enumerate mdev. This led to freeing of mdev by GC and memory exceptions +during de-allocation of the display device. (gdevdsp.c [1.3]: 2001/03/28 +21:50:56 alexcher) + - Correct memory allocation problems in the display device. Return +correct pointers from display_enum_ptrs so that the memory device and bitmap +are not moved or prematurely freed. Adds a finalize procedure. Change the +memory device to not forward to the display device. Mark the memory device +as retained so it gets freed at the correct time. (gdevdsp.c [1.4], +gdevdsp2.h [1.2]: 2001/03/29 07:26:57 ghostgum) + - Prevents the buffered mode of the x11 device from missing updates +from the bitmap buffer to the X display. Fix for Artifex customer #1130 +(gdevx.c [1.8]: 2001/03/30 18:22:28 rayjj) + +Adds Tumble parameter to mswinpr2 device for specifying the duplex +arrangement. Adds QueryUser to the parameters returned by +win_pr2_get_params, so that it works from the command line. +(gdevwpr2.c [1.8]: 2001/03/26 09:44:08 ghostgum) + +Adds %printer% device to Windows to allow a printer to be specified as +-sOutputFile="%printer%Printer Name". This replaces the use of +"\\spool\Printer Name" for all but Windows 3.1/Win32s. Unlike the old +\\spool\, the new %printer% device does not write a large temporary file. +(gdevwpr2.c [1.9]: 2001/03/26 11:28:20 ghostgum) + +Applies PDF 1.4 rendering with all devices. Previously, only pnga device +contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging +model is detected in the source file, it installs the pdf 1.4 rendering +device as a device filter. (gdevp14.h [1.1]: 2001/04/01 00:30:41 raph) + +Change: The Ghostscript 'pwrite' function name conflicted with the standard +pwrite function defined in unistd.h on several systems. To avoid confusion +with the standard function change the name to stream_write. Also change +'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug +#410772. Fix by Ray Johnston. (gdevps.c [1.16], gdevpsdu.c [1.9], +gdevpsu.c [1.4]: 2001/04/01 00:35:26 raph) + +</pre><h2><a name="6.63-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - coordinate range is reduced to +/- 16383 to satisfy actual AR4 +restrictions. When CTM was scaled to reduce the range, line width in stroke +and CTM in fill were wrong. Bug # 409105 from raf_mellen at +users.sourceforge.net (gdevpdfd.c [1.12]: 2001/03/21 04:25:48 alexcher) + - ARTICLE pdfmark generated invalid bead object if /Page key was +left out. Bug # 227651 from mbentley at users.sourceforge.net +(gdevpdfm.c [1.10]: 2001/03/21 05:10:31 alexcher) + - initial values of fill and stroke color didn't change when +ProcessColorModel changed. An attempt to set white color in CMYK mode was +ignored because it was considered equal to the default color. Bug #410441 +from a free user. (gdevpdf.c [1.30]: 2001/03/22 15:12:48 alexcher) + - pdf_reset_graphics() didn't set correct default color (black) in +/DeviceCMYK color model. An attempt to set white color was ignored because +it was considered equal to the default color causing white objects rendered +black. Bug #410441 from a free user. (gdevpdfg.c [1.11]: 2001/03/23 22:04:19 +alexcher) + - Maximum depth of an outline tree increased from 8 to 32. Bug +#410595 from a free user. (gdevpdfx.h [1.29]: 2001/03/23 22:18:28 alexcher) + +Change: The Ghostscript 'pwrite' function name conflicted with the standard +pwrite function defined in unistd.h on several systems. To avoid confusion +with the standard function change the name to stream_write. Also change +'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug +#410772. Fix by Ray Johnston. (gdevpdf.c [1.31], gdevpdfb.c [1.4], +gdevpdfc.c [1.15], gdevpdfd.c [1.13], gdevpdfe.c [1.9], gdevpdfg.c [1.12], +gdevpdfj.c [1.6], gdevpdfm.c [1.11], gdevpdfo.c [1.7], gdevpdfs.c [1.3], +gdevpdft.c [1.32], gdevpdfu.c [1.15], gdevpdfw.c [1.10]: 2001/04/01 00:35:26 +raph) + +</pre><h2><a name="6.63-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - OmniForm generates PDF files with endobj missing in some objects. +Adobe Acrobat Reader ignores this. Generally speaking, Ghostscript does not +attempt to accept files that grossly fail to obey the Adobe specification +and are produced by software other than a very few extremely widespread +applications. However work-around for this case is easy and unlikely to +break anything. SourceForge bug #406694. (lib/pdf_base.ps [1.14]: 2001/03/20 +05:04:59 alexcher) + - URI action was not converted to corresponding pdfmark and lost +during PDF to PDF conversion. Bug #409245, patch Leon Bottou with some +changes. (lib/pdf_main.ps [1.28]: 2001/03/24 23:59:23 alexcher) + +Implementation of security hooks for PDF reader by Geoffrey Keating is +merged into the main GS code base. (lib/pdf_sec.ps [1.3]: 2001/03/25 +02:03:44 alexcher) + +Applies PDF 1.4 rendering with all devices. Previously, only pnga device +contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging +model is detected in the source file, it installs the pdf 1.4 rendering +device as a device filter. (lib/pdf_main.ps [1.29]: 2001/04/01 00:30:41 +raph) + +</pre><h2><a name="6.63-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - flush procedure based stdout and stderr on exit. (imain.c [1.8]: +2001/03/27 09:38:39 ghostgum) + - Fix for CIDFontType 0 : 1. Erroneous glyphs are drawn by cshow +(with -dNOCACHE); 2. Glyphs written in horizontal direction instead vertical +(with anti-aliasing); 3. Erroneous glyphs and awkward metrics (with +anti-aliasing and -dNOCACHE); Patches 1 & 3 from Hideyuki Suzuki +(hideyuki), improved by igorm. SourceForge bug #222683. (zchar1.c [1.7]: +2001/03/27 09:56:39 igorm) + - Changes to introduce the min_left stream state variable set this +to 1 for procedure streams, which caused 1 character to be retained in the +stream buffer which was not passed to the client. This broke the DLL +interface where procedure callouts were used to get the string from the +callback. Procedure streams have no need for EOD lookahead (to force +closure) so the correct min_left value is 0. SourceForge bug #404331. +(zfproc.c [1.9]: 2001/03/29 04:09:40 rayjj) + - After recognizing a number the scanner wrongly interpreted it as a +name, if the number ends at the end of input buffer. Change from Raph. +SourceForge bug #224205. (iscannum.c [1.3]: 2001/03/29 13:27:59 igorm) + - Correct the Windows virtual key code passed from the image window +to the console. (dwimg.c [1.2]: 2001/03/31 10:07:48 ghostgum) + - Put Windows console stdout and stderr in binary mode. Ignore the +initial callout for stdout and stderr as the procedure stream acquires a +buffer. (dwmainc.c [1.2], imain.c [1.9]: 2001/03/31 10:08:43 ghostgum) + - Corrects memory allocation of command line arguments in the +programs which load the Ghostscript interpreter DLL / shared object. +(dpmain.c [1.2], dwmain.c [1.2], dwmainc.c [1.3]: 2001/03/31 10:09:47 +ghostgum) + - When gswin32 text window is closed, exit the interpreter on next +access to stdin and then destroy the text window. (dwmain.c [1.3], +dwtext.c [1.2], imain.c [1.10]: 2001/03/31 10:11:55 ghostgum) + +Change the search order for the Ghostscript Windows DLL to try the +executable directory before the location specified in the GS_DLL environment +variable. (dwdll.c [1.2]: 2001/03/27 09:35:22 ghostgum) + +Update mail address from bug-gs@aladdin.com to bug-gs@ghostscript.com. +(imainarg.c [1.10]: 2001/03/28 18:30:35 rayjj) + +Increments version number after 6.62 release. (lib/gs_init.ps [1.32]: +2001/03/28 21:27:15 raph) + +Applies PDF 1.4 rendering with all devices. Previously, only pnga device +contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging +model is detected in the source file, it installs the pdf 1.4 rendering +device as a device filter. (zdfilter.c [1.2]: 2001/04/01 00:30:41 raph) + +Change: The Ghostscript 'pwrite' function name conflicted with the standard +pwrite function defined in unistd.h on several systems. To avoid confusion +with the standard function change the name to stream_write. Also change +'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug +#410772. Fix by Ray Johnston. (zfcmap.c [1.9]: 2001/04/01 00:35:26 raph) + +</pre><h2><a name="6.63-Streams"></a>Streams</h2><pre> + +Fixes problems: + - Changes to introduce the min_left stream state variable set this +to 1 for procedure streams, which caused 1 character to be retained in the +stream buffer which was not passed to the client. This broke the DLL +interface where procedure callouts were used to get the string from the +callback. Procedure streams have no need for EOD lookahead (to force +closure) so the correct min_left value is 0. SourceForge bug #404331. +(stream.c [1.11], stream.h [1.8]: 2001/03/29 04:09:40 rayjj) + +Change: The Ghostscript 'pwrite' function name conflicted with the standard +pwrite function defined in unistd.h on several systems. To avoid confusion +with the standard function change the name to stream_write. Also change +'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug +#410772. Fix by Ray Johnston. (spprint.c [1.3], spprint.h [1.3], +spsdf.c [1.5]: 2001/04/01 00:35:26 raph) + +</pre><h2><a name="6.63-Library"></a>Library</h2><pre> + +Fixes problems: + - The old code can mis-identify ShadingType 1 function as constant +due to testing it at insufficient set of points. Replacing it with slower +accurate code. SourceForge bug #228714. (gxshade.c [1.6], gxshade.h [1.4], +gxshade1.c [1.8]: 2001/03/25 10:18:50 igorm) + - Fix for CIDFontType 0 : 1. Erroneous glyphs are drawn by cshow +(with -dNOCACHE); 2. Glyphs written in horizontal direction instead vertical +(with anti-aliasing); 3. Erroneous glyphs and awkward metrics (with +anti-aliasing and -dNOCACHE); Patches 1 & 3 from Hideyuki Suzuki +(hideyuki), improved by igorm. SourceForge bug #222683. (gxchar.c [1.4]: +2001/03/27 09:56:39 igorm) + - Adds imaging_dev field to text enumeration, so that bbox device +can intercept low level drawing operations caused by implementation of +forwarded high level text operations. (gdevbbox.c [1.4], gstext.c [1.6], +gxccache.c [1.4], gxtext.h [1.7]: 2001/04/01 00:33:36 raph) + +Applies PDF 1.4 rendering with all devices. Previously, only pnga device +contained PDF 1.4 rendering capabilities. Now, when the PDF 1.4 imaging +model is detected in the source file, it installs the pdf 1.4 rendering +device as a device filter. (gdevp14.c [1.1], gsdfilt.c [1.2], +gsdfilt.h [1.2]: 2001/04/01 00:30:41 raph) + +Change: The Ghostscript 'pwrite' function name conflicted with the standard +pwrite function defined in unistd.h on several systems. To avoid confusion +with the standard function change the name to stream_write. Also change +'pputc' to 'stream_putc' and 'pputs' to 'stream_puts'. Fixes SourceForge bug +#410772. Fix by Ray Johnston. (gdevpsf1.c [1.9], gdevpsfm.c [1.5], +gdevpsft.c [1.7], gsfunc4.c [1.4]: 2001/04/01 00:35:26 raph) + +<hr> + +<h1><a name="Version6.62"></a>Version 6.62 (2001-03-19)</h1> + +<p> +This is the first beta release for the upcoming 7.0 release. This fileset +adds ICC profile support using Graeme Gill's icclib, and the new DLL +interface from Russell Lang. + +<p> +All problems registered on SourceForge numbered 409245 or lower are +closed, except for the following: 201955, 202735, 206652, 209350, +213799, 215256, 219677, 219798, 220967, 221582, 222534, 222683, +222727, 223005, 223091, 223754, 223896, 223992, 224056, 224095, +224134, 224205, 224863, 226364, 226391, 226462, 226477, 226584, +226943, 227090, 227190, 227276, 227382, 227651, 227684, 227709, +228180, 228354, 228423, 228641, 228714, 228788, 228808, 229439, +230694, 230699, 231390, 232334, 232696, 233403, 404255, 404255, +404482, 404933, 405313, 406285, 406643, 406689, 406694, 406696, +406699, 406979, 407342, 409105, 409133, 409244, 409245. Note that, +since the 6.61 release, SourceForge has renumbered all bugs in the +1xxxxx range by adding 100000 (thus, they are now 2xxxxxx). + + +<h2><a name="6.62-Documentation"></a>Documentation</h2><pre> + +Increments version number to 6.62 as part of 6.61 release process. +(doc/News.htm [1.77]: 2001/02/24 01:56:01 raph) + +Adds Epson Stylus Color 300 support to uniprint, also some code cleanups. +Thanks to Glenn Ramsey and Gunther Hess for the patch. +(doc/Devices.htm [1.20]: 2001/03/03 00:45:01 raph) + +Added documentation for Ghostscript interpreter API as used by Windows and +OS/2 DLL and GNU/Linux shared object. (doc/API.htm [1.1], doc/DLL.htm [1.8], +doc/Readme.htm [1.20]: 2001/03/13 07:12:06 ghostgum) + +Documentation changes in preparation for 6.62 beta release. +(doc/API.htm [1.2], doc/Bug-form.htm [1.15], doc/Bug-info.htm [1.11], +doc/C-style.htm [1.12], doc/Commprod.htm [1.9], doc/Copying.htm [1.7], +doc/Current.htm [1.7], doc/DLL.htm [1.9], doc/Develop.htm [1.33], +doc/Devices.htm [1.21], doc/Drivers.htm [1.15], doc/Fonts.htm [1.13], +doc/Helpers.htm [1.10], doc/History1.htm [1.7], doc/History2.htm [1.7], +doc/History3.htm [1.7], doc/History4.htm [1.7], doc/History5.htm [1.9], +doc/History6.htm [1.19], doc/Htmstyle.htm [1.10], doc/Install.htm [1.15], +doc/Language.htm [1.26], doc/Lib.htm [1.7], doc/Maintain.htm [1.11], +doc/Make.htm [1.23], doc/New-user.htm [1.20], doc/News.htm [1.78], +doc/Projects.htm [1.24], doc/Ps-style.htm [1.7], doc/Ps2epsi.htm [1.8], +doc/Ps2pdf.htm [1.25], doc/Psfiles.htm [1.14], doc/README [1.6], +doc/Readme.htm [1.21], doc/Release.htm [1.29], doc/Source.htm [1.7], +doc/Tester.htm [1.7], doc/Unix-lpr.htm [1.7], doc/Use.htm [1.23], +doc/Xfonts.htm [1.7], doc/gs-vms.hlp [1.6], man/dvipdf.1 [1.4], +man/font2c.1 [1.4], man/gs.1 [1.4], man/gslp.1 [1.4], man/gsnd.1 [1.4], +man/pdf2dsc.1 [1.4], man/pdf2ps.1 [1.6], man/pdfopt.1 [1.4], +man/pf2afm.1 [1.4], man/pfbtopfa.1 [1.5], man/printafm.1 [1.4], +man/ps2ascii.1 [1.4], man/ps2epsi.1 [1.4], man/ps2pdf.1 [1.8], +man/ps2pdfwr.1 [1.5], man/ps2ps.1 [1.11], man/wftopfa.1 [1.4]: 2001/03/17 +01:26:48 raph) + +Updates Changes and History6 files from cvs commit logs, in preparation for +6.62 beta release. (doc/Changes.htm [1.22], doc/History6.htm [1.20]: +2001/03/17 01:30:16 raph) + +There was a spelling error in Juan Manuel Acosta's name. His entry is also +moved to "major contributers" section. (doc/Helpers.htm [1.11]: 2001/03/19 +16:46:05 alexcher) + +Updates date for 6.62 release to 2001-03-19. (doc/API.htm [1.3], +doc/Bug-form.htm [1.16], doc/Bug-info.htm [1.12], doc/C-style.htm [1.13], +doc/Commprod.htm [1.10], doc/Copying.htm [1.8], doc/Current.htm [1.8], +doc/DLL.htm [1.10], doc/Develop.htm [1.34], doc/Devices.htm [1.22], +doc/Drivers.htm [1.16], doc/Fonts.htm [1.14], doc/Helpers.htm [1.12], +doc/History1.htm [1.8], doc/History2.htm [1.8], doc/History3.htm [1.8], +doc/History4.htm [1.8], doc/History5.htm [1.10], doc/History6.htm [1.21], +doc/Htmstyle.htm [1.11], doc/Install.htm [1.16], doc/Language.htm [1.27], +doc/Lib.htm [1.8], doc/Maintain.htm [1.12], doc/Make.htm [1.24], +doc/New-user.htm [1.21], doc/News.htm [1.79], doc/Projects.htm [1.25], +doc/Ps-style.htm [1.8], doc/Ps2epsi.htm [1.9], doc/Ps2pdf.htm [1.26], +doc/Psfiles.htm [1.15], doc/README [1.7], doc/Readme.htm [1.22], +doc/Release.htm [1.30], doc/Source.htm [1.8], doc/Tester.htm [1.8], +doc/Unix-lpr.htm [1.8], doc/Use.htm [1.24], doc/Xfonts.htm [1.8], +doc/gs-vms.hlp [1.7], man/dvipdf.1 [1.5], man/font2c.1 [1.5], +man/gs.1 [1.5], man/gslp.1 [1.5], man/gsnd.1 [1.5], man/pdf2dsc.1 [1.5], +man/pdf2ps.1 [1.7], man/pdfopt.1 [1.5], man/pf2afm.1 [1.5], +man/pfbtopfa.1 [1.6], man/printafm.1 [1.5], man/ps2ascii.1 [1.5], +man/ps2epsi.1 [1.5], man/ps2pdf.1 [1.9], man/ps2pdfwr.1 [1.6], +man/ps2ps.1 [1.12], man/wftopfa.1 [1.5]: 2001/03/19 17:26:17 raph) + +Inital version of this file that will be used to capture notes about minor +bugs or compatibility that are identified when action will not be undertaken +immediately. (doc/Issues.htm [1.1]: 2001/03/19 19:27:04 rayjj) + +</pre><h2><a name="6.62-Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - Minor changes to fix compilation on VMS, thanks to Jacob +=JoukJansen for the patch. (devs.mak [1.42]: 2001/03/01 22:16:02 raph) + - Corrects whitespace for new entries in devs.mak for VMS build. +Thanks to Jouk Jansen. (devs.mak [1.44]: 2001/03/13 20:01:35 raph) + - Fixes SourceForge bug #219677. Adds debug and debugclean targets +to MSVC++ makefile that build in the debugobj and debugbin directories. +Fixes BEGINFILES and BEGINFILES2 so that 'make clean' removes all files. +(msvc32.mak [1.10], winlib.mak [1.7]: 2001/03/16 22:53:18 ghostgum) + - /None and /All separations are now supported. SourceForge bug +#228354. (lib.mak [1.45]: 2001/03/18 19:15:50 igorm) + - Adds lib directory to MS-Windows distribution archive. Change +copyright message in MS-Windows setup program to artofcode LLC. Thanks to +Russell Lang for the patch. (winint.mak [1.7]: 2001/03/19 17:12:45 raph) + +Increments version number to 6.62 as part of 6.61 release process. +(version.mak [1.27]: 2001/02/24 01:56:01 raph) + +Provide alternate %stdin/out/err implementation using procedure based +streams and callouts. Previous stdio implementation with +STDIO_IMPLEMENTATION= New callout stdio implementation with +STDIO_IMPLEMENTATION=c Bug fix to zflush and zpeekstring. New stdio stream +code is in ziodevsc.c which will be in next commit. (bcwin32.mak [1.5], +dvx-gcc.mak [1.6], gs.mak [1.3], int.mak [1.43], msvc32.mak [1.7], +msvclib.mak [1.7], openvms.mak [1.7], os2.mak [1.10], ugcclib.mak [1.7], +unix-gcc.mak [1.10], unixansi.mak [1.8], unixtrad.mak [1.8], watc.mak [1.7], +watclib.mak [1.7], watcw32.mak [1.6]: 2001/03/12 04:05:19 ghostgum) + +Adds device filter pipeline, which will be used by PDF 1.4 and other +enhanced imaging operations. (int.mak [1.44], lib.mak [1.43]: 2001/03/13 +00:41:10 raph) + +Implement new Ghostscript interpreter API for DLL or shared object. +Reimplement old DLL interface using new API. See iapi.h and iapi.c for new +API. For unix, build using "make so". Added loader programs for Ghostscript +interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2 +(dpmain.c). Add new "display" device for use with the new API. GNU/Linux +dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than +the "x11" device. (devs.mak [1.43], gsdll2.def [1.2], gsdll32.def [1.2], +int.mak [1.45], msvc32.mak [1.8], os2.mak [1.11], unix-dll.mak [1.1], +unix-gcc.mak [1.11], winint.mak [1.6], winlib.mak [1.6]: 2001/03/13 07:09:28 +ghostgum) + +When building the GNU/Linux shared object, separate directories soobj and sobin +are used to prevent 'make' from mixing the object files and building a +corrupt executable. Added 'API.htm' to the installed documentation files. +(unix-dll.mak [1.2], unix-gcc.mak [1.12], unixinst.mak [1.18]: 2001/03/15 +09:11:28 ghostgum) + +Change path on Windows and OS/2 platforms from c:/aladdin +to c:/gs. (bcwin32.mak [1.6], msvc32.mak [1.9], msvclib.mak [1.8], +watc.mak [1.8], watclib.mak [1.8], watcw32.mak [1.7]: 2001/03/16 22:19:16 +ghostgum) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (bcwin32.mak [1.7], devs.mak [1.45], dvx-gcc.mak [1.7], gs.mak [1.4], +icclib.mak [1.1], int.mak [1.46], lib.mak [1.44], msvc32.mak [1.11], +msvclib.mak [1.9], openvms.mak [1.8], os2.mak [1.12], ugcclib.mak [1.8], +unix-gcc.mak [1.13], unixansi.mak [1.9], unixtrad.mak [1.9], +version.mak [1.28], watc.mak [1.9], watclib.mak [1.9], watcw32.mak [1.8], +wctail.mak [1.3], winlib.mak [1.8]: 2001/03/17 01:15:42 raph) + +Moves patched icclib 1.23 files into the new icclib/ subdirectory, with +makefile changes to match. Adds missing COPYRIGHT and other documentation to +icclib. Thanks to L. Peter Deutsch for pointing out the need. +(bcwin32.mak [1.8], dvx-gcc.mak [1.8], msvc32.mak [1.12], +msvclib.mak [1.10], openvms.mak [1.9], os2.mak [1.13], ugcclib.mak [1.9], +unix-gcc.mak [1.14], unixansi.mak [1.10], unixtrad.mak [1.10], +watc.mak [1.10], watclib.mak [1.10], watcw32.mak [1.9]: 2001/03/19 17:11:15 +raph) + +Updates date for 6.62 release to 2001-03-19. (version.mak [1.29]: 2001/03/19 +17:26:18 raph) + +</pre><h2><a name="6.62-Utilities"></a>Utilities</h2><pre> + +Replace many references to exit() with returns. (gp_dvx.c [1.3], +gp_os2.c [1.7], gp_unix.c [1.4]: 2001/03/12 03:50:02 ghostgum) + +Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code. +Remove references to stdout/err, replacing with eprintf(). Remove global +variables. Disable mswindll and os2dll devices if a callback function is not +provided. (gp_mswin.c [1.4], gp_os2.c [1.8]: 2001/03/12 03:56:13 ghostgum) + +stdio implementation using callouts. Missing file from last commit. +(ziodevsc.c [1.1]: 2001/03/12 04:11:28 ghostgum) + +Implement new Ghostscript interpreter API for DLL or shared object. +Reimplement old DLL interface using new API. See iapi.h and iapi.c for new +API. For unix, build using "make so". Added loader programs for Ghostscript +interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2 +(dpmain.c). Add new "display" device for use with the new API. GNU/Linux +dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than +the "x11" device. (dxmain.c [1.1], gp_msdll.c [1.1], gp_mswin.c [1.5], +gp_os2.c [1.9], gsdll.c [1.4]: 2001/03/13 07:09:28 ghostgum) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (icc.c [1.1]: 2001/03/17 01:15:42 raph) + +Moves patched icclib 1.23 files into the new icclib/ subdirectory, with +makefile changes to match. Adds missing COPYRIGHT and other documentation to +icclib. Thanks to L. Peter Deutsch for pointing out the need. (icc.c [1.2]: +2001/03/19 17:11:15 raph) + +</pre><h2><a name="6.62-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - to achieve page independence, every page must in the general case +set page parameters. To preserve duplexing the page cannot set page +parameters. New code checks the current page size and sets it only if it is +necessary. Bug #404376 reported by bannis at users.sourceforge.net +(gdevpsu.c [1.3]: 2001/03/03 03:27:03 alexcher) + +Adds Epson Stylus Color 300 support to uniprint, also some code cleanups. +Thanks to Glenn Ramsey and Gunther Hess for the patch. (gdevupd.c [1.4], +lib/stc300.upp [1.1], lib/stc300bl.upp [1.1], lib/stc300bm.upp [1.1]: +2001/03/03 00:45:01 raph) + +Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code. +Remove references to stdout/err, replacing with eprintf(). Remove global +variables. Disable mswindll and os2dll devices if a callback function is not +provided. (gdevmswn.c [1.3], gdevpm.c [1.3], gdevwdib.c [1.3], +gdevwpr2.c [1.6], gdevwprn.c [1.3]: 2001/03/12 03:56:13 ghostgum) + +Redirect all user messages from stdout and stderr to outwrite() and +errwrite(). This is needed to allow stdout/err to be redirected to the +caller for DLL / shared object builds. (gdev4693.c [1.2], gdevcdj.c [1.5], +gdevhl7x.c [1.4], gdevifno.c [1.2], gdevimgn.c [1.3], gdevos2p.c [1.4], +gdevsppr.c [1.3], gdevsunr.c [1.3], gdevupd.c [1.5], gdevwddb.c [1.3], +gdevwpr2.c [1.7]: 2001/03/13 06:51:39 ghostgum) + +Implement new Ghostscript interpreter API for DLL or shared object. +Reimplement old DLL interface using new API. See iapi.h and iapi.c for new +API. For unix, build using "make so". Added loader programs for Ghostscript +interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2 +(dpmain.c). Add new "display" device for use with the new API. GNU/Linux +dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than +the "x11" device. (gdevdsp.c [1.1], gdevdsp.h [1.1], gdevdsp2.h [1.1], +gdevmswn.c [1.4], gdevpm.c [1.4]: 2001/03/13 07:09:28 ghostgum) + +Adds typed image rendering to pnga (prototype PDF 1.4) device. +(gdevpnga.c [1.3]: 2001/03/17 00:16:53 raph) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (gdevpx.c [1.6]: 2001/03/17 01:15:42 raph) + +</pre><h2><a name="6.62-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - properly include unistd_.h in files that call unlink() +(gdevpdf.c [1.29]: 2001/03/16 22:12:34 giles) + +Redirect all user messages from stdout and stderr to outwrite() and +errwrite(). This is needed to allow stdout/err to be redirected to the +caller for DLL / shared object builds. (gdevpdfm.c [1.9]: 2001/03/13 +06:51:39 ghostgum) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (gdevpdfc.c [1.14]: 2001/03/17 01:15:42 raph) + +</pre><h2><a name="6.62-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - When the stream is located in an external file (i.e. the stream +dictionary contains an /F entry) GS fails with "typecheck in .knownget" +because of a minor bug in stack handling in pdf_base.ps. Bug #229425, the +fix from Andreas Bolsch <meromorphic at users.sourceforge.net> +(lib/pdf_base.ps [1.13]: 2001/03/04 16:59:19 alexcher) + - GS can override image interpolation using INTERPOLATE or +NOINTERPOLATE flags. These flags had no effect on PDF because the PDF +interpreter is bound earlier than image operator is redefined. New version +takes image and imagemask values from systemdict at run time. +(lib/pdf_draw.ps [1.27]: 2001/03/11 05:15:26 alexcher) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (lib/pdf_draw.ps [1.28], lib/pdf_ops.ps [1.16]: 2001/03/17 01:15:41 +raph) + +</pre><h2><a name="6.62-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Allocate filter in local VM when currentglobal is false. Prevents +a problem with some QuarkXpress ProcSets that turn off vmreclaim and expect +save/restore to free memory which only works on local VM. Fix for problem +reported by Artifex customer #150, file "japan.ps". (zfilter.c [1.5]: +2001/02/28 00:39:26 rayjj) + - Speed-up JPEG decompression by increasing file buffer to 2K. This +avoids installation of an intermediate buffering filter that resulted in a +byte-by-byte filling of the buffer to the JPEG code. When the buffer was not +full enough a recoverable error would result in a round trip for the next +byte. Fixes SourcForge bug #405342 for Artifex customer #350. +(zfile.c [1.7]: 2001/03/02 03:06:50 alexcher) + - Removes Category dictionary from dictionary stack during the +execution of the /Font resourceforall procedure, needed for proper access +from the procedure to underlying dictionary. Fixes SourceForge bug #224973. +(lib/gs_cidcm.ps [1.2]: 2001/03/03 15:09:12 igorm) + - GS didn't accept packed array as data source in image with +multiple data sources. From internal bug report. (zimage2.c [1.4]: +2001/03/12 22:53:22 alexcher) + - ztype9mapcid now allocates string in global memory space to match +allocation of contents. Thanks to Masatake YAMATO for the patch. +(zfcid0.c [1.6]: 2001/03/13 19:57:06 raph) + - Define to DefaultGray, DefaultRGB, DefaultCMYK color spaces to +allow UseCIEColor to work. SourceForge bugs #216461, #219676. +(lib/gs_ll3.ps [1.8]: 2001/03/14 12:00:37 igorm) + - /None and /All separations are now supported. SourceForge bug +#228354. (zcssepr.c [1.6]: 2001/03/18 19:17:50 igorm) + +Increments version number to 6.62 as part of 6.61 release process. +(lib/gs_init.ps [1.30]: 2001/02/24 01:56:01 raph) + +Replace many references to exit() with returns. (errors.h [1.3], gs.c [1.3], +igcref.c [1.3], imain.c [1.4], imainarg.c [1.7], imainarg.h [1.3], +zcontext.c [1.7]: 2001/03/12 03:50:02 ghostgum) + +Provide alternate %stdin/out/err implementation using procedure based +streams and callouts. Previous stdio implementation with +STDIO_IMPLEMENTATION= New callout stdio implementation with +STDIO_IMPLEMENTATION=c Bug fix to zflush and zpeekstring. New stdio stream +code is in ziodevsc.c which will be in next commit. (errors.h [1.4], +files.h [1.3], imain.c [1.5], iminst.h [1.3], interp.c [1.7], zfile.c [1.8], +zfileio.c [1.10], zfproc.c [1.8], ziodev.c [1.4]: 2001/03/12 04:05:19 +ghostgum) + +This fix corrects a problem with VM usage in the DSC parser. Previously the +dictionary dsc_dict was allocated in global VM but the DSC parser would try +to insert items while in local VM mode. This fix forces the DSC parser into +global VM mode. (lib/gs_dscp.ps [1.4]: 2001/03/12 22:41:22 dancoby) + +Adds device filter pipeline, which will be used by PDF 1.4 and other +enhanced imaging operations. (zdfilter.c [1.1]: 2001/03/13 00:41:10 raph) + +Redirect all user messages from stdout and stderr to outwrite() and +errwrite(). This is needed to allow stdout/err to be redirected to the +caller for DLL / shared object builds. (gs.c [1.4], idebug.c [1.3], +igc.c [1.3], imain.c [1.6], imainarg.c [1.8]: 2001/03/13 06:51:39 ghostgum) + +Implement new Ghostscript interpreter API for DLL or shared object. +Reimplement old DLL interface using new API. See iapi.h and iapi.c for new +API. For unix, build using "make so". Added loader programs for Ghostscript +interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2 +(dpmain.c). Add new "display" device for use with the new API. GNU/Linux +dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than +the "x11" device. (dpmain.c [1.1], dpmainc.c [1.3], dwdll.c [1.1], +dwdll.cpp [1.3], dwdll.h [1.3], dwimg.c [1.1], dwimg.cpp [1.4], +dwimg.h [1.3], dwmain.c [1.1], dwmain.cpp [1.3], dwmain.h [1.3], +dwmainc.c [1.1], dwmainc.cpp [1.4], dwnodll.c [1.1], dwnodll.cpp [1.3], +dwtext.c [1.1], dwtext.cpp [1.3], dwtext.h [1.3], files.h [1.4], gs.c [1.5], +iapi.c [1.1], iapi.h [1.1], iconf.c [1.3], idisp.c [1.1], idisp.h [1.1], +imain.c [1.7], imainarg.c [1.9], iminst.h [1.4], main.h [1.3]: 2001/03/13 +07:09:28 ghostgum) + +Interpolation overriding is modified to support - colorimage; old version +did nothing - ImageType 3 dictionaries; old version did nothing - local data +source in global mode; old version failed (lib/gs_init.ps [1.31]: 2001/03/13 +22:50:03 alexcher) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (icie.h [1.3], lib/gs_icc.ps [1.1], zcie.c [1.5], zicc.c [1.1]: +2001/03/17 01:15:41 raph) + +</pre><h2><a name="6.62-Streams"></a>Streams</h2><pre> + +Fixes problems: + - eexecDecode filter returned EOF immediately if the input stream +was shorter than 9 characters. New code may misidentify short streams but +old code always failed. (seexec.c [1.4]: 2001/02/23 03:00:13 alexcher) + +Replace many references to exit() with returns. (stdpre.h [1.3]: 2001/03/12 +03:50:02 ghostgum) + +Redirect all user messages from stdout and stderr to outwrite() and +errwrite(). This is needed to allow stdout/err to be redirected to the +caller for DLL / shared object builds. (std.h [1.4]: 2001/03/13 06:51:39 +ghostgum) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (stream.c [1.10]: 2001/03/17 01:15:42 raph) + +Minor patch to header files so that unlink() prototype doesn't conflict when +const is disabled through #define. (stdio_.h [1.4]: 2001/03/17 01:18:34 +raph) + +</pre><h2><a name="6.62-Library"></a>Library</h2><pre> + +Fixes problems: + - Minor changes to fix compilation on VMS, thanks to Jacob +=JoukJansen for the patch. (gstrans.c [1.13]: 2001/03/01 22:16:02 raph) + - gp_file_name_sizeof is increased to 260 bytes, == MAX_PATH on MS +Windows. The platform-specific fix is too difficult because some platforms +may have very long or unlimited file names. Bug #231514 submitted by +anonymous user. (gp.h [1.6]: 2001/03/03 04:38:19 alexcher) + - When objects were resized or trimmed, the objects o_size was not +being updated if the rounded_size didn't change. This could lead to +alignment issues on some systems (causing a crash). Problem reported by +Artifex customer #460. (gsalloc.c [1.9]: 2001/03/12 00:04:28 rayjj) + - Some device color components were missed while serializing +halftone to clist, causing segment fault during playback. Changes use proper +number of device color components to be written to clist and read from it. +SourceForge bug #211449. (gxclpath.c [1.9], gxclrast.c [1.9]: 2001/03/13 +08:38:03 igorm) + - kshow now restores currentfont if changed while running proc. +Fixes SourceForge bug #221715. (gxchar.c [1.3]: 2001/03/14 13:03:49 igorm) + - properly include unistd_.h in files that call unlink() +(gsiodev.c [1.5], gxclfile.c [1.3]: 2001/03/16 22:12:34 giles) + - /None and /All separations are now supported. SourceForge bug +#228354. (gscsepr.c [1.7]: 2001/03/18 19:17:50 igorm) + +Replace many references to exit() with returns. (gsargs.c [1.3], +gsargs.h [1.4], gsexit.h [1.3], gxalloc.h [1.6]: 2001/03/12 03:50:02 +ghostgum) + +Adds device filter pipeline, which will be used by PDF 1.4 and other +enhanced imaging operations. (gsdfilt.c [1.1], gsdfilt.h [1.1], +gsstate.c [1.10], gzstate.h [1.5]: 2001/03/13 00:41:10 raph) + +Redirect all user messages from stdout and stderr to outwrite() and +errwrite(). This is needed to allow stdout/err to be redirected to the +caller for DLL / shared object builds. (gp_unifs.c [1.4], gsargs.c [1.4], +gsinit.c [1.3], gsio.h [1.5], gslib.c [1.4], gsmisc.c [1.10], +gxclutil.c [1.4]: 2001/03/13 06:51:39 ghostgum) + +Implement new Ghostscript interpreter API for DLL or shared object. +Reimplement old DLL interface using new API. See iapi.h and iapi.c for new +API. For unix, build using "make so". Added loader programs for Ghostscript +interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2 +(dpmain.c). Add new "display" device for use with the new API. GNU/Linux +dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than +the "x11" device. (gsexit.h [1.4]: 2001/03/13 07:09:29 ghostgum) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (gs_stdio.h [1.1], gscdef.c [1.12], gscie.c [1.4], gscie.h [1.3], +gsciemap.c [1.5], gscolor.c [1.5], gscolor1.c [1.4], gscscie.c [1.4], +gscspace.h [1.6], gscssub.c [1.3], gsicc.c [1.1], gsicc.h [1.1], +gxcie.h [1.3], gxshade.c [1.5], icc.h [1.1]: 2001/03/17 01:15:42 raph) + +Minor patch to header files so that unlink() prototype doesn't conflict when +const is disabled through #define. (unistd_.h [1.2]: 2001/03/17 01:18:34 +raph) + +Moves patched icclib 1.23 files into the new icclib/ subdirectory, with +makefile changes to match. Adds missing COPYRIGHT and other documentation to +icclib. Thanks to L. Peter Deutsch for pointing out the need. (icc.h [1.2]: +2001/03/19 17:11:15 raph) + +</pre><h2><a name="6.62-Other"></a>Other</h2><pre> + +Cleanup of MS-Windows and OS/2 code. Remove old 16-bit MS-Windows code. +Remove references to stdout/err, replacing with eprintf(). Remove global +variables. Disable mswindll and os2dll devices if a callback function is not +provided. (gp_mswin.h [1.3]: 2001/03/12 03:56:13 ghostgum) + +Implement new Ghostscript interpreter API for DLL or shared object. +Reimplement old DLL interface using new API. See iapi.h and iapi.c for new +API. For unix, build using "make so". Added loader programs for Ghostscript +interpreter library for GNU/Linux (dxmain.c), Windows (dw*.c) and OS/2 +(dpmain.c). Add new "display" device for use with the new API. GNU/Linux +dxmain.c uses the "display" device, Gtk+ and GdkRgb for faster drawing than +the "x11" device. (gp_mswin.h [1.4], gsdll.h [1.3], gsdllwin.h [1.3]: +2001/03/13 07:09:28 ghostgum) + +Integrates ICC profile input support from Jan Stoeckenius. Also includes +slightly modified version of icclib (icc.h, icc.c, icc9809.h) by Graeme +Gill. (icc9809.h [1.1]: 2001/03/17 01:15:42 raph) + +Moves patched icclib 1.23 files into the new icclib/ subdirectory, with +makefile changes to match. Adds missing COPYRIGHT and other documentation to +icclib. Thanks to L. Peter Deutsch for pointing out the need. +(icc9809.h [1.2], icclib/COPYRIGHT [1.1], icclib/NOTES [1.1], +icclib/README [1.1], icclib/icc.c [1.1], icclib/icc.h [1.1], +icclib/icc9809.h [1.1]: 2001/03/19 17:11:14 raph) + +<hr> + +<h1><a name="Version6.61"></a>Version 6.61 (2001-02-21)</h1> + +<p> +The primary updates in this fileset are in the PDF 1.4 transparency and +blending code (available for testing with the pnga driver). The usual +bug fixes are also present. + +<p> +All problems registered on SourceForge numbered 133403 or lower are +closed, except for the following: 101814, 101955, 102735, 106652, +109350, 111449, 113116, 113799, 114084, 115256, 116461, 119676, +119677, 119798, 120967, 121582, 121715, 122534, 122683, 122727, +123005, 123091, 123754, 123896, 123992, 124056, 124095, 124134, +124205, 124863, 124973, 126364, 126391, 126462, 126477, 126584, +126943, 127090, 127190, 127244, 127276, 127382, 127651, 127684, +127709, 127802, 128180, 128354, 128423, 128641, 128714, 128808, +129425, 129439, 130694, 130699, 131001, 131390, 131514, 132334, +132696, 133403. + + +<h2><a name="6.61-Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - Ps-style.htm was missing from the index/blurbs in Readme.htm Adds +a note about documentation to the "Adding and Removing Files" section, and +moves that section to Maintain.htm from Release.htm. Closes sourceforge bug +#126771 (doc/Maintain.htm [1.9], doc/Readme.htm [1.18], +doc/Release.htm [1.27]: 2001/02/09 01:59:35 giles) + +Brings prototypes for fill_path, stroke_path, and fill_trapezoid in sync +with code. New description for fill_trapezoid, as the parameters changed +considerably. (doc/Drivers.htm [1.13]: 2001/01/04 19:08:25 raph) + +Adds a link to Adobe's Technote #5407 regarding transparency. +(doc/Language.htm [1.24]: 2001/01/07 18:21:55 giles) + +Updates png and zlib urls to the new canonical domain. Patch from Tobias +Burnus. (doc/Devices.htm [1.18], doc/Make.htm [1.20], +doc/New-user.htm [1.18]: 2001/01/07 18:36:35 giles) + +Increments CVS version number to 6.61 as part of (very delayed) 6.60 release +process. (doc/News.htm [1.75]: 2001/02/03 01:23:03 raph) + +Added DOPDFMARKS to allow pdfmark to be called for annotations, links and +cropboxes for PDF files on any device. Fixes SourceForge bug # 127062. +(doc/Use.htm [1.21]: 2001/02/09 23:38:12 ghostgum) + +Added addition comments about how to build GS on am IBM RS6000 under AIX +version 4.3.3 using the IBM C compiler (xlc) version 5. +(doc/Make.htm [1.21]: 2001/02/20 06:09:31 dancoby) + +Updates dates and version numbers in preparation for 6.61 release. +(doc/Bug-form.htm [1.14], doc/Bug-info.htm [1.10], doc/C-style.htm [1.11], +doc/Commprod.htm [1.8], doc/Copying.htm [1.6], doc/Current.htm [1.6], +doc/DLL.htm [1.7], doc/Develop.htm [1.32], doc/Devices.htm [1.19], +doc/Drivers.htm [1.14], doc/Fonts.htm [1.12], doc/Helpers.htm [1.9], +doc/History1.htm [1.6], doc/History2.htm [1.6], doc/History3.htm [1.6], +doc/History4.htm [1.6], doc/History5.htm [1.8], doc/History6.htm [1.17], +doc/Htmstyle.htm [1.9], doc/Install.htm [1.14], doc/Language.htm [1.25], +doc/Lib.htm [1.6], doc/Maintain.htm [1.10], doc/Make.htm [1.22], +doc/New-user.htm [1.19], doc/News.htm [1.76], doc/PUBLIC [1.4], +doc/Projects.htm [1.23], doc/Ps-style.htm [1.6], doc/Ps2epsi.htm [1.7], +doc/Ps2pdf.htm [1.24], doc/Psfiles.htm [1.13], doc/README [1.5], +doc/Readme.htm [1.19], doc/Release.htm [1.28], doc/Source.htm [1.6], +doc/Tester.htm [1.6], doc/Unix-lpr.htm [1.6], doc/Use.htm [1.22], +doc/Xfonts.htm [1.6], doc/gs-vms.hlp [1.5], man/dvipdf.1 [1.3], +man/font2c.1 [1.3], man/gs.1 [1.3], man/gslp.1 [1.3], man/gsnd.1 [1.3], +man/pdf2dsc.1 [1.3], man/pdf2ps.1 [1.5], man/pdfopt.1 [1.3], +man/pf2afm.1 [1.3], man/pfbtopfa.1 [1.4], man/printafm.1 [1.3], +man/ps2ascii.1 [1.3], man/ps2epsi.1 [1.3], man/ps2pdf.1 [1.7], +man/ps2pdfwr.1 [1.4], man/ps2ps.1 [1.10], man/wftopfa.1 [1.3]: 2001/02/22 +07:30:37 raph) + +</pre><h2><a name="6.61-Procedures"></a>Procedures</h2><pre> + +Updates png and zlib urls to the new canonical domain. Patch from Tobias +Burnus. (libpng.mak [1.4], zlib.mak [1.3]: 2001/01/07 18:36:35 giles) + +First cut of the PDF 1.4 transparency and blending operations. +(contrib.mak [1.21], lib.mak [1.42]: 2001/01/14 00:25:27 raph) + +Increments CVS version number to 6.61 as part of (very delayed) 6.60 release +process. (version.mak [1.25]: 2001/02/03 01:23:03 raph) + +Continuing development of PDF 1.4 transparency and blending. This round of +commits implements groups, including non-isolated and knockout variants. +Also, moves the build rule for the pnga device from contrib to devs. +(contrib.mak [1.22], devs.mak [1.41]: 2001/02/22 07:27:10 raph) + +Updates dates and version numbers in preparation for 6.61 release. +(version.mak [1.26]: 2001/02/22 07:30:39 raph) + +</pre><h2><a name="6.61-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - Temporary _.at file was not deleted. (lib/pdf2ps.bat [1.4]: +2001/02/03 16:12:29 alexcher) + - Added -dSAFER (lib/pdf2ps.cmd [1.2]: 2001/02/03 18:31:12 alexcher) + - Defines prototypes for fputs only for (broken) Sun platforms, to +avoid type mismatches when compiling with -Dconst=. Fixes SourceForge bug +133358. (echogs.c [1.3]: 2001/02/22 03:59:39 raph) + +branches: 1.1.2; file vdtrace.c was initially added on branch HINTER. +(vdtrace.c [1.1]: 2001/01/12 06:19:36 igorm) + +branches: 1.1.2; file _type1.c was initially added on branch HINTER. +(_type1.c [1.1]: 2001/02/02 20:27:09 igorm) + +Converted to SAFER mode. (lib/pf2afm [1.2], lib/pf2afm.bat [1.2], +lib/pf2afm.cmd [1.2], lib/pf2afm.ps [1.3]: 2001/02/03 21:31:40 alexcher) + +</pre><h2><a name="6.61-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - Changes tiff12nc to output correct number of bytes for odd widths. +(gdevtfnx.c [1.5]: 2001/02/03 18:50:01 raph) + - Added down cast from gx_device_printer to gx_device_fax The fix is +suggested by the user. (gdevdfax.c [1.4]: 2001/02/12 21:02:51 alexcher) + - pswrite ProcSet is reordered to eliminate forward references and +please a simplistic parser used by one of GS customers. (gdevps.c [1.15]: +2001/02/21 05:52:07 alexcher) + +First cut of the PDF 1.4 transparency and blending operations. +(gdevpnga.c [1.1]: 2001/01/14 00:25:27 raph) + +Continuing development of PDF 1.4 transparency and blending. This round of +commits implements groups, including non-isolated and knockout variants. +Also, moves the build rule for the pnga device from contrib to devs. +(gdevpnga.c [1.2]: 2001/02/22 07:27:10 raph) + +</pre><h2><a name="6.61-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - in pdfwrite mode kshow called its procedure in infinite loop +bacause the character indes was not updated. Unexpected number of calls to +the procedure often caused various errors such as /stackunderfloe. +(gdevpdfs.c [1.2]: 2001/02/06 21:42:38 alexcher) + - imagemask used the color of previous object if the object had +smaller clipping path than imagemask. Deferred grestore and setcolor were +transposed. (gdevpdfi.c [1.21]: 2001/02/07 03:49:27 alexcher) + +</pre><h2><a name="6.61-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - skip all bytes after the end of the stream in the inline image +until EOL or EI is found. Some buggy PDF files require this. Fix: In PDF 1.3 +/Matrix key in XObject is optional. Add unitary matrix to the form +dictionary if XObject has none. (lib/pdf_draw.ps [1.25]: 2001/02/02 22:08:33 +alexcher) + +Added DOPDFMARKS to allow pdfmark to be called for annotations, links and +cropboxes for PDF files on any device. Fixes SourceForge bug # 127062. +(lib/pdf_main.ps [1.27]: 2001/02/09 23:38:12 ghostgum) + +Continuing development of PDF 1.4 transparency and blending. This round of +commits implements groups, including non-isolated and knockout variants. +Also, moves the build rule for the pnga device from contrib to devs. +(lib/pdf_draw.ps [1.26]: 2001/02/22 07:27:10 raph) + +</pre><h2><a name="6.61-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - cvs operator did't report rangecheck when source operand is a name +or string and it's longer than the destination string. Bug # 130975 +(iutil.c [1.3]: 2001/02/05 20:43:40 alexcher) + - memmove() was used without portability header file memory_.h +(ztrans.c [1.13]: 2001/02/13 19:45:38 alexcher) + - New TransformPQR implements a relative colorimetric intent by +scaling the XYZ values relative to the white and black points. Bug #129771 +(lib/gs_lev2.ps [1.7]: 2001/02/21 04:23:44 alexcher) + +branches: 1.1.2; file dwtrace.h was initially added on branch HINTER. +(dwtrace.h [1.1]: 2001/01/12 06:18:35 igorm) + +branches: 1.1.2; file dwtrace.cpp was initially added on branch HINTER. +(dwtrace.cpp [1.1]: 2001/01/12 06:22:06 igorm) + +Increments CVS version number to 6.61 as part of (very delayed) 6.60 release +process. (lib/gs_init.ps [1.29]: 2001/02/03 01:23:03 raph) + +</pre><h2><a name="6.61-Streams"></a>Streams</h2><pre> + +Minor patches for clean VMS compile. Thanks to Jacob (=Jouk) Jansen. +(stdio_.h [1.3]: 2001/02/02 07:52:26 raph) + +</pre><h2><a name="6.61-Library"></a>Library</h2><pre> + +Fixes problems: + - egcc - 2.91.66 generates incorrect code for dda_step_add(dxx4, +dxx4); Using the intermediate variable now to wark around the problem. This +bug corrupted memory block headers and caused random crashes. +(gxifast.c [1.3]: 2001/01/25 21:36:17 alexcher) + +Changes gx_image_cached_char so that it now images to the device in the text +enumeration, rather than the current device. This change gives more +flexibility for implementations of begin_text to interpose a device of their +own for actual imaging. (gxccache.c [1.3]: 2001/01/04 19:39:24 raph) + +Updates documentation in gxdevcli.h on creating device instances. +(gxdevcli.h [1.4]: 2001/01/14 00:24:30 raph) + +First cut of the PDF 1.4 transparency and blending operations. +(gxblend.c [1.1], gxblend.h [1.1]: 2001/01/14 00:25:27 raph) + +Minor patches for clean VMS compile. Thanks to Jacob (=Jouk) Jansen. +(gsnogc.c [1.6], gxblend.c [1.2]: 2001/02/02 07:52:25 raph) + +Continuing development of PDF 1.4 transparency and blending. This round of +commits implements groups, including non-isolated and knockout variants. +Also, moves the build rule for the pnga device from contrib to devs. +(gstrans.c [1.12], gxdevcli.h [1.5]: 2001/02/22 07:27:10 raph) + +</pre><h2><a name="6.61-Other"></a>Other</h2><pre> + +branches: 1.1.2; file _type1.h was initially added on branch HINTER. +(_type1.h [1.1]: 2001/01/12 06:22:23 igorm) + +branches: 1.1.2; file vdtrace.h was initially added on branch HINTER. +(vdtrace.h [1.1]: 2001/02/02 20:27:09 igorm) + +<hr> + +<h1><a name="Version6.60"></a>Version 6.60 (2000-12-31)</h1> + +<p> +This long-overdue fileset includes major new developer documentation, major +improvements in the PDF writer (for embedded fonts and for DSC comments), +and lots of bug fixes. Unfortunately, for unknown reasons, the release +"smoke test" loops forever on the file data/ps/screen.ps -- but only when +compiled in 'production' mode, not in 'debug' mode. We suspect a gcc bug, +but don't have the time to track it down before the end of the millennium. + +<p> +All problems registered on SourceForge numbered 127190 or lower are closed, +except for the following: 101814, 101955, 102735, 105289, 106652, 109350, +111449, 113116, 113799, 114084, 115256, 116461, 117260, 119676, 119677, +119798, 120967, 121582, 121715, 122426, 122532, 122534, 122683, 122727, +123005, 123091, 123702, 123754, 123867, 123896, 123992, 124042, 124056, +124095, 124134, 124205, 124863, 124973, 126364, 126391, 126462, 126477, +126506, 126584, 126771, 126943, 127062, 127090, 127190. + +<h3><a name="6.60_Incompatible_changes"></a>Incompatible changes</h3> + +<pre> +(Interpreter) + - With WMode = 1, CID-keyed fonts with no Metrics2 now use default +metrics computed from FontBBox rather than the horizontal metrics. +(PDF interpreter) + - The interpreter now skips to the next EOL after reading the data +following the ID operator. + - The incorrectly named ViewerOrientation DSC comment is now +corrected to ViewingOrientation. +(Streams) + - All decoding filters that recognize an EOD in the source data +must now have an init procedure that sets state->min_left = 1. +(Library) + - The glyph_data, subr_data, and seac_data procedures in a Type 1 +font (gs_type1_data_procs), and the glyph_data procedure passed to +psf_{check,get}_outline_glyphs, must now return 1 iff the outline string was +newly allocated and should be freed by the caller, like the get_outline +procedure of Type 42 fonts (gs_type42_data). + - The ip_state structure is renamed ip_state_t, and has a new +member, free_char_string. + - The incorrectly named ViewerOrientation DSC comment is now +corrected to ViewingOrientation, and the viewer_orientation members of +the DSC parsing structure are corrected to viewing_orientation. + + + +<h2><a name="6.60-Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - An isolated ampersand needed to be converted to the HTML form. +(doc/Bug-form.htm [1.12]: 2000/11/04 17:53:57 lpd) + - cvs2hist was generating invalid anchor names and not escaping +special charaters. also enable '-r' commandline option, and pass '-b' if +it's not specified for default branch logs only. Changes.htm now passes the +validator. Minor url cleanup in Release.htm (doc/Changes.htm [1.19], +doc/Release.htm [1.23]: 2000/11/10 01:52:35 giles) + - Removes obsolete documentation reference to -DUsePrinterImages and +clarifies the entry for the replacing -DPrinted. Fixes sourceforge bug # +121907. (doc/Use.htm [1.16]: 2000/11/20 20:34:23 giles) + - Type 1 CharStrings loaded from disk for type 0 CIDFonts were never +freed, except by garbage collection (which doesn't reclaim chunks with only +a small amount of surviving data). In practice, this probably only affects +the PDF writer. (doc/News.htm [1.71]: 2000/11/23 23:34:23 lpd) + - The pswrite device couldn't write to pipes. The fix involved +expanding the API for opening device OutputFiles so that the individual +driver could specify whether it required, requested, or did not want a +positionable file. Fixes SourceForge bug # 122223. (doc/Use.htm [1.17]: +2000/11/29 02:25:13 lpd) + - The default ps2pdf "distiller parameters" weren't documented +correctly; the parameter values for the other PDFSETTINGS (screen, printer, +prepress) weren't documented at all; the xxxImageDownsampleThreshold +parameters were incorrectly documented as xxxDownsampleThreshold. +(doc/Ps2pdf.htm [1.22]: 2000/12/19 17:55:55 lpd) + - The documentation of the -dSAFER command line switch was +inaccurate. (doc/Use.htm [1.18]: 2000/12/23 01:33:06 lpd) + - documentation for gs_cidcm.ps and gs_dscp.ps was missing. +(doc/Psfiles.htm [1.11]: 2000/12/29 02:17:12 lpd) + +Adds developer documentation on the color mapping pipeline. +(doc/Develop.htm [1.16]: 2000/11/03 04:53:00 lpd) + +switch to Tobias Burnus' stylesheet for the B-D html documentation, along +with some minor cleanups (doc/Bug-form.htm [1.10], doc/Bug-info.htm [1.8], +doc/C-style.htm [1.6], doc/Commprod.htm [1.4], doc/Copying.htm [1.4], +doc/Current.htm [1.4], doc/DLL.htm [1.4], doc/Develop.htm [1.17], +doc/Devices.htm [1.14], doc/Drivers.htm [1.10], doc/gs.css [1.1]: 2000/11/03 +06:42:42 giles) + +update remaining file links in Develop.htm to <dl> format, plus +additional cleanup (doc/Commprod.htm [1.5], doc/DLL.htm [1.5], +doc/Develop.htm [1.18], doc/Devices.htm [1.15], doc/Drivers.htm [1.11]: +2000/11/03 20:15:55 giles) + +Lists all the monochrome TIFF drivers individually, rather than as a class. +(doc/Devices.htm [1.16]: 2000/11/03 23:33:18 lpd) + +Switches the rest of the human-maintained html documentation to the new +stylesheet. We now pass validator.w3.org for HTML 4.01 with the exception of +an error I couldn't figure out in Bug-form.htm. (doc/Bug-form.htm [1.11], +doc/Fonts.htm [1.9], doc/Helpers.htm [1.7], doc/Hershey.htm [1.3], +doc/Htmstyle.htm [1.7], doc/Humor.htm [1.2], doc/Install.htm [1.10], +doc/Language.htm [1.21], doc/Lib.htm [1.4], doc/Maintain.htm [1.7], +doc/Make.htm [1.17], doc/New-user.htm [1.15], doc/Projects.htm [1.20], +doc/Ps-style.htm [1.4], doc/Ps2epsi.htm [1.5], doc/Ps2pdf.htm [1.19], +doc/Psfiles.htm [1.10], doc/Public.htm [1.4], doc/Readme.htm [1.15], +doc/Release.htm [1.22], doc/Source.htm [1.4], doc/Tester.htm [1.4], +doc/Unix-lpr.htm [1.4], doc/Use.htm [1.15], doc/Xfonts.htm [1.4], +doc/index.html [1.2]: 2000/11/04 05:00:00 giles) + +updated News.htm to use gs.css (doc/News.htm [1.70]: 2000/11/04 21:59:35 +giles) + +Adds documentation on Ghostscript's object-oriented coding conventions, and +more documentation on error generation. (doc/C-style.htm [1.7], +doc/Develop.htm [1.19]: 2000/11/07 07:34:57 lpd) + +Expands the description of the color mapping process. +(doc/Develop.htm [1.20]: 2000/11/09 05:41:46 lpd) + +updates history files 1-4 (historical) to valid html4 and the new stylesheet +(doc/History1.htm [1.4], doc/History2.htm [1.4], doc/History3.htm [1.4], +doc/History4.htm [1.4]: 2000/11/28 22:55:34 giles) + +updates the version 5.x history file to the conforming html4 +(doc/History5.htm [1.6]: 2000/12/01 00:47:08 giles) + +Adds documentation on creating a release directory, including checking the +version numbers of the third-party libraries. +(doc/Release.htm [1.24]: 2000/12/05 21:16:25 lpd) + +Updates documentation to reflect recent improvements in text and DSC comment +handling. (doc/Ps2pdf.htm [1.20]: 2000/12/09 08:01:56 lpd) + +Documents the change from ViewerOrientation to ViewingOrientation in the DSC +parser. (doc/News.htm [1.72]: 2000/12/09 19:53:48 lpd) + +Makes the PDF writer extract orientation and bounding box information from +DSC comments, if present. The orientation is used to set Rotate if +AutoRotatePages is not selected; the bounding box is not yet used for +anything. (doc/Ps2pdf.htm [1.21]: 2000/12/09 19:54:55 lpd) + +adds a brief blurb for Develop.htm (doc/Readme.htm [1.16]: 2000/12/11 +19:39:36 giles) + +In the developer documentation, breaks down several long file lists into +shorter, more focused ones. (doc/Develop.htm [1.21]: 2000/12/12 19:52:49 +lpd) + +Adds some additional documentation on halftones. (doc/Develop.htm [1.22]: +2000/12/15 01:46:57 lpd) + +Adds additional documentation on makefile conventions, and improves a few +other areas. (doc/Develop.htm [1.23]: 2000/12/18 06:45:23 lpd) + +Adds more documentation on makefiles, .dev files, and related topics. +(doc/Develop.htm [1.24]: 2000/12/20 05:09:31 lpd) + +Adds more developer documentation on the PostScript interpreter; divides up +some lists of files to provide more helpful detail. (doc/Develop.htm [1.25]: +2000/12/20 20:15:41 lpd) + +Documents the preferred line breaking and indentation format for assignment +statements, including chain assignments. (doc/C-style.htm [1.8]: 2000/12/22 +16:58:55 lpd) + +Makes some minor corrections and improvements to the developer +documentation. (doc/Develop.htm [1.26]: 2000/12/28 05:57:18 lpd) + +Adds substantial new material on coding conventions for structures, classes, +and subclasses. (doc/C-style.htm [1.9]: 2000/12/28 07:12:38 lpd) + +Documents about 15 additional non-standard operators (the ones most likely +to be used in future code). (doc/Develop.htm [1.27], +doc/Language.htm [1.22]: 2000/12/28 18:29:49 lpd) + +Documents the need to run hrefcov as part of the release process; also fixes +some minor inaccuracies. (doc/Release.htm [1.25]: 2000/12/29 02:12:08 lpd) + +Adds more files to the developer "roadmap" documentation. +(doc/Develop.htm [1.28]: 2000/12/29 02:18:47 lpd) + +Adds the Fontmaps and the contributed drivers to the developer documentation +"roadmap", which is now complete. (doc/Develop.htm [1.29]: 2000/12/29 +02:33:40 lpd) + +Adds some developer documentation on design principles. +(doc/Develop.htm [1.30]: 2000/12/30 22:07:37 lpd) + +Removes or updates no longer appropriate references to Aladdin Enterprises. +(doc/Commprod.htm [1.6], doc/Fonts.htm [1.10], doc/Install.htm [1.11], +doc/Make.htm [1.18], doc/New-user.htm [1.16], doc/Projects.htm [1.21], +doc/Use.htm [1.19]: 2000/12/31 21:43:59 lpd) + +Updates documentation for the Windows uninstall program to reflect a name +change. +(doc/Install.htm [1.12]: 2000/12/31 22:26:08 lpd) + +Updates repository for 6.60 release. (doc/Bug-form.htm [1.13], +doc/Bug-info.htm [1.9], doc/C-style.htm [1.10], doc/Commprod.htm [1.7], +doc/Copying.htm [1.5], doc/Current.htm [1.5], doc/DLL.htm [1.6], +doc/Develop.htm [1.31], doc/Devices.htm [1.17], doc/Drivers.htm [1.12], +doc/Fonts.htm [1.11], doc/Helpers.htm [1.8], doc/History1.htm [1.5], +doc/History2.htm [1.5], doc/History3.htm [1.5], doc/History4.htm [1.5], +doc/History5.htm [1.7], doc/History6.htm [1.15], doc/Htmstyle.htm [1.8], +doc/Install.htm [1.13], doc/Language.htm [1.23], doc/Lib.htm [1.5], +doc/Maintain.htm [1.8], doc/Make.htm [1.19], doc/New-user.htm [1.17], +doc/News.htm [1.73], doc/Projects.htm [1.22], doc/Ps-style.htm [1.5], +doc/Ps2epsi.htm [1.6], doc/Ps2pdf.htm [1.23], doc/Psfiles.htm [1.12], +doc/Readme.htm [1.17], doc/Release.htm [1.26], doc/Source.htm [1.5], +doc/Tester.htm [1.5], doc/Unix-lpr.htm [1.5], doc/Use.htm [1.20], +doc/Xfonts.htm [1.5], doc/gs-vms.hlp [1.4], man/dvipdf.1 [1.2], +man/eps2eps.1 [1.3], man/font2c.1 [1.2], man/gs.1 [1.2], man/gslp.1 [1.2], +man/gsnd.1 [1.2], man/pdf2dsc.1 [1.2], man/pdf2ps.1 [1.4], +man/pdfopt.1 [1.2], man/pf2afm.1 [1.2], man/pfbtopfa.1 [1.3], +man/printafm.1 [1.2], man/ps2ascii.1 [1.2], man/ps2epsi.1 [1.2], +man/ps2pdf.1 [1.6], man/ps2pdfwr.1 [1.3], man/ps2ps.1 [1.9], +man/wftopfa.1 [1.2]: 2001/01/01 00:24:05 lpd) + +</pre><h2><a name="6.60-Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - cvs2hist was generating invalid anchor names and not escaping +special charaters. also enable '-r' commandline option, and pass '-b' if +it's not specified for default branch logs only. Changes.htm now passes the +validator. Minor url cleanup in Release.htm (toolbin/cvs2hist.py [1.4]: +2000/11/10 01:52:35 giles) + - The OS/2 platform code would no longer compile, because the stdio +files are no longer available. (fix from rjl) (os2.mak [1.9]: 2000/12/05 +01:16:26 lpd) + - Embedded font subsets always used similar sequences of prefixes, +making it likely that combining multiple PDF files would lead to clashes; +the code now generates truly random prefixes, using an external source of +random data. (devs.mak [1.39]: 2000/12/10 00:12:23 lpd) + - Fixes a couple of dependency lists that had gotten out of sync. +(devs.mak [1.40]: 2000/12/10 00:17:51 lpd) + - Seek was broken and PDF interpreter failed when +FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls +is extended to support MSVC && Win32. close_.h is replaced by more +general unistd_.h (lib.mak [1.40]: 2000/12/19 03:35:40 alexcher) + - In the previous fix unistd__h was misspelt as unistd_h . +(lib.mak [1.41]: 2000/12/19 05:35:53 alexcher) + - The recent change for localized man pages didn't update 2 of the 3 +top-level Unix makefiles. (unixansi.mak [1.7], unixtrad.mak [1.7]: +2000/12/23 16:29:53 lpd) + - The list of doc files to be installed had gotten out of date +(Develop.htm, Maintain.htm, and Ps-style.htm were missing). +(unixinst.mak [1.16]: 2000/12/23 16:30:36 lpd) + - unixinst.mak was checked in with the previous fix only partly +done. (unixinst.mak [1.17]: 2000/12/23 16:34:12 lpd) + +Collect some stray configuration related externs into iconf.h +(int.mak [1.40]: 2000/11/04 06:12:02 rayjj) + +Adds DSC parsing capability to the PostScript interpreter, with an optional +'feature' to use the DSC Orientation comments to compensate for sloppy +PostScript producers that don't emit an appropriate setpagedevice command. +(int.mak [1.41]: 2000/11/05 18:33:53 lpd) + +Adds the 'hook' for passing DSC comments to the PDF writer, but doesn't +actually process any of the comments. NOTE: Part of this code was +accidentally included in the recent fix for local/global VM problems in the +PostScript code for using the DSC parser. (devs.mak [1.36]: 2000/11/07 +18:54:26 lpd) + +Reorganizes some text-writing code in anticipation of adding CIDFont and +CMap support. (devs.mak [1.37]: 2000/11/17 22:11:44 lpd) + +Avoids exporting empty LD_RUN_PATH environment variable to the link process. +This was causing binaries to search the current directory for libraries, +which was a security hole. Fixes SourceForge bug 122532. (ugcclib.mak [1.6], +unixlink.mak [1.3]: 2000/11/28 00:14:48 raph) + +Updates the date and version checker for compatibility with the newest +documentation standards; also makes it check the makefile values of JVERSION +and PVERSION against the currently installed third-party source code. +(toolbin/pre [1.9]: 2000/12/05 21:14:14 lpd) + +Extensively revises and updates the pdfwrite text handling code to support +processing and embedding of all types of fonts (except for Type 3 and +CIDFontType 1, which are defined by PostScript procedures), and all variants +of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with +all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both +standard and non-standard CMaps are supported. (devs.mak [1.38], +int.mak [1.42], lib.mak [1.38]: 2000/12/08 23:35:37 lpd) + +removes a spurious import of the cgi module (toolbin/cvs2hist.py [1.5]: +2000/12/11 19:40:23 giles) + +Splits off the code for downsampling an oversampled character bitmap into a +separate file. (lib.mak [1.39]: 2000/12/14 00:14:52 lpd) + +Adds a '-t' option to enable text output rather than html, replacing the old +behavior, which was to return text unless a version string was passed with +'-v'. The version string is now set to 'CVS' if no explicit version is +passed, and this is used in the named anchors within the html output. +(toolbin/cvs2hist.py [1.6]: 2000/12/23 09:38:10 giles) + +Adds support for localized manpages to the make 'install' target. On unix +the makefile will now intall any files with the $MAN1EXT extension it finds +under locale subdirs of the man directory that are listed in the MAN_LCDIRS +variable. The $man1dir is correspondingly removed from unix-gcc.mak. Also +adds separate targets: install-doc install-man install-examples +install-libdata (unix-gcc.mak [1.9], unixinst.mak [1.15]: 2000/12/23 +10:10:37 giles) + +Improves the set of files checked by hrefcov +lib. +(toolbin/hrefcov.tcl [1.5]: 2000/12/29 02:16:13 lpd) + +Adds a script for batch-converting PostScript files to PDF, intended to be +useful for testing. (toolbin/many2pdf.tcl [1.1]: 2000/12/31 22:28:09 lpd) + +Updates repository for 6.60 release. (toolbin/pre [1.10], +version.mak [1.24]: 2001/01/01 00:24:06 lpd) + +</pre><h2><a name="6.60-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - pdfopt.ps used the "unresolved?" procedure from pdf_base.ps, which +has been replaced by the slightly different "resolved?" procedure. +(lib/pdfopt.ps [1.4]: 2000/12/01 04:15:52 lpd) + - The OS/2 platform code would no longer compile, because the stdio +files are no longer available. (fix from rjl) (gp_os2.c [1.5]: 2000/12/05 +01:16:26 lpd) + - File flush method uses file member in stream. On Windows and OS/2 +it is NULL for %stdout or %stderr. So the standard flush method is +installed. (gp_msio.c [1.3], gp_os2.c [1.6]: 2000/12/19 03:44:24 alexcher) + - /NullEncode filter no longer supports fileposition. Replacing +fileposition with .fileposition (lib/impath.ps [1.3]: 2000/12/28 17:06:07 +alexcher) + - _.at file was not deleted in BAT file; SAFER option added to CMD +file. (lib/eps2eps.bat [1.4], lib/eps2eps.cmd [1.2]: 2000/12/30 18:45:37 +alexcher) + +Improves documentation of cid2code.ps by adding a complete usage example. +(lib/cid2code.ps [1.3]: 2000/11/30 18:22:11 lpd) + +Adds extensive documentation to genconf.c; also brings it into line with +current Ghostscript coding standards. (genconf.c [1.4]: 2000/12/20 04:20:34 +lpd) + +Safe mode implemented using DELAYSAFER flag. (lib/pdf2dsc [1.3], +lib/pdf2dsc.bat [1.1], lib/pdf2dsc.ps [1.3]: 2000/12/29 05:03:49 alexcher) + +</pre><h2><a name="6.60-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - In PDF output, color values of 1.0 were usually written as 0.999. +(bug introduced in version 6.22) (gdevpsdu.c [1.8]: 2000/11/12 07:13:26 lpd) + - The pswrite device couldn't write to pipes. The fix involved +expanding the API for opening device OutputFiles so that the individual +driver could specify whether it required, requested, or did not want a +positionable file. Fixes SourceForge bug # 122223. (gdevps.c [1.13], +gdevpx.c [1.5]: 2000/11/29 02:25:13 lpd) + - Invalid (uninitialized) StripByteCount was being left in file for +the tiff12nc and tiff24nc devices. Needed to call gdev_tiff_end_strip(). +(gdevtfnx.c [1.4]: 2000/12/15 06:09:27 rayjj) + - Fixes bug introduced in gdevxini.c revision 1.5. Don't overwrite +the pixmap handle provided in the GHOSTVIEW environment variable. +(gdevxini.c [1.10]: 2000/12/15 10:18:47 ghostgum) + - The pswrite device produced an extra page if the transfer function +didn't map "1 setgray" to device white. (gdevps.c [1.14]: 2000/12/21 +03:58:54 lpd) + +</pre><h2><a name="6.60-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - kshow caused the PDF writer to revert to bitmapped fonts. Fixes +SourceForge bug # 104118. (gdevpdft.c [1.21]: 2000/11/06 04:17:14 lpd) + - The PDF writer didn't handle stroked fonts correctly (they were +filled instead of stroked). (gdevpdf.c [1.23], gdevpdfd.c [1.11], +gdevpdft.c [1.22], gdevpdfx.h [1.23]: 2000/11/12 06:52:08 lpd) + - When mixing filled and stroked fonts, the color wasn't set +correctly. (gdevpdft.c [1.23]: 2000/11/12 07:14:30 lpd) + - The PDF writer incorrectly assumed that in PDF 1.3, the standard +Latin character set was the PostScript 3 extended set (it's actually the old +PostScript Level 2 set). (gdevpdft.c [1.28]: 2000/11/20 18:13:55 lpd) + - Embedded CIDFontType 2 fonts had an incorrect BoundingBox. +(gdevpdff.c [1.14]: 2000/12/09 06:53:25 lpd) + - Embedded font subsets always used similar sequences of prefixes, +making it likely that combining multiple PDF files would lead to clashes; +the code now generates truly random prefixes, using an external source of +random data. (gdevpdf.c [1.26], gdevpdfe.c [1.8], gdevpdff.c [1.15], +gdevpdff.h [1.9], gdevpdfx.h [1.27]: 2000/12/10 00:12:23 lpd) + - Non-embedded Multiple Master instances weren't identified as such +(font Subtype = /MMType1). (gdevpdfw.c [1.7]: 2000/12/11 08:52:01 lpd) + - pdfwrite would crash if a bitmap character was larger than 10Kb +(compressed). The fix simply raises the limit to 1 Mb. (gdevpdft.c [1.30]: +2000/12/13 01:33:37 lpd) + - When processing DSC comments, some constant strings weren't copied +to the heap, possibly causing memory access errors. (gdevpdfp.c [1.16]: +2000/12/16 07:02:35 lpd) + - If the same standard (base 14) font was loaded more than once +(because of save/restore), the PDF file could contain fonts that had +suffixed names (e.g., Helvetica~2) but with data missing as though they were +standard fonts, upsetting Acrobat Reader. Fixes SourceForge bug # 101905. +THIS FIX IS IN A VERY FRAGILE AREA AND MAY INTRODUCE NEW PROBLEMS. +(gdevpdff.c [1.16]: 2000/12/16 08:00:53 lpd) + - The previous fix for copying DSC comment keys to the heap was +unnecessarily complex. (gdevpdfp.c [1.17]: 2000/12/16 19:28:51 lpd) + - Resource usage wasn't tracked separately for Form XObjects (BP/EP +pdfmarks), producing non-compliant files that caused errors from Acrobat. +Fixes SourceForge bug # 102146. (gdevpdf.c [1.28], gdevpdff.c [1.17], +gdevpdff.h [1.10], gdevpdfm.c [1.8], gdevpdfo.c [1.6], gdevpdfo.h [1.6], +gdevpdft.c [1.31], gdevpdfu.c [1.14], gdevpdfw.c [1.8], gdevpdfx.h [1.28]: +2000/12/16 19:36:32 lpd) + - Strict type correctness is required on VMS system. Contributed by +Jouk Jansen joukj@hrem.stm.tudelft.nl (gdevpdfw.c [1.9]: 2000/12/18 21:58:03 +alexcher) + +Adds the 'hook' for passing DSC comments to the PDF writer, but doesn't +actually process any of the comments. NOTE: Part of this code was +accidentally included in the recent fix for local/global VM problems in the +PostScript code for using the DSC parser. (gdevpdfp.c [1.13]: 2000/11/07 +18:54:26 lpd) + +Changes the internal indication of whether to allow font subsetting from a +Boolean to OK, YES, NO. (Unfortunately, I no longer remember why this change +is needed.) (gdevpdfe.c [1.6], gdevpdff.c [1.10], gdevpdff.h [1.5], +gdevpdft.c [1.24]: 2000/11/14 06:57:21 lpd) + +When writing PDF output, adds the ability to convert text in Type 0 fonts to +text in the descendant leaf fonts. This completes the handling of text +output except for CID-keyed fonts. (gdevpdft.c [1.25]: 2000/11/14 16:47:09 +lpd) + +Reorganizes some text-writing code in anticipation of adding CIDFont and +CMap support. (gdevpdff.c [1.11], gdevpdff.h [1.6], gdevpdft.c [1.26]: +2000/11/17 22:11:44 lpd) + +Makes glyphshow no longer revert to bitmapped fonts. Also adds a CIDFont +pseudo-resource, in anticipation of adding CID-keyed font support. +(gdevpdff.c [1.12], gdevpdff.h [1.7], gdevpdft.c [1.27], gdevpdfx.h [1.24]: +2000/11/20 08:31:20 lpd) + +Extensively revises and updates the pdfwrite text handling code to support +processing and embedding of all types of fonts (except for Type 3 and +CIDFontType 1, which are defined by PostScript procedures), and all variants +of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with +all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both +standard and non-standard CMaps are supported. (gdevpdf.c [1.24], +gdevpdfe.c [1.7], gdevpdff.c [1.13], gdevpdff.h [1.8], gdevpdfs.c [1.1], +gdevpdft.c [1.29], gdevpdfu.c [1.13], gdevpdfw.c [1.6], gdevpdfx.h [1.25]: +2000/12/08 23:35:38 lpd) + +If ParseDSCCommentsForDocInfo is set to true, copies information from DSC +comments Creator, CreationDate, For, and Title into the output's Info +dictionary. (gdevpdfp.c [1.14]: 2000/12/09 07:49:22 lpd) + +Makes the PDF writer extract orientation and bounding box information from +DSC comments, if present. The orientation is used to set Rotate if +AutoRotatePages is not selected; the bounding box is not yet used for +anything. (gdevpdf.c [1.25], gdevpdfp.c [1.15], gdevpdfx.h [1.26]: +2000/12/09 19:54:54 lpd) + +Slightly changes the initialization of the random offset for font subset +prefixes, to work better with low-resolution clocks such as those typical on +PCs. (gdevpdf.c [1.27]: 2000/12/16 19:31:10 lpd) + +</pre><h2><a name="6.60-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - Type 0 fonts with a non-standard (embedded) CMap didn't work at +all. (lib/pdf_font.ps [1.15]: 2000/12/02 20:41:52 lpd) + - The PDF interpreter ignored the CIDToGIDMap entry in (embedded) +CIDFontType 2 fonts, producing incorrect output if the map wasn't /Identity. +(lib/pdf_font.ps [1.16]: 2000/12/07 23:41:10 lpd) + - GS didn't dereference indirect objects in Widths array. +(lib/pdf_font.ps [1.17]: 2000/12/17 19:06:19 alexcher) + - Fixes a slight oversight in the true/false/null improvement for +the PDF interpreter. (lib/pdf_base.ps [1.12]: 2000/12/26 04:10:12 lpd) + - When a non-TrueType font was substituted for a TrueType font, the +Encoding in the font descriptor was ignored. This hack was intended to fix +SF bug # 104702, an invalid PDF file, but it broke another case. Removal of +the hack makes GS render both cases similar to AR 4. +(lib/pdf_font.ps [1.18]: 2000/12/26 04:29:30 alexcher) + - The PDF interpreter didn't rotate the CropBox for landscape pages, +producing incorrect output if the input of ps2pdf was a landscape PDF file. +(lib/pdf_main.ps [1.26]: 2000/12/31 01:07:18 lpd) + +Improves font substitution by taking the "Narrow" property into account. +Fixes SourceForge bug 116460. Fix due to Leon Bottou. +(lib/pdf_font.ps [1.13]: 2000/11/05 17:36:28 raph) + +Wraps the showpagecontents call in gsave/grestore, so that the graphics +state for drawing annotations is pristine. Fixes Sourceforge bug 123310. +(lib/pdf_main.ps [1.23]: 2000/11/25 22:00:21 raph) + +The published PDF specification says the Encoding name "must be" one of the +3 predefined Encodings, implying that an error should occur if it isn't. +However, Acrobat Reader simply ignores unknown names, and since there are +some buggy applications that rely on this, we do the same. +(lib/pdf_font.ps [1.14]: 2000/11/28 18:55:24 alexcher) + +The PDF specification says that the 'xref' must be on a line by itself. The +code formerly used readline and linene to check this. However, Acrobat +Reader only requires the line to begin with 'xref', and there are enough +applications producing non-compliant PDF files that we have to do this too. +(lib/pdf_main.ps [1.24]: 2000/12/18 03:41:35 alexcher) + +AI8 writes bogus encoding array [0 1 0 0 0 0 0 0] AR doesn't care. So we +have to straighten it up here. (lib/pdf_draw.ps [1.24]: 2000/12/20 19:02:24 +alexcher) + +Makes the PDF interpreter handle true, false, and null specially, rather +than by dictionary lookup, so that the PostScript interpreter can still +process these names using the special fast case for names defined only in +systemdict. (lib/pdf_base.ps [1.11], lib/pdf_main.ps [1.25]: 2000/12/26 +04:08:44 lpd) + +</pre><h2><a name="6.60-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - The recently updated code for activating the DSC comment parser +had several local/global VM problems, causing invalidaccess errors. +(lib/gs_dps2.ps [1.3], lib/gs_init.ps [1.27], lib/gs_pdfwr.ps [1.7]: +2000/11/07 18:51:24 lpd) + - There was still a bug in the code for passing DSC comments to the +PDF writer, causing typecheck errors. (lib/gs_pdfwr.ps [1.8]: 2000/11/07 +19:27:14 lpd) + - If the procedure of a FunctionType 4 Function was syntactically +valid but exceeded the maximum stack depth, an attempt was made to free a +string as an object, causing memory corruption. (zfunc4.c [1.6]: 2000/11/11 +17:34:06 lpd) + - Disk-based TrueType fonts caused a memory leak. (Currently, there +are no such fonts, but CIDFontType 2 fonts, and directly-accessed TrueType +fonts, should be made disk-based.) (zfcid1.c [1.4]: 2000/11/22 08:32:07 lpd) + - Type 1 CharStrings loaded from disk for type 0 CIDFonts were never +freed, except by garbage collection (which doesn't reclaim chunks with only +a small amount of surviving data). In practice, this probably only affects +the PDF writer. (zfcid0.c [1.5]: 2000/11/23 23:34:22 lpd) + - Single-byte notdef ranges in CMaps incorrectly incremented the CID +number, rather than assigning the same CID to all characters in the range. +(lib/gs_cmap.ps [1.9]: 2000/11/29 06:58:36 lpd) + - In dictionaries, an int lookup key sometimes didn't match a real +stored key, and vice versa. Fixes SourceForge bug # 123678. (idict.c [1.3]: +2000/11/30 07:13:08 lpd) + - Further tweaking of the logic to clear end_status flags in a +pipeline in the continuation of a procedure write, making it more aggressive +than the previous fix, but less aggressive than the original code. This is a +revised fix for Sourceforge bug 119777. (zfproc.c [1.7]: 2000/12/02 19:58:45 +raph) + - 'gstate' was allowed in global VM even if the current graphics +state included references to structures in local VM (which is, in fact, +normally the case) and the save level was non-zero: this could create a +dangling pointer after the 'restore'. This "fix" is a workaround that simply +prohibits doing this, but a correct fix would copy any such structures. +(zdps1.c [1.3]: 2000/12/02 20:39:37 lpd) + - The first call of check_psc_function in gs_build_function_4 didn't +initialize size to 0, causing the computed value of size to be garbage, +possibly leading to a VMerror or memory corruption. (zfunc4.c [1.7]: +2000/12/03 16:56:31 alexcher) + - The font_info procedure for PostScript fonts other than Type 1 +didn't return information from the FontInfo dictionary (Copyright, +FamilyName, FullName, Notice), causing this information to be omitted when +embedding the font in a PDF file. (ifont.h [1.6], zbfont.c [1.7], +zfont.c [1.3], zfont1.c [1.9]: 2000/12/03 23:35:30 lpd) + - The %%ViewingOrientation: DSC comment was misspelled +%%ViewerOrientation:. This also corrects the CDSC_VIEWINGORIENTATION enum +value (formerly CDSC_VIEWERORIENTATION, and the viewing_orientation members +of the CDSCPAGE structure and the CDSC structure (formerly +viewer_orientation). (dscparse.c [1.3], dscparse.h [1.3], zdscpars.c [1.8]: +2000/12/09 18:28:23 lpd) + - Unitialized member of CDSCPAGE caused random crashes. +(dscparse.c [1.4]: 2000/12/13 07:18:46 alexcher) + - systemdict was being created too small for LanguageLevel 3 +systems. (It expanded properly, but left a sandbar.) (iinit.c [1.3]: +2000/12/26 04:25:54 lpd) + - Expanding a permanent dictionary (systemdict or userdict) +destroyed the single-definition bookkeeping for names defined in that +dictionary, slowing down subsequent interpretation. (idict.c [1.4]: +2000/12/26 06:09:58 lpd) + - Fix to dscparse.c for parsing DOS EPS files. Code now looks for +%!PS-Adobe- at the start of the PostScript section, not at the start of the +DOS EPS header. (dscparse.c [1.5]: 2000/12/28 01:45:01 ghostgum) + +Collect some stray configuration related externs into iconf.h +(imain.c [1.3], imainarg.c [1.5]: 2000/11/04 06:12:02 rayjj) + +branches: 1.1.2; Collect some stray configuration related externs into +iconf.h (iconf.h [1.1]: 2000/11/04 06:12:02 rayjj) + +Add COMPILE_INITS information line to -h help output. (imainarg.c [1.6]: +2000/11/04 06:13:42 rayjj) + +Adds DSC parsing capability to the PostScript interpreter, with an optional +'feature' to use the DSC Orientation comments to compensate for sloppy +PostScript producers that don't emit an appropriate setpagedevice command. +(lib/gs_dscp.ps [1.1], zdscpars.c [1.1]: 2000/11/05 18:33:52 lpd) + +branches: 1.1.2; Adds DSC parsing capability to the PostScript interpreter, +with an optional 'feature' to use the DSC Orientation comments to compensate +for sloppy PostScript producers that don't emit an appropriate setpagedevice +command. (dscparse.c [1.1], dscparse.h [1.1]: 2000/11/05 18:33:53 lpd) + +Polishes the DSC parser interface: improves comments and formatting, and +fixes a couple of very minor glitches. (zdscpars.c [1.2]: 2000/11/06 +07:34:21 lpd) + +branches: 1.3.2; ... and fixes an overlooked const discrepancy. +(zdscpars.c [1.3]: 2000/11/06 07:35:51 lpd) + +branches: 1.2.2; Fix: The recently updated code for activating the DSC +comment parser had several local/global VM problems, causing invalidaccess +errors. (lib/gs_dscp.ps [1.2]: 2000/11/07 18:51:25 lpd) + +Return code variables (code and comment_code) in zparse_dsc_comments(). need +to be signed. (zdscpars.c [1.4]: 2000/11/08 00:54:48 dancoby) + +Rewrites .parse_dsc_comment to use the parameter list machinery, removing a +little functionally duplicated code; changes two incorrect uints to ints +(fix from dan@artifex.com); adds additional comment types (BoundingBox, +PageBoundingBox, BeginDefaults, EndDefaults) to the interface. +(zdscpars.c [1.5]: 2000/11/08 07:07:32 lpd) + +DSC parser changes: adds %%ViewerOrientation to DSC parser; doesn't flag an +error if %%Pages is absent but one %%Page is found; frees memory if +initialization fails; recognizes general whitespace in some places where +only spaces were recognized before. (changes from gsview@ghostgum.com.au) +(dscparse.c [1.2], dscparse.h [1.2]: 2000/11/13 05:44:58 lpd) + +Adds DSC comment tracing to ps2pdf, if -dDEBUG is specified on the command +line. (lib/gs_pdfwr.ps [1.9]: 2000/11/13 17:03:51 lpd) + +Adds %%EndDefaults, %%For:, and %%ViewerOrientation: to the set of DSC +comments handled by the .parse_dsc_comments operator. (zdscpars.c [1.6]: +2000/11/13 17:06:18 lpd) + +Slightly simplifies the code for creating the internal representation of +CMaps. (lib/gs_cmap.ps [1.8]: 2000/11/16 00:32:00 lpd) + +Changes .buildshading to always apply a ReusableStreamDecode filter to file +and stream DataSources, so that multiple passes over the stream work. This +patch closes SourceForge bug 121810. (lib/gs_ll3.ps [1.7]: 2000/11/16 +00:37:32 raph) + +Makes single-byte CMap ranges convert into a single range in the internal +representation, rather than (largest - smallest + 1) separate single-element +ranges. (lib/gs_cmap.ps [1.10]: 2000/11/29 07:10:27 lpd) + +Adds documentation for the procedures declared in ifont.h. (ifont.h [1.5]: +2000/12/03 23:14:28 lpd) + +Extensively revises and updates the pdfwrite text handling code to support +processing and embedding of all types of fonts (except for Type 3 and +CIDFontType 1, which are defined by PostScript procedures), and all variants +of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with +all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both +standard and non-standard CMaps are supported. (lib/gs_cidfn.ps [1.18]: +2000/12/08 23:35:38 lpd) + +Makes the default value of ParseDSCCommentsForDocInfo true rather than +false. (lib/gs_pdfwr.ps [1.10]: 2000/12/09 08:00:52 lpd) + +Changes the parsing of the DSC Orientation comments to return -1 .. 3 rather +than 0 or 1. (lib/gs_dscp.ps [1.3], zdscpars.c [1.7]: 2000/12/09 17:52:29 +lpd) + +Changes .parse_dsc_comments to distinguish (document default) +ViewingOrientation from PageViewingOrientation, as for [Page]Orientation. +(zdscpars.c [1.9]: 2000/12/09 19:52:49 lpd) + +Updates the comments with a new proposal for speeding up name lookup in the +interpreter. (dstack.h [1.3]: 2000/12/26 01:20:58 lpd) + +The old code caused gswin crash when console window closes. +(dwimg.cpp [1.3]: 2000/12/26 13:41:40 igorm) + +New flag DELAYSAFER added to defer activation of safety checks. SAFER=false +=> no safety checks SAFER=true, DELAYSAFER=false => safety checks +always SAFER=true, DELAYSAFER=true => safety checks after .setsafe +(lib/gs_init.ps [1.28]: 2000/12/29 04:13:56 alexcher) + +</pre><h2><a name="6.60-Streams"></a>Streams</h2><pre> + +Fixes problems: + - Seek was broken and PDF interpreter failed when +FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls +is extended to support MSVC && Win32. close_.h is replaced by more +general unistd_.h (sfxfd.c [1.6]: 2000/12/19 03:35:40 alexcher) + +</pre><h2><a name="6.60-Library"></a>Library</h2><pre> + +Fixes problems: + - Several places in the band list code didn't call s_init_state to +initialize locally allocated stream states: this is now required (see the +"Incompatible changes" section above). We suspect there are a few more +places that will need this fix. (gxclbits.c [1.3], gxcldev.h [1.4], +gxclread.c [1.3], gxclutil.c [1.3]: 2000/11/05 00:34:24 lpd) + - Fixes infinite loops when writing large bitmaps into clist. Now, +cmd_put_bits never requests an allocation in the clist buffer larger than +cbuf_size. (gxclbits.c [1.4]: 2000/11/05 18:44:57 raph) + - Works around an Acrobat Reader 4 bug that causes AR4 to draw a +single pixel, rather than nothing, when filling a subpath consisting only of +a moveto. (gdevvec.c [1.8]: 2000/11/07 16:42:28 lpd) + - The PDF writer didn't handle stroked fonts correctly (they were +filled instead of stroked). (gdevvec.c [1.9], gdevvec.h [1.5]: 2000/11/12 +06:52:08 lpd) + - The pdfwrite and pswrite drivers could emit a lineto or rlineto +without a moveto at the beginning of the path. (bug introduced very +recently, by a workaround for an Acrobat Reader bug) (gdevvec.c [1.10]: +2000/11/14 07:41:08 lpd) + - Attempting to write a CFF Type 2 font larger than 32K but smaller +than 64K caused a rangecheck. (gdevpsf2.c [1.8]: 2000/11/19 17:48:08 lpd) + - Computing the default width or the fixed width for a CIDFont or +TrueType font could do a huge amount of unnecessary work. (Probably only +affects the PDF writer.) (gsfont.c [1.3]: 2000/11/20 21:09:09 lpd) + - The Type 1 to Type 2 CharString converter (currently used only by +the PDF writer) often didn't detect invalid CharStrings as input. +(gdevpsfx.c [1.6]: 2000/11/21 02:33:55 lpd) + - The code for writing a CIDFontType0 CFF font mistook Type 2 +CharStrings for Type 1, and tried to convert them to Type 2. (This currently +affects only the PDF writer.) (gdevpsf2.c [1.9]: 2000/11/21 02:35:59 lpd) + - Disk-based TrueType fonts caused a memory leak. (Currently, there +are no such fonts, but CIDFontType 2 fonts, and directly-accessed TrueType +fonts, should be made disk-based.) (gdevpsft.c [1.5], gstype42.c [1.10]: +2000/11/22 08:32:07 lpd) + - Type 1 CharStrings loaded from disk for type 0 CIDFonts were never +freed, except by garbage collection (which doesn't reclaim chunks with only +a small amount of surviving data). In practice, this probably only affects +the PDF writer. (gsfcid.c [1.5], gstype1.c [1.6], gstype2.c [1.9], +gxfont1.h [1.5], gxtype1.c [1.8], gxtype1.h [1.5]: 2000/11/23 23:34:22 lpd) + - The pswrite device couldn't write to pipes. The fix involved +expanding the API for opening device OutputFiles so that the individual +driver could specify whether it required, requested, or did not want a +positionable file. Fixes SourceForge bug # 122223. (gdevpipe.c [1.4], +gdevvec.c [1.11], gdevvec.h [1.6], gsdevice.c [1.8]: 2000/11/29 02:25:13 +lpd) + - The change for freeing transient CharStrings introduced two bugs, +possibly causing the code to free data twice, or to free data that should be +retained. (gdevpsfx.c [1.8]: 2000/11/30 05:58:19 lpd) + - Allocates graphics state path in stable memory. This prevents +paths in Type 3 fonts allocated inside a save ... setcachedevice ... restore +sequence from being prematurely freed. Fixes SourceForge bug 101549. +(gspath1.c [1.3], gsstate.c [1.6]: 2000/12/04 21:13:55 raph) + - An inadvertent change caused the graphics state not to be freed on +grestore. This fix, due to lpd, restores the freeing statement. +(gsstate.c [1.7]: 2000/12/05 09:24:57 raph) + - The pointers to the substituted color spaces in the graphics state +weren't included in the structure descriptor, causing memory access errors +if UseCIEColor was used. (gsstate.c [1.8]: 2000/12/11 04:06:22 alexcher) + - In TrueType fonts, glyph outlines starting with an off-curve point +didn't render correctly, replacing the curve with a pair of straight lines. +(gstype42.c [1.11]: 2000/12/12 22:27:56 alexcher) + - Strict type correctness is required on VMS system. Contributed by +Jouk Jansen joukj@hrem.stm.tudelft.nl (gdevpsf2.c [1.12], gsfcmap.c [1.13]: +2000/12/18 21:58:03 alexcher) + - Seek was broken and PDF interpreter failed when +FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls +is extended to support MSVC && Win32. close_.h is replaced by more +general unistd_.h (gpmisc.c [1.9]: 2000/12/19 03:35:40 alexcher) + - Fixes a subtle logic bug in the scan line path filling code, which +unfortunately involved rewriting the code from scratch. The new code is also +somewhat subtle, and may contain new bugs: DON'T TRUST IT YET. Fixes +SourceForge bug # 117066. (gxfill.c [1.7]: 2000/12/23 06:02:39 lpd) + - Embedded Type 1 fonts omitted StdVW. (Acrobat Reader requires +this, even though the Type 1 specification says it is optional.) +(gdevpsf1.c [1.8]: 2000/12/29 01:18:55 lpd) + +Adds developer documentation on the color mapping pipeline. (gxfrac.h [1.3]: +2000/11/03 04:53:00 lpd) + +Improves the documentation of the minimum responsibilities of the 'process' +procedure in a text enumerator. (gxtext.h [1.6]: 2000/11/06 00:44:37 lpd) + +Adds a param_string_from_transient_string macro, to parallel +param_string_from_string for non-permanent C strings. (gsparam.h [1.8]: +2000/11/08 06:56:50 lpd) + +Adds a macro for declaring suffix subclasses with 5 added pointers (in +addition to the existing 1, 2, 3, 4, and 6). (gsstruct.h [1.6]: 2000/11/21 +16:46:55 lpd) + +Adds a procedure for testing whether a glyph is a "notdef" in a font, +necessary for fixing a memory consumption problem when accessing type 0 +CIDFonts. (gsfont.c [1.4], gxfont.h [1.3]: 2000/11/23 23:23:40 lpd) + +Speeds up the slow case of fixed_mult_quo by nearly a factor of 2, by using +a tiny bit of numerical analysis. (gsmisc.c [1.9], gxfixed.h [1.3]: +2000/11/24 06:53:23 lpd) + +Improves the performance of embedded font writing by freeing strings when no +longer needed, and by removing redundant computation. (Currently relevant +only to the PDF writer.) (gdevpsf1.c [1.7], gdevpsf2.c [1.10], +gdevpsfu.c [1.5], gdevpsfx.c [1.7]: 2000/11/24 07:10:41 lpd) + +Adds a procedure for creating an Identity CMap, needed by the PDF writer. +(gsfcmap.c [1.11], gxfcmap.h [1.6]: 2000/11/26 04:08:41 lpd) + +Implements the stopgap measure of increasing fill_adjust for Coons patch +shading, to cover the dropouts caused by incorrect triangulation of the mesh +surface. See SourceForge Bug 119588 for a more thorough analysis. +(gsptype2.c [1.4], gxshade4.c [1.4]: 2000/11/29 01:31:30 raph) + +Adds an internal unique ID to CMap structures (gs_cmap_t), for use as a +cache or comparison key. (gsfcmap.c [1.12], gxfcmap.h [1.7]: 2000/11/29 +05:50:03 lpd) + +The old code did not comply ISO/IEC C language standard and compiled wrongly +to Mac, causing halftone problem on Mac. (gshtscr.c [1.5]: 2000/11/29 +14:41:34 igorm) + +Adds macros for suffix subclass structures with 7 or 8 additional pointers +(1-6 and 9 existed already). (gsstruct.h [1.7]: 2000/12/04 01:11:53 lpd) + +Extensively revises and updates the pdfwrite text handling code to support +processing and embedding of all types of fonts (except for Type 3 and +CIDFontType 1, which are defined by PostScript procedures), and all variants +of 'show' (including kshow and glyphshow). In particular, Type 0 fonts with +all FMapTypes (including CMap-based), CIDFontType 0 and 2 fonts, and both +standard and non-standard CMaps are supported. (gdevpsf.h [1.9], +gdevpsf2.c [1.11], gdevpsfm.c [1.4], gdevpsft.c [1.6], gdevpsfu.c [1.6]: +2000/12/08 23:35:38 lpd) + +Moves definitions of gs_state_do_ptrs and gs_state_num_ptrs from gsstate.c +to gzstate.h since they depend on the contents of struct gs_state_s defined +there. (gsstate.c [1.9], gzstate.h [1.4]: 2000/12/11 12:52:16 alexcher) + +Splits off the code for downsampling an oversampled character bitmap into a +separate file. (gsbitcom.c [1.1], gsbitops.c [1.3]: 2000/12/14 00:14:52 lpd) + +branches: 1.1.2; Fix: Seek was broken and PDF interpreter failed when +FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls +is extended to support MSVC && Win32. close_.h is replaced by more +general unistd_.h (unistd_.h [1.1]: 2000/12/19 03:35:40 alexcher) + +Brings gxfill.c up to date with current coding standards (except for adding +_t to the names of locally defined structure types); also puts #ifdef +FILL_TRAPEZOIDS around a little more code that tests 'if (fill_trapezoids)'. +(gxfill.c [1.6]: 2000/12/21 16:10:36 lpd) + +Updates repository for 6.60 release. (gscdef.c [1.11]: 2001/01/01 00:24:06 +lpd) + +</pre><h2><a name="6.60-Other"></a>Other</h2><pre> + +Fixes problems: + - Seek was broken and PDF interpreter failed when +FILE_IMPLEMENTATION=fd The implementation of streams using direct OS calls +is extended to support MSVC && Win32. close_.h is replaced by more +general unistd_.h (close_.h [1.3]: 2000/12/19 03:35:40 alexcher) + +<hr> + +<h1><a name="Version6.30"></a>Version 6.30 (2000-10-03)</h1> + +<p> +This fileset consists of xxx. + +<p> +All problems registered on SourceForge numbered 110922 or lower are closed, +except for the following: 101549, 101814, 101905, 101955, 102146, 102735, +104118, 105289, 105558, 106340, 106652, 109350, 110445, 110898, 110922. + +<p> +The following projects are in a partially completed state: + +<ul> + +<li>CID-keyed fonts in the PDF writer (gdevpdf[eftw].c) -- barely started. + +</ul> + +<pre> + +<h2><a name="6.24_Incompatible_changes"></a>Incompatible changes</h2> + +(Procedures) + - The -Zv and -ZV switches now trace alpha/transparency features. + - The program name has changed. + - The default Windows installation directory is now c:\gs rather +than c:\Aladdin. +(Utilities) + - lib/pdfeof.ps is deleted; its functionality is included in the +standard code. +(Drivers) + - The X driver now implements sync_output using XSync(False) rather +than XFlush(). +(Library) + - gdev_vector_dopath now never returns 1. + - Color space types now have a new, required, "equal" procedure. + + +<h2><a name="6.30 Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - the "User parameters" section was incorrectly titled "Device +parameters". (doc/Language.htm [1.11]: 2000/08/17 17:00:42 lpd) + +Initializes files for the 6.24 fileset. (doc/News.htm [1.57]: 2000/08/09 +16:54:01 lpd) + +Adds Alex Cherepanov to the roster of helpers. (doc/Helpers.htm [1.2]: +2000/08/09 16:54:39 lpd) + +Documents the -dDEVICE{WIDTH,HEIGHT}POINTS= switches. (doc/Use.htm [1.10]: +2000/08/17 01:31:52 lpd) + +Notes the change in the return value of gdev_vector_dopath. +(doc/News.htm [1.58]: 2000/08/20 00:20:42 lpd) + +Changes text to make it clear that Yves Arrouye no longer maintains the BJC +drivers that he wrote. (doc/Devices.htm [1.11]: 2000/08/21 14:38:27 lpd) + +Puts the logic for detecting garbage after %%EOF (and some similar invalid +constructs) back into the main code, making it produce a message on stderr. +(doc/Psfiles.htm [1.6]: 2000/08/23 02:22:39 lpd) + +Documents the deletion of lib/pdfeof.ps. (doc/News.htm [1.59]: 2000/08/23 +02:23:54 lpd) + +Starts to implement the PDF 1.4 transparency features. All API and operator +additions are now implemented (at least as stubs) and documented, as is +bookkeeping for the new scalar graphics state members (but not for the soft +masks or the transparency group stack). (doc/Language.htm [1.12]: 2000/08/23 +21:46:31 lpd) + +Adds a project to avoid DCT-decoding followed by DCT-encoding images when +writing PDF files. (doc/Projects.htm [1.16]: 2000/08/24 03:43:12 lpd) + +Adds a new equality-testing virtual procedure for color spaces. +(doc/News.htm [1.60]: 2000/08/24 05:42:30 lpd) + +Brings the (still mostly stubbed) transparency code to a more +self-consistent state. (doc/Language.htm [1.13]: 2000/08/30 01:34:40 lpd) + +Completes the parsing of .{begin,end}transparency{group,mask}, except for +the TransferFunction for masks. The specification is still subject to +change. (doc/Language.htm [1.14]: 2000/08/30 15:03:36 lpd) + +Divides the list of documents according to whether the document is for +users, for developers, or both. (doc/Readme.htm [1.11]: 2000/08/30 21:24:00 +lpd) + +Adds more documentation for the transparency rendering stack. +(doc/Language.htm [1.15]: 2000/08/31 03:34:41 lpd) + +Adds a requirement to only use ANSI standard C library facilities. +(doc/C-style.htm [1.2]: 2000/09/08 04:53:14 lpd) + +Changes the -Zv switch to trace alpha/transparency-related features. +(doc/News.htm [1.61], doc/Use.htm [1.11]: 2000/09/10 05:23:10 lpd) + +Implements another chunk of the PDF 1.4 transparency features, fixing some +bugs in the previous code. (doc/Language.htm [1.16]: 2000/09/10 05:26:27 +lpd) + +Documents the addition of (limited) PDF 1.4 output capabilities. +(doc/Ps2pdf.htm [1.16]: 2000/09/11 02:08:58 lpd) + +Moves the Matte entry of soft mask images from the main structure to the +mask structures, and changes Matted to has_Matte. (doc/Language.htm [1.17]: +2000/09/11 04:08:13 lpd) + +Documents division of bug-gs mailbox into bug-gs, bug-gs-dev, and +bug-gs-beta. (doc/Bug-form.htm [1.7], doc/Bug-info.htm [1.5]: 2000/09/15 +23:44:21 lpd) + +Adds a paragraph explaining license details. (doc/PUBLIC [1.2], +doc/Public.htm [1.2]: 2000/09/18 22:26:32 lpd) + +Updates the license notices to reflect the name change; also updates many +internal references. (doc/Bug-form.htm [1.8], doc/Bug-info.htm [1.6], +doc/C-style.htm [1.3], doc/Changes.htm [1.17], doc/Commprod.htm [1.2], +doc/Copying.htm [1.2], doc/Current.htm [1.2], doc/DLL.htm [1.2], +doc/Devices.htm [1.12], doc/Drivers.htm [1.7], doc/Fonts.htm [1.7], +doc/Helpers.htm [1.3], doc/History1.htm [1.2], doc/History2.htm [1.2], +doc/History3.htm [1.2], doc/History4.htm [1.2], doc/History5.htm [1.4], +doc/History6.htm [1.12], doc/Htmstyle.htm [1.5], doc/Install.htm [1.6], +doc/Language.htm [1.18], doc/Lib.htm [1.2], doc/Maintain.htm [1.3], +doc/Make.htm [1.14], doc/New-user.htm [1.11], doc/News.htm [1.62], +doc/PUBLIC [1.3], doc/Projects.htm [1.17], doc/Ps2epsi.htm [1.3], +doc/Ps2pdf.htm [1.17], doc/Psfiles.htm [1.7], doc/Public.htm [1.3], +doc/Readme.htm [1.12], doc/Release.htm [1.18], doc/Source.htm [1.2], +doc/Tester.htm [1.2], doc/Unix-lpr.htm [1.2], doc/Use.htm [1.12], +doc/Xfonts.htm [1.2], doc/gs-vms.hlp [1.2]: 2000/09/19 21:37:50 lpd) + +Updates README from Readme.htm. (doc/README [1.3]: 2000/09/19 23:39:31 lpd) + +Changes the default Windows installation directory from c:\Aladdin to c:\gs. +(doc/Install.htm [1.7], doc/News.htm [1.63]: 2000/09/22 05:32:17 lpd) + +Replaces the OpenVMS installation instructions with an improved set +contributed by a user. (doc/Helpers.htm [1.4], doc/Install.htm [1.8]: +2000/09/22 20:33:19 lpd) + +Adds a project for fixing PDF files that have gotten mangled by EOL +conversion. (doc/Projects.htm [1.18]: 2000/09/25 14:40:37 lpd) + +Adds a reference to PreScript, another free text extraction program based on +Ghostscript. (doc/New-user.htm [1.12]: 2000/09/26 01:04:40 lpd) + +Documentation changes in preparation for 6.30 release. Replaced some contact +information, updated version numbers. (doc/Bug-form.htm [1.9], +doc/Bug-info.htm [1.7], doc/Commprod.htm [1.3], doc/Copying.htm [1.3], +doc/Current.htm [1.3], doc/DLL.htm [1.3], doc/Devices.htm [1.13], +doc/Drivers.htm [1.8], doc/Fonts.htm [1.8], doc/Helpers.htm [1.5], +doc/History1.htm [1.3], doc/History2.htm [1.3], doc/History3.htm [1.3], +doc/History4.htm [1.3], doc/History5.htm [1.5], doc/History6.htm [1.13], +doc/Htmstyle.htm [1.6], doc/Install.htm [1.9], doc/Language.htm [1.19], +doc/Lib.htm [1.3], doc/Maintain.htm [1.4], doc/Make.htm [1.15], +doc/New-user.htm [1.13], doc/News.htm [1.64], doc/Projects.htm [1.19], +doc/Ps2epsi.htm [1.4], doc/Ps2pdf.htm [1.18], doc/Psfiles.htm [1.8], +doc/README [1.4], doc/Readme.htm [1.13], doc/Release.htm [1.19], +doc/Source.htm [1.3], doc/Tester.htm [1.3], doc/Unix-lpr.htm [1.3], +doc/Use.htm [1.13], doc/Xfonts.htm [1.3], doc/gs-vms.hlp [1.3]: 2000/10/04 +04:33:27 raph) + +Bring version numbers and dates up to date. Small bug fix in toolbin/pre to +make it able to handle months with leading zeros. (doc/C-style.htm [1.4], +doc/Helpers.htm [1.6], man/ps2ps.1 [1.7]: 2000/10/04 05:18:54 raph) + +</pre><h2><a name="6.30 Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - The PostScript image writing drivers (psmono/gray/rgb) didn't set +the page size in the output, and didn't produce DSC-compliant output. +(devs.mak [1.31]: 2000/08/09 06:55:45 lpd) + - The FlateEncode and zlibEncode filters didn't implement the +"Effort" parameter. (fix from Alex Cherepanov) (int.mak [1.28]: 2000/08/09 +16:55:24 lpd) + - Because "-" as an OutputFile now references the %stdout IODevice, +it no longer worked in configurations without a PostScript interpreter. +Fixing this required factoring out the stdin/out/err IODevices and providing +an implementation that didn't reference the PostScript interpreter. +(int.mak [1.32], lib.mak [1.34], ugcclib.mak [1.3]: 2000/09/07 06:14:45 lpd) + - Configurations including PDF but not PostScript didn't include all +the PostScript LL3 features needed to interpret PDF 1.3 et seq. +(int.mak [1.33]: 2000/09/07 06:35:06 lpd) + - Cleans up some missing and incorrect dependencies. +(devs.mak [1.33], int.mak [1.34], lib.mak [1.35]: 2000/09/11 04:43:09 lpd) + - The definition of PSRCDIR was inconsistent with the definition of +PVERSION. (openvms.mak [1.5]: 2000/09/22 04:05:40 lpd) + - The pgnm and pnm drivers didn't properly detect the presence of +gray shades or color in images, sometimes causing gray or color information +to be lost in the output. (fix contributed by a user) (devs.mak [1.35]: +2000/09/23 04:52:56 lpd) + +Initializes files for the 6.24 fileset. (version.mak [1.19]: 2000/08/09 +16:54:02 lpd) + +Adds a mention of the Color LaserJet 4500 as a color PCL XL printer. +(devs.mak [1.32]: 2000/08/17 20:43:50 lpd) + +Changes text to make it clear that Yves Arrouye no longer maintains the BJC +drivers that he wrote. (contrib.mak [1.19]: 2000/08/21 14:38:28 lpd) + +Puts the logic for detecting garbage after %%EOF (and some similar invalid +constructs) back into the main code, making it produce a message on stderr. +(unixinst.mak [1.12]: 2000/08/23 02:22:39 lpd) + +Starts to implement the PDF 1.4 transparency features. All API and operator +additions are now implemented (at least as stubs) and documented, as is +bookkeeping for the new scalar graphics state members (but not for the soft +masks or the transparency group stack). (int.mak [1.29], lib.mak [1.30]: +2000/08/23 21:46:31 lpd) + +Adds a new equality-testing virtual procedure for color spaces. +(lib.mak [1.31]: 2000/08/24 05:42:30 lpd) + +Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc. +and banding don't do the right thing yet. (int.mak [1.30], +version.mak [1.20]: 2000/08/25 01:46:48 lpd) + +Brings the (still mostly stubbed) transparency code to a more +self-consistent state. (lib.mak [1.32]: 2000/08/30 01:34:40 lpd) + +Finishes the code for parsing ImageType 103 (soft-mask) images. +(int.mak [1.31], lib.mak [1.33]: 2000/08/30 04:30:05 lpd) + +*** empty log message *** (int.mak [1.35]: 2000/09/14 19:46:05 alexcher) + +Undoes uncommented and in some cases inappropriate changes. (int.mak [1.36]: +2000/09/18 06:28:58 lpd) + +Updates license notices +rather than simply saying "All rights reserved". (toolbin/3way.tcl [1.2], +toolbin/cvs2hist.py [1.2], toolbin/errlist.tcl [1.2], +toolbin/gsindent [1.2], toolbin/gsmake.tcl [1.4], toolbin/headers.tcl [1.2], +toolbin/leaks.tcl [1.2], toolbin/makegnu.tcl [1.2], +toolbin/makeset.tcl [1.4], toolbin/pre [1.6], toolbin/precheck.tcl [1.2], +toolbin/suite.tcl [1.2], toolbin/tmake.tcl [1.2]: 2000/09/19 17:30:25 lpd) + +Updates the license notices to reflect the name change, and changes +internal references in various scripts. (toolbin/3way.tcl [1.3], +toolbin/cvs2hist.py [1.3], toolbin/errlist.tcl [1.3], toolbin/gsindent +[1.3], toolbin/gsmake.tcl [1.5], toolbin/headers.tcl [1.3], +toolbin/leaks.tcl [1.3], toolbin/makegnu.tcl [1.3], toolbin/makeset.tcl +[1.5], toolbin/pre [1.7], toolbin/precheck.tcl [1.3], toolbin/suite.tcl +[1.3], toolbin/tmake.tcl [1.3]: 2000/09/19 18:10:51 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (all-arch.mak [1.5], bcwin32.mak +[1.3], cfonts.mak [1.2], contrib.mak [1.20], devs.mak [1.34], dvx-gcc.mak +[1.4], dvx-head.mak [1.2], dvx-tail.mak [1.3], dwmain.rc [1.2], dwsetup.def +[1.2], dwsetup.rc [1.2], dwuninst.def [1.2], dwuninst.rc [1.3]: 2000/09/19 +19:00:08 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gs.mak [1.2], gs16spl.rc [1.2], +gsdll2.rc [1.2], gsdll32.rc [1.2]: 2000/09/19 19:00:25 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gsos2.rc [1.2], gspmdrv.rc [1.2]: +2000/09/19 19:00:30 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gswin.rc [1.2]: 2000/09/19 +19:00:33 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (int.mak [1.37], jpeg.mak [1.3], +lib.mak [1.36], libpng.mak [1.2], msvc32.mak [1.5], msvccmd.mak [1.5], +msvclib.mak [1.5], msvctail.mak [1.4], openvms.mak [1.4], openvms.mmk +[1.5], os2.mak [1.7], pcwin.mak [1.2]: 2000/09/19 19:00:45 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (ugcclib.mak [1.4], unix-aux.mak +[1.3], unix-end.mak [1.2], unix-gcc.mak [1.7], unixansi.mak [1.5], +unixhead.mak [1.2], unixinst.mak [1.13], unixlink.mak [1.2], unixtrad.mak +[1.5], version.mak [1.21], watc.mak [1.5], watclib.mak [1.5], watcw32.mak +[1.4], wccommon.mak [1.3], wctail.mak [1.2], winint.mak [1.5], winlib.mak +[1.4], winplat.mak [1.2], wmin.mak [1.2], zlib.mak [1.2]: 2000/09/19 +19:00:52 lpd) + +Add commands to make the target GLGENDIR and BINDIR directories so that a +clean build works automatically. (msvctail.mak [1.5]: 2000/09/21 15:14:37 +rayjj) + +Changes the default Windows installation directory from c:\Aladdin to c:\gs. +(dwsetup.rc [1.3]: 2000/09/22 05:32:17 lpd) + +Changes the default Windows Start Menu Folder from "Aladdin" to +"Ghostscript". (dwsetup.rc [1.4]: 2000/09/22 05:35:02 lpd) + +Updates the makefiles from libpng version 1.0.5 to 1.0.8. +(all-arch.mak [1.6], bcwin32.mak [1.4], dvx-gcc.mak [1.5], libpng.mak [1.3], +msvc32.mak [1.6], msvclib.mak [1.6], openvms.mak [1.6], openvms.mmk [1.6], +os2.mak [1.8], ugcclib.mak [1.5], unix-gcc.mak [1.8], unixansi.mak [1.6], +unixtrad.mak [1.6], watc.mak [1.6], watclib.mak [1.6], watcw32.mak [1.5]: +2000/09/25 15:06:28 lpd) + +Documentation changes in preparation for 6.30 release. Replaced some contact +information, updated version numbers. (version.mak [1.22]: 2000/10/04 +04:33:29 raph) + +Bring version numbers and dates up to date. Small bug fix in toolbin/pre to +make it able to handle months with leading zeros. (toolbin/pre [1.8]: +2000/10/04 05:18:54 raph) + +</pre><h2><a name="6.30 Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - ps2pdf13.cmd set the output PDF version to 1.2 rather than 1.3. +(lib/ps2pdf13.cmd [1.2]: 2000/09/10 19:32:44 lpd) + - The OpenVMS Fontmap had gotten badly out of date; specifically, it +didn't reference the URW++ fonts distributed with Ghostscript. +(lib/Fontmap.VMS [1.2]: 2000/09/22 03:30:21 lpd) + +Puts the logic for detecting garbage after %%EOF (and some similar invalid +constructs) back into the main code, making it produce a message on stderr. +(lib/pdfeof.ps [1.2]: 2000/08/23 02:22:39 lpd) + +Adds script / batch / command files for producing PDF 1.4 output. +(lib/ps2pdf14 [1.1], lib/ps2pdf14.bat [1.1], lib/ps2pdf14.cmd [1.1]: +2000/09/10 19:33:47 lpd) + +Updates the license notices to reflect the name change, and changes a few +other internal references. (lib/Fontmap.ATB [1.2], lib/Fontmap.ATM [1.2], +lib/Fontmap.GS [1.2], lib/Fontmap.OS2 [1.2], lib/Fontmap.SGI [1.2], +lib/Fontmap.Sol [1.2], lib/Fontmap.Ult [1.2], lib/addxchar.ps [1.2], +lib/afmdiff.awk [1.2], lib/align.ps [1.2], lib/bdftops.ps [1.2], +lib/caption.ps [1.2], lib/cbjc600.ppd [1.2], lib/cbjc800.ppd [1.2], +lib/cid2code.ps [1.2], lib/docie.ps [1.2], lib/errpage.ps [1.2], +lib/font2c.ps [1.2], lib/font2pcl.ps [1.2], lib/gslp.ps [1.2], lib/gsnup.ps +[1.2], lib/image-qa.ps [1.2], lib/impath.ps [1.2], lib/jispaper.ps [1.2], +lib/lines.ps [1.2], lib/markhint.ps [1.2], lib/markpath.ps [1.2], +lib/packfile.ps [1.2], lib/pcharstr.ps [1.2], lib/pdf2dsc.ps [1.2], +lib/pdfopt.ps [1.3], lib/pdfwrite.ps [1.3], lib/pfbtopfa.ps [1.2], +lib/ppath.ps [1.2], lib/ps2ai.ps [1.2], lib/ps2ascii.ps [1.2], lib/ps2epsi +[1.4], lib/ps2epsi.ps [1.4], lib/showchar.ps [1.2], lib/stcinfo.ps [1.2], +lib/stcolor.ps [1.2], lib/stocht.ps [1.3], lib/traceimg.ps [1.2], +lib/traceop.ps [1.2], lib/type1enc.ps [1.2], lib/type1ops.ps [1.2], +lib/uninfo.ps [1.2], lib/unprot.ps [1.2], lib/viewcmyk.ps [1.2], +lib/viewgif.ps [1.2], lib/viewmiff.ps [1.2], lib/viewpbm.ps [1.2], +lib/viewpcx.ps [1.2], lib/viewps2a.ps [1.2], lib/wftopfa.ps [1.2], +lib/winmaps.ps [1.2], lib/wrfont.ps [1.2], lib/zeroline.ps [1.2]: +2000/09/19 18:29:11 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (bench.c [1.3], echogs.c [1.2]: +2000/09/19 19:00:08 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (genarch.c [1.2], genconf.c [1.3], +gendev.c [1.2], genht.c [1.2], geninit.c [1.3], gp_dvx.c [1.2], gp_iwatc.c +[1.4], gp_mktmp.c [1.2], gp_mshdl.c [1.2], gp_msio.c [1.2], gp_mslib.c +[1.2], gp_mswin.c [1.3], gp_ntfs.c [1.4], gp_os2.c [1.4], gp_os9.c [1.3], +gp_sysv.c [1.2], gp_unix.c [1.3], gp_vms.c [1.4], gp_wgetv.c [1.3], +gp_win32.c [1.2], gp_wsync.c [1.2], gs16spl.c [1.2]: 2000/09/19 19:00:23 +lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gsdll.c [1.3], gserver.c [1.2]: +2000/09/19 19:00:27 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gspmdrv.c [1.2]: 2000/09/19 +19:00:31 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (scfdgen.c [1.2]: 2000/09/19 +19:00:48 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (zdosio.c [1.2]: 2000/09/19 +19:00:53 lpd) + +When GSC environment variable is not set, gssetgs.bat fails to set it, which +makes ps2pdf.bat and several other scripts fail on Windows NT 4.0 with the +following misleading error message: "_.at" This file doesn't have a program +associated with it ... This change fixes the problem. +(lib/gssetgs.bat [1.2]: 2000/10/01 15:25:37 alexcher) + +</pre><h2><a name="6.30 Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - The PostScript image writing drivers (psmono/gray/rgb) didn't set +the page size in the output, and didn't produce DSC-compliant output. +(gdevps.c [1.11], gdevpsci.c [1.2], gdevpsim.c [1.3], gdevpsu.c [1.1], +gdevpsu.h [1.1]: 2000/08/09 06:55:45 lpd) + - the user-contributed cfax driver didn't correctly handle page +widths other than the standard fax widths, and didn't write the required +end-of-document marker. (gdevcfax.c [1.2]: 2000/08/17 04:43:25 lpd) + - Setting parameters for the PS/PDF writer reset any unspecified +*Dict parameter dictionaries to the empty dictionary, rather than leaving +them alone. (gdevpsdp.c [1.6]: 2000/08/18 03:18:59 lpd) + - BJC printers with different X and Y resolution produced incorrect +output. Also removes the comment asking users to report problems to Yves +Arrouye, since he no longer maintains this code. (gdevcdj.c [1.3]: +2000/08/21 14:43:17 lpd) + - The emulation of XPutImage (Ghostscript*useXPutImage: 0) was +broken. (gdevx.c [1.6]: 2000/08/21 17:23:26 lpd) + - Dictionary-valued device parameters for high-level devices could +be freed while the device still referred to them. (gdevpsdp.c [1.7]: +2000/08/31 15:55:46 lpd) + - Cleans up some missing and incorrect dependencies. +(gdevsco.c [1.2]: 2000/09/11 04:43:09 lpd) + - Works around a gcc code generation bug that sometimes caused gray +colors to be written out as RGB in PDF files. (Minor performance issue +only.) (gdevpsdu.c [1.6]: 2000/09/11 21:12:12 lpd) + - The pgnm and pnm drivers didn't properly detect the presence of +gray shades or color in images, sometimes causing gray or color information +to be lost in the output. (fix contributed by a user) (gdevpbm.c [1.3]: +2000/09/23 04:52:57 lpd) + +In the X Windows driver, changes XFlush() to XSync(False) so that updates +will actually complete before the command prompt appears. (gdevx.c [1.5], +gdevxini.c [1.8]: 2000/08/19 03:31:44 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdev3852.c [1.2], gdev3b1.c +[1.2], gdev4081.c [1.2], gdev8510.c [1.2], gdev8bcm.c [1.2], gdev8bcm.h +[1.2], gdevadmp.c [1.2], gdevatx.c [1.6], gdevbit.c [1.2], gdevbj10.c +[1.3], gdevbjc.h [1.2], gdevbjcl.c [1.2], gdevbjcl.h [1.2], gdevbmp.c +[1.3], gdevbmp.h [1.2], gdevbmpa.c [1.3], gdevbmpc.c [1.2], gdevccr.c +[1.2], gdevcdj.c [1.4], gdevcfax.c [1.3], gdevcgm.c [1.2], gdevcgml.c +[1.2], gdevcgml.h [1.2], gdevcgmx.h [1.2], gdevcif.c [1.2], gdevclj.c +[1.2], gdevcljc.c [1.2], gdevcp50.c [1.2], gdevcslw.c [1.2], gdevdcrd.c +[1.2], gdevdcrd.h [1.2], gdevdfax.c [1.3], gdevdjet.c [1.6], gdevdjtc.c +[1.2], gdevdljm.c [1.4], gdevdljm.h [1.4], gdevdm24.c [1.2], gdevegaa.asm +[1.2], gdevepsc.c [1.2], gdevepsn.c [1.2], gdevescp.c [1.2], gdevevga.c +[1.2], gdevfax.c [1.2], gdevfax.h [1.2], gdevherc.c [1.2], gdevhl7x.c +[1.3], gdevimgn.c [1.2], gdevjpeg.c [1.2], gdevl256.c [1.3], gdevl31s.c +[1.2], gdevlbp8.c [1.2], gdevlj56.c [1.2], gdevlp8k.c [1.2], gdevlxm.c +[1.2], gdevmeds.c [1.2]: 2000/09/19 19:00:11 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdevmeds.h [1.2], gdevmgr.c +[1.2], gdevmgr.h [1.2], gdevmiff.c [1.2], gdevmswn.c [1.2], gdevmswn.h +[1.2], gdevmsxf.c [1.2], gdevn533.c [1.2], gdevo182.c [1.2], gdevokii.c +[1.2], gdevos2p.c [1.3], gdevp2up.c [1.2], gdevpbm.c [1.2], gdevpccm.c +[1.2], gdevpccm.h [1.3], gdevpcfb.c [1.2], gdevpcfb.h [1.2], gdevpcl.c +[1.4]: 2000/09/19 19:00:14 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdevpcl.h [1.4], gdevpcx.c [1.2], +gdevpe.c [1.2]: 2000/09/19 19:00:17 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdevphex.c [1.2], gdevpjet.c +[1.2], gdevpm.c [1.2], gdevpm.h [1.2], gdevpng.c [1.3], gdevps.c [1.12], +gdevpsdf.h [1.8], gdevpsdi.c [1.12], gdevpsdp.c [1.8], gdevpsds.c [1.4], +gdevpsds.h [1.4], gdevpsdu.c [1.7], gdevpsim.c [1.4], gdevpsu.c [1.2], +gdevpsu.h [1.2], gdevpx.c [1.4], gdevpxat.h [1.3], gdevpxen.h [1.3], +gdevpxop.h [1.2], gdevpxut.c [1.2], gdevpxut.h [1.2], gdevs3ga.c [1.2], +gdevsco.c [1.3], gdevsj48.c [1.2], gdevsnfb.c [1.2], gdevsppr.c [1.2], +gdevstc.c [1.2], gdevstc.h [1.2], gdevstc1.c [1.2], gdevstc2.c [1.2], +gdevstc3.c [1.2], gdevstc4.c [1.2], gdevsun.c [1.2]: 2000/09/19 19:00:20 +lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdevsunr.c [1.2], gdevsvga.c +[1.2], gdevsvga.h [1.2], gdevtfax.c [1.4], gdevtfax.h [1.4], gdevtfnx.c +[1.3], gdevtifs.c [1.3], gdevtifs.h [1.3], gdevtknk.c [1.2], gdevupd.c +[1.3], gdevvglb.c [1.3], gdevwddb.c [1.2], gdevwdib.c [1.2], gdevwpr2.c +[1.5], gdevwprn.c [1.2], gdevx.c [1.7], gdevx.h [1.4], gdevxalt.c [1.2], +gdevxcmp.c [1.2], gdevxcmp.h [1.2], gdevxini.c [1.9], gdevxres.c [1.3], +gdevxxf.c [1.5]: 2000/09/19 19:00:23 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (png_.h [1.2]: 2000/09/19 19:00:47 +lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (x_.h [1.2]: 2000/09/19 19:00:52 +lpd) + +</pre><h2><a name="6.30 PDF writer"></a>PDF writer</h2><pre> + +Fixes problems: + - The SrcPg entry in ANN pdfmarks was (effectively) ignored. (bug +introduced between 5.50 and 6.01.) (gdevpdfm.c [1.5]: 2000/08/31 18:49:59 +lpd) + - When CompatibilityLevel < 1.4, transparency was ignored rather +than being rendered explicitly. (gdevpdfg.c [1.9]: 2000/09/11 21:13:49 lpd) + +Works around the bug in Acrobat Reader (all versions) that apparently treats +stroked fonts as filled fonts, ignoring the PaintType. (gdevpdft.c [1.15]: +2000/08/31 03:23:26 lpd) + +Adds the ability to write some PDF 1.4 constructs: graphics state parameters +AIS, BM, ca/CA, and TK, and images with soft masks (except for Matte). +(gdevpdfg.c [1.8], gdevpdfg.h [1.8], gdevpdfi.c [1.18]: 2000/09/11 02:14:09 +lpd) + +Adds the ability to write PDF 1.4 soft-masked images. (gdevpdfi.c [1.19], +gdevpdfo.c [1.4], gdevpdfo.h [1.4], gdevpdfv.c [1.2]: 2000/09/11 04:10:42 +lpd) + +Replaces "Distiller" with our program name in the Info Producer string. +(gdevpdf.c [1.20], gdevpdfm.c [1.6], gdevpdfu.c [1.11], gdevpdfx.h [1.21]: +2000/09/12 02:03:35 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdevpdf.c [1.21], gdevpdfb.c +[1.2], gdevpdfc.c [1.12], gdevpdfd.c [1.10], gdevpdfe.c [1.4], gdevpdff.c +[1.8], gdevpdff.h [1.4], gdevpdfg.c [1.10], gdevpdfg.h [1.9], gdevpdfi.c +[1.20], gdevpdfj.c [1.5], gdevpdfm.c [1.7], gdevpdfo.c [1.5], gdevpdfo.h +[1.5], gdevpdfp.c [1.10], gdevpdfr.c [1.4], gdevpdft.c [1.16], gdevpdfu.c +[1.12], gdevpdfv.c [1.3], gdevpdfw.c [1.5], gdevpdfx.h [1.22]: 2000/09/19 +19:00:17 lpd) + +</pre><h2><a name="6.30 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre> + +Fixes problems: + - PDF files with embedded CID fonts with FontName != BaseFont +(prohibited by the PDF specification, but produced by some Adobe software) +caused an error. (lib/pdf_font.ps [1.11], lib/pdf_ops.ps [1.8]: 2000/08/08 +22:29:12 lpd) + - Setting the color (fill or stroke) sometimes overwrote the color +associated with an outer gsave level. (lib/pdf_ops.ps [1.9]: 2000/08/24 +01:55:37 lpd) + - The PDF text rendering modes that included clipping (modes 4-7) +didn't work. The fix is a bit of a hack, but it's much closer to being +right. (lib/pdf_ops.ps [1.12]: 2000/08/31 02:05:55 lpd) + - The new code for detecting whether a page used any transparency +features could cause an error. (lib/pdf_main.ps [1.14]: 2000/09/10 18:48:26 +lpd) + - Filters with indirect object parameters caused an error. (Fix from +Artifex.) (lib/pdf_base.ps [1.9]: 2000/09/14 00:38:05 lpd) + - The page dictionary was left on the operand stack while the page +was being rendered, causing the sc[n]/SC[N] operators to give an error if +the color consisted of only a single value. (bug introduced after 6.23) +(lib/pdf_main.ps [1.18]: 2000/09/18 06:38:38 lpd) + +Puts the logic for detecting garbage after %%EOF (and some similar invalid +constructs) back into the main code, making it produce a message on stderr. +(lib/pdf_main.ps [1.11]: 2000/08/23 02:22:39 lpd) + +Implements the op, OP, and OPM (overprint control) elements of ExtGStates. +(lib/pdf_draw.ps [1.17], lib/pdf_ops.ps [1.10]: 2000/08/24 02:26:52 lpd) + +Implements the new PDF 1.4 scalar graphics state parameters (ca, CA, SMask, +AIS, BM, TK). The implementation of SMask is a stub. +(lib/pdf_draw.ps [1.18], lib/pdf_ops.ps [1.11]: 2000/08/24 03:04:29 lpd) + +If a PDF file is invalid but repairable, prints out the Producer as part of +the warning message. (lib/pdf_main.ps [1.12]: 2000/08/24 04:18:40 lpd) + +Adds most of the code needed to support PDF 1.4 transparency groups and soft +masks in the graphics state. (lib/pdf_draw.ps [1.19], lib/pdf_ops.ps [1.13]: +2000/09/08 04:54:10 lpd) + +Implements another chunk of the PDF 1.4 transparency features, fixing some +bugs in the previous code. (lib/pdf_draw.ps [1.20], lib/pdf_main.ps [1.13], +lib/pdf_ops.ps [1.14]: 2000/09/10 05:26:27 lpd) + +Moves the Matte entry of soft mask images from the main structure to the +mask structures, and changes Matted to has_Matte. (lib/pdf_draw.ps [1.21]: +2000/09/11 04:08:13 lpd) + +Renders pages that use any transparency features as transparency groups. +(lib/pdf_main.ps [1.15]: 2000/09/12 20:36:23 lpd) + +*** empty log message *** (lib/pdf_main.ps [1.16]: 2000/09/15 03:51:54 +alexcher) + +Undoes uncommented and in some cases inappropriate changes. +(lib/pdf_main.ps [1.17]: 2000/09/18 06:28:58 lpd) + +Updates the license notices to reflect the name change, and changes a few +other internal references. (lib/pdf_base.ps [1.10], lib/pdf_draw.ps [1.22], +lib/pdf_font.ps [1.12], lib/pdf_main.ps [1.19], lib/pdf_ops.ps [1.15], +lib/pdf_sec.ps [1.2]: 2000/09/19 18:29:11 lpd) + +</pre><h2><a name="6.30 Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - The FlateEncode and zlibEncode filters didn't implement the +"Effort" parameter. (fix from Alex Cherepanov) (zfzlib.c [1.2]: 2000/08/09 +16:55:25 lpd) + - The *ACSImageDict parameter dictionaries weren't being set for the +/default configuration; the *ACSImageDict parameters were never recognized, +because their names were spelled incorrectly as *ACSDict. (Two separate +bugs.) (lib/gs_pdfwr.ps [1.5]: 2000/08/18 03:20:12 lpd) + - When given an array of the wrong size, a number of operators +produced a limitcheck error rather than a rangecheck. (idparam.c [1.2], +idparam.h [1.2], zcie.c [1.3], zfont1.c [1.7], zfunc.c [1.5], +zfunc0.c [1.2], zimage2.c [1.2], zimage3.c [1.2], zpcolor.c [1.2], +zshade.c [1.3]: 2000/08/23 01:45:08 lpd) + - The stub implementations of .{set,current}{opacity,shape}mask +didn't {pop the argument}{push null}. (ztrans.c [1.2]: 2000/08/24 03:03:18 +lpd) + - The BeOS C compiler objected to some int/bool mismatches. +(icontext.c [1.5]: 2000/08/31 03:51:29 lpd) + - If changing LanguageLevels caused a dictionary to grow, memory +could be corrupted. (zmisc2.c [1.2]: 2000/08/31 14:43:58 lpd) + - Because "-" as an OutputFile now references the %stdout IODevice, +it no longer worked in configurations without a PostScript interpreter. +Fixing this required factoring out the stdin/out/err IODevices and providing +an implementation that didn't reference the PostScript interpreter. +(ziodev.c [1.2], ziodevs.c [1.1]: 2000/09/07 06:14:45 lpd) + - .LocalDefaults was stored in a local array in the (global) +ColorSpace category dictionary, causing memory anomalies with multiple +contexts. (lib/gs_ll3.ps [1.6], lib/gs_res.ps [1.13]: 2000/09/20 07:15:11 +lpd) + - A missing cast caused the picky OpenVMS compiler to complain. +(zdevcal.c [1.3]: 2000/09/22 04:18:17 lpd) + - Attempting to show an undefined character code in a TrueType font +with no .notdef entry caused an error. (lib/gs_ttf.ps [1.8]: 2000/09/23 +18:47:06 lpd) + +Initializes files for the 6.24 fileset. (lib/gs_init.ps [1.21]: 2000/08/09 +16:54:02 lpd) + +Adds the PDF "overprint mode" to the graphics state. THE ACTUAL +FUNCTIONALITY IS NOT IMPLEMENTED YET. (zcssepr.c [1.4]: 2000/08/23 17:54:16 +lpd) + +Starts to implement the PDF 1.4 transparency features. All API and operator +additions are now implemented (at least as stubs) and documented, as is +bookkeeping for the new scalar graphics state members (but not for the soft +masks or the transparency group stack). (ztrans.c [1.1]: 2000/08/23 21:46:31 +lpd) + +Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc. +and banding don't do the right thing yet. (igstate.h [1.2], ztrans.c [1.3]: +2000/08/25 01:46:48 lpd) + +Implements some minor improvements to the freelist algorithms that can +produce nearly a factor of 2 speedup in some allocation-intensive +situations. (isave.c [1.2]: 2000/08/26 03:21:34 lpd) + +Brings the (still mostly stubbed) transparency code to a more +self-consistent state. (ztrans.c [1.4]: 2000/08/30 01:34:40 lpd) + +Finishes the code for parsing ImageType 103 (soft-mask) images. +(ztrans.c [1.5]: 2000/08/30 04:30:06 lpd) + +Completes the parsing of .{begin,end}transparency{group,mask}, except for +the TransferFunction for masks. The specification is still subject to +change. (ztrans.c [1.6]: 2000/08/30 15:03:36 lpd) + +*Really* finishes the transparency rendering stack operators (the previous +version didn't even compile), except for TransferFunction. (ztrans.c [1.7]: +2000/08/30 21:11:55 lpd) + +Implements another chunk of the PDF 1.4 transparency features, fixing some +bugs in the previous code. (lib/gs_ll3.ps [1.4], ztrans.c [1.8]: 2000/09/10 +05:26:27 lpd) + +Checks that the TransferFunction of a soft mask is 1-in, 1-out; sets Matted +correctly in the soft mask parameters passed to the graphics library. +(ztrans.c [1.9]: 2000/09/11 02:10:28 lpd) + +Moves the Matte entry of soft mask images from the main structure to the +mask structures, and changes Matted to has_Matte. (ztrans.c [1.10]: +2000/09/11 04:08:13 lpd) + +Upgrades the proposed driver interface transparency extension from comments +to macros, changing the name 'discard_transparency_level' to +'discard_transparency_layer'. (ztrans.c [1.11]: 2000/09/11 20:13:31 lpd) + +*** empty log message *** (lib/gs_init.ps [1.22], zmatrix.c [1.2]: +2000/09/14 19:46:05 alexcher) + +Undoes uncommented and in some cases inappropriate changes. +(lib/gs_init.ps [1.23], zmatrix.c [1.3]: 2000/09/18 06:28:58 lpd) + +Updates the license notice to reflect the name change, and changes a few +other internal references. (lib/gs_agl.ps [1.2], lib/gs_btokn.ps [1.3], +lib/gs_ccfnt.ps [1.4], lib/gs_ce_e.ps [1.2], lib/gs_cff.ps [1.7], +lib/gs_cidfn.ps [1.17], lib/gs_cmap.ps [1.6], lib/gs_cmdl.ps [1.2], +lib/gs_css_e.ps [1.2], lib/gs_dbt_e.ps [1.2], lib/gs_diskf.ps [1.2], +lib/gs_dpnxt.ps [1.2], lib/gs_dps.ps [1.4], lib/gs_dps1.ps [1.2], +lib/gs_dps2.ps [1.2], lib/gs_epsf.ps [1.2], lib/gs_fform.ps [1.2], +lib/gs_fonts.ps [1.9], lib/gs_frsd.ps [1.4], lib/gs_il1_e.ps [1.2], +lib/gs_il2_e.ps [1.2], lib/gs_init.ps [1.24], lib/gs_kanji.ps [1.2], +lib/gs_ksb_e.ps [1.2], lib/gs_l2img.ps [1.2], lib/gs_lev2.ps [1.6], +lib/gs_lgo_e.ps [1.3], lib/gs_lgx_e.ps [1.2], lib/gs_ll3.ps [1.5], +lib/gs_mex_e.ps [1.2], lib/gs_mgl_e.ps [1.3], lib/gs_mro_e.ps [1.2], +lib/gs_pdf_e.ps [1.2], lib/gs_pdfwr.ps [1.6], lib/gs_pfile.ps [1.2], +lib/gs_rdlin.ps [1.2], lib/gs_res.ps [1.12], lib/gs_setpd.ps [1.5], +lib/gs_statd.ps [1.4], lib/gs_std_e.ps [1.2], lib/gs_sym_e.ps [1.2], +lib/gs_trap.ps [1.3], lib/gs_ttf.ps [1.7], lib/gs_typ32.ps [1.2], +lib/gs_typ42.ps [1.2], lib/gs_type1.ps [1.4], lib/gs_wan_e.ps [1.2], +lib/gs_wl1_e.ps [1.2], lib/gs_wl2_e.ps [1.2], lib/gs_wl5_e.ps [1.2]: +2000/09/19 18:29:11 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (bfont.h [1.3], btoken.h [1.4], +ccfont.h [1.2], dpmainc.c [1.2], dstack.h [1.2], dwdll.cpp [1.2], dwdll.h +[1.2], dwimg.cpp [1.2], dwimg.h [1.2], dwinst.cpp [1.2], dwinst.h [1.2], +dwmain.cpp [1.2], dwmain.h [1.2], dwmainc.cpp [1.3], dwnodll.cpp [1.2], +dwsetup.cpp [1.3], dwsetup.h [1.2], dwtext.cpp [1.2], dwtext.h [1.2], +dwuninst.cpp [1.2], dwuninst.h [1.2], errors.h [1.2], estack.h [1.2], +files.h [1.2]: 2000/09/19 19:00:09 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (ghost.h [1.2], gs.c [1.2]: +2000/09/19 19:00:23 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (ialloc.c [1.2], ialloc.h [1.2], +iastate.h [1.2], iastruct.h [1.2], ibnum.c [1.2], ibnum.h [1.2], iccfont.c +[1.2], iccinit0.c [1.2], icfontab.c [1.2], ichar.h [1.3], ichar1.h [1.3], +icharout.h [1.2], icid.h [1.2], icie.h [1.2], icolor.h [1.2], iconf.c +[1.2], icontext.c [1.6], icontext.h [1.2], icremap.h [1.2], icsmap.h [1.2], +icstate.h [1.4], iddict.h [1.2], iddstack.h [1.2], idebug.c [1.2], idebug.h +[1.2], idict.c [1.2], idict.h [1.2], idictdef.h [1.2], idosave.h [1.2], +idparam.c [1.3], idparam.h [1.3], idsdata.h [1.2], idstack.c [1.2], +idstack.h [1.2], iesdata.h [1.2], iestack.h [1.2], ifcid.h [1.2], ifilter.h +[1.3], ifilter2.h [1.2], ifont.h [1.4], ifont1.h [1.3], ifont2.h [1.2], +ifont42.h [1.3], ifrpred.h [1.2], ifunc.h [1.3], ifwpred.h [1.2], igc.c +[1.2]: 2000/09/19 19:00:41 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (igc.h [1.2], igcref.c [1.2], +igcstr.c [1.3], igcstr.h [1.2], igstate.h [1.3], iht.h [1.2], iimage.h +[1.2], iimage2.h [1.2], iinit.c [1.2], iinit.h [1.2], ilevel.h [1.2], +ilocate.c [1.3], imain.c [1.2], imain.h [1.2], imainarg.c [1.4], imainarg.h +[1.2], imemory.h [1.2], iminst.h [1.2], iname.c [1.3], iname.h [1.2], +inamedef.h [1.2], inameidx.h [1.2], inames.h [1.2], inamestr.h [1.2], +inobtokn.c [1.2], inouparm.c [1.2], interp.c [1.6], interp.h [1.2], +iosdata.h [1.2], iostack.h [1.2], ipacked.h [1.2], iparam.c [1.5], iparam.h +[1.2], iparray.h [1.2], ipcolor.h [1.2], ireclaim.c [1.2], iref.h [1.3], +isave.c [1.3], isave.h [1.2], iscan.c [1.5], iscan.h [1.4], iscanbin.c +[1.5], iscanbin.h [1.2], iscannum.c [1.2], iscannum.h [1.2], isdata.h +[1.2], isstate.h [1.2], istack.c [1.2], istack.h [1.2], istkparm.h [1.2], +istream.h [1.2], istruct.h [1.2], itoken.h [1.2], iutil.c [1.2], iutil.h +[1.2], iutil2.c [1.2], iutil2.h [1.2], ivmem2.h [1.2]: 2000/09/19 19:00:44 +lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (ivmspace.h [1.2], main.h [1.2], +oparc.h [1.2], opcheck.h [1.2], opdef.h [1.2], oper.h [1.2], opextern.h +[1.2], ostack.h [1.2], sbhc.c [1.2], sbhc.h [1.2], sbwbs.c [1.2], sbwbs.h +[1.2], sfilter1.c [1.5]: 2000/09/19 19:00:47 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (shcgen.c [1.2], shcgen.h [1.2], +smtf.c [1.2], smtf.h [1.2], store.h [1.2], zarith.c [1.4], zarray.c [1.2], +zbfont.c [1.6], zbseq.c [1.4], zcfont.c [1.2], zchar.c [1.3], zchar1.c +[1.5], zchar2.c [1.2], zchar32.c [1.2], zchar42.c [1.2], zcharout.c [1.2], +zcharx.c [1.3], zcid.c [1.3], zcie.c [1.4], zcolor.c [1.4]: 2000/09/19 +19:00:50 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (zcolor1.c [1.3], zcolor2.c [1.3], +zcontext.c [1.6], zcontrol.c [1.3], zcrd.c [1.2], zcsdevn.c [1.3], +zcsindex.c [1.3], zcspixel.c [1.2], zcssepr.c [1.5], zdevcal.c [1.2], +zdevice.c [1.3], zdevice2.c [1.3], zdict.c [1.3], zdouble.c [1.2], +zdpnext.c [1.2], zdps.c [1.4], zdps1.c [1.2], zfbcp.c [1.3], zfcid.c +[1.10], zfcid0.c [1.4], zfcid1.c [1.2], zfcmap.c [1.8], zfdctd.c [1.3], +zfdcte.c [1.3], zfdecode.c [1.3], zfile.c [1.5], zfileio.c [1.9], zfilter.c +[1.4], zfilter2.c [1.3], zfilterx.c [1.2], zfmd5.c [1.2], zfont.c [1.2], +zfont0.c [1.3], zfont1.c [1.8], zfont2.c [1.3], zfont32.c [1.2], zfont42.c +[1.5], zfproc.c [1.4], zfrsd.c [1.4], zfunc.c [1.6], zfunc0.c [1.3], +zfunc3.c [1.2], zfunc4.c [1.5], zfzlib.c [1.3], zgeneric.c [1.3], zgstate.c +[1.2], zhsb.c [1.2], zht.c [1.2], zht1.c [1.2], zht2.c [1.2], zimage.c +[1.5], zimage2.c [1.3], zimage3.c [1.3], ziodev.c [1.3], ziodev2.c [1.3], +ziodevs.c [1.2], zmath.c [1.3], zmatrix.c [1.4], zmedia2.c [1.2], zmisc.c +[1.2], zmisc1.c [1.3], zmisc2.c [1.3], zmisc3.c [1.2], zpacked.c [1.2], +zpaint.c [1.2], zpath.c [1.2], zpath1.c [1.2], zpcolor.c [1.3], zrelbit.c +[1.2], zrop.c [1.2], zshade.c [1.4], zstack.c [1.2], zstring.c [1.2], +zsysvm.c [1.2], ztoken.c [1.6], ztrans.c [1.12], ztrap.c [1.2], ztype.c +[1.3], zupath.c [1.2], zusparam.c [1.3], zvmem.c [1.2], zvmem2.c [1.2]: +2000/09/19 19:00:53 lpd) + +Change to avoid multiply defined rect_param when NOPRIVATE is used. This +module uses 4 element X/Y/width/Height, not a gs_rect so xywh_param is a +better name. (zdpnext.c [1.3]: 2000/09/21 15:12:01 rayjj) + +Changes the default Windows installation directory from c:\Aladdin to c:\gs. +(dwsetup.cpp [1.4]: 2000/09/22 05:32:17 lpd) + +Changes the default Windows Start Menu Folder from "Aladdin" to +"Ghostscript". (dwsetup.cpp [1.5]: 2000/09/22 05:35:02 lpd) + +Documentation changes in preparation for 6.30 release. Replaced some contact +information, updated version numbers. (lib/gs_init.ps [1.25]: 2000/10/04 +04:33:29 raph) + +</pre><h2><a name="6.30 Streams"></a>Streams</h2><pre> + +Fixes problems: + - s_add_filter used min_out_size rather than min_in_size for the +minimum buffer size, which could cause an endless loop when writing to the +filter. (This only affected filters allocated by C code, not by the +PostScript filter operator.) (stream.c [1.7], stream.h [1.6]: 2000/08/16 +01:26:22 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (sa85d.c [1.2], sa85d.h [1.2], +sa85x.h [1.3], sbcp.c [1.3], sbcp.h [1.2], sbtx.h [1.2], scanchar.h [1.2], +scantab.c [1.2], scf.h [1.2], scfd.c [1.2], scfe.c [1.2], scfetab.c [1.2], +scfparam.c [1.2], scfx.h [1.2], scommon.h [1.2], sdcparam.c [1.2], +sdcparam.h [1.2], sdct.h [1.2], sdctc.c [1.2], sdctd.c [1.2], sdcte.c +[1.2], sddparam.c [1.2], sdeparam.c [1.2], seexec.c [1.3], sfilter.h [1.6], +sfilter2.c [1.3], sfxboth.c [1.2], sfxfd.c [1.5]: 2000/09/19 19:00:47 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (sfxstdio.c [1.4], shc.c [1.2], +shc.h [1.2], siinterp.c [1.2], siinterp.h [1.2], siscale.c [1.4], siscale.h +[1.2], sisparam.h [1.2], sjpeg.h [1.2], sjpegc.c [1.2], sjpegd.c [1.2], +sjpege.c [1.2], slzwc.c [1.2], slzwce.c [1.2], slzwd.c [1.2], slzwx.h +[1.2], smd5.c [1.3], smd5.h [1.2], spdiff.c [1.3], spdiffx.h [1.2], spngp.c +[1.2], spngpx.h [1.2], spprint.c [1.2], spprint.h [1.2], spsdf.c [1.4], +spsdf.h [1.2], srdline.h [1.2], srld.c [1.2], srle.c [1.2], srlx.h [1.2], +sstring.c [1.2], sstring.h [1.2], stat_.h [1.5], std.h [1.3], stdio_.h +[1.2], stdpre.h [1.2], stream.c [1.8], stream.h [1.7], strimpl.h [1.2], +string_.h [1.2], szlibc.c [1.2], szlibd.c [1.2], szlibe.c [1.2], szlibx.h +[1.2], szlibxx.h [1.2]: 2000/09/19 19:00:50 lpd) + +</pre><h2><a name="6.30 Library"></a>Library</h2><pre> + +Fixes problems: + - Parameter lists didn't have proper GC descriptors; garbage +collection could mangle keys and collection values in non-transient +parameter lists (such as distiller parameters). (gscparam.c [1.5]: +2000/08/19 03:01:30 lpd) + - gdev_vector_dopath could return 1, which value was then propagated +to callers that interpreted it differently. (gdevvec.c [1.5], +gdevvec.h [1.3]: 2000/08/20 00:21:42 lpd) + - An AIX compiler could get confused if the last elements of a +structure were individual bytes. (gzpath.h [1.2]: 2000/08/24 19:43:48 lpd) + - If the OutputFile of a high-level device was ever set, any +subsequent execution of setpagedevice would cause a rangecheck in +.installpagedevice. (gdevvec.c [1.6]: 2000/08/31 02:04:50 lpd) + - Type 2 CharStrings didn't insert an explicit closepath at the end +of each subpath. (This matters for charpath followed by stroke.) +(gstype2.c [1.5]: 2000/08/31 02:16:45 lpd) + - Type 2 fonts should insert an explicit closepath only if the +font's PaintType != 1. (gstype2.c [1.6]: 2000/08/31 03:21:45 lpd) + - The BeOS C compiler objected to some int/bool mismatches. +(gp.h [1.4], gxfill.c [1.4], gxtext.h [1.2]: 2000/08/31 03:51:29 lpd) + - Because "-" as an OutputFile now references the %stdout IODevice, +it no longer worked in configurations without a PostScript interpreter. +Fixing this required factoring out the stdin/out/err IODevices and providing +an implementation that didn't reference the PostScript interpreter. +(gsiodevs.c [1.1], gslib.c [1.2]: 2000/09/07 06:14:45 lpd) + - Fixes a type error caused by a change in the TransferFunction +member of gs_transparency_mask_params_t. (gstrans.c [1.7]: 2000/09/10 +18:20:09 lpd) + - Several places in the code for ImageType 3x (soft-masked) images +didn't correctly handle the case where only one of the two masks was +supplied (which is always the case for PDF). (gximag3x.c [1.4]: 2000/09/11 +02:12:19 lpd) + - The -Zv tracing messages for gs_begin_transparency_{group,mask} +were incorrect. (gstrans.c [1.10]: 2000/09/12 20:35:05 lpd) + - Printing the program name and version didn't use fprintf, so it +didn't work properly with the stdout redirection on Windows. (fix from +Artifex) (gsmisc.c [1.7]: 2000/09/18 06:22:35 lpd) + - Undefined characters in CID-keyed (FMapType 9) composite fonts +caused an infinite loop, because the parsing index was never advanced past +the character. (gsfcmap.c [1.7]: 2000/09/21 02:44:44 lpd) + - CID-keyed (FMapType 9) composite fonts didn't return the correct +parsed character code, possibly causing widthshow or cshow to produce +incorrect output. (gsfcmap.c [1.8], gsfcmap.h [1.4]: 2000/09/21 03:02:03 +lpd) + - Works around ANSI C's unreasonable new aliasing restrictions. +(gsnogc.c [1.5]: 2000/09/22 04:17:52 lpd) + - The 'head' table in embedded TrueType fonts had a length of 56; it +should have a length of 54 and be followed by 2 padding bytes. +(gdevpsft.c [1.4]: 2000/09/26 06:42:05 lpd) + +Initializes files for the 6.24 fileset. (gscdef.c [1.7]: 2000/08/09 16:54:02 +lpd) + +Adds the PDF "overprint mode" to the graphics state. THE ACTUAL +FUNCTIONALITY IS NOT IMPLEMENTED YET. (gscsepr.c [1.4], gscsepr.h [1.3], +gsstate.c [1.2], gxclpath.c [1.3], gxclpath.h [1.2], gxclrast.c [1.4], +gxistate.h [1.2]: 2000/08/23 17:54:14 lpd) + +Starts to implement the PDF 1.4 transparency features. All API and operator +additions are now implemented (at least as stubs) and documented, as is +bookkeeping for the new scalar graphics state members (but not for the soft +masks or the transparency group stack). (gsistate.c [1.2], gsstate.c [1.3], +gstparam.h [1.1], gstrans.c [1.1], gstrans.h [1.1], gxclpath.c [1.4], +gxclpath.h [1.3], gxclrast.c [1.5], gxistate.h [1.3], gzstate.h [1.2]: +2000/08/23 21:46:31 lpd) + +Adds a new equality-testing virtual procedure for color spaces. +(gscdevn.c [1.4], gscolor2.c [1.5], gscpixel.c [1.2], gscscie.c [1.2], +gscsepr.c [1.5], gscspace.c [1.3], gscspace.h [1.3], gspcolor.c [1.3], +gxcspace.h [1.3]: 2000/08/24 05:42:30 lpd) + +Changes the band list representation of mask images to allow +BitsPerComponent > 1 (for soft masks). (gximage1.c [1.2]: 2000/08/24 +17:58:18 lpd) + +Adds Matte and has_Matte members to ImageType 1 images. These are only used +with the new transparency features. (gsiparam.h [1.2], gximage1.c [1.3]: +2000/08/24 19:20:12 lpd) + +Partly implements opacity and shape mask bookkeeping. gsave/grestore/etc. +and banding don't do the right thing yet. (gstparam.h [1.2], +gstrans.c [1.2], gstrans.h [1.2], gxcldev.h [1.2], gxclpath.c [1.5], +gxclpath.h [1.4]: 2000/08/25 01:46:48 lpd) + +Changes remove_range_from_freelist to only scan relevant freelists, rather +than all of them. On some files, the speedup is dramatic. (gsalloc.c [1.6]: +2000/08/26 01:18:33 lpd) + +Completes an edit that accidentally left the repository in an inconsistent +state. (gxclpath.c [1.6], gxclrast.c [1.6]: 2000/08/26 03:19:56 lpd) + +Implements some minor improvements to the freelist algorithms that can +produce nearly a factor of 2 speedup in some allocation-intensive +situations. (gsalloc.c [1.7], gxalloc.h [1.4]: 2000/08/26 03:21:34 lpd) + +Brings the (still mostly stubbed) transparency code to a more +self-consistent state. (gsipar3x.h [1.1], gsiparam.h [1.3], +gsstruct.h [1.4], gstparam.h [1.3], gstrans.c [1.3], gstrans.h [1.3], +gxclpath.c [1.7], gxclpath.h [1.5], gxclrast.c [1.7], gximag3x.c [1.1], +gximag3x.h [1.1], gximage1.c [1.4], gxistate.h [1.4]: 2000/08/30 01:34:40 +lpd) + +Finishes the code for parsing ImageType 103 (soft-mask) images. +(gximag3x.c [1.2]: 2000/08/30 04:29:56 lpd) + +Completes the parsing of .{begin,end}transparency{group,mask}, except for +the TransferFunction for masks. The specification is still subject to +change. (gstparam.h [1.4], gstrans.c [1.4], gstrans.h [1.4]: 2000/08/30 +15:03:36 lpd) + +Adds documentation on proposed driver interface additions for managing the +transparency rendering stack. (gstrans.c [1.5]: 2000/08/31 20:22:47 lpd) + +Adds color space type names for tracing/debugging. (gscspace.h [1.4]: +2000/09/10 05:21:44 lpd) + +Changes the -Zv switch to trace alpha/transparency-related features. +(gdevabuf.c [1.2]: 2000/09/10 05:23:10 lpd) + +Implements another chunk of the PDF 1.4 transparency features, fixing some +bugs in the previous code. (gstparam.h [1.5], gstrans.c [1.6], +gximag3x.c [1.3]: 2000/09/10 05:26:27 lpd) + +Moves the Matte entry of soft mask images from the main structure to the +mask structures, and changes Matted to has_Matte. (gsipar3x.h [1.2], +gximag3x.c [1.5], gximag3x.h [1.2]: 2000/09/11 04:08:13 lpd) + +Adds a default implementation of soft-masked images that simply ignores the +mask. (gximag3x.c [1.6]: 2000/09/11 04:38:01 lpd) + +Upgrades the proposed driver interface transparency extension from comments +to macros, changing the name 'discard_transparency_level' to +'discard_transparency_layer'. (gstrans.c [1.8], gstrans.h [1.5]: 2000/09/11 +20:13:31 lpd) + +Finishes the (dummy) implementation of the transparency layer stack in the +graphics library. (gsistate.c [1.3], gsstate.c [1.4], gstparam.h [1.6], +gstrans.c [1.9], gxistate.h [1.5]: 2000/09/11 22:20:05 lpd) + +Makes the default string matching parameters public. (gsutil.c [1.3], +gsutil.h [1.2]: 2000/09/12 02:02:52 lpd) + +*** empty log message *** (gsmisc.c [1.6]: 2000/09/15 03:01:51 alexcher) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (close_.h [1.2], ctype_.h [1.2], +dirent_.h [1.2], dos_.h [1.2], errno_.h [1.2], fcntl_.h [1.3], gconf.c +[1.2], gconf.h [1.2], gdebug.h [1.2], gdevabuf.c [1.3], gdevalph.c [1.2], +gdevbbox.c [1.3], gdevbbox.h [1.2]: 2000/09/19 19:00:09 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdevcmap.c [1.2], gdevcmap.h +[1.2], gdevdbit.c [1.2], gdevddrw.c [1.2], gdevdflt.c [1.3], gdevdgbr.c +[1.2], gdevdrop.c [1.3], gdevemap.c [1.2], gdevhit.c [1.2], gdevht.c [1.3], +gdevht.h [1.2], gdevm1.c [1.2], gdevm16.c [1.2], gdevm2.c [1.2], gdevm24.c +[1.2], gdevm32.c [1.2], gdevm4.c [1.2], gdevm8.c [1.2], gdevmem.c [1.2], +gdevmem.h [1.3], gdevmpla.c [1.2], gdevmpla.h [1.2], gdevmr1.c [1.2], +gdevmr2n.c [1.2], gdevmr8n.c [1.2], gdevmrop.h [1.3], gdevmrun.c [1.2], +gdevmrun.h [1.2], gdevnfwd.c [1.3]: 2000/09/19 19:00:12 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdevpipe.c [1.3], gdevplnx.c +[1.2], gdevplnx.h [1.2], gdevppla.c [1.2], gdevppla.h [1.2], gdevprn.c +[1.5], gdevprn.h [1.6], gdevprna.c [1.2], gdevprna.h [1.2], gdevpsf.h +[1.7], gdevpsf1.c [1.5], gdevpsf2.c [1.7], gdevpsfm.c [1.3], gdevpsft.c +[1.3], gdevpsfu.c [1.4], gdevpsfx.c [1.5], gdevrops.c [1.3]: 2000/09/19 +19:00:20 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gdevtrac.c [1.2], gdevvec.c +[1.7], gdevvec.h [1.4], gp.h [1.5], gp_dosfe.c [1.2], gp_dosfs.c [1.2], +gp_getnv.c [1.2], gp_msdos.c [1.2], gp_nsync.c [1.2], gp_psync.c [1.2], +gp_strdl.c [1.2], gp_unifn.c [1.2], gp_unifs.c [1.3], gpcheck.h [1.2], +gpgetenv.h [1.2], gpmisc.c [1.7], gpmisc.h [1.2], gpsync.h [1.2], gsalloc.c +[1.8], gsalloc.h [1.2], gsalpha.c [1.2], gsalpha.h [1.2], gsalphac.c [1.2], +gsalphac.h [1.2], gsargs.c [1.2], gsargs.h [1.3], gsbitmap.h [1.2], +gsbitops.c [1.2], gsbitops.h [1.2], gsbittab.c [1.2], gsbittab.h [1.2]: +2000/09/19 19:00:23 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gsccode.h [1.4], gsccolor.h +[1.2], gscdef.c [1.8], gscdefs.h [1.2], gscdevn.c [1.5], gscdevn.h [1.3], +gschar.c [1.3], gschar.h [1.3], gschar0.c [1.2], gscie.c [1.3], gscie.h +[1.2], gsciemap.c [1.3], gscindex.h [1.2], gsclipsr.c [1.2], gsclipsr.h +[1.2], gscolor.c [1.4], gscolor.h [1.3], gscolor1.c [1.3], gscolor1.h +[1.2], gscolor2.c [1.6], gscolor2.h [1.3], gscolor3.c [1.4], gscolor3.h +[1.2], gscompt.h [1.2], gscoord.c [1.5], gscoord.h [1.2], gscparam.c [1.6], +gscpixel.c [1.3], gscpixel.h [1.2], gscpm.h [1.2], gscrd.c [1.2], gscrd.h +[1.2], gscrdp.c [1.2], gscrdp.h [1.2], gscrypt1.c [1.2], gscrypt1.h [1.2], +gscscie.c [1.3], gscsel.h [1.2], gscsepnm.h [1.2], gscsepr.c [1.6], +gscsepr.h [1.4], gscspace.c [1.4], gscspace.h [1.5], gscssub.c [1.2], +gscssub.h [1.2], gsdcolor.h [1.3], gsdevice.c [1.7], gsdevice.h [1.3], +gsdevmem.c [1.2], gsdparam.c [1.4], gsdpnext.h [1.2], gsdps.c [1.2], +gsdps.h [1.2], gsdps1.c [1.2], gsdsrc.c [1.2], gsdsrc.h [1.3], gserror.h +[1.2], gserrors.h [1.2], gsexit.h [1.2], gsfcid.c [1.4], gsfcmap.c [1.6], +gsfcmap.h [1.3], gsfemu.c [1.2], gsflip.c [1.2], gsflip.h [1.2], gsfname.c +[1.2], gsfname.h [1.2], gsfont.c [1.2], gsfont.h [1.2], gsfont0.c [1.2], +gsfunc.c [1.4], gsfunc.h [1.4], gsfunc0.c [1.3], gsfunc0.h [1.2], gsfunc3.c +[1.4], gsfunc3.h [1.2], gsfunc4.c [1.3], gsfunc4.h [1.2], gsfuncv.c [1.2], +gsfuncv.h [1.2]: 2000/09/19 19:00:26 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gsgc.h [1.2], gshsb.c [1.2], +gshsb.h [1.2], gsht.c [1.2], gsht.h [1.2], gsht1.c [1.2], gsht1.h [1.2], +gshtscr.c [1.3], gshtx.c [1.2], gshtx.h [1.2], gsimage.c [1.3], gsimage.h +[1.2], gsimpath.c [1.2], gsinit.c [1.2], gsio.h [1.4], gsiodev.c [1.3], +gsiodevs.c [1.2], gsipar3x.h [1.3], gsiparam.h [1.4], gsiparm2.h [1.2], +gsiparm3.h [1.4], gsiparm4.h [1.2], gsistate.c [1.4], gsjconf.h [1.2], +gslib.c [1.3], gslib.h [1.2], gsline.c [1.2], gsline.h [1.2], gslparam.h +[1.2], gsmalloc.c [1.3], gsmalloc.h [1.2], gsmatrix.c [1.2], gsmatrix.h +[1.2], gsmdebug.h [1.2], gsmemlok.c [1.3], gsmemlok.h [1.2], gsmemory.c +[1.2], gsmemory.h [1.2], gsmemraw.h [1.2], gsmemret.c [1.2], gsmemret.h +[1.2], gsmisc.c [1.8], gsnogc.c [1.4], gsnogc.h [1.2], gsnorop.c [1.2], +gsnotify.c [1.2], gsnotify.h [1.2], gspaint.c [1.2], gspaint.h [1.2], +gsparam.c [1.4], gsparam.h [1.7], gsparam2.c [1.2], gsparams.c [1.2], +gsparams.h [1.2], gsparamx.c [1.3], gsparamx.h [1.3], gspath.c [1.2], +gspath.h [1.2], gspath1.c [1.2], gspath2.h [1.2], gspcolor.c [1.4], +gspcolor.h [1.2], gspenum.h [1.2], gsptype1.c [1.2], gsptype1.h [1.2]: +2000/09/19 19:00:29 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gsptype2.c [1.3], gsptype2.h +[1.2], gsrect.h [1.2], gsrefct.h [1.2], gsrop.c [1.2], gsrop.h [1.2], +gsropc.c [1.2], gsropc.h [1.2], gsropt.h [1.3], gsroptab.c [1.2], gsshade.c +[1.3], gsshade.h [1.3], gsstate.c [1.5], gsstate.h [1.2], gsstruct.h [1.5], +gsstype.h [1.2], gstext.c [1.3], gstext.h [1.3], gstparam.h [1.7], +gstrans.c [1.11], gstrans.h [1.6], gstrap.c [1.3], gstrap.h [1.3], +gstype1.c [1.5], gstype1.h [1.2], gstype2.c [1.7], gstype42.c [1.7], +gstypes.h [1.2], gsuid.h [1.2], gsutil.c [1.4], gsutil.h [1.3], gsxfont.h +[1.2], gx.h [1.2], gxacpath.c [1.3], gxalloc.h [1.5], gxalpha.h [1.2], +gxarith.h [1.2], gxband.h [1.2], gxbcache.c [1.2], gxbcache.h [1.2], +gxbitfmt.h [1.2], gxbitmap.h [1.2], gxbitops.h [1.2], gxccache.c [1.2], +gxccman.c [1.2], gxcdevn.h [1.2], gxchar.c [1.2], gxchar.h [1.2], +gxchrout.c [1.2], gxchrout.h [1.2], gxcht.c [1.2], gxcid.h [1.3], gxcie.h +[1.2], gxcindex.h [1.2], gxclbits.c [1.2], gxcldev.h [1.3], gxclfile.c +[1.2], gxclimag.c [1.2], gxclio.h [1.2], gxclip.c [1.3], gxclip.h [1.2], +gxclip2.c [1.3], gxclip2.h [1.2], gxclipm.c [1.3], gxclipm.h [1.2], +gxclipsr.h [1.2], gxclist.c [1.3], gxclist.h [1.2], gxcllzw.c [1.2], +gxclmem.c [1.2], gxclmem.h [1.2]: 2000/09/19 19:00:32 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gxclpage.c [1.2], gxclpage.h +[1.2], gxclpath.c [1.8], gxclpath.h [1.6], gxclrast.c [1.8], gxclread.c +[1.2], gxclrect.c [1.2], gxclutil.c [1.2], gxclzlib.c [1.2], gxcmap.c +[1.3], gxcmap.h [1.2], gxcolor2.h [1.4], gxcomp.h [1.2], gxcoord.h [1.2], +gxcpath.c [1.3], gxcpath.h [1.2], gxcspace.h [1.4], gxctable.c [1.3], +gxctable.h [1.2], gxcvalue.h [1.2], gxdcconv.c [1.3], gxdcconv.h [1.2], +gxdcolor.c [1.3], gxdcolor.h [1.3], gxdda.h [1.2], gxdevbuf.h [1.2], +gxdevcli.h [1.3], gxdevice.h [1.4], gxdevmem.h [1.2], gxdevrop.h [1.2], +gxdht.h [1.4], gxdhtres.h [1.2], gxdither.c [1.2], gxdither.h [1.2], +gxfarith.h [1.3], gxfcache.h [1.2], gxfcid.h [1.6], gxfcmap.h [1.5], +gxfill.c [1.5], gxfixed.h [1.2], gxfmap.h [1.3], gxfont.h [1.2], gxfont0.h +[1.3], gxfont1.h [1.4], gxfont42.h [1.4], gxfrac.h [1.2], gxftype.h [1.2], +gxfunc.h [1.3], gxgetbit.h [1.2], gxhint1.c [1.2], gxhint2.c [1.2], +gxhint3.c [1.2], gxht.c [1.2], gxht.h [1.2], gxhtbit.c [1.3], gxhttile.h +[1.2], gxhttype.h [1.2], gxi12bit.c [1.2], gxiclass.h [1.2], gxicolor.c +[1.2], gxidata.c [1.4], gxifast.c [1.2], gximag3x.c [1.7]: 2000/09/19 +19:00:35 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gximag3x.h [1.3], gximage.c +[1.2], gximage.h [1.2], gximage1.c [1.5], gximage2.c [1.2], gximage3.c +[1.6], gximage3.h [1.4], gximage4.c [1.3], gximono.c [1.2], gxino12b.c +[1.2], gxiodev.h [1.2], gxiparam.h [1.2], gxipixel.c [1.2], gxiscale.c +[1.2], gxistate.h [1.6], gxline.h [1.2], gxlum.h [1.2], gxmatrix.h [1.4], +gxmclip.c [1.2], gxmclip.h [1.2], gxobj.h [1.2], gxop1.h [1.2], gxp1fill.c +[1.2], gxp1impl.h [1.2], gxpageq.c [1.2], gxpageq.h [1.2], gxpaint.c [1.2], +gxpaint.h [1.2], gxpath.c [1.2], gxpath.h [1.2], gxpath2.c [1.2], +gxpcache.h [1.2], gxpcmap.c [1.3], gxpcolor.h [1.2], gxpcopy.c [1.3], +gxpdash.c [1.2], gxpflat.c [1.2], gxropc.h [1.2], gxrplane.h [1.2], +gxsample.c [1.2], gxsample.h [1.2], gxshade.c [1.4], gxshade.h [1.3], +gxshade1.c [1.5], gxshade4.c [1.3], gxshade4.h [1.2], gxshade6.c [1.3], +gxstate.h [1.2], gxstdio.h [1.2], gxstroke.c [1.2], gxsync.c [1.2], +gxsync.h [1.2], gxtext.h [1.3], gxtmap.h [1.2], gxttf.h [1.2], gxtype1.c +[1.6], gxtype1.h [1.4], gxxfont.h [1.2], gzacpath.h [1.2], gzcpath.h [1.2], +gzht.h [1.3], gzline.h [1.2], gzpath.h [1.3]: 2000/09/19 19:00:38 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gzstate.h [1.3]: 2000/09/19 +19:00:41 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (jerror_.h [1.2], malloc_.h [1.2], +math_.h [1.2], memory_.h [1.2], pipe_.h [1.2]: 2000/09/19 19:00:47 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (time_.h [1.2], vmsmath.h [1.2], +windows_.h [1.2]: 2000/09/19 19:00:51 lpd) + +Bring version numbers and dates up to date. Small bug fix in toolbin/pre to +make it able to handle months with leading zeros. (gscdef.c [1.9]: +2000/10/04 05:18:54 raph) + +</pre><h2><a name="6.30 ???Other???"></a>???Other???</h2><pre> + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gp_mswin.h [1.2]: 2000/09/19 +19:00:24 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gsdll.h [1.2], gsdll32w.lnk +[1.2], gsdllos2.h [1.2], gsdllwin.h [1.2], gsjmorec.h [1.2]: 2000/09/19 +19:00:27 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (gspmdrv.h [1.2]: 2000/09/19 +19:00:31 lpd) + +Updates the license notices to reflect the name change, as well as some +internal references to the program name. (iutilasm.asm [1.2]: 2000/09/19 +19:00:46 lpd) + +<hr> + +<h1><a name="Version6.23"></a>Version 6.23 (2000-08-07)</h1> + +<p> +This fileset consists mostly of bug fixes. + +<p> +All problems registered on SourceForge numbered 110922 or lower are closed, +except for the following: 101549, 101814, 101905, 101955, 102146, 102735, +104118, 105289, 105558, 106340, 106652, 109350, 110445, 110898, 110922. + +<p> +The following projects are in a partially completed state in the PDF writer: + +<ul> + +<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started. + +</ul> + +<pre> + +<h2><a name="6.23_Incompatible_changes"></a>Incompatible changes</h2> + +(Drivers) + - With high-level drivers ([e]pswrite, pdfwrite, pxl*, cgm*), +changing the OutputFile after writing one or more pages now causes an error. +(Interpreter) + - By default, copydevice will only copy a device prototype. + - Some internal references to contexts in zcontext.c are changed +from direct pointers to context indices. + - Renames internal types to add a _t: ctx_list, ctx_status, +gs_context, gs_condition, gs_lock. +(Library) + - By default, gs_copydevice[2] will only copy a device prototype. + + +<h2><a name="6.23 Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - Local GC in a multi-context system caused a crash. Also updates +all the internal type names in zcontext.c by adding a _t suffix if +necessary. (doc/News.htm [1.54]: 2000/07/10 23:56:55 lpd) + - With some high-level drivers, changing the OutputFile after +opening the device could cause a crash. After the fix, doing this works +properly if no pages have actually been written out, but causes a rangecheck +error if any pages have been written. (This is required to maintain internal +consistency.) (doc/News.htm [1.55]: 2000/07/12 14:02:03 lpd) + - The documented limit on the length of a file name was incorrect. +(doc/Language.htm [1.9]: 2000/08/03 06:45:25 lpd) + +Increments the version number, in preparation for the next fileset. +(doc/News.htm [1.52]: 2000/07/06 02:45:06 lpd) + +Adds a finish_copydevice device procedure, for cleaning up after copying the +bits of a device prototype or instance. For safety, the default +implementation only allows copying the prototype, not instances. This is a +NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device +instance never worked reliably, so it should not have been used this way +before. (doc/Drivers.htm [1.4], doc/News.htm [1.53]: 2000/07/06 04:13:24 +lpd) + +Updates the references to the Computer Modern Fontmap on CTAN. +(doc/Fonts.htm [1.5], doc/New-user.htm [1.8]: 2000/07/09 23:29:25 lpd) + +Updates a couple of release procedures. (doc/Release.htm [1.15]: 2000/07/10 +19:32:59 lpd) + +Adds documentation and a script for preparing GNU releases from Aladdin +releases. (doc/Release.htm [1.16]: 2000/07/17 17:10:57 lpd) + +Clarifies that device parameters set with -d or -s can be changed +subsequently. (doc/Use.htm [1.8]: 2000/07/17 20:13:03 lpd) + +Adds a project for making Ghostscript work as a Netscape browser plug-in. +(doc/Projects.htm [1.13]: 2000/07/19 22:50:18 lpd) + +Removes the SVG driver from the list of projects, since there is a group +close to completing one (referenced from the Ghostscript home page on the +Web). (doc/Projects.htm [1.14]: 2000/07/20 14:49:52 lpd) + +Directs users to the Ghostscript home page on the Web for information about +third-party drivers. (doc/New-user.htm [1.9]: 2000/07/20 14:50:34 lpd) + +Adds a partially implemented driver that just produces a trace of its +drawing calls. This driver also serves as a minimal example of how to +implement the high-level driver operations. (doc/Drivers.htm [1.5]: +2000/07/29 04:00:00 lpd) + +Updates dates and version #s for the 6.23 fileset. (doc/Bug-info.htm [1.4], +doc/Changes.htm [1.15], doc/Drivers.htm [1.6], doc/Fonts.htm [1.6], +doc/History5.htm [1.3], doc/Htmstyle.htm [1.4], doc/Install.htm [1.5], +doc/Language.htm [1.10], doc/New-user.htm [1.10], doc/News.htm [1.56], +doc/Projects.htm [1.15], doc/Ps2pdf.htm [1.15], doc/Release.htm [1.17], +doc/Use.htm [1.9], man/ps2ps.1 [1.6]: 2000/08/07 17:48:09 lpd) + +</pre><h2><a name="6.23 Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - $(GLGEN)/md5.h wasn't deleted after compilation. (lib.mak [1.26]: +2000/07/09 23:19:59 lpd) + - TrueType font loading now requires the Adobe glyph list, but this +dependency was missing from the makefile. (int.mak [1.26]: 2000/07/19 +08:11:15 lpd) + - During compilation, GLSRCDIR was searched before GLGENDIR. (We're +very surprised that this didn't cause detectable trouble before.) +(lib.mak [1.27]: 2000/07/19 14:32:00 lpd) + - The dependency on gsparamx.$(OBJ) was incorrectly attached to +pdfwrite.dev rather than psdf.dev. (devs.mak [1.30]: 2000/08/03 17:42:52 +lpd) + - 'pre' didn't work with dates in August or September (Tcl doesn't +accept 08 and 09 as valid numbers). (toolbin/pre [1.5]: 2000/08/07 17:35:27 +lpd) + +Increments the version number, in preparation for the next fileset. +(version.mak [1.17]: 2000/07/06 02:45:06 lpd) + +Adds some user-contributed comments about using the Canon BJ200 driver with +the BJ300. (contrib.mak [1.18]: 2000/07/11 15:33:19 lpd) + +Updates the (user-contributed) all-architecture build script to work around +a detail in the SGI IRIX C library header files. (all-arch.mak [1.4]: +2000/07/15 19:23:45 lpd) + +Adds documentation and a script for preparing GNU releases from Aladdin +releases. (toolbin/makegnu.tcl [1.1]: 2000/07/17 17:10:57 lpd) + +Adds a partially implemented driver that just produces a trace of its +drawing calls. This driver also serves as a minimal example of how to +implement the high-level driver operations. (lib.mak [1.28]: 2000/07/29 +04:00:00 lpd) + +Changes 'gsmake' to report line number rather than character position for +errors and warnings. (toolbin/gsmake.tcl [1.3]: 2000/08/07 17:22:27 lpd) + +Updates dates and version #s for the 6.23 fileset. (version.mak [1.18]: +2000/08/07 17:48:10 lpd) + +Adds some missing dependencies. (int.mak [1.27], lib.mak [1.29]: 2000/08/07 +17:52:22 lpd) + +</pre><h2><a name="6.23 Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - An invalid file name or pattern passed to filenameforall would +(incorrectly) return an empty string rather than not returning any file +names at all. (gp_vms.c [1.3]: 2000/07/09 21:09:51 lpd) + - Some DOS/Windows script files didn't use 'call', so they would +terminate execution prematurely if called from another script file. +(lib/ps2pdf.bat [1.5], lib/ps2pdf12.bat [1.4], lib/ps2pdf13.bat [1.4], +lib/ps2pdfxx.bat [1.8]: 2000/07/24 15:12:21 lpd) + +</pre><h2><a name="6.23 Drivers"></a>Drivers</h2><pre> + +Implements finish_copydevice for X windows, to allow copying instances as +well as the prototype. (gdevx.c [1.4], gdevx.h [1.3], gdevxini.c [1.7]: +2000/07/06 05:29:46 lpd) + +Adds some user-contributed comments about using the Canon BJ200 driver with +the BJ300. (gdevbj10.c [1.2]: 2000/07/11 15:33:19 lpd) + +</pre><h2><a name="6.23 PDF writer"></a>PDF writer</h2><pre> + +Fixes problems: + - M_2PI was predefined on some systems. (gdevpdfg.c [1.6]: +2000/07/09 23:11:31 lpd) + - The word and character spacing values were not tracked correctly +when mixing text and graphics, sometimes producing horizontally misplaced +text. (gdevpdf.c [1.18], gdevpdfg.c [1.7], gdevpdfu.c [1.10], +gdevpdfx.h [1.19]: 2000/07/11 14:33:54 lpd) + - 'show'ing an empty string could cause the next string to be +positioned incorrectly. (gdevpdft.c [1.14]: 2000/07/27 14:18:11 lpd) + +Updates font embedding code to handle CIDFontType 2 fonts. NOT TESTED. +(gdevpdfe.c [1.3]: 2000/07/27 04:18:13 lpd) + +Adds glyphs_used to FontDescriptors and pfd to std_fonts in the device +structure. WORK IN PROGRESS. (gdevpdf.c [1.19], gdevpdff.c [1.7], +gdevpdff.h [1.3], gdevpdfx.h [1.20]: 2000/07/27 04:19:24 lpd) + +</pre><h2><a name="6.23 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre> + +Fixes problems: + - If a badly-constructed PDF file referenced one of the 12 base +alphabetic fonts explicitly as a TrueType font (e.g., /BaseFont +/TimesNewRoman /Subtype /TrueType) without embedding it, the substituted +Type 1 font had the wrong Encoding. (lib/pdf_font.ps [1.10]: 2000/07/10 +13:18:28 lpd) + - Piped input beginning with a % caused an ioerror. (bug introduced +in 6.22) (lib/pdf_main.ps [1.10]: 2000/07/14 05:30:19 lpd) + - As a result of some recent changes to fix other problems, setting +certain text state parameters (Tf, Ts, Tz) outside of text mode (BT/ET) +caused an error. (lib/pdf_ops.ps [1.6]: 2000/07/19 15:57:54 lpd) + - Setting a singular text matrix (e.g., 0 0 0 0 <x> <y> Tm) caused +an error. (lib/pdf_ops.ps [1.7]: 2000/08/04 16:08:05 lpd) + +</pre><h2><a name="6.23 Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Removes the '?' procedure, which was defined solely for the +convenience of users who don't read the documentation and which interfered +with the operation of some code produced by the Adobe PS5 Windows driver. +(lib/gs_init.ps [1.18]: 2000/07/09 22:34:30 lpd) + - A constant 1 should have been 1L, causing a warning on systems +where sizeof(long) > sizeof(int). (zarith.c [1.3]: 2000/07/09 23:10:58 lpd) + - The workaround for attempting to set a 4-element PageSize value in +a page device sometimes caused an error. (bug introduced in 6.21) +(lib/gs_setpd.ps [1.4]: 2000/07/10 12:48:54 lpd) + - Redefining setcolorspace could cause an infinite recursion. +(lib/gs_lev2.ps [1.5]: 2000/07/10 13:35:24 lpd) + - Local GC in a multi-context system caused a crash. Also updates +all the internal type names in zcontext.c by adding a _t suffix if +necessary. (zcontext.c [1.4]: 2000/07/10 23:56:55 lpd) + - A garbage collection occurring within a save could cause a memory +access error. (bug introduced in 6.22) (zcontext.c [1.5]: 2000/07/14 +05:28:56 lpd) + - Piped input beginning with a % caused an ioerror. (bug introduced +in 6.22) (zfileio.c [1.8]: 2000/07/14 05:30:19 lpd) + - A garbage collection occurring while scanning a binary token +sequence could cause a syntaxerror or corrupted data. (iscan.c [1.3]: +2000/07/18 15:39:02 lpd) + - (correction) An interruption (including a callout for a +procedure-based stream), not a garbage collection, while scanning a binary +token sequence could cause a syntaxerror or corrupted data. (iscan.c [1.4]: +2000/07/18 15:41:55 lpd) + - When loading a TrueType font, invalid glyph numbers in the 'post' +table (which appear in some Adobe-created PDF files) caused an error instead +of being ignored; a test was backwards, causing some embedded TrueType fonts +in PDF files to produce a rangecheck error. (lib/gs_ttf.ps [1.6]: 2000/07/19 +08:12:41 lpd) + - When NOPROMPT was set, no flush or flushpage occurred at the end +of a page. (fix from an anonymous user on SourceForge) +(lib/gs_init.ps [1.19]: 2000/07/20 01:40:50 lpd) + - Type 1 or Type 2 fonts with invalid LanguageGroup values < 0 +caused an error. (Such fonts are invalid, but some real fonts have garbage +LanguageGroup values, and Adobe software doesn't give an error.) +(zfont1.c [1.6]: 2000/07/24 18:08:38 lpd) + - Errors while executing gs_init.ps and other PostScript +initialization files were sometimes ignored, leading to mysterious error +messages later. (imainarg.c [1.3]: 2000/08/03 06:43:17 lpd) + - Showing text with a singular matrix (scaling matrix x CTM) could +leave extraneous values on the operand stack. (zchar1.c [1.4]: 2000/08/04 +16:09:30 lpd) + +Increments the version number, in preparation for the next fileset. +(lib/gs_init.ps [1.15]: 2000/07/06 02:45:06 lpd) + +Redefines [gs_]copydevice in terms of a new gs_copydevice2/.copydevice2, +which adds a Boolean keep_open argument that requests (but does not +guarantee) that a copy of an open device remain open. +(lib/gs_init.ps [1.16], zdevice.c [1.2]: 2000/07/06 03:26:13 lpd) + +Adds a finish_copydevice device procedure, for cleaning up after copying the +bits of a device prototype or instance. For safety, the default +implementation only allows copying the prototype, not instances. This is a +NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device +instance never worked reliably, so it should not have been used this way +before. (lib/gs_init.ps [1.17]: 2000/07/06 04:13:24 lpd) + +Adds the ability to load CIDFont resources from CFF OpenType font files. +(lib/gs_cff.ps [1.6], lib/gs_cidfn.ps [1.16]: 2000/07/29 05:58:28 lpd) + +Ensures that errordict has at least one empty entry, for the sake of some +astonishingly bad PostScript code that tests for this and has a bug in the +case where it isn't true. (lib/gs_init.ps [1.20]: 2000/08/04 04:29:45 lpd) + +</pre><h2><a name="6.23 Library"></a>Library</h2><pre> + +Fixes problems: + - Some coordinate computations for Type 1 fonts could lose far too +much precision if _fixed_shift was reduced. (gscoord.c [1.2], +gxmatrix.h [1.2]: 2000/07/11 09:25:46 lpd) + - If the current color space was DeviceRGB, gs_currentgray returned +the wrong value. (bug introduced in 6.22) (gscolor.c [1.3]: 2000/07/11 +14:00:09 lpd) + - With some high-level drivers, changing the OutputFile after +opening the device could cause a crash. After the fix, doing this works +properly if no pages have actually been written out, but causes a rangecheck +error if any pages have been written. (This is required to maintain internal +consistency.) (gdevvec.c [1.4]: 2000/07/12 14:02:04 lpd) + - A file had accidentally acquired an incorrect license notice. +(gscoord.c [1.4]: 2000/07/13 02:02:09 lpd) + - Type 2 fonts that used the 'hflex' operator could produce +distorted characters (e.g., slanted bottoms). (gstype2.c [1.4]: 2000/07/13 +02:09:21 lpd) + - The use of macros within procedure argument lists confused +ansi2knr. (gximage3.c [1.5], gximage3.h [1.3]: 2000/07/19 14:30:45 lpd) + - Freeing a locking allocator could cause infinite recursion. +(gsmemlok.c [1.2]: 2000/07/19 21:32:12 lpd) + - "Accurate curves" was a no-op for certain cases of horizontal or +vertical tangents. (gxpcopy.c [1.2]: 2000/08/05 01:04:28 lpd) + +Increments the version number, in preparation for the next fileset. +(gscdef.c [1.5]: 2000/07/06 02:45:06 lpd) + +Redefines [gs_]copydevice in terms of a new gs_copydevice2/.copydevice2, +which adds a Boolean keep_open argument that requests (but does not +guarantee) that a copy of an open device remain open. (gsdevice.c [1.5], +gsdevice.h [1.2]: 2000/07/06 03:26:13 lpd) + +Adds a finish_copydevice device procedure, for cleaning up after copying the +bits of a device prototype or instance. For safety, the default +implementation only allows copying the prototype, not instances. This is a +NON-BACKWARD-COMPATIBLE change; however, using copydevice on a device +instance never worked reliably, so it should not have been used this way +before. (gdevbbox.c [1.2], gdevdflt.c [1.2], gdevht.c [1.2], +gdevmem.h [1.2], gdevnfwd.c [1.2], gdevprn.h [1.5], gdevrops.c [1.2], +gsdevice.c [1.6], gxacpath.c [1.2], gxclip.c [1.2], gxclip2.c [1.2], +gxclipm.c [1.2], gxclist.c [1.2], gxdevcli.h [1.2], gxdevice.h [1.3], +gxpcmap.c [1.2]: 2000/07/06 04:13:24 lpd) + +Adds a little more tracing output for images. (gxidata.c [1.3]: 2000/07/09 +21:04:25 lpd) + +Adds _simple_final structure type definition macros. (gsstruct.h [1.3]: +2000/07/10 15:43:30 lpd) + +Removes a structure member no longer needed after a recent fix. +(gscoord.c [1.3], gxmatrix.h [1.3]: 2000/07/12 04:49:43 lpd) + +Adds the ability to write subsetted CIDFontType 2 (TrueType-based) fonts. +(gdevpsf.h [1.6], gdevpsft.c [1.2], gdevpsfu.c [1.3], gxfcid.h [1.5]: +2000/07/21 01:09:16 lpd) + +Adds a partially implemented driver that just produces a trace of its +drawing calls. This driver also serves as a minimal example of how to +implement the high-level driver operations. (gdevtrac.c [1.1]: 2000/07/29 +04:00:00 lpd) + +Improves the smoothness of ShadingType 4 - 7 gradient fills. +(gxshade4.c [1.2], gxshade6.c [1.2]: 2000/08/03 20:47:48 lpd) + +Updates dates and version #s for the 6.23 fileset. (gscdef.c [1.6]: +2000/08/07 17:48:10 lpd) + +<hr> + +<h1><a name="Version6.22"></a>Version 6.22 (2000-07-05)</h1> + +<p> +This fileset consists mostly of bug fixes. It also further improves the PDF +writer, which now handles ImageType 3 images and PatternType 2 (shading) +patterns. + +<p> +All problems registered on SourceForge numbered 108819 or lower are closed, +except for the following: 101549, 101814, 101905, 101955, 102146, 102735, +104118, 105289, 105558, 106340, 106652, 108639. + +<p> +The following projects are in a partially completed state in the PDF writer: + +<ul> + +<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started. + +</ul> + +<pre> + +<h2><a name="6.22_Incompatible_changes"></a>Incompatible changes</h2> + +(Procedures) + - Versions now have odd numbers during development, even numbers +when released. + - The TMPDIR environment variable, if set, now takes precedence +over TEMP. + - On MS-DOS, MS Windows, and OS/2 platforms, the batch files that +invoke Ghostscript now use a default name of gswin32 or gswin32c rather than +simply gs. +(Drivers) + - The PCL drivers now select a given paper size if the requested +height is at least 0.1" greater than the height of the next smaller paper +size, rather than if the requested height is at least as large as that of +the given paper size. +(Interpreter) + - user_names_p and system_names_p may now be NULL: clients must +check this. + - scan_comment_proc and scan_dsc_proc are now deprecated, and will +disappear in the near future. + - The values in psuserparams are now checking procedures rather +than parameter values. + - Comments beginning with %! are treated as "DSC comments", like +comments beginning with %%. +(Library) + - The macro for declaring the fill_rectangle procedure of a shading +is now upper-case. The fill_rectangle procedure is now a member of a procs +structure; there is a new macro for calling it. + - The parameter list and return value for gs_currentgray have +changed. This is very unfortunate, but it was unavoidable. + + +<h2><a name="6.22 Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - The batch files for MS-DOS, MS Windows, and OS/2 referred to the +executable by the name 'gs'. They now use environment variables GS +(graphical) and GSC (console) for the executable names, defaulting to +gswin32 and gswin32c respectively. (doc/News.htm [1.45], doc/Use.htm [1.6]: +2000/05/20 20:53:04 lpd) + - The -dCompatibilityLevel= switch was incorrectly identified in one +place as -dCompatibility=. (doc/Ps2pdf.htm [1.11]: 2000/05/22 21:29:45 lpd) + - [gs_]currentgray didn't return the correct value if the current +color space was a DeviceN space using the alternate space. +(doc/News.htm [1.49]: 2000/07/03 15:28:26 lpd) + - Fixes a couple of typos. (doc/Release.htm [1.12]: 2000/07/04 +19:19:38 lpd) + - The "smoke test" procedure for fileset releases didn't stress the +banding code nearly as hard as intended. (doc/Release.htm [1.13]: 2000/07/05 +04:50:13 lpd) + +Adds predefined pdfwrite settings similar to the three standard settings in +Adobe Acrobat Distiller 4, plus a "default" setting, with +-dPDFSETTINGS=/settingname. (doc/Ps2pdf.htm [1.10]: 2000/04/29 02:29:20 lpd) + +Increments the version number to 6.23. From now on, we use odd numbers +during development, even numbers for released filesets. +(doc/Changes.htm [1.12], doc/History6.htm [1.7], doc/News.htm [1.40], +doc/Release.htm [1.11]: 2000/04/29 16:49:43 lpd) + +Implements ImageType 3 images in the PDF writer. (doc/News.htm [1.41]: +2000/04/30 06:21:58 lpd) + +Creates a procs structure for shadings, moving the fill_rectangle procedure +into it, in anticipation of adding a get_params procedure. +(doc/News.htm [1.42]: 2000/04/30 19:37:37 lpd) + +Implements PatternType 2 patterns and shfill in the PDF writer. +(doc/News.htm [1.43]: 2000/05/02 07:14:58 lpd) + +Adds a reference to Karel Kulhavy's pdf2html program. +(doc/New-user.htm [1.6]: 2000/05/04 21:16:44 lpd) + +Adds a small project to remove the limit on the length of the OutputFile +parameter for printer drivers. (doc/Projects.htm [1.9]: 2000/05/06 00:32:08 +lpd) + +Documents the addition of TMPDIR for specifying the directory for temporary +files. (doc/News.htm [1.44], doc/Use.htm [1.5]: 2000/05/19 17:59:28 lpd) + +Adds (more) user-contributed uniprint parameter files for the Epson Stylus +Color 640. (doc/Devices.htm [1.8]: 2000/05/23 18:58:56 lpd) + +Adds implementation of the %font% IODevice to the list of projects. +(doc/Projects.htm [1.10]: 2000/05/24 23:30:15 lpd) + +Documents the change in the paper size selection for PCL drivers. +(doc/News.htm [1.46]: 2000/05/30 03:26:15 lpd) + +Adds glyph decaching notification to the list of projects. +(doc/Projects.htm [1.11]: 2000/05/30 05:54:23 lpd) + +Documents that user_names_p and system_names_p may now be NULL. +(doc/News.htm [1.47]: 2000/06/05 01:26:05 lpd) + +Adds the ability to write multi-strip monochrome TIFF files, controlled by a +new MaxStripSize parameter for the monochrome TIFF drivers. +(doc/Devices.htm [1.9]: 2000/06/05 05:41:55 lpd) + +Updates the open ICC color support project to reference Graeme Gill's icclib +package. (doc/Projects.htm [1.12]: 2000/06/08 02:55:37 lpd) + +Adds an umbrella document for maintenance procedures, initially describing +the procedure for uploading bug report test data to SourceForge. +(doc/Maintain.htm [1.1], doc/Readme.htm [1.8]: 2000/06/13 20:27:26 lpd) + +Updates documentation to reflect the use of the GSC environment variable to +set the name of the executable for ps2pdf. (doc/Ps2pdf.htm [1.12]: +2000/06/21 17:10:41 lpd) + +Updates documentation on the ProcessColorModel and ColorConversionStrategy +parameters. (doc/Ps2pdf.htm [1.13]: 2000/06/21 18:06:07 lpd) + +Adds user parameters ProcessComment and ProcessDSCComment. If not null, +these procedures are called with the file and the comment line whenever the +scanner detects a comment (or non-DSC comment) or DSC comment. NOTE: the +interpreter is currently patched so that ProcessComment is never called. +(doc/Language.htm [1.4], doc/News.htm [1.48]: 2000/06/27 00:53:38 lpd) + +Adds a reference to a user-maintained Czech translation of the Ghostscript +'man' pages. (doc/Readme.htm [1.9]: 2000/06/27 14:03:29 lpd) + +Brings the language documentation (more) up to date. +(doc/Language.htm [1.5]: 2000/06/29 16:00:48 lpd) + +Improves the documentation of copydevice regarding where it allocates the +copy, and documents finddevice. (doc/Drivers.htm [1.2], +doc/Language.htm [1.6]: 2000/06/30 00:09:15 lpd) + +Adds a findprotodevice "operator", to find a device prototype by name. +(doc/Language.htm [1.7]: 2000/07/05 04:49:11 lpd) + +Changes the version numbering system back to sequential (not odd/even). +Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE". +(doc/History6.htm [1.8], doc/News.htm [1.50]: 2000/07/05 17:23:54 lpd) + +Updates documentation related to version numbering, reflecting the move back +to sequential numbering. (doc/Maintain.htm [1.2], doc/Release.htm [1.14]: +2000/07/05 18:27:50 lpd) + +Updates documentation dates for making a fileset. (doc/Changes.htm [1.13], +doc/Devices.htm [1.10], doc/Drivers.htm [1.3], doc/History6.htm [1.9], +doc/Language.htm [1.8], doc/New-user.htm [1.7], doc/News.htm [1.51], +doc/Ps2pdf.htm [1.14], doc/Readme.htm [1.10], doc/Use.htm [1.7]: 2000/07/06 +00:01:39 lpd) + +</pre><h2><a name="6.22 Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - The rule for the recently-added gdevhl12 driver omitted the space +before the colon. (contrib.mak [1.12]: 2000/05/02 01:42:12 lpd) + - Once again, corrects an incorrect dependency list. +(lib.mak [1.19]: 2000/05/02 07:14:11 lpd) + - smd5.c didn't compile properly with "traditional C" compilers. +(lib.mak [1.20]: 2000/05/19 06:08:01 lpd) + - Temporary files weren't created as private or exclusive. +(lib.mak [1.21], os2.mak [1.6], watc.mak [1.4], watclib.mak [1.4], +winlib.mak [1.3]: 2000/05/19 17:52:51 lpd) + - The definitions of user names weren't properly associated with +local VM (they were stored in a static variable). (int.mak [1.22]: +2000/05/26 02:27:58 lpd) + - 'make install' on Unix systems didn't install pdfopt.ps and +pdfwrite.ps. (unixinst.mak [1.11]: 2000/05/30 23:07:34 lpd) + - The dependency list for the new Epson Stylus Photo driver was +wrong, causing build problems if this driver was included. +(contrib.mak [1.13]: 2000/06/01 20:25:39 lpd) + - The change to implement stripped TIFF files broke non-TIFF fax +output formats (faxg* drivers). Also factors plain-fax writing from TIFF +writing. (devs.mak [1.26]: 2000/06/06 06:37:37 lpd) + - Corrects a typo introduced by recent changes. (msvctail.mak [1.3]: +2000/06/07 06:36:54 lpd) + - Rendering TrueType fonts didn't adjust the flatness to ensure +accurate results. (lib.mak [1.23]: 2000/06/20 15:46:53 lpd) + - The makefile missed a dependency (CIDFontType 0 fonts require +FontType 2 fonts). (int.mak [1.23]: 2000/06/27 17:23:13 lpd) + - The makefiles didn't include the requirement that gs_mro_e.ps be +loaded before gs_mgl_e.ps. (devs.mak [1.28], int.mak [1.24]: 2000/06/27 +17:36:42 lpd) + - A dependency was missing. (lib.mak [1.24]: 2000/07/04 19:05:12 +lpd) + - Fixes a typo; reduces the number of false warnings for +documentation date mismatches. (toolbin/pre [1.4]: 2000/07/04 19:19:17 lpd) + - Fixes a typo. (contrib.mak [1.16]: 2000/07/04 22:30:10 lpd) + - Adds a missing dependency. (devs.mak [1.29]: 2000/07/04 22:30:33 +lpd) + - Adds a missing dependency. (contrib.mak [1.17]: 2000/07/06 +00:00:13 lpd) + +Increments the version number to 6.23. From now on, we use odd numbers +during development, even numbers for released filesets. (version.mak [1.15]: +2000/04/29 16:49:43 lpd) + +Restructures the code for handling ImageType 3 images, for the benefit of +the PDF writer. (lib.mak [1.18]: 2000/04/30 03:08:15 lpd) + +Implements ImageType 3 images in the PDF writer. (devs.mak [1.23]: +2000/04/30 06:21:58 lpd) + +Implements PatternType 2 patterns and shfill in the PDF writer. +(devs.mak [1.24]: 2000/05/02 07:14:58 lpd) + +Adds the first draft of a driver for the Practical Automation ATX-23, -24, +and -38 label/ticket printers, developed under contract. This has a dual +GPL/AFPL license. (devs.mak [1.25]: 2000/05/03 20:30:06 lpd) + +Works around the fact that Microsoft Visual C++ (only) doesn't define the O_ +flags for the `open' library call. (lib.mak [1.22]: 2000/05/31 20:34:43 lpd) + +Makes it possible to build on MSVC++ systems without specifying the paths +for the tools, headers, or libraries. See msvc{32,lib}.mak for details. +(msvc32.mak [1.4], msvccmd.mak [1.4], msvclib.mak [1.4], msvctail.mak [1.2], +winint.mak [1.4]: 2000/06/05 02:46:07 lpd) + +Adds a user-contributed driver for SFF (the file format for CAPI fax +devices). (contrib.mak [1.14]: 2000/06/06 06:38:31 lpd) + +Notes that the vgalib driver only suppotrs 16-color modes. (devs.mak [1.27]: +2000/06/06 15:28:01 lpd) + +Removes an obsolete file. (toolbin/package.tcl [1.2]: 2000/06/06 18:05:32 +lpd) + +Documents the fact that the IJG JPEG library header files must be available +when compiling, even if SHARE_JPEG=1. (dvx-gcc.mak [1.3], jpeg.mak [1.2], +unix-gcc.mak [1.6], unixansi.mak [1.4], unixtrad.mak [1.4]: 2000/06/07 +13:32:44 lpd) + +Finishes implementing the Process[DSC]Comment callout. (int.mak [1.25]: +2000/06/28 20:17:00 lpd) + +Removes some third-party drivers with incompatible licenses. +(contrib.mak [1.15]: 2000/07/02 22:11:31 lpd) + +Finishes working around the fact that Microsoft C, in defiance of multiple +standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or +anywhere else). (lib.mak [1.25]: 2000/07/05 00:48:21 lpd) + +Changes the version numbering system back to sequential (not odd/even). +Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE". +(version.mak [1.16]: 2000/07/05 17:23:54 lpd) + +</pre><h2><a name="6.22 Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - Fixes a couple of minor Windows NT compatibility problems in +script files. (lib/ps2pdf.bat [1.3], lib/ps2pdfxx.bat [1.5]: 2000/05/05 +03:21:03 lpd) + - Temporary files weren't created as private or exclusive. +(gp_iwatc.c [1.3], gp_mswin.c [1.2], gp_os2.c [1.3]: 2000/05/19 17:52:51 +lpd) + - gsdll_init didn't propagate an error return from +gs_main_init_with_args, causing clients to think Ghostscript was initialized +properly when it wasn't. (gsdll.c [1.2]: 2000/05/20 14:39:42 lpd) + - The batch files for MS-DOS, MS Windows, and OS/2 referred to the +executable by the name 'gs'. They now use environment variables GS +(graphical) and GSC (console) for the executable names, defaulting to +gswin32 and gswin32c respectively. (lib/bdftops.bat [1.2], +lib/eps2eps.bat [1.3], lib/font2c.bat [1.2], lib/gsbj.bat [1.2], +lib/gsdj.bat [1.2], lib/gsdj500.bat [1.2], lib/gslj.bat [1.2], +lib/gslp.bat [1.2], lib/gsnd.bat [1.2], lib/gsndt.bat [1.2], +lib/gssetgs.bat [1.1], lib/gst.bat [1.2], lib/gstt.bat [1.2], +lib/lpgs.bat [1.2], lib/lpr2.bat [1.2], lib/pdf2ps.bat [1.3], +lib/pdfopt.bat [1.2], lib/pftogsf.bat [1.2], lib/ps2ascii.bat [1.3], +lib/ps2epsi.bat [1.3], lib/ps2pdfxx.bat [1.7], lib/ps2ps.bat [1.3]: +2000/05/20 20:53:05 lpd) + - The ps2pdf.bat script didn't set the default PDF level, so it +normally produced PDF 1.3 rather than 1.2, which was contrary to the +documentation and different from the Unix ps2pdf script. +(lib/ps2pdf.bat [1.4]: 2000/06/08 02:33:09 lpd) + +Adds a user-contributed program for displaying the differences between two +AFM (font metric) files. This has a dual AFPL/GPL copyright. +(lib/afmdiff.awk [1.1]: 2000/04/29 20:51:41 lpd) + +Removes an out-of-date e-mail address. (lib/ps2pdfxx.bat [1.4]: 2000/05/04 +16:40:08 lpd) + +Adds -dSAFER to all the format conversion scripts in which the input is +executed as PostScript or PDF code. (lib/eps2eps [1.2], +lib/eps2eps.bat [1.2], lib/pdf2dsc [1.2], lib/pdf2ps [1.3], +lib/pdf2ps.bat [1.2], lib/ps2ascii [1.2], lib/ps2ascii.bat [1.2], +lib/ps2epsi [1.3], lib/ps2epsi.bat [1.2], lib/ps2pdfwr [1.5], +lib/ps2pdfxx.bat [1.6], lib/ps2ps [1.2], lib/ps2ps.bat [1.2]: 2000/05/19 +06:38:25 lpd) + +Adds -dSAFER to one more script. (lib/pdfopt [1.2]: 2000/05/30 05:28:22 lpd) + +Refactors some PDF-writing code for use in a PDF decompressor. +(lib/pdfwrite.ps [1.2]: 2000/06/27 17:06:32 lpd) + +Adds a number of (user-maintained) command files for OS/2. +(lib/bdftops.cmd [1.1], lib/eps2eps.cmd [1.1], lib/font2c.cmd [1.1], +lib/pdf2ps.cmd [1.1], lib/pf2afm.cmd [1.1], lib/ps2ascii.cmd [1.1], +lib/ps2epsi.cmd [1.1], lib/ps2pdf.cmd [1.1], lib/ps2pdf12.cmd [1.1], +lib/ps2pdf13.cmd [1.1], lib/ps2ps.cmd [1.1]: 2000/07/05 16:21:13 lpd) + +</pre><h2><a name="6.22 Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - The "compressed data" command encoding was wrong in one place in +the documentation, and the code used the incorrect encoding. +(gdevatx.c [1.2]: 2000/05/06 00:31:25 lpd) + - If a file made no marks at all, ps2[e]ps produced bad output. +(gdevps.c [1.8]: 2000/05/07 15:38:27 lpd) + - Returning an image compression parameter dictionary didn't close +an enumeration, failing to free a bookkeeping structure. (gdevpsdp.c [1.5]: +2000/05/11 16:13:16 lpd) + - The epswrite driver could produce output that used initclip, which +is not allowed in EPS files. (gdevps.c [1.9]: 2000/05/20 06:36:30 lpd) + - The change to implement stripped TIFF files broke non-TIFF fax +output formats (faxg* drivers). Also factors plain-fax writing from TIFF +writing. (gdevfax.c [1.1], gdevfax.h [1.1], gdevtfax.c [1.3], +gdevtfax.h [1.3]: 2000/06/06 06:37:37 lpd) + - In the X driver, resetting MaxBitmap didn't have the proper +effect, and could cause a crash. (This is probably only a partial fix.) +(gdevxini.c [1.4]: 2000/06/12 01:52:16 lpd) + - Finishes fixing the handling of MaxBitmap in the X driver. +(gdevxini.c [1.5]: 2000/06/12 02:45:25 lpd) + - In the ATX drivers, the word count for compressed scan lines was +written as 2 bytes rather than 1; the drivers wouldn't accept a page width +greater than 2400 pixels. (gdevatx.c [1.4]: 2000/06/12 04:39:48 lpd) + - Works around a bug in the MSVC++ 5.0 compiler that treats (int << +unsigned) as unsigned rather than int. (gdevcd8.c [1.2], gdevcdj.c [1.2], +gdevdj9.c [1.3]: 2000/06/20 14:21:34 lpd) + - Uncolored Patterns used with a gray color produced incorrect PDF +output. (Bug introduced in 6.2x.) (gdevpsdu.c [1.5]: 2000/06/28 05:13:19 +lpd) + - Moves an assignment to eliminate a bogus warning from some picky +compilers about a variable supposedly clobbered by longjmp. +(gdevpng.c [1.2]: 2000/07/03 21:10:33 lpd) + - Two values were computed and not used. (gdevpx.c [1.3]: 2000/07/03 +21:30:41 lpd) + - [e]pswrite didn't guarantee a maximum line length of 255 +characters, and didn't mark binary data with %%BeginData:/%%EndData. +(gdevps.c [1.10]: 2000/07/04 18:34:38 lpd) + - Fixes references to undeclared functions. (gdevdfax.c [1.2], +gdevl256.c [1.2]: 2000/07/04 22:25:08 lpd) + - X Windows platform fonts were broken when using multiple device +instances (windows). (gdevxxf.c [1.4]: 2000/07/05 18:20:41 lpd) + +Improves the test for whether compressing an image is worthwhile. +(gdevpsdi.c [1.11]: 2000/04/30 01:26:41 lpd) + +When printing color values derived from 8-bit fields, rounds the output to 3 +decimal places for compactness with no loss of precision. (gdevpsdu.c [1.4]: +2000/04/30 19:24:28 lpd) + +Adds the first draft of a driver for the Practical Automation ATX-23, -24, +and -38 label/ticket printers, developed under contract. This has a dual +GPL/AFPL license. (gdevatx.c [1.1]: 2000/05/03 20:30:06 lpd) + +Updates the ATX printer drivers to handle the unprintable margins. +(gdevatx.c [1.3]: 2000/05/19 05:48:30 lpd) + +Adds (more) user-contributed uniprint parameter files for the Epson Stylus +Color 640. (lib/st640ih.upp [1.1], lib/st640ihg.upp [1.1], +lib/st640p.upp [1.1], lib/st640pg.upp [1.1], lib/st640pl.upp [1.1], +lib/st640plg.upp [1.1]: 2000/05/23 18:58:56 lpd) + +Adds support for 11x17 paper in PCL printers; changes the paper size tests +so that paper size N+1 is selected if the requested height is at least 0.1" +greater than the height of paper size N. (gdevpcl.c [1.2], gdevpcl.h [1.2]: +2000/05/30 03:24:17 lpd) + +Adds comments about H-P's inconsistent use of different names and size codes +for the 11x17 paper size. (gdevpcl.c [1.3], gdevpcl.h [1.3]: 2000/05/30 +20:45:45 lpd) + +Adds the ability to write multi-strip monochrome TIFF files, controlled by a +new MaxStripSize parameter for the monochrome TIFF drivers. +(gdevtfax.c [1.2], gdevtfax.h [1.2], gdevtfnx.c [1.2], gdevtifs.c [1.2], +gdevtifs.h [1.2]: 2000/06/05 05:41:55 lpd) + +Adds a user-contributed driver for SFF (the file format for CAPI fax +devices). (gdevcfax.c [1.1]: 2000/06/06 06:38:31 lpd) + +Notes that the vgalib driver only suppotrs 16-color modes. +(gdevvglb.c [1.2]: 2000/06/06 15:28:01 lpd) + +Adds some code contributed by Leon Bottou <leonb@research.att.com> that +makes the X driver prefer TrueColor visuals. We aren't sure of the +ramifications of this.... (gdevxini.c [1.6]: 2000/06/12 04:41:15 lpd) + +Updates the ATX driver(s) to enforce maximum page width and minimum page +length. (gdevatx.c [1.5]: 2000/06/22 14:55:53 lpd) + +Removes some third-party drivers with incompatible licenses. +(gdevcd8.c [1.3], gdevdj9.c [1.4], gdevhl12.c [1.2]: 2000/07/02 22:11:31 +lpd) + +Per user request, changes the license on the basic monochrome +DeskJet/LaserJet drivers from AFPL to dual AFPL/GPL. (gdevdjet.c [1.5], +gdevdljm.c [1.3], gdevdljm.h [1.3]: 2000/07/05 17:36:14 lpd) + +</pre><h2><a name="6.22 PDF writer"></a>PDF writer</h2><pre> + +Fixes problems: + - A "0 ||" was omitted, potentially causing some kinds of errors +that never happen in practice to be overlooked. (gdevpdfi.c [1.17]: +2000/05/02 01:55:10 lpd) + - Fixes minor syntactic incompatibilities with "traditional C" +compilers. (gdevpdfg.c [1.5]: 2000/05/11 16:14:51 lpd) + - The PDF writer could still produce coordinates for paths that +exceeded Acrobat Reader's user-coordinate limit of +/- 32K. +(gdevpdfd.c [1.9]: 2000/05/23 21:05:00 lpd) + - In PDF 1.2 output, several synthesized Type 3 fonts could have the +same name, producing errors and/or incorrect output. (bug introduced since +6.01) (gdevpdf.c [1.17], gdevpdft.c [1.11], gdevpdfx.h [1.18]: 2000/05/24 +20:39:30 lpd) + - The FontDescriptor flags for non-embedded alphabetic fonts with +non-Standard encodings incorrectly identified the font as a small-caps font. +(gdevpdff.c [1.6]: 2000/05/30 23:04:23 lpd) + - Works around the fact that Acrobat Reader won't accept /MMType1 +fonts, but will accept MM Type 1 instances if they're tagged as /Type1 +rather than /MMType1. (gdevpdft.c [1.12], gdevpdfw.c [1.4]: 2000/06/12 +18:13:51 lpd) + - Embedded Type 1 (but not Type 2 / 1C) fonts were written without +eexec encryption. We can't figure out how this happened, because the PDF +spec requires eexec encryption and the correct code was commented out; we +suppose this was a debugging or testing modification that got left in. (bug +introduced since 6.01) (gdevpdfe.c [1.2]: 2000/06/12 18:15:20 lpd) + - Text in Type 3 synthesized fonts was often positioned incorrectly, +usually too far to the left. (bug introduced since 6.01) (gdevpdft.c [1.13]: +2000/06/13 16:34:42 lpd) + - Images that ended prematurely still (again?) weren't written +correctly. (gdevpdfj.c [1.4]: 2000/06/27 06:32:03 lpd) + +Implements ImageType 3 images in the PDF writer. (gdevpdfb.c [1.1], +gdevpdfg.h [1.6], gdevpdfi.c [1.16], gdevpdfj.c [1.3], gdevpdfx.h [1.16]: +2000/04/30 06:21:58 lpd) + +Implements PatternType 2 patterns and shfill in the PDF writer. +(gdevpdfc.c [1.11], gdevpdfg.h [1.7], gdevpdfo.c [1.3], gdevpdfo.h [1.3], +gdevpdfv.c [1.1], gdevpdfx.h [1.17]: 2000/05/02 07:14:58 lpd) + +</pre><h2><a name="6.22 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre> + +Fixes problems: + - PatternType 2 (shaded) Patterns caused errors. +(lib/pdf_draw.ps [1.14]: 2000/05/02 07:03:09 lpd) + - -q (-dQUIET) didn't suppress all warnings from the PDF +interpreter. (lib/pdf_base.ps [1.8]: 2000/05/07 15:51:18 lpd) + - FunctionType 3 functions with indirect /Bounds or /Encode entries +caused a typecheck error. (lib/pdf_draw.ps [1.15]: 2000/06/07 19:08:00 lpd) + - If the TR element of an ExtGState was an array of Functions (for +setcolortransfer) rather a single Function (for settransfer), an error +occurred. (fix from Artifex) (lib/pdf_draw.ps [1.16]: 2000/06/12 00:40:45 +lpd) + - The code for keeping the Install procedure from getting more and +more deeply nested didn't actually work, and also caused pages with a +non-zero MediaBox offset to be translated incorrectly. +(lib/pdf_main.ps [1.8]: 2000/06/12 19:17:03 lpd) + - PDF files with embedded TrueType fonts didn't map characters to +glyph indices correctly (i.e., using the same algorithm as Acrobat Reader). +(lib/pdf_font.ps [1.8]: 2000/06/21 02:15:01 lpd) + - The built-in Identity CMaps had an incorrect entry count for +begincodespacerange and begincidrange; these CMaps, and all Type 0 fonts, +were constructed in a way that was incompatible with some old Adobe font +loading software. (lib/pdf_font.ps [1.9]: 2000/06/28 01:36:30 lpd) + - If PDF interpretation was included in the build, the very first +line of a non-PDF file wouldn't be processed (if applicable) as a comment. +(lib/pdf_main.ps [1.9]: 2000/06/29 15:55:13 lpd) + +</pre><h2><a name="6.22 Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - localfork didn't properly initialize userdict in the new context. +(lib/gs_dps.ps [1.2]: 2000/05/01 07:20:37 lpd) + - A null Pattern color caused an error. (zcolor2.c [1.2]: 2000/05/01 +15:15:06 lpd) + - Fixes minor syntactic incompatibilities with "traditional C" +compilers. (zbfont.c [1.5], zfcid0.c [1.3]: 2000/05/11 16:14:51 lpd) + - The 'monitor' operator was broken (probably had never been +tried!). (zcontext.c [1.2]: 2000/05/15 19:14:25 lpd) + - -dSTRICT caused an error, /undefined in SIZES. +(lib/gs_statd.ps [1.3]: 2000/05/17 19:17:40 lpd) + - CFF CID fonts in which the FDSelect array occurred before the +CharStrings caused an error. (lib/gs_cff.ps [1.5]: 2000/05/17 20:39:20 lpd) + - dict_matrix3_param didn't work correctly on platforms where the +compiler aligned structures to a boundary larger than sizeof(float), causing +incorrect output or arithmetic exceptions for CIE color spaces. +(zcie.c [1.2]: 2000/05/18 19:02:25 lpd) + - Flushing or closing a procedure-based output stream still wasn't +implemented correctly (it could cause an endless loop). (zfproc.c [1.3]: +2000/05/19 19:35:01 lpd) + - 'monitor' left its operand on the stack. (zcontext.c [1.3]: +2000/05/22 21:15:23 lpd) + - The definitions of user names weren't properly associated with +local VM (they were stored in a static variable). (btoken.h [1.2], +iref.h [1.2], iscanbin.c [1.3], zbseq.c [1.2], zdps.c [1.2]: 2000/05/26 +02:27:58 lpd) + - Invoking an image operator with an empty string data source caused +an infinite loop. (zimage.c [1.4]: 2000/05/30 03:43:19 lpd) + - The fix for associating the user name array with local VM didn't +create the user name table properly for new contexts with their own local +VM. The user name array is now created lazily. (btoken.h [1.3], +iscanbin.c [1.4], zbseq.c [1.3], zdps.c [1.3]: 2000/05/30 04:38:26 lpd) + - As a result of the fix removing the incorrect same-local-VM check +in context_state_load, userparams wasn't updated properly when switching +contexts. (icontext.c [1.3]: 2000/05/30 20:40:17 lpd) + - MAX_HALF_INTVAL was defined incorrectly, causing the mul operator +to run slower than necessary when multiplying two small integers. +(zarith.c [1.2]: 2000/06/04 17:00:29 lpd) + - Shadings with an array of Functions caused a rangecheck or +typecheck error. (zshade.c [1.2]: 2000/06/04 18:26:17 lpd) + - If the new value of a device parameter was an array with some +integers and some reals, and the first element was a real, a typecheck error +would occur. (iparam.c [1.4]: 2000/06/19 22:22:51 lpd) + - PDF files with embedded TrueType fonts didn't map characters to +glyph indices correctly (i.e., using the same algorithm as Acrobat Reader). +(lib/gs_agl.ps [1.1], lib/gs_ttf.ps [1.5]: 2000/06/21 02:15:01 lpd) + - The dictionary used to hold Encodings wasn't large enough. +(lib/gs_init.ps [1.10]: 2000/06/27 17:55:05 lpd) + - The change in parameter type checking required for the new +Process[DSC]Comment user parameters broke type checking for system +parameters. (lib/gs_lev2.ps [1.4]: 2000/06/27 17:56:04 lpd) + - Calling out to process a comment during scanning left an extra +element on the operand stack if the comment appeared within { }. +(ztoken.c [1.3]: 2000/06/28 00:47:05 lpd) + - In some cases, two successive DSC comments produced a syntaxerror. +(ztoken.c [1.4]: 2000/06/28 05:14:17 lpd) + - The code for registering compiled fonts was sensitive to its +position in the order of loading the initialization files (caused an error +if loaded too early). (lib/gs_ccfnt.ps [1.3]: 2000/06/29 23:31:14 lpd) + - [gs_]currentgray didn't return the correct value if the current +color space was a DeviceN space using the alternate space. (zcolor.c [1.3], +zcolor1.c [1.2]: 2000/07/03 15:28:26 lpd) + +Adds predefined pdfwrite settings similar to the three standard settings in +Adobe Acrobat Distiller 4, plus a "default" setting, with +-dPDFSETTINGS=/settingname. (lib/gs_pdfwr.ps [1.4]: 2000/04/29 02:29:21 lpd) + +Increments the version number to 6.23. From now on, we use odd numbers +during development, even numbers for released filesets. +(lib/gs_init.ps [1.8]: 2000/04/29 16:49:43 lpd) + +Changes .buildfont1 to accept Type 1 fonts with LanguageGroup other than 0 +or 1. This is contrary to the spec, but we've seen a few fonts with other +values. (zfont1.c [1.5]: 2000/05/06 08:19:37 lpd) + +Cleans up code and comments slightly. (lib/gs_dps.ps [1.3]: 2000/05/30 +20:35:56 lpd) + +Adds user parameters ProcessComment and ProcessDSCComment. If not null, +these procedures are called with the file and the comment line whenever the +scanner detects a comment (or non-DSC comment) or DSC comment. NOTE: the +interpreter is currently patched so that ProcessComment is never called. +(interp.c [1.4], iscan.c [1.2], iscan.h [1.2], lib/gs_init.ps [1.9], +lib/gs_lev2.ps [1.3], ztoken.c [1.2], ztype.c [1.2]: 2000/06/27 00:53:38 +lpd) + +Finishes implementing the Process[DSC]Comment callout. (icontext.c [1.4], +icstate.h [1.3], interp.c [1.5], iscan.h [1.3], itoken.h [1.1], +lib/gs_init.ps [1.11], ztoken.c [1.5], zusparam.c [1.2]: 2000/06/28 20:17:00 +lpd) + +Changes the name of the unread operator to .unread, retaining unread as a +synonym for backward compatibility. (lib/gs_init.ps [1.12], zfileio.c [1.7]: +2000/06/29 15:58:24 lpd) + +Adds a findprotodevice "operator", to find a device prototype by name. +(lib/gs_init.ps [1.13]: 2000/07/05 04:49:11 lpd) + +Changes the version numbering system back to sequential (not odd/even). +Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE". +(lib/gs_init.ps [1.14]: 2000/07/05 17:23:54 lpd) + +</pre><h2><a name="6.22 Streams"></a>Streams</h2><pre> + +Fixes problems: + - file_limit wasn't initialized properly in some cases. +(sfxfd.c [1.4], sfxstdio.c [1.3]: 2000/05/02 02:06:41 lpd) + - smd5.c didn't compile properly with "traditional C" compilers. +(smd5.c [1.2]: 2000/05/19 06:08:01 lpd) + - The workaround for Microsoft C's omission of O_APPEND et al caused +warnings or errors with other compilers. (stat_.h [1.3]: 2000/07/03 21:07:05 +lpd) + +Works around the fact that Microsoft Visual C++ (only) doesn't define the O_ +flags for the `open' library call. (stat_.h [1.2]: 2000/05/31 20:34:43 lpd) + +Finishes working around the fact that Microsoft C, in defiance of multiple +standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or +anywhere else). (stat_.h [1.4]: 2000/07/05 00:48:21 lpd) + +</pre><h2><a name="6.22 Library"></a>Library</h2><pre> + +Fixes problems: + - A null Pattern color caused an error. (gspcolor.c [1.2]: +2000/05/01 15:15:07 lpd) + - A procedure name exceeded VMS's 31-character limit. +(gsparam.h [1.6]: 2000/05/02 01:47:50 lpd) + - If the DataSource of a shading was a reusable stream, the stream +wasn't reset before rendering the shading. (gxshade.c [1.2]: 2000/05/02 +07:05:10 lpd) + - shfill didn't go through the device fill_path procedure, +preventing it from being written out as a high-level PostScript or PDF +construct. (gscolor3.c [1.2]: 2000/05/02 07:06:23 lpd) + - Once again, corrects an incorrect dependency list. +(gscolor3.c [1.3]: 2000/05/02 07:14:11 lpd) + - The code for adding elements to small-string free lists was wrong, +possibly causing an endless loop. (gsnogc.c [1.3]: 2000/05/04 01:29:53 lpd) + - Fixes minor syntactic incompatibilities with "traditional C" +compilers. (gsfunc4.c [1.2], gstype42.c [1.5]: 2000/05/11 16:14:51 lpd) + - CIEBasedDEF[G] color spaces computed incorrect results or caused +invalid memory accesses, especially if DecodeDEF[G] is not the identity +function. (This bug had probably been there since these color spaces were +first implemented, unnoticed because DecodeDEF[G] is almost always the +identity.) (gscie.c [1.2], gsciemap.c [1.2], gxctable.c [1.2]: 2000/05/15 +19:58:38 lpd) + - Temporary files weren't created as private or exclusive. +(close_.h [1.1], gp_unifs.c [1.2], gpmisc.c [1.1], gpmisc.h [1.1]: +2000/05/19 17:52:51 lpd) + - OutputFile values starting with a %d format string caused an +error. (bug introduced in 5.85) (gsdevice.c [1.4]: 2000/05/20 06:58:11 lpd) + - In rare cases, an overflow could occur in the filling loop, +producing distorted output. (Fix from Artifex Software.) (gxfill.c [1.3]: +2000/05/23 05:46:52 lpd) + - When writing PDF or PostScript, stroked rectangles could sometimes +be omitted from the output. (gdevvec.c [1.3]: 2000/05/24 18:48:14 lpd) + - In PDF output, the conversion of Type 1 to Type 2 CharStrings +didn't adjust the X offset of the accent for 'seac', causing accents to be +displaced to the right. (gdevpsfx.c [1.3]: 2000/05/24 23:20:43 lpd) + - The definitions of user names weren't properly associated with +local VM (they were stored in a static variable). (gsalloc.c [1.3], +gxalloc.h [1.2]: 2000/05/26 02:27:58 lpd) + - The change for local user names didn't update the structure +descriptor for gs_ref_memory_t. (gsalloc.c [1.4], gxalloc.h [1.3]: +2000/05/26 02:33:38 lpd) + - The fix for 'seac' when converting Type 1 to Type 2 CharStrings +wasn't quite complete. (gdevpsfx.c [1.4]: 2000/05/26 20:48:37 lpd) + - If [eo]clip set a rectangular region, clippath would return the +rounded clipping box, not the correct clipping path. (gxcpath.c [1.2]: +2000/05/31 22:20:04 lpd) + - ShadingType 2 shadings could cause an invalid memory access. +(gsfunc3.c [1.3]: 2000/06/04 18:25:33 lpd) + - Printer drivers that didn't implement print_page_copies didn't +print multiple copies of the same page on separate files if the OutputFile +name included %d, and some drivers (such as the TIFF drivers) produced +invalid output. (gdevprn.c [1.4]: 2000/06/05 02:04:26 lpd) + - 32-bit sample values in shading data didn't work, because some +CPUs execute (1 << 32) as (1 << 0). (gxshade.c [1.3]: 2000/06/07 19:07:17 +lpd) + - Type 1 fonts without eexec encryption still included the 4 eexec +padding bytes. (bug probably introduced since 6.0) (gdevpsf1.c [1.4]: +2000/06/12 17:38:48 lpd) + - Axial shadings with a non-orthogonal CTM could fail to fill the +required region. (fix from Artifex) (gxshade1.c [1.4]: 2000/06/12 21:45:19 +lpd) + - When allocator debugging was enabled (-Z@), 'restore' didn't clear +vacated space in inner chunks. (gsalloc.c [1.5]: 2000/06/13 07:04:18 lpd) + - the row buffers for images weren't allocated with a stable +allocator, possibly causing data corruption or invalid accesses if a +PostScript program invoked save/restore within the data-reading procedure +for an image. (gsimage.c [1.2]: 2000/06/13 07:05:21 lpd) + - Rendering TrueType fonts didn't adjust the flatness to ensure +accurate results. (gstype42.c [1.6], gxchrout.c [1.1], gxchrout.h [1.1], +gxtype1.c [1.5]: 2000/06/20 15:46:53 lpd) + - Calling get_params with a static (read-only) device prototype +could cause a memory access error. (gsdparam.c [1.3]: 2000/06/22 14:05:49 +lpd) + - [gs_]currentgray didn't return the correct value if the current +color space was a DeviceN space using the alternate space. (gscolor.c [1.2], +gscolor.h [1.2], gscolor1.c [1.2]: 2000/07/03 15:28:26 lpd) + - Some picky compilers complained about "integer constant is +unsigned in ANSI C, signed with -traditional". (md5.c [1.2]: 2000/07/03 +21:55:18 lpd) + - If TMPDIR wasn't defined, TEMP would be ignored. (bug introduced +in 6.23) (gpmisc.c [1.4]: 2000/07/04 19:54:00 lpd) + - Watcom C requires the non-standard O_BINARY mode flag when opening +(with open) a file that will later be opened in binary mode with fdopen. +(gpmisc.c [1.6]: 2000/07/05 17:08:27 lpd) + +Restructures the code for handling ImageType 3 images, for the benefit of +the PDF writer. (gximage3.c [1.3], gximage3.h [1.1]: 2000/04/30 03:08:15 +lpd) + +Implements ImageType 3 images in the PDF writer. (gximage3.c [1.4], +gximage3.h [1.2]: 2000/04/30 06:21:58 lpd) + +Creates a procs structure for shadings, moving the fill_rectangle procedure +into it, in anticipation of adding a get_params procedure. (gsshade.c [1.2], +gsshade.h [1.2], gxshade.h [1.2]: 2000/04/30 19:37:37 lpd) + +Implements PatternType 2 patterns and shfill in the PDF writer. +(gsptype2.c [1.2]: 2000/05/02 07:14:58 lpd) + +Changes gdev_prn_file_is_new from a macro to a procedure. (gdevprn.c [1.3], +gdevprn.h [1.4]: 2000/05/20 20:25:48 lpd) + +Works around the fact that Microsoft Visual C++ defines S_IREAD and S_IWRITE +but not their newer equivalents S_IRUSR and S_IWUSR. (gpmisc.c [1.2]: +2000/05/24 18:49:54 lpd) + +Changes some assignments to work around over-zealous compiler warnings. +(gxtype1.c [1.4]: 2000/05/24 23:52:58 lpd) + +Works around the fact that Microsoft Visual C++ (only) doesn't define the O_ +flags for the `open' library call. (gpmisc.c [1.3]: 2000/05/31 20:34:43 lpd) + +Improves some comments in A_fill_stripe. (gxshade1.c [1.3]: 2000/06/04 +20:58:23 lpd) + +Finishes working around the fact that Microsoft C, in defiance of multiple +standards, by default doesn't define the O_ flags for 'open' in fcntl.h (or +anywhere else). (fcntl_.h [1.1], gpmisc.c [1.5]: 2000/07/05 00:48:21 lpd) + +Adds O_BINARY to the Microsoft compatibility fcntl.h patch. (fcntl_.h [1.2]: +2000/07/05 17:21:43 lpd) + +Changes the version numbering system back to sequential (not odd/even). +Between numbered filesets, GS_PRODUCT will say "CVS PRE-RELEASE". +(gscdef.c [1.3]: 2000/07/05 17:23:54 lpd) + +Updates GS_PRODUCT for making a fileset. (gscdef.c [1.4]: 2000/07/06 +00:01:03 lpd) + +<hr> + +<h1><a name="Version6.21"></a>Version 6.21 (2000-04-28)</h1> + +<p> +This fileset includes more PDF writer enhancements: conversion of embedded +Type 1 fonts to Type 1C (smaller), handling of more color spaces for images, +ImageType 4 images, compression of mask images, support for (tiled) Pattern +colors, more graphics state distiller parameters, recording of graphics +state functions in the output. It also greatly improves the space usage and +loading time for CMaps. + +<p> +All problems registered on SourceForge numbered 104890 or lower are closed, +except for the following: 101549, 101814, 101905, 101955, 102146, 102735, +103528, 104118, 104375. + +<p> +The following projects are in a partially completed state in the PDF writer: + +<ul> + +<li>CID-keyed fonts (gdevpdf[eftw].c) -- barely started. + +<li>ImageType 3 images (gdevpdf[ij].c) -- started. + +</ul> + +<pre> + +<h2><a name="6.21_Incompatible_changes"></a>Incompatible changes</h2> + +(Drivers) + - The downsampling filters now require WidthIn and HeightIn, +replacing Columns. + - The gp_ procedures for managing screen swapping between console +and graphics are removed. + - Any driver that processes the pdfmark pseudo-parameter must now +also return null for the "value" of the pdfmark parameter when (and only +when) specifically requested. +(PDF writer) + - The last argument of pdf_alloc_font has changed. + - pdf_set_color is renamed pdf_set_pure_color. + - When producing PDF 1.3 output, the base 14 fonts are now +candidates for embedding just like any other fonts. +(Interpreter) + - The .fontproperties procedure in gs_fonts.ps now takes an +additional argument. + - The interpreter must no longer reference stdin/out/err directly. +(Library) + - The internal representation of CMaps is changed completely, and +has several new required members. + - gs_cmap is renamed gs_cmap_t; gx_code_map is renamed +gx_code_map_t. + - Clients creating CMaps must call gs_cmap_init to initialize them. + - The library must no longer reference stdin/out/err directly. + + +<h2><a name="6.21 Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - The PDF writer could get an ioerror when downsampling images whose +size wasn't an exact multiple of the downsampling factor. +(doc/News.htm [1.31]: 2000/04/13 16:44:59 lpd) + - When processing a PDF file, the font substitution heuristic based +on the FontName sometimes overrode the Flags information in the +FontDescriptor. (doc/News.htm [1.34]: 2000/04/20 06:36:02 lpd) + - When pdfwrite was producing PDF 1.3 output, the base 14 fonts were +never embedded, rather than being handled like all other fonts. +(doc/News.htm [1.37]: 2000/04/20 23:49:40 lpd) + - The URL for the Arphic free Chinese fonts had become incorrect. +(doc/Fonts.htm [1.3]: 2000/04/27 13:44:52 lpd) + - Fixes a few typos, and adds GS_FONTPATH to the list of environment +variables to be unset for a pristine test run. (doc/Release.htm [1.10]: +2000/04/28 22:08:41 lpd) + +Adds projects related to SVG and to pswrite image compression. +(doc/Projects.htm [1.4]: 2000/04/07 18:39:12 lpd) + +Makes the ps2pdf scripts replace a .eps extension with .pdf, as they do with +.ps. (doc/Ps2pdf.htm [1.7], man/ps2pdf.1 [1.5], man/ps2pdfwr.1 [1.2]: +2000/04/07 19:28:14 lpd) + +Completely redesigns the representation of CMaps, to reduce space +requirements and make comparing them more reasonable, changing gs_cmap to +gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The +PostScript code currently only handles a few well-behaved CMap structures.) +(doc/News.htm [1.27]: 2000/04/08 03:54:38 lpd) + +Documents the need to set SYNC=nosync on NextStep / OpenStep systems. +(doc/Make.htm [1.10]: 2000/04/10 04:45:37 lpd) + +Overhauls font embedding in the PDF writer: splits off the code into a new +file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and +adds a little bit of code for future support of Type 0 and CID-keyed fonts. +(doc/News.htm [1.28]: 2000/04/10 07:48:37 lpd) + +Documents the fact that building on NeXTSTEP 3.3 systems requires removing +-Wmissing-declarations from GCFLAGS. (doc/Make.htm [1.11]: 2000/04/11 +14:06:54 lpd) + +Enhances pdf2ps to allow defaulting the output file name. +(man/pdf2ps.1 [1.2]: 2000/04/11 14:23:24 lpd) + +Factors out code for writing functions and for adding filter-related entries +to a stream dictionary; implements the DefaultRenderingIntent distiller +parameter. (doc/Ps2pdf.htm [1.8]: 2000/04/11 16:06:57 lpd) + +Implements additional distiller parameters: PreserveHalftoneInfo, +PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs. +Remove), UCRandBGInfo. Splits off graphics state management into separate +files. Implements the remaining graphics state parameters (halftone, +transfer function, black generation, undercolor removal, halftone phase, +smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******. +In anticipation of handling more general colors, renames pdf_set_color as +pdf_set_pure_color, and adds pdf_set_drawing_color. (doc/News.htm [1.29]: +2000/04/11 18:31:32 lpd) + +Updates documentation to match recent changes in the pdfwrite driver. +(doc/Ps2pdf.htm [1.9]: 2000/04/11 22:56:17 lpd) + +Makes the second argument of the pfbtopfa script optional, so 'pfbtopfa +dir/x.pfb' is equivalent to 'pfbtopfa dir/x.pfb x.pfa'. +(man/pfbtopfa.1 [1.2]: 2000/04/12 17:41:41 lpd) + +In pdfwrite, rewrites the image writing code to use Cos objects rather than +direct printing, and splits off the creation of image dictionaries into a +new file; adds support for tiling with uncolored Patterns; implements +converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the +same for ImageType 3. This code is "in progress" and likely to have problems +for a while. (doc/News.htm [1.30]: 2000/04/12 18:44:35 lpd) + +Implements pdfwrite compression for mask images, using the same parameters +as for monochrome images. (doc/News.htm [1.32]: 2000/04/13 18:40:23 lpd) + +Adds user-contributed uniprint parameter files for the Canon BJC-8200, +including an addition for the Red Hat printer data base. +(doc/Devices.htm [1.4]: 2000/04/14 03:59:57 lpd) + +Slightly updates the user-contributed documentation on the new BJC-8200 +uniprint parameters. (doc/Devices.htm [1.5]: 2000/04/15 00:20:54 lpd) + +Completes code for reading and writing CMaps. (doc/News.htm [1.33]: +2000/04/16 03:05:29 lpd) + +Clarifies some details of posting releases on SourceForge. +(doc/Release.htm [1.9]: 2000/04/17 22:59:24 lpd) + +Converts the ps2epsi documentation to HTML. (doc/Ps2epsi.htm [1.1], +doc/Readme.htm [1.6], doc/ps2epsi.txt [1.2]: 2000/04/18 17:59:13 lpd) + +Adds a couple of graphics library optimization projects. +(doc/Projects.htm [1.5]: 2000/04/19 04:05:11 lpd) + +Adds a project for creating an OutputDevice resource instance for each +device. (doc/Projects.htm [1.6]: 2000/04/19 21:37:47 lpd) + +Checks in the accumulated change log. (doc/Changes.htm [1.10]: 2000/04/20 +07:24:22 lpd) + +Removes the gp_ procedures for managing screen swapping between console and +graphics, which haven't been used for a long time and are no longer useful. +(doc/News.htm [1.35]: 2000/04/20 22:47:35 lpd) + +Removes all remaining direct references to stdin/out/err from the library, +interpreter, and non-contributed drivers; moves the ersatz definitions of +stdin/out/err to a new header file. (doc/News.htm [1.36]: 2000/04/20 +23:30:22 lpd) + +Reduces the startup time for displaying PDF files, by skipping the creation +of pdfmarks for annotations and outlines when the output device doesn't +process pdfmarks. (doc/News.htm [1.38]: 2000/04/21 16:58:28 lpd) + +Notes that even if SHARE_JPEG=1, the IJG library sources are required. +(doc/Make.htm [1.12]: 2000/04/27 07:39:05 lpd) + +Documents the new -dPrinted[=true/false] switch for PDF files. +(doc/Use.htm [1.3]: 2000/04/27 08:17:05 lpd) + +Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input. +No output is produced until the filter is closed. (doc/Language.htm [1.2]: +2000/04/27 14:39:57 lpd) + +Updates the description of the project to produce higher-level PCL output. +(doc/Projects.htm [1.7]: 2000/04/28 10:42:02 lpd) + +Adds a sample file containing a wide variety of PDF annotations; updates +documentation for this and some other overlooked files. +(doc/Psfiles.htm [1.4]: 2000/04/28 10:51:02 lpd) + +Notes that the uniprint dnj750c.upp parameters are also good for the 450C. +(doc/Devices.htm [1.6]: 2000/04/28 14:27:02 lpd) + +Updates release dates. (man/pdf2ps.1 [1.3], man/ps2ps.1 [1.5]: 2000/04/28 +18:29:32 lpd) + +Updates version numbers and dates for the 6.21 fileset. +(doc/Bug-form.htm [1.6], doc/Devices.htm [1.7], doc/Fonts.htm [1.4], +doc/Language.htm [1.3], doc/Make.htm [1.13], doc/Projects.htm [1.8], +doc/Ps2epsi.htm [1.2], doc/Psfiles.htm [1.5], doc/Readme.htm [1.7], +doc/Use.htm [1.4]: 2000/04/28 22:06:25 lpd) + +Updates the news for the 6.21 fileset. (doc/News.htm [1.39]: 2000/04/28 +22:18:16 lpd) + +</pre><h2><a name="6.21 Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - Some makefile macros were used before being defined. +(devs.mak [1.9], lib.mak [1.9]: 2000/04/07 16:02:03 lpd) + - `make install-data' didn't install lib/gs_frsd.ps or +lib/pdfopt.ps. (unixinst.mak [1.7]: 2000/04/07 19:17:48 lpd) + - gsmake would get into a loop if the makefile was not a symbolic +link; `gsmake check' didn't accept a makefile name on the command line. +(toolbin/gsmake.tcl [1.2]: 2000/04/07 19:37:21 lpd) + - `makemaster' referred to an undefined variable. (How could it ever +have worked?) (toolbin/makeset.tcl [1.3]: 2000/04/07 19:39:27 lpd) + - A dependency wasn't updated when moving the gdevpsf* rules from +devs.mak to lib.mak. (lib.mak [1.10]: 2000/04/07 19:40:25 lpd) + - The dependencies in the makefile weren't updated for the pdfwrite +font embedding overhaul. (devs.mak [1.11]: 2000/04/10 18:57:33 lpd) + - Once again, the dependencies hadn't been updated. (int.mak [1.17]: +2000/04/11 15:59:42 lpd) + - Setting pdfwrite parameters for a DCTEncode filter could cause a +crash (memory fault). (devs.mak [1.16]: 2000/04/13 01:53:07 lpd) + - `make install' didn't install all the documentation files. +(unixinst.mak [1.9]: 2000/04/14 04:06:13 lpd) + - The Color LaserJet 5 drivers were incorrectly identified as +"supported" rather than "contributed". (contrib.mak [1.7], devs.mak [1.17]: +2000/04/20 17:12:54 lpd) + - PDF images with a bitmap Mask caused errors or produced incorrect +output. (int.mak [1.20]: 2000/04/24 00:59:04 lpd) + +Completely redesigns the representation of CMaps, to reduce space +requirements and make comparing them more reasonable, changing gs_cmap to +gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The +PostScript code currently only handles a few well-behaved CMap structures.) +(int.mak [1.16]: 2000/04/08 03:54:38 lpd) + +Updates version #s to 6.21. (We should have done this earlier.) +(version.mak [1.12]: 2000/04/10 04:46:36 lpd) + +Overhauls font embedding in the PDF writer: splits off the code into a new +file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and +adds a little bit of code for future support of Type 0 and CID-keyed fonts. +(devs.mak [1.10]: 2000/04/10 07:48:37 lpd) + +Adds Function-based tint_transform procedures for Separation and DeviceN +color spaces. (lib.mak [1.11]: 2000/04/10 19:02:19 lpd) + +Factors out code for writing functions and for adding filter-related entries +to a stream dictionary; implements the DefaultRenderingIntent distiller +parameter. (devs.mak [1.12]: 2000/04/11 16:06:57 lpd) + +Implements additional distiller parameters: PreserveHalftoneInfo, +PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs. +Remove), UCRandBGInfo. Splits off graphics state management into separate +files. Implements the remaining graphics state parameters (halftone, +transfer function, black generation, undercolor removal, halftone phase, +smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******. +In anticipation of handling more general colors, renames pdf_set_color as +pdf_set_pure_color, and adds pdf_set_drawing_color. (devs.mak [1.13]: +2000/04/11 18:31:32 lpd) + +Splits off creation and writing of color spaces, and writing color values, +into a separate file. Adds support for (Function-based) Separation and +DeviceN color spaces, general Pattern color spaces, and procedure-based +Indexed color spaces. Adds some code to support Pattern colors, but stubs it +out because it depends on changes in the image writing code that haven't +been integrated yet. In fact, most of the new code isn't called yet, either. +(devs.mak [1.14]: 2000/04/11 19:10:13 lpd) + +In pdfwrite, rewrites the image writing code to use Cos objects rather than +direct printing, and splits off the creation of image dictionaries into a +new file; adds support for tiling with uncolored Patterns; implements +converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the +same for ImageType 3. This code is "in progress" and likely to have problems +for a while. (devs.mak [1.15]: 2000/04/12 18:44:35 lpd) + +Adds user-contributed uniprint parameter files for the Canon BJC-8200, +including an addition for the Red Hat printer data base. +(unixinst.mak [1.8]: 2000/04/14 03:59:57 lpd) + +Adds code to write out CMaps, similar to the code for writing fonts, for +eventual embedding in PDF output. (int.mak [1.18], lib.mak [1.12]: +2000/04/14 07:17:24 lpd) + +Completes code for reading and writing CMaps. (int.mak [1.19], +lib.mak [1.13]: 2000/04/16 03:05:29 lpd) + +Adds a user-contributed driver for the Epson Stylus (Color) Photo printers. +(contrib.mak [1.6]: 2000/04/18 06:34:26 lpd) + +Converts the ps2epsi documentation to HTML. (unixinst.mak [1.10]: 2000/04/18 +17:59:13 lpd) + +Checks in the accumulated change log. (version.mak [1.13]: 2000/04/20 +07:24:22 lpd) + +Converts the bmp* and bmpa* devices to -dev2, to make them const. +(devs.mak [1.18]: 2000/04/20 17:19:21 lpd) + +Removes the gp_ procedures for managing screen swapping between console and +graphics, which haven't been used for a long time and are no longer useful. +(dvx-tail.mak [1.2], lib.mak [1.14], openvms.mak [1.3], openvms.mmk [1.4], +os2.mak [1.5], unix-aux.mak [1.2], watc.mak [1.3], watclib.mak [1.3], +winlib.mak [1.2]: 2000/04/20 22:47:35 lpd) + +Removes all remaining direct references to stdin/out/err from the library, +interpreter, and non-contributed drivers; moves the ersatz definitions of +stdin/out/err to a new header file. (lib.mak [1.15], unix-gcc.mak [1.5]: +2000/04/20 23:30:22 lpd) + +Adds compression for pdfwrite Patterns. (devs.mak [1.19]: 2000/04/24 +06:13:02 lpd) + +Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input. +No output is produced until the filter is closed. (devs.mak [1.20], +int.mak [1.21], lib.mak [1.16]: 2000/04/27 14:39:57 lpd) + +Adds a user-contributed driver for the H-P 970Cxi inkjet printer. +(contrib.mak [1.8]: 2000/04/27 14:55:56 lpd) + +Factors the H-P monochrome laser and inkjet drivers into a generic driver +and printer-specific clients. (devs.mak [1.21]: 2000/04/27 20:16:33 lpd) + +Adds a user-contributed driver for the Brother HL-1250 laser printer. This +has a dual AFPL/GPL license, and a non-Aladdin copyright. +(contrib.mak [1.9]: 2000/04/27 20:18:39 lpd) + +Once again, updates some dependency lists that had become inconsistent with +the code. (contrib.mak [1.10], devs.mak [1.22], lib.mak [1.17]: 2000/04/27 +21:36:19 lpd) + +Yet again, updates an out-of-date dependency list. (contrib.mak [1.11]: +2000/04/28 18:28:42 lpd) + +Changes the check for documentation files having the correct embedded date. +(toolbin/pre [1.3]: 2000/04/28 18:29:14 lpd) + +Updates version numbers and dates for the 6.21 fileset. (version.mak [1.14]: +2000/04/28 22:06:26 lpd) + +</pre><h2><a name="6.21 Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - The e-mail address for reporting problems was out of date. +(lib/ps2epsi.ps [1.2]: 2000/04/10 02:27:21 lpd) + - If a font didn't have a FontName (which is the case for bitmap +fonts produced by recent versions of dvips), ps2epsi caused an error. +(lib/ps2epsi.ps [1.3]: 2000/04/11 16:32:51 lpd) + - Backs out contributed changes of 2000-03-05 because of bugs. +(ansi2knr.c [1.3]: 2000/04/13 03:41:48 lpd) + - ps2epsi removed all ^M characters in the input, possibly +corrupting binary data. (lib/ps2epsi [1.2]: 2000/04/27 01:44:04 lpd) + +Makes the ps2pdf scripts replace a .eps extension with .pdf, as they do with +.ps. (lib/ps2pdfwr [1.2], lib/ps2pdfxx.bat [1.2]: 2000/04/07 19:28:14 lpd) + +Enhances pdf2ps to allow defaulting the output file name. (lib/pdf2ps [1.2]: +2000/04/11 14:23:24 lpd) + +Makes the second argument of the pfbtopfa script optional, so 'pfbtopfa +dir/x.pfb' is equivalent to 'pfbtopfa dir/x.pfb x.pfa'. (lib/pfbtopfa [1.2]: +2000/04/12 17:41:41 lpd) + +Adds user-contributed uniprint parameter files for the Canon BJC-8200, +including an addition for the Red Hat printer data base. (lib/bj8.rpd [1.1]: +2000/04/14 03:59:57 lpd) + +Increases the VMThreshold when converting PostScript to PDF, to reduce +garbage collection overhead. (lib/ps2pdfwr [1.3]: 2000/04/17 19:06:58 lpd) + +Moves the optimization prologue for ps2pdf from the command line to a +procedure, to avoid shell length limits. (lib/ps2pdfwr [1.4], +lib/ps2pdfxx.bat [1.3]: 2000/04/18 16:40:14 lpd) + +Removes the gp_ procedures for managing screen swapping between console and +graphics, which haven't been used for a long time and are no longer useful. +(bench.c [1.2], gp_dosfb.c [1.2], gp_iwatc.c [1.2], gp_nofb.c [1.2]: +2000/04/20 22:47:35 lpd) + +Checks in a file overlooked in the elimination of the gp_ console +procedures. (gp_os2.c [1.2]: 2000/04/20 23:27:21 lpd) + +</pre><h2><a name="6.21 Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - The pdfwrite driver sometimes compressed images in an Indexed +color space with the DCTEncode filter, producing garbage. (gdevpsdi.c [1.4]: +2000/04/12 19:25:56 lpd) + - Setting pdfwrite parameters for a DCTEncode filter could cause a +crash (memory fault). (gdevpsdf.h [1.7], gdevpsdi.c [1.5], gdevpsdp.c [1.4], +gdevpsdu.c [1.2]: 2000/04/13 01:53:07 lpd) + - Compressing with DCTEncode tried to add the compression filter +twice. (gdevpsdi.c [1.6]: 2000/04/13 04:52:38 lpd) + - The PDF writer could get an ioerror when downsampling images whose +size wasn't an exact multiple of the downsampling factor. (gdevpsdi.c [1.7], +gdevpsds.c [1.2], gdevpsds.h [1.2]: 2000/04/13 16:44:59 lpd) + - Downsampled mask images could cause a memory access error. +(gdevpsdi.c [1.9]: 2000/04/18 16:37:04 lpd) + - PDF Patterns weren't written correctly if the ProcessColorModel +wasn't Device RGB. (gdevpsdu.c [1.3]: 2000/04/24 05:40:30 lpd) + - The [e]pswrite driver produced incorrect output for color images +with multiple data sources. (gdevps.c [1.5]: 2000/04/25 19:35:07 lpd) + +Implements pdfwrite compression for mask images, using the same parameters +as for monochrome images. (gdevpsdi.c [1.8]: 2000/04/13 18:40:23 lpd) + +Adds user-contributed uniprint parameter files for the Canon BJC-8200, +including an addition for the Red Hat printer data base. +(lib/bj8gc12f.upp [1.1], lib/bj8hg12f.upp [1.1], lib/bj8oh06n.upp [1.1], +lib/bj8pa06n.upp [1.1], lib/bj8pp12f.upp [1.1], lib/bj8ts06n.upp [1.1]: +2000/04/14 03:59:57 lpd) + +Adds a user-contributed driver for the Epson Stylus (Color) Photo printers. +(gdevphex.c [1.1]: 2000/04/18 06:34:26 lpd) + +Converts the bmp* and bmpa* devices to -dev2, to make them const. +(gdevbmp.c [1.2], gdevbmpa.c [1.2]: 2000/04/20 17:19:21 lpd) + +Documents the astounding fact that the Xt implementation actually writes +into the XtResource tables. (gdevxres.c [1.2]: 2000/04/20 19:59:28 lpd) + +Removes all remaining direct references to stdin/out/err from the library, +interpreter, and non-contributed drivers; moves the ersatz definitions of +stdin/out/err to a new header file. (gdevxxf.c [1.3]: 2000/04/20 23:30:22 +lpd) + +When writing PDF output, reduces the size of compressed images in Indexed +color spaces by not using a Predictor for them. (gdevpsdi.c [1.10]: +2000/04/21 06:46:08 lpd) + +Adds an internal filter for converting images to Indexed form if possible. +(gdevpsds.c [1.3], gdevpsds.h [1.3]: 2000/04/21 19:26:37 lpd) + +Cleans up code by replacing macros with procedures or variables. +(gdevps.c [1.6]: 2000/04/25 20:35:46 lpd) + +Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or +vertical line segments going in the same direction. This makes a big +difference for PostScript files produced by certain applications. +(gdevps.c [1.7]: 2000/04/25 22:39:54 lpd) + +Adds a user-contributed driver for the H-P 970Cxi inkjet printer. +(gdevdj9.c [1.1]: 2000/04/27 14:55:56 lpd) + +Factors the H-P monochrome laser and inkjet drivers into a generic driver +and printer-specific clients. (gdevdjet.c [1.3], gdevdljm.c [1.1], +gdevdljm.h [1.1]: 2000/04/27 20:16:33 lpd) + +Adds a user-contributed driver for the Brother HL-1250 laser printer. This +has a dual AFPL/GPL license, and a non-Aladdin copyright. (gdevhl12.c [1.1]: +2000/04/27 20:18:39 lpd) + +Once again, updates some dependency lists that had become inconsistent with +the code. (gdevdj9.c [1.2]: 2000/04/27 21:36:19 lpd) + +Makes the printers in gdevdjet.c that support setting the number of copies +use this feature when multiple copies are requested. (gdevdjet.c [1.4], +gdevdljm.c [1.2], gdevdljm.h [1.2]: 2000/04/28 13:37:47 lpd) + +</pre><h2><a name="6.21 PDF writer"></a>PDF writer</h2><pre> + +Fixes problems: + - The Cos objects of resources not shared between pages weren't +freed at the end of each page. (gdevpdf.c [1.9]: 2000/04/10 04:17:56 lpd) + - gdevpdfe.c was omitted from the check-in for the overhaul of +pdfwrite font embedding. (gdevpdfe.c [1.1]: 2000/04/10 16:01:29 lpd) + - pdfwrite output could contain commands to set the line width to a +negative value, which PostScript allows but PDF doesn't. (gdevpdfd.c [1.6]: +2000/04/12 19:51:14 lpd) + - The changes for the new color handling code caused stroked +graphics not to output the line width. (new bug since 6.20) +(gdevpdfd.c [1.7]: 2000/04/13 03:47:21 lpd) + - Pattern resources were written with incorrectly scaled XStep and +YStep, and without a Type entry. (gdevpdfc.c [1.3], gdevpdfi.c [1.10]: +2000/04/13 04:12:33 lpd) + - The PDF writer could get an ioerror when downsampling images whose +size wasn't an exact multiple of the downsampling factor. +(gdevpdfi.c [1.11]: 2000/04/13 16:44:59 lpd) + - Bitmapped characters weren't written properly on the output file +(new bug since 6.20). (gdevpdfg.h [1.4], gdevpdfi.c [1.12], +gdevpdfj.c [1.2]: 2000/04/13 17:24:54 lpd) + - gxdcolor.h was required for gxpcolor.h, but wasn't included. +(gdevpdfc.c [1.4]: 2000/04/18 17:42:55 lpd) + - A table of constant strings wasn't declared as const. +(gdevpdfp.c [1.7]: 2000/04/20 17:37:31 lpd) + - When pdfwrite was producing PDF 1.3 output, the base 14 fonts were +never embedded, rather than being handled like all other fonts. +(gdevpdff.c [1.4]: 2000/04/20 23:49:40 lpd) + - Indexed color spaces used in in-line images were being written +incorrectly. Also optimizes Indexed images by converting RGB palettes to +Gray if all the entries are actually gray. (gdevpdfc.c [1.5]: 2000/04/21 +15:29:20 lpd) + - The recent optimization for using the ' command in PDF output lost +track of the leading value between blocks of text, causing lines in later +blocks to overprint each other. (gdevpdfu.c [1.9]: 2000/04/21 22:29:05 lpd) + - Backs out the change that allowed embedding of the base 14 fonts, +because it produces invalid output. (gdevpdff.c [1.5]: 2000/04/22 00:13:11 +lpd) + - Colored Patterns requiring masking weren't written properly. +(gdevpdfc.c [1.6]: 2000/04/24 00:09:37 lpd) + - Patterns were written upside-down. (gdevpdfc.c [1.7]: 2000/04/24 +01:11:36 lpd) + - PDF Patterns weren't written correctly if the ProcessColorModel +wasn't Device RGB. (gdevpdf.c [1.15], gdevpdfc.c [1.8], gdevpdfg.h [1.5], +gdevpdfi.c [1.13], gdevpdfx.h [1.15]: 2000/04/24 05:40:30 lpd) + - The color space for images wasn't always written in the correct +form (an object reference for image XObjects, a resource name for in-line +images). (gdevpdfi.c [1.14]: 2000/04/28 12:07:37 lpd) + - Patterns were sometimes written with a duplicate Type element. +(gdevpdfc.c [1.10]: 2000/04/28 12:23:54 lpd) + - Patterns were sometimes written twice, with an empty definition +the second time. (gdevpdfi.c [1.15]: 2000/04/28 12:24:42 lpd) + +Overhauls font embedding in the PDF writer: splits off the code into a new +file (gdevpdfe.c), writes embedded Type 1 fonts as Type 1C (CFF Type 2), and +adds a little bit of code for future support of Type 0 and CID-keyed fonts. +(gdevpdff.c [1.3], gdevpdff.h [1.2], gdevpdft.c [1.6], gdevpdfw.c [1.3]: +2000/04/10 07:48:37 lpd) + +Factors out code for writing functions and for adding filter-related entries +to a stream dictionary; implements the DefaultRenderingIntent distiller +parameter. (gdevpdf.c [1.10], gdevpdfu.c [1.6], gdevpdfx.h [1.8]: 2000/04/11 +16:06:57 lpd) + +Adds ExtGState resources. These should be written and freed at the end of +each page, but they aren't yet. (gdevpdfx.h [1.9]: 2000/04/11 16:38:14 lpd) + +Implements additional distiller parameters: PreserveHalftoneInfo, +PreserveOverprintSetting, TransferFunctionInfo (except for Apply vs. +Remove), UCRandBGInfo. Splits off graphics state management into separate +files. Implements the remaining graphics state parameters (halftone, +transfer function, black generation, undercolor removal, halftone phase, +smoothness, overprint, stroke adjustment) ****** EXCEPT FOR IMAGES ******. +In anticipation of handling more general colors, renames pdf_set_color as +pdf_set_pure_color, and adds pdf_set_drawing_color. (gdevpdf.c [1.11], +gdevpdfd.c [1.4], gdevpdfg.c [1.1], gdevpdfg.h [1.1], gdevpdfi.c [1.8], +gdevpdft.c [1.7], gdevpdfu.c [1.7], gdevpdfx.h [1.10]: 2000/04/11 18:31:32 +lpd) + +Splits off creation and writing of color spaces, and writing color values, +into a separate file. Adds support for (Function-based) Separation and +DeviceN color spaces, general Pattern color spaces, and procedure-based +Indexed color spaces. Adds some code to support Pattern colors, but stubs it +out because it depends on changes in the image writing code that haven't +been integrated yet. In fact, most of the new code isn't called yet, either. +(gdevpdf.c [1.12], gdevpdfc.c [1.1], gdevpdfd.c [1.5], gdevpdfg.c [1.2], +gdevpdfg.h [1.2], gdevpdft.c [1.8], gdevpdfx.h [1.11]: 2000/04/11 19:10:13 +lpd) + +Integrates a couple of minor overlooked changes in the text-writing code. +(gdevpdf.c [1.13], gdevpdft.c [1.9], gdevpdfx.h [1.12]: 2000/04/11 19:20:56 +lpd) + +In pdfwrite, rewrites the image writing code to use Cos objects rather than +direct printing, and splits off the creation of image dictionaries into a +new file; adds support for tiling with uncolored Patterns; implements +converting ImageType 4 images to their PDF 1.3 counterpart; starts to do the +same for ImageType 3. This code is "in progress" and likely to have problems +for a while. (gdevpdf.c [1.14], gdevpdfc.c [1.2], gdevpdfg.c [1.3], +gdevpdfg.h [1.3], gdevpdfi.c [1.9], gdevpdfj.c [1.1], gdevpdfx.h [1.13]: +2000/04/12 18:44:35 lpd) + +Tweaks the PDF writer to use the ' command for positioning text when +possible (small optimization only). (gdevpdfg.c [1.4], gdevpdft.c [1.10], +gdevpdfu.c [1.8], gdevpdfx.h [1.14]: 2000/04/18 16:08:16 lpd) + +Reduces the startup time for displaying PDF files, by skipping the creation +of pdfmarks for annotations and outlines when the output device doesn't +process pdfmarks. (gdevpdfp.c [1.8]: 2000/04/21 16:58:28 lpd) + +Adds compression for pdfwrite Patterns. (gdevpdfc.c [1.9]: 2000/04/24 +06:13:02 lpd) + +Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or +vertical line segments going in the same direction. This makes a big +difference for PostScript files produced by certain applications. +(gdevpdf.c [1.16], gdevpdfd.c [1.8]: 2000/04/25 22:39:54 lpd) + +Updates the list of remaining pdfwrite tasks. (gdevpdfp.c [1.9]: 2000/04/27 +21:36:52 lpd) + +</pre><h2><a name="6.21 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre> + +Fixes problems: + - Embedded subset CFF fonts in PDF files were defined using the name +in the font data rather than the font name in the PDF resource object. (bug +#102901) (lib/pdf_ops.ps [1.5]: 2000/04/11 05:33:13 lpd) + - When processing a PDF file, the font substitution heuristic based +on the FontName sometimes overrode the Flags information in the +FontDescriptor. (lib/pdf_font.ps [1.6]: 2000/04/20 06:36:02 lpd) + - PDF images with a bitmap Mask caused errors or produced incorrect +output. (lib/pdf_draw.ps [1.10]: 2000/04/24 00:59:04 lpd) + - Masked images weren't drawn properly, because the two data sources +could reference the same file. (lib/pdf_draw.ps [1.11]: 2000/04/24 05:39:45 +lpd) + - *Really* fixes the problem of data source aliasing for masked +images. (lib/pdf_draw.ps [1.12]: 2000/04/24 05:53:43 lpd) + - If a font specified Subtype = /TrueType but the actual font used +was not a TrueType font, any Encoding in the Font object should be ignored. +(This is a hack required by the PDF specification.) (lib/pdf_font.ps [1.7]: +2000/04/24 06:37:18 lpd) + - Colored annotation borders caused an error; 0-width borders were +drawn even though they shouldn't be; Link and Stamp annotations weren't +drawn at all. Also adds a new -dPrinted[=true/false] switch to choose +whether to produce "screen" or "printer" output. (code from Artifex) +(lib/pdf_draw.ps [1.13], lib/pdf_main.ps [1.7]: 2000/04/27 08:16:40 lpd) + +Makes undefined XObject resources for the Do operator produce a warning +rather than an error, to parallel Acrobat Reader. (lib/pdf_draw.ps [1.9]: +2000/04/16 07:48:23 lpd) + +Tweaks up the performance of the PDF interpreter loop slightly. +(lib/pdf_base.ps [1.7]: 2000/04/18 05:45:49 lpd) + +Reduces the startup time for displaying PDF files, by skipping the creation +of pdfmarks for annotations and outlines when the output device doesn't +process pdfmarks. (lib/pdf_main.ps [1.6]: 2000/04/21 16:58:28 lpd) + +</pre><h2><a name="6.21 Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Fixes some signed/unsigned char * mismatches. (zfrsd.c [1.3]: +2000/04/07 15:27:14 lpd) + - Automatic loading of fonts from resource files didn't work +(usually caused an unmatchedmark or typecheck error). +(lib/gs_fonts.ps [1.5], lib/gs_res.ps [1.9]: 2000/04/08 03:45:41 lpd) + - A -> should have been a . (only shows up on 64-bit systems). +(zfunc4.c [1.3]: 2000/04/09 20:04:00 lpd) + - the most recent 'fixes' for loading font resources caused all +built-in fonts to be returned as null. (lib/gs_res.ps [1.10]: 2000/04/09 +22:51:01 lpd) + - /Category defineresource didn't make the category definition +dictionary read-only. (lib/gs_res.ps [1.11]: 2000/04/10 18:29:04 lpd) + - Attempting to build an invalid FunctionType 4 function could cause +a memory access error. (zfunc4.c [1.4]: 2000/04/10 19:38:53 lpd) + - Embedded subset CFF fonts in PDF files were defined using the name +in the font data rather than the font name in the PDF resource object. (bug +#102901) (lib/gs_cff.ps [1.4]: 2000/04/11 05:33:13 lpd) + - CMaps with more than one code space range weren't converted to the +internal form correctly; begincidchar and beginnotdefchar caused errors. +(lib/gs_cmap.ps [1.3], zfcmap.c [1.6]: 2000/04/14 07:53:10 lpd) + - flushfile and closefile didn't properly flush streams whose final +target was a procedure, and closefile didn't actually close them. (This is a +very old bug.) (zfproc.c [1.2]: 2000/04/18 05:50:15 lpd) + - CIDFontType 0 CIDFonts in which some FDArray element had no Subrs +caused an error. (lib/gs_cidfn.ps [1.14]: 2000/04/18 05:58:08 lpd) + - Attempting to set a PageSize with 4 elements actually set the +PageSize (to the first 2 elements), rather than ignoring the attempt. (This +is just a patch to prevent some PageMaker files from being thrown off by the +4-element PageSizes in Input Attributes.) (lib/gs_setpd.ps [1.2]: 2000/04/19 +06:01:19 lpd) + - When choosing a substituted font, 'Serif' had priority over +'Sans', so unknown fonts with 'SansSerif' in their name would have a serif +font substituted. (lib/gs_fonts.ps [1.6]: 2000/04/19 13:48:48 lpd) + - The fix to make setpagedevice ignore 4-element PageSizes in +InputAttributes was broken. (It's impossible that it could ever have worked, +despite the fact that we tested it.) (lib/gs_setpd.ps [1.3]: 2000/04/20 +06:24:39 lpd) + - When processing a PDF file, the font substitution heuristic based +on the FontName sometimes overrode the Flags information in the +FontDescriptor. (lib/gs_fonts.ps [1.7]: 2000/04/20 06:36:02 lpd) + - Showing a string in a Type 1 font with a singular combined matrix +(e.g., after 0 scalefont setfont) caused an error instead of doing nothing. +(zchar1.c [1.3]: 2000/04/22 00:34:46 lpd) + - Images with multiple file DataSources where two or more of the +files were the same caused a crash. (zimage.c [1.3]: 2000/04/24 00:07:41 +lpd) + - .reusablestreamdecode wasn't defined for use in LanguageLevel 2. +(The ReusableStreamDecode filter itself was properly defined.) +(lib/gs_frsd.ps [1.3]: 2000/04/24 00:45:38 lpd) + - Loading an unknown font gave a spurious "non-string font name" +message; unknown fonts with names containing style strings like Bold or +Italic caused an error. (bug introduced since 6.20) (lib/gs_fonts.ps [1.8]: +2000/04/28 22:03:58 lpd) + +Adds a workaround for misnamed glyphs in some Microsoft TrueType font 'post' +tables. (lib/gs_mgl_e.ps [1.2], lib/gs_ttf.ps [1.4]: 2000/04/08 01:53:16 +lpd) + +Completely redesigns the representation of CMaps, to reduce space +requirements and make comparing them more reasonable, changing gs_cmap to +gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The +PostScript code currently only handles a few well-behaved CMap structures.) +(lib/gs_cmap.ps [1.2], zfcmap.c [1.4], zfont0.c [1.2]: 2000/04/08 03:54:38 +lpd) + +Updates version #s to 6.21. (We should have done this earlier.) +(lib/gs_init.ps [1.7]: 2000/04/10 04:46:36 lpd) + +Makes Separation and DeviceN color spaces detect that their tint transform +procedure is a Function, and call it rather than using its cached values. +(zcsdevn.c [1.2], zcssepr.c [1.3]: 2000/04/10 19:39:44 lpd) + +Adds code to write out CMaps, similar to the code for writing fonts, for +eventual embedding in PDF output. (zfcmap.c [1.5]: 2000/04/14 07:17:24 lpd) + +Completes code for reading and writing CMaps. (lib/gs_cmap.ps [1.4], +zfcmap.c [1.7]: 2000/04/16 03:05:29 lpd) + +Works around a bug in the AdobePS5 Windows driver, which emits CMaps lacking +the required CMapName entry. (lib/gs_cidfn.ps [1.15], lib/gs_cmap.ps [1.5]: +2000/04/18 07:18:42 lpd) + +Moves the optimization prologue for ps2pdf from the command line to a +procedure, to avoid shell length limits. (lib/gs_pdfwr.ps [1.3]: 2000/04/18 +16:40:14 lpd) + +Removes all remaining direct references to stdin/out/err from the library, +interpreter, and non-contributed drivers; moves the ersatz definitions of +stdin/out/err to a new header file. (imainarg.c [1.2]: 2000/04/20 23:30:22 +lpd) + +Speeds up Type 1 font loading slightly by removing a conversion from binary +to hex and back again. (zmisc1.c [1.2]: 2000/04/22 16:03:18 lpd) + +Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input. +No output is produced until the filter is closed. (zfmd5.c [1.1]: 2000/04/27 +14:39:57 lpd) + +Adds a sample file containing a wide variety of PDF annotations; updates +documentation for this and some other overlooked files. +(examples/annots.pdf [1.1]: 2000/04/28 10:51:02 lpd) + +</pre><h2><a name="6.21 Streams"></a>Streams</h2><pre> + +Fixes problems: + - FILE_IMPLEMENTATION=both was broken (by the introduction of +sread_subfile). (sfxfd.c [1.3]: 2000/04/10 02:41:48 lpd) + - flushfile and closefile didn't properly flush streams whose final +target was a procedure, and closefile didn't actually close them. (This is a +very old bug.) (stream.c [1.6]: 2000/04/18 05:50:15 lpd) + - The PixelDifference filters (Predictor = 2) weren't implemented +for Colors > 4 and BitsPerComponent != 8, and they dropped trailing bytes if +the length of the data wasn't an exact multiple of the pixel size. +(spdiff.c [1.2]: 2000/04/22 03:55:22 lpd) + +Enhances the ASCII85Encode filter to avoid %! at the beginning of a line of +output, in addition to avoiding %% which it did already. (sa85x.h [1.2], +sfilter2.c [1.2]: 2000/04/08 01:30:36 lpd) + +Removes all remaining direct references to stdin/out/err from the library, +interpreter, and non-contributed drivers; moves the ersatz definitions of +stdin/out/err to a new header file. (std.h [1.2]: 2000/04/20 23:30:22 lpd) + +Speeds up Type 1 font loading slightly by removing a conversion from binary +to hex and back again. (seexec.c [1.2], sfilter.h [1.5]: 2000/04/22 16:03:18 +lpd) + +Adds a MD5Encode filter, which computes the 16-byte MD5 digest of the input. +No output is produced until the filter is closed. (smd5.c [1.1], +smd5.h [1.1]: 2000/04/27 14:39:57 lpd) + +</pre><h2><a name="6.21 Library"></a>Library</h2><pre> + +Fixes problems: + - Fixes some signed/unsigned char * mismatches. (gdevpsf2.c [1.5]: +2000/04/07 15:27:14 lpd) + - Writing a Type 2 CFF with multiply-encoded glyphs produced an +incorrect Encoding. Also, when producing output for PDF 1.2 files, no longer +emits certain opcodes that cause an (unjustified) error in Acrobat Reader 3 +for GNU/Linux. (gdevpsf.h [1.3], gdevpsf2.c [1.6]: 2000/04/10 07:42:31 lpd) + - gsmisc.c didn't compile in DEBUG mode on systems with a +non-standard prototype for the sqrt function. (gsmisc.c [1.3]: 2000/04/10 +16:00:31 lpd) + - One picky compiler complained about (1L << 31). (gsmisc.c [1.4]: +2000/04/10 17:21:41 lpd) + - putdeviceparams allowed a PageSize or .MediaSize value with the +wrong number of elements to take effect. (gsdparam.c [1.2]: 2000/04/19 +05:59:05 lpd) + - The elimination of stdin/out/err also eliminated some #defines +that are needed for error printout. (gsio.h [1.3]: 2000/04/21 06:39:17 lpd) + - The structure descriptor for ImageType 3 images was public rather +than private. (gsiparm3.h [1.3], gximage3.c [1.2]: 2000/04/22 07:02:18 lpd) + - The "point matching" feature of TrueType composite glyphs wasn't +implemented, causing some composite (accented) characters to have their +accents misplaced. (gstype42.c [1.4]: 2000/04/25 07:22:50 lpd) + +Completely redesigns the representation of CMaps, to reduce space +requirements and make comparing them more reasonable, changing gs_cmap to +gs_cmap_t and gx_code_map to gx_code_map_t. (****** NOTE ****** The +PostScript code currently only handles a few well-behaved CMap structures.) +(gsfcmap.c [1.4], gsfcmap.h [1.2], gxfcmap.h [1.3], gxfont0.h [1.2]: +2000/04/08 03:54:38 lpd) + +Adds Function-based tint_transform procedures for Separation and DeviceN +color spaces. (gscdevn.c [1.3], gscdevn.h [1.2], gscsepr.c [1.3], +gscsepr.h [1.2]: 2000/04/10 19:02:19 lpd) + +Adds code to write out CMaps, similar to the code for writing fonts, for +eventual embedding in PDF output. (gdevpsf.h [1.4], gdevpsfm.c [1.1]: +2000/04/14 07:17:24 lpd) + +Completes code for reading and writing CMaps. (gdevpsf.h [1.5], +gdevpsfm.c [1.2], gsccode.h [1.3], gsfcid.c [1.3], gsfcmap.c [1.5], +gxcid.h [1.2], gxfcmap.h [1.4]: 2000/04/16 03:05:29 lpd) + +Removes the gp_ procedures for managing screen swapping between console and +graphics, which haven't been used for a long time and are no longer useful. +(gp.h [1.3]: 2000/04/20 22:47:35 lpd) + +Removes all remaining direct references to stdin/out/err from the library, +interpreter, and non-contributed drivers; moves the ersatz definitions of +stdin/out/err to a new header file. (gsdevice.c [1.3], gsio.h [1.2], +gsmisc.c [1.5], gxdevice.h [1.2]: 2000/04/20 23:30:22 lpd) + +Adds an essential new file overlooked in the removal of references to +stdin/out/err. (gxstdio.h [1.1]: 2000/04/20 23:50:20 lpd) + +Makes the [e]pswrite and pdfwrite drivers merge adjacent horizontal or +vertical line segments going in the same direction. This makes a big +difference for PostScript files produced by certain applications. +(gdevvec.c [1.2], gdevvec.h [1.2]: 2000/04/25 22:39:54 lpd) + +Adds template macros for printer devices that implement print_page_copies +rather than print_page. (gdevprn.c [1.2], gdevprn.h [1.3]: 2000/04/28 +13:36:16 lpd) + +<hr> + +<h1><a name="Version6.20"></a>Version 6.20 (2000-04-06)</h1> + +<p> +This fileset includes the first steps towards bringing the pdfwrite driver +closer to matching Acrobat Distiller 4. Highlights: + +<ul> + +<li> Reimplementation of CIDFontType 0 support in C rather than PostScript; + +<li> Parsing (but not functional implementation) of nearly all the Acrobat +Distiller 4 parameters; + +<li> Implementation of AutoRotatePages and DCTEncode filtering in the PDF +writer; + +<li> A PDF linearizer ("optimizer"). + +</ul> + +<p> +All problems registered on SourceForge numbered 103963 or lower are closed, +except for the following: 101549, 101814, 101829, 101905, 101955, 102046, +102047, 102132, 102146, 102735, 102901, 103016, 103528, 103963. + +<pre> + +<h2><a name="6.20_Incompatible_changes"></a>Incompatible changes</h2> + +(Procedures) + - The default value of FPU_TYPE in all Windows and OS/2 makefiles +is now 387 rather than 0. + - The process for reporting problems has changed significantly. +(PDF writer) + - The Cos procedures no longer take the device as an argument, +except for object-creating procedures, which now take the device rather +than an allocator. + - The is_object member of Cos values is replaced by value_type. +Clients must use COS_VALUE_IS_OBJECT() to test whether a value is an object +reference. + - The Cos procedures that take C strings no longer copy the string. + - The argument of cos_write_object is no longer const. +(Drivers) + - The default BufferSpace for printer drivers is now 4 Mb. + - Device halftone order implementations must now provide a new +bit_index procedure. + - The image argument for psdf_setup_image_filters is changed from +gs_image_t to gs_pixel_image_t. + - The font-related psdf_ procedures are renamed psf_. +(Streams) + - The interface to the [T]BCP filters is now in a separate file, +sbcp.h. +(PDF interpreter) + - The internal beginpage procedure is renamed dictbeginpage, and +now takes a dictionary argument. +(Interpreter) + - The argument list for the internal build_gs_TrueType_font +procedure has changed. + - The zcharstring_glyph_outline procedure is renamed +zchar1_glyph_outline. + - The Instances dictionary of resources is renamed .Instances. +(Library) + - ImageType 4 images now give an error if a MaskColor value is out +of the range of possible sample values. + - The definition of gs_param_key_t, the key type returned by +parameter list enumeration, is changed. + - Implementors of parameter lists must now call gs_param_list_init +to initialize the common members. + - st_indexed_map is now private. Clients allocating instances of +this structure must now call alloc_indexed_map. + - Setting a transfer map as the identity mapping now requires +calling gx_set_identity_transfer. + - gs_cid_system_info is renamed gs_cid_system_info_t. + - The get_outline procedure of a Type 42 or Type 11 (CIDFontType 0) +font now returns 1 if the string was newly allocated and can be freed by the +client. + - The procs member of gs_type1_data is now an in-line structure +rather than a pointer to a const structure. + + +<h2><a name="6.20 Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - If log2_transfer_map_size > 8, identity transfer functions +returned garbage. The fix requires that if a client wants to set a transfer +function to the identity mapping, it must call gx_set_identity_transfer +rather than simply setting the procedure to gs_identity_transfer. +(doc/News.htm [1.13]: 2000/03/19 17:14:47 lpd) + - In PDF files, the page CropBox was not being used to clip the +output. (doc/News.htm [1.18]: 2000/03/21 23:08:32 lpd) + - Fixes several problems in resourceforall and resource loading: the +operands of resourceforall were restored even in the case of an error in the +client's procedure; the name Instances had special meaning for some Adobe +code; resourceforall caused an invalidaccess error if an operand was in +local VM but the current VM was global; loading a resource from a file could +cause a typecheck error if the file left values on the operand stack. +(doc/News.htm [1.25]: 2000/04/04 22:26:02 lpd) + - The location of the lists of supported and unsupported drivers was +incorrect. (doc/Bug-info.htm [1.2]: 2000/04/07 03:01:52 lpd) + +Undoes an accidental RCS ID substitution in what was supposed to be literal +text. (doc/Htmstyle.htm [1.2]: 2000/03/18 22:29:03 lpd) + +Increments the version number to 6.20, in anticipation of the next release. +(We do this at the beginning of the development for a release, not the end.) +(doc/History6.htm [1.4], doc/News.htm [1.6]: 2000/03/19 00:27:22 lpd) + +Splits out the [T]BCP filter interface into a separate file. +(doc/News.htm [1.7]: 2000/03/19 02:40:18 lpd) + +Documents the fact that ImageType 4 images now cause an error for +out-of-range MaskColor values. (doc/News.htm [1.8]: 2000/03/19 04:32:09 lpd) + +Updates the change log with recent changes. (doc/Changes.htm [1.4]: +2000/03/19 05:39:58 lpd) + +Adds a new document listing projects with which we are seeking help. Also +makes the description of Changes.htm and News.htm more accurate. +(doc/New-user.htm [1.2], doc/Projects.htm [1.1], doc/Readme.htm [1.3]: +2000/03/19 06:07:15 lpd) + +Changes the default value of BufferSpace to 4 Mb. In desktop applications, +this is a reasonable value that can substantially improve performance +(especially for color printers); embedded applications will want to set +BufferSpace themselves in any case. (doc/News.htm [1.9]: 2000/03/19 06:51:13 +lpd) + +Changes the key type returned by parameter list enumeration to include a +persistence flag, makes C parameter lists support non-persistent keys, and +upgrades GC descriptors so that parameter lists can be used non-transiently; +updates implementors of parameter lists to call gs_param_list_init to +initialize the common members, which is now required. (doc/News.htm [1.10]: +2000/03/19 15:16:11 lpd) + +Documents the fact that drivers that device halftone order implementations +must now provide the new bit_index procedure. (This should have been +documented when bit_index was introduced!) (doc/News.htm [1.11]: 2000/03/19 +15:47:47 lpd) + +Makes st_indexed_map private. Clients must now use the constructor procedure +alloc_indexed_map rather than allocating instances directly. +(doc/News.htm [1.12]: 2000/03/19 16:37:28 lpd) + +Update the date and change log for the latest batches of checked-in changes. +(doc/Changes.htm [1.5]: 2000/03/19 17:29:57 lpd) + +Adds a PDF linearizer ("optimizer"). This is a separate utility (not +integrated with the pdfwrite driver), written in PostScript. +(doc/Psfiles.htm [1.2]: 2000/03/20 04:31:22 lpd) + +Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements +the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and +xxxACSImageDict distiller parameters. Implements DCTEncode as an +xxxImageFilter option (it used to cause a crash). Makes the +AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict) +if the image has 8 bits per component and is not Indexed, and LZW/Flate +otherwise: this still isn't right, but it's closer. Implementation changes: +Changes the implementation of distiller parameter dictionaries from stream +states to parameter lists; changes the test for masks in +psdf_setup_image_filters, and changes the image argument from gs_image_t to +gs_pixel_image_t. (doc/News.htm [1.14]: 2000/03/20 05:40:04 lpd) + +Moves font-writing support into a new module (gdevpsf*), changing the source +file names. Adds the ability to write CFF fonts, with either Type 1 or Type +2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts +with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to +Type 2, including optimizing sequences of Type 1 operators into a single +Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT +TESTED]. Starts (just barely) to remove more unneeded information from +embedded TrueType fonts. (doc/News.htm [1.15]: 2000/03/20 07:02:12 lpd) + +Updates the consolidated change log with today's changes. +(doc/Changes.htm [1.6]: 2000/03/20 07:18:38 lpd) + +Starts to move support for CIDFontType 0 and 2 into C code, needed by the +PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for +CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts +that have a GlyphDirectory (not documented in the PLRM, but clearly +correct). Implements Adobe 3011 features: integer and dictionary CIDMaps, +and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code, +which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.) +(doc/News.htm [1.16]: 2000/03/20 19:53:06 lpd) + +Notes that the argument list for the internal build_gs_TrueType_font +procedure has changed, as part of the CIDFont migration to C code. +(doc/News.htm [1.17]: 2000/03/20 20:04:20 lpd) + +Adds invocation scripts and documentation for the PDF "optimizer". +(man/pdfopt.1 [1.1]: 2000/03/21 17:01:33 lpd) + +Updates information about reporting problems when using Ghostview or GSview. +(doc/Bug-form.htm [1.3], doc/New-user.htm [1.3]: 2000/03/22 22:13:49 lpd) + +Checks in the latest consolidated change log. (doc/Changes.htm [1.7]: +2000/03/24 05:04:55 lpd) + +Substantially enhances the Cos object machinery. Interface: Adds a few more +procedures, including a procedure to create a stream that writes directly +into a Cos stream object, procedures for putting more kinds of values into +arrays and dictionaries, and a param_list interface. Changes Cos objects to +store a reference to the PDF device, and removes the device argument from +all Cos procedures other than object creation. Replaces the Boolean +is_object member of Cos values by a value_type enum: clients must now use +COS_VALUE_IS_OBJECT() to test whether a value is an object reference. To +reduce allocator overhead, makes the Cos procedures that take C strings no +longer copy the string. Records whether each Cos object has been written +into the output, so that in the future (but not in this batch of changes) +resource definitions can be copied at the end of each page. Implementation: +Moves more of the implementation of Cos objects to the .c file. +(doc/News.htm [1.19]: 2000/03/24 06:12:52 lpd) + +Adds parsing for the remaining Acrobat Distiller 4 parameters, although most +of them don't have any effect yet; brings documentation up to date. +(doc/Ps2pdf.htm [1.3]: 2000/03/28 07:36:58 lpd) + +Implements LockDistillerParams; completes the StartPage/EndPage fix checked +in just before. (doc/Ps2pdf.htm [1.4]: 2000/03/28 07:52:06 lpd) + +Changes the default value of FPU_TYPE in all Windows and OS/2 makefiles from +0 to 387, since all current desktop CPUs include floating point hardware. +(doc/News.htm [1.20]: 2000/03/28 17:03:48 lpd) + +Changes the get_outline / glyph_data procedure for getting encoded font +outline data to return an indication of whether the outline data were just +allocated and can be freed by the client. (This is a possibly +non-backward-compatible change.) (doc/News.htm [1.21]: 2000/03/28 18:47:02 +lpd) + +Adds a note about bogus "ANSI aliasing" warnings from the DEC C compiler. +(doc/Make.htm [1.8]: 2000/03/29 19:29:08 lpd) + +Changes the procs structure of gs_type1_data to an in-line structure rather +than a pointer to a const structure. (Needed for moving CIDFontType 0 +support into C.) (doc/News.htm [1.22]: 2000/03/29 22:10:31 lpd) + +Updates the change log with recent changes. (doc/Changes.htm [1.8]: +2000/03/30 07:59:39 lpd) + +Creates a real list of projects on which help would be appreciated. +(doc/Projects.htm [1.2]: 2000/04/01 00:43:11 lpd) + +Finishes implementing the ability to write CIDFontType 0 CFFs. This involved +a surprising number of changes in other font-related files. +(doc/News.htm [1.23]: 2000/04/02 07:38:46 lpd) + +Updates the documentation on preparing releases to reflect the addition of +the toolbin directory. (doc/Release.htm [1.7]: 2000/04/02 18:56:58 lpd) + +Implements the AutoRotatePages distiller parameter. (doc/Ps2pdf.htm [1.5]: +2000/04/03 02:54:41 lpd) + +Updates the problem reporting procedure to use SourceForge; separates the +description of the procedure from the reporting form. +(doc/Bug-form.htm [1.4], doc/Bug-info.htm [1.1], doc/New-user.htm [1.4], +doc/News.htm [1.24], doc/Readme.htm [1.4]: 2000/04/04 04:14:02 lpd) + +Updates release dates and version numbers. (doc/Bug-form.htm [1.5], +doc/Bug-info.htm [1.3], doc/Htmstyle.htm [1.3], doc/Make.htm [1.9], +doc/New-user.htm [1.5], doc/Projects.htm [1.3], doc/Ps2pdf.htm [1.6], +doc/Psfiles.htm [1.3], doc/Readme.htm [1.5], man/ps2pdf.1 [1.4], +man/ps2ps.1 [1.4]: 2000/04/07 05:21:45 lpd) + +Removes redundant material, and the www.aladdin.com distribution point, from +the release procedure documentation. (doc/Release.htm [1.8]: 2000/04/07 +05:24:29 lpd) + +</pre><h2><a name="6.20 Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - pdfread.dev incorrectly depended on dpsnext_. (int.mak [1.4]: +2000/03/19 02:00:09 lpd) + - The referenced libpng version hadn't been updated to 1.0.5. +(openvms.mmk [1.3]: 2000/03/20 16:38:46 lpd) + - The MSVC++ 6 compiler no longer recognizes the /FPi87 switch. +(msvccmd.mak [1.2]: 2000/03/31 05:06:53 lpd) + - MSVC versions before 5, not before 6, recognize /FPi87. +(msvccmd.mak [1.3]: 2000/03/31 05:50:33 lpd) + - Removes some occurrences of $,I,d,: that shouldn't be substituted. +(toolbin/pre [1.2]: 2000/04/07 05:20:35 lpd) + +Increments the version number to 6.20, in anticipation of the next release. +(We do this at the beginning of the development for a release, not the end.) +(version.mak [1.6]: 2000/03/19 00:27:22 lpd) + +Adds a pseudo-encoding for the CFF StandardStrings that represent +characters. (devs.mak [1.3], int.mak [1.3], unixinst.mak [1.5]: 2000/03/19 +00:38:50 lpd) + +Updates makefiles with dependencies for recent changes. (int.mak [1.5], +lib.mak [1.3]: 2000/03/19 05:37:38 lpd) + +Adds dependencies for the new implementation of FunctionType 4 functions. +(int.mak [1.6]: 2000/03/19 07:03:53 lpd) + +Splits off "vanilla" Functions into separate files, in anticipation of +removing them (they were only used to implement PostScript Calculator +Functions). (lib.mak [1.4]: 2000/03/19 07:33:08 lpd) + +Update the date and change log for the latest batches of checked-in changes. +(version.mak [1.7]: 2000/03/19 17:29:57 lpd) + +Moves font-writing support into a new module (gdevpsf*), changing the source +file names. Adds the ability to write CFF fonts, with either Type 1 or Type +2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts +with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to +Type 2, including optimizing sequences of Type 1 operators into a single +Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT +TESTED]. Starts (just barely) to remove more unneeded information from +embedded TrueType fonts. (devs.mak [1.4], lib.mak [1.5]: 2000/03/20 07:02:12 +lpd) + +Updates dependencies to reflect today's batches of checked-in changes. +(devs.mak [1.5], int.mak [1.7], lib.mak [1.6]: 2000/03/20 07:16:35 lpd) + +Updates the makefile for the renaming of gdevpsdf.c => gdevpsdu.c. +(devs.mak [1.6]: 2000/03/20 19:30:35 lpd) + +Starts to move support for CIDFontType 0 and 2 into C code, needed by the +PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for +CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts +that have a GlyphDirectory (not documented in the PLRM, but clearly +correct). Implements Adobe 3011 features: integer and dictionary CIDMaps, +and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code, +which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.) +(int.mak [1.8], lib.mak [1.7]: 2000/03/20 19:53:06 lpd) + +Extends the C support for CIDFontType 0 fonts to include those with FontType +2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF +fonts). (int.mak [1.9]: 2000/03/21 07:43:42 lpd) + +Adds invocation scripts and documentation for the PDF "optimizer". +(unixinst.mak [1.6]: 2000/03/21 17:01:33 lpd) + +Splits off the ReusableStreamDecode filter as a separate module, since +CIDFontType 0 fonts will use it even in LanguageLevels below 3. +(int.mak [1.10]: 2000/03/21 21:34:57 lpd) + +Makes file streams remember the file name, needed for efficiently +implementing reusable streams. (int.mak [1.11]: 2000/03/23 02:13:40 lpd) + +Checks in the latest consolidated change log. (version.mak [1.8]: 2000/03/24 +05:04:55 lpd) + +Changes the implementation of incrementally loaded CIDFontType 0 fonts to +use a ReusableStreamDecode filter, in anticipation of moving the BuildGlyph +procedure for these fonts from PostScript to C. (int.mak [1.12], +version.mak [1.9]: 2000/03/27 16:36:24 lpd) + +Changes the default value of FPU_TYPE in all Windows and OS/2 makefiles from +0 to 387, since all current desktop CPUs include floating point hardware. +(msvc32.mak [1.3], msvclib.mak [1.3], os2.mak [1.4], watcw32.mak [1.3]: +2000/03/28 17:03:48 lpd) + +Updates the change log with recent changes. (version.mak [1.10]: 2000/03/30 +07:59:39 lpd) + +Cleans up some dependencies missed at the last checkin. (devs.mak [1.7], +int.mak [1.13]: 2000/03/31 05:03:30 lpd) + +Finishes implementing the ability to write CIDFontType 0 CFFs. This involved +a surprising number of changes in other font-related files. (int.mak [1.14]: +2000/04/02 07:38:46 lpd) + +Adds a variety of tools used to build and distribute Ghostscript releases. +The only documentation is comments in the files themselves, and there isn't +much of it. All aspects of these tools are subject to change without notice. +(toolbin/3way.tcl [1.1], toolbin/cvs2hist.py [1.1], +toolbin/errlist.tcl [1.1], toolbin/gsmake.tcl [1.1], +toolbin/headers.tcl [1.1], toolbin/leaks.tcl [1.1], +toolbin/makeset.tcl [1.1], toolbin/package.tcl [1.1], toolbin/pre [1.1], +toolbin/pre.chk [1.1], toolbin/precheck.tcl [1.1], toolbin/smoke.ps [1.1], +toolbin/suite.tcl [1.1], toolbin/tmake.tcl [1.1]: 2000/04/02 18:44:27 lpd) + +Moves gsindent from src to toolbin. (toolbin/gsindent [1.1]: 2000/04/02 +18:56:25 lpd) + +Adds an #include required by the Watcom compiler. (devs.mak [1.8]: +2000/04/05 19:51:54 lpd) + +Adds a missing dependency. (lib.mak [1.8]: 2000/04/07 03:00:56 lpd) + +Updates a few dependencies for the release. (int.mak [1.15]: 2000/04/07 +05:23:12 lpd) + +Updates the build date for the release. (version.mak [1.11]: 2000/04/07 +05:25:18 lpd) + +Adds .cvsignore files, to prevent bogus warnings on cvs update. +(.cvsignore [1.1], src/.cvsignore [1.1]: 2000/04/05 19:46:04 lpd) + +</pre><h2><a name="6.20 Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - A couple of places in the Windows code didn't correctly handle +Ghostscript version 6.64, 7 April 2001 +21:45:03 lpd) + - Replaces a final exit() with a return, to avoid a compiler +warning. (genconf.c [1.2]: 2000/04/05 19:53:27 lpd) + +Makes geninit remove whitespace adjacent to hex and base-85 string literals. +(geninit.c [1.2]: 2000/03/18 22:51:24 lpd) + +Adds a PDF linearizer ("optimizer"). This is a separate utility (not +integrated with the pdfwrite driver), written in PostScript. +(lib/pdfopt.ps [1.1], lib/pdfwrite.ps [1.1]: 2000/03/20 04:31:22 lpd) + +Replaces the O(N^2) sorting algorithm for printing unencoded characters with +a O(N log N) algorithm, which makes printing Unicode and Chinese/Japanese +fonts practical. (lib/prfont.ps [1.2]: 2000/03/21 06:39:49 lpd) + +Adds invocation scripts and documentation for the PDF "optimizer". +(lib/pdfopt [1.1], lib/pdfopt.bat [1.1], lib/pdfopt.ps [1.2]: 2000/03/21 +17:01:33 lpd) + +Splits off the ReusableStreamDecode filter as a separate module, since +CIDFontType 0 fonts will use it even in LanguageLevels below 3. +(zfreuse.c [1.2]: 2000/03/21 21:34:57 lpd) + +Adds a variety of tools used to build and distribute Ghostscript releases. +The only documentation is comments in the files themselves, and there isn't +much of it. All aspects of these tools are subject to change without notice. +(gsindent [1.2]: 2000/04/02 18:44:27 lpd) + +</pre><h2><a name="6.20 Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - The color_info member of the Windows and OS/2 printer devices (and +other devices using PC-style palettes) wasn't initialized properly, causing +improper behavior. (gdevos2p.c [1.2], gdevpccm.h [1.2], gdevwpr2.c [1.3]: +2000/03/20 21:05:11 lpd) + - Fixes a bug in the mswinpr2 driver in the handling of +BitsPerPixel. (gdevwpr2.c [1.4]: 2000/03/22 17:08:33 lpd) + - In PCL XL output (pxl* drivers), if a PostScript image didn't +provide enough source data, the remainder of the output image was +erroneously filled with pixel value 0 (typically black or the foreground +color). (gdevpx.c [1.2]: 2000/03/22 20:55:21 lpd) + - In the output of the pswrite driver (pdf2ps, ps2ps), the showpage +for each page occurred before, not after, the restore that ended the page +contents. This contradicted Adobe's documentation, and made utilities like +N-up printing not work properly. (gdevps.c [1.4]: 2000/03/28 00:52:46 lpd) + - The PCL XL 2.0 value for sRGB color space was wrong, and the +attribute for writing mode was missing. (gdevpxat.h [1.2], gdevpxen.h [1.2]: +2000/03/29 18:19:44 lpd) + - When printing on monochrome LaserJet/DeskJet printers, the driver +didn't set the number of copies to 1; on the LJ 4si, this sometimes caused +double printing. (gdevdjet.c [1.2]: 2000/04/03 14:36:12 lpd) + - Updates clients for the change in the last argument of +cff_string_index from uint * to int *. (gdevpsf2.c [1.4]: 2000/04/05 +19:55:29 lpd) + +Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements +the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and +xxxACSImageDict distiller parameters. Implements DCTEncode as an +xxxImageFilter option (it used to cause a crash). Makes the +AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict) +if the image has 8 bits per component and is not Indexed, and LZW/Flate +otherwise: this still isn't right, but it's closer. Implementation changes: +Changes the implementation of distiller parameter dictionaries from stream +states to parameter lists; changes the test for masks in +psdf_setup_image_filters, and changes the image argument from gs_image_t to +gs_pixel_image_t. (gdevpsdf.h [1.4], gdevpsdi.c [1.3], gdevpsdp.c [1.3]: +2000/03/20 05:40:04 lpd) + +Moves font-writing support into a new module (gdevpsf*), changing the source +file names. Adds the ability to write CFF fonts, with either Type 1 or Type +2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts +with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to +Type 2, including optimizing sequences of Type 1 operators into a single +Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT +TESTED]. Starts (just barely) to remove more unneeded information from +embedded TrueType fonts. (gdevpsd1.c [1.2], gdevpsdf.c [1.3], +gdevpsdf.h [1.5], gdevpsdt.c [1.2], gdevpsf.h [1.1], gdevpsf1.c [1.1], +gdevpsf2.c [1.1], gdevpsft.c [1.1], gdevpsfu.c [1.1], gdevpsfx.c [1.1]: +2000/03/20 07:02:12 lpd) + +Renames an inappropriately named file. (gdevpsdf.c [1.4], gdevpsdf.h [1.6], +gdevpsdu.c [1.1]: 2000/03/20 19:03:43 lpd) + +Extends the C support for CIDFontType 0 fonts to include those with FontType +2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF +fonts). (gdevpsf.h [1.2]: 2000/03/21 07:43:42 lpd) + +Changes the procs structure of gs_type1_data to an in-line structure rather +than a pointer to a const structure. (Needed for moving CIDFontType 0 +support into C.) (gdevpsf1.c [1.2], gdevpsf2.c [1.2], gdevpsfx.c [1.2]: +2000/03/29 22:10:31 lpd) + +Finishes implementing the ability to write CIDFontType 0 CFFs. This involved +a surprising number of changes in other font-related files. +(gdevpsf2.c [1.3], gdevpsfu.c [1.2]: 2000/04/02 07:38:45 lpd) + +Slightly simplifies the output of the psmono and psgray drivers. +(gdevpsim.c [1.2]: 2000/04/02 19:57:37 lpd) + +Adds an #include required by the Watcom compiler. (gdevpsf1.c [1.3]: +2000/04/05 19:51:54 lpd) + +</pre><h2><a name="6.20 PDF writer"></a>PDF writer</h2><pre> + +Fixes problems: + - The pointer enumeration procedure for pdf_image_enum was wrong, +possibly producing a mangled pointer and a memory access error if a garbage +collection occured while writing an image in a PDF file. (gdevpdfi.c [1.5]: +2000/03/20 05:54:13 lpd) + - The computation for testing whether a tiled pattern could be +represented in line, and whether it exceeded Acrobat Reader's size limit, +was wrong, causing some patterns not to be represented as Patterns. +(gdevpdfi.c [1.6]: 2000/03/20 05:58:15 lpd) + - When ProcessColorModel=/DeviceCMYK, if the first object on a page +or after changing the clipping path was white, the PDF writer would write it +as black. (gdevpdfu.c [1.3]: 2000/03/21 18:36:36 lpd) + - If a page ended with an incomplete outline tree, an invalid memory +access occurred. (gdevpdf.c [1.3], gdevpdfm.c [1.2]: 2000/03/24 05:09:56 +lpd) + - The SP pdfmark didn't check that its argument was a graphics +stream. (gdevpdfm.c [1.4]: 2000/03/24 06:18:39 lpd) + - The name of the EndPage Distiller parameter collided with the +EndPage page device parameter. (gdevpdfp.c [1.4]: 2000/03/28 07:45:25 lpd) + - If two embedded fonts had the same base font, the PDF file could +wind up with an invalid entry in the xref table. (gdevpdft.c [1.4]: +2000/04/01 01:18:32 lpd) + +Adds parsing for the remaining Acrobat Distiller 4 parameters. Implements +the LockDistillerParams, xxxDownsampleThreshold, xxxImageDict, and +xxxACSImageDict distiller parameters. Implements DCTEncode as an +xxxImageFilter option (it used to cause a crash). Makes the +AutoFilterxxxImages distiller parameters select JPEG encoding (with ACSDict) +if the image has 8 bits per component and is not Indexed, and LZW/Flate +otherwise: this still isn't right, but it's closer. Implementation changes: +Changes the implementation of distiller parameter dictionaries from stream +states to parameter lists; changes the test for masks in +psdf_setup_image_filters, and changes the image argument from gs_image_t to +gs_pixel_image_t. (gdevpdfi.c [1.4]: 2000/03/20 05:40:04 lpd) + +Moves font-writing support into a new module (gdevpsf*), changing the source +file names. Adds the ability to write CFF fonts, with either Type 1 or Type +2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts +with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to +Type 2, including optimizing sequences of Type 1 operators into a single +Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT +TESTED]. Starts (just barely) to remove more unneeded information from +embedded TrueType fonts. (gdevpdff.c [1.2], gdevpdfw.c [1.2]: 2000/03/20 +07:02:12 lpd) + +Substantially enhances the Cos object machinery. Interface: Adds a few more +procedures, including a procedure to create a stream that writes directly +into a Cos stream object, procedures for putting more kinds of values into +arrays and dictionaries, and a param_list interface. Changes Cos objects to +store a reference to the PDF device, and removes the device argument from +all Cos procedures other than object creation. Replaces the Boolean +is_object member of Cos values by a value_type enum: clients must now use +COS_VALUE_IS_OBJECT() to test whether a value is an object reference. To +reduce allocator overhead, makes the Cos procedures that take C strings no +longer copy the string. Records whether each Cos object has been written +into the output, so that in the future (but not in this batch of changes) +resource definitions can be copied at the end of each page. Implementation: +Moves more of the implementation of Cos objects to the .c file. +(gdevpdf.c [1.4], gdevpdfi.c [1.7], gdevpdfm.c [1.3], gdevpdfo.c [1.2], +gdevpdfo.h [1.2], gdevpdfr.c [1.2], gdevpdfu.c [1.4], gdevpdfx.h [1.3]: +2000/03/24 06:12:52 lpd) + +Changes a few initializations to suppress warnings from one picky compiler +that doesn't like ptr = buf - 1 where buf is an array. (gdevpdfr.c [1.3]: +2000/03/28 02:01:34 lpd) + +Adds parsing for the remaining Acrobat Distiller 4 parameters, although most +of them don't have any effect yet; brings documentation up to date. +(gdevpdf.c [1.5], gdevpdfp.c [1.3], gdevpdfx.h [1.4]: 2000/03/28 07:36:58 +lpd) + +Implements LockDistillerParams; completes the StartPage/EndPage fix checked +in just before. (gdevpdf.c [1.6], gdevpdfp.c [1.5], gdevpdfx.h [1.5]: +2000/03/28 07:52:06 lpd) + +Changes the initial values of the "job control" parameters to match Acrobat +Distiller 4. (gdevpdf.c [1.7], gdevpdfp.c [1.6], gdevpdfx.h [1.6]: +2000/03/28 07:57:14 lpd) + +Implements the AutoRotatePages distiller parameter. (gdevpdf.c [1.8], +gdevpdft.c [1.5], gdevpdfu.c [1.5], gdevpdfx.h [1.7]: 2000/04/03 02:54:41 +lpd) + +</pre><h2><a name="6.20 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre> + +Fixes problems: + - Reading embedded compressed CIDFonts wasn't implemented. +(lib/pdf_font.ps [1.3]: 2000/03/19 01:28:59 lpd) + - PDF images with DeviceN color spaces caused an error. +(lib/pdf_draw.ps [1.2]: 2000/03/19 01:44:53 lpd) + - PDF images with a Mask ignored the mask. (lib/pdf_draw.ps [1.3]: +2000/03/19 01:46:27 lpd) + - the PDF interpreter hadn't been updated for the move to +library-based FunctionType 4 Functions, and still tried to bind the names +true and false to the no longer existing operators .true and .false. +(lib/pdf_draw.ps [1.5]: 2000/03/19 07:37:03 lpd) + - FunctionType 2 and 3 functions didn't work. +(lib/pdf_draw.ps [1.6]: 2000/03/19 15:23:10 lpd) + - In PDF files, the page CropBox was not being used to clip the +output. (lib/pdf_main.ps [1.4], lib/pdf_ops.ps [1.3]: 2000/03/21 23:08:32 +lpd) + - The "fix" for FunctionTypes 2 and 3 in PDF files had made things +worse, because the code didn't distinguish between resolving to a PostScript +function (for shadings) and resolving to a PostScript procedure (for +halftones, BG/UCR, alternate color space mapping, etc.) +(lib/pdf_draw.ps [1.7]: 2000/03/23 18:31:46 lpd) + - Text with a Pattern color scaled the pattern according to the text +matrix, not the default matrix of the marking context. +(lib/pdf_base.ps [1.6], lib/pdf_main.ps [1.5], lib/pdf_ops.ps [1.4]: +2000/03/30 18:01:58 lpd) + - Resolving a Shading didn't create a reusable stream for the +shading data; since the data was then read at unpredictable times, the +shading or other constructs in the PDF file could read incorrect data. +(lib/pdf_draw.ps [1.8]: 2000/04/03 06:01:25 lpd) + +Adds a lforall procedure for the PDF linearizer. (lib/pdf_base.ps [1.3]: +2000/03/19 01:50:05 lpd) + +Changes the PDF interpreter so that following an object reference doesn't +store the result back into the referring slot, and so that # # R always +creates an indirect object. This is necessary for the PDF linearizer. It +shouldn't have any visible effect (other than a possible small performance +cost). (lib/pdf_base.ps [1.4], lib/pdf_draw.ps [1.4]: 2000/03/19 01:53:58 +lpd) + +Refactors some code to make it usable by the PDF linearizer. +(lib/pdf_main.ps [1.3]: 2000/03/19 17:26:42 lpd) + +Speeds up loading embedded Type 1 fonts a little. (lib/pdf_base.ps [1.5], +lib/pdf_font.ps [1.4]: 2000/03/24 07:42:16 lpd) + +Speeds up reading embedded Type 1 fonts a little more. +(lib/pdf_font.ps [1.5]: 2000/03/24 16:28:26 lpd) + +</pre><h2><a name="6.20 Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Font substitution was broken. (lib/gs_fonts.ps [1.3]: 2000/03/19 +00:22:05 lpd) + - The CFF reader gave an error if a font included any Subrs (it's +very surprising that this hasn't surfaced before, but apparently Acrobat +Distiller always produces CFF fonts with no Subrs); the CFF reader didn't +default lenIV to -1 for Type 1 CharStrings; the CFF reader wasn't able to +read CIDFonts. (lib/gs_cff.ps [1.3], lib/gs_cidfn.ps [1.4]: 2000/03/19 +00:45:40 lpd) + - EXTEND_NAMES had stopped working, because not all places that +needed the index of a name ref used name_index rather than r_size +(ilocate.c), and because the high_index value in the name sub-table was set +incorrectly (iname.c). (ilocate.c [1.2], iname.c [1.2]: 2000/03/19 01:33:23 +lpd) + - The attribute check for Functions being executed was incorrect +(always succeeded). (zfunc.c [1.2]: 2000/03/19 02:12:37 lpd) + - s_add_filter didn't ensure enough buffering. This entailed moving +the NullEncode/Decode filters to stream.[hc]. (sfilter1.c [1.2]: 2000/03/19 +03:15:02 lpd) + - The parameters of SubFileDecode filters weren't initialized fully +(required by a change in this version). (zfilter.c [1.3]: 2000/03/19 +04:03:45 lpd) + - The AutoPositionEPSFiles Distiller parameter was misspelled +AutoPositionEPSFile. (lib/gs_pdfwr.ps [1.2]: 2000/03/19 05:03:31 lpd) + - Enumerating the elements of a dictionary-based parameter list +returned garbage for the keys. (iparam.c [1.2]: 2000/03/19 15:13:13 lpd) + - .buildfont0 should not check CIDSystemInfo compatibility. The +PLRM3 says PostScript interpreters do not make this check, even though the +PLRM2 says compatibility is required (!). (zfcmap.c [1.2]: 2000/03/19 +16:53:50 lpd) + - If log2_transfer_map_size > 8, identity transfer functions +returned garbage. The fix requires that if a client wants to set a transfer +function to the identity mapping, it must call gx_set_identity_transfer +rather than simply setting the procedure to gs_identity_transfer. +(zcolor.c [1.2]: 2000/03/19 17:14:47 lpd) + - Separation color spaces didn't store the separation name. +(zcssepr.c [1.2]: 2000/03/19 17:21:36 lpd) + - The addition of the dummy cid_Setup procedure in gs 6.01 was +accidentally commented out. (lib/gs_cidfn.ps [1.5]: 2000/03/21 00:11:55 lpd) + - The test for whether an CIDFontType 2 outline string was large +enough to include prefixed metrics was backwards, which would have caused +problems with any font that used MetricsCount. (zfcid.c [1.3]: 2000/03/21 +00:43:17 lpd) + - A couple of places in the Windows code didn't correctly handle +Ghostscript version numbers of the form #.0#. (dwsetup.cpp [1.2]: 2000/03/22 +21:45:03 lpd) + - In some cases, re-registering an existing font or CIDFont with +definefont would cause an invalidfont error. (zbfont.c [1.4], +zfont42.c [1.3]: 2000/03/28 18:20:39 lpd) + - Re-registering a CIDFont with definefont, or defining a CIDFont +with definefont instead of /CIDFont defineresource, caused an invalidfont +error or a crash. (lib/gs_cidfn.ps [1.9], lib/gs_fonts.ps [1.4]: 2000/03/28 +18:21:50 lpd) + - The new C BuildGlyph code for CIDFontType 0 fonts didn't handle +GlyphDirectory or Type 2 CharStrings correctly. (lib/gs_cidfn.ps [1.12], +zfcid.c [1.8]: 2000/03/31 23:21:57 lpd) + - The internaldict "operator" was allocated in local VM, preventing +it from being bound into procedures allocated in global VM. +(lib/gs_init.ps [1.6]: 2000/04/04 22:16:02 lpd) + - If there was a CIDInit ProcSet defined in the filesystem, the code +for initializing the built-in CIDInit ProcSet became confused. +(lib/gs_cidfn.ps [1.13]: 2000/04/04 22:17:33 lpd) + - Fixes several problems in resourceforall and resource loading: the +operands of resourceforall were restored even in the case of an error in the +client's procedure; the name Instances had special meaning for some Adobe +code; resourceforall caused an invalidaccess error if an operand was in +local VM but the current VM was global; loading a resource from a file could +cause a typecheck error if the file left values on the operand stack. +(interp.c [1.3], lib/gs_ccfnt.ps [1.2], lib/gs_res.ps [1.3]: 2000/04/04 +22:26:02 lpd) + - resourceforall didn't enumerate external (loadable) instances, and +would enumerate an instance twice if it had both a local and a global +definition. (lib/gs_res.ps [1.4]: 2000/04/05 21:07:02 lpd) + - The implementation of resourcestatus wasn't compatible with some +badly written code in an Adobe font downloader that assumes that the +implementation of resourcestatus in Generic and Font is the same. +(lib/gs_res.ps [1.5]: 2000/04/05 21:20:07 lpd) + - The just-checked-in fixed for resourceforall didn't work properly +for the IdiomSet category. (They probably failed for other categories that +had no instances, but we didn't check this.) (lib/gs_res.ps [1.6]: +2000/04/05 21:51:43 lpd) + - Some Adobe font downloading code assumed that loading a resource +file would never leave extra values on the stack; our implementation didn't +ensure this (by popping them if needed). (lib/gs_res.ps [1.8]: 2000/04/06 +04:50:28 lpd) + - If an alphabetic font defined and used a .notdef character, +pdfwrite always converted it to a bitmap. (lib/gs_lgo_e.ps [1.2]: 2000/04/07 +02:48:23 lpd) + +Provides a gs_atan2_degrees procedure to parallel sin and cos. +(zmath.c [1.2]: 2000/03/18 23:10:39 lpd) + +Speeds up string garbage collection by scanning unmodified string regions +faster. (igcstr.c [1.2]: 2000/03/18 23:29:32 lpd) + +Adds the ImagemaskTrapping parameter to the trapping state. +(lib/gs_trap.ps [1.2]: 2000/03/18 23:35:53 lpd) + +Increments the version number to 6.20, in anticipation of the next release. +(We do this at the beginning of the development for a release, not the end.) +(lib/gs_init.ps [1.4]: 2000/03/19 00:27:22 lpd) + +Adds a pseudo-encoding for the CFF StandardStrings that represent +characters. (lib/gs_cff.ps [1.2], lib/gs_css_e.ps [1.1]: 2000/03/19 00:38:50 +lpd) + +Refactors the code for getting Type 1/2/4 font parameters so it can be used +for FDArray entries of CIDFontType 0 fonts. (ifont1.h [1.2], zfont1.c [1.2]: +2000/03/19 02:07:45 lpd) + +Speeds up Function evaluation slightly, by preallocating space for a +reasonable number of operands and results on the C stack rather than always +allocating it on the heap. (zfunc.c [1.3]: 2000/03/19 02:16:58 lpd) + +Adds a public procedure for determining whether a PostScript object is a +Function, and if so, returning the pointer to the gs_function_t structure. +(ifunc.h [1.2], zfunc.c [1.4]: 2000/03/19 02:22:01 lpd) + +Splits out the [T]BCP filter interface into a separate file. (zfbcp.c [1.2]: +2000/03/19 02:40:18 lpd) + +Adds a skip_count parameter to the SubFileDecode filter, giving the number +of initial bytes or records to skip over. (Needed for printing FunctionType +4 functions, possibly useful for other things.) (sfilter1.c [1.3]: +2000/03/19 03:20:18 lpd) + +Replaces the implementation of FunctionType 4 functions at the PostScript +language level with one that uses the new library-based facilities. +(zdevice2.c [1.2], zfunc4.c [1.2]: 2000/03/19 06:56:23 lpd) + +Changes the key type returned by parameter list enumeration to include a +persistence flag, makes C parameter lists support non-persistent keys, and +upgrades GC descriptors so that parameter lists can be used non-transiently; +updates implementors of parameter lists to call gs_param_list_init to +initialize the common members, which is now required. (iparam.c [1.3]: +2000/03/19 15:16:11 lpd) + +Makes Separation and DeviceN color spaces convert their tint transform +function to a FunctionType 4 Function if possible, for better accuracy and +to allow writing in PDF files. (lib/gs_lev2.ps [1.2], lib/gs_ll3.ps [1.2]: +2000/03/19 15:28:34 lpd) + +Makes st_indexed_map private. Clients must now use the constructor procedure +alloc_indexed_map rather than allocating instances directly. +(zcsindex.c [1.2]: 2000/03/19 16:37:28 lpd) + +Refactors the code for building fonts so it can be used for FDArray entries +of CIDFontType 0 fonts. (bfont.h [1.2], zbfont.c [1.2]: 2000/03/19 16:45:47 +lpd) + +Adds a .fileposition operator that will read the position even of +non-positionable streams, needed for the PDF linearizer. (zfileio.c [1.3]: +2000/03/20 04:30:49 lpd) + +Starts to move support for CIDFontType 0 and 2 into C code, needed by the +PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for +CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts +that have a GlyphDirectory (not documented in the PLRM, but clearly +correct). Implements Adobe 3011 features: integer and dictionary CIDMaps, +and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code, +which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.) +(icid.h [1.1], ifont.h [1.2], ifont42.h [1.1], zcid.c [1.2], zfcid.c [1.1], +zfcmap.c [1.3], zfont42.c [1.2]: 2000/03/20 19:53:06 lpd) + +Hooks the new CIDMap code into the BuildGlyph procedure for CIDFontType 2 +fonts. (Contrary to a previous log comment, MetricsCount is already hooked +in.) Support for CIDFontType 2 fonts is now implemented entirely in C, as +for Type 42 fonts. (lib/gs_cidfn.ps [1.6], zfcid.c [1.2]: 2000/03/21 +00:32:15 lpd) + +Extends the C support for CIDFontType 0 fonts to include those with FontType +2 subfonts in the FDArray (an Adobe 3011 addition, specifically for CFF +fonts). (ifont2.h [1.1], zfcid.c [1.4], zfont2.c [1.2]: 2000/03/21 07:43:42 +lpd) + +Changes Subr loading for CIDFontType 0 fonts from lazy to immediate, so that +C code can be guaranteed access to the Subrs. (In every CIDFontType 0 font +that we have seen, SubrCount is 5, so this has no significant time or space +cost.) Also adds support for FDBytes > 1 in GlyphDirectory definitions. +(lib/gs_cidfn.ps [1.7]: 2000/03/21 20:06:44 lpd) + +Splits off the ReusableStreamDecode filter as a separate module, since +CIDFontType 0 fonts will use it even in LanguageLevels below 3. +(lib/gs_frsd.ps [1.1], lib/gs_ll3.ps [1.3], zfrsd.c [1.1]: 2000/03/21 +21:34:57 lpd) + +Makes file streams remember the file name, needed for efficiently +implementing reusable streams. (zfile.c [1.3], zfileio.c [1.4]: 2000/03/23 +02:13:40 lpd) + +Changes the new .filename operator to return true/false rather than causing +an error; redefines findlibfile in terms of a simpler .libfile operator + +.filename. (lib/gs_init.ps [1.5], zfile.c [1.4], zfileio.c [1.5]: 2000/03/23 +18:47:17 lpd) + +Finishes implementing the file case of ReusableStreamDecode. This required +adding the ability to restrict file-reading streams to a subfile. +(lib/gs_frsd.ps [1.2], sfilter1.c [1.4], zfileio.c [1.6], zfrsd.c [1.2]: +2000/03/24 03:59:42 lpd) + +Changes the implementation of incrementally loaded CIDFontType 0 fonts to +use a ReusableStreamDecode filter, in anticipation of moving the BuildGlyph +procedure for these fonts from PostScript to C. (lib/gs_cidfn.ps [1.8], +zbfont.c [1.3], zfcid.c [1.5]: 2000/03/27 16:36:24 lpd) + +Changes the get_outline / glyph_data procedure for getting encoded font +outline data to return an indication of whether the outline data were just +allocated and can be freed by the client. (This is a possibly +non-backward-compatible change.) (zfcid.c [1.6]: 2000/03/28 18:47:02 lpd) + +Changes the procs structure of gs_type1_data to an in-line structure rather +than a pointer to a const structure. (Needed for moving CIDFontType 0 +support into C.) (zfont1.c [1.3]: 2000/03/29 22:10:31 lpd) + +Finishes moving support for CIDFontType 0 fonts from PostScript to C. +(ifont.h [1.3], ifont42.h [1.2], lib/gs_cidfn.ps [1.10], zfcid.c [1.7], +zfont42.c [1.4]: 2000/03/31 04:55:18 lpd) + +Allows dictionaries as the value of CIDMap resources. (Also removes an +unrelated obsolete comment.) (lib/gs_cidfn.ps [1.11]: 2000/03/31 05:11:30 +lpd) + +Finishes implementing the ability to write CIDFontType 0 CFFs. This involved +a surprising number of changes in other font-related files. (ichar1.h [1.2], +ifcid.h [1.1], zchar1.c [1.2], zfcid.c [1.9], zfcid0.c [1.1], +zfcid1.c [1.1], zfont1.c [1.4]: 2000/04/02 07:38:46 lpd) + +Makes the .writefont9 operator (used only for testing) available in both +DEBUG and PROFILE configurations. (zfcid0.c [1.2]: 2000/04/03 02:37:55 lpd) + +Extends .forceput to handle arrays as well as dictionaries, required to fix +a bug with internaldict. (zdict.c [1.2], zgeneric.c [1.2]: 2000/04/04 +22:13:23 lpd) + +Works around an Adobe code assumption that the default FindResource +procedure does *not* call the ResourceStatus procedure if the requested +instance is already defined in VM. (lib/gs_res.ps [1.7]: 2000/04/05 23:31:54 +lpd) + +Implements the framework for superexec (but none of the actual access check +bypasses). (icontext.c [1.2], icstate.h [1.2], zcontrol.c [1.2]: 2000/04/06 +04:40:06 lpd) + +Extends the undocumented CCRun procedure to take an additional argument, a +Private dictionary, required by some Adobe font downloading code. +(lib/gs_type1.ps [1.3]: 2000/04/06 05:25:10 lpd) + +</pre><h2><a name="6.20 Streams"></a>Streams</h2><pre> + +Fixes problems: + - s_add_filter didn't ensure enough buffering. This entailed moving +the NullEncode/Decode filters to stream.[hc]. (sfilter.h [1.3], +stream.c [1.3], stream.h [1.3]: 2000/03/19 03:15:02 lpd) + - When FPU_TYPE <= 0, the image interpolation code lost too much +accuracy, producing color streaks in the output. (Fix by DanCoby.) +(siscale.c [1.2]: 2000/03/29 20:34:45 lpd) + - Fixes a couple of typos in the recently checked-in image +interpolation fix. (siscale.c [1.3]: 2000/03/30 06:55:26 lpd) + +Splits out the [T]BCP filter interface into a separate file. (sbcp.c [1.2], +sbcp.h [1.1], sfilter.h [1.2]: 2000/03/19 02:40:18 lpd) + +Adds a skip_count parameter to the SubFileDecode filter, giving the number +of initial bytes or records to skip over. (Needed for printing FunctionType +4 functions, possibly useful for other things.) (sfilter.h [1.4]: 2000/03/19 +03:20:18 lpd) + +Changes the key type returned by parameter list enumeration to include a +persistence flag, makes C parameter lists support non-persistent keys, and +upgrades GC descriptors so that parameter lists can be used non-transiently; +updates implementors of parameter lists to call gs_param_list_init to +initialize the common members, which is now required. (spsdf.c [1.2]: +2000/03/19 15:16:11 lpd) + +Makes file streams remember the file name, needed for efficiently +implementing reusable streams. (stream.c [1.4], stream.h [1.4]: 2000/03/23 +02:13:40 lpd) + +Finishes implementing the file case of ReusableStreamDecode. This required +adding the ability to restrict file-reading streams to a subfile. +(sfxfd.c [1.2], sfxstdio.c [1.2], stream.c [1.5], stream.h [1.5]: 2000/03/24 +03:59:42 lpd) + +Changes a few initializations to suppress warnings from one picky compiler +that doesn't like ptr = buf - 1 where buf is an array. (spsdf.c [1.3]: +2000/03/28 02:01:34 lpd) + +</pre><h2><a name="6.20 Library"></a>Library</h2><pre> + +Fixes problems: + - Two comments in the file were incorrect. (gsiparm3.h [1.2]: +2000/03/19 02:46:11 lpd) + - param_coerce_typed, which works with any parameter list +implementation, was incorrectly described as associated with the default +implementation. (gsparam.h [1.2]: 2000/03/19 03:37:08 lpd) + - TrueType fonts didn't use vhea/vmtx if WMode = 1. Also makes +gs_font_type42 subclassable, for implementing CIDFontType 2 fonts, and makes +its procedure for getting a glyph's side bearing and width virtual, required +to support MetricsCount in CIDFontType 2 fonts. (gstype42.c [1.3], +gxfont42.h [1.2]: 2000/03/19 03:58:51 lpd) + - ImageType 4 images didn't give an error for out-of-range MaskColor +values. The file also had an unnecessary #include. (gximage4.c [1.2]: +2000/03/19 04:10:09 lpd) + - If log2_transfer_map_size > 8, identity transfer functions +returned garbage. The fix requires that if a client wants to set a transfer +function to the identity mapping, it must call gx_set_identity_transfer +rather than simply setting the procedure to gs_identity_transfer. +(gxclrast.c [1.3], gxcmap.c [1.2], gxfmap.h [1.2]: 2000/03/19 17:14:47 lpd) + - Fixes a warning about aliasing produced by one extremely picky +compiler. (gsnogc.c [1.2]: 2000/03/22 21:39:32 lpd) + - Filling or clipping with ridiculously large (out-of-bounds) +coordinates could cause an internal overflow that produced incorrect +results. (This is probably not the last such bug.) (gxfill.c [1.2]: +2000/03/30 07:03:59 lpd) + +Provides a gs_atan2_degrees procedure to parallel sin and cos. +(gsmisc.c [1.2], gxfarith.h [1.2]: 2000/03/18 23:10:39 lpd) + +Improves the 8x8 bitmap "flipping" procedure to take advantage of 32-bit +ints. (gsutil.c [1.2]: 2000/03/18 23:16:16 lpd) + +Adds a public procedure for restricting a color to its legal range. +(gscspace.c [1.2], gscspace.h [1.2], gxcspace.h [1.2]: 2000/03/18 23:19:17 +lpd) + +Adds the new ImagemaskTrapping parameter to the trapping state. +(gstrap.c [1.2], gstrap.h [1.2]: 2000/03/18 23:26:17 lpd) + +Increments the version number to 6.20, in anticipation of the next release. +(We do this at the beginning of the development for a release, not the end.) +(gscdef.c [1.2]: 2000/03/19 00:27:22 lpd) + +Adds a pseudo-encoding for the CFF StandardStrings that represent +characters. (gsccode.h [1.2]: 2000/03/19 00:38:50 lpd) + +Adds a bit_index procedure to the implementation of device halftones, +required for writing halftones in PDF files. (The only implementors are +internal ones.) (gxdht.h [1.2], gxhtbit.c [1.2]: 2000/03/19 05:10:55 lpd) + +Adds a public procedure for getting a palette entry of an Indexed color +space, used when writing Indexed color spaces in PDF files. +(gscindex.h [1.1], gscolor2.c [1.2], gscolor2.h [1.2]: 2000/03/19 05:20:28 +lpd) + +Reimplements "PostScript calculator" (FunctionType 4) functions entirely in +C, to allow them to be written out in PDF files. (gsfunc4.c [1.1], +gsfunc4.h [1.1], gsstruct.h [1.2]: 2000/03/19 05:25:53 lpd) + +Moves gx_device_color_equal to the public API, for detecting redundant color +setting when writing PDF files. (gsdcolor.h [1.2], gxdcolor.c [1.2], +gxdcolor.h [1.2]: 2000/03/19 06:46:08 lpd) + +Changes the default value of BufferSpace to 4 Mb. In desktop applications, +this is a reasonable value that can substantially improve performance +(especially for color printers); embedded applications will want to set +BufferSpace themselves in any case. (gdevprn.h [1.2]: 2000/03/19 06:51:13 +lpd) + +Adds virtual procedures for Functions to write their parameters to a +parameter list, and to access their data source and subfunctions. This is +needed for writing Functions in PDF files. This change is also a +prerequisite for the C implemention of FunctionType 4 functions, even though +it appears later in the change log. (gsdsrc.h [1.2], gsfunc.c [1.2], +gsfunc.h [1.2], gsfunc0.c [1.2], gsfunc3.c [1.2], gsparam.c [1.2], +gsparam.h [1.3], gxfunc.h [1.2]: 2000/03/19 07:24:53 lpd) + +Splits off "vanilla" Functions into separate files, in anticipation of +removing them (they were only used to implement PostScript Calculator +Functions). (gsfunc.c [1.3], gsfunc.h [1.3], gsfuncv.c [1.1], +gsfuncv.h [1.1]: 2000/03/19 07:33:08 lpd) + +Adds a procedure for allocating a C parameter list. (gscparam.c [1.2], +gsparam.h [1.4]: 2000/03/19 15:00:05 lpd) + +Undoes a premature change that depends on an update not yet checked in. +(gscparam.c [1.3]: 2000/03/19 15:07:59 lpd) + +Changes the key type returned by parameter list enumeration to include a +persistence flag, makes C parameter lists support non-persistent keys, and +upgrades GC descriptors so that parameter lists can be used non-transiently; +updates implementors of parameter lists to call gs_param_list_init to +initialize the common members, which is now required. (gscparam.c [1.4], +gsparam.c [1.3], gsparam.h [1.5]: 2000/03/19 15:16:11 lpd) + +Adds a procedure for copying one parameter list to another. +(gsparamx.c [1.2], gsparamx.h [1.2]: 2000/03/19 15:35:31 lpd) + +Records the CTM used for sampling HalftoneType 1 spot functions. This is +needed for recognizing the standard spot functions when producing PDF +output. Also factors the code for initializing spot functions for the +benefit of the PDF writer. (gshtscr.c [1.2], gxdht.h [1.3], gzht.h [1.2]: +2000/03/19 15:43:36 lpd) + +Adds a proc_data member to the map for Separation and Indexed color spaces. +(gscolor2.c [1.3], gxcolor2.h [1.2]: 2000/03/19 16:23:46 lpd) + +Makes st_indexed_map private. Clients must now use the constructor procedure +alloc_indexed_map rather than allocating instances directly. +(gscolor2.c [1.4], gscsepr.c [1.2], gxclrast.c [1.2], gxcolor2.h [1.3]: +2000/03/19 16:37:28 lpd) + +Adds procedures for building and accessing DeviceN color spaces. +(gscdevn.c [1.2], gscdevn.h [1.1]: 2000/03/19 17:02:37 lpd) + +Exports the 'blend' operators of the Type 1 interpreter, for use by the Type +1 / Type 2 font writer. (gstype1.c [1.3], gxtype1.c [1.2], gxtype1.h [1.3]: +2000/03/19 18:46:44 lpd) + +Starts to move support for CIDFontType 0 and 2 fonts into C code. (These +header files are the ones needed to compile the new gdevpsf* files; they +don't interact with any existing code.) (gxcid.h [1.1], gxfcid.h [1.1]: +2000/03/20 06:40:22 lpd) + +Moves font-writing support into a new module (gdevpsf*), changing the source +file names. Adds the ability to write CFF fonts, with either Type 1 or Type +2 CharStrings; unfortunately, Acrobat Reader appears not to accept CFF fonts +with Type 1 CharStrings. Adds the ability to convert Type 1 CharStrings to +Type 2, including optimizing sequences of Type 1 operators into a single +Type 2 operator. Implements writing CIDFontType 0 CFF fonts (CIDFonts) [NOT +TESTED]. Starts (just barely) to remove more unneeded information from +embedded TrueType fonts. (gxttf.h [1.1]: 2000/03/20 07:02:12 lpd) + +Starts to move support for CIDFontType 0 and 2 into C code, needed by the +PDF writer for handling CID-keyed fonts. Implements GlyphDirectory for +CIDFonts. Makes GDBytes and CIDMapOffset optional for CIDFontType 0 fonts +that have a GlyphDirectory (not documented in the PLRM, but clearly +correct). Implements Adobe 3011 features: integer and dictionary CIDMaps, +and the MetricsCount entry, in CIDFontType 2 fonts (but only in the C code, +which isn't hooked in yet, not in the PostScript code in gs_cidfn.ps.) +(gsfcid.c [1.1], gsfcmap.c [1.3], gxfcmap.h [1.2], gxfont1.h [1.2]: +2000/03/20 19:53:06 lpd) + +Changes a few initializations to suppress warnings from one picky compiler +that doesn't like ptr = buf - 1 where buf is an array. (gxclpath.c [1.2]: +2000/03/28 02:01:34 lpd) + +Changes the get_outline / glyph_data procedure for getting encoded font +outline data to return an indication of whether the outline data were just +allocated and can be freed by the client. (This is a possibly +non-backward-compatible change.) (gxfcid.h [1.2], gxfont42.h [1.3]: +2000/03/28 18:47:02 lpd) + +Changes the procs structure of gs_type1_data to an in-line structure rather +than a pointer to a const structure. (Needed for moving CIDFontType 0 +support into C.) (gstype1.c [1.4], gstype2.c [1.3], gxfont1.h [1.3], +gxtype1.c [1.3]: 2000/03/29 22:10:31 lpd) + +Finishes moving support for CIDFontType 0 fonts from PostScript to C. +(gxfcid.h [1.3]: 2000/03/31 04:55:18 lpd) + +Finishes implementing the ability to write CIDFontType 0 CFFs. This involved +a surprising number of changes in other font-related files. (gsfcid.c [1.2], +gxfcid.h [1.4]: 2000/04/02 07:38:46 lpd) + +<hr> + +<h1><a name="Version6.01"></a>Version 6.01 (2000-03-17)</h1> + +This is a bug-fix release for 6.0. + +This release fixes the following reported bugs: #101555, #101813, #101816, +#101818, #101827, #101830, #101871, #101853, #101906, #101949, #101950, +#102003, #102004, #102038, #102081, #102936. + +<h2><a name="6.01_Incompatible_changes"></a>Incompatible changes</h2> + +(Platforms) + - OpenVMS using VAX C is no longer supported. (OpenVMS with DEC C +and gcc are still supported.) +(Drivers) + - The third argument of psdf_set_color is changed from const char * +to const psdf_set_color_commands_t *. +(Interpreter) + - The non-standard feature of writing dictionaries in binary object +output is now disabled by default, but can now be enabled dynamically. +(Library) + - The definition of TRANSPARENCY_PER_H_P is moved from gdevmrop.h to +gsropt.h. + - The handling of the source opaque, texture transparent case of +RasterOp when TRANSPARENCY_PER_H_P is defined is changed slightly. + + +<h2><a name="6.01 Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - Fixes a typo. (man/ps2pdf.1 [1.2]: 2000/03/10 03:11:06 lpd) + - When converting PostScript to PDF, selecting /Bicubic as an image +DownsampleType caused an error instead of defaulting to /Average. +(doc/Ps2pdf.htm [1.2]: 2000/03/10 04:16:09 lpd) + - The gs###src.zip and gs###lib.zip files weren't mentioned as being +included in distributions; News.htm and Changes.htm weren't mentioned at +all. (doc/Release.htm [1.5]: 2000/03/15 07:23:52 lpd) + - Fixes a problem producing too much black in the output; also adds +support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and +Epson Stylus Color 200). Note that this is user-contributed code. +(doc/Devices.htm [1.2]: 2000/03/16 02:01:36 lpd) + +In ansi2knr, adds user-contributed support for concatenated string literals +and character constants, and fixes for a couple of minor bugs. +(man/ansi2knr.1 [1.2]: 2000/03/10 03:16:17 lpd) + +Removes an inappropriate copying notice. (doc/Hershey.htm [1.2]: 2000/03/10 +07:03:57 lpd) + +Clarifies when xdpyinfo and xwininfo are needed. Adds privacy options for +problem reports. (doc/Bug-form.htm [1.2]: 2000/03/10 07:06:08 lpd) + +Adds a new eps2eps utility analogous to ps2ps. (man/eps2eps.1 [1.1], +man/ps2ps.1 [1.2]: 2000/03/10 07:51:55 lpd) + +Updates the documentation on making RPMs, which is no longer supported. +(doc/Install.htm [1.2], doc/Make.htm [1.2]: 2000/03/10 07:58:00 lpd) + +Adds a recommendation to use gcc on SGI platforms. (doc/Make.htm [1.3]: +2000/03/10 07:59:53 lpd) + +Updates documentation regarding Unix systems that do/don't use libpthread. +(doc/Make.htm [1.4]: 2000/03/10 08:01:35 lpd) + +Removes support for VAX C, which DEC stopped supporting 9 (!) years ago. +(doc/Make.htm [1.5], doc/Use.htm [1.2]: 2000/03/10 08:02:59 lpd) + +Updates the documentation for building Aladdin releases to reflect revised +procedures for the Windows executable, and a few other minor changes. +(doc/Release.htm [1.2]: 2000/03/10 15:55:39 lpd) + +Adds the ability to compile on OS/2 with XFree86. (doc/Install.htm [1.3], +doc/Make.htm [1.6]: 2000/03/10 19:50:49 lpd) + +Moves all history for versions 5.n into History5.htm; creates History6.htm +for versions 6.n; redefines News.htm as containing only news for the current +release; adds (a link to) Changes.htm for the mechanically generated change +log. (doc/History5.htm [1.2], doc/History6.htm [1.1], doc/News.htm [1.2], +doc/README [1.2], doc/Readme.htm [1.2]: 2000/03/14 06:14:43 lpd) + +Partially updates the release procedure documentation to reflect the use of +SourceForge and CVS. (doc/Release.htm [1.3]: 2000/03/14 06:39:23 lpd) + +Adds a change log generated mechanically from the CVS logs. Future releases +may omit this file (doc/Changes.htm) from their change log. +(doc/Changes.htm [1.1], doc/News.htm [1.3]: 2000/03/14 06:48:44 lpd) + +Revises the release procedures to reflect use of SourceForge, and to +separate out the procedures for building Windows executables. +(doc/Release.htm [1.4]: 2000/03/15 02:24:58 lpd) + +Adds information on uninstalling Ghostscript on Windows. +(doc/Install.htm [1.4]: 2000/03/15 07:29:53 lpd) + +Adds the ability to set the ProcessColorModel of the pdfwrite device to +/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used +for fill, stroke, text, and imagemask, and for images that (for whatever +reason) can't be written in their specified color space. Note that this is a +short-term fix: pdfwrite should output colors in the color space in which +they were specified. However, a proper fix will require more significant +architectural changes. (doc/News.htm [1.4]: 2000/03/16 01:21:23 lpd) + +Adds a reference to a third-party Fontmap for the Computer Modern fonts. +(doc/Fonts.htm [1.2]: 2000/03/16 04:05:07 lpd) + +Adds documentation and a makefile entry for Matthew Gelhaus' cdj880 driver. +The code will eventually be included in gdevcd8.c, but it is not yet mature +enough. (doc/Devices.htm [1.3]: 2000/03/16 08:09:42 lpd) + +Updates the version number reference in the troff header. +(man/ps2pdf.1 [1.3], man/ps2ps.1 [1.3]: 2000/03/17 00:47:08 lpd) + +Removes the attempted documentation on building Windows executable +distributions: it was never correct, and Aladdin will no longer be creating +such distributions. Also reorganizes the document slightly and brings the +rest of it fully into line with reality. (doc/Release.htm [1.6]: 2000/03/17 +04:40:47 lpd) + +Adds information on building with the Intel C/C++ optimizing compiler +(requires the Microsoft Visual C++ environment), and fixes a typo in the +link to ftp.cdrom.com. (doc/Make.htm [1.7]: 2000/03/17 17:42:59 lpd) + +Checks in the first wrap-up for the 6.01 release. (doc/Changes.htm [1.2], +doc/History6.htm [1.2], doc/News.htm [1.5]: 2000/03/18 04:13:40 lpd) + +</pre><h2><a name="6.01 Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - The terminating $ on the $Id: line in gsmalloc.c was missing, and +dwuninst.rc lacked a $Id: line. (dwuninst.rc [1.2]: 2000/03/10 03:44:33 lpd) + - The %ram% IODevice was defined, but should not be (it represents a +RAM-based file system, which Ghostscript does not provide). Fix: The type of +the %null% IODevice was /FileSystem rather than /Special. (int.mak [1.2]: +2000/03/10 07:02:07 lpd) + - The dependency list for coslwxl omitted a $(DD). +(contrib.mak [1.2]: 2000/03/10 07:30:54 lpd) + - The makefile still referred to a long-gone driver for the DEC +LA70. (contrib.mak [1.3]: 2000/03/10 07:32:43 lpd) + - The Unix install process tried to make links without deleting them +first. (unixinst.mak [1.2]: 2000/03/10 07:49:21 lpd) + - The Watcom compiler switches didn't force enums to occupy a full +int, leading to execution errors because the code casts (enum *) pointers to +(int *). (wccommon.mak [1.2]: 2000/03/10 08:15:31 lpd) + - The Windows zip archive didn't include font metrics files. (This +change only fixes the build procedure: it doesn't actually update the +currently released zip archive.) (winint.mak [1.2]: 2000/03/10 08:17:06 lpd) + - the "all architectures" build and test script hadn't been updated +to use different STDLIBS values depending on where the platform provides the +pthreads library. (all-arch.mak [1.2]: 2000/03/10 15:40:43 lpd) + - The documentation for building with pthreads on FreeBSD hadn't +been updated. (unix-gcc.mak [1.2], unixansi.mak [1.2], unixtrad.mak [1.2]: +2000/03/10 15:44:01 lpd) + - gsmalloc.c didn't include the prototype for gs_exit(), which it +calls. (lib.mak [1.2]: 2000/03/10 15:53:08 lpd) + +Because of rampant confusion, disagreement, and lack of standardization, +removes the RPM-related spec and patch files. (gs-fonts.rps [1.2], +gs.rps [1.2], rpm-conf.dif [1.2]: 2000/03/10 03:22:04 lpd) + +Increases the stack size for the PC platforms, since a user had reported +that the OS/2 stack size was too small. (dw32c.def [1.2], +dwmain32.def [1.2], gsos2.def [1.2]: 2000/03/10 03:33:21 lpd) + +Updates the Brother HL7xx drivers with a new user-contributed version, plus +a couple of minor fixes. (contrib.mak [1.4]: 2000/03/10 07:33:44 lpd) + +Adds a new eps2eps utility analogous to ps2ps. (unixinst.mak [1.3]: +2000/03/10 07:51:55 lpd) + +Removes support for VAX C, which DEC stopped supporting 9 (!) years ago. +(openvms.mak [1.2], openvms.mmk [1.2]: 2000/03/10 08:02:59 lpd) + +Updates all makefiles to the current libpng version, 1.0.5. +(bcwin32.mak [1.2], dvx-gcc.mak [1.2], msvc32.mak [1.2], msvclib.mak [1.2], +os2.mak [1.2], ugcclib.mak [1.2], unix-gcc.mak [1.3], unixansi.mak [1.3], +unixtrad.mak [1.3], watc.mak [1.2], watclib.mak [1.2], watcw32.mak [1.2]: +2000/03/10 15:48:58 lpd) + +Updates the version # to 6.01, and the version date. (version.mak [1.2]: +2000/03/10 17:18:29 lpd) + +Adds the ability to compile on OS/2 with XFree86. (os2.mak [1.3]: 2000/03/10 +19:50:49 lpd) + +Moves all history for versions 5.n into History5.htm; creates History6.htm +for versions 6.n; redefines News.htm as containing only news for the current +release; adds (a link to) Changes.htm for the mechanically generated change +log. (unixinst.mak [1.4], version.mak [1.3]: 2000/03/14 06:14:44 lpd) + +Adds entries for ibm-rs6000-aix-4.3, sgi-mips-irix6.5-64bit, and +sun-sparc-solaris-64bit. (all-arch.mak [1.3]: 2000/03/15 18:38:29 lpd) + +Adds the ability to set the ProcessColorModel of the pdfwrite device to +/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used +for fill, stroke, text, and imagemask, and for images that (for whatever +reason) can't be written in their specified color space. Note that this is a +short-term fix: pdfwrite should output colors in the color space in which +they were specified. However, a proper fix will require more significant +architectural changes. (version.mak [1.4]: 2000/03/16 01:21:24 lpd) + +Adds documentation and a makefile entry for Matthew Gelhaus' cdj880 driver. +The code will eventually be included in gdevcd8.c, but it is not yet mature +enough. (contrib.mak [1.5]: 2000/03/16 08:09:42 lpd) + +Adds a missing dependency of gdevpdft.o on gxfont42.h. (devs.mak [1.2]: +2000/03/17 02:59:26 lpd) + +Adds a disclaimer of responsibility for the makefile section for creating +distribution archives, which Aladdin is no longer maintaining. +(winint.mak [1.3]: 2000/03/17 03:01:58 lpd) + +Checks in the first wrap-up for the 6.01 release. (unix-gcc.mak [1.4], +version.mak [1.5]: 2000/03/18 04:13:40 lpd) + +</pre><h2><a name="6.01 Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - The loader for the stochastic halftone incorrectly assumed that +the resource file left the resource on the stack, causing a stackunderflow +error. (lib/stocht.ps [1.2]: 2000/03/10 03:34:44 lpd) + - The ps2pdf*.bat scripts didn't set PS2PDFSW to the empty string if +there were no arguments, causing the same file to be processed again. +(lib/ps2pdf12.bat [1.2], lib/ps2pdf13.bat [1.2]: 2000/03/10 07:40:00 lpd) + - Fixes a typo in the fix for putting stdout in binary mode. +(gp_ntfs.c [1.3]: 2000/03/18 01:15:16 lpd) + - For printer devices, a non-null definition for OutputFile was +required even on platforms that had a default printer (as implemented by +gp_open_printer for that platform). (gp_os9.c [1.2], gp_unix.c [1.2], +gp_vms.c [1.2]: 2000/03/18 01:45:16 lpd) + +In ansi2knr, adds user-contributed support for concatenated string literals +and character constants, and fixes for a couple of minor bugs. +(ansi2knr.c [1.2]: 2000/03/10 03:16:17 lpd) + +Updates the pf2afm.ps utility with a revised version from its authors. +(lib/pf2afm.ps [1.2]: 2000/03/10 03:35:37 lpd) + +Adds a new eps2eps utility analogous to ps2ps. (lib/eps2eps [1.1], +lib/eps2eps.bat [1.1]: 2000/03/10 07:51:55 lpd) + +Removes a temporary file that was included in the fileset by mistake. +(lib/history [1.2]: 2000/03/10 08:18:36 lpd) + +Changes the ps2pdf MS Windows / MS-DOS scripts to use temporary files to +avoid the absurdly low limits on the length of a command line and the total +size of environment variable definitions. (lib/ps2pdf.bat [1.2], +lib/ps2pdf12.bat [1.3], lib/ps2pdf13.bat [1.3], lib/ps2pdfwr.bat [1.2], +lib/ps2pdfxx.bat [1.1]: 2000/03/14 20:20:20 lpd) + +On Windows, puts stdout into binary mode as well as stdin, to allow piping +printer output through stdout (not a good idea, but it should be supported +as well as on other platforms). (gp_ntfs.c [1.2]: 2000/03/17 06:22:59 lpd) + +</pre><h2><a name="6.01 Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - When converting PostScript to PDF, selecting /Bicubic as an image +DownsampleType caused an error instead of defaulting to /Average. +(gdevpsdf.h [1.2], gdevpsdi.c [1.2], gdevpsdp.c [1.2]: 2000/03/10 04:16:09 +lpd) + - The mswinpr2 driver didn't handle setting BitsPerPixel to the same +value when the device was already open, possibly causing an error on restore +or grestore. (gdevwpr2.c [1.2]: 2000/03/10 04:26:07 lpd) + - When operating in buffered mode (MaxBitmap > 0), the X driver +sometimes failed to copy all of the updated area to the screen. +(gdevx.c [1.2], gdevx.h [1.2], gdevxini.c [1.2], gdevxxf.c [1.2]: 2000/03/10 +06:56:27 lpd) + - The [e]pswrite driver produced invalid output if the input file +didn't end with a showpage. Also cleans up some formatting and removes a +redundant test. (gdevps.c [1.2]: 2000/03/10 07:44:27 lpd) + - Fixes a problem producing too much black in the output; also adds +support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and +Epson Stylus Color 200). Note that this is user-contributed code. +(gdevupd.c [1.2], lib/bjc610a0.upp [1.2], lib/bjc610a1.upp [1.2], +lib/bjc610a2.upp [1.2], lib/bjc610a3.upp [1.2], lib/bjc610a4.upp [1.2], +lib/bjc610a5.upp [1.2], lib/bjc610a6.upp [1.2], lib/bjc610a7.upp [1.2], +lib/bjc610a8.upp [1.2], lib/bjc610b1.upp [1.2], lib/bjc610b2.upp [1.2], +lib/bjc610b3.upp [1.2], lib/bjc610b4.upp [1.2], lib/bjc610b6.upp [1.2], +lib/bjc610b7.upp [1.2], lib/bjc610b8.upp [1.2], lib/cdj550.upp [1.2], +lib/cdj690.upp [1.1], lib/cdj690ec.upp [1.1], lib/dnj750c.upp [1.1], +lib/dnj750m.upp [1.1], lib/ras32.upp [1.2], lib/stc.upp [1.2], +lib/stc1520h.upp [1.2], lib/stc2.upp [1.2], lib/stc200_h.upp [1.1], +lib/stc2_h.upp [1.2], lib/stc2s_h.upp [1.2], lib/stc500p.upp [1.2], +lib/stc500ph.upp [1.2], lib/stc600ih.upp [1.2], lib/stc600p.upp [1.2], +lib/stc600pl.upp [1.2], lib/stc800ih.upp [1.2], lib/stc800p.upp [1.2], +lib/stc800pl.upp [1.2], lib/stc_h.upp [1.2], lib/stc_l.upp [1.2], +lib/stcany.upp [1.2]: 2000/03/16 02:01:36 lpd) + - The X driver's algorithm for deciding when to update the screen +was changed several times between 5.50 and 6.0, and one of the more recent +changes caused it to copy many more pixels to the screen than necessary if +the file was making marks on the page in widely separated places. +(gdevx.c [1.3]: 2000/03/17 07:35:43 lpd) + - In the X driver, the full-page buffer controlled by -dMaxBitmap= +wasn't allocated with a stable allocator, possibly leading to memory access +errors if save/restore were used. (gdevxini.c [1.3]: 2000/03/18 04:11:59 +lpd) + +Updates the Brother HL7xx drivers with a new user-contributed version, plus +a couple of minor fixes. (gdevhl7x.c [1.2]: 2000/03/10 07:33:44 lpd) + +Enhances the [e]pswrite driver to handle Indexed color spaces over Device +color spaces, only with the standard Decode. (gdevps.c [1.3]: 2000/03/10 +07:45:50 lpd) + +Adds the ability to set the ProcessColorModel of the pdfwrite device to +/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used +for fill, stroke, text, and imagemask, and for images that (for whatever +reason) can't be written in their specified color space. Note that this is a +short-term fix: pdfwrite should output colors in the color space in which +they were specified. However, a proper fix will require more significant +architectural changes. (gdevpsdf.c [1.2], gdevpsdf.h [1.3]: 2000/03/16 +01:21:24 lpd) + +Adds two more user-contributed 'uniprint' printer parameter sets: Epson +Stylus Color 640, and a generic Epson Stylus Color in high resolution mode +(720x720 dpi). (lib/stc640p.upp [1.1], lib/stcany_h.upp [1.1]: 2000/03/16 +02:03:40 lpd) + +</pre><h2><a name="6.01 PDF writer"></a>PDF writer</h2><pre> + +Fixes problems: + - In-line images emitted an extra 'q' (gsave), causing the CTM to +become incorrect, entries to pile up on the dictionary stack, and an +invalidrestore error to occur at the end of the page. (gdevpdfi.c [1.2]: +2000/03/10 03:47:37 lpd) + - The change in 5.99 to work around Acrobat Reader's 32K limit on +user space coordinates caused all 0-width rectangles to disappear, which had +major effects on some files. (gdevpdfd.c [1.2]: 2000/03/10 03:48:10 lpd) + - Incrementally downloaded TrueType fonts produced truncated Widths +tables in the output. We have patched this with a ******HACK****** that +causes such fonts to be converted to bitmaps: the correct fix (to delay +determining the range of valid characters until the font is written) is too +large a change to make in a bug fix release. (gdevpdft.c [1.2]: 2000/03/10 +03:48:48 lpd) + +Adds the ability to set the ProcessColorModel of the pdfwrite device to +/DeviceGray, /DeviceRGB, or /DeviceCMYK. This affects the color space used +for fill, stroke, text, and imagemask, and for images that (for whatever +reason) can't be written in their specified color space. Note that this is a +short-term fix: pdfwrite should output colors in the color space in which +they were specified. However, a proper fix will require more significant +architectural changes. (gdevpdf.c [1.2], gdevpdfd.c [1.3], gdevpdfi.c [1.3], +gdevpdfp.c [1.2], gdevpdft.c [1.3], gdevpdfu.c [1.2], gdevpdfx.h [1.2]: +2000/03/16 01:21:24 lpd) + +</pre><h2><a name="6.01 Interpreter (PDF)"></a>Interpreter (PDF)</h2><pre> + +Fixes problems: + - When interpreting a PDF file, the Install page device procedure +got more and more deeply nested after every page, eventually causing an +execstackoverflow. (lib/pdf_main.ps [1.2]: 2000/03/10 03:56:11 lpd) + - When interpreting a PDF file, text drawing operators didn't reset +the text position, so strings could get displayed on top of each other. (bug +introduced by a fix in 5.98) (lib/pdf_ops.ps [1.2]: 2000/03/10 03:57:03 lpd) + - When interpreting a PDF file, substituted small-cap fonts were +created with incorrect scaling. (lib/pdf_font.ps [1.2]: 2000/03/10 03:57:50 +lpd) + +Cleans up some formatting. (lib/pdf_base.ps [1.2]: 2000/03/10 03:58:14 lpd) + +</pre><h2><a name="6.01 Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - There were extraneous 'def' commands that caused definitions to be +made in the wrong dictionary. (lib/gs_ttf.ps [1.2]: 2000/03/10 03:31:39 lpd) + - If an error occurred while loading a font, it wouldn't produce an +error message. (This is a 'fix' of a 'fix' of a 'fix': it might well break +something else.) (lib/gs_type1.ps [1.2]: 2000/03/10 03:37:14 lpd) + - When reading the strings of a binary object sequence, having to +get more data from a procedure-based stream sometimes caused a syntaxerror. +Fix: If the reserved (0) field in binary objects or binary object sequences +was not 0, no syntaxerror occurred. (iscanbin.c [1.2]: 2000/03/10 03:38:50 +lpd) + - The code for handling execstackoverflow errors didn't cut back the +stack correctly, possibly causing invalid memory accesses if an incorrect +attempt was made to run a cleanup procedure. (interp.c [1.2]: 2000/03/10 +04:04:38 lpd) + - Writing of dictionaries in binary object output, a non-standard +extension, was enabled by default, and also had to be enabled at startup +time if it was ever going to be used. Fix: Binary error messages caused an +error if the command wasn't of a type that printobject could handle. We now +do what the Adobe implementations appear to do in this case, namely, convert +the object with cvs. (lib/gs_btokn.ps [1.2]: 2000/03/10 04:27:31 lpd) + - CloseSource and CloseTarget were effectively ignored for Flate and +LZW filters with a Predictor, and for the DCT filters. (ifilter.h [1.2], +zfdctd.c [1.2], zfdcte.c [1.2], zfdecode.c [1.2], zfilter.c [1.2], +zfilter2.c [1.2]: 2000/03/10 04:32:51 lpd) + - findlibfile didn't handle %iodevice% prefixes correctly. +(zfile.c [1.2]: 2000/03/10 04:35:08 lpd) + - fileposition didn't give an error for filters or non-seekable +streams. (zfileio.c [1.2]: 2000/03/10 04:35:53 lpd) + - Images with input from a file or filter demanded 1 byte of data +too many, sometimes causing the last line of the image to be dropped. (bug +probably introduced in 6.0) (zimage.c [1.2]: 2000/03/10 04:37:02 lpd) + - The check for a show within a cshow procedure for a CID font was +wrong. Fix: Character widths in CIDFontType 0 fonts were ignored (!). Adds a +.glyphwidth operator to support correct handling of character widths for CID +fonts. Adds a glyphwidth procedure to the library, like glyphshow and +glyphpath, in order to support correct handling of widths for CID fonts. +(ichar.h [1.2], lib/gs_cidfn.ps [1.2], zchar.c [1.2], zcharx.c [1.2]: +2000/03/10 04:41:47 lpd) + - resourcestatus for fonts was broken. (lib/gs_res.ps [1.2]: +2000/03/10 04:54:15 lpd) + - Fixes incorrect documentation of several procedures. +(lib/gs_fonts.ps [1.2]: 2000/03/10 07:00:28 lpd) + - The %ram% IODevice was defined, but should not be (it represents a +RAM-based file system, which Ghostscript does not provide). Fix: The type of +the %null% IODevice was /FileSystem rather than /Special. (ziodev2.c [1.2]: +2000/03/10 07:02:07 lpd) + - Directly-loaded TrueType fonts (including embedded TrueType fonts +in PDF files) could get confused with each other in the cache, because their +XUIDs were based on the font checksum field, which some fonts don't have set +correctly. (lib/gs_ttf.ps [1.3]: 2000/03/16 07:38:07 lpd) + +Adds a new example file, a 3-D synthetic image. (examples/doretree.ps [1.1]: +2000/03/10 04:00:45 lpd) + +Adds implementations of the devforall, devstatus, and diskonline +compatibility operators. (lib/gs_statd.ps [1.2]: 2000/03/10 04:01:55 lpd) + +Some Adobe CIDFonts include a line /Setup /cid_Setup load def that +apparently is intended only to prevent the fonts from being loaded by a +standard PostScript interpreter (as opposed to ATM or a special font +loader), since cid_Setup is not defined anywhere and Setup is never +referenced; this change adds a dummy definition of cid_Setup to work around +this. (lib/gs_cidfn.ps [1.3]: 2000/03/10 04:53:25 lpd) + +Updates the version # to 6.01, and the version date. (lib/gs_init.ps [1.2]: +2000/03/10 17:18:29 lpd) + +Changes the default undercolor removal and black generation functions back +from f(k) = k to f(k) = 0. This fixes some, but not all, of the reported +problems with color inkjet output in 6.0. (lib/gs_init.ps [1.3]: 2000/03/10 +18:47:31 lpd) + +On Windows, puts stdout into binary mode as well as stdin, to allow piping +printer output through stdout (not a good idea, but it should be supported +as well as on other platforms). (dwmainc.cpp [1.2]: 2000/03/17 06:22:59 lpd) + +</pre><h2><a name="6.01 Streams"></a>Streams</h2><pre> + +Changes the sbuf_min_left macro to a procedure for readability and in +preparation for later revision. (stream.c [1.2], stream.h [1.2]: 2000/03/10 +03:40:13 lpd) + +</pre><h2><a name="6.01 Library"></a>Library</h2><pre> + +Fixes problems: + - (%os%) currentdevparams didn't return (fixed) values for +InitializeAction, Mounted, Removable, Searchable, SearchOrder, and +Writeable, or (meaningful) values for BlockSize, Free, and LogicalSize. +Currently, the latter values are dummies. (gsiodev.c [1.2]: 2000/03/10 +03:43:06 lpd) + - The terminating $ on the $Id: line in gsmalloc.c was missing, and +dwuninst.rc lacked a $Id: line. (gsmalloc.c [1.2]: 2000/03/10 03:44:33 lpd) + - RasterOps with source transparency = 0, texture transparency = 1 +didn't match the (very peculiar) H-P specification even if +TRANSPARENCY_PER_H_P was defined. (gdevdrop.c [1.2], gdevmrop.h [1.2], +gsropt.h [1.2]: 2000/03/10 04:06:15 lpd) + - The prototype for gs_exit() was not included even though gs_exit() +was called. Fix: A cast discarded const unnecessarily. (gsalloc.c [1.2]: +2000/03/10 04:08:23 lpd) + - The type of the %pipe% IODevice was /FileSystem, whereas it should +be /Special. (gdevpipe.c [1.2]: 2000/03/10 04:13:57 lpd) + - An incorrectly formatted procedure couldn't be converted correctly +by ansi2knr. (gxidata.c [1.2]: 2000/03/10 04:30:58 lpd) + - The check for a show within a cshow procedure for a CID font was +wrong. Fix: Character widths in CIDFontType 0 fonts were ignored (!). Adds a +.glyphwidth operator to support correct handling of character widths for CID +fonts. Adds a glyphwidth procedure to the library, like glyphshow and +glyphpath, in order to support correct handling of widths for CID fonts. +(gschar.c [1.2], gschar.h [1.2], gstext.c [1.2], gstext.h [1.2]: 2000/03/10 +04:41:47 lpd) + - The description of the value returned by code_map_decode_next in +*pchr was incorrect. (documentation bug only) (gsfcmap.c [1.2]: 2000/03/10 +07:03:09 lpd) + - Fixes a problem producing too much black in the output; also adds +support for 5 new printers (H-P Color DeskJet 690, H-P DesignJet 750, and +Epson Stylus Color 200). Note that this is user-contributed code. +(gsargs.h [1.2]: 2000/03/16 02:01:36 lpd) + - The code for Axial shadings incorrectly assumed that if the +shading axis was horizontal or vertical in user space, it was also +horizontal or vertical in device space: this caused incorrect results when +the CTM wasn't orthogonal. (gxshade1.c [1.2]: 2000/03/17 08:17:55 lpd) + - For printer devices, a non-null definition for OutputFile was +required even on platforms that had a default printer (as implemented by +gp_open_printer for that platform). (gp.h [1.2], gsdevice.c [1.2]: +2000/03/18 01:45:16 lpd) + +Clears the glyf and loca offsets in TrueType fonts that lack these tables, +so that clients who care can tell whether the font is being downloaded +incrementally. (gstype42.c [1.2]: 2000/03/10 03:45:29 lpd) + +Changes a few macro definitions to work around over-zealous compiler +warnings. (gstype1.c [1.2], gstype2.c [1.2], gxtype1.h [1.2]: 2000/03/10 +04:29:37 lpd) + +Changes the default undercolor removal and black generation functions back +from f(k) = k to f(k) = 0. This fixes some, but not all, of the reported +problems with color inkjet output in 6.0. (gxdcconv.c [1.2]: 2000/03/10 +18:47:31 lpd) + +<hr> + +<h1><a name="Version6.0"></a>Version 6.0 (2000-02-03)</h1> + +This is the first public release since 5.50. See <a href="Current.htm">the +release summary</a> for information about new capabilities and known +problems. + +<h2><a name="6.0_Documentation"></a>Documentation</h2> + +Documents the fact that the plane_depths of a gx_image_enum structure may +vary, and that planes_wanted procedure of a gx_image_enum must return false +if the depths *or* widths can change. (gxiparam.h) + +Documents the fact that a wanted plane's wanted status, width, or depth can +only be changed by a call of plane_data that provides data for that plane. +(gxiparam.h) + +Documents the change in the handling of the pthreads library. +(doc/Make.htm) + +Documents the fact that setting parameters for the DCTEncode filter in +ps2pdf causes a crash. (doc/Ps2pdf.htm) + +Documents another bug in the MIPSpro 7.x / IRIX 6.5.x compilers, with +isave.c. (doc/Make.htm) + +Corrects Russell Lang's e-mail address. (doc/New-user.htm) + +Documents the new image operator test file and the pdfeof file. +(doc/Psfiles.htm) + +Documents the 'w' argument for image_render procedures. (gxiclass.h) + +Adds a little more checking to the release process. (doc/Release.htm) + +Documents the return values from the font build_char procedure. (gxfont.h) + +Documents the fact that the free 'zip' program is needed to build the +self-extracting Windows executable, as well as WinZipSE. (doc/Make.htm, +msvc32.mak, winint.mak) + +Adds references to several new free fonts. (doc/Fonts.htm) + +Documents an important invariant for streams. (stream.h) + +Adds a reference for user-supported Watcom / GNU make makefiles. +(doc/Make.htm, doc/New-user.htm) + +Documents the dependence of gs_ttf.ps on some of the gs_*_e.ps files. +(lib/gs_ttf.ps) + +Documents how to make self-extracting Windows executables. +(doc/Release.htm) + +Adds a number of new user-contributed man pages. (unixinst.mak, man/gslp.1, +man/wftopfa.1, man/printafm.1, man/pfbtopfa.1, man/font2c.1, man/dvipdf.1, +man/ps2pdfwr.1, man/gsnd.1, man/pf2afm.1, man/ps2pdf.1) + +<h2><a name="6.0_Procedures"></a>Procedures</h2> + +Fixes problems: + - Building on BSDI didn't work. The simplest way to fix this was to +change the linking of the pthreads library on Unix platforms to be included +in STDLIBS rather than the "sync" implementation. (fix contributed by a +user) (lib.mak, unix-gcc.mak, unixansi.mak, unixtrad.mak) + - Once again, some runtime files weren't installed. (unixinst.mak) + - Building the self-extracting executable didn't work. (winint.mak) + +Updates the user-contributed all-architectures makefile. (all-arch.mak) + +<h2><a name="6.0_Utilities"></a>Utilities</h2> + +Fixes problems: + - A needed #include was missing. (geninit.c) + - There were signed/unsigned char mismatches. (genht.c, geninit.c) + - The MacOS compiler imposes a 32K limit on the size of a stack +frame: we changed the code to use malloc/free. (geninit.c) + +Removes an unnecessary variable. (echogs.c) + +Adds a file that attempts to test the image operators exhaustively. +(lib/image-qa.ps, unixinst.mak) + +Enhances the prfont.ps utility to print CIDFonts. (lib/prfont.ps) + +Adds a utility file that patches the PDF interpreter to allow garbage after +the %%EOF (or the %%EOF to be missing completely). (lib/pdfeof.ps) + +<h2><a name="6.0_Drivers"></a>Drivers</h2> + +Fixes problems: + - The X driver compared too many bits of color value, leading to +unnecessary halftoning. (bug introduced by a fix in 5.99) (gdevxcmp.c) + - Output from the pswrite driver got a dictfull error on Level 1 +printers. (gdevps.c) + - Anti-aliasing had stopped working on MS Windows and OS/2. (bug +probably introduced in 5.65) (gdevmswn.c, gdevpm.c) + +<h2><a name="6.0_Platforms"></a>Platforms</h2> + +Adds a conditional definition of PTHREAD_CREATE_DETACHED for old versions of +the pthreads library. (gp_psync.c) + +Updates the Microsoft Visual C++ library makefile for VC++ 6. (msvclib.mak) + +Updates some copyright dates. (winint.mak, dwsetup.rc) + +<h2><a name="6.0_Fonts"></a>Fonts</h2> + +Updates the URW fonts to include the expanded Adobe character set, including +many Eastern European accented characters. (doc/New-user.htm) + +Removes a 'readonly' that inconvenienced the authors of ttf2pf. +(lib/gs_ttf.ps) + +<h2><a name="6.0_PDF_writer"></a>PDF writer</h2> + +Fixes problems: + - The Dest key was deleted from GoTo and GoToR link annotation +pdfmarks. (gdevpdfm.c) + - {name} references were substituted even in stream data for the +/PUT pdfmark. (gdevpdfm.c) + - The revision number was sometimes printed incorrectly if its +fraction part was zero. (gdevpdf.c) + - Embedded Multiple Master font instances weren't identified as +MMType1 rather than Type1. (gdevpdff.h, gdevpdff.c, gdevpdft.c, gdevpdfw.c) + - The test against MaxSubsetPct was incorrect when the percentages +were equal. (gdevpdfw.c) + - Font registrations weren't removed when the device was closed. +(gdevpdff.h, gdevpdfx.h, gdevpdff.c, gdevpdfw.c) + - Multiple /OBJ pdfmarks with the same name caused an error. For +Distiller compatibility, we now allow this if the type is the same, even +though the pdfmark specification doesn't say anything about this being +legal. (gdevpdfm.c) + +Removes an unnecessary variable. (gdevpdff.c, gdevpdfr.c) + +Disables embedding Multiple Master font instances, since Acrobat Reader +doesn't accept what appear to be correct output and we don't have time +before the release to track down the problem. (gdevpdft.c) + +<h2><a name="6.0_Interpreter_PDF"></a>Interpreter (PDF)</h2> + +Factors some code to allow patching the PDF reader to allow garbage after +the %%EOF (or the %%EOF to be missing completely). (lib/pdf_main.ps) + +<h2><a name="6.0_Interpreter"></a>Interpreter</h2> + +Fixes problems: + - Type 1 fonts with non-standard OtherSubrs had stopped working. +(bug introduced since 5.60) (zchar1.c) + - usecmap didn't work. (lib/gs_cmap.ps) + - The glyph_info procedure for Type 1 fonts didn't take Metrics[2] +or CDevProc into account. (zchar1.c, zfont1.c) + - The multiple-data-source case of images was broken. (bug +introduced in 5.99) (zimage.c) + - If a page device Install procedure caused an error, things could +be left in an inconsistent state. (lib/gs_setpd.ps) + - Using a DeviceN color space could access uninitialized data in a +color value. (zcsdevn.c) + - DeviceN images with procedure data sources were broken. +(zimage.c) + - Images with a procedure data source could terminate prematurely if +their processing was interrupted. (zimage.c) + - The garbage collector only marked half the name table sub-tables, +and attempted to mark an equal number of invalid pointers, leading to +invalid accesses or memory corruption. (iname.c) + +Removes an unused variable. (zmisc.c) + +<h2><a name="6.0_Streams"></a>Streams</h2> + +Fixes problems: + - sgets didn't reset the cursor pointers, so sgets into a client +buffer followed by sseek (for some kinds of streams, including files) could +get confused. (stream.c) + +<h2><a name="6.0_Library"></a>Library</h2> + +Fixes problems: + - A 'const' qualifier was omitted, leading to a type mismatch. +(gxclrast.c) + - The revision number was sometimes printed incorrectly if its +fraction part was zero. (gsmisc.c) + - gs_image_next returned the wrong value in *pused if it incremented +the plane number. (bug introduced in 5.99) (gsimage.c) + - Only the last of the data_x and raster values in the local +'planes' array in gs_image_next_planes were initialized. (bug introduced in +5.99) (gsimage.c) + - The multiple-data-source case of images was broken. (bug +introduced in 5.99) (gsimage.h, gsimage.c) + - ImageType 3 images with unequal scaling for the mask and data +didn't work. (We thought they once did, but it appears they never have.) +(gximage3.c) + - Images with 12-bit samples treated a Decode entry of [1 0] the +same as [0 1]. (Other, general Decode entries worked correctly.) +(gxipixel.c) + - ImageType 3 images didn't work if processing was ever interrupted +for remapping a color. (gximage3.c) + - Images in DeviceN color spaces with 12-bit samples didn't work. +(gxi12bit.c, gxidata.c) + - Images in DeviceN color spaces could fail to render properly +because the interruption of rendering left a half-built entry in an internal +cache. (gxi12bit.c, gxicolor.c) + - Images with non-idempotent RasterOps in 1-component DeviceN color +spaces didn't render properly, because the same pixel was rendered multiple +times after a color remapping interruption. (gximono.c) + - The fast case of masked images caused a crash if invoked without +an imager state. (gximono.c) + - Flushing buffered image data could cause coordinate bookkeeping +to get out of sync. (gxidata.c) + - ImageType 3, InterleaveType 2 images sometimes failed to render +the last row. (gximage3.c) + - The fix in 5.88 for resizing large objects had a bug itself. +(gsalloc.c) + - Whan banding, if a client supplied more data than necessary for an +image, the client was told (incorrectly) that all of the data was used. +(fix from Artifex) (gxclimag.c) + - Null patterns caused a crash. (bug probably introduced by changes +to support PatternType 2) (gspcolor.c) + - On hand-initialized memory devices where line_ptrs[0] != base, +monobit RasterOps could cause invalid or stray memory accesses. (gdevmr1.c) + +Removes an unnecessary variable. (gdevppla.c, gsfont.c) + +Adds the ability to call a specified procedure when unregistering +notification, needed for removing PDF font registrations. (gsnotify.h, +gsnotify.c) + +Updates the copyright year. (gscdef.c) + +</pre> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 2000 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/History7.htm b/Master/xemtex/doc/ghostscript/History7.htm new file mode 100644 index 00000000000..7e71a4f3b3f --- /dev/null +++ b/Master/xemtex/doc/ghostscript/History7.htm @@ -0,0 +1,5109 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>History of Ghostscript versions 7.n</title> +<!-- $Id: History7.htm,v 1.5.2.17.2.8 2003/05/17 15:00:53 giles Exp $ --> +<!-- + WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to + re-create the table of contents here, because it will replace the + hand-edited TOC subheads with a separate subhead for each H2 in + the body of the file. Or if you do, first look at the original + TOC to see how to edit it for visual conciseness. +--> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<table width="100%" border="0"> +<tr><th align="center" bgcolor="#CCCC00"><font size=6>History of Ghostscript versions 7.xx</font> +</table> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Version7.07">Version 7.07 (2003-05-17)</a> +<ul> +<li><a href="#7.07_Incompatible_changes">Incompatible changes</a>, + <a href="#7.07-Documentation">Documentation</a>, + <a href="#7.07-Procedures">Procedures</a>, + <a href="#7.07-Utilities">Utilities</a>, + <a href="#7.07-Drivers">Drivers</a>, + <a href="#7.07-PDF_Interpreter">PDF Interpreter</a>, + <a href="#7.07-Interpreter">Interpreter</a>, + <a href="#7.07-Library">Library</a>, + <a href="#7.07-Other">Other</a> +</ul> +<li><a href="#Version7.06">Version 7.06 (2003-04-01)</a> +<ul> +<li><a href="#7.06_Incompatible_changes">Incompatible changes</a>, + <a href="#7.06-Documentation">Documentation</a>, + <a href="#7.06-Procedures">Procedures</a>, + <a href="#7.06-Utilities">Utilities</a>, + <a href="#7.06-Drivers">Drivers</a>, + <a href="#7.06-PDF_writer">PDF writer</a>, + <a href="#7.06-PDF_Interpreter">PDF Interpreter</a>, + <a href="#7.06-Interpreter">Interpreter</a>, + <a href="#7.06-Streams">Streams</a>, + <a href="#7.06-Library">Library</a>, + <a href="#7.06-Other">Other</a> +</ul> +<li><a href="#Version7.05">Version 7.05 (2002-04-22)</a> +<ul> +<li><a href="#7.05_Incompatible_changes">Incompatible changes</a>, + <a href="#7.05-Documentation">Documentation</a>, + <a href="#7.05-Procedures">Procedures</a>, + <a href="#7.05-Utilities">Utilities</a>, + <a href="#7.05-Drivers">Drivers</a>, + <a href="#7.05-PDF_writer">PDF writer</a>, + <a href="#7.05-PDF_Interpreter">PDF Interpreter</a>, + <a href="#7.05-Interpreter">Interpreter</a>, + <a href="#7.05-Streams">Streams</a>, + <a href="#7.05-Library">Library</a>, + <a href="#7.05-Other">Other</a> +</ul> +<li><a href="#Version7.04">Version 7.04 (2002-01-30)</a> +<ul> +<li><a href="#7.04_Incompatible_changes">Incompatible changes</a>, + <a href="#7.04-Documentation">Documentation</a>, + <a href="#7.04-Procedures">Procedures</a>, + <a href="#7.04-Utilities">Utilities</a>, + <a href="#7.04-Drivers">Drivers</a>, + <a href="#7.04-PDF_Interpreter">PDF Interpreter</a>, + <a href="#7.04-Interpreter">Interpreter</a>, + <a href="#7.04-Library">Library</a>, + <a href="#7.04-Other">Other</a> +</ul> +<li><a href="#Version7.03">Version 7.03 (2001-10-20)</a> +<ul> +<li><a href="#7.03_Incompatible_changes">Incompatible changes</a>, + <a href="#7.03-Documentation">Documentation</a>, + <a href="#7.03-Procedures">Procedures</a>, + <a href="#7.03-Utilities">Utilities</a>, + <a href="#7.03-Drivers">Drivers</a>, + <a href="#7.03-PDF_writer">PDF writer</a>, + <a href="#7.03-PDF_Interpreter">PDF Interpreter</a>, + <a href="#7.03-Interpreter">Interpreter</a>, + <a href="#7.03-Streams">Streams</a>, + <a href="#7.03-Library">Library</a>, + <a href="#7.03-Other">Other</a> +</ul> +<li><a href="#Version7.02">Version 7.02 (2001-09-22)</a> +<ul> +<li><a href="#7.02_Incompatible_changes">Incompatible changes</a>, + <a href="#7.02-Documentation">Documentation</a>, + <a href="#7.02-Procedures">Procedures</a>, + <a href="#7.02-Utilities">Utilities</a>, + <a href="#7.02-Drivers">Drivers</a>, + <a href="#7.02-PDF_writer">PDF writer</a>, + <a href="#7.02-PDF_Interpreter">PDF Interpreter</a>, + <a href="#7.02-Interpreter">Interpreter</a>, + <a href="#7.02-Streams">Streams</a>, + <a href="#7.02-Library">Library</a>, + <a href="#7.02-Other">Other</a> +</ul> +<li><a href="#Version7.00">Version 7.00 (2001-04-08)</a> +<ul> +<li><a href="#7.00_Incompatible_changes">Incompatible changes</a>, + <a href="#7.00-Documentation">Documentation</a>, + <a href="#7.00-Procedures">Procedures</a>, + <a href="#7.00-Utilities">Utilities</a>, + <a href="#7.00-PDF_writer">PDF writer</a>, + <a href="#7.00-Interpreter">Interpreter</a>, + <a href="#7.00-Library">Library</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document is a record of changes in Ghostscript releases numbered 7.xx. +For earlier versions, see the the history documents: + +<blockquote> +<a href="History6.htm">History of Ghostscript versions 6.n</a><br> +<a href="History5.htm">History of Ghostscript versions 5.n</a><br> +<a href="History4.htm">History of Ghostscript versions 4.n</a><br> +<a href="History3.htm">History of Ghostscript versions 3.n</a><br> +<a href="History2.htm">History of Ghostscript versions 2.n</a><br> +<a href="History1.htm">History of Ghostscript versions 1.n</a> +</blockquote> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<p> +Within each release, news appears in the following order: Incompatible +changes, Documentation, Procedures, Utilities, Drivers, Platforms, Fonts, +PDF writer (included under Drivers through fileset 5.88), Interpreter, +Streams (included under Interpreter through release 2.9.9), Library. +Changes marked with a * were made available as patches to a previous +release. + +<hr> + +<h1><a name="Version7.07"></a>Version 7.07 (2003-05-17)</h1> + +<p>This is the third release of the stable 7.0x series under the GNU +GPL. It includes an important security update; upgrading is strongly +recommended.</p> + +<h3><a name="7.07_Incompatible_changes"></a>Incompatible changes</h3> + +<p> +No incompatible changes have been recorded for this version. Users of the 6.5x versions of GNU +Ghostscript will want to check the History for a complete list of changes since that version. + +<pre> + + + +<h2><a name="7.07-Documentation"></a>Documentation</h2><pre> + +Increment the version number after release. (doc/News.htm [1.90.2.18.2.6]: +2003/04/08 11:05:47 giles) + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (doc/Readme.htm [1.31.2.16.2.5]: 2003/04/12 14:02:38 +giles) + +Update the version and data for the 7.07 release. +(doc/API.htm [1.11.2.13.2.6], doc/C-style.htm [1.21.2.11.2.5], +doc/DLL.htm [1.15.2.11.2.5], doc/Develop.htm [1.47.2.18.2.6], +doc/Devices.htm [1.34.2.15.2.6], doc/Drivers.htm [1.21.2.11.2.5], +doc/Fonts.htm [1.22.2.13.2.6], doc/Helpers.htm [1.17.2.11.2.5], +doc/History1.htm [1.13.2.11.2.5], doc/History2.htm [1.13.2.11.2.6], +doc/History3.htm [1.13.2.11.2.6], doc/History4.htm [1.13.2.11.2.6], +doc/History5.htm [1.15.2.11.2.6], doc/History6.htm [1.30.2.11.2.6], +doc/History7.htm [1.5.2.17.2.7], doc/Htmstyle.htm [1.18.2.11.2.5], +doc/Install.htm [1.26.2.13.2.6], doc/Issues.htm [1.15.2.13.2.5], +doc/Language.htm [1.34.2.16.2.5], doc/Lib.htm [1.14.2.11.2.5], +doc/Maintain.htm [1.23.2.12.2.6], doc/Make.htm [1.36.2.19.2.6], +doc/New-user.htm [1.30.2.14.2.6], doc/News.htm [1.90.2.18.2.7], +doc/Projects.htm [1.33.2.11.2.6], doc/Ps-style.htm [1.13.2.11.2.5], +doc/Ps2epsi.htm [1.15.2.12.2.6], doc/Ps2pdf.htm [1.32.2.11.2.5], +doc/Psfiles.htm [1.22.2.12.2.5], doc/Readme.htm [1.31.2.16.2.6], +doc/Release.htm [1.40.2.23.2.6], doc/Source.htm [1.13.2.11.2.5], +doc/Unix-lpr.htm [1.13.2.11.2.5], doc/Use.htm [1.33.2.22.2.6], +doc/Xfonts.htm [1.13.2.11.2.5], doc/gs-vms.hlp [1.12.2.10.2.5], +man/dvipdf.1 [1.10.2.9.2.5], man/font2c.1 [1.10.2.9.2.5], +man/gs.1 [1.10.2.10.2.5], man/gslp.1 [1.10.2.9.2.5], +man/gsnd.1 [1.10.2.9.2.5], man/pdf2dsc.1 [1.10.2.9.2.5], +man/pdf2ps.1 [1.12.2.9.2.5], man/pdfopt.1 [1.10.2.9.2.5], +man/pf2afm.1 [1.10.2.9.2.5], man/pfbtopfa.1 [1.11.2.9.2.5], +man/printafm.1 [1.10.2.9.2.5], man/ps2ascii.1 [1.10.2.9.2.5], +man/ps2epsi.1 [1.10.2.10.2.5], man/ps2pdf.1 [1.14.2.11.2.5], +man/ps2pdfwr.1 [1.13.2.10.2.5], man/ps2ps.1 [1.17.2.9.2.5], +man/wftopfa.1 [1.10.2.9.2.5]: 2003/05/17 14:38:59 giles) + +Update the release notes. (doc/News.htm [1.90.2.18.2.8]: 2003/05/17 14:44:22 +giles) + +</pre><h2><a name="7.07-Procedures"></a>Procedures</h2><pre> + +Increment the version number after release. (version.mak [1.36.2.9.2.5]: +2003/04/08 11:05:47 giles) + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (toolbin/3way.tcl [1.3.6.1.2.1], +toolbin/cvs2hist.py [1.9.2.2.2.1], toolbin/errlist.tcl [1.3.6.1.2.1], +toolbin/gsindent [1.3.6.1.2.1], toolbin/gsmake.tcl [1.5.6.1.2.1], +toolbin/gssubst [1.1.4.1.2.1], toolbin/headers.tcl [1.3.6.1.2.1], +toolbin/leaks.tcl [1.3.6.1.2.1], toolbin/makegnu.tcl [1.3.6.1.2.1], +toolbin/makeset.tcl [1.10.2.3.2.1], toolbin/many2pdf.tcl [1.1.4.1.2.1], +toolbin/pdfinflt.ps [1.1.2.1.2.1], toolbin/pre [1.11.2.3.2.1], +toolbin/precheck.tcl [1.3.6.1.2.1], toolbin/suite.tcl [1.3.6.1.2.1], +toolbin/tmake.tcl [1.3.6.1.2.1]: 2003/04/12 14:02:39 giles) + +Add the bbox device to the default macos shlib build. Bug 686811. +(macos-mcp.mak [1.3.2.8.2.2]: 2003/04/27 23:50:11 giles) + +Add the display device to the default macos shlib build. +(macos-mcp.mak [1.3.2.8.2.3]: 2003/04/27 23:52:55 giles) + +Log message: For the pngalpha device, set the default background color to +white in the bKGD chunk. Add an option -dBackgroundColor=16#RRGGBB to +explicitly set the background color. This is needed by a common web browser +that doesn't correctly support PNG with alpha transparency. DETAILS: +Programs that don't fully support alpha transparency let libpng convert an +RGBA image to RGB. The background color used is either provided by the +program, or in the bKGD chunk, or it falls back to gray. MSIE was defaulting +to a gray background which is not commonly used on web pages. By writing a +white bKGD chunk, PNG files will display correctly against a white +background in MSIE. If a solid color for a web page background is used with +<body bgcolor="#CCCC00">, then PNG images appearing on that page would +need to be created with -dBackgroundColor=16#CCCC00. For textured background +there is no hope. Microsoft needs to fix Internet Explorer. +(libpng.mak [1.10.2.3.2.2]: 2003/05/15 10:05:29 ghostgum) + +Update the version and data for the 7.07 release. +(version.mak [1.36.2.9.2.6]: 2003/05/17 14:39:00 giles) + +</pre><h2><a name="7.07-Utilities"></a>Utilities</h2><pre> + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (lib/Fontmap.ATB [1.2.6.1.2.1], +lib/Fontmap.ATM [1.2.6.1.2.1], lib/Fontmap.GS [1.2.6.1.2.1], +lib/Fontmap.OS2 [1.2.6.1.2.1], lib/Fontmap.SGI [1.2.6.1.2.1], +lib/Fontmap.Sol [1.2.6.1.2.1], lib/Fontmap.Ult [1.2.6.1.2.1], +lib/addxchar.ps [1.2.6.1.2.1], lib/align.ps [1.2.6.1.2.1], +lib/bdftops.ps [1.3.2.2.2.1], lib/caption.ps [1.2.6.1.2.1], +lib/cid2code.ps [1.3.4.1.2.1], lib/docie.ps [1.2.6.1.2.1], +lib/errpage.ps [1.2.6.1.2.1], lib/font2c.ps [1.3.2.1.2.1], +lib/font2pcl.ps [1.2.6.2.2.1], lib/gslp.ps [1.2.6.2.2.1], +lib/gsnup.ps [1.2.6.1.2.1], lib/image-qa.ps [1.3.2.1.2.1], +lib/impath.ps [1.3.4.1.2.1], lib/jispaper.ps [1.2.6.1.2.1], +lib/lines.ps [1.2.6.1.2.1], lib/markhint.ps [1.2.6.1.2.1], +lib/markpath.ps [1.2.6.1.2.1], lib/packfile.ps [1.2.6.2.2.1], +lib/pcharstr.ps [1.2.6.1.2.1], lib/pdf2dsc.ps [1.3.4.2.2.1], +lib/pdfopt.ps [1.10.2.2.2.1], lib/pdfwrite.ps [1.7.2.1.2.1], +lib/pfbtopfa.ps [1.2.6.1.2.1], lib/ppath.ps [1.2.6.1.2.1], +lib/pphs.ps [1.3.2.1.2.1], lib/ps2ai.ps [1.2.6.1.2.1], +lib/ps2ascii.ps [1.3.2.2.2.1], lib/ps2epsi.ps [1.5.2.3.2.1], +lib/rollconv.ps [1.1.8.1], lib/showchar.ps [1.2.6.1.2.1], +lib/stcinfo.ps [1.2.6.1.2.1], lib/stcolor.ps [1.2.6.1.2.1], +lib/stocht.ps [1.3.6.1.2.1], lib/traceimg.ps [1.2.6.2.2.1], +lib/traceop.ps [1.2.6.1.2.1], lib/type1enc.ps [1.2.6.1.2.1], +lib/type1ops.ps [1.2.6.1.2.1], lib/uninfo.ps [1.2.6.1.2.1], +lib/unprot.ps [1.2.6.1.2.1], lib/viewcmyk.ps [1.2.6.2.2.1], +lib/viewgif.ps [1.2.6.1.2.1], lib/viewjpeg.ps [1.1.6.2.2.1], +lib/viewmiff.ps [1.2.6.1.2.1], lib/viewpbm.ps [1.2.6.2.2.1], +lib/viewpcx.ps [1.2.6.2.2.1], lib/viewps2a.ps [1.2.6.1.2.1], +lib/wftopfa.ps [1.2.6.1.2.1], lib/winmaps.ps [1.2.6.1.2.1], +lib/wrfont.ps [1.2.6.1.2.1], lib/zeroline.ps [1.2.6.1.2.1]: 2003/04/12 +14:02:38 giles) + +Avoid calling a null pgsdll_callback, as can happen with the new client api +and CHECK_INTERRUPTS. This fix affects primarily MacOS; similar protections +are already in place for other platforms, although the global was not +explicitly initialized to null. Also return EOFC in the mac stdio stream +process if no callback is defined. Closes bug 686768. Also backports some +code cleanup from HEAD. (gp_mac.c [1.1.4.3.2.2], gp_macio.c [1.2.4.5.2.3]: +2003/04/12 16:37:26 giles) + +Add a missing variable declaration for VMS. Patch from Forrest Cahoon and +Jouk Jansen. (gp_vms.c [1.7.2.3.2.2]: 2003/04/14 13:58:04 giles) + +</pre><h2><a name="7.07-Drivers"></a>Drivers</h2><pre> + +Avoid calling a null pgsdll_callback, as can happen with the new client api +and CHECK_INTERRUPTS. This fix affects primarily MacOS; similar protections +are already in place for other platforms, although the global was not +explicitly initialized to null. Also return EOFC in the mac stdio stream +process if no callback is defined. Closes bug 686768. Also backports some +code cleanup from HEAD. (gdevmac.c [1.1.4.3.2.2]: 2003/04/12 16:37:26 giles) + +In the display device, store the line pointers separately from the bits, so +that the bits can be placed in special memory (e.g. allocated in video +memory). Fixes Bug 686780 display_memalloc() asks for too much memory. If +reopening the display device fails after setting the callback, display an +error message. Allocate the large display bitmap using a low level allocator +to avoid exceeding the memory limit of the previously used device stable +memory allocator. Fixes bugs 686836 "-r doesn't work" and duplicate 686838 +"Ghostscript doesn't do anything". DETAILS: The display memory device and +the raster including line pointers was allocated using the stable allocator +of the display device. This had a limit of 1Mbyte, which was exceeded when +the resolution was greater then 114dpi. This would cause subsequent +allocations to fail, but it appears that nothing else tried to use this +allocator after the display device. The display device was changed to +allocate the line pointers separately to allow the raster to be allocated in +special memory, e.g. video memory or shared memory. This caused the +subsequent allocation of the line pointers to fail when resolution exceeded +114dpi. The modified code now allocates the raster with +gs_alloc_byte_array_immovable, which allocates directly from the C heap, not +subject to any memory limit apart from the overall -K limit if specified, +and is not subject to garbage collection. The normal allocator now has +sufficient memory to allocate the line pointers without problem. The raster +pointer is removed from the pointers that are enumerated during garbage +collection. (gdevdsp.c [1.5.2.5.2.3]: 2003/05/01 10:06:26 ghostgum) + +Log message: For the pngalpha device, set the default background color to +white in the bKGD chunk. Add an option -dBackgroundColor=16#RRGGBB to +explicitly set the background color. This is needed by a common web browser +that doesn't correctly support PNG with alpha transparency. DETAILS: +Programs that don't fully support alpha transparency let libpng convert an +RGBA image to RGB. The background color used is either provided by the +program, or in the bKGD chunk, or it falls back to gray. MSIE was defaulting +to a gray background which is not commonly used on web pages. By writing a +white bKGD chunk, PNG files will display correctly against a white +background in MSIE. If a solid color for a web page background is used with +<body bgcolor="#CCCC00">, then PNG images appearing on that page would +need to be created with -dBackgroundColor=16#CCCC00. For textured background +there is no hope. Microsoft needs to fix Internet Explorer. +(gdevpng.c [1.4.2.1.2.3]: 2003/05/15 10:05:29 ghostgum) + +</pre><h2><a name="7.07-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (lib/pdf_base.ps [1.14.2.1.2.1], +lib/pdf_draw.ps [1.36.2.2.2.1], lib/pdf_font.ps [1.23.2.6.2.1], +lib/pdf_main.ps [1.35.2.7.2.3], lib/pdf_ops.ps [1.17.2.2.2.1]: 2003/04/12 +14:02:39 giles) + +</pre><h2><a name="7.07-Interpreter"></a>Interpreter</h2><pre> + +Increment the version number after release. (lib/gs_init.ps [1.40.2.12.2.2]: +2003/04/08 11:05:47 giles) + +Apply standard FSF license banner to files missed the 7.06 release. Patch +from Brett Smith. (examples/waterfal.ps [1.3.2.1.2.1], +lib/gs_agl.ps [1.2.6.1.2.1], lib/gs_btokn.ps [1.5.2.1.2.1], +lib/gs_ccfnt.ps [1.5.2.1.2.1], lib/gs_ce_e.ps [1.2.6.1.2.1], +lib/gs_cff.ps [1.10.2.1.2.1], lib/gs_cidcm.ps [1.5.2.2.2.1], +lib/gs_cidfn.ps [1.18.4.5.2.1], lib/gs_cmap.ps [1.11.2.4.2.1], +lib/gs_cmdl.ps [1.2.6.1.2.1], lib/gs_css_e.ps [1.2.6.1.2.1], +lib/gs_dbt_e.ps [1.2.6.1.2.1], lib/gs_diskf.ps [1.2.6.1.2.1], +lib/gs_dpnxt.ps [1.2.6.1.2.1], lib/gs_dps.ps [1.4.6.1.2.1], +lib/gs_dps1.ps [1.2.6.1.2.1], lib/gs_dps2.ps [1.3.4.1.2.1], +lib/gs_dscp.ps [1.4.2.1.2.1], lib/gs_epsf.ps [1.2.6.11.2.3], +lib/gs_fform.ps [1.2.6.1.2.1], lib/gs_fonts.ps [1.13.2.3.2.1], +lib/gs_frsd.ps [1.4.6.1.2.1], lib/gs_icc.ps [1.2.2.1.2.1], +lib/gs_il1_e.ps [1.2.6.1.2.1], lib/gs_il2_e.ps [1.2.6.1.2.1], +lib/gs_init.ps [1.40.2.12.2.3], lib/gs_kanji.ps [1.2.6.1.2.1], +lib/gs_ksb_e.ps [1.2.6.1.2.1], lib/gs_l2img.ps [1.2.6.1.2.1], +lib/gs_lev2.ps [1.7.2.4.2.3], lib/gs_lgo_e.ps [1.3.6.1.2.1], +lib/gs_lgx_e.ps [1.2.6.1.2.1], lib/gs_ll3.ps [1.10.2.2.2.1], +lib/gs_mex_e.ps [1.2.6.1.2.1], lib/gs_mgl_e.ps [1.3.6.1.2.1], +lib/gs_mro_e.ps [1.2.6.1.2.1], lib/gs_pdf_e.ps [1.2.6.1.2.1], +lib/gs_pdfwr.ps [1.11.2.1.2.1], lib/gs_pfile.ps [1.2.6.1.2.1], +lib/gs_rdlin.ps [1.2.6.1.2.1], lib/gs_res.ps [1.16.2.2.2.1], +lib/gs_setpd.ps [1.8.2.2.2.2], lib/gs_statd.ps [1.5.2.2.2.1], +lib/gs_std_e.ps [1.2.6.1.2.1], lib/gs_sym_e.ps [1.2.6.1.2.1], +lib/gs_trap.ps [1.3.6.2.2.1], lib/gs_ttf.ps [1.9.2.4.2.1], +lib/gs_typ32.ps [1.3.2.2.2.1], lib/gs_typ42.ps [1.2.6.1.2.1], +lib/gs_type1.ps [1.5.2.1.2.1], lib/gs_wan_e.ps [1.2.6.1.2.1], +lib/gs_wl1_e.ps [1.2.6.1.2.1], lib/gs_wl2_e.ps [1.2.6.1.2.1], +lib/gs_wl5_e.ps [1.2.6.1.2.1]: 2003/04/12 14:02:38 giles) + +Sort the list of devices in the output of 'gs -h' so they're easier to read. +List the default device separately as it's no longer first. Based on a patch +from Nelson Beebe. Closes bug 416746. Also correct a warning in argproc(). +(imainarg.c [1.13.2.3.2.2]: 2003/04/12 16:43:14 giles) + +In the display device, store the line pointers separately from the bits, so +that the bits can be placed in special memory (e.g. allocated in video +memory). Fixes Bug 686780 display_memalloc() asks for too much memory. If +reopening the display device fails after setting the callback, display an +error message. Allocate the large display bitmap using a low level allocator +to avoid exceeding the memory limit of the previously used device stable +memory allocator. Fixes bugs 686836 "-r doesn't work" and duplicate 686838 +"Ghostscript doesn't do anything". DETAILS: The display memory device and +the raster including line pointers was allocated using the stable allocator +of the display device. This had a limit of 1Mbyte, which was exceeded when +the resolution was greater then 114dpi. This would cause subsequent +allocations to fail, but it appears that nothing else tried to use this +allocator after the display device. The display device was changed to +allocate the line pointers separately to allow the raster to be allocated in +special memory, e.g. video memory or shared memory. This caused the +subsequent allocation of the line pointers to fail when resolution exceeded +114dpi. The modified code now allocates the raster with +gs_alloc_byte_array_immovable, which allocates directly from the C heap, not +subject to any memory limit apart from the overall -K limit if specified, +and is not subject to garbage collection. The normal allocator now has +sufficient memory to allocate the line pointers without problem. The raster +pointer is removed from the pointers that are enumerated during garbage +collection. (idisp.c [1.2.2.2.2.2]: 2003/05/01 10:06:26 ghostgum) + +Security fixes. Add detection of %pipe% device when in SAFER mode. Also fix +detection of 'renamefile' to prevent rename from a file that is not on the +PermitFileControl list. (zfile.c [1.11.2.4.2.2]: 2003/05/17 14:28:33 ray) + +</pre><h2><a name="7.07-Library"></a>Library</h2><pre> + +Increment the version number after release. (gscdef.c [1.15.2.4.2.3]: +2003/04/08 11:05:47 giles) + +Update the version and data for the 7.07 release. (gscdef.c [1.15.2.4.2.4]: +2003/05/17 14:39:00 giles) + +</pre><h2><a name="7.07-Other"></a>Other</h2><pre> + +Test the optimization compiler flag '-O2' before using it since some vendor +compilers have different syntax. (Makefile.in [1.1.4.13.2.3], +configure.ac [1.4.4.12.2.2]: 2003/04/16 13:59:56 giles) + +Include the bbox device in the default autoconf build. +(Makefile.in [1.1.4.13.2.4]: 2003/04/29 18:33:31 giles) + +<hr> + +<h1><a name="Version7.06"></a>Version 7.06 (2003-04-01)</h1> + +<p>This is the second release of the stable 7.0x series under the GNU +GPL, following one year after the release of 7.00. It includes a number +of small bug fixes and documentation cleanup to comply with the GNU +coding guidelines. + +<p>Also new in this release is the 'pngalpha' device which produces png output +with a transparent background (page) color so they can be composited against a +separate background. The transparency is based only on what parts of the page +have been drawn and does not support PDF 1.4 trasparent painting.</p> + +<h3><a name="7.06_Incompatible_changes"></a>Incompatible changes</h3> + +<p> +No incompatible changes have been recorded for this version. Users of the 6.5x versions of GNU +Ghostscript will want to check the History for a complete list of changes since that version. +Authors of drivers with potential security implications are also encouraged to review +the security changes introduced with 6.53/7.04. + +<p> +Additionally, the scripts which create the project file for bulding +ghostscript on MacOS have been updated for Metrowerks CodeWarrior 7.2 and 8.3. +Edit the LIBS entries in macgenmcpxml.sh to recover the settings for +CW6. + +<h2><a name="7.06-Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - Add the option -dUseCropBox to set the page size from the CropBox +rather than the MediaBox. This is appropriate when using ghostscript to view +PDF files or convert to bitmaps. It probably isn't appropriate for printing. +Fixes SourceForge bugs #522486, "Wromg size EPS generated from PDF" and +#538267 "Problems with Media Box in PDF and PS interpreter". +(doc/Use.htm [1.33.2.13]: 2002/06/28 10:59:01 ghostgum) + - When ghostscript is given a PDF file on standard input, copy it to +a temporary file before processing. Prior to version 7, ghostscript could +read PDF from standard input redirected from a file, but not from a pipe. +Standard input was changed in version 7 to use callouts, which prevented PDF +reading from standard input. Fixes SourceForge bug #583413, /ioerror with gs +- < file.pdf vers 7.xx (doc/Use.htm [1.33.2.15]: 2002/09/14 12:05:58 +ghostgum) + - Fix: Mentions the autoconf build method in the installation +documentation. Inspired by a user report of having looked there first rather +than at Make.htm; an understandible choice based on GNU/Linux packaging +conventions. Also removes a reference to using the Acrobat Reader fonts. +(doc/Install.htm [1.26.2.9]: 2002/09/16 21:41:40 giles) + - Fix a broken documentation link. (doc/Use.htm [1.33.2.17]: +2002/09/16 22:50:31 giles) + - Keep pagedevice and device views of .LockSafetyParams correct even +after a 'restore' is used to unlock. The dictionary fed to the setpagedevice +operator is allocated in the same VM space as currentpagedevice to avoid +invalidaccess problems. Fixed SF #580029 and does not revert to the +incorrect behaviour of bug #516379. (doc/Language.htm [1.34.2.12]: +2002/09/19 17:05:05 ray) + - adds missing files to the developer documentation. +(doc/Develop.htm [1.47.2.16]: 2002/10/10 13:22:31 giles) + - release number must be updated in lib/gs_init.ps as well. +(doc/Release.htm [1.40.2.19]: 2002/10/10 13:25:25 giles) + +Update the url for the zlib website and source. Fixes SF Bug #550585. +(doc/Make.htm [1.36.2.13], doc/New-user.htm [1.30.2.9]: 2002/05/09 17:04:50 +giles) + +Prefer {} to () for manditory alteration groups in commandline arguments. +Patch from Eric S. Raymond. (man/de/ps2pdf.1 [1.1.4.1], +man/ps2pdf.1 [1.14.2.8], man/ps2pdfwr.1 [1.13.2.8]: 2002/08/08 12:27:21 +giles) + +Add missing "Summary of environment variables" header to Use.htm. +(doc/Use.htm [1.33.2.14]: 2002/08/09 11:00:04 ghostgum) + +Delete all temporary files when the interpreter closes. +(doc/Language.htm [1.34.2.11]: 2002/09/05 12:21:45 ghostgum) + +Add command line options -dEPS, -dEPSCrop and -dEPSFitPage for handling +Encapsulated PostScript files. (doc/Use.htm [1.33.2.16]: 2002/09/14 12:17:25 +ghostgum) + +Removes mention of the gdevcd8.c drivers from the documentation. All of +these printers are supported by the gimp-print and/or hpijs projects. The +(GPL) third party drivers for them were never added to the 7.0x series. +Closes SourceForge bug #557177. (doc/Devices.htm [1.34.2.12]: 2002/09/22 +23:02:38 giles) + +Add documentation to the .setsafe operator that was added to .locksafe +operator that says that .setsafe uses setpagedevice, thus it will erase the +page. Related to SourceForge bug #580029. (doc/Language.htm [1.34.2.13]: +2002/09/23 06:19:58 ray) + +Remove excessive trademark symbols to improve compliance with the GNU coding +guidelines. (man/de/ps2pdf.1 [1.1.4.2], man/ps2pdf.1 [1.14.2.9]: 2002/09/23 +14:53:40 giles) + +Attempt to update version info on the german manpages and port Thomas +Hoffmann's fixes from HEAD. (man/de/ansi2knr.1 [1.1.4.1], +man/de/dvipdf.1 [1.1.4.1], man/de/font2c.1 [1.1.4.1], +man/de/gsnd.1 [1.2.4.1], man/de/pdf2dsc.1 [1.1.4.1], +man/de/pdf2ps.1 [1.2.4.1], man/de/pdfopt.1 [1.1.4.1], +man/de/printafm.1 [1.1.4.1], man/de/ps2ascii.1 [1.1.4.1], +man/de/ps2pdf.1 [1.1.4.3], man/de/ps2ps.1 [1.2.4.1], +man/de/wftopfa.1 [1.1.4.1]: 2002/09/23 15:57:35 giles) + +Improve compliance with GNU coding standards by removing references to +other software. (doc/API.htm [1.11.2.11], doc/C-style.htm [1.21.2.9], +doc/Current.htm [1.13.2.9], doc/DLL.htm [1.15.2.9], doc/Develop.htm +[1.47.2.14], doc/Devices.htm [1.34.2.13], doc/Drivers.htm [1.21.2.9], +doc/Fonts.htm [1.22.2.10], doc/Helpers.htm [1.17.2.9], doc/Hershey.htm +[1.3.4.1], doc/History1.htm [1.13.2.9], doc/History2.htm [1.13.2.9], +doc/History3.htm [1.13.2.9], doc/History4.htm [1.13.2.9], doc/History5.htm +[1.15.2.9], doc/History6.htm [1.30.2.9], doc/History7.htm [1.5.2.13], +doc/Htmstyle.htm [1.18.2.9], doc/Humor.htm [1.3.2.2], doc/Install.htm +[1.26.2.10], doc/Issues.htm [1.15.2.10], doc/Language.htm [1.34.2.14], +doc/Lib.htm [1.14.2.9], doc/Maintain.htm [1.23.2.9], doc/Make.htm +[1.36.2.14], doc/New-user.htm [1.30.2.10], doc/News.htm [1.90.2.15], +doc/Projects.htm [1.33.2.9], doc/Ps-style.htm [1.13.2.9], doc/Ps2epsi.htm +[1.15.2.10], doc/Ps2pdf.htm [1.32.2.9], doc/Psfiles.htm [1.22.2.10], +doc/Readme.htm [1.31.2.11], doc/Release.htm [1.40.2.16], doc/Source.htm +[1.13.2.9], doc/Unix-lpr.htm [1.13.2.9], doc/Use.htm [1.33.2.18], +doc/Xfonts.htm [1.13.2.9]: 2002/09/23 16:26:21 giles) + +Additional german manpage cleanup thanks to the Jens Harting. +(man/de/ansi2knr.1 [1.1.4.2], man/de/dvipdf.1 [1.1.4.2], +man/de/font2c.1 [1.1.4.2], man/de/gsnd.1 [1.2.4.2], +man/de/pdf2dsc.1 [1.1.4.2], man/de/pdf2ps.1 [1.2.4.2], +man/de/pdfopt.1 [1.1.4.2], man/de/ps2ascii.1 [1.1.4.2], +man/de/ps2pdf.1 [1.1.4.4], man/de/ps2ps.1 [1.2.4.2]: 2002/09/23 17:24:44 +giles) + +Improve compliance with the GNU coding guidelines on references to other +software. (doc/Readme.htm [1.31.2.12]: 2002/09/25 14:58:34 giles) + +Further improvement of compliance with the GNU coding guidelines on +references to other software. (doc/Make.htm [1.36.2.15], doc/New-user.htm +[1.30.2.11]: 2002/09/25 18:13:29 giles) + +Further improvement of compliance with the GNU coding guidelines on +references to other software. (doc/gs-vms.hlp [1.12.2.8]: 2002/10/07 +22:18:20 giles) + +Remove Tester.htm. It's (probably) out of date. (doc/Readme.htm +[1.31.2.13]: 2002/10/07 22:19:40 giles) + +Last round of refinement for compliance with GNU coding +standards. (doc/Fonts.htm [1.22.2.11], doc/Install.htm [1.26.2.11], +doc/Issues.htm [1.15.2.11], doc/Maintain.htm [1.23.2.10], doc/Make.htm +[1.36.2.16], doc/New-user.htm [1.30.2.12], doc/Readme.htm [1.31.2.14], +doc/Release.htm [1.40.2.17]: 2002/10/08 08:24:34 giles) + +Remove remaining elements of support for K&R (pre-ansi) C. We no longer +support building ghostscript tt way, but the remaining dead code causes +confusion for some users. Closes Sourceforge bug #618048. +(doc/Develop.htm [1.47.2.15], doc/Make.htm [1.36.2.17], +doc/Release.htm [1.40.2.18]: 2002/10/10 00:28:26 giles) + +Update version number and date for release. (doc/API.htm [1.11.2.12], +doc/C-style.htm [1.21.2.10], doc/Current.htm [1.13.2.10], +doc/DLL.htm [1.15.2.10], doc/Develop.htm [1.47.2.17], +doc/Devices.htm [1.34.2.14], doc/Drivers.htm [1.21.2.10], +doc/Fonts.htm [1.22.2.12], doc/Helpers.htm [1.17.2.10], +doc/History1.htm [1.13.2.10], doc/History2.htm [1.13.2.10], +doc/History3.htm [1.13.2.10], doc/History4.htm [1.13.2.10], +doc/History5.htm [1.15.2.10], doc/History6.htm [1.30.2.10], +doc/History7.htm [1.5.2.14], doc/Htmstyle.htm [1.18.2.10], +doc/Install.htm [1.26.2.12], doc/Issues.htm [1.15.2.12], +doc/Language.htm [1.34.2.15], doc/Lib.htm [1.14.2.10], +doc/Maintain.htm [1.23.2.11], doc/Make.htm [1.36.2.18], +doc/New-user.htm [1.30.2.13], doc/News.htm [1.90.2.16], +doc/Projects.htm [1.33.2.10], doc/Ps-style.htm [1.13.2.10], +doc/Ps2epsi.htm [1.15.2.11], doc/Ps2pdf.htm [1.32.2.10], +doc/Psfiles.htm [1.22.2.11], doc/Readme.htm [1.31.2.15], +doc/Release.htm [1.40.2.20], doc/Source.htm [1.13.2.10], +doc/Unix-lpr.htm [1.13.2.10], doc/Use.htm [1.33.2.19], +doc/Xfonts.htm [1.13.2.10], doc/gs-vms.hlp [1.12.2.9]: 2002/10/10 13:36:49 +giles) + +Update version number and date for release. (man/dvipdf.1 [1.10.2.8], +man/font2c.1 [1.10.2.8], man/gs.1 [1.10.2.9], man/gslp.1 [1.10.2.8], +man/gsnd.1 [1.10.2.8], man/pdf2dsc.1 [1.10.2.8], man/pdf2ps.1 [1.12.2.8], +man/pdfopt.1 [1.10.2.8], man/pf2afm.1 [1.10.2.8], man/pfbtopfa.1 [1.11.2.8], +man/printafm.1 [1.10.2.8], man/ps2ascii.1 [1.10.2.8], +man/ps2epsi.1 [1.10.2.9], man/ps2pdf.1 [1.14.2.10], +man/ps2pdfwr.1 [1.13.2.9], man/ps2ps.1 [1.17.2.8], man/wftopfa.1 [1.10.2.8]: +2002/10/10 13:37:00 giles) + +Improvements to processing of EPS files. (doc/Use.htm [1.33.2.20]: +2002/10/31 11:12:12 ghostgum) + +Correct the documented paper sizes in Use.htm to match gs_statd.ps after fix +for SF bug # 536877. Change cm units to the more common mm. +(doc/Use.htm [1.33.2.21]: 2002/11/04 22:55:35 ghostgum) + +Add working 'distclean' and 'maintainer-clean' targets to the autoconf +makefile. Backport from HEAD. (doc/Release.htm [1.40.2.22]: 2002/12/02 +00:10:23 giles) + +Update release date for second candidate. (doc/API.htm [1.11.2.13], +doc/C-style.htm [1.21.2.11], doc/DLL.htm [1.15.2.11], +doc/Develop.htm [1.47.2.18], doc/Devices.htm [1.34.2.15], +doc/Drivers.htm [1.21.2.11], doc/Fonts.htm [1.22.2.13], +doc/Helpers.htm [1.17.2.11], doc/History1.htm [1.13.2.11], +doc/History2.htm [1.13.2.11], doc/History3.htm [1.13.2.11], +doc/History4.htm [1.13.2.11], doc/History5.htm [1.15.2.11], +doc/History6.htm [1.30.2.11], doc/History7.htm [1.5.2.16], +doc/Htmstyle.htm [1.18.2.11], doc/Install.htm [1.26.2.13], +doc/Issues.htm [1.15.2.13], doc/Language.htm [1.34.2.16], +doc/Lib.htm [1.14.2.11], doc/Maintain.htm [1.23.2.12], +doc/Make.htm [1.36.2.19], doc/New-user.htm [1.30.2.14], +doc/News.htm [1.90.2.18], doc/Projects.htm [1.33.2.11], +doc/Ps-style.htm [1.13.2.11], doc/Ps2epsi.htm [1.15.2.12], +doc/Ps2pdf.htm [1.32.2.11], doc/Psfiles.htm [1.22.2.12], +doc/Readme.htm [1.31.2.16], doc/Release.htm [1.40.2.23], +doc/Source.htm [1.13.2.11], doc/Unix-lpr.htm [1.13.2.11], +doc/Use.htm [1.33.2.22], doc/Xfonts.htm [1.13.2.11], +doc/gs-vms.hlp [1.12.2.10]: 2002/12/02 01:54:36 giles) + +Update release date for second candidate. (man/dvipdf.1 [1.10.2.9], +man/font2c.1 [1.10.2.9], man/gs.1 [1.10.2.10], man/gslp.1 [1.10.2.9], +man/gsnd.1 [1.10.2.9], man/pdf2dsc.1 [1.10.2.9], man/pdf2ps.1 [1.12.2.9], +man/pdfopt.1 [1.10.2.9], man/pf2afm.1 [1.10.2.9], man/pfbtopfa.1 [1.11.2.9], +man/printafm.1 [1.10.2.9], man/ps2ascii.1 [1.10.2.9], +man/ps2epsi.1 [1.10.2.10], man/ps2pdf.1 [1.14.2.11], +man/ps2pdfwr.1 [1.13.2.10], man/ps2ps.1 [1.17.2.9], +man/wftopfa.1 [1.10.2.9]: 2002/12/02 01:54:43 giles) + +Change documentation and changelogs to better comply with GNU coding +guidelines. Patch from Brett Smith. (doc/API.htm [1.11.2.13.2.1], +doc/Changes.htm [1.28.2.8.2.1], doc/Develop.htm [1.47.2.18.2.1], +doc/Devices.htm [1.34.2.15.2.1], doc/Fonts.htm [1.22.2.13.2.1], +doc/History2.htm [1.13.2.11.2.1], doc/History3.htm [1.13.2.11.2.1], +doc/History4.htm [1.13.2.11.2.1], doc/History5.htm [1.15.2.11.2.1], +doc/History6.htm [1.30.2.11.2.1], doc/History7.htm [1.5.2.17.2.1], +doc/Install.htm [1.26.2.13.2.1], doc/Maintain.htm [1.23.2.12.2.1], +doc/Make.htm [1.36.2.19.2.1], doc/New-user.htm [1.30.2.14.2.1], +doc/Projects.htm [1.33.2.11.2.1], doc/Ps2epsi.htm [1.15.2.12.2.1], +doc/Release.htm [1.40.2.23.2.1], doc/Use.htm [1.33.2.22.2.1]: 2003/01/17 +00:58:51 giles) + +Update release date for final 7.06 release. (doc/API.htm [1.11.2.13.2.2], +doc/C-style.htm [1.21.2.11.2.1], doc/DLL.htm [1.15.2.11.2.1], +doc/Develop.htm [1.47.2.18.2.2], doc/Devices.htm [1.34.2.15.2.2], +doc/Drivers.htm [1.21.2.11.2.1], doc/Fonts.htm [1.22.2.13.2.2], +doc/Helpers.htm [1.17.2.11.2.1], doc/History1.htm [1.13.2.11.2.1], +doc/History2.htm [1.13.2.11.2.2], doc/History3.htm [1.13.2.11.2.2], +doc/History4.htm [1.13.2.11.2.2], doc/History5.htm [1.15.2.11.2.2], +doc/History6.htm [1.30.2.11.2.2], doc/History7.htm [1.5.2.17.2.2], +doc/Htmstyle.htm [1.18.2.11.2.1], doc/Install.htm [1.26.2.13.2.2], +doc/Issues.htm [1.15.2.13.2.1], doc/Language.htm [1.34.2.16.2.1], +doc/Lib.htm [1.14.2.11.2.1], doc/Maintain.htm [1.23.2.12.2.2], +doc/Make.htm [1.36.2.19.2.2], doc/New-user.htm [1.30.2.14.2.2], +doc/News.htm [1.90.2.18.2.1], doc/Projects.htm [1.33.2.11.2.2], +doc/Ps-style.htm [1.13.2.11.2.1], doc/Ps2epsi.htm [1.15.2.12.2.2], +doc/Ps2pdf.htm [1.32.2.11.2.1], doc/Psfiles.htm [1.22.2.12.2.1], +doc/Readme.htm [1.31.2.16.2.1], doc/Release.htm [1.40.2.23.2.2], +doc/Source.htm [1.13.2.11.2.1], doc/Unix-lpr.htm [1.13.2.11.2.1], +doc/Use.htm [1.33.2.22.2.2], doc/Xfonts.htm [1.13.2.11.2.1], +doc/gs-vms.hlp [1.12.2.10.2.1], man/dvipdf.1 [1.10.2.9.2.1], +man/font2c.1 [1.10.2.9.2.1], man/gs.1 [1.10.2.10.2.1], +man/gslp.1 [1.10.2.9.2.1], man/gsnd.1 [1.10.2.9.2.1], +man/pdf2dsc.1 [1.10.2.9.2.1], man/pdf2ps.1 [1.12.2.9.2.1], +man/pdfopt.1 [1.10.2.9.2.1], man/pf2afm.1 [1.10.2.9.2.1], +man/pfbtopfa.1 [1.11.2.9.2.1], man/printafm.1 [1.10.2.9.2.1], +man/ps2ascii.1 [1.10.2.9.2.1], man/ps2epsi.1 [1.10.2.10.2.1], +man/ps2pdf.1 [1.14.2.11.2.1], man/ps2pdfwr.1 [1.13.2.10.2.1], +man/ps2ps.1 [1.17.2.9.2.1], man/wftopfa.1 [1.10.2.9.2.1]: 2003/02/09 +16:20:03 giles) + +Correct a typo in the release date. (doc/API.htm [1.11.2.13.2.3], +doc/C-style.htm [1.21.2.11.2.2], doc/DLL.htm [1.15.2.11.2.2], +doc/Develop.htm [1.47.2.18.2.3], doc/Devices.htm [1.34.2.15.2.3], +doc/Drivers.htm [1.21.2.11.2.2], doc/Fonts.htm [1.22.2.13.2.3], +doc/Helpers.htm [1.17.2.11.2.2], doc/History1.htm [1.13.2.11.2.2], +doc/History2.htm [1.13.2.11.2.3], doc/History3.htm [1.13.2.11.2.3], +doc/History4.htm [1.13.2.11.2.3], doc/History5.htm [1.15.2.11.2.3], +doc/History6.htm [1.30.2.11.2.3], doc/History7.htm [1.5.2.17.2.3], +doc/Htmstyle.htm [1.18.2.11.2.2], doc/Install.htm [1.26.2.13.2.3], +doc/Issues.htm [1.15.2.13.2.2], doc/Language.htm [1.34.2.16.2.2], +doc/Lib.htm [1.14.2.11.2.2], doc/Maintain.htm [1.23.2.12.2.3], +doc/Make.htm [1.36.2.19.2.3], doc/New-user.htm [1.30.2.14.2.3], +doc/News.htm [1.90.2.18.2.2], doc/Projects.htm [1.33.2.11.2.3], +doc/Ps-style.htm [1.13.2.11.2.2], doc/Ps2epsi.htm [1.15.2.12.2.3], +doc/Ps2pdf.htm [1.32.2.11.2.2], doc/Psfiles.htm [1.22.2.12.2.2], +doc/Readme.htm [1.31.2.16.2.2], doc/Release.htm [1.40.2.23.2.3], +doc/Source.htm [1.13.2.11.2.2], doc/Unix-lpr.htm [1.13.2.11.2.2], +doc/Use.htm [1.33.2.22.2.3], doc/Xfonts.htm [1.13.2.11.2.2], +doc/gs-vms.hlp [1.12.2.10.2.2], man/dvipdf.1 [1.10.2.9.2.2], +man/font2c.1 [1.10.2.9.2.2], man/gs.1 [1.10.2.10.2.2], +man/gslp.1 [1.10.2.9.2.2], man/gsnd.1 [1.10.2.9.2.2], +man/pdf2dsc.1 [1.10.2.9.2.2], man/pdf2ps.1 [1.12.2.9.2.2], +man/pdfopt.1 [1.10.2.9.2.2], man/pf2afm.1 [1.10.2.9.2.2], +man/pfbtopfa.1 [1.11.2.9.2.2], man/printafm.1 [1.10.2.9.2.2], +man/ps2ascii.1 [1.10.2.9.2.2], man/ps2epsi.1 [1.10.2.10.2.2], +man/ps2pdf.1 [1.14.2.11.2.2], man/ps2pdfwr.1 [1.13.2.10.2.2], +man/ps2ps.1 [1.17.2.9.2.2], man/wftopfa.1 [1.10.2.9.2.2]: 2003/02/09 +17:07:08 giles) + +Update changelog and release date. (doc/News.htm [1.90.2.18.2.3]: 2003/03/31 +13:56:42 giles) + +Propagate new release date to all documentation. +(doc/API.htm [1.11.2.13.2.4], doc/C-style.htm [1.21.2.11.2.3], +doc/DLL.htm [1.15.2.11.2.3], doc/Develop.htm [1.47.2.18.2.4], +doc/Devices.htm [1.34.2.15.2.4], doc/Drivers.htm [1.21.2.11.2.3], +doc/Fonts.htm [1.22.2.13.2.4], doc/Helpers.htm [1.17.2.11.2.3], +doc/History1.htm [1.13.2.11.2.3], doc/History2.htm [1.13.2.11.2.4], +doc/History3.htm [1.13.2.11.2.4], doc/History4.htm [1.13.2.11.2.4], +doc/History5.htm [1.15.2.11.2.4], doc/History6.htm [1.30.2.11.2.4], +doc/History7.htm [1.5.2.17.2.4], doc/Htmstyle.htm [1.18.2.11.2.3], +doc/Install.htm [1.26.2.13.2.4], doc/Issues.htm [1.15.2.13.2.3], +doc/Language.htm [1.34.2.16.2.3], doc/Lib.htm [1.14.2.11.2.3], +doc/Maintain.htm [1.23.2.12.2.4], doc/Make.htm [1.36.2.19.2.4], +doc/New-user.htm [1.30.2.14.2.4], doc/News.htm [1.90.2.18.2.4], +doc/Projects.htm [1.33.2.11.2.4], doc/Ps-style.htm [1.13.2.11.2.3], +doc/Ps2epsi.htm [1.15.2.12.2.4], doc/Ps2pdf.htm [1.32.2.11.2.3], +doc/Psfiles.htm [1.22.2.12.2.3], doc/Readme.htm [1.31.2.16.2.3], +doc/Release.htm [1.40.2.23.2.4], doc/Source.htm [1.13.2.11.2.3], +doc/Unix-lpr.htm [1.13.2.11.2.3], doc/Use.htm [1.33.2.22.2.4], +doc/Xfonts.htm [1.13.2.11.2.3], doc/gs-vms.hlp [1.12.2.10.2.3], +man/dvipdf.1 [1.10.2.9.2.3], man/font2c.1 [1.10.2.9.2.3], +man/gs.1 [1.10.2.10.2.3], man/gslp.1 [1.10.2.9.2.3], +man/gsnd.1 [1.10.2.9.2.3], man/pdf2dsc.1 [1.10.2.9.2.3], +man/pdf2ps.1 [1.12.2.9.2.3], man/pdfopt.1 [1.10.2.9.2.3], +man/pf2afm.1 [1.10.2.9.2.3], man/pfbtopfa.1 [1.11.2.9.2.3], +man/printafm.1 [1.10.2.9.2.3], man/ps2ascii.1 [1.10.2.9.2.3], +man/ps2epsi.1 [1.10.2.10.2.3], man/ps2pdf.1 [1.14.2.11.2.3], +man/ps2pdfwr.1 [1.13.2.10.2.3], man/ps2ps.1 [1.17.2.9.2.3], +man/wftopfa.1 [1.10.2.9.2.3]: 2003/03/31 14:00:26 giles) + +</pre><h2><a name="7.06-Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - .pushpdf14devicefilter was defined in zdfilter.c, but depended on +the optional pdf module's transparency features. Moves the definition of +this routine to the conditionally included ztrans.c. Fix by L. Peter +Deutsch, resolves SourceForge Bug 565019. (int.mak [1.50.2.4]: 2002/06/14 +09:53:12 giles) + - As a result of a recent fix, an opdef table had more than 16 +entries, causing initialization to abort. backporting a fix by L. Peter +Deutsch from HEAD. (int.mak [1.50.2.5]: 2002/06/14 15:26:00 giles) + - When building an archive of the graphics library or interpreter, +add only the object files, not the .dev and interpreter files. Fixes +SourceForge bug # 538311 - files missing from library archive. +(gs.mak [1.5.2.4], ugcclib.mak [1.13.2.6], unixlink.mak [1.3.4.2]: +2002/06/22 03:34:43 ghostgum) + - Provide an implementation of popen for Windows, to avoid the +broken implementation in MSVC++ 5 and 6. This allows pswrite to output to a +pipe on Windows. Fixes SourceForge bug #482038, pswrite does not write to +pipe. (winlib.mak [1.12.2.3]: 2002/09/05 10:19:00 ghostgum) + - provide a meaningful error message when an immediately evaluated +name can not be found. Fixes SourceForge bug #543185, Confusing diagnostics +for //undefined. (int.mak [1.50.2.6]: 2002/09/14 11:59:15 ghostgum) + +Update the url for the zlib website and source. Fixes SF Bug #550585. +(zlib.mak [1.3.2.2]: 2002/05/09 17:04:50 giles) + +Add a 32 bit/pixel CMYK driver named pam using the Portable Arbitrary Map +file format, one of the netpbm family. This driver has problems with +anti-aliasing that will be fixed in a later patch. (devs.mak [1.47.2.7]: +2002/06/22 03:44:00 ghostgum) + +Remove spurious build of the gtk client along with the macos framework. +Backport the 'framework_install' target from HEAD. (macos-fw.mak [1.1.2.3]: +2002/08/07 13:05:17 giles) + +Add command line options -dEPS, -dEPSCrop and -dEPSFitPage for handling +Encapsulated PostScript files. (bcwin32.mak [1.12.2.6], +msvc32.mak [1.20.2.8]: 2002/09/14 12:17:26 ghostgum) + +Remove some interpreter references from the graphics library. Partial fix +for SourceForge bug #542848, "library #includes interpreter headers". +(lib.mak [1.53.2.5], msvclib.mak [1.16.2.4], msvctail.mak [1.6.2.2], +pcwin.mak [1.2.6.2]: 2002/09/14 12:25:55 ghostgum) + +Prune the dead 'begin' makefile target. This was supposedly removed in +release 5.20. (gs.mak [1.5.2.5]: 2002/10/09 22:07:08 giles) + +Remove remaining elements of support for K&R (pre-ansi) C. We no longer +support building ghostscript tt way, but the remaining dead code causes +confusion for some users. Closes Sourceforge bug #618048. +(dvx-gcc.mak [1.12.2.6], dvx-tail.mak [1.5.2.2], gs.mak [1.5.2.6], +macos-mcp.mak [1.3.2.5], macosx.mak [1.3.2.7], openvms.mak [1.16.2.6], +openvms.mmk [1.12.2.3], os2.mak [1.19.2.6], ugcclib.mak [1.13.2.7], +unix-aux.mak [1.5.2.3], unix-gcc.mak [1.23.2.10], unixansi.mak [1.16.2.9], +wccommon.mak [1.3.6.2], winlib.mak [1.12.2.4]: 2002/10/10 00:24:01 giles) + +Set USE_ASM to zero explicitly. (unix-gcc.mak [1.23.2.11], +unixansi.mak [1.16.2.10]: 2002/10/10 12:47:49 giles) + +Update libpng version number to latest release. (all-arch.mak [1.9.2.4], +bcwin32.mak [1.12.2.7], dvx-gcc.mak [1.12.2.7], macos-mcp.mak [1.3.2.6], +macosx.mak [1.3.2.8], msvc32.mak [1.20.2.9], msvclib.mak [1.16.2.5], +openvms.mak [1.16.2.7], os2.mak [1.19.2.7], ugcclib.mak [1.13.2.8], +unix-gcc.mak [1.23.2.12], unixansi.mak [1.16.2.11], watc.mak [1.16.2.4], +watclib.mak [1.13.2.5], watcw32.mak [1.13.2.5]: 2002/10/10 13:35:51 giles) + +Update version number and date for release. (version.mak [1.36.2.8]: +2002/10/10 13:37:03 giles) + +Module gslib removed from the library archive. Further fix for [ 538311 ] +files missing from library archive. (ugcclib.mak [1.13.2.9]: 2002/11/02 +04:31:13 ghostgum) + +Backport MacOS build updates for Metrowerks CW8 from HEAD. +(macos-mcp.mak [1.3.2.7], macosx.mak [1.3.2.9]: 2002/12/01 23:29:37 giles) + +Update libpng version makefile variables to 10205. These were accidentally +reverted in the last commit. (macos-mcp.mak [1.3.2.8], +macosx.mak [1.3.2.10]: 2002/12/01 23:32:56 giles) + +Add working 'distclean' and 'maintainer-clean' targets to the autoconf +makefile. Backport from HEAD. (gs.mak [1.5.2.7]: 2002/12/02 00:10:24 giles) + +Update release date for second candidate. (version.mak [1.36.2.9]: +2002/12/02 01:55:46 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (all-arch.mak [1.9.2.4.2.1], bcwin32.mak [1.12.2.7.2.1], +cfonts.mak [1.2.6.1.2.1], contrib.mak [1.24.2.1.2.1], +devs.mak [1.47.2.7.2.1], dvx-gcc.mak [1.12.2.7.2.1], +dvx-head.mak [1.2.6.1.2.1], dvx-tail.mak [1.5.2.2.2.1], +dwmain.rc [1.2.6.2.2.1], dwsetup.rc [1.5.2.4.2.1], +dwuninst.rc [1.3.6.2.2.1], gs.mak [1.5.2.7.2.1], gs16spl.rc [1.2.6.2.2.1], +gsdll2.rc [1.2.6.1.2.1], gsdll32.rc [1.2.6.2.2.1]: 2003/01/17 00:49:00 +giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (gsos2.rc [1.2.6.1.2.1], gspmdrv.rc [1.2.6.1.2.1], +gswin.rc [1.2.6.2.2.1], icclib.mak [1.3.2.2.2.1], ijs.mak [1.2.2.2.2.1], +int.mak [1.50.2.6.2.1], jpeg.mak [1.4.2.1.2.1], lib.mak [1.53.2.5.2.1], +libpng.mak [1.10.2.3.2.1], macos-fw.mak [1.1.2.3.2.1], +macos-mcp.mak [1.3.2.8.2.1], macosx.mak [1.3.2.10.2.1], +msvc32.mak [1.20.2.9.2.1], msvccmd.mak [1.6.2.1.2.1], +msvclib.mak [1.16.2.5.2.1], msvctail.mak [1.6.2.2.2.1], +openvms.mak [1.16.2.7.2.1], openvms.mmk [1.12.2.3.2.1], +os2.mak [1.19.2.7.2.1], pcwin.mak [1.2.6.2.2.1], ugcclib.mak [1.13.2.9.2.1], +unix-aux.mak [1.5.2.3.2.1], unix-dll.mak [1.6.2.2.2.1], +unix-end.mak [1.2.6.1.2.1], unix-gcc.mak [1.23.2.12.2.1], +unixansi.mak [1.16.2.11.2.1], unixhead.mak [1.2.6.1.2.1], +unixinst.mak [1.20.2.9.2.1], unixlink.mak [1.3.4.2.2.1], +version.mak [1.36.2.9.2.1], watclib.mak [1.13.2.5.2.1], +watcw32.mak [1.13.2.5.2.1], wccommon.mak [1.3.6.2.2.1], +wctail.mak [1.3.2.2.2.1], winint.mak [1.8.2.5.2.1], +winlib.mak [1.12.2.4.2.1], winplat.mak [1.2.6.1.2.1], +wmin.mak [1.2.6.1.2.1]: 2003/01/17 00:49:03 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (zlib.mak [1.3.2.2.2.1]: 2003/01/17 00:49:06 giles) + +Makefile banner lines should be comments. (gs.mak [1.5.2.7.2.2]: 2003/01/28 +12:02:09 ghostgum) + +Update release date for final 7.06 release. (version.mak [1.36.2.9.2.2]: +2003/02/09 16:20:05 giles) + +Add pngalpha device that uses RGBA, with the alpha channel providing pixel +coverage. Used for generating PNG images with a transparent background. +(bcwin32.mak [1.12.2.7.2.2], devs.mak [1.47.2.7.2.2], +macosx.mak [1.3.2.10.2.2], msvc32.mak [1.20.2.9.2.2], +openvms.mak [1.16.2.7.2.2], os2.mak [1.19.2.7.2.2], +unix-gcc.mak [1.23.2.12.2.2], unixansi.mak [1.16.2.11.2.2], +watcw32.mak [1.13.2.5.2.2]: 2003/03/11 11:59:10 ghostgum) + +Backport MacOS build updates for Metrowerks CW8 from HEAD. +(gp_mac.c [1.1.4.3], gp_macio.c [1.2.4.4], macgenmcpxml.sh [1.1.4.4]: +2002/12/01 23:29:37 giles) +Update changelog and release date. (version.mak [1.36.2.9.2.3]: 2003/03/31 +13:56:42 giles) + +Correct the copyright date and avoid putting NT security attributes into the +Windows distribution archive. (winint.mak [1.8.2.5.2.2]: 2003/04/01 09:30:59 +ghostgum) + +</pre><h2><a name="7.06-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - Reinstate ps2epsi.bat and ps2epsi.cmd. Correctly embed the +original EPS file in the output of ps2epsi on Windows and OS/2. +(lib/ps2epsi.bat [1.6.2.2], lib/ps2epsi.cmd [1.3.2.2]: 2002/04/26 00:24:45 +ghostgum) + - Temporary files weren't being put in the proper location under +MacOS X/Carbon. Updates the the proper prameter block type for the Carbon +interface so this works properly on both OS 9/X. Patch from Erik Strik. +(gp_macio.c [1.2.4.3]: 2002/06/13 15:40:59 giles) + - Provide an implementation of popen for Windows, to avoid the +broken implementation in MSVC++ 5 and 6. This allows pswrite to output to a +pipe on Windows. Fixes SourceForge bug #482038, pswrite does not write to +pipe. (gp_mswin.c [1.7.2.2]: 2002/09/05 10:19:00 ghostgum) + +Remove the DOS and OS/2 versions of the ps2epsi code. They have been broken +for some time. (lib/ps2epsi.bat [1.6.2.1], lib/ps2epsi.cmd [1.3.2.1]: +2002/04/22 20:38:01 giles) + +Changes to the gtk+ client to request a suitable window size based on the +screen and image sizes, to reduce unnecessary redraws and erase the window +area outside the image. (dxmain.c [1.7.2.2]: 2002/04/26 05:03:20 ghostgum) + +Update project file generation script to support Metrowerks CodeWarrior 7. +(macgenmcpxml.sh [1.1.4.3]: 2002/09/04 09:02:38 giles) + +Backport MacOS build updates for Metrowerks CW8 from HEAD. +(gp_mac.c [1.1.4.3], gp_macio.c [1.2.4.4], macgenmcpxml.sh [1.1.4.4]: +2002/12/01 23:29:37 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (bench.c [1.4.4.1.2.1], dxmain.c [1.7.2.2.2.1], +dxmainc.c [1.4.2.2.2.1], echogs.c [1.3.2.1.2.1], genarch.c [1.2.6.1.2.1], +genconf.c [1.4.4.1.2.1], gendev.c [1.2.6.1.2.1], genht.c [1.2.6.1.2.1], +geninit.c [1.3.6.1.2.1], gp_dvx.c [1.4.2.1.2.1], gp_iwatc.c [1.6.2.2.2.1], +gp_mac.c [1.1.4.3.2.1], gp_macio.c [1.2.4.5.2.1], gp_mktmp.c [1.2.6.1.2.1], +gp_msdll.c [1.1.2.1.2.1], gp_mshdl.c [1.2.6.1.2.1], gp_msio.c [1.3.4.1.2.1], +gp_mslib.c [1.3.2.1.2.1], gp_mspol.c [1.1.2.1.2.1], +gp_msprn.c [1.1.2.1.2.1], gp_mswin.c [1.7.2.3.2.1], gp_ntfs.c [1.5.2.4.2.1], +gp_os2.c [1.10.2.3.2.1], gp_os9.c [1.4.2.1.2.1], gp_stdia.c [1.3.2.1.2.1], +gp_stdin.c [1.2.2.1.2.1], gp_sysv.c [1.2.6.1.2.1], gp_unix.c [1.5.2.1.2.1], +gp_vms.c [1.7.2.3.2.1], gp_wgetv.c [1.4.2.2.2.1], gp_win32.c [1.2.6.1.2.1], +gp_wsync.c [1.2.6.1.2.1], gs16spl.c [1.2.6.1.2.1], gsdll.c [1.6.2.1.2.1], +gserver.c [1.2.6.1.2.1]: 2003/01/17 00:49:00 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (gspmdrv.c [1.2.6.1.2.1], scfdgen.c [1.2.6.1.2.1], +zdosio.c [1.2.6.1.2.1]: 2003/01/17 00:49:03 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (ziodevs.c [1.5.2.1.2.1], ziodevsc.c [1.3.2.1.2.1]: 2003/01/17 +00:49:06 giles) + +Correct an incorrectly applied patch to the macos implementation of +gp_pathstring_not_bare(). (gp_macio.c [1.2.4.5.2.2]: 2003/04/01 12:21:50 +giles) + +</pre><h2><a name="7.06-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - Correct the display device color mapping functions that were +wrong. Change 4-bit mapping functions to standard VGA. Correct 16-bit native +RGB and 32-bit xRGB mapping functions. Add RGB to color mapping functions +for CMYK formats, needed by anti-aliasing. (gdevdsp.c [1.5.2.5]: 2002/06/22 +03:10:10 ghostgum) + - When compiled for A4 default page size, the initial page size is +now 595x842pts. The initial printer page size in tenths of an inch now uses +floating point. This may cause problems with old compilers that do not allow +floating point calculations in initializers for integers. Add some casts to +suppress warnings with the MS compiler. Fixes SourceForge bug #535997, +"ps2pdf produces incorrect A4 page size". (gdevbmpc.c [1.2.6.2]: 2002/07/18 +11:11:40 ghostgum) + +To improve clarity, use hexadecimal for -dDisplayFormat=16#XXXXXX in the +display device example code. (gdevdsp.c [1.5.2.4]: 2002/06/19 11:36:36 +ghostgum) + +Add a 32 bit/pixel CMYK driver named pam using the Portable Arbitrary Map +file format, one of the netpbm family. This driver has problems with +anti-aliasing that will be fixed in a later patch. (gdevpbm.c [1.3.6.2]: +2002/06/22 03:44:00 ghostgum) + +Remove some interpreter references from the graphics library. Partial fix +for SourceForge bug #542848, "library #includes interpreter headers". +(gdevmswn.c [1.4.2.2]: 2002/09/14 12:25:55 ghostgum) + +Backport MacOS build updates for Metrowerks CW8 from HEAD. +(gdevmac.h [1.1.4.3]: 2002/12/01 23:29:37 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (gdev3852.c [1.3.2.1.2.1], gdev3b1.c [1.2.6.1.2.1], +gdev4081.c [1.3.2.1.2.1], gdev8510.c [1.3.2.1.2.1], +gdev8bcm.c [1.2.6.1.2.1], gdev8bcm.h [1.2.6.1.2.1], +gdevadmp.c [1.3.2.1.2.1], gdevatx.c [1.6.8.1], gdevbit.c [1.2.6.1.2.1], +gdevbj10.c [1.4.2.1.2.1], gdevbjc.h [1.2.6.1.2.1], gdevbjcl.c [1.2.6.1.2.1], +gdevbjcl.h [1.2.6.1.2.1], gdevbmp.c [1.4.2.1.2.1], gdevbmp.h [1.2.6.1.2.1], +gdevbmpa.c [1.3.6.1.2.1], gdevbmpc.c [1.2.6.2.2.1], gdevccr.c [1.2.6.1.2.1], +gdevcdj.c [1.5.2.1.2.1], gdevcfax.c [1.3.6.1.2.1], gdevcgm.c [1.2.6.2.2.1], +gdevcgml.c [1.2.6.1.2.1], gdevcgml.h [1.2.6.1.2.1], +gdevcgmx.h [1.2.6.1.2.1], gdevcif.c [1.3.2.1.2.1], gdevclj.c [1.2.6.1.2.1], +gdevcljc.c [1.4.2.1.2.1], gdevcp50.c [1.3.2.1.2.1], +gdevcslw.c [1.2.6.1.2.1], gdevdcrd.c [1.2.6.1.2.1], +gdevdcrd.h [1.2.6.1.2.1], gdevdfax.c [1.4.2.1.2.1], gdevdjet.c [1.6.8.1], +gdevdjtc.c [1.3.2.1.2.1], gdevdljm.c [1.4.8.1], gdevdljm.h [1.4.8.1], +gdevdm24.c [1.3.2.1.2.1], gdevdsp.c [1.5.2.5.2.1], +gdevegaa.asm [1.2.6.1.2.1], gdevepsc.c [1.3.2.1.2.1], +gdevepsn.c [1.3.2.1.2.1], gdevescp.c [1.3.2.1.2.1], +gdevevga.c [1.2.6.1.2.1], gdevfax.c [1.2.6.1.2.1], gdevfax.h [1.2.6.1.2.1], +gdevherc.c [1.2.6.1.2.1], gdevhl7x.c [1.5.2.1.2.1], gdevijs.c [1.1.2.3.2.1], +gdevimgn.c [1.4.2.1.2.1], gdevjpeg.c [1.3.2.1.2.1], +gdevl256.c [1.3.6.1.2.1], gdevl31s.c [1.2.6.1.2.1], +gdevlbp8.c [1.3.2.1.2.1], gdevlj56.c [1.3.2.1.2.1], +gdevlp8k.c [1.2.6.1.2.1], gdevlxm.c [1.2.6.1.2.1], gdevmac.c [1.1.4.3.2.1], +gdevmac.h [1.1.4.3.2.1], gdevmacpictop.h [1.1.4.2.2.1], +gdevmacttf.h [1.1.4.2.2.1], gdevmacxf.c [1.1.4.2.2.1], +gdevmeds.c [1.2.6.1.2.1], gdevmeds.h [1.2.6.1.2.1], gdevmgr.c [1.2.6.1.2.1], +gdevmgr.h [1.2.6.1.2.1], gdevmiff.c [1.3.2.1.2.1], gdevmswn.c [1.4.2.2.2.1], +gdevmswn.h [1.2.6.1.2.1], gdevmsxf.c [1.2.6.1.2.1], +gdevn533.c [1.3.2.1.2.1], gdevo182.c [1.3.2.1.2.1], +gdevokii.c [1.3.2.1.2.1], gdevos2p.c [1.4.2.1.2.1], gdevp14.h [1.1.2.1.2.1], +gdevp2up.c [1.2.6.1.2.1], gdevpbm.c [1.3.6.2.2.1], gdevpccm.c [1.2.6.1.2.1], +gdevpccm.h [1.3.6.1.2.1], gdevpcfb.c [1.2.6.1.2.1], +gdevpcfb.h [1.2.6.1.2.1], gdevpcl.c [1.5.2.1.2.1], gdevpcl.h [1.5.2.1.2.1], +gdevpcx.c [1.2.6.1.2.1], gdevpe.c [1.2.6.1.2.1], gdevphex.c [1.2.6.2.2.1], +gdevpjet.c [1.3.2.1.2.1], gdevpm.c [1.4.2.1.2.1], gdevpm.h [1.2.6.1.2.1], +gdevpng.c [1.4.2.1.2.1], gdevpnga.c [1.4.2.1.2.1], gdevps.c [1.19.2.2.2.1], +gdevpsdf.h [1.9.4.1.2.1], gdevpsdi.c [1.15.2.1.2.1], +gdevpsdp.c [1.8.6.1.2.1], gdevpsds.c [1.4.6.1.2.1], +gdevpsds.h [1.4.6.1.2.1], gdevpsdu.c [1.10.2.1.2.1], +gdevpsim.c [1.6.2.1.2.1], gdevpsu.c [1.7.2.2.2.1], gdevpsu.h [1.4.2.1.2.1], +gdevpx.c [1.6.2.1.2.1], gdevpxat.h [1.3.6.1.2.1], gdevpxen.h [1.3.6.1.2.1], +gdevpxop.h [1.2.6.1.2.1], gdevpxut.c [1.2.6.1.2.1], +gdevpxut.h [1.2.6.1.2.1], gdevs3ga.c [1.2.6.1.2.1], gdevsco.c [1.3.6.1.2.1], +gdevsj48.c [1.2.6.1.2.1], gdevsnfb.c [1.3.2.1.2.1], +gdevsppr.c [1.5.2.1.2.1], gdevstc.c [1.2.6.1.2.1], gdevstc.h [1.2.6.1.2.1], +gdevstc1.c [1.2.6.1.2.1], gdevstc2.c [1.2.6.1.2.1], +gdevstc3.c [1.2.6.1.2.1], gdevstc4.c [1.2.6.1.2.1], gdevsun.c [1.2.6.1.2.1], +gdevsunr.c [1.4.2.1.2.1], gdevsvga.c [1.2.6.1.2.1], +gdevsvga.h [1.2.6.1.2.1], gdevtfax.c [1.4.6.1.2.1], +gdevtfax.h [1.4.6.1.2.1], gdevtfnx.c [1.5.2.1.2.1], +gdevtifs.c [1.4.2.1.2.1], gdevtifs.h [1.3.6.1.2.1], +gdevtknk.c [1.3.2.1.2.1], gdevupd.c [1.5.2.1.2.1], gdevvglb.c [1.3.6.1.2.1], +gdevwddb.c [1.3.2.1.2.1], gdevwdib.c [1.3.2.1.2.1], +gdevwpr2.c [1.9.2.1.2.1], gdevwprn.c [1.3.2.1.2.1], gdevx.c [1.8.2.3.2.1], +gdevx.h [1.4.6.1.2.1], gdevxalt.c [1.2.6.2.2.1], gdevxcmp.c [1.2.6.2.2.1], +gdevxcmp.h [1.2.6.1.2.1], gdevxini.c [1.10.4.1.2.1], +gdevxres.c [1.3.6.1.2.1], gdevxxf.c [1.5.6.1.2.1]: 2003/01/17 00:49:00 +giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (gdevpdf.c [1.38.2.3.2.1], gdevpdfb.c [1.6.2.1.2.1], +gdevpdfc.c [1.17.2.1.2.1], gdevpdfd.c [1.16.2.1.2.1], +gdevpdfg.c [1.14.2.1.2.1], gdevpdfg.h [1.9.6.1.2.1], +gdevpdfi.c [1.24.2.1.2.1], gdevpdfj.c [1.7.2.1.2.1], +gdevpdfm.c [1.14.2.1.2.1], gdevpdfo.c [1.9.2.1.2.1], +gdevpdfo.h [1.6.4.1.2.1], gdevpdfp.c [1.19.2.1.2.1], +gdevpdfr.c [1.4.6.1.2.1], gdevpdfu.c [1.16.2.1.2.1], +gdevpdfv.c [1.10.2.1.2.1], gdevpdfx.h [1.34.2.1.2.1]: 2003/01/17 00:49:01 +giles) + +</pre><h2><a name="7.06-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - (pdfwrite) Completely replacing the Rotation computation logics. +Source Forge bug "[ 475147 ] GS 7.03 produces everthing upsidedown" +(gdevpdf.c [1.38.2.2]: 2002/06/28 10:44:18 igor) + +</pre><h2><a name="7.06-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - Add the option -dUseCropBox to set the page size from the CropBox +rather than the MediaBox. This is appropriate when using ghostscript to view +PDF files or convert to bitmaps. It probably isn't appropriate for printing. +Fixes SourceForge bugs #522486, "Wromg size EPS generated from PDF" and +#538267 "Problems with Media Box in PDF and PS interpreter". +(lib/pdf_main.ps [1.35.2.3]: 2002/06/28 10:59:02 ghostgum) + - When drawing PDF annotation links which are missing a /Border, +assume the default /Border [0 0 1]. Previously ghostscript assumed that +links without a /Border should not be drawn, which is contrary to the PDF +specification. (lib/pdf_draw.ps [1.36.2.2]: 2002/06/28 23:12:21 ghostgum) + - If a PDF annotation specified other than the default color with +/C, pass this into the pdfmark logic as /Color. (lib/pdf_main.ps [1.35.2.4]: +2002/06/28 23:13:06 ghostgum) + - When using -dUseCropBox, use an inherited CropBox. The previous +fix would only use a CropBox on the page being displayed. +(lib/pdf_main.ps [1.35.2.5]: 2002/07/18 10:45:42 ghostgum) + - When ghostscript is given a PDF file on standard input, copy it to +a temporary file before processing. Prior to version 7, ghostscript could +read PDF from standard input redirected from a file, but not from a pipe. +Standard input was changed in version 7 to use callouts, which prevented PDF +reading from standard input. Fixes SourceForge bug #583413, /ioerror with gs +- < file.pdf vers 7.xx (lib/pdf_main.ps [1.35.2.6]: 2002/09/14 12:05:58 +ghostgum) + +Move code from pdfshowpage to pdfshowpage_finish for the benefit of GSview +which calls pdfshowpage_init and pdfshowpage_finish, but not +pdfshowpage_setpage. (lib/pdf_main.ps [1.35.2.7]: 2002/11/05 20:58:19 +ghostgum) + +Makes the PDF interpreter run files under a level of 'save'. This improves +memory utilization significantly, although we don't understand why. Patch +originally applied as revision 1.45 by lpd. (lib/pdf_main.ps [1.35.2.7.2.1]: +2003/01/28 11:08:36 ghostgum) + +Treat files starting with %Pxxx as PostScript, not PDF. Process empty files +without error. Fixes SourceForge bug #663150, Some PS files half-recognized +as PDF files DETAILS: Changes for the 8.00 release to allow reading of PDF +files from stdin caused files starting with %Pxxx to be half recognised as +PDF files. This patch simplifies the PDF recognition code and makes it treat +only files starting with "%PDF-" as PDF. Testing of this code found that +zero length input files caused a PostScript error. This was an existing +error which is fixed by the gs_epsf.ps patch and last line of the +pdf_main.ps patch. (lib/pdf_main.ps [1.35.2.7.2.2]: 2003/01/28 11:54:11 +ghostgum) + +</pre><h2><a name="7.06-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - .pushpdf14devicefilter was defined in zdfilter.c, but depended on +the optional pdf module's transparency features. Moves the definition of +this routine to the conditionally included ztrans.c. Fix by L. Peter +Deutsch, resolves SourceForge Bug 565019. (zdfilter.c [1.2.2.2], +ztrans.c [1.13.2.2]: 2002/06/14 09:53:12 giles) + - As a result of a recent fix, an opdef table had more than 16 +entries, causing initialization to abort. backporting a fix by L. Peter +Deutsch from HEAD. (ztrans.c [1.13.2.3]: 2002/06/14 15:26:00 giles) + - Correct the display device color mapping functions that were +wrong. Change 4-bit mapping functions to standard VGA. Correct 16-bit native +RGB and 32-bit xRGB mapping functions. Add RGB to color mapping functions +for CMYK formats, needed by anti-aliasing. (dpmain.c [1.5.2.2], +dwimg.c [1.3.2.2]: 2002/06/22 03:10:10 ghostgum) + - correct the ISO paper sizes in gs_statd.ps to match those in the +Adobe PPD specification, technical note 5003. Fixes SourceForge bug #536877, +"Paper sizes wrong in gs_statd.ps". (lib/gs_statd.ps [1.5.2.2]: 2002/07/18 +10:43:42 ghostgum) + - process comment lines when they straddle a buffer boundary, so +that all DSC comments can be processed by the PDF writer. Fixes SourceForge +bug #432040, DSC ignored when reading stdin. (iscan.c [1.5.6.2]: 2002/09/05 +08:30:38 ghostgum) + - copy comment lines inside a procedure which require a scanner +refill to the operand stack, not the execution stack. Fixes SourceForge bug +#605240, 070-01.ps fails in .parse_dsc_comments. (iscan.c [1.5.6.3]: +2002/09/06 20:54:10 ghostgum) + - provide a meaningful error message when an immediately evaluated +name can not be found. Fixes SourceForge bug #543185, Confusing diagnostics +for //undefined. (interp.c [1.8.2.2], ziodev.c [1.6.2.2]: 2002/09/14 +11:59:15 ghostgum) + - Keep pagedevice and device views of .LockSafetyParams correct even +after a 'restore' is used to unlock. The dictionary fed to the setpagedevice +operator is allocated in the same VM space as currentpagedevice to avoid +invalidaccess problems. Fixed SF #580029 and does not revert to the +incorrect behaviour of bug #516379. (lib/gs_init.ps [1.40.2.11]: 2002/09/19 +17:05:05 ray) + - Fix : Overlapping format 4 CMap ranges, while arguably buggy, are +commonly found in quite a few popular CJK TrueType fonts. Patch from Anthony +Fok Tung-Ling. (lib/gs_ttf.ps [1.9.2.3]: 2002/09/20 15:35:22 igor) + - The constraint for FontBBox to be non-zero was not conforming and +now is removed. (bfont.h [1.3.6.2], zbfont.c [1.7.4.2], zfcid0.c [1.7.2.3], +zfcid1.c [1.4.4.2]: 2002/09/21 08:36:49 igor) + - Fix : Unwinding the patch from Anthony Fok Tung-Ling, because it +caused regression with comparefiles/fonts.pdf . (lib/gs_ttf.ps [1.9.2.4]: +2002/09/22 12:43:55 igor) + - Provide a meaningful error message when an immediately evaluated +name in a procedure can not be found. Additional fix for SourceForge bug +#543185, Confusing diagnostics for //undefined. (iscan.c [1.5.6.4], +ziodev.c [1.6.2.3]: 2002/11/01 23:50:42 ghostgum) + - Redefine .runstdin with one bound to EPSF 'run' operator so that +EPS files are handled correctly from %stdin. Code for skipping DOS EPS +header now uses the EPS encapsulating run, instead of directly calling +.runexec. (lib/gs_epsf.ps [1.2.6.5]: 2002/11/01 23:53:32 ghostgum) + - When processing an EPS file, remove any left over items on the +operand and dictionary stacks. (lib/gs_epsf.ps [1.2.6.7]: 2002/11/12 +20:32:59 ghostgum) + - Fix the remaining security patch problems so that local/global +state is correctly handled, both for the pagedevice as well as the +PermitFile... userparam dictionary entries. Fixes bug #647685. Patch from +Ray Johnston. (lib/gs_epsf.ps [1.2.6.11.2.2], +lib/gs_init.ps [1.40.2.12.2.1], lib/gs_lev2.ps [1.7.2.4.2.2], +lib/gs_setpd.ps [1.8.2.2.2.1]: 2003/03/31 13:02:22 giles) + +Delete all temporary files when the interpreter closes. (imain.c [1.19.2.2]: +2002/09/05 10:26:09 ghostgum) + +Add command line options -dEPS, -dEPSCrop and -dEPSFitPage for handling +Encapsulated PostScript files. (lib/gs_epsf.ps [1.2.6.2], +lib/gs_init.ps [1.40.2.10]: 2002/09/14 12:17:26 ghostgum) + +Remove a debug message from previous EPS commit. (lib/gs_epsf.ps [1.2.6.3]: +2002/09/14 12:45:02 ghostgum) + +Update version number and date for release. (lib/gs_init.ps [1.40.2.12]: +2002/10/10 13:36:56 giles) + +Improvements to processing of EPS files. (lib/gs_epsf.ps [1.2.6.4]: +2002/10/31 11:12:13 ghostgum) + +Correct -dEPSFitPage when the device has non-zero margins. +(lib/gs_epsf.ps [1.2.6.6]: 2002/11/07 07:16:34 ghostgum) + +Correct the display device color mapping intended for the Macintosh. +(gdevdsp.h [1.1.2.3]: 2002/11/13 07:19:56 ghostgum) + +Make sure resource use of .forcedef works with -dDELAYBIND. Patch by Alex +Cherepanov. (lib/gs_res.ps [1.16.2.2]: 2002/11/18 20:31:52 ghostgum) + +Prevent access to .forceput. (lib/gs_epsf.ps [1.2.6.8]: 2002/11/20 06:44:59 +ghostgum) + +When processing multiple EPS files, call showpage if necessary for +subsequent files. (lib/gs_epsf.ps [1.2.6.9]: 2002/11/20 06:46:35 ghostgum) + +When processing EPS files, empty the path after checking the page size. +(lib/gs_epsf.ps [1.2.6.10]: 2002/11/21 09:59:46 ghostgum) + +Backport debug and unitialized variable fixes from HEAD. After a patch from +Alexei A. Podtelezhnikov. (icontext.c [1.6.6.3], interp.c [1.8.2.3], +iscan.c [1.5.6.5], ziodev.c [1.6.2.4]: 2002/12/01 15:10:20 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (bfont.h [1.3.6.2.2.1], btoken.h [1.4.6.1.2.1], +ccfont.h [1.2.6.1.2.1], dpmain.c [1.5.2.2.2.1], dscparse.c [1.7.2.1.2.1], +dscparse.h [1.6.2.2.2.1], dstack.h [1.3.4.1.2.1], dwdll.c [1.2.2.1.2.1], +dwdll.h [1.3.2.1.2.1], dwimg.c [1.3.2.2.2.1], dwimg.h [1.4.2.2.2.1], +dwinst.cpp [1.2.6.2.2.1], dwinst.h [1.2.6.3.2.1], dwmain.c [1.6.2.2.2.1], +dwmain.h [1.3.2.2.2.1], dwmainc.c [1.8.2.2.2.1], dwnodll.c [1.1.2.2.2.1], +dwreg.c [1.1.2.2.2.1], dwreg.h [1.1.2.2.2.1], dwsetup.cpp [1.5.6.2.2.1], +dwsetup.h [1.2.6.2.2.1], dwtext.c [1.5.2.1.2.1], dwtext.h [1.4.2.2.2.1], +dwuninst.cpp [1.2.6.2.2.1], dwuninst.h [1.2.6.2.2.1], +errors.h [1.4.2.1.2.1], estack.h [1.2.6.1.2.1], files.h [1.4.2.1.2.1], +gdevdsp.h [1.1.2.3.2.1], gdevdsp2.h [1.2.2.2.2.1], ghost.h [1.2.6.1.2.1], +gs.c [1.6.2.1.2.1]: 2003/01/17 00:49:00 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (ialloc.c [1.2.6.1.2.1], ialloc.h [1.2.6.1.2.1], +iapi.c [1.1.2.2.2.1], iapi.h [1.2.2.1.2.1], iastate.h [1.2.6.1.2.1], +iastruct.h [1.2.6.1.2.1], ibnum.c [1.2.6.1.2.1], ibnum.h [1.2.6.1.2.1], +iccfont.c [1.2.6.2.2.1], iccinit0.c [1.2.6.1.2.1], icfontab.c [1.2.6.1.2.1], +ichar.h [1.3.6.1.2.1], ichar1.h [1.3.6.1.2.1], icharout.h [1.3.4.1.2.1], +icid.h [1.2.6.1.2.1], icie.h [1.3.2.1.2.1], icolor.h [1.2.6.1.2.1], +iconf.c [1.3.2.1.2.1], iconf.h [1.1.6.1.2.1], icontext.c [1.6.6.3.2.1], +icontext.h [1.2.6.1.2.1], icremap.h [1.2.6.1.2.1], icsmap.h [1.2.6.1.2.1], +icstate.h [1.4.6.2.2.1], iddict.h [1.2.6.1.2.1], iddstack.h [1.2.6.1.2.1], +idebug.c [1.4.2.1.2.1], idebug.h [1.2.6.1.2.1], idict.c [1.4.4.1.2.1], +idict.h [1.2.6.1.2.1], idictdef.h [1.2.6.1.2.1], idisp.c [1.2.2.2.2.1], +idisp.h [1.1.2.1.2.1], idosave.h [1.2.6.1.2.1], idparam.c [1.3.6.1.2.1], +idparam.h [1.3.6.1.2.1], idsdata.h [1.2.6.1.2.1], idstack.c [1.2.6.1.2.1], +idstack.h [1.2.6.1.2.1], iesdata.h [1.2.6.1.2.1], iestack.h [1.2.6.1.2.1], +ifcid.h [1.2.6.1.2.1], ifilter.h [1.3.6.1.2.1], ifilter2.h [1.2.6.1.2.1], +ifont.h [1.6.4.1.2.1], ifont1.h [1.3.6.1.2.1], ifont2.h [1.2.6.1.2.1], +ifont42.h [1.3.6.1.2.1], ifrpred.h [1.2.6.1.2.1], ifunc.h [1.3.6.3.2.1], +ifwpred.h [1.2.6.1.2.1], igc.c [1.5.2.1.2.1], igc.h [1.2.6.1.2.1], +igcref.c [1.3.2.1.2.1], igcstr.c [1.3.6.1.2.1], igcstr.h [1.2.6.1.2.1], +igstate.h [1.3.6.1.2.1], iht.h [1.2.6.1.2.1], iimage.h [1.2.6.1.2.1], +iimage2.h [1.2.6.1.2.1], iinit.c [1.3.4.1.2.1], iinit.h [1.2.6.1.2.1], +ilevel.h [1.2.6.1.2.1], ilocate.c [1.4.2.1.2.1], imain.c [1.19.2.2.2.1], +imain.h [1.3.2.1.2.1], imainarg.c [1.13.2.3.2.1], imainarg.h [1.3.2.1.2.1], +imemory.h [1.2.6.1.2.1], iminst.h [1.5.2.1.2.1], iname.c [1.3.6.1.2.1], +iname.h [1.2.6.1.2.1], inamedef.h [1.2.6.1.2.1], inameidx.h [1.2.6.1.2.1], +inames.h [1.2.6.1.2.1], inamestr.h [1.2.6.1.2.1], inobtokn.c [1.2.6.1.2.1], +inouparm.c [1.2.6.1.2.1], interp.c [1.8.2.3.2.1], interp.h [1.2.6.1.2.1], +iosdata.h [1.2.6.1.2.1], iostack.h [1.2.6.1.2.1], ipacked.h [1.2.6.1.2.1], +iparam.c [1.5.6.1.2.1], iparam.h [1.2.6.1.2.1], iparray.h [1.2.6.1.2.1], +ipcolor.h [1.2.6.1.2.1], ireclaim.c [1.3.2.1.2.1], iref.h [1.5.4.1.2.1], +isave.c [1.3.6.1.2.1], isave.h [1.2.6.1.2.1], iscan.c [1.5.6.5.2.1], +iscan.h [1.4.6.1.2.1], iscanbin.c [1.5.6.1.2.1], iscanbin.h [1.2.6.1.2.1], +iscannum.c [1.3.2.1.2.1], iscannum.h [1.2.6.1.2.1], isdata.h [1.2.6.1.2.1], +isstate.h [1.2.6.1.2.1], istack.c [1.2.6.1.2.1], istack.h [1.2.6.1.2.1], +isstate.h [1.2.6.1.2.1], istack.c [1.2.6.1.2.1], istack.h [1.2.6.1.2.1], +istkparm.h [1.2.6.1.2.1], istream.h [1.2.6.1.2.1], istruct.h [1.2.6.1.2.1], +itoken.h [1.2.6.1.2.1], iutil.c [1.3.2.1.2.1], iutil.h [1.2.6.1.2.1], +iutil2.c [1.2.6.2.2.1], iutil2.h [1.2.6.2.2.1], ivmem2.h [1.2.6.1.2.1], +ivmspace.h [1.2.6.1.2.1], main.h [1.3.2.1.2.1], oparc.h [1.2.6.1.2.1], +opcheck.h [1.2.6.1.2.1], opdef.h [1.3.2.1.2.1], oper.h [1.2.6.1.2.1], +opextern.h [1.2.6.1.2.1], ostack.h [1.2.6.1.2.1], sbhc.c [1.3.4.1.2.1], +sbhc.h [1.2.6.1.2.1], sbwbs.c [1.2.6.1.2.1], sbwbs.h [1.2.6.1.2.1], +sfilter1.c [1.6.4.1.2.1], shcgen.c [1.2.6.1.2.1], shcgen.h [1.2.6.1.2.1], +smtf.c [1.2.6.1.2.1], smtf.h [1.2.6.1.2.1], store.h [1.2.6.1.2.1], +zarith.c [1.4.6.1.2.1], zarray.c [1.2.6.1.2.1], zbfont.c [1.7.4.2.2.1], +zbseq.c [1.4.6.1.2.1], zcfont.c [1.2.6.2.2.1], zchar.c [1.4.2.2.2.1], +zchar1.c [1.7.2.2.2.1], zchar2.c [1.2.6.1.2.1], zchar32.c [1.2.6.1.2.1], +zchar42.c [1.3.4.2.2.1], zcharout.c [1.4.4.2.2.1], zcharx.c [1.3.6.1.2.1], +zcid.c [1.3.6.1.2.1], zcie.c [1.5.2.1.2.1], zcolor.c [1.4.6.1.2.1], +zcolor1.c [1.3.6.1.2.1], zcolor2.c [1.4.2.1.2.1], zcontext.c [1.7.2.1.2.1], +zcontrol.c [1.3.6.2.2.1], zcrd.c [1.2.6.1.2.1], zcsdevn.c [1.5.2.2.2.1], +zcsindex.c [1.3.6.1.2.1], zcspixel.c [1.2.6.1.2.1], zcssepr.c [1.8.2.1.2.1], +zdevcal.c [1.3.6.1.2.1], zdevice.c [1.3.6.2.2.1], zdevice2.c [1.4.2.2.2.1], +zdfilter.c [1.2.2.2.2.1], zdict.c [1.3.6.1.2.1], zdouble.c [1.2.6.1.2.1], +zdpnext.c [1.3.6.1.2.1], zdps.c [1.4.6.1.2.1], zdps1.c [1.3.4.1.2.1], +zdscpars.c [1.12.2.1.2.1], zfarc4.c [1.2.2.1.2.1], zfbcp.c [1.3.6.1.2.1], +zfcid.c [1.11.4.1.2.1], zfcid0.c [1.7.2.3.2.1], zfcid1.c [1.4.4.2.2.1], +zfcmap.c [1.9.2.1.2.1], zfdctd.c [1.6.2.1.2.1], zfdcte.c [1.5.2.1.2.1], +zfdecode.c [1.3.6.1.2.1], zfile.c [1.11.2.4.2.1], zfileio.c [1.12.2.1.2.1], +zfilter.c [1.5.2.1.2.1], zfilter2.c [1.3.6.1.2.1], zfilterx.c [1.2.6.1.2.1], +zfmd5.c [1.2.6.1.2.1], zfont.c [1.3.4.1.2.1], zfont0.c [1.3.6.1.2.1], +zfont1.c [1.9.4.1.2.1], zfont2.c [1.4.2.1.2.1], zfont32.c [1.2.6.1.2.1], +zfont42.c [1.5.6.1.2.1], zfproc.c [1.9.2.1.2.1], zfrsd.c [1.4.6.1.2.1], +zfunc.c [1.6.6.3.2.1], zfunc0.c [1.3.6.2.2.1], zfunc3.c [1.2.6.2.2.1], +zfunc4.c [1.7.4.2.2.1], zfzlib.c [1.3.6.1.2.1], zgeneric.c [1.3.6.1.2.1], +zgstate.c [1.2.6.1.2.1], zhsb.c [1.2.6.1.2.1], zht.c [1.2.6.1.2.1], +zht1.c [1.2.6.1.2.1], zht2.c [1.2.6.1.2.1], zicc.c [1.2.2.2.2.1], +zimage.c [1.5.6.1.2.1], zimage2.c [1.4.2.1.2.1], zimage3.c [1.3.6.1.2.1], +ziodev.c [1.6.2.4.2.1], ziodev2.c [1.3.6.1.2.1], zmath.c [1.3.6.1.2.1], +zmatrix.c [1.4.6.1.2.1], zmedia2.c [1.3.2.1.2.1], zmisc.c [1.2.6.1.2.1], +zmisc1.c [1.3.6.1.2.1], zmisc2.c [1.3.6.1.2.1], zmisc3.c [1.2.6.1.2.1], +zpacked.c [1.2.6.1.2.1], zpaint.c [1.2.6.1.2.1], zpath.c [1.2.6.1.2.1], +zpath1.c [1.2.6.1.2.1], zpcolor.c [1.3.6.1.2.1], zrelbit.c [1.2.6.1.2.1], +zrop.c [1.2.6.1.2.1], zshade.c [1.4.6.2.2.1], zstack.c [1.2.6.1.2.1], +zstring.c [1.2.6.1.2.1], zsysvm.c [1.2.6.1.2.1], ztoken.c [1.6.6.1.2.1], +ztrans.c [1.13.2.3.2.1], ztrap.c [1.2.6.1.2.1], ztype.c [1.3.6.1.2.1], +zupath.c [1.2.6.1.2.1], zusparam.c [1.3.6.2.2.1], zvmem.c [1.3.2.2.2.1], +zvmem2.c [1.3.2.1.2.1]: 2003/01/17 00:49:04 giles) + +Update DSC parser to current Ghostgum Software version. Fixes SourceForge +bug #657289, SEGV on Alpha in DSC parser. DETAILS: A %%Page line with +mismatched parentheses around the page label was ignored, but parser state +was updated to scanning pages, not setup section. This resulted in access to +dsc->page[-1] which is invalid and caused a SEGV on Alpha. The updated +code now checks that dsc->page_count is non-zero before accessing dsc- +>page[dsc->page_count-1]. It also makes a second attempt at finding +the page ordinal at the end of a line like: %%Page: (label with closing +parentheses 1 Other parser updates include support for DCS2 files (which is +not quite compliant with DSC), removing a few compiler warnings, +%%HiResBoundingBox, %%CropBox, %%PageCropBox, and being more resilient to +incorrect DSC. (dscparse.c [1.7.2.1.2.2], dscparse.h [1.6.2.2.2.2]: +2003/01/28 11:44:44 ghostgum) + +Treat files starting with %Pxxx as PostScript, not PDF. Process empty files +without error. Fixes SourceForge bug #663150, Some PS files half-recognized +as PDF files DETAILS: Changes for the 8.00 release to allow reading of PDF +files from stdin caused files starting with %Pxxx to be half recognised as +PDF files. This patch simplifies the PDF recognition code and makes it treat +only files starting with "%PDF-" as PDF. Testing of this code found that +zero length input files caused a PostScript error. This was an existing +error which is fixed by the gs_epsf.ps patch and last line of the +pdf_main.ps patch. (lib/gs_epsf.ps [1.2.6.11.2.1]: 2003/01/28 11:54:11 +ghostgum) + +</pre><h2><a name="7.06-Streams"></a>Streams</h2><pre> + +Remove some interpreter references from the graphics library. Partial fix +for SourceForge bug #542848, "library #includes interpreter headers". +(sarc4.c [1.5.2.2]: 2002/09/14 12:25:55 ghostgum) + +Backport MacOS build updates for Metrowerks CW8 from HEAD. +(stat_.h [1.6.2.2], stdpre.h [1.4.2.2]: 2002/12/01 23:29:37 giles) + +</pre><h2><a name="7.06-Library"></a>Library</h2><pre> + +Fixes problems: + - When drawing with anti-aliasing on devices with less than +8-bit/pixel, extract the correct existing pixel value. +(gdevdbit.c [1.2.6.2]: 2002/06/22 03:09:05 ghostgum) + - (pdfwrite) Enforce writing FontBBox into CFF. Source Forge bug "[ +578899 ] Missing /FontBBox when converting to ps?" (gdevpsf.h [1.10.2.2], +gdevpsf2.c [1.15.2.2]: 2002/07/16 13:33:49 igor) + - When compiled for A4 default page size, the initial page size is +now 595x842pts. The initial printer page size in tenths of an inch now uses +floating point. This may cause problems with old compilers that do not allow +floating point calculations in initializers for integers. Add some casts to +suppress warnings with the MS compiler. Fixes SourceForge bug #535997, +"ps2pdf produces incorrect A4 page size". (gdevprn.h [1.6.6.2], +gxdevice.h [1.4.6.3]: 2002/07/18 11:11:40 ghostgum) + - Provide an implementation of popen for Windows, to avoid the +broken implementation in MSVC++ 5 and 6. This allows pswrite to output to a +pipe on Windows. Fixes SourceForge bug #482038, pswrite does not write to +pipe. (pipe_.h [1.2.6.2]: 2002/09/05 10:19:00 ghostgum) + - Propagate error codes from gs_distance_transform_inverse. Patch +from Forrest Cahoon, improved. (gxstroke.c [1.2.6.2]: 2002/10/31 09:02:54 +igor) + +Remove some interpreter references from the graphics library. Partial fix +for SourceForge bug #542848, "library #includes interpreter headers". +(gsargs.c [1.4.2.2]: 2002/09/14 12:25:55 ghostgum) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (ctype_.h [1.2.6.1.2.1], dirent_.h [1.2.6.1.2.1], +dos_.h [1.2.6.1.2.1], errno_.h [1.2.6.1.2.1], fcntl_.h [1.3.6.1.2.1], +gconf.c [1.2.6.1.2.1], gconf.h [1.2.6.1.2.1], gdebug.h [1.3.2.1.2.1], +gdevabuf.c [1.3.6.1.2.1], gdevbbox.c [1.4.2.1.2.1], +gdevbbox.h [1.2.6.1.2.1], gdevcmap.c [1.2.6.1.2.1], +gdevcmap.h [1.2.6.1.2.1], gdevdbit.c [1.2.6.2.2.1], +gdevddrw.c [1.2.6.1.2.1], gdevdflt.c [1.3.6.1.2.1], +gdevdgbr.c [1.2.6.1.2.1], gdevdrop.c [1.3.6.1.2.1], +gdevemap.c [1.2.6.1.2.1], gdevhit.c [1.2.6.1.2.1], gdevm1.c [1.2.6.1.2.1], +gdevm16.c [1.2.6.1.2.1], gdevm2.c [1.2.6.1.2.1], gdevm24.c [1.2.6.1.2.1], +gdevm32.c [1.2.6.1.2.1], gdevm4.c [1.2.6.1.2.1], gdevm8.c [1.2.6.1.2.1], +gdevmem.c [1.2.6.1.2.1], gdevmem.h [1.3.6.1.2.1], gdevmpla.c [1.2.6.1.2.1], +gdevmpla.h [1.2.6.1.2.1], gdevmr1.c [1.2.6.1.2.1], gdevmr2n.c [1.2.6.1.2.1], +gdevmr8n.c [1.2.6.1.2.1], gdevmrop.h [1.3.6.1.2.1], +gdevmrun.c [1.2.6.1.2.1], gdevmrun.h [1.2.6.1.2.1], +gdevnfwd.c [1.3.6.1.2.1], gdevp14.c [1.4.2.3.2.1], gdevpipe.c [1.4.4.1.2.1], +gdevplnx.c [1.2.6.1.2.1], gdevplnx.h [1.2.6.1.2.1], +gdevppla.c [1.2.6.1.2.1], gdevppla.h [1.2.6.1.2.1], gdevprn.c [1.5.6.2.2.1], +gdevprn.h [1.6.6.2.2.1], gdevprna.c [1.2.6.1.2.1], gdevprna.h [1.2.6.1.2.1], +gdevpsf.h [1.10.2.2.2.1], gdevpsf1.c [1.9.2.1.2.1], +gdevpsf2.c [1.15.2.2.2.1], gdevpsfm.c [1.5.2.2.2.1], +gdevpsft.c [1.8.2.1.2.1], gdevpsfu.c [1.7.2.1.2.1], +gdevpsfx.c [1.9.2.1.2.1], gdevrops.c [1.3.6.1.2.1], +gdevtrac.c [1.2.6.1.2.1], gdevvec.c [1.12.2.2.2.1], gdevvec.h [1.7.2.1.2.1], +gp.h [1.8.2.3.2.1], gp_dosfe.c [1.2.6.2.2.1], gp_dosfs.c [1.2.6.3.2.1], +gp_getnv.c [1.2.6.1.2.1], gp_msdos.c [1.2.6.1.2.1], +gp_nsync.c [1.2.6.1.2.1], gp_psync.c [1.2.6.1.2.1], +gp_strdl.c [1.2.6.1.2.1], gp_unifn.c [1.2.6.3.2.1], +gp_unifs.c [1.6.2.2.2.1], gpcheck.h [1.2.6.1.2.1], gpgetenv.h [1.2.6.1.2.1], +gpmisc.c [1.9.4.1.2.1], gpmisc.h [1.2.6.1.2.1], gpsync.h [1.2.6.1.2.1], +gsalloc.c [1.11.2.2.2.1], gsalloc.h [1.2.6.1.2.1], gsalpha.c [1.2.6.1.2.1], +gsalpha.h [1.2.6.1.2.1], gsalphac.c [1.2.6.1.2.1], gsalphac.h [1.2.6.1.2.1], +gsargs.c [1.4.2.2.2.1], gsargs.h [1.4.2.1.2.1], gsbitcom.c [1.1.4.1.2.1], +gsbitmap.h [1.2.6.1.2.1], gsbitops.c [1.3.4.1.2.1], +gsbitops.h [1.2.6.1.2.1], gsbittab.c [1.2.6.1.2.1], +gsbittab.h [1.2.6.1.2.1], gsccode.h [1.4.6.1.2.1], gsccolor.h [1.2.6.1.2.1], +gscdef.c [1.15.2.4.2.1], gscdefs.h [1.2.6.1.2.1], gscdevn.c [1.6.2.1.2.1], +gscdevn.h [1.3.6.1.2.1], gschar.c [1.3.6.1.2.1], gschar.h [1.3.6.1.2.1], +gschar0.c [1.3.4.3.2.1], gscie.c [1.4.2.1.2.1], gscie.h [1.3.2.1.2.1], +gsciemap.c [1.6.2.1.2.1], gscindex.h [1.2.6.1.2.1], +gsclipsr.c [1.2.6.1.2.1], gsclipsr.h [1.2.6.1.2.1], gscolor.c [1.5.2.1.2.1], +gscolor.h [1.3.6.1.2.1], gscolor1.c [1.4.2.1.2.1], gscolor1.h [1.2.6.1.2.1], +gscolor2.c [1.6.6.1.2.1], gscolor2.h [1.3.6.1.2.1], +gscolor3.c [1.4.6.1.2.1], gscolor3.h [1.2.6.1.2.1], gscompt.h [1.2.6.1.2.1], +gscoord.c [1.5.6.1.2.1], gscoord.h [1.2.6.1.2.1], gscparam.c [1.7.2.1.2.1], +gscpixel.c [1.3.6.1.2.1], gscpixel.h [1.2.6.1.2.1], gscpm.h [1.2.6.1.2.1], +gscrd.c [1.2.6.1.2.1], gscrd.h [1.2.6.1.2.1], gscrdp.c [1.2.6.1.2.1], +gscrdp.h [1.2.6.1.2.1], gscrypt1.c [1.2.6.1.2.1], gscrypt1.h [1.2.6.1.2.1], +gscscie.c [1.4.2.1.2.1], gscsel.h [1.2.6.1.2.1], gscsepr.c [1.12.2.2.2.1], +gscsepr.h [1.4.6.1.2.1], gscspace.c [1.4.6.1.2.1], gscspace.h [1.8.2.1.2.1], +gscssub.c [1.3.2.1.2.1], gscssub.h [1.2.6.1.2.1], gsdcolor.h [1.3.6.1.2.1], +gsdevice.c [1.11.2.1.2.1], gsdevice.h [1.3.6.1.2.1], +gsdevmem.c [1.2.6.1.2.1], gsdfilt.c [1.3.2.1.2.1], gsdfilt.h [1.2.2.2.2.1], +gsdparam.c [1.4.6.2.2.1], gsdpnext.h [1.2.6.1.2.1], gsdps.c [1.2.6.1.2.1], +gsdps.h [1.2.6.1.2.1], gsdps1.c [1.2.6.1.2.1], gsdsrc.c [1.2.6.1.2.1], +gsdsrc.h [1.3.6.1.2.1], gserror.h [1.2.6.1.2.1], gserrors.h [1.2.6.2.2.1], +gsexit.h [1.4.2.1.2.1], gsfcid.c [1.5.4.1.2.1], gsfcmap.c [1.14.2.2.2.1], +gsfcmap.h [1.4.6.1.2.1], gsfemu.c [1.2.6.1.2.1], gsflip.c [1.2.6.1.2.1], +gsflip.h [1.2.6.1.2.1], gsfname.c [1.2.6.1.2.1], gsfname.h [1.2.6.1.2.1], +gsfont.c [1.4.4.1.2.1], gsfont.h [1.2.6.1.2.1], gsfont0.c [1.2.6.1.2.1], +gsfunc.c [1.4.6.1.2.1], gsfunc.h [1.4.6.1.2.1], gsfunc0.c [1.5.4.1.2.1], +gsfunc0.h [1.2.6.1.2.1], gsfunc3.c [1.4.6.1.2.1], gsfunc3.h [1.2.6.1.2.1], +gsfunc4.c [1.7.2.1.2.1], gsfunc4.h [1.2.6.1.2.1], gsgc.h [1.3.2.1.2.1], +gshsb.c [1.2.6.1.2.1], gshsb.h [1.2.6.1.2.1], gsht.c [1.2.6.1.2.1], +gsht.h [1.2.6.1.2.1], gsht1.c [1.3.2.1.2.1], gsht1.h [1.2.6.1.2.1], +gshtscr.c [1.6.2.1.2.1], gshtx.c [1.2.6.1.2.1], gshtx.h [1.2.6.1.2.1], +gsicc.c [1.5.2.1.2.1], gsicc.h [1.3.2.1.2.1], gsimage.c [1.4.2.1.2.1], +gsimage.h [1.2.6.1.2.1], gsimpath.c [1.2.6.1.2.1], gsinit.c [1.3.2.1.2.1], +gsio.h [1.5.2.1.2.1], gsiodev.c [1.5.2.1.2.1], gsiodevs.c [1.2.6.1.2.1], +gsipar3x.h [1.3.6.1.2.1], gsiparam.h [1.4.6.1.2.1], +gsiparm2.h [1.2.6.1.2.1], gsiparm3.h [1.4.6.1.2.1], +gsiparm4.h [1.2.6.1.2.1], gsistate.c [1.4.6.1.2.1], gsjconf.h [1.2.6.1.2.1], +gslib.c [1.5.2.1.2.1], gslib.h [1.2.6.1.2.1], gsline.c [1.2.6.1.2.1]: +2003/01/17 00:49:00 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (gsline.h [1.2.6.1.2.1], gslparam.h [1.2.6.1.2.1], +gsmalloc.c [1.3.6.1.2.1], gsmalloc.h [1.2.6.1.2.1], +gsmatrix.c [1.2.6.1.2.1], gsmatrix.h [1.2.6.1.2.1], +gsmdebug.h [1.3.2.1.2.1], gsmemlok.c [1.3.6.1.2.1], +gsmemlok.h [1.2.6.1.2.1], gsmemory.c [1.4.2.1.2.1], +gsmemory.h [1.3.2.1.2.1], gsmemraw.h [1.2.6.1.2.1], +gsmemret.c [1.2.6.1.2.1], gsmemret.h [1.2.6.1.2.1], gsmisc.c [1.12.2.1.2.1], +gsnogc.c [1.7.2.1.2.1], gsnogc.h [1.2.6.1.2.1], gsnorop.c [1.2.6.1.2.1], +gsnotify.c [1.2.6.1.2.1], gsnotify.h [1.2.6.1.2.1], gspaint.c [1.2.6.1.2.1], +gspaint.h [1.2.6.1.2.1], gsparam.c [1.4.6.1.2.1], gsparam.h [1.8.4.1.2.1], +gsparam2.c [1.2.6.1.2.1], gsparams.c [1.2.6.1.2.1], +gsparams.h [1.2.6.1.2.1], gsparamx.c [1.4.2.1.2.1], +gsparamx.h [1.3.6.1.2.1], gspath.c [1.2.6.1.2.1], gspath.h [1.2.6.1.2.1], +gspath1.c [1.3.4.1.2.1], gspath2.h [1.2.6.1.2.1], gspcolor.c [1.4.6.1.2.1], +gspcolor.h [1.2.6.1.2.1], gspenum.h [1.2.6.1.2.1], gsptype1.c [1.3.2.1.2.1], +gsptype1.h [1.2.6.1.2.1], gsptype2.c [1.5.2.1.2.1], +gsptype2.h [1.4.2.1.2.1], gsrect.h [1.2.6.1.2.1], gsrefct.h [1.2.6.1.2.1], +gsrop.c [1.2.6.1.2.1], gsrop.h [1.2.6.1.2.1], gsropc.c [1.2.6.1.2.1], +gsropc.h [1.2.6.1.2.1], gsropt.h [1.4.2.1.2.1], gsroptab.c [1.2.6.1.2.1], +gsshade.c [1.4.2.1.2.1], gsshade.h [1.3.6.1.2.1], gsstate.c [1.11.2.1.2.1], +gsstate.h [1.2.6.1.2.1], gsstruct.h [1.8.2.1.2.1], gsstype.h [1.2.6.1.2.1], +gstext.c [1.6.2.2.2.1], gstext.h [1.3.6.1.2.1], gstparam.h [1.7.6.1.2.1], +gstrans.c [1.13.2.1.2.1], gstrans.h [1.6.6.1.2.1], gstrap.c [1.3.6.1.2.1], +gstrap.h [1.3.6.1.2.1], gstype1.c [1.6.4.1.2.1], gstype1.h [1.2.6.1.2.1], +gstype2.c [1.10.2.3.2.1], gstype42.c [1.12.2.2.2.1], +gstypes.h [1.3.2.1.2.1], gsuid.h [1.2.6.1.2.1], gsutil.c [1.4.6.2.2.1], +gsutil.h [1.3.6.2.2.1], gsxfont.h [1.2.6.1.2.1], gx.h [1.2.6.1.2.1], +gxacpath.c [1.3.6.1.2.1], gxalloc.h [1.6.2.1.2.1], gxalpha.h [1.2.6.1.2.1], +gxarith.h [1.2.6.1.2.1], gxband.h [1.2.6.1.2.1], gxbcache.c [1.2.6.1.2.1], +gxbcache.h [1.2.6.1.2.1], gxbitfmt.h [1.2.6.1.2.1], +gxbitmap.h [1.2.6.1.2.1], gxbitops.h [1.2.6.1.2.1], gxblend.c [1.2.2.1.2.1], +gxblend.h [1.1.2.1.2.1], gxccache.c [1.5.2.1.2.1], gxccman.c [1.2.6.1.2.1], +gxcdevn.h [1.2.6.1.2.1], gxchar.c [1.5.2.5.2.1], gxchar.h [1.2.6.2.2.1], +gxchrout.c [1.2.6.1.2.1], gxchrout.h [1.2.6.1.2.1], gxcht.c [1.3.2.1.2.1], +gxcid.h [1.3.6.1.2.1], gxcie.h [1.3.2.1.2.1], gxcindex.h [1.2.6.1.2.1], +gxclbits.c [1.4.4.1.2.1], gxcldev.h [1.4.4.1.2.1], gxclfile.c [1.3.2.1.2.1], +gxclimag.c [1.3.2.1.2.1], gxclio.h [1.2.6.1.2.1], gxclip.c [1.4.2.1.2.1], +gxclip.h [1.2.6.1.2.1], gxclip2.c [1.3.6.1.2.1], gxclip2.h [1.2.6.1.2.1], +gxclipm.c [1.3.6.1.2.1], gxclipm.h [1.2.6.1.2.1], gxclipsr.h [1.2.6.1.2.1], +gxclist.c [1.3.6.1.2.1], gxclist.h [1.2.6.1.2.1], gxcllzw.c [1.2.6.1.2.1], +gxclmem.c [1.2.6.1.2.1], gxclmem.h [1.2.6.1.2.1], gxclpage.c [1.2.6.1.2.1], +gxclpage.h [1.2.6.1.2.1], gxclpath.c [1.9.2.1.2.1], +gxclpath.h [1.6.6.1.2.1], gxclrast.c [1.9.2.1.2.1], +gxclread.c [1.3.4.1.2.1], gxclrect.c [1.2.6.1.2.1], +gxclutil.c [1.5.2.1.2.1], gxclzlib.c [1.2.6.1.2.1], gxcmap.c [1.3.6.1.2.1], +gxcmap.h [1.2.6.1.2.1], gxcolor2.h [1.4.6.1.2.1], gxcomp.h [1.2.6.1.2.1], +gxcoord.h [1.2.6.1.2.1], gxcpath.c [1.3.6.1.2.1], gxcpath.h [1.2.6.1.2.1], +gxcspace.h [1.4.6.1.2.1], gxctable.c [1.3.6.1.2.1], +gxctable.h [1.2.6.1.2.1], gxcvalue.h [1.2.6.1.2.1], +gxdcconv.c [1.3.6.1.2.1], gxdcconv.h [1.2.6.1.2.1], +gxdcolor.c [1.3.6.1.2.1], gxdcolor.h [1.3.6.1.2.1], gxdda.h [1.2.6.1.2.1], +gxdevbuf.h [1.2.6.1.2.1], gxdevcli.h [1.5.2.2.2.1], +gxdevice.h [1.4.6.3.2.1], gxdevmem.h [1.2.6.1.2.1], +gxdevrop.h [1.2.6.1.2.1], gxdht.h [1.4.6.1.2.1], gxdhtres.h [1.2.6.1.2.1], +gxdither.h [1.2.6.1.2.1], gxfarith.h [1.3.6.1.2.1], +gxfcache.h [1.2.6.1.2.1], gxfcid.h [1.6.6.1.2.1], gxfcmap.h [1.8.2.1.2.1], +gxfill.c [1.8.2.1.2.1], gxfixed.h [1.3.4.1.2.1], gxfmap.h [1.3.6.1.2.1], +gxfont.h [1.3.4.1.2.1], gxfont0.h [1.3.6.1.2.1], gxfont1.h [1.5.4.1.2.1], +gxfont42.h [1.4.6.1.2.1], gxfrac.h [1.3.4.1.2.1], gxftype.h [1.2.6.1.2.1], +gxfunc.h [1.3.6.1.2.1], gxgetbit.h [1.2.6.1.2.1], gxhint1.c [1.2.6.1.2.1], +gxhint2.c [1.2.6.1.2.1], gxhint3.c [1.3.2.1.2.1], gxht.c [1.2.6.2.2.1], +gxht.h [1.2.6.1.2.1], gxhtbit.c [1.3.6.1.2.1], gxhttile.h [1.2.6.1.2.1], +gxhttype.h [1.2.6.1.2.1], gxi12bit.c [1.2.6.1.2.1], +gxiclass.h [1.2.6.1.2.1], gxicolor.c [1.3.2.1.2.1], gxidata.c [1.4.6.1.2.1], +gxifast.c [1.4.2.1.2.1], gximag3x.c [1.7.6.1.2.1], gximag3x.h [1.3.6.1.2.1], +gximage.c [1.2.6.1.2.1], gximage.h [1.2.6.1.2.1], gximage1.c [1.5.6.1.2.1], +gximage2.c [1.2.6.1.2.1], gximage3.c [1.6.6.1.2.1], +gximage3.h [1.4.6.1.2.1], gximage4.c [1.3.6.1.2.1], gximono.c [1.2.6.1.2.1], +gxino12b.c [1.2.6.1.2.1], gxiodev.h [1.2.6.1.2.1], gxiparam.h [1.2.6.1.2.1], +gxipixel.c [1.2.6.1.2.1], gxiscale.c [1.2.6.2.2.1], +gxistate.h [1.6.6.1.2.1], gxline.h [1.2.6.1.2.1], gxlum.h [1.2.6.1.2.1], +gxmatrix.h [1.4.6.1.2.1], gxmclip.c [1.2.6.1.2.1], gxmclip.h [1.2.6.1.2.1], +gxobj.h [1.2.6.1.2.1], gxop1.h [1.2.6.1.2.1], gxp1fill.c [1.2.6.1.2.1], +gxp1impl.h [1.2.6.1.2.1], gxpageq.c [1.2.6.1.2.1], gxpageq.h [1.2.6.1.2.1], +gxpaint.c [1.2.6.1.2.1], gxpaint.h [1.2.6.1.2.1], gxpath.c [1.2.6.1.2.1], +gxpath.h [1.2.6.1.2.1], gxpath2.c [1.2.6.1.2.1], gxpcache.h [1.2.6.1.2.1], +gxpcmap.c [1.3.6.1.2.1], gxpcolor.h [1.2.6.1.2.1], gxpcopy.c [1.3.6.1.2.1], +gxpdash.c [1.2.6.1.2.1], gxpflat.c [1.2.6.1.2.1], gxropc.h [1.2.6.1.2.1], +gxrplane.h [1.2.6.1.2.1], gxsample.c [1.2.6.1.2.1], +gxsample.h [1.2.6.1.2.1], gxshade.c [1.6.2.1.2.1], gxshade.h [1.4.2.1.2.1], +gxshade1.c [1.9.2.1.2.1], gxshade4.c [1.6.2.1.2.1], +gxshade4.h [1.2.6.1.2.1], gxshade6.c [1.3.6.1.2.1], gxstate.h [1.2.6.1.2.1], +gxstdio.h [1.2.6.1.2.1], gxstroke.c [1.2.6.2.2.1], gxsync.c [1.2.6.1.2.1], +gxsync.h [1.2.6.1.2.1], gxtext.h [1.7.2.1.2.1], gxtmap.h [1.2.6.1.2.1], +gxttf.h [1.2.6.1.2.1], gxtype1.c [1.8.4.1.2.1], gxtype1.h [1.5.4.1.2.1], +gxxfont.h [1.2.6.1.2.1], gzacpath.h [1.2.6.1.2.1], gzcpath.h [1.2.6.1.2.1], +gzht.h [1.4.4.1.2.1], gzline.h [1.2.6.1.2.1], gzpath.h [1.3.6.1.2.1], +gzstate.h [1.5.2.1.2.1], jerror_.h [1.2.6.2.2.1], malloc_.h [1.2.6.1.2.1], +math_.h [1.2.6.1.2.1], md5.c [1.2.8.1], md5.h [1.1.8.1], +memory_.h [1.2.6.1.2.1], pipe_.h [1.2.6.2.2.1], time_.h [1.3.2.2.2.1], +unistd_.h [1.4.2.1.2.1], vmsmath.h [1.2.6.1.2.1], windows_.h [1.2.6.1.2.1]: +2003/01/17 00:49:03 giles) + +Update release date for final 7.06 release. (gscdef.c [1.15.2.4.2.2]: +2003/02/09 16:20:05 giles) + +Add pngalpha device that uses RGBA, with the alpha channel providing pixel +coverage. Used for generating PNG images with a transparent background. +(gdevprn.h [1.6.6.2.2.2]: 2003/03/11 11:59:10 ghostgum) + +</pre><h2><a name="7.06-Other"></a>Other</h2><pre> + +Add a configure option to enable COMPILE_INITS. After a patch from Michael +Sweet. (Makefile.in [1.1.4.8], configure.ac [1.4.4.10]: 2002/05/03 03:40:11 +giles) + +Add a configure option for setting the name of the ghostscript executable. +From a patch by Michael Sweet. (Makefile.in [1.1.4.9], +configure.ac [1.4.4.11]: 2002/05/03 07:26:21 giles) + +Add a .cvsignore. (ijs/.cvsignore [1.1.2.1]: 2002/09/29 17:53:27 giles) + +Remove remaining elements of support for K&R (pre-ansi) C. We no longer +support building ghostscript tt way, but the remaining dead code causes +confusion for some users. Closes Sourceforge bug #618048. +(Makefile.in [1.1.4.10]: 2002/10/10 00:24:01 giles) + +Set USE_ASM to zero explicitly. (Makefile.in [1.1.4.11]: 2002/10/10 12:47:49 +giles) + +Backport debug and unitialized variable fixes from HEAD. After a patch from +Alexei A. Podtelezhnikov. (gdevp14.c [1.4.2.2], gsalloc.c [1.11.2.2], +gxht.c [1.2.6.2]: 2002/12/01 15:10:20 giles) + +Backport additional cast and initialization fixes. (gdevp14.c [1.4.2.3]: +2002/12/01 18:02:41 giles) + +Backport MacOS build updates for Metrowerks CW8 from HEAD. +(time_.h [1.3.2.2]: 2002/12/01 23:29:37 giles) + +Backport MacOS build updates for Metrowerks CW8 from HEAD. +(macsystypes.h [1.1.4.3]: 2002/12/01 23:29:37 giles) + +Add working 'distclean' and 'maintainer-clean' targets to the autoconf +makefile. Backport from HEAD. (Makefile.in [1.1.4.12]: 2002/12/02 00:10:24 +giles) + +Update release date for second candidate. Also adds a dummy 'check' target +to the autoconf makefile for standards compliance. (Makefile.in [1.1.4.13]: +2002/12/02 01:55:46 giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (Makefile.in [1.1.4.13.2.1], gp_mac.h [1.1.4.2.2.1], +gp_mswin.h [1.4.2.1.2.1], gsdll.h [1.3.2.2.2.1], gsdllos2.h [1.2.6.1.2.1], +gsdllwin.h [1.3.2.1.2.1], gsjmorec.h [1.3.4.1.2.1]: 2003/01/17 00:49:00 +giles) + +Apply standard GNU license banner at the request of RMS. Patch from Brett +Smith. (gspmdrv.h [1.2.6.1.2.1], iutilasm.asm [1.2.6.1.2.1], +macsystypes.h [1.1.4.3.2.1], vms_x_fix.h [1.1.2.2.2.1]: 2003/01/17 00:49:03 +giles) + +Define the RM macro for the benifit of the 'clean' targets in the autoconf +build. (Makefile.in [1.1.4.13.2.2]: 2003/02/09 17:20:51 giles) + +<hr> + +<h1><a name="Version7.05"></a>Version 7.05 (2002-04-22)</h1> + +<p>This is the first release of the stable 7.0x series under the GNU +GPL, following one year after the release of 7.00. The license change in +the major reason for this release, and we hope the community of +Free Software users will enjoy the much improved features of the new +stable branch. + +<p>Another major change over the 7.04 release is a improved asian +language support from the gs-cjk team. This is a new version of the +work released with 6.53. + +<p>And of course there are the usual bug fixes and minor improvements. + +<p>At the time of release, the following bugs were open against all +ghostscript versions: + +219798, +405342, +406979, +407342, +414947, +414985, +415142, +418241, +423838, +427193, +427347, +428891, +428973, +432040, +434277, +437285, +446344, +446672, +448199, +453969, +458261, +458500, +458775, +458780, +459647, +462221, +465720, +465936, +468762, +474745, +475147, +477644, +482038, +483629, +484752, +484753, +485510, +487953, +493348, +495319, +498595, +503794, +505429, +506375, +508081, +508675, +509646, +510808, +511232, +513905, +514616, +514616, +515475, +516653, +517349, +520686, +521354, +521664, +521916, +522486, +524292, +525508, +526099, +526491, +528647, +529103, +529578, +530011, +530588, +533467, +534637, +535366, +535752, +535836, +535997, +536877, +538033, +538042, +538055, +538267, +538311, +538428, +539239, +539327, +539359, +542535, +542625, +542664, +542786, +542848, +543185, +544247, +544365, +544774, +544996, +545003, +545177, +545478, +546823, +547102, +547111. + +<h3><a name="7.05_Incompatible_changes"></a>Incompatible changes</h3> + +<p> +No incompatible changes have been recorded for this version. Users of the 6.5x versions of GNU +Ghostscript will want to check the History for a complete list of changes since that version. +Authors of drivers with potential security implications are also encouraged to review +the security changes introduced with 6.53/7.04. + +<pre> + + + +<h2><a name="7.05-Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - corrects a typo in the new Id: line (doc/index.html [1.2.4.2]: +2002/04/10 09:45:40 giles) + - the url for the guide to international paper sizes has changed. +Thanks to Nelson Beebe for finding th e update. (doc/Use.htm [1.33.2.7]: +2002/04/14 01:10:01 giles) + - Fix typo in cvs2hist invocation example +(doc/Release.htm [1.40.2.12]: 2002/04/17 01:42:58 giles) + +Documents the work-around of using '#' instead of '=' to separate command +line options from their arguments. The was previously listed only as a quirk +of the Wacom build on MS-DOS, but is also needed on win32 because the +command shell treats '=' as whitespace in passing arguments to batch files +(like ps2pdf.bat). Closes SourceForge bug #483066. Also documents that +MS-DOS is no longer a supported operating system. (doc/Use.htm [1.33.2.4]: +2002/02/01 19:43:02 giles) + +Improves branch handling in cvs2hist, raph's patch from HEAD. Also documents +the new options. (doc/Release.htm [1.40.2.4]: 2002/02/06 23:31:10 giles) + +Removes mention of SourceForge Bug #223005, which was closed before the 7.00 +release. (doc/Issues.htm [1.15.2.3]: 2002/02/21 20:33:08 giles) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(doc/API.htm [1.11.2.4], +doc/Bug-form.htm [1.23.2.3], doc/Bug-info.htm [1.20.2.3], +doc/C-style.htm [1.21.2.3], doc/Commprod.htm [1.15.2.3], +doc/Current.htm [1.13.2.3], doc/DLL.htm [1.15.2.3], +doc/Develop.htm [1.47.2.4], doc/Devices.htm [1.34.2.5], +doc/Drivers.htm [1.21.2.3], doc/Fonts.htm [1.22.2.3], +doc/Helpers.htm [1.17.2.3], doc/History1.htm [1.13.2.3], +doc/History2.htm [1.13.2.3], doc/History3.htm [1.13.2.3], +doc/History4.htm [1.13.2.3], doc/History5.htm [1.15.2.3], +doc/History6.htm [1.30.2.3], doc/History7.htm [1.5.2.4], +doc/Htmstyle.htm [1.18.2.3], doc/Humor.htm [1.3.2.1], +doc/Install.htm [1.26.2.3], doc/Issues.htm [1.15.2.4], +doc/Language.htm [1.34.2.5], doc/Lib.htm [1.14.2.3], +doc/Maintain.htm [1.23.2.3], doc/Make.htm [1.36.2.6], +doc/New-user.htm [1.30.2.3], doc/News.htm [1.90.2.5], +doc/Projects.htm [1.33.2.3], doc/Ps-style.htm [1.13.2.3], +doc/Ps2epsi.htm [1.15.2.3], doc/Ps2pdf.htm [1.32.2.3], +doc/Psfiles.htm [1.22.2.3], doc/Readme.htm [1.31.2.3], +doc/Release.htm [1.40.2.5], doc/Source.htm [1.13.2.3], +doc/Tester.htm [1.14.2.3], doc/Unix-lpr.htm [1.13.2.3], +doc/Use.htm [1.33.2.5], doc/Xfonts.htm [1.13.2.3]: 2002/02/22 19:45:53 ray) + +Removes auto-generated plain text versions of html documentation from cvs +and makes their creation an explicit part of the release process. +(doc/Release.htm [1.40.2.6]: 2002/02/25 21:43:20 giles) + +Add example code to doc/API.htm showing how to call the Ghostscript DLL as a +PostScript to PDF convertor. (doc/API.htm [1.11.2.5]: 2002/03/12 07:15:16 +ghostgum) + +Update msvc32.mak and documentation to support compilation with Microsoft +Visual Studio .NET. This requires MSVC_VERSION=7. (doc/Make.htm [1.36.2.7]: +2002/03/12 07:21:30 ghostgum) + +Documents how to build a Windows self-extracting archive for a ghostscript +distribution (doc/Release.htm [1.40.2.7]: 2002/03/12 07:25:12 ghostgum) + +gs-cjk project : add new documents CJK.htm and CJKTTCID.htm, add references +to Fonts.htm, Readme.htm, Use.htm add targets to unixinst.mak. Fix by Suzuki +Toshiya and Taiji Yamada. (doc/Fonts.htm [1.22.2.4], +doc/Readme.htm [1.31.2.4], doc/Use.htm [1.33.2.6]: 2002/04/02 14:26:38 +mpsuzuki) + +gs-cjk project : add CIDFnmap samples add references to Develop.htm add +targets to unixinst.mak (doc/Develop.htm [1.47.2.5]: 2002/04/02 14:47:42 +mpsuzuki) + +add a missing Id: line (doc/index.html [1.2.4.1]: 2002/04/10 09:19:35 giles) + +add new files to the Developer documentation (doc/Develop.htm [1.47.2.6]: +2002/04/10 09:44:24 giles) + +mark this as a GNU version and bump the release number +(doc/News.htm [1.90.2.6]: 2002/04/15 05:47:56 giles) + +Update version and date for the 7.05rc1. (doc/API.htm [1.11.2.6], +doc/Bug-form.htm [1.23.2.4], doc/Bug-info.htm [1.20.2.4], +doc/C-style.htm [1.21.2.4], doc/Commprod.htm [1.15.2.4], +doc/Current.htm [1.13.2.4], doc/DLL.htm [1.15.2.4], +doc/Develop.htm [1.47.2.7], doc/Devices.htm [1.34.2.6], +doc/Drivers.htm [1.21.2.4], doc/Fonts.htm [1.22.2.5], +doc/Helpers.htm [1.17.2.4], doc/History1.htm [1.13.2.4], +doc/History2.htm [1.13.2.4], doc/History3.htm [1.13.2.4], +doc/History4.htm [1.13.2.4], doc/History5.htm [1.15.2.4], +doc/History6.htm [1.30.2.4], doc/History7.htm [1.5.2.5], +doc/Htmstyle.htm [1.18.2.4], doc/Install.htm [1.26.2.4], +doc/Issues.htm [1.15.2.5], doc/Language.htm [1.34.2.6], +doc/Lib.htm [1.14.2.4], doc/Maintain.htm [1.23.2.4], +doc/Make.htm [1.36.2.8], doc/New-user.htm [1.30.2.4], +doc/News.htm [1.90.2.7], doc/Projects.htm [1.33.2.4], +doc/Ps-style.htm [1.13.2.4], doc/Ps2epsi.htm [1.15.2.4], +doc/Ps2pdf.htm [1.32.2.4], doc/Psfiles.htm [1.22.2.4], +doc/Readme.htm [1.31.2.5], doc/Release.htm [1.40.2.8], +doc/Source.htm [1.13.2.4], doc/Tester.htm [1.14.2.4], +doc/Unix-lpr.htm [1.13.2.4], doc/Use.htm [1.33.2.8], +doc/Xfonts.htm [1.13.2.4], doc/gs-vms.hlp [1.12.2.3], +man/dvipdf.1 [1.10.2.3], man/font2c.1 [1.10.2.3], man/gs.1 [1.10.2.3], +man/gslp.1 [1.10.2.3], man/gsnd.1 [1.10.2.3], man/pdf2dsc.1 [1.10.2.3], +man/pdf2ps.1 [1.12.2.3], man/pdfopt.1 [1.10.2.3], man/pf2afm.1 [1.10.2.3], +man/pfbtopfa.1 [1.11.2.3], man/printafm.1 [1.10.2.3], +man/ps2ascii.1 [1.10.2.3], man/ps2epsi.1 [1.10.2.3], +man/ps2pdf.1 [1.14.2.3], man/ps2pdfwr.1 [1.13.2.3], man/ps2ps.1 [1.17.2.3], +man/wftopfa.1 [1.10.2.3]: 2002/04/15 19:20:09 giles) + +Document the -dBATCH option in the manpage. Strengthen the wording for +-dSAFER and improve the ordering of the option descriptions. +(man/gs.1 [1.10.2.4]: 2002/04/15 19:54:06 giles) + +Update the release documentation to better reflect current practice. +(doc/Release.htm [1.40.2.9]: 2002/04/15 21:40:02 giles) + +Documentation updates for a revised 7.05rc1. (doc/API.htm [1.11.2.7], +doc/Bug-form.htm [1.23.2.5], doc/Bug-info.htm [1.20.2.5], +doc/C-style.htm [1.21.2.5], doc/Commprod.htm [1.15.2.5], +doc/Current.htm [1.13.2.5], doc/DLL.htm [1.15.2.5], +doc/Develop.htm [1.47.2.8], doc/Devices.htm [1.34.2.7], +doc/Drivers.htm [1.21.2.5], doc/Fonts.htm [1.22.2.6], +doc/Helpers.htm [1.17.2.5], doc/History1.htm [1.13.2.5], +doc/History2.htm [1.13.2.5], doc/History3.htm [1.13.2.5], +doc/History4.htm [1.13.2.5], doc/History5.htm [1.15.2.5], +doc/History6.htm [1.30.2.5], doc/History7.htm [1.5.2.6], +doc/Htmstyle.htm [1.18.2.5], doc/Install.htm [1.26.2.5], +doc/Issues.htm [1.15.2.6], doc/Language.htm [1.34.2.7], +doc/Lib.htm [1.14.2.5], doc/Maintain.htm [1.23.2.5], +doc/Make.htm [1.36.2.9], doc/New-user.htm [1.30.2.5], +doc/News.htm [1.90.2.8], doc/Projects.htm [1.33.2.5], +doc/Ps-style.htm [1.13.2.5], doc/Ps2epsi.htm [1.15.2.5], +doc/Ps2pdf.htm [1.32.2.5], doc/Psfiles.htm [1.22.2.5], +doc/Readme.htm [1.31.2.6], doc/Release.htm [1.40.2.10], +doc/Source.htm [1.13.2.5], doc/Tester.htm [1.14.2.5], +doc/Unix-lpr.htm [1.13.2.5], doc/Use.htm [1.33.2.9], +doc/Xfonts.htm [1.13.2.5], doc/gs-vms.hlp [1.12.2.4]: 2002/04/17 01:08:26 +giles) + +Documentation updates for a revised 7.05rc1. (man/dvipdf.1 [1.10.2.4], +man/font2c.1 [1.10.2.4], man/gs.1 [1.10.2.5], man/gslp.1 [1.10.2.4], +man/gsnd.1 [1.10.2.4], man/pdf2dsc.1 [1.10.2.4], man/pdf2ps.1 [1.12.2.4], +man/pdfopt.1 [1.10.2.4], man/pf2afm.1 [1.10.2.4], man/pfbtopfa.1 [1.11.2.4], +man/printafm.1 [1.10.2.4], man/ps2ascii.1 [1.10.2.4], +man/ps2epsi.1 [1.10.2.4], man/ps2pdf.1 [1.14.2.4], +man/ps2pdfwr.1 [1.13.2.4], man/ps2ps.1 [1.17.2.4], man/wftopfa.1 [1.10.2.4]: +2002/04/17 01:08:37 giles) + +Update release date for revised 7.05rc1. (doc/API.htm [1.11.2.8], +doc/Bug-form.htm [1.23.2.6], doc/Bug-info.htm [1.20.2.6], +doc/C-style.htm [1.21.2.6], doc/Commprod.htm [1.15.2.6], +doc/Current.htm [1.13.2.6], doc/DLL.htm [1.15.2.6], +doc/Develop.htm [1.47.2.9], doc/Devices.htm [1.34.2.8], +doc/Drivers.htm [1.21.2.6], doc/Fonts.htm [1.22.2.7], +doc/Helpers.htm [1.17.2.6], doc/History1.htm [1.13.2.6], +doc/History2.htm [1.13.2.6], doc/History3.htm [1.13.2.6], +doc/History4.htm [1.13.2.6], doc/History5.htm [1.15.2.6], +doc/History6.htm [1.30.2.6], doc/History7.htm [1.5.2.7], +doc/Htmstyle.htm [1.18.2.6], doc/Install.htm [1.26.2.6], +doc/Issues.htm [1.15.2.7], doc/Language.htm [1.34.2.8], +doc/Lib.htm [1.14.2.6], doc/Maintain.htm [1.23.2.6], +doc/Make.htm [1.36.2.10], doc/New-user.htm [1.30.2.6], +doc/News.htm [1.90.2.9], doc/Projects.htm [1.33.2.6], +doc/Ps-style.htm [1.13.2.6], doc/Ps2epsi.htm [1.15.2.6], +doc/Ps2pdf.htm [1.32.2.6], doc/Psfiles.htm [1.22.2.6], +doc/Readme.htm [1.31.2.7], doc/Release.htm [1.40.2.11], +doc/Source.htm [1.13.2.6], doc/Tester.htm [1.14.2.6], +doc/Unix-lpr.htm [1.13.2.6], doc/Use.htm [1.33.2.10], +doc/Xfonts.htm [1.13.2.6], doc/gs-vms.hlp [1.12.2.5]: 2002/04/17 01:13:15 +giles) + +Update release date for revised 7.05rc1. (man/dvipdf.1 [1.10.2.5], +man/font2c.1 [1.10.2.5], man/gs.1 [1.10.2.6], man/gslp.1 [1.10.2.5], +man/gsnd.1 [1.10.2.5], man/pdf2dsc.1 [1.10.2.5], man/pdf2ps.1 [1.12.2.5], +man/pdfopt.1 [1.10.2.5], man/pf2afm.1 [1.10.2.5], man/pfbtopfa.1 [1.11.2.5], +man/printafm.1 [1.10.2.5], man/ps2ascii.1 [1.10.2.5], +man/ps2epsi.1 [1.10.2.5], man/ps2pdf.1 [1.14.2.5], +man/ps2pdfwr.1 [1.13.2.5], man/ps2ps.1 [1.17.2.5], man/wftopfa.1 [1.10.2.5]: +2002/04/17 01:13:21 giles) + +update changelog for 7.05rc1 (doc/Changes.htm [1.28.2.4], +doc/History7.htm [1.5.2.8], doc/News.htm [1.90.2.10]: 2002/04/17 01:43:27 +giles) + +Minor clean-up for GNU coding standards. (doc/Readme.htm [1.31.2.8]: 2002/04/17 +01:52:38 giles) + +Remove the chess.ps example file due to license ambiguity. +(doc/Psfiles.htm [1.22.2.7]: 2002/04/18 06:01:27 giles) + +update the language describing the gnu portion of the license options to +reflect current practice. (doc/Commprod.htm [1.15.2.7]: 2002/04/19 01:45:01 +giles) + +Add the 'stp' driver from the gimp-print project, and compile it in by +default from the autoconf build if libgimprint is found. +(doc/Devices.htm [1.34.2.9]: 2002/04/19 22:23:09 giles) + +bump release date for 7.05rc2 (doc/API.htm [1.11.2.9], +doc/Bug-form.htm [1.23.2.7], doc/Bug-info.htm [1.20.2.7], +doc/C-style.htm [1.21.2.7], doc/Commprod.htm [1.15.2.8], +doc/Current.htm [1.13.2.7], doc/DLL.htm [1.15.2.7], +doc/Develop.htm [1.47.2.10], doc/Devices.htm [1.34.2.10], +doc/Drivers.htm [1.21.2.7], doc/Fonts.htm [1.22.2.8], +doc/Helpers.htm [1.17.2.7], doc/History1.htm [1.13.2.7], +doc/History2.htm [1.13.2.7], doc/History3.htm [1.13.2.7], +doc/History4.htm [1.13.2.7], doc/History5.htm [1.15.2.7], +doc/History6.htm [1.30.2.7], doc/History7.htm [1.5.2.9], +doc/Htmstyle.htm [1.18.2.7], doc/Install.htm [1.26.2.7], +doc/Issues.htm [1.15.2.8], doc/Language.htm [1.34.2.9], +doc/Lib.htm [1.14.2.7], doc/Maintain.htm [1.23.2.7], +doc/Make.htm [1.36.2.11], doc/New-user.htm [1.30.2.7], +doc/News.htm [1.90.2.11], doc/Projects.htm [1.33.2.7], +doc/Ps-style.htm [1.13.2.7], doc/Ps2epsi.htm [1.15.2.7], +doc/Ps2pdf.htm [1.32.2.7], doc/Psfiles.htm [1.22.2.8], +doc/Readme.htm [1.31.2.9], doc/Release.htm [1.40.2.13], +doc/Source.htm [1.13.2.7], doc/Tester.htm [1.14.2.7], +doc/Unix-lpr.htm [1.13.2.7], doc/Use.htm [1.33.2.11], +doc/Xfonts.htm [1.13.2.7], doc/gs-vms.hlp [1.12.2.6], +man/dvipdf.1 [1.10.2.6], man/font2c.1 [1.10.2.6], man/gs.1 [1.10.2.7], +man/gslp.1 [1.10.2.6], man/gsnd.1 [1.10.2.6], man/pdf2dsc.1 [1.10.2.6], +man/pdf2ps.1 [1.12.2.6], man/pdfopt.1 [1.10.2.6], man/pf2afm.1 [1.10.2.6], +man/pfbtopfa.1 [1.11.2.6], man/printafm.1 [1.10.2.6], +man/ps2ascii.1 [1.10.2.6], man/ps2epsi.1 [1.10.2.6], +man/ps2pdf.1 [1.14.2.6], man/ps2pdfwr.1 [1.13.2.6], man/ps2ps.1 [1.17.2.6], +man/wftopfa.1 [1.10.2.6]: 2002/04/19 22:38:45 giles) + +Update the open bug list. (doc/News.htm [1.90.2.12]: 2002/04/19 22:47:14 +giles) + +add gnudevs.mak and gdevstp.c to Develop.htm (doc/Develop.htm [1.47.2.11]: +2002/04/19 22:53:14 giles) + +Update changelog for the 7.05rc2 pre-release. (doc/Changes.htm [1.28.2.5], +doc/History7.htm [1.5.2.10]: 2002/04/19 23:03:02 giles) + +Add a step to create the configure script for ijs. +(doc/Release.htm [1.40.2.14]: 2002/04/22 18:11:46 giles) + +Remove the DOS and OS/2 versions of the ps2epsi code. They have been broken +for some time. (doc/Develop.htm [1.47.2.12], doc/Ps2epsi.htm [1.15.2.8], +man/ps2epsi.1 [1.10.2.7]: 2002/04/22 20:38:01 giles) + +Update version date for release. (doc/API.htm [1.11.2.10], +doc/Bug-form.htm [1.23.2.8], doc/Bug-info.htm [1.20.2.8], +doc/C-style.htm [1.21.2.8], doc/Commprod.htm [1.15.2.9], +doc/Current.htm [1.13.2.8], doc/DLL.htm [1.15.2.8], +doc/Develop.htm [1.47.2.13], doc/Devices.htm [1.34.2.11], +doc/Drivers.htm [1.21.2.8], doc/Fonts.htm [1.22.2.9], +doc/Helpers.htm [1.17.2.8], doc/History1.htm [1.13.2.8], +doc/History2.htm [1.13.2.8], doc/History3.htm [1.13.2.8], +doc/History4.htm [1.13.2.8], doc/History5.htm [1.15.2.8], +doc/History6.htm [1.30.2.8], doc/History7.htm [1.5.2.11], +doc/Htmstyle.htm [1.18.2.8], doc/Install.htm [1.26.2.8], +doc/Issues.htm [1.15.2.9], doc/Language.htm [1.34.2.10], +doc/Lib.htm [1.14.2.8], doc/Maintain.htm [1.23.2.8], +doc/Make.htm [1.36.2.12], doc/New-user.htm [1.30.2.8], +doc/News.htm [1.90.2.13], doc/Projects.htm [1.33.2.8], +doc/Ps-style.htm [1.13.2.8], doc/Ps2epsi.htm [1.15.2.9], +doc/Ps2pdf.htm [1.32.2.8], doc/Psfiles.htm [1.22.2.9], +doc/Readme.htm [1.31.2.10], doc/Release.htm [1.40.2.15], +doc/Source.htm [1.13.2.8], doc/Tester.htm [1.14.2.8], +doc/Unix-lpr.htm [1.13.2.8], doc/Use.htm [1.33.2.12], +doc/Xfonts.htm [1.13.2.8], doc/gs-vms.hlp [1.12.2.7]: 2002/04/22 21:15:32 +giles) + +Update version date for release.Update version date for release. +(man/dvipdf.1 [1.10.2.7], man/font2c.1 [1.10.2.7], man/gs.1 [1.10.2.8], +man/gslp.1 [1.10.2.7], man/gsnd.1 [1.10.2.7], man/pdf2dsc.1 [1.10.2.7], +man/pdf2ps.1 [1.12.2.7], man/pdfopt.1 [1.10.2.7], man/pf2afm.1 [1.10.2.7], +man/pfbtopfa.1 [1.11.2.7], man/printafm.1 [1.10.2.7], +man/ps2ascii.1 [1.10.2.7], man/ps2epsi.1 [1.10.2.8], +man/ps2pdf.1 [1.14.2.7], man/ps2pdfwr.1 [1.13.2.7], man/ps2ps.1 [1.17.2.7], +man/wftopfa.1 [1.10.2.7]: 2002/04/22 21:15:55 giles) + +Update the open bug list for release. (doc/News.htm [1.90.2.14]: 2002/04/22 +21:26:46 giles) + +</pre><h2><a name="7.05-Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - ps2pdf14 was not being installed by unixinst.mak. Fixes +SourceForge bug #508607. (unixinst.mak [1.20.2.2]: 2002/02/06 07:19:17 +jackiem) + - make symlinks to equivalent manpages with relative rather than +absolute paths to facilitate moving the directory to another location. +Closes SourceForge Bug #416131. (unixinst.mak [1.20.2.7]: 2002/04/18 +01:56:12 giles) + - Adds -p parameter to mkdir to suppress warning messages when the +target already exists and to create parent directories automatically if they +don't exist. Fixes Sourceforge bug #518742. (unix-dll.mak [1.6.2.2], +unixinst.mak [1.20.2.9]: 2002/04/19 01:10:40 jack) + +Improves branch handling in cvs2hist, raph's patch from HEAD. Also documents +the new options. (toolbin/cvs2hist.py [1.9.2.1]: 2002/02/06 23:31:10 giles) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(all-arch.mak [1.9.2.2], +bcwin32.mak [1.12.2.3], cfonts.mak [1.2.6.1], contrib.mak [1.24.2.1], +devs.mak [1.47.2.3], dvx-gcc.mak [1.12.2.3], dvx-head.mak [1.2.6.1], +dvx-tail.mak [1.5.2.1], dwmain.rc [1.2.6.1], dwsetup.rc [1.5.2.1], +dwuninst.rc [1.3.6.1], gs.mak [1.5.2.3], gs16spl.rc [1.2.6.1], +gsdll2.rc [1.2.6.1], gsdll32.rc [1.2.6.1]: 2002/02/22 19:45:55 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(gsos2.rc [1.2.6.1], +gspmdrv.rc [1.2.6.1], gswin.rc [1.2.6.1], icclib.mak [1.3.2.2], +ijs.mak [1.2.2.2], int.mak [1.50.2.3], jpeg.mak [1.4.2.1], +lib.mak [1.53.2.2], libpng.mak [1.10.2.2], macos-fw.mak [1.1.2.2], +macos-mcp.mak [1.3.2.3], macosx.mak [1.3.2.2], msvc32.mak [1.20.2.4], +msvccmd.mak [1.6.2.1], msvclib.mak [1.16.2.2], msvctail.mak [1.6.2.1], +openvms.mak [1.16.2.3], openvms.mmk [1.12.2.1], os2.mak [1.19.2.3], +pcwin.mak [1.2.6.1], ugcclib.mak [1.13.2.3], unix-aux.mak [1.5.2.1], +unix-dll.mak [1.6.2.1], unix-end.mak [1.2.6.1], unix-gcc.mak [1.23.2.4], +unixansi.mak [1.16.2.4], unixhead.mak [1.2.6.1], unixinst.mak [1.20.2.3], +unixlink.mak [1.3.4.1], version.mak [1.36.2.3], watc.mak [1.16.2.2], +watclib.mak [1.13.2.3], watcw32.mak [1.13.2.3], wccommon.mak [1.3.6.1], +wctail.mak [1.3.2.2], winint.mak [1.8.2.1], winlib.mak [1.12.2.2], +winplat.mak [1.2.6.1], wmin.mak [1.2.6.1], zlib.mak [1.3.2.1]: 2002/02/22 +19:45:58 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(toolbin/3way.tcl [1.3.6.1], +toolbin/cvs2hist.py [1.9.2.2], toolbin/errlist.tcl [1.3.6.1], +toolbin/gsindent [1.3.6.1], toolbin/gsmake.tcl [1.5.6.1], +toolbin/gssubst [1.1.4.1], toolbin/headers.tcl [1.3.6.1], +toolbin/leaks.tcl [1.3.6.1], toolbin/makegnu.tcl [1.3.6.1], +toolbin/makeset.tcl [1.10.2.3], toolbin/many2pdf.tcl [1.1.4.1], +toolbin/pdfinflt.ps [1.1.2.1], toolbin/pre [1.11.2.1], +toolbin/precheck.tcl [1.3.6.1], toolbin/suite.tcl [1.3.6.1], +toolbin/tmake.tcl [1.3.6.1]: 2002/02/22 19:46:03 ray) + +Removes auto-generated plain text versions of html documentation from cvs +and makes their creation an explicit part of the release process. +(toolbin/pre [1.11.2.2]: 2002/02/25 21:43:20 giles) + +Add gdevpccm.obj to the display device dependencies. (devs.mak [1.47.2.4]: +2002/02/28 22:22:25 ghostgum) + +When building the distribution archive, don't flag an error if gsv16spl.exe +doesn't exist. This file is only needed for Win32s which is no longer +supported. (winint.mak [1.8.2.2]: 2002/02/28 22:23:03 ghostgum) + +Update msvc32.mak and documentation to support compilation with Microsoft +Visual Studio .NET. This requires MSVC_VERSION=7. (msvc32.mak [1.20.2.5]: +2002/03/12 07:21:30 ghostgum) + +Replace Windows icons with new versions that include 48x48 pixel and 32-bit +versions for Windows XP. Change the 16x16 pixel icons to use the full 'g' +instead of just the head. Use a restricted icon gswin16.ico for WinZip SE +which can't handle the new icon. (bcwin32.mak [1.12.2.4], +dwmain.rc [1.2.6.2], dwsetup.rc [1.5.2.2], dwuninst.rc [1.3.6.2], +gs16spl.rc [1.2.6.2], gsdll32.rc [1.2.6.2], gswin.rc [1.2.6.2], +gswin32.rc [1.1.6.1], gswin386.rc [1.1.6.1], winint.mak [1.8.2.3]: +2002/03/30 01:33:03 ghostgum) + +gs_cjk project : bugfix for nested FMapType4/5 OCF. Fix by Suzuki Toshiya. +(lib.mak [1.53.2.3]: 2002/04/02 13:29:35 mpsuzuki) + +gs-cjk project : add new documents CJK.htm and CJKTTCID.htm, add references +to Fonts.htm, Readme.htm, Use.htm add targets to unixinst.mak. Fix by Suzuki +Toshiya and Taiji Yamada. (unixinst.mak [1.20.2.4]: 2002/04/02 14:26:39 +mpsuzuki) + +gs-cjk project : add CIDFnmap samples add references to Develop.htm add +targets to unixinst.mak (unixinst.mak [1.20.2.5]: 2002/04/02 14:47:42 +mpsuzuki) + +gs-cjk project : add CJK samples and fix install targets, by Taiji Yamada +(unixinst.mak [1.20.2.6]: 2002/04/02 14:53:39 mpsuzuki) + +Create the bboxutil pseudo-device to allow inclusion of the bbox device for +internal use by those drivers that require it without putting it on the list +of devices. Also some minor makefile cleanup. Patch by Ray Johnston from +7.20. (devs.mak [1.47.2.5], lib.mak [1.53.2.4], macosx.mak [1.3.2.3], +msvc32.mak [1.20.2.6], openvms.mak [1.16.2.4], os2.mak [1.19.2.4], +unix-gcc.mak [1.23.2.5], unixansi.mak [1.16.2.5]: 2002/04/10 00:53:33 giles) + +Adds support for compilation against a standard shared libjpeg. It is +believed that non-baseline compliant DCTEncoded data, permitted by early +versions of postscript, is now extremely rare and the prohibition against +SHARE_JPEG=1 may reasonably be removed. The autoconf build will prefer a +local copy of the jpeg source, in which case the D_MAX_BLOCKS_IN_MCU patch +will still be applied. If no such local copy is found, it will try to find a +shared library on the system. For all unix builds, if $(JSRCDIR)/jmemsys.h +cannot be found, we define DONT_HAVE_JMEMSYS_H and include our own versions +of the libjpeg memory manager prototypes. The default allocator in the +shared library is overridden by the ghostscript one at link-time. While this +may be implementation-dependent, it appears to function as desired on at +least GNU/Linux and Solaris. Also changes the autoconf build to prefer local +zlib and libpng source, and cleans up some variable names. Patch by Raph +Levien from 7.20. (dvx-gcc.mak [1.12.2.4], macosx.mak [1.3.2.4], +ugcclib.mak [1.13.2.4], unix-aux.mak [1.5.2.2], unixansi.mak [1.16.2.6]: +2002/04/10 01:44:27 giles) + +remove the warning against SHARE_JPEG=1, omitted in the last commit +(unix-gcc.mak [1.23.2.6]: 2002/04/10 02:33:31 giles) + +use relative paths for the smoke test data files +(toolbin/smoke.ps [1.1.6.1]: 2002/04/10 02:33:31 giles) + +makefile cleanup. remove a redundant -fno-common from the linker flags +(unix-gcc.mak [1.23.2.7]: 2002/04/10 02:37:36 giles) + +add a missing Id: line (toolbin/smoke.ps [1.1.6.2]: 2002/04/10 09:17:30 +giles) + +mark this as a GNU version and bump the release number +(version.mak [1.36.2.4]: 2002/04/15 05:47:56 giles) + +update the libpng version (macosx.mak [1.3.2.5]: 2002/04/15 19:24:22 giles) + +Documentation updates for a revised 7.05rc1. (version.mak [1.36.2.5]: +2002/04/17 01:08:44 giles) + +Check release dates in UTC to avoid conflicts due to timezone. +(toolbin/pre [1.11.2.3]: 2002/04/17 01:16:22 giles) + +Remove the chess.ps example file due to license ambiguity. +(unixinst.mak [1.20.2.8]: 2002/04/18 06:01:27 giles) + +Committing in . Back-ports from the main stream such that OpenVMS is happy +Modified Files: Tag: GS_7_0X gs/src/devs.mak gs/src/gschar0.c +gs/src/gserrors.h gs/src/imainarg.c +---------------------------------------------------------------------- +(devs.mak [1.47.2.6]: 2002/04/18 09:58:45 joukj) + +Update libpng version numbers to the latest 1.2.2. (all-arch.mak [1.9.2.3], +bcwin32.mak [1.12.2.5], dvx-gcc.mak [1.12.2.5], libpng.mak [1.10.2.3], +macos-mcp.mak [1.3.2.4], macosx.mak [1.3.2.6], msvc32.mak [1.20.2.7], +msvclib.mak [1.16.2.3], openvms.mak [1.16.2.5], openvms.mmk [1.12.2.2], +os2.mak [1.19.2.5], ugcclib.mak [1.13.2.5], unix-gcc.mak [1.23.2.8], +unixansi.mak [1.16.2.7], watc.mak [1.16.2.3], watclib.mak [1.13.2.4], +watcw32.mak [1.13.2.4]: 2002/04/19 06:32:22 giles) + +Add the 'stp' driver from the gimp-print project, and compile it in by +default from the autoconf build if libgimprint is found. +(unix-gcc.mak [1.23.2.9], unixansi.mak [1.16.2.8]: 2002/04/19 22:23:09 +giles) + +bump the release date in the makefile (version.mak [1.36.2.6]: 2002/04/19 +22:39:53 giles) + +Update licensing information in the Windows distribution archive. +(winint.mak [1.8.2.4]: 2002/04/20 10:14:02 ghostgum) + +Update licensing information in Windows distribution archive. +(winint.mak [1.8.2.5]: 2002/04/20 10:32:37 ghostgum) + +Update licensing information in Windows files. (dwsetup.def [1.2.6.1], +dwsetup.rc [1.5.2.3], dwuninst.def [1.2.6.1]: 2002/04/20 22:11:39 ghostgum) + +Update version date for release.Update version date for release.Update +version date for release. (version.mak [1.36.2.7]: 2002/04/22 21:16:23 +giles) + +Change the license reference in the installer dialog and update the +copyright year. (dwsetup.rc [1.5.2.4]: 2002/04/23 01:41:13 giles) + +</pre><h2><a name="7.05-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - Fixes pdf2dsc to open input file before .setsafe, so that it works +even when SAFER locks down read file access. Backport patch by raph from +HEAD. (lib/pdf2dsc.ps [1.3.4.1]: 2002/02/13 23:29:52 giles) + - ps2epsi generated an invalid DSC header. Also, encapsulate the +original file in %%Begin/EndDocument t o protect against confusion with +multiple DSC comments. Patch from Russell Lang. (lib/ps2epsi [1.7.2.1]: +2002/04/22 20:18:24 giles) + - Calculate more accurate BoundingBox and prevent invalidaccess by +using an 8-bit deep preview image. Patch from Ray Johnston. SF bug #525508. +(lib/ps2epsi.ps [1.5.2.3]: 2002/04/22 20:30:39 giles) + +Update licensing information, with permission from Thomas Merz. Also +updates the author's email address and removes the obsolete physical +address. +(lib/viewjpeg.ps [1.1.6.1]: 2002/02/08 09:44:43 giles) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(bench.c [1.4.4.1], +dxmain.c [1.7.2.1], dxmainc.c [1.4.2.2], echogs.c [1.3.2.1], +lib/Fontmap.ATB [1.2.6.1], lib/Fontmap.ATM [1.2.6.1], +lib/Fontmap.GS [1.2.6.1], lib/Fontmap.OS2 [1.2.6.1], +lib/Fontmap.SGI [1.2.6.1], lib/Fontmap.Sol [1.2.6.1], +lib/Fontmap.Ult [1.2.6.1], lib/addxchar.ps [1.2.6.1], +lib/align.ps [1.2.6.1], lib/bdftops.ps [1.3.2.1], lib/caption.ps [1.2.6.1], +lib/cid2code.ps [1.3.4.1], lib/docie.ps [1.2.6.1], lib/errpage.ps [1.2.6.1], +lib/font2c.ps [1.3.2.1], lib/font2pcl.ps [1.2.6.1], lib/gslp.ps [1.2.6.1], +lib/gsnup.ps [1.2.6.1], lib/image-qa.ps [1.3.2.1], lib/impath.ps [1.3.4.1], +lib/jispaper.ps [1.2.6.1], lib/lines.ps [1.2.6.1], +lib/markhint.ps [1.2.6.1], lib/markpath.ps [1.2.6.1], +lib/packfile.ps [1.2.6.1], lib/pcharstr.ps [1.2.6.1], +lib/pdf2dsc.ps [1.3.4.2], lib/pdfopt.ps [1.10.2.1], +lib/pdfwrite.ps [1.7.2.1], lib/pfbtopfa.ps [1.2.6.1], +lib/ppath.ps [1.2.6.1], lib/pphs.ps [1.3.2.1], lib/ps2ai.ps [1.2.6.1], +lib/ps2ascii.ps [1.3.2.1], lib/ps2epsi.ps [1.5.2.1], +lib/showchar.ps [1.2.6.1], lib/stcinfo.ps [1.2.6.1], +lib/stcolor.ps [1.2.6.1], lib/stocht.ps [1.3.6.1], +lib/traceimg.ps [1.2.6.1], lib/traceop.ps [1.2.6.1], +lib/type1enc.ps [1.2.6.1], lib/type1ops.ps [1.2.6.1], +lib/uninfo.ps [1.2.6.1], lib/unprot.ps [1.2.6.1], lib/viewcmyk.ps [1.2.6.1], +lib/viewgif.ps [1.2.6.1], lib/viewjpeg.ps [1.1.6.2], +lib/viewmiff.ps [1.2.6.1], lib/viewpbm.ps [1.2.6.1], +lib/viewpcx.ps [1.2.6.1], lib/viewps2a.ps [1.2.6.1], +lib/wftopfa.ps [1.2.6.1], lib/winmaps.ps [1.2.6.1], lib/wrfont.ps [1.2.6.1], +lib/zeroline.ps [1.2.6.1]: 2002/02/22 19:45:54 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(genarch.c [1.2.6.1], +genconf.c [1.4.4.1], gendev.c [1.2.6.1], genht.c [1.2.6.1], +geninit.c [1.3.6.1], gp_dvx.c [1.4.2.1], gp_iwatc.c [1.6.2.1], +gp_mac.c [1.1.4.1], gp_mktmp.c [1.2.6.1], gp_msdll.c [1.1.2.1], +gp_mshdl.c [1.2.6.1], gp_msio.c [1.3.4.1], gp_mslib.c [1.3.2.1], +gp_mspol.c [1.1.2.1], gp_msprn.c [1.1.2.1], gp_mswin.c [1.7.2.1], +gp_ntfs.c [1.5.2.3], gp_os2.c [1.10.2.2], gp_os9.c [1.4.2.1], +gp_stdia.c [1.3.2.1], gp_stdin.c [1.2.2.1], gp_sysv.c [1.2.6.1], +gp_unix.c [1.5.2.1], gp_vms.c [1.7.2.2], gp_wgetv.c [1.4.2.1], +gp_win32.c [1.2.6.1], gp_wsync.c [1.2.6.1], gs16spl.c [1.2.6.1], +gsdll.c [1.6.2.1], gserver.c [1.2.6.1], gspmdrv.c [1.2.6.1]: 2002/02/22 +19:45:57 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(scfdgen.c [1.2.6.1], +zdosio.c [1.2.6.1], ziodevs.c [1.5.2.1], ziodevsc.c [1.3.2.1]: 2002/02/22 +19:46:00 ray) + +gs_cjk project : replace "min" & "max" by ".min" & ".max". Fix by +Suzuki Toshiya. (lib/bdftops.ps [1.3.2.2], lib/font2pcl.ps [1.2.6.2], +lib/gslp.ps [1.2.6.2], lib/packfile.ps [1.2.6.2], lib/pdfopt.ps [1.10.2.2], +lib/prfont.ps [1.2.6.1], lib/ps2ascii.ps [1.3.2.2], +lib/traceimg.ps [1.2.6.2], lib/viewcmyk.ps [1.2.6.2], +lib/viewpbm.ps [1.2.6.2], lib/viewpcx.ps [1.2.6.2]: 2002/04/02 13:57:27 +mpsuzuki) + +add missing Id: lines (lib/acctest.ps [1.1.6.1], lib/decrypt.ps [1.1.6.1], +lib/landscap.ps [1.1.6.1], lib/level1.ps [1.1.6.1], lib/pf2afm.ps [1.3.2.1], +lib/printafm.ps [1.1.6.1]: 2002/04/10 09:22:58 giles) + +adds missing Id: lines. (gp_mac.c [1.1.4.2]: 2002/04/10 09:33:26 giles) + +Updating licensing information in Windows files. (gp_wgetv.c [1.4.2.2]: +2002/04/20 22:11:39 ghostgum) + +Use sed in preference to tail to avoid conflicts between posix and +traditional implementations. Patch from Paul Eggert. Closes SourceForge bug +#521597. (lib/unix-lpr.sh [1.1.6.1]: 2002/04/22 19:54:55 giles) + +Add new license header to some files. +(gp_macio.c [1.2.4.2]: 2002/04/23 01:32:26 giles) + +</pre><h2><a name="7.05-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - Changes XPutImage to use xdev->vinfo->depth rather than +xdev->color_info.depth. These are the same in all cases except a visual +depth of 15, in which the latter is 16. (gdevx.c [1.8.2.2]: 2002/02/20 +21:11:49 raph) + - improve pswrite with compatibility to interpreters which don't +consume ASCII85Decode EOD when reader stops immediately before it. Source +Forge bug #525044 "pswrite incompatible with some RIPs". Thanks to Paul +Vojta for spotting this. (gdevps.c [1.19.2.2]: 2002/03/13 17:09:11 igor) + - epswrite was incompatible with HP LaserJet 4000 TN. Source Forge +bug #529202 "Wrong PostScript in pswrite prolog". (gdevpsu.c [1.7.2.2]: +2002/03/20 20:17:31 igor) + - Fixes incorrect margins on IJS devices. Thanks to Dave Suffield +for the patch. (gdevijs.c [1.1.2.3]: 2002/03/28 20:44:53 raph) + - Initializes the green and blue components of cmap and their +multipliers. A floating point exception was occuring on static gray X +displays when these were left at 0. (gdevxcmp.c [1.2.6.2]: 2002/04/19 +00:46:41 jack) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(gdev3852.c [1.3.2.1], +gdev3b1.c [1.2.6.1], gdev4081.c [1.3.2.1], gdev8510.c [1.3.2.1], +gdev8bcm.c [1.2.6.1], gdev8bcm.h [1.2.6.1], gdevadmp.c [1.3.2.1], +gdevbit.c [1.2.6.1], gdevbj10.c [1.4.2.1], gdevbjc.h [1.2.6.1], +gdevbjcl.c [1.2.6.1], gdevbjcl.h [1.2.6.1], gdevbmp.c [1.4.2.1], +gdevbmp.h [1.2.6.1], gdevbmpa.c [1.3.6.1], gdevbmpc.c [1.2.6.1], +gdevccr.c [1.2.6.1], gdevcdj.c [1.5.2.1], gdevcfax.c [1.3.6.1], +gdevcgm.c [1.2.6.2], gdevcgml.c [1.2.6.1], gdevcgml.h [1.2.6.1], +gdevcgmx.h [1.2.6.1], gdevcif.c [1.3.2.1], gdevclj.c [1.2.6.1], +gdevcljc.c [1.4.2.1], gdevcp50.c [1.3.2.1], gdevcslw.c [1.2.6.1], +gdevdcrd.c [1.2.6.1], gdevdcrd.h [1.2.6.1], gdevdfax.c [1.4.2.1], +gdevdjtc.c [1.3.2.1], gdevdm24.c [1.3.2.1], gdevdsp.c [1.5.2.2], +gdevegaa.asm [1.2.6.1], gdevepsc.c [1.3.2.1], gdevepsn.c [1.3.2.1], +gdevescp.c [1.3.2.1], gdevevga.c [1.2.6.1], gdevfax.c [1.2.6.1], +gdevfax.h [1.2.6.1], gdevherc.c [1.2.6.1], gdevhl7x.c [1.5.2.1], +gdevijs.c [1.1.2.2], gdevimgn.c [1.4.2.1], gdevjpeg.c [1.3.2.1], +gdevl256.c [1.3.6.1], gdevl31s.c [1.2.6.1], gdevlbp8.c [1.3.2.1], +gdevlj56.c [1.3.2.1], gdevlp8k.c [1.2.6.1], gdevlxm.c [1.2.6.1], +gdevmac.h [1.1.4.1], gdevmacxf.c [1.1.4.1], gdevmeds.c [1.2.6.1], +gdevmeds.h [1.2.6.1], gdevmgr.c [1.2.6.1], gdevmgr.h [1.2.6.1], +gdevmiff.c [1.3.2.1], gdevmswn.c [1.4.2.1], gdevmswn.h [1.2.6.1], +gdevmsxf.c [1.2.6.1], gdevn533.c [1.3.2.1], gdevo182.c [1.3.2.1], +gdevokii.c [1.3.2.1], gdevos2p.c [1.4.2.1], gdevp14.h [1.1.2.1], +gdevp2up.c [1.2.6.1], gdevpbm.c [1.3.6.1], gdevpccm.c [1.2.6.1], +gdevpccm.h [1.3.6.1], gdevpcfb.c [1.2.6.1], gdevpcfb.h [1.2.6.1], +gdevpcl.c [1.5.2.1], gdevpcl.h [1.5.2.1], gdevpcx.c [1.2.6.1], +gdevpe.c [1.2.6.1], gdevphex.c [1.2.6.1], gdevpjet.c [1.3.2.1], +gdevpm.c [1.4.2.1], gdevpm.h [1.2.6.1], gdevpng.c [1.4.2.1], +gdevpnga.c [1.4.2.1], gdevps.c [1.19.2.1], gdevpsdf.h [1.9.4.1], +gdevpsdi.c [1.15.2.1], gdevpsdp.c [1.8.6.1], gdevpsds.c [1.4.6.1], +gdevpsds.h [1.4.6.1], gdevpsdu.c [1.10.2.1], gdevpsim.c [1.6.2.1], +gdevpsu.c [1.7.2.1], gdevpsu.h [1.4.2.1], gdevpx.c [1.6.2.1], +gdevpxat.h [1.3.6.1], gdevpxen.h [1.3.6.1], gdevpxop.h [1.2.6.1], +gdevpxut.c [1.2.6.1], gdevpxut.h [1.2.6.1], gdevs3ga.c [1.2.6.1], +gdevsco.c [1.3.6.1], gdevsj48.c [1.2.6.1], gdevsnfb.c [1.3.2.1], +gdevsppr.c [1.5.2.1], gdevstc.c [1.2.6.1], gdevstc.h [1.2.6.1], +gdevstc1.c [1.2.6.1], gdevstc2.c [1.2.6.1], gdevstc3.c [1.2.6.1], +gdevstc4.c [1.2.6.1], gdevsun.c [1.2.6.1], gdevsunr.c [1.4.2.1], +gdevsvga.c [1.2.6.1], gdevsvga.h [1.2.6.1], gdevtfax.c [1.4.6.1], +gdevtfax.h [1.4.6.1], gdevtfnx.c [1.5.2.1], gdevtifs.c [1.4.2.1], +gdevtifs.h [1.3.6.1], gdevtknk.c [1.3.2.1], gdevupd.c [1.5.2.1], +gdevvglb.c [1.3.6.1], gdevwddb.c [1.3.2.1], gdevwdib.c [1.3.2.1], +gdevwpr2.c [1.9.2.1], gdevwprn.c [1.3.2.1], gdevx.c [1.8.2.3], +gdevx.h [1.4.6.1], gdevxalt.c [1.2.6.2], gdevxcmp.c [1.2.6.1], +gdevxcmp.h [1.2.6.1], gdevxini.c [1.10.4.1], gdevxres.c [1.3.6.1], +gdevxxf.c [1.5.6.1]: 2002/02/22 19:45:55 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(png_.h [1.2.6.1], +x_.h [1.3.2.1]: 2002/02/22 19:46:00 ray) + +Add multiple inclusion protection to headers files which were missing it. +(gdevmacpictop.h [1.1.4.1], gdevmacttf.h [1.1.4.1], png_.h [1.2.6.2]: +2002/04/10 09:13:11 giles) + +adds missing Id: lines. (gdevdsp.c [1.5.2.3], gdevhpij.c [1.3.2.1], +gdevhpij.h [1.2.4.1], gdevmac.c [1.1.4.2], gdevmac.h [1.1.4.2], +gdevmacxf.c [1.1.4.2], gdevphex.c [1.2.6.2]: 2002/04/10 09:33:25 giles) + +Add new license header to some files. +(gdevmac.c [1.1.4.3]: 2002/04/23 01:32:26 giles) + +</pre><h2><a name="7.05-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - Fix : pdfwrite wrongly computed text width for fonts with unusual +font matrix. Source Forge bug "[ 535401 ] euro glyph misplaced after +pdfwrite". (gdevpdff.c [1.22.2.2], gdevpdfs.c [1.7.2.2]: 2002/04/11 15:49:45 +igor) + - Fix : pdfwrite wrongly computed line width for fonts with +PaintType 2. (gdevpdfs.c [1.7.2.3]: 2002/04/16 10:11:30 igor) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(gdevpdf.c [1.38.2.1], +gdevpdfb.c [1.6.2.1], gdevpdfc.c [1.17.2.1], gdevpdfd.c [1.16.2.1], +gdevpdfe.c [1.10.2.1], gdevpdff.c [1.22.2.1], gdevpdff.h [1.11.2.1], +gdevpdfg.c [1.14.2.1], gdevpdfg.h [1.9.6.1], gdevpdfi.c [1.24.2.1], +gdevpdfj.c [1.7.2.1], gdevpdfm.c [1.14.2.1], gdevpdfo.c [1.9.2.1], +gdevpdfo.h [1.6.4.1], gdevpdfp.c [1.19.2.1], gdevpdfr.c [1.4.6.1], +gdevpdfs.c [1.7.2.1], gdevpdft.c [1.36.2.1], gdevpdfu.c [1.16.2.1], +gdevpdfv.c [1.10.2.1], gdevpdfw.c [1.12.2.1], gdevpdfx.h [1.34.2.1]: +2002/02/22 19:45:56 ray) + +</pre><h2><a name="7.05-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(lib/pdf_base.ps [1.14.2.1], +lib/pdf_draw.ps [1.36.2.1], lib/pdf_font.ps [1.23.2.1], +lib/pdf_main.ps [1.35.2.1], lib/pdf_ops.ps [1.17.2.2]: 2002/02/22 19:45:55 +ray) + +gs_cjk project : CIDWProc sample implementation by Suzuki Toshiya. +(lib/pdf_font.ps [1.23.2.2]: 2002/04/02 13:53:16 mpsuzuki) + +gs_cjk project : replace "min" & "max" by ".min" & ".max". Fix by +Suzuki Toshiya. (lib/pdf_font.ps [1.23.2.3], lib/pdf_main.ps [1.35.2.2], +lib/pdf_sec.ps [1.5.2.1]: 2002/04/02 13:57:27 mpsuzuki) + +gs_cjk project : Automatic bold & italic for non-CID fonts in PDF. Fix +by Taiji Yamada. (lib/pdf_font.ps [1.23.2.4]: 2002/04/02 13:58:40 mpsuzuki) + +gs-cjk project : update comments on "PDF reference", third edition fixes +wrong notes about /DW in second edition. Fix by Suzuki Toshiya. +(lib/pdf_font.ps [1.23.2.5]: 2002/04/03 07:27:49 mpsuzuki) + +disable the new auto-bold and auto-slant functions for non-cid fonts, +pending improved detection of when this is necessary. +(lib/pdf_font.ps [1.23.2.6]: 2002/04/16 06:11:29 giles) + +</pre><h2><a name="7.05-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Prevent .locksafe (and .setsafe) from resetting the current +pagedevice. Fixes SourceForge bug #516379. (lib/gs_init.ps [1.40.2.5]: +2002/02/14 01:25:59 rayjj) + - -dSAFER mode to allow opening a file that references the parent +directory as long as the PermitFileReading strings include a (*) string +(allow all reading). Corresponds to rev 1.19 change. (zfile.c [1.11.2.3]: +2002/04/11 20:05:01 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(bfont.h [1.3.6.1], +btoken.h [1.4.6.1], ccfont.h [1.2.6.1], dpmain.c [1.5.2.1], +dscparse.c [1.7.2.1], dscparse.h [1.6.2.1], dstack.h [1.3.4.1], +dwdll.c [1.2.2.1], dwdll.h [1.3.2.1], dwimg.c [1.3.2.1], dwimg.h [1.4.2.1], +dwinst.cpp [1.2.6.1], dwinst.h [1.2.6.1], dwmain.c [1.6.2.2], +dwmain.h [1.3.2.1], dwmainc.c [1.8.2.2], dwnodll.c [1.1.2.1], +dwreg.c [1.1.2.1], dwreg.h [1.1.2.1], dwsetup.cpp [1.5.6.1], +dwsetup.h [1.2.6.1], dwtext.c [1.5.2.1], dwtext.h [1.4.2.1], +dwuninst.cpp [1.2.6.1], dwuninst.h [1.2.6.1], errors.h [1.4.2.1], +estack.h [1.2.6.1], examples/waterfal.ps [1.3.2.1], files.h [1.4.2.1], +gdevdsp.h [1.1.2.1], gdevdsp2.h [1.2.2.1], lib/gs_agl.ps [1.2.6.1], +lib/gs_btokn.ps [1.5.2.1], lib/gs_ccfnt.ps [1.5.2.1], +lib/gs_ce_e.ps [1.2.6.1], lib/gs_cff.ps [1.10.2.1], +lib/gs_cidcm.ps [1.5.2.1], lib/gs_cidfn.ps [1.18.4.1], +lib/gs_cmap.ps [1.11.2.1], lib/gs_cmdl.ps [1.2.6.1], +lib/gs_css_e.ps [1.2.6.1], lib/gs_dbt_e.ps [1.2.6.1], +lib/gs_diskf.ps [1.2.6.1], lib/gs_dpnxt.ps [1.2.6.1], +lib/gs_dps.ps [1.4.6.1], lib/gs_dps1.ps [1.2.6.1], lib/gs_dps2.ps [1.3.4.1], +lib/gs_dscp.ps [1.4.2.1], lib/gs_epsf.ps [1.2.6.1], +lib/gs_fform.ps [1.2.6.1], lib/gs_fonts.ps [1.13.2.2], +lib/gs_frsd.ps [1.4.6.1], lib/gs_icc.ps [1.2.2.1], +lib/gs_il1_e.ps [1.2.6.1], lib/gs_il2_e.ps [1.2.6.1], +lib/gs_init.ps [1.40.2.6], lib/gs_kanji.ps [1.2.6.1], +lib/gs_ksb_e.ps [1.2.6.1], lib/gs_l2img.ps [1.2.6.1], +lib/gs_lev2.ps [1.7.2.3], lib/gs_lgo_e.ps [1.3.6.1], +lib/gs_lgx_e.ps [1.2.6.1], lib/gs_ll3.ps [1.10.2.1], +lib/gs_mex_e.ps [1.2.6.1], lib/gs_mgl_e.ps [1.3.6.1], +lib/gs_mro_e.ps [1.2.6.1], lib/gs_pdf_e.ps [1.2.6.1], +lib/gs_pdfwr.ps [1.11.2.1], lib/gs_pfile.ps [1.2.6.1], +lib/gs_rdlin.ps [1.2.6.1], lib/gs_res.ps [1.16.2.1], +lib/gs_setpd.ps [1.8.2.2], lib/gs_statd.ps [1.5.2.1], +lib/gs_std_e.ps [1.2.6.1], lib/gs_sym_e.ps [1.2.6.1], +lib/gs_trap.ps [1.3.6.1], lib/gs_ttf.ps [1.9.2.1], +lib/gs_typ32.ps [1.3.2.1], lib/gs_typ42.ps [1.2.6.1], +lib/gs_type1.ps [1.5.2.1], lib/gs_wan_e.ps [1.2.6.1], +lib/gs_wl1_e.ps [1.2.6.1], lib/gs_wl2_e.ps [1.2.6.1], +lib/gs_wl5_e.ps [1.2.6.1]: 2002/02/22 19:45:54 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(ghost.h [1.2.6.1], +gs.c [1.6.2.1], ialloc.c [1.2.6.1], ialloc.h [1.2.6.1], iapi.c [1.1.2.2], +iapi.h [1.2.2.1], iastate.h [1.2.6.1], iastruct.h [1.2.6.1], +ibnum.c [1.2.6.1], ibnum.h [1.2.6.1], iccfont.c [1.2.6.2], +iccinit0.c [1.2.6.1], icfontab.c [1.2.6.1], ichar.h [1.3.6.1], +ichar1.h [1.3.6.1], icharout.h [1.3.4.1], icid.h [1.2.6.1], +icie.h [1.3.2.1], icolor.h [1.2.6.1], iconf.c [1.3.2.1], iconf.h [1.1.6.1], +icontext.c [1.6.6.2], icontext.h [1.2.6.1], icremap.h [1.2.6.1], +icsmap.h [1.2.6.1], icstate.h [1.4.6.2], iddict.h [1.2.6.1], +iddstack.h [1.2.6.1], idebug.c [1.4.2.1], idebug.h [1.2.6.1], +idict.c [1.4.4.1], idict.h [1.2.6.1], idictdef.h [1.2.6.1], +idisp.c [1.2.2.1], idisp.h [1.1.2.1], idosave.h [1.2.6.1], +idparam.c [1.3.6.1], idparam.h [1.3.6.1], idsdata.h [1.2.6.1], +idstack.c [1.2.6.1], idstack.h [1.2.6.1], iesdata.h [1.2.6.1], +iestack.h [1.2.6.1], ifcid.h [1.2.6.1], ifilter.h [1.3.6.1], +ifilter2.h [1.2.6.1], ifont.h [1.6.4.1], ifont1.h [1.3.6.1], +ifont2.h [1.2.6.1], ifont42.h [1.3.6.1], ifrpred.h [1.2.6.1], +ifunc.h [1.3.6.3], ifwpred.h [1.2.6.1], igc.c [1.5.2.1], igc.h [1.2.6.1], +igcref.c [1.3.2.1], igcstr.c [1.3.6.1], igcstr.h [1.2.6.1], +igstate.h [1.3.6.1], iht.h [1.2.6.1], iimage.h [1.2.6.1], +iimage2.h [1.2.6.1], iinit.c [1.3.4.1], iinit.h [1.2.6.1], +ilevel.h [1.2.6.1], ilocate.c [1.4.2.1], imain.c [1.19.2.1], +imain.h [1.3.2.1], imainarg.c [1.13.2.2], imainarg.h [1.3.2.1], +imemory.h [1.2.6.1], iminst.h [1.5.2.1], iname.c [1.3.6.1], +iname.h [1.2.6.1], inamedef.h [1.2.6.1], inameidx.h [1.2.6.1], +inames.h [1.2.6.1], inamestr.h [1.2.6.1], inobtokn.c [1.2.6.1], +inouparm.c [1.2.6.1], interp.c [1.8.2.1], interp.h [1.2.6.1], +iosdata.h [1.2.6.1], iostack.h [1.2.6.1], ipacked.h [1.2.6.1], +iparam.c [1.5.6.1], iparam.h [1.2.6.1], iparray.h [1.2.6.1], +ipcolor.h [1.2.6.1], ireclaim.c [1.3.2.1], iref.h [1.5.4.1], +isave.c [1.3.6.1], isave.h [1.2.6.1], iscan.c [1.5.6.1], iscan.h [1.4.6.1], +iscanbin.c [1.5.6.1], iscanbin.h [1.2.6.1], iscannum.c [1.3.2.1], +iscannum.h [1.2.6.1], isdata.h [1.2.6.1], isstate.h [1.2.6.1], +istack.c [1.2.6.1], istack.h [1.2.6.1], istkparm.h [1.2.6.1], +istream.h [1.2.6.1], istruct.h [1.2.6.1], itoken.h [1.2.6.1], +iutil.c [1.3.2.1], iutil.h [1.2.6.1], iutil2.c [1.2.6.2], +iutil2.h [1.2.6.2], ivmem2.h [1.2.6.1], ivmspace.h [1.2.6.1], +main.h [1.3.2.1], oparc.h [1.2.6.1], opcheck.h [1.2.6.1], opdef.h [1.3.2.1], +oper.h [1.2.6.1], opextern.h [1.2.6.1]: 2002/02/22 19:45:57 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(ostack.h [1.2.6.1], +sbhc.c [1.3.4.1], sbhc.h [1.2.6.1], sbwbs.c [1.2.6.1], sbwbs.h [1.2.6.1], +sfilter1.c [1.6.4.1], shcgen.c [1.2.6.1], shcgen.h [1.2.6.1], +smtf.c [1.2.6.1], smtf.h [1.2.6.1], store.h [1.2.6.1], zarith.c [1.4.6.1], +zarray.c [1.2.6.1], zbfont.c [1.7.4.1], zbseq.c [1.4.6.1], +zcfont.c [1.2.6.1], zchar.c [1.4.2.1], zchar1.c [1.7.2.1], +zchar2.c [1.2.6.1], zchar32.c [1.2.6.1], zchar42.c [1.3.4.1], +zcharout.c [1.4.4.1], zcharx.c [1.3.6.1], zcid.c [1.3.6.1], +zcie.c [1.5.2.1], zcolor.c [1.4.6.1], zcolor1.c [1.3.6.1], +zcolor2.c [1.4.2.1], zcontext.c [1.7.2.1], zcontrol.c [1.3.6.2], +zcrd.c [1.2.6.1], zcsdevn.c [1.5.2.2], zcsindex.c [1.3.6.1], +zcspixel.c [1.2.6.1], zcssepr.c [1.8.2.1], zdevcal.c [1.3.6.1], +zdevice.c [1.3.6.2], zdevice2.c [1.4.2.2], zdfilter.c [1.2.2.1], +zdict.c [1.3.6.1], zdouble.c [1.2.6.1], zdpnext.c [1.3.6.1], +zdps.c [1.4.6.1], zdps1.c [1.3.4.1], zdscpars.c [1.12.2.1], +zfarc4.c [1.2.2.1], zfbcp.c [1.3.6.1], zfcid.c [1.11.4.1], +zfcid0.c [1.7.2.1], zfcid1.c [1.4.4.1], zfcmap.c [1.9.2.1], +zfdctd.c [1.6.2.1], zfdcte.c [1.5.2.1], zfdecode.c [1.3.6.1], +zfile.c [1.11.2.2], zfileio.c [1.12.2.1], zfilter.c [1.5.2.1], +zfilter2.c [1.3.6.1], zfilterx.c [1.2.6.1], zfmd5.c [1.2.6.1], +zfont.c [1.3.4.1], zfont0.c [1.3.6.1], zfont1.c [1.9.4.1], +zfont2.c [1.4.2.1], zfont32.c [1.2.6.1], zfont42.c [1.5.6.1], +zfproc.c [1.9.2.1], zfrsd.c [1.4.6.1], zfunc.c [1.6.6.3], +zfunc0.c [1.3.6.2], zfunc3.c [1.2.6.2], zfunc4.c [1.7.4.2], +zfzlib.c [1.3.6.1], zgeneric.c [1.3.6.1], zgstate.c [1.2.6.1], +zhsb.c [1.2.6.1], zht.c [1.2.6.1], zht1.c [1.2.6.1], zht2.c [1.2.6.1], +zicc.c [1.2.2.1], zimage.c [1.5.6.1], zimage2.c [1.4.2.1], +zimage3.c [1.3.6.1], ziodev.c [1.6.2.1], ziodev2.c [1.3.6.1], +zmath.c [1.3.6.1], zmatrix.c [1.4.6.1], zmedia2.c [1.3.2.1], +zmisc.c [1.2.6.1], zmisc1.c [1.3.6.1], zmisc2.c [1.3.6.1], +zmisc3.c [1.2.6.1], zpacked.c [1.2.6.1], zpaint.c [1.2.6.1], +zpath.c [1.2.6.1], zpath1.c [1.2.6.1], zpcolor.c [1.3.6.1], +zrelbit.c [1.2.6.1], zrop.c [1.2.6.1], zshade.c [1.4.6.2], +zstack.c [1.2.6.1], zstring.c [1.2.6.1], zsysvm.c [1.2.6.1], +ztoken.c [1.6.6.1], ztrans.c [1.13.2.1], ztrap.c [1.2.6.1], +ztype.c [1.3.6.1], zupath.c [1.2.6.1], zusparam.c [1.3.6.2], +zvmem.c [1.3.2.2], zvmem2.c [1.3.2.1]: 2002/02/22 19:46:00 ray) + +MS-Windows installer now clears the read-only attribute when copying files. +The installer was failing when the source files were stored unpacked on a +CD-ROM. (dwinst.cpp [1.2.6.2], dwinst.h [1.2.6.2]: 2002/03/12 20:57:01 +ghostgum) + +gs_cjk project : gdevpsfm.c did not know about CODE_VALUE_NOTDEF which was +introduced by MDRC. Fix by Suzuki Toshiya. Also Fix in HEAD (revision 1.8 +-> 1.9) by L. Peter Deutsch is included. (lib/gs_cmap.ps [1.11.2.2]: +2002/04/02 13:24:12 mpsuzuki) + +gs_cjk project : MDRC bug fix pt.1: use signalerror instead stop Fix by +Suzuki Toshiya. (lib/gs_cmap.ps [1.11.2.3]: 2002/04/02 13:25:44 mpsuzuki) + +gs_cjk project : MDRC bug fix pt.2: shrink map infos by endcidchar too, to +provide parsing of Adobe-CNS1-4 UCS4 CMap. Fix by Suzuki Toshiya. +(lib/gs_cmap.ps [1.11.2.4]: 2002/04/02 13:26:37 mpsuzuki) + +gs_cjk project : return error when we cannot load even CID=0. Fix by Suzuki +Toshiya. (zfcid0.c [1.7.2.2]: 2002/04/02 13:28:34 mpsuzuki) + +gs_cjk project : cshow bug patch for CIDFont. proc passed to cshow can +change currentfont internally, in such case, rangecheck error should not be +returned. Fix by Masatake Yamato. (zchar.c [1.4.2.2]: 2002/04/02 13:30:49 +mpsuzuki) + +gs_cjk project : cshow bug patch for composite font. Fix by Masatake Yamato. +(zcfont.c [1.2.6.2]: 2002/04/02 13:31:38 mpsuzuki) + +gs_cjk project : support for vertical writing mode by CIDFontType2 by +Hideyuki Suzuki. (zchar42.c [1.3.4.2]: 2002/04/02 13:32:14 mpsuzuki) + +gs_cjk project : zsetcachedevice2 bug patch by Masatake Yamato, modified by +Hideo Saito (zchar1.c [1.7.2.2]: 2002/04/02 13:45:02 mpsuzuki) + +gs_cjk project : CDevProc patch by Masatake Yamato. (zcharout.c [1.4.4.2]: +2002/04/02 13:46:13 mpsuzuki) + +gs_cjk project : CJK TTF loader: on-the-fly CIDFontType2 convertor, +including bugfix for cmap format2 parser (2002-01-09 for GS_6_5) by Hideyuki +Suzuki and Taiji Yamada. (lib/gs_ttf.ps [1.9.2.2]: 2002/04/02 13:55:03 +mpsuzuki) + +gs_cjk project : CIDFontmap patch (without CJK TTF support) by Masatake +Yamato. (lib/gs_cidcm.ps [1.5.2.2], lib/gs_cidfn.ps [1.18.4.2], +lib/gs_init.ps [1.40.2.7]: 2002/04/02 13:55:47 mpsuzuki) + +gs_cjk project : CIDFontmap patch CJK TTF support by Masatake Yamato. +(lib/gs_cidfn.ps [1.18.4.3]: 2002/04/02 13:56:26 mpsuzuki) + +gs_cjk project : replace "min" & "max" by ".min" & ".max". Fix by +Suzuki Toshiya. (lib/gs_cidfn.ps [1.18.4.4], lib/gs_fonts.ps [1.13.2.3], +lib/gs_init.ps [1.40.2.8], lib/gs_ll3.ps [1.10.2.2], +lib/gs_trap.ps [1.3.6.2], lib/gs_typ32.ps [1.3.2.2]: 2002/04/02 13:57:27 +mpsuzuki) + +gs-cjk project : apply security fix by rayjj for gs6.53 branch (for original +fix, see rev. 1.17.2.2). Fix by Suzuki Toshiya. (lib/gs_cidfn.ps [1.18.4.5]: +2002/04/03 07:31:14 mpsuzuki) + +Add multiple inclusion protection to headers files which were missing it. +(dscparse.h [1.6.2.2], dwimg.h [1.4.2.2], dwinst.h [1.2.6.3], +dwmain.h [1.3.2.2], dwreg.h [1.1.2.2], dwsetup.h [1.2.6.2], +dwtext.h [1.4.2.2], dwuninst.h [1.2.6.2]: 2002/04/10 09:13:11 giles) + +adds missing Id: lines. (dwnodll.c [1.1.2.2], gdevdsp.h [1.1.2.2], +gdevdsp2.h [1.2.2.2], idisp.c [1.2.2.2], zicc.c [1.2.2.2]: 2002/04/10 +09:33:25 giles) + +Update the version number in the library as well. +(lib/gs_init.ps [1.40.2.9]: 2002/04/15 06:49:43 giles) + +Committing in . Back-ports from the main stream such that OpenVMS is happy +Modified Files: Tag: GS_7_0X gs/src/devs.mak gs/src/gschar0.c +gs/src/gserrors.h gs/src/imainarg.c +---------------------------------------------------------------------- +(imainarg.c [1.13.2.3]: 2002/04/18 09:58:45 joukj) + +Updating licensing information in Windows files. (dwreg.c [1.1.2.2], +dwsetup.cpp [1.5.6.2], dwuninst.cpp [1.2.6.2]: 2002/04/20 22:11:39 ghostgum) + +</pre><h2><a name="7.05-Streams"></a>Streams</h2><pre> + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(sa85d.c [1.3.4.1], +sa85d.h [1.3.4.1], sa85x.h [1.3.6.1], sarc4.c [1.5.2.1], sarc4.h [1.2.2.1], +sbcp.c [1.3.6.1], sbcp.h [1.2.6.1], sbtx.h [1.2.6.1], scanchar.h [1.2.6.1], +scantab.c [1.2.6.1], scf.h [1.2.6.1], scfd.c [1.3.4.1], scfe.c [1.2.6.1], +scfetab.c [1.2.6.1], scfparam.c [1.2.6.1], scfx.h [1.2.6.1], +scommon.h [1.3.4.1], sdcparam.c [1.3.2.1], sdcparam.h [1.2.6.1], +sdct.h [1.4.2.1], sdctc.c [1.2.6.1], sdctd.c [1.2.6.1], sdcte.c [1.4.2.1], +sddparam.c [1.2.6.1], sdeparam.c [1.4.2.1], seexec.c [1.4.2.1], +sfilter.h [1.6.6.1], sfilter2.c [1.3.6.1], sfxboth.c [1.2.6.1], +sfxfd.c [1.6.4.1], sfxstdio.c [1.4.6.1], shc.c [1.2.6.1], shc.h [1.2.6.1], +siinterp.c [1.2.6.1], siinterp.h [1.2.6.1], siscale.c [1.4.6.1], +siscale.h [1.2.6.1], sisparam.h [1.2.6.1], sjpeg.h [1.2.6.1], +sjpegc.c [1.4.2.1], sjpegd.c [1.3.2.1], sjpege.c [1.3.2.1], +slzwc.c [1.2.6.1], slzwce.c [1.2.6.1], slzwd.c [1.3.4.1], slzwx.h [1.2.6.1], +smd5.c [1.3.6.1], smd5.h [1.2.6.1], spdiff.c [1.3.6.1], spdiffx.h [1.2.6.1], +spngp.c [1.2.6.1], spngpx.h [1.2.6.1], spprint.c [1.4.2.1], +spprint.h [1.3.2.1], spsdf.c [1.5.2.1], spsdf.h [1.2.6.1], +srdline.h [1.2.6.1], srld.c [1.2.6.1], srle.c [1.2.6.1], srlx.h [1.3.4.1], +sstring.c [1.2.6.1], sstring.h [1.3.4.1], stat_.h [1.6.2.1], +std.h [1.4.2.1], stdio_.h [1.4.2.1], stdpre.h [1.4.2.1], +stream.c [1.15.2.1], stream.h [1.8.2.1], strimpl.h [1.3.4.1], +string_.h [1.2.6.1], szlibc.c [1.3.2.1], szlibd.c [1.3.4.1], +szlibe.c [1.2.6.1], szlibx.h [1.2.6.1], szlibxx.h [1.2.6.1]: 2002/02/22 +19:46:00 ray) + +Adds support for compilation against a standard shared libjpeg. It is +believed that non-baseline compliant DCTEncoded data, permitted by early +versions of postscript, is now extremely rare and the prohibition against +SHARE_JPEG=1 may reasonably be removed. The autoconf build will prefer a +local copy of the jpeg source, in which case the D_MAX_BLOCKS_IN_MCU patch +will still be applied. If no such local copy is found, it will try to find a +shared library on the system. For all unix builds, if $(JSRCDIR)/jmemsys.h +cannot be found, we define DONT_HAVE_JMEMSYS_H and include our own versions +of the libjpeg memory manager prototypes. The default allocator in the +shared library is overridden by the ghostscript one at link-time. While this +may be implementation-dependent, it appears to function as desired on at +least GNU/Linux and Solaris. Also changes the autoconf build to prefer local +zlib and libpng source, and cleans up some variable names. Patch by Raph +Levien from 7.20. (sjpegc.c [1.4.2.2]: 2002/04/10 01:44:27 giles) + +</pre><h2><a name="7.05-Library"></a>Library</h2><pre> + +Fixes problems: + - The formula for dy6 in Type2 hflex1 instruction was wrong. Source +Forge bug #530136 "hflex1 arguments misinterpreted". Thanks to Felix Pahl +(fpahl) for spotting this. (gstype2.c [1.10.2.2]: 2002/03/20 20:22:15 igor) + - Fix : Type2 interpreter state was wrongly backed up for sbw +fallback. Source Forge bug "[ 541877 ] /invalidfont on Kozuka Mincho". Patch +by Igor Melichev, backported from the development tree. +(gstype2.c [1.10.2.3]: 2002/04/18 21:10:48 giles) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(ctype_.h [1.2.6.1], +dirent_.h [1.2.6.1], dos_.h [1.2.6.1], errno_.h [1.2.6.1], +fcntl_.h [1.3.6.1], gconf.c [1.2.6.1], gconf.h [1.2.6.1], +gdebug.h [1.3.2.1], gdevabuf.c [1.3.6.1], gdevalph.c [1.2.6.1], +gdevbbox.c [1.4.2.1], gdevbbox.h [1.2.6.1], gdevcmap.c [1.2.6.1], +gdevcmap.h [1.2.6.1], gdevdbit.c [1.2.6.1], gdevddrw.c [1.2.6.1], +gdevdflt.c [1.3.6.1], gdevdgbr.c [1.2.6.1], gdevdrop.c [1.3.6.1], +gdevemap.c [1.2.6.1], gdevhit.c [1.2.6.1], gdevm1.c [1.2.6.1], +gdevm16.c [1.2.6.1], gdevm2.c [1.2.6.1], gdevm24.c [1.2.6.1], +gdevm32.c [1.2.6.1], gdevm4.c [1.2.6.1], gdevm8.c [1.2.6.1], +gdevmem.c [1.2.6.1], gdevmem.h [1.3.6.1], gdevmpla.c [1.2.6.1], +gdevmpla.h [1.2.6.1], gdevmr1.c [1.2.6.1], gdevmr2n.c [1.2.6.1], +gdevmr8n.c [1.2.6.1], gdevmrop.h [1.3.6.1], gdevmrun.c [1.2.6.1], +gdevmrun.h [1.2.6.1], gdevnfwd.c [1.3.6.1], gdevp14.c [1.4.2.1], +gdevpipe.c [1.4.4.1], gdevplnx.c [1.2.6.1], gdevplnx.h [1.2.6.1], +gdevppla.c [1.2.6.1], gdevppla.h [1.2.6.1], gdevprn.c [1.5.6.2], +gdevprn.h [1.6.6.1], gdevprna.c [1.2.6.1], gdevprna.h [1.2.6.1], +gdevpsf.h [1.10.2.1], gdevpsf1.c [1.9.2.1], gdevpsf2.c [1.15.2.1], +gdevpsfm.c [1.5.2.1], gdevpsft.c [1.8.2.1], gdevpsfu.c [1.7.2.1], +gdevpsfx.c [1.9.2.1], gdevrops.c [1.3.6.1], gdevtrac.c [1.2.6.1], +gdevvec.c [1.12.2.2], gdevvec.h [1.7.2.1], gp.h [1.8.2.2], +gp_dosfe.c [1.2.6.2], gp_dosfs.c [1.2.6.2], gp_getnv.c [1.2.6.1], +gp_msdos.c [1.2.6.1], gp_nsync.c [1.2.6.1], gp_psync.c [1.2.6.1], +gp_strdl.c [1.2.6.1], gp_unifn.c [1.2.6.2], gp_unifs.c [1.6.2.1], +gpcheck.h [1.2.6.1], gpgetenv.h [1.2.6.1], gpmisc.c [1.9.4.1], +gpmisc.h [1.2.6.1], gpsync.h [1.2.6.1], gsalloc.c [1.11.2.1], +gsalloc.h [1.2.6.1], gsalpha.c [1.2.6.1], gsalpha.h [1.2.6.1], +gsalphac.c [1.2.6.1], gsalphac.h [1.2.6.1], gsargs.c [1.4.2.1], +gsargs.h [1.4.2.1], gsbitcom.c [1.1.4.1], gsbitmap.h [1.2.6.1], +gsbitops.c [1.3.4.1], gsbitops.h [1.2.6.1], gsbittab.c [1.2.6.1], +gsbittab.h [1.2.6.1], gsccode.h [1.4.6.1], gsccolor.h [1.2.6.1], +gscdef.c [1.15.2.1], gscdefs.h [1.2.6.1], gscdevn.c [1.6.2.1], +gscdevn.h [1.3.6.1], gschar.c [1.3.6.1], gschar.h [1.3.6.1], +gschar0.c [1.3.4.1], gscie.c [1.4.2.1], gscie.h [1.3.2.1], +gsciemap.c [1.6.2.1], gscindex.h [1.2.6.1], gsclipsr.c [1.2.6.1], +gsclipsr.h [1.2.6.1], gscolor.c [1.5.2.1], gscolor.h [1.3.6.1], +gscolor1.c [1.4.2.1], gscolor1.h [1.2.6.1], gscolor2.c [1.6.6.1], +gscolor2.h [1.3.6.1], gscolor3.c [1.4.6.1], gscolor3.h [1.2.6.1], +gscompt.h [1.2.6.1], gscoord.c [1.5.6.1], gscoord.h [1.2.6.1], +gscparam.c [1.7.2.1], gscpixel.c [1.3.6.1], gscpixel.h [1.2.6.1], +gscpm.h [1.2.6.1], gscrd.c [1.2.6.1], gscrd.h [1.2.6.1], gscrdp.c [1.2.6.1], +gscrdp.h [1.2.6.1], gscrypt1.c [1.2.6.1], gscrypt1.h [1.2.6.1], +gscscie.c [1.4.2.1], gscsel.h [1.2.6.1], gscsepnm.h [1.2.6.1], +gscsepr.c [1.12.2.2], gscsepr.h [1.4.6.1], gscspace.c [1.4.6.1], +gscspace.h [1.8.2.1], gscssub.c [1.3.2.1], gscssub.h [1.2.6.1], +gsdcolor.h [1.3.6.1], gsdevice.c [1.11.2.1], gsdevice.h [1.3.6.1], +gsdevmem.c [1.2.6.1], gsdfilt.c [1.3.2.1], gsdfilt.h [1.2.2.1], +gsdparam.c [1.4.6.2], gsdpnext.h [1.2.6.1], gsdps.c [1.2.6.1], +gsdps.h [1.2.6.1], gsdps1.c [1.2.6.1], gsdsrc.c [1.2.6.1], +gsdsrc.h [1.3.6.1], gserror.h [1.2.6.1], gserrors.h [1.2.6.1], +gsexit.h [1.4.2.1], gsfcid.c [1.5.4.1], gsfcmap.c [1.14.2.1], +gsfcmap.h [1.4.6.1], gsfemu.c [1.2.6.1], gsflip.c [1.2.6.1], +gsflip.h [1.2.6.1], gsfname.c [1.2.6.1], gsfname.h [1.2.6.1], +gsfont.c [1.4.4.1], gsfont.h [1.2.6.1], gsfont0.c [1.2.6.1], +gsfunc.c [1.4.6.1], gsfunc.h [1.4.6.1], gsfunc0.c [1.5.4.1], +gsfunc0.h [1.2.6.1], gsfunc3.c [1.4.6.1], gsfunc3.h [1.2.6.1], +gsfunc4.c [1.7.2.1], gsfunc4.h [1.2.6.1], gsgc.h [1.3.2.1], +gshsb.c [1.2.6.1], gshsb.h [1.2.6.1], gsht.c [1.2.6.1], gsht.h [1.2.6.1], +gsht1.c [1.3.2.1], gsht1.h [1.2.6.1], gshtscr.c [1.6.2.1], +gshtx.c [1.2.6.1], gshtx.h [1.2.6.1], gsicc.c [1.5.2.1], gsicc.h [1.3.2.1], +gsimage.c [1.4.2.1], gsimage.h [1.2.6.1], gsimpath.c [1.2.6.1], +gsinit.c [1.3.2.1]: 2002/02/22 19:45:55 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(gsio.h [1.5.2.1], +gsiodev.c [1.5.2.1], gsiodevs.c [1.2.6.1], gsipar3x.h [1.3.6.1], +gsiparam.h [1.4.6.1], gsiparm2.h [1.2.6.1], gsiparm3.h [1.4.6.1], +gsiparm4.h [1.2.6.1], gsistate.c [1.4.6.1], gsjconf.h [1.2.6.1], +gslib.c [1.5.2.1], gslib.h [1.2.6.1], gsline.c [1.2.6.1], +gsline.h [1.2.6.1], gslparam.h [1.2.6.1], gsmalloc.c [1.3.6.1], +gsmalloc.h [1.2.6.1], gsmatrix.c [1.2.6.1], gsmatrix.h [1.2.6.1], +gsmdebug.h [1.3.2.1], gsmemlok.c [1.3.6.1], gsmemlok.h [1.2.6.1], +gsmemory.c [1.4.2.1], gsmemory.h [1.3.2.1], gsmemraw.h [1.2.6.1], +gsmemret.c [1.2.6.1], gsmemret.h [1.2.6.1], gsmisc.c [1.12.2.1], +gsnogc.c [1.7.2.1], gsnogc.h [1.2.6.1], gsnorop.c [1.2.6.1], +gsnotify.c [1.2.6.1], gsnotify.h [1.2.6.1], gspaint.c [1.2.6.1], +gspaint.h [1.2.6.1], gsparam.c [1.4.6.1], gsparam.h [1.8.4.1], +gsparam2.c [1.2.6.1], gsparams.c [1.2.6.1], gsparams.h [1.2.6.1], +gsparamx.c [1.4.2.1], gsparamx.h [1.3.6.1], gspath.c [1.2.6.1], +gspath.h [1.2.6.1], gspath1.c [1.3.4.1], gspath2.h [1.2.6.1], +gspcolor.c [1.4.6.1], gspcolor.h [1.2.6.1], gspenum.h [1.2.6.1], +gsptype1.c [1.3.2.1], gsptype1.h [1.2.6.1], gsptype2.c [1.5.2.1], +gsptype2.h [1.4.2.1], gsrect.h [1.2.6.1], gsrefct.h [1.2.6.1], +gsrop.c [1.2.6.1], gsrop.h [1.2.6.1], gsropc.c [1.2.6.1], +gsropc.h [1.2.6.1], gsropt.h [1.4.2.1], gsroptab.c [1.2.6.1], +gsshade.c [1.4.2.1], gsshade.h [1.3.6.1], gsstate.c [1.11.2.1], +gsstate.h [1.2.6.1], gsstruct.h [1.8.2.1], gsstype.h [1.2.6.1], +gstext.c [1.6.2.1], gstext.h [1.3.6.1], gstparam.h [1.7.6.1], +gstrans.c [1.13.2.1], gstrans.h [1.6.6.1], gstrap.c [1.3.6.1], +gstrap.h [1.3.6.1], gstype1.c [1.6.4.1], gstype1.h [1.2.6.1], +gstype2.c [1.10.2.1], gstype42.c [1.12.2.1], gstypes.h [1.3.2.1], +gsuid.h [1.2.6.1], gsutil.c [1.4.6.2], gsutil.h [1.3.6.2], +gsxfont.h [1.2.6.1], gx.h [1.2.6.1], gxacpath.c [1.3.6.1], +gxalloc.h [1.6.2.1], gxalpha.h [1.2.6.1], gxarith.h [1.2.6.1], +gxband.h [1.2.6.1], gxbcache.c [1.2.6.1], gxbcache.h [1.2.6.1], +gxbitfmt.h [1.2.6.1], gxbitmap.h [1.2.6.1], gxbitops.h [1.2.6.1], +gxblend.c [1.2.2.1], gxblend.h [1.1.2.1], gxccache.c [1.5.2.1], +gxccman.c [1.2.6.1], gxcdevn.h [1.2.6.1], gxchar.c [1.5.2.2], +gxchar.h [1.2.6.1], gxchrout.c [1.2.6.1], gxchrout.h [1.2.6.1], +gxcht.c [1.3.2.1], gxcid.h [1.3.6.1], gxcie.h [1.3.2.1], +gxcindex.h [1.2.6.1], gxclbits.c [1.4.4.1], gxcldev.h [1.4.4.1], +gxclfile.c [1.3.2.1], gxclimag.c [1.3.2.1], gxclio.h [1.2.6.1], +gxclip.c [1.4.2.1], gxclip.h [1.2.6.1], gxclip2.c [1.3.6.1], +gxclip2.h [1.2.6.1], gxclipm.c [1.3.6.1], gxclipm.h [1.2.6.1], +gxclipsr.h [1.2.6.1], gxclist.c [1.3.6.1], gxclist.h [1.2.6.1], +gxcllzw.c [1.2.6.1], gxclmem.c [1.2.6.1], gxclmem.h [1.2.6.1], +gxclpage.c [1.2.6.1], gxclpage.h [1.2.6.1], gxclpath.c [1.9.2.1], +gxclpath.h [1.6.6.1], gxclrast.c [1.9.2.1], gxclread.c [1.3.4.1], +gxclrect.c [1.2.6.1], gxclutil.c [1.5.2.1], gxclzlib.c [1.2.6.1], +gxcmap.c [1.3.6.1], gxcmap.h [1.2.6.1], gxcolor2.h [1.4.6.1], +gxcomp.h [1.2.6.1], gxcoord.h [1.2.6.1], gxcpath.c [1.3.6.1], +gxcpath.h [1.2.6.1], gxcspace.h [1.4.6.1], gxctable.c [1.3.6.1], +gxctable.h [1.2.6.1], gxcvalue.h [1.2.6.1], gxdcconv.c [1.3.6.1], +gxdcconv.h [1.2.6.1], gxdcolor.c [1.3.6.1], gxdcolor.h [1.3.6.1], +gxdda.h [1.2.6.1], gxdevbuf.h [1.2.6.1], gxdevcli.h [1.5.2.2], +gxdevice.h [1.4.6.2], gxdevmem.h [1.2.6.1], gxdevrop.h [1.2.6.1], +gxdht.h [1.4.6.1], gxdhtres.h [1.2.6.1], gxdither.c [1.2.6.1], +gxdither.h [1.2.6.1], gxfarith.h [1.3.6.1], gxfcache.h [1.2.6.1], +gxfcid.h [1.6.6.1], gxfcmap.h [1.8.2.1], gxfill.c [1.8.2.1], +gxfixed.h [1.3.4.1], gxfmap.h [1.3.6.1], gxfont.h [1.3.4.1], +gxfont0.h [1.3.6.1], gxfont1.h [1.5.4.1], gxfont42.h [1.4.6.1], +gxfrac.h [1.3.4.1], gxftype.h [1.2.6.1], gxfunc.h [1.3.6.1], +gxgetbit.h [1.2.6.1], gxhint1.c [1.2.6.1], gxhint2.c [1.2.6.1], +gxhint3.c [1.3.2.1], gxht.c [1.2.6.1], gxht.h [1.2.6.1], +gxhtbit.c [1.3.6.1], gxhttile.h [1.2.6.1], gxhttype.h [1.2.6.1], +gxi12bit.c [1.2.6.1], gxiclass.h [1.2.6.1], gxicolor.c [1.3.2.1], +gxidata.c [1.4.6.1], gxifast.c [1.4.2.1], gximag3x.c [1.7.6.1], +gximag3x.h [1.3.6.1], gximage.c [1.2.6.1], gximage.h [1.2.6.1], +gximage1.c [1.5.6.1], gximage2.c [1.2.6.1], gximage3.c [1.6.6.1], +gximage3.h [1.4.6.1], gximage4.c [1.3.6.1], gximono.c [1.2.6.1], +gxino12b.c [1.2.6.1], gxiodev.h [1.2.6.1], gxiparam.h [1.2.6.1], +gxipixel.c [1.2.6.1], gxiscale.c [1.2.6.2], gxistate.h [1.6.6.1], +gxline.h [1.2.6.1], gxlum.h [1.2.6.1], gxmatrix.h [1.4.6.1], +gxmclip.c [1.2.6.1], gxmclip.h [1.2.6.1], gxobj.h [1.2.6.1], +gxop1.h [1.2.6.1], gxp1fill.c [1.2.6.1], gxp1impl.h [1.2.6.1], +gxpageq.c [1.2.6.1], gxpageq.h [1.2.6.1], gxpaint.c [1.2.6.1], +gxpaint.h [1.2.6.1], gxpath.c [1.2.6.1], gxpath.h [1.2.6.1], +gxpath2.c [1.2.6.1], gxpcache.h [1.2.6.1], gxpcmap.c [1.3.6.1], +gxpcolor.h [1.2.6.1], gxpcopy.c [1.3.6.1], gxpdash.c [1.2.6.1], +gxpflat.c [1.2.6.1], gxropc.h [1.2.6.1], gxrplane.h [1.2.6.1], +gxsample.c [1.2.6.1], gxsample.h [1.2.6.1], gxshade.c [1.6.2.1], +gxshade.h [1.4.2.1], gxshade1.c [1.9.2.1], gxshade4.c [1.6.2.1], +gxshade4.h [1.2.6.1], gxshade6.c [1.3.6.1], gxstate.h [1.2.6.1], +gxstdio.h [1.2.6.1], gxstroke.c [1.2.6.1], gxsync.c [1.2.6.1], +gxsync.h [1.2.6.1], gxtext.h [1.7.2.1], gxtmap.h [1.2.6.1], +gxttf.h [1.2.6.1], gxtype1.c [1.8.4.1], gxtype1.h [1.5.4.1], +gxxfont.h [1.2.6.1], gzacpath.h [1.2.6.1], gzcpath.h [1.2.6.1], +gzht.h [1.4.4.1], gzline.h [1.2.6.1], gzpath.h [1.3.6.1], +gzstate.h [1.5.2.1], jerror_.h [1.2.6.1], malloc_.h [1.2.6.1], +math_.h [1.2.6.1], memory_.h [1.2.6.1], pipe_.h [1.2.6.1], +time_.h [1.3.2.1], unistd_.h [1.4.2.1], vmsmath.h [1.2.6.1], +windows_.h [1.2.6.1]: 2002/02/22 19:45:58 ray) + +gs_cjk project : gdevpsfm.c did not know about CODE_VALUE_NOTDEF which was +introduced by MDRC. Fix by Suzuki Toshiya. Also Fix in HEAD (revision 1.8 +-> 1.9) by L. Peter Deutsch is included. (gdevpsfm.c [1.5.2.2]: +2002/04/02 13:24:12 mpsuzuki) + +gs_cjk project : handle "cidchar" map correctly. Fix by Suzuki Toshiya. +(gsfcmap.c [1.14.2.2]: 2002/04/02 13:27:37 mpsuzuki) + +gs_cjk project : bugfix for nested FMapType4/5 OCF. Fix by Suzuki Toshiya. +(gschar0.c [1.3.4.2]: 2002/04/02 13:29:35 mpsuzuki) + +gs_cjk project : bugfix for invalid metrics calculation for CIDFontType2. +Fix by Masatake Yamato. (gstype42.c [1.12.2.2]: 2002/04/02 13:33:06 +mpsuzuki) + +gs_cjk project : cshow bug fix for CIDFontType2. Fix by Hideyuki Suzuki. +(gxchar.c [1.5.2.3]: 2002/04/02 13:33:44 mpsuzuki) + +gs_cjk project: glyph cache bug patch for vertical writing mode. Fallback +against inconsistency in double checking of glyph cache. The inconsistency +causes misplacement of CJK glyph in vertical writing mode. Fix by Hideo +Saito. (gxchar.c [1.5.2.4], gxchar.h [1.2.6.2]: 2002/04/02 13:35:00 +mpsuzuki) + +gs_cjk project : glyphshow in vertical writing mode bug patch. Originally, +FontBBox_as_Metrics2 was set when charcode string is decoded into CIDs. +"glyphshow" bypasses such decoding procedure, thus FontBBox_as_Metrics2 is +not set. Fix by Masatake Yamato. (gstext.c [1.6.2.2]: 2002/04/02 13:42:10 +mpsuzuki) + +gs-cjk project : move definition "cc" to the scope that it is used. Fix by +Suzuki Toshiya. (gxchar.c [1.5.2.5]: 2002/04/02 13:52:29 mpsuzuki) + +Add multiple inclusion protection to headers files which were missing it. +(gsdfilt.h [1.2.2.2], jerror_.h [1.2.6.2]: 2002/04/10 09:13:11 giles) + +mark this as a GNU version and bump the release number (gscdef.c [1.15.2.2]: +2002/04/15 05:47:56 giles) + +disable the new auto-bold and auto-slant functions for non-cid fonts, +pending improved detection of when this is necessary. (gscdef.c [1.15.2.3]: +2002/04/16 06:11:29 giles) + +revert bad licensing change accidentally included in the last commit. +(gscdef.c [1.15.2.4]: 2002/04/16 06:12:42 giles) + +Committing in . Back-ports from the main stream such that OpenVMS is happy +Modified Files: Tag: GS_7_0X gs/src/devs.mak gs/src/gschar0.c +gs/src/gserrors.h gs/src/imainarg.c +---------------------------------------------------------------------- +(gschar0.c [1.3.4.3], gserrors.h [1.2.6.2]: 2002/04/18 09:58:45 joukj) + +</pre><h2><a name="7.05-Other"></a>Other</h2><pre> + +Fixes problems: + - Fixes the gdevx.o command line in the case when AC_PATH_X sets +x_includes to the empty string. Fixes SF #530429. (Makefile.in [1.1.4.4], +configure.ac [1.4.4.4]: 2002/03/28 19:35:58 raph) + - Uses a default 'src' setting for PSRCDIR in the autoconf build +with a shared libpng, as we do with zlib, preventing compiler confusion from +empty -I lines. Partial fix for SF bug #514898. (configure.ac [1.4.4.5]: +2002/03/28 20:37:33 giles) + - improves X11 path settings in the autoconf build. We use +AC_PATH_XTRA instead of the previous "is it null" hack with AC_PATH_X. The +new macro also defines some additional libraries that may need to be +included. We currently don't use this information. (Makefile.in [1.1.4.5], +configure.ac [1.4.4.6]: 2002/03/28 20:41:25 giles) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(Makefile.in [1.1.4.3], +gp_mswin.h [1.4.2.1], gsdll.h [1.3.2.1], gsdllos2.h [1.2.6.1], +gsdllwin.h [1.3.2.1]: 2002/02/22 19:45:55 ray) + +Update banner to the new format common to all releases. References file +LICENSE. Note that the $Id: line is not altered by this change. +(gsjmorec.h [1.3.4.1], +gspmdrv.h [1.2.6.1], iutilasm.asm [1.2.6.1]: 2002/02/22 19:45:58 ray) + +Replace Windows icons with new versions that include 48x48 pixel and 32-bit +versions for Windows XP. Change the 16x16 pixel icons to use the full 'g' +instead of just the head. Use a restricted icon gswin16.ico for WinZip SE +which can't handle the new icon. (gswin.icx [1.1.2.1]: 2002/03/30 01:33:03 +ghostgum) + +Replace Windows icons with new versions that include 48x48 pixel and 32-bit +versions for Windows XP. Change the 16x16 pixel icons to use the full 'g' +instead of just the head. Use a restricted icon gswin16.ico for WinZip SE +which can't handle the new icon. (gswin16.icx [1.1.2.1]: 2002/03/30 01:34:00 +ghostgum) + +Propagate autoconf build updates from HEAD: Allow shared jpeg since +non-baseline dctencoded data is now vanishingly rare. Prefer local source of +libjpeg, libpng and zlib to shared versions if it's available. Add the +standard gcc cflags only if we're using gcc and it don't error on them. Also +look for current-version-named third-party libraries to save a step. +(Makefile.in [1.1.4.6], configure.ac [1.4.4.7]: 2002/04/09 21:18:27 giles) + +Add multiple inclusion protection to headers files which were missing it. +(gsdll.h [1.3.2.2]: 2002/04/10 09:13:11 giles) + +adds missing Id: lines. (gp_mac.h [1.1.4.1], macsysstat.h [1.1.4.1], +macsystypes.h [1.1.4.1], vms_x_fix.h [1.1.2.1]: 2002/04/10 09:33:26 giles) + +Adds the LICENSE file, containing a copy of the GNU GPL. +(LICENSE [1.1.2.1]: 2002/04/15 05:38:45 giles) + +Upgrade icclib to (proposed) 2.01 release. Patch has been sent to Graeme +Gill for consideration. (icclib/icc.c [1.6.2.1], icclib/icc.h [1.4.2.1], +icclib/icc9809.h [1.2.2.1]: 2002/04/18 18:20:16 raph) + +Removes trailing comma in enum. (icclib/icc.h [1.4.2.2]: 2002/04/18 20:29:14 +raph) + +Update libpng version numbers to the latest 1.2.2. (configure.ac [1.4.4.8]: +2002/04/19 06:32:22 giles) + +Add the 'stp' driver from the gimp-print project, and compile it in by +default from the autoconf build if libgimprint is found. +(Makefile.in [1.1.4.7], configure.ac [1.4.4.9]: 2002/04/19 22:23:09 giles) + +Update to the latest cvs version of ijs. Source files now properly include +the MIT license header. (ijs/Makefile.in [1.1.2.2], ijs/README [1.1.2.2], +ijs/ijs.c [1.1.2.2], ijs/ijs.h [1.1.2.2], ijs/ijs_client.c [1.1.2.2], +ijs/ijs_client.h [1.1.2.2], ijs/ijs_client_example.c [1.1.2.2], +ijs/ijs_exec_unix.c [1.1.2.2], ijs/ijs_exec_win.c [1.1.2.2], +ijs/ijs_server.c [1.1.2.2], ijs/ijs_server.h [1.1.2.2], +ijs/ijs_server_example.c [1.1.2.2], ijs/ijs_spec.sgml [1.1.2.2], +ijs/unistd_.h [1.1.2.2]: 2002/04/22 17:53:36 giles) + +update icclib to the 2.02 release (icclib/Licence.txt [1.1.2.1], +icclib/Readme.txt [1.1.2.1], icclib/icc.c [1.6.2.2], icclib/icc.h [1.4.2.3]: +2002/04/22 18:17:47 giles) + +Update the ijs source to the latest 0.34 release. +(ijs/Makefile.in [1.1.2.3], ijs/configure.in [1.1.2.2], +ijs/ijs_spec.pdf [1.1.2.2], ijs/ijs_spec.sgml [1.1.2.3]: 2002/04/23 01:23:33 +giles) + +Add new license header to some files. +(gp_mac.h [1.1.4.2], macsysstat.h [1.1.4.2], macsystypes.h [1.1.4.2]: +2002/04/23 01:32:26 giles) + +<hr> + +<h1><a name="Version7.04"></a>Version 7.04 (2002-01-30)</h1> + +<p> +This is a security update of Ghostscript. A number of maintenance +fixes and new features have been added. + +<p> Major changes include: + +<ul> +<li>A rather serious security hole, where PostScript code could cause +arbitrary commands to be executed, has been patched. + +<li>There is also a new -DPARANOIDSAFER option, which locks down +reading of arbitrary files. + +<li>This release integrates the IJS driver, which makes it much easier +to add and upgrade printer drivers without needing to recompile +Ghostscript. + +<li>There is a configure script for automatically configuring the +makefile on Unix platforms. Those who enjoy the fun of hand-editing +the makefile are still welcome to do so. + +<li>The usual bug fixes. + +</ul> + +<p> +The following SourceForge bug numbers are currently open: (todo) + +<h3><a name="7.04_Incompatible_changes"></a>Incompatible changes</h3> + +<p> +No incompatible changes have been recorded for this version. Authors +of drivers with potential security implications are encouraged to review +the security changes, however. + +<pre> + + + +<h2><a name="7.04-Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - Improve security in a (mostly) backward compatible fashion adding +more flexible file access paths (PermitFile...) as user paramters and adding +the facility to return to NOSAFER mode after running jobs (files/procedures) +in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only +allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and +/GenericResourceDir or /FontResourceDir. Improve security for device related +access to the file system and to pipes by allowing the dangerous parameters +to be locked (for example, OutputFile). The locking is performed after +command line parameters are established. This should address SF bug #474582 +and eliminate the need for the RedHat PARANOIDSAFER patch. +(doc/Language.htm [1.34.2.1], doc/Use.htm [1.33.2.1]: 2002/01/25 06:33:08 +rayjj) + +Removes the admonishment to update PVERSION and JVERSION from the Makefile +documentation. The build dependencies were removed earlier to reduce user +confusion; they're currently vestigial in expectation of future build +requirements. This is the second half of the fix for sf bug #457838. +(doc/Make.htm [1.36.2.1]: 2001/10/24 22:29:29 giles) + +Adds a link to the v7.xx history files. (doc/News.htm [1.90.2.2]: 2001/10/24 +22:32:18 giles) + +Adds basic autoconf support to the build system. (doc/Make.htm [1.36.2.2], +doc/Release.htm [1.40.2.1]: 2002/01/24 01:30:56 giles) + +Adds a new documentation section on display devices along with a basic +description of the x11 devices. (doc/Devices.htm [1.34.2.1]: 2002/01/30 +07:36:09 giles) + +Minor change from 'search' to 'filenameforall' in discussion about the +wildcard characters in PermitFile... strings. (doc/Language.htm [1.34.2.2]: +2002/01/31 17:36:56 rayjj) + +Version number upgrade and minor documentation patch in preparation for 7.04 +release. (doc/API.htm [1.11.2.1], doc/Bug-form.htm [1.23.2.1], +doc/Bug-info.htm [1.20.2.1], doc/C-style.htm [1.21.2.1], +doc/Changes.htm [1.28.2.2], doc/Commprod.htm [1.15.2.1], +doc/Copying.htm [1.13.2.1], doc/Current.htm [1.13.2.1], +doc/DLL.htm [1.15.2.1], doc/Develop.htm [1.47.2.1], +doc/Devices.htm [1.34.2.2], doc/Drivers.htm [1.21.2.1], +doc/Fonts.htm [1.22.2.1], doc/Helpers.htm [1.17.2.1], +doc/History1.htm [1.13.2.1], doc/History2.htm [1.13.2.1], +doc/History3.htm [1.13.2.1], doc/History4.htm [1.13.2.1], +doc/History5.htm [1.15.2.1], doc/History6.htm [1.30.2.1], +doc/History7.htm [1.5.2.2], doc/Htmstyle.htm [1.18.2.1], +doc/Install.htm [1.26.2.1], doc/Issues.htm [1.15.2.1], +doc/Language.htm [1.34.2.3], doc/Lib.htm [1.14.2.1], +doc/Maintain.htm [1.23.2.1], doc/Make.htm [1.36.2.3], +doc/New-user.htm [1.30.2.1], doc/News.htm [1.90.2.3], doc/PUBLIC [1.5.2.1], +doc/Projects.htm [1.33.2.1], doc/Ps-style.htm [1.13.2.1], +doc/Ps2epsi.htm [1.15.2.1], doc/Ps2pdf.htm [1.32.2.1], +doc/Psfiles.htm [1.22.2.1], doc/README [1.12.2.1], +doc/Readme.htm [1.31.2.1], doc/Release.htm [1.40.2.2], +doc/Source.htm [1.13.2.1], doc/Tester.htm [1.14.2.1], +doc/Unix-lpr.htm [1.13.2.1], doc/Use.htm [1.33.2.2], +doc/Xfonts.htm [1.13.2.1], doc/gs-vms.hlp [1.12.2.1], +man/dvipdf.1 [1.10.2.1], man/font2c.1 [1.10.2.1], man/gs.1 [1.10.2.1], +man/gslp.1 [1.10.2.1], man/gsnd.1 [1.10.2.1], man/pdf2dsc.1 [1.10.2.1], +man/pdf2ps.1 [1.12.2.1], man/pdfopt.1 [1.10.2.1], man/pf2afm.1 [1.10.2.1], +man/pfbtopfa.1 [1.11.2.1], man/printafm.1 [1.10.2.1], +man/ps2ascii.1 [1.10.2.1], man/ps2epsi.1 [1.10.2.1], +man/ps2pdf.1 [1.14.2.1], man/ps2pdfwr.1 [1.13.2.1], man/ps2ps.1 [1.17.2.1], +man/wftopfa.1 [1.10.2.1]: 2002/02/01 03:25:43 raph) + +Adds IJS driver to Ghostscript. Includes complete IJS version 0.33 +distribution. Also includes autoconf patch by Ralph Giles. +(doc/Develop.htm [1.47.2.2], doc/Devices.htm [1.34.2.3]: 2002/02/01 03:30:14 +raph) + +</pre><h2><a name="7.04-Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - the icclib makefile comments were out of date; the build rule +referred to gs_stdio_h, which no longer exists; the build rule for gsicc.o +referred to icc_h, which was not defined at that point. patch originally by +lpd, propagated from the development branch. (gs.mak [1.5.2.1], +icclib.mak [1.3.2.1], lib.mak [1.53.2.1]: 2001/10/26 00:15:30 giles) + - Fix for #474544. Corrects inability to convert valid DeviceN tint +transform functions into type 4 functions. Valid operator names were not +being recognized unless the tint transform function had been bound. One of +two fixes required for this problem. Customer #710. (int.mak [1.50.2.1]: +2002/01/17 02:59:35 dancoby) + - Fix for #474544. This is the second of two fixes required for this +problem. This fix creates a type 0 function which implements a "color cube" +for those tint transform functions which cannot be converted into a type 4 +function. Customer #710. Note: There is one more revision planned for this +effort. This revision will make the buildcolorcube operator into a more +general buildsampledfunction. This will allow its use in other situations. +(int.mak [1.50.2.2]: 2002/01/17 06:57:55 dancoby) + +Version number upgrade and minor documentation patch in preparation for 7.04 +release. (all-arch.mak [1.9.2.1], bcwin32.mak [1.12.2.1], +dvx-gcc.mak [1.12.2.1], libpng.mak [1.10.2.1], macos-mcp.mak [1.3.2.1], +msvc32.mak [1.20.2.1], msvclib.mak [1.16.2.1], openvms.mak [1.16.2.1], +os2.mak [1.19.2.1], ugcclib.mak [1.13.2.1], unix-gcc.mak [1.23.2.1], +unixansi.mak [1.16.2.1], version.mak [1.36.2.1], watc.mak [1.16.2.1], +watclib.mak [1.13.2.1], watcw32.mak [1.13.2.1]: 2002/02/01 03:25:45 raph) + +Adds IJS driver to Ghostscript. Includes complete IJS version 0.33 +distribution. Also includes autoconf patch by Ralph Giles. +(bcwin32.mak [1.12.2.2], devs.mak [1.47.2.1], dvx-gcc.mak [1.12.2.2], +gs.mak [1.5.2.2], ijs.mak [1.2.2.1], macos-mcp.mak [1.3.2.2], +msvc32.mak [1.20.2.2], openvms.mak [1.16.2.2], os2.mak [1.19.2.2], +ugcclib.mak [1.13.2.2], unix-gcc.mak [1.23.2.2], unixansi.mak [1.16.2.2], +watclib.mak [1.13.2.2], watcw32.mak [1.13.2.2], wctail.mak [1.3.2.1], +winlib.mak [1.12.2.1]: 2002/02/01 03:30:13 raph) + +</pre><h2><a name="7.04-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - Incorporate patch from Tim Waugh of RedHat to allow ps2pdfwr to +correctly process files with spaces in their names. Peter's earlier fix +missed a few enclosing "'s for output files. Fixes Sourceforge bug #505338. +(lib/ps2pdfwr [1.6.2.1]: 2002/01/22 21:34:04 jackiem) + - Improve security in a (mostly) backward compatible fashion adding +more flexible file access paths (PermitFile...) as user paramters and adding +the facility to return to NOSAFER mode after running jobs (files/procedures) +in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only +allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and +/GenericResourceDir or /FontResourceDir. Improve security for device related +access to the file system and to pipes by allowing the dangerous parameters +to be locked (for example, OutputFile). The locking is performed after +command line parameters are established. This should address SF bug #474582 +and eliminate the need for the RedHat PARANOIDSAFER patch. +(gp_macio.c [1.2.4.1], gp_ntfs.c [1.5.2.1], gp_os2.c [1.10.2.1], +gp_vms.c [1.7.2.1]: 2002/01/25 06:33:09 rayjj) + +Replaces references of 'FontManagerLib' with 'FontManager' to match the +Universal Headers stub shipped with Metrowerks CW 6.3. +(macgenmcpxml.sh [1.1.4.1]: 2001/11/02 02:31:21 giles) + +Disables the 'unused arguments' warning with the Metrowerks Codewarrior 6.3 +Compiler. We have many of these by design and it's responsible for a large +number of warnings on that platform. (macgenmcpxml.sh [1.1.4.2]: 2001/11/02 +02:33:21 giles) + +</pre><h2><a name="7.04-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - Improve security in a (mostly) backward compatible fashion adding +more flexible file access paths (PermitFile...) as user paramters and adding +the facility to return to NOSAFER mode after running jobs (files/procedures) +in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only +allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and +/GenericResourceDir or /FontResourceDir. Improve security for device related +access to the file system and to pipes by allowing the dangerous parameters +to be locked (for example, OutputFile). The locking is performed after +command line parameters are established. This should address SF bug #474582 +and eliminate the need for the RedHat PARANOIDSAFER patch. +(gdevcgm.c [1.2.6.1], gdevmac.c [1.1.4.1]: 2002/01/25 06:33:09 rayjj) + - Removes broken x11alpha driver, and installs an alias for x11 +under that name, with default parameters changed to support antialiasing. +Fixes SourceForge bug #505692. (gdevx.c [1.8.2.1], gdevxalt.c [1.2.6.1]: +2002/01/30 20:09:26 raph) + +Don't allocate memory or call callbacks when display device does not have a +callback function. (gdevdsp.c [1.5.2.1]: 2001/12/18 07:09:17 ghostgum) + +Adds IJS driver to Ghostscript. Includes complete IJS version 0.33 +distribution. Also includes autoconf patch by Ralph Giles. +(gdevijs.c [1.1.2.1]: 2002/02/01 03:30:13 raph) + +</pre><h2><a name="7.04-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - T* applied the leading horizontally when using a font in vertical +writing mode, but the PDF Reference says the leading is always applied +vertically. (lib/pdf_ops.ps [1.17.2.1]: 2001/12/22 07:34:23 masata-y) + +</pre><h2><a name="7.04-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Some gsapi functions were not passing the user_errors argument to +the corresponding gs_main_run_string_* functions, and instead, these +functions were passing 0. (iapi.c [1.1.2.1]: 2002/01/03 20:20:38 jackiem) + - ifont.h requires gsmatix.h and gxfont.h for clean compilation. Not +having them was a warning on gcc, but an error on Borland CBuilder 5.5. +Thanks to Rod Webster for the fix. Closes Sourceforge bug #474246. +(iccfont.c [1.2.6.1]: 2002/01/09 21:52:04 giles) + - ReleaseDC was missed in Windows client applications. SourceForge +bug #499903. (dwmain.c [1.6.2.1], dwmainc.c [1.8.2.1]: 2002/01/16 21:07:16 +igorm) + - Fix for #474544. Corrects inability to convert valid DeviceN tint +transform functions into type 4 functions. Valid operator names were not +being recognized unless the tint transform function had been bound. One of +two fixes required for this problem. Customer #710. (ifunc.h [1.3.6.1], +zfunc.c [1.6.6.1], zfunc0.c [1.3.6.1], zfunc3.c [1.2.6.1], +zfunc4.c [1.7.4.1], zshade.c [1.4.6.1]: 2002/01/17 02:59:35 dancoby) + - Fix for #474544. This is the second of two fixes required for this +problem. This fix creates a type 0 function which implements a "color cube" +for those tint transform functions which cannot be converted into a type 4 +function. Customer #710. Note: There is one more revision planned for this +effort. This revision will make the buildcolorcube operator into a more +general buildsampledfunction. This will allow its use in other situations. +(ifunc.h [1.3.6.2], lib/gs_lev2.ps [1.7.2.1], zccube.c [1.1.2.1], +zcsdevn.c [1.5.2.1], zfunc.c [1.6.6.2]: 2002/01/17 06:57:55 dancoby) + - Improve security in a (mostly) backward compatible fashion adding +more flexible file access paths (PermitFile...) as user paramters and adding +the facility to return to NOSAFER mode after running jobs (files/procedures) +in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only +allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and +/GenericResourceDir or /FontResourceDir. Improve security for device related +access to the file system and to pipes by allowing the dangerous parameters +to be locked (for example, OutputFile). The locking is performed after +command line parameters are established. This should address SF bug #474582 +and eliminate the need for the RedHat PARANOIDSAFER patch. +(icontext.c [1.6.6.1], icstate.h [1.4.6.1], imainarg.c [1.13.2.1], +iutil2.c [1.2.6.1], iutil2.h [1.2.6.1], lib/gs_fonts.ps [1.13.2.1], +lib/gs_init.ps [1.40.2.2], lib/gs_lev2.ps [1.7.2.2], +lib/gs_setpd.ps [1.8.2.1], zcontrol.c [1.3.6.1], zdevice.c [1.3.6.1], +zdevice2.c [1.4.2.1], zfile.c [1.11.2.1], zusparam.c [1.3.6.1], +zvmem.c [1.3.2.1]: 2002/01/25 06:33:09 rayjj) + - .locksafe is not supposed to change the PermitFileWriting and +PermitFileControl paths (was setting them to empty arrays). +(lib/gs_init.ps [1.40.2.3]: 2002/01/31 17:39:07 rayjj) + +Change the unstopped error handler to print the operand stack in the same +order as the normal error handler, with the top of the stack at the right. +Fixes Sourceforge bug #496440. (lib/gs_init.ps [1.40.2.1]: 2002/01/10 +02:41:01 ghostgum) + +Version number upgrade and minor documentation patch in preparation for 7.04 +release. (lib/gs_init.ps [1.40.2.4]: 2002/02/01 03:25:45 raph) + +</pre><h2><a name="7.04-Library"></a>Library</h2><pre> + +Fixes problems: + - Change show_enum pointer enumeration to properly enumerate +underlying gs_text_enum structure. (gxchar.c [1.5.2.1]: 2001/10/26 16:35:25 +raph) + - Image Type 4 images processed with the Interpolate turned on (as +from -dDOINTERPOLATE) left an uninitialized variable that could cause +extensive slowdown. Fix for SourceForge bug #491308 for Artifex customer +671. (gxiscale.c [1.2.6.1]: 2001/12/14 19:16:04 rayjj) + - Improve security in a (mostly) backward compatible fashion adding +more flexible file access paths (PermitFile...) as user paramters and adding +the facility to return to NOSAFER mode after running jobs (files/procedures) +in SAFER mode. Also adds a -dPARANOIDSAFER command line option that only +allows reading files from %stdin, paths specified on LIBPATH, FONTPATH and +/GenericResourceDir or /FontResourceDir. Improve security for device related +access to the file system and to pipes by allowing the dangerous parameters +to be locked (for example, OutputFile). The locking is performed after +command line parameters are established. This should address SF bug #474582 +and eliminate the need for the RedHat PARANOIDSAFER patch. +(gdevprn.c [1.5.6.1], gdevvec.c [1.12.2.1], gp.h [1.8.2.1], +gp_dosfe.c [1.2.6.1], gp_dosfs.c [1.2.6.1], gp_unifn.c [1.2.6.1], +gsdparam.c [1.4.6.1], gsutil.c [1.4.6.1], gsutil.h [1.3.6.1], +gxdevcli.h [1.5.2.1], gxdevice.h [1.4.6.1]: 2002/01/25 06:33:09 rayjj) + +</pre><h2><a name="7.04-Other"></a>Other</h2><pre> + +Adds basic autoconf support to the build system. (.cvsignore [1.2.2.1], +Makefile.in [1.1.4.1], autogen.sh [1.3.4.1], configure.ac [1.4.4.1]: +2002/01/24 01:30:56 giles) + +Adds IJS driver to Ghostscript. Includes complete IJS version 0.33 +distribution. Also includes autoconf patch by Ralph Giles. +(Makefile.in [1.1.4.2], configure.ac [1.4.4.2]: 2002/02/01 03:30:13 raph) + +<hr> + +<h1><a name="Version7.03"></a>Version 7.03 (2001-10-20)</h1> + +<p> +This is a fully tested, stable release of Ghostscript. It fixes quite a +few issues with 7.02. + +<p> Major changes include: + +<ul> +<li>Integration of icclib 2.0. + +<li>There was at least one embarassing pdfwrite bug, now fixed. + +<li>Significant shading speedups, especially for worst-case files +such as Coons01.ps. + +<li>The stdio logic is a lot more robust. 7.02 had some problems, +especially with trying to set stdin to non-blocking. + +<li>The usual bug fixes. In particular, regression testing against +7.00 shows only one serious regression (035-01.ps), and numerous +progressions. + +</ul> + +<p> +The following SourceForge bug numbers are currently open: 215256, +219798, 222727, 226477, 405342, 406689, 406979, 407342, 414947, +414985, 415016, 415142, 415170, 416131, 416830, 418241, 421057, +422532, 423838, 427193, 427314, 427347, 428891, 428973, 432040, +432657, 434277, 434707, 436099, 436897, 437285, 438679, 438957, +443745, 444791, 446344, 446672, 448199, 450663, 451456, 452155, +453969, 457838, 458261, 458500, 458769, 458775, 458780, 462221, +465720, 465921, 465936, 468386, 468762, 469518, 472681, 473305. + +<h3><a name="7.03_Incompatible_changes"></a>Incompatible changes</h3> + +<p> +No incompatible changes have been recorded for this version. + +<pre> + + + +<h2><a name="7.03-Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - Add new Windows and Unix platform files to developer +documentation. (doc/Develop.htm [1.46]: 2001/09/23 08:54:03 ghostgum) + - Adds a -dNOCCFONTS switch to disable use of compiled-in fonts. +(doc/Use.htm [1.32]: 2001/10/01 05:25:55 lpd) + - Added potential workaround for DCTEncode filter problem where the +image has less rows than requested. (doc/Issues.htm [1.13]: 2001/10/03 +17:24:23 jackiem) + - Fixes reference counting for PDF 1.4 device filter stack. +Temporary patch to not free PDF 1.4 marking device for images (it was being +freed prematurely). (doc/Issues.htm [1.14]: 2001/10/17 17:28:10 raph) + - Syncs with hpijs version 0.97, and fixes a documentation bug. +(doc/Devices.htm [1.33]: 2001/10/19 04:20:08 raph) + - Documentation and version number change in preparation for 7.03 +release. (doc/API.htm [1.11], doc/Bug-form.htm [1.23], +doc/Bug-info.htm [1.20], doc/C-style.htm [1.21], doc/Commprod.htm [1.15], +doc/Copying.htm [1.13], doc/Current.htm [1.13], doc/DLL.htm [1.15], +doc/Develop.htm [1.47], doc/Devices.htm [1.34], doc/Drivers.htm [1.21], +doc/Fonts.htm [1.22], doc/Helpers.htm [1.17], doc/History1.htm [1.13], +doc/History2.htm [1.13], doc/History3.htm [1.13], doc/History4.htm [1.13], +doc/History5.htm [1.15], doc/History6.htm [1.30], doc/History7.htm [1.4], +doc/Htmstyle.htm [1.18], doc/Install.htm [1.26], doc/Issues.htm [1.15], +doc/Language.htm [1.34], doc/Lib.htm [1.14], doc/Maintain.htm [1.23], +doc/Make.htm [1.36], doc/New-user.htm [1.30], doc/News.htm [1.89], +doc/Projects.htm [1.33], doc/Ps-style.htm [1.13], doc/Ps2epsi.htm [1.15], +doc/Ps2pdf.htm [1.32], doc/Psfiles.htm [1.22], doc/README [1.12], +doc/Readme.htm [1.31], doc/Release.htm [1.40], doc/Source.htm [1.13], +doc/Tester.htm [1.14], doc/Unix-lpr.htm [1.13], doc/Use.htm [1.33], +doc/Xfonts.htm [1.13], doc/gs-vms.hlp [1.12], man/dvipdf.1 [1.10], +man/font2c.1 [1.10], man/gs.1 [1.10], man/gslp.1 [1.10], man/gsnd.1 [1.10], +man/pdf2dsc.1 [1.10], man/pdf2ps.1 [1.12], man/pdfopt.1 [1.10], +man/pf2afm.1 [1.10], man/pfbtopfa.1 [1.11], man/printafm.1 [1.10], +man/ps2ascii.1 [1.10], man/ps2epsi.1 [1.10], man/ps2pdf.1 [1.14], +man/ps2pdfwr.1 [1.13], man/ps2ps.1 [1.17], man/wftopfa.1 [1.10]: 2001/10/20 +08:44:30 raph) + +</pre><h2><a name="7.03-Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - cvs2hist no longer worked in Python 2.1 and later: the regex and +regsub modules were superseded by re, and append() no longer accepted +multiple arguments to create a tuple. The fixes are backward compatible for +all versions of Python from 1.5 on. (toolbin/cvs2hist.py [1.7]: 2001/09/23 +04:45:10 lpd) + - The previous update to make cvs2hist use Python's re module rather +than the obsolete regex and regsub modules didn't change the code to use +match objects when necessary. Finishes fixing SourceForge #462777. +(toolbin/cvs2hist.py [1.8]: 2001/09/23 20:43:16 lpd) + - Some print statements for debugging were accidentally left in the +code. (toolbin/cvs2hist.py [1.9]: 2001/09/23 21:05:12 lpd) + - Committing in . Modified Files: gs/src/gp_stdia.c +gs/src/openvms.mmk gs/src/ziodevs.c patches for OpenVMS (openvms.mmk [1.10]: +2001/09/24 10:47:06 joukj) + - Fixes for stdin as a result of using callouts. Use unbuffered +read, not non-blocking read. Change gp_stdin_read to use file pointer not +handle. Remove gp_stdin_init since we don't need to set non-blocking. Change +gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout +correctly. Added casts to fix compiler warnings in dxmain.c. Corrected +header dependencies. Fixes SourceForge bug #467787. (dvx-tail.mak [1.5], +macos-mcp.mak [1.3], openvms.mak [1.16], openvms.mmk [1.11], os2.mak [1.19], +unix-aux.mak [1.5], watc.mak [1.16], winlib.mak [1.12]: 2001/10/12 21:37:08 +ghostgum) + - Committing in . Modified Files: gs/src/openvms.mmk OpenVMS needs +target : sources ^ this space is realy needed. Otherwise MMS/MMK chokes on +it!!!! (openvms.mmk [1.12]: 2001/10/15 10:24:21 joukj) + - When building gsx and gsc, use the GS makefile macro as the shared +library name to link against, not a hard coded gs. (unix-dll.mak [1.6]: +2001/10/17 10:11:23 ghostgum) + - Removes cheq.ps from list of example files installed. +(unixinst.mak [1.20]: 2001/10/17 19:48:36 raph) + - uses concrete color space of alternate color space, rather than +simply alternate color space, to determine target color space for +concretizing /All colors. Fixes regression of non-sepqxd2distiller.pdf, for +which those color spaces differed. (gscsepr.c [1.13]: 2001/10/21 06:02:21 + raph) + - Updates icclib to version 2.0, and integrates icclib changes. In +particular, icclib now accesses Ghostscript streams through the clean +icmFile object interface, rather than previous hack. Removes remnants of +previous hack, including gs_stdio.h header file and sread() and swrite() +functions in stream.c. (lib.mak [1.53]: 2001/10/19 21:52:50 raph) + - Documentation and version number change in preparation for 7.03 +release. (version.mak [1.36]: 2001/10/20 08:44:31 raph) + - Updates default MSVC_VERSION to 6. (msvc32.mak [1.20]: 2001/10/20 +08:45:39 raph) + +</pre><h2><a name="7.03-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - Committing in . Modified Files: gs/src/gp_stdia.c +gs/src/openvms.mmk gs/src/ziodevs.c patches for OpenVMS (gp_stdia.c [1.2], +ziodevs.c [1.4]: 2001/09/24 10:47:06 joukj) + - add missing file descriptor variable to stdin function of +dxmainc.c. Fixes SourceForge bug #465214. (dxmainc.c [1.3]: 2001/09/28 +22:04:03 ghostgum) + - If gtk+ GUI can't be initialised, disable display device. This +allows gsx to be used without an X display. Partial fix for SourceForge bug +#450933. (dxmain.c [1.5]: 2001/10/12 11:10:37 ghostgum) + - Fixes for stdin as a result of using callouts. Use unbuffered +read, not non-blocking read. Change gp_stdin_read to use file pointer not +handle. Remove gp_stdin_init since we don't need to set non-blocking. Change +gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout +correctly. Added casts to fix compiler warnings in dxmain.c. Corrected +header dependencies. Fixes SourceForge bug #467787. (dxmain.c [1.6], +dxmainc.c [1.4], gp_stdia.c [1.3], gp_stdin.c [1.2]: 2001/10/12 21:37:08 +ghostgum) + - Proposed log message: Fix: Callout implementation of %stdin, +%stdout and %stderr now correctly allocates the streams in system memory. +This avoids a crash during garbage collection seen during frequent +open/close of stderr.. Fixes SourceForge bugs #427316, #442477. +(ziodevsc.c [1.3]: 2001/10/15 21:44:42 ghostgum) + - When using STDIO_IMPLEMENTATION=, call gp_stdin_read with a file +pointer, not a file handle. (ziodevs.c [1.5]: 2001/10/17 21:12:44 ghostgum) + - Use unbuffered read within gtk+ handler instead of using +non-blocking read. While waiting for stdin, allow gtk main loop to block to +avoid wasting CPU. (dxmain.c [1.7]: 2001/10/20 08:22:05 ghostgum) + +</pre><h2><a name="7.03-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - If "distiller" image compression options were changed in the +middle of a file, the parameter list holding them might not be set back to +read mode when using them to compress an image, causing an error. Fixes +SourceForge #464938. (gdevpsdi.c [1.15]: 2001/09/25 22:00:44 lpd) + - bmp16 and png16 devices now create 4 bit/pixel bitmaps instead of +8. bmp256 and png256 devices now use dci values which match the color +mapping functions. (gdevbmp.c [1.4], gdevpng.c [1.4]: 2001/09/28 22:06:21 +ghostgum) + - Don't omit zero length deltas when stroking so that linecap will +be produced by resulting PS or EPS file. SourceForge bug #466162. +(gdevps.c [1.19]: 2001/09/28 23:18:46 rayjj) + - Fixes for stdin as a result of using callouts. Use unbuffered +read, not non-blocking read. Change gp_stdin_read to use file pointer not +handle. Remove gp_stdin_init since we don't need to set non-blocking. Change +gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout +correctly. Added casts to fix compiler warnings in dxmain.c. Corrected +header dependencies. Fixes SourceForge bug #467787. (gdevsppr.c [1.5]: +2001/10/12 21:37:08 ghostgum) + - When the display device fails to allocate memory for the bitmap, +set the memory device width and height to zero to prevent drawing on it. +Always call the display_size callback to prevent a lockup in the caller, and +if there is no memory tell the caller that the width and height are zero. +Add some casts to remove compiler warnings. Fixes SourceForge bug #430879. +(gdevdsp.c [1.5]: 2001/10/12 21:41:25 ghostgum) + - Syncs with hpijs version 0.97, and fixes a documentation bug. +(gdevhpij.c [1.3]: 2001/10/19 04:20:07 raph) + +</pre><h2><a name="7.03-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - pdfwrite didn't set the orig_matrix of standard fonts, sometimes +causing re-encoded characters to be written with a width of 0. Bug +introduced by fix for #439474, gdevpdff.c [1.19]. Fixes SourceForge #463400. +(gdevpdff.c [1.22]: 2001/10/05 05:40:41 lpd) + - pdfwrite allowed AutoRotatePages to override DSC comments rather +than vice versa, and it interpreted "Portrait" in a DSC orientation comment +as "don't rotate" rather than as "rotate if necessary so that width < +height." Fixes SourceForge #467259, although the result is not what the +submitter wanted. (gdevpdf.c [1.38], gdevpdfp.c [1.19], gdevpdfx.h [1.34]: +2001/10/07 05:33:11 lpd) + +</pre><h2><a name="7.03-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - Pop the /None key in the SMask processing of the 'gs' in a PDF 1.4 +document. Fixes SourceForge bug #459647 for Artifex customer Accusoft. +(lib/pdf_draw.ps [1.35]: 2001/10/05 18:25:16 rayjj) + - Enhances -dDEBUG for encrypted PDF files to print strings after +decryption. (lib/pdf_sec.ps [1.5]: 2001/10/09 20:17:23 lpd) + - If LastPage was greater than the number of pages in the document, +a rangecheck was generated. Instead, limit LastPage (silently) to the number +of pages in the document. If FirstPage is past end of document, issue a +warning. Also, if no pages are processed due to FirstPage > LastPage, +give a clear error message. SourceForge bug #470025. +(lib/pdf_main.ps [1.35]: 2001/10/12 07:07:54 rayjj) + - Changing the hack in PDF font processing, which chooses character +width with encodings where the same character appears more than once. New +code takes width for character code which appears in Differences. Source +Forge bugs #444366, #468389. (lib/pdf_font.ps [1.22]: 2001/10/14 01:28:05 +igorm) + - Fix for #471414. Thanks to Leon Bottou for his excellent analysis +and fix for this problem. Ghostscript was incorrectly handling a PDF shading +dictionary in which the /Function entry contained an array of function +dictionary references. An additonal oforce was required in the array +processing loop. (lib/pdf_draw.ps [1.36]: 2001/10/16 22:20:31 dancoby) + - Applied two patches reported in +http://www.ghostscript.com/pipermail/gs-code-review/2001-October/001255.html +by Hideyuki Suzuki / hideyuki at sat dot t dot u-tokyo dot ac dot jp. +pdf_font.ps: automatic substitution & transformation of CID-keyed fonts. +pdf_ops.ps: make spacings vertical when WMode is 1. (lib/pdf_font.ps [1.23], +lib/pdf_ops.ps [1.17]: 2001/10/19 16:42:47 masata-y) + +</pre><h2><a name="7.03-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Adds a -dNOCCFONTS switch to disable use of compiled-in fonts. +(lib/gs_ccfnt.ps [1.5], lib/gs_init.ps [1.39]: 2001/10/01 05:25:55 lpd) + - After removing a compiled font with undefinefont, loading the font +or asking for its resourcestatus left extra information on the stack. Fixes +SourceForge #458818. (lib/gs_res.ps [1.16]: 2001/10/01 05:56:58 lpd) + - Clean up PostScript files in examples directory to prevent +spurious bug reports caused when running more than a sigle file or running +chess.ps without cheq.ps in the current directory. Thanks to Russell Lang +for cleanup on DSC comment and structure. (examples/alphabet.ps [1.2], +examples/chess.ps [1.2], examples/colorcir.ps [1.2], +examples/doretree.ps [1.2], examples/escher.ps [1.2], +examples/golfer.ps [1.2], examples/grayalph.ps [1.2], +examples/snowflak.ps [1.2], examples/tiger.ps [1.2], +examples/vasarely.ps [1.2], examples/waterfal.ps [1.3]: 2001/10/01 21:28:25 +rayjj) + - Remove this file which was referenced from chess.ps -- now it is +included in chess.ps to prevent errors when cheq.ps could not be located. +(examples/cheq.ps [1.2]: 2001/10/01 21:33:05 rayjj) + - When using a substitute for an unknown font, add an alias in +FontDirectory under the original requested font name. +(lib/gs_fonts.ps [1.12]: 2001/10/01 21:35:53 rayjj) + - Undo previous 1.12 update. The PS file that exhibited the problem +was bad as was my testing against Adobe PS behaviour. Substituted fonts are +neither aliased, nor entered in the FontDirectory by Adobe PostScript. Fixes +regression bug with Genoa PS LL3 FTS test 313-01.ps. +(lib/gs_fonts.ps [1.13]: 2001/10/09 18:01:17 rayjj) + - Fixing inaccurate coding in Type 2 font processing : when +GlobalSubrs absents, old code damages useful information in +charstring_font_refs_s::GlobalSubrs, possibly causing indeterministic error. +(zfont2.c [1.4]: 2001/10/11 17:55:32 igorm) + - Fix : Making GlobalSubrs to be shared for all descendent fonts +within CFF CID font. 1/2 fix for Source Forge bug #468389 "rangecheck in +type2execchar" (lib/gs_cff.ps [1.10]: 2001/10/12 08:52:14 igorm) + - Fixes for stdin as a result of using callouts. Use unbuffered +read, not non-blocking read. Change gp_stdin_read to use file pointer not +handle. Remove gp_stdin_init since we don't need to set non-blocking. Change +gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout +correctly. Added casts to fix compiler warnings in dxmain.c. Corrected +header dependencies. Fixes SourceForge bug #467787. (dpmain.c [1.5], +dwmainc.c [1.8], idebug.c [1.4], igc.c [1.5], imain.c [1.19]: 2001/10/12 +21:37:08 ghostgum) + - Documentation and version number change in preparation for 7.03 +release. (lib/gs_init.ps [1.40]: 2001/10/20 08:44:31 raph) + +</pre><h2><a name="7.03-Streams"></a>Streams</h2><pre> + +Fixes problems: + - Updates icclib to version 2.0, and integrates icclib changes. In +particular, icclib now accesses Ghostscript streams through the clean +icmFile object interface, rather than previous hack. Removes remnants of +previous hack, including gs_stdio.h header file and sread() and swrite() +functions in stream.c. (stream.c [1.15]: 2001/10/19 21:52:50 raph) + +</pre><h2><a name="7.03-Library"></a>Library</h2><pre> + +Fixes problems: + - Fixes nontermination of triangle subdivision in shading, as +triggered by FTS 446-01.ps. The criterion for whether a triangle spans more +than one pixel was too conservative, as it took the fill adjust into +account. (gxshade4.c [1.6]: 2001/10/01 21:16:47 raph) + - Correct inverted Decode cases of ImageType 4 color range masks for +the Monochrome single bit per pixel case. Fixes SourceForge bug #462319 for +Artifex customer #671. (gxifast.c [1.4]: 2001/10/06 03:27:57 rayjj) + - Fix : More error tolerance in type2 charstring interpreter. 2/2 +fix for Source Forge bug #468389 "rangecheck in type2execchar". Thanks to L. +Peter Deutsch for participation and for the comment in code. +(gstype2.c [1.10]: 2001/10/12 08:55:24 igorm) + - Fixes for stdin as a result of using callouts. Use unbuffered +read, not non-blocking read. Change gp_stdin_read to use file pointer not +handle. Remove gp_stdin_init since we don't need to set non-blocking. Change +gp_stdin.c to use fread/fwrite to be more portable. Flush redirected stdout +correctly. Added casts to fix compiler warnings in dxmain.c. Corrected +header dependencies. Fixes SourceForge bug #467787. (gp.h [1.8], +gxclutil.c [1.5], unistd_.h [1.4]: 2001/10/12 21:37:08 ghostgum) + - Fixes reference counting for PDF 1.4 device filter stack. +Temporary patch to not free PDF 1.4 marking device for images (it was being +freed prematurely). (gdevp14.c [1.4], gsdfilt.c [1.3]: 2001/10/17 17:28:10 +raph) + - Updates icclib to version 2.0, and integrates icclib changes. In +particular, icclib now accesses Ghostscript streams through the clean +icmFile object interface, rather than previous hack. Removes remnants of +previous hack, including gs_stdio.h header file and sread() and swrite() +functions in stream.c. (gsicc.c [1.5], gsicc.h [1.3]: 2001/10/19 21:52:50 +raph) + - Documentation and version number change in preparation for 7.03 +release. (gscdef.c [1.15]: 2001/10/20 08:44:31 raph) + +</pre><h2><a name="7.03-Other"></a>Other</h2><pre> + +Fixes problems: + - Updates icclib to version 2.0, and integrates icclib changes. In +particular, icclib now accesses Ghostscript streams through the clean +icmFile object interface, rather than previous hack. Removes remnants of +previous hack, including gs_stdio.h header file and sread() and swrite() +functions in stream.c. (gs_stdio.h [1.3], icclib/Licence.txt [1.1], +icclib/NOTES [1.2], icclib/Readme.txt [1.1], icclib/icc.c [1.6], +icclib/icc.h [1.4], icclib/icc9809.h [1.2]: 2001/10/19 21:52:50 raph) + +<hr> + +<h1><a name="Version7.02"></a>Version 7.02 (2001-09-22)</h1> + +<p> +This is a prerelease of Ghostscript, in preparation for a forthcoming +fully tested, supported 7.0x release. We are skipping the 7.01 release +number because that number is now associated with CVS versions. + +<p> Major changes include: + +<ul> +<li>Compile and portability fixes, including the dreaded time.h +problem that affects up-to-date GNU/Linux builds. + +<li>Big improvements in stdio, including a new -sstdout= redirect +switch. In addition, reading from stdin uses nonblocking I/O, so the +ugly -_ workaround is no longer necessary. + +<li>Substantial pdfwrite improvements. + +<li>128-bit encrypted files are now supported. + +<li>The usual bug fixes. + +</ul> + +Release issues that will be fixed before next fully supported version: + +<ul> + +<li> Update icclib to 2.0. + +<li> Update hpijs and Omni glue to latest versions. + +<li> Make sure all source files are referenced in Develop.htm. + +</ul> + +<p> +The following SourceForge bug numbers are currently open: +215256, 219798, 222727, 224863, 226477, 405342, 406285, 406689, +406979, 407342, 411753, 413669, 414947, 414985, 415016, 415142, +415170, 415177, 415526, 416043, 416131, 416830, 418241, 418597, +421057, 422532, 423838, 426274, 427193, 427314, 427316, 427347, +428891, 428973, 430879, 431065, 432040, 432657, 433835, 434277, +434707, 435154, 436099, 436897, 437285, 438679, 438957, 441566, +442477, 443745, 444791, 446344, 446672, 446676, 446035, 447695, +448199, 450271, 450663, 451456, 452155, 452173, 453861, 453969, +457838, 458025, 458261, 458500, 458769, 458775, 458780, 458818, +459645, 459647, 459764, 460292, 462139, 462212, 462221, 462319, +462777, 463123, 463400. + +<h3><a name="7.02_Incompatible_changes"></a>Incompatible changes</h3> + +<p> +No incompatible changes have been recorded for this version. + +<pre> + + + +<h2><a name="7.02-Documentation"></a>Documentation</h2><pre> + +Fixes problems: + - Fixes a typo: gs_stable_memory should have been gs_memory_stable. +(doc/Develop.htm [1.41]: 2001/06/17 04:06:05 lpd) + - The "Incompatible changes" sections for 6.62 and 6.61 were +duplicates of the section for 6.60. (doc/History6.htm [1.28]: 2001/07/28 +23:02:56 lpd) + +Increments version number after 7.00 release. Also fixes gs_init.ps to +consistently print minor revision number as two digits. +(doc/News.htm [1.86]: 2001/04/17 07:40:12 raph) + +Documents the circumstances when no structure descriptor is needed. +(doc/Develop.htm [1.39]: 2001/04/20 19:44:18 lpd) + +Adds documentation for the graphics library's implementation of clipping. +(doc/Develop.htm [1.40]: 2001/04/20 20:17:28 lpd) + +Make copyright and license info at the end match other .htm files. +(doc/Humor.htm [1.3]: 2001/04/21 17:14:33 rayjj) + +Added entry about confusing error messages. (doc/Issues.htm [1.10]: +2001/04/27 23:41:28 alexcher) + +Clarifies the manpage for the ps2pdfwr wrapper script, mentioning the +-dSAFER option and adding a sentence describing the role of this particular +script. (man/ps2pdfwr.1 [1.10]: 2001/05/03 21:07:33 giles) + +Adds a 'see also' reference to ps2pdf from the pdf2pdfwr manpage. +(man/ps2pdfwr.1 [1.11]: 2001/05/03 23:54:51 giles) + +Restructures the C style guide to explicitly distinguish language +restrictions from purely stylistic issues. (Requested by Artifex engineer.) +(doc/C-style.htm [1.18]: 2001/05/25 00:35:41 lpd) + +Updates hpijs driver to version 0.96. (doc/Devices.htm [1.30]: 2001/05/30 +23:25:25 raph) + +Minor documentation update for HPIJS driver (adds more supported devices). +(doc/Devices.htm [1.31]: 2001/05/30 23:58:44 raph) + +updates the bug report for to reflect the public nature of the new bug lists +and tracker. (doc/Bug-form.htm [1.21]: 2001/06/05 02:30:47 giles) + +corrects the spelling of Metrowerks CodeWarrior (doc/Bug-info.htm [1.18]: +2001/06/05 02:31:58 giles) + +branches: 1.1.2; file COPYING was initially added on branch GS_6_5. +(doc/COPYING [1.1]: 2001/06/05 07:07:35 raph) + +Changes release policy to preserve the original filenames of 3rd party +tarballs. (doc/Release.htm [1.38]: 2001/06/06 18:46:23 giles) + +This revision allows the MSVC makefiles to work with spaces in the DEVSTUDIO +path. Also if DEVSTUDIO is set to empty then the PATH, LIB, INCLUDE +environment variables are used for building. The MSVC section of Make.htm +was enlarged. (doc/Make.htm [1.32]: 2001/06/12 23:06:19 dancoby) + +Adds an explanation of why stable allocators are needed, rather than using +the system VM allocator for all stable objects. (doc/Develop.htm [1.42]: +2001/06/17 04:12:06 lpd) + +Adds extern_inline for including inline procedures in header files. +(doc/C-style.htm [1.19]: 2001/06/17 05:09:07 lpd) + +Adds and documents an operator <prefix|null> <access_string> +.tempfile <filename> <file> to create and open a temporary file, +using gp_open_scratch_file. (doc/Language.htm [1.32]: 2001/07/15 13:54:17 +lpd) + +Adds pphs, a utility for printing the Primary Hint Stream of a linearized +PDF file. (doc/Develop.htm [1.43], doc/Psfiles.htm [1.20]: 2001/07/15 +16:25:02 lpd) + +Adds documentation of the new macos build processes. (doc/Make.htm [1.33]: +2001/07/18 20:17:11 giles) + +Makes explicit note of the requirement to update the 'incompatible changes' +section of the documentation with relevant commits. +(doc/Maintain.htm [1.19], doc/News.htm [1.87]: 2001/07/31 03:31:35 giles) + +Adds documentation for the 'Fix:' prefix handling in changelog generation. +(doc/Maintain.htm [1.20]: 2001/07/31 08:06:48 giles) + +Removes a reference to mailing separate bug fix notices to artifex made +obsolete by the commit announcement mailing list. (doc/Maintain.htm [1.21]: +2001/07/31 20:27:42 giles) + +Documentation update : ps2ascii can't handle incremental fonts. +(doc/Issues.htm [1.11]: 2001/08/06 10:24:01 igorm) + +Update to 1. add Active-X project suggested by a user. 2. Remove the DSC +processing project (completed). 3. provide minor update to the pswrite +project. 4. Update the ICC profile support project to reflect the partial +support now completed (in 7.00). (doc/Projects.htm [1.31]: 2001/08/17 +19:42:49 rayjj) + +Adds documentation for the -sPDFPassword command line option for encrypted +pdf files, introduced with the inclusion of pdf_sec.ps. (doc/Use.htm [1.29]: +2001/09/05 22:47:27 giles) + +Notes that ps2pdf may cause a limitcheck on PostScript files with +unreasonably large coordinates; suggests using -r as a workaround. Responds +to SourceForge bug #461335. (doc/Ps2pdf.htm [1.30]: 2001/09/14 00:40:04 lpd) + +Update documentation to describe how to build and install ghostscript as a +shared object on Unix. Fixes sourceforge bug #444593. +(doc/Install.htm [1.24], doc/Make.htm [1.34]: 2001/09/15 08:04:42 ghostgum) + +Speed up reading stdin when using callouts. Add platform-specific functions +for reading stdin, to allow non-blocking reading of stdin if supported. +Fixes Sourceforge bug #416973. (doc/Develop.htm [1.44]: 2001/09/15 08:48:33 +ghostgum) + +Allow PostScript stdout to be redirected to stderr or a file. This is +required to avoid driver stdout being mixed with PostScript stdout. Options +are -sstdout=filename or -sstdout=%stderr. To reset redirection use +-sstdout=- or -sstdout=%stdout. Fixes Sourceforge bug #222534. +(doc/Use.htm [1.30]: 2001/09/22 07:33:35 ghostgum) + +Updates version and date in documentation in preparation for 7.02 +pre-release. (doc/API.htm [1.10], doc/Bug-form.htm [1.22], +doc/Bug-info.htm [1.19], doc/C-style.htm [1.20], doc/Commprod.htm [1.14], +doc/Copying.htm [1.12], doc/Current.htm [1.12], doc/DLL.htm [1.14], +doc/Develop.htm [1.45], doc/Devices.htm [1.32], doc/Drivers.htm [1.20], +doc/Fonts.htm [1.21], doc/Helpers.htm [1.16], doc/History1.htm [1.12], +doc/History2.htm [1.12], doc/History3.htm [1.12], doc/History4.htm [1.12], +doc/History5.htm [1.14], doc/History6.htm [1.29], doc/History7.htm [1.2], +doc/Htmstyle.htm [1.17], doc/Install.htm [1.25], doc/Issues.htm [1.12], +doc/Language.htm [1.33], doc/Lib.htm [1.13], doc/Maintain.htm [1.22], +doc/Make.htm [1.35], doc/New-user.htm [1.29], doc/News.htm [1.88], +doc/PUBLIC [1.5], doc/Projects.htm [1.32], doc/Ps-style.htm [1.12], +doc/Ps2epsi.htm [1.14], doc/Ps2pdf.htm [1.31], doc/Psfiles.htm [1.21], +doc/README [1.11], doc/Readme.htm [1.30], doc/Release.htm [1.39], +doc/Source.htm [1.12], doc/Tester.htm [1.13], doc/Unix-lpr.htm [1.12], +doc/Use.htm [1.31], doc/Xfonts.htm [1.12], doc/gs-vms.hlp [1.11], +man/dvipdf.1 [1.9], man/font2c.1 [1.9], man/gs.1 [1.9], man/gslp.1 [1.9], +man/gsnd.1 [1.9], man/pdf2dsc.1 [1.9], man/pdf2ps.1 [1.11], +man/pdfopt.1 [1.9], man/pf2afm.1 [1.9], man/pfbtopfa.1 [1.10], +man/printafm.1 [1.9], man/ps2ascii.1 [1.9], man/ps2epsi.1 [1.9], +man/ps2pdf.1 [1.13], man/ps2pdfwr.1 [1.12], man/ps2ps.1 [1.16], +man/wftopfa.1 [1.9]: 2001/09/22 16:26:21 raph) + +</pre><h2><a name="7.02-Procedures"></a>Procedures</h2><pre> + +Fixes problems: + - Removing the dependence of graphic library on PS interpreter. +Source Forge bug #415003. (lib.mak [1.48]: 2001/04/20 09:38:39 igorm) + - Undoes makefile breakage introduced in previous version (for VMS). +(icclib.mak [1.3], lib.mak [1.50]: 2001/04/24 18:36:55 raph) + - !ifndef COMPILED_INITS instead of !ifndef COMPILE_INITS Discovered +fixing bug #414985 from anonymous user (msvclib.mak [1.13]: 2001/04/28 +00:53:46 alexcher) + - Optimization for shading fill. The general path filling algorithm +subdivides fill region with trapezoid or rectangle subregions and then +paints each subregion with given color. If the color is shading, each +subregion to be subdivided into areas of constant color. But with radial +shading each area is a high order polygon, being subdivided into smaller +subregions, so as total number of subregions grows huge. Faster processing +is done here by changing the order of subdivision cycles : we first +subdivide the shading into areas of constant color, then apply the general +path filling algorithm (i.e. subdivide each area into trapezoids or +rectangles), using the filling path as clip mask. Source Forge bug #414022. +(lib.mak [1.51]: 2001/05/10 18:36:40 igorm) + - Adobe PhotoShop 5+ duotone code assumes that setcolor operator +calls tint transform function if source colors don't make a subset of device +colors. Bug #224056, Customer #150 (int.mak [1.47]: 2001/06/07 14:48:24 +alexcher) + - index.html and gs.css weren't being copied to the installed +documentation directory. (unixinst.mak [1.19]: 2001/07/25 21:10:39 giles) + - define previously undefined make variables. DISPLAY_DEV in +unix-gcc.mak. gdevdsp_h and gdevdsp2_h in int.mak. Add missing iref.h +dependency for idisp. Bug #415006. (devs.mak [1.46], int.mak [1.48], +unix-gcc.mak [1.22]: 2001/08/01 08:58:49 ghostgum) + - Link GNU/Linux shared object as position independent code, instead of +just compiling the modules as position independent. Adds prefix to shared +object recursive make to allow install to a temporary location while +building a distribution. (unix-dll.mak [1.3]: 2001/08/01 09:42:01 ghostgum) + - allow any value of JVERSION in the platform-specific makefiles to +reduce user confusion over minor version naming. We continue to support only +libjpeg v6*. Sourceforge bugs #457617 and #457838, September 2001. +(jpeg.mak [1.4]: 2001/09/05 21:46:35 giles) + - Fix for MS-Windows graphics library. Remove references to +interpreter from gp_check_interrupts function in library. Make gslib.c +access gs_stdin not stdin. Correct the build paths for graphics devices. Add +missing graphics devices. (msvc32.mak [1.18], msvclib.mak [1.16], +winlib.mak [1.11]: 2001/09/22 07:07:02 ghostgum) + - Prevent memory corruption when reading %statementedit. Allocate +lineedit buffer in correct memory space. Line being assembled is stored in a +PostScript string during callouts, so prevent zfilelineedit from reading +more than max_string_size bytes. Allocate extra space for trailing new-line +for statementedit, rather than fiddling the string length which broke when +sreadline reallocated the string. (int.mak [1.50]: 2001/09/22 07:26:45 +ghostgum) + - pdfwrite failed to recognize several of the standard screen spot +functions: Ellipse, Round, and Diamond weren't implemented, and several of +the others didn't match the PostScript implementation because of +float/double discrepancies. Also, pdfwrite wrote out halftone screens using +the adjusted ("actual") frequency and angle values rather than the requested +values. Fixes SourceForge #446676. (devs.mak [1.47]: 2001/09/22 16:27:04 +lpd) + +Increments version number after 7.00 release. Also fixes gs_init.ps to +consistently print minor revision number as two digits. (version.mak [1.34]: +2001/04/17 07:40:12 raph) + +Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c +gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk +gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS +(icclib.mak [1.2], openvms.mmk [1.7]: 2001/04/20 09:56:22 joukj) + +Committing in . Modified Files: gs/src/lib.mak Patch for OpenVMS (little +delayed since it was merged first with another commit) (lib.mak [1.49]: +2001/04/20 10:39:44 joukj) + +Committing in . Modified Files: gs/src/gdevpdf.c gs/src/imainarg.c +gs/src/openvms.mmk Merged in some patches by Rick Dyson, which affect +compilation on VMS only. (openvms.mmk [1.8]: 2001/04/25 08:19:41 joukj) + +Committing in . Modified Files: gs/src/openvms.mak bringing openvms.mak in +sync. with new features( Icclib etc.) and with new compile strategy with +long variable names( as in openvms.mmk) Patch from Rick Dyson. +(openvms.mak [1.12]: 2001/04/25 13:24:20 joukj) + +Changes gp_open_scratch_file() to use mkstemp() rather than mktemp() on gcc +builds, which avoids warnings. Adds CAPOPT variable to unix-gcc.mak to +select which function is used, so that builds will still succeed on systems +that don't have mkstemp(). (unix-gcc.mak [1.20]: 2001/05/07 19:05:46 +jackiem) + +Committing in . Modified Files: gs/src/openvms.mmk Enabling mkstemp on VMS. +(openvms.mmk [1.9]: 2001/05/08 12:28:38 joukj) + +This file is a new utility intended for debug. It is not yet ready for prime +time, but is available for whoever wants to fix it. The main problems are: +1. It doesn't work for files that use chained filters such as [ +/ASCII85Decode /FlateDecode ] 2. The PDF files that are written are +sometimes broken. GS gets an xref problem. This second problem may actually +due to lib/pdfwrite.ps since even when no conversion is done, the file is +bad. (toolbin/pdfinflt.ps [1.1]: 2001/05/31 04:54:51 rayjj) + +branches: 1.1.2; file gnudevs.mak was initially added on branch GS_6_5. +(gnudevs.mak [1.1]: 2001/06/05 07:07:37 raph) + +removes unnessary whitespace, which was breaking tmake.tcl. Part of +sourceforge bug #415170, 2001 April 10. (libpng.mak [1.7]: 2001/06/07 +22:01:16 giles) + +This revision allows the MSVC makefiles to work with spaces in the DEVSTUDIO +path. Also if DEVSTUDIO is set to empty then the PATH, LIB, INCLUDE +environment variables are used for building. The MSVC section of Make.htm +was enlarged. (msvc32.mak [1.16], msvccmd.mak [1.6], msvclib.mak [1.14], +msvctail.mak [1.6]: 2001/06/12 23:06:19 dancoby) + +updates makefiles to use version 1.0.12 of the png library. +(all-arch.mak [1.9], bcwin32.mak [1.11], dvx-gcc.mak [1.11], +libpng.mak [1.8], msvc32.mak [1.17], msvclib.mak [1.15], openvms.mak [1.13], +os2.mak [1.17], ugcclib.mak [1.13], unix-gcc.mak [1.21], +unixansi.mak [1.15], unixtrad.mak [1.15], watc.mak [1.13], +watclib.mak [1.13], watcw32.mak [1.12]: 2001/07/10 01:39:57 giles) + +drops support for libpng v0.89 and streamlines the library makefile. +(libpng.mak [1.9]: 2001/07/10 02:07:08 giles) + +minor comment cleanup (libpng.mak [1.10]: 2001/07/10 03:14:33 giles) + +branches: 1.1.2; Adds the makefile and script for the new macos build method +(macos-mcp.mak [1.1]: 2001/07/18 20:28:57 giles) + +To reduce redraw flicker, do not allow Windows to erase the background since +we paint it ourselves. Paint areas outside the page with the window +background colour or light grey. Save and restore window size using +registry. Add "Paste" to system menu of text window. Make error message box +a child of text window to avoid it appearing behind the text window. To +allow user to read the error message, the text window is not automatically +destroyed in the event of an error. The user must close text window using +close button or system menu. If text window closed, return e_Fatal to poll +function to provide a cleaner exit without a stack dump. (winint.mak [1.8]: +2001/08/01 09:50:36 ghostgum) + +Uses lynx instead of netscape to generate text versions of important +documentation files. (toolbin/pre [1.11]: 2001/08/18 02:50:09 giles) + +Adds a C implementation of the Arcfour encryption filter. This is a +work-alike of the RC4 cipher used in PDF encryption. (int.mak [1.49], +lib.mak [1.52]: 2001/09/02 06:16:41 giles) + +The Unix shared object loader 'gsx' depends on Gtk+ which causes it to fail +in an environment where X11 and Gtk+ are not available. Add a console only +loader 'gsc' which does not depend on X11 or Gtk+. This does not support the +'display' device. Fixes sourceforge bug #450933. (unix-dll.mak [1.4]: +2001/09/15 08:10:33 ghostgum) + +Speed up reading stdin when using callouts. Add platform-specific functions +for reading stdin, to allow non-blocking reading of stdin if supported. +Fixes Sourceforge bug #416973. (dvx-tail.mak [1.4], macos-mcp.mak [1.2], +openvms.mak [1.14], os2.mak [1.18], unix-aux.mak [1.4], watc.mak [1.14], +winlib.mak [1.10]: 2001/09/15 08:48:33 ghostgum) + +Change all interpreter builds to use callouts for stdio. Ghostscript library +builds still use file based stdio. (bcwin32.mak [1.12], dvx-gcc.mak [1.12], +gs.mak [1.5], openvms.mak [1.15], unix-gcc.mak [1.23], unixansi.mak [1.16], +unixtrad.mak [1.16], watc.mak [1.15], watcw32.mak [1.13]: 2001/09/15 +08:55:32 ghostgum) + +Correct makefile dependency for gsx/dxmainc.c. (unix-dll.mak [1.5]: +2001/09/22 07:21:00 ghostgum) + +Add the needed object files when building Windows large executable. +(msvc32.mak [1.19]: 2001/09/22 07:24:33 ghostgum) + +Updates version and date in documentation in preparation for 7.02 +pre-release. (version.mak [1.35]: 2001/09/22 16:26:22 raph) + +</pre><h2><a name="7.02-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - null object was converted to -nostringval- Discovered during the +work on pdfopt. (lib/pdfwrite.ps [1.4]: 2001/04/28 01:01:38 alexcher) + - On Windows GS enumerated "." and ".." as external resources and +failed with /invalidresource trying to load them later. (gp_ntfs.c [1.5]: +2001/05/04 20:27:40 alexcher) + - pass #xx escaped characters in names through and fix the escape +logic to prevent a /typecheck in add. (lib/pdfwrite.ps [1.5]: 2001/05/31 +04:38:42 rayjj) + - Many scripts for invoking Ghostscript-based utilities didn't +properly handle file names that included spaces. Unix and DOS/Windows/OS/2 +scripts required different fixes. (lib/dvipdf [1.2], lib/eps2eps [1.3], +lib/eps2eps.bat [1.5], lib/gssetgs.bat [1.3], lib/pdf2dsc.bat [1.2], +lib/pdf2ps [1.4], lib/pdf2ps.bat [1.5], lib/pdfopt [1.3], +lib/pdfopt.bat [1.3], lib/pf2afm.bat [1.3], lib/pfbtopfa [1.3], +lib/ps2ascii [1.3], lib/ps2epsi [1.7], lib/ps2epsi.bat [1.6], +lib/ps2epsi.cmd [1.3], lib/ps2pdf.bat [1.6], lib/ps2pdf12.bat [1.5], +lib/ps2pdf13.bat [1.5], lib/ps2pdf14.bat [1.2], lib/ps2pdfwr [1.6], +lib/ps2pdfxx.bat [1.10], lib/ps2ps [1.3], lib/ps2ps.bat [1.4]: 2001/06/22 +16:09:22 lpd) + - pdfopt gave an error if the input file had PageMode = /UseOutlines +but lacked an Outlines tree. Fixes SourceForge bug #410371. +(lib/pdfopt.ps [1.5]: 2001/07/01 07:16:28 lpd) + - The first pass of pdfopt always estimated the size of the primary +hint stream as 0, which occasionally caused the second-pass fixup to fail. +Fixes SourceForge bug #409887. (lib/pdfopt.ps [1.7]: 2001/07/01 07:23:36 +lpd) + - If the OpenAction of a document referred to a Page object, pdfopt +would try to include the page in the "document-level objects" section of the +output, causing a rangecheck error. Fixes SourceForge bug #437724. Also adds +more tracing to pdfopt (with -dPDEBUG). (lib/pdfopt.ps [1.8]: 2001/07/02 +15:50:19 lpd) + - gp_open_scratch_file concatenated the temporary directory name +with the prefix even if the prefix was an absolute path; also, it didn't +check the length of the final file name, possibly leading to memory +corruption. (gp_iwatc.c [1.6], gp_mswin.c [1.6], gp_os2.c [1.10], +gp_vms.c [1.7]: 2001/07/15 13:57:50 lpd) + - glyphshow procedure in ps2ascii lacks a pop in the for loop. Patch +from Leon Bottou. Source Forge bug #443361. (lib/ps2ascii.ps [1.3]: +2001/07/22 20:43:32 igorm) + - pdfopt was broken because SAFER prevented it from opening its +output and temporary files, and from deleting its temporary files. Note: +this fix requires the .tempfile operator added in src/zfile.c [1.9]. +(lib/pdfopt [1.4], lib/pdfopt.bat [1.4], lib/pdfopt.ps [1.9]: 2001/07/23 +06:57:27 lpd) + - Running font2c on any of the 35 standard fonts caused an +invalidaccess error if gs was built with compiled fonts (ccfonts.dev +"feature"). Fixes SourceForge #458816. (lib/font2c.ps [1.3]: 2001/09/13 +23:16:29 lpd) + - Fix for MS-Windows graphics library. Remove references to +interpreter from gp_check_interrupts function in library. Make gslib.c +access gs_stdin not stdin. Correct the build paths for graphics devices. Add +missing graphics devices. (gp_mslib.c [1.3], gp_mspol.c [1.1], +gp_mswin.c [1.7]: 2001/09/22 07:07:02 ghostgum) + +Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c +gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk +gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS +(gp_vms.c [1.6]: 2001/04/20 09:56:22 joukj) + +branches: 1.1.2; file gp_gnrdl.c was initially added on branch GS_6_5. +(gp_gnrdl.c [1.1]: 2001/06/05 07:07:37 raph) + +Change ps2pdfxx.bat to use lowercase output file extension to be consistent +with other platforms. This closes sourceforge bug #430129. +(lib/ps2pdfxx.bat [1.9]: 2001/06/15 05:32:56 jackiem) + +Adds more tracing output to pdfopt with -dPDEBUG. (lib/pdfopt.ps [1.6]: +2001/07/01 07:20:30 lpd) + +Adds more tracing (with -dPDEBUG) to lib/pdfwrite.ps, used by pdfopt. +(lib/pdfwrite.ps [1.6]: 2001/07/02 15:46:05 lpd) + +Adds pphs, a utility for printing the Primary Hint Stream of a linearized +PDF file. (lib/pphs [1.1], lib/pphs.ps [1.1]: 2001/07/15 16:25:02 lpd) + +Re-enables export of the hwnd parameter in the old dll interface. This is +required by macgsview. (gsdll.c [1.5]: 2001/07/18 20:16:24 giles) + +Adds initial support for macos. (gp_macio.c [1.1]: 2001/07/18 20:20:50 +giles) + +branches: 1.1.2; Adds initial support for macos. (gp_mac.c [1.1]: 2001/07/18 +20:20:50 giles) + +branches: 1.1.2; Adds the makefile and script for the new macos build method +(macgenmcpxml.sh [1.1]: 2001/07/18 20:28:57 giles) + +Adds descriptive labels to the output of the utility for printing linearized +PDF data. (lib/pphs.ps [1.2]: 2001/07/19 18:38:45 lpd) + +Protect the export of 'hwndtext', required by macgsview, with platform +#ifdefs to avoid conflicts with the win32 dll build. (gsdll.c [1.6]: +2001/07/23 05:25:08 giles) + +branches: 1.2.2; corrects line endings in gp_macio.c (gp_macio.c [1.2]: +2001/07/24 22:22:59 giles) + +Improves the comments printed with dumps of Linearized PDF hint tables. +(lib/pphs.ps [1.3]: 2001/07/24 22:24:28 lpd) + +Changes pdfopt to work around several Acrobat code and documentation bugs, +so that Acrobat now recognizes pdfopt output as "optimized". Fixes +SourceForge #438685. (lib/pdfopt.ps [1.10], lib/pdfwrite.ps [1.7]: +2001/07/30 07:16:32 lpd) + +The Unix shared object loader 'gsx' depends on Gtk+ which causes it to fail +in an environment where X11 and Gtk+ are not available. Add a console only +loader 'gsc' which does not depend on X11 or Gtk+. This does not support the +'display' device. Fixes sourceforge bug #450933. (dxmainc.c [1.1]: +2001/09/15 08:10:33 ghostgum) + +When using the Unix Gtk+ loader gsx, delay setting the default color map and +visual until the display device is opened. This may allow gsx to be used +when X11 is not available. May fix Sourceforge bug #450933. (dxmain.c [1.4]: +2001/09/15 08:14:21 ghostgum) + +Speed up reading stdin when using callouts. Add platform-specific functions +for reading stdin, to allow non-blocking reading of stdin if supported. +Fixes Sourceforge bug #416973. (gp_stdia.c [1.1], gp_stdin.c [1.1], +ziodevs.c [1.3]: 2001/09/15 08:48:34 ghostgum) + +Correct the stdin code in dxmainc.c (gsc) to be the same as gp_stdia.c. +(dxmainc.c [1.2]: 2001/09/22 07:16:50 ghostgum) + +</pre><h2><a name="7.02-Drivers"></a>Drivers</h2><pre> + +Fixes problems: + - Prevent empty or invalid OutputFile values from causing SEGV in +psrgb, psgray and psmono. SourceForge bug #414151. (gdevpsu.c [1.5]: +2001/04/20 02:35:24 rayjj) + - Corrects incorrect month value in TIFF headers. Need to increment +tm_mon by one to get actual month. Fix from Helge Blischke. +(gdevtifs.c [1.4]: 2001/04/20 06:36:00 rayjj) + - epswrite now writes each page into separate file, if OutputFile +specifies format. SourceForge bug #228641. (gdevps.c [1.17], +gdevpsim.c [1.5], gdevpsu.c [1.6], gdevpsu.h [1.3]: 2001/05/05 11:04:22 +igorm) + - Writing each page to separate file, epswrite wrote wrong number of +pages to their trailers. (gdevps.c [1.18], gdevpsim.c [1.6], +gdevpsu.c [1.7], gdevpsu.h [1.4]: 2001/05/10 17:41:22 igorm) + - Removes duplicate rc_decrement_only() in +pdf14_begin_typed_image(), so that the marking device is now deallocated +once. Fixes SourceForge bug #434705. (gdevpnga.c [1.4]: 2001/07/05 23:21:01 +raph) + +Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c +gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk +gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS (x_.h [1.3]: +2001/04/20 09:56:22 joukj) + +branches: 1.2.2; Updates hpijs driver to version 0.96. (gdevhpij.c [1.2], +gdevhpij.h [1.2]: 2001/05/30 23:25:25 raph) + +branches: 1.1.2; file defs.h was initially added on branch GS_6_5. +(defs.h [1.1]: 2001/05/31 08:28:49 raph) + +branches: 1.1.2; file gomni.c was initially added on branch GS_6_5. +(gomni.c [1.1]: 2001/05/31 08:28:49 raph) + +branches: 1.1.2; file gdevln03.c was initially added on branch GS_6_5. +(gdevln03.c [1.1]: 2001/06/05 07:07:37 raph) + +branches: 1.1.2; file gdevop4w.c was initially added on branch GS_6_5. +(gdevop4w.c [1.1]: 2001/06/05 07:07:37 raph) + +branches: 1.1.2; file gdevxes.c was initially added on branch GS_6_5. +(gdevxes.c [1.1]: 2001/06/05 07:07:37 raph) + +Adds knowledge of more paper sizes to PCL driver. Thanks to Jonathan Kamens +for the patch. (gdevpcl.c [1.5], gdevpcl.h [1.5]: 2001/07/15 06:38:38 raph) + +branches: 1.1.2; Adds initial support for macos. (gdevmac.c [1.1], +gdevmac.h [1.1], gdevmacpictop.h [1.1], gdevmacttf.h [1.1]: 2001/07/18 +20:20:50 giles) + +branches: 1.1.2; Adds the remaining macos source files (gdevmacxf.c [1.1]: +2001/07/18 20:27:39 giles) + +Added const to all printer device descriptors const gx_device_printer +gs_xxx_device = ... (gdev3852.c [1.3], gdev4081.c [1.3], gdev4693.c [1.3], +gdev8510.c [1.3], gdevadmp.c [1.3], gdevbj10.c [1.4], gdevcif.c [1.3], +gdevcljc.c [1.4], gdevcp50.c [1.3], gdevdjtc.c [1.3], gdevdm24.c [1.3], +gdevepsc.c [1.3], gdevepsn.c [1.3], gdevescp.c [1.3], gdevhl7x.c [1.5], +gdevimgn.c [1.4], gdevlbp8.c [1.3], gdevlj56.c [1.3], gdevmiff.c [1.3], +gdevn533.c [1.3], gdevo182.c [1.3], gdevokii.c [1.3], gdevpjet.c [1.3], +gdevsgi.c [1.2], gdevsnfb.c [1.3], gdevsppr.c [1.4], gdevsunr.c [1.4], +gdevtknk.c [1.3]: 2001/08/01 00:48:23 stefan911) + +</pre><h2><a name="7.02-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - Empty pages included a Contents entry whose value was an empty +array: the spec allows this, and AR3 and 4 accept it, but AR5 rejects it. +(gdevpdf.c [1.34]: 2001/06/29 06:52:13 lpd) + - When tiling with a bitmap, the /Type entry in the Pattern resource +was written twice. (Minor file size problem only, not a functional problem.) +(gdevpdfb.c [1.5]: 2001/06/29 17:04:17 lpd) + - Some poorly designed PDF tools couldn't handle the fact that the +Contents stream of each page was not surrounded by q/Q. (The PDF spec does +not require this.) Fixes SourceForge bug #231390. (gdevpdfu.c [1.16]: +2001/07/02 18:07:55 lpd) + - pdfwrite didn't set returned.current_char, so the "current +character" for kshow was 0 or a random value. Fixes SourceForge bug #420933. +(gdevpdfs.c [1.5]: 2001/07/02 19:09:23 lpd) + - When producing text in a Type 3 (bitmap) font and using TL and ' +for Y positioning, emitting a horizontal space character reset +text.use_leading, causing the line to be positioned incorrectly. Fixes +SourceForge bug #427159. (gdevpdft.c [1.33]: 2001/07/04 16:47:33 uid22160) + - When producing text using a Type 3 (bitmap) font, the TL command +was used (incorrectly) when the new text position was directly below the +current text position, not (correctly) when the new text position was +directly below the beginning of the current text line. Fixes SourceForge bug +#228180. (gdevpdft.c [1.34]: 2001/07/04 18:06:39 uid22160) + - Scaled fonts with PaintType = 2 (stroked) were painted with +incorrect stroked width. (gdevpdfs.c [1.6]: 2001/07/04 21:57:02 uid22160) + - pdfwrite generated masked images, a PDF 1.3 feature, even when +CompatibilityLevel < 1.3. Fixes item (2) of SourceForge bug #414104. +(gdevpdfj.c [1.7], gdevpdfv.c [1.6]: 2001/07/07 19:15:51 lpd) + - pdfwrite could write out a Pattern image too large for Acrobat +Reader to handle, which would then never be referenced. Fixes item (4) of +SourceForge bug #414104. (gdevpdfv.c [1.7]: 2001/07/07 19:41:12 lpd) + - MSVC requires that a label not be the last thing in a block. +(gdevpdfv.c [1.9]: 2001/07/08 13:46:25 lpd) + - The algorithm for scaling down user coordinates to fall within +Acrobat Reader's limitations didn't work properly for stroked paths with +anisotropic CTMs, possibly producing large coordinates that led Acrobat (but +not Ghostscript) to display the resulting file incorrectly. Fixes +SourceForge bug #440476. (gdevpdfd.c [1.15], gdevpdfp.c [1.18], +gdevpdfx.h [1.30]: 2001/07/12 03:28:02 lpd) + - pdfwrite didn't write transfer functions in the output for images, +and allowed lossy compressions on images even in the presence of peculiar +transfer functions (such as functions simulating indexed color spaces). This +fix writes transfer functions for images, prevents lossy compression if the +transfer function is not the identity, and undoes the hack that was +implemented earlier to work around this problem. Fixes SourceForge bug +#420257. (gdevpdf.c [1.35], gdevpdfg.c [1.13], gdevpdfi.c [1.22], +gdevpdfx.h [1.31]: 2001/07/12 05:47:07 lpd) + - When writing text, the leading offset was sometimes ignored if +blank lines were followed by a non-blank line. Fixes SourceForge bug +#440490. (gdevpdft.c [1.35]: 2001/07/12 19:45:53 lpd) + - If ConvertCMYKImagesToRGB was true, pdfwrite produced images with +the correct RGB data but with the color space still set to DeviceCMYK. (Fix +originally from Helge Blischke.) (gdevpdfi.c [1.23]: 2001/07/24 04:47:37 +lpd) + - The calculation of a scaling value for stroked paths was +incorrect, causing Inf and NaN values to be written in the PDF file. Fixes +SourceForge #444682. Bug was introduced by the fix for #440476. +(gdevpdfd.c [1.16]: 2001/07/27 22:28:31 lpd) + - Some error codes were ignored, masking errors in writing embedded +fonts. (gdevpdfe.c [1.10]: 2001/07/31 06:32:42 lpd) + - ICCBased color spaces were copied to the output even if the output +level was 1.2 (ICCBased color spaces were introduced in PDF 1.3). +(gdevpdfc.c [1.16]: 2001/08/02 20:29:07 lpd) + - If an image used a color space that couldn't be represented in +PDF, an invalid file was produced, rather than falling back to the default +representation as tiny rectangles. (bug introduced by H. Blischke's color +space fix) (gdevpdfi.c [1.24]: 2001/08/03 16:12:16 lpd) + - Type 1 fonts that did not use the standard 1000-unit cell, such as +some fonts in PostScript files produced by Windows NT 4.0, were written with +an incorrect FontMatrix. (The output was visually correct, because the font +size was scaled to compensate.) Fixes SourceForge #439474. +(gdevpdff.c [1.19], gdevpdff.h [1.11], gdevpdfs.c [1.7]: 2001/08/06 19:36:01 +lpd) + - If the base 14 fonts were being embedded, they would often be +embedded multiple times. Partially fixes SourceForge #438957. +(gdevpdff.c [1.20]: 2001/08/17 21:27:21 lpd) + - The descriptors for embedded fonts were recomputed unnecessarily. +Part 1 of a two-part fix for SourceForge #451456. (gdevpdff.c [1.21]: +2001/08/29 19:03:59 lpd) + - Uncolored Patterns with all bits set (equivalent to a solid color) +crashed pdfwrite. Fixes SourceForge #461330. (gdevpdfv.c [1.10]: 2001/09/15 +06:12:29 lpd) + - pdfwrite failed to recognize several of the standard screen spot +functions: Ellipse, Round, and Diamond weren't implemented, and several of +the others didn't match the PostScript implementation because of +float/double discrepancies. Also, pdfwrite wrote out halftone screens using +the adjusted ("actual") frequency and angle values rather than the requested +values. Fixes SourceForge #446676. (gdevpdfg.c [1.14]: 2001/09/22 16:27:04 +lpd) + +Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c +gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk +gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS +(gdevpdf.c [1.32]: 2001/04/20 09:56:22 joukj) + +Committing in . Modified Files: gs/src/gdevpdf.c gs/src/imainarg.c +gs/src/openvms.mmk Merged in some patches by Rick Dyson, which affect +compilation on VMS only. (gdevpdf.c [1.33]: 2001/04/25 08:19:41 joukj) + +Changes the locally used BASE_ENCODING macro to an inline procedure +base_encoding_index. (Code hygeine only, no functional effect.) +(gdevpdfs.c [1.4]: 2001/06/29 17:05:35 lpd) + +Makes pdfwrite recognize colored Patterns where all the pixels are the same +color, and convert them to uncolored Patterns. This is an important +optimization for files produced by certain applications (the test file came +from Freehand on the Mac). Fixes item (3) of SourceForge bug #414104. +(gdevpdfv.c [1.8]: 2001/07/08 04:27:48 lpd) + +Capitalizes a macro, and replaces two other macros with variables. +(gdevpdfm.c [1.12]: 2001/07/15 22:53:23 lpd) + +Interprets bookmarks (/OUT pdfmarks) lacking both Action and Dest keys as a +GoTo to the current page, to match Acrobat Distiller. SourceForge bug +(enhancement) #442111. (gdevpdfm.c [1.13]: 2001/07/24 22:28:42 lpd) + +Changes pdfwrite to produce MediaBox values with up to 2 digits of decimal +fraction, rather than truncating to integers. SourceForge enhancement +request #440782. (gdevpdf.c [1.36], gdevpdfx.h [1.32]: 2001/07/25 23:16:44 +lpd) + +Changes the writing of Type 3 character bitmaps to use Decode in the image +dictionary, rather than BlackIs1 in the parameter dictionary, to invert the +data, because it takes slightly less space on the file. (gdevpdfb.c [1.6]: +2001/07/29 02:21:43 lpd) + +Shrinks PDF output slightly by removing unnecessary spaces. +(gdevpdfo.c [1.8]: 2001/07/29 03:00:45 lpd) + +Writes only the necessary Encoding entries for Type 3 bitmap fonts, rather +than always writing all 256 entries. Motivated by SourceForge #438957. +(gdevpdf.c [1.37], gdevpdft.c [1.36], gdevpdfw.c [1.12], gdevpdfx.h [1.33]: +2001/07/30 15:11:00 lpd) + +Added const to all printer device descriptors const gx_device_printer +gs_xxx_device = ... (gdevpdff.c [1.18]: 2001/08/01 00:48:23 stefan911) + +Converts all locally defined macros to upper case. (gdevpdfc.c [1.17]: +2001/08/03 06:43:52 lpd) + +Shrinks pdfwrite output slightly by omitting the unnecessary space character +before strings and hex strings, as well as before names, arrays, and +dictionaries. (gdevpdfo.c [1.9]: 2001/08/14 02:29:16 lpd) + +Committing in . Modified Files: gs/src/gdevpdfm.c gs/src/sarc4.c +gs/src/zcsdevn.c gs/src/zfile.c Some type casts added (gdevpdfm.c [1.14]: +2001/09/04 14:30:13 joukj) + +</pre><h2><a name="7.02-PDF_Interpreter"></a>PDF Interpreter</h2><pre> + +Fixes problems: + - 5-element DeviceN array (with attributes) messed up the operand +stack and failed. The attributes is an informational entry that can be +safely ignored. Bug #419509, Customer #150. (lib/pdf_draw.ps [1.30]: +2001/04/28 01:45:25 alexcher) + - PDF files containing strings with codes that map to glyph names +that are not part of the font would error with undefined in --get--. +Substitute the .notdef glyph as Adobe Acrobat Reader apparently does. +(lib/pdf_font.ps [1.19]: 2001/05/12 00:11:42 rayjj) + - .resolvefn4 used stream length as the length of the decompressed +data, truncated the PostScript procedure and caused syntax error in the +token operator because of the unmatched brackets. Reading directly from the +stream fixes the problem. Bugs #425919 (lib/pdf_draw.ps [1.31]: 2001/05/24 +16:48:59 alexcher) + - The March 1999 PDF 1.3 version of the specification had a change +to make the /FormType key and /Matrix key optional in a Form. While we had +already handled missing /Matrix key, the missing /FormType key was not +accounted for in all cases. Move this to the common DoForm code. Fix for +SourceForge bug #430556, Artifex customer #671. (lib/pdf_draw.ps [1.32]: +2001/06/13 05:30:29 rayjj) + - Wrong entry name (BaseFont instead CIDFontName) was used while +resolving font resource to CIDFontType2 in PDF interpreter. Source Forge bug +#436892 (lib/pdf_font.ps [1.20]: 2001/07/09 19:27:37 igorm) + - Workaround a SEGV caused by GC interaction with stderr file. +Needed to complete the fix for #430556, but the stderr bug remains open as +442477. (lib/pdf_main.ps [1.34]: 2001/07/18 20:42:48 rayjj) + - Detect and load embedded Type1 fonts that are in PFB format (have +the 6 byte PFB header before each segment). Also ignore /Length values in +the streamdict keys that don't match the PFB segnment lengths. Issue warning +messages to stderr for all of these spec violations. SourceForge bug #430556 +for Artifex customer #671. VS: +---------------------------------------------------------------------- +(lib/pdf_font.ps [1.21]: 2001/07/18 20:45:35 rayjj) + - This problem was a rangecheck error being reported in +.setindexedspace when the base colorspace was DeviceN. The cause was an +error in determining the number of components in the DeviceN space. This is +the second of two fixes for SF bugs 427165 (customer #1110) and 438682. +(lib/pdf_draw.ps [1.34]: 2001/08/21 23:54:30 dancoby) + +Improvement: Prevents PDF files with more than 65534 page from failing due +to the dict size limit. The caches never hit on pages past 65534. Problem +was reported by a potential Artifex customer re their customer's files. +(lib/pdf_main.ps [1.33]: 2001/05/12 17:15:41 rayjj) + +This is the fix for [ #427354 ] PDF checkboxes problem. The PDF annotation +handler was not correctly handling cases in which there was no appearance in +the appearance dictionary AP for the current appearance state AS. It should +not display anything in this case. (lib/pdf_draw.ps [1.33]: 2001/06/14 +22:25:36 dancoby) + +Updates pdf_sec.ps to use the new PDF 1.4 algorithms and 128 bit keylengths. +Rewritten to use C implementations of Arcfour (RC4 compatible cipher) and +MD5. Also fixes bug in processing of zero-length streams. +(lib/pdf_sec.ps [1.4]: 2001/09/19 07:12:13 raph) + +</pre><h2><a name="7.02-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - GS didn't exit to shell when it was used with '--' option. The bug +was introduced in revision 1.7 when many references to exit() were replaced +with returns. Bug #416498 by Paul Vojta (imainarg.c [1.11]: 2001/04/19 +23:39:39 ghostgum) + - Removing the dependence of graphic library on PS interpreter. +Source Forge bug #415003. (zcssepr.c [1.8]: 2001/04/20 09:38:39 igorm) + - Auto-rotation is enabled for non-null orientations. Auto rotation +now always rotates the image +90 degrees relative to the orientation. Bug +#416830 Customer #430 (zmedia2.c [1.3]: 2001/04/26 17:57:41 alexcher) + - EPS files without a showpage could not be viewed if given as a +command line arg. Extra call to display_set_callback erased the page before +going to the GS> prompt the first time. Only do display_set_callback as +part of init_2. (imain.c [1.13]: 2001/05/04 20:35:33 rayjj) + - in global mode pdfmark with composite objects causes invalidaccess +because the objects are copied to local memory but the array is copied to +current memory. Now the array is copied to local memory too. Fix from Helge +Blischke with changes. (lib/gs_pdfwr.ps [1.11]: 2001/05/04 20:59:33 +alexcher) + - This IdiomSet replaces 3 procedures generated by Win2K driver in +level 1 mode for RGB source image and DeviceRGB, DeviceCMYK, and DeviceGray +color models. Original implementation uses transfer functions to simulate +the indexed color space. Currently, GS always ignore transfer functions. The +replacement procedure uses indexed color space directly. This Idiom should +really be in a file in the IdiomSet directory of the Resource path, but we +put it here until GS has a way to handle distribution and installation of +Resources. Customer #670, Bug #420257 (lib/gs_ll3.ps [1.9]: 2001/05/08 +19:42:13 alexcher) + - Add all page sizes supported in statusdict to the .pagetypenames +array so that these page sizes can be selected from the command line using +-sPAPERSIZE=... parameter. Also implement the STRICT that limits the +available known paper sizes to those Adobe had defined prior to Level 2 when +'setpagedevice' replaced this mess. SourceForge bug #427898 +(lib/gs_statd.ps [1.5]: 2001/05/30 21:14:35 rayjj) + - Fix for [ #419211 ] .parse_dsc_comments not robust. This change +modifies the DSC parser so that errors in DSC comments do not abort the file +processing. (zdscpars.c [1.11]: 2001/06/06 08:11:20 dancoby) + - Adobe PhotoShop 5+ duotone code assumes that setcolor operator +calls tint transform function if source colors don't make a subset of device +colors. Bug #224056, Customer #150 (zcolor2.c [1.4]: 2001/06/07 14:48:24 +alexcher) + - When finding a %%Page line in the trailer due to incorrect DSC +comments, the DSC parser now returns CDSC_PAGE only if the parser treats it +as a valid page. Partial fix for SourceForge bug #435157. (dscparse.c [1.6]: +2001/06/23 10:21:24 ghostgum) + - Fix for [ #435157 ] segmentation fault in dsc_page. Add test for +valid page data before using. (zdscpars.c [1.12]: 2001/06/27 00:25:08 +dancoby) + - Implementing CIDFont.CMap construction with period character (see +Ken Lunde, "CJKV Information Processing," O'RELILLY. 1999. p284) for any +compatible pair of CIDFont & CMap. This feature complies with Adobe +CPSI. Thanks to Masatake Yamato for discovering this feature. +(lib/gs_cidcm.ps [1.5]: 2001/07/01 08:55:34 igorm) + - Reading a TrueType font with an empty table could cause a +rangecheck error. (lib/gs_ttf.ps [1.9]: 2001/07/08 15:24:11 lpd) + - pdfwrite didn't write transfer functions in the output for images, +and allowed lossy compressions on images even in the presence of peculiar +transfer functions (such as functions simulating indexed color spaces). This +fix writes transfer functions for images, prevents lossy compression if the +transfer function is not the identity, and undoes the hack that was +implemented earlier to work around this problem. Fixes SourceForge bug +#420257. (lib/gs_ll3.ps [1.10]: 2001/07/12 05:47:07 lpd) + - zfilelineedit sometimes reallocates (resizes) buffer string +without updating reference to it from o-stack, so as console input after +callout reads undefined data. Fixed with copying new reference to o-stack +whenever it changes. Source Forge bug #437808 (ziodev.c [1.5]: 2001/07/16 +08:38:14 igorm) + - If a 'restore' had to restore page device parameters, it did so +before rather than after restoring the state of VM, possibly creating +dangling references. Fixes SourceForge #230694, #414588, #444565. +(lib/gs_setpd.ps [1.8], zdevice2.c [1.4]: 2001/07/30 07:11:38 lpd) + - Ignore white space between %%DocumentData: and argument. Fix: Set +dsc->preview correctly to DOS EPS if both DOS EPS and EPSI previews are +present. Update to latest dscparse.c/h used in GSview. Change dscparse to +mark internal functions "dsc_private" not "private", so it can be compiled +as C++ (needed by GSview, not Ghostscript). (dscparse.c [1.7], +dscparse.h [1.6]: 2001/08/01 09:03:40 ghostgum) + - Fixing wrong binding of .getmetrics32 with -dNOBIND. +(lib/gs_typ32.ps [1.3]: 2001/08/06 10:19:42 igorm) + - Old hack about underline parameters in gs_type1.ps now conflicts +with QuarkXPress_4.1 3.0 0 procset. Disabling it for fonts, which have +degenerate FontBBox. Source Forge bug #441870. (lib/gs_type1.ps [1.5]: +2001/08/06 16:47:43 igorm) + - The problem was a rangecheck error being reported in +.setdevicenspace with PDF files. The cause of the problem was not allowing +multiple copies of the name /None in DeviceN colorant specification. This is +the first of two fixes for SF bugs 427165 (customer #1110) and 438682. +(zcsdevn.c [1.4]: 2001/08/21 23:52:36 dancoby) + - Work around a bug in the Adobe AGM_Core that results in areas +painted by the tint transform of a spot color being overpainted with white. +The symptom is missing graphics (lines, fills or text). SourceForge bug +#454415 for Artifex customer #190. (lib/gs_init.ps [1.37]: 2001/08/29 +21:10:23 rayjj) + - Fix a bug that the procedure for arraytype in cntdict leaves an +object. (lib/gs_btokn.ps [1.4]: 2001/09/04 22:59:52 masata-y) + - If MaxLocalVM user parameter is set, perform garbage collection +before checking for potential VMerror. Without this fix, VMerror would be +issued even if a garbage collection would have freed enough memory to stay +below the MaxLocalVM limit. (ireclaim.c [1.3]: 2001/09/05 17:50:36 rayjj) + - Prevent memory corruption when reading %statementedit. Allocate +lineedit buffer in correct memory space. Line being assembled is stored in a +PostScript string during callouts, so prevent zfilelineedit from reading +more than max_string_size bytes. Allocate extra space for trailing new-line +for statementedit, rather than fiddling the string length which broke when +sreadline reallocated the string. (zfile.c [1.11], ziodev.c [1.6]: +2001/09/22 07:26:46 ghostgum) + +Increments version number after 7.00 release. Also fixes gs_init.ps to +consistently print minor revision number as two digits. +(lib/gs_init.ps [1.35]: 2001/04/17 07:40:12 raph) + +Committing in . Modified Files: gs/src/gdevpdf.c gs/src/imainarg.c +gs/src/openvms.mmk Merged in some patches by Rick Dyson, which affect +compilation on VMS only. (imainarg.c [1.12]: 2001/04/25 08:19:41 joukj) + +Added dot(.) composed font name(CIDFont.CMap) supports. +(lib/gs_cidcm.ps [1.3]: 2001/05/09 09:15:19 masata-y) + +In zfilename, a string allocated by ialloc_string is put on the stack with +correct memory space. (zfileio.c [1.11]: 2001/05/09 09:25:24 masata-y) + +The show operator doesn't clear the operand stack on interrupts. Source +Forge bug 209350. (zchar.c [1.4]: 2001/05/10 19:15:29 igorm) + +Move jpeg_decompress structure enum/reloc handler from interp level to +stream utility level to support non-PostScript clients. (zfdcte.c [1.5]: +2001/05/30 17:38:45 rayjj) + +Unwind to the revision 1.2, because CIDFont.CMap patch misses some important +CIDFont-CMap combinations. (lib/gs_cidcm.ps [1.4]: 2001/06/06 10:44:05 +igorm) + +If an ICC color space failed to load, Acrobat Reader uses the alternate +color space. Previous implementation ignored errors during load and used the +partial ICC space. This change signals an error and uses the alternate space +by catching the error in a stopped context in the interpreter. +(lib/gs_icc.ps [1.2]: 2001/06/12 16:02:39 rayjj) + +Patch from Mr. Toshiya Suzuki : Implementing multi-dimensional CID ranges, +and fixing bugs about decoding text string with CID font : (1) when GS +consumes undefined byte sequence (which cannot be mapped to some glyphs), GS +aborts. (2) when selected CID font lacks the glyph for requested CID, GS +aborts. (3) "notdefrange" defines SINGLE CID for undefined byte sequences in +specified range, but current GS implementation take it as an offset to +calculate MULTIPLE CID. (4) "cidrange" operators accept only full range +specification (<0000> to <FFFF>) or 8 bit width range +(<xxyy> to <xxzz>). Source Forge bug #415163. +(lib/gs_cmap.ps [1.11], zfcid0.c [1.7]: 2001/06/16 19:02:31 igorm) + +Committing in . Modified Files: gs/src/idisp.c gs/src/imain.c +gs/src/zfileio.c Some minor fixes (2 added includes and 1 type cast) needed +to compile cleanly on OpenVMS. (idisp.c [1.2], imain.c [1.14], +zfileio.c [1.12]: 2001/07/11 12:05:52 joukj) + +Adds and documents an operator <prefix|null> <access_string> +.tempfile <filename> <file> to create and open a temporary file, +using gp_open_scratch_file. (zfile.c [1.9]: 2001/07/15 13:54:17 lpd) + +Add the local and global vmstatus values to calculate the memory usage of a +resource. (lib/gs_res.ps [1.15]: 2001/07/15 16:13:39 masata-y) + +Allows temporary files (created and opened with .tempfile) to be deleted +even if SAFER is set. (lib/gs_init.ps [1.36]: 2001/07/23 06:56:24 lpd) + +To reduce redraw flicker, do not allow Windows to erase the background since +we paint it ourselves. Paint areas outside the page with the window +background colour or light grey. Save and restore window size using +registry. Add "Paste" to system menu of text window. Make error message box +a child of text window to avoid it appearing behind the text window. To +allow user to read the error message, the text window is not automatically +destroyed in the event of an error. The user must close text window using +close button or system menu. If text window closed, return e_Fatal to poll +function to provide a cleaner exit without a stack dump. (dwimg.c [1.3], +dwimg.h [1.4], dwmain.c [1.5], dwmainc.c [1.6], dwtext.c [1.4], +dwtext.h [1.4]: 2001/08/01 09:50:36 ghostgum) + +Changed debugging flag variables to const. (igc.c [1.4], zvmem.c [1.3]: +2001/08/01 16:21:35 stefan911) + +Adds missing dwreg.cpp and dwreg.h files needed by recent Windows updates +which save and restore window size using registry. (dwreg.c [1.1], +dwreg.h [1.1]: 2001/08/02 08:36:07 ghostgum) + +Improves documentation of the op_def array elements and removes the obsolete +BEGIN/END_OP_DEFS macros, deprecated since 5.25. (opdef.h [1.3]: 2001/08/28 +03:28:08 giles) + +Adds a C implementation of the Arcfour encryption filter. This is a +work-alike of the RC4 cipher used in PDF encryption. (zfarc4.c [1.1]: +2001/09/02 06:16:41 giles) + +Corrects indenting, and adds another missing header. (zfarc4.c [1.2]: +2001/09/02 07:09:13 giles) + +Committing in . Modified Files: gs/src/gdevpdfm.c gs/src/sarc4.c +gs/src/zcsdevn.c gs/src/zfile.c Some type casts added (zcsdevn.c [1.5], +zfile.c [1.10]: 2001/09/04 14:30:13 joukj) + +Change to debug output so that when the ptr is totally bogus, some useful +output will be generated before otype->ssize is dereferenced (which can +cause a memory access crash such as SEGV). No effect on non-debug code. +(ilocate.c [1.4]: 2001/09/06 15:46:13 rayjj) + +Move misplaced comment block. (zvmem2.c [1.3]: 2001/09/06 16:01:23 rayjj) + +.objectprinttest: do one more pop if the operator is executed without error. +.writeobjects: Before writing the header, check whether the written objects +are arrays or not. If they are arrays, they are left them on the stack. If +they are not arrays, they are removed from the stack. +(lib/gs_btokn.ps [1.5]: 2001/09/15 07:11:00 masata-y) + +When using gswin32 (GUI version) and an error occurs or -? is used, do not +display an error message box. Add a message to the text window "Close this +window with the close button on the title bar or the system menu". Flash the +window to attract attention. Fixes sourceforge bug #459019. (dwmain.c [1.6], +dwtext.c [1.5]: 2001/09/15 08:36:53 ghostgum) + +Speed up reading stdin when using callouts. Add platform-specific functions +for reading stdin, to allow non-blocking reading of stdin if supported. +Fixes Sourceforge bug #416973. (dpmain.c [1.4], dwmainc.c [1.7], +imain.c [1.15]: 2001/09/15 08:48:33 ghostgum) + +When using stdio callouts without callback functions, flush stdout and +stderr. (imain.c [1.16]: 2001/09/15 09:17:10 ghostgum) + +Don't initialize stdin if it is being handled by the caller. +(imain.c [1.17]: 2001/09/22 07:22:48 ghostgum) + +Allow PostScript stdout to be redirected to stderr or a file. This is +required to avoid driver stdout being mixed with PostScript stdout. Options +are -sstdout=filename or -sstdout=%stderr. To reset redirection use +-sstdout=- or -sstdout=%stdout. Fixes Sourceforge bug #222534. +(imain.c [1.18], imain.h [1.3], imainarg.c [1.13], iminst.h [1.5]: +2001/09/22 07:33:35 ghostgum) + +Updates version and date in documentation in preparation for 7.02 +pre-release. (lib/gs_init.ps [1.38]: 2001/09/22 16:26:22 raph) + +</pre><h2><a name="7.02-Streams"></a>Streams</h2><pre> + +Fixes problems: + - When input stream of an input filter reports EOF, old code reports +EOF for the filter. But if output buffer for the filter is not empty, EOF +status to be delayed until it empties. Source Forge bug #417127. +(stream.c [1.12]: 2001/05/05 10:12:23 igorm) + - Non-stable memory was used for internal zlib data, causing +inconsistent heap state after 'restore' while zlib is active, and subsequent +crash. Source Forge bug #431057 (szlibc.c [1.3]: 2001/07/16 08:29:46 igorm) + - Fixes numerous bugs in setting of DCT compression parameters. +Manual setting of parameters such as QFactor should now work. Also +ColorTransform now defaults to YCC instead of RGB color space so the default +quality and compression ratio should improve. Thanks to Dave Slattengren for +the initial version of this fix. (sdcparam.c [1.3], sdcte.c [1.4], +sdeparam.c [1.4]: 2001/09/01 23:54:57 raph) + - fixes bounds overstepping in arcfour filter in the case where +write buffer space is smaller than read buffer space. (sarc4.c [1.5]: +2001/09/14 20:26:02 raph) + +Set file_name.size = 0 when file_name.data is set to 0. (stream.c [1.13]: +2001/05/09 09:42:57 masata-y) + +Move jpeg_decompress structure enum/reloc handler from interp level to +stream utility level to support non-PostScript clients. (sdcte.c [1.3]: +2001/05/30 17:38:45 rayjj) + +Move jpeg_decompress structure enum/reloc handler from interp level to +stream utility level to support non-PostScript clients. (see also zfdcte.c +and sdcte.c) (sdct.h [1.4]: 2001/06/08 07:08:44 rayjj) + +Adds a comment describing the function and return value of sreadbuf. +(stream.c [1.14]: 2001/06/17 04:28:10 lpd) + +Adds extern_inline for including inline procedures in header files. +(stdpre.h [1.4]: 2001/06/17 05:09:07 lpd) + +These changes were originally put into the GS_6_5 branch on 2001/03/13. They +are needed for using the current version of teh graphics library with the +PCL6 code. Short description of changes: stat_.h: Added definition of +stat_is_dir for use with MSVC. Not used in Ghostscript. gsptype1.c: Changes +in image_PaintProc. This routine is used in gs_makepixmappattern. +gs_makepixmappattern is only used in test8 (in gslib.c - a test module) and +gs_makebitmappattern_xform. gs_makebitmappatern_xform is not used in +Ghostscript. It is used in pcl6. (stat_.h [1.6]: 2001/08/07 22:13:29 +dancoby) + +Makes the spprint* procedures use sputc rather than sputs for printing +converted values. Speeds up one set of customer ps2pdf conversions by 2.5%. +(spprint.c [1.4]: 2001/08/25 06:59:04 lpd) + +Adds a C implementation of the Arcfour encryption filter. This is a +work-alike of the RC4 cipher used in PDF encryption. (sarc4.c [1.1], +sarc4.h [1.1]: 2001/09/02 06:16:41 giles) + +adds a missing header file for e_rangecheck. (sarc4.c [1.2]: 2001/09/02 +06:27:18 giles) + +Corrects indenting, and adds another missing header. (sarc4.c [1.3], +sarc4.h [1.2]: 2001/09/02 07:09:13 giles) + +Committing in . Modified Files: gs/src/gdevpdfm.c gs/src/sarc4.c +gs/src/zcsdevn.c gs/src/zfile.c Some type casts added (sarc4.c [1.4]: +2001/09/04 14:30:13 joukj) + +</pre><h2><a name="7.02-Library"></a>Library</h2><pre> + +Fixes problems: + - When copying a device, copy the static procs if needed before +calling finish_copydevice, so that the correct finish_copydevice is used. +(gsdevice.c [1.9]: 2001/04/12 08:45:02 ghostgum) + - Removing the dependence of graphic library on PS interpreter. +Source Forge bug #415003. (gscsepr.c [1.10], gscspace.h [1.7]: 2001/04/20 +09:38:38 igorm) + - Removing the dependence of graphic library on PS interpreter. +Source Forge bug #415003. (gscsepr.c [1.11]: 2001/04/20 10:07:48 igorm) + - Optimization for shading fill. The general path filling algorithm +subdivides fill region with trapezoid or rectangle subregions and then +paints each subregion with given color. If the color is shading, each +subregion to be subdivided into areas of constant color. But with radial +shading each area is a high order polygon, being subdivided into smaller +subregions, so as total number of subregions grows huge. Faster processing +is done here by changing the order of subdivision cycles : we first +subdivide the shading into areas of constant color, then apply the general +path filling algorithm (i.e. subdivide each area into trapezoids or +rectangles), using the filling path as clip mask. Source Forge bug #414022. +(gsptype2.c [1.5], gsptype2.h [1.3], gxfill.c [1.8]: 2001/05/10 18:35:14 +igorm) + - If the OutputFile name was not NULL terminated, the strcmp would +fail in unpredictable ways. (gsdevice.c [1.10]: 2001/05/12 00:08:36 rayjj) + - dev_color_eq used wrong number of components for halftones. Source +Forge bug #422534. (gsht1.c [1.3], gxcht.c [1.3]: 2001/05/12 14:51:52 igorm) + - Current code for /All separations marks all planes in the +alternate color space, not the destination color space. This is wrong, but +gx_concretize_Separation() doesn't have access to the destination device +color space. This fix makes tint value 1 print as black in any alternate +color space. It printed as white in DeviceCMYK before. Bug #423838 +(gscsepr.c [1.12]: 2001/05/25 13:54:01 alexcher) + - Prevent SEGV caused by freeing memory not owned. Variable 'code' +was overwritten, losing the get_outline return code that was needed for the +decision to free the glyph_string.data. Problem detected with PCL. Bug was +introduced in rev 1.10. (gstype42.c [1.12]: 2001/05/31 04:34:23 rayjj) + - Include <time.h> as required by Debian systems with glibc +2.2. Fixes SourceForge bugs 413747, 417180, 417181, 417182. (time_.h [1.3]: +2001/06/07 21:04:52 raph) + - FunctionType 4 functions that contained conditionals (if/ifelse) +would report the length of their symbolic definition incorrectly; +FunctionType 4 functions that had to return their symbolic definition in +pieces would loop forever. Fixes SourceForge bug #427191. (gsfunc4.c [1.6]: +2001/07/04 01:23:46 lpd) + - Changes clip logic in gx_image_cached_char() to affect the imaging +device, so that clipping is reliably effective. Fixes SF bug #433821 (and +probably others). (gxccache.c [1.5]: 2001/07/05 20:36:55 raph) + - Removes duplicate rc_decrement_only() in +pdf14_begin_typed_image(), so that the marking device is now deallocated +once. Fixes SourceForge bug #434705. (gdevp14.c [1.3]: 2001/07/05 23:21:00 +raph) + - Prevent non-persistent name_arrays of size==0 from causing a +VMerror if alloc of size 0 returns a NULL. Detected with +SeparationColorNames from the PCL code. (gscparam.c [1.7]: 2001/07/06 +17:02:25 rayjj) + - If the FontMatrix of a CFF CIDFont was the default [0.001 0 0 +0.001 0 0], it was not written, causing the FontMatrices of the subfonts to +be scaled by 1000. (The Adobe documentation isn't at all clear about this.) +Fixes SourceForge bug #428595. (gdevpsf2.c [1.14]: 2001/07/07 06:28:08 lpd) + - Before processing an image that uses the current color, call +gs_state_color_load to ensure that if the current color is a pattern, the +pattern is loaded. (This parallels existing code used for filling paths and +processing text.) This prevents a SEGV caused when pdfwrite dereferenced a 0 +pointer to pdc->colors.pattern.p_tile. Fixes SourceForge bug #422089 for +Artifex Customer #1110. (gsimage.c [1.4]: 2001/07/10 22:04:20 lpd) + - The algorithm for scaling down user coordinates to fall within +Acrobat Reader's limitations didn't work properly for stroked paths with +anisotropic CTMs, possibly producing large coordinates that led Acrobat (but +not Ghostscript) to display the resulting file incorrectly. Fixes +SourceForge bug #440476. (gdevvec.c [1.12], gdevvec.h [1.7]: 2001/07/12 +03:28:02 lpd) + - -sOutputFile=%stdout handling was broken by rev. 1.4 is fixed by +giving priority to iodevices when there is a leading %, but if the iodevice +is not recognized, attempting to parse as a format. Fix for SourceForge bugs +436895 and 428738, Artifex customer #680 (gsdevice.c [1.11]: 2001/07/12 +14:10:55 rayjj) + - gp_open_scratch_file concatenated the temporary directory name +with the prefix even if the prefix was an absolute path; also, it didn't +check the length of the final file name, possibly leading to memory +corruption. (gp_unifs.c [1.6]: 2001/07/15 13:57:50 lpd) + - An incorrect optimization in the conversion of Type 1 to Type 2 +CharStrings could cause character shapes to be mangled. This probably only +affected embedded fonts in PDF output. Fixes SourceForge #444374. +(gdevpsfx.c [1.9]: 2001/07/26 03:04:51 lpd) + - Acrobat Reader would not accept embedded TrueType fonts with a +zero-length glyf table. Fixes SourceForge #429156. (gdevpsft.c [1.8]: +2001/07/30 07:03:18 lpd) + - An embedded CFF font could not be larger than 64K. Fixes +SourceForge #445400. (gdevpsf2.c [1.15]: 2001/07/31 06:39:06 lpd) + - For CIEBasedDEF(G) color spaces the interpolated values from the +Table need to be scaled to the range given by RangeABC. Fixes SourceForge +bug #440278 reported by Artifex customer #10. (gsciemap.c [1.6]: 2001/08/03 +15:26:35 rayjj) + - Correct a problem with white lines appearing in an image at or +near band boundaries. Problem caused by different handling for the last +image pixel at a band boundary versus the remaining pixels. Replaced it with +uniform handling. Fixes SourceForge bug #436899 reported by Artifex customer +#150. Also included are three lines of source code clean up in the same +section. (gxicolor.c [1.3]: 2001/08/06 21:22:31 dancoby) + - Writing a Type 2 font subset with undefined glyphs in the Encoding +produced invalid output. Fixes SourceForge #451399. (gdevpsf.h [1.10], +gdevpsfu.c [1.7]: 2001/08/16 13:36:37 lpd) + - The problem was a rangecheck error being reported in +.setdevicenspace with PDF files. The cause of the problem was not allowing +multiple copies of the name /None in DeviceN colorant specification. This is +the first of two fixes for SF bugs 427165 (customer #1110) and 438682. +(gscdevn.c [1.6], gscspace.h [1.8]: 2001/08/21 23:52:36 dancoby) + - Most of the Type 1 hinting code was executed even when hinting was +disabled. Part 2 of a two-part fix for SourceForge #451456. +(gxhint3.c [1.3]: 2001/08/29 19:04:55 lpd) + - Quark Xpress turns off garbage collection with -2 vmreclaim when +embedding EPS files which can lead to rampant allocation that is only +reclaimed when GC is reenabled. When the GC is disabled, reduce the +threshold from 2 Gb to 8 Mb. Fixes SourceForge bugs: 444370 and 438676. +(gsalloc.c [1.10]: 2001/09/05 17:54:31 rayjj) + - Fixes some typos in the comment for FORCE_GC_LIMIT. +(gsalloc.c [1.11]: 2001/09/05 18:03:39 lpd) + - Copying a parameter list failed to copy persistent aggregates if +the target list used a different allocator from the source list, possibly +causing crashes at 'restore'. Fixes SourceForge #461007. (gsparamx.c [1.4]: +2001/09/14 04:23:11 lpd) + - The sin and cos operators in Type 4 (PostScript Calculator) +Functions expected their argument in radians, not degrees. (gsfunc4.c [1.7]: +2001/09/17 06:01:12 lpd) + - Fix for MS-Windows graphics library. Remove references to +interpreter from gp_check_interrupts function in library. Make gslib.c +access gs_stdin not stdin. Correct the build paths for graphics devices. Add +missing graphics devices. (gslib.c [1.5]: 2001/09/22 07:07:02 ghostgum) + +Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c +gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk +gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS +(gsnogc.c [1.7]: 2001/04/20 09:56:22 joukj) + +Changes gp_open_scratch_file() to use mkstemp() rather than mktemp() on gcc +builds, which avoids warnings. Adds CAPOPT variable to unix-gcc.mak to +select which function is used, so that builds will still succeed on systems +that don't have mkstemp(). (gp_unifs.c [1.5]: 2001/05/07 19:05:46 jackiem) + +This fixes a minor omission that prevents ghostscript from building on at +least some platforms. After an #ifndef, a #define isn't done. +(gsptype2.h [1.4]: 2001/05/11 23:12:11 jackiem) + +fix: If the ICC profile fails to load completely, or is missing a WhitePoint +a valid default is needed to prevent a divide by zero. The WhitePoint is the +same as the ICC default illuminant, D50. SourceForge bug 432130 for Artifex +customer #150 as well as bug 427156, customers #880 and #1110 and bug +414984. (gsicc.c [1.3]: 2001/06/12 15:32:20 rayjj) + +If an ICC color space failed to load, Acrobat Reader uses the alternate +color space. Previous implementation ignored errors during load and used the +partial ICC space. This change signals an error and uses the alternate space +by catching the error in a stopped context in the interpreter. +(gsicc.c [1.4]: 2001/06/12 16:02:39 rayjj) + +Patch from Mr. Toshiya Suzuki : Implementing multi-dimensional CID ranges, +and fixing bugs about decoding text string with CID font : (1) when GS +consumes undefined byte sequence (which cannot be mapped to some glyphs), GS +aborts. (2) when selected CID font lacks the glyph for requested CID, GS +aborts. (3) "notdefrange" defines SINGLE CID for undefined byte sequences in +specified range, but current GS implementation take it as an offset to +calculate MULTIPLE CID. (4) "cidrange" operators accept only full range +specification (<0000> to <FFFF>) or 8 bit width range +(<xxyy> to <xxzz>). Source Forge bug #415163. (gdebug.h [1.3], +gsfcmap.c [1.14], gsmisc.c [1.12], gxfcmap.h [1.8]: 2001/06/16 19:02:32 +igorm) + +Notes that the 'foreign' member of the vm_spaces.memories allocator array is +not used (always zero). (gsgc.h [1.3]: 2001/06/17 04:03:52 lpd) + +Makes embedded CFF fonts in PDF files omit the FontBBox if it is [0 0 0 0]. +This should only be a minor optimization, but SourceForge bug #428595 claims +that Acrobat Reader cares. (gdevpsf2.c [1.13]: 2001/07/06 05:17:31 lpd) + +Changed debugging flag variables to const. (gshtscr.c [1.6], +gsmdebug.h [1.3], gxchar.c [1.5], gxclimag.c [1.3], gxclip.c [1.4]: +2001/08/01 16:21:34 stefan911) + +Changed fill patterns for unallocated memory to const (gsmemory.c [1.3]: +2001/08/02 00:12:08 stefan911) + +These changes were originally put into the GS_6_5 branch on 2001/03/13. They +are needed for using the current version of teh graphics library with the +PCL6 code. Short description of changes: stat_.h: Added definition of +stat_is_dir for use with MSVC. Not used in Ghostscript. gsptype1.c: Changes +in image_PaintProc. This routine is used in gs_makepixmappattern. +gs_makepixmappattern is only used in test8 (in gslib.c - a test module) and +gs_makebitmappattern_xform. gs_makebitmappatern_xform is not used in +Ghostscript. It is used in pcl6. (gsptype1.c [1.3]: 2001/08/07 22:13:29 +dancoby) + +Improves documentation for gs_string and gs_bytestring types; adds +gs_free_[const_]bytestring procedures. (gsmemory.c [1.4], gsmemory.h [1.3], +gstypes.h [1.3]: 2001/08/25 06:46:21 lpd) + +Speed up reading stdin when using callouts. Add platform-specific functions +for reading stdin, to allow non-blocking reading of stdin if supported. +Fixes Sourceforge bug #416973. (gp.h [1.7], unistd_.h [1.3]: 2001/09/15 +08:48:33 ghostgum) + +Improves poor performance of shadings in some cases, notably Coons01.ps. +Long, thin triangles are now cut in half, rather than into four smaller +triangles. Thus, the mesh is more regular. (gxshade4.c [1.5]: 2001/09/22 +16:15:43 raph) + +Updates version and date in documentation in preparation for 7.02 +pre-release. (gscdef.c [1.14]: 2001/09/22 16:26:22 raph) + +</pre><h2><a name="7.02-Other"></a>Other</h2><pre> + +Committing in . Modified Files: gs/icclib/icc.c gs/src/gdevpdf.c +gs/src/gp_vms.c gs/src/gsnogc.c gs/src/icclib.mak gs/src/openvms.mmk +gs/src/x_.h Added Files: gs/src/vms_x_fix.h Patches for OpenVMS +(icclib/icc.c [1.4], vms_x_fix.h [1.1]: 2001/04/20 09:56:22 joukj) + +This is the fix for [ #425014 ] Compile error on AIX in icc.c. The control87 +is not defined on AIX systems (or probably on anything but x86 systems). +This was suggested by Graeme Gill. (icclib/icc.c [1.5]: 2001/06/06 08:14:14 +dancoby) + +branches: 1.1.2; Adds initial support for macos. (gp_mac.h [1.1]: 2001/07/18 +20:20:50 giles) + +branches: 1.1.2; Adds the remaining macos source files (macsysstat.h [1.1], +macsystypes.h [1.1]: 2001/07/18 20:27:39 giles) + +Adds generated macos build files to .cvsignore (.cvsignore [1.2]: 2001/07/31 +20:03:20 giles) + +<hr> + +<h1><a name="Version7.00"></a>Version 7.00 (2001-04-08)</h1> + +<p> +This is the official 7.0 Ghostscript release. Most of the changes +since 6.64 are quite minor, with the exception of one fix for ICC +profile support. + +<p> +All problems registered on SourceForge numbered 414588 or lower are +closed, except for the following: 209350 215256, 219798, 221582, +222534, 222727, 224056, 224863, 226477, 226584, 227684, 228180, +228641, 230694, 231390, 404255, 404482, 405342, 406285, 406689, +406696, 406979, 407342, 409887, 410371, 411753, 413114, 413669, +413747, 414022, 414104, 414588. + +<h3><a name="7.00_Incompatible_changes"></a>Incompatible changes</h3> + +<pre> +</pre> + +<h2><a name="7.00-Documentation"></a>Documentation</h2><pre> + +Updates broken and obsolete offsite links in the documenation. +(doc/Devices.htm [1.28], doc/Fonts.htm [1.18], doc/Language.htm [1.30], +doc/Lib.htm [1.11], doc/Maintain.htm [1.17], doc/Make.htm [1.29], +doc/New-user.htm [1.26], doc/Projects.htm [1.29], doc/Ps2epsi.htm [1.12], +doc/Readme.htm [1.27]: 2001/04/08 04:42:55 giles) + +Updates version number and date in preparation for 7.00 release. +(doc/API.htm [1.9], doc/Bug-form.htm [1.20], doc/Bug-info.htm [1.17], +doc/C-style.htm [1.17], doc/Commprod.htm [1.13], doc/Copying.htm [1.11], +doc/Current.htm [1.11], doc/DLL.htm [1.13], doc/Develop.htm [1.38], +doc/Devices.htm [1.29], doc/Drivers.htm [1.19], doc/Fonts.htm [1.19], +doc/Helpers.htm [1.15], doc/History1.htm [1.11], doc/History2.htm [1.11], +doc/History3.htm [1.11], doc/History4.htm [1.11], doc/History5.htm [1.13], +doc/History6.htm [1.27], doc/Htmstyle.htm [1.16], doc/Install.htm [1.22], +doc/Issues.htm [1.9], doc/Language.htm [1.31], doc/Lib.htm [1.12], +doc/Maintain.htm [1.18], doc/Make.htm [1.30], doc/New-user.htm [1.27], +doc/News.htm [1.84], doc/Projects.htm [1.30], doc/Ps-style.htm [1.11], +doc/Ps2epsi.htm [1.13], doc/Ps2pdf.htm [1.29], doc/Psfiles.htm [1.19], +doc/README [1.10], doc/Readme.htm [1.28], doc/Release.htm [1.35], +doc/Source.htm [1.11], doc/Tester.htm [1.12], doc/Unix-lpr.htm [1.11], +doc/Use.htm [1.27], doc/Xfonts.htm [1.11], doc/gs-vms.hlp [1.10], +man/dvipdf.1 [1.8], man/font2c.1 [1.8], man/gs.1 [1.8], man/gslp.1 [1.8], +man/gsnd.1 [1.8], man/pdf2dsc.1 [1.8], man/pdf2ps.1 [1.10], +man/pdfopt.1 [1.8], man/pf2afm.1 [1.8], man/pfbtopfa.1 [1.9], +man/printafm.1 [1.8], man/ps2ascii.1 [1.8], man/ps2epsi.1 [1.8], +man/ps2pdf.1 [1.12], man/ps2pdfwr.1 [1.9], man/ps2ps.1 [1.15], +man/wftopfa.1 [1.8]: 2001/04/09 06:20:01 raph) + +</pre><h2><a name="7.00-Procedures"></a>Procedures</h2><pre> + +Completes the change of default X directories to /usr/X11R6. Last commit on +this was inadvertently incomplete. (unix-gcc.mak [1.19], +unixansi.mak [1.14]: 2001/04/07 23:34:40 raph) + +Updates version number and date in preparation for 7.00 release. +(version.mak [1.33]: 2001/04/09 06:20:03 raph) + +</pre><h2><a name="7.00-Utilities"></a>Utilities</h2><pre> + +Fixes problems: + - Correct the Unix executable handing of the display device formats +of 8bit and 24bit per pixel RGB. (dxmain.c [1.3]: 2001/04/08 08:40:29 +ghostgum) + - Ghostscript should return to the caller, not exit. Remove exit() +from gp_do_exit() for all platforms except VMS. (gp_dvx.c [1.4], +gp_iwatc.c [1.5], gp_os9.c [1.4], gp_unix.c [1.5]: 2001/04/08 08:43:24 +ghostgum) + +</pre><h2><a name="7.00-PDF_writer"></a>PDF writer</h2><pre> + +Fixes problems: + - AR4 doesn't like fonts with empty FontBBox which happens when the +font contains only space characters. Small BBox causes AR 4 to display a +hairline. So we use the full BBox. (gdevpdfw.c [1.11]: 2001/04/08 14:12:56 +alexcher) + +</pre><h2><a name="7.00-Interpreter"></a>Interpreter</h2><pre> + +Fixes problems: + - Ghostscript should return to the caller, not exit. Remove exit() +from gp_do_exit() for all platforms except VMS. (gs.c [1.6]: 2001/04/08 +08:43:24 ghostgum) + - Need a cast to (gs_memory_t *) to prevent errors on some +compliers. Change provided by Nelson H. F. Beebe. (zfdctd.c [1.6]: +2001/04/09 05:15:57 rayjj) + - Setting an ICC color space now invalidates the joint cache, so +that TransformPQR gets computed. The profile is explicitly loaded so that +the TransformPQR procedures have access to the white point. Also, the +photometric interpretation of the hack for /All separation color spaces is +reversed. Fixes Fixed_Original.pdf from Michael Jahn and Adobe tech note +5002_EPSF_Spec.pdf. (zicc.c [1.2]: 2001/04/09 06:09:58 raph) + +Updates version number and date in preparation for 7.00 release. +(lib/gs_init.ps [1.34]: 2001/04/09 06:20:03 raph) + +</pre><h2><a name="7.00-Library"></a>Library</h2><pre> + +Fixes problems: + - Setting an ICC color space now invalidates the joint cache, so +that TransformPQR gets computed. The profile is explicitly loaded so that +the TransformPQR procedures have access to the white point. Also, the +photometric interpretation of the hack for /All separation color spaces is +reversed. Fixes Fixed_Original.pdf from Michael Jahn and Adobe tech note +5002_EPSF_Spec.pdf. (gscsepr.c [1.9], gsicc.c [1.2], gsicc.h [1.2]: +2001/04/09 06:09:58 raph) + +</pre> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 2001 artofcode LLC. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Htmstyle.htm b/Master/xemtex/doc/ghostscript/Htmstyle.htm new file mode 100644 index 00000000000..05b4e82ef06 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Htmstyle.htm @@ -0,0 +1,778 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" +"http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>HTML coding and style guidelines for Ghostscript documentation</title> +<!-- $Id: Htmstyle.htm,v 1.18.2.11.2.5 2003/05/17 14:39:00 giles Exp $ --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>HTML coding and style guidelines for Ghostscript documentation</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Introduction">Introduction</a> +<li><a href="#Appearance">Appearance and contents</a> +<ul> +<li><a href="#Page_structure">Page structure</a> +<li><a href="#Links_outside">Links to outside the Ghostscript documentation</a> +<li><a href="#Images">Images and graphics</a> +<li><a href="#index.html"><b><tt>index.html</tt></b></a> +</ul> +<li><a href="#Large_structure">HTML large structure</a> +<ul> +<li><a href="#HTML_head">HTML <b><tt><head></tt></b></a> +<li><a href="#HTML_body">HTML <b><tt><body></tt></b></a> +</ul> +<li><a href="#Inner_structure">HTML inner structure</a> +<ul> +<li><a href="#Structuring_comments">Structuring comments</a> +<li><a href="#Headers">Headers: <b><tt><Hn></tt></b></a> +<li><a href="#Anchors">Anchors: <b><tt><a name="..."></tt></b></a> +</ul> +<li><a href="#Text">The presentation of text</a> +<ul> +<li><a href="#Text_sections">Sections of text</a> +<ul> +<li><a href="#Paragraphs">Paragraphs: <b><tt><p></tt></b></a> +<li><a href="#Blockquote">Indented paragraphs: <b><tt><blockquote></tt></b></a> +<li><a href="#Line_breaks">Explicit line breaks: <b><tt><br></tt></b></a> +<li><a href="#Preformatted_text">Preformatted text: <b><tt><pre></tt></b></a> +</ul> +<li><a href="#Use_of_fonts">The use of different font faces</a> +</ul> +<li><a href="#Lists">Lists: <b><tt><ul>, <ol>, <dl></tt></b></a> +<li><a href="#Tables">Tables: <b><tt><table></tt></b></a> +<ul> +<li><a href="#Readability">Readability for the user and the HTML writer</a> +<li><a href="#Table_guidelines">Specific guidelines for coding tables</a> +<li><a href="#Typical_table">HTML code for typical tables</a> +</ul> +<li><a href="#Unused_tags">Tags not used</a> +<li><a href="#New_document">Creating a new document</a> +<ul> +<li><a href="#File_name">Name the new document in 8+3 format</a> +<li><a href="#Plagiarize">Use an existing document as a model</a> +<li><a href="#Readme_material">Write new references to go in <b><tt>Readme.htm</tt></b></a> +<li><a href="#New_doc_other">Other considerations</a> +</ul> +<li><a href="#Miscellany">Miscellany</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Introduction"></a>Introduction</h2> + +<p> +The most important intention in casting Ghostscript's documentation into +Hypertext Markup Language (HTML) from simple text form is to improve its +usefulness greatly to those who use, install, and build Ghostscript: +everything else is details. The wide spread of World Wide Web browsers now +makes it possible to distribute documents which are not only readable as +text, but also richly cross-linked as hypertext. Using hypertext through a +browser can reduce the effort required to find and use the information +people often need in order to use Ghostscript. + +<p> +The remainder of this document expresses the guidelines used to create the +HTML form of the Ghostscript documentation. The guidelines are intended to +encourage + +<ul> +<li>documents that are easy to read and understand in all of the most-used +forms: on screen with a browser, printed by a browser, or as plain text; + +<li>correct HTML that conforms to prevailing standards; + +<li>consistent HTML coding among all Ghostscript's documents; and + +<li>HTML documents that are as simple as possible in light of their +contents; free of difficult, little-used, or proprietary constructs; and +easy to understand and modify. +</ul> + +<p> +Here are those guidelines. + +<hr> + +<h2><a name="Appearance"></a>Appearance and contents</h2> + +<p> +What the user sees browsing the documentation, and what a document +developer or editor sees working with it, are different. This section is +about what the user sees. + +<h3><a name="Page_structure"></a>Page structure</h3> + +<p> +A Ghostscript document in HTML form should consist of + +<ol> +<li>a visual header containing +<ol type=a> +<li>a conspicuous highlighted headline; +<li>a table of contents; +<li>"hints": references to other useful documents, always including +<a href="Readme.htm">Readme.htm</a>; +</ol> +<li>the substantive contents; +<li>a visual trailer consisting entirely of +<ol type=a> +<li>standard copyright and licensing text; +<li>the Ghostscript version number; and +<li>the date when the document was last modified. +</ol> +</ol> + +<p> +This document is an example of this standard visible structure. Also see +below about "<a href="#Structuring_comments">Structuring comments</a>" in +HTML source code. + +<p> +Where it makes sense to modify the standard structure to make the document +more usable, do that. See +<a href="Readme.htm"><b><tt>Readme.htm</tt></b></a> for an example: the +introductory material at the beginning of the visible header, before the +table of contents. + +<h3><a name="Links_outside"></a>Links to outside the Ghostscript documentation</h3> + +<p> +Links to sites and documents outside the ghostscript distribution +must carry the <code>class="offsite"</code> attribute and value. This signals special +formatting to the stylesheet to assist users reading offline. + +<p> +Avoid gratuitous commercial links; for instance, link the title of a book +to its publisher, not to one particular on-line bookseller. See +<a href="Language.htm#Capabilities"><b><tt>Language.htm</tt></b></a> for an +example, the reference to the <em>PostScript Language Reference +Manual</em>. + +<p> +Similarly, where you have a choice, refer to free software rather than +commercial products. See +<a href="Make.htm#Third-party_libraries">Make.htm</a> for an example, the +reference to <a href="Make.htm#Third-party_libraries">InfoZip +<b><tt>unzip</tt></b></a> (where many commercial products provide similar +functions). + +<h3><a name="Images"></a>Images and graphics</h3> + +<p> +Use no graphics or images. The documents are text-only, so nothing is lost +when a document is converted into ASCII text. This is an explicit initial +design goal of the HTML documentation. + +<h3><a name="index.html"></a><b><tt>index.html</tt></b></h3> + +<p> +<b><tt>index.html</tt></b> is not a part of the visible Ghostscript +documentation itself, but when it is placed with all the +<b><tt>*.htm</tt></b> files in a directory and a browser refers to the +directory name alone, most servers are configured to deliver a file named +<b><tt>index.html</tt></b> by default. This one does nothing except +immediately to open the introductory Ghostscript document +<a href="index.html"><b><tt>Readme.htm</tt></b></a>. This is intended to +make life easier for both webmasters and users. + +<hr> + +<h2><a name="Large_structure"></a>HTML large structure</h2> + +<h3><a name="HTML_head"></a>HTML <b><tt><head></tt></b></h3> + +<p> +Besides the essential HTML structure elements, Ghostscript HTML document's +<b><tt><head></tt></b> consists of three elements in this order: + +<ol> +<li>A <b><tt><title></tt></b>, usually the same text as the +<a href="#Headline">headline</a> + +<li>An RCS identification line giving the name of the file in an HTML +comment: + +<blockquote> +<!-- The next line must not contain the literal string $,I,d,:! --> +<b><tt><!-- $Id</tt><tt>: </tt></b><b><em>{file name}</em></b><b><tt>.htm $ --></tt></b> +</blockquote> + +<li>For documents converted from another form, an HTML comment line giving +the name of the original file before it was edited and converted to HTML: + +<blockquote> +<b><tt><!-- Originally: </tt></b><b><em>{file name}</em></b><b><tt> --></tt></b> +</blockquote> +</ol> + +<h3><a name="HTML_body"></a>HTML <b><tt><body></tt></b></h3> + +<p> +A Ghostscript HTML document's <b><tt><body></tt></b> consists of five +elements in this order: + +<ol> +<li><a name="Headline"></a>The <b><em>headline</em></b> is conspicuous text +at the top of the page, usually the same as the +<a href="#Structure_head"><b><tt><title></tt></b></a> text. It is +always in a table whose purpose is to provide a colored background using +<b><tt>bgcolor</tt></b>, going the full width of the page: + +<blockquote> +<b><tt><p><table width="100%" border="0"><br> +<tr><th align="center" bgcolor="#CCCC00"><font size=6></tt></b><br> +<b><em>{Text}</em></b><br> +<b><tt></font><br> +</table></tt></b> +</blockquote> + +<li><a name="Table_of_contents"></a> +The <b><em>table of contents</em></b> consists of nested unordered +lists <b><tt><ul></tt></b>, in most documents assembled strictly from +the <b><tt><Hn></tt></b> headers. The levels of nesting in the table +of contents correspond to the level numbers of the headers. + +<li>The <b><em>hint</em></b> is a short section suggesting where to look +for other related information. With very few exceptions this always +includes a reference and link to +<a href="Readme.htm"><b><tt>Readme.htm</tt></b></a>, but may include other +suggestions and references. + +<li>The substance of the document. + +<li>The <b><em>trailer</em></b> contains, in a small font size, + +<ol type=a> +<li>the <b><em>copyright notice</em></b> and other legal boilerplate text +<li>the <b><em>version number</em></b> of Ghostscript and the +<b><em>date</em></b> when the file was last modified. +</ol> +</ol> + +<p> +This document for an example of that structure. + +<hr> + +<h2><a name="Inner_structure"></a>HTML inner structure</h2> + +<h3><a name="Structuring_comments"></a>Structuring comments</h3> + +<p> +Special comment lines within the HTML files mark internally the visible +sections of the document. They make it easy for both document developers +and programs to handle the HTML code. Each of these comments is exactly 80 +characters wide, and each important section of a document is bracketed by a +unique beginning and ending pair. View the source code of this document +for an example of these structuring comments. The sections they mark are: + +<ol> +<li>the <b><em>visible header</em></b> +<ol type=a> +<li>the <a href="#Headline"><b><em>headline</em></b></a> +<li>the <b><em>table of contents</em></b> +<li>the "see also" <b><em>hints</em></b> +</ol> +<li>the <b><em>body</em></b> +<li>the <b><em>trailer</em></b> +</ol> + +<h3><a name="Headers"></a>Headers: <b><tt><Hn></tt></b></h3> + +<p> +Give a header <b><tt><Hn></tt></b> this structure: + +<blockquote><b><tt> +<h2><a name="Head_anchor"></a>Header text</h2> +</tt></b></blockquote> + +<p> +That is, the opening header tag, an anchor, the header text, and the +closing tag. + +<p> +Represent every header in the table of contents, linked +<b><tt><a href="#..."></tt></b>...<b><tt></a></tt></b> to +the header. Of course, the headers are also convenient linkage points for +references from other documents. + +<h3><a name="Anchors"></a>Anchors: <b><tt><a name="..."></tt></b></h3> + +<p> +Give an anchor a name consisting only of letters, digits, dots +("<b><tt>.</tt></b>"), hyphens ("<b><tt>-</tt></b>"), and underscores +("<b><tt>_</tt></b>"), but not white space or other punctuation marks. +This ensures that the name is readable and that an entire name always +appears on a single line of HTML source both where it's defined and +everywhere it's used, making it simple to find anchors by text search in +the HTML source code. + +<p> +Choose anchor names to be readable and meaningful in the HTML source code. +For instance: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Use this form + <td> + <th align=left>... <b><em>NOT</em></b> this form +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt><a name="Image_formats"></a></tt></b> + <td> + <td><b><tt><a name="Imgfts"></a></tt></b> +</table></blockquote> + +<p> +Anchors should be empty, that is + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Use this form + <td> + <th align=left>... <b><em>NOT</em></b> this form +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt><a name="..."></a></tt></b> + <td> + <td><b><tt><a name="..."></tt></b><b><em>anything</em></b><b><tt></a></tt></b> +</table></blockquote> + +<p> +<a name="Anchor_placement"></a>Place an anchor within a paragraph (indented +paragraph, list item, head, etc.) and at its beginning. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Use this form + <td> + <th align=left>... <b><em>NOT</em></b> this form +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt><p><a name="..."></a></tt></b> + <td> + <td><b><tt><p></tt></b><b><em> ...text... </em></b><b><tt><a name="..."></a></tt></b> +<tr valign=top> <td><b><tt><p><a name="..."></a></tt></b> + <td> + <td><b><tt><a name="..."></a><p></tt></b> +<tr valign=top> <td><b><tt><li><a name="..."></a></tt></b> + <td> + <td><b><tt><a name="..."></a><li></tt></b> +</table></blockquote> + +<hr> + +<h2><a name="Text"></a>The presentation of text</h2> + +<h3><a name="Text_sections"></a>Sections of text</h3> + +<h4><a name="Paragraphs"></a>Paragraphs: <b><tt><p></tt></b></h4> + +<p> +Define unindented paragraphs with <b><tt><p></tt></b>, never with +explicit line breaks <b><tt><br></tt></b>, and make them +ragged-right, not right-filled or centered. Put the paragraph tag +<b><tt><p></tt></b> on a line alone, except when it is +<a href="#Anchor_placement">followed immediately by an anchor</a>. +Don't place the anchor before the paragraph tag. + +<h4><a name="Blockquote"></a>Indented paragraphs: <b><tt><blockquote></tt></b></h4> + +<p> +Define indented paragraphs with <b><tt><blockquote></tt></b>. Avoid +elaborate nested indentation -- that is, more than two levels. It is +generally a poor idea to try to make indentation carry too much weight of +meaning for text, so use indentation simply to separate visual elements for +easier reading. + +<h4><a name="Line_breaks"></a>Explicit line breaks: <b><tt><br></tt></b></h4> + +<p> +Use explicit line breaks <b><tt><br></tt></b> sparingly, and never as +a substitute for paragraph tags. Do use them in + +<ul> +<li>multi-line addresses +<li>formatted coding examples +<li>table entries, sparingly +</ul> + +<h4><a name="Preformatted_text"></a>Preformatted text: <b><tt><pre></tt></b></h4> + +<p> +Use preformatted text <b><tt><pre></tt></b> exclusively for material +that must be presented with exact spacing in a monospaced font, such as +extended coding examples. Where extended preformatted text seems likely to +be wider than a typical browser window, reduce the font size: + +<blockquote> +<b><tt><font size="-1"><pre></tt></b><br> +<b><em>... Wide preformatted text ...</em></b><br> +<b><tt></pre></font></tt></b> +</blockquote> + +<h3><a name="Use_of_fonts"></a>The use of different font faces</h3> + +<p> +Do not use named fonts. Use only standard markup to specify fonts, as +shown in this table. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Use of fonts</font><hr> +<tr valign=bottom> + <th align=left>Tag + <td> + <th align=left>Used for +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt><address></tt></b> + <td> + <td>Addresses in running text +<tr valign=top> <td><b><tt><b></tt></b> + <td> + <td>Emphasis everywhere +<tr valign=top> <td><b><tt><em></tt></b> + <td> + <td>Emphasis, usually in running text; with <b><tt><b></tt></b>, strong emphasis +<tr valign=top> <td><b><tt><font size=</tt></b><b><em>N</em></b><b><tt>></tt></b> + <td> + <td>Table headings, extended <b><tt><pre></tt></b> examples +<tr valign=top> <td><b><tt><pre></tt></b> + <td> + <td>Preformatted text (to control spacing) +<tr valign=top> <td><b><tt><small></tt></b> + <td> + <td>Superscripts (smaller than <b><tt><font size="-1"></tt></b>) +<tr valign=top> <td><b><tt><sup></tt></b> + <td> + <td>Superscripts +<tr valign=top> <td><b><tt><tt></tt></b> + <td> + <td>With <b><tt><b></tt></b>, used for specific names of + code, programs, and data in running text, and in short examples +</table></blockquote> + +<hr> + +<h2><a name="Lists"></a>Lists: <b><tt><ul>, <ol>, <dl></tt></b></h2> + +<p> +Don't over-use lists: instead simply use clear wording in running text +wherever possible. Use a list where the special formatting improves the +material's clarity and readability. + +<p> +Most simple lists should be unordered (bulleted) lists +<b><tt><ul></tt></b>. Use an ordered (numbered or alphabetized) list +<b><tt><ol></tt></b> only where the exact ordering or an exact count +is important. + +<p> +Where entries in a descriptive list <b><tt><dl></tt></b> contain +extended descriptions <b><tt><dd></tt></b> -- especially if the +descriptions contain paragraph breaks or tables -- improve the spacing +between entries by making each entry a separate list. That is, enclose +each entry in a separate list to give it more readable spacing, rather than +putting many <b><tt><dt>...<dd>...</tt></b> entries in a single +list: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Use this form + <td> + <th align=left>... <b><em>NOT</em></b> this form +<tr> <td colspan=3><hr> +<tr> <td valign=top> + <b><tt><dl></tt></b><br> + <b><tt><dt></tt></b>Term<br> + <b><tt><dd></tt></b>Description<br> + <b><tt><p></tt></b>Another paragraph of description<br> + <b><tt></dl></tt></b><br> + <br> + <b><tt><dl></tt></b><br> + <b><tt><dt></tt></b>Another term<br> + <b><tt><dd></tt></b>Another description<br> + <b><tt></dl></tt></b><br> + ...<br> + <td> + <td valign=top> + <b><tt><dl></tt></b><br> + <b><tt><dt></tt></b>Term<br> + <b><tt><dd></tt></b>Description<br> + <b><tt><p></tt></b>Another paragraph of description<br> + <b><tt><dt></tt></b>Another term<br> + <b><tt><dd></tt></b>Another description<br> + ...<br> + <b><tt></dl></tt></b> +</table></blockquote> + +<p> +This may be more work for the HTML writer, but the results for the reader +are often much better. + +<hr> + +<h2><a name="Tables"></a>Tables: <b><tt><table></tt></b></h2> + +<h3><a name="Readability"></a>Readability for the user and the HTML writer</h3> + +<p> +Format tables to be as readable as possible both with a browser and when +converted to plain text. Browsers and converters of all kinds handle +tables idiosyncratically, so there seems to be more art than science to +reaching this end, which accounts for all the detail in the guidelines for +tables: it is the reason for all the uses of background color +<b><tt>bgcolor</tt></b>, horizontal rules <b><tt><hr></tt></b>, and +explicit spacing. + +<p> +Secondarily, arrange HTML source code for tables to be readable by the +writer and developer. + +<h3><a name="Table_guidelines"></a>Specific guidelines for coding tables</h3> + +<ul> +<li>Large tables have heads with the same background color as the page's +<a href="#Headline">headline</a>. (Color is used only in tables and only +this way, and it is the same color everywhere. In consideration of +differences of color vision, the color is chosen so that normal black text +contrasts with a brighter background, and the color itself against white.) + +<li>Do not use borders for tables; they almost invariably only clutter the +appearance without adding to clarity, and they don't convert well to plain +text. For visual spacing prefer white space. + +<li>Set cell padding and spacing to 0. Use explicit white space for +readability, not implicit white space. + +<li>Begin the code for a new row <b><tt><tr></tt></b> on a new line. +Generally use <b><tt>valign=top</tt></b> to control the placement of text +in a row for readability with a browser or as plain text. + +<li>Code the first column of a row beginning on the same line as the +beginning of the row, and then begin every other column on a separate line. +Always precede <b><tt><td></tt></b> by a tab character. + +<li>Separate two columns of substantive material by a visually empty column +of nonbreaking spaces for readability. Specify the width of this empty +column in the first row, and in all other rows give that column a single +nonbreaking space. + +<li>Use horizontal rules and visually empty rows for clarity, but +sparingly. Be consistent with the existing tables. + +<li>Give every cell some contents: put a nonbreaking space in a visually +empty cell as a placeholder. +</ul> + +<h3><a name="Typical_table"></a>HTML code for typical tables</h3> + +<p> +The HTML source code for a typical large table should look like this: + +<blockquote> +<pre><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Large table</font><hr> +<tr> <th align=left>... + <td>&nbsp;&nbsp;&nbsp; + <th align=left>... + <td>&nbsp;&nbsp;&nbsp; + <th align=left>... +<tr> <td>... + <td>&nbsp;&nbsp; + <td>... + <td>&nbsp; + <td>... +... +</table> +</pre></blockquote> + +<p> +The HTML source code for a typical small table should look like this: + +<blockquote> +<pre><table cellpadding=0 cellspacing=0> +<tr> <td>... + <td>&nbsp;&nbsp;&nbsp; + <td>... +<tr> <td>... + <td>&nbsp; + <td>... +... +</table> +</pre></blockquote> + +<hr> + +<h2><a name="Unused_tags"></a>Tags not used</h2> + +<p> +Don't use optional tags (ones not required by the HTML standard). These +include <b><tt></dd></tt></b>, <b><tt></dt></tt></b>, +<b><tt></li></tt></b>, <b><tt></p></tt></b>, +<b><tt></tr></tt></b>, <b><tt></th></tt></b>, and +<b><tt></td></tt></b>. + +<hr> + +<h2><a name="New_document"></a>Creating a new document</h2> + +<h3><a name="File_name"></a>Name the new document in 8+3 format</h3> + +<p> +If you create a new Ghostscript HTML document, choose for it a name in 8+3 +format for cross-platform compabitility: + +<blockquote> +<b><em>Name</em></b><b><tt>.htm</tt></b> +</blockquote> + +<p> +where "<b><em>Name</em></b>" is no more than eight characters. + +<p> +Begin the new file name with an upper-case letter like the existing names, +which are in mixed case beginning with upper-case letters. Use spelling, +not case, to distinguish between names: that is, don't create a new file +whose name differs from an existing one only by the difference between +upper and lower case, because some platforms can't store two such files. + +<h3><a name="Plagiarize"></a>Use an existing document as a model</h3> + +<p> +To create an entirely new Ghostscript document, plagiarize this one for the +<a href="#Structuring_comments">structuring comments</a> and other useful +parts. Then, using the <a href="#Structuring_comments">structuring +comments</a> as a guide to the sections of the document (in a text editor, +search for "<b><tt><!-- [</tt></b>"): + +<ul> +<li>insert your own HTML title and <a href="#Headline">headline</a> (they +should ordinarily be the same text) in place of the old ones; + +<li>insert your own RCS <b><tt>$Id</tt></b> in place of the old one in the +<a href="#Structure_head">HTML header</a>; + +<li>delete the old entries in the <a href="#Table_of_contents">table of +contents</a>; + +<li>keep the hint paragraph; + +<li>delete the entire contents section between the structuring comments; +and + +<li>in the trailer, update the version number and date. +</ul> + +<p> +You now have a template document ready for new contents. + +<h3><a name="Readme_material"></a>Write new references to go in <b><tt>Readme.htm</tt></b></h3> + +<p> +Write material to go in <a href="Readme.htm"><b><tt>Readme.htm</tt></b></a> +that describes the new document, and links to it from two sections: + +<ul> +<li>the <a href="Readme.htm#Theme_roadmap">thematic section</a> and + +<li>the descriptions of documentation +<a href="Readme.htm#Ordered_roadmap">arranged by file name</a>. +</ul> + +<h3><a name="New_doc_other"></a>Other considerations</h3> + +<p> +Follow the other guidelines here, including which elements of the +document should go in which section according to the structuring comments, +and <a href="#Headers">anchoring every <b><tt><Hn></tt></b> +header</a>. As you create text and headers, you will want to rebuild the +<a href="#Table_of_contents">table of contents</a> from the headers +occasionally. + +<p> +Pete Kaiser <<a href="mailto:kaiser@acm.org">kaiser@acm.org</a>> +wrote a package of GNU emacs functions specifically to handle Ghostscript +HTML documentation, including functions to build a table of contents from +headers in an HTML document, and to build and maintain tables and +other structures built along the guidelines in this document. + +<hr> + +<h2><a name="Miscellany"></a>Miscellany</h2> + +<p> +Use <b><tt><></tt></b> to bracket links to visible email addresses +(<b><tt>mailto</tt></b>) in running text. This makes it easy for a user to +cut and paste the entire name and address into another document or mailer, +for instance + +<blockquote> +Free Software Foundation <<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>> +</blockquote> + +<p> +For exponentiation use "<b><tt>^</tt></b>" (not "**" or "exp()") plus +writing the exponent as a superscript in <b><tt><small></tt></b> +size: + +<blockquote> +Something<b><tt>^<sup></tt></b><b><tt><small></tt></b>exponent<b><tt></small></sup></tt></b>. +</blockquote> + +<p> +to look like this: + +<blockquote> +Something<b><tt>^</tt></b><sup><small>exponent</small></sup> +</blockquote> + +<p> +This is intended for readability both in a browser and as plain text. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Humor.htm b/Master/xemtex/doc/ghostscript/Humor.htm new file mode 100644 index 00000000000..2df2a61a1b4 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Humor.htm @@ -0,0 +1,99 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Another Ghostscript interpreter</title> +<!-- $Id: Humor.htm,v 1.3.2.1 2002/02/22 19:45:54 ray Exp $ --> +<!-- Originally: humor.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Another Ghostscript interpreter</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document contains a humorous message, verbatim except for +minor spelling corrections, received from a friend out in network-land. + +<!-- [1.3 end hint] ======================================================== --> + +<!-- [1.0 end visible header] ============================================== --> + +<hr> + +<!-- [2.0 begin contents] ================================================== --> + +<p> +Regarding Ghostscript: I hate to say this to you but I've already +implemented a Ghostscript interpreter. I'm happy to see that someone else +has recognized the need dead people have for computers. I have included an +example of the output of my Ghostscript at the end of this letter. + +<p> +The interpreter is written in a language called cant-C, developed by Mr. +Turing last year. The compiler is easily ported to any environment you +care to name. I would be more than happy to send you a copy, but you must +first contact my lawyer for this venture, Thomas Jefferson of Phila. Pa.. +(As a side note, Mr. Jefferson is very excited by Ghostscript. Look for +The Declaration of Independance V1.1 RSN). + +<p> +The possibilities for Ghostscript go far beyond Deathtop publishing, I'm +sure you'll agree. I have contacted numerous authors who may be interested +in using Ghostscript (Shakespeare, Hemingway, etc) and all have been very +excited by what they've seen. (Shakespeare wants to write a modern Romeo +and Juliette, called Romeo and Julio, the story of 2 gay hispanic men kept +apart by their parents.) + +<p> +Anyway, here is the Ghostscript example I promised. Feel free to show this +to your friends and colleagues, I'm sure they'll all be suitably impressed. + +<pre> +------Cut Here-------------------------------------- +------Cut Here-------------------------------------- +</pre> + +<!-- [2.0 end contents] +==================================================== --> + +<!-- [3.0 begin visible trailer] +=========================================== --> +<hr> + +<p> +<small>Copyright © 2001 artofcode LLC. All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +For more information about licensing, please refer to +http://www.ghostscript.com/licensing/. For information on +commercial licensing, go to http://www.artifex.com/licensing/ or +contact Artifex Software, Inc., 101 Lucas Valley Road #110, +San Rafael, CA 94903, U.S.A., +1(415)492-9861. + +<p> +<small>Ghostscript version 7.00, 8 April 2001 +</small> + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Install.htm b/Master/xemtex/doc/ghostscript/Install.htm new file mode 100644 index 00000000000..060de229bae --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Install.htm @@ -0,0 +1,540 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>How to install Ghostscript</title> +<!-- $Id: Install.htm,v 1.26.2.13.2.6 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: install.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>How to install Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Overview">Overview of how to install Ghostscript</a> +<li><a href="#Install_Unix">Installing Ghostscript on Unix</a> +<ul> +<li><a href="#Shared_object">Ghostscript as a shared object</a> +<li><a href="#Install_GNULinux">Additional notes on GNU/Linux</a> +</ul> +<li><a href="#Install_Windows">Installing Ghostscript on MS Windows</a> +<li><a href="#Install_VMS">Installing Ghostscript on OpenVMS</a> +<li><a href="#Install_DOS">Installing Ghostscript on DOS</a> +<li><a href="#Install_OS2">Installing Ghostscript on OS/2 2.x</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a> and "<a href="Make.htm">How to build Ghostscript from source +code</a>". + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Overview"></a>Overview of how to install Ghostscript</h2> + +<p> +You must have three things to run Ghostscript: +<ol> +<li>The Ghostscript executable file; on some operating +systems, more than one file is required. These are entirely +platform-specific. See below for details. + +<li>Initialization files that Ghostscript reads in when it +starts up; these are the same on all platforms. +<ul> +<li><b><tt>gs_</tt></b>*<b><tt>.ps</tt></b> unless Ghostscript was compiled +using the "compiled initialization files" option. See the documentation of +<a href="Psfiles.htm">PostScript files distributed with Ghostscript</a>. + +<li><b><tt>pdf_</tt></b>*<b><tt>.ps</tt></b> if Ghostscript was compiled +with the ability to interpret Adobe Portable Document Format (PDF) files, +that is, <b><tt>pdf.dev</tt></b> was included in +<b><tt>FEATURE_DEVS</tt></b> when Ghostscript was built. + +<li><b><tt>Fontmap</tt></b> and <b><tt>Fontmap.GS</tt></b> (or the +appropriate <b><tt>Fontmap.</tt></b><em>xxx</em> for your platform), unless +you plan always to invoke Ghostscript with the <a +href="Use.htm#FONTMAP_switch"><b><tt>-dNOFONTMAP</tt></b> switch</a>. +</ul> + +<li>Fonts, for rendering text. These are platform-independent, +but if you already have fonts of the right kind on your platform, +you may be able to use those. See below for details. Also see the +<a href="Fonts.htm">documentation on fonts</a>. +</ol> + +<p> +The <a href="Use.htm">usage documentation</a> describes the search +algorithms used to find initialization files and font files. The +per-platform descriptions that follow tell you where to install these +files. + +<hr> + +<h2><a name="Install_Unix"></a>Installing Ghostscript on Unix</h2> + +<p> +Ghostscript uses a GNU autoconf-based configure, build and install method +common to many modern software packages. In general the following with suffice +to build ghostscript: +<blockquote><tt><b> + ./configure<br> + make +</b></tt></blockquote> +and then it may be installed in the default location with: +<blockquote><b> + <tt>make install</tt> +</b></blockquote> +This last command may need to be performed with super user privileges. + +<p> +You can set the installation directory by adding <tt>--prefix=<em>path</em></tt> +to the configure invocation in the first step. The default prefix is <tt>/usr/local</tt>, +which is to say the <tt>gs</tt> executable is installed as <tt>/usr/local/bin/gs</tt>. + +</p>A list of similar configuration options is available via <tt>./configure --help</tt> + +<p> +For more detailed information on building Ghostscript see +<a href="Make.htm#Unix_build">how to build Ghostscript on Unix</a> in +the documentation on building Ghostscript, especially regarding information +on using the older <a href="Make.htm#UNIX_makefile">hand edited makefile</a> +approach. Whatever configuration method you use, execute "<b><tt>make +install</tt></b>" to install the executable and all the required and +ancillary files after the build is complete. + +<h3><a name="Unix_Fonts"></a>Fonts</h3> + +<p> +The makefile installs all the files except fonts under the directory +defined in the makefile as <b><tt>prefix</tt></b>. Fonts need to be +installed separately. The fonts should be installed in +<tt><em>{prefix}</em>/share/ghostscript/fonts</tt>. +(That is, <tt>/usr/local/share/ghostscript/fonts/</tt> if you used the default +configuration above.) + +<p> +You can have ghostscript use other fonts on your system by adding +entries to the fontmap or adding the directories to the GS_FONTMAP environment +variable. See the <a href="Use.htm#Font_lookup">usage documentation</a> for more +information. +For example, many GNU/Linux distributions place fonts under <tt>/usr/share/fonts</tt>. + +<h3><a name="Shared_object"></a>Ghostscript as a shared object</h3> +If you've built Ghostscript as a shared object, instead of '<tt>make install</tt>', +you must use '<tt>make soinstall</tt>'. +See <a href="Make.htm#Shared_object">how to build Ghostscript +as a shared object</a> for more details. + +<h3><a name="Install_GNULinux"></a>Additional notes on GNU/Linux</h3> + +<p> +For GNU/Linux, you may be able to install or upgrade Ghostscript from +precompiled <a href="http://www.rpm.org">RPM</a> files using: + +<blockquote><b><tt> +rpm -U ghostscript-N.NN-1.i386.rpm<br> +rpm -U ghostscript-fonts-N.NN-1.noarch.rpm +</tt></b></blockquote> + +<p> +However, please note that we do not create RPMs for Ghostscript, and we take +no responsibility for RPMs created by others. + +<hr> + +<h2><a name="Install_Windows"></a>Installing Ghostscript on MS Windows</h2> + +<p> +We usually distribute Ghostscript releases for Windows as self-extracting +archive files, since this is the most convenient form for users. These +files can also be unpacked as if they were plain zip files. + +<p> +The self-extracting archive is normally named +<b><tt>gs###w32.exe</tt></b>, +where ### is the release number (e.g., 650 for Ghostscript 6.50, +700 for Ghostscript 7.00). + +<h3><a name="Windows4"></a>Windows 95/98 and NT 4</h3> + +<p> +To install a self-extracting Ghostscript archive on Windows 95/98 or +Windows NT4/2000, you need just this self-extracting archive file. +Run this file to install Ghostscript. + +<p> +Alternatively, if you have the zip file, unzip it to a temporary +directory then run the included <b><tt>setupgs.exe</tt></b>. +After the setup program has finished, remove the temporary files. + +<h3><a name="General_Windows"></a>General Windows configuration</h3> + +<p> +The archive includes files in these subdirectories: + +<blockquote><b><tt> +gs<em>#.##</em>\bin +<br>gs<em>#.##</em>\lib +<br>gs<em>#.##</em>\examples +<br>gs<em>#.##</em>\doc +<br>fonts +</tt></b></blockquote> + +<p> +The actual executable files, in the <b><tt>gs<em>#.##</em>\bin</tt></b> +subdirectory, are: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>GSWIN32.EXE</tt></b> + <td> + <td>32-bit Ghostscript using windows +<tr valign=top> <td><b><tt>GSWIN32C.EXE</tt></b> + <td> + <td>32-bit Ghostscript using only the command line +<tr valign=top> <td><b><tt>GSDLL32.DLL</tt></b> + <td> + <td>32-bit dynamic link library containing most of Ghostscript's +functionality +</table></blockquote> + +<p> +See "<a href="#Install_DOS">Installing Ghostscript on DOS</a>" below for +information about using Adobe Type Manager, Adobe Type Basics, or Adobe +Acrobat fonts. If your system uses TrueType fonts, you can get them +converted to a Ghostscript-compatible format at the time you select your +"printer" by doing the following: + +<blockquote><ol> +<li>Open control panel and double-click on the "Printers" icon. +<li>Select your Postscript printer. +<li>Choose Setup. +<li>Choose Options. +<li>Choose Advanced. +<li>At the top of the dialog box you will see TrueType Fonts Send to +Printer As: Choose <em>(drop-down menu)</em> Adobe Type 1. +<li>Uncheck Use Printer Fonts for All TrueType Fonts and Use +Substitution +Table. +<li>OK. +<li>OK etc. +</ol></blockquote> + +<p> +That's it! Your TrueType fonts will automatically be downloaded in your +PostScript file for Ghostscript to use. + +<p> +For printer devices, the default output is: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td>The default printer + <td> + <td>Win95 or WinNT +<tr valign=top> <td>Prompt for a printer port + <td> + <td>Win32s (Windows 3.1) +</table></blockquote> + +<p> +This can be modified as follows. + +<blockquote> +<dl> +<dt><b><tt>-sOutputFile="LPT1:"</tt></b> +<dd>Output to the named port. + +<dt><b><tt>-sOutputFile="%printer%printer name"</tt></b> (Windows 95, 98, +NT or 2000) +<dd>Output to the named printer. If your printer is named "HP DeskJet 500" +then you would use <tt>-sOutputFile="%printer%HP DeskJet 500"</tt>. + +<dt><b><tt>-sOutputFile="\\spool\printer name"</tt></b> (Windows 3.1/Win32s) +<dd>Output to the named printer. Note that this is NOT a UNC name. + +</dl> +</blockquote> + +<p> +If Ghostscript fails to find an environment variable, it looks for a +registry value of the same name under the key + +<blockquote><b><tt> +HKEY_CURRENT_USER\Software\GNU Ghostscript\#.## +</tt></b></blockquote> + +<p> +or if that fails, under the key + +<blockquote><b><tt> +HKEY_LOCAL_MACHINE\SOFTWARE\GNU Ghostscript\#.## +</tt></b></blockquote> + +<p> +where #.## is the Ghostscript version number. This does not work under +Win32s (that is, Windows 3.1, which doesn't support named registry +values). + +<p> +Ghostscript will attempt to load the Ghostscript dynamic link +library <b><tt>GSDLL32.DLL</tt></b> in the following order: +<ul> +<li> In the same directory as the Ghostscript executable. +<li> If the environment variable <b><tt>GS_DLL</tt></b> is defined, +Ghostscript tries to load the Ghostscript dynamic link library (DLL) +with the name given. +<li> Using the standard Windows library search method: the directory +from which the application loaded, the current directory, the Windows +system directory, the Windows directory and the directories listed in +the PATH environment variable. +</ul> + +<p> +The Ghostscript setup program will create registry values +for the environment variables <b><tt>GS_LIB</tt></b> +and <b><tt>GS_DLL</tt></b>. + +<h3><a name="Uninstall_Windows"></a>Uninstalling Ghostscript on Windows</h3> + +<p> +To uninstall Ghostscript, use the Control Panel, Add/Remove Programs and +remove "Ghostscript #.##" and "Ghostscript Fonts". (The entries may be +called "Aladdin Ghostscript" or some other specifier rather than just +"Ghostscript", depending on what version of Ghostscript was installed.) + +<hr> + +<h2><a name="Install_VMS"></a>Installing Ghostscript on OpenVMS</h2> + +<p> +You need the file <b><tt>GS.EXE</tt></b> to run Ghostscript on OpenVMS, and +installing Ghostscript on an OpenVMS system requires building it first: +please read <a href="Make.htm#VMS_build">how to build Ghostscript on VMS</a> +in the documentation on building Ghostscript. + +<p> +The following installation steps assume that the Ghostscript directory is +<b><tt>DISK1:[DIR.GHOSTSCRIPT]</tt></b>. Yours will almost certainly be in +a different location so adjust the following commands accordingly. + +<ul> + +<li>Download the fonts and unpack them into +<b><tt>DISK1:[DIR.GHOSTSCRIPT.LIB]</tt></b>. + +<li>Enable access to the program and support files for all users with: + +<blockquote><pre> +$ set file/prot=w:re DISK1:[DIR]GHOSTSCRIPT.dir +$ set file/prot=w:re DISK1:[DIR.GHOSTSCRIPT...]*.* +</pre></blockquote> + +<li>Optionally, add the Ghostscript help instructions to your system wide +help file: + +<blockquote><pre> +$ lib/help sys$help:HELPLIB.HLB DISK1:[DIR.GHOSTSCRIPT.DOC]GS-VMS.HLP +</pre></blockquote> + +<li>Lastly, add the following lines to the appropriate system wide or user +specific login script. + +<blockquote><pre> +$ define gs_exe DISK1:[DIR.GHOSTSCRIPT.BIN] +$ define gs_lib DISK1:[DIR.GHOSTSCRIPT.EXE] +$ gs :== $gs_exe:gs.exe +</pre></blockquote> + +</ul> + +<p> +If you have DECWindows/Motif installed, you may wish to replace the +<b><tt>FONTMAP.GS</tt></b> file with <b><tt>FONTMAP.VMS</tt></b>. Read the +comment at the beginning of the latter file for more information. + +<hr> + +<h2><a name="Install_DOS"></a>Installing Ghostscript on DOS</h2> + +<p> +You need the files <b><tt>GS386.EXE</tt></b> and <b><tt>DOS4GW.EXE</tt></b> +to run Ghostscript. You should install all the files except the fonts in +<b><tt>C:\GS</tt></b>, and the fonts in <b><tt>C:\GS\FONTS</tt></b>. + +<p><a name="Use_platform_fonts_DOS"></a> If you have Adobe Type Manager +(ATM) fonts installed on your system, and you wish to use them with +Ghostscript, you may wish to replace the <b><tt>FONTMAP</tt></b> file with +<b><tt>FONTMAP.ATM</tt></b>, and to add to the environment variable +<b><tt>GS_LIB</tt></b> the name of the directory where the fonts are located +(see below for more information about <b><tt>GS_LIB</tt></b>). Before you +do this, please read carefully the license that accompanies the ATM fonts; +we take no responsibility for any possible violations of such licenses. +Similarly, if you have Adobe Type Basics, you may wish to replace +<b><tt>FONTMAP</tt></b> with <b><tt>FONTMAP.ATB</tt></b>. Finally, if you +have neither ATM nor ATB but you have Adobe Acrobat installed, you can use +the Acrobat fonts in place of the ones provided with Ghostscript by adding +the Acrobat fonts directory to <b><tt>GS_FONTPATH</tt></b> and removing +these fonts from <b><tt>FONTMAP</tt></b>: + +<blockquote> +Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, Helvetica, +Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, Symbol, Times-Bold, +Times-BoldItalic, Times-Italic, Times-Roman, ZapfDingbats +</blockquote> + +<hr> + +<h2><a name="Install_OS2"></a>Installing Ghostscript on OS/2 2.x</h2> + +<p> +The Ghostscript OS/2 implementation is designed for OS/2 2.1 or later. A +few people have used it successfully under OS/2 2.0, but it has had very +little testing. You need these files to run Ghostscript on OS/2: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>GSOS2.EXE</tt></b> + <td> + <td>A text application that will run windowed or full screen +<tr valign=top> <td><b><tt>GSDLL2.DLL</tt></b> + <td> + <td>A dynamic link library that must be in the same directory as + <b><tt>GSOS2.EXE</tt></b> or on the <b><tt>LIBPATH</tt></b>. +<tr valign=top> <td><b><tt>GSPMDRV.EXE</tt></b> + <td> + <td>An "external driver" used by the "<b><tt>os2pm</tt></b>" + device, which is normally the default device and which displays + output in a Presentation Manager window; + <b><tt>GSPMDRV.EXE</tt></b> must be located in the same + directory as <b><tt>GSOS2.EXE</tt></b> or on the + <b><tt>PATH</tt></b> +</table></blockquote> + +<p> +<b><tt>GSOS2.EXE</tt></b>, <b><tt>GSDLL2.DLL</tt></b> and +<b><tt>GSPMDRV.EXE</tt></b> are compiled using EMX/GCC 0.9d. You must have +the EMX DLLs on your <b><tt>LIBPATH</tt></b>; they are available in a +package <b><tt>emxrt.zip</tt></b> from many places on the Internet, so you +can find the package by using a search engine or an ftp lookup service such +as the one at + +<blockquote> +<a href="http://ftpsearch.lycos.com/" +class="offset">http://ftpsearch.lycos.com/</a> +</blockquote> + +<p> +The system menu of the Ghostscript Image window includes a "Copy" command +to copy the currently displayed bitmap to the Clipboard. + +<p> +OS/2 comes with some Adobe Type Manager fonts. If you wish to use these with +Ghostscript, you should replace the <b><tt>FONTMAP</tt></b> file with +<b><tt>FONTMAP.OS2</tt></b>, and add to the environment variable +<b><tt>GS_LIB</tt></b> (see below for more information about +<b><tt>GS_LIB</tt></b>) the name of the directory where the fonts are +located, usually <b><tt>C:\PSFONTS</tt></b>. Before you do this, please +read carefully the license that accompanies the ATM fonts; we take no +responsibility for any possible violations of such licenses. + +<p> +Since <b><tt>GSOS2.EXE</tt></b> is not a PM application, it cannot +determine the depth of the PM display. You must provide this information +using the <b><tt>-dBitsPerPixel</tt></b> option. Valid values are 1, 4, 8 +(the default), and 24. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Use + <td> + <th align=left>For +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>-dBitsPerPixel=1</tt></b> + <td> + <td>VGA monochrome +<tr valign=top> <td><b><tt>-dBitsPerPixel=4</tt></b> + <td> + <td>VGA standard +<tr valign=top> <td><b><tt>-dBitsPerPixel=8</tt></b> + <td> + <td>SVGA 256 colors +</table></blockquote> + +<p> +A command file <b><tt>gspm.cmd</tt></b> containing the following line may +be useful: + +<blockquote><b><tt> +@c:\gs\gsos2.exe -Ic:/gs;c:/gs/fonts;c:/psfonts -sDEVICE=os2pm -dBitsPerPixel=8 -sPAPERSIZE=a4 %1 %2 %3 %4 %5 %6 %7 %8 +</tt></b></blockquote> + +<p> +While drawing, the <b><tt>os2pm</tt></b> driver updates the display every 5 +seconds. On slow computers this is undesirable, and a different interval +can be specified in milliseconds with the <b><tt>-dUpdateInterval</tt></b> +option, with a default of <b><tt>-dUpdateInterval=5000</tt></b>; to disable +update, use <b><tt>-dUpdateInterval=0</tt></b>. + +<p> +Standard VGA is very slow because it uses double buffering to avoid bugs +and because of 1-plane to 4-plane conversion; it's better to use a +256-color display driver. Many display drivers have bugs which cause 1 +bit-per-pixel bitmaps to be displayed incorrectly. + +<p> +<b><tt>GSOS2.EXE</tt></b> and <b><tt>GSPMDRV.EXE</tt></b> will stay in +memory for the number of minutes specified in the environment variable +<b><tt>GS_LOAD</tt></b>. + +<p> +If you run <b><tt>GS386</tt></b> in the OS/2 2.0 or 2.1 DOS box, you must +select the "ENABLED" setting for the DPMI_DOS_API option of the DOS box. +<b><tt>GS386</tt></b> will not run with the "AUTO" setting. + +<p> +For printer devices, output goes to the default queue. To print to a +specified queue, use <b><tt>-sOutputFile=\\spool\NullLPT1</tt></b>, where +<b><tt>NullLPT1</tt></b> is the queue's physical name. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Issues.htm b/Master/xemtex/doc/ghostscript/Issues.htm new file mode 100644 index 00000000000..6285337ecfb --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Issues.htm @@ -0,0 +1,502 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Ghostscript Open Issues.</title> +<!-- $Id: Issues.htm,v 1.15.2.13.2.5 2003/05/17 14:39:00 giles Exp $ --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Known limitations and minor bugs.</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<ul> +<li><a href="#Known_Limitations">Known Limitations</a> +<li><a href="#Minor_bugs">Minor bugs</a> +<li><a href="#Driver_Issues">Specific Driver Issues</a> +<li><a href="#Performance">Performance</a> +<li><a href="#Differences_from_Adobe">Differences from Adobe Implementation</a> +</ul> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Projects.htm">Development Projects list +</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<p> +There are many areas that might make Ghostscript more useful or minor bugs +that we would like to investigate and possibly fix, but for which we don't +have enough resources. These may or may not be addressed in future releases. +<p> +If you would like to take responsibility for any of these issues, please +<a href="mailto:raph@artofcode.com">contact us</a>. +<p> +Additional comments on implementation approaches or project goals are in +<I>italic type like this</I>. +<hr> + +<h2><a name="Known_Limitations"></a>Known Limitations.</h2> + +<h3>bbox device doesn't allow min coords < 0.</h3> +Adobe eps specification doesn't say that bbox values must be positive, +and, for example Adobe Illustrator, can create EPS files with negative bboxes. +In such case, Ghostscipt returns zero instead of proper negative number. +<br>SourceForge Bug #202735 March 09, 2000. +<p> +<I> +This might be able to be fixed by applying a large positive translation to +the bbox CTM which would be subtracted from coordinates passed to the target +device as well as from the results the bbox device reports. +<p> +If coordinates for the ImagingBBox[0] and [1] values, then negative +values are handled, but this is not reliable since there are places in +the graphics library that depend on first quadrant coordinates. +</I> + +<h3>Error messages are too low level and confusing.</h3> + +<p> +Although technically correct many error messages are confusing for +end users. Some commonly reported examples are listed below. + +<p> +When pdfwrite device cannot open the output file it fails with: +<pre>**** Unable to open the initial device, quitting.</pre> + +When CIDFont-CMap pair required by PDF file is not available GS +fails with: +<pre>/undefinedresource in --findresource--</pre> + +<hr> +<h2><a name="Minor_bugs"></a>Minor Bugs.</h2> + +<h3>PageSize cannot use packedarray</h3> +PageSize doesn't accept packed array as an argument if the page size is +adjusted, for instance, to the whole number of pixels. The following +program +<pre> +%! +/x 333.33333333 def /y 666.66666666 def + +<< /PageSize x y 2 packedarray >> setpagedevice +(pached passed)== % fails +%EOF +</pre> +fails with +<pre> +Error: /configurationerror in --setpagedevice-- +Additional information: [/PageSize [333.333344 666.666687]] +</pre> + +<h3> Multiple encode filters in a pipeline fail.</h3> +The following code fragment should output "3E>". It outputs nothing. +<pre> +%!PS +(%stdout) (w) file +/ASCIIHexEncode filter +/ASCIIHexEncode filter +closefile +</pre> +SourceForge bug #224134, December 2, 2000. + +<h3> Bad JPEG stream in PDF generated when source ends prematurely</h3> +When GS converts the source image to JPEG stream in PDF file and the +source data end prematurely, it generates bad JPEG stream. +tiff2ps from libtiff distribution often generates such files. +<p> +One potential workaround is to use -dAutoFilterColorImages=false and +-dColorImageFilter=/FlateEncode. +<p> +SourceForge bug #228808, Jan 15, 2000. +<p> +<I> +JPEG stream writes image dimensions in JPEG header when the stream is created. +When the source data end the dimensions are not updated. There may be other +problems too. +</I> + +<h3> Some attributes of Catalog object are lost during PDF to PDF conversion</h3> +Dests, OpenAction, URI, PageMode, ViewerPreferences are lost during PDF to PDF +conversion. Other attributes have not been checked. +<p> +<I> +The loss happens diring PDF interpretation. GS can generate these attributes +from pdfmark's. +</I> +<p> +March 25, 2001. +<h3>ps2pdf ignores transfer functions in shaded fill</h3> +ps2pdf ignores transfer functions in the shaded fill but +uses them for vector objects. The following sample program +has 2 shaded fills and 2 rectangles that should have the +same color as the left end of the shaded fill. +<pre> + + <</PageSize [612 200] /Policies<</PageSize 1>> >>setpagedevice + 612 1 scale + /grad + { gsave + 0 0 1 100 rectclip + << + /ColorSpace [/DeviceCMYK] + /Domain [0 1] + /Coords [0 0 1 0] + /Extend [false false] + /Function + << /FunctionType 3 + /Domain [ 0 1] + /Functions + [ << + /FunctionType 2 + /N 1 + /C0 [ 0 0.5 0 0 ] + /Domain [ 0 1] + /C1 [0.5 0 0 0] + >> ] + /Bounds [] + /Encode [0 1] + >> + /ShadingType 2 + >> shfill + + 0 0.5 0 0 setcmykcolor + 0 0 0.1 50 rectfill + grestore + } def + + grad + {1 exch 2 div sub} settransfer + 0 100 translate + grad + showpage +</pre> +SourceForge Bug #232334, Feb 14, 2001. + +<h3>ResourceFileName gives wrong result with Font category.</h3> +The following sequence: + +<pre> + /Font /Category findresource begin + /CharterBT-Roman 255 string ResourceFileName = + end +</pre> + +Gives the results: +<pre> + /Resource/Font/CharterBT-Roman +</pre> + +This should be a valid platform specific file name and path such as: +<pre> + f:/fonts/bchr.pfa +</pre> +SourceForge Bug #233403, Feb 21, 2001. +<h3>GS doesn't handle names of separations with HalftoneType 5.</h3> +PLRM3 says, that HalftoneType 5 may use user defined +names of separations. Neither zht2.c nor cmd_put_drawing_color in +gxclpath.c can handle this. GS chooses default halftone component +for any non-standard separation name. +<p> +SourceForge Bug #406643, Mar 7, 2001. + +<h3> PDF 1.4 images don't deallocate all memory </h3> + +The pdf14_begin_typed_image() function in the PDF 1.4 device creates +a marking device, but this is not freed on end_image. The garbage +collector will free it, so it's not a real memory leak, but it would +still be nicer to free it explicitly. + +<h3> </h3> + +<hr> + +<h2><a name="Driver_Issues"></a>Driver Issues.</h2> + +<h3> [ ] Missing text in landscape mode.</h3> +Using GSWIN32C.EXE with djet500 to print a file in landscape mode +on a HP 2000C, the first 3 characters on the left margin are missing.<br> +When the postscript file is editted to use a larger offset (1st moveto +parameter), the text appears ok.<br> +When the postscript file is sent to a printer with a builtin postscript +interpreter, it prints ok. +<br>SourceForge Bug #206652. +<p><I> +A possible work around is to send the following +postscript file to the printer prior to printing the problem +file. This works but it leaves a .5" margin at the top +and left which is may be ok for some uses. +</I> +<pre> + +%!PS-Adobe-2.0 +% Reset the offset and margins. +<< + /PageOffset [-12 -18] + /Margins [0 0] + /.HWMargins [0 0 0 0] +>> +setpagedevice +</pre> + +<I> +This is an instance of the endless struggle with printer margins, especially +for HP printers. The HP drivers are inconsistent as to whether the user space +(0,0) should be the physical corner of the page (as it is in PostScript) or +the corner of the printable area, and if the latterm whether the page should +be clipped or scaled. +</I> +<p> + +<hr> + +<h2><a name="Performance"></a>Performance.</h2> + +<h3>Incremental loading for CIDFontType 2 and TrueType fonts.</h3> + +Entire TrueType outline data in CIDFontType 2 and TrueType fonts are +loaded into memory at once. Incremental loading of the outline data is +indispensable for practical use of Asian fonts. +<p> +There is one other type of CID-keyed font that should also be +loaded incrementally: CFF CIDFontType0, i.e., a CIDFontType 0 +font represented using the compact binary CFF format. This is +important because this is one of the two variants of Asian OpenType +fonts (the other is essentially the same as TrueType). Ghostscript +already supports both of these OpenType variants, but not with +incremental loading. +<p> +SourceForge bug #223992, November 30, 2000. +<p><I> +We suggest that anyone who would like to work on this project +start by looking at how CIDFontType 0 fonts do incremental loading +(lib/gs_cidfn.ps and src/zfcid0.c). Probably much of this +code can be also be used with CIDFontType 2 and TrueType fonts. +</I> + +<hr> + +<h2><a name="Differences_from_Adobe"></a>Differences from Adobe Implementation.</h2> + +<h3>pdfwrite + TT font => Acrobat 3.x for Windows gives error</h3> + +Running ps2pdf12 on the file test1.ps produces a PDF on which Acrobat +3.x for Windows complains about not being able to find or create a +particular TrueType font that is embedded in the PDF file. However, +Acrobat 3.x for other platforms, and Acrobat 4.x for all platforms, +accepts the file. +<p> +SourceForge bug #201955, February 14, 2000. +<p><I> +Since Acrobat 3 is superseded by Acrobat 4 which is available at no +charge, and the file produced by Ghostscript meets published PDF +specification, this will most likely be left as is. +</I> + +<h3> Inconsistent handling of /Orientation.</h3> +PLRM says "The dictionary returned by currentpagedevice always +contains an entry for every parameter supported by the device". +GS prints both messages in the following program: + +<pre> +%! +currentpagedevice /Orientation known not +{ (This printer does _not_ support Orientation.) = +} +if +<</Orientation 1>> setpagedevice +currentpagedevice /Orientation known +{ (Err... wait... it does.) = +} +if +%%EOF +</pre> +SourceForge bug #220967, October 31, 2000. +<p><I> +The handling of Orientation is a mess. The PLRM says quite explicitly +that it is only supported for roll devices, where the page size +alone doesn't give enough information to decide whether to rotate +the page. +<p> +The reason that Ghostscript accepts it for other devices at all +is twofold: displays are like roll media in that they don't have +an inherent orientation, and almost none of the other Ghostscript +devices actually specify their page sizes. Both of these reasons +are now poorly motivated: displays should behave like +portrait-orientation devices (albeit with variable page dimensions), +rotating the image if the requested page width is greater than +the height, and now that setpagedevice and the Resource machinery +are fully implemented, all printer drivers should be updated +to provide the paper size information. Once these fixes are made +(which will probably have some repercussions other places in +the code), Ghostscript will handle Orientation properly. +<p> +This should be addressed when the "setpagedevice in C" project is +completed since part of this will require printer drivers to make +page size information available to the setpagedevice logic. +</I> + +<h3>Filesystem implementation differences.</h3> +Adobe implementations often treat the filesystem as flat. This means that the +path separator characters are not handled as special characters in filenames. +The PLRM states that file names are implementation specific (section 3.8.2) +and Ghostscript currently implements filenames that conform with the underlying +operating system as is stated in this section about the %os% device. This +can result from behaviour that is different from Adobe printer implementations. +<br><br> +<I> +Current implementation is incompatible with most font installers. Installers +expect that: +<ul> +"filenameforall" enumerates all files in all directories using the relative path name. +Directory names, including . and .. are not enumerated +</ul> +<ul> +characters not supported on the platform are encoded. +</ul> +<ul> +"(w) file" operator creates directories if necessary. +</ul> +</I> + +<h3>Cannot load Adobe's fonts. </h3> +The following program fails with Adobe fonts: + +<pre> +(C*) +{ cvn findfont pop +} 255 string /Font resourceforall +</pre> +SourceForge Bug #226462, December 20, 2000. +<p> +<I> +The 'findfont' operator and '/Font resourceforall' are very difficult to +keep consistent, because the same logic algorithms must be implemented +in two different ways. The problem is likely to be in lib/gs_fonts.ps, +lib/gs_res.ps, and lib/gs_cidcm.ps. +</I> +<h3> There's no %ram% device.</h3> +GS doesn't have %ram% device reguired on all Level 3 products. +It is documented in PS Supplement 3010 and 3011 dated August 30, 1999 +<br>SourceForge Bug #226943, December 27, 2000. +<p> +<I> +This should be implemented using the (disk) file system rather than +actual RAM, at least initially, since that will be easy. +<br> +On Unix, it should be implemented with a directory /tmp/$$/ (where +$$ is the process id), which Ghostscript should delete when it exits. +</I> + +<h3> pdfwrite doesn't recognise the image type by content</h3> +Currently pdfwrite uses JPEG compression for any 8 bit per component +images >= 64 pixels in both dimensions. +<p> +<I> +pdfwrite needs to be changed to use a reasonable algorithm for deciding +between JPEG and Flate compression, probably based on sharp vs. smooth +color transitions in the image; in case of uncertainty, it should use Flate. +</I> +<p> +SourceForge Bug #226391, December 19, 2000. +<p> + + +<h3> ps2ascii can't handle incremental fonts</h3> +ps2ascii fails with rangecheck on incremental fonts. +Need to recognise incremental fonts and say that incremental +fonts are impossible to convert to ASCII. +<p> +SourceForge Bug #441959 keeps good test data for this. +<p> + + +<h3> Buffering in input filters</h3> + +The following program prints differently to stdout on GS and Adobe : +<p> +<pre> +%! +/proc + { currentfile =string readline pop + dup == + (%) anchorsearch { pop } if + } bind def +/test + { //proc /ASCIIHexDecode filter + 3 string readstring pop == + } bind def + +(start) == + +test +%31 +%32 +%33 +%34 +%35 +%36 +%37 +%38 +%39 + +(stop) == + +%%EOF +</pre> +<p> +<I> +Adobe fills entire input buffer of ASCIIHexDecode with procedure's output, +before passing data to ASCIIHexDecode, and without knowledge how much data +does ASCIIHexDecode want. GS does know the size of data requested, +so as the procedure is called exact number of times. Thus, GS is more conservative. +</I> +<p> +Anoter useful test to be made by repeating lines %31-%39 hundred times, +without intermediate empty lines. +<p> +<h3> </h3> +<p> + + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 2000 artofocode LLC. All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Language.htm b/Master/xemtex/doc/ghostscript/Language.htm new file mode 100644 index 00000000000..b47f003bec9 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Language.htm @@ -0,0 +1,1897 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" +"http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Ghostscript and the PostScript language</title> +<!-- $Id: Language.htm,v 1.34.2.16.2.5 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: language.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Ghostscript and the PostScript language</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Capabilities">Ghostscript's capabilities in relation to PostScript</a> +<li><a href="#Implementation_limits">Implementation limits</a> +<ul> +<li><a href="#Architectural_limits">Architectural limits</a> +<li><a href="#Typical_memory_limits">Typical memory limits in LanguageLevel 1</a> +<li><a href="#VM_consumption">Other differences in VM consumption</a> +</ul> +<li><a href="#Additional_operators">Additional operators in Ghostscript</a> +<ul> +<li><a href="#Graphics_and_text">Graphics and text operators</a> +<ul> +<li><a href="#Transparency">Transparency</a> +<ul> +<li><a href="#Transparency_graphics_state_operators">Graphics state operators</a> +<li><a href="#Transparency_rendering_stack_operators">Rendering stack operators</a> +<li><a href="#Transparency_ImageType">New ImageType</a> +</ul> +<li><a href="#Graphics_state">Other graphics state operators</a> +<li><a href="#Path">Path operators</a> +<li><a href="#Painting">Painting operators</a> +<li><a href="#Character">Character operators</a> +</ul> +<li><a href="#Other">Other operators</a> +<ul> +<li><a href="#Mathematical">Mathematical operators</a> +<li><a href="#Dictionary">Dictionary operators</a> +<li><a href="#String">String and name operators</a> +<li><a href="#Relational">Relational operators</a> +<li><a href="#File">File operators</a> +<li><a href="#Virtual_memory">Virtual memory operators</a> +<li><a href="#Miscellaneous">Miscellaneous operators</a> +<li><a href="#Device">Device operators</a> +</ul> +</ul> +<li><a href="#Filters">Filters</a> +<ul> +<li><a href="#Standard_filters">Standard filters</a> +<li><a href="#Non_standard_filters">Non-standard filters</a> +<li><a href="#Unstable_filters">Unstable filters</a> +</ul> +<li><a href="#Device_parameters">Device parameters</a> +<li><a href="#User_parameters">User parameters</a> +<li><a href="#Miscellaneous_additions">Miscellaneous additions</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Capabilities"></a>Ghostscript's capabilities in relation to PostScript</h2> + +<p> +The Ghostscript interpreter, except as noted below, is intended to execute +properly any source program written in the (LanguageLevel 3) +<b>PostScript</b> language as defined in the <cite>PostScript +Language Reference, Third Edition</cite> (ISBN 0-201-37922-8) published by +Addison-Wesley in mid-1999. However, the interpreter is configurable in +ways that can restrict it to various subsets of this language. +Specifically, the base interpreter accepts the Level 1 subset of the +PostScript language, as defined in the first edition of the <cite>PostScript +Language Reference Manual</cite> (ISBN 0-201-10174-2) Addison-Wesley 1985, +plus the file system, version 25.0 language, and miscellaneous additions +listed in sections A.1.6, A.1.7, and A.1.8 of the Second Edition +respectively, including allowing a string operand for the +"<b><tt>status</tt></b>" operator. The base interpreter may be configured +(see the <a href="Make.htm">documentation on building Ghostscript</a> for +how to configure it) by adding any combination of the following: + +<ul> +<li>The ability to process PostScript Type 1 fonts. This facility is +normally included in the interpreter. + +<li>The CMYK color extensions listed in section A.1.4 of the Second Edition +(including <b><tt>colorimage</tt></b>). These facilities are available +only if the <b><tt>color</tt></b>, <b><tt>dps</tt></b>, or +<b><tt>level2</tt></b> feature was selected when Ghostscript was built. + +<li>The Display PostScript extensions listed in section A.1.3 of the Second +Edition, but excluding the operators listed in section A.1.2. These +facilities are available only if the <b><tt>dps</tt></b> feature or the +<b><tt>level2</tt></b> feature was selected when Ghostscript was built. + +<li>The composite font extensions listed in section A.1.5 of the Second +Edition, and the ability to handle Type 0 fonts. These facilities are +available only if the <b><tt>compfont</tt></b> feature or the +<b><tt>level2</tt></b> feature was selected when Ghostscript was built. + +<li>The ability to load TrueType fonts and to handle PostScript Type 42 +(encapsulated TrueType) fonts. These facilities are available only if the +<b><tt>ttfont</tt></b> feature was selected when Ghostscript was built. + +<li>The PostScript Level 2 "filter" facilities except the +<b><tt>DCTEncode</tt></b> and <b><tt>DCTDecode</tt></b> filters. These +facilities are available only if the <b><tt>filter</tt></b>, +<b><tt>dps</tt></b>, or <b><tt>level2</tt></b> feature was selected when +Ghostscript was built. + +<li>The PostScript Level 2 <b><tt>DCTEncode</tt></b> and +<b><tt>DCTDecode</tt></b> filters. These facilities are available only if +the <b><tt>dct</tt></b> or <b><tt>level2</tt></b> feature was selected when +Ghostscript was built. + +<li>All the other PostScript Level 2 operators and facilities listed in +section A.1.1 of the Second Edition and not listed in any of the other +A.1.n sections. These facilities are available only if the +<b><tt>level2</tt></b> feature was selected when Ghostscript was built. + +<li>All PostScript LanguageLevel 3 operators and facilities listed in the +Third Edition, except as noted below. These facilities are available only +if the <b><tt>psl3</tt></b> feature was selected when Ghostscript was built. + +<li>The ability to recognize DOS EPSF files and process only the PostScript +part, ignoring bitmap previews or other information. This facility is +available only if the <b><tt>epsf</tt></b> feature was selected when +Ghostscript was built. +</ul> + +<p> +Ghostscript currently does not implement the following PostScript +LanguageLevel 3 facilities: + +<ul> +<li>Native <b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color +spaces -- the alternate space is always used. + +<li>Settable <b><tt>ProcessColorModel</tt></b> for page devices, except for +a very few special devices. + +<li><b><tt>IODevice</tt></b>s other than <b><tt>%stdin</tt></b>, +<b><tt>%stdout</tt></b>, <b><tt>%stderr</tt></b>, <b><tt>%lineedit</tt></b>, +<b><tt>%statementedit</tt></b>, <b><tt>%os%</tt></b>, and (if configured) +<b><tt>%pipe%</tt></b>. +</ul> + +<p> +Ghostscript can also interpret files in the Portable Document Format (PDF) +1.3 format defined in the <a +href="http://partners.adobe.com/asn/developer/PDFS/TN/PLRM.pdf"><em>Portable +Document Format Reference Manual</em> Version 1.3</a> of March 11, 1999, +distributed by <a href="http://www.adobe.com/">Adobe Systems +Incorporated</a>, except as noted below. This facility is available only if +the <b><tt>pdf</tt></b> feature was selected when Ghostscript was built. + +<p> +Ghostscript currently does not implement the following PDF 1.3 facilities: + +<ul> +<li>Native <b><tt>Separation</tt></b> and <b><tt>DeviceN</tt></b> color +spaces, as noted above for PostScript. + +<li>Native <b><tt>ICCBased</tt></b> color spaces -- these too always use the +alternate space. +</ul> + +<p> +Ghostscript also includes a number of +<a href="#Additional_operators">additional operators</a> defined below that +are not in the PostScript language defined by Adobe. + +<hr> + +<h2><a name="Implementation_limits"></a>Implementation limits</h2> + +<p> +The implementation limits show here correspond to those in Tables B.1 and +B.2 of the Second and Third Editions, which describe the quantities fully. +Where Ghostscript's limits are different from those of Adobe's +implementations (as shown in the Third Edition), Adobe's limits are also +shown. + +<h3><a name="Architectural_limits"></a>Architectural limits</h3> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Architectural limits (corresponds to Adobe table B.1)</font><hr> +<tr valign=bottom> + <th align=left>Quantity + <td> + <th align=left>Limit + <td> + <th align=left>Type + <td> + <th align=left>Adobe +<tr> <td colspan=7><hr> +<tr valign=top> <td>integer + <td> + <td>32-bit + <td> + <td>twos complement integer + <td> + <td> +<tr valign=top> <td>real + <td> + <td>single-precision + <td> + <td>IEEE float + <td> + <td> +<tr valign=top> <td>array + <td> + <td>65535 + <td> + <td>elements + <td> + <td> +<tr valign=top> <td>dictionary + <td> + <td>65534 + <td> + <td>elements + <td> + <td>65535 +<tr valign=top> <td>string + <td> + <td>65535 + <td> + <td>characters + <td> + <td> +<tr valign=top> <td>name + <td> + <td>16383 + <td> + <td>characters + <td> + <td>127 +<tr valign=top> <td>filename + <td> + <td>128* + <td> + <td>characters + <td> + <td> +<tr valign=top> <td><b><tt>save</tt></b> level + <td> + <td>none + <td> + <td>(capacity of memory) + <td> + <td>15 +<tr valign=top> <td><b><tt>gsave</tt></b> level + <td> + <td>none + <td> + <td>(capacity of memory) + <td> + <td>13 +</table></blockquote> + +<p> +* The limit on the length of a file name is 128 characters if the name +starts with a %...% IODevice designation, or 124 characters if it does not. + +<h3><a name="Typical_memory_limits"></a>Typical memory limits in LanguageLevel 1</h3> + +<blockquote><table cellpadding=0 cellspacing=0> + +<tr><th colspan=7 bgcolor="#CCCC00"><hr><font size="+1">Memory limits (corresponds to Adobe table B.2)</font><hr> +<tr valign=bottom> + <th align=left>Quantity + <td> + <th align=left>Limit + <td> + <th align=left>Type + <td> + <th align=left>Adobe +<tr> <td colspan=7><hr> +<tr valign=top> <td><b><tt>userdict</tt></b> + <td> + <td>200 + <td> + <td> + <td> + <td> +<tr valign=top> <td><b><tt>FontDirectory</tt></b> + <td> + <td>100 + <td> + <td> + <td> + <td> +<tr valign=top> <td>operand stack + <td> + <td>800 + <td> + <td> + <td> + <td>500 +<tr valign=top> <td>dictionary stack + <td> + <td>20 + <td> + <td> +<tr valign=top> <td>execution stack + <td> + <td>250 + <td> + <td> +<tr valign=top> <td>interpreter level + <td> + <td>none + <td> + <td>(capacity of memory) + <td> + <td>10 +<tr valign=top> <td>path + <td> + <td>none + <td> + <td>(capacity of memory) + <td> + <td>1500 +<tr valign=top> <td>dash + <td> + <td>11 + <td> + <td> +<tr valign=top> <td>VM + <td> + <td>none + <td> + <td>(capacity of memory) + <td> + <td>240000 +<tr valign=top> <td>file + <td> + <td>none + <td> + <td>(determined by operating system) + <td> + <td>6 +<tr valign=top> <td>image + <td> + <td>65535 + <td> + <td>values (samples × components)<br>for1-, 2-, 4-, or 8-bit samples + <td> + <td>3300 +<tr valign=top> <td> + <td> + <td>32767 + <td> + <td>values for 12-bit samples + <td> + <td>3300 +</table></blockquote> + +<h3><a name="VM_consumption"></a>Other differences in VM consumption</h3> + +<p> +Packed array elements occupy either 2 bytes or 8 bytes. The average +element size is probably about 5 bytes. Names occupy 12 bytes plus the +space for the string. + +<hr> + +<h2><a name="Additional_operators"></a>Additional operators in Ghostscript</h2> + +<h3><a name="Graphics_and_text"></a>Graphics and text operators</h3> + +<h4><a name="Transparency"></a>Transparency</h4> + +<p> +Ghostscript provides a set of operators for implementing the transparency +and compositing facilities of PDF 1.4. These are defined only if the +<b><tt>transpar</tt></b> option was selected when Ghostscript was built. We +do not attempt to explain the underlying graphics model here: for details, +see <a +href="http://partners.adobe.com/asn/developer/technotes.html#acrobat-pdf" +class="offsite">Adobe +Technical Note</a> #5407, "<a +href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/PDF_Transparency.pdf" +class="offsite">Transparency +in PDF</a>". Note, however, that +Ghostscript's model generalizes that of PDF 1.4 in that Ghostscript +maintains separate alpha and mask values for opacity and shape, rather than +a single value with a Boolean that says whether it represents opacity or +shape. EVERYTHING IN THIS SECTION IS SUBJECT TO CHANGE. + +<h5><a name="Transparency_graphics_state_operators"></a>Graphics state +operators</h5> + +<dl> +<dt><b><tt><modename> .setblendmode -</tt></b> +<dd>Sets the blending mode in the graphics state. If the mode name is not +recognized, causes a <b><tt>rangecheck</tt></b> error. The initial value of +the blending mode is <b><tt>/Compatible</tt></b>. +</dl> + +<dl> +<dt><b><tt>- .currentblendmode <modename></tt></b> +<dd>Returns the current blending mode. +</dl> + +<dl> +<dt><b><tt><0..1> .setopacityalpha -</tt></b> +<dd>Sets the opacity alpha value in the graphics state. +The initial opacity alpha value is 1. +</dl> + +<dl> +<dt><b><tt>- .currentopacityalpha <0..1></tt></b> +<dd>Returns the current opacity alpha value. +</dl> + +<dl> +<dt><b><tt><0..1> .setshapealpha -</tt></b> +<dd>Sets the shape alpha value in the graphics state. +The initial shape alpha value is 1. +</dl> + +<dl> +<dt><b><tt>- .currentshapealpha <0..1></tt></b> +<dd>Returns the current shape alpha value. +</dl> + +<dl> +<dt><b><tt><bool> .settextknockout -</tt></b> +<dd>Sets the text knockout flag in the graphics state. +The initial value of the text knockout flag is <b><tt>true</tt></b>. +</dl> + +<dl> +<dt><b><tt>- .currenttextknockout <bool></tt></b> +<dd>Returns the current text knockout flag. +</dl> + +<h5><a name="Transparency_rendering_stack_operators"></a>Rendering stack +operators</h5> + +<p> +The interpreter state is extended to include a (per-context) rendering stack +for handling transparency groups and masks (generically, "layers"). Groups +accumulate a full value for each pixel (paint plus transparency); masks +accumulate only a coverage value. Layers must be properly nested, i.e., the +'end' or 'discard' operator must match the corresponding 'begin' operator. + +<p> +Beginning and ending layers must nest properly with respect to +<b><tt>save</tt></b> and <b><tt>restore</tt></b>: <b><tt>save</tt></b> and +<b><tt>restore</tt></b> do not save and restore the layer stack. Currently, +layers are not required to nest with respect to <b><tt>gsave</tt></b> and +<b><tt>grestore</tt></b>, except that the device that is current in the +graphics state when ending a layer must be the same as the device that was +current when beginning the layer. THIS AREA IS SUBJECT TO CHANGE. + +<dl> +<dt><b><tt><paramdict> <llx> <lly> <urx> <ury> +.begintransparencygroup -</tt></b> +<dd>Begins a new transparency group. The <b><tt>ll/ur</tt></b> coordinates +are the bounding box of the group in the current user coordinate system. +<b><tt>paramdict</tt></b> has the following keys: +<dl> +<dt><b><tt>/Isolated</tt></b> +<dd>(optional) Boolean; default value = <b><tt>false</tt></b>. +<dt><b><tt>/Knockout</tt></b> +<dd>(optional) Boolean; default value = <b><tt>false</tt></b>. +</dl> +</dl> + +<dl> +<dt><b><tt>- .discardtransparencygroup -</tt></b> +<dd>Ends and discards the current transparency group. +</dl> + +<dl> +<dt><b><tt>- .endtransparencygroup -</tt></b> +<dd>Ends the current transparency group, compositing the group being ended +onto the group that now becomes current. +</dl> + +<dl> +<dt><b><tt><paramdict> <llx> <lly> <urx> <ury> +.begintransparencymask -</tt></b> +<dd>Begins a new transparency mask. The <b><tt>ll/ur</tt></b> coordinates +are the bounding box of the mask in the current user coordinate system. +<b><tt>paramdict</tt></b> has the following keys: +<dl> +<dt><b><tt>/Subtype</tt></b> +<dd>(required) Name, either <b><tt>/Alpha</tt></b> or +<b><tt>/Luminosity</tt></b>. +<dt><b><tt>/Background</tt></b> +<dd>(optional) Array of number. +<dt><b><tt>/TransferFunction</tt></b> +<dd>(optional) Function object (produced by applying +<b><tt>.buildfunction</tt></b> to a Function dictionary). +</dl> +</dl> + +<dl> +<dt><b><tt>- .discardtransparencymask -</tt></b> +<dd>Ends and discards the current transparency mask. +</dl> + +<dl> +<dt><b><tt><masknum> .endtransparencymask -</tt></b> +<dd>Ends the current transparency mask, installing it as the current opacity +(<b><tt>masknum</tt></b> = 0) or shape (<b><tt>masknum</tt></b> = 1) mask in +the graphics state. +</dl> + +<dl> +<dt><b><tt><masknum> .inittransparencymask -</tt></b> +<dd>Resets the current opacity (<b><tt>masknum</tt></b> = 0) or shape +(<b><tt>masknum</tt></b> = 1) mask to an infinite mask with alpha = 1 +everywhere. +</dl> + +<h5><a name="Transparency_ImageType"></a>New ImageType</h5> + +<p> +The transparency extension defines a new ImageType 103, similar to ImageType +3 with the following differences: + +<ul> + +<li>The required <b><tt>MaskDict</tt></b> is replaced by two optional +dictionaries, <b><tt>OpacityMaskDict</tt></b> and +<b><tt>ShapeMaskDict</tt></b>. If present, these dictionaries must have a +<b><tt>BitsPerComponent</tt></b> entry, whose value may be greater than 1. +Note that in contrast to ImageType 3, where any non-zero chunky mask value +is equivalent to 1, ImageType 103 simply takes the low-order bits of chunky +mask values. + +<li>A <b><tt>Matte</tt></b> entry may be present in one or both mask +dictionaries, indicating premultiplication of the data values. If both +<b><tt>MaskDict</tt></b>s have a <b><tt>Matte</tt></b> entry and the values +of the two <b><tt>Matte</tt></b> entries are different, a +<b><tt>rangecheck</tt></b> error occurs. + +<li><b><tt>InterleaveType</tt></b> appears in the <b><tt>MaskDict</tt></b>s, +not the <b><tt>DataDict</tt></b>, because each mask has its own +<b><tt>InterleaveType</tt></b>. <b><tt>InterleaveType</tt></b> 2 +(interlaced scan lines) is not supported. + +</ul> + +<h4><a name="Graphics_state"></a>Other graphics state operators</h4> + +<dl> +<dt><b><tt><bool> .setaccuratecurves -</tt></b> +<dd>Sets a graphics state flag that determines whether curves and arcs, +when flattened, always start and end with a line that is a segment of the +tangent; this also causes butt and square caps to be properly perpendicular +to the tangent. <b><tt>initgraphics</tt></b> sets this flag to false, to +match other PostScript implementations. +</dl> + +<dl> +<dt><b><tt>- .currentaccuratecurves <bool></tt></b> +<dd>Returns the current value of the accurate curves flag. +</dl> + +<dl> +<dt><b><tt><int> .setcurvejoin -</tt></b> +<dd>Sets a graphics state parameter that determines how to treat the joins +between the line segments produced when a curve is flattened. The parameter +value may be either -1 or a value acceptable to <b><tt>setlinejoin</tt></b>. +If the parameter value is -1, the join used for flattened curve line +segments is given by the current line join parameter in the graphics state +(except that if the line join value is "none", a bevel join is used), which +matches the Adobe Red Book, but not the Adobe implementations; if the curve +join parameter value is a line join value, that type of join is used for +flattened curve line segments, regardless of the value of the graphics state +line join parameter. The initial (and default) value of the curve join +parameter is 2, causing bevel joins to be used: this matches the Adobe +implementations. <b><tt>initgraphics</tt></b> sets the parameter to its +default value. +</dl> + +<dl> +<dt><b><tt>- .currentcurvejoin <int></tt></b> +<dd>Returns the current value of the curve join parameter. +</dl> + +<dl> +<dt><b><tt><bool> .setdashadapt -</tt></b> +<dd>Sets a graphics state flag that determines whether dash patterns do +(true) or do not (false) automatically scale themselves so that each line +segment consists of an integral number of pattern repetitions. +<b><tt>initgraphics</tt></b> sets this flag to false. +</dl> + +<dl> +<dt><b><tt>- .currentdashadapt <bool></tt></b> +<dd>Returns the current value of the dash adaptation flag. +</dl> + +<dl> +<dt><b><tt><matrix> .setdefaultmatrix -</tt></b> +<dd>Sets the default matrix that is returned by +<b><tt>defaultmatrix</tt></b> and installed by <b><tt>initmatrix</tt></b>. +Ordinary programs should not use this operator. +</dl> + +<dl> +<dt><b><tt><num> <bool> .setdotlength -</tt></b> +<dd>Sets a graphics state parameter that determines the handling of +zero-length lines (dots). If the dot length is zero, dots are painted as +circles if round line caps are in effect, otherwise they are not painted at +all. If the dot length is non-zero, dots are treated exactly like lines of +the given length: the length is specified in user coordinates (like line +width) if <b><tt>bool</tt></b> is false, or in default user coordinates of +points (units of 1/72in; see the <a href="Devices.htm#Measurements">notes +on measurements</a> in the documentation on devices) if +<b><tt>bool</tt></b> is true. Dots occurring as part of dash patterns will +be oriented correctly; isolated dots will be oriented as though they were +part of a vertical line. <b><tt>initgraphics</tt></b> sets the dot length +to zero. +</dl> + +<dl> +<dt><b><tt>- .currentdotlength <num> <bool></tt></b> +<dd>Returns the current dot length and dot length mode. +</dl> + +<dl> +<dt><b><tt><dx> <dy> .setfilladjust2 -</tt></b> +<dd>Sets graphics state parameters that cause all filled and stroked +regions to be "fattened" by the given amount relative to an algorithm that +only paints pixels whose centers fall within the region to be painted. +<b><tt>dx</tt></b> and <b><tt>dy</tt></b> are numbers between 0 and 0.5, +measured in device space. The only two values that are likely to be useful +are 0, which gives a pure center-of-pixel rule, and 0.5, which gives +Adobe's any-part-of-pixel rule. (0.5 is treated slightly specially in +order to create half-open pixels per Adobe's specification.) +</dl> + +<dl> +<dt><b><tt>- .currentfilladjust2 <dx> <dy></tt></b> +<dd>Returns the current fill adjustment values. +</dl> + +<dl> +<dt><b><tt><bool> .setlimitclamp -</tt></b> +<dd>Sets a graphics state flag that determines whether attempts to set the +current point outside the internally representable range should clamp the +value to the largest representable value (true) or give a +<b><tt>limitcheck</tt></b> error (false). <b><tt>initgraphics</tt></b> sets +this flag to false, to match other PostScript implementations. +</dl> + +<dl> +<dt><b><tt>- .currentlimitclamp <bool></tt></b> +<dd>Returns the current value of the limit clamp flag. +</dl> + +<dl> +<dt><b><tt><int> .setoverprintmode -</tt></b> +<dd>Sets the overprint mode in the graphics state. Legal values are 0 or 1. +Per the PDF 1.3 specification, if the overprint mode is 1, then when the +current color space is <b><tt>DeviceCMYK</tt></b>, color components whose +value is 0 do not write into the target, rather than writing a 0 value. +THIS BEHAVIOR IS NOT IMPLEMENTED YET. The initial value of the overprint +mode is 0. +</dl> + +<dl> +<dt><b><tt>- .currentoverprintmode <int></tt></b> +<dd>Returns the current overprint mode. +</dl> + +<h4><a name="Path"></a>Path operators</h4> + +<dl> +<dt><b><tt>- .dashpath -</tt></b> +<dd>If there is no current dash pattern, does nothing. Otherwise, does the +equivalent of <b><tt>flattenpath</tt></b> and then chops up the path as +determined by the dash pattern. +</dl> + +<dl> +<dt><b><tt><x> <y> <width> <height> .rectappend -</tt></b> +<dt><b><tt><numarray> .rectappend -</tt></b> +<dt><b><tt><numstring> .rectappend -</tt></b> +<dd>Appends a rectangle or rectangles to the current path, in the same +manner as <b><tt>rectfill</tt></b>, <b><tt>rectclip</tt></b>, etc. Defined +only if the <b><tt>dps</tt></b> or <b><tt>level2</tt></b> option was +selected when Ghostscript was built. +</dl> + +<h4><a name="Painting"></a>Painting operators</h4> + +<p> +Ghostscript supports an experimental extension of the PostScript imaging +model to include <b><tt>RasterOp</tt></b> and some related facilities. +This extension is available only if the <b><tt>rasterop</tt></b> option was +selected when building Ghostscript. + +<p> +With the <b><tt>RasterOp</tt></b> extension, imaging operations compute a +function <b>D = f(D,S,T)</b> in RGB space, where <b>f</b> is an +arbitrary 3-input Boolean function, <b>D</b> is the destination (frame +buffer or print buffer), <b>S</b> is the source (described below), and +<b>T</b> is the texture (the current PostScript color, which may be a +pattern). The source and texture depend on the PostScript imaging +operation: + +<ul> +<li>For <b><tt>fill</tt></b> and <b><tt>stroke</tt></b>, the source is +solid black, covering the region to be painted; the texture is the current +PostScript color. + +<li>For <b><tt>show</tt></b> and <b><tt>imagemask</tt></b>, the source is +solid black, covering the pixels to be painted; the texture is the current +PostScript color. + +<li>For <b><tt>image</tt></b> and <b><tt>colorimage</tt></b>, the source is +the image data; the texture depends on an optional Boolean parameter, +<b><tt>CombineWithColor</tt></b>, in the image dictionary. If +<b><tt>CombineWithColor</tt></b> is false (the default), the texture is +solid black. If <b><tt>CombineWithColor</tt></b> is true, the texture is +the current color. For the non-dictionary form of the image operator, +<b><tt>CombineWithColor</tt></b> is considered to be false. +</ul> + +<p> +The <b><tt>rasterop</tt></b> option adds the following operators: + +<dl> +<dt><b><tt><int8> .setrasterop -</tt></b> +<dd>Sets the <b><tt>RasterOp</tt></b> function in the graphics state. The +default function is 252, Source | Texture. +</dl> + +<dl> +<dt><b><tt>- .currentrasterop <int8></tt></b> +<dd>Returns the current <b><tt>RasterOp</tt></b> function. +</dl> + +<dl> +<dt><b><tt><bool> .setsourcetransparent -</tt></b> +<dd>Sets source transparency in the graphics state. When source +transparency is true, white source pixels prevent storing into the +destination, regardless of what the <b><tt>RasterOp</tt></b> function +returns. The default source transparency is false. +</dl> + +<dl> +<dt><b><tt>- .currentsourcetransparent <bool> -</tt></b> +<dd>Returns the current source transparency. +</dl> + +<dl> +<dt><b><tt><bool> .settexturetransparent -</tt></b> +<dd>Sets texture transparency in the graphics state. When texture +transparency is true, white texture pixels prevent storing into the +destination, regardless of what the <b><tt>RasterOp</tt></b> function +returns. The default texture transparency is false. +</dl> + +<dl> +<dt><b><tt>- .currenttexturetransparent <bool> -</tt></b> +<dd>Returns the current texture transparency. +</dl> + +<p> +For more information on RasterOp and transparency, please consult chapter 5 +of the "PCL 5 Color Technical Reference Manual", +<a href="http://www.hp.com/cposupport/printers/support_doc/bpl01354.html">Hewlett-Packard +Manual Part No. 5961-0635</a>. + +<h4><a name="Character"></a>Character operators</h4> + +<dl> +<dt><b><tt><string> <bool> .charboxpath -</tt></b> +<dd>For each character <b>C</b> in the rendering of <string>, let the +bounding box of <b>C</b> <b><em>in device space</em></b> be the four +<b><em>user-space</em></b> points p1x/y, p2x/y, p3x/y, and p4x/y. For each +character in order, <b><tt>.charboxpath</tt></b> appends the following to +the current path: + +<ul><li>If <b><tt><bool></tt></b> is true, the equivalent of: + +<blockquote> +p1x p1y <b><tt>moveto</tt></b><br> +p2x p2y <b><tt>lineto</tt></b><br> +p3x p3y <b><tt>lineto</tt></b><br> +p4x p4y <b><tt>lineto</tt></b><br> +<b><tt>closepath</tt></b> +</blockquote> +</ul> + +<p> +This creates a path whose <b><tt>pathbbox</tt></b> is the +<b><tt>bbox</tt></b> of the string. + +<ul><li>If <b><tt><bool></tt></b> is false, the equivalent of: + +<blockquote> +p1x p1y <b><tt>moveto</tt></b><br> +p3x p3y <b><tt>lineto</tt></b> +</blockquote> +</ul> + +<p> +If the CTM is well-behaved (consists only of reflection, scaling, and +rotation by multiples of 90 degrees), this too creates a (simpler) path +whose <b><tt>pathbbox</tt></b> is the <b><tt>bbox</tt></b> of the string. +</dl> + +<dl> +<dt><b><tt><font> <charname|charcode> <charname> <charstring> .type1execchar -</tt></b> +<dd>Does all the work for rendering a Type 1 outline. This operator, like +<b><tt>setcharwidth</tt></b> and <b><tt>setcachedevice</tt></b>, is valid +only in the context of a show operator -- that is, it must only be called +from within a <b><tt>BuildChar</tt></b> or <b><tt>BuildGlyph</tt></b> +procedure. +</dl> + +<dl> +<dt><b><tt><font> <charcode> %Type1BuildChar -</tt></b> +<dd>This is not a new operator: rather, it is a name known specially to the +interpreter. Whenever the interpreter needs to render a character (during +a ...<b><tt>show</tt></b>, <b><tt>stringwidth</tt></b>, or +<b><tt>charpath</tt></b>), it looks up the name <b><tt>BuildChar</tt></b> +in the font dictionary to find a procedure to run. If it does not find +this name, and if the <b><tt>FontType</tt></b> is 1, the interpreter +instead uses the value (looked up on the dictionary stack in the usual way) +of the name <b><tt>%Type1BuildChar</tt></b>. + +<p> +The standard definition of <b><tt>%Type1BuildChar</tt></b> is in the +initialization file <b><tt>gs_type1.ps</tt></b>. Users should not need to +redefine <b><tt>%Type1BuildChar</tt></b>, except perhaps for tracing or +debugging. +</dl> + +<dl> +<dt><b><tt><font> <charname> %Type1BuildGlyph -</tt></b> +<dd>Provides the Type 1 implementation of <b><tt>BuildGlyph</tt></b>. +</dl> + +<h3><a name="Other"></a>Other operators</h3> + +<h4><a name="Mathematical"></a>Mathematical operators</h4> + +<dl> +<dt><b><tt><number> arccos <number></tt></b> +<dd>Computes the arc cosine of a number between -1 and 1. +</dl> + +<dl> +<dt><b><tt><number> arcsin <number></tt></b> +<dd>Computes the arc sine of a number between -1 and 1. +</dl> + +<h4><a name="Dictionary"></a>Dictionary operators</h4> + +<dl> +<dt><b><tt>mark <key1> <value1> <key2> <value2> ... .dicttomark <dict></tt></b> +<dd>Creates and returns a dictionary with the given keys and values. This +is the same as the PostScript Level 2 <b><tt>>></tt></b> operator, +but is available even in Level 1 configurations. +</dl> + +<dl> +<dt><b><tt><dict> <key> <value> .forceput - </tt></b> +<dd>Equivalent to <b><tt>put</tt></b>, but works even if +<b><tt>dict</tt></b> is not writable, and (if <b><tt>dict</tt></b> is +<b><tt>systemdict</tt></b> or the current save level is 0) even if +<b><tt>dict</tt></b> is in global VM and <b><tt>key</tt></b> and/or +<b><tt>value</tt></b> is in local VM. <strong>This operator should be used +only initialization code, and only in executeonly procedures: it must not be +accessible after initialization.</strong> +</dl> + +<dl> +<dt><b><tt><dict> <key> .forceundef - </tt></b> +<dd>Equivalent to <b><tt>undef</tt></b>, but works even if +<b><tt>dict</tt></b> is not writable. <strong>This operator should be used +only initialization code, and only in executeonly procedures: it must not be +accessible after initialization.</strong> +</dl> + + +<dl> +<dt><b><tt><dict> <key> .knownget <value> true</tt></b> +<dt><b><tt><dict> <key> .knownget false</tt></b> +<dd>Combines <b><tt>known</tt></b> and <b><tt>get</tt></b> in the +obvious way. +</dl> + +<dl> +<dt><b><tt><dict> <integer> .setmaxlength -</tt></b> +<dd>Sets the capacity (<b><tt>maxlength</tt></b>) of a dictionary. +Causes a <b><tt>dictfull</tt></b> error if the dictionary has more +occupied entries than the requested capacity. +</dl> + +<h4><a name="String"></a>String and name operators</h4> + +<dl> +<dt><b><tt><integer> .bytestring <bytestring></tt></b> +<dd>Allocates and returns a bytestring, a special data type that can be +larger than the maximum size of a string (64K-1 bytes) and can be used in +place of a string with a very few operators. +</dl> + +<dl> +<dt><b><tt><name> .namestring <string></tt></b> +<dd>Returns the (read-only) string for a name. +</dl> + +<dl> +<dt><b><tt><obj> <pattern> .stringmatch <bool></tt></b> +<dd>Matches <b><tt>obj</tt></b> against a pattern in which '*' matches 0 or +more characters and '?' matches any single character. If +<b><tt>obj</tt></b> is a string or a name, matches its characters against +the pattern; if <b><tt>obj</tt></b> is of any other type, the result is +<b><tt>true</tt></b> if the pattern is the single character "*" and +<b><tt>false</tt></b> otherwise. +</dl> + +<dl> +<dt><b><tt><state> <fromString> <toString> .type1encrypt <newState> <toSubstring></tt></b> +<dd>Encrypts <b><tt>fromString</tt></b> according to the algorithm for +Adobe Type 1 fonts, writing the result into <b><tt>toString</tt></b>. +<b><tt>toString</tt></b> must be at least as long as +<b><tt>fromString</tt></b>, or a rangecheck error occurs. +<b><tt>state</tt></b> is the initial state of the encryption algorithm (a +16-bit non-negative integer); <b><tt>newState</tt></b> is the new state of +the algorithm. +</dl> + +<dl> +<dt><b><tt><state> <fromString> <toString> .type1decrypt <newState> <toSubstring></tt></b> +<dd>Decrypts <b><tt>fromString</tt></b> according to the algorithm for +Adobe Type 1 fonts, writing the result into <b><tt>toString</tt></b>. +Other specifications are as for <b><tt>type1encrypt</tt></b>. +</dl> + +<h4><a name="Relational"></a>Relational operators</h4> + +<dl> +<dt><b><tt><number|string> <number|string> max <number|string></tt></b> +<dd>Returns the larger of two numbers or strings. +</dl> + +<dl> +<dt><b><tt><number|string> <number|string> min <number|string></tt></b> +<dd>Returns the smaller of two numbers or strings. +</dl> + +<h4><a name="File"></a>File operators</h4> + +<dl> +<dt><b><tt><file> .filename <string> true</tt></b> +<dt><b><tt><file> .filename false</tt></b> +<dd>If the file was opened by the <b><tt>file</tt></b> or +<b><tt>.tempfile</tt></b> operator, returns the file name and +<b><tt>true</tt></b>; if the file is a filter, returns +<b><tt>false</tt></b>. +</dl> + +<dl> +<dt><b><tt><file> .fileposition <integer> true</tt></b> +<dd>Returns the position of <b><tt>file</tt></b>. Unlike the standard +<b><tt>fileposition</tt></b> operator, which causes an error if the file is +not positionable, <b><tt>.fileposition</tt></b> works on all files, +including filters: for non-positionable files, it returns the total number +of bytes read or written since the file was opened. +</dl> + +<dl> +<dt><b><tt><string> findlibfile <foundstring> <file> true</tt></b> +<dt><b><tt><string> findlibfile <string> false</tt></b> +<dd>Opens the file of the given name for reading, searching through +directories <a href="Use.htm#Finding_files">as described in the usage +documentation</a>. If the search fails, <b><tt>findlibfile</tt></b> simply +pushes false on the stack and returns, rather than causing an error. +</dl> + +<dl> +<dt><b><tt><file> <string> .peekstring <substring> <filled_bool></tt></b> +<dd>Reads bytes from a file like <b><tt>readstring</tt></b>, but also leaves +the bytes in the file buffer so they will be read again by a subsequent read +operation. Currently gives a <b><tt>rangecheck</tt></b> error if +<b><tt>string</tt></b> is larger than the file's buffer. +</dl> + +<a name=Tempfile></a> +<dl> +<dt><b><tt><prefix_string|null> <access_string> .tempfile +<string> <file></tt></b> +<dd>Creates and opens a temporary file +like the <b><tt>file</tt></b> operator, also returning the file name. There +are three cases for the <b><tt><prefix_string|null></tt></b> operand: + +<ul> +<p> +<li><b><tt>null</tt></b>: create the file in the same directory and with the +same name conventions as other temporary files created by the Ghostscript +implementation on this platform. E.g., the temporary file might be named +<b><tt>/tmp/gs_a1234</tt></b>. +<p> +<li>A string that is not the beginning of an absolute file name (e.g., does +not begin with <b><tt>.</tt></b> or <b><tt>/</tt></b> on Unix-like +platforms): create the file in the standard temporary directory, but use the +<b><tt><prefix_string></tt></b> as the first part of the file name. +E.g., if <b><tt><prefix_string></tt></b> is <b><tt>xx</tt></b>, the +temporary file might be named <b><tt>/tmp/xxa1234</tt></b>. +<p> +<li>A string that is the beginning of an absolute file name: use the +<b><tt><prefix_string></tt></b> as the first part of the file name. +E.g., if <b><tt><prefix_string></tt></b> is +<b><tt>/my/tmpdir/zz</tt></b>, the temporary file might be named +<b><tt>/my/tmpdir/zza1234</tt></b>. +<p> +When running in <b><tt>SAFER</tt></b> mode, the absolute path must +be one of the strings on the list given by the <b><tt>PermitFileWriting</tt></b> +userparameter. Temporary files created with <b><tt>.tempfile</tt></b> can +be deleted when in SAFER mode, and can be renamed to one of the paths +that is on <b>both</b> the PermitFileControl and PermitFileWriting +paths. +</ul> + +</dl> + +<dl> +<dt><b><tt><file> <integer> .unread -</tt></b> +<dd>Pushes back the last-read character onto the front of the file. If the +file is open only for writing, or if the integer argument is not the same +as the last character read from the file, causes an <b><tt>ioerror</tt></b> +error. May also cause an <b><tt>ioerror</tt></b> if the last operation on +the file was not a reading operation. This operator is now deprecated: +use <b><tt>.peekstring</tt></b> in new code. +</dl> + +<p> +Ghostscript also supports the following <b><tt>IODevice</tt></b> in +addition to a subset of those defined in the Adobe documentation: +<b><tt>%pipe%command</tt></b>, which opens a pipe on the given command. +This is supported only on operating systems that provide +<b><tt>popen</tt></b> (primarily Unix systems, and not all of those). + +<h4><a name="Virtual_memory"></a>Virtual memory operators</h4> + +<dl> +<dt><b><tt><save> .forgetsave -</tt></b> +<dd>Cancels the effect of a save, making it as though the save never +happened. +</dl> + +<h4><a name="Miscellaneous"></a>Miscellaneous operators</h4> + +<dl> +<dt><b><tt><obj1> <obj2> ... <objn> <n> .execn ...</tt></b> +<dd>This executes <b><tt>obj1</tt></b> through <b><tt>objn</tt></b> in that +order, essentially equivalent to + +<blockquote><pre> +<obj1> <obj2> ... <objn> <n> array astore {exec} forall +</pre></blockquote> + +<p> +except that it doesn't actually create the array. +</dl> + +<dl> +<dt><b><tt><string> getenv <string> true</tt></b> +<dt><b><tt><string> getenv false</tt></b> +<dd>Looks up a name in the shell environment. If the name is found, +returns the corresponding value and true; if the name is not found, returns +false. +</dl> + +<dl> +<dt><b><tt><name> <array> .makeoperator <operator></tt></b> +<dd>Constructs and returns a new operator that is actually the given +procedure in disguise. The name is only used for printing. The operator +has the executable attribute. + +<p> +Operators defined in this way do one other thing besides running the +procedure: if an error occurs during the execution of the procedure, and +there has been no net reduction in operand or dictionary stack depth, the +operand or dictionary stack pointer respectively is reset to its position +at the beginning of the procedure. +</dl> + +<dl> +<dt><b><tt><string> <boolean> .setdebug -</tt></b> +<dd>If the Ghostscript interpreter was built with the <b><tt>DEBUG</tt></b> +flag set, sets or resets any subset of the debugging flags normally +controlled by <b><tt>-Z</tt></b> in the command line. Has no effect +otherwise. +</dl> + +<dl> +<dt><b><tt>- .oserrno <errno></tt></b> +<dd>Returns the error code for the most recent operating system error. +</dl> + +<dl> +<dt><b><tt>- .oserrorstring <string></tt></b> +<dd>Returns the error string for the most recent operating system error. +</dl> + +<a name="Runandhide"></a> +<dl> +<dt><b><tt><array> <procedure> .runandhide ... <array></tt></b> +<dd>Runs the <i><tt><procedure></tt></i> after removing the +<i><tt><array></tt></i> from the stack. As long as <i><tt><array></tt></i> +is not contained in any readable dictionaries or elsewhere on stacks, it +will not be accessible to <i><tt><procedure></tt></i>. +<p> +This operator is intended to allow hiding a <i><tt><save></tt></i> object +during execution of procedures or files that run in <b>SAFER</b> mode. +If a <b><tt>save</tt></b> is performed prior to entering <b>SAFER</b> mode +with <b><tt>.setsafe</tt></b>, using the save object as the operand to +<b><tt>restore</tt></b> will return to <b>NOSAFER</b> mode. In order to +prevent the procedures running in <b>SAFER</b> mode from being able to +return to <b>NOSAFER</b> mode, this operator should be used. +Upon return from the file or procedure <b><tt>restore</tt></b> can be used +to return to <b>NOSAFER</b> mode. +<p> +<b>Note:</b> The array operand hidden during the execution of the file or +procedure will be placed at the top of the operand stack which may be on +top of objects that the file or procedure leaves on top of the stack. +Thus removing objects below the array may be needed to prevent an +<b><tt>invalidrestore</tt></b> error. +<p> +For example, in order for a script or job server to execute a file +<tt>somefile.ps</tt> with the <b>SAFER</b> mode restrictions in place, returning +to unrestricted <b>NOSAFER</b> mode when the procedure exits is as follows: +<pre> + Start Ghostscript with <b>-dNOSAFER</b> + + ... % perform any device set up w/o restrictions + [ save ] % create a save object before SAFER + (somefile.ps) (r) file cvx % open the file to process + .setsafe % enter SAFER mode + .runandhide % run the file hiding the save object + count 1 roll % place array below anything left over + count 1 sub { pop } repeat % pop left over stuff + cleardictstack % prevent invalidrestore from dicts + 0 get restore % go back to NOSAFER mode +</pre> +Another refinement on the above would be to execute <b><tt>.runandhide</tt></b> +using <b><tt>stopped</tt></b> in order to report errors but continue processing. +</dl> + +<dl> +<dt><b><tt>- .setsafe -</tt></b> +<dd>If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> or +<b><tt>-dDELAYSAFER</tt></b>, this operator can be used to enter <b>SAFER</b> +mode (see <a href="Use.htm#Safer"><b>-dSAFER</b></a>) +<p> +<b>Note: </b>If <b><tt>-dPARANOIDSAFER</tt></b> was specified on the command +line, <b><tt>.setsafe</tt></b> also sets the <b><tt>PermitFileReading</tt></b> +parameter to an empty array. +<p> +Since <b>SAFER</b> mode is implemented with userparameters and device parameters, +it is possible to use <b><tt>save</tt></b> and <b><tt>restore</tt></b> before +and after <b><tt>.setsafe</tt></b> to return to <b>NOSAFER</b> mode, but care +should be taken to ensure that the <i><tt>save</tt></i> object is not +accessible to any procedures or file run in <b>SAFER</b> mode (see +<a href="#Runandhide"><b>.runandhide</b></a> above). +<p> +<b>Note: This uses setpagedevice to change .LockSafetyParams, so the page +will be erased as a side effect of this operator</b> +</dl> + +<dl> +<dt><b><tt>- .locksafe -</tt></b> +<dd> +This operator sets the current device's <b><tt>.LockSafetyParams</tt></b> +and the <b><tt>LockFilePermissions</tt></b> user parameter true as well as +adding the paths on LIBPATH and FONTPATH and the paths given by the +system params /GenericResourceDir and /FontResourceDir to the current +PermitFileReading list of paths. +<p> +If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> or +<b><tt>-dDELAYSAFER</tt></b>, this operator can be used to enter <b>SAFER</b> +mode with the current set of <b><tt>PermitFile...</tt></b> user parameters +in effect. Since <b><tt>.setsafe</tt></b> sets the <b><tt>PermitFileWriting</tt></b> +and <b><tt>PermitFileControl</tt></b> user parameters to empty arrays, a script +or job server that needs to enable certain paths for file Writing and/or Control +can use this operator to perform the locking needed to enter <b>SAFER</b> mode. +<p> +For example, to enable reading everywhere, but disallow writing and file +control (deleting and renaming files), the following can be used: +<pre> + { << /PermitFileReading [ (*) ] + /PermitFileWriting [ ] + /PermitFileControl [ ] + >> setuserparams + .locksafe + } stopped pop +</pre> +In the above example, use of stopped will allow the use of this sequence on +older versions of Ghostscript where <b><tt>.locksafe</tt></b> was not an operator. +<p> +<b>Note: This uses setpagedevice to change .LockSafetyParams, so the page +will be erased as a side effect of this operator</b> +<p> +See also <a href="#LockSafetyParams">.LockSafetyParams</a> and +<a href="#User_parameters">User Parameters</a>. +<p> +</dl> + +<h4><a name="Device"></a>Device operators</h4> + +<dl> +<dt><b><tt><device> copydevice <device></tt></b> +<dd>Copies a device. The copy is writable and installable. The copy is +created in the current VM (local or global), usually local VM for executing +ordinary PostScript files. +</dl> + +<dl> +<dt><b><tt><devicename> finddevice <device></tt></b> +<dd>Creates a default instance of a device specified by name. The instance +is created in global VM. If <b><tt>finddevice</tt></b> is called more than +once with the same device name, it creates the default instance the first +time, and returns the same instance thereafter. +</dl> + +<dl> +<dt><b><tt><devicename> findprotodevice <device></tt></b> +<dd>Finds the prototype of a device specified by name. A prototype can be +used with <b><tt>.getdeviceparams</tt></b> or other parameter-reading +operators, but it is read-only and cannot be set with +<b><tt>setdevice</tt></b>: it must be copied first. +</dl> + +<dl> +<dt><b><tt><device> <x> <y> <width> <max_height> <alpha?> <std_depth|null> <string> .getbitsrect <height> <substring></tt></b> +<dd>Reads a rectangle of rendered bits back from a device. This is only +guaranteed to be implemented for image devices (see below). +<b><tt>alpha?</tt></b> is 0 for no alpha, -1 for alpha first, 1 for alpha +last. <b><tt>std_depth</tt></b> is null for native pixels, number of bits +per component for a standard color space. +</dl> + +<dl> +<dt><b><tt><index> .getdevice <device></tt></b> +<dd>Returns a device from the set of devices known to the system. The +first device, which is the default, is numbered 0. If the +<b><tt>index</tt></b> is out of range, causes a <b><tt>rangecheck</tt></b> +error. This device is actually a prototype, not a directly usable device, +and is marked read-only; it cannot have its parameters changed or be +installed as the current device. +</dl> + +<dl> +<dt><b><tt><matrix> <width> <height> <palette> makeimagedevice <device></tt></b> +<dd>Makes a new device that accumulates an image in memory. <b><tt> +matrix</tt></b> is the initial transformation matrix: it must be orthogonal +(that is, [a 0 0 b x y] or +[0 a b 0 x y]). <b><tt>palette</tt></b> is a +string of 2^<small><sup><b>N</b></sup></small> or +3 × 2^<small><sup><b>N</b></sup></small> elements, +specifying how the 2^<small><sup><b>N</b></sup></small> possible pixel +values will be interpreted. Each element is interpreted as a gray value, +or as RGB values, multiplied by 255. For example, if you want a monochrome +image for which 0=white and 1=black, the palette should be +<b><tt><ff 00></tt></b>; if you want a 3-bit deep image with +just the primary colors and their complements (ignoring the fact that 3-bit +images are not supported), the palette might be <b><tt><000000 0000ff +00ff00 00ffff ff0000 ff00ff ffff00 ffffff></tt></b>. At present, the +palette must contain exactly 2, 4, 16, or 256 entries, and must contain an +entry for black and an entry for white; if it contains any entries that +aren't black, white, or gray, it must contain at least the six primary +colors (red, green, blue, and their complements cyan, magenta, and yellow); +aside from this, its contents are arbitrary. + +<p> +Alternatively, palette can be 16, 24, 32, or null (equivalent to 24). +These are interpreted as: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th valign=bottom align=left>Palette + <td> + <th valign=bottom align=left>Bits allocated per color +<tr> <td colspan=3><hr> +<tr valign=top> <td>16 + <td> + <td>5 red, 6 green, 5 blue +<tr valign=top> <td>24 + <td> + <td>8 red, 8 green, 8 blue +<tr valign=top> <td>32 + <td> + <td>8C, 8M, 8Y, 8K +</table></blockquote> + +<p> +Note that one can also make an image device (with the same palette as an +existing image device) by copying a device using the +<b><tt>copydevice</tt></b> operator. +</dl> + +<dl> +<dt><b><tt><matrix> <width> <height> <palette> <word?> makewordimagedevice <device></tt></b> +<dd>Makes an image device as described above. <b><tt>word?</tt></b> is a +Boolean value indicating whether the data should be stored in a +word-oriented format internally. No ordinary PostScript programs should +use this operator. +</dl> + +<dl> +<dt><b><tt><device> <index> <string> copyscanlines <substring></tt></b> +<dd>Copies one or more scan lines from an image device into a string, +starting at a given scan line in the image. The data is in the same format +as for the <b><tt>image</tt></b> operator. It is an error if the device is +not an image device or if the string is too small to hold at least one +complete scan line. Always copies an integral number of scan lines. +</dl> + +<dl> +<dt><b><tt><device> setdevice -</tt></b> +<dd>Sets the current device to the specified device. Also resets the +transformation and clipping path to the initial values for the device. +Signals an <b><tt>invalidaccess</tt></b> error if the device is a +prototype or if <a href="Language.htm#LockSafetyParams">.LockSafetyParams</a> +is true for the current device. +</dl> + +<dl> +<dt><b><tt>- currentdevice <device></tt></b> +<dd>Gets the current device from the graphics state. +</dl> + +<dl> +<dt><b><tt><device> getdeviceprops <mark> <name1> <value1> ... <namen> <valuen></tt></b> +<dd>Gets the properties of a device. See the section on +<a href="#Device_parameters">device parameters</a> below for details. +</dl> + +<dl> +<dt><b><tt><mark> <name1> <value1> ... <namen> <valuen> <device> putdeviceprops <device></tt></b> +<dd>Sets properties of a device. May cause <b><tt>undefined</tt></b>, +<b><tt>invalidaccess</tt></b>, <b><tt>typecheck</tt></b>, <b><tt>rangecheck</tt></b>, or +<b><tt>limitcheck</tt></b> errors. +</dl> + +<dl> +<dt><b><tt>- flushpage -</tt></b> +<dd>On displays, flushes any buffered output, so that it is guaranteed to +show up on the screen; on printers, has no effect. +</dl> + +<hr> + +<h2><a name="Filters"></a>Filters</h2> + +<h3><a name="Standard_filters"></a>Standard filters</h3> + +<p> +In its usual configuration, Ghostscript supports all the standard PostScript +LanguageLevel 3 filters, both encoding and decoding, except that it does not +currently support: + +<ul> + +<li>the <b><tt>EarlyChange</tt></b> key in the <b><tt>LZWEncode</tt></b> +filter. + +</ul> + +<p> +Ghostscript also supports additional keys in the optional dictionary +operands for some filters. For the <b><tt>LZWDecode</tt></b> filter: + +<dl> +<dt><b><tt>InitialCodeLength <integer></tt></b> (default 8) +<dd>An integer between 2 and 11 specifying the initial number of data bits +per code. Note that the actual initial code length is 1 greater than this, +to allow for the reset and end-of-data code values. +</dl> + +<dl> +<dt><b><tt>FirstBitLowOrder <boolean></tt></b> (default false) +<dd>If true, codes appear with their low-order bit first. +</dl> + +<dl> +<dt><b><tt>BlockData <boolean></tt></b> (default false) +<dd>If true, the data is broken into blocks in the manner specified for the +GIF file format. +</dl> + +<p> +For the <b><tt>CCITTFaxEncode</tt></b> and <b><tt>CCITTFaxDecode</tt></b> +filters: + +<dl> +<dt><b><tt>DecodedByteAlign <integer></tt></b> (default 1) +<dd>An integer <b>N</b> with the value 1, 2, 4, 8, or 16, specifying that +decoded data scan lines are always a multiple of <b>N</b> bytes. The +encoding filter skips data in each scan line from Columns to the next +multiple of <b>N</b> bytes; the decoding filter pads each scan line to a +multiple of <b>N</b> bytes. +</dl> + +<h3><a name="Non_standard_filters"></a>Non-standard filters</h3> + +<p> +In addition to the standard PostScript LanguageLevel 3 filters, Ghostscript +supports the following non-standard filters. Many of these filters are used +internally to implement standard filters or facilities; they are almost +certain to remain, in their present form or a backward-compatible one, in +future Ghostscript releases. + +<dl> +<dt><b><tt><target> /BCPEncode filter <file></tt></b> +<dt><b><tt><source> /BCPDecode filter <file></tt></b> +<dd>Create filters that implement the Adobe Binary Communications Protocol. +See Adobe documentation for details. +</dl> + +<dl> +<dt><b><tt><target> <seed_integer> /eexecEncode filter <file></tt></b> +<dd>Creates a filter for encrypting data into the encrypted format described +in the Adobe Type 1 Font Format documentation. The +<b><tt>seed_integer</tt></b> must be 55665 for the <b><tt>eexec</tt></b> +section of a font, or 4330 for a <b><tt>CharString</tt></b>. Note that for +the <b><tt>eexec</tt></b> section of a font, this filter produces binary +output and does not include the initial 4 (or <b><tt>lenIV</tt></b>) garbage +bytes. +</dl> + +<dl> +<dt><b><tt><source> <seed_integer> /eexecDecode filter <file></tt></b> +<dt><b><tt><source> <dict> /eexecDecode filter <file></tt></b> +<dd>Creates a filter for decrypting data encrypted as described in the Adobe +Type 1 Font Format documentation. The <b><tt>seed_integer</tt></b> must be +55665 or 4330 as described just above. Recognized dictionary keys are: + +<blockquote> +<b><tt>seed <16-bit integer></tt></b> (required)<br> +<b><tt>lenIV <non-negative integer></tt></b> (default=4) +</blockquote> +</dl> + +<dl> +<dt><b><tt><target> /MD5Encode filter <file></tt></b> +<dd>Creates a filter that produces the 16-byte MD5 digest of the input. +Note that no output is produced until the filter is closed. +</dl> + +<dl> +<dt><b><tt><source> <hex_boolean> /PFBDecode filter <file></tt></b> +<dd>Creates a filter that decodes data in <b><tt>.PFB</tt></b> format, the +usual semi-binary representation for Type 1 font files on IBM PC and +compatible systems. If <b><tt>hex_boolean</tt></b> is true, binary packets +are converted to hex; if false, binary packets are not converted. +</dl> + +<dl> +<dt><b><tt><target> <dict> /PixelDifferenceEncode filter <file></tt></b> +<dt><b><tt><source> <dict> /PixelDifferenceDecode filter <file></tt></b> +<dd>Implements the Predictor=2 pixel-differencing option of the LZW +filters. Recognized keys are: + +<blockquote> +<b><tt>Colors <integer></tt></b> (1 to 4, default=1)<br> +<b><tt>BitsPerComponent <integer></tt></b> (1, 2, 4, or 8, default=8)<br> +<b><tt>Columns <integer></tt></b> (>= 0, required) +</blockquote> + +<p> +See the Adobe <a +href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf"><em>Portable +Document Format Reference Manual</em></a> for details. +</dl> + +<dl> +<dt><b><tt><target> <dict> /PNGPredictorEncode filter <file></tt></b> +<dt><b><tt><source> <dict> /PNGPredictorDecode filter <file></tt></b> +<dd>Implements the "filter" algorithms of the +<a href="http://www.libpng.org/pub/png/">Portable Network Graphics (PNG) +graphics format</a>. Recognized keys are: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Keys recognized in PNG filter algorithms</font><hr> +<tr valign=bottom> + <th align=left>Key + <td> + <th align=left>Range + <td> + <th align=left>Default +<tr> <td colspan=5><hr> +<tr valign=top> <td><b><tt>Colors <integer></tt></b> + <td> + <td>1 to 16 + <td> + <td>16 +<tr valign=top> <td><b><tt>BitsPerComponent <integer></tt></b> + <td> + <td>1, 2, 4, 8, or 16 + <td> + <td>8 +<tr valign=top> <td><b><tt>Columns <integer></tt></b> + <td> + <td>>= 0 + <td> + <td>1 +<tr valign=top> <td><b><tt>Predictor <integer></tt></b> + <td> + <td>10 to 15 + <td> + <td>15 +</table></blockquote> + +<p> +The <b><tt>Predictor</tt></b> is the PNG algorithm number + 10 for the +<b><tt>Encoding</tt></b> filter; the <b><tt>Decoding</tt></b> filter +ignores <b><tt>Predictor</tt></b>. 15 means the encoder attempts to +optimize the choice of algorithm. For more details see the PNG +specification + +<blockquote> +<a href="http://www.w3.org/TR/WD-png-960128.html">http://www.w3.org/TR/WD-png-960128.html</a> +</blockquote> +</dl> + +<dl> +<dt><b><tt><target> /TBCPEncode filter <file></tt></b> +<dt><b><tt><source> /TBCPDecode filter <file></tt></b> +<dd>Create filters that implement the Adobe Tagged Binary Communications +Protocol. See Adobe documentation for details. +</dl> + +<dl> +<dt><b><tt><target> /zlibEncode filter <file></tt></b> +<dt><b><tt><source> /zlibDecode filter <file></tt></b> +<dd>Creates filters that use the data compression method variously known as +'zlib' (the name of a popular library that implements it), 'Deflate' (as in +<a href="http://www.ietf.org/rfc/rfc1951.txt">RFC 1951</a>, which is a +detailed specification for the method), 'gzip' (the name of a popular +compression application that uses it), or 'Flate' (Adobe's name). Note that +the PostScript <b><tt>Flate</tt></b> filters are actually a combination of +this filter with an optional predictor filter. +</dl> + +<h3><a name="Unstable_filters"></a>Unstable filters</h3> + +<p> +Some versions of Ghostscript may also support other non-standard filters for +experimental purposes. The current version includes the following such +filters, which are not documented further. No code should assume that these +filters will exist in compatible form, or at all, in future versions. + +<dl> +<dt><b><tt><target/source> <string> ByteTranslateEncode/Decode filter <file></tt></b> +<dd><b><tt>string</tt></b> must be a string of exactly 256 bytes. Creates a +filter that converts each input byte <em>b</em> to +<b><tt>string</tt></b>[<em>b</em>]. Note that the <b><tt>Encode</tt></b> +and <b><tt>Decode</tt></b> filters operate identically: the client must +provide a <b><tt>string</tt></b> for the <b><tt>Decode</tt></b> filter that +is the inverse mapping of the <b><tt>string</tt></b> for the +<b><tt>Encode</tt></b> filter. +</dl> + +<dl> +<dt><b><tt><target/source> <dict> BoundedHuffmanEncode/Decode filter <file></tt></b> +<dd>These filters encode and decode data using Huffman codes. Since these +filters aren't used anywhere, we don't document them further, except to note +the recognized dictionary keys, which must be set identically for encoding +and decoding: + +<blockquote> +<b><tt>FirstBitLowOrder <bool></tt></b> (default=false)<br> +<b><tt>MaxCodeLength <int></tt></b> (default=16)<br> +<b><tt>EndOfData <bool></tt></b> (default=true)<br> +<b><tt>EncodeZeroRuns <int></tt></b> (default=256)<br> +<b><tt>Tables <int_array></tt></b> +</blockquote> +</dl> + +<dl> +<dt><b><tt><target/source> <dict> BWBlockSortEncode/Decode filter <file></tt></b> +<dd>This filter implements the Burroughs-Wheeler block sorting compression +method, which we've heard is also used in the popular <b><tt>bzip2</tt></b> +compression application. See <a +href="http://sources.redhat.com/bzip2/">http://sources.redhat.com/bzip2/</a> +for more information. The only recognized dictionary key is: + +<blockquote> +<b><tt>BlockSize <integer></tt></b> (default=16384) +</blockquote> +</dl> + +<dl> +<dt><b><tt><target/source> MoveToFrontEncode/Decode filter <file></tt></b> + +<dd>The <b><tt>Encode</tt></b> filter starts by initializing an internal +256-byte array <b><tt>a</tt></b> to the values 0 .. 255. This array will +always hold a permutation of these values. Then for each input byte +<em>b</em>, the filter outputs the index <em>i</em> such that +<b><tt>a</tt></b>[<em>i</em>] = <em>b</em>, and moves that element to the +front (element 0) of <b><tt>a</tt></b>, moving elements 0 .. <em>i-1</em> to +positions 1 .. <em>i</em>. The <b><tt>Decode</tt></b> filter inverts this +process. +</dl> + +<hr> + +<h2><a name="Device_parameters"></a>Device parameters</h2> + +Ghostscript supports the concept of device parameters for all devices, not +just page devices. (For non-page devices, these are accessible through +<b><tt>getdeviceprops</tt></b> and <b><tt>putdeviceprops</tt></b>, as +indicated above.) Here are the currently defined parameters for all +devices: + +<dl> +<a name="LockSafetyParams"></a> +<dt><b><tt>.LockSafetyParams <boolean></tt></b> +<dd>This parameter allows for improved system security by preventing +PostScript programs from being able to change potentially dangerous +device paramters such as OutputFile. This parameter cannot be set false +if it is already true. +<p> +If this parameter is true for the current device, attempt to set a new +device that has <b><tt>.LockSafetyParams</tt></b> false will signal an +<tt><b> invalidaccess</b></tt> error. +</dl> + +<dl> +<dt><b><tt>BitsPerPixel <integer> (usually read-only)</tt></b> +<dd>Number of bits per pixel. +</dl> + +<dl> +<dt><b><tt>.HWMargins [<four floats>]</tt></b> +<dd>Size of non-imageable regions around the edges of the page, in points +(units of 1/72in; see the <a href="Devices.htm#Measurements">notes on +measurements</a> in the documentation on devices). +</dl> + +<dl> +<dt><b><tt>HWSize [<integer> <integer>]</tt></b> +<dd>X and Y size in pixels. +</dl> + +<dl> +<dt><b><tt>Name <string> (read-only)</tt></b> +<dd>The device name. Currently the same as <b><tt>OutputDevice</tt></b>. +</dl> + +<dl> +<dt><b><tt>Colors, GrayValues, RedValues, GreenValues, BlueValues, ColorValues (usually read-only)</tt></b> +<dd>As for the <b><tt>deviceinfo</tt></b> operator of Display PostScript. +<b><tt>Red</tt></b>, <b><tt>Green</tt></b>, <b><tt>Blue</tt></b>, and +<b><tt>ColorValues</tt></b> are only defined if +<b><tt>Colors</tt></b> > 1. +</dl> + +<dl> +<dt><b><tt>TextAlphaBits, GraphicsAlphaBits (usually read-only)</tt></b> +<dd>The number of bits of anti-aliasing information for text or graphics +respectively. Legal values are 1 (no anti-aliasing, the default for most +devices), 2, or 4. +</dl> + +<p> +In addition, the following are defined per Adobe's documentation for the +<b><tt>setpagedevice</tt></b> operator: + +<blockquote> +<b><tt>Duplex</tt></b> (if supported)<br> +<b><tt>HWResolution</tt></b><br> +<b><tt>ImagingBBox</tt></b><br> +<b><tt>Margins</tt></b><br> +<b><tt>NumCopies</tt></b> (for printers only)<br> +<b><tt>Orientation</tt></b> (if supported)<br> +<b><tt>OutputDevice</tt></b><br> +<b><tt>PageOffset</tt></b> (write-only)<br> +<b><tt>PageSize</tt></b><br> +<b><tt>ProcessColorModel</tt></b> (usually read-only)<br> +</blockquote> + +<p> +Some devices may only allow certain values for <b><tt>HWResolution</tt></b> +and <b><tt>PageSize</tt></b>. The null device ignores attempts to set +<b><tt>PageSize</tt></b>; its size is always <b><tt>[0 0]</tt></b>. + +<p> +For printers these are also defined: + +<dl> +<dt><b><tt>BufferSpace <integer></tt></b> +<dd>Buffer space for band lists, if the bitmap is too big to fit in memory. +</dl> + +<dl> +<dt><b><tt>MaxBitmap <integer></tt></b> +<dd>Maximum space for a full bitmap in memory. +</dl> + +<dl> +<dt><b><tt>OutputFile <string></tt></b> + +<dd>An empty string means "send to printer directly", otherwise specifies +the file name for output; <b><tt>%d</tt></b> is replaced by the page number; +on Unix systems <b><tt>%pipe%</tt></b><em>command</em> writes to a pipe. +(<b><tt>|</tt></b><em>command</em> also writes to a pipe, but is now +deprecated.) +<p> +Attempts to set this parameter if <tt><b>.LockSafetyParams</b></tt> is true +will signal an <tt><b>invalidaccess</b></tt> error. +</dl> + +<dl> +<dt><b><tt>OpenOutputFile <boolean></tt></b> +<dd>If true, open the device's output file when the device is opened, +rather than waiting until the first page is ready to print. +</dl> + +<dl> +<dt><b><tt>PageCount <integer> (read-only)</tt></b> +<dd>Counts the number of pages printed on the device. +</dl> + +<p> +The following parameters are for use only by very specialized applications +that separate band construction from band rasterization. Improper use may +cause unpredictable errors. In particular, if you only want to allocate +more memory for banding, to increase band size and improve performance, use +the <b><tt>BufferSpace</tt></b> parameter, not +<b><tt>BandBufferSpace</tt></b>. + +<dl> +<dt><b><tt>BandHeight <integer></tt></b> +<dd>The height of bands when banding. 0 means use the largest band height +that will fit within the BandBufferSpace (or BufferSpace, if +BandBufferSpace is not specified). +</dl> + +<dl> +<dt><b><tt>BandWidth <integer></tt></b> +<dd>The width of bands in the rasterizing pass, in pixels. 0 means use the +actual page width. +</dl> + +<dl> +<dt><b><tt>BandBufferSpace <integer></tt></b> +<dd>The size of the band buffer in the rasterizing pass, in bytes. 0 means +use the same buffer size as for the interpretation pass. +</dl> + +<p> +Ghostscript supports the following parameter for +<b><tt>setpagedevice</tt></b> and <b><tt>currentpagedevice</tt></b> that is +not a device parameter per se: + +<dl> +<dt><b><tt>ViewerPreProcess <procedure></tt></b> +<dd>Specifies a procedure to be applied to the page device dictionary +before any other processing is done. The procedure may not alter the +dictionary, but it may return a modified copy. This "hook" is provided for +use by viewing programs such as GSview. +</dl> + +<hr> + +<h2><a name="User_parameters"></a>User parameters</h2> + +Ghostscript supports the following non-standard user parameters: + +<dl> +<dt><b><tt>ProcessDSCComment <procedure|null></tt></b> +<dd>If not null, this procedure is called whenever the scanner detects a DSC +comment (comment beginning with <b><tt>%%</tt></b> or <b><tt>%!</tt></b>). +There are two operands, the file and the comment (minus any terminating +EOL), which the procedure must consume. +</dl> + +<dl> +<dt><b><tt>ProcessComment <procedure|null></tt></b> +<dd>If not null, this procedure is called whenever the scanner detects a +comment (or, if <b><tt>ProcessDSCComment</tt></b> is also not null, a +comment other than a DSC comment). The operands are the same as for +<b><tt>ProcessDSCComment</tt></b>. +</dl> + +<dl> +<dt><b><tt>LockFilePermissions <boolean></tt></b> +<dd>If <tt>true</tt>, this parameter and the three <tt>PermitFile...</tt> +parameters cannot be changed. Attempts to change any of the values +when LockFilePermissions is <tt>true</tt> will signal <b><tt>invalidaccess</tt></b>. +Also, when this value is <tt>true</tt>, the <b><tt>file</tt></b> operator +will give <b><tt>invalidaccess</tt></b> when attempting to open files +(processes) using the <b><tt>%pipe</tt></b> device. +<p> +Also when <b><tt>LockFilePermissions</tt></b> is <tt>true</tt>, strings +cannot reference the parent directory (platform specific). For example +<b><tt>(../../xyz)</tt></b> is illegal on unix, Windows +and Macintosh, and <b><tt>([.#.#.XYZ])</tt></b> is illegal on VMS. +<p> +This parameter is set <tt>true</tt> by the <b><tt>.setsafe</tt></b> and +<b><tt>.locksafe</tt></b> operators. +</dl> + +<dl> +<dt><b><tt>PermitFileReading <array of strings></tt></b> +<dt><b><tt>PermitFileWriting <array of strings></tt></b> +<dt><b><tt>PermitFileControl <array of strings></tt></b> +<dd>These parameters specify paths where file reading, writing and the +'control' operations are permitted, respectively. File control +operations are <b><tt>deletefile</tt></b> and <b><tt>renamefile</tt></b>. +For <b><tt>renamefile</tt></b>, the filename for the current filename +must match one of the paths on the PermitFileControl list, and the +new filename must be on <b>both</b> the PermitFileControl and the +PermitFileWriting lists of paths. +<p> +The strings can contain wildcard characters as for the <b><tt>filenameforall</tt></b> +operator and unless specifying a single file, will end with a <b>*</b> +for directories (folders) to allow access to all files and sub-directories +in that directory. +<p> +<b>Note:</b> The strings are used for stringmatch operations similar +to <b><tt>filenameforall</tt></b>, thus on MS Windows platforms, use the '/' +character to separate directories and filenames or use '\\\\' to +have the string contain '\\' which will match a single '\' in the +target filename (use of '/' is strongly recommended). +<p> +The <a href=Use.htm#Safer><b>SAFER</b></a> mode and the +<b><tt>.setsafe</tt></b> operator set all three lists to empty arrays, +thus the only files that can be read are the <b><tt>%stdin</tt></b> device and +on LIBPATH or FONTPATH or the Resource paths specified by the /FontResourceDir +or /GenericResourceDir system params. Files cannot be opened for writing +anywhere and cannot be deleted or renamed except for files created with the +<a href=#Tempfile><b>.tempfile</b></a> operator). +</dl> + +<hr> + +<h2><a name="Miscellaneous_additions"></a>Miscellaneous additions</h2> + +<b><tt>run</tt></b> can take either a string or a file as its argument. In +the latter case, it just runs the file, closing it at the end, and trapping +errors just as for the string case. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Lib.htm b/Master/xemtex/doc/ghostscript/Lib.htm new file mode 100644 index 00000000000..d3377b6238b --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Lib.htm @@ -0,0 +1,491 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>The Ghostscript library</title> +<!-- $Id: Lib.htm,v 1.14.2.11.2.5 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: lib.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>The Ghostscript Library</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#GS_library">The Ghostscript library</a> +<li><a href="#PS_operator_API">PostScript operator API</a> +<ul> +<li><a href="#Patterns">Patterns</a> +<li><a href="#Lower_level_API">Lower-level API</a> +</ul> +<li><a href="#Full_example">A full example</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="GS_library"></a>The Ghostscript library</h2> + +<p> +This document describes the Ghostscript library, a set of procedures +to implement the graphics and filtering capabilities that are primitive +operations in the PostScript language and in Adobe Portable Document Format +(PDF). + +<p> +Ghostscript is actually two programs: a language interpreter, and a +graphics library. The library provides, in the form of C procedures, all +the graphics functions of the language, that is, approximately those +facilities listed in section 8.1 of the <cite>PostScript +Language Reference Manual</cite>, starting with the +graphics state operators. In addition, the library provides some +lower-level graphics facilities that offer higher performance in exchange +for less generality. + +<hr> + +<h2><a name="PS_operator_API"></a>PostScript operator API</h2> + +<p> +The highest level of the library, which is the one that most clients will +use, directly implements the PostScript graphics operators with procedures +named <b><tt>gs_XXX</tt></b>, for instance <b><tt>gs_moveto</tt></b> and +<b><tt>gs_fill</tt></b>. Nearly all of these procedures take graphics +state objects as their first arguments, such as + +<blockquote><b><tt> +int gs_moveto(gs_state *, double, double); +</tt></b></blockquote> + +<p> +Nearly every procedure returns an integer code which is >= 0 for a +successful return or <0 for a failure. The failure codes correspond +directly to PostScript errors, and are defined in +<b><tt>gserrors.h</tt></b>. + +<p> +The library implements all the operators in the following sections of the +<cite>PostScript Language Reference Manual</cite>, with the indicated +omissions and with the APIs defined in the indicated <b><tt>.h</tt></b> +files. A header of the form <b><em>A.h(B.h)</em></b> indicates that +<b><em>A.h</em></b> is included in <b><em>B.h</em></b>, so +<b><em>A.h</em></b> need not be included explicitly if <b><em>B.h</em></b> +is included. Operators marked with * in the "omissions" column are not +implemented directly; the library provides lower-level procedures that can +be used to implement the operator. + +<p> +There are slight differences in the operators that return multiple values, +since C's provisions for this are awkward. Also, the control structure for +the operators involving callback procedures (<b><tt>pathforall</tt></b>, +<b><tt>image</tt></b>, <b><tt>colorimage</tt></b>, +<b><tt>imagemask</tt></b>) is partly inverted: the client calls a procedure +to set up an enumerator object, and then calls another procedure for each +iteration. The <b><tt>...show</tt></b> operators, +<b><tt>charpath</tt></b>, and <b><tt>stringwidth</tt></b> also use an +inverted control structure. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Section<br>(operators) + <td> + <th align=left>Headers + <td> + <th align=left>Omissions +<tr> <td colspan=5><hr> +<tr valign=top> <td>Graphics state -- device-independent + <td> + <td><b><tt>gscolor.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gscolor1.h</tt></b><br><b><tt>gscolor2.h</tt></b><br><b><tt>gscspace.h</tt></b><br><b><tt>gshsb.h</tt></b><br><b><tt>gsline.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gsstate.h</tt></b> + <td> + <td> +<tr> <td> +<tr valign=top> <td>Graphics state -- device-dependent + <td> + <td><b><tt>gscolor.h</tt></b>(<b><tt>gsstate.h</tt></b>)<br><b><tt>gscolor1.h</tt></b><br><b><tt>gscolor2.h</tt></b><br><b><tt>gsht.h</tt></b>(<b><tt>gsht1.h</tt></b>,<b><tt>gsstate.h</tt></b>)<br><b><tt>gsht1.h</tt></b><br><b><tt>gsline.h</tt></b>(<b><tt>gsstate.h</tt></b>) + <td> + <td> +<tr> <td> +<tr valign=top> <td>Coordinate system and matrix + <td> + <td><b><tt>gscoord.h</tt></b><br><b><tt>gsmatrix.h</tt></b> + <td> + <td><b><tt>*matrix</tt></b>, <b><tt>*identmatrix</tt></b>, <b><tt>*concatmatrix</tt></b>, <b><tt>*invertmatrix</tt></b> +<tr> <td> +<tr valign=top> <td>Path construction + <td> + <td><b><tt>gspath.h</tt></b><br><b><tt>gspath2.h</tt></b> + <td> + <td><b><tt>*arct</tt></b>, <b><tt>*pathforall</tt></b>, <b><tt>ustrokepath</tt></b>, <b><tt>uappend</tt></b>, <b><tt>upath</tt></b>, <b><tt>ucache</tt></b> +<tr> <td> +<tr valign=top> <td>Painting + <td> + <td><b><tt>gsimage.h</tt></b><br><b><tt>gspaint.h</tt></b><br><b><tt>gspath2.h</tt></b> + <td> + <td><b><tt>*image</tt></b>, <b><tt>*colorimage</tt></b>, <b><tt>*imagemask</tt></b>, <b><tt>ufill</tt></b>, <b><tt>ueofill</tt></b>, <b><tt>ustroke</tt></b> +<tr> <td> +<tr valign=top> <td>Form and pattern + <td> + <td><b><tt>gscolor2.h</tt></b> + <td> + <td><b><tt>execform</tt></b> +<tr> <td> +<tr valign=top> <td>Device setup and output + <td> + <td><b><tt>gsdevice.h</tt></b> + <td> + <td><b><tt>*showpage</tt></b>, <b><tt>*set</tt></b>/<b><tt>currentpagedevice</tt></b> +<tr> <td> +<tr valign=top> <td>Character and font + <td> + <td><b><tt>gschar.h</tt></b><br><b><tt>gsfont.h</tt></b> + <td> + <td>*(all the <b><tt>show</tt></b> operators), <b><tt>definefont</tt></b>, <b><tt>undefinefont</tt></b>, <b><tt>findfont</tt></b>, <b><tt>*scalefont</tt></b>, <b><tt>*makefont</tt></b>, <b><tt>selectfont</tt></b>, <b><tt>[Global]FontDirectory</tt></b>, <b><tt>Standard</tt></b>/<b><tt>ISOLatin1Encoding</tt></b>, <b><tt>findencoding</tt></b> +</table></blockquote> + +<p> +The following procedures from the list above operate differently from their +PostScript operator counterparts, as explained here: + +<dl> +<dt><b><tt>gs_makepattern(gscolor2.h)</tt></b> +<dd>Takes an explicit current color, rather than using the current color in +the graphics state. Takes an explicit allocator for allocating the pattern +implementation. See below for more details on +<b><tt>gs_makepattern</tt></b>. +</dl> + +<dl> +<dt><b><tt>gs_setpattern(gscolor2.h)</tt></b> +<dt><b><tt>gs_setcolor(gscolor2.h)</tt></b> +<dt><b><tt>gs_currentcolor(gscolor2.h)</tt></b> +<dd>Use <b><tt>gs_client_color</tt></b> rather than a set of color +parameter values. See below for more details on +<b><tt>gs_setpattern</tt></b>. +</dl> + +<dl> +<dt><b><tt>gs_currentdash_length/pattern/offset(gsline.h)</tt></b> +<dd>Splits up <b><tt>currentdash</tt></b> into three separate procedures. +</dl> + +<dl> +<dt><b><tt>gs_screen_init/currentpoint/next/install(gsht.h)</tt></b> +<dd>Provide an "enumeration style" interface to <b><tt>setscreen</tt></b>. +(<b><tt>gs_setscreen</tt></b> is also implemented.) +</dl> + +<dl> +<dt><b><tt>gs_rotate/scale/translate(gscoord.h)</tt></b> +<dt><b><tt>gs_[i][d]transform(gscoord.h)</tt></b> +<dd>These always operate on the graphics state CTM. The corresponding +operations on free-standing matrices are in <b><tt>gsmatrix.h</tt></b> and +have different names. +</dl> + +<dl> +<dt><b><tt>gs_path_enum_alloc/init/next/cleanup(gspath.h)</tt></b> +<dd>Provide an "enumeration style" implementation of +<b><tt>pathforall</tt></b>. +</dl> + +<dl> +<dt><b><tt>gs_image_enum_alloc(gsimage.h)</tt></b> +<dt><b><tt>gs_image_init/next/cleanup(gsimage.h)</tt></b> +<dd>Provide an "enumeration style" interface to the equivalent of +<b><tt>image</tt></b>, <b><tt>imagemask</tt></b>, and +<b><tt>colorimage</tt></b>. In the <b><tt>gs_image_t</tt></b>, +<b><tt>ColorSpace</tt></b> provides an explicit color space, rather than +using the current color space in the graphics state; +<b><tt>ImageMask</tt></b> distinguishes <b><tt>imagemask</tt></b> from +<b><tt>[color]image</tt></b>. +</dl> + +<dl> +<dt><b><tt>gs_get/putdeviceparams(gsdevice.h)</tt></b> +<dd>Take a <b><tt>gs_param_list</tt></b> for specifying or receiving the +parameter values. See <b><tt>gsparam.h</tt></b> for more details. +</dl> + +<dl> +<dt><b><tt>gs_show_enum_alloc/release(gschar.h)</tt></b> +<dt><b><tt>gs_xxxshow_[n_]init(gschar.h)</tt></b> +<dt><b><tt>gs_show_next(gschar.h)</tt></b> +<dd>Provide an "enumeration style" interface to writing text. Note that +control returns to the caller if the character must be rasterized. +</dl> + +<p> +This level of the library also implements the following operators from other +sections of the Manual: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Section<br>(operators) + <td> + <th align=left>Headers + <td> + <th align=left>Operators +<tr> <td colspan=5><hr> +<tr valign=top> <td>Interpreter parameter + <td> + <td><b><tt>gsfont.h</tt></b> + <td> + <td><b><tt>cachestatus</tt></b>, <b><tt>setcachelimit</tt></b>, <b><tt>*set/currentcacheparams</tt></b> +<tr valign=top> <td>Display PostScript + <td> + <td><b><tt>gsstate.h</tt></b> + <td> + <td><b><tt>set/currenthalftonephase</tt></b> +</table></blockquote> + +<p> +In order to obtain the full PostScript Level 2 functionality listed above, +<b><tt>FEATURE_DEVS</tt></b> must be set in the makefile to include at least the following: + +<blockquote><b><tt> +FEATURE_DEVS=patcore.dev cmykcore.dev psl2core.dev dps2core.dev ciecore.dev path1core.dev hsbcore.dev +</tt></b></blockquote> + +<p> +The <b><tt>*lib.mak</tt></b> makefiles mentioned below do not always +include all of these features. + +<p> +Files named <b><tt>gs*.c</tt></b> implement the higher level of the +graphics library. As might be expected, all procedures, variables, and +structures available at this level begin with "<b><tt>gs_</tt></b>". +Structures that appear in these interfaces, but whose definitions may be +hidden from clients, also have names beginning with "<b><tt>gs_</tt></b>", +that is, the prefix, not the implementation, reflects at what level the +abstraction is made available. + +<h3><a name="Patterns"></a>Patterns</h3> + +<p> +Patterns are the most complicated PostScript language objects that the +library API deals with. As in PostScript, defining a pattern color and +using the color are two separate operations. + +<p> +<b><tt>gs_makepattern</tt></b> defines a pattern color. Its arguments are as follows: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td><b><tt>gs_client_color *</tt></b> + <td> + <td>The resulting <b><tt>Pattern</tt></b> color is stored here. This is different from PostScript, which has no color objects <em>per se</em>, and hence returns a modified copy of the dictionary. +<tr valign=top> <td><b><tt>const gs_client_pattern *</tt></b> + <td> + <td>The analogue of the original <b><tt>Pattern</tt></b> dictionary, described in detail just below. +<tr valign=top> <td><b><tt>const gs_matrix *</tt></b> + <td> + <td>Corresponds to the matrix argument of the <b><tt>makepattern</tt></b> operator. +<tr valign=top> <td><b><tt>gs_state *</tt></b> + <td> + <td>The current graphics state. +<tr valign=top> <td><b><tt>gs_memory_t *</tt></b> + <td> + <td>The allocator to use for allocating the saved data for the + <b><tt>Pattern</tt></b> color. If this is + <b><tt>NULL</tt></b>, <b><tt>gs_makepattern</tt></b> uses the + same allocator that allocated the graphics state. Library + clients should probably always use <b><tt>NULL</tt></b>. + +</table></blockquote> + +<p> +The <b><tt>gs_client_pattern</tt></b> structure defined in +<b><tt>gscolor2.h</tt></b> corresponds to the <b><tt>Pattern</tt></b> +dictionary that is the argument to the PostScript language +<b><tt>makepattern</tt></b> operator. This structure has one extra member, +<b><tt>void *client_data</tt></b>, which is a place for clients to +store a pointer to additional data for the <b><tt>PaintProc</tt></b>; this +provides the same functionality as putting additional keys in the +<b><tt>Pattern</tt></b> dictionary at the PostScript language level. The +<b><tt>PaintProc</tt></b> is an ordinary C procedure that takes as +parameters a <b><tt>gs_client_color *</tt></b>, which is the +<b><tt>Pattern</tt></b> color that is being used for painting, and a +<b><tt>gs_state *</tt></b>, which is the same graphics state that +would be presented to the <b><tt>PaintProc</tt></b> in PostScript. +Currently the <b><tt>gs_client_color *</tt></b> is always the current +color in the graphics state, but the <b><tt>PaintProc</tt></b> should not +rely on this. The <b><tt>PaintProc</tt></b> can retrieve the +<b><tt>gs_client_pattern *</tt></b> from the +<b><tt>gs_client_color *</tt></b> with the +<b><tt>gs_getpattern</tt></b> procedure, also defined in +<b><tt>gscolor2.h</tt></b>, and from there, it can retrieve the +<b><tt>client_data</tt></b> pointer. + +<p> +The normal way to set a <b><tt>Pattern</tt></b> color is to call +<b><tt>gs_setpattern</tt></b> with the graphics state and with the +<b><tt>gs_client_color</tt></b> returned by <b><tt>gs_makepattern</tt></b>. +After that, one can use <b><tt>gs_setcolor</tt></b> to set further +<b><tt>Pattern</tt></b> colors (colored, or uncolored with the same +underlying color space); the rules are the same as those in PostScript. +Note that for <b><tt>gs_setpattern</tt></b>, the +<b><tt>paint.values</tt></b> in the <b><tt>gs_client_color</tt></b> must be +filled in for uncolored patterns; this corresponds to the additional +arguments for the PostScript <b><tt>setpattern</tt></b> operator in the +uncolored case. + +<p> +There is a special procedure <b><tt>gs_makebitmappattern</tt></b> for creating bitmap-based +patterns. Its API is documented in <b><tt>gscolor2.h</tt></b>; its implementation, in +<b><tt>gspcolor.c</tt></b>, may be useful as an example of a pattern using a particularly +simple <b><tt>PaintProc.</tt></b> + +<h3><a name="Lower_level_API"></a>Lower-level API</h3> + +<p> +Files named <b><tt>gx*.c</tt></b> implement the lower level of the graphics +library. The interfaces at the <b><tt>gx</tt></b> level are less stable, +and expose more of the implementation detail, than those at the +<b><tt>gs</tt></b> level: in particular, the <b><tt>gx</tt></b> interfaces +generally use device coordinates in an internal fixed-point representation, +as opposed to the <b><tt>gs</tt></b> interfaces that use floating point +user coordinates. Named entities at this level begin with +<b><tt>gx_</tt></b>. + +<p> +Files named <b><tt>gz*.c</tt></b> and <b><tt>gz*.h</tt></b> are internal to +the Ghostscript implementation, and are not designed to be called by +clients. + +<hr> + +<h2><a name="Full_example"></a>A full example</h2> + +<p> +The file <b><tt>gslib.c</tt></b> in the Ghostscript fileset is a complete +example program that initializes the library and produces output using it; +files named <b><tt>*lib.mak</tt></b> (such as <b><tt>ugcclib.mak</tt></b> +and <b><tt>bclib.mak</tt></b>) are makefiles using <b><tt>gslib.c</tt></b> +as the main program. The following annotated excerpts from this file are +intended to provide a roadmap for applications that call the library. + +<blockquote><pre>/* Capture stdin/out/err before gs.h redefines them. */ +#include <stdio.h> +static FILE *real_stdin, *real_stdout, *real_stderr; +static void +get_real(void) +{ real_stdin = stdin, real_stdout = stdout, real_stderr = stderr; +}</pre></blockquote> + +<p> +Any application using Ghostscript should include the fragment above at the +very beginning of the main program. + +<blockquote><pre>#include "gx.h"</pre></blockquote> + +<p> +The <b><tt>gx.h</tt></b> header includes a wealth of declarations related +to the Ghostscript memory manager, portability machinery, debugging +framework, and other substrate facilities. Any application file that calls +any Ghostscript API functions should probably include <b><tt>gx.h</tt></b>. + +<blockquote><pre>/* Configuration information imported from gconfig.c. */ +extern gx_device *gx_device_list[]; + +/* Other imported procedures */ + /* from gsinit.c */ +extern void gs_lib_init(P1(FILE *)); +extern void gs_lib_finit(P2(int, int)); + /* from gsalloc.c */ +extern gs_ref_memory_t *ialloc_alloc_state(P2(gs_memory_t *, uint));</pre></blockquote> + +<p> +The externs above are needed for initializing the library. + +<blockquote><pre> gs_ref_memory_t *imem; +#define mem ((gs_memory_t *)imem) + gs_state *pgs; + gx_device *dev = gx_device_list[0]; + + gp_init(); + get_real(); + gs_stdin = real_stdin; + gs_stdout = real_stdout; + gs_stderr = real_stderr; + gs_lib_init(stdout); + .... + imem = ialloc_alloc_state(&gs_memory_default, 20000); + imem->space = 0; + .... + pgs = gs_state_alloc(mem);</pre></blockquote> + +<p> +The code above initializes the library and its memory manager. <b><tt>pgs</tt></b> now +points to the graphics state that will be passed to the drawing routines in +the library. + +<blockquote><pre> gs_setdevice_no_erase(pgs, dev); /* can't erase yet */ + { gs_point dpi; + gs_screen_halftone ht; + gs_dtransform(pgs, 72.0, 72.0, &dpi); + ht.frequency = min(fabs(dpi.x), fabs(dpi.y)) / 16.001; + ht.angle = 0; + ht.spot_function = odsf; + gs_setscreen(pgs, &ht); + }</pre></blockquote> + +<p> +The code above initializes the default device and sets a default halftone +screen. (For brevity, we have omitted the definition of odsf, the spot +function.) + +<blockquote><pre> /* gsave and grestore (among other places) assume that */ + /* there are at least 2 gstates on the graphics stack. */ + /* Ensure that now. */ + gs_gsave(pgs);</pre></blockquote> + +<p> +The call above completes initializing the graphics state. When the program +is finished, it should execute: + +<blockquote><pre> gs_lib_finit(0, 0);</pre></blockquote> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Maintain.htm b/Master/xemtex/doc/ghostscript/Maintain.htm new file mode 100644 index 00000000000..789602bd86c --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Maintain.htm @@ -0,0 +1,210 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Ghostscript maintenance procedures</title> +<!-- $Id: Maintain.htm,v 1.23.2.12.2.6 2003/05/17 14:39:00 giles Exp $ --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Ghostscript maintenance procedures</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Introduction">Introduction</a> +<li><a href="#CVS">Rules for CVS commits</a> +<li><a href="#Adding_or_removing_files">Adding or Removing Files</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a> and the instructions on how to <a href="Make.htm">build +Ghostscript</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Introduction"></a>Introduction</h2> + +<p> +This document describes various maintenance procedures associated with +development version +Ghostscript. It is only meant for developers actively working on +Ghostscript. + +<hr> + +<h2><a name="CVS"></a>Rules for CVS Commits</h2> + +<p> +This section describes a few rules intended to make life easier for people +working with this code base. + +<p> +At any given time, there are usually two active branches: a stable +branch and a development branch. The development branch is HEAD, which +is the default when doing a checkout without a -r flag. At the time of +this writing (7 October 2002), the stable branch is tagged +GS_7_0x. + +<p> +A concise and useful document for working with CVS branches is Jeff +Semke's <a href="http://www.psc.edu/~semke/cvs_branches.html" +class="offsite">CVS +Branch and Tag Primer</a>. A +somewhat more detailed explanation is the <a +href="http://www.loria.fr/~molli/cvs/doc/cvs_5.html" +class="offsite">Branching and +merging</a> section from the CVS documentation by Pascal Molli. + +<p> +For new development commits, you can basically ignore the +branches. Just commit to the HEAD branch. For bug fixes for the stable +branch, it is your responsibility to commit to both the stable branch +and, if appropriate, HEAD. Commits to HEAD are appropriate if they are +in an area not being actively reworked, if the development version +exhibits the same bug symptoms, and if the patch fixes these +symptoms. + +<p> +When modifying a number of files for a single issue, please group them +together as a single commit. For two separate sets of changes dealing +with two different issues, there should be two commits. + +<p> +You should strive not to introduce any new bugs with your +commit. Always make sure the code compiles before committing. Test the +changes with several files, including the problem file in the case of +a bug fix, and other files that may have been affected by the +changes. + +<p> +Always supply a descriptive log message for your commits. These log +messages are used to automatically generate the <a +href="News.htm">News.htm</a> file and History changelogs, and are also +crucial for navigating CVS using the CVSweb gateway. Please try to +keep the style of the descriptions similar to those in the current +History#.htm files. + +<p> +Log messages beginning with 'Fix' are treated specially. Such messages are +put under the "Fixes problems" heading when the History files are +generated. Additionally, if the first four characters are 'Fix:' this is removed +(i.e., "Fix: The xyz" becomes "The xyz", but "Fixes xyz" is copied unchanged). +This feature is intended for explicit bugfixes and should be avoided for +enhancements or commits with long explanations. + +<p> +Information about who changed what, when, and why is maintained in the +CVS logs. In general, a file should be a clean representation of the +current version rather than a history trail of how it got +there. Keeping old code around for reference is usually not necessary, +as it is stored in the CVS diffs. When necessary, use #if / #endif, or +descriptive conditionals such as #ifdef OLD_CMAP_TABLES. Do not +comment out old code. (A very few files that are distributed separate +from Ghostscript have a change log at the beginning, which should be +maintained: currently, only ansiknr.c and md5.[ch].) + +<p> +Additionally, if your patch removes a feature, changes an interface or +otherwise creates an incompatibility with the last release, you +must add an entry to the "Incompatible changes" section of <tt>News.htm</tt> +as this information can only be generated manually. +This admonition applies to api changes that might +affect other developers as well as user issues like switch behavior. +Upon release, the accumulated incompatible changes will be moved to the +relevant History file, and the News collection in cvs will be wiped clean +for the next version. + +<p> +All patches must be reviewed before being committed. Please email your +patch to <a +href="mailto:gs-code-review@ghostscript.com">gs-code-review@ghostscript.com</a>. +Make sure to include your commit comment and any other information +that would be helpful for the review. Also, please identify which +branches the patch is intended for. + +<p> +If you are not an employee or consultant of Artifex or artofcode, then +we need a copyright assignment form so we can incorporate your +changes. Please email Raph Levien <<a +href="mailto:raph@artofcode.com">raph@artofcode.com</a>> and +include your snailmail address for a hardcopy assignment form. + +<h2><a name="Adding_or_removing_files"></a>Adding or removing files</h2> + +<p> +When adding or removing files, don't forget to invoke <b><tt>cvs +add</tt></b> or <b><tt>cvs rm</tt></b>. + +<p> +When adding files, update the file roadmap in +<b><tt>doc/Develop.htm</tt></b>. + +<p> +When adding or removing files other than .c or .h: If the files will be +used at runtime, check the install list in <b><tt>unixinst.mak</tt></b>. + +<p> +When adding .c files, update the relevant <b><tt>.mak</tt></b> file +(usually <b><tt>devs.mak</tt></b>, <b><tt>int.mak</tt></b>, or +<b><tt>lib.mak</tt></b>). + +<p> +When adding new documentation, add a link to <tt>doc/Readme.htm</tt> and +a short blurb describing the contents of the file. + +<p> +When adding or changing fonts, update <b><tt>lib/Fontmap.GS</tt></b>, +<b><tt>fonts.mak</tt></b>, and possibly the compiled fonts in +<b><tt>gs.mak</tt></b> and the examples in +<b><tt>doc/Fonts.htm</tt></b>. + +<p> +When adding .ps files, update <b><tt>doc/Psfiles.htm</tt></b>. + +<p> +Likewise, you will want to delete any references for a file you +remove from Ghostscript. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 2000 artofcode LLC. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Make.htm b/Master/xemtex/doc/ghostscript/Make.htm new file mode 100644 index 00000000000..2fecd470c45 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Make.htm @@ -0,0 +1,2766 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>How to build Ghostscript from source code</title> +<!-- $Id: Make.htm,v 1.36.2.19.2.6 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: make.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>How to build Ghostscript from source code</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#General_overview">General overview</a> +<li><a href="#Acquiring">How to acquire the source code</a> +<ul> +<li><a href="#Ghostscript_source">Ghostscript source code</a> +<li><a href="#Third-party_libraries">Third-party library source code</a> +</ul> +<li><a href="#Unpack">How to unpack the source code</a> +<ul> +<li><a href="#Tarfiles">How to unpack compressed tar files generally</a> +<li><a href="#Zipfiles">How to unpack zip files generally</a> +<li><a href="#Unpack_Ghostscript">How to unpack Ghostscript itself</a> +<li><a href="#Unpack_libraries">How to unpack the third-party libraries</a> +</ul> +<li><a href="#Makefile_overview">How to prepare the makefiles</a> +<ul> +<li><a href="#Preparing_makefiles">Changes for your environment</a> +<li><a href="#Features_and_devices">Selecting features and devices</a> +<ul> +<li><a href="#Precompiled_data">Precompiled run-time data</a> +<li><a href="#GNU_readline">GNU readline</a> +</ul> +<li><a href="#Makefile_setup">Setting up "makefile"</a> +<li><a href="#Invoke_make">Invoking "make"</a> +<li><a href="#Cross-compiling">Cross-compiling</a> +</ul> +<li><a href="#PC_build">How to build Ghostscript from source (PC version)</a> +<ul> +<li><a href="#Borland_build">Borland/Inprise environment</a> +<li><a href="#Microsoft_build">Microsoft environment</a> +<li><a href="#Self-extracting_executables">Making self-extracting executables</a> +<li><a href="#Watcom_build">Watcom environment</a> +<li><a href="#Cygwin32_build">Cygwin32 gcc</a> +<li><a href="#IntelWin32_build">Intel C/C++ compiler</a> +</ul> +<li><a href="#Mac_build">How to build Ghostscript from source (MacOS version)</a> +<ul> +<li><a href="#MacOS">Traditional MacOS</a> +<li><a href="#MacOSX">MacOS X</a> +</ul> +<li><a href="#Unix_build">How to build Ghostscript from source (Unix version)</a> +<ul> +<li><a href="#Multi_architecture_makefile">The multi-architecture makefile</a> +<li><a href="#UNIX_makefile">Setting up "makefile"</a> +<li><a href="#Shared_object">Shared object</a> +<li><a href="#Tool_specific_issues">Tool-specific issues</a> +<ul> +<li><a href="#gcc_27x">gcc 2.7.*</a> +<li><a href="#GNU_make">GNU make</a> +</ul> +<li><a href="#OS_specific_issues">OS-specific issues</a> +<ul> +<li><a href="#386_Unix">386 Unix</a> +<li><a href="#BSDI">BSDI</a> +<li><a href="#Digital_Unix">Digital Unix (Alpha)</a> +<li><a href="#FreeBSD">FreeBSD</a> +<li><a href="#GNULinux">GNU/Linux</a> +<li><a href="#NeXTSTEP">NeXTSTEP / OpenSTEP</a> +<li><a href="#SCO">SCO Unix/Xenix</a> +<li><a href="#SVR4">SVR4 Unix</a> +<li><a href="#System_V">System V Unix platforms</a> +<li><a href="#Unixware">Unixware</a> +</ul> +<li><a href="#Hardware_specific_issues">Hardware-specific issues</a> +<ul> +<li><a href="#Alpha_with_gcc">Alpha with gcc</a> +<li><a href="#Apollo">H-P Apollo</a> +<li><a href="#ATT_7040">AT&T 7040 R3</a> +<li><a href="#Convex">Convex</a> +<li><a href="#DECStations">DECStations with Ultrix</a> +<li><a href="#HP_RISC">H-P RISC workstations</a> +<li><a href="#Intergraph">Intergraph Clipper</a> +<li><a href="#MIPS">MIPS</a> +<li><a href="#NCR_3550">NCR 3550</a> +<li><a href="#Pyramid">Pyramid MIServer-S</a> +<li><a href="#RS6000">IBM RS/6000 with AIX</a> +<li><a href="#Silicon_Graphics">Silicon Graphics</a> +<li><a href="#Sun">Sun</a> +<li><a href="#SunOS">SunOS</a> +<li><a href="#Solaris">Solaris</a> +<li><a href="#VAX_Ultrix">VAX with Ultrix</a> +</ul> +</ul> +<li><a href="#OS2_build">How to build Ghostscript from source (OS/2 version)</a> +<li><a href="#VMS_build">How to build Ghostscript from source (OpenVMS version)</a> +<ul> +<li><a href="#GNU_make_VMS">Building with GNU make on OpenVMS</a> +<li><a href="#MMK_MMS_VMS">Building with MMK or MMS on OpenVMS</a> +</ul> +<li><a href="#Other_environments">Other environments</a> +<ul> +<li><a href="#No_multi_thread">Environments lacking multi-threading</a> +<li><a href="#Plan_9">Plan 9</a> +<li><a href="#QNX">QNX</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a> and the instructions on how to <a href="Install.htm">install +Ghostscript</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="General_overview"></a>General overview</h2> + +<p> +This document describes how to build a Ghostscript executable from source +code. There are four major steps to building Ghostscript: + +<ol> +<li>Acquire the compressed archive files of source code for Ghostscript and +the required third-party libraries. +<li>Unpack the archive files into the Ghostscript directory and correctly +named subdirectories. +<li>Prepare the makefiles, including specific changes for your operating +environment and your choice of configuration options. +<li>Invoke "<b><tt>make</tt></b>" to build the software. +</ol> + +<p> +The remainder of this document describes each of these steps in detail. +Note that some of this process is platform-dependent. After building +Ghostscript you must then install it; for that, see the +<a href="Install.htm">installation instructions</a>. + +<hr> + +<h2><a name="Acquiring"></a>How to acquire the source code</h2> + +<p> +Building Ghostscript requires the Ghostscript source code itself, and also +the source code for some third-party libraries that Ghostscript uses. + +<h3><a name="Ghostscript_source"></a>Ghostscript source code</h3> + +<p><a name="Authoritative_distribution_site"></a> +Ghostscript is available from all the standard GNU mirrors, e.g. + +<blockquote> +<a href="ftp://ftp.gnu.org/pub/gnu/" +class="offsite">ftp://ftp.gnu.org/pub/gnu/</a> +</blockquote> + +<p> +Ghostscript source code is packaged in two different formats: +gzip-compressed tar files (*<b><tt>.tar.gz</tt></b>) and zip files +(*<b><tt>.zip</tt></b>). For all versions there are gzip-compressed tar +files: + +<blockquote> +<b><tt>ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b><br> +<b><tt>ghostscript-fonts-std-</tt></b>#.##<b><tt>.tar.gz</tt></b><br> +<b><tt>ghostscript-fonts-other-</tt></b>#.##<b><tt>.tar.gz</tt></b> +</blockquote> + +<p>For recent versions of Ghostscript there may also be zip files + +<blockquote> +<b><tt>gs</tt></b>###<b><tt>src.zip</tt></b><br> +<b><tt>gs</tt></b>###<b><tt>w32.exe</tt></b> +</blockquote> + +<p> +("#.##" and "###" are version numbers in punctuated and unpunctuated form.) +Software to decompress and extract both formats is available for almost +every platform for which Ghostscript is available -- including Unix, DOS, +MS Windows, and VMS -- so you can choose the format most convenient for +you; but it's up to you to locate that software. See the section on <a +href="#Unpack">unpacking the source code</a>. + +<h3><a name="Third-party_libraries"></a>Third-party library source code</h3> + +<p> +To build Ghostscript you need the source code for the <a +href="http://www.ijg.org/">Independent JPEG Group</a> (IJG) library, the +<a href="http://www.libpng.org/pub/png/">Portable Network Graphics</a> +(PNG) +library, and the <a +href="http://www.gzip.org/zlib/">zlib</a> +compression and decompression library. Here are authoritative distribution +points for these libraries, where as elsewhere, "#" is used for version +numbers. The JPEG source code is quite stable, so the reference +here includes the latest version number. The zlib references are +version-independent and should always provide the latest version. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Third-party libraries: authoritative sources</font><hr> +<tr> <td valign=top>JPEG + <td> + <td><a href="ftp://ftp.uu.net/graphics/jpeg/" +class="offsite">ftp://ftp.uu.net/graphics/jpeg/</a><a +href="ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz" +class="offsite">jpegsrc.v6b.tar.gz</a><br> + <a href="ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/" +class="offsite">ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/</a><a +href="ftp://ftp.simtel.net/pub/simtelnet/msdos/graphics/jpegsr6b.zip">jpegsr6b.zip</a> + +<tr> <td valign=top>PNG + <td> + <td><a href="http://www.libpng.org/pub/png/src/" +class="offsite">http://www.libpng.org/pub/png/src/</a>libpng-#.#.#.tar.gz<br> + <a href="http://www.libpng.org/pub/png/src/" +class="offsite">http://www.libpng.org/pub/png/src/</a>lpng###.zip<br> + <a href="ftp://swrinde.nde.swri.edu/pub/png/src/" +class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/</a>libpng-#.#.#.tar.gz<br> + <a href="ftp://swrinde.nde.swri.edu/pub/png/src/" +class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/</a>lpng###.zip + +<tr> <td valign=top>zlib (latest) + <td> + <td> <a href="http://www.gzip.org/zlib/zlib.tar.gz" +class="offsite">http://www.gzip.org/zlib/zlib.tar.gz</a><br> + <a href="http://www.gzip.org/zlib/zlib.zip" +class="offsite">http://www.gzip.org/zlib/zlib.zip</a><br> + <a href="ftp://swrinde.nde.swri.edu/pub/png/src/" class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/zlib-#.#.#.tar.gz</a><br> + <a href="ftp://swrinde.nde.swri.edu/pub/png/src/" class="offsite">ftp://swrinde.nde.swri.edu/pub/png/src/zlib###.zip</a> +</table></blockquote> + +<p> +On DOS or MS Windows one ordinarily uses the zip file kits, in other +environments the compressed tar files, but this is simply a matter of +convenience, since for the same version of the software the compressed tar +file has the same contents as the zip file. Note that each of these +libraries has <b><em>its own version number</em></b> that has +<b><em>nothing to do with Ghostscript's version number</em></b>; you should +get the highest numbered version. (If you encounter difficulties in the +build process you might have to use a lower-numbered version, but don't +worry about this yet.) If you're running GNU/Linux, you might check whether +these libraries are already available in source form on your system, since +many GNU/Linux distributors include them; but we advise you to get the highest +version from the Net if you can. + +<p> +Although the zip archives of an old version of the PNG library may not be +named <b><tt>lpng</tt></b>###<b><tt>.zip</tt></b>, we refer to it as +<b><tt>lpng</tt></b>###<b><tt>.zip</tt></b>. + +<p> +On MacOS, the .sit source archive includes the appropriate source versions +of these libraries, so no additional downloads are necessary. + +<hr> + +<h2><a name="Unpack"></a>How to unpack the source code</h2> + +<p> +Unfortunately there are no generally accepted standards for how to package +source code into archives, so the instructions for unpacking Ghostscript are +longer than they should be. We begin with a brief explanation of how to +extract the two kinds of archive files. + +<h3><a name="Tarfiles"></a>How to unpack compressed tar files generally</h3> + +<p> +Tar (<b><tt>.tar</tt></b>) files are the <em>de facto</em> standard for +archiving files on Unix (every Unix system has the <b><tt>tar</tt></b> +program), and programs to extract their contents are also widely available +for DOS, MS Windows, and VMS. To economize on space and downloading time, +Ghostscript's tar files are compressed with GNU <b><tt>gzip</tt></b>, which +adds the suffix "<b><tt>.gz</tt></b>" to the file name, giving +"<b><tt>.tar.gz</tt></b>". + +<p> +To unpack a compressed tar file <b><tt>MyArchive.tar.gz</tt></b> you +must both decompress it and extract the contents. You can do this in two +steps, one to decompress the file and another to unpack it: + +<blockquote> +<b><tt>gzip -d MyArchive.tar.gz</tt></b> +<br><b><tt>tar -xf MyArchive.tar</tt></b> +</blockquote> + +<p> +or in a pipeline: + +<blockquote> +<b><tt>gzip -d -c MyArchive.tar.gz | tar -xf -</tt></b> +</blockquote> + +<p> +or, if you have a program like GNU <b><tt>tar</tt></b> that can handle +compressed tar files, with a single command: + +<blockquote> +<b><tt>tar -zxf MyArchive.tar.gz</tt></b> +</blockquote> + +<p> +The <b><tt>tar</tt></b> program automatically preserves directory structure +in extracting files. The Ghostscript source archive puts all files under a +directory <b><tt>gs</tt></b>#.##, so using <b><tt>tar</tt></b> to unpack a +compressed archive should always properly create that directory, which we +will call the "gs directory". Make sure you're positioned in the +<b><em>parent</em></b> of the gs directory <b><em>before</em></b> unpacking +the files. If a subdirectory doesn't already exist, <b><tt>tar</tt></b> +creates it. + +<p> +Some other programs -- under MS Windows, for instance -- can also unpack +compressed tar files, but they may not automatically preserve directory +structure nor even extract files into the current directory. If you use +one of these, you must + +<ul> +<li>set the program's options to "Use folder names" or the equivalent, and +<li>check that it is extracting files into the right place. +</ul> + +<h3><a name="Zipfiles"></a>How to unpack zip files generally</h3> + +<p> +Zip files are the <em>de facto</em> standard for archiving files on DOS and +MS Windows, and programs to extract their contents are widely available for +DOS, MS Windows, Unix, VMS, and other platforms. Zip files are at once an +archive format and a compressed format, so an unzipping program +decompresses and extracts archived files as a single step. + +<p> +One common 16-bit DOS program is <b><tt>pkunzip</tt></b>, which comes in +the <b><tt>pkzip</tt></b> package. If you use this, you should ensure that +you have at least version 2.04g, because with its <b><tt>-d</tt></b> +switch, that version of <b><tt>pkunzip</tt></b> preserves the directory +structure of archived files when extracting them; see below. Another +popular free program to unpack zip archives, available for DOS and MS +Windows (16-bit and 32-bit), Unix, VMS, and other platforms, is InfoZIP +<b><tt>unzip</tt></b>: + +<blockquote> +<a href="http://www.info-zip.org/pub/infozip/UnZip.html" +class="offsite">http://www.info-zip.org/pub/infozip/UnZip.html</a> +</blockquote> + +<p> +Unlike <b><tt>pkunzip</tt></b>, InfoZIP <b><tt>unzip</tt></b> automatically +preserves the directory structure of extracted files. So if you have a zip +archive <b><tt>MyArchive.zip</tt></b>: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Extracting zipped files</font><hr> +<tr valign=bottom> + <th align=left>Command + <td> + <th align=left>Preserves directory structure +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>pkunzip MyArchive.zip</tt></b> + <td> + <td>Does <b><em>NOT</em></b> +<tr valign=top> <td><b><tt>pkunzip -d MyArchive.zip</tt></b> + <td> + <td><b><em>DOES</em></b> (note the <b><tt>-d</tt></b> switch) +<tr valign=top> <td><b><tt>unzip MyArchive.zip</tt></b> + <td> + <td><b><em>DOES</em></b> +</table></blockquote> + +<p> +As with the compressed tar files, make sure you're positioned in the +<b><em>parent</em></b> of the gs directory <b><em>before</em></b> unpacking +the files. If a subdirectory doesn't already exist, <b><tt>zip</tt></b> or +<b><tt>pkunzip -d</tt></b> creates it. + +<h3><a name="Unpack_Ghostscript"></a>How to unpack Ghostscript itself</h3> + +<p> +At this point you have <a href="#Acquiring">acquired all the source code</a> +and are ready to unpack it according to the preceding guidelines for <a +href="#Tarfiles">tar files</a> or <a href="#Zipfiles">zip files</a>. To +unpack the Ghostscript source, make the <b><em>parent</em></b> of the (new) +gs directory the current directory. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <th align=left valign=top>2-step: + <td> + <td><b><tt>gzip -d ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b><br><b><tt>tar -xf ghostscript-</tt></b>#.##<b><tt>.tar</tt></b> +<tr><td> +<tr> <th align=left valign=top>Pipe: + <td> + <td><b><tt>gzip -d -c ghostscript-</tt></b>#.##<b><tt>.tar.gz | tar -xf -</tt></b> +<tr><td> +<tr> <th align=left valign=top>GNU <b><tt>tar</tt></b>: + <td> + <td><b><tt>tar -zxf ghostscript-</tt></b>#.##<b><tt>.tar.gz</tt></b> +<tr><td> +<tr> <th align=left valign=top><b><tt>pkunzip</tt></b>: + <td> + <td><b><tt>pkunzip -d gs</tt></b>###<b><tt>sr1.zip</tt></b><br><b><tt>pkunzip -d gs</tt></b>###<b><tt>sr2.zip</tt></b><br>... +<tr><td> +<tr> <th align=left valign=top><tt>unzip</tt>: + <td> + <td><b><tt>unzip gs</tt></b>###<b><tt>src.zip</tt></b> +</table></blockquote> + +<p> +All the Ghostscript source files are now in subdirectories of the gs +directory. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Source subdirectories</font><hr> +<tr> <th valign=bottom align=left>Subdirectory + <td> + <th valign=bottom align=left>Contents +<tr> <td colspan=5><hr> +<tr> <td><b><tt>src/</tt></b> + <td> + <td>C source code and makefiles +<tr> <td><b><tt>lib/</tt></b> + <td> + <td>PostScript files and scripts used when running Ghostscript +<tr> <td><b><tt>doc/</tt></b> + <td> + <td>Documentation +<tr> <td><b><tt>man/</tt></b> + <td> + <td>Unix <b><tt>man</tt></b> pages +<tr> <td><b><tt>examples/</tt></b> + <td> + <td>Sample PostScript files +</table></blockquote> + +<h3><a name="Unpack_libraries"></a>How to unpack the third-party libraries</h3> + +<p> +The Ghostscript makefiles expect to find the JPEG, PNG, and zlib source code +in specific subdirectories of the <b><tt>gs</tt></b> directory, and this +means you must pay careful attention to unpacking the source code for these +packages. Use the same method for all of them, no matter how they're +packaged: + +<ol> +<li>Make the gs directory current. +<li>Unpack the archive file, creating a subdirectory (which will include a +version number). +<li>Whatever the subdirectory's original name, rename it to the versionless +name shown just below. +</ol> + +<p> +If you're uncertain how to unpack an archive, review the sections on <a +href="#Tarfiles">compressed tar files</a> and <a href="#Zipfiles">zip +files</a>. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">3d-party software subdirectories</font><hr> +<tr> <th valign=bottom align=left>Package + <td> + <th valign=bottom align=left>Possible<br>original name + <td> + <th valign=bottom align=left>Rename to +<tr> <td colspan=5><hr> +<tr> <td>JPEG + <td> + <td><b><tt>./jpeg-6b</tt></b> + <td> + <td><b><tt>./jpeg</tt></b> +<tr> <td>PNG + <td> + <td><b><tt>./libpng-</tt></b>#.## + <td> + <td><b><tt>./libpng</tt></b> +<tr> <td>zlib + <td> + <td><b><tt>./zlib-</tt></b>#.#.# + <td> + <td><b><tt>./zlib</tt></b> +</table></blockquote> + +<hr> + +<h2><a name="Makefile_overview"></a>How to prepare the makefiles</h2> + +<p> +The Ghostscript makefiles are very large and complex in order to deal with +the diverse requirements of all the different systems where they may be +used. + +<p> +New with this release is support for the GNU autoconf tool for generating +an automatic configuration script. If you're on unix or a related system +that supports unix shell scripts, this is the easiest option to use. +Simply type: + +<blockquote> +<tt>./configure</tt> +</blockquote> + +from the top level of the ghostscript source directory. It should configure +itself based on what's available on your system, warn you of any missing +dependencies, and generate a Makefile. At this point you can skip to the +section <a href="#Invoke_make">invoking make</a> below. Note that the +autoconfiguration option is only available with the unix .tar distribution +of the source. + +<p> +If your system doesn't support the configure script or you don't wish to +use it, you can use the traditional ghostscript makefile system, editing +the options by hand to match your system as described below. +Fortunately, the only makefiles you're likely to want to change are +relatively small ones containing platform-specific information. + + +<blockquote><a name="Platform-specific_makefiles"></a><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-specific makefiles</font><hr> +<tr> <th align=left>Makefile + <td> + <th align=left>Used for +<tr> <td colspan=3><hr> +<tr> <td><b><tt>bcwin32.mak</tt></b> + <td> + <td>MS Windows with Borland/Inprise compilers +<tr> <td><b><tt>msvc32.mak</tt></b> + <td> + <td>MS Windows with Microsoft Visual C++ version 4 to 7. +<tr> <td><b><tt>openvms.mak</tt></b> + <td> + <td>OpenVMS +<tr> <td><b><tt>os2.mak</tt></b> + <td> + <td>OS/2 with the gcc/emx compiler +<tr> <td><b><tt>unix-gcc.mak</tt></b> + <td> + <td>Unix with gcc +<tr> <td><b><tt>unixansi.mak</tt></b> + <td> + <td>Unix with ANSI C compilers other than gcc +<tr> <td><b><tt>watc.mak</tt></b> + <td> + <td>DOS with Watcom compilers +<tr> <td><b><tt>watcw32.mak</tt></b> + <td> + <td>MS Windows with Watcom compilers +<tr> <td> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-independent makefiles</font><hr> +<tr> <td><b><tt>contrib.mak</tt></b> + <td> + <td>Contributed device drivers +<tr> <td><b><tt>devs.mak</tt></b> + <td> + <td>Maintained device drivers +<tr> <td><b><tt>gs.mak</tt></b> + <td> + <td>Documentation and miscellany +<tr> <td><b><tt>int.mak</tt></b> + <td> + <td>Main makefile for the PostScript & PDF interpreter +<tr> <td><b><tt>jpeg.mak</tt></b> + <td> + <td>JPEG library +<tr> <td><b><tt>lib.mak</tt></b> + <td> + <td>Graphics engine +<tr> <td><b><tt>libpng.mak</tt></b> + <td> + <td>PNG library +<tr> <td><b><tt>version.mak</tt></b> + <td> + <td>Version and release date +<tr> <td><b><tt>zlib.mak</tt></b> + <td> + <td>zlib library +</table></blockquote> + +<p> +Since these files change from one Ghostscript version to another, sometimes +substantially, and since they all include documentation for the various +options, here we don't duplicate most of that documentation: we recommend +strongly that you review the entire makefile specific for your operating +system and compiler before building Ghostscript. + +<h3><a name="Preparing_makefiles"></a>Changes for your environment</h3> + +<p> +You must edit the platform-specific makefile to change any of these: + +<ul> +<li>The name of the makefile itself (<b><tt>MAKEFILE</tt></b> macro) +<li>The locations to install Ghostscript files (<b><tt>prefix</tt></b> etc.) +<li>The default search paths for the initialization and font files +(<b><tt>GS_LIB_DEFAULT</tt></b> macro) +<li>The debugging options (<b><tt>DEBUG</tt></b> and <b><tt>TDEBUG</tt></b> +macros) +<li>Which optional features to include (<b><tt>FEATURE_DEVS</tt></b>) +<li>Which device drivers to include (<b><tt>DEVICE_DEVS</tt></b> and +<b><tt>DEVICE_DEVS</tt></b>{<em>1--20</em>} macros) +<li>Default resolution parameters for some printer drivers +(<b><tt>devs.mak</tt></b> or <b><tt>contrib.mak</tt></b>, whichever defines +the driver) + +</ul> + +<p> +The <a href="#Platform-specific_makefiles">platform-specific makefiles</a> +include comments describing all these except the +<b><tt>DEVICE_DEVS</tt></b> options. These are described in +<b><tt>devs.mak</tt></b> and <b><tt>contrib.mak</tt></b>, even though the +file that must be edited to select them is the <a +href="#Platform-specific_makefiles">platform-specific makefile</a>. + +<p> +Some platform-specific options are described in the sections for individual +platforms. See the "Options" section near the beginning of the relevant +makefile for more information. + +<h3><a name="Features_and_devices"></a>Selecting features and devices</h3> + +<p> +You may build Ghostscript with any of a variety of features and with any +subset of the available device drivers. The complete list of features is +in a comment at the beginning of <b><tt>gs.mak</tt></b>, and the complete +list of drivers in comments at the beginning of <b><tt>devs.mak</tt></b> +and <b><tt>contrib.mak</tt></b>. To find what devices a platform-specific +makefile selects to include in the executable, look in it for all lines of +the form + +<blockquote> +<b><tt>FEATURE_DEVS=</tt></b><em>{list of features}</em><br> +<b><tt>DEVICE_DEVS</tt></b>*<b><tt>=</tt></b><em>{list of devices}</em> +</blockquote> + +<p> +For example, if the makefile has + +<blockquote><b><tt> +FEATURE_DEVS=$(PSD)level2.dev +</tt></b></blockquote> + +<p> +indicating that only the PostScript Level 2 facilities should be included, +you might make it + +<blockquote><b><tt> +FEATURE_DEVS=$(PSD)level2.dev $(PSD)pdf.dev +</tt></b></blockquote> + +<p> +to add the ability to interpret PDF files. (In fact, +<b><tt>FEATURE_DEVS</tt></b> in the current Unix makefiles already includes +<b><tt>$(PSD)pdf.dev</tt></b>.) The Unix makefile also defines + +<blockquote><b><tt> +DEVICE_DEVS=$(DD)x11.dev +</tt></b></blockquote> + +<p> +indicating that the X Windows driver should be included, but since +platform-specific makefiles as distributed normally include many of the +possible features and drivers, you will probably rather remove from the +makefile the features and drivers you don't want. It does no harm to +include unneeded features and devices, but the resulting executable will be +larger than needed. + +<p> +You may edit the <b><tt>FEATURE_DEVS</tt></b> line to select or omit any of +the features listed near the beginning of <b><tt>gs.mak</tt></b>, and the +<b><tt>DEVICE_DEVS</tt></b>* lines to select or omit any of the device +drivers listed near the beginning of <b><tt>devs.mak</tt></b> and +<b><tt>contrib.mak</tt></b>. The first device listed in the definition of +<b><tt>DEVICE_DEVS</tt></b> becomes the default device for this executable; +see the usage documentation for <a href="Use.htm#Output_device">how to +select an output device</a> at run time using the +<a href="Use.htm#DEVICE_switch"><b><tt>-sDEVICE=</tt></b></a> switch. If +you can't fit all the devices on a single line, you may add lines defining + +<blockquote> +<b><tt>DEVICE_DEVS1=$(DD)</tt></b><em>{dev11}</em><b><tt>.dev</tt></b> ... <b><tt>$(DD)</tt></b><em>{dev1n}</em><b><tt>.dev</tt></b> +<br><b><tt>DEVICE_DEVS2=$(DD)</tt></b><em>{dev21}</em><b><tt>.dev</tt></b> ... <b><tt>$(DD)</tt></b><em>{dev2n}</em><b><tt>.dev</tt></b> +</blockquote> + +<p> +etc., up to <b><tt>DEVICE_DEVS15</tt></b>. Don't use continuation lines -- +on some platforms they don't work. + +<p> +Note that if you want to include a driver named <em>xxx</em>, you must put +<b><tt>$(DD)</tt></b><em>xxx</em><b><tt>.dev</tt></b> in +<b><tt>DEVICE_DEVS</tt></b>*. Similarly, if you want to include a feature +related to the PostScript or PDF language interpreters (PostScript level +1 .. 3, or other language features such as the ability to read EPSF files or +TrueType font files), you must represent it as +<b><tt>$(PSD)</tt></b><em>xxx</em><b><tt>.dev</tt></b>. If you are linking +only the graphics library -- not the language interpreter(s) -- with an +application and want to include optional graphics library features such as +CIE color, you represent them as +<b><tt>$(GLD)</tt></b><em>xxx</em><b><tt>.dev</tt></b>. + +<h4><a name="Precompiled_data"></a>Precompiled run-time data</h4> + +<p> +Ghostscript normally reads a number of external data files at run time: +initialization files containing PostScript code, fonts, and other resources +such as halftones. By changing options in the top-level makefile for the +platform, you can cause some of these files to be compiled into the +executable: this simplifies installation, improves security, may reduce +memory requirements, and may be essential if you are planning on putting +Ghostscript into ROM. + +<p> +To compile the initialization files (<b><tt>lib/gs_init.ps</tt></b>, etc.) +into the executable, change the <b><tt>0</tt></b> to a <b><tt>1</tt></b> in +the line + +<blockquote><b><tt> +COMPILE_INITS=0 +</tt></b></blockquote> + +<p> +To compile fonts into the executable, see <a +href="Fonts.htm#Precompiling">Precompiling fonts</a>. + +<p> +To compile threshold-array halftones into the executable, see the "Compiled +halftone" section of <b><tt>int.mak</tt></b> for a sample makefile fragment, +<b><tt>genht.c</tt></b> for the syntax of halftone data files, and +<b><tt>lib/ht_ccsto.ps</tt></b> for a sample data file. Note that even +though the data files use PostScript syntax, compiled halftones do not +require the PostScript interpreter and may be used with the graphics library +alone. + +<h4><a name="GNU_readline"></a>GNU readline</h4> + +<p> +GNU Ghostscript distributions include support for GNU readline, but this +is not officially supported at this time. We will, however, welcome bug +fixes or updates, and distribute them with subsequent releases. + +<h3><a name="Makefile_setup"></a>Setting up "makefile"</h3> + +<p> + +After going through the steps just described to <a href="#Unpack">unpack +the +sources</a>, make any desired <a href="#Preparing_makefiles">changes to +the +makefiles</a>, and unpack or create links to the <a +href="#Unpack_libraries">third party libraries</a>, as the final step in +preparing to build Ghostscript you must usually associate the name +"<b><tt>makefile</tt></b>" with the correct makefile for your environment so +the <b><tt>make</tt></b> command can find it. See the section on your +particular platform for how to do that if necessary. + +<h3><a name="Invoke_make"></a>Invoking "make"</h3> + +<dl> +<dt><b><tt>make</tt></b> +<dd>Builds Ghostscript without debugging options. +</dl> + +<dl> +<dt><a name="Debugging"></a><b><tt>make debug</tt></b> +<dd>Builds Ghostscript with debugging options and additional internal error +checks. The program will be somewhat larger and slower, but it will behave +no differently unless you actually turn on debugging options at execution +time with the <b><tt>-DDEBUG</tt></b> or +<a href="Use.htm#Debugging"><b><tt>-Z</tt></b> command line switches</a> +described in the usage documentation. +</dl> + +<dl> +<dt><b><tt>make pg</tt></b> +<dd>On Unix platforms, builds with the <b><tt>-pg</tt></b> compiler +switch, creating an executable for time profiling. +</dl> + +<dl> +<dt><b><tt>make begin</tt></b> +<dd>On PC platforms, attempts a quick and dirty compilation of all the +<b><tt>.c</tt></b> files in the current directory. See the +<a href="#Make_begin">more detailed explanation</a>. +</dl> + +<dl> +<dt><b><tt>make install</tt></b> +<dd>After building, installs the Ghostscript executables, support files, +and documentation, but does <b><em>not</em></b> install fonts. See the +<a href="Install.htm">installation documentation</a>. +</dl> + +<dl> +<dt><b><tt>make clean</tt></b> +<dd>Deletes all the files created by the build process (relocatables, +executables, and miscellaneous temporary files). If you've built an +executable and want to save it, move it first to another place, because +"<b><tt>make clean</tt></b>" deletes it. +</dl> + +<p> +<b><em>Note:</em></b> on most platforms some of these simple instructions don't +quite work in one way or another. Read the section on your specific +platform. + +<h3><a name="Cross-compiling"></a>Cross-compiling</h3> + +<p> +If you are compiling Ghostscript on machines <b>X1</b> ... <b>X</b><em>n</em> with +cross-compilers that generate code for machine <b>Y</b>, you must first +perform several extra steps on some machine <b>Z</b> (not necessarily of the +same type as either <b>X</b><em>i</em> or <b>Y</b>). First of all, choose a makefile +appropriate for <b>Z</b> and edit it to reflect the run-time options you +wish to include (<b><tt>FEATURE_DEVS</tt></b>, <b><tt>DEVICE_DEVS*</tt></b>, +and any other relevant options), just as for non-cross-compilation. + +<p> +If <b>Z</b> runs Unix, perform the following steps: +<ol> +<li>On <b>Z</b>, +<blockquote> +<b><tt>make clean</tt></b><br> +<b><tt>make obj/arch.h obj/genconf obj/echogs</tt></b> +</blockquote> + +<li>Edit <b><tt>obj/arch.h</tt></b> to reflect the architecture of <b>Y</b>. + +<li>On <b>Z</b>, +<blockquote> +<b><tt>make CC=: CCLD=:</tt></b> +</blockquote> + +<li>Copy the files <b><tt>obj/*.h</tt></b> from <b>Z</B> to the directory on +each <b>X</b><em>i</em> that will be used for compilation. + +<li>Extract from the file <b><tt>obj/ldt.tr</tt></b> (on <b>Z</b>) the list +of <b><tt>.o</tt></b> files that will be linked: this gives the list of +source files that must be compiled. + +<li>Do the compilations on <b>X</b><em>i</em>. +</ol> + +<p> +If <b>Z</b> runs some version of Microsoft Windows with Microsoft Visual +C++, use the following steps. <em>NOTE: We have not actually tested +this.</em> + +<ol> +<li>On <b>Z</b>, +<blockquote> +<b><tt>nmake clean</tt></b><br> +<b><tt>nmake obj\arch.h obj\genconf.exe obj\echogs.exe</tt></b> +</blockquote> + +<li>Edit <b><tt>obj\arch.h</tt></b> to reflect the architecture of <b>Y</b>. + +<li>On <b>Z</b>, +<blockquote> +<b><tt>nmake CC=rem LINK=rem</tt></b> +</blockquote> + +<li>Copy the files <b><tt>obj\*.h</tt></b> from <b>Z</B> to the directory on +each <b>X</b><em>i</em> that will be used for compilation. + +<li>Extract from the file <b><tt>obj\ldt.tr</tt></b> (on <b>Z</b>) the list +of <b><tt>.obj</tt></b> files that will be linked: this gives the list of +source files that must be compiled. + +<li>Do the compilations on <b>X</b><em>i</em>. +</ol> + +<hr> + +<h2><a name="PC_build"></a>How to build Ghostscript from source (PC version)</h2> + +<p> +All Ghostscript builds in PC (DOS and MS Windows) environments are 32- or +64-bit: 16-bit builds are not supported. The relevant makefiles are + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">PC makefiles</font><hr> +<tr> <th align=left>Makefile + <td> + <th align=left>Construction tools + <td> + <th align=left>For environment +<tr> <td colspan=5><hr> +<tr> <td valign=top><b><tt>bcwin32.mak</tt></b> + <td> + <td valign=top><a href="#Borland_build">Borland/Inprise C++ 4.x</a> + <td> + <td valign=top>32-bit MS Windows 3.1 + Win32s, 95, 98, NT +<tr> <td valign=top><b><tt>msvc32.mak</tt></b> + <td> + <td valign=top><a href="#Microsoft_build">Microsoft Visual C++ 4 to 7</a> + <td> + <td valign=top>MS Windows 32-bit +<tr> <td valign=top><b><tt>watc.mak</tt></b> + <td> + <td valign=top><a href="#Watcom_build">Watcom C/386 or C++</a> + <td> + <td valign=top>MS-DOS 32-bit (extended) +<tr> <td valign=top><b><tt>watcw32.mak</tt></b> + <td> + <td valign=top><a href="#Watcom_build">Watcom C/386 or C++</a> + <td> + <td valign=top>MS Windows 32-bit +<tr> <td valign=top><b><tt>unix-gcc.mak</tt></b> + <td> + <td valign=top><a href="#Cygwin32_build">Cygnus gcc</a> + <td> + <td valign=top><a href="http://sourceware.cygnus.com/cygwin/">Cygnus gnu-win32</a> +</table></blockquote> + +<p> +To build Ghostscript you need MS-DOS version 3.3 or later and +Borland/Inprise C/C++ (4.0 or later); Microsoft Visual C++ (version 4.0 or +later); Watcom C/386 (version 8.5 or later) or C++ (any version); or the +free djgpp + go32 development system. The options in the makefiles are +chosen to strike a balance between RAM consumption and likely usefulness. +If you run <b><tt>make</tt></b> in directory <em>{dir}</em>, the default +configuration generates an executable that assumes the Ghostscript +initialization and font files are in directory +<em>{dir}</em><b><tt>\lib</tt></b>. + +<p> +Note that the <b><tt>make</tt></b> program supplied with each PC compiler +has a different name. We refer to this program generically as +<b><tt>make</tt></b> everywhere else in this document, but you will find the +correct name for each compiler in the relevant section below that discusses +that compiler. + +<p> +You must have <b><tt>COMMAND.COM</tt></b> in your path to build Ghostscript. +After making the changes needed to choose features and devices to build into +the executable, you must create the directory where the compiler will do its +work (normally the <b><tt>obj</tt></b> subdirectory of the current +directory) and the directory where the compiled code will be placed +(normally the <b><tt>bin</tt></b> subdirectory). Then to build the +Ghostscript executable all you need do is give the <b><tt>make</tt></b> +command. + +<p><a name="Make_begin"></a> +A special make target "<b><tt>begin</tt></b>" attempts to compile all the +<b><tt>.c</tt></b> files in the current directory. Some of these +compilations will fail, but the ones that succeed will go considerably +faster because they don't individually pay the overhead of starting up the +compiler. So a good strategy for building the executable for the first +time, or after changing a widely used <b><tt>.h</tt></b> file, is to do the +fast compilation of everything possible, then the controlled compilation of +everything that failed in the first step: + +<blockquote><b><tt> +make begin<br> +make +</tt></b></blockquote> + +<p> +<b><em>Note:</em></b> if you unpack the Ghostscript sources on a DOS or MS Windows +system from a Unix tar file, the unpacked files have linefeed alone as the +line terminator (the Unix convention) instead of carriage return + linefeed +(the Microsoft convention), which may make the C compiler unhappy. One +simple way to fix this, if you have the InfoZIP <b><tt>zip</tt></b> and +<b><tt>unzip</tt></b> programs, is + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <td><b><tt>zip -l CVTEMP.zip *.bat *.c *.h *.def *.rc</tt></b> + <td> + <td>(Letter "l", not the digit "1") +<tr> <td><b><tt>unzip -o CVTEMP.zip</tt></b> + <td> + <td>(Rewrite all the same files correctly) +<tr> <td><b><tt>del CVTEMP.zip</tt></b> + <td> + <td>(Delete the temporary zip file) +</table></blockquote> + +<h3><a name="Borland_build"></a>Borland/Inprise environment</h3> + +<p> +To compile Ghostscript with the Borland/Inprise environment (hereafter +referred to as just "Borland"), you need Borland C++ (version 4.0 or later); +specifically the compiler, <b><tt>make</tt></b> utility, and linker. You +also need either the Borland assembler (version 1.0 or later) or the +Microsoft assembler (version 4.0 or later). + +<p> +To create "<b><tt>makefile</tt></b>", give the command + +<blockquote><b><tt> +echo !include "src\bcwin32.mak" >makefile +</tt></b></blockquote> + +<p> +To run the <b><tt>make</tt></b> program, give the commmand + +<blockquote><b><tt> +make +</tt></b></blockquote> + +<p> +Besides the source files and the makefiles, you need: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <td>*<b><tt>.bat</tt></b> + <td> + <td>(a variety of batch files used in the build process) +</table></blockquote> + +<p> +Comments in the makefiles describe the configuration parameters. If your +configuration is different from the following, you should definitely read +those comments and see if you want or need to change any of this: +<ul> +<li>The compiler files are in <b><tt>C:\BC</tt></b> and its subdirectories. +<li>You are using the Borland assembler <b><tt>tasm</tt></b>. +<li>You want an executable that will run on any 32-bit PC-compatible, +regardless of processor type (80386, 80486, Pentium, or compatible) and +regardless of whether a math coprocessor (80x87) is present -- an issue only +with 80386 processors. +</ul> + +<p> +<b>Notes</b> + +<ul> +<li>A user reports that the Borland C++ 4.00 with patch 1-6 doesn't +produce a working executable of Ghostscript 5.03. We can't test this, +since we no longer have this compiler. + +<li>Borland C++ 4.5 has a bug or bugs that cause(s) the 32-bit Windows +executable to crash if you give any @-files on the command line. Among +other things, this makes the uniprint driver unusable, because it references +the .upp configuration files this way. This problem may possibly be fixed +by one or more of the patch files on + +<blockquote> +<a href="ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/" +class="offsite">ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/</a> +</blockquote> + +<li>Borland C++ 4.52 has a bug that causes the 32-bit Windows executable to +fail during startup. Borland (now Inprise) provides a patch for this bug +in + +<blockquote> +<a +href="ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/bc45xp1.zip" +class="offsite">ftp://ftp.borland.com/pub/borlandcpp/devsupport/patches/bc4_5/bc45xp1.zip</a> +</blockquote> + +<li>Borland C++ 5.0 and 5.01 have a code generator bug that generates +incorrect code for the construct <b><tt>!file_is_valid()</tt></b>. Do not +attempt to compile Ghostscript with these compilers. If you want to report +this bug to Borland, send them the result of compiling +<b><tt>ziodev.c</tt></b> and tell them to look at the code generated for +<b><tt>file_is_valid()</tt></b> and <b><tt>!file_is_valid()</tt></b>. We +don't know whether Borland C++ 5.02 still has this problem. + +<li>When building for the MS Windows Win32s environment, the make +process will stop after it has created <b><tt>genarch.exe</tt></b>. +You should then run "<b><tt>_genarch.bat</tt></b>", wait until +<b><tt>genarch</tt></b> has finished and then exit MS Windows. Then type +"<b><tt>make</tt></b>" again to restart the make process. + +</ul> + +<h3><a name="Microsoft_build"></a>Microsoft Environment</h3> + +<p> NOTE: We have received reports that the Microsoft Visual C++ 5.0 and 6.0 compilers + produce incorrect code for Ghostscript version 6.0 and later, from the same + source code that compiles and runs correctly with other compilers. In spite + of these reports, several members of the Artifex staff use version 6.0 of the + MSVC compiler on a regular basis and we have not found any problems. You may + also want to try out the <a href="#IntelWin32_build">Intel C/C++ compiler</a>, + which can be integrated into the Microsoft Visual C++ environment. +<p>To compile Ghostscript using the Microsoft environment, you need Microsoft + Visual C++ 4.0 or later with its associated "<b><tt>nmake</tt></b>" utility + and linker. +<h4><a name="Using_the_MS_Development_Environment"> </a>Using Microsoft Developer + Studio</h4> +<p>Microsoft Developer Studio is the Microsoft Visual C++ integrated development + environment. To use it to build Ghostscript: it is first necessary to create + a new workspace/project. To create the workspace/project, open Microsoft Developer + Studio and select <b><tt>File/New</tt></b>. In the dialog window that is opened, + select 'Makefile' as the type of project. Specify a name for the project. (Microsoft + does not allow special characters such as ., *, ?, /, or \ as part of project + names.) Also specify the location of the master directory for your Ghostscript + files. Then select OK. +<p> In the next dialog window, specify the build command line as <b><tt>nmake + /f src/msvc32.mak DEVSTUDIO= </tt></b> Note the value for <b><tt>DEVSTUDIO</tt></b> + is empty. Then select <b><tt>Finish</tt></b>. +<p>At this point, it is now possible to build Ghostscript using Developer Studio. + To build, press F7 or select the build icon. Note: multiple warnings will also + given about things like double to float data conversions. Ignore them. We have + not found a way to create a single set of sources that does not create warnings + with the different compilers and operating systems supported by Ghostscript. + We are working to reduce the number of the warning messages. +<p>To run Ghostscript inside of Developer Studio, it is necessary to specify the + name of the executable program . Select <b><tt>Project/Settings</tt></b>. Select + the <b><tt>Debug</tt></b> tab. Then for <b><tt>Executable for debug session:</tt></b> + specify <b><tt>bin/gswin32.exe</tt></b> +<p>To use all of the features of Microsoft Developer Studio for debugging, and + modifying Ghostscriptt, you need to finish the remaining steps. +<p>To add the Ghostscript DLL to the project, select <b><tt>Project/Settings</tt></b>. + Select the <b><tt>Debug</tt></b> tab. Change the <b><tt>Category</tt></b> to + <b><tt>Additional DLLs</tt></b>. Then specify <b><tt>bin/gsdll32.dll</tt></b>. +<p> To specify the Ghostscript program arguments, select <b><tt>Project/Settings</tt></b>. + Select the <b><tt>Debug</tt></b> tab. Change the <b><tt>Category</tt></b> to + <b><tt>General</tt></b>. Then specify the desired program arguments. For example, + specifying: <b><tt>examples/tiger.ps</tt></b> will result in the tiger example + file being displayed when Ghostscript is executed. . +<p> A final note: it is possible to create a command file (build.bat) to be used + for the build command line. If many different workspaces/projects are created, + it is simpler to use a build batch command file rather than retyping the build + command line for each new project. Here is an example used by one of Artifex's + staff members. This file is one line: +<blockquote><b><tt> nmake -f src/msvc32.mak DEVSTUDIO= DEBUG=1 GS_LIB_DEFAULT="./lib/;./font;$(GSROOTDIR)/lib;$(AROOTDIR)/fonts" + </tt></b></blockquote> +<p> The <b><tt>DEBUG=1</tt></b> enables many debugging features built into Ghostscript. + Please note the double quotes around the value for <b><tt>GS_LIB_DEFAULT</tt></b> + and the addition of <b><tt>./lib;./fonts;</tt></b> to its definition. This uses + the local (within the project) copy of the <b><tt>lib</tt></b> and <b><tt>fonts</tt></b> + directories. This is convenient if any changes need to be made in these directories. +<h4><a name="Using_the_command_line"></a>Using the command line</h4> +<p>Ghostscript can be made using either the DOS shell or one one of the various + command line shells made for Windows. +<p>In order for the makefiles to work properly, two items may have to be changed. + If you are not using version 6.x then before building, in <b><tt>src\msvc32.mak</tt></b> + find the line "<b><tt>MSVC_VERSION=6</tt></b>" and change it to "<b><tt>MSVC_VERSION=4</tt></b>", + "<b><tt>MSVC_VERSION=5</tt></b>" or "<b><tt>MSVC_VERSION=7</tt></b>". +<p>In some cases the location of the Microsoft Developer Studio, needs to be changed. + The location of Microsoft Developer Studio is defined by the value of <b><tt>DEVSTUDIO</tt></b>. + There are four different definitions of <b><tt>DEVSTUDIO</tt></b> in src\msvc32.mak. + There is one for each of the currently supported versions of Microsoft Visual + C++ (4, 5, 6 and 7). +<p>The normal installation process for Microsoft Visual C++ includes setting the + location of the Microsoft Visual C++ executables (cl.exe, link.exe, nmake.exe, + rc.exe) in your PATH definition and the LIB and INCLUDE environment variables + are set to point to the Microsoft Visual C++ directories. If this is true then + the value for <b><tt>DEVSTUDIO</tt></b> can be changed to empty. I.e. <b><tt>DEVSTUDIO=</tt></b> +<p> If PATH, LIB, and INCLUDE are not correctly set then the value for <b><tt>DEVSTUDIO</tt></b> + needs to be defined. For example, for version 6.0, the default definition for + the location for the Microsoft Developer Studio is: <b><tt>DEVSTUDIO=C:\Program + Files\Microsoft Visual Studio </tt></b> If the path to Microsoft Developer Studio + on your system differs from the default then change the appropriate definition + of <b><tt>DEVSTUDIO</tt></b>. (Remember that there is a separate definition + of <b><tt>DEVSTUDIO</tt></b> for each version of MSVC, so be sure to change + the correct definition.) +<p>To run the <b><tt>make</tt></b> program, give the command +<blockquote><b><tt> +nmake -f src\msvc32.mak +</tt></b></blockquote> + +<p> +Rather than changing src/msvc32.mak, these values can be specified on the make +command line, I.e. + +<blockquote><b><tt> nmake -f src\msvc32.mak MSVC_VERSION=6 DEVSTUDIO="C:\Program Files\Microsoft Visual Studio" <br> +nmake -f src\msvc32.mak MSVC_VERSION=7 DEVSTUDIO="C:\Program Files\Microsoft Visual Studio .NET" + </tt></b></blockquote> + +<p> Note that double quotes have been added around the path for <b><tt>DEVSTUDIO</tt></b> + due to the spaces in the path value. +<p> +This command line can also be put into a batch file. + +<p> You may get warning messages during compilation about <b><tt>/QI0f</tt></b> + being an undefined switch, or the message "dwmain32.def: EXETYPE not supported + for platform; ignored" during linking. Multiple warnings will also given about + things like double to float data conversions. Ignore them. We have not found + a way to create a single set of sources that does not create warnings with the + different compilers and operating systems supported by Ghostscript. +<p> +The Microsoft VC++ 5.0 compiler locks up when compiling +<b><tt>gxi12bit.c</tt></b> with <b><tt>/O2</tt></b>. Compile this file +without <b><tt>/O2</tt></b>. + +<p> The Microsoft VC++ 5.0 compiler produces a non-working executable if compiling + without stack checking. Don't change the setting <b><tt>TDEBUG=1</tt></b> in + <b><tt>msvc32.mak</tt></b>. + + +<h4><a name="Self-extracting_executables"></a>Making self-extracting executables</h4> + +<p> +You can build self-extracting Windows executables of Ghostscript. (This is +not needed to use Ghostscript.) Currently this requires both the +Borland/Inprise and the Microsoft compilers, and also two pieces of +third-party software: + +<ul> +<li><b><tt>WinZipSE</tt></b>, available from <a +href="http://www.winzip.com/winzipse.html" +class="offsite">http://www.winzip.com/winzipse.html</a>. +This is not free. +<li><b><tt>zip</tt></b>, available from <a +href="http://www.info-zip.org/pub/infozip/Zip.html" class="offsite"> +http://www.info-zip.org/pub/infozip/Zip.html</a>. This is free. +</ul> + +<p> +You will have to edit <b><tt>src/winint.mak</tt></b> to define +<b><tt>WINZIPSE_XE</tt></b> and <b><tt>ZIP_XE</tt></b> respectively as the +path names of these programs. See <a href="Release.htm">Release.htm</a> for +the detailed procedure. + +<h3><a name="Watcom_build"></a>Watcom environment</h3> + +<p> +Because of limitations in the way that Watcom implemented their +<b><tt>wmake</tt></b> program, you must run the Watcom tools under MS +Windows, even if you are generating a DOS executable. This is very +unfortunate, and there is no good technical reason for it, but we were +unable to persuade Watcom (now Powersoft) to do anything about it. + +<p> +To use the Watcom compiler, add to <b><tt>AUTOEXEC.BAT</tt></b> the line +"<b><tt>set DOS4G=quiet</tt></b>". Check that +<b><tt>AUTOEXEC.BAT</tt></b> also contains a line of the form +"<b><tt>set WATCOM=</tt></b><em>{wcdir}</em>" where <em>{wcdir}</em> is +the directory where you installed the Watcom tools, and that the setting of +<b><tt>PATH</tt></b> includes <em>{wcdir}</em><b><tt>\binnt</tt></b> (or +<b><tt>%WATCOM%\binnt</tt></b>) before <em>{wcdir}</em><b><tt>\binw</tt></b> +(or <b><tt>%WATCOM%\binw</tt></b>). Then to create +"<b><tt>makefile</tt></b>": + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <th align=left>For + <td> + <th align=left>Give the command +<tr> <td colspan=3><hr> +<tr> <td>DOS + <td> + <td nowrap><b><tt>echo !include src\watc.mak >makefile</tt></b> +<tr> <td>MS Windows + <td> + <td nowrap><b><tt>echo !include src\watcw32.mak >makefile</tt></b> +</table></blockquote> + +<p> +Before compiling, change the definition of the <b><tt>WCVERSION</tt></b> +macro in the makefile (<b><tt>watc.mak</tt></b> or +<b><tt>watcw32.mak</tt></b>) to the version of the Watcom compiler you are +using. This is necessary to handle some minor incompatibilities between +versions. + +<p> +To run the <b><tt>make</tt></b> program, give the commmand + +<blockquote> +<b><tt>wmake -u</tt></b> +</blockquote> + +<p> +For information on using the GNU <b><tt>make</tt></b> program with the +Watcom compiler to build MS-DOS executables, which avoids the limitations in +<b><tt>wmake</tt></b>, see <a href="New-user.htm#MS-DOS">here</a>. + +<h3><a name="Cygwin32_build"></a>Cygwin32 gcc</h3> + +<p> +A user reports that it is possible to compile Ghostscript for MS Windows NT +using the Cygwin32 gcc compiler, GNU <b><tt>make</tt></b>, and the +<b><tt>unix-gcc.mak</tt></b> makefile, with only two small source code +changes: + +<ul> +<li>Add "<b><tt>b</tt></b>" to the call to <b><tt>fopen</tt></b> in <b><tt>gp_open_scratch</tt></b> +<li>Mirror the <b><tt>gp_ntfs</tt></b> logic for <b><tt>gp_file_name_is_absolute</tt></b> +</ul> + +<p> +Information about this compiler and environment is at the Cygnus site: + +<blockquote> +<a href="http://sources.redhat.com/cygwin/">http://sources.redhat.com/cygwin/</a> +</blockquote> + +<p> +Please note that Cygnus's licensing terms aren't quite as liberal about +redistribution as either the GNU +<a href="http://www.gnu.org/copyleft/gpl.html">General Public License</a> +or the Aladdin <a href="Public.htm">Free Public License</a>, so read their +license carefully if you want to redistribute the results of using their +compiler. + +<h3><a name="IntelWin32_build"></a>Intel C/C++ environment</h3> + +<p> +Intel provides a C/C++ compiler that is compatible with the <a +href="#Microsoft_build">Microsoft Visual C++ environment</a>. The main +advantage of this compiler over MSVC 5.0 and 6.0 is that it produces +working code even when all optimizations are enabled and when stack checking +is disabled. + +<p> +To build Ghostscript using the Intel C/C++ compiler, you have to make the +following small changes in the makefiles: + +<ul> +<li>Find and change the second occurrence of +"<b><tt>COMPILE_FULL_OPTIMIZED</tt></b>" to "<b><tt>/O2</tt></b>" in file +<b><tt>msvccmd.mak</tt></b>. <li>Override "<b><tt>TDEBUG</tt></b>", +"<b><tt>COMP</tt></b>", and "<b><tt>COMPAUX</tt></b>" when invoking +<b><tt>nmake</tt></b>. +</ul> + +<p> +More specifically, use "<b><tt>TDEBUG=0</tt></b>" and set both +"<b><tt>COMP</tt></b>" and "<b><tt>COMPAUX</tt></b>" to the full path of +<b><tt>icl</tt></b> (for example +"<b><tt>COMP=C:\intel\compiler45\bin\icl</tt></b>" if the Intel C/C++ +compiler V4.5 was installed to <b><tt>C:\intel</tt></b>). It is suggested +that you use a batch file to launch <b><tt>nmake</tt></b>, since the command +line processes the "<b><tt>=</tt></b>" on its own. Also, you may need to +execute <b><tt>vcvars32.bat</tt></b> and <b><tt>iccvars.bat</tt></b> to +register the proper paths for the compiler, its include files and its +libraries. + +<p> +You can buy or download a 30-day evaluation version of the Intel C/C++ +compiler from Intel's Software Performance Tools web site: + +<blockquote> +<a href="http://www.intel.com/vtune/">http://www.intel.com/vtune/</a> +</blockquote> + +<hr> + +<h2><a name="Mac_build"></a>How to build Ghostscript from source (MacOS version)</h2> + +<h3><a name="MacOS"></a>Traditional MacOS</h3> + +<p> +The Macintosh version of Ghostscript requires the <a href="http://www.metrowerks.com/" +class="offsite">Metrowerks Codewarrior</a> development suite. Download the +<tt>macgs-7xx-src.sit</tt> source archive from the location listed +below. This includes a Codewarrior .mcp project file than can be used to build both +Carbon and CFM versions of the ghostscript shared library component. + +<blockquote> +<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/current/" + +class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/current/</a> +</blockquote> + +<p> +If your system doesn't automatically unpack the source archive, you can +download the gratis <a href="http://stuffit.com/download.html" +class="offsite">Stuffit Expander</a> to open it. + +<p> +This archive includes appropriate versions of the jpeg, zlib and libpng 3rd party +library source for convenience. You must still download the fonts and place them in an +appropriate location, along with the contents of the <tt>lib</tt> directory from the source +archive. + +<p> +Note that since this is just a library component, you will need a front-end application, such as +MacGSView, to actually view or convert postscript and pdf documents. + + +<h3><a name="MacOSX"></a>MacOS X</h3> + +<p> +The unix source distribution (.tar.gz) builds fine on Darwin/MacOS X, +albeit without a display device. You can generally just use the <tt>Makefile</tt> +generated by ./configure or <tt>macosx.mak</tt> as your top-level makefile. +This will allow you to use Ghostscript from the command line as a BSD-layer +tool to rasterize postscript and pdf and convert between +the various formats supported by Ghostscript. + +<p> +There is also a support for building Ghostscript as a framework. This is +a special encapsulated shared library format specific to MacOS X. To build +the framework, copy <tt>macosx.mak</tt> to the top-level directory, rename it to +<tt>makefile</tt> and issue 'make framework' from Terminal.app. This will result +in a <tt>Ghostscript.framework</tt> in the <tt>sobin</tt> directory. It must be +manually copied to /Library/Frameworks/ before applications +can use it. You may need to create the Frameworks/ directory on some systems. + +<p> +Finally, there is a <tt>macos-mcp.mak</tt> makefile that can be +used to set up the Codewarrior shared library component build described +in the section on <a href="#MacOS">Classic MacOS</a> above. + +<p> +To set up the shlib build, download and uncompress the Ghostscript source. +If the archive doesn't contain the 3rd party jpeg, png, and zlib source, +you must download them as described at the beginning of this document and +unpack them under the macgs-###-src directory under the specific names +<tt>jpeg</tt>, <tt>zlib</tt> and <tt>libpng</tt>. You cannot use symlinks as +Codewarrior will not be able to follow them for some of the needed header +files. + +<p> +Copy <tt>src/macos-mcp.mak</tt> to the top-level directory and rename +it <tt>makefile</tt>. Then run 'make' in that directory, either from +within Terminal.app or through Project Builder. This will set up the +generated code required for the build and run a shell script to generate +<tt>ghostscript.mcp.xml</tt>. Launch Metrowerks Codewarrior, and select +'Import Project...' from the File menu, and open the xml project file. +When asked, save the results as <tt>ghostscript.mcp</tt> in the same +directory and you should be ready to build the shared library component. + +</p> +Tradtional ('PPC') applications based on the Code Fragment Manager +will not be able to open the shlib linked with CarbonLib, so two +targets are provided, one with carbon and one without. + +<hr> + +<h2><a name="Unix_build"></a>How to build Ghostscript from source (Unix version)</h2> + +<p> +Before issuing the <b><tt>make</tt></b> command to build Ghostscript, you +have to make some choices, for instance +<ul> +<li>which compiler to use; +<li>what features and devices to include; +<li>whether to use system libraries for PNG and zlib; +<li>and how to handle issues for your particular platform. +</ul> + +<p> +Be sure to check the sections on <a +href="#Tool_specific_issues">tool-</a>, <a +href="#OS_specific_issues">OS-</a>, and <a +href="#Hardware_specific_issues">hardware-</a>specific issues for notes +on your particular platform and compiler. In fact, that is the +<b><em>first</em></b> place to check if you build Ghostscript and it crashes +or produces obviously incorrect results. + +<h3><a name="Multi_architecture_makefile"></a>The multi-architecture makefile</h3> + +<p> +Especially if you are working in a Unix environment with multiple CPU types, +operating systems, and/or C compilers, you may find the file +<b><tt>all-arch.mak</tt></b> useful. This user-contributed file includes +"wrappers" for the Unix makefiles for many different common environments. +The author of this file notes: + +<blockquote> + +<p> +This makefile allows you to execute + +<pre> + make `hostname` +</pre> + +<p> +on any machine on a network, without having to examine the Makefile for a +specific target name. Also, some of the targets in the Makefile incorporate +special changes in compiler options for certain files, to work around +compiler bugs that Ghostscript has been so good at exposing. Having that +special handling written down in a Makefile proves very convenient. + +<p> +I don't do "make install" until I've done + +<pre> + cd ...build-directory.../gs-x.yz + cd lib + ../bin/gs ../examples/tiger.ps +</pre> + +<p> +and verified that the famous tiger can be correctly displayed. Also, the +"make install" step is careful to first remove any existing +<b><tt>$(BINDIR)/gs</tt></b>, then install a new gs there with a hard link +to gs-x.yz. + +<p> +That way, each installation makes gs a synonym for the latest release, +but earlier ones remain in place in case backtracking is needed, which +I've fairly often wanted to do when investigating changed behavior, or +a suspected bug. + +<p> +When I've been experimenting with a new feature, such as GNU readline +support, I change the setting of GS from gs to ngs (new gs), so as not +to break any existing programs by the installation of an experimental +version. + +</blockquote> + +<h3><a name="UNIX_makefile"></a>Setting up "makefile"</h3> + +<p> +The files <b><tt>src/unix</tt></b>*<b><tt>.mak</tt></b> are the makefiles for +Unix platforms, and you choose one based on what compiler you use. To +build Ghostscript, however, you must use the simple command +"<b><tt>make</tt></b>", which must find the file "<b><tt>makefile</tt></b>" +(or "<b><tt>Makefile</tt></b>"). If your system supports symbolic links, +set up "<b><tt>makefile</tt></b>" like this. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <td>GNU gcc: + <td> + <td nowrap><b><tt>ln -s src/unix-gcc.mak makefile</tt></b> +<tr> <td>Non-gcc ANSI C compiler: + <td> + <td nowrap><b><tt>ln -s src/unixansi.mak makefile</tt></b> +</table></blockquote> + +<p> +If your system doesn't support symbolic links, first finish all changes to +the compiler-specific makefile, then make a hard link, omitting the +<b><tt>-s</tt></b> switch. + +<p> +The makefile distributed with Ghostscript selects the following devices +to include in the build: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Devices included as distributed</font><hr> +<tr valign=bottom> + <th align=left>Type + <td> + <th align=left>Devices +<tr> <td colspan=3><hr> +<tr valign=top> <td>Display + <td> + <td>X Windows +<tr valign=top> <td>Printers + <td> + <td>H-P DeskJets, LaserJets, and color DeskJets and PaintJets; Canon BubbleJets +<tr valign=top> <td>File formats + <td> + <td>Group 3 & Group 4 fax; JPEG; PCX; PBM, PGM, PKM, & PPM; TIFF; PostScript images; PNG; distilled PDF, PostScript, and EPS; PCL XL ("PCL 6") +</table></blockquote> + +<p> +The <b><tt>unix</tt></b>*<b><tt>.mak</tt></b> files explicitly compile and +link the JPEG, PNG, and zlib libraries into the executable. If your Unix +system already includes the PNG and zlib libraries -- probably in +<b><tt>/usr/lib/libpng.</tt></b>{<b><tt>a</tt></b>,<b><tt>so</tt></b>} and +<b><tt>/usr/lib/libz.</tt></b>{<b><tt>a</tt></b>,<b><tt>so</tt></b>} -- and +you would rather use those copies, change the definition of +<b><tt>SHARE_LIBPNG</tt></b> and <b><tt>SHARE_ZLIB</tt></b> from 0 to 1 in +the relevant <b><tt>unix</tt></b>*<b><tt>.mak</tt></b> file before +compiling. Note that if you do this, you will get non-debug versions of +these libraries even if you selected <b><tt>DEBUG</tt></b> in the makefile. +At the insistence of some users, we have also provided the ability to do +this with the JPEG library (<b><tt>SHARE_JPEG</tt></b>), but should not use +it: in order to be compatible with Adobe interpreters (which do not follow +the JPEG standard exactly), Ghostscript has to compile the IJG code with +the non-standard definition + +<blockquote><b><tt> +#define D_MAX_BLOCKS_IN_MCU 64 +</tt></b></blockquote> + +<p> +and since shared versions of this library will not have been compiled this +way, you will get errors on some valid PostScript and PDF input files. Note +also that because not all the JPEG library header files that Ghostscript +uses are normally installed in <b><tt>/usr/include</tt></b>, you must have +the source code for this library available even if you set +<b><tt>SHARE_JPEG</tt></b> to 1. + +<p> +If the X11 client header files are located in some directory which your +compiler does not automatically search, you must change the +<b><tt>XINCLUDE</tt></b> macro in the makefile to include a specific +<b><tt>-I</tt></b> switch. See the comment preceding +<b><tt>XINCLUDE</tt></b> in the makefile. + +<p> +Currently Ghostscript is set up to compile and link in a generic Unix +environment. Some Unix environments may require changing the +<b><tt>LDFLAGS</tt></b> macro in the makefile; be sure to check the <a +href="#Unix_build">Unix section</a> for your specific tools, operating +system, and hardware. + +<p> +Ghostscript uses ANSI syntax for function definitions. Building +with pre-ANSI C compilers is no longer supported. + +<h3><a name="Shared_object"></a>Shared object</h3> +To build Ghostscript as a shared object with gcc +(instead of as a single large executable) use: +<pre> + ln -s src/unix-gcc.mak makefile + make so +</pre> +<p> +This will build <b><tt>libgs.so</tt></b> and two programs which use the +shared object, <b><tt>gsx</tt></b> which uses Gtk+ and <b><tt>gsc</tt></b> +which does not. + +<p> +Do not use <tt>make -f src/unix-gcc.mak</tt> because this will +break the recursive make used in building the shared object. +<p> +To install the shared object and these two programs: +<pre> + make soinstall +</pre> +To delete files created by the build process: +<pre> + make soclean +</pre> +<p> +For more details see <a href="../src/unix-dll.mak">unix-dll.mak</a>. + +<h3><a name="Tool_specific_issues"></a>Tool-specific issues</h3> + +<h4><a name="gcc_27x"></a>gcc 2.7.*</h4> + +<p> +Some of the issues in using gcc are very specific to the particular +computer, the particular version of the operating system, and the +particular version of gcc available to you. You can check the version of +gcc with the <b><tt>gcc --version</tt></b> command. + +<p> +An optimizer bug in gcc versions 2.7.0, 2.7.1, and 2.7.2 causes the +compiler to generate incorrect code. The makefile works around this, but +we recommend that if possible you use either an earlier or a later version +of gcc; for instance, gcc 2.5.8, gcc 2.6.3, 2.7.2.1 or later which don't +have this bug. Note, however, that gcc has other problems on some +platforms, so please read the section for your specific platform. + +<h4><a name="GNU_make"></a>GNU make</h4> + +<p> +Current versions of GNU <b><tt>make</tt></b> have no problems, but GNU +<b><tt>make</tt></b> 3.59 can't handle the final linking step in some +cases; if this happens, use the platform's standard <b><tt>make</tt></b>, +typically <b><tt>/bin/make</tt></b>. + +<h3><a name="OS_specific_issues"></a>OS-specific issues</h3> + +<h4><a name="386_Unix"></a>386 Unix</h4> + +<ul> +<li>gcc versions older than 1.38 on Intel 80386 systems do not compile +Ghostscript correctly with the <b><tt>-O</tt></b> option. + +<li>gcc 1.39 under <b><tt>386BSD</tt></b> has a bug that causes +float-to-integer conversions to compile incorrectly, rendering the +executable unusable. + +<li>X11R5 may need "<b><tt>#include <stddef.h></tt></b>" in <b><tt>x_.h</tt></b>. + +<li>Also see regarding <a href="#System_V">System V</a> platforms. +</ul> + +<h4><a name="BSDI"></a>BSDI</h4> + +<ul> + +<li>Use <b><tt>unix-gcc.mak</tt></b> and set<blockquote><b><tt> +STDLIBS=-lm<br> +XINCLUDE=-I/usr/X11R6/include<br> +XLIBDIRS=-L/usr/X11R6/lib<br> +XLIBS=Xt SM ICE Xext X11<br></tt></b></blockquote> + +<li>If you want to use the shared versions of the PNG and zlib libraries, set +<b><tt>SHARE_LIBPNG=1</tt></b> and <b><tt>SHARE_ZLIB=1</tt></b> +as discussed <a href="#UNIX_makefile">previously</a>. + +<li>BSD <b><tt>make</tt></b> uses a different syntax for its +<b><tt>include</tt></b> directive than Ghostscript; +use <b><tt>gmake</tt></b> instead. +</ul> + +<h4><a name="Digital_Unix"></a>Digital Unix (Alpha)</h4> + +<ul> + +<li>Use <b><tt>unixansi.mak</tt></b> for all Digital Unix compilers. + +<li>For versions of Digital Unix before 4.0, set + +<p> +<b><tt>CFLAGS=-std -migrate -Olimit 1000 -g3 -O2 $(XCFLAGS)<br> +LDFLAGS=-lots $(XLDFLAGS)</tt></b> + +<p> +You may be able to omit <b><tt>-g3</tt></b>. For later versions of Digital +Unix, users have reported that the proper flags are + +<p> +<b><tt>CFLAGS=-std1 -Olimit 1000 -g3 -O2 $(XCFLAGS)</tt></b> + +<p> +again, optionally omitting the <b><tt>-g3</tt></b>. + +<li>If you get compiler error messages about "ANSI aliasing rules", please +see the section about <a href="#VMS_build">building under OpenVMS</a> below. + +</ul> + +<h4><a name="FreeBSD"></a>FreeBSD</h4> + +<p> +On FreeBSD systems, in the top-level makefile (<b><tt>unixansi.mak</tt></b>, +<b><tt>unix-gcc.mak</tt></b>, change the +value of <b><tt>STDLIBS</tt></b> from <b><tt>-lpthread -lm</tt></b> to +<b><tt>-lc_r -lm</tt></b> before building. + +<h4><a name="GNULinux"></a>GNU/Linux</h4> + +<ul> +<li>If you build on GNU/Linux with X11 R6 or later, you may get link-time error +messages about undefined references to various functions beginning with +"SMC" and "ICE". If this happens, make sure that <b><tt>XLIBS</tt></b> in +the makefile is set to +"<b><tt>Xt SM ICE Xext X11</tt></b>" rather than +"<b><tt>Xt Xext X11</tt></b>". + +<li>With gcc version 2.6.3 or later, you may encounter an incompatibility +in object formats (<b><tt>a.out</tt></b> vs. ELF) with the XFree86 library. +Typically, <b><tt>ld</tt></b> complains that some X library is not found, +or that many <b><tt>Xlib</tt></b> or <b><tt>Xt</tt></b> functions are not +found in the library (similar to the messages for omitting +<b><tt>SM</tt></b> and <b><tt>ICE</tt></b> from <b><tt>XLIBS</tt></b>). Or +you get a message when you start Ghostscript that the program or the shared +library is an unrecognized format. +If this happens, edit <b><tt>unix-gcc.mak</tt></b> to add the switches +"<b><tt>-b i486-linuxaout</tt></b>" to both <b><tt>CFLAGS</tt></b> and +<b><tt>LDFLAGS</tt></b>, then "<b><tt>make clean</tt></b>" followed by +"<b><tt>make</tt></b>"). If this doesn't help, or if other strange things +happen, contact your GNU/Linux supplier or support resource. + +<li>A few of Ghostscript's drivers are multi-threaded (currently only those +whose names begin with "bmpa"). These drivers require <b><tt>libc</tt></b> +version 6 or higher. Some GNU/Linux distributions, including Red Hat +distributions before 5.0, have <b><tt>libc</tt></b> version 5, so these +drivers may not compile. If this happens, remove these drivers (from the +definitions of <b><tt>DEVICE_DEVS*</tt></b> in +<b><tt>unix-gcc.mak</tt></b>), and, if you wish, substitute the +corresponding single-threaded drivers, whose names don't include the "a". + +</ul> + +<p> +You may want to create <a href="http://www.rpm.org">RPM</a> (<b>R</b>ed Hat +<b>P</b>ackage <b>M</b>anager) files for Ghostscript. Because of the lack +of standardization of installation directory names between GNU/Linux releases, +Ghostscript does not come with any RPM specification files. You may wish to +contact the following people who have created RPM spec files in the past: + +<blockquote> +Henri Gomez <a href="mailto:hgomez@slib.fr">hgomez@slib.fr</a><br> +Russell Lang <a href="mailto:gsview@ghostgum.com.au">gsview@ghostgum.com.au</a><br> +Cristian Gafton <a href="mailto:gafton@redhat.com">gafton@redhat.com</a><br> +Preston Brown <a href="mailto:pbrown@redhat.com">pbrown@redhat.com</a><br> +</blockquote> + +<p> +The following instructions may work for the Ghostscript 6.0x distributions, +once you have RPM spec files that you believe are appropriate. + +<p> +To create RPMs for Ghostscript N.NN: + +<ul> +<li>Change to your source directory (<b><tt>/usr/src/redhat</tt></b> for Red Hat + Linux 5.1). +<li>Copy <b><tt>ghostscript-N.NN*.tar.gz</tt></b> (4 source files) to the +<b><tt>SOURCES</tt></b> subdirectory. +<li>Copy <b><tt>ghostscript-fonts-std-6.0.tar.gz</tt></b> and +<b><tt>ghostscript-fonts-other-6.0.tar.gz</tt></b> to the +<b><tt>SOURCES</tt></b> subdirectory. +<li>From <b><tt>SOURCES/ghostscript-N.NN.tar.gz</tt></b>, +<ul> +<li>extract <b><tt>rpm-conf.dif</tt></b> and copy to +<b><tt>SOURCES/ghostscript-N.NN-config.patch</tt></b> +<li>extract <b><tt>gs.rps</tt></b> and copy to +<b><tt>SPECS/ghostscript-N.NN.spec</tt></b> +<li>extract <b><tt>gs-fonts.rps</tt></b> and copy to +<b><tt>SPECS/ghostscript-fonts-N.NN.spec</tt></b> +</ul> +If the contents of these files have become out of date, you +will need to update the version number N.NN in the spec files, +and update the patch file. +<li> Change to the SPECS subdirectory and then execute the commands +<blockquote><b><tt> +rpm -ba ghostscript-N.NN.spec<br> +rpm -ba ghostscript-fonts-N.NN.spec +</tt></b></blockquote> +This will create the RPM files +<blockquote><b><tt> +RPMS/i386/ghostscript-N.NN-1.i386.rpm<br> +RPMS/noarch/ghostscript-fonts-N.NN-1.noarch.rpm<br> +SRPMS/ghostscript-N.NN-1.src.rpm<br> +SRPMS/ghostscript-fonts-N.NN-1.src.rpm<br> +</tt></b></blockquote> +<li> See instructions on how to <a href="Install.htm#Install_Unix">install + Ghostscript under Unix</a>. +</ul> + +<p> +Bruce Babcock +<<a href="mailto:babcock@math.psu.edu">babcock@math.psu.edu</a>> has +made available everything needed to build Ghostscript under Slackware +3.*, Red Hat 4.* and 5.*, and Debian 1.* and 2.0; the files include +instructions and shell scripts to build and install Ghostscript, as well as +all the source and font kits and patches needed: + +<blockquote> +<a href="ftp://ykbsb2.yk.psu.edu/pub/ghost/GS-5.10/" +class="offsite">ftp://ykbsb2.yk.psu.edu/pub/ghost/GS-5.10/</a><br> +<a href="ftp://ykbsb2.yk.psu.edu/pub/ghost/GS-5.10-Extra/" +class="offsite">ftp://ykbsb2.yk.psu.edu/pub/ghost/GS-5.10-Extra/</a> +</blockquote> + +<h4><a name="NeXTSTEP"></a>NeXTSTEP / OpenSTEP</h4> + +<ul> +<li>If you are using a NeXTSTEP version before 3.3, please get a no-cost +upgrade (along with Y2K patches) from Apple. + +<li>For all NeXTSTEP systems, use <b><tt>unix-gcc.mak</tt></b>. Make the +following changes: + +<ul> +<li>In <b><tt>unix-aux.mak</tt></b> (and <b><tt>ugcclib.mak</tt></b>, if you +are using only the library) change the definition of <b><tt>INCLUDE</tt></b> +to "<b><tt>INCLUDE=/usr/include/bsd</tt></b>"; + +<li>in <b><tt>unix-gcc.mak</tt></b>: + +<ul> +<li>change <b><tt>CC=gcc</tt></b> to <b><tt>CC=cc</tt></b>; + +<li>change the definition of <b><tt>STDLIBS</tt></b> to only +<b><tt>-lm</tt></b>; + +<li>change <b><tt>SYNC=posync</tt></b> to <b><tt>SYNC=nosync</tt></b>; + +<li>add <b><tt>-D_POSIX_SOURCE</tt></b> to <b><tt>CFLAGS</tt></b> and remove +<b><tt>-g</tt></b>; + +<li>remove <b><tt>-Wstrict-prototypes</tt></b> from <b><tt>GCFLAGS</tt></b>, +and if you are using NeXTSTEP 3.3 (with gcc 2.5.8), also remove +<b><tt>-Wmissing-declarations</tt></b>; +</ul> + +<li>to the end of <b><tt>Fontmap.GS</tt></b> add the line +"<b><tt>/Ohlfs /Courier ;</tt></b>". +</ul> + +<li>If you are running the Pencom co-Xist X server (development version), +the X headers and libraries are in the default places, so change the +makefile definitions of <b><tt>XINCLUDE</tt></b> and +<b><tt>XLIBDIRS</tt></b> to empty strings. +</ul> + +<h4><a name="SCO"></a>SCO Unix/Xenix</h4> + +<ul> +<li>See also "<a href="#386_Unix">386 Unix</a>" and +"<a href="#System_V">System V Unix platforms</a>". + +<li>The standard cc compiler on SCO OpenServer v5 has optimizer bugs. +Compile without -O. + +<li>The SCO Unix C compiler apparently can't handle the +<b><tt>P</tt></b><em>n</em> macros in <b><tt>std.h</tt></b>. If you get +strange compilation errors on SCO Unix, ask SCO for a compiler fix. + +<li>Meanwhile, to use gcc with SCO ODT, see <b><tt>unix-gcc.mak</tt></b> +for the appropriate switch settings. + +<li>Because of a bug in SCO's floating point emulator, gcc 2.3.3 produces +code that causes crashes on machines without hardware floating point. Use +a different compiler on these machines. + +<li>If you aren't using the X11 driver, you must add +<b><tt>-lsocket</tt></b> to the value of <b><tt>EXTRALIBS</tt></b> to link +the date and time functions. + +<li>If you want to use direct frame buffer addressing instead of X Windows, +include the relevant frame buffer devices (<b><tt>$(DD)ega.dev</tt></b>, +<b><tt>$(DD)vga.dev</tt></b>, etc.) and change the definition of +<b><tt>EGAVGA</tt></b> to <b><tt>$(EGAVGA_SCO)</tt></b> as indicated in +<b><tt>devs.mak</tt></b>. <b>Note</b>: this works with SuperVGA displays +only for 800x600x16 mode. + +<li>If the display looks "smeared", try recompiling +<b><tt>gdevpcfb.c</tt></b> with <b><tt>-O0</tt></b>. + +<li>If Ghostscript crashes, use the <b><tt>-q</tt></b> switch or redirect +console output to a file. + +<li>If your compiler accepts both the <b><tt>-Xt</tt></b> and +<b><tt>-Xa</tt></b> switches, use <b><tt>-Xt</tt></b>. Even though this +causes the compiler to use incorrect rules for computing the result types +of "<b><tt><<</tt></b>" and "<b><tt>>></tt></b>", +<b><tt>-Xa</tt></b> enables optimizations that produce incorrect code. + +<li>For SCO ODT 2.0, in addition to <b><tt>-D__SVR3</tt></b> and +<b><tt>-DSYSV</tt></b>, you need to specify <b><tt>-Dsco</tt></b>, +<b><tt>-DUSG</tt></b>, and <b><tt>-DMALLOC_0_RETURNS_NULL</tt></b>. For +SCO ODT, you need +"<b><tt>EXTRALIBS=-lX11 -lsocket -lmalloc</tt></b>", or maybe +only <b><tt>-lsocket</tt></b> depending on the version), and for SCO ODT +2.0, you must also specify <b><tt>-lc_s</tt></b>. For SCO Xenix, you need +"<b><tt>EXTRALIBS=-lmalloc</tt></b>". + +<li>For SCO OpenServer 5.0.5, add <b><tt>-L/usr/local/lib</tt></b> to +<b><tt>LDFLAGS</tt></b>. + +<li>For all SCO systems, set "<b><tt>XINCLUDE=</tt></b>" and +"<b><tt>XLIBDIRS=</tt></b>". +</ul> + +<h4><a name="SVR4"></a>SVR4 Unix</h4> + +<ul> +<li>You may need to set <b><tt>EXTRALIBS=-lnsl</tt></b>. + +<li>Do <b><em>not</em></b> change <b><tt>PLATFORM=unix_</tt></b> to <b><tt>PLATFORM=sysv_</tt></b>. + +<li>On SVR4 Unix platforms with dynamic linking, you may need to define +<b><tt>XLIBDIR</tt></b> as the name of the directory that holds the X +Windows libraries. Do <b><em>not</em></b> prefix the name with +"<b><tt>-L</tt></b>". + +<li>For SVR4.0 systems, set <b><tt>-DSVR4</tt></b> and +<b><tt>-DSVR4_0</tt></b> in the makefile; do <b><em>not</em></b> set +<b><tt>-DSYSV</tt></b>. For SVR4.2 (or later) and Solaris 2.<em>n</em> +systems, set only <b><tt>-DSVR4</tt></b> (<b><em>not</em></b> +<b><tt>-DSVR4_0</tt></b> nor <b><tt>-DSYSV</tt></b>). +</ul> + +<h4><a name="System_V"></a>System V Unix platforms</h4> + +<ul> +<li>If you are using a stock System V platform that lacks +<b><tt>rename</tt></b> and <b><tt>gettimeofday</tt></b>, in the makefile +change "<b><tt>PLATFORM=unix_</tt></b>" to +"<b><tt>PLATFORM=sysv_</tt></b>". + +<li>You will probably need to change the definition of +<b><tt>INSTALL</tt></b> from "<b><tt>install</tt></b>" to +"<b><tt>/usr/ucb/install</tt></b>". +</ul> + +<h4><a name="Unixware"></a>Unixware</h4> + +<ul> +<li>The standard cc compiler has optimizer bugs. Compile without +<b><tt>-O</tt></b>. +</ul> + +<h3><a name="Hardware_specific_issues"></a>Hardware-specific issues</h3> + +<h4><a name="Alpha_with_gcc"></a>Alpha with gcc</h4> + +<ul> +<li>You don't have to use gcc on Alpha systems, because the bundled +compiler works. + +<li>The Alpha code generator in gcc 2.7.2.1 is broken. gcc 2.5.8 and 2.6.3 +are probably usable. Versions before 2.5.0 are believed not to work. We +suggest you use a recent version. + +<li>If you really want to use gcc 2.7.x, here is a patch for that version +from gcc maintainer Jim Wilson +<<a href="mailto:wilson@cygnus.com">wilson@cygnus.com</a>>. + +<pre> +*** reload.c.orig Sun Mar 9 14:05:23 1997 +--- reload.c Sun Mar 9 14:06:54 1997 +*************** push_secondary_reload (in_p, x, opnum, o +*** 589,600 **** + set it up now. */ + + if (in_p && icode == CODE_FOR_nothing +! && SECONDARY_MEMORY_NEEDED (class, reload_class, reload_mode)) +! get_secondary_mem (x, reload_mode, opnum, type); + + if (! in_p && icode == CODE_FOR_nothing +! && SECONDARY_MEMORY_NEEDED (reload_class, class, reload_mode)) +! get_secondary_mem (x, reload_mode, opnum, type); + #endif + } + +--- 589,600 ---- + set it up now. */ + + if (in_p && icode == CODE_FOR_nothing +! && SECONDARY_MEMORY_NEEDED (class, reload_class, mode)) +! get_secondary_mem (x, mode, opnum, type); + + if (! in_p && icode == CODE_FOR_nothing +! && SECONDARY_MEMORY_NEEDED (reload_class, class, mode)) +! get_secondary_mem (x, mode, opnum, type); + #endif + } +</pre> +</ul> + +<h4><a name="Apollo"></a>H-P Apollo</h4> + +<ul> + +<li>You must run the compiler in ANSI-compatible mode (that is, set <b><tt>AK=</tt></b>{null string} in the makefile); otherwise it gives incorrect error +messages for any function declared as returning a float value. + +<li>The H-P Apollo compiler may not compile Ghostscript correctly. If you +get unexpected crashes at run time, use gcc. +</ul> + +<h4><a name="ATT_7040"></a>AT&T 7040 R3</h4> + +<ul> +<li>If Ghostscript crashes on startup, recompile with <b><tt>-O0</tt></b> +to work around compiler bugs. +</ul> + +<h4><a name="Convex"></a>Convex</h4> + +<ul> + +<li>Use <b><tt>unixansi.mak</tt></b>. Do not invoke optimization +(<b><tt>-O1</tt></b>) because the compiler will produce incorrect code. + +<li>Set <b><tt>CFLAGS</tt></b> to +"<b><tt>-no -fn -tm c1</tt></b>". +</ul> + +<h4><a name="DECStations"></a>DECStations with Ultrix</h4> + +<ul> + +<li>If you get the compiler message "cfe: Fatal: _temp_19086.c: +Segmentation violation" or a similar one, try compiling with the +<b><tt>-oldc</tt></b> switch. + +<li>You may wish to set + +<p> +<b><tt>GS_LIB_DEFAULT=$(gsdatadir):/usr/lib/DPS/outline/decwin:$(gsdatadir)/fonts</tt></b> + +<p> +in the makefile to add the Display PostScript font directory to the font +search path. + +<li>Set + +<p> +<b><tt>CFLAGS="-Olimit 2500"</tt></b> + +<p> +to make the optimizer allocate enough table space. + +<li>The Ultrix 4.4 C compiler compiles <b><tt>gdevm1.c</tt></b> +incorrectly. Insert the following line in the makefile rule for +"<b><tt>gdevm1.$(OBJ)</tt></b>" (the body of the rule is empty in the +standard distribution): + +<p> +<b><tt>$(CCC) -oldc gdevm1.c</tt></b> +</ul> + +<h4><a name="HP_RISC"></a>H-P RISC workstations</h4> + +<ul> + +<li>HP-UX versions before 11.0 do not support POSIX threads. Set +<b><tt>SYNC=nosync</tt></b> in the makefile before building. + +<li>Ghostscript builds on H-P machines with either GNU gcc or H-P's +ANSI-capable <b><tt>cc</tt></b>. The minimal, non-ANSI-capable +<b><tt>cc</tt></b> that ships with a basic HPUX system does <b><em>not</em></b> +work. If <b><tt>cc</tt></b> on your system doesn't accept the +<b><tt>-Aa</tt></b> switch, then you need to get the full +<b><tt>cc</tt></b> or gcc. + +<li>If you use H-P's compiler, be sure you have upgraded to a recent +release. Many bizarre symptoms have been reported trying to build +Ghostscript with older, buggier compilers, for example: +<ul> +<li>The link step fails with a message about "<b><tt>max</tt></b>" not being defined. +<li>The build succeeds, but the resulting executable fails to start up, +with an error message like "Initializing... Unrecoverable error: typecheck +in .registerencoding". +<li>The build succeeds, but the resulting executable produces a black +background on the first page of output. +</ul> + +<li>It is reported that On HPUX 9.* you need at least compiler patch +PHSS_5723 and dld.sl patch PHSS_5734 to build Ghostscript. (As of late +1997, those patches are long obsolete; the current patches are compiler +PHSS_10357 and dld.sl PHSS_11246. It is unknown whether current +Ghostscript releases work with compiler/dld.sl versions older than these.) + +<li>On HPUX 10.*, we don't know what combinations of compiler version and +switches work. It is reported that On HPUX 10.20, setting +"<b><tt>CC=c89</tt></b>" and "<b><tt>CFLAGS=+O3 $(XCFLAGS)</tt></b>" +works, contradicting the information in the next paragraph, but this may be +dependent on the specific compiler version. + +<li>In either HPUX version, you need to set +"<b><tt>CC=cc -Aa</tt></b>" (or use <b><tt>-Ae</tt></b> if you +prefer), and set +"<b><tt>CFLAGS=-D_HPUX_SOURCE -O $(XCFLAGS)</tt></b>". Higher +levels of optimization than <b><tt>-O</tt></b> may work depending on your +compiler revision; some users have reported success with +<b><tt>+O3</tt></b>, some have not. + +<li>Some users have reported needing <b><tt>-DNOSYSTIME</tt></b> and +<b><tt>-D_POSIX_SOURCE</tt></b> in <b><tt>CFLAGS</tt></b>, but recent tests +do not show these to be necessary. + +<li>If you use gcc, it's a good idea to have a recent release -- 2.7.2.1 or +later -- but gcc 2.6.3 has been known to work with past releases of +Ghostscript. gcc versions earlier than 2.6.3, and 2.7.* earlier than +2.7.2.1, are known <b><em>not</em></b> to work. You may be able to get a working +executable with an older gcc by removing <b><tt>-O</tt></b> from +<b><tt>CFLAGS</tt></b>. +</ul> + +<h4><a name="Intergraph"></a>Intergraph Clipper</h4> + +<ul> +<li>Recommended settings are: + +<p> +<b><tt>XCFLAGS=-w -Q -DSYSV -D__SVR3<br> +EXTRALIBS=-lbsd -lc_s<br> +CC=acc -knr<br> +PLATFORM=sysv_</tt></b><br> + +<li>You will probably need to change the value of <b><tt>XLIBS</tt></b> from +"<b><tt>XLIBS=Xt X11 Xext</tt></b>" to "<b><tt>XLIBS=Xt_s X11_s Xext</tt></b>". +</ul> + +<h4><a name="MIPS"></a>MIPS</h4> + +<ul> +<li>There is apparently a bug in older versions of the MIPS C compiler +which causes <b><tt>gxdither.c</tt></b> to compile incorrectly if +optimization is enabled (<b><tt>-O</tt></b>). However, this bug is +definitely fixed in MipsPRO C version 6.00; with this version, compiling +with "<b><tt>-O2 -mips2</tt></b>" produces good output. +</ul> + +<h4><a name="NCR_3550"></a>NCR 3550</h4> + +<ul> +<li>With the NCR C Development Toolkit you must use <b><tt>-O0</tt></b>. +</ul> + +<h4><a name="Pyramid"></a>Pyramid MIServer-S</h4> + +<p> +See "<a href="#ATT_7040">AT&T 7040 R3</a>". + +<h4><a name="RS6000"></a>IBM RS/6000 with AIX</h4> + +<ul> + +<li>Many versions of the AIX C compiler have bugs that have prevented +Ghostscript from compiling and linking properly. We believe that the +current Ghostscript release works around these bugs, and that +<b><tt>unixansi.mak</tt></b> with <b><tt>CC=cc</tt></b> should work. + +<li>You must also edit the makefile (<b><tt>unixansi.mak</tt></b>) to change +<b><tt>INSTALL</tt></b> to <b><tt>/usr/ucb/install</tt></b>. + +<li>AIX doesn't use a separate library for multi-thread support: set +<b><tt>STDLIBS=-lm</tt></b> in the makefile. + +<li>If <b><tt>-DSYSV</tt></b> produces a complaint about the functions +<b><tt>index</tt></b> and <b><tt>rindex</tt></b> not being defined, try +removing it. + +<li>If the xlc 1.2.1 optimizer runs out of memory, you may need to add +<b><tt>-qmaxmem=4000</tt></b> to <b><tt>CFLAGS</tt></b>. + +<li>A user reports that the AIX C compiler shipped with AIX 3.2.5 compiles +Ghostscript only if invoked with "<b><tt>c89 -D_POSIX_SOURCE</tt></b>" +and <b><em>without</em></b> <b><tt>-O</tt></b>. On the other hand, another +user reports successful compilation using <b><tt>unix-ansi.mak</tt></b> and +the command line + +<p> +<b><tt>make CC=c89 XCFLAGS="-DOSY_AIX -D_ALL_SOURCE -qnoro -qmaxmem=3000 -bfl" $*</tt></b><br> + +<li>Apparently some (but not all) releases of the C library declare the +<b><tt>hypot</tt></b> function: if the declaration in +<b><tt>math_.h</tt></b> produces an error message, try removing it. + +<li>The IBM X11R3 server is known to be buggy: use the MIT X server if +possible. + +<li>The xlc 1.3.0.x compiler provided in AIX 3.2.5+ definitely will not +compile Ghostscript correctly if <b><tt>-O</tt></b> is used on all files. +A user reports that compiling <b><tt>z</tt></b>*<b><tt>.c</tt></b>, +<b><tt>gsmatrix.c</tt></b>, <b><tt>gxstroke.c</tt></b> without +<b><tt>-O</tt></b> is sufficient to produce a working executable:. + +<li>Some installations of AIX 3.2.5 have what appears to be an incorrect or +inconsistent version of <b><tt>libXt.a</tt></b> in +<b><tt>/usr/lpp/X11/lib</tt></b>. If linking shows +<b><tt>XtShellStrings</tt></b> and <b><tt>XtStrings</tt></b> as unresolved +externals, set +"<b><tt>XLIBDIRS=-L/usr/lpp/X11/lib/R5 -L/usr/lpp/X11/lib</tt></b>" +rather than just "<b><tt>XLIBDIRS=-L/usr/lpp/X11/lib</tt></b>". + +<li>Ghostscript has been successfully compiled and runs under AIX 4.3.3 and +the IBM C compiler version 5. The following changes were required in +unixansi.mak: + +<p> +<b><tt>CC=xlc</tt></b> +<br> +<b><tt>XCFLAGS=-qalign=natural</tt></b> + +</ul> + +<h4> +<a NAME="Silicon_Graphics"></a>Silicon Graphics</h4> + +<p> +Users have had a lot of problems with the MIPSpro compilers on SGI systems. +We recommend using gcc. If you do choose to use the MIPSpro compiler, +please read the following carefully. + +<ul> +<li> +To make the optimizer allocate enough table space, set + +<p><b><tt>CFLAGS="-Olimit 2500"</tt></b> (for older compilers) +<br><b><tt>CFLAGS="-OPT:Olimit=2500"</tt></b> (for newer compilers) + +<p> +MIPSpro compiler version 3.19 is "older", and 7.1 is "newer"; we aren't +sure at what point in between the latter syntax was introduced. + +<li> +With the compiler shipped with Irix 5.2, use the <b><tt>-ansi</tt></b> +option. + +<li> +The SGI C compiler may produce warnings about "Undefined the ANSI standard +library defined macro stdin/stdout/stderr". To suppress these warnings, add +"<b><tt>-woff 608</tt></b>" to the definition of <b><tt>CFLAGS</tt></b>. + +<li> +The SGI C compiler shipped with Irix 6.1 and 6.2 will not compile +<b><tt>zlib/deflate.c</tt></b> properly with optimization. Compile this file +separately without <b><tt>-O</tt></b>. + +<li> +With IRIX 6.5.x and the MIPSpro 7.x compilers there have been reports about +incorrect output and binaries that cause segmentation faults. Various +solutions have been suggested and you may want to try them in this order, +until you get a working binary: + +<ul> +<li> +Compile <b><tt>idict.c</tt></b> and <b><tt>isave.c</tt></b> separately +without optimization after doing a normal compile; then relink.e.g.: + +<p> +<b><tt>cc -OPT:Olimit=2500 -I. -I./obj -o ./obj/idict.o -c ./idict.c</tt></b><br> +<b><tt>cc -OPT:Olimit=2500 -I. -I./obj -o ./obj/isave.o -c ./isave.c</tt></b> + +<li> +Set <b><tt>CFLAGS=</tt></b> (no optimization). + +<li> +Use only <b><tt>-O2</tt></b>. Compiler produces incorrect output +with <b><tt>-O3</tt></b> or "<b><tt>-Ofast=ip32 -show</tt></b>". + +<li> +Irix 6.5.1m with MIPSpro compiler 7.2.1.1m, Irix 6.5.3m with MIPSpro +compiler 7.2.1, and probably other 6.5x / 7.2x combinations require +compiling with the <b><tt>-o32</tt></b> option. Compiling with the (default) +<b><tt>-n32</tt></b> option produces non-working executables. +<b><tt>-O2</tt></b> is OK (possibly except for <b><tt>idict.c</tt></b>), but +not <b><tt>-O3</tt></b>. +</ul> +</ul> + +<h4><a name="Sun"></a>Sun</h4> + +<ul> +<li>The Sun unbundled C compiler (SC1.0) doesn't compile Ghostscript +properly with the <b><tt>-fast</tt></b> option: Ghostscript core-dumps in +<b><tt>build_gs_font</tt></b>. With that compiler use <b><tt>-g</tt></b>, +or use gcc instead. + +<li>The Sun version of <b><tt>dbx</tt></b> often gives up with an error +message when trying to load Ghostscript. If this happens, use GNU +<b><tt>gdb</tt></b> instead. (<b><tt>gdb</tt></b> is more reliable than +<b><tt>dbx</tt></b> in other ways as well.) + +<li>A bug in some versions of <b><tt>zlib</tt></b> results in an undefined +symbol <b><tt>zmemcmp</tt></b> when compiling with Sun cc. Use gcc +instead. +</ul> + +<h4><a name="SunOS"></a>SunOS</h4> + +<ul> +<li>The <tt><b>tar</b></tt> program provided with SunOS 4.1.3 may not be +able to unpack the archives in the standard Ghostscript distribution. +Get a more recent version of <tt><b>tar</b></tt>, such as GNU +<tt><b>tar</b></tt>. + +<li>In SunOS 4.1.[23], you may get undefined symbols +<b><tt>_get_wmShellWidgetClass</tt></b> and +<b><tt>_get_applicationShellWidgetClass</tt></b> when linking. Compiling +"<b><tt>-Bstatic -lXmu -Bdynamic</tt></b>" appears to work for +SC1.0. For gcc, try adding <b><tt>-static</tt></b> to +<b><tt>CFLAGS</tt></b>. To solve the problem if you are using OpenWindows +3.0 (X11R4-based Xt), ask Sun for patches 100512-02 and 100573-03. +</ul> + +<h4><a name="Solaris"></a>Solaris</h4> + +<ul> +<li>Solaris 2.2 may require setting "<b><tt>EXTRALIBS=-lsocket</tt></b>". +Solaris 2.3 and later seem to require "<b><tt>EXTRALIBS=-lnsl -lsocket -lposix4</tt></b>". + +<li>For Solaris 2.6 (and possibly some other versions), if you set +<b><tt>SHARE_LIBPNG=1</tt></b>, <b><tt>SHARE_ZLIB=1</tt></b>, or +<b><tt>SHARE_JPEG=1</tt></b>, you may need to set + +<p> +<b><tt>XLDFLAGS=-R /usr/local/</tt></b>xxx<b><tt>/lib:/usr/local/lib</tt></b> + +<p> +using the full path names of the relevant directories. + +<li>Solaris 2.<em>n</em> uses <b><tt>/usr/openwin/share/include</tt></b> +for the X11 libraries rather than <b><tt>/usr/local/X/include</tt></b>. + +<li>Solaris 2.<em>n</em> typically has Type 1 fonts in +<b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b>. + +<li>For Solaris 2.<b><tt>n</tt></b> in the makefile you must change +the definition of <b><tt>INSTALL</tt></b> from "<b><tt>install -c</tt></b>" to +"<b><tt>/usr/ucb/install -c</tt></b>". + +<li>You may need to set <b><tt>XLIBDIR</tt></b> to the directory that holds +the X11 libraries, as for other SVR4 systems. Set <b><tt>-DSVR4</tt></b> +in <b><tt>CFLAGS</tt></b>. + +<li>If you are using the SunPRO C compiler, don't use optimization level +<b><tt>-xO3</tt></b>. On SPARC platforms the compiler hangs; on Intel +platforms the generated code is incorrect. With this compiler on Intel, do +not use the <b><tt>-native</tt></b> flag: floating point computations +become unacceptably inaccurate. You can use <b><tt>-xcg92</tt></b> (SPARC +V8) and <b><tt>-dalign</tt></b> for better performance. +</ul> + +<h4><a name="VAX_Ultrix"></a>VAX with Ultrix</h4> + +<ul> +<li>You may wish to set + +<p> +<b><tt>GS_LIB_DEFAULT=$(gsdatadir):/usr/lib/DPS/outline/decwin:$(gsdatadir)/fonts</tt></b> + +<p> +in the makefile to add the Display PostScript font directory to the font +search path. +</ul> + +<hr> + +<h2><a name="OS2_build"></a>How to build Ghostscript from source (OS/2 version)</h2> + +<p> +<em>Note: This section was contributed by a user: please e-mail Hermann +Ulrichskötter <<a +href="mailto:ulrichsk@t-online.de">ulrichsk@t-online.de</a>> if you have +questions or problems.</em> + +<p> +The following instructions are for building with emx 0.9d/Fix2. Be warned +that with this version of gcc/emx, compiler optimization flags '-O' or '-O1' +will produce non-working output. + +<ul> +<li>The relevant makefile is <b><tt>os2.mak</tt></b> The gcc/emx 0.9b (or +later) compiler and IBM <b><tt>NMAKE.EXE</tt></b> are required. + +<li>For gcc/emx versions 0.9c and later, the <b><tt>LINK386</tt></b> +command must <b><em>include</em></b> +"<b><tt>$(COMPBASE)\lib\end.lib</tt></b>"; version 0.9b requires +<b><em>omitting</em></b> it. The current <b><tt>os2.mak</tt></b> file does +include this file in the <b><tt>LINK386</tt></b> command, so if you are +using 0.9b, delete this file reference before building. + +<li>Be sure you are using the standard OS/2 shell, <b><tt>CMD.EXE</tt></b>. +Some other shells have bugs or differences that cause the makefile not to +work. + +<li>Make sure you followed the instructions in "How to unpack the source +code" and "How to unpack the third-party libraries". + +<li>Use jpegsrc_v6b.tar.gz, zlib.tar.gz and libpng-1.0.3.tar.gz. Earlier +versions may not work. + +<li>If you wish to include support for XFree86, edit the makefile +to change <b>BUILD_X11=0</b> to <b>BUILD_X11=1</b>. +XFree86 for OS/2 can be obtained from +<a href="http://borneo.gmd.de/~veit/os2/xf86os2.html"> +http://borneo.gmd.de/~veit/os2/xf86os2.html</a> +You must use emx 0.9d. +</ul> + +<p> +Before compiling or linking, execute <b><tt>md bin</tt></b> and <b><tt>md +obj</tt></b> in the <b><tt>gs</tt></b> directory to create the directories +for the binaries. + +<p> +First, build the standard configuration: + +<ul> +<li>Edit gs/src/os2.mak: find line with 'CO=-O' (Optimizer flag) and edit +this line to 'CO=-O2' (-O or -O1 do not work!). + +<li>To start the make process, type <b><tt>nmake -f .\src\os2.mak</tt></b>, +from the gs-directory. + +<li>One DLL and two EXEs will be produced in <b><tt>gs/bin</tt></b>: +<b><tt>gsdll2.dll</tt></b> (the Ghostscript DLL), <b><tt>gsos2.exe</tt></b> +(the Ghostscript executable) and <b><tt>gspmdrv.exe</tt></b> (the +Presentation Manager display driver). All other newly generated files will +be produced in <b><tt>gs/obj</tt></b>. +</ul> + +<p> +Now, if you wish, you can edit OS2.MAK to suit your needs, and then perform +<b><tt>nmake -f .\src\os2.mak clean</tt></b> and then <b><tt>nmake -f +.\src\os2.mak</tt></b>. + +<hr> + +<h2><a name="VMS_build"></a>How to build Ghostscript from source (OpenVMS version)</h2> + +<p>The DECC6.2-003 compiler has an optimization problem that may lead to +warnings about the "ANSI aliasing rules". DEC (Compaq) can provide a fix +for this problem. The DECC6.2-006 compiler apparently does not have the +problem. + +<p> +DEC C runtime library versions 5.5 and newer have an <b><tt>exit</tt></b> +function that is compatible with all other C systems, but some older ones +don't. If you get error messages from VMS when auxiliary programs such as +<b><tt>genarch</tt></b> or <b><tt>echogs</tt></b> finish executing, find the +line in stdpre.h that reads + +<blockquote><b><tt> +/*#define OLD_VMS_C*/ +</tt></b></blockquote> + +and remove the <b><tt>/*</tt></b> and <b><tt>*/</tt></b>, changing it to + +<blockquote><b><tt> +#define OLD_VMS_C +</tt></b></blockquote> + +<p> +Some versions of DEC's X server have bugs that produce broad bands of color +where dither patterns should appear, or characters displayed white on top +of black rectangles or not displayed at all. If this happens, consult the +usage documentation for how to <a href="Use.htm#X_server_bugs">work around +X server bugs</a> using X resources; also report the problem to DEC, or +whomever supplied your X server. + +<p> +You may also wish to turn off the use of a backing pixmap with Ghostscript, +either to work around X server memory limitations or bugs, or to obtain +faster displaying at the expense of no redrawing when a Ghostscript window +is restored from an icon or exposed after being occluded by another window. +Again, the <a href="Use.htm">usage documentation</a> tells how to do this. + +<p> +You can <a href="Fonts.htm#Precompiling">precompile any Type 1 font</a> +into C, then compile and build it into Ghostscript, as described in the +<a href="Fonts.htm">fonts documentation</a>. If you do this, then add +"<b><tt>$(PSD)ccfonts.dev</tt></b>" to <b><tt>FEATURE_DEVS</tt></b> in +<b><tt>OPENVMS.MAK</tt></b>: + +<blockquote><b><tt> +$ FEATURE_DEVS = "$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)dpsnext.dev $(PSD)ttfont.dev $(PSD)ccfonts.dev" +</tt></b></blockquote> + +<p> +Specify the font names with <b><tt>ccfonts1</tt></b>: + +<blockquote><b><tt> +$ ccfonts1 = "Courier Courier_Oblique Courier_Bold Courier_BoldOblique" +</tt></b></blockquote> + +<p> +If this makes the line too long, add another line of the same form, such as + +<blockquote><b><tt> +$ ccfonts1 = "Courier Courier_Oblique Courier_Bold Courier_BoldOblique" +$ ccfonts2 = "Times_Roman Times_Italic Times_Bold Times_BoldItalic" +</tt></b></blockquote> + +<h3><a name="GNU_make_VMS"></a>Building with GNU make on OpenVMS</h3> + +<p> +<em>Note: GNU make on OpenVMS apparently has bugs that make it stop with an +error when building Ghostscript version 5.80 or later. Until further +notice, use MMS or MMK for building Ghostscript on OpenVMS. See <a +href="#MMK_MMS_VMS">below</a> for details.</em> + +<p> +As of Ghostscript version 5.0 you can use GNU make -- with the file +<b><tt>OPENVMS.MAK</tt></b> and some auxiliary <b><tt>.COM</tt></b> files +-- to build Ghostscript on OpenVMS. Use the command: + +<blockquote> +<b><tt>make -fopenvms.mak "DECWINDOWS=</tt></b><em>[</em><b><tt>1.2</tt></b><em>]</em><b><tt>"</tt></b> +</blockquote> + +<p> +That is, specify either "<b><tt>1.2</tt></b>" or nothing (blank) as the +value of <b><tt>DECWINDOWS</tt></b>. In Europe and other parts of the world +where ISO standard paper sizes are used, append "<b><tt>A4_PAPER=1</tt></b>" +to that line to make A4 the default paper size at run time. + +<p> +If you haven't a prebuilt copy of GNU make, you'll have to build it +yourself; as of Version 3.76 (but not earlier) it is said to build properly +under OpenVMS on both VAX and Alpha. The kit is available at the +<a href="http://www.gnu.org/">Free Software Foundation's</a> ftp site and +its mirrors. See + +<blockquote> +<a href="ftp://ftp.gnu.org/pub/gnu/" +class="offsite">ftp://ftp.gnu.org/pub/gnu/</a> +</blockquote> + +<h3><a name="MMK_MMS_VMS"></a>Building with MMK or MMS on OpenVMS</h3> + +<p> +As of Ghostscript version 5.68 you can use MMK or MMS to build Ghostscript on +OpenVMS. MMS is a utility available from Compaq (Digital); +MMK is a freely-available program largely compatible with MMS. + +<p> +Building Ghostscript with MMK or MMS uses the file +<b><tt>OPENVMS.MMK</tt></b> and some auxiliary <b><tt>.COM</tt></b> files. +To build Ghostscript with MMK or MMS, use the command: + +<blockquote> +<b><tt>###/descrip=[.src]openvms.mmk/macro=("DECWINDOWS1_2=</tt></b><em>{</em><b><tt>0</tt></b>,<b><tt>1</tt></b><em>}</em><b><tt>")</tt></b> +</blockquote> + +where <b><tt>###</tt></b> is either <b><tt>mmk</tt></b> or <b><tt>mms</tt></b>. + +<p> +Specify <b><tt>DECWINDOWS1_2=1</tt></b> for DECWINDOWS 1.2, +<b><tt>DECWINDOWS1_2=0</tt></b> for other DECWINDOWS versions. In Europe +and other parts of the world where ISO standard paper sizes are used, add +<b><tt>,"A4_PAPER=1"</tt></b> just before the final closing parenthesis to +make A4 the default paper size at run time. + +<hr> + +<h2><a name="Other_environments"></a>Other environments</h2> + +<h3><a name="No_multi_thread"></a>Environments lacking multi-threading</h3> + +<p> +All environments mentioned here by name have multi-threading capability. +However, if your environment doesn't, you can remove all need for +multi-threading by setting <b><tt>SYNC=nosync</tt></b> in the top-level +makefile. Note that you will not be able to use any so-called "async" +drivers (drivers that overlap interpretation and rasterization) if you do +this. No such drivers are in the <b><tt>DEVICE_DEVS*</tt></b> lists of any +makefile that we distribute. + +<h3><a name="Plan_9"></a>Plan 9</h3> + +<p> +Use <b><tt>unix-gcc.mak</tt></b>, editing it to define + +<blockquote><b><tt> +CC=cc +GCFLAGS=-D_BSD_EXTENSION -DPlan9 +</tt></b></blockquote> + +<p> +You will also probably have to edit many path names. + +<h3><a name="QNX"></a>QNX</h3> + +<p> +David J. Hawkey Jr. writes that he built Ghostscript 4.03 and 5.0 under QNX +4.22, 4.23, and 4.24 using Watcom C 10.6 and that "it works quite well, +after figuring out the <b><tt>/etc/config/lpsrvr</tt></b> directives, +except for color printing to my HP DeskJet some-number-or-another". Here +is a concise presentation of changes based on the ones he made for +Ghostscript 4.03. + +<dl> +<dt><b><tt>unixansi.mak</tt></b> +<dd><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Original lines + <td> + <th align=left>Change to +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>INSTALL = install -c<br>INSTALL_PROGRAM = $(INSTALL) -m 755<br>INSTALL_DATA = $(INSTALL) -m 644</tt></b> + <td> + <td><b><tt>INSTALL = cp<br>INSTALL_PROGRAM = $(INSTALL)<br>INSTALL_DATA = $(INSTALL)</tt></b> +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>datadir = $(prefix)/share</tt></b> + <td> + <td><b><tt>datadir = $(prefix)/lib</tt></b> +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>CFLAGS_STANDARD=-O</tt></b> + <td> + <td><b><tt>CFLAGS_STANDARD=-Otx -zp1 -mf</tt></b> +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>LDFLAGS=$(XLDFLAGS)</tt></b> + <td> + <td><b><tt>LDFLAGS=-mf -N32k $(XLDFLAGS)</tt></b> +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>EXTRALIBS=</tt></b> + <td> + <td><b><tt>EXTRALIBS=-lXqnx_s -lsocket</tt></b> +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>XINCLUDE=-I/usr/local/X/include</tt></b> + <td> + <td><b><tt>#XINCLUDE=-I/usr/local/X/include</tt></b> +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>XLIBDIRS=-L/usr/local/X/lib<br>XLIBDIR=<br>XLIBS=Xt Xext X11</tt></b> + <td> + <td><b><tt>#XLIBDIRS=-L/usr/local/X/lib<br>#XLIBDIR=<br>XLIBS=Xt_s Xext X11_s</tt></b> +<tr> <td colspan=3><hr> +</table> +</dl> + +<dl> +<dt><b><tt>gp_unifs.c</tt></b> +<dd>After the line + +<blockquote> +<b><tt>#include <sys/param.h></tt></b> +</blockquote> + +<p> +add these lines: + +<blockquote> +<b><tt>#if defined(__QNX__)<br> +#include <unix.h><br> +#endif</tt></b><br> +</blockquote> +</dl> + +<dl> +<dt><b><tt>gp_unix.c</tt></b> +<dd>After the line + +<blockquote> +<b><tt>#include "time.h"</tt></b> +</blockquote> + +<p> +add these lines: + +<blockquote> +<b><tt>#if defined(__QNX__)<br> +#include <sys/time.h><br> +#endif</tt></b><br> +</blockquote> +</dl> + +<dl> +<dt><b><tt>time_.h</tt></b> +<dd>Modify the line beginning + +<blockquote> +<b><tt># if defined(Plan9) ||</tt></b> +</blockquote> + +<p> +to begin + +<blockquote> +<b><tt># if defined(__QNX__) || defined(Plan9) ||</tt></b> +</blockquote> +</dl> + +<dl> +<dt><b><tt>/etc/config/lpsrvr</tt></b> +<dd>Here is Hawkey's <b><tt>lpsrvr</tt></b> as an example. + +<blockquote> +<pre># lpsrvr +# +# Defines the print queues and their devices +# +# Queues + +# ink-jet: Ghostscript interpreter for mono DeskJet - LaserJet works +# better than DeskJet! + +[ij-monops] + ta=lpt1 + co=/usr/local/bin/gs -q -sDEVICE=laserjet -sOutputFile=- -dNOPAUSE $(spfile) quit.ps | cat > $(device) + +# Devices + +[-lpt1] + dv=/dev/par1 + +[-lpt2] + dv=/dev/par2 +</pre></blockquote> +</dl> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. +All rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/New-user.htm b/Master/xemtex/doc/ghostscript/New-user.htm new file mode 100644 index 00000000000..125058b234e --- /dev/null +++ b/Master/xemtex/doc/ghostscript/New-user.htm @@ -0,0 +1,592 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Background information for new users of Ghostscript</title> +<!-- $Id: New-user.htm,v 1.30.2.14.2.6 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: new-user.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Background information for new users of Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<ul> +<li><a href="#Overview">An overview of Ghostscript</a> +<ul> +<li><a href="#Find_Ghostscript">How is Ghostscript licensed? Where can I find it?</a> +<ul> +<li><a href="#GNU_gs">GNU Ghostscript</a> +</ul> +<li><a href="#Third-party_libraries">Libraries obtained from other parties</a> +<li><a href="#Support">What if I want support?</a> +<li><a href="#Commercial_use">What about commercial use?</a> +<li><a href="#Platforms">What platforms does Ghostscript run on?</a> +<ul> +<li><a href="#Third-party_platforms">Ports done by users</a> +</ul> +</ul> +<li><a href="#Related_work">Related work</a> +<ul> +<li><a href="#Drivers">Drivers</a> +<li><a href="#Previewers">Previewers</a> +<ul> +<li><a href="#Previewer_X">Previewers for X Windows</a> +<li><a href="#Previewer_DOS-Win">Previewers for DOS and MS Windows</a> +<li><a href="#Previewer_GNULinux">A previewer for GNU/Linux</a> +</ul> +<li><a href="#Related_programs">Related programs</a> +</ul> +<li><a href="#Need_help">If you need help</a> +<ul> +<li><a href="#Reporting_problems">Reporting problems</a> +</ul> +<li><a href="#Contacting_us">Contacting Ghostscript headquarters</a> +<li><a href="#How_to_help">How you can help improve Ghostscript</a> +<li><a href="#Acknowledgments">Acknowledgements</a> +</ul> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Overview"></a>An overview of Ghostscript</h2> + +<p> +Ghostscript is the name of a set of software that provides: + +<ul> +<li>An interpreter for the <b>PostScript</b><small><sup>TM</sup></small> +language and the Adobe <b>Portable Document Format</b> (<b>PDF</b> -- +sometimes confused with Acrobat, Adobe's PDF browser and editor product); + +<li>Input modules (utilities) for reading a variety of raster formats, +including <b>CMYK</b>, <b>GIF</b>, <b>JFIF</b> (<b>JPEG</b>), <b>MIFF</b>, +<b>PBM</b>/<b>PGM</b>/<b>PPM</b>, and <b>PCX</b>; + +<li>Output modules (drivers) for a wide variety of window systems (including +X Windows and Microsoft Windows), raster file formats, and printers, as well +as a PDF output module that implements functions similar to Adobe's +Acrobat<small><sup>TM</sup></small> Distiller<small><sup>TM</sup></small> +product; and + +<li>The Ghostscript library, a set of procedures to implement the graphics +and filtering capabilities that are primitive operations in the PostScript +language and in PDF. +</ul> + +<p> +In simple terms, this means that Ghostscript can read a PostScript or PDF +file and display the results on the screen or convert them into a form you +can print on a non-PostScript printer. Especially together with several +popular <a href="#Previewers">previewers</a>, with Ghostscript you can view +or print an entire document or even isolated pages, even if your computer +doesn't have Display PostScript and your printer doesn't handle PostScript +itself. + +<h3><a name="Find_Ghostscript"></a>How is Ghostscript licensed? Where can I find it?</h3> + +<p> +Ghostscript is a copyrighted work (artofcode LLC owns the copyright); +it is not shareware or in the public domain. Different versions of it are +distributed with three different licenses: + +<h4><a name="GNU_gs"></a>GNU Ghostscript</h4> + +<p> +GNU Ghostscript is distributed under the terms of the GNU <a +href="http://www.gnu.org/copyleft/gpl.html">General Public License</a>, +which allows free use, and free copying and redistribution under certain +conditions (including, in some cases, commercial distribution). +You can always get the current version of GNU Ghostscript by Internet FTP +from any of the many GNU distribution sites. The GNU home ftp site is + +<blockquote> +<a href="ftp://ftp.gnu.org/pub/gnu/" +class="offsite">ftp://ftp.gnu.org/pub/gnu/</a> +</blockquote> + +<p> +For a more complete list of sites, including sites outside the U.S. and +other ways of obtaining GNU software, contact +the <a href="http://www.gnu.org/">Free Software Foundation</a> +<a href="mailto:gnu@gnu.org"><gnu@gnu.org></a>. + +<p><a name="CTAN"></a> +Versions of Ghostscript are also available from sites in the +Comprehensive TeX Archive Network (CTAN), in a tree based at +/tex-archive/support/ghostscript/, which you can find at these principal +CTAN distribution sites ("participating hosts") as of mid-1998: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <td><a +href="ftp://ctan.tug.org/tex-archive/support/ghostscript/" +class="offsite">ftp://ctan.tug.org/tex-archive/support/ghostscript/</a> + <td> + <td>Massachusetts, U.S.A. +<tr> <td><a href="ftp://ftp.dante.de/tex-archive/support/ghostscript/" +class="offsite">ftp://ftp.dante.de/tex-archive/support/ghostscript/</a> + <td> + <td>Deutschland +<tr> <td><a +href="ftp://ftp.tex.ac.uk/tex-archive/support/ghostscript/" +class="offsite">ftp://ftp.tex.ac.uk/tex-archive/support/ghostscript/</a> + <td> + <td>United Kingdom +</table></blockquote> + +<p> +CTAN has more than fifty mirror sites around the world. For information +about CTAN sites, including how to use them over the World Wide Web, visit +<a href="http://www.ctan.org/" class="offsite">ctan.org</a> or get +the file <b><tt>CTAN.sites</tt></b> from any CTAN server, for +instance + +<blockquote> +<a href="ftp://ctan.tug.org/tex-archive/CTAN.sites" +class="offsite">ftp://ctan.tug.org/tex-archive/CTAN.sites</a> +</blockquote> + +<hr> + +<h3><a name="Third-party_libraries"></a>Libraries obtained from other parties</h3> + +<p> +The Ghostscript source code distribution, and the Ghostscript executable +code, include libraries obtained from other parties. All the source files +mentioned in this section are in the Ghostscript and third-party library +source kits. The documentation of <a href="Make.htm">how to build +Ghostscript</a> tells <a href="Make.htm#Acquiring">where to get these +libraries</a> and <a href="Make.htm#Unpack">how to unpack them</a>. + +<blockquote><dl> +<dt>The <a href="http://www.ijg.org/" class="offsite">Independent JPEG +Group</a> (IJG) +library +<dd>The executable versions of Ghostscript are based in part on the work of +the Independent JPEG Group. For more information, see +<b><tt>jpeg.mak</tt></b> in the main Ghostscript source directory and +<b><tt>README</tt></b> in the libjpeg source directory. + +<dt>The <a href="http://www.libpng.org/pub/png/" +class="offsite">Portable Network +Graphics</a> (PNG) library created by Dave Martindale, Guy Eric Schalnat, +Paul Schmidt, and Tim Wegner, of Group 42, Inc. +<dd>For more information, see <b><tt>libpng.mak</tt></b> in the main +Ghostscript source directory, and <b><tt>README</tt></b> and +<b><tt>png.h</tt></b> in the libpng source directory. + +<dt>The <a href="http://www.gzip.org/zlib/" +class="offsite">zlib</a> library +created by Jean-loup Gailly and Mark Adler +<dd>For more information, see <b><tt>zlib.mak</tt></b> in the main +Ghostscript source directory, and <b><tt>README</tt></b> in the +zlib source code. +</dl></blockquote> + +<p> +These libraries do not fall under the GPL but come with their own licenses, +which also allow free use and redistribution under appropriate +circumstances and which appear in the files mentioned just above. These +libraries are entirely original works of their respective authors, and are +provided as is with no warranty and no support. + +<hr> + +<h3><a name="Support"></a>What if I want support?</h3> + +<p> +Neither artofcode LLC nor any organization known to us currently offers +Ghostscript support for end-users -- that is, for people or companies who +just want to use Ghostscript and not redistribute it as part of a product. + +<p> +Nothing in the GNU license prevents anyone from providing +support for Ghostscript, either free or commercial. We would be happy to +include in the Ghostscript documentation the contact information for anyone +who wants to offer such support. + +<hr> + +<h3><a name="Platforms"></a>What platforms does Ghostscript run on?</h3> + +<p> +Ghostscript is written entirely in C, with special care taken to make it +portable to a wide variety of systems. It is actively maintained on many +unix-like operating systems, Microsoft Windows, Apple's MacOS and +OpenVMS and can easily be ported to others. Please see <a +href="Make.htm">Making Ghostscript</a> for details on the build process +and hints for various platforms. + +<hr> + +<h2><a name="Related_work"></a>Related work</h2> + +<h3><a name="Drivers"></a>Drivers</h3> + +<p> +A number of people have created Ghostscript drivers that they prefer to +distribute directly, rather than including them in the Ghostscript +distributions. Please refer to <a +href="http://www.linuxprinting.org/" +class="offsite">www.linuxprinting.org</a> or your favorite search engine +for +relevant examples. + +<h3><a name="Previewers"></a>Previewers</h3> + +<p> +The Ghostscript user interface is very primitive, so several people have +contributed screen previewers with better user interfaces. + +<h4><a name="Previewer_X"></a>Previewers for X Windows</h4> + +<dl> +<dt><b><tt>GSPreview</tt></b> +<dd>For information on GSPreview, contact Richard Hesketh +<<a href="mailto:rlh@ukc.ac.uk">rlh@ukc.ac.uk</a>>. +</dl> + +<h4><a name="Previewer_DOS-Win"></a>Previewers for DOS and MS Windows</h4> + +<dl> +<dt><b><tt>psv</tt></b> +<dd><b><tt>PSV</tt></b>, another keyboard-based PostScript viewing package +for DOS, appears to be redistributable with no restrictions. It was once +available from + +<blockquote> +ftp://puccini.ujf-grenoble.fr/pub/contrib-ps/DOS-PSV/ +</blockquote> +</dl> + +<h4><a name="Previewer_GNULinux"></a>A previewer for GNU/Linux</h4> + +<dl> +<dt><b><tt>BMV</tt></b> <dd>Jan Kybic has created a Ghostscript-based +bitmap previewing program for GNU/Linux called <b><tt>BMV</tt></b>, which +doesn't use X Windows but is based on <b><tt>svgalib</tt></b>. He says +there is a port of <b><tt>BMV</tt></b> for SCO Unix by William Bader. +<b><tt>BMV</tt></b> is available from + +<blockquote> +<a +href="ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz" +class="offsite">ftp://sunsite.unc.edu/pub/Linux/apps/graphics/viewers/svga/bmv-1.2.tgz</a> +</blockquote> +</dl> + +<hr> + +<h3><a name="Related_programs"></a>Related programs</h3> + +<dl> +<dt><b><tt>genscript</tt></b> +<dd><b><tt>genscript</tt></b> is a free replacement for the +<b><tt>enscript</tt></b> program. <b><tt>genscript</tt></b> converts plain +text files to PostScript and sends the generated PostScript output to the +specified printer or to a file. <b><tt>genscript</tt></b> can be easily +extended to handle different output media, and it has many options which can +be used to customize printouts, including 2-up printing, pagination, complex +headers, and many more. You can find the current version at + +<blockquote> +<a href="http://www.iki.fi/~mtr/genscript/" +class="offsite">http://www.iki.fi/~mtr/genscript/</a> (home page)<br> +<a href="ftp://ftp.gnu.org/pub/gnu/" +class="offsite">ftp://ftp.gnu.org/pub/gnu/enscript/</a>enscript-*.tar.gz +</blockquote> + +<dt><b><tt>pstotext</tt></b> +<dd>A good free utility <b><tt>pstotext</tt></b> uses Ghostscript to extract +plain text from PostScript files. It is much better than the +<b><tt>ps2ascii</tt></b> utility distributed with Ghostscript. You can read +the <b><tt>pstotext</tt></b> documentation at + +<blockquote> +<a +href="http://www.research.digital.com/SRC/virtualpaper/manpages/pstotext.1.html" +class="offsite">http://www.research.digital.com/SRC/virtualpaper/manpages/pstotext.1.html</a> +</blockquote> + +<p> +and download the <b><tt>pstotext</tt></b> kit from + +<blockquote> +<a href="http://www.research.digital.com/SRC/virtualpaper/pstotext.html" +class="offsite">http://www.research.digital.com/SRC/virtualpaper/pstotext.html</a> +</blockquote> + +<p> +<b><tt>pstotext</tt></b> is unsupported, but the authors, +Paul McJones +<<a href="mailto:paul.mcjones@acm.org">paul.mcjones@acm.org</a>> +and Andrew Birrell +<<a href="mailto:birrell@pa.dec.com">birrell@pa.dec.com</a>>, are +happy to have your questions and comments either by e-mail or <a href="http://www.research.digital.com/SRC/virtualpaper/comments.html" +class="offsite">here</a> + +<p> +For more information about the authors' Virtual Paper project, which +attempts to make on-line reading of lengthy material (like research +reports, manuals, or entire books) comfortable, read: + +<blockquote> +<a href="http://www.research.digital.com/SRC/virtualpaper" +class="offsite">http://www.research.digital.com/SRC/virtualpaper</a> +</blockquote> + +<dt><b><tt>PreScript</tt></b> +<dd>This is another good free utility that uses Ghostscript to extract text +from PostScript or PDF files. It can also generate very simple HTML, +keeping some of the formatting. It is unsupported, but is the product of an +active research project. Its home page is: + +<blockquote> +<a href="http://www.nzdl.org/html/prescript.html" +class="offsite">http://www.nzdl.org/html/prescript.html</a> +</blockquote> + +</dl> + +<hr> + +<h2><a name="Need_help"></a>If you need help</h2> + +<p> +The list of Frequently Asked Questions (FAQ) isn't updated very often, so +it may be somewhat out of date. It's available from + +<blockquote> +<a href="http://www.cs.wisc.edu/~ghost/doc/faq.htm" +class="offsite">http://www.cs.wisc.edu/~ghost/doc/faq.htm</a><br> +<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/faq.htm" +class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/faq.htm</a> +</blockquote> + +<p> +or by AFS from + +<blockquote> +/afs/cs.wisc.edu/p/mirror/pub/mirrors/ghost/faq.htm +</blockquote> + +<p> +CompuServe announced in December 1995 that the Graphics Support Forum offers +Message Section and Library 21, "Ghostscript", for technical assistance with +Ghostscript. Ghostscript is available for downloading in Library 21, +"Ghostscript." To access the Graphics Support Forum, <b><tt>GO +GRAPHSUP</tt></b>. This service has no connection with the main Ghostscript +developers. + +<p> +If you have problems with Ghostscript and you have access to the +Internet, we suggest to post your question to one of these Usenet +newsgroups: + +<dl> +<dt><b><tt><a href="news:gnu.ghostscript.bug">gnu.ghostscript.bug</a></tt></b> +<dd>if your question is about <b>GNU Ghostscript</b>. If you have access to Internet mail, but not Usenet news, +write to <b><tt>bug-ghostscript@gnu.org</tt></b>, which is equivalent to +posting to that newsgroup. + +<dt><b><tt><a href="news:comp.lang.postscript">comp.lang.postscript</a></tt></b> +<dd>if you have a general question about Ghostscript. Note +however that this newsgroup was not intended for Ghostscript +discussion <em>per se</em>. +</dl> + +<p> +There are hundreds of Ghostscript user sites all over the world, and another +user will often be able to help you. If you have trouble with a specific +device driver, look at <b><tt>devs.mak</tt></b> and +<b><tt>contrib.mak</tt></b> in the Ghostscript source directory to see in +which file the driver is defined. If it's defined in +<b><tt>contrib.mak</tt></b>, the list of contributed drivers, please contact +the author directly: the maintainers of Ghostscript can't help you with +user-maintained drivers. + +<h3><a name="Reporting_problems"></a>Reporting problems</h3> + +<p> +Please read <a href="Bug-info.htm">Bug-info.htm</a> for information about +reporting problems. + +<hr> + +<h2><a name="Contacting_us"></a>Contacting Ghostscript headquarters</h2> + +<p> +As of mid-September 2000, artofcode LLC is responsible for the future +development of Ghostscript. Please do not contact us if all you want is +help with Ghostscript! Ghostscript is +free, but our time is not. If you call for help, we will tell you politely +that we cannot answer your question. Ghostscript's documentation, while not +of commercial end-user quality, has been adequate for thousands of users +(for many of whom English is a foreign language), so the answer to your +question is very likely in it somewhere. <!-- ouch --> + +<p> +Here is our contact information: + +<blockquote><address> +Raph Levien<br> +artofcode LLC<br> +940 Tyler St. Studio 6<br> +Benicia, CA 94510<br> +tel/fax +1 707 746 6398<br> +<a href="mailto:raph@artofcode.com">raph@artofcode.com</a> +</address></blockquote> + +<h3>Aladdin Enterprises</h3> + +<p> +Aladdin Enterprises, the original authors of Ghostscript, is no +longer responsible for Ghostscript, but may be available for small +contract projects. Here is their contact information: + +<blockquote><address> +Aladdin Enterprises<br> +203 Santa Margarita Avenue<br> +Menlo Park, CA 94025 U.S.A.<br> ++1-650-322-1734 fax<br> +<a href="mailto:ghost@aladdin.com">ghost@aladdin.com</a><br> +<a href="http://www.ghostscript.com/" +class="offsite">http://www.ghostscript.com/</a> +</address></blockquote> + +<p> +If you want help with Ghostscript, or want to report a problem, please do +not contact us. We will not be able to help you. + +<hr> + +<h2><a name="How_to_help"></a>How you can help improve Ghostscript</h2> + +<p> +The most valuable thing you can do to help improve Ghostscript is to help +test it. We make three different grades of release available, each of +which needs a different kind of testing. + +<ul> +<li><em>Stable</em> releases are made available about every 9 months, after +a beta test period. Reporting problems as described <a +href="#Reporting_problems">above</a> often results in a fix being posted on +our Web site. +</ul> + +<ul> +<li><em>Beta</em> releases are posted starting about 6 weeks before a +planned public release. These are candidates for public release, and need +intensive testing. +</ul> + +<ul> +<li><em>Development</em> releases are posted every few weeks. These are not +supposed to be good enough for general use, but testing them is still very +helpful, since it gets problems corrected before the intensive beta test +period. +</ul> + +<p> +You can always find the current public release and the current beta or +tester release on our <a href="http://www.cs.wisc.edu/~ghost/">Web +site</a>. If you would like to be notified when new beta or tester releases +are posted, please <a href="#Contacting_us">contact us</a>. + +<p> +There are also some useful projects that we don't have enough resources to +work on, and with which we would appreciate help. See <a +href="Projects.htm">this list</a> for details. + +<hr> + +<h2><a name="Acknowledgments"></a>Acknowledgements</h2> + +<p> +Ghostscript was originally created, and through the year 2000 was primarily +developed and maintained, by L. Peter Deutsch, President of Aladdin +Enterprises (not to be confused with Peter J. Deutsch, founder of Bunyip +Information Systems Inc.). + +<p> +Special thanks are due to Russell Lang, for the +<b><tt>GSview for Windows</tt></b> and +<b><tt>PM GSview</tt></b> programs, and for contributing most of the code for +the Microsoft Windows and OS/2 environments; to Tim Theisen, for the +<b><tt>Ghostview</tt></b> program for X Windows and for major contributions +to, and assistance with support of, the code for the X Windows +environment; to Martin Fong and Mark Lentczner, for the first Macintosh +ports; to Pete Kaiser +<<a href="mailto:kaiser@acm.org">kaiser@acm.org</a>>, for redoing all +of the documentation in HTML; +and to the <a href="http://www.ijg.org/">Independent +JPEG Group</a>, to Group 42, Inc., and to Jean-loup Gailly and Mark Adler, +for creating the freely available libraries that Ghostscript uses. + +<p> +Special thanks are due to URW++ Design and Development Incorporated, of +Hamburg, Germany (<a href="http://www.urwpp.de/">http://www.urwpp.de/</a>) +for making a commercial-quality set of the 35 standard PostScript Type 1 +fonts available for free distribution under the GNU and Aladdin licenses, +and for updating them to include Adobe's expanded PostScript 3 character +set. + +<p> +Special thanks are due to Richard Stallman and the +<a href="http://www.gnu.org/" class="offsite">Free Software +Foundation</a> for originating +the <a href="http://www.gnu.org/copyleft/gpl.html" class="offsite">GNU +General Public +License</a>, for originally motivating Aladdin's interest in creating free +software, and for being the primary distributor of GNU Ghostscript on the +Internet. + +<p> +See also the <a href="Helpers.htm">list of the many other people</a> who have +contributed significantly to improving Ghostscript. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996-2002 artofcode LLC. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/News.htm b/Master/xemtex/doc/ghostscript/News.htm new file mode 100644 index 00000000000..7e3fa2fa015 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/News.htm @@ -0,0 +1,96 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Recent changes in Ghostscript</title> +<!-- $Id: News.htm,v 1.90.2.18.2.8 2003/05/17 14:44:22 giles Exp $ --> +<!-- Originally: NEWS --> +<!-- + WARNING: do not use Pete Kaiser's emacs function "gs-toc" alone to + re-create the table of contents here, because it will replace the + hand-edited TOC subheads with a separate subhead for each H2 in + the body of the file. Or if you do, first look at the original + TOC to see how to edit it for visual conciseness. +--> +<link rel="stylesheet" type="text/css" href="gs.css"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Changes in the most recent release of Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +This document is news about the most recent Ghostscript release. For +earlier versions, see the history documents: + +<blockquote> +<a href="History7.htm">History of Ghostscript versions 7.n</a><br> +<a href="History6.htm">History of Ghostscript versions 6.n</a><br> +<a href="History5.htm">History of Ghostscript versions 5.n</a><br> +<a href="History4.htm">History of Ghostscript versions 4.n</a><br> +<a href="History3.htm">History of Ghostscript versions 3.n</a><br> +<a href="History2.htm">History of Ghostscript versions 2.n</a><br> +<a href="History1.htm">History of Ghostscript versions 1.n</a> +</blockquote> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h3><a name="Version7.07"></a>Version 7.07 (2003-05-17)</h3> + +<p>This is the third release of the stable 7.0x series under the GNU +GPL. It includes an important security update; upgrading is strongly +recommended.</p> + +<h3><a name="7.07_Incompatible_changes"></a>Incompatible changes</h3> + +<p> +No incompatible changes have been recorded for this version. Users of the 6.5x versions of GNU +Ghostscript will want to check the History for a complete list of changes since that version. + +<pre> + +</pre> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 2003 artofcode LLC. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Projects.htm b/Master/xemtex/doc/ghostscript/Projects.htm new file mode 100644 index 00000000000..3ee7f5cad5f --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Projects.htm @@ -0,0 +1,629 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Ghostscript projects</title> +<!-- $Id: Projects.htm,v 1.33.2.11.2.6 2003/05/17 14:39:00 giles Exp $ --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Ghostscript projects seeking developers</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<ul> +<li><a href="#Platforms">Platforms</a> +<li><a href="#Driver_architecture">Driver architecture</a> +<li><a href="#Specific_drivers">Specific drivers</a> +<li><a href="#Graphics_functionality">Graphics functionality</a> +<li><a href="#Performance">Performance</a> +<li><a href="#Other_functionality">Other functionality</a> +<li><a href="#Other_implementation">Implementation improvements</a> +</ul> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<p> +There are many projects that would improve Ghostscript and that we would +like to do, but for which we don't have enough resources. If you would like +to take responsibility for any of these projects, please <a +href="mailto:raph@artofcode.com">contact us</a>. Additional comments on +implementation approaches or project goals are in <I>italic type like +this</I>. + +<h2><a name="Platforms"></a>Additional platforms</h2> + +<h3>DOS, Windows and OS/2 builds using gcc.</h3> + +<p> +We would like Ghostscript to work with the free <b><tt>emx/gcc</tt></b> and +<b><tt>rsx</tt></b> libraries, to provide an alternative DOS, Windows +95/98/NT, and OS/2 implementation that requires no proprietary, commercial +compilers. We think Ghostscript's existing OS/2 makefile already includes +most of what is needed. If someone is willing to do the work, we will be +happy to include this in our list of supported platforms and to distribute +the makefiles. + +<h3>Windows driver using Ghostscript as a language monitor.</h3> + +<p> +MS Windows has a "language monitor" capability which would allow Ghostscript +to be invoked seamlessly to process input files in any language Ghostscript +could handle (currently PostScript and PDF) and for any printer for which +Ghostscript had a driver. Doing this properly would require integrating +Ghostscript with Windows' "Add Printer" dialog, and would also require +creating a PPD for Ghostscript. <I>Russell Lang's RedMon program provides +some, but not all, of this capability.</I> + +<h3>Netscape browser plug-in.</h3> + +<p> +Currently, Ghostscript can work as a "helper application" for the Netscape +browser, but not as a plug-in; the latter would integrate it more closely +with the browser. We aren't sure what doing this would involve; we've also +heard by rumor that it's already been done. + +<h3>Ghostscript as an Active-X COM Object.</h3> + +<p> +In order to integrate Ghostscript into XMetaL and other applications it +would be convenient for Ghostscript to be distributed as a COM object +along with the current gswin32.exe, gswin32c.exe and gsdll32.dll files. + +<hr> + +<h2><a name="Driver_architecture"></a>Driver Architecture</h2> + +<h3>Improved multi-threaded rendering support.</h3> + +<p> +Currently, drivers can be written so that converting PostScript to a list of +graphical objects can run in one thread, and rasterizing the objects can run +in another thread. However, drivers must be written specially if they are +going to do this. We would like to change the architecture so that any +driver can work this way. We would also like to support dual-threaded +operation for drivers that produce high-level output, such as the PDF +writer. <I>Doing this would require separating banding from +the multithreaded logic. Also, currently each thread has its own allocation +pool: this is unnecessary in the normal case, since Ghostscript now supports +properly locked access to the C heap, but embedded systems still need to use +a fixed-size area for the rasterizing thread. With a locked, shared +allocator, the rasterizing thread could use the full set of band list +functions; with a fixed-size area and a separate allocator, only a subset is +available, as is the case now for dual-threaded drivers. +</I> + +<h3>Dynamic run-time loadable devices.</h3> + +<p> +Currently, drivers must be linked into the executable. We would like to be +able to load drivers dynamically. Doing this requires defining a +platform-independent API (presumably extending the current gp_* APIs) that +would work at least on GNU/Linux, vendor Unix, MS Windows, and Macintosh. Unix +systems should include Sun, HP, AIX, IRIX, DEC; Linux ELF and a.out formats +should both be supported. <I>Consider the Netscape plug-in +architecture.</I> + +<h3>Moving 'setpagedevice' into C.</h3> + +<p> +The PostScript 'setpagedevice' function implements matching of media and +page size requests to available media, page orientation, and paper handling +(duplex, etc.) Currently it is implemented in PostScript code, which means +it is not available for use with other input languages. (It is available +for PDF, which Ghostscript implements on top of PostScript, but not for the +not-yet-freely-available PCL interpreters that use the Ghostscript library, +or for possible future SVG or similar interpreters). We would like to move +this function into C. <I>The device driver will be required to +send page parameters up to PostScript to be stored in a resource. To be +included in this project are handling policy implementations in the device +drivers. DeferredMediaSelection should also be implemented.</I> + +<h3>Adding 'tee' for output to multiple devices.</h3> + +<p> +In a few cases, it would be desirable to provide a 'tee' capability for +drivers: specifically, for generating small, low-resolution 'thumbnail' +images concurrently with other output. <I>Probably the +simplest way to do this is to generate a band list and then process it +twice. This is not completely trivial, since the band list does include +device resolution information and scaling would be required for some +constructs.</I> + +<h3><b><tt>OutputDevice</tt></b> resource category</h3> + +<p> +Each available output device should provide an instance of the +<b><tt>OutputDevice</tt></b> resource category, which gives the available +page sizes, resolutions, media classes, process color models, and other +information about the device. <I>This would replace the current +non-standard use of a 4-element <b><tt>PageSize</tt></b> in the +<b><tt>InputAttributes</tt></b> entry of the page device dictionary.</I> + +<h3>Removing the limit on the length of OutputFile.</h3> + +<p> +Currently, the maximum length of the <b><tt>OutputFile</tt></b> parameter is +a compile-time constant, <b><tt>gp_file_name_sizeof</tt></b>. This is +appropriate for ordinary file names, since this constant is the platform's +limit on the length of a file name. However, if <b><tt>OutputFile</tt></b> +is a pipe, the length should not be limited in this way. <I>This is +probably a small project: it requires allocating the file name dynamically, +and freeing it in the finalization routine that gets called when a driver +instance is freed.</I>. + +<h2><a name="Specific_drivers"></a>Specific drivers</h2> + +<h3>PrintGear and PPA output drivers.</h3> + +<p> +We would like to provide (Adobe) PrintGear and (H-P) PPA output drivers for +Ghostscript, but the specifications for these protocols are not published. +If you can provide them to us without violating any agreements, please let +us know. (Some work has already been done on reverse-engineering these +protocols, but we don't have references to it.) + +<h3>Improve 'pswrite' up to the level of 'pdfwrite'.</h3> + +<p> +We would like to improve the high-level PostScript-writing +<b><tt>pswrite</tt></b> driver to bring it up to parity with the PDF-writing +driver (including the many improvements in the latter being implemented in +Ghostscript 7.xx). Specifically, we want it to write text as text rather +than bitmaps, and to consistently write images in their original high-level +form. <I>We have already started to factor out code that +should be common to these two drivers, specifically for writing embedded +fonts and compressed data streams.</I> + +<p> +There is one small part of this project that would be especially valuable +and could be done independently (although it might have to be partly or +entirely redone later): compressing images. Currently the driver only +compresses character bitmaps, and doesn't compress other images at all. +<I>It should use the <b><tt>CCITTFaxEncode</tt></b> filter for 1-bit-deep +images, and plane-separated <b><tt>LZWEncode</tt></b> compression for color +images, using the <b><tt>miGIF</tt></b> algorithms that are believed to be +free of the Welch patent for the latter. When generating LL3 PS, the +<b><tt>Flate</tt></b> compression will work better than miGIF. It may be +worth trying several methods on each image and use the one that works best.</I> + +<h3>High level graphics and text for PCL 5 and PCL XL drivers.</h3> + +<p> +Currently, the PCL 5 drivers produce only bitmaps; the PCL XL driver +produces high-level graphics and sometimes high-level images, but low-level +text. We would like to improve these drivers to produce higher-level, +smaller output. <I>This was a very low-priority project; it has become more +important now that H-P's laser printers are shipping with less memory.</I> + +<h3>Improved high level GDI driver for Windows.</h3> + +<p> +We would like a "GDI driver" for MS Windows that would implement more +higher-level constructs (specifically for text). <I> The +<b><tt>mswin</tt></b> and <b><tt>mswinprn</tt></b> drivers both do some of +this. Some of the the 'xfont' support code for MS Windows should be useful. +We were frustrated in the past because the GDI calls for getting font sizes +and metrics consistently returned incorrect information and provided no way +to get the correct information; perhaps this has been fixed in 32-bit +Windows. We believe that H-P, Russell Lang, and perhaps others are working +in this area, but we can always use more help.</I> + +<h3>PDF thumbnail generation.</h3> + +<p> +The PDF writer needs to be able to generate thumbnails (small previews). We +might do this through the 'tee' capability mentioned above. However, we +currently prefer the idea of implementing a completely separate program to +add thumbnails to an arbitrary, existing PDF file: this would allow +Ghostscript to add thumbnails to PDF files generated by other programs. +<I>Much of the code needed to do this has already been written +for Ghostscript's PDF linearizer: see +<b><tt>lib/pdfwrite.ps</tt></b>. A user has implemented this as well, +using a separate program that calls Ghostscript: see +<a href="http://www.uni-giessen.de/~g029/eurotex99/oberdiek/"> +http://www.uni-giessen.de/~g029/eurotex99/oberdiek/</a>. +</I> + +<h3>Consolidate inkjet drivers into a single family.</h3> + +<p> +In addition to factoring out the error diffusion code as described below, we +would like to see another attempt at reducing the enormous volume of code +for color inkjet drivers. There are three sets of drivers (gdevcdj.c, +gdevstc.c, gdevupd.c) with much overlapping functionality. The latter two +driver families make good attempts at factoring out things like head +geometry and canned control strings, but we think this problem deserves +another pass, especially in the hope of consolidating these drivers into a +single family. + +<h3>Download glyph bitmaps (with glyph decaching notification).</h3> + +<p> +See below under "Notification for glyph decaching." + +<h3>Preserve compression when writing PDF images.</h3> + +<p> +Currently, all images are decompressed by the interpreter before being +passed to the graphics library; the PDF writer may then compress them again. +Ordinarily, this only slows things down a little, but in the case of +DCT-encoded images that are being DCT-encoded in the output, image +degradation may occur. Ideally, the implementation should be smart enough +to not decode and re-encode the image. However, making this work properly +is difficult. <I>This would probably involve extending the library APIs for +images so that they could pass a stream, possibly including filters, instead +of the (fully decoded) data rows.</I> + +<hr> + +<h2><a name="Graphics_functionality"></a>Graphics functionality</h2> + +<h3>Support for 64-bit colors on 64-bit platforms.</h3> + +<p> +Currently, the library supports a maximum of 32 bits of data per pixel; we +would like to raise this limit to 64 bits on systems where the 'long' data +type is 64 bits wide. <I>The <b><tt>gx_color_index</tt></b> +type is already defined as 'long', but there are many places where the type +<b><tt>bits32</tt></b> is used for pixel values; there is a 32-bit +stored-image "device", but there is no 64-bit device; a few algorithms and +tables have knowledge of the 32-bit width built into them, only because the +C preprocessor doesn't have any kind of loop or repetition +capability.</I> + +<h3>In-RIP trapping.</h3> + +<p> +The PostScript specification includes an option for the interpreter to +implement trapping (adjustments of object boundaries to prevent visual +anomalies caused by slight misregistration of different ink layers): we +would like to implement this. <I>This is a complex and +difficult area; even many Adobe RIPs don't do it.</I> + +<h3>Hook FreeType TrueType library into graphics library.</h3> + +<p> +We would like to provide an option for good integration of the FreeType font +rasterizer into Ghostscript, since the FreeType code is better than +Ghostscript's current rasterizers. We understand that some users in Japan +have done this already, but we don't know if this is a good starting point +(the only documentation is in Japanese). <I>Their work uses +Ghostscript's 'xfont' interface, which is how Ghostscript interfaces to +platform facilities such as the X and MS Windows font capabilities. This is +a device-level interface and not the best place to do this: we would rather +have the graphics library interface to FreeType directly.</I> + +<h3>ICC profile support for output.</h3> + +<p> +Ghostscript 7.00 and later supports ICCBased color spaces of PDF +using the icclib package from +<a href="http://web.access.net.au/argyll/color.html "> +http://web.access.net.au/argyll/color.html</a> +but there is no facility to use ICC output (printer) profiles that +may be embedded in the PDF. Also it would be useful for PostScript +to be able to directly use a specific Intent from ICC profile to +convert output colors (as CRD's are now used). +<I>The primary difficulty is that the graphics library and PostScript +always use CIE XYZ as the connection space, but ICC profiles may +use CIELAB as the connection space, requiring conversion for use +with the graphics library. </I> + +<h3>Making halftones into "objects" and adding new types.</h3> + +<p> +Currently, knowledge of the specific data formats and algorithms for +halftoning permeates too many places in the library. We would like +halftoning to be more "object oriented" (using virtual procedures) so that +we could support other halftoning methods such as direct use of threshold +arrays, or the double-rectangle approach added in newer PostScript versions. +<I>Threshold arrays take much less space than the current +representation, generally at the expense of longer rendering time for +black-and-white images; double-rectangle representation would give us a +better implementation of AccurateScreens. We might want store both +threshold arrays and the current representation.</I> + +<h3>Factor out error diffusion routines, integrate ETS.</h3> + +<p> +Currently, several different inkjet drivers implement their own, very +similar but slightly differing error diffusion methods. This has caused +severe code bloat as well as tempting future driver writers to contribute to +it further. We want to factor out error diffusion into a common set of +facilities that drivers can use. <I>We would like to design +these facilities so that they can easily interface to the Even-Toned +Screening algorithms from artofcode (Raph Levien), to the extent that these +will be Open Source.</I> + +<h3>Improve, or generalize, linearization for stochastic threshold +data.</h3> + +<p> +The Ghostscript distribution includes a stochastic threshold array. This +array has some gamma correction built into it, which works well for some +output devices and not for others. We would like to provide a version of +this array without (or with less) gamma correction. <I>We have +original data available from which this could be done fairly easily.</I> + +<h3>Change sampled functions to use new interpreted functions.</h3> + +<p> +The PostScript language defines many functions relevant to graphics +rendering as being implemented by arbitrary PostScript procedures: transfer +(gamma correction), black generation, undercolor removal, several stages of +CIE color space and rendering, and color mapping for Separation and DeviceN +spaces. Since the graphics library can't call PostScript procedures, +Ghostscript currently samples these procedures at a fixed number of points +and interpolates linearly between the samples. As of Ghostscript 6.20, the +library can interpret a restricted subset of PostScript procedures directly +(basically those that only use arithmetic and comparisons: no loops, +sub-procedures, or data structures). Changing the rendering functions to +use this approach when possible would greatly improve output quality when +the functions are very non-linear (which we have actually seen in practice). +<I>This should only be done if the function is, in fact, +severely non-linear, since interpreting the function definition will almost +always be much slower than interpolating in the table.</I> + +<h3>Add optional cubic interpolation to RenderTable and other table +lookup.</h3> + +<p> +Currently, if a CIE rendering dictionary uses a lookup table for the final +step, Ghostscript always interpolates linearly between the entries. Cubic +interpolation should be supported as an option. A cubic interpolation +option is also needed for general table-lookup Functions. + +<h3>Add better (SVG-like) alpha channel and compositing to library.</h3> + +<p> +Ghostscript has partial support for alpha channel and for alpha and RasterOp +compositing. There is some architectural support for general compositing, +but it postdates the RasterOp implementation, and most of the RasterOp code +doesn't use it. We expect that the more extensive compositing and alpha +capabilities of SVG will find their way into PDF (and probably PostScript as +well) in the course of 2000 and 2001, and we will need to implement them. + +<hr> + +<h2><a name="Performance"></a>Performance</h2> + +<h3>Change band list logic to defer halftoning until rendering.</h3> + +<p> +Currently, when Ghostscript uses a band list, it does halftoning before +banding. It should do halftoning after banding: this produces smaller band +lists and shifts more work to the rasterizer (which is good because the +rasterizer can be multi-threaded internally for higher performance on +multiprocessors: see the next topic.) + +<h3>Reduce redundant data for smoothed banded images.</h3> + +<p> +When smoothed ("interpolated") images are written in the band list, extra +rows must be written above and below each band in order to provide the data +for interpolation. Currently, the number of such rows is computed very +conservatively; instead, the final interpolation algorithm should be +consulted to provide the correct value. <i>This is a small task.</i> + +<h3>Multi-threaded rasterizing</h3> + +<p> +For high-resolution devices, rasterization dominates execution time. On +multiprocessor systems, Ghostscript can do tasks in parallel: + +<ul> + +<li>Rasterize multiple bands simultaneously; + +<li>Rasterize multiple color planes of a single band simultaneously (if a +planar representation is being used); + +<li>For some computation-intensive tasks like smoothing images or filling +large regions, partition the task (possibly buffering more data to allow +larger-grain partitioning) and execute several partitions simultaneously. + +</ul> + +<p> +We would want these facilities implemented so that no conditional +compilation was involved: on uniprocessor systems, the locking API would +simply have a vacuous implementation. + +<h3>Notification for glyph decaching.</h3> + +<p> +Currently, drivers can't do a very good job of downloading rendered +character bitmaps to the device they manage, because they can't find out +when a bitmap is being deleted from Ghostscript's cache and therefore will +never be referenced again. Here is a sketch of how we would add this +capability to the graphics library: + +<ul> + +<li>The driver would implement the <b><tt>text_begin</tt></b> call, simply +to get access to a <b><tt>gs_imager_state</tt></b> that references the +rendered character cache. (The driver could always simply call the default +implementation of <b><tt>text_begin</tt></b>.) + +<li>In the <b><tt>text_begin</tt></b> procedure, the driver would call + +<blockquote><pre> +gs_glyph_decache_register(imager_state, notify_proc, proc_data) +</pre></blockquote> + +<p> +where <b><tt>proc_data</tt></b> was, or pointed to a structure that +included, a pointer to the driver. + +<li><b><tt>gs_glyph_decache_register</tt></b> would use the general +notification mechanism defined in <b><tt>gsnotify.h</tt></b> to call + +<blockquote><pre> +notify_proc(proc_data, pchar_data) +</pre></blockquote> + +<p> +whenever a bitmap was removed from the character cache. +<b><tt>pchar_data</tt></b> would point to some identification of the +character; perhaps just the bitmap ID, but possibly a +<b><tt>gx_cached_bits_common</tt></b> or even a <b><tt>cached_char</tt></b>. + +<li>The <b><tt>char_cache</tt></b> structure would be need an additional +member, a <b><tt>gs_notify_list_t</tt></b>. It would also need to add +finalization so that when it was freed, it would notify and unregister all +clients, using <b><tt>gs_notify_all(list, NULL)</tt></b> and then +<b><tt>gs_notify_release</tt></b>. + +</ul> + +<p> +<I>This facility was requested by the Display Ghostscript project, but it +could also be used to improve the output of the PCL XL driver and possibly +the X and PCL5 drivers.</I> + +<hr> + +<h2><a name="Other_functionality"></a>Other functionality</h2> + +<h3>OpenStep (Display PostScript + NeXT) extensions to Ghostscript.</h3> + +<p> +There is a project to create a GNU implementation of the OPENStep API, which +involves extending Ghostscript to provide the full functionality of Adobe's +Display PostScript system with some of the NeXT extensions. For more +information, please contact Net-Community <<a +href="mailto:scottc@net-community.com">scottc@net-community.com</a>>. + +<h3>Job Server implementation.</h3> + +<p> +For full Adobe PostScript compatibility, Ghostscript needs a real "job +server" to encapsulate the execution of PostScript files. +<I>See the section on "Job Execution Environment" in the PostScript +Language Reference Manual for details.</I> + +<h3>SVG (XML Structured Vector Graphics) interpreter.</h3> + +<p> +Ghostscript could be adapted with some work to read SVG. This would be an +interesting and challenging project because SVG's graphics model would +require extending the library (see above). <I>If SVG turns out to be an +important standard, it is important that there be a good free implementation +of it.</I> + +<h3><b><tt>%font%</tt></b> and other IODevices.</h3> + +<p> +Currently, the <b><tt>%font%</tt></b> IODevice is not implemented. We would +like to see this implemented using a general framework for implementing +IODevices (%xxxx%) entirely in PostScript, in an "object oriented" manner +very similiar to the way Resource categories are implemented. An IODevice +would be implemented as a dictionary with the following keys, whose values +would be procedures that implemented the corresponding operation: + +<blockquote><pre> +/File +/DeleteFile +/RenameFile +/Status +/FileNameForAll +/GetDevParams +/PutDevParams +</pre></blockquote> + +<p> +There would only be global IODevices, no local ones; the dictionary keeping +track of them would be stored in global VM. + +<p> +<I>This is an obscure feature that matters only because some PostScript code +uses <b><tt>filenameforall</tt></b> with this IODevice, rather than +<b><tt>filenameforall</tt></b> with the <b><tt>/Font</tt></b> Resource +category, to enumerate available fonts.</I> + +<h3>Repairing damaged or EOL-converted PDF files.</h3> + +<p> +Adobe Acrobat Reader can scan a PDF file that has had its end-of-lines +converted by careless users transferring the file across operating systems +as text rather than binary across, and reconstruct the cross-reference table +which the PDF interpreter requires. This only works if the file has no +binary data in it, which with PDF 1.3 is rarely the case. However, users +occasionally receive PDF files that have been damaged in this way, and it +might be useful to have a program that can repair them. <I>We think this +should probably be done as a separate program, possibly in PostScript, +similar to Ghostscript's PDF linearizer.</I> + +<h2><a name="Other_implementation"></a>Implementation improvements</h2> + +<h3>Fully re-entrant code.</h3> + +<p> +Currently, neither the PostScript interpreter nor the graphics library is +fully re-entrant (no writable globals). Making them fully re-entrant would +make Ghostscript usable in multi-threaded environments, and more easily +usable in embedded environments. Note that this is necessary, but far from +sufficient, for Ghostscript to allow simultaneous execution of a single +Ghostscript interpreter instance by multiple threads: that is probably +permanently out of the question. <I>Almost all drivers, including all of +the drivers in devs.mak which are maintained as part of the main Ghostscript +code, are already fully re-entrant; making the remaining ones re-entrant +should really be up to the driver author.</I> + +<h3>Ghostscript has no %ram% device.</h3> + +The %ram% device is documented in PS Supplement 3010 and 3011 dated August 30, 1999. +This is probably not a major impediment to portability, but it would be handy. +<p><I> +On Unix, the suggested implementation would be to create a subdirectory +of the temporary directory (usually /tmp), with the name chosen and the +directory created in such a way as to avoid /tmp races and similar +problems. Ghostscript should delete the subdirectory when it exits. +</I> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Ps-style.htm b/Master/xemtex/doc/ghostscript/Ps-style.htm new file mode 100644 index 00000000000..5cf2e643113 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Ps-style.htm @@ -0,0 +1,514 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Ghostscript PostScript coding guidelines</title> +<!-- $Id: Ps-style.htm,v 1.13.2.11.2.5 2003/05/17 14:39:00 giles Exp $ --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Ghostscript PostScript coding guidelines</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Summary">Summary of the coding guidelines</a> +<li><a href="#Introduction">Introduction</a> +<li><a href="#PS_features">Use of PostScript language features</a> +<ul> +<li><a href="#Restrictions">Restrictions</a> +<li><a href="#Protection">Protection</a> +<li><a href="#Standard_constructions">Standard constructions</a> +</ul> +<li><a href="#File_structuring">File structuring</a> +<li><a href="#Commenting">Commenting</a> +<li><a href="#Formatting">Formatting</a> +<ul> +<li><a href="#Indentation">Indentation</a> +<li><a href="#Spaces">Spaces</a> +</ul> +<li><a href="#Naming">Naming</a> +<li><a href="#Miscellany">Miscellany</a> +<ul> +<li><a href="#Non_standard_operators">Some useful non-standard operators</a> +<li><a href="#Useful_procedures">Some useful procedures</a> +<li><a href="#Other">Other</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Summary"></a>Summary of the coding guidelines</h2> + +<ul> + +<li>Don't store into literals. + +<li>Use <b><tt>loop</tt></b> to create a block with multiple exits. + +<li>Use a dictionary or an array for multi-way switches. + +<li>Start every file with a copyright notice, the file name, and a one-line +summary. + +<li>Comment every procedure with the arguments and result, and with the +function of the procedure unless it's obvious. + +<li>Comment the stack contents ad lib, and particularly at the beginning of +every loop body. + +<li>Indent every 2 spaces. + +<li>Always put { at the end of a line, and } at the beginning of a line, +unless the contents are very short. + +<li>Always put spaces between adjacent tokens. + +<li>Use only lower-case letters and digits for names, or Vienna style names, +except for an initial "." for names only used within a single file. + +<li>Don't allocate objects in heavily used code. + +<li>Consider factoring out code into a procedure if it is used more than +once. + +</ul> + +<hr> + +<h2><a name="Introduction"></a>Introduction</h2> + +<p> +The many rules that Ghostscript's code follows almost everywhere are meant +to produce code that is easy to read. It's important to observe them as +much as possible in order to maintain a consistent style, but if you find a +rule getting in your way or producing ugly-looking results once in a while, +it's OK to break it. + +<hr> + +<h2><a name="PS_features"></a>Use of PostScript language features</h2> + +<h3><a name="Restrictions"></a>Restrictions</h3> + +<p> +If you need to store a value temporarily, don't write into a literal in the +code, as in this fragment to show a character given the character code: + +<blockquote><pre> +( ) dup 0 4 -1 roll put show +</pre></blockquote> + +<p> +Instead, allocate storage for it: + +<blockquote><pre> +1 string dup 0 4 -1 roll put show +</pre></blockquote> + +<h3><a name="Protection"></a>Protection</h3> + +<p> +If an object is never supposed to change, use <b><tt>readonly</tt></b> to +make it read-only. This applies especially to permanently allocated objects +such as constant strings or dictionaries. + +<p> +During initialization, and occasionally afterwards, it may be necessary to +store into a read-only dictionary, or to store a pointer to a dictionary in +local VM into a dictionary in global VM. The operators +<b><tt>.forceput</tt></b> and <b><tt>.forceundef</tt></b> are available for +this purpose. To make these operators inaccessible to ordinary programs, +they are removed from <b><tt>systemdict</tt></b> at the end of +initialization: system code that uses them should always use +<b><tt>bind</tt></b> and <b><tt>odef</tt></b> (or +<b><tt>executeonly</tt></b>) to make uses of them inaccessible as well. + +<h3><a name="Standard_constructions"></a>Standard constructions</h3> + +<h4>Multi-way conditionals</h4> + +<p> +If you write a block of code with more than about 3 exit points, the usual +way to do it would be like this: + +<blockquote><pre> +{ + ... { + ...1 + } { + ... { + ...2 + } { + ... { + ...3 + } { + ...4 + } ifelse + } ifelse + } ifelse +} +</pre></blockquote> + +<p> +However, this causes the 4 logically somewhat parallel code blocks to be +indented differently, and as the indentation increases, it becomes harder to +see the structure visually. As an alternative, you can do it this way: + +<blockquote><pre> +{ % The loop doesn't actually loop: it just provides a common exit. + ... { + ...1 + exit + } if + ... { + ...2 + exit + } if + ... { + ...3 + exit + } if + ...4 + exit +} loop +</pre></blockquote> + +<p> +Don't forget the final exit, to prevent the loop from actually looping. + +<h4>Switches</h4> + +<p> +Use a dictionary or an array of procedures to implement a 'switch', rather +than a series of conditionals, if there are more than about 3 cases. For +example, rather than: + +<blockquote><pre> +dup /a eq { + pop ...a +} { + dup /b eq { + pop ...b + } { + dup /c eq { + pop ...c + } { + ...x + } ifelse + } ifelse +} ifelse +</pre></blockquote> + +<p> +(or using the loop/exit construct suggested above), consider: + +<blockquote><pre> +/xyzdict mark + /a {...a} bind + /b {...b} bind + /c {...c} bind +.dicttomark readonly def +... +//xyzdict 1 index .knownget { + exch pop exec +} { + ...x +} ifelse +</pre></blockquote> + +<hr> + +<h2><a name="File_structuring"></a>File structuring</h2> + +<p> +Every code file should start with comments containing + +<ol> +<li>a copyright notice; +<li>the name of the file in the form of an RCS Id: + +<blockquote><pre> +% Id$: filename.ps $ +</pre></blockquote> + +<li>a very brief summary (preferably only one line) of what the file +contains. +</ol> + +<p> +If you create a file by copying the beginning of another file, be sure to +update the copyright year and change the file name. + +<hr> + +<h2><a name="Commenting"></a>Commenting</h2> + +<p> +If a file has well-defined functional sections, put a comment at the +beginning of each section to describe its purpose or function. + +<p> +Put a comment before every procedure to describe what the procedure does, +unless it's obvious or the procedure's function is defined by the PLRM. In +case of doubt, don't assume it's obvious. If the procedure may execute a +deliberate 'stop' or 'exit' not enclosed in 'stopped' or a loop +respectively, that should be mentioned. However, information about the +arguments and results should go in the argument and result comment +(described just below) if possible, not the functional comment. + +<p> +Put a comment on every procedure to describe the arguments and results: + +<blockquote><pre> +/hypot { % <num1> <num2> hypot <real> + dup mul exch dup mul add sqrt +} def +</pre></blockquote> + +<p> +There is another commenting style that some people prefer to the above: + +<blockquote><pre> +/hypot { % num1 num2 --> realnum + dup mul exch dup mul add sqrt +} def +</pre></blockquote> + +<p> +We have adopted the first style for consistency with Adobe's documentation, +but we recognize that there are technical arguments for and against both +styles, and might consider switching some time in the future. If you have +strong feelings either way, please make your opinion known to +<b><tt>gs-devel@ghostscript.com</tt></b>. + +<p> +Put comments describing the stack contents wherever you think they will be +helpful; put such a comment at the beginning of every loop body unless you +have a good reason not to. + +<p> +When you change a piece of code, do <em>not</em> include a comment with your +name or initials. Also, do <em>not</em> retain the old code in a comment, +unless you consider it essential to explain something about the new code; in +that case, retain as little as possible. (CVS logs do both of these things +better than manual editing.) However, if you make major changes in a +procedure or a file, you may put your initials, the date, and a brief +comment at the head of the procedure or file respectively. + +<hr> + +<h2><a name="Formatting"></a>Formatting</h2> + +<h3><a name="Indentation"></a>Indentation</h3> + +<p> +Indent 2 spaces per indentation level. You may use tabs at the left margin +for indentation, with 1 tab = 8 spaces, but you should not use tabs anywhere +else, except to place comments. + +<p> +Indent { } constructs like this: + +<blockquote><pre> +... { + ... +} { + ... +} ... +</pre></blockquote> + +<p> +If the body of a conditional or loop is no more than about 20 characters, +you can put the entire construct on a single line if you want: + +<blockquote><pre> +... { ... } if +</pre></blockquote> + +rather than + +<blockquote><pre> +... { + ... +} if +</pre></blockquote> + +<p> +There is another indentation style that many people prefer to the above: + +<blockquote><pre> +... +{ ... +} +{ ... +} ... +</pre></blockquote> + +<p> +We have adopted the first style for consistency with our C code, but we +recognize that there are technical arguments for and against both styles, +and might consider switching some time in the future. If you have strong +feelings either way, please make your opinion known to +<b><tt>gs-devel@ghostscript.com</tt></b>. + +<h3><a name="Spaces"></a>Spaces</h3> + +<p> +Always put spaces between two adjacent tokens, even if this isn't strictly +required. E.g., + +<blockquote><pre> +/Halftone /Category findresource +</pre></blockquote> + +<p> +not + +<blockquote><pre> +/Halftone/Category findresource +</pre></blockquote> + +<hr> + +<h2><a name="Naming"></a>Naming</h2> + +<p> +All names should consist only of letters and digits, possibly with an +initial ".", except for names drawn from the PostScript or PDF reference +manual, which must be capitalized as in the manual. In general, an initial +"." should be used for those and only those names that are not defined in a +private dictionary but that are meant to be used only in the file where they +are defined. + +<p> +For edits to existing code, names made up of multiple words should not use +any punctuation, or capitalization, to separate the words, again except for +names that must match a specification. For new code, you may use this +convention, or you may use the "Vienna" convention of capitalizing the first +letter of words, e.g., <b><tt>readSubrs</tt></b> rather than +<b><tt>readsubrs</tt></b>. If you use the Vienna convention, function names +should start with an upper case letter, variable names with a lower case +letter. Using the first letter of a variable name to indicate the +variable's type is optional, but if you do it, you should follow existing +codified usage (****** WE NEED A REFERENCE FOR THIS ******). + +<hr> + +<h2><a name="Miscellany"></a>Miscellany</h2> + +<h3><a name="Non_standard_operators"></a>Some useful non-standard +operators</h3> + +<dl> + +<dt><b><tt><obj1> <obj2> ... <objn> <n> .execn ...</tt></b> +<dd>This executes <b><tt>obj1</tt></b> through <b><tt>objn</tt></b> in that +order, essentially equivalent to + +<blockquote><pre> +<obj1> <obj2> ... <objn> <n> array astore {exec} forall +</pre></blockquote> + +<p> +except that it doesn't actually create the array. + +<dt><b><tt><dict> <key> <b>.knownget</b> <value> true</tt></b> +<dt><b><tt><dict> <key> <b>.knownget</b> false</tt></b> + +<dd>This combines <b><tt>known</tt></b> and <b><tt>get</tt></b> in the +obvious way. + +<dt><b><tt><name> <proc> odef -</tt></b> + +<dd>This defines <b><tt>name</tt></b> as a "pseudo-operator". The value of +<b><tt>name</tt></b> will be executable, will have type +<b><tt>operatortype</tt></b>, and will be executed if it appears directly in +the body of a procedure (like an operator, unlike a procedure), but what +will actually be executed will be <b><tt>proc</tt></b>. In addition, if the +execution of <b><tt>proc</tt></b> is ended prematurely (by +<b><tt>stop</tt></b>, including the <b><tt>stop</tt></b> that is normally +executed when an error occurs, or <b><tt>exit</tt></b>) and the operand and +dictionary stacks are at least as deep as they were when the "operator" was +invoked, the stacks will be cut back to their original depths before the +error is processed. Thus, if pseudo-operator procedures are careful not to +remove any of their operands until they reach a point in execution beyond +which they cannot possibly cause an error, they will behave just like +operators in that the stacks will appear to be unchanged if an error occurs. + +</dl> + +<h3><a name="Useful_procedures"></a>Some useful procedures</h3> + +<dl> + +<dt><b><tt><object> <errorname> signalerror -</tt></b> + +<dd>Signal an error with the given name and the given "current object". +This does exactly what the interpreter does when an error occurs. + +</dl> + +<h3><a name="Other"></a>Other</h3> + +<p> +If you can avoid it, don't allocate objects (strings, arrays, dictionaries, +gstates, etc.) in commonly used operators or procedures: these will need to +be garbage collected later, slowing down execution. Instead, keep values on +the stack, if you can. The <b><tt>.execn</tt></b> operator discussed above +may be helpful in doing this. + +<p> +If you find yourself writing the same stretch of code (more than about half +a dozen tokens) more than once, ask yourself whether it performs a function +that could be made into a procedure. + + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 2000 Aladdin Enterprises. All rights +reserved.</small> + +<small> +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. +</small> + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Ps2epsi.htm b/Master/xemtex/doc/ghostscript/Ps2epsi.htm new file mode 100644 index 00000000000..3656b722a08 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Ps2epsi.htm @@ -0,0 +1,154 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Convert PostScript to Encapsulated PostScript Interchange format</title> +<!-- $Id: Ps2epsi.htm,v 1.15.2.12.2.6 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: ps2epsi.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Convert PostScript to Encapsulated PostScript Interchange +format</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Overview">Overview</a> +<li><a href="#Usage">Usage</a> +<ul> +<li><a href="#Unix_usage">Unix</a> +</ul> +<li><a href="#Limitations">Limitations</a> +<li><a href="#Files">Files</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +The information in this document was contributed by George Cameron +<<a href="mailto:george@bio-medical-physics.aberdeen.ac.uk">george@bio-medical-physics.aberdeen.ac.uk</a>>; +please direct to him any questions about it. Because the software +described here is no longer being maintained, this document may be +obsolete, or inconsistent with <b><tt>ps2epsi.1</tt></b>. + +<p> +For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Overview"></a>Overview</h2> + +<p> +<b><tt>ps2epsi</tt></b> is a utility based on Ghostscript, which takes as +input a PostScript file and generates as output a new file which conforms +to Adobe's Encapsulated PostScript Interchange (EPSI) format, a special +form of +<a href="http://partners.adobe.com/asn/developer/pdfs/tn/5002.EPSF_Spec.pdf" +class="offsite">Encapsulated PostScript</a> +(EPS) which adds to the beginning of the file, as PostScript comments, a +low-resolution monochrome bitmap image of the final displayed page. +Programs which understand EPSI can use this bitmap as a preview on screen +of the full PostScript page. The displayed quality is often not very good, +but the final printed version uses the "real" PostScript, and thus has the +normal full PostScript quality. + +<hr> + +<h2><a name="Usage"></a>Usage</h2> + +<h3><a name="Unix_usage"></a>Unix</h3> + +<p> +Using the supplied shell script <b><tt>ps2epsi</tt></b>, the command is + +<blockquote> +<b><tt>ps2epsi</tt></b> <b><em>infile.ps</em></b> <b><em>[outfile.epsi]</em></b> +</blockquote> + +<p> +where <b><em>infile.ps</em></b> is the input file and +<b><em>outfile.epsi</em></b> is the output EPSI file to be created. If the +output filename is omitted, <b><tt>ps2epsi</tt></b> generates one from the +input filename; and any standard extension (<b><tt>.ps</tt></b>, +<b><tt>.cps</tt></b>, <b><tt>.eps</tt></b> or <b><tt>.epsf</tt></b>) of the +input file is replaced in the output file with the extension +<b><tt>.epsi</tt></b>. + +<hr> + +<h2><a name="Limitations"></a>Limitations</h2> + +<p> +Not all PostScript files can be encapsulated, because there are +restrictions in what is permitted in a PostScript file for it to be +properly encapsulated. <b><tt>ps2epsi</tt></b> does a little extra work to +try to help encapsulation, and it automatically calculates the bounding box +required for all encapsulated PostScript files, so most of the time it does +a pretty good job. There are certain to be cases, however, when +encapsulation fails because of the nature of the original PostScript file. + +<hr> + +<h2><a name="Files"></a>Files</h2> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1"><b><tt>ps2epsi</tt></b> files</font><hr> +<tr valign=bottom> + <th align=left>File + <td> + <th align=left>Contents +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>Ps2epsi.htm</tt></b> + <td> + <td>This document +<tr valign=top> <td><b><tt>ps2epsi</tt></b> + <td> + <td>Unix shell script +<tr valign=top> <td><b><tt>ps2epsi.ps</tt></b> + <td> + <td>Ghostscript program which does the work +</table></blockquote> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> + +<hr> + +<p> +<small>Copyright © 1998, 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Ps2pdf.htm b/Master/xemtex/doc/ghostscript/Ps2pdf.htm new file mode 100644 index 00000000000..6d369674969 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Ps2pdf.htm @@ -0,0 +1,502 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>ps2pdf: PostScript-to-PDF converter</title> +<!-- $Id: Ps2pdf.htm,v 1.32.2.11.2.5 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: ps2pdf.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1><tt>ps2pdf</tt>: PostScript-to-PDF converter</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Overview">Overview</a> +<li><a href="#Usage">Usage</a> +<li><a href="#Options">Options</a> +<li><a href="#Limitations">Limitations</a> +<li><a href="#Problems">Known problems</a> +<li><a href="#Ps2pdf_vs_AD">Comparison of <b><tt>ps2pdf</tt></b> and Acrobat Distiller</a> +<li><a href="#Acknowledgments">Acknowledgments</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Overview"></a>Overview</h2> + +<b><tt>ps2pdf</tt></b> is a work-alike for nearly all the functionality (but +not the user interface) of Adobe's Acrobat<small><sup>TM</sup></small> +Distiller<small><sup>TM</sup></small> product: it converts PostScript files +to Portable Document Format (PDF) files. + +<p> +<b><tt>ps2pdf</tt></b> is implemented as a very small command script (batch +file) that invokes Ghostscript, selecting a special "output device" called +<b><tt>pdfwrite</tt></b>. In order to use <b><tt>ps2pdf</tt></b>, the +<b><tt>pdfwrite</tt></b> device must be included in the makefile when +Ghostscript was compiled; see the <a +href="Make.htm#Features_and_devices">documentation on building +Ghostscript</a> for details: this is currently the case on all platforms, in +Ghostscript as we distribute it. + +<hr> + +<h2><a name="Usage"></a>Usage</h2> + +<p> +The usage for <b><tt>ps2pdf</tt></b> is + +<blockquote><b><tt> +ps2pdf</tt></b> <em>[options] input.[e]ps output.pdf</em> +</blockquote> + +<p> +or, on Unix systems and some versions of Windows NT and OS/2 + +<blockquote><b><tt> +ps2pdf</tt></b> <em>input.[e]ps</em> +</blockquote> + +<p> +which is equivalent to + +<blockquote><b><tt> +ps2pdf</tt></b> <em>input.[e]ps input.pdf</em> +</blockquote> + +<p> +There are actually several different <b><tt>ps2pdf</tt></b><em>*</em> scripts: +the name <b><tt>ps2pdf</tt></b> above refers to any of them. + +<ul> + +<li><b><tt>ps2pdf12</tt></b> will always produce PDF 1.2 output (Acrobat +3-and-later compatible). + +<li><b><tt>ps2pdf13</tt></b> will always produce PDF 1.3 output (Acrobat +4-and-later compatible). + +<li><b><tt>ps2pdf14</tt></b> will always produce PDF 1.4 output (Acrobat +5-and-later compatible). + +<li><b><tt>ps2pdf</tt></b> per se currently produces PDF 1.2 output (Acrobat +3-and-later compatible). However, this may change in the future. If you +care about the compatibility level of the output, use +<b><tt>ps2pdf12</tt></b>, <b><tt>ps2pdf13</tt></b>, or +<b><tt>ps2pdf14</tt></b>, or use the +<b><tt>-dCompatibilityLevel=</tt></b><em>1.x</em> switch in the command +line. + +</ul> + +<p> +All of these scripts actually call a script named <b><tt>ps2pdfwr</tt></b> +or <b><tt>ps2pdfxx</tt></b>. The Unix <b><tt>ps2pdfwr</tt></b> script +assumes that the Ghostscript executable is named <b><tt>gs</tt></b>; it is +unlikely that you will need to change this. The DOS and MS Windows +<b><tt>ps2pdfxx.bat</tt></b> script uses the value of the +<b><tt>GSC</tt></b> environment variable, if defined, as the name of the +executable; otherwise the script assumes the executable is named +<b><tt>gswin32c</tt></b>. So in these environments, if the executable has a +different name, you must set <b><tt>GSC</tt></b> to the name of the +executable. + +<hr> + +<h2><a name="Options"></a>Options</h2> + +<p> +The <em>options</em> in the command line may include any switches that may +be used with Ghostscript's PostScript and PDF interpreter (see <a +href="Use.htm#Switches">here</a> for a complete list), although almost none +of them are useful with <b><tt>ps2pdf</tt></b>. The following may be +useful: + +<dl> + +<dt><b><tt>-r</tt></b><em>resolution</em> +<dd>Sets the resolution for pattern fills and for fonts that must be +converted to bitmaps. + +<dt><b><tt>-dProcessColorModel=</tt></b><em>device_color_space</em> <dd>Sets +the color space to be used for device-dependent colors in the +output. <em>device_color_space</em> may be <b><tt>/DeviceGray</tt></b>, +<b><tt>/DeviceRGB</tt></b>, or <b><tt>/DeviceCMYK</tt></b>; the default +value is <b><tt>/DeviceRGB</tt></b>. + +</dl> + +<p> +More importantly, <em>options</em> may include +<b><tt>-d</tt></b><em>parameter</em>=<em>value</em> or +<b><tt>-s</tt></b><em>parameter</em>=<em>string</em> switches for setting +"distiller parameters", Adobe's documented parameters for controlling the +conversion process. The PostScript <b><tt>setdistillerparams</tt></b> and +<b><tt>currentdistillerparams</tt></b> operators are also recognized when +running <b><tt>ps2pdf</tt></b>, and provide an equivalent way to set these +parameters from within the PostScript input file. + +<p> +<b><tt>ps2pdf</tt></b> also recognizes the following switches: + +<dl> +<dt><b><tt>-dPDFSETTINGS=</tt></b><em>configuration</em> +<dd>Presets the "distiller parameters" to one of four predefined settings: + +<ul> + +<li><b><tt>/screen</tt></b> selects low-resolution output similar to the +Acrobat Distiller "Screen Optimized" setting. + +<li><b><tt>/printer</tt></b> selects output similar to the Acrobat Distiller +"Print Optimized" setting. + +<li><b><tt>/prepress</tt></b> selects output similar to Acrobat Distiller +"Prepress Optimized" setting. + +<li><b><tt>/default</tt></b> selects output intended to be useful across a +wide variety of uses, possibly at the expense of a larger output file. + +</ul> + +</dl> + +<p> +<b><tt>ps2pdf</tt></b> recognizes all of the Acrobat Distiller 4 parameters +documented in +<a href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/distparm.pdf"> +Adobe Technical Note #5151</a>. Cells in the table containing '=' mean that +the value of the parameter is the same as in the "default" column. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=bottom> + <th align=left>Parameter name + <td> + <th align=left>Notes + <td> + <th align=left>default + <td> + <th align=left>screen + <td> + <th align=left>printer + <td> + <th align=left>prepress +<tr> <td colspan=11><hr> +<tr valign=top><td><b><tt>ASCII85EncodePages</tt></b><td><td><td><td>false<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>AlwaysEmbed</tt></b><td><td><td><td>[]<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>AntiAliasColorImages</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>AntiAliasGrayImages</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>AntiAliasMonoImages</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>AutoFilterColorImages</tt></b><td><td>(1)<td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>AutoFilterGrayImages</tt></b><td><td>(1)<td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>AutoPositionEPSFiles</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>AutoRotatePages</tt></b><td><td><td><td>/PageByPage<td><td>/PageByPage<td><td>/None<td><td>/None +<tr valign=top><td><b><tt>Binding</tt></b><td><td>(0)<td><td>/Left<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>CalCMYKProfile</tt></b><td><td>(0)<td><td>()<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>CalGrayProfile</tt></b><td><td>(0)<td><td>()<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>CalRGBProfile</tt></b><td><td>(0)<td><td>()<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>CannotEmbedFontPolicy</tt></b><td><td>(0)<td><td>/Warning<td><td>/Warning<td><td>/Warning<td><td>/Error +<tr valign=top><td><b><tt>ColorACSImageDict</tt></b><td><td><td><td>(note 7)<td><td>(note 7)<td><td>(note 8)<td><td>(note 9) +<tr valign=top><td><b><tt>ColorConversionStrategy</tt></b><td><td>(0,6)<td><td>/LeaveColorUnchanged<td><td>/sRGB<td><td>/UseDeviceIndependentColor<td><td>/LeaveColorUnchanged +<tr valign=top><td><b><tt>ColorImageDepth</tt></b><td><td><td><td>-1<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>ColorImageDict</tt></b><td><td><td><td>(note 7)<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>ColorImageFilter</tt></b><td><td><td><td>/DCTEncode<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>ColorImageDownsampleThreshold</tt></b><td><td><td><td>1.5<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>ColorImageDownsampleType</tt></b><td><td>(3)<td><td>/Subsample<td><td>/Average<td><td>/Bicubic<td><td>/Bicubic +<tr valign=top><td><b><tt>ColorImageResolution</tt></b><td><td><td><td>72<td><td>72<td><td>300<td><td>300 +<tr valign=top><td><b><tt>CompatibilityLevel</tt></b><td><td><td><td>1.3<td><td>1.2<td><td>1.3<td><td>1.3 +<tr valign=top><td><b><tt>CompressPages</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>ConvertCMYKImagesToRGB</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>ConvertImagesToIndexed</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>CoreDistVersion</tt></b><td><td><td><td>4000<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>CreateJobTicket</tt></b><td><td>(0)<td><td>false<td><td>false<td><td>true<td><td>true +<tr valign=top><td><b><tt>DefaultRenderingIntent</tt></b><td><td><td><td>/Default<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>DetectBlends</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>DoThumbnails</tt></b><td><td>(0)<td><td>false<td><td>false<td><td>false<td><td>true +<tr valign=top><td><b><tt>DownsampleColorImages</tt></b><td><td><td><td>false<td><td>true<td><td>false<td><td>false +<tr valign=top><td><b><tt>DownsampleGrayImages</tt></b><td><td><td><td>false<td><td>true<td><td>false<td><td>false +<tr valign=top><td><b><tt>DownsampleMonoImages</tt></b><td><td><td><td>false<td><td>true<td><td>false<td><td>false +<tr valign=top><td><b><tt>EmbedAllFonts</tt></b><td><td><td><td>true<td><td>false<td><td>true<td><td>true +<tr valign=top><td><b><tt>EmitDSCWarnings</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>EncodeColorImages</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>EncodeGrayImages</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>EncodeMonoImages</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>EndPage</tt></b><td><td>(0)<td><td>-1<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>GrayACSImageDict</tt></b><td><td><td><td>(note 7)<td><td>(note 7)<td><td>(note 8)<td><td>= +<tr valign=top><td><b><tt>GrayImageDepth</tt></b><td><td><td><td>-1<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>GrayImageDict</tt></b><td><td><td><td>(note 7)<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>GrayImageDownsampleThreshold</tt></b><td><td><td><td>1.5<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>GrayImageDownsampleType</tt></b><td><td>(3)<td><td>/Subsample<td><td>/Average<td><td>/Bicubic<td><td>/Bicubic +<tr valign=top><td><b><tt>GrayImageFilter</tt></b><td><td><td><td>/DCTEncode<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>GrayImageResolution</tt></b><td><td><td><td>72<td><td>72<td><td>300<td><td>300 +<tr valign=top><td><b><tt>ImageMemory</tt></b><td><td>(0)<td><td>500000<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>LockDistillerParams</tt></b><td><td><td><td>false<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>LZWEncodePages</tt></b><td><td>(2)<td><td>false<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>MaxSubsetPct</tt></b><td><td><td><td>100<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>MonoImageDepth</tt></b><td><td><td><td>-1<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>MonoImageDict</tt></b><td><td><td><td><<K -1>><td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>MonoImageDownsampleThreshold</tt></b><td><td><td><td>1.5<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>MonoImageDownsampleType</tt></b><td><td><td><td>/Subsample<td><td>/Average<td><td>/Bicubic<td><td>/Bicubic +<tr valign=top><td><b><tt>MonoImageFilter</tt></b><td><td><td><td>/CCITTFaxEncode<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>MonoImageResolution</tt></b><td><td><td><td>300<td><td>300<td><td>1200<td><td>1200 +<tr valign=top><td><b><tt>NeverEmbed</tt></b><td><td><td><td>[]<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>OPM</tt></b><td><td><td><td>1<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>Optimize</tt></b><td><td>(0,5)<td><td>false<td><td>true<td><td>true<td><td>true +<tr valign=top><td><b><tt>ParseDSCComments</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>ParseDSCCommentsForDocInfo</tt></b><td><td><td><td>true<td><td>false<td><td>true<td><td>true +<tr valign=top><td><b><tt>PreserveCopyPage</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>PreserveEPSInfo</tt></b><td><td>(0)<td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>PreserveHalftoneInfo</tt></b><td><td><td><td>false<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>PreserveOPIComments</tt></b><td><td>(0)<td><td>false<td><td>false<td><td>true<td><td>true +<tr valign=top><td><b><tt>PreserveOverprintSettings</tt></b><td><td><td><td>false<td><td>false<td><td>true<td><td>true +<tr valign=top><td><b><tt>sRGBProfile</tt></b><td><td>(0)<td><td>()<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>StartPage</tt></b><td><td>(0)<td><td>1<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>SubsetFonts</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>TransferFunctionInfo</tt></b><td><td>(4)<td><td>/Preserve<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>UCRandBGInfo</tt></b><td><td><td><td>/Remove<td><td>/Remove<td><td>/Preserve<td><td>/Preserve +<tr valign=top><td><b><tt>UseFlateCompression</tt></b><td><td><td><td>true<td><td>=<td><td>=<td><td>= +<tr valign=top><td><b><tt>UsePrologue</tt></b><td><td>(0)<td><td>false<td><td>=<td><td>=<td><td>= +</table></blockquote> + +<p> +(note 0) This parameter can be set and queried, but currently has no effect. + +<p> +(note 1) <b><tt>AutoFilterxxxImages</tt></b> doesn't examine the image to +decide between JPEG and LZW or Flate compression: it uses JPEG compression +if the image has 8 bits per component and does not use an Indexed color +space, and LZW or Flate compression otherwise. + +<p> +(note 2) Because of Unisys's threats regarding the Welch patent, +<b><tt>ps2pdf</tt></b> cannot actually use LZW compression: instead, it +treats all requests for LZW compression as calling for Flate compression if +<b><tt>UseFlateCompression</tt></b> is true and +<b><tt>CompatibilityLevel</tt></b> >= 1.2, and ignores them otherwise. + +<p> +(note 3) The <b><tt>xxxDownsampleType</tt></b> parameters can also have the +value /Bicubic (a Distiller 4 feature), which is currently treated as +equivalent to /Average. + +<p> +(note 4) Currently, the transfer function is always applied. If the +corresponding parameter is set to <b><tt>/Preserve</tt></b>, the function +setting is also copied into the PDF file. + +<p> +(note 5) Optimization (linearization) is implemented with a separate +program, <b><tt>pdfopt</tt></b> <em>input.pdf</em> <em>output.pdf</em>; the +<b><tt>Optimize</tt></b> parameter has no effect. + +<p> +(note 6) Currently, colors for images and shadings are left in the color +space specified in the PostScript input, except for +<b><tt>ConvertCMYKImagesToRGB</tt></b>; the current color in the graphics +state (used for fill, stroke, text, and imagemask) is always converted to +the color space specified by the current value of +<b><tt>ProcessColorModel</tt></b>. The intended behavior is the same as for +Acrobat Distiller, except that if <b><tt>ColorConversionStrategy</tt></b> is +set to <b><tt>/UseDeviceDependentColor</tt></b>, colors are converted to the +color space specified by <b><tt>ProcessColorModel</tt></b> rather than +always to <b><tt>/DeviceRGB</tt></b>. + +<p> +(note 7) The default image parameter dictionary is +<blockquote><b><tt> +<< /QFactor 0.9 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >> +</tt></b></blockquote> + +<p> +(note 8) The printer ACS image parameter dictionary is +<blockquote><b><tt> +<< /QFactor 0.55 /Blend 1 /HSamples [2 1 1 2] /VSamples [2 1 1 2] >> +</tt></b></blockquote> + +<p> +(note 9) The prepress ACS image parameter dictionary is +<blockquote><b><tt> +<< /QFactor 0.25 /HSamples [1 1 1 1] /VSamples [1 1 1 1] >> +</tt></b></blockquote> + +<hr> + +<h2><a name="Limitations"></a>Limitations</h2> + +<p> +<b><tt>ps2pdf</tt></b> will sometimes convert text to high-resolution +bitmapped fonts rather than to embedded outline fonts. This will occur when +the PostScript file uses Type 3, CIDFontType 1, or CIDFontType 4 fonts, or +Type 0 fonts that reference any of these; it may also occur in some cases if +the input file uses fonts with non-standard encodings, or in some other rare +cases. + +<p> +The PDF output always represents the colors of text and graphics in +DeviceGray or DeviceRGB color space (or DeviceCMYK if the +<b><tt>ProcessColorModel</tt></b> parameter has been set to +<b><tt>/DeviceCMYK</tt></b>); all other color spaces are converted to these. +However, for images, it will retain the original color space for DeviceGray, +DeviceRGB, DeviceCMYK, certain CIEBased spaces, and Indexed spaces based on +these. + +<p> +<b><tt>ps2pdf</tt></b> will sometimes convert PostScript constructs to +lower-level ones, even if a higher-level construct is available. For +example, if the PostScript file uses <b><tt>charpath</tt></b> to set a +clipping path consisting of text, <b><tt>ps2pdf</tt></b> will write the +clipping path as a path in the PDF file, rather than as text, even though +PDF is able to express clipping with text. This is only a performance +issue, and will be improved incrementally over time. + +<p> +Some applications, such as HIGZ, produce PostScript files that use +ridiculously large coordinates. On such files, <b><tt>ps2pdf</tt></b> may +cause a <b><tt>limitcheck</tt></b> error. If this occurs, try reducing the +default internal resolution of 720 dpi by using the <b><tt>-r</tt></b> +switch, e.g., <b><tt>ps2pdf -r300 somefile.ps</tt></b>. + +<p> +<b><tt>ps2pdf</tt></b> ignores the PDF 1.3 (Acrobat 4.x) pdfmarks related to +document content structure: <b><tt>StRoleMap</tt></b>, +<b><tt>StClassMap</tt></b>, <b><tt>StPNE</tt></b>, +<b><tt>StBookmarkRoot</tt></b>, <b><tt>StPush</tt></b>, +<b><tt>StPop</tt></b>, <b><tt>StPopAll</tt></b>, <b><tt>StBMC</tt></b>, +<b><tt>StBDC</tt></b>, <b><tt>EMC</tt></b>, <b><tt>StOBJ</tt></b>, +<b><tt>StAttr</tt></b>, <b><tt>StStore</tt></b>, <b><tt>StRetrieve</tt></b>, +<b><tt>NamespacePush</tt></b>, <b><tt>NamespacePop</tt></b>, and +<b><tt>NI</tt></b>. While this causes some structural information to be +omitted from the output file, the displayed and printed output are normally +not affected. + +<p> +<b><tt>ps2pdf</tt></b> currently has only very limited support for PDF 1.4. +It writes out the blend mode, constant alpha, and text knockout graphics +state parameters, and it handles images with soft masks, but it does not +handle transparency groups, or soft masks in the graphics state. (Note that +there is no standard way to specify any of these things in PostScript, so +these statements only apply when the input file is already a PDF 1.4 file.) + +<hr> + +<h2><a name="Problems"></a>Known problems</h2> + +<p> +Distiller parameters should only be saved by <b><tt>save</tt></b> and +restored by <b><tt>restore</tt></b>, but they are also saved by +<b><tt>gsave</tt></b> and restored by <b><tt>grestore</tt></b>. + +<p> +Changing the value of the <b><tt>CompressPages</tt></b> parameter after any +marks have been made on the page may cause a crash. + +<p> +If the input file downloads Type 1 fonts incrementally, the output file may +contain embedded fonts with some information missing from the +FontDescriptor, which may crash Acrobat Reader 4 or produce incorrect +character spacing. + +<hr> + +<h2><a name="Ps2pdf_vs_AD"></a>Comparison of <b><tt>ps2pdf</tt></b> and +Acrobat Distiller</h2> + +<p> +According to users, the greatest benefit of <b><tt>ps2pdf</tt></b> is that +it is more robust than Acrobat Distiller: it will process complex and +difficult PostScript files that Acrobat Distiller is not able to handle. + +<p> +For certain documents, <b><tt>ps2pdf</tt></b> is much faster than Adobe +Distiller, and may be suitable for run-time conversions. George White, +a heavy user of <b><tt>ps2pdf</tt></b>, remarks: + +<blockquote> +I haven't seen a head to head comparison, but Distiller seems +slower when running on what should be a faster system (for instance, +Distiller on a PPC Mac vs a 25 MHz 68040 NeXT running +<b><tt>ps2pdf</tt></b>), so I think this is fair -- also, one of Mark +Doyle's postings indicated that Distiller was not fast enough for use as a +run-time server. In contrast, I find that I can use <b><tt>ps2pdf</tt></b> +as a post-processor during routine document creation. +</blockquote> + +<p> +On the other hand, there are some documents for which <b><tt>ps2pdf</tt></b> +may be much slower than Acrobat Distiller. Caveat user. + +<p> +<b><tt>ps2pdf</tt></b> usually produces output that is comparable in size to +the output of Acrobat Distiller; however, it sometimes produces much larger +output, especially if the input file involves pattern fills. + +<p> +Many users report that the combination of <b><tt>ps2pdf</tt></b> with +Acrobat Reader is superior to using a generic PostScript viewer +(<b><tt>psview</tt></b> or <b><tt>ghostview</tt></b>), particularly for +documents with many pages where the navigational support in PDF files +reduces the overhead involved in navigating conventional PostScript +documents. + +<hr> + +<h2><a name="Acknowledgments"></a>Acknowledgments</h2> + +<p> +Thanks to George N. White III <<a href="mailto:aa056@chebucto.ns.ca">aa056@chebucto.ns.ca</a>> of the Ocean +Sciences Division of the Bedford Institute of Oceanography in Dartmouth, +Nova Scotia for extensive testing of early versions of +<b><tt>ps2pdf</tt></b>, and for contributing most of this writeup. + +<p> +Thanks to Martin Hosken of SIL International <<a +href="http://www.sil.org">http://www.sil.org</a>> for help with testing +<b><tt>ps2pdf</tt></b> with a wide variety of international fonts. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Psfiles.htm b/Master/xemtex/doc/ghostscript/Psfiles.htm new file mode 100644 index 00000000000..2b5a7a75c1c --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Psfiles.htm @@ -0,0 +1,832 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>.ps files distributed with Ghostscript</title> +<!-- $Id: Psfiles.htm,v 1.22.2.12.2.5 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: psfiles.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Postscript files distributed with Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#General">Generally used system files</a> +<li><a href="#Obscure">More obscure system files</a> +<li><a href="#PDF_specific">PDF-specific system files</a> +<li><a href="#DPS_specific">Display PostScript-specific system files</a> +<li><a href="#Art">Art and examples</a> +<li><a href="#Utilities">Utilities</a> +<li><a href="#Development_tools">Development tools</a> +<li><a href="#Miscellany">Odds and ends</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="General"></a>Generally used system files</h2> + +<p> +These files are found in the <b><tt>lib</tt></b> subdirectory of +the Ghostscript source distribution. + +<dl> +<dt><tt>gs_*_e.ps</tt> +<dd><p> +These files define the Encodings known to Ghostscript. All of +them except <b><tt>gs_std_e.ps</tt></b> and <b><tt>gs_il1_e.ps</tt></b> +are loaded only if referred to. + +<dl> + +<dt> +PostScript Encodings: +<dd> +<a href="../lib/gs_ce_e.ps"><tt>gs_ce_e.ps</tt></a>, +<a href="../lib/gs_il1_e.ps"><tt>gs_il1_e.ps</tt></a>, +<a href="../lib/gs_std_e.ps"><tt>gs_std_e.ps</tt></a>, +<a href="../lib/gs_sym_e.ps"><tt>gs_sym_e.ps</tt></a>. + +<dt> +PDF Encodings: +<dd> +<a href="../lib/gs_mex_e.ps"><tt>gs_mex_e.ps</tt></a>, +<a href="../lib/gs_mro_e.ps"><tt>gs_mro_e.ps</tt></a>, +<a href="../lib/gs_pdf_e.ps"><tt>gs_pdf_e.ps</tt></a>, +<a href="../lib/gs_wan_e.ps"><tt>gs_wan_e.ps</tt></a>. + +<dt> +Non-standard Encodings: +<dd> +<a href="../lib/gs_dbt_e.ps"><tt>gs_dbt_e.ps</tt></a>, +<a href="../lib/gs_il2_e.ps"><tt>gs_il2_e.ps</tt></a>, +<a href="../lib/gs_ksb_e.ps"><tt>gs_ksb_e.ps</tt></a>, +<a href="../lib/gs_wl1_e.ps"><tt>gs_wl1_e.ps</tt></a>, +<a href="../lib/gs_wl2_e.ps"><tt>gs_wl2_e.ps</tt></a>, +<a href="../lib/gs_wl5_e.ps"><tt>gs_wl5_e.ps</tt></a>. + +<dt> +Pseudo-encodings: +<dd> +<a href="../lib/gs_css_e.ps"><tt>gs_css_e.ps</tt></a>, +<a href="../lib/gs_lgo_e.ps"><tt>gs_lgo_e.ps</tt></a>, +<a href="../lib/gs_lgx_e.ps"><tt>gs_lgx_e.ps</tt></a>, +<a href="../lib/gs_mgl_e.ps"><tt>gs_mgl_e.ps</tt></a>. + +</dl> +</dl> + +<dl> +<dt><a href="../lib/gs_btokn.ps"><tt>gs_btokn.ps</tt></a> +<dd><b><tt>gs_init.ps</tt></b> reads this in if the <b><tt>btoken</tt></b> +feature is included in the configuration. It provides support for binary +tokens. +</dl> + +<dl> +<dt><a href="../lib/gs_ccfnt.ps"><tt>gs_ccfnt.ps</tt></a> +<dd><b><tt>gs_init.ps</tt></b> reads this in if the <b><tt>ccfonts</tt></b> +feature is included in the configuration. It provides support for compiled +fonts. +</dl> + +<dl> +<dt><a href="../lib/gs_cff.ps"><tt>gs_cff.ps</tt></a> +<dd>Load CFF (compressed) fonts. +</dl> + +<dl> +<dt><a href="../lib/gs_cidcm.ps"><tt>gs_cidcm.ps</tt></a> +<dd>Code for recognizing font names of the form CIDFont-CMap (or +CIDFont--CMap) and creating the font automatically. +</dl> + +<dl> +<dt><a href="../lib/gs_cidfn.ps"><tt>gs_cidfn.ps</tt></a> +<dd><b><tt>ProcSet</tt></b> for implementing <b><tt>CIDFont</tt></b> and +<b><tt>CIDMap</tt></b> resources. +</dl> + +<dl> +<dt><a href="../lib/gs_cmap.ps"><tt>gs_cmap.ps</tt></a> +<dd><b><tt>ProcSet</tt></b> for implementing <b><tt>CMap</tt></b> resources. +</dl> + +<dl> +<dt><a href="../lib/gs_dscp.ps"><tt>gs_dscp.ps</tt></a> +<dd>Code to compensate for badly written PostScript files by setting +Orientation according to the DSC comments. +</dl> + +<dl> +<dt><a href="../lib/gs_epsf.ps"><tt>gs_epsf.ps</tt></a> +<dd>Allow the interpreter to recognize DOS EPSF file headers, and skip to the +PostScript section of the file. +</dl> + +<dl> +<dt><a href="../lib/gs_fonts.ps"><tt>gs_fonts.ps</tt></a> +<dd><b><tt>gs_init.ps</tt></b> reads this in. It initializes Ghostscript's +font machinery and provides some utility procedures that work with fonts. +</dl> + +<dl> +<dt><a href="../lib/gs_frsd.ps"><tt>gs_frsd.ps</tt></a> +<dd>Support for the PostScript LanguageLevel 3 +<b><tt>ReusableStreamDecode</tt></b> filter. +</dl> + +<dl> +<dt><a href="../lib/gs_init.ps"><tt>gs_init.ps</tt></a> +<dd>Ghostscript reads this automatically when it starts up. It contains +definitions of many standard procedures and initialization for a wide +variety of things. +</dl> + +<dl> +<dt><a href="../lib/gs_lev2.ps"><tt>gs_lev2.ps</tt></a> +<dd><b><tt>gs_init.ps</tt></b> reads this in if the Ghostscript interpreter +includes Level 2 PostScript functions. It contains definitions of +procedures and miscellaneous initialization for the Level 2 functions. +</dl> + +<dl> +<dt><a href="../lib/gs_ll3.ps"><tt>gs_ll3.ps</tt></a> +<dd>Initialize PostScript LanguageLevel 3 functions. +</dl> + +<dl> +<dt><a href="../lib/gs_res.ps"><tt>gs_res.ps</tt></a> +<dd><b><tt>gs_init.ps</tt></b> reads this in if the Level 2 resource +machinery is included. Currently, this is the case for all Level 2 +configurations. +</dl> + +<dl> +<dt><a href="../lib/gs_setpd.ps"><tt>gs_setpd.ps</tt></a> +<dd>Implementation of the <b><tt>setpagedevice</tt></b> operator. +</dl> + +<dl> +<dt><a href="../lib/gs_statd.ps"><tt>gs_statd.ps</tt></a> +<dd><b><tt>gs_init.ps</tt></b> reads this in. It creates a dummy +<b><tt>statusdict</tt></b> and some other environmental odds and ends for +the benefit of PostScript files that really want to be printed on a +LaserWriter. +</dl> + +<dl> +<dt><a href="../lib/gs_trap.ps"><tt>gs_trap.ps</tt></a> +<dd>Stub support for the PostScript LanguageLevel 3 "In-RIP trapping" +feature. +</dl> + +<dl> +<dt><a href="../lib/gs_ttf.ps"><tt>gs_ttf.ps</tt></a> +<dd>Support code for direct use of TrueType fonts. +</dl> + +<dl> +<dt><a href="../lib/gs_typ32.ps"><tt>gs_typ32.ps</tt></a> +<dd>Initialization file for Type 32 fonts. +</dl> + +<dl> +<dt><a href="../lib/gs_typ42.ps"><tt>gs_typ42.ps</tt></a> +<dd>Support code for Type 42 fonts (TrueType font in a PostScript "wrapper"). +</dl> + +<dl> +<dt><a href="../lib/gs_type1.ps"><tt>gs_type1.ps</tt></a> +<dd><b><tt>gs_init.ps</tt></b> reads this in if the Ghostscript interpreter +includes Type 1 font capability (which it normally does). +</dl> + +<hr> + +<h2><a name="Obscure"></a>More obscure system files</h2> + +<p> +These files are found in the <b><tt>lib</tt></b> subdirectory of +the Ghostscript source distribution. + +<dl> +<dt><a href="../lib/font2c.ps"><tt>font2c.ps</tt></a> +<dd>Convert a PostScript Type 0 or Type 1 font to C code that can be compiled +and linked into Ghostscript; see the documentation on fonts for <a +href="Fonts.htm#Precompiling">how to do this</a>. +</dl> + +<dl> +<dt><a href="../lib/gs_agl.ps"><tt>gs_agl.ps</tt></a> +<dd>Contains the mapping from Adobe glyph names to Unicode values, used to +support TrueType fonts. +</dl> + +<dl> +<dt><a href="../lib/gs_cmdl.ps"><tt>gs_cmdl.ps</tt></a> +<dd>This file is not used yet. Eventually it will replace C code that +parses the Ghostscript command line. +</dl> + +<dl> +<dt><a href="../lib/gs_diskf.ps"><tt>gs_diskf.ps</tt></a> +<dd>This file implements the <b><tt>-dDISKFONTS</tt></b> feature +(<b><tt>diskfont.dev</tt></b>). See the the usage documentation for <a +href="Use.htm#DISKFONTS">a description of this feature</a>. +</dl> + +<dl> +<dt><a href="../lib/gs_fform.ps"><tt>gs_fform.ps</tt></a> +<dd>A usable but imperfect PostScript implementation of Form caching. +</dl> + +<dl> +<dt><a href="../lib/gs_kanji.ps"><tt>gs_kanji.ps</tt></a> +<dd>This file provides support for the Wadalab free Kanji font. It is not +included automatically in any configuration. +</dl> + +<dl> +<dt><a href="../lib/gs_pdfwr.ps"><tt>gs_pdfwr.ps</tt></a> +<dd>This file contains some patches for providing information to the +<b><tt>pdfwrite</tt></b> driver. It is included only if the +<b><tt>pdfwrite</tt></b> driver is included. +</dl> + +<dl> +<dt><a href="../lib/gs_pfile.ps"><tt>gs_pfile.ps</tt></a> +<dd>This file provides runtime support for packed fonts. It is not +included automatically in any configuration. +</dl> + +<dl> +<dt><a href="../lib/gs_rdlin.ps"><tt>gs_rdlin.ps</tt></a> +<dd>A tiny patch for systems with built-in readline support. +</dl> + +<dl> +<dt><a href="../lib/ht_ccsto.ps"><tt>ht_ccsto.ps</tt></a> +<dd>A default stochastic CMYK halftone. This file is in the public domain. +</dl> + +<dl> +<dt><a href="../lib/stcolor.ps"><tt>stcolor.ps</tt></a> +<dd>Configure the (Epson) <b><tt>stcolor</tt></b> driver +</dl> + +<hr> + +<h2><a name="PDF_specific"></a>PDF-specific system files</h2> + +<p> +These files are found in the <b><tt>lib</tt></b> subdirectory of +the Ghostscript source distribution. + +<dl> +<dt><a href="../lib/gs_l2img.ps"><tt>gs_l2img.ps</tt></a> +<dd>The <b><tt>ProcSet</tt></b> that emulates the PostScript Level 2 +"<b><tt>image</tt></b>" operator on Level 1 systems. +</dl> + +<dl> +<dt><a href="../lib/pdf_base.ps"><tt>pdf_base.ps</tt></a> +<dd>Utilities for interpreting PDF objects and streams. +</dl> + +<dl> +<dt><a href="../lib/pdf_draw.ps"><tt>pdf_draw.ps</tt></a> +<dd>The interpreter for drawing-related PDF operations. +</dl> + +<dl> +<dt><a href="../lib/pdf_font.ps"><tt>pdf_font.ps</tt></a> +<dd>Code for handling fonts in PDF files. +</dl> + +<dl> +<dt><a href="../lib/pdf_main.ps"><tt>pdf_main.ps</tt></a> +<dd>Document- and page-level control for interpreting PDF files. +</dl> + +<dl> +<dt><a href="../lib/pdf_ops.ps"><tt>pdf_ops.ps</tt></a> +<dd>Definitions for most of the PDF operators. +</dl> + +<dl> +<dt><a href="../lib/pdf_sec.ps"><tt>pdf_sec.ps</tt></a> +<dd>PDF security (encryption) code. +</dl> + +<dl> +<dt><a href="../lib/pdfopt.ps"><tt>pdfopt.ps</tt></a> +<dd>A PDF linearizer ("optimizer"). +</dl> + +<dl> +<dt><a href="../lib/pdfwrite.ps"><tt>pdfwrite.ps</tt></a> +<dd>Support for writing PDF files. Currently used only by the linearizer, +but potentially useful for other kinds of PDF-processing utilities. +</dl> + +<dl> +<dt><a href="../lib/gs_icc.ps"><tt>gs_icc.ps</tt></a> <dd>Support for +ICC color profiles. These are not a standard PostScript feature, but +are used in the PDF interpreter, as ICC profiles may be embedded in +PDF files. +</dl> + +<hr> + +<h2><a name="DPS_specific"></a>Display PostScript-specific system files</h2> + +<p> +These files are found in the <b><tt>lib</tt></b> subdirectory of +the Ghostscript source distribution. + +<dl> +<dt><a href="../lib/gs_dpnxt.ps"><tt>gs_dpnxt.ps</tt></a> +<dd>NeXT Display PostScript extensions. +</dl> + +<dl> +<dt><a href="../lib/gs_dps.ps"><tt>gs_dps.ps</tt></a>, +<a href="../lib/gs_dps1.ps"><tt>gs_dps1.ps</tt></a>, +<a href="../lib/gs_dps2.ps"><tt>gs_dps2.ps</tt></a> +<dd><b><tt>gs_init.ps</tt></b> reads these in if the <b><tt>dps</tt></b> +feature is included in the configuration. They provide support for various +Display PostScript and Level 2 features. +</dl> + +<hr> + +<h2><a name="Art"></a>Art and examples</h2> + +<p> +These files are found in the <b><tt>examples</tt></b> subdirectory of +the Ghostscript source distribution. + +<dl> +<dt><a href="../examples/alphabet.ps"><tt>alphabet.ps</tt></a> +<dd>Prints a sample alphabet at several different sizes. +</dl> + +<dl> +<dt><a href="../examples/annots.pdf"><tt>annots.pdf</tt></a> +<dd>A sample file with a wide variety of PDF "annotations". +</dl> + +<dl> +<dt><a href="../examples/colorcir.ps"><tt>colorcir.ps</tt></a> +<dd>A set of nested ellipses made up of colored bars. +</dl> + +<dl> +<dt><a href="../examples/doretree.ps"><tt>doretree.ps</tt></a> +<dd>A 3-D image produced by a modeling program. This file is in the public +domain. +</dl> + +<dl> +<dt><a href="../examples/escher.ps"><tt>escher.ps</tt></a> +<dd>A colored version of a hexagonally symmetric Escher drawing of +interlocking butterflies. Can be printed on monochrome devices, with +somewhat less dramatic results. +</dl> + +<dl> +<dt><a href="../examples/golfer.ps"><tt>golfer.ps</tt></a> +<dd>A gray-scale picture of a stylishly dressed woman swinging a golf club. +</dl> + +<dl> +<dt><a href="../examples/grayalph.ps"><tt>grayalph.ps</tt></a> +<dd>Grayscaled text test pattern. +</dl> + +<dl> +<dt><a href="../examples/ridt91.eps"><tt>ridt91.eps</tt></a> +<dd>The RIDT '91 logo. Note that since this is an EPS file, you will have +to add "<b><tt>-c showpage</tt></b>" at the end of the command line to +print it or convert it to a raster file. +</dl> + +<dl> +<dt><a href="../examples/snowflak.ps"><tt>snowflak.ps</tt></a> +<dd>A rectangular grid of intricate colored snowflakes. (May render very +slowly.) +</dl> + +<dl> +<dt><a href="../examples/tiger.ps"><tt>tiger.ps</tt></a> +<dd>A dramatic colored picture of a tiger's head. +</dl> + +<dl> +<dt><a href="../examples/vasarely.ps"><tt>vasarely.ps</tt></a> +<dd>Colored rectangles and ellipses inspired by Victor Vasarely's experiments +with tilting circles and squares. +</dl> + +<dl> +<dt><a href="../examples/waterfal.ps"><tt>waterfal.ps</tt></a> +<dd>Prints text in a variety of different sizes, to help evaluate the +quality of text rendering. +</dl> + +<hr> + +<h2><a name="Utilities"></a>Utilities</h2> + +<p> +For more information on these utility programs, see the comments at the +beginnings of the files. The ones marked (*) have batch files or shell +scripts of the same name (like <b><tt>bdftops</tt></b> and +<b><tt>bdftops.bat</tt></b>) to invoke them conveniently. + +<p> +These files are found in the <b><tt>lib</tt></b> subdirectory of +the Ghostscript source distribution. + +<dl> +<dt><a href="../lib/addxchar.ps"><tt>addxchar.ps</tt></a> +<dd>A utility to add Central European and other Adobe extended Latin +characters to a Type 1 font. +</dl> + +<dl> +<dt><a href="../lib/align.ps"><tt>align.ps</tt></a> +<dd>A test page for determining the proper margin and offset parameters for +your printer. +</dl> + +<dl> +<dt><a href="../lib/bdftops.ps"><tt>bdftops.ps</tt></a> * +<dd>A utility for converting BDF fonts to outline form: see the <a +href="Fonts.htm">documentation on fonts</a>. +</dl> + +<dl> +<dt><a href="../lib/bench.ps"><tt>bench.ps</tt></a> +<dd>A file useful for running benchmarks. +</dl> + +<dl> +<dt><a href="../lib/caption.ps"><tt>caption.ps</tt></a> +<dd>A file for putting a caption in a box at the bottom of each page, +useful for trade show demos. +</dl> + +<dl> +<dt><a href="../lib/cid2code.ps"><tt>cid2code.ps</tt></a> +<dd>A utility for creating maps from CIDs to Unicode, useful when +substituting a TrueType font for an Adobe font. +</dl> + +<dl> +<dt><a href="../lib/docie.ps"><tt>docie.ps</tt></a> +<dd>An emulation of the CIE color mapping algorithms. +</dl> + +<dl> +<dt><a href="../lib/errpage.ps"><tt>errpage.ps</tt></a> +<dd>A file that you can put in front of your own files to make Ghostscript +(or a PostScript printer) produce an informative error page if something +goes wrong during the processing of your file(s). +</dl> + +<dl> +<dt><a href="../lib/font2pcl.ps"><tt>font2pcl.ps</tt></a> +<dd>A utility to write a font as a PCL bitmap font. +</dl> + +<dl> +<dt><a href="../lib/gslp.ps"><tt>gslp.ps</tt></a> * +<dd>A utility for doing "line printing" of plain text files. +</dl> + +<dl> +<dt><a href="../lib/gsnup.ps"><tt>gsnup.ps</tt></a> +<dd>A file that you can concatenate in front of (very well-behaved) +PostScript files to do N-up printing. It is deliberately simple and naive: +for more generality, use <b><tt>psnup</tt></b> (which, however, requires DSC +comments). +</dl> + +<dl> +<dt><a href="../lib/jispaper.ps"><tt>jispaper.ps</tt></a> +<dd>A file that makes the <b><tt>b0</tt></b> through <b><tt>b6</tt></b> +procedures refer to JIS B paper sizes rather than ISO B. +</dl> + + +<dl> +<dt><a href="../lib/impath.ps"><tt>impath.ps</tt></a> +<dd>A utility for reconstructing outlines from bitmap images, used by +<b><tt>bdftops</tt></b>. +</dl> + +<dl> +<dt><a href="../lib/landscap.ps"><tt>landscap.ps</tt></a> +<dd>A file that you can put in front of your own files to get them rendered +in landscape mode. +</dl> + +<dl> +<dt><a href="../lib/level1.ps"><tt>level1.ps</tt></a> +<dd>A file that turns off any Level 2 features. +</dl> + +<dl> +<dt><a href="../lib/packfile.ps"><tt>packfile.ps</tt></a> +<dd>A utility for compressing fonts into a single file. +</dl> + +<dl> +<dt><a href="../lib/pdf2dsc.ps"><tt>pdf2dsc.ps</tt></a> +<dd>A utility to read a PDF file and produce a DSC "index" file. +</dl> + +<dl> +<dt><a href="../lib/pf2afm.ps"><tt>pf2afm.ps</tt></a> * +<dd>A utility for producing AFM files from PFA, PFB, and optionally PFM +files. +</dl> + +<dl> +<dt><a href="../lib/pfbtopfa.ps"><tt>pfbtopfa.ps</tt></a> * +<dd>A utility to convert PFB (binary) font files to PFA (text) format. +</dl> + +<dl> +<dt><a href="../lib/prfont.ps"><tt>prfont.ps</tt></a> +<dd>A utility to print a font catalog. +</dl> + +<dl> +<dt><a href="../lib/printafm.ps"><tt>printafm.ps</tt></a> +<dd>A utility to print an AFM file on standard output. +</dl> + +<dl> +<dt><a href="../lib/ps2ai.ps"><tt>ps2ai.ps</tt></a> +<dd>A utility for converting an arbitrary PostScript file into a form +compatible with Adobe Illustrator. NOTE: <b><tt>ps2ai</tt></b> doesn't +work properly with Adobe's Helvetica-Oblique font, and other fonts whose +original <b><tt>FontMatrix</tt></b> involves skewing or rotation. +</dl> + +<dl> +<dt><a href="../lib/ps2ascii.ps"><tt>ps2ascii.ps</tt></a> * +<dd>A utility for extracting the ASCII text from PostScript source files. +It redefines many operators. For more information, see the comments in the +file. +</dl> + +<dl> +<dt><a href="../lib/ps2epsi.ps"><tt>ps2epsi.ps</tt></a> * +<dd>A utility for converting an arbitrary PostScript file into EPSI form. +</dl> + +<dl> +<dt><a href="../lib/quit.ps"><tt>quit.ps</tt></a> +<dd>A file containing just the word "<b><tt>quit</tt></b>". (The +<b><tt>-c</tt></b> switch now makes this unnecessary; this file exists for +backward compatibility.) +</dl> + +<dl> +<dt><a href="../lib/rollconv.ps"><tt>rollconv.ps</tt></a> +<dd>A utility for converting files produced by Macromedia's +<b><tt>Rollup</tt></b> program to a Type 0 form directly usable by +Ghostscript. +</dl> + +<dl> +<dt><a href="../lib/showpage.ps"><tt>showpage.ps</tt></a> +<dd>A file containing just the word "<b><tt>showpage</tt></b>". (The +<b><tt>-c</tt></b> switch now makes this unnecessary; this file exists for +backward compatibility.) +</dl> + +<dl> +<dt><a href="../lib/stocht.ps"><tt>stocht.ps</tt></a> +<dd>A file that installs the StochasticDefault halftone as the default, +which may improve output quality on inkjet printers. See the file for more +information. +</dl> + +<dl> +<dt><a href="../lib/viewcmyk.ps"><tt>viewcmyk.ps</tt></a> +<dd>A utility for displaying CMYK files. +</dl> + +<dl> +<dt><a href="../lib/viewgif.ps"><tt>viewgif.ps</tt></a> +<dd>A utility for displaying GIF files. +</dl> + +<dl> +<dt><a href="../lib/viewjpeg.ps"><tt>viewjpeg.ps</tt></a> +<dd>A utility for displaying JPEG files. +</dl> + +<dl> +<dt><a href="../lib/viewmiff.ps"><tt>viewmiff.ps</tt></a> +<dd>A utility for displaying MIFF files. +</dl> + +<dl> +<dt><a href="../lib/viewpbm.ps"><tt>viewpbm.ps</tt></a> +<dd>A utility for displaying PBM/PGM/PPM files. +</dl> + +<dl> +<dt><a href="../lib/viewpcx.ps"><tt>viewpcx.ps</tt></a> +<dd>A utility for displaying PCX files. +</dl> + +<dl> +<dt><a href="../lib/waterfal.ps"><tt>waterfal.ps</tt></a> +<dd>A utility to print a "waterfall" of fonts at different sizes. +</dl> + +<hr> + +<h2><a name="Development_tools"></a>Development tools</h2> + +<p> +These files are found in the <b><tt>lib</tt></b> subdirectory of +the Ghostscript source distribution. + +<dl> +<dt><a href="../lib/acctest.ps"><tt>acctest.ps</tt></a> +<dd>A utility that checks whether the interpreter enforces access +restrictions. +</dl> + +<dl> +<dt><a href="../lib/decrypt.ps"><tt>decrypt.ps</tt></a> +<dd>A utility for decrypting the <b><tt>eexec</tt></b> section of a font. +</dl> + +<dl> +<dt><a href="../lib/image-qa.ps"><tt>image-qa.ps</tt></a> +<dd>A comprehensive test of the image display operators. +</dl> + +<dl> +<dt><a href="../lib/markpath.ps"><tt>markpath.ps</tt></a> +<dd>A utility for showing the points on a path. +</dl> + +<dl> +<dt><a href="../lib/pcharstr.ps"><tt>pcharstr.ps</tt></a> +<dd>A utility for printing out the <b><tt>CharStrings</tt></b> and +<b><tt>Subrs</tt></b> in a Type 1 font. +</dl> + +<dl> +<dt><a href="../lib/ppath.ps"><tt>ppath.ps</tt></a> +<dd>A couple of utilities for printing out the current path, for debugging. +</dl> + +<dl> +<dt><a href="../lib/pphs.ps"><tt>pphs.ps</tt></a> +<dd>A utility to print the Primary Hint Stream of a linearized PDF file. +</dl> + +<dl> +<dt><a href="../lib/traceimg.ps"><tt>traceimg.ps</tt></a> +<dd>Trace the data supplied to the <b><tt>image</tt></b> operator. +</dl> + +<dl> +<dt><a href="../lib/traceop.ps"><tt>traceop.ps</tt></a> +<dd>A utility for tracing uses of any procedure or operator for debugging. +</dl> + +<dl> +<dt><a href="../lib/type1enc.ps"><tt>type1enc.ps</tt></a> +<dd>The Type 1 font format encryption and decryption algorithms, written in +PostScript. +</dl> + +<dl> +<dt><a href="../lib/uninfo.ps"><tt>uninfo.ps</tt></a> +<dd>Some utilities for printing out PostScript data structures. +</dl> + +<dl> +<dt><a href="../lib/unprot.ps"><tt>unprot.ps</tt></a> +<dd>A prologue to disable access checking. +</dl> + +<dl> +<dt><a href="../lib/viewps2a.ps"><tt>viewps2a.ps</tt></a> +<dd>A utility for displaying the output of <b><tt>ps2ascii.ps</tt></b>. +</dl> + +<dl> +<dt><a href="../lib/wftopfa.ps"><tt>wftopfa.ps</tt></a> +<dd>Convert a Wadalab (Japanese) base font to <b><tt>.PFA</tt></b> (or +<b><tt>.PFB</tt></b>) format. +</dl> + +<dl> +<dt><a href="../lib/winmaps.ps"><tt>winmaps.ps</tt></a> +<dd>A utility for creating mappings between the Adobe encodings and the +Microsoft Windows character sets. +</dl> + +<dl> +<dt><a href="../lib/wrfont.ps"><tt>wrfont.ps</tt></a> +<dd>A utility for writing out an unprotected Type 1 font, such as the +standard Ghostscript fonts. +</dl> + +<dl> +<dt><a href="../lib/zeroline.ps"><tt>zeroline.ps</tt></a> +<dd>A utility for testing how interpreters handle zero-width lines. +</dl> + +<hr> + +<h2><a name="Miscellany"></a>Odds and ends</h2> + +<p> +These files are found in the <b><tt>lib</tt></b> subdirectory of +the Ghostscript source distribution. + +<dl> +<dt><a href="../lib/lines.ps"><tt>lines.ps</tt></a> +<dd>A test program for line joins and caps. +</dl> + +<dl> +<dt><a href="../lib/markhint.ps"><tt>markhint.ps</tt></a> +<dd>Draw the hints for a Type 1 font. +</dl> + +<dl> +<dt><a href="../lib/showchar.ps"><tt>showchar.ps</tt></a> +<dd>Show a character's outline and rasterized forms. +</dl> + +<dl> +<dt><a href="../lib/stcinfo.ps"><tt>stcinfo.ps</tt></a> +<dd>Print and show parameters of the (Epson) <b><tt>stcolor</tt></b> driver. +</dl> + +<dl> +<dt><a href="../lib/type1ops.ps"><tt>type1ops.ps</tt></a> +<dd>The Type 1 font format opcodes. +</dl> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/README b/Master/xemtex/doc/ghostscript/README new file mode 100644 index 00000000000..193c9f09192 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/README @@ -0,0 +1,391 @@ + + Overview of Ghostscript + + If this is your first contact with Ghostscript, before continuing here + you should read the documentation for new users, where you'll find + * what Ghostscript does (PostScript and PDF previewing, conversion, + and printing); + * its licensing terms (free for ordinary use); + * what platforms it runs on (every platform you're likely to be + interested in); + * where to find some useful programs that enhance Ghostscript (like + user-friendly previewers for Unix, VMS, MS Windows, DOS, and + Macintosh); and + * what to do if you need help. + + The rest of this document is a roadmap to the Ghostscript + documentation. After looking through it, if you want to install + Ghostscript and not only use it, we recommend you read how to install + Ghostscript, and how to compile Ghostscript from source code (which is + necessary before installing it on Unix and VMS systems). + _________________________________________________________________ + +Table of contents + + * Document roadmap by theme + + What should I read if I'm a new user? + + Before building Ghostscript + + What should I read if I'm not a new user? + + What if I'm a developer? + + What if I'm writing documentation? + * Presence on the World Wide Web + + Ghostscript's home pages + + Adobe PostScript, Encapsulated PostScript, and PDF reference + documentation + + Other material on the WWW + * Which document contains what? + + Primarily for users: + + Devices.htm + Helpers.htm + Humor.htm + New-user.htm + Ps2epsi.htm + Ps2pdf.htm + Readme.htm + Unix-lpr.htm + Use.htm + + + For both users and developers: + + Changes.htm + Current.htm + CJK.htm + Fonts.htm + Hershey.htm + History*.htm + Install.htm + Language.htm + Make.htm + News.htm + Psfiles.htm + + + Primarily for developers: + + API.htm + C-style.htm + CJKTTCID.htm + DLL.htm + Develop.htm + Drivers.htm + Htmstyle.htm + Issues.htm + Lib.htm + Maintain.htm + Projects.htm + Ps-style.htm + Release.htm + Source.htm + Xfonts.htm + _________________________________________________________________ + +Document roadmap by theme + + What should I read if I'm a new user? + + A new user of Ghostscript should begin by reading the material + specifically for new users, then as many of these documents as seem + useful: + * how to install Ghostscript + * how to use Ghostscript; some of this information information also + found in gs.1, the Unix "man" page for Ghostscript. + * the catalogs at the beginning of devs.mak and contrib.mak, which + list all the devices for which Ghostscript is able to produce + output (although if you got Ghostscript in binary form, it will + only include some of these devices) + * detailed information about some specific devices that Ghostscript + knows about + * more detailed information about how to use Ghostscript under Unix + with lpr as a filter for non-PostScript printers + * about the fonts distributed with Ghostscript, including how to add + or replace fonts + * a description of the Ghostscript language, and its differences + from the documented PostScript language + * about the postscript files distributed with Ghostscript (other + than fonts) + + Before building Ghostscript + + If you are going to compile Ghostscript, rather than just use an + executable you got from somewhere, you should read: + * how to build Ghostscript and install it + _________________________________________________________________ + +What should I read if I'm not a new user? + + If you have already used Ghostscript, when you receive a new release + you should begin by reading this file, then + * News.htm, for incompatible changes and new features in the current + release; + * Current.htm, for known problems in the current release; + * if you wish, Changes.htm, for a detailed list of changes in the + current release; + * if you wish, History#.htm (currently History7.htm), for changes in + other releases. + _________________________________________________________________ + +What if I'm a developer? + + If you are going to do any development on or with Ghostscript at all, + you should at least look at + * the roadmap documentation for Ghostscript's source files and + architecture + + If you are going to write a new driver for Ghostscript, you should + read + * the guide to the Ghostscript source code + * the interface between Ghostscript and device drivers + * about the external font interface between Ghostscript and + platform-supplied fonts (but read about drivers in general first) + + If you intend to use Ghostscript in the form of a dynamic link library + (DLL) under OS/2 or Microsoft Windows or in the form of shared object + under GNU/Linux, read + * documentation on Ghostscript Interpreter API + + If you want to use Ghostscript as part of another program--as a + callable PostScript language interpreter--and not as a DLL or as a + self-contained executable application, you should begin by reading + * the source file imain.h, the documented API for Ghostscript not as + a DLL + + or if you are going to use only the Ghostscript graphics library, + * about the structure of the Ghostscript library and its interfaces + _________________________________________________________________ + +What if I'm writing documentation? + + If you are editing or adding to Ghostscript's existing documentation + in HTML format, or writing a new document, you should read + * the coding and style guidelines for Ghostscript's HTML-based + documentation. + _________________________________________________________________ + +Presence on the World Wide Web + + Ghostscript's home page + + GNU Ghostscript has a home page on the World Wide Web with helpful + information. Pleave visit: + + http://www.gnu.org/software/ghostscript/ + + More material about Ghostscript can be found at + + http://www.ghostscript.com/ + + Adobe PostScript, Encapsulated PostScript, and PDF reference documentation + + Adobe makes a wealth of technical documentation available over the + Web, including the PostScript Language Reference Manual (Third + Edition); the Encapsulated PostScript (EPS) Format Specification + version 3, including Encapsulated PostScript Interchange (EPSI) + format; the PDF 1.3 specification; and the pdfmark, transparency and + Acrobat Distiller parameters documentation. Some of these documents + are also available at Adobe's ftp site, but not necessarily under the + same filenames. + + Other material on the WWW + + Much other material about Ghostscript is available on the World Wide + Web, both as web pages and as archived Usenet and mailing list + discussions. Use the well-known search engines to find such material. + + There is a good manual for Ghostscript available in PDF form, in + English and German (and soon in Japanese), at: + + http://www.pdflib.com/gsmanual + + There is a translation of the Ghostscript 'man' pages into Czech at: + + http://www.volny.cz/rebus/ghostscript/ + _________________________________________________________________ + +Which document contains what? + + Here is the list in alphabetic order of Ghostscript documentation, + with explanations of the contents. + + API.htm + On MS-Windows and OS/2, Ghostscript is compiled as a dynamic + link library (DLL). On GNU/Linux, Ghostscript can be compiled + as a shared object. This describes how to use it. For + developers. + + C-style.htm + Guidelines and style for C coding, which you should follow if, + for example, you write a new driver or add or change something + in Ghostscript. For developers. + + Changes.htm + A detailed list of all code changes in the current release or + pre-release, generated mechanically from the CVS logs. For + developers. + + CJK.htm + Usage of features to support CJK CID-keyed fonts in + Ghostscript. + + CJKTTCID.htm + Note providing information on utilization of CJK (Chinese, + Japanese and Korean) TrueType fonts as CIDFontType2 fonts from + the viewpoint of its validity and limitations. + + Current.htm + Information specifically about the current release of + Ghostscript. See also the latest news of changes. + + DLL.htm + On OS/2, MS Windows-16 and MS Windows-32 platforms, Ghostscript + is compiled as a dynamic link library (DLL). This describes how + to use it. For developers. This DLL interface is obsolete. Use + API.htm instead. + + Develop.htm + Code orientation for developers. Contains a detailed breakdown + of the source files by functional group, and overviews of the + major architectural features and services. + + Devices.htm + Detailed information about some specific devices for which + Ghostscript can produce output. Run "gs -h" to see which + devices a particular version of Ghostscript is built to use. + + Drivers.htm + Describes the interface between Ghostscript and device drivers. + If you do this, you should also read and use the C style and + coding guidelines. Necessary to develop a new driver. For + developers. + + Fonts.htm + All about fonts freely available for Ghostscript, and how to + add and use new fonts. Also describes how to use Ghostscript + fonts as X Windows fonts. For both users and developers. + + Helpers.htm + A note of thanks to people who have helped in the development + of Ghostscript. + + Hershey.htm + Part 1 of the five-part original Usenet distribution of the + free Hershey fonts, giving the terms of use and describing + their encoding. + + History*.htm + The history of changes in all Ghostscript releases: + + History7.htm for Ghostscript versions 7.n + History6.htm for Ghostscript versions 6.n + History5.htm for Ghostscript versions 5.n + History4.htm for Ghostscript versions 4.n + History3.htm for Ghostscript versions 3.n + History2.htm for Ghostscript versions 2.n + History1.htm for Ghostscript versions 1.n + + Htmstyle.htm + The guidelines and style for HTML coding of Ghostscript's + documentation, which you should follow if, for example, you + change existing HTML documentation or write new documents. For + writers and editors. + + Humor.htm + Another Ghostscript interpreter. + + Install.htm + How to install Ghostscript. See also how to build it. + + Issues.htm + A list of outstanding open issues in Ghostscript. These include + known limitations, minor bugs, performance issues, differences + from Adobe implementations, and others. + + Language.htm + The relationship between the Ghostscript interpreter and the + PostScript language as defined by Adobe. + + Lib.htm + A description of the Ghostscript library, a set of procedures + to implement the graphics and filtering capabilities that are + primitive operations in the PostScript language and in Adobe + Portable Document Format (PDF). For developers. + + Maintain.htm + Assorted Ghostscript maintenance procedures. For developers. + + Make.htm + How to build Ghostscript executables from the source code. See + also how to install it. It's not necessary to be a highly + experienced developer to build or install Ghostscript, but some + experience is needed. + + New-user.htm + Essential information for new users of Ghostscript. + + News.htm + A brief description of the latest release or pre-release of + Ghostscript, and a list of any incompatible changes in it. + Changes in older releases are described in the history files + "History*.htm", which are usually installed in the + documentation directory. Run "gs -h" to see where that is. + + Projects.htm + A list of Ghostscript development projects with which we would + like help. + + Ps-style.htm + The guidelines and style for postscript coding in Ghostscript. + Some of Ghostscript is implemented in the postscript language + itself, and various utilities and examples are distributed with + it. You should follow these guidelines if you're extending or + modifying those files. For developers. + + Ps2epsi.htm + Detailed information on how to use Ghostscript through ps2epsi + to convert PostScript to Adobe Encapsulated PostScript + Interchange (EPSI) format. + + Ps2pdf.htm + Detailed information on how to use Ghostscript through ps2pdf + to convert PostScript to Adobe Portable Document Format (PDF). + + Psfiles.htm + A description of the PostScript files (other than font files) + distributed with Ghostscript, including initialization + routines, utility programs, and sample printable files. + + Readme.htm + This document. + + Release.htm + A description of how to prepare and test a Ghostscript release. + Of interest only to developers who want to create new + Ghostscript versions for distribution. + + Source.htm + A guide to the Ghostscript source code, for development and + debugging. + + Unix-lpr.htm + How to set up Ghostscript as a Unix lpr filter. + + Use.htm + Detailed instructions on how to use Ghostscript, including such + matters as designating an output device; choosing a default + paper size; how Ghostscript finds files, including font files; + how it uses environment variables; notes on specific platforms, + including the X Window System; and command-line options. + + Xfonts.htm + Ghostscript's external font interface to a host platform's + font-rendering mechanism, for developers. + _________________________________________________________________ + + Copyright © 1996, 2000 Aladdin Enterprises. All rights reserved. + + This software is provided AS-IS with no warranty, either express or + implied. This software is distributed under license and may not be + copied, modified or distributed except as expressly authorized under + the terms of the license contained in the file LICENSE in this + distribution. + + Ghostscript version 7.07, 17 May 2003 diff --git a/Master/xemtex/doc/ghostscript/Readme.htm b/Master/xemtex/doc/ghostscript/Readme.htm new file mode 100644 index 00000000000..b1ed5164975 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Readme.htm @@ -0,0 +1,634 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Overview of Ghostscript</title> +<!-- $Id: Readme.htm,v 1.31.2.16.2.6 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: README --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Overview of Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p> +If this is your first contact with Ghostscript, before continuing here you +should read the <a href="New-user.htm">documentation for new users</a>, +where you'll find + +<ul> +<li><a href="New-user.htm#Overview">what Ghostscript does</a> (PostScript +and PDF previewing, conversion, and printing); + +<li>its <a href="New-user.htm#Find_Ghostscript">licensing terms</a> (free +for ordinary use); + +<li>what <a href="New-user.htm#Platforms">platforms it runs on</a> (every +platform you're likely to be interested in); + +<li>where to find some <a href="New-user.htm#Previewers">useful +programs</a> that enhance Ghostscript (like user-friendly previewers for +Unix, VMS, MS Windows, DOS, and Macintosh); and + +<li>what to do <a href="New-user.htm#Need_help">if you need help</a>. +</ul> + +<p> +The rest of this document is a roadmap to the Ghostscript documentation. +After looking through it, if you want to install Ghostscript and not only +use it, we recommend you read <a href="Install.htm">how to install +Ghostscript</a>, and <a href="Make.htm">how to compile Ghostscript</a> from +source code (which is necessary before installing it on Unix and VMS +systems). + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Theme_roadmap">Document roadmap by theme</a> +<ul> +<li><a href="#New_users">What should I read if I'm a new user?</a> +<li><a href="#Before_building">Before building Ghostscript</a> +<li><a href="#Not_a_new_user">What should I read if I'm not a new user?</a> +<li><a href="#Developer">What if I'm a developer?</a> +<li><a href="#Writer">What if I'm writing documentation?</a> +</ul> +<li><a href="#Web_presence">Presence on the World Wide Web</a> +<ul> +<li><a href="#Web_home_page">Ghostscript's home pages</a> +<li><a href="#Adobe_documentation">Adobe PostScript, Encapsulated +PostScript, and PDF reference documentation</a> +<li><a href="#Web_other">Other material on the WWW</a> +</ul> +<li><a href="#Ordered_roadmap">Which document contains what?</a> +<ul> +<li>Primarily for users: +<blockquote><table cellpadding=0 cellspacing=0> +<tr><td valign=top> +<a href="#Devices">Devices.htm</a><br> +<a href="#Helpers">Helpers.htm</a><br> +<td> <td valign=top> +<a href="#Humor">Humor.htm</a><br> +<a href="#New-user">New-user.htm</a><br> +<a href="#Ps2epsi">Ps2epsi.htm</a><br> +<a href="#Ps2pdf">Ps2pdf.htm</a><br> +<td> <td valign=top> +<a href="#Readme">Readme.htm</a><br> +<a href="#Unix-lpr">Unix-lpr.htm</a><br> +<a href="#Use">Use.htm</a><br> +<tr><td valign=top> +</table></blockquote> +<li>For both users and developers: +<blockquote><table cellpadding=0 cellspacing=0> +<tr><td valign=top> +<a href="#Changes">Changes.htm</a><br> +<a href="#Current">Current.htm</a><br> +<a href="#CJK">CJK.htm</a><br> +<a href="#Fonts">Fonts.htm</a><br> +<td> <td valign=top> +<a href="#Hershey">Hershey.htm</a><br> +<a href="#History">History*.htm</a><br> +<a href="#Install">Install.htm</a><br> +<a href="#Language">Language.htm</a><br> +<a href="#Make">Make.htm</a><br> +<td> <td valign=top> +<a href="#News">News.htm</a><br> +<a href="#Psfiles">Psfiles.htm</a><br> +</table></blockquote> +<li>Primarily for developers: +<blockquote><table cellpadding=0 cellspacing=0> +<tr><td valign=top> +<a href="#API">API.htm</a><br> +<a href="#C-style">C-style.htm</a><br> +<a href="#CJKTTCID">CJKTTCID.htm</a><br> +<a href="#DLL">DLL.htm</a><br> +<a href="#Develop">Develop.htm</a><br> +<a href="#Drivers">Drivers.htm</a><br> +<td> <td valign=top> +<a href="#Htmstyle">Htmstyle.htm</a><br> +<a href="#Issues">Issues.htm</a><br> +<a href="#Lib">Lib.htm</a><br> +<a href="#Maintain">Maintain.htm</a><br> +<a href="#Projects">Projects.htm</a><br> +<td> <td valign=top> +<a href="#Ps-style">Ps-style.htm</a><br> +<a href="#Release">Release.htm</a><br> +<a href="#Source">Source.htm</a><br> +<a href="#Xfonts">Xfonts.htm</a><br> +</table></blockquote> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Theme_roadmap"></a>Document roadmap by theme</h2> + +<h3><a name="New_users"></a>What should I read if I'm a new user?</h3> + +<p> +A new user of Ghostscript should begin by reading the material +<a href="New-user.htm">specifically for new users</a>, then as many of +these documents as seem useful: + +<ul> +<li>how to <a href="Install.htm">install Ghostscript</a> + +<li>how to <a href="Use.htm">use Ghostscript</a>; some of this information +information also found in <b><tt>gs.1</tt></b>, the Unix +"man" page for Ghostscript. + +<li>the catalogs at the beginning of <b><tt>devs.mak</tt></b> and +<b><tt>contrib.mak</tt></b>, which list all the devices for which +Ghostscript is able to produce output (although if you got Ghostscript in +binary form, it will only include some of these devices) + +<li>detailed information about <a href="Devices.htm">some specific +devices</a> that Ghostscript knows about + +<li>more detailed information about how to use Ghostscript under +Unix with <b><tt>lpr</tt></b> <a href="Unix-lpr.htm">as a filter</a> +for non-PostScript printers + +<li> about the <a href="Fonts.htm">fonts distributed with +Ghostscript</a>, including how to add or replace fonts + +<li> a description of <a href="Language.htm">the Ghostscript language</a>, +and its differences from the documented PostScript language + +<li> about the <a href="Psfiles.htm">postscript files distributed with +Ghostscript</a> (other than fonts) +</ul> + +<h3><a name="Before_building"></a>Before building Ghostscript</h3> + +<p> +If you are going to compile Ghostscript, rather than just use an executable +you got from somewhere, you should read: + +<ul> +<li> <a href="Make.htm">how to build Ghostscript</a> and +<a href="Install.htm">install it</a> +</ul> + +<hr> + +<h2><a name="Not_a_new_user"></a>What should I read if I'm not a new user?</h2> + +<p> +If you have already used Ghostscript, when you receive a new release you +should begin by reading this file, then + +<ul> +<li> <a href="News.htm">News.htm</a>, for incompatible changes and new +features in the current release; + +<li> <a href="Current.htm">Current.htm</a>, for known problems in the +current release; + +<li> if you wish, <a href="Changes.htm">Changes.htm</a>, for a detailed list +of changes in the current release; + +<li> if you wish, History#.htm (currently <a +href="History6.htm">History7.htm</a>), for changes in other releases. +</ul> + +<hr> + +<h2><a name="Developer"></a>What if I'm a developer?</h2> + +<p> +If you are going to do any development on or with Ghostscript at all, you +should at least look at + +<ul> +<li>the <a href="Develop.htm">roadmap documentation</a> for Ghostscript's +source files and architecture +</ul> + +<p> +If you are going to write a new driver for Ghostscript, you should read + +<ul> +<li> the <a href="Source.htm">guide to the Ghostscript source code</a> + +<li> the interface between Ghostscript and <a href="Drivers.htm">device +drivers</a> + +<li> about the <a href="Xfonts.htm">external font interface</a> between +Ghostscript and platform-supplied fonts (but read about +<a href="Drivers.htm">drivers in general</a> first) +</ul> + +<p> +If you intend to use Ghostscript in the form of a dynamic link library +(DLL) under OS/2 or Microsoft Windows or in the form of shared object +under GNU/Linux, read + +<ul> +<li> documentation on <a href="API.htm">Ghostscript Interpreter API</a> +</ul> + +<p> +If you want to use Ghostscript as part of another program--as a callable +PostScript language interpreter--and not as a DLL or as a self-contained +executable application, you should begin by reading + +<ul> +<li> the source file <b><tt>imain.h</tt></b>, the documented +API for Ghostscript <em>not</em> as a DLL +</ul> + +<p> +or if you are going to use only the Ghostscript graphics library, + +<ul> +<li> about the structure of the <a href="Lib.htm">Ghostscript library</a> +and its interfaces +</ul> + +<hr> + +<h2><a name="Writer"></a>What if I'm writing documentation?</h2> + +<p> +If you are editing or adding to Ghostscript's existing documentation in +HTML format, or writing a new document, you should read + +<ul> +<li> the <a href="Htmstyle.htm">coding and style guidelines</a> for +Ghostscript's HTML-based documentation. +</ul> + +<hr> + +<h2><a name="Web_presence"></a>Presence on the World Wide Web</h2> + +<h3><a name="Web_home_page"></a>Ghostscript's home page</h3> + +<p> +GNU Ghostscript has a home page on the World Wide Web with helpful +information. Pleave visit: + +<blockquote> +<a href="http://www.gnu.org/software/ghostscript/" +class="offsite">http://www.gnu.org/software/ghostscript/</a> +</blockquote> + +<p> +More material about Ghostscript can be found at + +<blockquote> +<a href="http://www.ghostscript.com/" class="offsite">http://www.ghostscript.com/</a> +</blockquote> + +<h3><a name="Adobe_documentation"></a>Adobe PostScript, Encapsulated +PostScript, and PDF reference documentation</h3> + +<p> +Adobe makes a wealth of +<a href="http://partners.adobe.com/asn/developer/technotes.html" +class="offsite"> +technical documentation</a> available over the Web, including the +<a href="http://partners.adobe.com/asn/developer/pdfs/tn/PLRM.pdf" +class="offsite"> +PostScript Language Reference Manual (Third Edition)</a>; the +<a +href="http://partners.adobe.com/asn/developer/pdfs/tn/5002.EPSF_Spec.pdf" +class="offsite"> +Encapsulated PostScript</a> (EPS) Format Specification version 3, including +<a href="#Ps2epsi">Encapsulated PostScript Interchange (EPSI)</a> +format; the +<a +href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf" +class="offsite"> +PDF 1.3 specification</a>; and the +<a +href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfmark.pdf" +class="offsite"> +pdfmark</a>, +<a href="http://partners.adobe.com/asn/developer/acrosdk/docs/PDF_Transparency.pdf" +class="offsite">transparency</a> and +<a +href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/distparm.pdf" +class="offsite"> +Acrobat Distiller parameters</a> documentation. Some of these documents +are also available at <a href="ftp://ftp.adobe.com/pub/adobe/" +class="offsite">Adobe's ftp +site</a>, but not necessarily under the same filenames. + +<h3><a name="Web_other"></a>Other material on the WWW</h3> + +<p> +Much other material about Ghostscript is available on the World Wide Web, +both as web pages and as archived Usenet and mailing list discussions. Use +the well-known search engines to find such material. + +<p> +There is a good manual for Ghostscript available in PDF form, +in English and German (and soon in Japanese), at: + +<blockquote> +<a href="http://www.pdflib.com" +class="offsite">http://www.pdflib.com/gsmanual</a> +</blockquote> + +<p> +There is a translation of the Ghostscript 'man' pages into Czech at: + +<blockquote> +<a href="http://www.volny.cz/rebus/ghostscript/" +class="offsite">http://www.volny.cz/rebus/ghostscript/</a> +</blockquote> + +<hr> + +<h2><a name="Ordered_roadmap"></a>Which document contains what?</h2> + +<p> Here is the list in alphabetic order of Ghostscript documentation, +with explanations of the contents. + +<dl> +<dt><a name="API"></a><a href="API.htm"><b>API.htm</b></a> +<dd> On MS-Windows and OS/2, Ghostscript is compiled as a dynamic +link library (DLL). On GNU/Linux, Ghostscript can be compiled as +a shared object. This describes how to use it. +For developers. +</dl> + +<dl> +<dt><a name="C-style"></a><a href="C-style.htm"><b>C-style.htm</b></a> +<dd> Guidelines and style for C coding, which you should follow +if, for example, you <a href="#Drivers">write a new driver</a> or add or +change something in Ghostscript. For developers. +</dl> + +<dl> +<dt><a name="Changes"></a><a href="Changes.htm"><b>Changes.htm</b></a> +<dd> A detailed list of all code changes in the current release or +pre-release, generated mechanically from the CVS logs. For developers. +</dl> + +<dl> +<dt><a name="CJK"></a><a href="CJK.htm"><b>CJK.htm</b></a> +<dd> Usage of features to support CJK CID-keyed fonts in Ghostscript. +</dl> + +<dl> +<dt><a name="CJKTTCID"></a><a href="CJKTTCID.htm"><b>CJKTTCID.htm</b></a> +<dd> Note providing information on utilization of CJK (Chinese, +Japanese and Korean) TrueType fonts as CIDFontType2 fonts from the +viewpoint of its validity and limitations. +</dl> + +<dl> +<dt><a name="Current"></a><a href="Current.htm"><b>Current.htm</b></a> +<dd> Information specifically about the current release of Ghostscript. +See also the <a href="#News">latest news</a> of changes. +</dl> + +<dl> +<dt><a name="DLL"></a><a href="DLL.htm"><b>DLL.htm</b></a> +<dd> On OS/2, MS Windows-16 and MS Windows-32 platforms, Ghostscript is +compiled as a dynamic link library (DLL). This describes how to use it. +For developers. <b>This DLL interface is obsolete.</b> +Use <a href="#API"><b>API.htm</b></a> instead. +</dl> + +<dl> +<dt><a name="Develop"></a><a href="Develop.htm"><b>Develop.htm</b></a> +<dd> Code orientation for developers. Contains a detailed breakdown of +the source files by functional group, and overviews of the major +architectural features and services. +</dl> + +<dl> +<dt><a name="Devices"></a><a href="Devices.htm"><b>Devices.htm</b></a> +<dd> Detailed information about some specific devices for which Ghostscript +can produce output. Run "<b><tt>gs -h</tt></b>" to see which +devices a particular version of Ghostscript is built to use. +</dl> + +<dl> +<dt><a name="Drivers"></a><a href="Drivers.htm"><b>Drivers.htm</b></a> +<dd> Describes the interface between Ghostscript and device drivers. If +you do this, you should also read and use the <a href="#C-style">C style +and coding guidelines</a>. Necessary to develop a new driver. For +developers. +</dl> + +<dl> +<dt><a name="Fonts"></a><a href="Fonts.htm"><b>Fonts.htm</b></a> <dd> All +about fonts freely available for Ghostscript, and how to add and use new +fonts. Also describes how to use Ghostscript fonts as X Windows fonts. For +both users and developers. +</dl> + +<dl> +<dt><a name="Helpers"></a><a href="Helpers.htm"><b>Helpers.htm</b></a> +<dd> A note of thanks to people who have helped in the development of +Ghostscript. +</dl> + +<dl> +<dt><a name="Hershey"></a><a href="Hershey.htm"><b>Hershey.htm</b></a> +<dd> Part 1 of the five-part original Usenet distribution of the free +Hershey fonts, giving the terms of use and describing their encoding. +</dl> + +<dl> +<dt><a name="History"></a><b>History*.htm</b> +<dd> The history of changes in all Ghostscript releases: +<blockquote> +<a href="History7.htm">History7.htm</a> for Ghostscript versions 7.n<br> +<a href="History6.htm">History6.htm</a> for Ghostscript versions 6.n<br> +<a href="History5.htm">History5.htm</a> for Ghostscript versions 5.n<br> +<a href="History4.htm">History4.htm</a> for Ghostscript versions 4.n<br> +<a href="History3.htm">History3.htm</a> for Ghostscript versions 3.n<br> +<a href="History2.htm">History2.htm</a> for Ghostscript versions 2.n<br> +<a href="History1.htm">History1.htm</a> for Ghostscript versions 1.n +</blockquote> +</dl> + +<dl> +<dt><a name="Htmstyle"></a><a href="Htmstyle.htm"><b>Htmstyle.htm</b></a> +<dd> The guidelines and style for HTML coding of Ghostscript's +documentation, which you should follow if, for example, you change existing +HTML documentation or write new documents. For writers and editors. +</dl> + +<dl> +<dt><a name="Humor"></a><a href="Humor.htm"><b>Humor.htm</b></a> +<dd> Another Ghostscript interpreter. +</dl> + +<dl> +<dt><a name="Install"></a><a href="Install.htm"><b>Install.htm</b></a> +<dd> How to install Ghostscript. See also <a href="#Make">how to build +it</a>. +</dl> + +<dl> +<dt><a name="Issues"></a><a href="Issues.htm"><b>Issues.htm</b></a> +<dd> A list of outstanding open issues in Ghostscript. These include +known limitations, minor bugs, performance issues, differences from +Adobe implementations, and others. +</dl> + +<dl> +<dt><a name="Language"></a><a href="Language.htm"><b>Language.htm</b></a> +<dd> The relationship between the Ghostscript interpreter and the +PostScript language as defined by Adobe. +</dl> + +<dl> +<dt><a name="Lib"></a><a href="Lib.htm"><b>Lib.htm</b></a> +<dd> A description of the Ghostscript library, a set of procedures to +implement the graphics and filtering capabilities that are primitive +operations in the PostScript language and in Adobe Portable Document Format +(PDF). For developers. +</dl> + +<dl> +<dt><a name="Maintain"></a><a href="Maintain.htm"><b>Maintain.htm</b></a> +<dd> Assorted Ghostscript maintenance procedures. For developers. +</dl> + +<dl> +<dt><a name="Make"></a><a href="Make.htm"><b>Make.htm</b></a> +<dd> How to build Ghostscript executables from the source code. See also +<a href="#Install">how to install it</a>. It's not necessary to be a highly +experienced developer to build or install Ghostscript, but some experience +is needed. +</dl> + +<dl> +<dt><a name="New-user"></a><a href="New-user.htm"><b>New-user.htm</b></a> +<dd> Essential information for new users of Ghostscript. +</dl> + +<dl> +<dt><a name="News"></a><a href="News.htm"><b>News.htm</b></a> +<dd> A brief description of the latest release or pre-release of +Ghostscript, and a list of any incompatible changes in it. Changes in older +releases are described in the history files "<b><tt>History*.htm</tt></b>", +which are usually installed in the documentation directory. Run +"<b><tt>gs -h</tt></b>" to see where that is. +</dl> + +<dl> +<dt><a name="Projects"></a><a href="Projects.htm"><b>Projects.htm</b></a> +<dd> A list of Ghostscript development projects with which we would like +help. +</dl> + +<dl> +<dt><a name="Ps-style"></a><a +href="Ps-style.htm"><b>Ps-style.htm</b></a> +<dd> The guidelines and style for postscript coding in Ghostscript. Some +of Ghostscript is implemented in the postscript language itself, and +various utilities and examples are distributed with it. You should +follow these guidelines if you're extending or modifying those files. +For developers. +</dl> + +<dl> +<dt><a name="Ps2epsi"></a><a href="Ps2epsi.htm"><b>Ps2epsi.htm</b></a> +<dd> Detailed information on how to use Ghostscript through +<tt><b>ps2epsi</b></tt> to convert PostScript to Adobe +Encapsulated PostScript Interchange (EPSI) format. +</dl> + +<dl> +<dt><a name="Ps2pdf"></a><a href="Ps2pdf.htm"><b>Ps2pdf.htm</b></a> +<dd> Detailed information on how to use Ghostscript through +<tt><b>ps2pdf</b></tt> to convert PostScript to Adobe +Portable Document Format (PDF). +</dl> + +<dl> +<dt><a name="Psfiles"></a><a href="Psfiles.htm"><b>Psfiles.htm</b></a> +<dd> A description of the PostScript files (other than font files) +distributed with Ghostscript, including initialization routines, utility +programs, and sample printable files. +</dl> + +<dl> +<dt><a name="Readme"></a><b>Readme.htm</b> +<dd> This document. +</dl> + +<dl> +<dt><a name="Release"></a><a href="Release.htm"><b>Release.htm</b></a> +<dd> A description of how to prepare and test a Ghostscript release. Of +interest only to developers who want to create new Ghostscript versions for +distribution. +</dl> + +<dl> +<dt><a name="Source"></a><a href="Source.htm"><b>Source.htm</b></a> +<dd> A guide to the Ghostscript source code, for development and debugging. +</dl> + +<dl> +<dt><a name="Unix-lpr"></a><a href="Unix-lpr.htm"><b>Unix-lpr.htm</b></a> +<dd> How to set up Ghostscript as a Unix <tt><b>lpr</b></tt> +filter. +</dl> + +<dl> +<dt><a name="Use"></a><a href="Use.htm"><b>Use.htm</b></a> +<dd> Detailed instructions on how to use Ghostscript, including such +matters as designating an output device; choosing a default paper size; +how Ghostscript finds files, including font files; how it uses environment +variables; notes on specific platforms, including the X Window System; and +command-line options. +</dl> + +<dl> +<dt><a name="Xfonts"></a><a href="Xfonts.htm"><b>Xfonts.htm</b></a> +<dd> Ghostscript's external font interface to a host platform's +font-rendering mechanism, for developers. +</dl> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Release.htm b/Master/xemtex/doc/ghostscript/Release.htm new file mode 100644 index 00000000000..561de32658c --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Release.htm @@ -0,0 +1,769 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>How to prepare a Ghostscript release</title> +<!-- $Id: Release.htm,v 1.40.2.23.2.6 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: make.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>How to prepare a Ghostscript release</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Introduction">Introduction</a> +<li><a href="#Servers">Servers</a> +<ul> +<li><a href="#Distribution">Distribution</a> +</ul> +<li><a href="#Making_distributions">Making distributions</a> +<ul> +<li><a href="#Preparing_source">Preparing the source code</a> +<li><a href="#Testing">Testing</a> +<li><a href="#Making_Tarballs">Making the source distribution</a> +<li><a href="#Testing_on_Windows">Testing on Windows</a> +<li><a href="#Windows_distribution">Building the Windows distribution</a> +<li><a href="#Finishing_up">Finishing up</a> +<li><a href="#Beta_distributions">Beta distributions</a> +<li><a href="#Public_releases">Public releases</a> +</ul> +<li><a href="#After_releasing">After releasing</a> +<li><a href="#Fonts">Fonts</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a> and the instructions on how to <a href="Make.htm">build +Ghostscript</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Introduction"></a>Introduction</h2> + +<p> +This document describes the process that artofcode LLC, the copyright holder +of Ghostscript, uses for making new Ghostscript releases. Please note +that while the the license allows anyone to prepare and distribute +releases in accordance with its terms and conditions, this document is +really meant only to document the process used by artofcode LLC. +However, the eventual purpose of this document is to describe +Ghostscript release procedures in enough detail that someone who knows +little about Ghostscript but is generally familiar with the platform on +which the procedure is being carried out can execute the procedures +correctly. So if you add or changing anything to/in this document, +be sure to specify all command lines, file names, etc. in explicit +detail. + +<p> +File names below that don't include an explicit subdirectory name are in the +<b><tt>src</tt></b> subdirectory. + +<p> +If you do plan to make your own distribution, please be aware of some items +you will want to change. + +<ul> + +<li>If you make any significant changes, please edit +<b><tt>gscdef.c</tt></b> to change <b><tt>GS_PRODUCTFAMILY</tt></b> and +<b><tt>GS_PRODUCT</tt></b> from "GNU Ghostscript" to something else, +in order to avoid confusion with artofcode's releases. + +<li>In the same file, you may also want to edit <b><tt>GS_COPYRIGHT</tt></b> +to add your own copyright notice (although you must not remove any +notice that is there). + +<li>You will almost certainly want to edit <b><tt>version.mak</tt></b> to +change the revision date, <b><tt>GS_REVISIONDATE</tt></b>. + +<li>If you want to change the version number, you must change it in both +<b><tt>version.mak</tt></b> (<b><tt>GS_VERSION_</tt></b>*) and +<b><tt>lib/gs_init.ps</tt></b> (the integer on a line by itself near the +beginning of the file). + +</ul> + +<h2><a name="Servers"></a>Servers</h2> + +<p> +The Ghostscript source files are maintained on sites accessible to +the public. One specific site hosts the active CVS repository for code, +data, and documentation, and the bug report data base; several sites +offer distributions with version numbers, intended for wider +distribution. + +<h3><a name="Distribution"></a>Distribution</h3> + +<p> +The primary distribution site for GNU Ghostscript is the <a +href="ftp://ftp.gnu.org/gnu/ghostscript/" class="offsite">GNU ftp +site</a> and its <a +href="http://www.gnu.org/prep/ftp.html" class="offsite">mirrors</a>. + +<p> +Stable releases are also distributed from + +<blockquote> +<a +href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/" +class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/</a> +</blockquote> + +<h2><a name="Making_distributions"></a>Making distributions</h2> + +<p> +This document only discusses source distributions. Source distributions +currently can only be made on GNU/Linux systems (but it probably wouldn't +take much work to support other Unix-like systems). Ghostscript as +distributed also +often includes executables or other packages for the Windows and MacOS +environments, but artofcode does not produce these, and this document does not +discuss them. For more information about Windows packages, please contact +<a href="mailto:bug-gswin@ghostscript.com"><tt>bug-gswin@ghostscript.com</tt></a>; +for more information about MacOS packages, please contact <a +href="mailto:mac-gs@ghostscript.com"><tt>mac-gs@ghostscript.com</tt></a>. + +<p> +To make a source distribution, you will need the scripts and data files in +the <b><tt>toolbin/</tt></b> directory. The instructions below generally +assume that you're invoking the relative to the top level of the source +tree. + +To run the scripts, you will need reasonably current versions of Tcl, +freely available from Scriptics +(<a class="offsite" href="http://www.scriptics.com"><tt>http://www.scriptics.com</tt></a>), and +Python, freely available from <a class="offsite" +href="http://www.python.org"><tt>http://www.python.org</tt></a>. + +<p> +The instructions below also refer to some files that are deliberately +omitted from the public distribution, because they are not freely +redistributable. You will need to provide similar files for your +environment. + +<blockquote><pre> +<b><tt>data/*/*.ps</tt></b> (PostScript files) - needed for smoke testing +</pre></blockquote> + +<h3><a name="Preparing_source"></a>Preparing the source code</h3> + +<p> +Update references to the date for release: + +<ul> + +<li>In <b><tt>lib/gs_init.ps</tt></b>, as an integer (release number +x100) at the beginning of the file just after the initial comment +blocks. + +<li>In <b><tt>version.mak</tt></b>, the numeric date. + +<li>In <b><tt>doc/News.htm</tt></b>, in two places, skipping the Id: +line. That is, in parentheses after the <tt>VERSION X.YY</tt> heading, +and in the copyright footer both the year and the release date. + +</ul> + +We recommend using a UTC release date to avoid timezone skew. + +<p> +Also in <b><tt>doc/News.htm</tt></b>, update the number of the highest +closed bug and the list of open bugs. + +<p> +Check in <b><tt>gscdef.c</tt></b> that the definition of +<b><tt>GS_PRODUCT</tt></b> includes the appropriate one of "DEVELOPMENT +RELEASE", "BETA RELEASE", or neither, and does not include "CVS +PRE-RELEASE". + +<p>Run the source-consistency checks from the test suite: + +<blockquote><pre> +toolbin/tests/check_all.py --gsroot=. +</pre></blockquote> +Where the argument of --gsroot is the path to the top level of the +source tree. Fix any problems it indicates, and commit them to cvs. + +<p> +Check for patched configuration parameters, <b><tt>#define TEST</tt></b>s, +version/date inconsistencies, and mismatches between the working directory +and the CVS repository by running: + +<blockquote><pre> +toolbin/pre +</pre></blockquote> + +<p> +This program compares the result of various greps against a check file, +writing the results of grep on one output file and the differences from the +check file on another. See the source code of +<b><tt>toolbin/pre</tt></b> for the default file names. The +important one is the check file, +<b><tt>toolbin/pre.chk</tt></b>. <b><tt>pre</tt></b> also verifies +that the +right information is in the following places: +<ul> +<li>version number in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>, +<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b>, +<b><tt>lib/gs_init.ps</tt></b> +<li>revision date in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>, +<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b> +<li>copyright year (if necessary) in <b><tt>gscdef.c</tt></b> +<li>third-party library version number in <b><tt>*.mak</tt></b> +</ul> + +<p> +If necessary, run + +<blockquote><pre> +toolbin/pre update +</pre></blockquote> + +<p> +to update the version and revision date in the doc files, and then run + +<blockquote><pre> +toolbin/pre +</pre></blockquote> + +<p> +again. To confirm that everything is updated. You may have to commit to +cvs after the update to satify the script that all the dates are +correct. + +<p> +Check the consistency of the source code with the makefiles by +running: + +<blockquote><pre> +toolbin/gsmake.tcl check +</pre></blockquote> + +This script assumes the top level makefile is named '<tt>makefile</tt>'. + +<p> +Fix any problems and commit to cvs. + +<h3><a name="Testing"></a>Testing</h3> + +<p> +Edit your top-level the Makefile to set +<blockquote><pre> +FEATURE_DEVS=$(FEATURE_DEVS_ALL) +COMPILE_INITS=1 +</pre></blockquote> + +<p> +This will help catch compilation problems. + +<p> +Run + +<blockquote><pre> +rm obj/* +make -j2 >& make.log +</pre></blockquote> + +<p> +and look for warnings and errors in the log file. + +<p> +Do a smoke test, updating the example paths as necessary: + +<blockquote><pre> +unset GS_DEVICE GS_FONTPATH GS_LIB GS_OPTIONS +./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH /gs/toolbin/smoke.ps +./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH -sDEVICE=bitcmyk\ + -sOutputFile=/dev/null -r600 -dBufferSpace=50000 /gs/toolbin/smoke.ps +</pre></blockquote> + +<p> +This reads files named + +<blockquote><pre> +<b><tt>data/misc/*.ps</tt></b> +<b><tt>data/ps/*.ps</tt></b> +<b><tt>data/psl2/*.ps</tt></b> +<b><tt>data/psl3/*.ps</tt></b> +<b><tt>data/pdf/*.pdf</tt></b> +</pre></blockquote> + +<p> +(Edit <b><tt>toolbin/smoke.ps</tt></b> to use other test sets.) +Watch for crashes, unusual error messages, or anomalous displayed output. +If there are any problems, start over from the beginning of the process. + +<p> +Undo the <b><tt>FEATURE_DEVS</tt></b> and <b><tt>COMPILE_INITS</tt></b> +edits. + +<p> +Run + +<blockquote><pre> +cvs commit +</pre></blockquote> + +<p> +to ensure the repository is up to date. + +<p> +Execute + +<blockquote><pre> +toolbin/cvs2hist.py -j <previous_tag> -r '-r<branch_tag>' -v <new_version> > doc/Changes.htm +</pre> +e.g. <pre>toolbin/cvs2hist.py -j gs7_04 -r '-rGS_7_0X' -v 7.05</pre> +</blockquote> + +<p> +This consolidates all the CVS logs since the previous release in a readable +format. Note: the cvs2hist.py tool currently in the distribution is not +very branch-aware (nor is the 'cvs log' command it depends on) so the extra +complication of the -j and -r options are required when generating the Changes +for a non-HEAD branch of Ghostscript. Note that the -r option should be +an empty '-b' when generating logs for the cvs main branch due to +variations in naming. + +<p> +Run + +<blockquote><pre> +tclsh +% source toolbin/makeset.tcl +% makehist +</pre></blockquote> + +<p> +This updates <b><tt>doc/History#.htm</tt></b> from +<b><tt>doc/News.htm</tt></b> and <b><tt>doc/Changes.htm</tt></b>. + +Then run + +<blockquote><pre> +cvs commit +</pre></blockquote> + +<p> +again to check in the Changes and history files. + +<h3><a name="Making_Tarballs"></a>Making the source distribution</h3> + +<p> +First, tag the versions of the files in cvs with the release version +number. + +<blockquote> +<pre><tt>cvs tag gs#_##</tt></pre> +</blockquote> + +If you've already tagged this release (e.g. in making an earlier +release candidate) you'll need to add the <tt>-r</tt> and <tt>-F</tt> +options after 'cvs tag' to force moving the tag to the new revisions +of changed files. + +<p> +Pull a fresh copy for distribution from the cvs repository: + +<blockquote><pre> +<tt>cvs -z3 -d <ghostscript cvsroot> export -r gs#_## -d ghostscript-#.## gs</tt> +</pre></blockquote> + + +<p> +Generate the text versions of the README document: + +<blockquote> +<pre><tt>cd ghostscript-#.##</tt> +<tt>lynx -dump -nolist doc/Readme.htm > doc/README</tt> +</blockquote> + +<p> +For the unix source distributions only, generate the configure +scripts. From the top level directory, run + +<blockquote><pre><tt>./autogen.sh</tt> +<tt>make distclean</tt> +</pre></blockquote> + +This should create links to <tt>configure.ac</tt> and +<tt>Makefile.in</tt> in the top level directory and +invoke autoconf to create the <tt>configure</tt> script. + +<p> +Also, run <tt>autoconf</tt> in the ijs subdir to create the configure script +for that package. + +<p> +Move back to directory containing the distribution code and make the +source archives with: + +<blockquote><pre> +<tt>tar cvzf ghostscript-#.##.tar.gz ghostscript-#.##/*</tt> +<tt>zcat ghostscript-#.##.tar.gz | bzip2 -c > ghostscript-#.##.tar.bz2</tt> +</pre></blockquote> + +<p> +This creates the files + +<blockquote><pre> +<b><tt>ghostscript-#.##.tar.gz</tt></b> (main archive) +<b><tt>ghostscript-#.##.tar.bz2</tt></b> (main archive) +</pre></blockquote> + +<p> +The important issue is that the tarballs unpack into a directory +of the same name, and that the code be a pristine copy without +build or CVS housekeeping files. + +<p> +It is also customary to make a <tt>gs###src.zip</tt> archive for the +convenience of windows developers. See below. + +<h3><a name="Testing_on_Windows"></a>Testing on Windows</h3> + +<p> +For Windows testing, you will need, in addition to the files listed +under "<a href="#Preparing_source">Preparing the source</a>" above: +<blockquote><pre> +<b><tt>toolbin/makewin</tt></b> (link to <b><tt>makeset.tcl</tt></b>) +</pre></blockquote> + +<p> +The following procedures rely on a large number of MS-DOS batch scripts that +are not discussed here: they are unlikely to be generally useful. + +<p> +Mount the Windows partition on <b><tt>/c</tt></b>, and create the +<b><tt>/c/work</tt></b> directory if needed. + +<p> +Make the zip archive of all files needed for a Windows build, and copy it to +the Windows partition: + +<blockquote><pre> +toolbin/makewin +cp gs###.zip /c/work +</pre></blockquote> + +<p> +Boot into Windows. Unpack the archive: + +<blockquote><pre> +cd \work +unzip -oq gs###.zip +gs### +</pre></blockquote> + +<p> +The <b><tt>gs###.bat</tt></b> script creates some necessary directories, +sets up <b><tt>PATH</tt></b> and <b><tt>GS_LIB</tt></b> for testing, and +makes the <b><tt>gs#.##</tt></b> directory current. + +<p> +Build with the Borland compiler: + +<blockquote><pre> +config bcwin32 +copy /y /b ..\gs\makefile +erase obj\*.* +make > bc.log +</pre></blockquote> + +<p> +Smoke test the executables (both <b><tt>gswin32</tt></b> and +<b><tt>gswin32c</tt></b>), as described above for source distributions. +Then build with the Microsoft compiler: + +<blockquote><pre> +config msvc32 +copy /y /b ..\gs\makefile +erase obj\*.* +nmake > msvc.log +</pre></blockquote> + +<p> +Smoke test these executables too. + +<p> +Building with the Watcom compiler doesn't work, because the +<b><tt>wmake</tt></b> or <b><tt>wmakel</tt></b> program runs out of memory. +However, if it did work, this is how to do it: + +<blockquote><pre> +config watcw32 +copy /y /b ..\gs\makefile +erase obj\*.* +wmake -u > watc.log +</pre></blockquote> + +<p> +Boot back into GNU/Linux. If testing in Windows revealed problems, edit the +source files as necessary, and go back to <a +href="#Preparing_source">"Preparing the source code."</a> + +<h3><a name="Windows_distribution"></a>Building the Windows distribution</h3> +<p> +Extract the sources from <b><tt>ghostscript-N.NN.tar.gz</tt></b> +then repackage in a zip file as follows: +<blockquote> +<b><tt>zip -r temp.zip gsN.NN/doc gsN.NN/examples gsN.NN/icclib + gsN.NN/ijs gsN.NN/lib gsN.NN/src</tt></b> +</blockquote> +Unzip converting the line endings to CRLF: +<blockquote> +<b><tt>unzip -a temp.zip<br> +del temp.zip</tt></b> +</blockquote> +Then finally zip up the sources to the distribution file: +<blockquote> +<b><tt>zip -9 -r gsNNNsrc.zip gsN.NN</tt></b> +</blockquote> +This method is reasonably portable, and does not convert binary +files such as +<b><tt><a href="../examples/annots.pdf">examples/annots.pdf</a></tt></b>. +<p> +Unzip <b><tt>gsNNNsrc.zip</tt></b>. +The directory must be named <b><tt>gsN.NN</tt></b>. +<p> +Extract the fonts <b><tt>gnu-gs-fonts-std-6.0.tar.gz</tt></b> +into a directory <b><tt>fonts</tt></b> adjacent to the +<b><tt>gsN.NN</tt></b> directory. +The fonts are needed in this location for building +the distribution archive later. +<p> +You will need the command line Info-Zip zip program available from +<a href="http://www.info-zip.org/pub/infozip/"> +http://www.info-zip.org/pub/infozip/</a> +Alternatively, the command line version of WinZip +(<b><tt>wzzip.exe</tt></b>) can be used by replacing the +Info-Zip command line options <b><tt>-9 -r</tt></b> +with <b><tt>-ex -P</tt></b> in +<b><tt><a href="../src/winint.mak">winint.mak</a></tt></b>. +<p> +You will need WinZip Self-Extractor for building the +self extracting archive. This is commercial software. +You may need to update the path <b><tt>WINZIPSE_XE</tt></b> in +<b><tt><a href="../src/winint.mak">winint.mak</a></tt></b>. +<p> +Unzip the jpeg, libpng and zlib libraries, then make ghostscript +as documented in <a href="Make.htm">Make.htm</a>. +<p> +Run the command <b><tt>nmake archive</tt></b>. This builds the distribution +archive <b><tt>gsNNNw32.exe</tt></b> and an ordinary zip file +<b><tt>gsNNNw32.zip</tt></b> in the parent directory. +If you do not have WinZip Self-Extractor, you can use +<b><tt>nmake zip</tt></b> to make <b><tt>gsNNNw32.zip</tt></b> only. + +<h3><a name="Finishing_up"></a>Finishing up</h3> + +<p> +Upload <b><tt>ghostscript-#.##.tar.*</tt></b> to SourceForge (by anonymous +FTP to <b><tt>upload.sourceforge.net</tt></b>, directory +<b><tt>/incoming</tt></b>), and then post it using the "File Release" +facility in the Ghostscript project. +If this is a GNU release, put it in the <b><tt>gnu-gs</tt></b> module. +If this is a test release or beta release, put +it in the <b><tt>gs-devel</tt></b> or <b><tt>gs-beta</tt></b> module, +respectively. +If you are adding executable builds or source archives for other +platforms to an existing source release, please use the same release +date as the source release, not the current date. + +<h3><a name="Beta_distributions"></a>Beta distributions</h3> + +<p> +Do the steps for distributions in general. + +<p> +Upload <b><tt>ghostscript-#.##.tar.*</tt></b> to the testing directory on +mirror.cs.wisc.edu. + +<p> +Send an email announcement to the <tt>gs-test</tt> list +announcing the new release. + +<h3><a name="Public_releases"></a>Public releases</h3> + +<p> +Update the title (current version #), first heading (previous version #), +and "new features" and "known problems" lists in +<b><tt>doc/Current.htm</tt></b>. + +<p> +Do the steps for distributions in general. + +<p> +Create a directory at +<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/gs###/</tt></b>. +In that +directory, store the following files: + +<ul> + +<li>Standard distribution files: + +<blockquote><pre> +<b><tt>ghostscript-#.##.tar.gz</tt></b> +<b><tt>ghostscript-#.##.tar.bz2</tt></b> +</pre></blockquote> + +<li>MS Windows source and executables: + +<blockquote><pre> +<b><tt>gs###src.zip</tt></b> +<b><tt>gs###w32.exe</tt></b> +<b><tt>gs###w32.zip</tt></b> +</pre></blockquote> + +<li>Third-party libraries, as links (upload these if not installed), where +<b><tt>$$$</tt></b> et al. refer to the version number of the library, which +should be the latest compatible release of the library and should be +consistent with the values of and version numbers specifically listed in +the makefiles. + +<blockquote><pre> +<b><tt>jpegsrc.v$$.tar.gz</tt></b> -> <b><tt>../../3rdparty/jpegsrc.v$$.tar.gz</tt></b> +<b><tt>libpng-$.$.$.tar.gz</tt></b> -> <b><tt>../../3rdparty/libpng-$.$.$.tar.gz</tt></b> +<b><tt>zlib-$.$.$.tar.gz</tt></b> -> <b><tt>../../3rdparty/zlib-$.$.$.tar.gz</tt></b> +<b><tt>jpegsr$$.zip</tt></b> -> <b><tt>../../3rdparty/jpegsr$$.zip</tt></b> +<b><tt>lpng$$$.zip</tt></b> -> <b><tt>../../3rdparty/lpng$$$.zip</tt></b> +<b><tt>zlib$$$.zip</tt></b> -> <b><tt>../../3rdparty/zlib$$$.zip</tt></b> +</pre></blockquote> + +In any case, the names of the links in the distribution directory should reflect +the original name of the upstream file. + +<li>Fonts, where <b><tt>$.$$</tt></b> refers to the most recent version +number of the fonts: + +<blockquote><pre> +<b><tt>ghostscript-fonts-other-$.$.tar.gz</tt></b> -> <b><tt>../fonts/ghostscript-fonts-other-$.$.tar.gz</tt></b> +<b><tt>ghostscript-fonts-std-$.$.tar.gz</tt></b> -> <b><tt>../fonts/ghostscript-fonts-std-$.$.tar.gz</tt></b> +</pre></blockquote> + +</ul> + +<p> +(Note that the link names are somewhat inconsistent: some of them retain the +version number of the file being referenced, and some of them use the +Ghostscript version number. This is a historical artifact that might be +changed someday.) + +<p> +E-mail the release announcement using: +<blockquote><pre> +To: gs-announce +</pre></blockquote> + +<p> +Edit the Web pages in cvs and commit to reflect the new release. +The Wisconsin server should update automatically. + +<h2><a name="After_releasing"></a>After releasing</h2> + +<p> +E-mail the full URL and the <b><tt>md5sum</tt></b> of the new archive(s) to +<a href="mailto:ftp-upload@gnu.org"><tt>ftp-upload@gnu.org</tt></a>. This +will allow the site maintainers to add the new release to the GNU +distribution network. + +<p> +It may also be helpful to have the Free Software Foundation review the +code before release to see whether it meets their standards for +distribution from the gnu.org website. + +<p> +Update the version number by incrementing it: + +<ul> + +<li>In <b><tt>lib/gs_init.ps</tt></b>, at the very beginning of the file. + +<li>In <b><tt>version.mak</tt></b>, in 3 definitions. + +<li>In <b><tt>doc/News.htm</tt></b>, in 4 places. + +</ul> + +<p> +In <b><tt>gscdef.c</tt></b>, edit the definition of +<b><tt>GS_PRODUCT</tt></b> to include "CVS PRE-RELEASE". + +<p> +Edit <b><tt>doc/News.htm</tt></b> to remove all the content. + + +<h2><a name="Fonts"></a>Fonts</h2> + +<p> +artofcode LLC distributes a package of the base 35 PostScript fonts, and a +package of other miscellaneous fonts. These are released with a +licence matching that of the Ghostscript code. + +<p> +To make the font packages, run the command + +<blockquote><pre> +toolbin/makefonts #.## +</pre></blockquote> + +<p> +This creates the following files: + +<blockquote><pre> +ghostscript-fonts-std-#.##.tar.gz +ghostscript-fonts-other-#.##.tar.gz +gnu-gs-fonts-std-#.##.tar.gz +gnu-gs-fonts-other-#.##.tar.gz +</pre></blockquote> + +<p> +The second two should be uploaded to +<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/fonts/</tt></b>, +and the url and md5sum sent to the GNU ftp maintainers as with the +ghostscript source. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1999-2002 artofcode LLC. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Source.htm b/Master/xemtex/doc/ghostscript/Source.htm new file mode 100644 index 00000000000..348920b4e22 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Source.htm @@ -0,0 +1,383 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Guide to Ghostscript source code</title> +<!-- $Id: Source.htm,v 1.13.2.11.2.5 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: source.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Guide to Ghostscript source code</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Overview">Conceptual overview</a> +<li><a href="#PostScript_interpreter">PostScript Interpreter</a> +<li><a href="#PDF_interpreter">PDF interpreter</a> +<li><a href="#Graphics_library">Graphics library</a> +<ul> +<li><a href="#Drivers">Device drivers</a> +<li><a href="#Platform_specific_code">Platform-specific code</a> +</ul> +<li><a href="#Makefiles">Makefiles</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a> and the documents on <a href="Make.htm">how to build +Ghostscript</a> from source, <a href="C-style.htm">Ghostscript C coding +guidelines</a>, <a href="Drivers.htm">drivers</a>, the +<a href="Lib.htm">Ghostscript library</a> and <a href="Install.htm">how to +install Ghostscript</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Overview"></a>Conceptual overview</h2> + +<p> +The Ghostscript source code is divided conceptually as follows: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr valign=top> <th align=left colspan=4><a href="#PostScript_interpreter">PostScript interpreter</a>: +<tr valign=top> <td> + <td>PostScript operators + <td> + <td><b><tt>z</tt></b>*<b><tt>.h</tt></b> and <b><tt>z</tt></b>*<b><tt>.c</tt></b> +<tr valign=top> <td> + <td>Other interpreter code + <td> + <td><b><tt>i</tt></b>*<b><tt>.h</tt></b> and <b><tt>i</tt></b>*<b><tt>.c</tt></b> +<tr valign=top> <td> + <td>PostScript code + <td> + <td><b><tt>gs_</tt></b>*<b><tt>.ps</tt></b> +<tr valign=top> <th align=left colspan=4><a href="#PDF_interpreter">PDF interpreter</a>: +<tr valign=top> <td> + <td>PostScript code + <td> + <td><b><tt>pdf_</tt></b>*<b><tt>.ps</tt></b> +<tr valign=top> <th align=left colspan=4><a href="#Graphics_library">Graphics library</a>: +<tr valign=top> <td> + <td>Main library code + <td> + <td><b><tt>g</tt></b>*<b><tt>.h</tt></b> and <b><tt>g</tt></b>*<b><tt>.c</tt></b> +<tr valign=top> <td> + <td>Streams + <td> + <td><b><tt>s</tt></b>*<b><tt>.h</tt></b> and <b><tt>s</tt></b>*<b><tt>.c</tt></b> +<tr valign=top> <td> + <td><a href="#Drivers">Device drivers</a> + <td> + <td><b><tt>gdev</tt></b>*<b><tt>.h</tt></b> and <b><tt>gdev</tt></b>*<b><tt>.c</tt></b> +<tr valign=top> <td> + <td><a href="#Platform_specific_code">Platform-specific code</a> + <td> + <td><b><tt>gp</tt></b>*<b><tt>.h</tt></b> and <b><tt>gp</tt></b>*<b><tt>.c</tt></b> +</table></blockquote> + +<hr> + +<h2><a name="PostScript_interpreter"></a>PostScript Interpreter</h2> + +<p> +<b><tt>gs.c</tt></b> is the main program for the interactive language +interpreter; <b><tt>gserver.c</tt></b> is an alternative main program that +is a rudimentary server. If you configure Ghostscript as a server rather +than an interactive program, you will use <b><tt>gserver.c</tt></b> instead +of <b><tt>gs.c</tt></b>. + +<p> +Files named <b><tt>z</tt></b>*<b><tt>.c</tt></b> are Ghostscript operator +files. The names of the files generally follow the section headings of the +operator summary in section 6.2 (Second Edition) or 8.2 (Third Edition) of +the PostScript Language Reference Manual. Each operator XXX is implemented +by a procedure named <b><tt>z</tt></b>XXX, for example, +<b><tt>zfill</tt></b> and <b><tt>zarray</tt></b>. + +<p> +Files named <b><tt>i</tt></b>*<b><tt>.c</tt></b>, and *<b><tt>.h</tt></b> +other than <b><tt>g</tt></b>*<b><tt>.h</tt></b>, are the rest of the +interpreter. See the makefile for a little more information on how the +files are divided functionally. + +<p> +The main loop of the PostScript interpreter is the <b><tt>interp</tt></b> +procedure in <b><tt>interp.c</tt></b>. When the interpreter is reading +from an input file, it calls the token scanner in +<b><tt>iscan</tt></b>*<b><tt>.c</tt></b>. + +<p> +<b><tt>idebug.c</tt></b> contains a lot of debugger-callable routines +useful for printing PostScript objects when debugging. + +<hr> + +<h2><a name="PDF_interpreter"></a>PDF interpreter</h2> + +<p> +The PDF interpreter is written entirely in PostScript. Its main loop is +the <b><tt>.pdfrun</tt></b> procedure in <b><tt>pdf_base.ps</tt></b>. When +the PDF interpreter is configured into the build, it redefines the +"<b><tt>run</tt></b>" operator to test whether the file is a PDF file. +This redefinition is near the beginning of <b><tt>pdf_main.ps</tt></b>. + +<hr> + +<h2><a name="Graphics_library"></a>Graphics library</h2> + +<p> +Files beginning with <b><tt>gs</tt></b>, <b><tt>gx</tt></b>, or +<b><tt>gz</tt></b> (both <b><tt>.c</tt></b> and <b><tt>.h</tt></b>), other +than <b><tt>gs.c</tt></b> and <b><tt>gserver.c</tt></b>, are the +Ghostscript library. Files beginning with <b><tt>gdev</tt></b> are device +drivers or related code, also part of the library. Other files beginning +with <b><tt>g</tt></b> are library files that don't fall neatly into either +the kernel or the driver category. + +<p> +Files named <b><tt>s</tt></b>*<b><tt>.c</tt></b> and +<b><tt>s</tt></b>*<b><tt>.h</tt></b> are a flexible stream package, +including the Level 2 PostScript "filters" supported by Ghostscript. See +<b><tt>stream.h</tt></b>, <b><tt>scommon.h</tt></b>, and +<b><tt>strimpl.h</tt></b> for all the details. + +<h3><a name="Drivers"></a>Device drivers</h3> + +<p> +The interface between the graphics library and device drivers is the only +really well documented one in all of Ghostscript: see the +<a href="Drivers.htm">documentation on drivers</a>. + +<p> +In addition to many real device and file format drivers listed in +<b><tt>devs.mak</tt></b> and <b><tt>contrib.mak</tt></b>, a number of +drivers are used for internal purposes. You can search +<b><tt>lib.mak</tt></b> for files named +<b><tt>gdev</tt></b>*<b><tt>.c</tt></b> to find almost all of them. + +<p> +Drivers are divided into "printer" drivers, which support banding, and +non-printer drivers, which don't. The decision whether banding is +required is made (by default on the basis of how much memory is available) +in the procedure <b><tt>gdev_prn_alloc</tt></b> in +<b><tt>gdevprn.c</tt></b>: it implements this decision by filling the +virtual procedure table for the printer device in one of two different +ways. + +<p> +A good simple "printer" (bandable) driver to read is +<b><tt>gdevmiff.c</tt></b>: it's less than 100 lines, of which much is +boilerplate. There are no simple non-printer drivers that actually drive +devices: probably the simplest non-printer driver for reading is +<b><tt>gdevm8.c</tt></b>, which implements 8-bit-deep devices that only +store the bits in memory. + +<h3><a name="Platform_specific_code"></a>Platform-specific code</h3> + +<p> +There are very few platform dependencies in Ghostscript. Ghostscript deals +with them in three ways: + +<ul> +<li>Files named *<b><tt>_.h</tt></b> substitute for the corresponding +<b><tt><</tt></b>*<b><tt>.h></tt></b> file by adding conditionals +that provide a uniform set of system interfaces on all platforms. + +<li>The file <b><tt>arch.h</tt></b> contains a set of +mechanically-discovered platform properties like byte order, size of +<b><tt>int</tt></b>, etc. These properties, <b>not</b> the names of +specific platforms, are used to select between different algorithms or +parameters at compile time. + +<li>Files named <b><tt>gp</tt></b>*<b><tt>.h</tt></b> define interfaces +that are intended to be implemented differently on each platform, but whose +specification is common to all platforms. +</ul> + +<p> +The platform-specific implementations of the +<b><tt>gp</tt></b>*<b><tt>.h</tt></b> interfaces have names of the form +"<b><tt>gp_</tt></b><em>{platform}</em><b><tt>.c</tt></b>, specifically +(this list may be out of date): + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Platform-specific interfaces</font><hr> +<tr valign=bottom> + <th align=left>Routine + <td> + <th align=left>Platform +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>gp_dosfb.c</tt></b> + <td> + <td>DOS +<tr valign=top> <td><b><tt>gp_dosfs.c</tt></b> + <td> + <td>DOS and MS Windows +<tr valign=top> <td><b><tt>gp_itbc.c</tt></b> + <td> + <td>DOS, Borland compilers +<tr valign=top> <td><b><tt>gp_iwatc.c</tt></b> + <td> + <td>DOS, Watcom or Microsoft compiler +<tr valign=top> <td><b><tt>gp_msdos.c</tt></b> + <td> + <td>DOS and MS Windows +<tr valign=top> <td><b><tt>gp_ntfs.c</tt></b> + <td> + <td>MS-Windows Win32s and Windows NT +<tr valign=top> <td><b><tt>gp_os2.c</tt></b> + <td> + <td>OS/2 +<tr valign=top> <td><b><tt>gp_os9.c</tt></b> + <td> + <td>OS-9 +<tr valign=top> <td><b><tt>gp_unifs.c</tt></b> + <td> + <td>Unix, OS-9, and QNX +<tr valign=top> <td><b><tt>gp_unix.c</tt></b> + <td> + <td>Unix and QNX +<tr valign=top> <td><b><tt>gp_sysv.c</tt></b> + <td> + <td>System V Unix +<tr valign=top> <td><b><tt>gp_vms.c</tt></b> + <td> + <td>VMS +<tr valign=top> <td><b><tt>gp_win32.c</tt></b> + <td> + <td>MS-Windows Win32s and Windows NT +</table></blockquote> + +<p> +If you are going to extend Ghostscript to new machines or operating +systems, check the *<b><tt>_.h</tt></b> files for <b><tt>ifdef</tt></b> on +things other than <b><tt>DEBUG</tt></b>. You should probably plan to make +a new makefile and a new <b><tt>gp_</tt></b>XXX<b><tt>.c</tt></b> file. + +<hr> + +<h2><a name="Makefiles"></a>Makefiles</h2> + +<p> +This section is only for advanced developers who need to integrate +Ghostscript into a larger program at build time. + +<p> +NOTE: THIS SECTION IS INCOMPLETE. IT WILL BE IMPROVED IN A LATER REVISION. + +<p> +The Ghostscript makefiles are meant to be organized according to the +following two principles: + +<ul> + +<li>All the parameters that vary from platform to platform appear in the +top-level makefile for a given platform. ("Platform" = OS + compiler + +choice of interpreter vs. library) + +<li>All the rules and definitions that can meaningfully be shared among more +than 1 platform appear in a makefile that is "included" by a makefile +(normally the top-level makefile) for those platforms. +</ul> + +<p> +Thus, for example: + +<ul> + +<li>Rules and definitions shared by all builds are in +<b><tt>gs.mak</tt></b>. + +<li>Rules and definitions specific to the library (on all platforms) are in +<b><tt>lib.mak</tt></b>. In principle this could be merged with +<b><tt>gs.mak</tt></b>, but we wanted to leave open the possibility that +<b><tt>gs.mak</tt></b> might be useful with hypothetical interpreter-only +products. + +<li>Stuff specific to interpreters (on all platforms) is in +<b><tt>int.mak</tt></b>. + +<li>Stuff specific to all Unix platforms should be in a single +<b><tt>unix.mak</tt></b> file, but because <b><tt>make</tt></b> sometimes +cares about the order of definitions, and because some of it is shared with +DV/X, it got split between <b><tt>unix-aux.mak</tt></b>, +<b><tt>unix-end.mak</tt></b>, <b><tt>unixhead.mak</tt></b>, +<b><tt>unixinst.mak</tt></b>, and <b><tt>unixlink.mak</tt></b>. + +</ul> + +<p> +For MS-DOS and MS Windows builds, there should be: + +<ul> + +<li>A makefile for all MS OS (DOS or Windows) builds, for all + compilers and products. + +<li>Perhaps a makefile for all MS-DOS builds, for all compilers and +products, although since Watcom is the only such compiler we're likely to +support this may be overkill. + +<li>A makefile for all MS Windows builds, for all compilers and products. + +<li>A makefile for all Watcom builds (DOS or Windows), for all products. + +<li>A top-level makefile for the Watcom DOS interpreter product. + +<li>A top-level makefile for the Watcom Windows interpreter product. + +<li>A top-level makefile for the Watcom DOS library "product". + +<li>A top-level makefile for the Watcom Windows library "product". + +<li>A makefile for all Borland builds (DOS or Windows), for all + products. + +</ul> + +<p> +and so on. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. All +rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Unix-lpr.htm b/Master/xemtex/doc/ghostscript/Unix-lpr.htm new file mode 100644 index 00000000000..a92e7809534 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Unix-lpr.htm @@ -0,0 +1,267 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Setting up a Unix lpr filter for Ghostscript</title> +<!-- $Id: Unix-lpr.htm,v 1.13.2.11.2.5 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: unix-lpr.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Setting up a Unix <tt>lpr</tt> filter for Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Overview">Overview</a> +<li><a href="#What_it_can_do">What it can do</a> +<li><a href="#Setting_up">Setting it up</a> +<ul> +<li><a href="#Editing_device_list">Editing the device list <b><tt>DEVICES</tt></b></a> +<ul> +<li><a href="#Field_bpp">Field 1: bits per pixel</a> +<li><a href="#Field_colours">Field 2: colours</a> +<li><a href="#Field_dq">Field 3: dual queues</a> +<li><a href="#Device_example">Example definition of <b><tt>DEVICES</tt></b></a> +</ul> +<li><a href="#Editing_filter_list">Editing the filter list</a> +<li><a href="#Editing_printer_port">Editing the printer port and type</a> +<li><a href="#Modifying_printcap_insert">Modifying <b><tt>printcap.insert</tt></b></a> +<li><a href="#Multiple_queues">Single or dual queues</a> +</ul> +<li><a href="#Bugs">Bugs</a> +<li><a href="#Authors">Authors</a> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a> and the <a href="Use.htm">usage documentation</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Overview"></a>Overview</h2> + +<p> +"How do I set up Ghostscript to provide PostScript queues in a standard lpr +environment on Unix systems?" is a Frequently Asked Question amongst +Ghostscript users. The two shell scripts described by this document are +designed to make this task a little easier. They are + +<blockquote><dl> +<dt><b><tt>unix-lpr.sh</tt></b> +<dd>a flexible, multi-option print filter + +<dt><b><tt>lprsetup.sh</tt></b> +<dd>A shell script which sets up soft links and creates a template insert +for the <b><tt>printcap</tt></b> file +</dl></blockquote> + +<hr> + +<h2><a name="What_it_can_do"></a>What it can do</h2> + +<p> +The print filter resides in the Ghostscript installation directory (often +<b><tt>/usr/local/share/ghostscript</tt></b>, but may be something else at +your installation), together with a dummy filter directory containing +various soft links which point to the filter. It offers the following +features: + +<ul> +<li>Multiple devices supported by a single filter +<li>Multiple bit-depths for the same device +<li>Multiple number of colours for the same device +<li>Direct (single-queue) and indirect (two-queue) setup +<li>Support for the standard preprocessing filters if you have the +corresponding (whatever)-to-PostScript translators +<li>Redirection of diagnostic and programmed output to a logfile in +the spooling directory +<li>Maintaining of printer accounting records of the numbers of pages +printed by each user (compatible with the <b><tt>pac</tt></b> command) +<li>Straightforward editing for further customisation +</ul> + +<hr> + +<h2><a name="Setting_up"></a>Setting it up</h2> + +<p> +The <b><tt>lprsetup.sh</tt></b> script needs to have two lines edited +before running, to set the printer devices to use and the list of filters +available. With this information, it + +<ul> +<li>creates a "<b><tt>filt</tt></b>" subdirectory under the +Ghostscript installation directory +<li>creates the links in this directory which enable the filter to +determine the parameters for running Ghostscript +<li>automatically generates <b><tt>printcap</tt></b> entries which should +need only a little editing before adding to your system +<b><tt>printcap</tt></b> file +</ul> + +<h3><a name="Editing_device_list"></a>Editing the device list <tt>DEVICES</tt></h3> + +<p> +At the top of <b><tt>lprsetup.sh</tt></b> is a line of the form +<b><tt>DEVICES=</tt></b><em>{list}</em>. Replace the example list with +your own list of devices. Each entry is the name of a device, followed by +three more optional fields, separated by dots "<b><tt>.</tt></b>". + +<h4><a name="Field_bpp"></a>Field 1: bits per pixel</h4> + +<p> +The first field is required only if the printer device understands the <a +href="Devices.htm#deskjet_parameters"><b><tt>-dBitsPerPixel=</tt></b> +switch</a>, which applies only to colour devices. For a particular number +<b><em>N</em></b> of bits per pixel, add the suffix <b><em>.N</em></b> to +the device name, for instance <b><tt>cdj500.3</tt></b>, +<b><tt>cdj500.24</tt></b>, etc. + +<h4><a name="Field_colours"></a>Field 2: colours</h4> + +<p> +The second field is required only if the printer device understands the +setting of the <b><tt>Colors</tt></b> device parameter (as in +<b><tt>-dColors=</tt></b>), which applies only to colour devices (and at +present is only supported by the <b><tt>bjc</tt></b>* family of drivers). +For a particular number <b><em>N</em></b> of colours, suffix +<b><em>.N</em></b> to the device name, such as <b><tt>bjc600.24.3</tt></b>, +<b><tt>bjc600.8.1</tt></b> etc. + +<h4><a name="Field_dq"></a>Field 3: dual queues</h4> + +<p> +The third field is required in order to use two separate queues for the +device, a "raw" queue and a PostScript queue (see +"<a href="#Multiple_queues">Single or dual queues</a>" below). If you want +dual queues, add the suffix <b><tt>.dq</tt></b> ("dual queue") to the name, +whether or not a <a href="#Field_bpp">bits-per-pixel suffix</a> has already +been added. + +<h4><a name="Device_example"></a>Example definition of +<tt>DEVICES</tt></h4> + +<p> +Thus the following list supports a <b><tt>cdj550</tt></b> device at three +different bit depths (24 bpp, 3 bpp and 1 bpp), with a dual queue (that is, +a separate queue for the raw data); a monochrome <b><tt>deskjet</tt></b> +device with a single queue; and a <b><tt>djet500</tt></b> device using a +separate queue: + +<blockquote><b><tt> +DEVICES="cdj550.24.dq cdj550.3.dq cdj550.1.dq deskjet djet500.dq" +</tt></b></blockquote> + +<h3><a name="Editing_filter_list"></a>Editing the filter list</h3> + +<p> +The standard list contains only the generic "<b><tt>if</tt></b>" filter, +but a commented-out list shows other filters which may be available. If +you wish to use the support for these filters, you may need to edit the +<b><tt>bsd-if</tt></b> file to add to the <b><tt>PATH</tt></b> the +directories where the translators are stored, or to change the names of the +filters if yours are different. The <b><tt>bsd-if</tt></b> script is +supplied with an example setup using Transcript (a commercial package from +Adobe), and PBMPLUS, a freeware package by Jef Poskanzer and others. + +<h3><a name="Editing_printer_port"></a>Editing the printer port and +type</h3> + +<p> +You can set the port and port type (parallel or printer) for an attached +printer, but for remote printers you'll have to modify the +<tt>printcap.insert</tt> file yourself. + +<h3><a name="Modifying_printcap_insert"></a>Modifying +<tt>printcap.insert</tt></h3> + +<p> +Running <b><tt>lprsetup.sh</tt></b> generates a file +<b><tt>printcap.insert</tt></b> which has a template setup for your +printer queues. It cannot guarantee to do the whole job, and you will +probably need to consult your system documentation and edit this file +before you add it to your <b><tt>printcap</tt></b> file. The file has good +defaults for serial printers, as these often cause problems in getting +binary data to the printer. However, you may need to change the baud rate, +or the handshaking method. Only a small change is required in the +<b><tt>printcap</tt></b> file to use a networked remote printer instead of +an attached printer, and an example is given in +<b><tt>printcap.insert</tt></b>. + +<h3><a name="Multiple_queues"></a>Single or dual queues</h3> + +<p> +If you wish to provide a PostScript-only queue (for example, so that all +pages printed go through accounting), and the printer port is local to the +host machine, a single queue is appropriate -- Ghostscript simply converts +PostScript into the printer's native data format and sends it to the +port. But if the printer is on a remote networked machine, or if you need to +send raw printer data to the printer, you must use two queues. Simply +specify the <a href="#Field_dq">"<b><tt>.dq</tt></b>" option</a> above. + +<hr> + +<h2><a name="Bugs"></a>Bugs</h2> + +<p> +You must have write access to the Ghostscript installation directory for +<b><tt>lprsetup.sh</tt></b> to create the filter directory and soft links. + +<p> +If you have several different values of bits per pixel for the same device, +you must list all instances of that device as adjacent items in the +<a href="#Editing_device_list"><b><tt>DEVICES</tt></b></a> device +list. If you do not, <b><tt>printcap.insert</tt></b> will contain multiple +entries for the same device, which is not supported. + +<hr> + +<h2><a name="Authors"></a>Authors</h2> + +<p> +This material was contributed by George Cameron. Yves Arrouye +<<a href="mailto:yves.arrouye@usa.net">yves.arrouye@usa.net</a>> +is responsible for the number-of-colours part of the script. + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. All +rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Use.htm b/Master/xemtex/doc/ghostscript/Use.htm new file mode 100644 index 00000000000..e2d2576d09b --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Use.htm @@ -0,0 +1,3036 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" +"http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>How to use Ghostscript</title> +<!-- $Id: Use.htm,v 1.33.2.22.2.6 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: use.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>How to use Ghostscript</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Invoking">Invoking Ghostscript</a> +<ul> +<li><a href="#Help_command">Help at the command line: <b><tt>gs -h</tt></b></a> +</ul> +<li><a href="#Security">Security</a> +<li><a href="#Pipe_input">Input from a pipe</a> +<li><a href="#Output_device">Selecting an output device</a> +<ul> +<li><a href="#Printer_resolution">Printer resolution</a> +<li><a href="#File_output">Output to files</a> +<ul> +<li><a href="#One_page_per_file">One page per file</a> +<li><a href="#Pipe_output">Output to a pipe</a> +<li><a href="#Output_to_graphics">Output to graphics file formats</a> +<li><a href="#Bounding_box_output">Bounding box output</a> +</ul> +<li><a href="#Paper_size">Choosing paper size</a> +<li><a href="#Change_default_size">Changing the installed default paper size</a> +</ul> +<li><a href="#Finding_files">How Ghostscript finds files</a> +<ul> +<li><a href="#PS_resources">Finding PostScript Level 2 resources</a> +<li><a href="#Font_lookup">Font lookup</a> +<li><a href="#Temp_files">Temporary files</a> +</ul> +<li><a href="#CIDFontSubstitution">CID font substitution</a> +<li><a href="#Environment_variables">Summary of environment variables</a> +<li><a href="#EPS">Using Ghostscript with EPS files</a> +<li><a href="#PDF">Using Ghostscript with PDF files</a> +<ul> +<li><a href="#PDF_stdin">PDF files from standard input</a> +<li><a href="#PDF_switches">Switches for PDF files</a> +<li><a href="#PDF_problems">Problems interpreting a PDF file</a> +</ul> +<li><a href="#Platforms">Notes on specific platforms</a> +<ul> +<li><a href="#Unix">Unix</a> +<li><a href="#VMS">VMS</a> +<ul> +<li><a href="#VMS_X_Windows">Using X Windows on VMS</a> +</ul> +<li><a href="#MS_Windows">MS Windows</a> +<li><a href="#MS-DOS">MS-DOS</a> +<li><a href="#X_Windows">X Windows</a> +<ul> +<li><a href="#X_resources">X resources</a> +<li><a href="#X_server_bugs">Working around bugs in X servers</a> +<li><a href="#X_fonts">X fonts</a> +<li><a href="#GS_fonts_as_X_fonts">Using Ghostscript fonts on X displays</a> +<li><a href="#X_device_parameters">X device parameters</a> +</ul> +<li><a href="#SCO_Unix">SCO Unix</a> +</ul> +<li><a href="#Switches">Switches</a> +<ul> +<li><a href="#General_switches">General switches</a> +<ul> +<li><a href="#Input_control">Input control</a> +<li><a href="#File_searching">File searching</a> +<li><a href="#Parameters">Setting parameters</a> +<li><a href="#Quiet">Suppress messages</a> +</ul> +<li><a href="#Parameter_switches">Parameter switches (<b><tt>-d</tt></b> and <b><tt>-s</tt></b>)</a> +<ul> +<li><a href="#Rendering_parameters">Rendering parameters</a> +<li><a href="#Page_parameters">Page parameters</a> +<li><a href="#Font_related_parameters">Font-related parameters</a> +<li><a href="#Interaction_related_parameters">Interaction-related parameters</a> +<li><a href="#Output_selection_parameters">Device and output selection parameters</a> +<li><a href="#Other_parameters">Other parameters</a> +</ul> +</ul> +<li><a href="#Improving_performance">Improving performance</a> +<li><a href="#Debugging">Debugging</a> +<li><a href="#Known_paper_sizes">Appendix: Paper sizes known to Ghostscript</a> +<li><a href="#X_font_mappings">Appendix: X default font mappings</a> +<ul> +<li><a href="#Standard_X_server_fonts">Standard X servers</a> +<ul> +<li><a href="#X_regular_fonts">Regular fonts</a> +<li><a href="#X_symbol_fonts">Symbol fonts</a> +<li><a href="#X_dingbat_fonts">Dingbat fonts</a> +</ul> +<li><a href="#OpenWindows_fonts">Sun OpenWindows</a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>, the new user's documentation on +<a href="New-user.htm#Previewers">previewers</a> and, if necessary, how to +<a href="Install.htm">install Ghostscript</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Invoking"></a>Invoking Ghostscript</h2> + +<p><a name="Command_line"></a> The command line to invoke Ghostscript is +essentially the same on all systems, although the name of the executable +program itself may differ among systems. For instance, to invoke +Ghostscript on Unix: + +<blockquote> +<b><tt>gs</tt></b> [switches] {filename 1} ... [switches] {filename <em>N</em>} ... +</blockquote> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Ghostscript's name on different systems</font><hr> +<tr> <th align=left>System + <td> + <th align=left>Ghostscript's name +<tr> <td colspan=3><hr> +<tr> <td>Unix + <td> <td><b><tt>gs</tt></b> +<tr> <td>VMS + <td> <td><b><tt>gs</tt></b> +<tr> <td>DOS & MS Windows 3 + <td> <td><b><tt>gs386</tt></b> +<tr> <td>MS Windows 95/98 + <td> <td><b><tt>gswin32</tt></b> +<tr> <td>MS Windows 95/98 command line + <td> <td><b><tt>gswin32c</tt></b> +<tr> <td>OS/2 + <td> <td><b><tt>gsos2</tt></b> +</table></blockquote> + +<p> +Note, though, that on a system with a windowed graphical user interface, +it's common to use Ghostscript through a previewer, so you should read the +<a href="New-user.htm#Previewers">section about previewers</a> in the +documentation for new users. + +<p> +Ghostscript is capable of interpreting PostScript, encapsulated PostScript +(EPS), DOS EPS (EPSF), and -- if the executable was built for it -- Adobe +Portable Document Format (PDF). The interpreter reads and executes the +files in sequence, using the method described under +"<a href="#File_searching">File searching</a>" to find them. After doing +this, it reads further lines of PostScript language commands from the +primary input stream, normally the keyboard, interpreting each line +separately. To quit the interpreter, type "<b><tt>quit</tt></b>". The +interpreter also quits gracefully if it encounters end-of-file or +control-C. + +<p> +The interpreter recognizes many <a href="#Switches">switches</a>. A switch +may appear anywhere in the command line, and applies to all files named +after it on the line. Many of the switches include "<b><tt>=</tt></b>" +followed by a parameter. + +<h3><a name="Help_command"></a>Help at the command line: <b><tt>gs -h</tt></b></h3> + +<p> +You can get a brief help message by invoking Ghostscript with the +<b><tt>-h</tt></b> or <b><tt>-?</tt></b> switch, like this: + +<blockquote><b><tt> +gs -h<br> +gs -? +</tt></b></blockquote> + +<p> +(Of course, for "<b><tt>gs</tt></b>" use the right +<a href="#Command_line">command for your system</a>.) The message shows +for this executable + +<ul> +<li>its version +<li>the format of the command to invoke it +<li>a few of the most useful switches +<li>the formats it can interpret +<li>the devices for which it can produce output +<li>where it looks for font files +<li>where and how to send bug reports +</ul> + +<h2><a name="Security"></a>Security</h2> + +<p> +Ghostscript implements a full-featured programming language, with +access to the filesystem and the ability to control a diverse set of +devices. As such, there are potential security implications. + +<p> +The first line of defense is to use the security mechanisms +provided by Ghostscript. If you're running arbitrary PostScript files +(for example, those sent through email or downloaded from the Web), +make sure to use the -dSAFER option. Otherwise, you are opening up +your entire filesystem to potentially malicious code. + +<p> +By default, Ghostscript opens up read access to the entire +filesystem. In general, if you're just viewing or printing documents, +this does not pose a significant security risk. However, if there is +a chance that the output of Ghostscript can leak sensitive information, +also set the -DPARANOIDSAFER option. Note, however, that this option +is incompatible with some scripts and wrappers, including gv and +related viewer apps. + +<p> +We plan to make -dSAFER the default in future versions of Ghostscript. +Since most people use Ghostscript to print and view documents, rather +than to run scripts written in the PostScript language, this will +provide additional safety with little hassle for most users. If you +<em>are</em> using Ghostscript as a scripting language and need +unfettered access to the filesystem, use the -dNOSAFER flag to signal +explictly that you wish the PostScript code to have full access to the +file system. Currently, this flag has no effect, but it will insure +than your scripts execute as expected in future versions. + +<p> +While we've tried to patch all known security problems, there is +no guarantee that we've caught them all. Ghostscript is a complex +application written in C. Buffer overflows and other exploits remain +a distinct possibility. Thus we recommend that, whenever possible, +Ghostscript should run in a secure "sandbox" environment, making +use of the security mechanisms of the underlying operating system. +In particular, we urge GNU/Linux distributors to invoke Ghostscript from +the print subsystem in a chroot'ed environment, and never as root. + +<p> +We will continue to be vigilant regarding security issues. As +always, apply security updates promptly. + +<h2><a name="Pipe_input"></a>Input from a pipe</h2> + +<p> +As noted above, one normally specifies input with file names on the command +line. However, one can also "pipe" input into Ghostscript by using the +special file name "<b><tt>-</tt></b>" or "<b><tt>-_</tt></b>", for instance + +<blockquote> +{some program producing PS} <b><tt>| gs</tt></b> {...options...} <b><tt>-</tt></b> +<br> +{some program producing PS} <b><tt>| gs</tt></b> {...options...} <b><tt>-_</tt></b> +</blockquote> + +<p> +These switches differ from a named file in two respects: + +<ol> +<li>When Ghostscript finishes reading from the pipe, it quits rather than +going into interactive mode. Because of this, these switches are +really only useful as the last argument on the command line. + +<li>These switches can't be used to pipe PDF input to Ghostscript. +See "<a href="#PDF">Using Ghostscript with PDF files</a>" below. +</ol> + +<p> + +The difference between "<b><tt>-</tt></b>" and "<b><tt>-_</tt></b>" is that +"<b><tt>-</tt></b>" may read the input one character at a time, which is useful +for programs that generate input for Ghostscript dynamically +and watch for some response, whereas "<b><tt>-_</tt></b>" reads the input in +blocks, which is more efficient for ordinary (batch) execution. + +<h2><a name="Output_device"></a>Selecting an output device</h2> + +<p> +Ghostscript may be built to handle multiple output devices, and it normally +opens and directs output to the first one built in. Ghostscript's +<b><tt>gs -h</tt></b> <a href="#Help_command">help message</a> lists +the output devices known to the executable. Once you invoke Ghostscript +you can also find out what devices are available by +"<b><tt>devicenames ==</tt></b>" at its command prompt. + +<p><a name="Source_code"></a> + +A little more information about devices appears near the beginning of the +files <b><tt>devs.mak</tt></b> (for drivers that are considered "part of" +Ghostscript and are maintained by the maintainers of the main Ghostscript +code) and <b><tt>contrib.mak</tt></b> (for user-contributed drivers) used to +build Ghostscript. (If you got Ghostscript under the Aladdin <a +href="Public.htm">Free Public License</a>, the person or place from which +you got it is also required to make the source code available to you; if you +got it under the GNU General Public License (GPL), see the GNU <a +href="http://www.gnu.org/copyleft/gpl.html">General Public License</a> for +more information.) + +<p><a name="Device_output"></a> +To use device <em>xyz</em> as the initial output device, use the +command-line switch + +<blockquote> + <b><tt>-sDEVICE=</tt></b><em>xyz</em> +</blockquote> + +<p> +Note that this switch must precede the name of the first input file, and +only its first use has any effect. For example, for printer output in a +configuration that includes an Epson printer driver, instead of just +"<b><tt>gs myfile.ps</tt></b>" you might use + +<blockquote> + <b><tt>gs -sDEVICE=epson myfile.ps</tt></b> +</blockquote> + +<p> +Alternatively, once you invoke Ghostscript and have its own command prompt +you can type + +<blockquote><b><tt> + (epson) selectdevice<br> + (myfile.ps) run +</tt></b></blockquote> + +<p> +All output then goes to the Epson printer instead of the display until you +do something to change devices. You can switch devices at any time by +using the <b><tt>selectdevice</tt></b> procedure, for +instance like one of these: + +<blockquote><b><tt> + (vga) selectdevice<br> + (epson) selectdevice +</tt></b></blockquote> + +<p><a name="GS_DEVICE"></a> +A third possibility is to define an environment variable +<b><tt>GS_DEVICE</tt></b> with the name of your desired default device. +The order of precedence for these alternatives, highest to lowest, is: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <td><b><tt>selectdevice</tt></b> + <td> + <td>Highest precedence +<tr> <td>(command line) + <td> + <td> +<tr> <td><b><tt>GS_DEVICE</tt></b> + <td> + <td> +<tr> <td>(first device built in) + <td> + <td>Default; lowest precedence +</table></blockquote> + +<h3><a name="Printer_resolution"></a>Printer resolution</h3> + +<p> +Some printers can print at several different resolutions, letting you +balance resolution against printing speed. To select the resolution on +such a printer, use the <b><tt>-r</tt></b> switch: + +<blockquote> + <b><tt>gs -sDEVICE=</tt></b><em>printer</em><b><tt> -r</tt></b><em>XRES</em><b><tt>x</tt></b><em>YRES</em> +</blockquote> + +<p> +For example, on Epson-compatible printers you have these choices: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr> <td><b><tt>gs -sDEVICE=epson</tt></b> + <td> + <td><b><tt>-r60x72</tt></b> + <td> + <td>9-pin + <td> + <td>lowest resolution + <td> + <td>fastest +<tr> <td> + <td> + <td><b><tt>-r240x72</tt></b> + <td> + <td> + <td> + <td>highest + <td> + <td>slowest +<tr> <td> +<tr> <td> + <td> + <td><b><tt>-r60x60</tt></b> + <td> + <td>24-pin + <td> + <td>lowest + <td> + <td>fastest +<tr> <td> + <td> + <td><b><tt>-r360x180</tt></b> + <td> + <td> + <td> + <td>highest + <td> + <td>slowest +</table></blockquote> + +<h3><a name="File_output"></a>Output to files</h3> + +<p> +If you select a printer as the output device, Ghostscript also allows you to +control where the device sends its output. On DOS and MS Windows systems, +output normally goes directly to the printer (<b><tt>PRN</tt></b>); on Unix +or VMS systems normally to a temporary file for later printing. To send the +output to a file, use the <b><tt>-sOutputFile=</tt></b> switch (for +compatibility with older versions of Ghostscript, +<b><tt>-sOUTPUTFILE=</tt></b> also works). For instance, to direct all +output into the file <b><tt>ABC.xyz</tt></b>, use + +<blockquote><b><tt> +gs -sOutputFile=ABC.xyz +</tt></b></blockquote> + +<p> +The file name follows the PostScript convention that if a name begins with +<b><tt>%</tt></b>, the name must be in the form <b><tt>%</tt></b>filedevice +or <b><tt>%</tt></b>filedevice<b><tt>%</tt></b>file. The legal values of +filedevice are system-dependent, but the following have consistent meanings +across systems: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">"%{filedevice}%{file}" in <b><tt>-sOutputFile=</tt></b></font><hr> +<tr valign=bottom> + <th align=left>filedevice + <td> + <th align=left>Meaning +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>%os%xyz</tt></b> + <td> + <td>An ordinary file named <b><tt>xyz</tt></b> +<tr valign=top> <td><b><tt>%pipe%cmd</tt></b> + <td> + <td>(if supported) A pipe to an instance of the command <b><tt>cmd</tt></b> +<tr valign=top> <td><b><tt>%stdout</tt></b> + <td> + <td>The standard output file +</table></blockquote> + +<p> +Note that because of this, if you want to specify a file name that actually +begins with <b><tt>%</tt></b>, you must specify the <b><tt>%os%</tt></b> +filedevice explicitly: e.g., for output to a file named +<b><tt>%abc</tt></b>, you need to specify +<b><tt>-sOutputFile=%os%%abc</tt></b>. Note also that on DOS and MS Windows +systems, the <b><tt>%</tt></b> character has a special meaning for the +command processor (shell), so you will have to double it, e.g., for a pipe +on MS Windows, + +<blockquote><b><tt> +gs -sOutputFile=%%pipe%%cmd +</tt></b></blockquote> + +<h4><a name="One_page_per_file"></a>One page per file</h4> + +<p> +You can also tell Ghostscript to put each page of output in a separate +file. To send output to a series of files each representing a single page, +use in the filename the <b><tt>printf</tt></b> format specifier +"<b><tt>%d</tt></b>" (or its extended form like "<b><tt>%02d</tt></b>"); +for instance + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">"%{n}d" in <b><tt>-sOutputFile=</tt></b></font><hr> +<tr valign=bottom> + <th align=left>Output specification + <td> + <th align=left>Produces the series of 1-page files +<tr> <td colspan=3><hr> +<tr valign=top> <td><b><tt>-sOutputFile=ABC%d.xyz</tt></b> + <td> + <td><b><tt>ABC1.xyz</tt></b> ... <b><tt>ABC10.xyz</tt></b> ... +<tr valign=top> <td><b><tt>-sOutputFile=ABC%03d.xyz</tt></b> + <td> + <td><b><tt>ABC001.xyz</tt></b> ... <b><tt>ABC010.xyz</tt></b> ... +</table></blockquote> + +<p> +As noted above, on DOS and MS Windows systems, you will have to double the +<b><tt>%</tt></b> character, e.g., + +<blockquote><b><tt> +gs -sOutputFile=ABC%%03d.xyz +</tt></b></blockquote> + +<h4><a name="Pipe_output"></a>Output to a pipe</h4> + +<p> +On Unix and (32-bit) MS Windows systems you can use this switch to send +output directly to a pipe. For example, to pipe the output to +<b><tt>lpr</tt></b>, use the command + +<blockquote><b><tt> + gs -sOutputFile=\|lpr +</tt></b></blockquote> +or, as noted above, +<blockquote><b><tt> + gs -sOutputFile=%pipe%lpr +</tt></b></blockquote> + +<p> +(doubling the <b><tt>%</tt></b> characters on MS Windows systems, as noted +above.) You can also send output to standard output for piping in the usual +way supported by the system: + +<blockquote> + <b><tt>gs -sOutputFile=- -q |</tt></b> ... +</blockquote> +or, as noted above, +<blockquote> + <b><tt>gs -sOutputFile=%stdout -q |</tt></b> ... +</blockquote> + +<p> +(again, doubling the <b><tt>%</tt></b> character on MS Windows systems.) +In this case you must also use the <a href="#Quiet"><b><tt>-q</tt></b> +switch</a> to prevent Ghostscript from writing messages to standard output +which become mixed with the intended output stream. + +<h4><a name="Output_to_graphics"></a>Output to graphics file formats</h4> + +<p> +File formats like PCX and PBM are also "devices". When you select a file +format as the "device", you must also specify an output file, for instance + +<blockquote><b><tt> +gs -sDEVICE=pcxmono -sOutputFile=xyz.pcx +</tt></b></blockquote> + +<p> +Here, as with printable files, you can use "<b><tt>%d</tt></b>" +("<b><tt>%%d</tt></b>" on DOS and MS Windows) to specify <a +href="#One_page_per_file">one page per output file</a>. + +<h4><a name="Bounding_box_output"></a>Bounding box output</h4> + +<p> +There is a special <b><tt>bbox</tt></b> "device" that just prints the +bounding box of each page. You select it in the usual way: + +<blockquote><b><tt> +gs -dNOPAUSE -dBATCH -sDEVICE=bbox +</tt></b></blockquote> + +<p> +It prints the output in a format like this: + +<blockquote> +<pre><b><tt>%%BoundingBox: 14 37 570 719 +%%HiResBoundingBox: 14.308066 37.547999 569.495061 718.319158 +</tt></b></pre></blockquote> + +<p> +Currently, it always prints the bounding box on <b><tt>stderr</tt></b>; +eventually, it should also recognize <b><tt>-sOutputFile=</tt></b>. + +<p> +Note that this device, like other devices, has a resolution and a (maximum) +page size. As for other devices, the product (resolution x page size) is +limited to approximately 500K pixels. By default, the resolution is 4000 +DPI and the maximum page size is approximately 125", or approximately 9000 +default (1/72") user coordinate units. If you need to measure larger pages +than this, you must reset <em>both</em> the resolution and the page size in +pixels, e.g., + +<blockquote><b><tt> +gs -dNOPAUSE -dBATCH -sDEVICE=bbox -r100 -g500000x500000 +</tt></b></blockquote> + +<h3><a name="Paper_size"></a>Choosing paper size</h3> + +<p> +Ghostscript is distributed configured to use U.S. letter paper as its +default page size. There are two ways to select other paper sizes from the +command line: + +<ul> + +<li> +If the desired paper size is listed in the section on <a +href="#Known_paper_sizes">paper sizes known to Ghostscript</a> below, you +can select it as the default paper size for a single invocation of +Ghostscript by using the <b><tt>-sPAPERSIZE=</tt></b> switch, for instance + +<blockquote><b><tt> +-sPAPERSIZE=a4<br> +-sPAPERSIZE=legal +</tt></b></blockquote> + +<li> +Otherwise, let <em>w</em> be the desired paper width and <em>h</em> be the +desired paper height, in 1/72" units. You can set the page size using the +pair of switches + +<blockquote> +<b><tt>-dDEVICEWIDTHPOINTS=</tt></b><em>w</em> +<b><tt>-dDEVICEHEIGHTPOINTS=</tt></b><em>h</em> +</blockquote> + +</ul> + +<p> +Individual documents can (and often do) specify a paper size, which takes +precedence over the default size. To force a specific paper size and +ignore the paper size specified in the document, select a paper size as +just described, and also include the +<a href="#FIXEDMEDIA"><b><tt>-dFIXEDMEDIA</tt></b> switch</a> on the +command line. + +<h3><a name="Change_default_size"></a>Changing the installed default paper size</h3> + +<p> +You can change the installed default paper size in installing Ghostscript +or later, by editing the initialization file <b><tt>gs_init.ps</tt></b>. +Find the consecutive lines + +<blockquote><b><tt> +% Optionally choose a default paper size other than U.S. letter.<br> +% (a4) +</tt></b></blockquote> + +<p> +Then to make A4 the default paper size, uncomment the second line to change +this to + +<blockquote><b><tt> +% Optionally choose a default paper size other than U.S. letter.<br> +(a4) +</tt></b></blockquote> + +<p> +For <b><tt>a4</tt></b> you can substitute any +<a href="#Known_paper_sizes">paper size Ghostscript knows</a>. + +<h2><a name="Finding_files"></a>How Ghostscript finds files</h2> + +<p> +When looking for initialization files (<b><tt>gs_*.ps</tt></b>, +<b><tt>pdf_*.ps</tt></b>), font files, the <b><tt>Fontmap</tt></b> file, +and files named on the command line, Ghostscript first tests whether the +file name specifies an explicit directory. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Testing a file name for an explicit directory</font><hr> +<tr> <th align=left>System + <td> + <th align=left>Does the name ... +<tr> <td colspan=3><hr> +<tr> <td valign=top>Unix + <td> + <td>Begin with <b><tt><u>/</u></tt></b>, <b><tt><u>./</u></tt></b> or <b><tt><u>../</u></tt></b> ? +<tr> <td valign=top>DOS or MS Windows + <td> + <td>Have <b><tt><u>:</u></tt></b> as its second character, or + begin with <b><tt><u>/</u></tt></b>, <b><tt><u>\</u></tt></b>, + <b><tt><u>./</u></tt></b>, <b><tt><u>../</u></tt></b>, <b><tt><u>.\</u></tt></b>, or <b><tt><u>..\</u></tt></b> ? +<tr> <td valign=top>VMS + <td> + <td>Contain a node, device, root, or directory specification? +</table></blockquote> + +<p><a name="General_search_path"></a> If the test succeeds, the file name +specifies an explicit directory and Ghostscript tries to open the file +using the name given. Otherwise it tries directories in this order: + +<ol> +<li>The current directory (unless disabled by the +<a href="#P-_switch"><b><tt>-P-</tt></b> switch</a>); + +<li>The directories specified by <a href="#I_switch"><b><tt>-I</tt></b> +switches</a> in the command line, if any; + +<li>The directories specified by the <b><tt>GS_LIB</tt></b> +environment variable, if any; + +<li>The directories specified by the +<b><tt>GS_LIB_DEFAULT</tt></b> macro (if any) in the makefile +when this executable was built. +</ol> + +<p> +<b><tt>GS_LIB_DEFAULT</tt></b>, +<b><tt>GS_LIB</tt></b>, and the +<b><tt>-I</tt></b> parameter may specify either a single +directory or a list of directories separated by a character appropriate for +the operating system ("<b><tt>:</tt></b>" on Unix systems, +"<b><tt>,</tt></b>" on VMS systems, and +"<b><tt>;</tt></b>" on DOS systems). We think that trying +the current directory first is a very bad idea -- it opens serious security +loopholes and can lead to very confusing errors if one has more than one +version of Ghostscript in one's environment -- but when we attempted to +change it, users insisted that we change it back. You can disable looking +in the current directory first by using the +<a href="#P_switch"><b><tt>-P-</tt></b> switch</a>. + +<p> +Note that Ghostscript does not use this file searching algorithm for the +<b><tt>run</tt></b> or <b><tt>file</tt></b> +operators: for these operators, it simply opens the file with the name +given. To run a file using the searching algorithm, use +<b><tt>runlibfile</tt></b> instead of +<b><tt>run</tt></b>. + +<h3><a name="PS_resources"></a>Finding PostScript Level 2 resources</h3> + +<p> +Ghostscript uses a completely different rule for looking for files +containing PostScript Level 2 "resources": per the Adobe documentation, it +concatenates together + +<ol> +<li>the value of the system parameter +<b><tt>GenericResourceDir</tt></b> (initially +<b><tt>/Resource/</tt></b>) + +<li>the name of the resource category (for instance, <b><tt>ProcSet</tt></b>) + +<li>the value of the system parameter +<b><tt>GenericResourcePathSep</tt></b> (initially +"<b><tt>/</tt></b>") + +<li>the name of the resource instance (for instance, <b><tt>CIDInit</tt></b>) +</ol> + +<p> +To look up fonts, after exhausting the search method described in <a href="#Font_lookup">the +next section</a>, it concatenates together + +<ol> +<li>the value of the system parameter +<b><tt>FontResourceDir</tt></b> (initially +<b><tt>/Resource/Font/</tt></b>) + +<li>the name of the resource font (for instance, <b><tt>Times-Roman</tt></b>) +</ol> + +<p> +Note that even though the system parameters are named "somethingDir", they +are not just plain directory names: they have "<b><tt>/</tt></b>" on the +end, so that they can be concatenated with the category name or font name. + +<h3><a name="Font_lookup"></a>Font lookup</h3> + +<p> +Ghostscript has a slightly different way to find the file containing a font +with a given name. This rule uses not only the search path defined by +<b><tt>-I</tt></b>, <b><tt>GS_LIB</tt></b>, and +<b><tt>GS_LIB_DEFAULT</tt></b> <a href="#General_search_path">as described +above</a>, but also the directory that is the value of the +<b><tt>FontResourceDir</tt></b> system parameter, and an additional list of +directories that is the value of the <b><tt>GS_FONTPATH</tt></b> environment +variable (or the value provided with the <b><tt>-sFONTPATH=</tt></b> switch, +if present). + +<p> +At startup time, Ghostscript reads in the <b><tt>Fontmap</tt></b> files in +every directory on the search path (or in the list provided with the +<b><tt>-sFONTMAP=</tt></b> switch, if present): these files are catalogs of +fonts and the files that contain them. (See <a href="Fonts.htm#Fontmap">the +documentation of fonts</a> for details.) Then, when Ghostscript needs to +find a font that isn't already loaded into memory, it goes through a series +of steps. + +<ul> + +<li> +First, it looks up the font name in the combined Fontmaps. If there is an +entry for the desired font name, and the file named in the entry can be +found in some directory on the general search path (defined by +<b><tt>-I</tt></b>, <b><tt>GS_LIB</tt></b>, and +<b><tt>GS_LIB_DEFAULT</tt></b>), and the file is loaded successfully, and +loading it defines a font of the desired name, that is the end of the +process. + +<li> +If this process fails at any step, Ghostscript looks for a file whose name +is the concatenation of the value of the <b><tt>FontResourceDir</tt></b> +system parameter and the font name, with no extension. If such a file +exists, can be loaded, and defines a font of the desired name, that again is +the end. The value of <b><tt>FontResourceDir</tt></b> is normally the +string <b><tt>/Resource/Font/</tt></b>, but it can be changed with the +<b><tt>setsystemparams</tt></b> operator: see the PostScript Language +Reference Manual for details. + +<li> +If that fails, Ghostscript then looks for a file on the general search path +whose name is the desired font name, with no extension. If such a file +exists, can be loaded, and defines a font of the desired name, that again is +the end. + +<li> +If that too fails, Ghostscript looks at the <b><tt>GS_FONTPATH</tt></b> +environment variable (or the value provided with the +<b><tt>-sFONTPATH=</tt></b> switch, if present), which is also a list of +directories. It goes to the first directory on the list, looking for all +files that appear to contain PostScript fonts; it then adds all those files +and fonts to the combined Fontmaps, and starts over. + +<li> +If scanning the first FONTPATH directory doesn't produce a file that +provides the desired font, it adds the next directory on the FONTPATH list, +and so on until either the font is defined successfully or the list is +exhausted. + +<li> +Finally, if all else fails, it will try to find a substitute for the font +from among the standard 35 fonts. + +</ul> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=3 bgcolor="#CCCC00"><hr><font size="+1">Differences between search path and font path</font><hr> +<tr> <th>Search path + <td> + <th>Font path +<tr> <td colspan=3><hr> +<tr> <td><b><tt>-I</tt></b> switch + <td> + <td><b><tt>-sFONTPATH=</tt></b> switch +<tr> <td> +<tr> <td><b><tt>GS_LIB</tt></b> and <b><tt>GS_LIB_DEFAULT</tt></b> + environment variables + <td> + <td><b><tt>GS_FONTPATH</tt></b> environment variable +<tr> <td> +<tr> <td valign=top>Consulted first + <td> + <td valign=top>Consulted only if search path and + <b><tt>FontResourceDir</tt></b> don't provide the file. +<tr> <td> +<tr> <td valign=top>Font-name-to-file-name mapping given in Fontmap + files; aliases are possible, and there need not be any relation + between the font name in the Fontmap and the + <b><tt>FontName</tt></b> in the file. + <td> <td valign=top>Font-name-to-file-name mapping is + implicit -- the <b><tt>FontName</tt></b> in the file is + used. Aliases are not possible. +<tr> <td> +<tr> <td valign=top>Only fonts and files named in Fontmap are used. + <td> + <td valign=top>Every Type 1 font file in each directory is + available; if TrueType fonts are supported (the + <b><tt>ttfont.dev</tt></b> feature was included when the + executable was built), they are also available. +</table></blockquote> + +<p> +If you are using one of the following types of computer, you may wish to +set the environment variable <b><tt>GS_FONTPATH</tt></b> to +the value indicated so that Ghostscript will automatically acquire all the +installed Type 1 (and, if supported, TrueType) fonts (but see below for +notes on systems marked with "*"): + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Suggested <b><tt>GS_FONTPATH</tt></b> for different systems</font><hr> +<tr> <td> + <td> + <th align=left>System type + <td> + <th valign=bottom align=left><b><tt>GS_FONTPATH</tt></b> +<tr> <td colspan=5><hr> +<tr> <td> + <td> + <td valign=top>Digital Unix + <td> + <td><b><tt>/usr/lib/X11/fonts/Type1Adobe</tt></b> +<tr> <td> + <td> + <td valign=top>Ultrix + <td> + <td><b><tt>/usr/lib/DPS/outline/decwin</tt></b> +<tr> <td> + <td> + <td valign=top>HP-UX 9 + <td> + <td><b><tt>/usr/lib/X11/fonts/type1.st/typefaces</tt></b> +<tr> <td> + <td> + <td valign=top>IBM AIX + <td> + <td><b><tt>/usr/lpp/DPS/fonts/outlines + <br>/usr/lpp/X11/lib/X11/fonts/Type1 + <br>/usr/lpp/X11/lib/X11/fonts/Type1/DPS</tt></b> +<tr> <td> + <td> + <td valign=top>NeXT + <td> + <td><b><tt>/NextLibrary/Fonts/outline</tt></b> +<tr> <td>* + <td> + <td valign=top>SGI IRIX + <td> + <td><b><tt>/usr/lib/DPS/outline/base + <br>/usr/lib/X11/fonts/Type1</tt></b> +<tr> <td> + <td> + <td valign=top>SunOS 4.x<br>(NeWSprint only) + <td> + <td valign=top><b><tt>newsprint_2.5/SUNWsteNP/reloc/$BASEDIR/NeWSprint/<br> small_openwin/lib/fonts</tt></b> +<tr> <td>** + <td> + <td valign=top>SunOS 4.x + <td> + <td><b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b> +<tr> <td>** + <td> + <td valign=top>Solaris 2.x + <td> + <td><b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b> +<tr> <td> + <td> + <td valign=top>VMS + <td> + <td><b><tt>SYS$COMMON:[SYSFONT.XDPS.OUTLINE]</tt></b> +</table> + +<hr align=left width="25%"> + +<p> +<b>*</b> On SGI IRIX systems, you must use <b><tt>Fontmap.SGI</tt></b> in +place of <b><tt>Fontmap</tt></b> or <b><tt>Fontmap.GS</tt></b>, because +otherwise the entries in <b><tt>Fontmap</tt></b> will take precedence over +the fonts in the FONTPATH directories. + +<p> +<b>**</b> On Solaris systems simply setting <b><tt>GS_FONTPATH</tt></b> or +using <b><tt>-sFONTPATH=</tt></b> may not work, because for some reason some +versions of Ghostscript can't seem to find any of the Type1 fonts in +<b><tt>/usr/openwin/lib/X11/fonts/Type1/outline</tt></b>. (It says: "15 +files, 15 scanned, 0 new fonts". We think this problem has been fixed in +Ghostscript version 6.0, but we aren't sure because we've never been able to +reproduce it.) See <b><tt>Fontmap.Sol</tt></b> instead. Also, on Solaris +2.x it's probably not worth your while to add Sun's fonts to your font path +and Fontmap. The fonts Sun distributes on Solaris 2.x in the directories + +<blockquote><b><tt> + /usr/openwin/lib/X11/fonts/Type1<br> + /usr/openwin/lib/X11/fonts/Type1/outline +</tt></b></blockquote> + +<p> +are already represented among the ones distributed as part of Ghostscript; +and on some test files, Sun's fonts have been shown to cause incorrect +displays with Ghostscript. + +</blockquote> + +<p> +These paths may not be exactly right for your installation; if the indicated +directory doesn't contain files whose names are familiar font names like +Courier and Helvetica, you may wish to ask your system administrator where +to find these fonts. + +<p> +Adobe Acrobat comes with a set of fourteen Type 1 fonts, on Unix typically +in a directory called ...<b><tt>/Acrobat3/Fonts</tt></b>. There is no +particular reason to use these instead of the corresponding fonts in the +Ghostscript distribution (which are of just as good quality), except to save +about a megabyte of disk space, but the installation documentation explains +how to do it <a href="Install.htm#Unix_Fonts">on Unix</a> and <a +href="Install.htm#Use_platform_fonts_DOS">on DOS</a> (where you can also use +Adobe Type Manager fonts). + +<h3><a name="Temp_files"></a>Temporary files</h3> + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Where Ghostscript puts temporary files</font><hr> +<tr valign=bottom> + <th align=left>Platform + <td> + <th align=left>Filename + <td> + <th align=left>Location +<tr> <td colspan=5><hr> +<tr valign=top> <td>DOS and OpenVMS + <td> + <td><b><tt>_temp_</tt></b>XX.XXX + <td> + <td>Current directory +<tr valign=top> <td>OS/2 + <td> + <td><b><tt>gs</tt></b>XXXXXX + <td> + <td>Current directory +<tr valign=top> <td>Unix + <td> + <td><b><tt>gs_</tt></b>XXXXX + <td> + <td><b><tt>/tmp</tt></b> +</table></blockquote> + +<p> +You can change in which directory Ghostscript creates temporary files by +setting the <b><tt>TMPDIR</tt></b> or <b><tt>TEMP</tt></b> environment +variable to the name of the directory you want used. Ghostscript currently +doesn't do a very good job of deleting temporary files if it exits because +of an error; you may have to delete them manually from time to time. + +<dl> +<dt><b><tt>GS</tt></b>, <b><tt>GSC</tt></b> (MS Windows only) +<dd>Specify the names of the Ghostscript executables. <b><tt>GS</tt></b> +brings up a new typein window and possibly a graphics window; +<b><tt>GSC</tt></b> uses the DOS console. If these are not set, +<b><tt>GS</tt></b> defaults to <b><tt>gswin32</tt></b>, and +<b><tt>GSC</tt></b> defaults to <b><tt>gswin32c</tt></b>. +</dl> + +<h2><a name="Environment_variables"></a>Summary of environment variables</h2> + +<dl> +<dt><a href="#GS_DEVICE"><b><tt>GS_DEVICE</tt></b></a> +<dd>Defines the default output device. +</dl> + +<dl> +<dt><a href="#Font_lookup"><b><tt>GS_FONTPATH</tt></b></a> +<dd>Specifies a list of directories to scan for fonts if a font requested +can't be found anywhere on the search path. +</dl> + +<dl> +<dt><a href="#Finding_files"><b><tt>GS_LIB</tt></b></a> +<dd>Provides a search path for initialization files and fonts. +</dl> + +<dl> +<dt><b><tt>GS_OPTIONS</tt></b> +<dd>Defines a list of command-line arguments to be processed before the +ones actually specified on the command line. For example, setting +<b><tt>GS_DEVICE</tt></b> to XYZ is equivalent to setting +<b><tt>GS_OPTIONS</tt></b> to <b><tt>-sDEVICE=XYZ</tt></b>. The contents +of <b><tt>GS_OPTIONS</tt></b> are not limited to switches; they may include +actual file names or even <a href="#Input_control">"@file" arguments</a>. + +</dl> + +<dl> +<dt><a href="#Temp_files"><b><tt>TEMP</tt></b>, <b><tt>TMPDIR</tt></b></a> +<dd>Defines a directory name for temporary files. If both +<b><tt>TEMP</tt></b> and <b><tt>TMPDIR</tt></b> are defined, +<b><tt>TMPDIR</tt></b> takes precedence. +</dl> + +<hr> +<h2><a name="CIDFontSubstitution"></a>CID font substitution</h2> + +<p> +CID fonts are PostScript resources containing +large number of glyphs (e.g. glyphs for Far East languages). +Please refer Postscript Language Reference, +third edition, for details. + + +<p> +CID font resources are different kind of PostScript resources than fonts. +Particularly they cannot be used as regular fonts. For doing this, +CID font resourse first to be combined with a CMap resource, which +defines specific codes for hieroglyphs (this allows to use +same collection of hieroglyphs with different encodings). + +<p> +The simplest method to request a font composed of CID font resource and CMap resource +is to code +<blockquote><b><tt> +/CIDFont-CMap findfont +</tt></b></blockquote> +in a PostScript document, where <b><tt>CIDFont</tt></b> is a name of any +CID font resourse, and <b><tt>CMap</tt></b> is a name of a CMap resource, +being designed for same character collection. The interpreter will compose +the font automatically from the specified CID font and CMap resources. +Another method is based on the operator <b><tt>composefont</tt></b>. + +<p> +For substituting CID font resources Ghostscript 6.53 and 7.0x provides +the control file "CIDFnmap", which defines a CID font resource map. +please refer +<a href="CJK.htm#About_CIDFnmap">"About CIDFnmap of Ghostscript"</a> +in CJK.htm. However, "CIDFnmap" will be replaced by "cidfmap" in +Ghostscript 7.2x and later releases. + + +<h2><a name="EPS"></a>Using Ghostscript with EPS files</h2> +<p> +Encapsulated PostScript (EPS) files are intended to be encapsulated +in another PostScript document and may not display or print on their +own. An EPS file must conform to the Document Structuring Conventions, +must include a <b><tt>%%BoundingBox:</tt></b> line to indicate the +rectangle in which it will draw, must not use PostScript commands +which will interfere with the document importing the EPS, +and can have either zero pages or one page. +Ghostscript has support for handling EPS files, but requires +that the <b><tt>%%BoundingBox:</tt></b> be in the header, +not the trailer. +</p> +<p> +For the official description of the EPS file format, please +refer to the Adobe documentation in their tech note #5002. It +is available from: +<a href="http://partners.adobe.com/asn/developer/technotes/postscript.html" +class="offsite"> +http://partners.adobe.com/asn/developer/technotes/postscript.html</a> +</p> +<p> +To crop an EPS file to the bounding box: +<blockquote> +<b><tt> + gs -dEPSCrop file.eps +</tt></b> +</blockquote> +</p> +<p> +To resize an EPS file to fit the page: +<blockquote> +<b><tt> + gs -dEPSFitPage file.eps +</tt></b> +</blockquote> +</p> +<p> +To disable special processing of EPS files: +<blockquote> +<b><tt> + gs -dNOEPS file.eps +</tt></b> +</blockquote> +</p> + +<h2><a name="PDF"></a>Using Ghostscript with PDF files</h2> + +<p> +Ghostscript is normally built (except on 16-bit DOS platforms) to interpret +both PostScript and PDF files, examining each file to determine +automatically whether its contents are PDF or PostScript. All the normal +switches and procedures for interpreting PostScript files also apply to PDF +files, with a few exceptions. In addition, the +<b><tt>pdf2ps</tt></b> utility uses Ghostscript to convert +PDF to (Level 2) PostScript. + +<h3><a name="PDF_stdin"></a>PDF files from standard input</h3> + +<p> +The PDF language, unlike the PostScript language, inherently requires +random access to the file. +If you provide PDF to standard input using the +<a href="#Pipe_input">"<b><tt>-</tt></b>" or "<b><tt>-_</tt></b>" +switch</a>, +ghostscript will copy it to a temporary file before interpreting the PDF. + +<h3><a name="PDF_switches"></a>Switches for PDF files</h3> + +<dl> +<dt><b><tt>-dFirstPage=</tt></b><em>pagenumber</em> +<dd>Begins interpreting on the designated page of the document. +</dl> + +<dl> +<dt><b><tt>-dLastPage=</tt></b><em>pagenumber</em> +<dd>Stops interpreting after the designated page of the document. +</dl> + +<dl> +<dt><b><tt>-dPrinted</tt></b> +<dt><b><tt>-dPrinted=false</tt></b> +<dd>Determines whether the file should be displayed or printed using the +"screen" or "printer" options for annotations and images. With +<b><tt>-dPrinted</tt></b>, the output will use the file's "print" +options; with <b><tt>-dPrinted=false</tt></b>, the output will use the +file's "screen" options. If neither of these is specified, the output will +use the screen options for any output device that doesn't have an +<b><tt>OutputFile</tt></b> parameter, and the printer options for +devices that do have this parameter. +</dl> + +<dl> +<dt><b><tt>-dUseCropBox</tt></b> +<dd>Sets the page size to the CropBox rather than the MediaBox. +Some files have a CropBox that is smaller than the MediaBox and +may include white space, registration or cutting marks outside +the CropBox. Using this option will set the page size +appropriately for a viewer. +</dl> + +<dl> +<dt><b><tt>-sPDFPassword=</tt></b><em>password</em> +<dd>Sets the user or owner password to be used in decoding encrypted +PDF files. +</dl> + +<h3><a name="PDF_problems"></a>Problems interpreting a PDF file</h3> + +<p> +Occasionally you may try to read or print a <b><tt>*.pdf</tt></b> file that +Ghostscript doesn't recognize as PDF, even though the same file +<b><em>can</em></b> be opened and interpreted by an Adobe Acrobat viewer. +This can happen when, for instance, a PDF file produced on a Macintosh is +carelessly moved to another kind of system, leaving now-useless +Macintosh-specific data before the standard header. Ghostscript can't read +these files because they don't conform to the PDF standard, Adobe's <a +href="http://partners.adobe.com/asn/developer/acrosdk/docs/PDFRef.pdf" +class="offsite"><cite>Portable +Document Format Reference Manual</cite></a>, version 1.2, which states: + +<blockquote> +The first line of a PDF file specifies the version number of the PDF +specification to which the file adheres.... [T]he first line of a +1.2-conforming PDF file should be <b><tt>%PDF-1.2</tt></b>. +</blockquote> + +<p> +However, in an appendix the manual also says that Adobe + +<blockquote> +Acrobat viewers are very liberal in their check for a valid PDF header. +All viewers allow the header to appear anywhere in the first 1,000 bytes of +the file. +</blockquote> + +<p> +Ghostscript doesn't do this: it expects PDF files to conform to the +standard, because that's how it recognizes them among other formats it +handles, unlike Acrobat viewers which need deal only with PDF and can +therefore afford to be more liberal with PDF. So if you encounter a file +with useless characters before the header and you want to use it with +Ghostscript, you can fix it by stripping the extra characters from before +the standard header. The file should begin with exactly the characters + +<blockquote><b><tt> +%PDF +</tt></b></blockquote> + +<p> +PDF files are binary, not text, so be careful to edit the file as a binary, +not as text. On Unix, after determining the length of the useless prefix +string, which you can do with <b><tt>od</tt></b>, you can use +<b><tt>tail</tt></b> to strip them off. For instance: + +<blockquote> +<b><tt>od -c Macintosh.pdf | more</tt></b> ;# <em>shows that <b><tt>%PDF</tt></b> occurs after 128 characters</em><br> +<b><tt>tail +128c Macintosh.pdf >Legal.pdf</tt></b> +</blockquote> + +<p> +On PCs and other systems you can use the <b><tt>hexl</tt></b> program +distributed with GNU emacs to convert the PDF file to editable text form. +After editing, <b><tt>hexl</tt></b> can convert the text form back to +binary. + +<hr> + +<h2><a name="Platforms"></a>Notes on specific platforms</h2> + +<h3><a name="Unix"></a>Unix</h3> + +<p> +The Ghostscript distribution includes some Unix shell scripts to use with +Ghostscript in different environments. These are all user-contributed +code, so if you have questions, please contact the user identified in the +file, not Aladdin Enterprises or artofcode LLC. + +<dl> +<dt><b><tt>pv.sh</tt></b> +<dd>Preview a specified page of a <b><tt>dvi</tt></b> file in an X window +</dl> + +<dl> +<dt><b><tt>sysvlp.sh</tt></b> +<dd>System V 3.2 lp interface for parallel printer +</dl> + +<dl> +<dt><b><tt>pj-gs.sh</tt></b> +<dd>Printing on an H-P PaintJet under HP-UX +</dl> + +<dl> +<dt><b><tt>unix-lpr.sh</tt></b> +<dd>Queue filter for <b><tt>lpr</tt></b> under Unix; +<a href="Unix-lpr.htm">its documentation</a> is intended for system +administrators +</dl> + +<dl> +<dt><b><tt>lprsetup.sh</tt></b> +<dd>Setup for <b><tt>unix-lpr.sh</tt></b> +</dl> + +<hr> + +<h3><a name="VMS"></a>VMS</h3> + +<ul> +<li>To be able to specify switches and file names when invoking the +interpreter, define <b><tt>gs</tt></b> as a foreign command: + +<blockquote> +<b><tt>$ gs == "$</tt></b><em>disk</em><b><tt>:[</tt></b><em>directory</em><b><tt>]gs.exe</tt></b>" +</blockquote> + +<p> +where the "<em>disk</em>" and "<em>directory</em>" specify where +the Ghostscript executable is located. For instance, + +<blockquote><b><tt> +$ gs == "$dua1:[ghostscript]gs.exe" +</tt></b></blockquote> + +<li>On VMS systems, the last character of each "directory" name indicates +what sort of entity the "directory" refers to. If the "directory" name +ends with a colon "<b><tt>:</tt></b>", it is taken to refer to a logical +device, for instance + +<blockquote><b><tt> +$ define ghostscript_device dua1:[ghostscript_510]<br> +$ define gs_lib ghostscript_device: +</tt></b></blockquote> + +<p> +If the "directory" name ends with a closing square bracket +"<b><tt>]</tt></b>", it is taken to refer to a real directory, for instance + +<blockquote><b><tt> +$ define gs_lib dua1:[ghostscript] +</tt></b></blockquote> + +<li>Defining the logical <b><tt>GS_LIB</tt></b> + +<blockquote> +<b><tt>$ define gs_lib</tt></b> <em>disk</em><b><tt>:[</tt></b><em>directory</em><b><tt>]</tt></b> +</blockquote> + +<p> +allows Ghostscript to find its initialization files in the Ghostscript +directory even if that's not where the executable resides.<br> + +<li>Although VMS DCL itself converts unquoted parameters to upper case, C +programs such as Ghostscript receive their parameters through the C runtime +library, which forces all unquoted command-line parameters to lower case. +That is, with the command + +<blockquote><b><tt> +$ gs -Isys$login: +</tt></b></blockquote> + +<p> +Ghostscript sees the switch as <b><tt>-isys$login</tt></b>, +which doesn't work. To preserve the case of switches, quote them like +this: + +<blockquote><b><tt> +$ gs "-Isys$login:" +</tt></b></blockquote> + +<li>If you write printer output to a file with +<b><tt>-sOutputFile=</tt></b> and then want to print the file later, use +"<b><tt>PRINT/PASSALL</tt></b>". +</ul> + +<ul> +<li>PDF files (or PostScript files that use the +<b><tt>setfileposition</tt></b> operator) must be "stream LF" type files to +work properly on VMS systems. (<b><em>Note:</em></b> This definitely matters +if Ghostscript was compiled with DEC C; we are not sure of the situation if +you use <b><tt>gcc</tt></b>.) Because of this, if you transfer files by +FTP, you probably need to do one of these two things after the transfer: + +<ol> +<li>If the FTP transfer was in text (ASCII) mode: + +<blockquote> +<b><tt>$ convert/fdl=streamlf.fdl</tt></b> input-file output-file +</blockquote> + +<p> +where the contents of the file <b><tt>STREAMLF.FDL</tt></b> are + +<blockquote> +<pre>FILE + ORGANIZATION sequential + +RECORD + BLOCK_SPAN yes + CARRIAGE_CONTROL carriage_return + FORMAT stream_lf +</pre></blockquote> + +<li>If the FTP transfer was in binary mode: + +<blockquote><b><tt> + $ set file/attribute=(rfm:stmlf) +</tt></b></blockquote> +</ol> +</ul> + +<h4><a name="VMS_X_Windows"></a>Using X Windows on VMS</h4> + +<p> +If you are using on an X Windows display, you can set it up with the node +name and network transport, for instance + +<blockquote><b><tt> + $ set display/create/node="doof.city.com"/transport=tcpip +</tt></b></blockquote> + +<p> +and then run Ghostscript by typing <b><tt>gs</tt></b> at the command line. + +<hr> + +<h3><a name="MS_Windows"></a>MS Windows</h3> + +<p> +You must add <em>gs\</em><b><tt>bin</tt></b> and +<em>gs\</em><b><tt>lib</tt></b> to the <b><tt>PATH</tt></b>, where +<em>gs</em> is the top-level Ghostscript directory. + +<p> +When passing options to ghostcript through a batch file wrapper such as +<tt>ps2pdf.bat</tt> you need to substitute '#' for '=' as the separator +between options and their arguments. For example: +<blockquote><pre> +ps2pdf -sPAPERSIZE#a4 file.ps file.pdf +</pre></blockquote> + +Ghostscript treats '#' the same internally, and the '=' is mangled by +the command shell. + +<hr> + +<h3><a name="MS-DOS"></a>MS-DOS</h3> + +<p> +<strong>Note:</strong> Ghostscript is no longer supported on MS-DOS. This +documentation is included for historical interest only. + +<p> +You must add <em>gs\</em><b><tt>bin</tt></b> and +<em>gs\</em><b><tt>lib</tt></b> to the <b><tt>PATH</tt></b>, where +<em>gs</em> is the top-level Ghostscript directory. + +<ul> +<li> +Ghostscript supports many SuperVGA displays directly, most of them with +more than 16 colors. The complete list is in the file +<b><tt>devs.mak</tt></b>, part of Ghostscript's +<a href="#Source_code">source code</a>. + +<li> +Some applications, such as Microsoft Word, require a prologue in front of +the PostScript files they produce. In the case of MS Word, this prologue +is one of the *.ini files Microsoft includes with Word. Other applications +may require other prologues. You may specify a prologue on the Ghostscript +command line, for instance + +<blockquote><b><tt> + gs386 prologue.ini myfile.ps +</tt></b></blockquote> + +<li> +If you have a SuperVGA display that supports a 16-color mode with 800x600 +pixels and you know the display mode number for this mode, you can select +it by using the command line switches + +<blockquote> +<b><tt>-sDEVICE=svga16 -dDisplayMode=</tt></b><em>NNN</em> +</blockquote> + +<p> +where <em>NNN</em> is the display mode number in decimal. Here are modes +for some popular display chipsets; the ones that use the default value are +marked "*". If your card's chipset doesn't appear on this list, or if you +try the value here and it doesn't work, please send the name of the chipset +and its correct display mode to <<a href="mailto:bug-gs@aladdin.com">bug-gs@aladdin.com</a>> to include in +future releases. + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=6 bgcolor="#CCCC00"><hr><font size="+1">Display modes for PC display chipsets</font><hr> +<tr> <td> + <th>Chipset + <td> + <th>Decimal + <td> + <th>Hex +<tr> <td colspan=6><hr> +<tr> <td> + <td>Acumos AVGA2, AVGA3 + <td> + <td align=center>88 + <td> + <td align=right><tt>0x58</tt> +<tr> <td> + <td>Advance Logic AL2101 + <td> + <td align=center>43 + <td> + <td align=right><tt>0x2B</tt> +<tr> <td> + <td>Ahead V5000 + <td> + <td align=center>113 + <td> + <td align=right><tt>0x71</tt> +<tr> <td> + <td>ATI VGAWONDER, Graphics Ultra etc. + <td> + <td align=center>84 + <td> + <td align=right><tt>0x54</tt> +<tr> <td> + <td>Chips and Technologies + <td> + <td align=center>106 + <td> + <td align=right><tt>0x6A</tt> +<tr> <td> + <td>Cirrus Logic CL-GD 500/600 + <td> + <td align=center>100 + <td> + <td align=right><tt>0x64</tt> +<tr> <td> + <td>Cirrus Logic GD 5422 + <td> + <td align=center>88 + <td> + <td align=right><tt>0x58</tt> +<tr> <td> + <td>Compaq VGA + <td> + <td align=center>89 + <td> + <td align=right><tt>0x59</tt> +<tr> <td> + <td>CTI + <td> + <td align=center>106 + <td> + <td align=right><tt>0x6A</tt> +<tr> <td>* + <td>Genoa 5xxx, Sigma VGA + <td> + <td align=center>41 + <td> + <td align=right><tt>0x29</tt> +<tr> <td> + <td>Genoa 6xxx + <td> + <td align=center>106 + <td> + <td align=right><tt>0x6A</tt> +<tr> <td> + <td>MXIC MX 68010 + <td> + <td align=center>85 + <td> + <td align=right><tt>0x55</tt> +<tr> <td> + <td>NCR 77C22 + <td> + <td align=center>88 + <td> + <td align=right><tt>0x58</tt> +<tr> <td> + <td>OAK Technologies OTI-067, OTI-077, OTI037C + <td> + <td align=center>82 + <td> + <td align=right><tt>0x52</tt> +<tr> <td> + <td>OAK Technologies OTI037C w/ NEL BIOS + <td> + <td align=center>91 + <td> + <td align=right><tt>0x5B</tt> +<tr> <td>* + <td>Orchid Prodesigner + <td> + <td align=center>41 + <td> + <td align=right><tt>0x29</tt> +<tr> <td> + <td>Paradise + <td> + <td align=center>88 + <td> + <td align=right><tt>0x58</tt> +<tr> <td> + <td>Poach + <td> + <td align=center>106 + <td> + <td align=right><tt>0x6A</tt> +<tr> <td> + <td>Primus + <td> + <td align=center>42 + <td> + <td align=right><tt>0x2A</tt> +<tr> <td> + <td>Realtek RT 3106 + <td> + <td align=center>31 + <td> + <td align=right><tt>0x1F</tt> +<tr> <td> + <td>Tecmar + <td> + <td align=center>22 + <td> + <td align=right><tt>0x16</tt> +<tr> <td> + <td>Trident 8900 + <td> + <td align=center>91 + <td> + <td align=right><tt>0x5B</tt> +<tr> <td>* + <td>Tseng ET-3000, ET-4000 + <td> + <td align=center>41 + <td> + <td align=right><tt>0x29</tt> +<tr> <td>* + <td>VEGA + <td> + <td align=center>41 + <td> + <td align=right><tt>0x29</tt> +<tr> <td> + <td>Video 7 SVGA + <td> + <td align=center>98 + <td> + <td align=right><tt>0x62</tt> +<tr> <td> + <td>WD90C11 + <td> + <td align=center>92 + <td> + <td align=right><tt>0x5C</tt> +<tr> <td> + <td>Western Digital + <td> + <td align=center>88 + <td> + <td align=right><tt>0x58</tt> +</table></blockquote> +</ul> + +<p> +Note that when passing arguments to batch files (as above) and also with the +DOS executable <b><tt>gs386.exe</tt></b> build with the Watcom C/C++ compiler, +you must use '<b><tt>#</tt></b>' rather than '<b><tt>=</tt></b>' between a +command line switch and its argument, because of a strange design decision +in the Wacom run-time library. + + +<hr> + +<h3><a name="X_Windows"></a>X Windows</h3> + +<p> +Ghostscript looks for the following resources under the program name +<b><tt>ghostscript</tt></b> and class name +<b><tt>Ghostscript</tt></b>; the ones marked "**" are +calculated from display metrics: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">X Windows resources</font><hr> +<tr> <th align=left>Name + <td> + <th align=left>Class + <td> + <th align=left>Default +<tr> <td colspan=5><hr> +<tr> <td><b><tt>background</tt></b> + <td> + <td><b><tt>Background</tt></b> + <td> + <td><b><tt>white</tt></b> +<tr> <td><b><tt>foreground</tt></b> + <td> + <td><b><tt>Foreground</tt></b> + <td> + <td><b><tt>black</tt></b> +<tr> <td><b><tt>borderColor</tt></b> + <td> + <td><b><tt>BorderColor</tt></b> + <td> + <td><b><tt>black</tt></b> +<tr> <td><b><tt>borderWidth</tt></b> + <td> + <td><b><tt>BorderWidth</tt></b> + <td> + <td><b><tt>1</tt></b> +<tr> <td><b><tt>geometry</tt></b> + <td> + <td><b><tt>Geometry</tt></b> + <td> + <td><b><tt>NULL</tt></b> +<tr> <td><b><tt>xResolution</tt></b> + <td> + <td><b><tt>Resolution</tt></b> + <td> + <td>** +<tr> <td><b><tt>yResolution</tt></b> + <td> + <td><b><tt>Resolution</tt></b> + <td> + <td>** +<tr> <td><b><tt>useExternalFonts</tt></b> + <td> + <td><b><tt>UseExternalFonts</tt></b> + <td> + <td><b><tt>true</tt></b> +<tr> <td><b><tt>useScalableFonts</tt></b> + <td> + <td><b><tt>UseScalableFonts</tt></b> + <td> + <td><b><tt>true</tt></b> +<tr> <td><b><tt>logExternalFonts</tt></b> + <td> + <td><b><tt>LogExternalFonts</tt></b> + <td> + <td><b><tt>false</tt></b> +<tr> <td><b><tt>externalFontTolerance</tt></b> + <td> + <td><b><tt>ExternalFontTolerance</tt></b> + <td> + <td><b><tt>10.0</tt></b> +<tr> <td><b><tt>palette</tt></b> + <td> + <td><b><tt>Palette</tt></b> + <td> + <td><b><tt>Color</tt></b> +<tr> <td><b><tt>maxGrayRamp</tt></b> + <td> + <td><b><tt>MaxGrayRamp</tt></b> + <td> + <td><b><tt>128</tt></b> +<tr> <td><b><tt>maxRGBRamp</tt></b> + <td> + <td><b><tt>MaxRGBRamp</tt></b> + <td> + <td><b><tt>5</tt></b> +<tr> <td><b><tt>maxDynamicColors</tt></b> + <td> + <td><b><tt>MaxDynamicColors</tt></b> + <td> + <td><b><tt>256</tt></b> +<tr> <td><b><tt>useBackingPixmap</tt></b> + <td> + <td><b><tt>UseBackingPixmap</tt></b> + <td> + <td><b><tt>true</tt></b> +<tr> <td><b><tt>useXPutImage</tt></b> + <td> + <td><b><tt>UseXPutImage</tt></b> + <td> + <td><b><tt>true</tt></b> +<tr> <td><b><tt>useXSetTile</tt></b> + <td> + <td><b><tt>UseXSetTile</tt></b> + <td> + <td><b><tt>true</tt></b> +<tr> <td><b><tt>regularFonts</tt></b> + <td> + <td><b><tt>RegularFonts</tt></b> + <td> + <td>See "<a href="#X_fonts">X fonts</a>" +<tr> <td><b><tt>symbolFonts</tt></b> + <td> + <td><b><tt>SymbolFonts</tt></b> + <td> + <td>See "<a href="#X_fonts">X fonts</a>" +<tr> <td><b><tt>dingbatFonts</tt></b> + <td> + <td><b><tt>DingbatFonts</tt></b> + <td> + <td>See "<a href="#X_fonts">X fonts</a>" +</table></blockquote> + +<h4><a name="X_resources"></a>X resources</h4> + +<ul> +<li> +To set X resources, put them in a file (such as +<b><tt>~/.Xdefaults</tt></b> on Unix) in a form like this: + +<blockquote><table cellpadding=0 cellspacing=0> +<tr><td><b><tt>Ghostscript*geometry:</tt></b><td><b><tt> </tt></b><td><b><tt>595x842-0+0</tt></b> +<tr><td><b><tt>Ghostscript*xResolution:</tt></b><td><b><tt> </tt></b><td><b><tt>72</tt></b> +<tr><td><b><tt>Ghostscript*yResolution:</tt></b><td><b><tt> </tt></b><td><b><tt>72</tt></b> +</table></blockquote> + +<p> +Then merge these resources into the X server's resource database: + +<blockquote><b><tt> + xrdb -merge ~/.Xdefaults +</tt></b></blockquote> + +<li> +Ghostscript doesn't look at the default system background and foreground +colors; if you want to change the background or foreground color, you must +set them explicitly for Ghostscript. This is a deliberate choice, so that +PostScript documents will display correctly by default -- with white as +white and black as black -- even if text windows use other colors. + +<li> +The <b><tt>geometry</tt></b> resource affects only window placement. + +<li> +Resolution is expressed in pixels per inch (1 inch = 25.4mm). + +<li> +The font tolerance gives the largest acceptable difference in height of the +screen font, expressed as a percentage of the height of the desired font. + +<li> +The <b><tt>palette</tt></b> resource can be used to restrict Ghostscript to +using a grayscale or monochrome palette. + +<li> +<b><tt>maxRGBRamp</tt></b> and +<b><tt>maxGrayRamp</tt></b> control the maximum number of +colors that ghostscript allocates ahead of time for the dither cube (ramp). +Ghostscript never preallocates more than half the cells in a colormap. +<b><tt>maxDynamicColors</tt></b> controls the maximum +number of colors that Ghostscript will allocate dynamically in the +colormap. +</ul> + +<h4><a name="X_server_bugs"></a>Working around bugs in X servers</h4> + +<p> +The "<b><tt>use</tt></b>..." resources exist primarily to work around bugs +in X servers. + +<ul> +<li> Old versions of DEC's X server (DECwindows) have bugs that + require setting <b><tt>useXPutImage</tt></b> or + <b><tt>useXSetTile</tt></b> to + <b><tt>false</tt></b>. + +<li> Some servers do not implement backing pixmaps properly, or do not + have enough memory for them. If you get strange behavior or "out + of memory" messages, try setting + <b><tt>useBackingPixmap</tt></b> to + <b><tt>false</tt></b>. + +<li> Some servers do not implement tiling properly. This appears + as broad bands of color where dither patterns should appear. If + this happens, try setting + <b><tt>useXSetTile</tt></b> to + <b><tt>false</tt></b>. + +<li> Some servers do not implement bitmap or pixmap displaying properly. + This may appear as white or black rectangles where characters + should appear; or characters may appear in "inverse video" (for + instance, white on a black rectangle rather than black on white). + If this happens, try setting + <b><tt>useXPutImage</tt></b> to + <b><tt>false</tt></b>. +</ul> + +<h4><a name="X_fonts"></a>X fonts</h4> + +<p> +To use native X11 fonts, Ghostscript must map PostScript font names to the +XLFD font names. The resources <b><tt>regularFonts</tt></b> +(fonts available in standard or ISO-Latin-1 encoding), +<b><tt>symbolFonts</tt></b> (using Symbol encoding), and +<b><tt>dingbatFonts</tt></b> (using Dingbat encoding) give +the name mapping for different encodings. The XLFD font name in the +mapping must contain 7 dashes; the X driver adds the additional size and +encoding fields to bring the total number of dashes in the font name to 14. +See the appendix "<a href="#X_font_mappings">X default font mappings</a>" +for the full list of default mappings. + +<p> +Users who switch regularly between different X servers may wish to use the +"*" wild card in place of the foundry name +(<b><tt>itc</tt></b>, +<b><tt>monotype</tt></b>, +<b><tt>linotype</tt></b>, +<b><tt>b&h</tt></b>, or +<b><tt>adobe</tt></b>); users who do not switch X servers +should leave the explicit foundry in the name, since it speeds up access to +fonts. + +<p> +Ghostscript takes advantage of the "HP XLFD Enhancements," if available, to +use native X11 fonts for fonts that are anamorphically scaled, rotated, or +mirrored. If the changes have been installed to the X or font server, they +are automatically used when appropriate. + +<h4><a name="GS_fonts_as_X_fonts"></a>Using Ghostscript fonts on X displays</h4> + +<p> +Font files distributed with Ghostscript can be used on X Windows displays. +You can find full instructions in the +<a href="Fonts.htm#Use_gs_fonts_with_X">documentation on fonts</a>. + +<h4><a name="X_device_parameters"></a>X device parameters</h4> + +<p> +In addition to the device parameters recognized by <a +href="Language.htm#Device_parameters">all devices</a>, Ghostscript's X +driver provides parameters to adjust its performance. Users will rarely +need to modify these. Note that these are parameters to be set with the +<b><tt>-d</tt></b> switch in the command line (e.g., +<b><tt>-dMaxBitmap=10000000</tt></b>), not resources to be defined in the +<b><tt>~/.Xdefaults</tt></b> file. + +<dl> +<dt><b><tt>AlwaysUpdate <boolean></tt></b> +<dd>If <b><tt>true</tt></b>, the driver updates the screen after each +primitive drawing operation; if <b><tt>false</tt></b> (the default), the +driver uses an intelligent buffered updating algorithm. +</dl> + +<dl> +<dt><b><tt>MaxBitmap <integer></tt></b> +<dd>If the amount of memory required to hold the pixmap for the window is no +more than the value of <b><tt>MaxBitmap</tt></b>, the driver will draw to a +pixmap in Ghostscript's address space (called a "client-side pixmap") and +will copy it to the screen from time to time; if the amount of memory +required for the pixmap exceeds the value of <b><tt>MaxBitmap</tt></b>, the +driver will draw to a server pixmap. Using a client-side pixmap usually +provides better performance -- for bitmap images, possibly much better +performance -- but since it may require quite a lot of RAM (e.g., about 2.2 +Mb for a 24-bit 1024x768 window), the default value of +<b><tt>MaxBitmap</tt></b> is 0. +</dl> + +<dl> +<dt><b><tt>MaxTempPixmap, MaxTempImage, MaxBufferedTotal, MaxBufferedArea, +MaxBufferedCount <integer></tt></b> +<dd>These control various aspects of the driver's buffering behavior. For +details, please consult the source file <b><tt>gdevx.h</tt></b>. +</dl> + +<hr> + +<h3><a name="SCO_Unix"></a>SCO Unix</h3> + +<p> +Because of bugs in the SCO Unix kernel, Ghostscript will not work if you +select direct screen output and also allow it to write messages on the +console. If you are using direct screen output, redirect Ghostscript's +terminal output to a file. + +<hr> + +<h2><a name="Switches"></a>Switches</h2> + +<p> +Unless otherwise noted, these switches can be used on all platforms. + +<h3><a name="General_switches"></a>General switches</h3> + +<h4><a name="Input_control"></a>Input control</h4> + +<dl> +<dt><b><tt>@</tt></b><em>filename</em> +<dd>Causes Ghostscript to read <em>filename</em> and treat its contents the +same as the command line. (This is intended primarily for getting around +DOS's 128-character limit on the length of a command line.) Switches or +file names in the file may be separated by any amount of white space +(space, tab, line break); there is no limit on the size of the file. +</dl> + +<dl> +<dt><b><tt>--</tt></b> <em>filename arg1 ...</em> +<br><b><tt>-+</tt></b> <em>filename arg1 ...</em> +<dd>Takes the next argument as a file name as usual, but takes all +remaining arguments (even if they have the syntactic form of switches) and +defines the name <b><tt>ARGUMENTS</tt></b> in userdict (not systemdict) as +an array of those strings, <em>before</em> running the file. When +Ghostscript finishes executing the file, it exits back to the shell. +</dl> + +<dl> +<dt><b><tt>-@</tt></b> <em>filename arg1 ...</em> +<dd>Does the same thing as <b><tt>--</tt></b> and <b><tt>-+</tt></b>, but +expands <b><tt>@</tt></b><em>filename</em> arguments. +</dl> + +<dl> +<dt><b><tt>-</tt></b> +<br><b><tt>-_</tt></b> +<dd>These are not really switches: they tell Ghostscript to read from +standard input, which is coming from a file or a pipe, +with or without buffering. +See <a href="#Pipe_input">"Input from a pipe"</a> above. +</dl> + +<dl> +<dt><b><tt>-c</tt></b> <em>tokens ...</em> +<dd>Interprets arguments as PostScript code up to the next argument that +begins with "<b><tt>-</tt></b>" followed by a non-digit, or with +"<b><tt>@</tt></b>". For example, if the file <b><tt>quit.ps</tt></b> +contains just the word "<b><tt>quit</tt></b>", then +<b><tt>-c quit</tt></b> on the command line is equivalent to +<b><tt>quit.ps</tt></b> there. Each argument must be exactly one token, as +defined by the <b><tt>token</tt></b> operator. +</dl> + +<dl> +<dt><b><tt>-f</tt></b> +<dd>Interprets following non-switch arguments as file names to be executed +using the normal <b><tt>run</tt></b> command. Since this is the default +behavior, <b><tt>-f</tt></b> is useful only for terminating the list of +tokens for the <b><tt>-c</tt></b> switch. +</dl> + +<dl> +<dt><b><tt>-f</tt></b><em>filename</em> +<dd>Execute the given file, even if its name begins with a +"<b><tt>-</tt></b>" or "<b><tt>@</tt></b>". +</dl> + +<h4><a name="File_searching"></a>File searching</h4> + +<p> +Note that by "library files" here we mean all the files identified using +the search rule under "<a href="#Finding_files">How Ghostscript finds +files</a>" above: Ghostscript's own initialization files, fonts, and files +named on the command line. + +<dl> +<dt><a name="I_switch"></a><b><tt>-I</tt></b><em>directories</em> +<dd>Adds the designated list of directories at the head of the search path +for library files. +</dl> + +<dl> +<dt><a name="P_switch"></a><b><tt>-P</tt></b> +<dd>Makes Ghostscript look first in the current directory for library +files. This is currently the default. +</dl> + +<dl> +<dt><a name="P-_switch"></a><b><tt>-P-</tt></b> +<dd>Makes Ghostscript <b><em>not</em></b> look first in the current +directory for library files (unless, of course, the first explicitly +supplied directory is "<b><tt>.</tt></b>"). +</dl> + +<h4><a name="Parameters"></a>Setting parameters</h4> + +<dl> +<dt><b><tt>-D</tt></b><em>name</em> +<br><b><tt>-d</tt></b><em>name</em> +<dd>Define a name in systemdict with value=true. +</dl> + +<dl> +<dt><b><tt>-D</tt></b><em>name</em><b><tt>=</tt></b><em>token</em> +<br><b><tt>-d</tt></b><em>name</em><b><tt>=</tt></b><em>token</em> +<dd>Define a name in systemdict with the given definition. The token must +be exactly one token (as defined by the <b><tt>token</tt></b> operator) and +must not contain any whitespace. If the token is a non-literal name, it +must be true, false, or null. +</dl> + +<dl> +<dt><b><tt>-S</tt></b><em>name</em><b><tt>=</tt></b><em>string</em> +<br><b><tt>-s</tt></b><em>name</em><b><tt>=</tt></b><em>string</em> +<dd>Define a name in systemdict with a given string as value. This is +different from <b><tt>-d</tt></b>. For example, <b><tt>-dXYZ=35</tt></b> +on the command line is equivalent to the program fragment + +<blockquote><b><tt> +/XYZ 35 def +</tt></b></blockquote> + +<p> +whereas <b><tt>-sXYZ=35</tt></b> is equivalent to + +<blockquote><b><tt> +/XYZ (35) def +</tt></b></blockquote> +</dl> + +<dl> +<dt><b><tt>-u</tt></b><em>name</em> +<dd>Un-define a name, cancelling <b><tt>-d</tt></b> or <b><tt>-s</tt></b>. +</dl> + +<p> +Note that the initialization file <b><tt>gs_init.ps</tt></b> makes +<b><tt>systemdict</tt></b> read-only, so the values of names defined with +<b><tt>-D</tt></b>, <b><tt>-d</tt></b>, <b><tt>-S</tt></b>, and +<b><tt>-s</tt></b> cannot be changed -- although, of course, they can be +superseded by definitions in <b><tt>userdict</tt></b> or other dictionaries. +However, device parameters set this way (<b><tt>PageSize</tt></b>, +<b><tt>Margins</tt></b>, etc.) are <em>not</em> read-only, and <em>can</em> +be changed by code in PostScript files. + +<dl> +<dt><b><tt>-g</tt></b><em>number1</em><b><tt>x</tt></b><em>number2</em> +<dd>Equivalent to <b><tt>-dDEVICEWIDTH=</tt></b><em>number1</em> and +<b><tt>-dDEVICEHEIGHT=</tt></b><em>number2</em>, specifying the device +width and height in pixels for the benefit of devices such as X11 windows +and VESA displays that require (or allow) you to specify width and height. +Note that this causes documents of other sizes to be clipped, not scaled: +see <b><tt>-dFIXEDMEDIA</tt></b> below. +</dl> + +<dl> +<dt><a name="Resolution_switch"></a><b><tt>-r</tt></b><em>number</em> (same +as <b><tt>-r</tt></b><em>number</em><b><tt>x</tt></b><em>number</em>) +<br><b><tt>-r</tt></b><em>number1</em><b><tt>x</tt></b><em>number2</em> +<dd>Equivalent to <b><tt>-dDEVICEXRESOLUTION=</tt></b><em>number1</em> and +<b><tt>-dDEVICEYRESOLUTION=</tt></b><em>number2</em>, specifying the device +horizontal and vertical resolution in pixels per inch for the benefit of +devices such as printers that support multiple X and Y resolutions. +</dl> + +<h4><a name="Quiet"></a>Suppress messages</h4> + +<dl> +<dt><a name="Quiet"></a><b><tt>-q</tt></b> +<dd>Quiet startup: suppress normal startup messages, and also do the +equivalent of <a href="#dQUIET"><b><tt>-dQUIET</tt></b></a>. +</dl> + +<h3><a name="Parameter_switches"></a>Parameter switches (<b><tt>-d</tt></b> and <b><tt>-s</tt></b>)</h3> + +<p> +As noted above, <b><tt>-d</tt></b> and <b><tt>-s</tt></b> define initial +values for PostScript names. Some of these names are parameters that +control the interpreter or the graphics engine. You can also use +<b><tt>-d</tt></b> or <b><tt>-s</tt></b> to define a value for any device +parameter of the initial device (the one defined with +<b><tt>-sDEVICE=</tt></b>, or the default device if this switch is not +used). For example, since the <b><tt>ppmraw</tt></b> device has a numeric +<b><tt>GrayValues</tt></b> parameter that controls the number of bits per +component, <b><tt>-sDEVICE=ppmraw -dGrayValues=16</tt></b> will make this +the default device and set the number of bits per component to 4 (log2(16)). + +<h4><a name="Rendering_parameters"></a>Rendering parameters</h4> + +<dl> +<dt><b><tt>-dCOLORSCREEN +<br>-dCOLORSCREEN=0 +<br>-dCOLORSCREEN=false</tt></b> +<dd>On high-resolution devices (at least 150 dpi resolution, or +<b><tt>-dDITHERPPI</tt></b> specified), <b><tt>-dCOLORSCREEN</tt></b> +forces the use of separate halftone screens with different angles for CMYK +or RGB if halftones are needed (this produces the best-quality output); +<b><tt>-dCOLORSCREEN=0</tt></b> uses separate screens with the same +frequency and angle; <b><tt>-dCOLORSCREEN=false</tt></b> forces the use of +a single binary screen. The default if <b><tt>COLORSCREEN</tt></b> is not +specified is to use separate screens with different angles if the device +has fewer than 5 bits per color, and a single binary screen (which is never +actually used under normal circumstances) on all other devices. +</dl> + +<dl> +<dt><b><tt>-dDITHERPPI=</tt></b><em>lpi</em> +<dd>Forces all devices to be considered high-resolution, and forces use of +a halftone screen or screens with <em>lpi</em> lines per inch, disregarding +the actual device resolution. Reasonable values for <em>lpi</em> are +<b><em>N</em></b>/5 to <b><em>N</em></b>/20, where <b><em>N</em></b> is the +resolution in dots per inch. +</dl> + +<dl> +<dt><b><tt>-dDOINTERPOLATE</tt></b> +<dd>Turns on image interpolation for all images, improving image quality for +scaled images at the expense of speed. Note that +<b><tt>-dNOINTERPOLATE</tt></b> overrides <b><tt>-dDOINTERPOLATE</tt></b> if +both are specified. +</dl> + +<dl> +<dt><b><tt>-dNOCIE</tt></b> +<dd>Substitutes <b><tt>DeviceGray</tt></b> and <b><tt>DeviceRGB</tt></b> +for CIEBasedA and CIEBasedABC color spaces respectively. Useful only on +very slow systems where color accuracy is less important. +</dl> + +<dl> +<dt><b><tt>-dNOINTERPOLATE</tt></b> +<dd>Turns off image interpolation, improving performance on interpolated +images at the expense of image quality. <b><tt>-dNOINTERPOLATE</tt></b> +overrides <b><tt>-dDOINTERPOLATE</tt></b>. +</dl> + +<h4><a name="Page_parameters"></a>Page parameters</h4> + +<dl> +<dt><a name="FIXEDMEDIA"></a><b><tt>-dFIXEDMEDIA</tt></b> +<dd>Causes the media size to be fixed after initialization, forcing pages +of other sizes or orientations to be clipped. This may be useful when +printing documents on a printer that can handle their requested paper size +but whose default is some other size. Note that <b><tt>-g</tt></b> +automatically sets <b><tt>-dFIXEDMEDIA</tt></b>, but +<b><tt>-sPAPERSIZE=</tt></b> does not. +</dl> + +<dl> +<dt><b><tt>-dFIXEDRESOLUTION</tt></b> +<dd>Causes the media resolution to be fixed similarly. <b><tt>-r</tt></b> +automatically sets <b><tt>-dFIXEDRESOLUTION</tt></b>. +</dl> + +<dl> +<dt><b><tt>-dORIENT1=true +<br>-dORIENT1=false</tt></b> +<dd>Defines the meaning of the 0 and 1 orientation values for the +setpage[params] compatibility operators. The default value of +<b><tt>ORIENT1</tt></b> is true (set in <b><tt>gs_init.ps</tt></b>), which +is the correct value for most files that use setpage[params] at all, +namely, files produced by badly designed applications that "know" that the +output will be printed on certain roll-media printers: these applications +use 0 to mean landscape and 1 to mean portrait. +<b><tt>-dORIENT1=false</tt></b> declares that 0 means portrait and 1 means +landscape, which is the convention used by a smaller number of files +produced by properly written applications. +</dl> + +<dl> +<dt><b><tt>-dDEVICEWIDTHPOINTS=</tt></b><em>w</em> +<br><b><tt>-dDEVICEHEIGHTPOINTS=</tt></b><em>h</em> +<dd>Sets the initial page width to <em>w</em> or initial page height to +<em>h</em> respectively, specified in 1/72" units. +</dl> + +<h4><a name="Font_related_parameters"></a>Font-related parameters</h4> + +<dl> +<dt><a name="DISKFONTS"></a><b><tt>-dDISKFONTS</tt></b> +<dd>Causes individual character outlines to be loaded from the disk the +first time they are encountered. (Normally Ghostscript loads all the +character outlines when it loads a font.) This may allow loading more +fonts into memory at the expense of slower rendering. +<b><tt>DISKFONTS</tt></b> is effective only if the diskfont feature was +built into the executable; otherwise it is ignored. +</dl> + +<dl> +<dt><b><tt>-dLOCALFONTS</tt></b> +<dd>Causes Type 1 fonts to be loaded into the current VM -- normally local +VM -- instead of always being loaded into global VM. Useful only for +compatibility with Adobe printers for loading some obsolete fonts. +</dl> + +<dl> +<dt><b><tt>-dNOCCFONTS</tt></b> +<dd>Suppresses the use of fonts precompiled into the Ghostscript executable. +See <a href="Fonts.htm#Precompiling">"Precompiling fonts"</a> in the +documentation on fonts for details. This is probably useful only for +debugging. +</dl> + +<dl> +<dt><a name="FONTMAP_switch"></a><b><tt>-dNOFONTMAP</tt></b> +<dd>Suppresses the normal loading of the Fontmap file. This may be useful +in environments without a file system. +</dl> + +<dl> +<dt><b><tt>-dNOFONTPATH</tt></b> +<dd>Suppresses consultation of <b><tt>GS_FONTPATH</tt></b>. This may be +useful for debugging. +</dl> + +<dl> +<dt><b><tt>-dNOPLATFONTS</tt></b> +<dd>Disables the use of fonts supplied by the underlying platform (X +Windows or Microsoft Windows). This may be needed if the platform fonts +look undesirably different from the scalable fonts. +</dl> + +<dl> +<dt><b><tt>-sFONTMAP=</tt></b><em>filename1</em><b><tt>;</tt></b><em>filename2</em><b><tt>;</tt></b><em>...</em> +<dd>Specifies alternate name or names for the Fontmap file. Note that the +names are separated by "<b><tt>:</tt></b>" on Unix systems, by +"<b><tt>;</tt></b>" on DOS or MS Windows systems, and by +"<b><tt>,</tt></b>" on VMS systems, just as for search paths. +</dl> + +<dl> +<dt><b><tt>-sFONTPATH=</tt></b><em>dir1</em><b><tt>;</tt></b><em>dir2</em><b><tt>;</tt></b><em>...</em> +<dd>Specifies a list of directories that will be scanned when looking for +fonts not found on the search path, overriding the environment variable +<b><tt>GS_FONTPATH</tt></b>. +</dl> + +<dl> +<dt><b><tt>-sSUBSTFONT=</tt></b><em>fontname</em> +<dd>Causes the given font to be substituted for all unknown fonts, instead +of using the normal intelligent substitution algorithm. Also, in this +case, the font returned by <b><tt>findfont</tt></b> is the actual font +named "<em>fontname</em>", not a copy of the font with the +<b><tt>FontName</tt></b> changed to the requested one. +</dl> + +<h4><a name="Interaction_related_parameters"></a>Interaction-related parameters</h4> + +<dl> +<dt><b><tt>-dBATCH</tt></b> +<dd>Causes Ghostscript to exit after processing all files named on the +command line, rather than going into an interactive loop reading PostScript +commands. Equivalent to putting -c quit at the end of the command line. +</dl> + +<dl> +<dt><b><tt>-dNOPAGEPROMPT</tt></b> +<dd>Disables only the prompt, but not the pause, at the end of each page. +This may be useful on PC displays that get confused if a program attempts +to write text to the console while the display is in a graphics mode. +</dl> + +<dl> +<dt><a name="NoPause"></a><b><tt>-dNOPAUSE</tt></b> +<dd>Disables the prompt and pause at the end of each page. Normally one +should use this (along with <b><tt>-dBATCH</tt></b>) when producing output +on a printer or to a file; it also may be desirable for applications where +another program is "driving" Ghostscript. +</dl> + +<dl> +<dt><b><tt>-dNOPROMPT</tt></b> +<dd>Disables the prompt printed by Ghostscript when it expects interactive +input, as well as the end-of-page prompt (<b><tt>-dNOPAGEPROMPT</tt></b>); +also disables the implicit <b><tt>flushpage</tt></b> that normally occurs +each time Ghostscript asks for more input. This allows piping input +directly into Ghostscript, as long as the data doesn't refer to +<b><tt>currentfile</tt></b>. +</dl> + +<dl> +<dt><a name="dQUIET"></a><b><tt>-dQUIET</tt></b> +<dd>Suppresses routine information comments on standard output. This is +currently necessary when redirecting device output to standard output. +</dl> + +<dl> +<dt><b><tt>-dSHORTERRORS</tt></b> +<dd>Makes certain error and information messages more Adobe-compatible. +</dl> + +<dl> +<dt><b><tt>-sstdout=</tt></b><em>filename</em> +<dd>Redirect PostScript <b><tt>%stdout</tt></b> to a file or +<b><tt>stderr</tt></b>, to avoid it being mixed with device stdout. +To redirect stdout to stderr use <b><tt>-sstdout=%stderr</tt></b>. +To cancel redirection of stdout use <b><tt>-sstdout=%stdout</tt></b> +or <b><tt>-sstdout=-</tt></b>. +</dl> + +<dl> +<dt><b><tt>-dTTYPAUSE</tt></b> +<dd>Causes Ghostscript to read a character from <b><tt>/dev/tty</tt></b>, +rather than standard input, at the end of each page. This may be useful if +input is coming from a pipe. Note that <b><tt>-dTTYPAUSE</tt></b> +overrides <b><tt>-dNOPAUSE</tt></b>. +</dl> + +<h4><a name="Output_selection_parameters"></a>Device and output selection parameters</h4> + +<dl> +<dt><b><tt>-dNODISPLAY</tt></b> +<dd>Initializes Ghostscript with a null device (a device that discards the +output image) rather than the default device or the device selected with +<b><tt>-sDEVICE=</tt></b>. This is usually useful only when running +PostScript code whose purpose is to compute something rather than to +produce an output image; for instance, when converting PostScript to PDF. +</dl> + +<dl> +<dt><a name="DEVICE_switch"></a><b><tt>-sDEVICE=</tt></b><em>device</em> +<dd>Selects an alternate <a href="#Output_device">initial output +device</a>. +</dl> + +<dl> +<dt><b><tt>-sOutputFile=</tt></b><em>filename</em> +<dd>Selects an alternate output file (or pipe) for the initial output +device, as described above. +</dl> + +<h4><a name="Other_parameters"></a>Other parameters</h4> + +<dl> +<dt><b><tt>-dDELAYBIND</tt></b> +<dd>Causes <b><tt>bind</tt></b> to remember all its invocations, but not +actually execute them until the <b><tt>.bindnow</tt></b> procedure is +called. Useful only for certain specialized packages like +<b><tt>pstotext</tt></b> that redefine operators. +</dl> + +<dl> +<dt><b><tt>-dDOPDFMARKS</tt></b> +<dd>Causes <b><tt>pdfmark</tt></b> to be called for bookmarks, +annotations, links and cropbox when processing PDF files. +Normally, <b><tt>pdfmark</tt></b> is only called for these types +for PostScript files or when the output device requests it +(e.g. pdfwrite device). +</dl> + +<dl> +<dt><b><tt>-dNOBIND</tt></b> +<dd>Disables the <b><tt>bind</tt></b> operator. Useful only for debugging. +</dl> + +<dl> +<dt><b><tt>-dNOCACHE</tt></b> +<dd>Disables character caching. Useful only for debugging. +</dl> + +<dl> +<dt><b><tt>-dNOGC</tt></b> +<dd>Suppresses the initial automatic enabling of the garbage collector in +Level 2 systems. (The <b><tt>vmreclaim</tt></b> operator is not disabled.) +Useful only for debugging. +</dl> + +<dl> +<dt><b><tt>-dNOSAFER</tt></b> (equivalent to <b><tt>-dDELAYSAFER</tt></b>). +<dd>This flag disables SAFER mode until the <b><tt>.setsafe</tt></b> +procedure is run. This is intended for clients or scripts that cannot +operate in SAFER mode. If Ghostscript is started with <b><tt>-dNOSAFER</tt></b> +or <b><tt>-dDELAYSAFER</tt></b>, PostScript programs are allowed to read, write, +rename or delete any files in the system that are not protected by operating +system permissions. +<p><b>This mode should be used with caution, and <tt>.setsafe</tt> should be +run prior to running any PostScript file with unknown contents.</b> +</dl> + +<a name="Safer"></a> +<dl> +<dt><b><tt>-dSAFER</tt></b> +<dd>Disables the <b><tt>deletefile</tt></b> and <b><tt>renamefile</tt></b> +operators, and the ability to open piped commands (<b><tt>%pipe%</tt></b><em>cmd</em>) +at all. Only <b><tt>%stdout</tt></b> and <b><tt>%stderr</tt></b> can be opened +for writing. +<p> +This mode also sets the <a href="Language.htm#LockSafetyParams">.LockSafetyParams</a> +parameter of the default device, or the device specified with the <b><tt>-sDEVICE= </tt></b> +switch to protect against programs that attempt to write to files using the +OutputFile device parameter. Note that since the device parameters specified +on the command line (including OutputFile) are set prior to SAFER mode, +the <b><tt>-sOutputFile=...</tt></b> on the command line is unrestricted. +<p> +<b><tt>SAFER</tt></b> mode also prevents changing the /GenericResourceDir, +/FontResourceDir and either the /SystemParamsPassword or the /StartJobPassword. +<p> +<b>Note: </b>While SAFER mode is not the default, in a subsequent release of +Ghostscript, SAFER mode will be the default thus scripts or programs that need +to open files or set restricted parameters will require the <b><tt>-dNOSAFER</tt></b> +command line option. +<p> +When running -dNOSAFER it is possible to perform a <b><tt>save</tt></b>, +followed by <b><tt>.setsafe</tt></b>, execute a file or procedure in SAFER mode, +then use <b><tt>restore</tt></b> to return to NOSAFER mode. In order to prevent +the save object from being restored by the foreign file or procedure, the +<a href="Language.htm#Runandhide"><b>.runandhide</b></a> operator should +be used to hide the save object from the restricted procedure. +</dl> + +<dl> +<dt><b><tt>-dPARANOIDSAFER</tt></b> +<dd>Disables reading of files other than <b><tt>%stdin</tt></b>, those given as +a command line argument, or those contained on one of the paths given by +LIBPATH and FONTPATH and specified by the system params /FontResourceDir +and /GenericResourceDir. +<p> +<b><tt>-dPARANOIDSAFER</tt></b> implies <b><tt>-dSAFER</tt></b> so if +<b><tt>-dPARANOIDSAFER</tt></b> is given on the command line, +<b><tt>-dSAFER</tt></b> is optional. +</dl> + +<dl> +<dt><b><tt>-dSTRICT</tt></b> +<dd>Disables as many Ghostscript extensions as feasible, to be more helpful +in debugging applications that produce output for Adobe and other RIPs. +</dl> + +<dl> +<dt><b><tt>-dWRITESYSTEMDICT</tt></b> +<dd>Leaves <b><tt>systemdict</tt></b> writable. This is necessary when +running special utility programs such as <b><tt>font2c</tt></b> and +<b><tt>pcharstr</tt></b>, which must bypass normal PostScript access +protection. +</dl> + +<hr> + +<h2><a name="Improving_performance"></a>Improving performance</h2> + +<p> +Ghostscript attempts to find an optimum balance between speed and memory +consumption, but there are some cases in which you may get a very large +speedup by telling Ghostscript to use more memory. + +<ul> + +<li> +If you are using X Windows, setting the <b><tt>-dMaxBitmap=</tt></b> +parameter described <a href="#X_device_parameters">above</a> may +dramatically improve performance on files that have a lot of bitmap images. + +<li> +If you are using Chinese, Japanese, or other fonts with very large character +sets, adding the following sequence of switches before the first file name +may dramatically improve performance at the cost of an additional 2-3 Mb of +memory: <b><tt>-c 3000000 setvmthreshold -f</tt></b>. + +</ul> + +<hr> + +<h2><a name="Debugging"></a>Debugging</h2> + +<p> +The information here describing the debugging switches is probably +interesting only to developers. The <b><tt>-Z</tt></b> switch applies only +if the interpreter was <a href="Make.htm#Debugging">built for a debugging +configuration</a>. In the table below, the first column is a debugging +switch, the second is an equivalent switch (if any) and the third is its +usage. + +<table cellpadding=0 cellspacing=0> +<tr><th colspan=5 bgcolor="#CCCC00"><hr><font size="+1">Switches used in debugging</font><hr> +<tr> <th align=left>Switch + <td> + <th align=left>Equivalent + <td> + <th> +<tr> <td colspan=5><hr> +<tr> <td valign=top><b><tt>-A</tt></b> + <td> + <td valign=top><b><tt>-Z@</tt></b> + <td> + <td>Fill empty storage with a distinctive bit pattern for debugging + +<tr> <td valign=top><b><tt>-A-</tt></b> + <td> + <td valign=top><b><tt>-Z-@</tt></b> + <td> + <td>Turn off <b><tt>-A</tt></b> +<tr> <td valign=top><b><tt>-B</tt></b><em>size</em> + <td> + <td> + <td> + <td>Run all subsequent files named on the command line (except for + <b><tt>-F</tt></b>) through the run_string interface, using a + buffer of <em>size</em> bytes +<tr> <td valign=top><b><tt>-B-</tt></b> + <td> + <td> + <td> + <td>Turn off <b><tt>-B</tt></b>: run subsequent files (except for + <b><tt>-F</tt></b>) directly in the normal way +<tr> <td valign=top><b><tt>-E</tt></b> + <td> + <td valign=top><b><tt>-Z#</tt></b> + <td> + <td>Turn on tracing of error returns from operators +<tr> <td valign=top><b><tt>-E-</tt></b> + <td> + <td valign=top><b><tt>-Z-#</tt></b> + <td> + <td>Turn off <b><tt>-E</tt></b> +<tr> <td valign=top><b><tt>-F</tt></b><em>file</em> + <td> + <td> + <td> + <td>Execute the file with <b><tt>-B1</tt></b> temporarily in effect +<tr> <td valign=top><b><tt>-K</tt></b><em>n</em> + <td> + <td> + <td> + <td>Limit the total amount of memory that the interpreter can have + allocated at any one time to <b><em>n</em></b>K bytes. + <b><em>n</em></b> is a positive decimal integer. +<tr> <td valign=top><b><tt>-M</tt></b><em>n</em> + <td> + <td> + <td> + <td>Force the interpreter's allocator to acquire additional memory + in units of <b><em>n</em></b>K bytes, rather than the default + (currently 20K on DOS systems, 50K on Unix). <b><em>n</em></b> + is a positive decimal integer, on DOS systems no greater than + 63. +<tr> <td valign=top><b><tt>-N</tt></b><em>n</em> + <td> + <td> + <td> + <td>Allocate space for <b><em>n</em></b>K names, rather than the + default (normally 64K). <b><em>n</em></b> may be greater than + 64 only if <b><tt>EXTEND_NAMES</tt></b> was defined when the + interpreter was compiled . +<tr> <td valign=top><b><tt>-Z</tt></b><em>xxx</em><br><b><tt>-Z-</tt></b><em>xxx</em> + <td> + <td> + <td> + <td>Turn debugging printout on (off). Each of the <em>xxx</em> + characters selects an option. Case is significant: "a" and + "A" have different meanings. + +<dl compact> +<dt><b><tt>0</tt></b><dd>garbage collector, minimal detail +<dt><b><tt>1</tt></b><dd>type 1 and type 42 font interpreter +<dt><b><tt>2</tt></b><dd>curve subdivider/rasterizer +<dt> <b><tt>3</tt></b><dd>curve subdivider/rasterizer, detail +<dt><b><tt>4</tt></b><dd>garbage collector (strings) +<dt> <b><tt>5</tt></b><dd>garbage collector (strings, detail) +<dt><b><tt>6</tt></b><dd>garbage collector (chunks, roots) +<dt> <b><tt>7</tt></b><dd>garbage collector (objects) +<dt> <b><tt>8</tt></b><dd>garbage collector (refs) +<dt> <b><tt>9</tt></b><dd>garbage collector (pointers) +<dt><b><tt>a</tt></b><dd>allocator (large blocks only) +<dt> <b><tt>A</tt></b><dd>allocator (all calls) +<dt><b><tt>b</tt></b><dd>bitmap image processor +<dt> <b><tt>B</tt></b><dd>bitmap images, detail +<dt><b><tt>c</tt></b><dd>color/halftone mapper +<dt><b><tt>d</tt></b><dd>dictionary put/undef +<dt> <b><tt>D</tt></b><dd>dictionary lookups +<dt><b><tt>e</tt></b><dd>external (OS-related) calls +<dt><b><tt>f</tt></b><dd>fill algorithm (summary) +<dt> <b><tt>F</tt></b><dd>fill algorithm (detail) +<dt><b><tt>g</tt></b><dd>gsave/grestore[all] +<dt><b><tt>h</tt></b><dd>halftone renderer +<dt> <b><tt>H</tt></b><dd>halftones, every pixel +<dt><b><tt>i</tt></b><dd>interpreter, just names +<dt> <b><tt>I</tt></b><dd>interpreter, everything +<dt><b><tt>j</tt></b><dd>(Japanese) composite fonts +<dt><b><tt>k</tt></b><dd>character cache and xfonts +<dt> <b><tt>K</tt></b><dd>character cache, every access +<dt><b><tt>l</tt></b><dd>command lists, bands +<dt> <b><tt>L</tt></b><dd>command lists, everything +<dt><b><tt>m</tt></b><dd>makefont and font cache +<dt><b><tt>n</tt></b><dd>name lookup (new names only) +<dt><b><tt>o</tt></b><dd>outliner (stroke) +<dt> <b><tt>O</tt></b><dd>stroke detail +<dt><b><tt>p</tt></b><dd>band list paths +<dt> <b><tt>P</tt></b><dd>all paths +<dt><b><tt>q</tt></b><dd>clipping +<dt><b><tt>r</tt></b><dd>arc renderer +<dt><b><tt>s</tt></b><dd>streams +<dt> <b><tt>S</tt></b><dd>scanner +<dt><b><tt>t</tt></b><dd>tiling algorithm +<dt><b><tt>u</tt></b><dd>undo saver (for save/restore), finalization +<dt> <b><tt>U</tt></b><dd>undo saver, more detail +<dt><b><tt>v</tt></b><dd>alpha/transparency +<dt> <b><tt>V</tt></b><dd>alpha/transparency, more detail +<dt><b><tt>w</tt></b><dd>compression encoder/decoder +<dt><b><tt>x</tt></b><dd>transformations +<dt><b><tt>y</tt></b><dd>Type 1 hints +<dt> <b><tt>Y</tt></b><dd>Type 1 hints, every access +<dt><b><tt>z</tt></b><dd>trapezoid fill +<dt><b><tt>#</tt></b><dd>operator error returns +<dt><b><tt>%</tt></b><dd>externally processed comments +<dt><b><tt>*</tt></b><dd>image and RasterOp parameters +<dt><b><tt>:</tt></b><dd>command list and allocator/time summary +<dt><b><tt>~</tt></b><dd>math functions and Functions +<dt><b><tt>'</tt></b><dd>contexts, create/destroy +<dt> <b><tt>"</tt></b><dd>contexts, every operation +<dt><b><tt>^</tt></b><dd>reference counting +<dt><b><tt>_</tt></b><dd>high-level output +<dt><b><tt>|</tt></b><dd>(reserved for experimental code) +</dl> + +<p> +The following switch affects what is printed, but does not select specific +items for printing: + +<dl compact> +<dt><b><tt>/</tt></b><dd>include file name and line number on all trace output +</dl> + +<p> +These switches select debugging options other than what should be printed: + +<dl compact> +<dt><b><tt>$</tt></b><dd>set unused parts of object references to +identifiable garbage values +<dt><b><tt>+</tt></b><dd>use minimum-size stack blocks +<dt><b><tt>,</tt></b><dd>don't use path-based banding +<dt><b><tt>`</tt></b><dd>don't use high-level banded images +<dt><b><tt>.</tt></b><dd>use small-memory table sizes even on large-memory +machines +<dt><b><tt>?</tt></b><dd>validate pointers before, during and after garbage +collection, also before and after save and restore; also make other +allocator validity checks +<dt><b><tt>@</tt></b><dd>fill newly allocated, garbage-collected, and freed +storage with a marker (a1, c1, and f1 respectively) +</dl> +</table> + +<hr> + +<h2><a name="Known_paper_sizes"></a>Appendix: Paper sizes known to Ghostscript</h2> + +<p> +The paper sizes known to Ghostscript are defined at the beginning of the +initialization file <b><tt>gs_statd.ps</tt></b>; see the comments there for +more details about the definitions. The table here lists them by name and +size. <b><tt>gs_statd.ps</tt></b> defines their sizes exactly in points, +and the dimensions in inches (at 72 points per inch) and centimeters shown +in the table are derived from those, rounded to the nearest 0.1 unit. A +guide to international paper sizes can be found at + +<blockquote> +<a href="http://www.twics.com/~eds/paper/index.html">http://www.twics.com/~eds/paper/</a> +</blockquote> + +<table cellpadding=0 cellspacing=0> +<tr><th colspan=13 bgcolor="#CCCC00"><hr><font size="+1">Paper sizes known to Ghostscript</font><hr> +<tr><th colspan=13>U.S. standard +<tr> <td> + <td> + <th colspan=3>Inches + <td> + <th colspan=3>mm + <td> + <th colspan=3>Points + <td> + <td> +<tr> <th align=left>Name + <td> + <th> W + <td>× + <th> H + <td> + <th> W + <td>× + <th> H + <td> + <th> W + <td>× + <th> H + <td> + <td> +<tr> <td colspan=13><hr> +<tr> <td>11x17 + <td> <td align=right>11.0<td> <td align=right>17.0<td> <td align=right>279<td> <td align=right>432<td> <td align=right>792<td> <td align=right>1224<td> <td>11×17in portrait +<tr> <td>ledger + <td> <td align=right>17.0<td> <td align=right>11.0<td> <td align=right>432<td> <td align=right>279<td> <td align=right>1224<td> <td align=right>792<td> <td>11×17in landscape +<tr> <td>legal + <td> <td align=right>8.5<td> <td align=right>14.0<td> <td align=right>216<td> <td align=right>356<td> <td align=right>612<td> <td align=right>1008<td> <td> +<tr> <td>letter + <td> <td align=right>8.5<td> <td align=right>11.0<td> <td align=right>216<td> <td align=right>279<td> <td align=right>612<td> <td align=right>792<td> <td> +<tr> <td>lettersmall + <td> <td align=right>8.5<td> <td align=right>11.0<td> <td align=right>216<td> <td align=right>279<td> <td align=right>612<td> <td align=right>792<td> <td> +<tr> <td>archE + <td> <td align=right>36.0<td> <td align=right>48.0<td> <td align=right>914<td> <td align=right>1219<td> <td align=right>2592<td> <td align=right>3456<td> <td> +<tr> <td>archD + <td> <td align=right>24.0<td> <td align=right>36.0<td> <td align=right>610<td> <td align=right>914<td> <td align=right>1728<td> <td align=right>2592<td> <td> +<tr> <td>archC + <td> <td align=right>18.0<td> <td align=right>24.0<td> <td align=right>457<td> <td align=right>610<td> <td align=right>1296<td> <td align=right>1728<td> <td> +<tr> <td>archB + <td> <td align=right>12.0<td> <td align=right>18.0<td> <td align=right>305<td> <td align=right>457<td> <td align=right>864<td> <td align=right>1296<td> <td> +<tr> <td>archA + <td> <td align=right>9.0<td> <td align=right>12.0<td> <td align=right>229<td> <td align=right>305<td> <td align=right>648<td> <td align=right>864<td> <td> +<tr> <td colspan=13><hr> +<tr><th colspan=13>ISO standard +<tr> <td colspan=13><hr> +<tr> <td>a0 + <td> <td align=right>33.1<td> <td align=right>46.8<td> <td align=right>841<td> <td align=right>1189<td> <td align=right>2384<td> <td align=right>3370<td> <td> +<tr> <td>a1 + <td> <td align=right>23.4<td> <td align=right>33.1<td> <td align=right>594<td> <td align=right>841<td> <td align=right>1684<td> <td align=right>2384<td> <td> +<tr> <td>a2 + <td> <td align=right>16.5<td> <td align=right>23.4<td> <td align=right>420<td> <td align=right>594<td> <td align=right>1191<td> <td align=right>1684<td> <td> +<tr> <td>a3 + <td> <td align=right>11.7<td> <td align=right>16.5<td> <td align=right>297<td> <td align=right>420<td> <td align=right>842<td> <td align=right>1191<td> <td> +<tr> <td>a4 + <td> <td align=right>8.3<td> <td align=right>11.7<td> <td align=right>210<td> <td align=right>297<td> <td align=right>595<td> <td align=right>842<td> <td> +<tr> <td>a4small + <td> <td align=right>8.3<td> <td align=right>11.7<td> <td align=right>210<td> <td align=right>297<td> <td align=right>595<td> <td align=right>842<td> <td> +<tr> <td>a5 + <td> <td align=right>5.8<td> <td align=right>8.3<td> <td align=right>148<td> <td align=right>210<td> <td align=right>420<td> <td align=right>595<td> <td> +<tr> <td>a6 + <td> <td align=right>4.1<td> <td align=right>5.8<td> <td align=right>105<td> <td align=right>148<td> <td align=right>297<td> <td align=right>420<td> <td> +<tr> <td>a7 + <td> <td align=right>2.9<td> <td align=right>4.1<td> <td align=right>74<td> <td align=right>105<td> <td align=right>210<td> <td align=right>297<td> <td> +<tr> <td>a8 + <td> <td align=right>2.1<td> <td align=right>2.9<td> <td align=right>52<td> <td align=right>74<td> <td align=right>148<td> <td align=right>210<td> <td> +<tr> <td>a9 + <td> <td align=right>1.5<td> <td align=right>2.1<td> <td align=right>37<td> <td align=right>52<td> <td align=right>105<td> <td align=right>148<td> <td> +<tr> <td>a10 + <td> <td align=right>1.0<td> <td align=right>1.5<td> <td align=right>26<td> <td align=right>37<td> <td align=right>73<td> <td align=right>105<td> <td> +<tr> <td>isob0 + <td> <td align=right>39.4<td> <td align=right>55.7<td> <td align=right>1000<td> <td align=right>1414<td> <td align=right>2835<td> <td align=right>4008<td> <td> +<tr> <td>isob1 + <td> <td align=right>27.8<td> <td align=right>39.4<td> <td align=right>707<td> <td align=right>1000<td> <td align=right>2004<td> <td align=right>2835<td> <td> +<tr> <td>isob2 + <td> <td align=right>19.7<td> <td align=right>27.8<td> <td align=right>500<td> <td align=right>707<td> <td align=right>1417<td> <td align=right>2004<td> <td> +<tr> <td>isob3 + <td> <td align=right>13.9<td> <td align=right>19.7<td> <td align=right>353<td> <td align=right>500<td> <td align=right>1001<td> <td align=right>1417<td> <td> +<tr> <td>isob4 + <td> <td align=right>9.8<td> <td align=right>13.9<td> <td align=right>250<td> <td align=right>353<td> <td align=right>709<td> <td align=right>1001<td> <td> +<tr> <td>isob5 + <td> <td align=right>6.9<td> <td align=right>9.8<td> <td align=right>176<td> <td align=right>250<td> <td align=right>499<td> <td align=right>709<td> <td> +<tr> <td>isob6 + <td> <td align=right>4.9<td> <td align=right>6.9<td> <td align=right>125<td> <td align=right>176<td> <td align=right>354<td> <td align=right>499<td> <td> +<tr> <td>c0 + <td> <td align=right>36.1<td> <td align=right>51.1<td> <td align=right>917<td> <td align=right>1297<td> <td align=right>2599<td> <td align=right>3677<td> <td> +<tr> <td>c1 + <td> <td align=right>25.5<td> <td align=right>36.1<td> <td align=right>648<td> <td align=right>917<td> <td align=right>1837<td> <td align=right>2599<td> <td> +<tr> <td>c2 + <td> <td align=right>18.0<td> <td align=right>25.5<td> <td align=right>458<td> <td align=right>648<td> <td align=right>1298<td> <td align=right>1837<td> <td> +<tr> <td>c3 + <td> <td align=right>12.8<td> <td align=right>18.0<td> <td align=right>324<td> <td align=right>458<td> <td align=right>918<td> <td align=right>1298<td> <td> +<tr> <td>c4 + <td> <td align=right>9.0<td> <td align=right>12.8<td> <td align=right>229<td> <td align=right>324<td> <td align=right>649<td> <td align=right>918<td> <td> +<tr> <td>c5 + <td> <td align=right>6.4<td> <td align=right>9.0<td> <td align=right>162<td> <td align=right>229<td> <td align=right>459<td> <td align=right>649<td> <td> +<tr> <td>c6 + <td> <td align=right>4.5<td> <td align=right>6.4<td> <td align=right>114<td> <td align=right>162<td> <td align=right>323<td> <td align=right>459<td> <td> +<tr> <td colspan=13><hr> +<tr><th colspan=13>JIS standard +<tr> <td colspan=13><hr> +<tr> <td>jisb0 + <td> <td align=right><td> <td align=right><td> <td align=right>1030<td> <td align=right>1456<td> <td align=right><td> <td align=right><td> <td> +<tr> <td>jisb1 + <td> <td align=right><td> <td align=right><td> <td align=right>728<td> <td align=right>1030<td> <td align=right><td> <td align=right><td> <td> +<tr> <td>jisb2 + <td> <td align=right><td> <td align=right><td> <td align=right>515<td> <td align=right>728<td> <td align=right><td> <td align=right><td> <td> +<tr> <td>jisb3 + <td> <td align=right><td> <td align=right><td> <td align=right>364<td> <td align=right>515<td> <td align=right><td> <td align=right><td> <td> +<tr> <td>jisb4 + <td> <td align=right><td> <td align=right><td> <td align=right>257<td> <td align=right>364<td> <td align=right><td> <td align=right><td> <td> +<tr> <td>jisb5 + <td> <td align=right><td> <td align=right><td> <td align=right>182<td> <td align=right>257<td> <td align=right><td> <td align=right><td> <td> +<tr> <td>jisb6 + <td> <td align=right><td> <td align=right><td> <td align=right>128<td> <td align=right>182<td> <td align=right><td> <td align=right><td> <td> +<tr> <td colspan=13><hr> +<tr><th colspan=13>ISO/JIS switchable +<tr> <td colspan=13><hr> +<tr> <td>b0 (see * below) +<tr> <td>b1 (see * below) +<tr> <td>b2 (see * below) +<tr> <td>b3 (see * below) +<tr> <td>b4 (see * below) +<tr> <td>b5 (see * below) +<tr> <td colspan=13><hr> +<tr><th colspan=13>Other +<tr> <td colspan=13><hr> +<tr> <td>flsa + <td> <td align=right>8.5<td> <td align=right>13.0<td> <td align=right>216<td> <td align=right>330<td> <td align=right>612<td> <td align=right>936<td> <td>U.S. foolscap +<tr> <td>flse + <td> <td align=right>8.5<td> <td align=right>13.0<td> <td align=right>216<td> <td align=right>330<td> <td align=right>612<td> <td align=right>936<td> <td>European foolscap +<tr> <td>halfletter + <td> <td align=right>5.5<td> <td align=right>8.5<td> <td align=right>140<td> <td align=right>216<td> <td align=right>396<td> <td align=right>612<td> <td> +</table> + +<p> +*<em>Note:</em> Initially the B paper sizes are the ISO sizes, e.g., +<b><tt>b0</tt></b> is the same as <b><tt>isob0</tt></b>. Running the file +<b><tt>lib/jispaper.ps</tt></b> makes the B paper sizes be the JIS sizes, +e.g., <b><tt>b0</tt></b> becomes the same as <b><tt>jisb0</tt></b>. + +<hr> + +<h2><a name="X_font_mappings"></a>Appendix: X default font mappings</h2> + +<h3><a name="Standard_X_server_fonts"></a>Standard X servers</h3> + +<h4><a name="X_regular_fonts"></a>Regular fonts</h4> + +<pre> AvantGarde-Book: -Adobe-ITC Avant Garde Gothic-Book-R-Normal--\n\ + AvantGarde-BookOblique: -Adobe-ITC Avant Garde Gothic-Book-O-Normal--\n\ + AvantGarde-Demi: -Adobe-ITC Avant Garde Gothic-Demi-R-Normal--\n\ + AvantGarde-DemiOblique: -Adobe-ITC Avant Garde Gothic-Demi-O-Normal--\n\ + Bookman-Demi: -Adobe-ITC Bookman-Demi-R-Normal--\n\ + Bookman-DemiItalic: -Adobe-ITC Bookman-Demi-I-Normal--\n\ + Bookman-Light: -Adobe-ITC Bookman-Light-R-Normal--\n\ + Bookman-LightItalic: -Adobe-ITC Bookman-Light-I-Normal--\n\ + Courier: -Adobe-Courier-Medium-R-Normal--\n\ + Courier-Bold: -Adobe-Courier-Bold-R-Normal--\n\ + Courier-BoldOblique: -Adobe-Courier-Bold-O-Normal--\n\ + Courier-Oblique: -Adobe-Courier-Medium-O-Normal--\n\ + Helvetica: -Adobe-Helvetica-Medium-R-Normal--\n\ + Helvetica-Bold: -Adobe-Helvetica-Bold-R-Normal--\n\ + Helvetica-BoldOblique: -Adobe-Helvetica-Bold-O-Normal--\n\ + Helvetica-Narrow: -Adobe-Helvetica-Medium-R-Narrow--\n\ + Helvetica-Narrow-Bold: -Adobe-Helvetica-Bold-R-Narrow--\n\ + Helvetica-Narrow-BoldOblique: -Adobe-Helvetica-Bold-O-Narrow--\n\ + Helvetica-Narrow-Oblique: -Adobe-Helvetica-Medium-O-Narrow--\n\ + Helvetica-Oblique: -Adobe-Helvetica-Medium-O-Normal--\n\ + NewCenturySchlbk-Bold: -Adobe-New Century Schoolbook-Bold-R-Normal--\n\ + NewCenturySchlbk-BoldItalic: -Adobe-New Century Schoolbook-Bold-I-Normal--\n\ + NewCenturySchlbk-Italic: -Adobe-New Century Schoolbook-Medium-I-Normal--\n\ + NewCenturySchlbk-Roman: -Adobe-New Century Schoolbook-Medium-R-Normal--\n\ + Palatino-Bold: -Adobe-Palatino-Bold-R-Normal--\n\ + Palatino-BoldItalic: -Adobe-Palatino-Bold-I-Normal--\n\ + Palatino-Italic: -Adobe-Palatino-Medium-I-Normal--\n\ + Palatino-Roman: -Adobe-Palatino-Medium-R-Normal--\n\ + Times-Bold: -Adobe-Times-Bold-R-Normal--\n\ + Times-BoldItalic: -Adobe-Times-Bold-I-Normal--\n\ + Times-Italic: -Adobe-Times-Medium-I-Normal--\n\ + Times-Roman: -Adobe-Times-Medium-R-Normal--\n\ + ZapfChancery-MediumItalic: -Adobe-ITC Zapf Chancery-Medium-I-Normal-- +</pre> + +<h4><a name="X_symbol_fonts"></a>Symbol fonts</h4> + +<pre> Symbol: -Adobe-Symbol-Medium-R-Normal-- +</pre> + +<h4><a name="X_dingbat_fonts"></a>Dingbat fonts</h4> + +<pre> ZapfDingbats: -Adobe-ITC Zapf Dingbats-Medium-R-Normal-- +</pre> + +<h3><a name="OpenWindows_fonts"></a>Sun OpenWindows</h3> + +<p> +For Sun's X11/NeWS one can use the OpenWindows scalable fonts instead, +which gives good output for any point size. In this environment, the +relevant section of the resource file should look like this: + +<pre>Ghostscript.regularFonts: \ + AvantGarde-Book: -itc-avantgarde-book-r-normal-- \n\ + AvantGarde-BookOblique: -itc-avantgarde-book-o-normal-- \n\ + AvantGarde-Demi: -itc-avantgarde-demi-r-normal-- \n\ + AvantGarde-DemiOblique: -itc-avantgarde-demi-o-normal-- \n\ + Bembo: -monotype-bembo-medium-r-normal-- \n\ + Bembo-Bold: -monotype-bembo-bold-r-normal-- \n\ + Bembo-BoldItalic: -monotype-bembo-bold-i-normal-- \n\ + Bembo-Italic: -monotype-bembo-medium-i-normal-- \n\ + Bookman-Demi: -itc-bookman-demi-r-normal-- \n\ + Bookman-DemiItalic: -itc-bookman-demi-i-normal-- \n\ + Bookman-Light: -itc-bookman-light-r-normal-- \n\ + Bookman-LightItalic: -itc-bookman-light-i-normal-- \n\ + Courier: -itc-courier-medium-r-normal-- \n\ + Courier-Bold: -itc-courier-bold-r-normal-- \n\ + Courier-BoldOblique: -itc-courier-bold-o-normal-- \n\ + Courier-Oblique: -itc-courier-medium-o-normal-- \n\ + GillSans: -monotype-gill-medium-r-normal-sans- \n\ + GillSans-Bold: -monotype-gill-bold-r-normal-sans- \n\ + GillSans-BoldItalic: -monotype-gill-bold-i-normal-sans- \n\ + GillSans-Italic: -monotype-gill-normal-i-normal-sans- \n\ + Helvetica: -linotype-helvetica-medium-r-normal-- \n\ + Helvetica-Bold: -linotype-helvetica-bold-r-normal-- \n\ + Helvetica-BoldOblique: -linotype-helvetica-bold-o-normal-- \n\ + Helvetica-Narrow: -linotype-helvetica-medium-r-narrow-- \n\ + Helvetica-Narrow-Bold: -linotype-helvetica-bold-r-narrow-- \n\ + Helvetica-Narrow-BoldOblique: -linotype-helvetica-bold-o-narrow-- \n\ + Helvetica-Narrow-Oblique: -linotype-helvetica-medium-o-narrow-- \n\ + Helvetica-Oblique: -linotype-helvetica-medium-o-normal-- \n\ + LucidaBright: -b&h-lucidabright-medium-r-normal-- \n\ + LucidaBright-Demi: -b&h-lucidabright-demibold-r-normal-- \n\ + LucidaBright-DemiItalic: -b&h-lucidabright-demibold-i-normal-- \n\ + LucidaBright-Italic: -b&h-lucidabright-medium-i-normal-- \n\ + LucidaSans: -b&h-lucida-medium-r-normal-sans- \n\ + LucidaSans-Bold: -b&h-lucida-bold-r-normal-sans- \n\ + LucidaSans-BoldItalic: -b&h-lucida-bold-i-normal-sans- \n\ + LucidaSans-Italic: -b&h-lucida-medium-i-normal-sans- \n\ + LucidaSans-Typewriter: -b&h-lucidatypewriter-medium-r-normal-sans- \n\ + LucidaSans-TypewriterBold: -b&h-lucidatypewriter-bold-r-normal-sans- \n\ + NewCenturySchlbk-BoldItalic: -linotype-new century schoolbook-bold-i-normal-- \n\ + NewCenturySchlbk-Bold: -linotype-new century schoolbook-bold-r-normal-- \n\ + NewCenturySchlbk-Italic: -linotype-new century schoolbook-medium-i-normal-- \n\ + NewCenturySchlbk-Roman: -linotype-new century schoolbook-medium-r-normal-- \n\ + Palatino-Bold: -linotype-palatino-bold-r-normal-- \n\ + Palatino-BoldItalic: -linotype-palatino-bold-i-normal-- \n\ + Palatino-Italic: -linotype-palatino-medium-i-normal-- \n\ + Palatino-Roman: -linotype-palatino-medium-r-normal-- \n\ + Rockwell: -monotype-rockwell-medium-r-normal-- \n\ + Rockwell-Bold: -monotype-rockwell-bold-r-normal-- \n\ + Rockwell-BoldItalic: -monotype-rockwell-bold-i-normal-- \n\ + Rockwell-Italic: -monotype-rockwell-medium-i-normal-- \n\ + Times-Bold: -linotype-times-bold-r-normal-- \n\ + Times-BoldItalic: -linotype-times-bold-i-normal-- \n\ + Times-Italic: -linotype-times-medium-i-normal-- \n\ + Times-Roman: -linotype-times-medium-r-normal-- \n\ + Utopia-Bold: -adobe-utopia-bold-r-normal-- \n\ + Utopia-BoldItalic: -adobe-utopia-bold-i-normal-- \n\ + Utopia-Italic: -adobe-utopia-regular-i-normal-- \n\ + Utopia-Regular: -adobe-utopia-regular-r-normal-- \n\ + ZapfChancery-MediumItalic: -itc-zapfchancery-medium-i-normal-- \n +Ghostscript.dingbatFonts: \ + ZapfDingbats: -itc-zapfdingbats-medium-r-normal-- +Ghostscript.symbolFonts: \ + Symbol: --symbol-medium-r-normal-- +</pre> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 2000 Aladdin Enterprises. All rights +reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/Xfonts.htm b/Master/xemtex/doc/ghostscript/Xfonts.htm new file mode 100644 index 00000000000..d86653143ab --- /dev/null +++ b/Master/xemtex/doc/ghostscript/Xfonts.htm @@ -0,0 +1,265 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Ghostscript's external font and text interface</title> +<!-- $Id: Xfonts.htm,v 1.13.2.11.2.5 2003/05/17 14:39:00 giles Exp $ --> +<!-- Originally: xfonts.txt --> +<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style"> +</head> + +<body> +<!-- [1.0 begin visible header] ============================================ --> + +<!-- [1.1 begin headline] ================================================== --> + +<h1>Ghostscript's external font and text interface</h1> + +<!-- [1.1 end headline] ==================================================== --> + +<!-- [1.2 begin table of contents] ========================================= --> + +<h2>Table of contents</h2> + +<blockquote><ul> +<li><a href="#Introduction">Introduction</a> +<li><a href="#Types">Types</a> +<li><a href="#Implementation_procedures">Implementation procedures</a> +<li><a href="#Font_level_procedures">Font-level procedures</a> +<ul> +<li><a href="#lookup_font"><b><tt>lookup_font</tt></b></a> +<li><a href="#char_xglyph"><b><tt>char_xglyph</tt></b></a> +<li><a href="#char_metrics"><b><tt>char_metrics</tt></b></a> +<li><a href="#render_char"><b><tt>render_char</tt></b></a> +<li><a href="#release"><b><tt>release</tt></b></a> +</ul> +</ul></blockquote> + +<!-- [1.2 end table of contents] =========================================== --> + +<!-- [1.3 begin hint] ====================================================== --> + +<p>For other information, see the <a href="Readme.htm">Ghostscript +overview</a>. + +<!-- [1.3 end hint] ======================================================== --> + +<hr> + +<!-- [1.0 end visible header] ============================================== --> + +<!-- [2.0 begin contents] ================================================== --> + +<h2><a name="Introduction"></a>Introduction</h2> + +<p> +Ghostscript can use the character rasterizer provided by the underlying +operating system and window system; specifically, Adobe Type Manager (ATM) +or a TrueType rasterizer under MS Windows, or the facilities provided by X +Windows. This ability augments, but does not replace, Ghostscript's own +Type 1 rasterizer: Ghostscript may still use its own rasterizer for very +large characters, characters that are clipped or transformed in unusual +ways, and for output to devices other than the screen. + +<p> +Ghostscript connects to these platform facilities through a driver-like +interface called the xfont (external font) interface. Current xfont +implementations are associated directly with device drivers; in a future +release, Ghostscript may separate them, so that (for example) it will be +possible to use the platform rasterizer when writing to a file. + +<p> +Please note that from this point, this file is likely to be useful only +to a small number of Ghostscript porters and implementors. + +<hr> + +<h2><a name="Types"></a>Types</h2> + +<table cellpadding=0 cellspacing=0> +<tr> <th valign=bottom align=left>Type + <td> + <th valign=bottom align=left>Declared /<br>defined in + <td> + <th valign=bottom align=left>Represents +<tr> <td colspan=5><hr> +<tr> <td valign=top><b><tt>gs_char</tt></b> + <td> + <td valign=top><b><tt>gsccode.h</tt></b> + <td> + <td valign=top>A character code that appears in a string. Currently + it is always a single byte, but composite fonts or Unicode may + require it to be wider in the future. +<tr> <td valign=top><b><tt>gs_glyph</tt></b> + <td> + <td valign=top><b><tt>gsccode.h</tt></b> + <td> + <td valign=top>A character name like "period" or "epsilon". From + the xfont implementation's point of view, it is just a handle; + when necessary, Ghostscript provides a + <b><tt>gs_proc_glyph_name_t</tt></b> procedure to + convert it to a string name. +<tr> <td valign=top><b><tt>gs_proc_glyph_name_t</tt></b> + <td> + <td valign=top><b><tt>gsccode.h</tt></b> + <td> + <td valign=top>A procedure that maps a <b><tt>gs_glyph</tt></b> to + its string name; see the <b><tt>char_xglyph</tt></b> procedure. +<tr> <td valign=top><b><tt>gx_xglyph</tt></b> + <td> + <td valign=top><b><tt>gsxfont.h</tt></b> + <td> + <td valign=top>A character or glyph code that can be used with a + specific platform font. Normally it will be a character code + that the implementation of <b><tt>render_char</tt></b> will + turn into a 1-character string and give to the platform's + "display string" operation. +<tr> <td valign=top><b><tt>gx_xfont_procs</tt></b> + <td> + <td valign=top><b><tt>gsxfont.h</tt></b>, <b><tt>gxxfont.h</tt></b> + <td> + <td valign=top>The xfont analogue of + <b><tt>gx_device_procs</tt></b>, the type of the + procedure record that defines an xfont implementation. +<tr> <td valign=top><b><tt>gx_xfont</tt></b> + <td> + <td valign=top><b><tt>gsxfont.h</tt></b>, <b><tt>gxxfont.h</tt></b> + <td> + <td valign=top>The gxfont analogue of <b><tt>gx_device</tt></b>, + the type of the basic structure for an xfont. +<tr> <td valign=top>(<b><tt>encoding_index</tt></b>) + <td> + <td> + <td> + <td valign=top>Not really a type, although it probably should be: + an <b><tt>int</tt></b> used to indicate the + <b><tt>Encoding</tt></b> used by a font. Defined values are + <dl compact> + <dt>0<dd><b><tt>StandardEncoding</tt></b> + <dt>1<dd><b><tt>ISOLatin1Encoding</tt></b> + <dt>2<dd><b><tt>SymbolEncoding</tt></b> + <dt>3<dd><b><tt>DingbatsEncoding</tt></b> + <dt>-1<dd>Other encoding + </dl> +</table> + +<hr> + +<h2><a name="Implementation_procedures"></a>Implementation +procedures</h2> + +<p> +All the procedures that return <b><tt>int</tt></b> results return 0 on +success, or an appropriate negative error code for error conditions; these +error codes are defined in <b><tt>gserrors.h</tt></b>. The relevant ones +are the same as for <a href="Drivers.htm">drivers</a>, and as with drivers, +if an implementation procedure returns an error, it should use the +<b><tt>return_error</tt></b> macro -- defined in <b><tt>gx.h</tt></b>, +which is automatically included by <b><tt>gdevprn.h</tt></b> but not by +<b><tt>gserrors.h</tt></b> -- rather than a simple <b><tt>return</tt></b> +statement, for instance + +<blockquote> +<b><tt>return_error(gs_error_VMerror);</tt></b> +</blockquote> + +<h2><a name="Font_level_procedures"></a>Font-level procedures</h2> + +<h3><a name="lookup_font"></a><b><tt>lookup_font</tt></b></h3> + +<dl> +<dt><b><tt>gx_xfont *(*lookup_font)(P7(gx_device *dev, +const byte *fname, uint len, int encoding_index, +const gs_uid *puid, const gs_matrix *pmat, +const gs_memory_procs *mprocs))</tt></b> +<dd>Look up a font name, <b><tt>UniqueID</tt></b>, and matrix, and return +an xfont, or <b><tt>NULL</tt></b> if no suitable xfont exists. Use +<b><tt>mprocs</tt></b> to allocate the xfont and any subsidiary data +structures. The matrix is the <b><tt>FontMatrix</tt></b> concatenated with +the CTM, so (roughly speaking) the font size in pixels is +<b><tt>pmat -> yy</tt></b> × 1000 for a normal +Type 1 font. + +<p> +Note that this is the only implementation procedure that does not take an +xfont * as its first argument. In fact, callers of +<b><tt>lookup_font</tt></b> must use the <b><tt>get_xfont_device</tt></b> +driver procedure to get the correct device to pass as the first argument to +<b><tt>lookup_font</tt></b>. +</dl> + +<h3><a name="char_xglyph"></a><b><tt>char_xglyph</tt></b></h3> + +<dl> +<dt><b><tt>gx_xglyph (*char_xglyph)(P5(gx_xfont *xf, gs_char chr, +int encoding_index, gs_glyph glyph, +gs_proc_glyph_name_t glyph_name))</tt></b> +<dd>Convert a character name to an xglyph code. In the case of +<b><tt>glyphshow</tt></b>, <b><tt>chr</tt></b> may be +<b><tt>gs_no_char</tt></b>; for an ordinary <b><tt>show</tt></b> operation, +if the character code is invalid, <b><tt>glyph</tt></b> may be +<b><tt>gs_no_glyph</tt></b>. +</dl> + +<h3><a name="char_metrics"></a><b><tt>char_metrics</tt></b></h3> + +<dl> +<dt><b><tt>int (*char_metrics)(P5(gx_xfont *xf, gx_xglyph xg, +int wmode, gs_int_point *pwidth, +gs_int_rect *pbbox))</tt></b> +<dd>Get the metrics for a character. If the metrics are unavailable, +return 1. +</dl> + +<h3><a name="render_char"></a><b><tt>render_char</tt></b></h3> + +<dl> +<dt><b><tt>int (*render_char)(P7(gx_xfont *xf, gx_xglyph xg, +gx_device *target, int x, int y, gx_color_index color, +int required))</tt></b> +<dd>Render a character. <em>(x,y)</em> corresponds to the character +origin. The target may be any Ghostscript device. A good implementation +will check whether the target can handle this type of xfont directly (for +instance by checking the target name), and if so, will render the character +directly; otherwise, it will do what has to be done in the general case, +namely, get a bitmap for the character and use the target's +<b><tt>copy_mono</tt></b> operation. If <b><tt>required</tt></b> is false, +the procedure should return an error if the rendering operation would be +expensive, since in this case Ghostscript has already cached the bitmap and +metrics from a previous call with <b><tt>required</tt></b>=true. If the +operation cannot be done, return 1. +</dl> + +<h3><a name="release"></a><b><tt>release</tt></b></h3> + +<dl> +<dt><b><tt>int (*release)(P2(gx_xfont *xf, +const gs_memory_procs *mprocs))</tt></b> +<dd>Release any external resources associated with an xfont. If +<b><tt>mprocs</tt></b> is not <b><tt>NULL</tt></b>, also free any storage +allocated by <b><tt>lookup_font</tt></b> (including the xfont itself). +</dl> + +<!-- [2.0 end contents] ==================================================== --> + +<!-- [3.0 begin visible trailer] =========================================== --> +<hr> + +<p> +<small>Copyright © 1996, 1997, 1998 Aladdin Enterprises. All +rights reserved.</small> + +<p> +This software is provided AS-IS with no warranty, either express or +implied. + +This software is distributed under license and may not be copied, +modified or distributed except as expressly authorized under the terms +of the license contained in the file LICENSE in this distribution. + +<p> +<small>Ghostscript version 7.07, 17 May 2003 + +<!-- [3.0 end visible trailer] ============================================= --> + +</body> +</html> diff --git a/Master/xemtex/doc/ghostscript/examples/alphabet.ps b/Master/xemtex/doc/ghostscript/examples/alphabet.ps new file mode 100644 index 00000000000..95137585b25 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/alphabet.ps @@ -0,0 +1,62 @@ +%!
+% Check for command line parameters:
+% Name, FirstSize, Ratio, NumSizes, UseOutline.
+
+/alphabetsave save def % prevent left over effects
+
+/FontName where { pop } { /FontName (Palatino-Italic) def } ifelse
+/FirstSize where { pop } { /FirstSize 15 def } ifelse
+/Ratio where { pop } { /Ratio 1.6 def } ifelse
+/NumSizes where { pop } { /NumSizes 3 def } ifelse
+/UseOutline where { pop } { /UseOutline false def } ifelse
+
+/Strings FirstSize 20 gt
+ { [
+ (ABCDEFGHIJ) (KLMNOPQR) (STUVWXYZ)
+ (abcdefghijklm) (nopqrstuvwxyz)
+ (0123456789<=>) (:;?@ !"#$%&')
+ (\(\)*+,-./[\\]^_) (`{|}~)
+ ] }
+ { [
+ (ABCDEFGHIJKLMNOPQRSTUVWXYZ)
+ (abcdefghijklmnopqrstuvwxyz)
+ (0123456789<=>:;?@ !"#$%&')
+ (\(\)*+,-./ [\\]^_ `{|}~)
+ ] }
+ifelse def
+
+/sshow
+ { gsave UseOutline
+ { { gsave ( ) dup 0 4 -1 roll put
+ false charpath pathbbox 0 setlinewidth stroke grestore
+ pop 8 add currentpoint exch pop moveto pop
+ } forall
+ }
+ { 2 0 3 -1 roll ashow }
+ ifelse grestore
+ } def
+
+FontName findfont FirstSize scalefont setfont
+
+clippath pathbbox /top exch def pop pop pop newpath
+10 10 moveto
+NumSizes
+ { gsave nulldevice (Q) false charpath pathbbox grestore
+ exch pop exch sub exch pop 1.25 mul /height exch def
+ Strings
+ { currentpoint exch pop top height 3 mul sub gt
+ { showpage 10 10 height sub moveto
+ }
+ if
+ dup sshow
+ UseOutline not
+ { 0 height rmoveto gsave 0.01 rotate sshow grestore }
+ if
+ 0 height rmoveto
+ } forall
+ Ratio dup scale
+ } repeat
+showpage
+
+clear cleardictstack
+alphabetsave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/annots.pdf b/Master/xemtex/doc/ghostscript/examples/annots.pdf Binary files differnew file mode 100644 index 00000000000..467926df379 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/annots.pdf diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_ac1.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_ac1.ps new file mode 100644 index 00000000000..bb038b640e5 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_ac1.ps @@ -0,0 +1,221 @@ +%!PS-Adobe-3.0
+%%Title: Adobe-CNS1 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=MOESung-Regular] [-daffix [-sAF=MSung-Light]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_ac1.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-CNS1 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (MKai-Medium) unknowndef
+/affix false unknowndef
+%/AF (MOESung-Regular) unknowndef
+%/AF (MOEKai-Regular) unknowndef
+/AF (MSung-Light) unknowndef
+%/AF (MHei-Medium) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch /CIDFont findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ %[0 14098] % Adobe-CNS1-0
+ %[0 17407] % Adobe-CNS1-0,1
+ %[0 17600] % Adobe-CNS1-0,1,2
+ %[0 18845] % Adobe-CNS1-0,1,2,3
+ [0 18961] % Adobe-CNS1-0,1,2,3,4
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_ag1.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_ag1.ps new file mode 100644 index 00000000000..26d8178959f --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_ag1.ps @@ -0,0 +1,218 @@ +%!PS-Adobe-3.0
+%%Title: Adobe-GB1 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=BousungEG-Light-GB] [-daffix [-sAF=STSong-Light]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_ag1.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-GB1 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (STHeiti-Regular) unknowndef
+/affix false unknowndef
+/AF (STSong-Light) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch *CIDFont*findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch *findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ %[0 7716] % Adobe-GB1-0
+ %[0 9896] % Adobe-GB1-0,1
+ %[0 22126] % Adobe-GB1-0,1,2
+ %[0 22352] % Adobe-GB1-0,1,2,3
+ [0 29063] % Adobe-GB1-0,1,2,3,4
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_aj1.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_aj1.ps new file mode 100644 index 00000000000..9dd2f4d3d5c --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_aj1.ps @@ -0,0 +1,218 @@ +%!PS-Adobe-3.0
+%%Title: Adobe-Japan1 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=WadaMin-Regular] [-daffix [-sAF=HeiseiMin-W3]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_aj1.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-Japan1 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (HeiseiKakuGo-W5) unknowndef
+/affix false unknowndef
+/AF (HeiseiMin-W3) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch *CIDFont*findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch *findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ [0 8283] % Adobe-Japan1-0
+ [8284 8358] % Adobe-Japan1-1
+ [8359 8719] % Adobe-Japan1-2
+ [8720 9353] % Adobe-Japan1-3
+ [9354 15443] % Adobe-Japan1-4
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_aj2.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_aj2.ps new file mode 100644 index 00000000000..7e6019eb83b --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_aj2.ps @@ -0,0 +1,214 @@ +%!PS-Adobe-3.0
+%%Title: Adobe-Japan2 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=HeiseiMin-W3H] [-daffix [-sAF=WadaMin-RegularH]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_aj2.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-Japan2 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (WadaMin-RegularH) unknowndef
+/affix false unknowndef
+/AF (HeiseiMin-W3H) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch *CIDFont*findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch *findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ [0 6067] % Adobe-Japan2-0
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/all_ak1.ps b/Master/xemtex/doc/ghostscript/examples/cjk/all_ak1.ps new file mode 100644 index 00000000000..b3e138e7381 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/all_ak1.ps @@ -0,0 +1,215 @@ +%!PS-Adobe-3.0
+%%Title: Adobe-Korea1 CID-Keyed Fonts Character List
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%Version: 1.0
+%
+% Usage:
+% gs [-sF=MunhwaGothic-Regular] [-daffix [-sAF=HYGoThic-Medium]] \
+% [-dglyphshow- [-sI=Identity-H]] [-ddescent=200] all_ak1.ps
+%
+%%DocumentMedia: A4 595 842 0 white ()
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/*CIDFont*findresource {
+ dup /CIDFont resourcestatus { pop pop /CIDFont findresource } {
+ notice*page begin
+ *open
+ (Error in /CIDFont findresource: ) *echo-n dup *echo
+ *close
+ end
+ /CIDFont findresource
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/title (Adobe-Korea1 CID-Keyed Fonts Character List) def
+/PW 595 def
+/PH 842 def
+/LM 78 def
+/TM 130 def
+/RM 47 def
+/BM 76 def
+/NH 10 def
+/NV 12 def
+/RW PW LM RM add sub NH div def
+/RH PH TM BM add sub NV div def
+/FS RW 3 mul 4 div def
+/AFS RW 1 mul 4 div def
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+/F (HYGoThic-Medium) unknowndef
+/affix false unknowndef
+/AF (HYSMyeongJo-Medium) unknowndef
+/descent 130 unknowndef
+/glyphshow- false unknowndef
+/fss { exch *CIDFont*findresource exch scalefont setfont } bind def
+/concats { % [str ...] concats str
+ () exch dup length 1 sub -1 0 {
+ 1 index exch get dup type /stringtype ne { dup length string cvs } if
+ 3 -1 roll exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval exch
+ } for pop
+} bind def
+/composefontname { % font cmap composefontname font--cmap
+ [ 2 index (--) 3 index ] concats dup 3 -1 roll [ 5 -1 roll ] composefont pop
+} bind def
+glyphshow- {
+ /I (Identity-H) unknowndef
+ /F F I composefontname def
+ affix { /AF AF I composefontname def } if
+ /fss { exch *findfont exch scalefont setfont } bind def
+ /s 2 string def
+} if
+/glyphframe { % h oldx glyphframe -
+ gsave 0 setlinewidth
+ currentpoint pop sub exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/box { % llx lly urx ury box -
+ 3 index 3 index moveto exch 4 -1 roll sub 3 1 roll exch sub
+ currentpoint 4 -2 roll rectstroke
+} bind def
+/charframe { % h string charframe -
+ gsave 0 setlinewidth
+ stringwidth pop exch dup 0 exch descent mul 1000 div neg rmoveto
+ currentpoint 4 -2 roll rectstroke grestore
+} bind def
+/pathframe { % string pathframe -
+ gsave 0 setlinewidth
+ true charpath flattenpath pathbbox box grestore
+} bind def
+/np {
+ /Helvetica findfont 11 scalefont setfont
+ LM BM 11 2 mul sub moveto title show ( - ) show F show
+ affix {
+ gsave /Helvetica findfont 5 scalefont setfont ( and ) show AF show grestore
+ } if
+ PW RM sub BM 11 2 mul sub moveto p 3 string cvs show
+ /p p 1 add def
+ showpage
+ /x LM def
+ /y PH TM sub def
+} bind def
+/nb {
+ /x x RW add def
+ x PW RM sub ge {
+ /x LM def
+ /y y RH sub def
+ y BM le {
+ np
+ /y PH TM sub def
+ } if
+ } if
+} bind def
+%%EndProlog
+/x LM def
+/y PH TM sub def
+/p 1 def
+[
+ [0 9332] % Adobe-Korea1-0
+ [9333 18351] % Adobe-Korea1-1,2
+] {
+ cvx exec 1 exch {
+ /id exch def
+ F FS fss
+ x y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ FS x glyphframe
+ } {
+ s 0 id 256 idiv put s 1 id 256 mod put
+ FS s charframe
+ s pathframe
+ s show
+ } ifelse
+ affix {
+ AF AFS fss
+ x FS add y FS sub moveto
+ glyphshow- not {
+ id glyphshow
+ AFS x FS add glyphframe
+ } {
+ AFS s charframe
+ s pathframe
+ s show
+ } ifelse
+ } if
+ %
+ /Times-Roman findfont 7 scalefont setfont
+ x y FS sub FS descent mul 1000 div sub 7 sub moveto
+ id 5 string cvs show
+ nb
+ } for
+ np
+} forall
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ac.ps b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ac.ps new file mode 100644 index 00000000000..dfc6230bd93 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ac.ps @@ -0,0 +1,120 @@ +%!PS-Adobe-3.0
+%%Title: chinese-big5 encoding
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%BoundingBox: 30 150 530 650
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+%%EndProlog
+/MSung-Light--B5-V *findfont 25 scalefont setfont
+500 625 moveto
+(ÆFµ§¤¤¤åÁcÅé¦rª½¼g¦L¨ê) show
+/MSung-Light--B5-H *findfont 25 scalefont setfont
+50 600 moveto
+(ÆFµ§ Ghostscript) show
+50 550 moveto
+(¤¤¤åÁcÅé¦r Traditional Chinese) show
+50 500 moveto
+(¾î¼g horizontal writing) show
+50 450 moveto
+(¦L¨ê Print) show
+%
+/MSung-Light--B5-V *findfont [ 1 .3 0 1 0 0 ] makefont 20 scalefont setfont
+100 275 moveto 20 2 div 0 rmoveto
+(±×Åé) dup stringwidth neg rmoveto show
+/MSung-Light--B5-H *findfont [ 1 0 .3 1 0 0 ] makefont 20 scalefont setfont
+100 250 moveto
+(±×Åé Italic transformation) show
+%
+/MSung-Light--B5-H *findfont 20 scalefont setfont
+150 400 moveto
+(Sung Typeface §ºÅé) show
+/MSung-Medium--B5-H *findfont 20 scalefont setfont
+150 375 moveto
+(Sung Medium Typeface ¤¤§ºÅé) show
+/MHei-Medium--B5-H *findfont 20 scalefont setfont
+150 350 moveto
+(Hei Typeface ¶ÂÅé) show
+/MKai-Medium--B5-H *findfont 20 scalefont setfont
+150 325 moveto
+(Kai Typeface ´{Åé) show
+%
+/Times-Roman findfont 13 scalefont setfont
+50 200 moveto
+(* Chinese translation of "Ghostscript" is merely associative \
+characters of these meanings.) show
+50 200 13 sub moveto
+(In Traditional Chinese articles, customarily we use just \
+"Ghostscript" as it is.) show
+showpage
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ag.ps b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ag.ps new file mode 100644 index 00000000000..02568b64f8d --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ag.ps @@ -0,0 +1,120 @@ +%!PS-Adobe-3.0
+%%Title: euc-china encoding
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%BoundingBox: 30 150 530 650
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+%%EndProlog
+/STSong-Light--GB-EUC-V *findfont 25 scalefont setfont
+500 625 moveto
+(Áé±ÊÖÐÎļòÌå×Öֱдӡˢ) show
+/STSong-Light--GB-EUC-H *findfont 25 scalefont setfont
+50 600 moveto
+(Áé±Ê Ghostscript) show
+50 550 moveto
+(ÖÐÎļòÌå×Ö Simplified Chinese) show
+50 500 moveto
+(ºáд horizontal writing) show
+50 450 moveto
+(Ó¡Ë¢ Print) show
+%
+/STSong-Light--GB-EUC-V *findfont [ 1 .3 0 1 0 0 ] makefont 20 scalefont setfont
+100 275 moveto 20 2 div 0 rmoveto
+(бÌå) dup stringwidth neg rmoveto show
+/STSong-Light--GB-EUC-H *findfont [ 1 0 .3 1 0 0 ] makefont 20 scalefont setfont
+100 250 moveto
+(бÌå Italic transformation) show
+%
+/STSong-Light--GB-EUC-H *findfont 20 scalefont setfont
+150 400 moveto
+(Song Typeface ËÎÌå) show
+/STFangsong-Light--GB-EUC-H *findfont 20 scalefont setfont
+150 375 moveto
+(Fangsong Typeface ·ÂËÎÌå) show
+/STHeiti-Regular--GB-EUC-H *findfont 20 scalefont setfont
+150 350 moveto
+(Hei Typeface ºÚÌå) show
+/STKaiti-Regular--GB-EUC-H *findfont 20 scalefont setfont
+150 325 moveto
+(Kai Typeface ¿«Ìå) show
+%
+/Times-Roman findfont 13 scalefont setfont
+50 200 moveto
+(* Chinese translation of "Ghostscript" is merely associative \
+characters of these meanings.) show
+50 200 13 sub moveto
+(In Simplified Chinese articles, customarily we use just "Ghostscript" \
+as it is.) show
+showpage
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_aj.ps b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_aj.ps new file mode 100644 index 00000000000..42d98bcdbb1 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_aj.ps @@ -0,0 +1,114 @@ +%!PS-Adobe-3.0
+%%Title: japanese-shift-jis encoding
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%BoundingBox: 30 150 530 650
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+%%EndProlog
+/Ryumin-Light-RKSJ-V *findfont 25 scalefont setfont
+500 625 moveto
+(—ì•M “ú–{Œê c‘‚« ˆóü) show
+/Ryumin-Light-RKSJ-H *findfont 25 scalefont setfont
+50 600 moveto
+(—ì•M Ghostscript) show
+50 550 moveto
+(“ú–{Œê Japanese) show
+50 500 moveto
+(‰¡‘‚« horizontal writing) show
+50 450 moveto
+(ˆóü Print) show
+%
+/Ryumin-Light-RKSJ-V *findfont [ 1 .3 0 1 0 0 ] makefont 20 scalefont setfont
+100 275 moveto 20 2 div 0 rmoveto
+(ŽÎ‘Ì) dup stringwidth neg rmoveto show
+/Ryumin-Light-RKSJ-H *findfont [ 1 0 .3 1 0 0 ] makefont 20 scalefont setfont
+100 250 moveto
+(ŽÎ‘Ì Italic transformation) show
+%
+/Ryumin-Light-RKSJ-H *findfont 20 scalefont setfont
+150 400 moveto
+(Mincho Typeface –¾’©‘Ì) show
+/GothicBBB-Medium-RKSJ-H *findfont 20 scalefont setfont
+150 375 moveto
+(Gothic Typeface ƒSƒVƒbƒN‘Ì) show
+%
+/Times-Roman findfont 13 scalefont setfont
+50 200 moveto
+(* Japanese translation of "Ghostscript" is merely associative \
+characters of these meanings.) show
+50 200 13 sub moveto
+(In Japanese articles, customarily we use just "Ghostscript" as it \
+is.) show
+showpage
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ak.ps b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ak.ps new file mode 100644 index 00000000000..78ce81876b2 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/gscjk_ak.ps @@ -0,0 +1,116 @@ +%!PS-Adobe-3.0
+%%Title: euc-korea encoding
+%%Creator: Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%Copyright: (C) 2001 Taiji Yamada and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU General Public License. See the file COPYING
+%%+ for more information.
+%%BoundingBox: 30 150 530 650
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+%%EndProlog
+/HYSMyeongJo-Medium--KSC-EUC-V *findfont 25 scalefont setfont
+500 625 moveto
+(ÖÄù¶ Çѱ¹¾î ¼¼·Î¾²±â Àμâ) show
+/HYSMyeongJo-Medium--KSC-EUC-H *findfont 25 scalefont setfont
+50 600 moveto
+(ÖÄù¶ Ghostscript) show
+50 550 moveto
+(Çѱ¹¾î Korean) show
+50 500 moveto
+(°¡·Î¾²±â horizontal writing) show
+50 450 moveto
+(Àμâ Print) show
+%
+/HYSMyeongJo-Medium--KSC-EUC-V *findfont [ 1 .3 0 1 0 0 ] makefont 20 scalefont setfont
+100 275 moveto 20 2 div 0 rmoveto
+(±â¿ïÀÓ²Ã) dup stringwidth neg rmoveto show
+/HYSMyeongJo-Medium--KSC-EUC-H *findfont [ 1 0 .3 1 0 0 ] makefont 20 scalefont setfont
+100 250 moveto
+(±â¿ïÀӲà Italic transformation) show
+%
+/HYSMyeongJo-Medium--KSC-EUC-H *findfont 20 scalefont setfont
+150 400 moveto
+(MyeongJo Typeface ¸íÁ¶) show
+/HYGoThic-Medium--KSC-EUC-H *findfont 20 scalefont setfont
+150 375 moveto
+(Gothic Typeface °íµñ) show
+/HYRGoThic-Medium--KSC-EUC-H *findfont 20 scalefont setfont
+150 350 moveto
+(Rounded Gothic Typeface µÕ±Ù°íµñ) show
+%
+/Times-Roman findfont 13 scalefont setfont
+50 200 moveto
+(* Korean translation of "Ghostscript" is merely associative \
+characters of these meanings.) show
+50 200 13 sub moveto
+(In Korean articles, customarily we use just "Ghostscript" as it is.) show
+showpage
+%%Trailer
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/cjk/iso2022.ps b/Master/xemtex/doc/ghostscript/examples/cjk/iso2022.ps new file mode 100644 index 00000000000..9edb39bd6c5 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/cjk/iso2022.ps @@ -0,0 +1,1256 @@ +%!PS-Adobe-3.0
+%%Creator: tops by Taiji Yamada <taiji@aihara.co.jp>
+%%Copyright: 2001 Taiji Yamada <taiji@aihara.co.jp> and gs-cjk project
+%%+ This script is part of GNU Ghostscript and is distributed under
+%%+ the terms of the GNU GPL. See the file COPYING for more information.
+%%+ It is also part of tops, a text filter into PostScript for various
+%%+ languages. To get it, visit http://www.aihara.co.jp/~taiji/tops/#tops
+%%DocumentData: Clean7Bit
+%%DocumentMedia: A4 595 842 0 white ()
+%%Extensions: Composite
+%%Orientation: Portrait
+%%Title: iso-2022-7bit - Emacs/Mule editable PostScript file
+%%Version: 1.0
+%
+% Usage:
+% gs [-dverttext] iso2022.ps
+%
+%%EndComments
+%%BeginProlog
+
+/*gs-cjk (\
+------------------------------------------------------------------------\n\
+This is a script to test CJK fonts such as CID-keyed fonts.\n\
+If you have not done CID-keyed fonts installation and definitions at\n\
+/Resource/CMap and CIDFnmap or /Resource/CIDFont of ghostscript, then\n\
+this script can't work correctly.\n\
+For details, please see README at http://www.gyve.org/gs-cjk/supplement.\n\
+
+If you throw this script into a printer, it requires PostScript 3\n\
+printer and CID-keyed fonts specified in this script.\n\
+------------------------------------------------------------------------\n) def
+
+/notice*stdout 4 dict begin
+ /*open {} def /*echo-n { =only } def /*echo { = } def /*close { flush } def
+ currentdict
+end def
+
+/notice*page 5 dict begin
+ /*y 750 def
+ /*open {
+ gsave initmatrix /Courier findfont 11 scalefont setfont 50 *y moveto
+ *y 750 eq {
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ } if
+ } def
+ /*echo-n { dup type /stringtype ne { dup length string cvs } if show } def
+ /*echo { *echo-n /*y *y 11 sub def 50 *y moveto } def
+ /*close { grestore } def
+ currentdict
+end def
+
+/greeting*gs-cjk {
+ product (Ghostscript) search not { pop } { pop pop pop QUIET not {
+ notice*stdout begin
+ *open
+ *gs-cjk { (\n) search { *echo } { *echo-n exit } ifelse pop } loop
+ *close
+ end
+ } if } ifelse
+} bind def
+greeting*gs-cjk
+
+/*findfont {
+ dup /Font resourcestatus { pop pop findfont } {
+ notice*page begin
+ *open
+ (Error in findfont: ) *echo-n dup *echo
+ *close
+ end
+ findfont
+ } ifelse
+} bind def
+
+/orighandleerror errordict /handleerror get def
+errordict begin
+ /handleerror {
+ notice*page begin errordict begin $error begin
+ *open
+ (Error of ) *echo-n errorname dup length string cvs *echo
+ *close
+ showpage
+ end end end
+ orighandleerror
+ } bind def
+end
+
+/unknowndef { exch dup where { pop pop pop } { exch def } ifelse } bind def
+
+/ISOLatin1Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin1Encoding)
+%%EndComments
+/ISOLatin1Encoding [ % iso-8859-1
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/exclamdown/cent/sterling/currency/yen/brokenbar/section
+/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
+/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+% 0xc0
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+% 0xe0
+/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin2Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin2Encoding)
+%%EndComments
+/ISOLatin2Encoding [ % iso-8859-2
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/Aogonek/breve/Lslash/currency/Lcaron/Sacute/section
+/dieresis/Scaron/Scedilla/Tcaron/Zacute/hyphen/Zcaron/Zdotaccent
+/degree/aogonek/ogonek/lslash/acute/lcaron/sacute/caron
+/cedilla/scaron/scedilla/tcaron/zacute/hungarumlaut/zcaron/zdotaccent
+% 0xc0
+/Racute/Aacute/Acircumflex/Abreve/Adieresis/Lacute/Cacute/Ccedilla
+/Ccaron/Eacute/Eogonek/Edieresis/Ecaron/Iacute/Icircumflex/Dcaron
+/Dcroat/Nacute/Ncaron/Oacute/Ocircumflex/Ohungarumlaut/Odieresis/multiply
+/Rcaron/Uring/Uacute/Uhungarumlaut/Udieresis/Yacute/Tcommaaccent/germandbls
+% 0xe0
+/racute/aacute/acircumflex/abreve/adieresis/lacute/cacute/ccedilla
+/ccaron/eacute/eogonek/edieresis/ecaron/iacute/icircumflex/dcaron
+/dcroat/nacute/ncaron/oacute/ocircumflex/ohungarumlaut/odieresis/divide
+/rcaron/uring/uacute/uhungarumlaut/udieresis/yacute/tcommaaccent/dotaccent
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin3Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin3Encoding)
+%%EndComments
+/ISOLatin3Encoding [ % iso-8859-3
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/Hbar/breve/sterling/currency/.notdef/Hcircumflex/section
+/dieresis/Idotaccent/Scedilla/Gbreve/Jcircumflex/hyphen/.notdef/Zdotaccent
+/degree/hbar/twosuperior/threesuperior/acute/mu/hcircumflex/periodcentered
+/cedilla/dotlessi/scedilla/gbreve/jcircumflex/onehalf/.notdef/zdotaccent
+% 0xc0
+/Agrave/Aacute/Acircumflex/.notdef/Adieresis/Cdotaccent/Ccircumflex/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/.notdef/Ntilde/Ograve/Oacute/Ocircumflex/Gdotaccent/Odieresis/multiply
+/Gcircumflex/Ugrave/Uacute/Ucircumflex/Udieresis/Ubreve/Scircumflex/germandbls
+% 0xe0
+/agrave/aacute/acircumflex/.notdef/adieresis/cdotaccent/ccircumflex/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/.notdef/ntilde/ograve/oacute/ocircumflex/gdotaccent/odieresis/divide
+/gcircumflex/ugrave/uacute/ucircumflex/udieresis/ubreve/scircumflex/dotaccent
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin4Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin4Encoding)
+%%EndComments
+/ISOLatin4Encoding [ % iso-8859-4
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/Aogonek/kgreenlandic/Rcommaaccent/currency/Itilde/Lcommaaccent/section
+/dieresis/Scaron/Emacron/Gcommaaccent/Tbar/hyphen/Zcaron/macron
+/degree/aogonek/ogonek/rcommaaccent/acute/itilde/lcommaaccent/caron
+/cedilla/scaron/emacron/gcommaaccent/tbar/Eng/zcaron/eng
+% 0xc0
+/Amacron/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Iogonek
+/Ccaron/Eacute/Eogonek/Edieresis/Edotaccent/Iacute/Icircumflex/Imacron
+/Dcroat/Ncommaaccent/Omacron/Kcommaaccent/Ocircumflex/Otilde/Odieresis/multiply
+/Oslash/Uogonek/Uacute/Ucircumflex/Udieresis/Utilde/Umacron/germandbls
+% 0xe0
+/amacron/aacute/acircumflex/atilde/adieresis/aring/ae/iogonek
+/ccaron/eacute/eogonek/edieresis/edotaccent/iacute/icircumflex/imacron
+/dcroat/ncommaaccent/omacron/kcommaaccent/ocircumflex/otilde/odieresis/divide
+/oslash/uogonek/uacute/ucircumflex/udieresis/utilde/umacron/dotaccent
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOCyrillicEncoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOCyrillicEncoding)
+%%EndComments
+/ISOCyrillicEncoding [ % iso-8859-5
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/afii10023/afii10051/afii10052/afii10053/afii10054/afii10055/afii10056
+/afii10057/afii10058/afii10059/afii10060/afii10061/hyphen/afii10062/afii10145
+/afii10017/afii10018/afii10019/afii10020/afii10021/afii10022/afii10024/afii10025
+/afii10026/afii10027/afii10028/afii10029/afii10030/afii10031/afii10032/afii10033
+% 0xc0
+/afii10034/afii10035/afii10036/afii10037/afii10038/afii10039/afii10040/afii10041
+/afii10042/afii10043/afii10044/afii10045/afii10046/afii10047/afii10048/afii10049
+/afii10065/afii10066/afii10067/afii10068/afii10069/afii10070/afii10072/afii10073
+/afii10074/afii10075/afii10076/afii10077/afii10078/afii10079/afii10080/afii10081
+% 0xe0
+/afii10082/afii10083/afii10084/afii10085/afii10086/afii10087/afii10088/afii10089
+/afii10090/afii10091/afii10092/afii10093/afii10094/afii10095/afii10096/afii10097
+/afii61352/afii10071/afii10099/afii10100/afii10101/afii10102/afii10103/afii10104
+/afii10105/afii10106/afii10107/afii10108/afii10109/section/afii10110/afii10193
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOGreekEncoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOGreekEncoding)
+%%EndComments
+/ISOGreekEncoding [ % iso-8859-7
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/quoteleft/quoteright/sterling/.notdef/.notdef/brokenbar/section
+/dieresis/copyright/.notdef/guillemotleft/logicalnot/hyphen/.notdef/afii00208
+/degree/plusminus/twosuperior/threesuperior/tonos/dieresistonos/Alphatonos/periodcentered
+/Epsilontonos/Etatonos/Iotatonos/guillemotright/Omicrontonos/onehalf/Upsilontonos/Omegatonos
+% 0xc0
+/iotadieresistonos/Alpha/Beta/Gamma/Delta/Epsilon/Zeta/Eta
+/Theta/Iota/Kappa/Lambda/Mu/Nu/Xi/Omicron
+/Pi/Rho/.notdef/Sigma/Tau/Upsilon/Phi/Chi
+/Psi/Omega/Iotadieresis/Upsilondieresis/alphatonos/epsilontonos/etatonos/iotatonos
+% 0xe0
+/upsilondieresistonos/alpha/beta/gamma/delta/epsilon/zeta/eta
+/theta/iota/kappa/lambda/mu/nu/xi/omicron
+/pi/rho/sigma1/sigma/tau/upsilon/phi/chi
+/psi/omega/iotadieresis/upsilondieresis/omicrontonos/upsilontonos/omegatonos/.notdef
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin5Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin5Encoding)
+%%EndComments
+/ISOLatin5Encoding [ % iso-8859-9
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/exclamdown/cent/sterling/currency/yen/brokenbar/section
+/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
+/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered
+/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown
+% 0xc0
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Gbreve/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Idotaccent/Scedilla/germandbls
+% 0xe0
+/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/gbreve/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+/oslash/ugrave/uacute/ucircumflex/udieresis/dotlessi/scedilla/ydieresis
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin6Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin6Encoding)
+%%EndComments
+/ISOLatin6Encoding [ % iso-8859-10
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/Aogonek/Emacron/Gcommaaccent/Imacron/Itilde/Kcommaaccent/section
+/Lcommaaccent/Dcroat/Scaron/Tbar/Zcaron/hyphen/Umacron/Eng
+/degree/aogonek/emacron/gcommaaccent/imacron/itilde/kcommaaccent/periodcentered
+/lcommaaccent/dcroat/scaron/tbar/zcaron/afii00208/umacron/eng
+% 0xc0
+/Amacron/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Iogonek
+/Ccaron/Eacute/Eogonek/Edieresis/Edotaccent/Iacute/Icircumflex/Idieresis
+/Eth/Ncommaaccent/Omacron/Oacute/Ocircumflex/Otilde/Odieresis/Utilde
+/Oslash/Uogonek/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+% 0xe0
+/amacron/aacute/acircumflex/atilde/adieresis/aring/ae/iogonek
+/ccaron/eacute/eogonek/edieresis/edotaccent/iacute/icircumflex/idieresis
+/eth/ncommaaccent/omacron/oacute/ocircumflex/otilde/odieresis/utilde
+/oslash/uogonek/uacute/ucircumflex/udieresis/yacute/thorn/kgreenlandic
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin7Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin7Encoding)
+%%EndComments
+/ISOLatin7Encoding [ % iso-8859-13
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/quotedblright/cent/sterling/currency/quotedblbase/brokenbar/section
+/Oslash/copyright/Rcommaaccent/guillemotleft/logicalnot/hyphen/registered/AE
+/degree/plusminus/twosuperior/threesuperior/quotedblleft/mu/paragraph/periodcentered
+/oslash/onesuperior/rcommaaccent/guillemotright/onequarter/onehalf/threequarters/ae
+% 0xc0
+/Aogonek/Iogonek/Amacron/Cacute/Adieresis/Aring/Eogonek/Emacron
+/Ccaron/Eacute/Zacute/Edotaccent/Gcommaaccent/Kcommaaccent/Imacron/Lcommaaccent
+/Scaron/Nacute/Ncommaaccent/Oacute/Omacron/Otilde/Odieresis/multiply
+/Uogonek/Lslash/Sacute/Umacron/Udieresis/Zdotaccent/Zcaron/germandbls
+% 0xe0
+/aogonek/iogonek/amacron/cacute/adieresis/aring/eogonek/emacron
+/ccaron/eacute/zacute/edotaccent/gcommaaccent/kcommaaccent/imacron/lcommaaccent
+/scaron/nacute/ncommaaccent/oacute/omacron/otilde/odieresis/divide
+/uogonek/lslash/sacute/umacron/udieresis/zdotaccent/zcaron/quoteright
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/ISOLatin9Encoding /Encoding resourcestatus { pop pop } {
+%!PS-Adobe-3.0 Resource-Encoding
+%%BeginResource: Encoding (ISOLatin9Encoding)
+%%EndComments
+/ISOLatin9Encoding [ % iso-8859-15
+% 0x00
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0x20
+/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
+/parenleft/parenright/asterisk/plus/comma/minus/period/slash
+/zero/one/two/three/four/five/six/seven
+/eight/nine/colon/semicolon/less/equal/greater/question
+% 0x40
+/at/A/B/C/D/E/F/G
+/H/I/J/K/L/M/N/O
+/P/Q/R/S/T/U/V/W
+/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore
+% 0x60
+/grave/a/b/c/d/e/f/g
+/h/i/j/k/l/m/n/o
+/p/q/r/s/t/u/v/w
+/x/y/z/braceleft/bar/braceright/asciitilde/.notdef
+% 0x80
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
+% 0xa0
+/space/exclamdown/cent/sterling/Euro/yen/Scaron/section
+/scaron/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron
+/degree/plusminus/twosuperior/threesuperior/Zcaron/mu/paragraph/periodcentered
+/zcaron/onesuperior/ordmasculine/guillemotright/OE/oe/Ydieresis/questiondown
+% 0xc0
+/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
+/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+% 0xe0
+/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
+/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
+/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
+/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+] /Encoding defineresource pop
+%%EndResource
+} ifelse
+
+/reencode-font { % fontname font encoding reencode-font font
+ exch dup type dup /nametype eq exch /stringtype eq or { findfont } if
+ dup length dict begin
+ {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } forall
+ /Encoding exch dup type /nametype eq { /Encoding findresource } if def
+ dup /FontName exch def
+ currentdict
+ end
+ definefont
+} bind def
+
+/vertical-font { % fontname font vertical-font font
+ dup type dup /nametype eq exch /stringtype eq or { *findfont } if
+ dup length 1 add dict begin {
+ 1 index /FontName eq { pop 1 index def } {
+ 1 index /FID ne 2 index /UniqueID ne and { def } { pop pop } ifelse
+ } ifelse
+ } forall /WMode 1 def currentdict end
+ definefont
+} bind def
+
+%
+% fontname [font ...] compose-fontset font
+%
+% References:
+% [1] kanno@jn1jdz.ymt.prug.or.jp, ``jisfont.ps,''
+% in Japanesized Tgif(Tgif-3.0J-p17 JIS patch version), 7 1997.
+%
+/compose-fontset {
+ 12 dict begin
+ /FontType 0 def
+ /FontMatrix matrix def
+ /FontBBox { 0 0 0 0 } def
+ /FMapType 3 def
+ %/EscChar 255 def
+ /FDepVector [
+ 2 index {
+ dup type dup /nametype eq exch /stringtype eq or { *findfont } if
+ dup /WMode known {
+ dup /WMode get /WMode exch def
+ WMode 1 eq {
+ [ 0 1 -1 0 0 .3 ] makefont
+ } if
+ } if
+ } forall
+ ] def
+ /Encoding [ 0 1 4 index length 1 sub {} for ] def
+ pop
+ dup /FontName exch def
+ currentdict
+ end
+ definefont
+} bind def
+
+/decode-mule-big5 { % R1 R2 1|2 decode-mule-big5 R1 R2
+ 2 dict begin
+ 3 1 roll
+ /r2 exch def
+ /r1 exch def
+ /r2 r1 16#21 sub 94 mul r2 add 16#21 sub def
+ 2 eq { /r2 r2 6280 add def } if
+ /r1 r2 157 idiv 16#a1 add def
+ /r2 r2 157 mod def
+ /r2 r2 r2 16#3f lt { 16#40 } { 16#62 } ifelse add def
+ r1 r2
+ end
+} bind def
+/decode-mule-big5-l1 { % str idx decode-mule-big5-l1 str idx
+ 2 copy get exch 1 add exch 2 index 2 index get
+ 1 decode-mule-big5
+ buffer size 4 -1 roll put /size size 1 add store
+ buffer size 3 -1 roll put /size size 1 add store
+} bind def
+/decode-mule-big5-l2 { % str idx decode-mule-big5-l2 str idx
+ 2 copy get exch 1 add exch 2 index 2 index get
+ 2 decode-mule-big5
+ buffer size 4 -1 roll put /size size 1 add store
+ buffer size 3 -1 roll put /size size 1 add store
+} bind def
+/decode-gl { % str idx decode-gl str idx
+ 2 copy get buffer size 3 -1 roll put
+ /size size 1 add store
+} bind def
+/decode-gr { % str idx decode-gr str idx
+ 2 copy get 16#80 add buffer size 3 -1 roll put
+ /size size 1 add store
+} bind def
+/iso-2022-set [
+ [ (\033\(B) {decode-gl} ] % iso-2022:ascii
+ [ (\033,A) {decode-gr} ] % iso-2022:iso-8859-1,iso-latin1
+ [ (\033,B) {decode-gr} ] % iso-2022:iso-8859-2,iso-latin2
+% [ (\033,C) {decode-gr} ] % iso-2022:iso-8859-3,iso-latin3
+% [ (\033,D) {decode-gr} ] % iso-2022:iso-8859-4,iso-latin4
+% [ (\033,F) {decode-gr} ] % iso-2022:iso-8859-7,iso-greek
+% [ (\033,G) {decode-gr} ] % iso-2022:iso-8859-6,iso-arabic
+% [ (\033,H) {decode-gr} ] % iso-2022:iso-8859-8,iso-hebrew
+% [ (\033,L) {decode-gr} ] % iso-2022:iso-8859-5,iso-cyrillic
+ [ (\033,M) {decode-gr} ] % iso-2022:iso-8859-9,iso-latin5
+% [ (\033,T) {decode-gr} ] % iso-2022:iso-8859-11,iso-thai
+% [ (\033,V) {decode-gr} ] % iso-2022:iso-8859-10,iso-latin6
+ [ (\033\(I) {decode-gl} ] % iso-2022:jis-x-0201-kana
+ [ (\033\(J) {decode-gl} ] % iso-2022:jis-x-0201-roman
+% [ (\033\(T) {decode-gl} ] % iso-2022:gb-1988-roman
+ [ (\033$@) {decode-gl} ] % iso-2022:jis-x-0208-1978
+ [ [ (\033$A) (\033$\(A) ] {decode-gl} ] % iso-2022:gb-2312-1980
+ [ [ (\033$B) (\033$\(B) (\033&@\033$B) ] {decode-gl} ] % iso-2022:jis-x-0208-1983&1990
+ [ (\033$\(C) {decode-gl} ] % iso-2022:ks-x-1001-1992
+ [ (\033$\(D) {decode-gl} ] % iso-2022:jis-x-0212-1990
+ [ (\033$\(?) {decode-gl} ] % iso-2022:gbt-12345-1990,private-iso-gbt
+ [ (\033$\(G) {decode-gl} ] % iso-2022:cns-11643-1992-p1
+ [ (\033$\(H) {decode-gl} ] % iso-2022:cns-11643-1992-p2
+ [ (\033$\(0) {decode-mule-big5-l1} ] % iso-2022:big5,mule-big5
+ [ (\033$\(1) {decode-mule-big5-l2} ] % iso-2022:big5,mule-big5
+] def
+/iso-2022-translate { % str idx iso-2022-translate str idx
+ 2 copy get 16#20 lt {
+ iso-2022-set length 1 sub 0 1 3 -1 roll { % str idx j
+ iso-2022-set 1 index get 0 get dup % str idx j ()|[] ()|[]
+ dup type /stringtype eq { % str idx j () ()
+ dup length 5 index 5 index 3 -1 roll 7 index length 7 index sub
+ 2 copy lt { pop } { exch pop } ifelse
+ getinterval eq % str idx j () true|false
+ } { % str idx j [] []
+ pop () false 3 -1 roll {
+ dup 4 -1 roll pop 3 1 roll
+ dup length 6 index 6 index 3 -1 roll 8 index length 8 index sub
+ 2 copy lt { pop } { exch pop } ifelse
+ getinterval eq or dup { exit } if % str idx j () true|false
+ } forall
+ } ifelse
+ { exch /iso-2022-state exch store length 1 sub add exit } { pop } ifelse
+ pop
+ } for
+ } if
+} bind def
+/iso-2022-show { % str iso-2022-show -
+ 10 dict begin
+ /iso-6429-state null def
+ /iso-2022-state 0 def
+ /iso-2022-current iso-2022-state def
+ /buffer 65535 string def
+ /size 0 def
+ /width 0 def
+ /BoldFont false def /Underscore false def /BackColor 1 def
+ /foldline dup where { pop foldline } { false } ifelse def
+ 0 { % idx {} loop
+ dup 2 index length lt {
+ iso-2022-translate
+ iso-2022-state iso-2022-current ne {
+ buffer size 8#377 put
+ /size size 1 add store
+ buffer size iso-2022-state put
+ /size size 1 add store
+ } {
+ iso-6429-translate
+ iso-6429-state null ne {
+ iso-6429-set iso-6429-state get 1 get exec
+ } {
+ iso-2022-set iso-2022-current get 1 get exec
+ } ifelse
+ } ifelse
+ } {
+ exit
+ } ifelse
+ /iso-2022-current iso-2022-state store
+ 1 add
+ } loop
+ pop pop
+ iflush
+ end
+} bind def
+/ichop { % required for some Adobe-official PostScript interpreters
+ dup length dup 2 sub -2 0 { % str len len-2 -2 0 {} for
+ 2 index 1 index get 8#377 eq % str len idx c(str idx get) 8#377 eq
+ { exch pop } { pop exit } ifelse % str len|idx
+ } for 0 exch getinterval % str'(str 0 len|idx getinterval)
+} bind def
+
+/iso-6429-set [
+ [ (\t)
+ { buffer 0 size getinterval ichop % ``ichop'' is not required for GS
+ stringwidth pop ( ) stringwidth pop div round cvi width add
+ 8 dup 3 1 roll mod sub {
+ buffer size ( ) putinterval /size size 1 add store
+ } repeat } bind
+ ]
+ [ (\f) { iflush margin 0 get margin 3 get moveto } bind ]
+ [ [ (\033[m) (\033[0m) ]
+ { iflush
+ /BoldFont false textfont
+ /Underscore false textfont
+ 0 textcolor
+ 1 backcolor
+ } bind
+ ] % All Off
+ [ (\033[1m) { iflush /BoldFont true textfont } bind ]
+ [ (\033[4m) { iflush /Underscore true textfont } bind ]
+ [ (\033[22m) { iflush /BoldFont false textfont } bind ]
+ [ (\033[24m) { iflush /Underscore false textfont } bind ]
+ [ (\033[30m) { iflush 0 textcolor } bind ]
+ [ (\033[31m) { iflush [ 1 0 0 ] textcolor } bind ]
+ [ (\033[32m) { iflush [ 0 1 0 ] textcolor } bind ]
+ [ (\033[33m) { iflush [ 1 1 0 ] textcolor } bind ]
+ [ (\033[34m) { iflush [ 0 0 1 ] textcolor } bind ]
+ [ (\033[35m) { iflush [ 1 0 1 ] textcolor } bind ]
+ [ (\033[36m) { iflush [ 0 1 1 ] textcolor } bind ]
+ [ (\033[37m) { iflush 1 textcolor } bind ]
+ [ (\033[39m) { iflush 0 textcolor } bind ]
+ [ (\033[40m) { iflush 0 backcolor } bind ]
+ [ (\033[41m) { iflush [ 1 0 0 ] backcolor } bind ]
+ [ (\033[42m) { iflush [ 0 1 0 ] backcolor } bind ]
+ [ (\033[43m) { iflush [ 1 1 0 ] backcolor } bind ]
+ [ (\033[44m) { iflush [ 0 0 1 ] backcolor } bind ]
+ [ (\033[45m) { iflush [ 1 0 1 ] backcolor } bind ]
+ [ (\033[46m) { iflush [ 0 1 1 ] backcolor } bind ]
+ [ (\033[47m) { iflush 1 backcolor } bind ]
+ [ (\033[49m) { iflush 1 backcolor } bind ]
+] def
+/iso-6429-translate { % str idx iso-6429-translate str idx
+ /iso-6429-state null store
+ 2 copy get 16#20 lt {
+ iso-6429-set length 1 sub 0 1 3 -1 roll { % str idx j
+ iso-6429-set 1 index get 0 get dup % str idx j ()|[] ()|[]
+ dup type /stringtype eq { % str idx j () ()
+ dup length 5 index 5 index 3 -1 roll 7 index length 7 index sub
+ 2 copy lt { pop } { exch pop } ifelse
+ getinterval eq % str idx j () true|false
+ } { % str idx j [] []
+ pop () false 3 -1 roll {
+ dup 4 -1 roll pop 3 1 roll
+ dup length 6 index 6 index 3 -1 roll 8 index length 8 index sub
+ 2 copy lt { pop } { exch pop } ifelse
+ getinterval eq or dup { exit } if % str idx j () true|false
+ } forall
+ } ifelse
+ { exch /iso-6429-state exch store length 1 sub add exit } { pop } ifelse
+ pop
+ } for
+ } if
+} bind def
+/show-attribute {
+ BackColor dup type dup /integertype eq exch /realtype eq or {
+ dup 1 eq { pop } {
+ gsave setgray BoldFont { setboldfont } if textfill grestore
+ } ifelse
+ } {
+ gsave cvx exec setrgbcolor BoldFont { setboldfont } if textfill grestore
+ } ifelse
+ Underscore {
+ gsave .2 setlinewidth currentpoint fontsize .1 mul sub moveto
+ BoldFont { setboldfont } if dup stringwidth pop 0 rlineto stroke grestore
+ } if
+ BoldFont {
+ gsave setboldfont show currentpoint grestore moveto
+ } {
+ show
+ } ifelse
+} bind def
+/cshow-attribute {
+ pop currentpoint pop add pagesize 0 get margin 2 get sub lt {
+ 1 string dup 0 4 -1 roll put show-attribute
+ } {
+ currentpoint exch pop fontsize sub round margin 3 get lt {
+ gsave
+ nextpage preparepage
+ currentpoint matrix currentmatrix grestore setmatrix moveto
+ } {
+ origin 0 get currentpoint exch pop fontsize sub moveto
+ } ifelse
+ 1 string dup 0 4 -1 roll put show-attribute
+ } ifelse
+} bind def
+/iflush {
+ size 0 gt {
+ buffer 0 size getinterval ichop % ``ichop'' is not required for GS
+ dup stringwidth pop ( ) stringwidth pop div round cvi /width exch store
+ foldline not {
+ show-attribute
+ } {
+ dup stringwidth
+ pop currentpoint pop add pagesize 0 get margin 2 get sub lt {
+ show-attribute
+ } {
+ BoldFont { /BoldFont false store
+ gsave setboldfont
+ { cshow-attribute } exch cshow
+ currentpoint grestore moveto
+ } {
+ { cshow-attribute } exch cshow
+ } ifelse
+ } ifelse
+ } ifelse
+ /size 0 store
+ } if
+} bind def
+/textfont { % /BoldFont|/Underscore any textfont -
+ store
+} bind def
+/textcolor {
+ dup type dup /integertype eq exch /realtype eq or { setgray }
+ { cvx exec setrgbcolor } ifelse
+} bind def
+/backcolor {
+ /BackColor exch store
+} bind def
+/textfill {
+ currentpoint fontsize .2 mul sub 2 index stringwidth pop fontsize
+ 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto
+ closepath fill
+} bind def
+/setboldfont {
+ currentfont /FontName get dup length string cvs (-Bold)
+ exch dup length 2 index length add string
+ dup dup 4 2 roll copy length 4 -1 roll putinterval cvn
+ findfont [fontwidth 0 0 fontsize 0 0] makefont setfont
+} bind def
+/iso-6429-show { % str iso-6429-show -
+ 8 dict begin
+ /iso-6429-state null def
+ /buffer 65535 string def
+ /size 0 def
+ /width 0 def
+ /BoldFont false def /Underscore false def /BackColor 1 def
+ /foldline dup where { pop foldline } { false } ifelse def
+ 0 { % idx {} loop
+ dup 2 index length lt {
+ iso-6429-translate
+ iso-6429-state null ne {
+ iso-6429-set iso-6429-state get 1 get exec
+ } {
+ 2 copy get buffer size 3 -1 roll put
+ /size size 1 add store
+ } ifelse
+ } {
+ exit
+ } ifelse
+ 1 add
+ } loop
+ pop pop
+ iflush
+ end
+} bind def
+/shown-init {
+ /inshow exch def
+ /mediasize [ 595 842 ] def
+ /mediamargin [ 30 30 30 30 ] def
+ /pagesize [
+ mediasize cvx exec mediamargin cvx exec
+ 3 -1 roll add 3 1 roll add 3 1 roll sub 3 1 roll sub exch
+ ] def
+ /margin [ 20 28 20 28 ] def
+ /division [ 1 1 ] def
+ /landscape false def
+ /landscale false def
+ /evenscale true def
+ /pagescale false def
+ pagescale not {
+ /pagesize [
+ pagesize 0 get division 0 get div pagesize 1 get division 1 get div
+ ] store
+ } if
+ landscape {
+ /pagesize [ pagesize cvx exec exch ] store
+ /margin [ margin cvx exec 4 1 roll ] store
+ } if
+ /verttext dup where { pop verttext } { false } ifelse def
+ /foldline true def
+ /header true def /footer true def /border true def
+ /origin [ margin 0 get pagesize 1 get margin 1 get sub fontsize sub ] def
+ /position [ 0 0 ] def
+ /preparepage { initmatrix
+ landscape landscale xor not {
+ mediasize cvx exec exch mediamargin 0 get mediamargin 2 get add sub
+ division 0 get div position 0 get mul mediamargin 0 get add
+ exch dup mediamargin 1 get mediamargin 3 get add sub
+ division 1 get div position 1 get 1 add mul sub mediamargin 1 get sub
+ translate
+ pagescale { landscale not { 1 } { pagesize cvx exec div } ifelse
+ division 1 get div evenscale { dup } {
+ landscale not { 1 } { pagesize cvx exec exch div } ifelse
+ division 0 get div exch
+ } ifelse scale
+ } if
+ } {
+ verttext {
+ 180 rotate mediasize { neg } forall translate
+ } if
+ mediasize cvx exec exch mediamargin 0 get mediamargin 2 get add sub
+ division 0 get div position 0 get mul mediamargin 0 get add
+ exch mediamargin 1 get mediamargin 3 get add sub
+ division 1 get div position 1 get mul mediamargin 3 get add
+ translate
+ pagescale { landscale not { 1 } { pagesize cvx exec div } ifelse
+ division 0 get div evenscale { dup } {
+ landscale not { 1 } { pagesize cvx exec exch div } ifelse
+ division 1 get div
+ } ifelse scale
+ } if
+ 90 rotate 0 pagesize 1 get neg translate
+ } ifelse
+ origin cvx exec moveto
+ } bind def
+ /gssafe false def % GS-safe but not always perfect at decoratepage
+ /nextpage { gssafe { /decorated false store } { decoratepage } ifelse
+ position landscape landscale or not { 0 } { 1 } ifelse 2 copy get 1 add
+ dup 4 1 roll put
+ division landscape landscale or not { 0 } { 1 } ifelse get eq {
+ position landscape landscale or not { 0 } { 1 } ifelse 0 put
+ position landscape landscale or not { 1 } { 0 } ifelse 2 copy get 1 add
+ dup 4 1 roll put
+ division landscape landscale or not { 1 } { 0 } ifelse get eq {
+ position landscape landscale or not { 1 } { 0 } ifelse 0 put
+ showpage
+ } if
+ } if
+ } bind def
+ /lastpage { gssafe {} { decoratepage } ifelse showpage } bind def
+ /nextline {
+ currentpoint exch pop fontsize sub round margin 3 get lt {
+ nextpage preparepage /empty true store
+ } {
+ origin 0 get currentpoint exch pop fontsize sub moveto
+ } ifelse
+ } bind def
+ %
+ /page 0 def
+ /infofont /Helvetica findfont [fontwidth 0 0 fontsize 0 0] makefont def
+ /head (gs-cjk project: [1miso-2022-7bit - Emacs/Mule editable PostScript file[22m) def
+ /showheader {
+ header {
+ gsave
+ verttext not {
+ margin 0 get pagesize 1 get margin 1 get sub fontsize add moveto
+ } {
+ margin 0 get fontsize sub margin 3 get translate 90 rotate
+ fontsize fontwidth div fontwidth fontsize div scale 0 0 moveto
+ } ifelse
+ 1 dict dup /foldline false put begin
+ infofont setfont head inshow
+ end
+ grestore
+ } if
+ } bind def
+ /foot 64 string def
+ /showfooter {
+ /page page 1 add store
+ footer {
+ gsave
+ verttext not {
+ pagesize 0 get margin 2 get sub margin 3 get fontsize 2 mul sub moveto
+ } {
+ pagesize 0 get margin 2 get sub fontsize 2 mul add
+ pagesize 1 get margin 1 get sub translate 90 rotate
+ fontsize fontwidth div fontwidth fontsize div scale 0 0 moveto
+ } ifelse
+ 1 dict dup /foldline false put begin
+ infofont setfont page foot cvs dup stringwidth pop neg 0 rmoveto inshow
+ end
+ grestore
+ } if
+ } bind def
+ /bord {
+ pagesize cvx exec margin { fontsize 2 div sub } forall
+ 3 1 roll exch 5 -1 roll exch sub exch 5 -1 roll exch sub exch
+ 4 copy 3 1 roll exch 8 -2 roll moveto lineto 4 2 roll lineto lineto
+ closepath
+ } bind def
+ /showborder {
+ border {
+ gsave .25 setlinewidth bord stroke grestore
+ } if
+ } bind def
+ /decoratepage { showheader showfooter showborder } bind def
+ %
+ preparepage /empty true def
+ gssafe { /decorated false def } if
+} bind def
+/shown {
+ gssafe { decorated not { decoratepage /decorated true store } if } if
+ inshow /empty false store nextline
+} bind def
+/shown-close { empty not { lastpage } if } bind def
+/shown-readlines {
+ /shown-buffer 65535 string def
+ shown-init
+ {
+ currentfile shown-buffer readline not { pop exit } if
+ shown
+ } loop
+ shown-close
+} bind def
+/shown-readhexstrings {
+ /shown-buffer 65535 string def
+ /shown-size 0 def
+ /previous-char (\000) def
+ shown-init
+ {
+ currentfile 1 string readhexstring not { pop exit } if
+ dup (\n) ne {
+ dup (\r) ne {
+ shown-buffer shown-size 2 index putinterval
+ /shown-size shown-size 1 add store
+ } { % mac
+ shown-buffer 0 shown-size getinterval shown
+ /shown-size 0 store
+ } ifelse
+ } { % unix
+ previous-char (\r) ne {
+ shown-buffer 0 shown-size getinterval shown
+ } { % dos
+ } ifelse
+ /shown-size 0 store
+ } ifelse
+ previous-char 0 3 -1 roll putinterval
+ } loop
+ shown-close
+} bind def
+
+/fitfont { [ .8335276 0 0 .8335276 0 .1 ] makefont } bind def
+
+/verttext false unknowndef
+/iso-2022-fontset [
+ /Courier findfont fitfont % iso-2022:ascii
+ /Courier-Latin1 /Courier /ISOLatin1Encoding reencode-font fitfont % iso-2022:iso-8859-1,iso-latin1
+ /Courier-Latin2 /Courier /ISOLatin2Encoding reencode-font fitfont % iso-2022:iso-8859-2,iso-latin2
+% /CourierNewLatin3 findfont fitfont % iso-2022:iso-8859-3,iso-latin3
+% /CourierNewLatin4 findfont fitfont % iso-2022:iso-8859-4,iso-latin4
+% /CourierNewGreek findfont fitfont % iso-2022:iso-8859-7,iso-greek
+% /CourierNewArabic findfont fitfont % iso-2022:iso-8859-6,iso-arabic
+% /CourierNewHebrew findfont fitfont % iso-2022:iso-8859-8,iso-hebrew
+% /Courier-Cyrillic /CourierNewCyrillic /ISOCyrillicEncoding reencode-font fitfont % iso-2022:iso-8859-5,iso-cyrillic
+ /Courier-Latin5 /Courier /ISOLatin5Encoding reencode-font fitfont % iso-2022:iso-8859-9,iso-latin5
+% /CourierNewThai findfont fitfont % iso-2022:iso-8859-11,iso-thai
+% /CourierNewLatin6 findfont fitfont % iso-2022:iso-8859-10,iso-latin6
+ verttext not {
+ /Ryumin-Light.Katakana % iso-2022:jis-x-0201-kana
+ /Ryumin-Light.Roman % iso-2022:jis-x-0201-roman
+% /STSong-Light-GBK-EUC-H % iso-2022:gb-1988-roman
+ /Ryumin-Light-78-H % iso-2022:jis-x-0208-1978
+ /STSong-Light-GB-H % iso-2022:gb-2312-1980
+ /Ryumin-Light-H % iso-2022:jis-x-0208-1983&1990
+ /HYSMyeongJo-Medium-KSC-H % iso-2022:ks-x-1001-1992
+ /HeiseiMin-W3H-Hojo-H % iso-2022:jis-x-0212-1990
+ /STSong-Light-GBT-H % iso-2022:gbt-12345-1990,private-iso-gbt
+ /MSung-Light-CNS1-H % iso-2022:cns-11643-1992-p1
+ /MSung-Light-CNS2-H % iso-2022:cns-11643-1992-p2
+ /MSung-Light-ETen-B5-H % iso-2022:big5,mule-big5
+ /MSung-Light-ETen-B5-H % iso-2022:big5,mule-big5
+ } {
+ /Ryumin-Light.Katakana-V /Ryumin-Light.Katakana vertical-font % iso-2022:jis-x-0201-kana
+ /Ryumin-Light.Roman-V /Ryumin-Light.Roman vertical-font % iso-2022:jis-x-0201-roman
+% /STSong-Light-GBK-EUC-V % iso-2022:gb-1988-roman
+ /Ryumin-Light-78-V % iso-2022:jis-x-0208-1978
+ /STSong-Light-GB-V % iso-2022:gb-2312-1980
+ /Ryumin-Light-V % iso-2022:jis-x-0208-1983&1990
+ /HYSMyeongJo-Medium-KSC-V % iso-2022:ks-x-1001-1992
+ /HeiseiMin-W3H-Hojo-V % iso-2022:jis-x-0212-1990
+ /STSong-Light-GBT-V % iso-2022:gbt-12345-1990,private-iso-gbt
+ /MSung-Light-CNS1-V % iso-2022:cns-11643-1992-p1
+ /MSung-Light-CNS2-V % iso-2022:cns-11643-1992-p2
+ /MSung-Light-ETen-B5-V % iso-2022:big5,mule-big5
+ /MSung-Light-ETen-B5-V % iso-2022:big5,mule-big5
+ } ifelse
+] def
+/iso-2022-bold-fontset [
+ /Courier-Bold findfont fitfont % iso-2022:ascii
+ /Courier-Bold-Latin1 /Courier-Bold /ISOLatin1Encoding reencode-font fitfont % iso-2022:iso-8859-1,iso-latin1
+ /Courier-Bold-Latin2 /Courier-Bold /ISOLatin2Encoding reencode-font fitfont % iso-2022:iso-8859-2,iso-latin2
+% /CourierNewLatin3-Bold findfont fitfont % iso-2022:iso-8859-3,iso-latin3
+% /CourierNewLatin4-Bold findfont fitfont % iso-2022:iso-8859-4,iso-latin4
+% /CourierNewGreek-Bold findfont fitfont % iso-2022:iso-8859-7,iso-greek
+% /CourierNewArabic-Bold findfont fitfont % iso-2022:iso-8859-6,iso-arabic
+% /CourierNewHebrew-Bold findfont fitfont % iso-2022:iso-8859-8,iso-hebrew
+% /Courier-Bold-Cyrillic /CourierNewCyrillic-Bold /ISOCyrillicEncoding reencode-font fitfont % iso-2022:iso-8859-5,iso-cyrillic
+ /Courier-Bold-Latin5 /Courier-Bold /ISOLatin5Encoding reencode-font fitfont % iso-2022:iso-8859-9,iso-latin5
+% /CourierNewThai-Bold findfont fitfont % iso-2022:iso-8859-11,iso-thai
+% /CourierNewLatin6-Bold findfont fitfont % iso-2022:iso-8859-10,iso-latin6
+ verttext not {
+ /GothicBBB-Medium.Katakana % iso-2022:jis-x-0201-kana
+ /GothicBBB-Medium.Roman % iso-2022:jis-x-0201-roman
+% /STHeiti-Regular-GBK-EUC-H % iso-2022:gb-1988-roman
+ /GothicBBB-Medium-78-H % iso-2022:jis-x-0208-1978
+ /STHeiti-Regular-GB-H % iso-2022:gb-2312-1980
+ /GothicBBB-Medium-H % iso-2022:jis-x-0208-1983&1990
+ /HYGoThic-Medium-KSC-H % iso-2022:ks-x-1001-1992
+ /HeiseiKakuGo-W5H-Hojo-H % iso-2022:jis-x-0212-1990
+ /STHeiti-Regular-GBT-H % iso-2022:gbt-12345-1990,private-iso-gbt
+ /MHei-Medium-CNS1-H % iso-2022:cns-11643-1992-p1
+ /MHei-Medium-CNS2-H % iso-2022:cns-11643-1992-p2
+ /MHei-Medium-ETen-B5-H % iso-2022:big5,mule-big5
+ /MHei-Medium-ETen-B5-H % iso-2022:big5,mule-big5
+ } {
+ /GothicBBB-Medium.Katakana-V /GothicBBB-Medium.Katakana vertical-font % iso-2022:jis-x-0201-kana
+ /GothicBBB-Medium.Roman-V /GothicBBB-Medium.Roman vertical-font % iso-2022:jis-x-0201-roman
+% /STHeiti-Regular-GBK-EUC-V % iso-2022:gb-1988-roman
+ /GothicBBB-Medium-78-V % iso-2022:jis-x-0208-1978
+ /STHeiti-Regular-GB-V % iso-2022:gb-2312-1980
+ /GothicBBB-Medium-V % iso-2022:jis-x-0208-1983&1990
+ /HYGoThic-Medium-KSC-V % iso-2022:ks-x-1001-1992
+ /HeiseiKakuGo-W5H-Hojo-V % iso-2022:jis-x-0212-1990
+ /STHeiti-Regular-GBT-V % iso-2022:gbt-12345-1990,private-iso-gbt
+ /MHei-Medium-CNS1-V % iso-2022:cns-11643-1992-p1
+ /MHei-Medium-CNS2-V % iso-2022:cns-11643-1992-p2
+ /MHei-Medium-ETen-B5-V % iso-2022:big5,mule-big5
+ /MHei-Medium-ETen-B5-V % iso-2022:big5,mule-big5
+ } ifelse
+] def
+/fontset-iso-2022 iso-2022-fontset compose-fontset pop
+/fontset-iso-2022-Bold iso-2022-bold-fontset compose-fontset pop
+%%EndProlog
+/fontsize 11 def /fontwidth 11 def
+/fontset-iso-2022 findfont [fontwidth 0 0 fontsize 0 0] makefont setfont
+{ iso-2022-show } shown-readlines
+A list of ways to say hello in various languages.
+
+Czech (,Bh(Besky) Dobr,B}(B den
+Danish (Dansk) Hej, Goddag
+English Hello
+Esperanto Saluton
+Estonian Tere, Tervist
+PostScript (Hello) =
+Finnish (Suomi) Hei
+French (Fran,Ag(Bais) Bonjour, Salut
+German (Deutsch Nord) Guten Tag
+
+Italiano Ciao, Buon giorno
+
+Maltese Ciao
+Nederlands, Vlaams Hallo, Dag
+Norwegian (Norsk) Hei, God dag
+Polish Dzie,Bq(B dobry, Hej
+
+Slovak Dobr,B}(B de,Br(B
+Spanish (Espa,Aq(Bol) ,A!(BHola!
+Swedish (Svenska) Hej, Goddag
+
+Turkish (T,M|(Brk,Mg(Be) Merhaba
+
+Chinese ($(GDcEF$(0!.$(GiGk#$(0!.Vn^V)t(B) $(0<@)p$(G!$I#Go!$$(0'*)y!$(B
+Chinese ($AVPND#,::So#,<rLeWV(B) $ADz:C!#Dc:C!#(B
+Japanese ($BF|K\8l!"4A;z!"J?2>L>!"JR2>L>(B) $B$3$s$K$A$O!#(I:]FAJ(B.
+Korean ($(CGQ1[#,ySm.(B) $(C>H3gGO=J4O1n#.>H3gGO<<?d#.(B
+
+Difference among chinese characters in GB, JIS, KSC, BIG5:
+ GB -- $AT*Fx(B $A?*7"(B
+ JIS -- $B855$(B $B3+H/(B
+ KSC -- $(Cj*Q((B $(CKR[!(B
+ BIG5 -- $(0&x86(B $(0DeBv(B
+
+Just for a test of JISX0212: $BqV$(DiQ(B (the second character is of JISX0212)
+
+Just for a test of JISX0201: (I123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\&]_^(B
+
+Difference between JISX0208.1978 and 1983:
+
+ \x1b$@ $@032)3B3I3v4C4R6F7[979\<I?YA(D[EWEnEsFvGhI0KjKyLyMZO6(B
+ \x1b$B $B032)3B3I3v4C4R6F7[979\<I?YA(D[EWEnEsFvGhI0KjKyLyMZO6(B
+
+Difference between GB2312.1980 and GBT12345.1990
+
+ \x1b$A $AMrLuP4;-8v:s<8;z@oTS@kRuQt4SQyJ&8IO0?*Fx5g9X6T;6<&Gl(B
+ $A1_9};9=xT6Ub;*0.HHME4&RURdRZSJ(B
+ $AJiN*3$J1S&6+35K-8xAeR{CE<dNJM7BrBt(B
+ \x1b$(? $(?MrLuP4;-8v:s<8;z@oTS@kRuQt4SQyJ&8IO0?*Fx5g9X6T;6<&Gl(B
+ $(?1_9};9=xT6Ub;*0.HHME4&RURdRZSJ(B
+ $(?JiN*3$J1S&6+35K-8xAeR{CE<dNJM7BrBt(B
+
+Color names:
+ [1mBLACK [30m$(0E**d(B $A:ZI+(B $B9u?'(B $(C0KA$;v(B [30m[22m
+ [1mRED [31m$(04y*d(B $A:lI+(B $B@V?'(B $(C;!0-;v(B [30m[22m
+ [1mGREEN [32m$(0L;*d(B $ABLI+(B $BNP?'(B $(C3k6{;v(B [30m[22m
+ [1mYELLOW [33m$(0E(Yn*d(B $A;FI+(B $B2+?'(B $(CH2;v(B [30m[22m
+ [1mBLUE [34m$(0Y1*d(B $A@6I+(B $B@D?'(B $(CFD6{;v(B [30m[22m
+ [1mMAGENTA [35m$(0C<*d(B $AWOI+(B $B;g?'(B $(C:86s;v(B [30m[22m
+ [1mCYAN [36m$(0LJL;*d(B $A4dBLI+(B $B@DNP?'(B $(CC;7O;v(B [30m[22m
+ [1mWHITE [37m[40m$(0(v*d(B $A0WI+(B $BGr?'(B $(CGO>a;v(B [47m[30m[22m
diff --git a/Master/xemtex/doc/ghostscript/examples/colorcir.ps b/Master/xemtex/doc/ghostscript/examples/colorcir.ps new file mode 100644 index 00000000000..cf4a49e537c --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/colorcir.ps @@ -0,0 +1,125 @@ +%!
+/colorcirsave save def % prevent left over effects
+
+gsave
+/Times-Roman findfont 24 scalefont setfont
+72 72 translate 0 0 moveto 1 0 0 setrgbcolor (Red) show
+72 0 translate 0 0 moveto 0 1 0 setrgbcolor (Green) show
+72 0 translate 0 0 moveto 0 0 1 setrgbcolor (Blue) show
+72 0 translate 0 0 moveto 1 1 0 setrgbcolor (Yellow) show
+72 0 translate 0 0 moveto 1 0 1 setrgbcolor (Pink) show
+72 0 translate 0 0 moveto 0 1 1 setrgbcolor (Cyan) show
+72 0 translate 0 0 moveto 0.9 0.9 0.9 setrgbcolor ('White') show
+grestore
+
+0.0 setlinewidth
+
+/length 0.1 def
+/width 0.02 def
+/hsvcircle {
+gsave
+ /h 0.0 def
+ 0 4 360 {
+ pop
+ gsave
+ 0.5 0.0 translate
+
+ newpath
+ 0.0 0.0 moveto
+ length 0.0 lineto
+ length width lineto
+ 0.0 width lineto
+ closepath
+ h 1.0 1.0 sethsbcolor
+ fill
+
+ %newpath
+ %0.0 0.0 moveto
+ %length 0.0 lineto
+ %length width lineto
+ %0.0 width lineto
+ %closepath
+ %0.0 setgray
+ %stroke
+
+ grestore
+ /h h 4 360 div add def
+ 4 rotate
+ } for
+grestore
+} def
+
+/graycircle {
+gsave
+ /h -1.0 def
+ 0 4 360 {
+ pop
+ gsave
+ 0.5 0.0 translate
+
+ newpath
+ 0.0 0.0 moveto
+ length 0.0 lineto
+ length width lineto
+ 0.0 width lineto
+ closepath
+
+ h abs setgray
+ fill
+
+ %newpath
+ %0.0 0.0 moveto
+ %length 0.0 lineto
+ %length width lineto
+ %0.0 width lineto
+ %closepath
+ %0.0 setgray
+ %stroke
+ grestore
+
+ /h h 8 360 div add def
+ 4 rotate
+ } for
+grestore
+} def
+
+0.0 setlinewidth
+0.0 setgray
+300 400 translate
+500 500 scale
+
+30 rotate
+1.0 0.7 scale
+-30 rotate
+
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+0.8 0.8 scale
+hsvcircle
+0.8 0.8 scale
+graycircle
+
+showpage
+clear cleardictstack
+colorcirsave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/doretree.ps b/Master/xemtex/doc/ghostscript/examples/doretree.ps new file mode 100644 index 00000000000..23157fabdd8 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/doretree.ps @@ -0,0 +1,2485 @@ +%!PS-Adobe-1.0
+%%Title: dore.ps
+%%Creator: Dore' Postscript Device Driver
+%%For: Jesse Don Hickson III
+%%CreationDate: Sat Apr 11 18:26:44 1998
+%%Pages: (atend)
+%%DocumentFonts:
+%%BoundingBox: 0 0 612 612
+%%EndComments
+/doretreesave save def % prevent left over effects
+% The author, Jesse Don Hickson III, hereby places this file into
+% the public domain on this day 23 Feb 2000.
+/Dore 20 dict def
+Dore begin
+/Prgb { moveto -1 -1 rmoveto 2 0 rlineto
+ 0 2 rlineto -2 0 rlineto
+ closepath setrgbcolor fill } def
+/Lrgb { moveto lineto setrgbcolor stroke } def
+/Trgb { moveto lineto lineto closepath
+ setrgbcolor fill } def
+/BGrgb { dup 3 -1 roll dup 5 -1 roll dup
+ 7 -1 roll dup 3 -1 roll moveto
+ 6 -1 roll lineto exch 4 -1 roll
+ lineto lineto closepath
+ setrgbcolor
+ fill } def
+/Pgray { moveto -1 -1 rmoveto 2 0 rlineto
+ 0 2 rlineto -2 0 rlineto
+ closepath setgray fill } def
+/Lgray { moveto lineto setgray stroke } def
+/Tgray { moveto lineto lineto closepath
+ setgray fill } def
+/BGgray { dup 3 -1 roll dup 5 -1 roll dup
+ 7 -1 roll dup 3 -1 roll moveto
+ 6 -1 roll lineto exch 4 -1 roll
+ lineto lineto closepath setgray
+ fill } def
+/BDR { dup 3 -1 roll dup 5 -1 roll dup
+ 7 -1 roll dup 3 -1 roll moveto
+ 6 -1 roll lineto exch 4 -1 roll
+ lineto lineto closepath
+ setgray 40 setlinewidth
+ stroke } def
+%%EndProlog
+%%Page: 1 1
+
+gsave
+0.400000 0.400000 0.400000 0 0 612 612 BGrgb
+
+0.25028 0.20022 0.15028 66 73 545 73 478 350 Trgb
+0.25028 0.20022 0.15028 66 73 478 350 133 350 Trgb
+0.312849 0.250279 0.312849 69 61 542 61 545 73 Trgb
+0.312849 0.250279 0.312849 69 61 545 73 66 73 Trgb
+
+0.000000 0.699172 0.209751 308 254 305 260 302 254 Trgb
+0.000000 0.699172 0.209751 305 260 299 260 302 254 Trgb
+0.000000 0.699172 0.209751 299 260 296 255 302 254 Trgb
+0.000000 0.699172 0.209751 296 255 299 249 302 254 Trgb
+0.000000 0.699172 0.209751 299 249 305 249 302 254 Trgb
+0.000000 0.699172 0.209751 305 249 308 254 302 254 Trgb
+0.000000 0.000000 0.000000 303 225 299 249 296 255 Trgb
+0.000000 0.000000 0.000000 303 225 296 255 300 230 Trgb
+0.000000 0.006800 0.002040 308 225 305 249 299 249 Trgb
+0.000000 0.003400 0.001020 308 225 299 249 303 225 Trgb
+0.000000 0.025554 0.007666 311 230 308 254 305 249 Trgb
+0.000000 0.017877 0.005363 311 230 305 249 308 225 Trgb
+0.000000 0.698504 0.209551 318 220 315 223 313 218 Trgb
+0.000000 0.698504 0.209551 315 223 310 222 313 218 Trgb
+0.000000 0.698504 0.209551 310 222 309 217 313 218 Trgb
+0.000000 0.698504 0.209551 309 217 312 214 313 218 Trgb
+0.000000 0.698504 0.209551 312 214 317 215 313 218 Trgb
+0.000000 0.698504 0.209551 317 215 318 220 313 218 Trgb
+0.000000 0.039441 0.011832 303 258 315 223 318 220 Trgb
+0.000000 0.039755 0.011926 303 258 318 220 306 256 Trgb
+0.000000 0.013042 0.003913 299 257 310 222 315 223 Trgb
+0.000000 0.026084 0.007825 299 257 315 223 303 258 Trgb
+0.000000 0.000000 0.000000 298 253 309 217 310 222 Trgb
+0.000000 0.000000 0.000000 298 253 310 222 299 257 Trgb
+0.000000 0.696509 0.208953 351 168 348 168 348 166 Trgb
+0.000000 0.696509 0.208953 348 168 346 166 348 166 Trgb
+0.000000 0.696509 0.208953 346 166 345 164 348 166 Trgb
+0.000000 0.696509 0.208953 345 164 348 164 348 166 Trgb
+0.000000 0.696509 0.208953 348 164 351 166 348 166 Trgb
+0.000000 0.696509 0.208953 351 166 351 168 348 166 Trgb
+0.000000 0.059893 0.017968 314 220 348 168 351 168 Trgb
+0.000000 0.060927 0.018278 314 220 351 168 316 221 Trgb
+0.000000 0.019620 0.005886 311 218 346 166 348 168 Trgb
+0.000000 0.039239 0.011772 311 218 348 168 314 220 Trgb
+0.000000 0.000000 0.000000 311 216 345 164 346 166 Trgb
+0.000000 0.000000 0.000000 311 216 346 166 311 218 Trgb
+0.000000 0.000000 0.000000 350 168 349 168 348 166 Trgb
+0.000000 0.000000 0.000000 349 168 347 166 348 166 Trgb
+0.000000 0.000000 0.000000 347 166 346 164 348 166 Trgb
+0.000000 0.000000 0.000000 346 164 347 164 348 166 Trgb
+0.000000 0.000000 0.000000 347 164 349 166 348 166 Trgb
+0.000000 0.000000 0.000000 349 166 350 168 348 166 Trgb
+0.000000 0.238723 0.071617 349 166 385 141 386 143 Trgb
+0.000000 0.241460 0.072438 349 166 386 143 350 168 Trgb
+0.000000 0.078662 0.023599 347 164 384 140 385 141 Trgb
+0.000000 0.157324 0.047197 347 164 385 141 349 166 Trgb
+0.000000 0.000000 0.000000 346 164 383 140 384 140 Trgb
+0.000000 0.000000 0.000000 346 164 384 140 347 164 Trgb
+0.340732 0.248642 0.117875 397 153 395 142 402 143 Trgb
+0.278657 0.203344 0.096400 395 127 402 143 395 142 Trgb
+0.247789 0.180819 0.085722 395 142 386 130 395 127 Trgb
+0.119439 0.087158 0.041319 386 130 377 126 395 127 Trgb
+0.106393 0.077638 0.036806 376 140 383 156 371 151 Trgb
+0.318775 0.232620 0.110279 395 142 397 153 383 156 Trgb
+0.234743 0.171299 0.081209 383 156 376 140 395 142 Trgb
+0.225832 0.164797 0.078126 386 130 395 142 376 140 Trgb
+0.033948 0.024773 0.011744 366 140 376 140 371 151 Trgb
+0.000000 0.000000 0.000000 372 130 377 126 366 140 Trgb
+0.033948 0.024773 0.011744 376 140 366 140 377 126 Trgb
+0.097482 0.071136 0.033724 377 126 386 130 376 140 Trgb
+0.072446 0.052866 0.025062 383 156 373 156 371 151 Trgb
+0.228924 0.167052 0.079195 397 153 391 158 383 156 Trgb
+0.110944 0.080959 0.038381 373 156 383 156 391 158 Trgb
+0.000000 0.699929 0.209979 390 172 391 170 391 172 Trgb
+0.000000 0.699929 0.209979 391 170 392 170 391 172 Trgb
+0.000000 0.699929 0.209979 392 170 393 172 391 172 Trgb
+0.000000 0.699929 0.209979 393 172 392 174 391 172 Trgb
+0.000000 0.699929 0.209979 392 174 391 174 391 172 Trgb
+0.000000 0.699929 0.209979 391 174 390 172 391 172 Trgb
+0.000000 0.004526 0.001358 348 164 391 170 390 172 Trgb
+0.000000 0.006998 0.002099 348 164 390 172 347 166 Trgb
+0.000000 0.000685 0.000205 349 164 392 170 391 170 Trgb
+0.000000 0.001370 0.000411 349 164 391 170 348 164 Trgb
+0.000000 0.008785 0.002635 347 166 390 172 391 174 Trgb
+0.000000 0.008100 0.002430 347 166 391 174 347 168 Trgb
+0.315444 0.255254 0.114140 397 175 404 160 408 174 Trgb
+0.160986 0.130268 0.058251 383 174 386 160 397 175 Trgb
+0.207378 0.167808 0.075037 404 160 397 175 386 160 Trgb
+0.095933 0.077628 0.034712 386 160 393 153 404 160 Trgb
+0.267978 0.216844 0.096964 404 160 409 172 408 174 Trgb
+0.330957 0.267806 0.119752 402 187 397 175 408 174 Trgb
+0.176499 0.142820 0.063864 384 186 383 174 397 175 Trgb
+0.238403 0.192912 0.086263 397 175 402 187 384 186 Trgb
+0.137926 0.111608 0.049907 390 190 384 186 402 187 Trgb
+0.049541 0.040088 0.017926 386 160 383 174 374 172 Trgb
+0.015977 0.012928 0.005781 374 172 381 157 386 160 Trgb
+0.015977 0.012928 0.005781 393 153 386 160 381 157 Trgb
+0.283490 0.229397 0.102577 409 172 402 187 408 174 Trgb
+0.065053 0.052640 0.023539 383 174 384 186 374 172 Trgb
+0.031489 0.025481 0.011394 379 183 374 172 384 186 Trgb
+0.042458 0.034357 0.015363 384 186 390 190 379 183 Trgb
+0.000000 0.697723 0.209317 341 150 344 149 343 152 Trgb
+0.000000 0.697723 0.209317 344 149 346 151 343 152 Trgb
+0.000000 0.697723 0.209317 346 151 345 153 343 152 Trgb
+0.000000 0.697723 0.209317 345 153 343 154 343 152 Trgb
+0.000000 0.697723 0.209317 343 154 341 152 343 152 Trgb
+0.000000 0.697723 0.209317 341 152 341 150 343 152 Trgb
+0.000000 0.049494 0.014848 350 168 345 153 346 151 Trgb
+0.000000 0.044068 0.013220 350 168 346 151 350 165 Trgb
+0.000000 0.029160 0.008748 348 168 343 154 345 153 Trgb
+0.000000 0.042040 0.012612 348 168 345 153 350 168 Trgb
+0.000000 0.005426 0.001628 346 167 341 152 343 154 Trgb
+0.000000 0.010853 0.003256 346 167 343 154 348 168 Trgb
+0.041998 0.199607 0.048321 336 144 348 143 342 148 Trgb
+0.000000 0.000000 0.000000 334 144 343 140 336 144 Trgb
+0.020666 0.098222 0.023778 348 143 336 144 343 140 Trgb
+0.028561 0.135744 0.032861 343 140 351 143 348 143 Trgb
+0.080827 0.384157 0.092997 348 143 349 154 342 148 Trgb
+0.101740 0.483551 0.117058 356 151 352 159 349 154 Trgb
+0.088824 0.422164 0.102198 349 154 348 143 356 151 Trgb
+0.057889 0.275137 0.066605 351 143 356 151 348 143 Trgb
+0.030833 0.146542 0.035475 337 155 336 144 342 148 Trgb
+0.000000 0.000000 0.000000 331 153 334 144 336 144 Trgb
+0.009501 0.045158 0.010932 336 144 337 155 331 153 Trgb
+0.009501 0.045158 0.010932 335 161 331 153 337 155 Trgb
+0.069662 0.331092 0.080151 349 154 337 155 342 148 Trgb
+0.090575 0.430486 0.104212 352 159 344 163 349 154 Trgb
+0.066494 0.316036 0.076506 337 155 349 154 344 163 Trgb
+0.027665 0.131486 0.031830 344 163 335 161 337 155 Trgb
+0.000000 0.699775 0.209933 370 210 368 207 370 207 Trgb
+0.000000 0.699775 0.209933 368 207 369 204 370 207 Trgb
+0.000000 0.699775 0.209933 369 204 370 203 370 207 Trgb
+0.000000 0.699775 0.209933 370 203 372 206 370 207 Trgb
+0.000000 0.699775 0.209933 372 206 372 209 370 207 Trgb
+0.000000 0.699775 0.209933 372 209 370 210 370 207 Trgb
+0.000000 0.011674 0.003502 312 219 368 207 370 210 Trgb
+0.000000 0.014707 0.004412 312 219 370 210 313 222 Trgb
+0.000000 0.002881 0.000864 312 216 369 204 368 207 Trgb
+0.000000 0.005761 0.001728 312 216 368 207 312 219 Trgb
+0.000000 0.014859 0.004458 313 222 370 210 372 209 Trgb
+0.000000 0.011978 0.003594 313 222 372 209 315 221 Trgb
+0.000000 0.000000 0.000000 369 208 369 209 370 207 Trgb
+0.000000 0.000000 0.000000 369 209 369 207 370 207 Trgb
+0.000000 0.000000 0.000000 369 207 371 205 370 207 Trgb
+0.000000 0.000000 0.000000 371 205 372 205 370 207 Trgb
+0.000000 0.000000 0.000000 372 205 371 206 370 207 Trgb
+0.000000 0.000000 0.000000 371 206 369 208 370 207 Trgb
+0.000000 0.033825 0.010148 371 206 410 235 409 237 Trgb
+0.000000 0.027366 0.008210 371 206 409 237 369 208 Trgb
+0.000000 0.026347 0.007904 372 205 411 234 410 235 Trgb
+0.000000 0.033316 0.009995 372 205 410 235 371 206 Trgb
+0.000000 0.013938 0.004181 369 208 409 237 408 237 Trgb
+0.000000 0.006969 0.002091 369 208 408 237 369 209 Trgb
+0.402052 0.138238 0.108058 417 254 429 236 426 248 Trgb
+0.324052 0.111419 0.087094 402 249 413 237 417 254 Trgb
+0.415721 0.142938 0.111732 429 236 417 254 413 237 Trgb
+0.399297 0.137291 0.107317 413 237 421 224 429 236 Trgb
+0.303041 0.104195 0.081447 421 224 422 218 429 236 Trgb
+0.196628 0.067607 0.052847 397 253 402 249 417 254 Trgb
+0.000000 0.000000 0.000000 405 218 392 236 392 223 Trgb
+0.195487 0.067215 0.052540 413 237 402 249 392 236 Trgb
+0.127423 0.043812 0.034247 392 236 405 218 413 237 Trgb
+0.239564 0.082370 0.064387 421 224 413 237 405 218 Trgb
+0.000000 0.000000 0.000000 402 218 405 218 392 223 Trgb
+0.031167 0.010716 0.008377 405 218 402 218 422 218 Trgb
+0.143308 0.049274 0.038516 422 218 421 224 405 218 Trgb
+0.000000 0.000000 0.000000 392 236 390 235 392 223 Trgb
+0.068063 0.023402 0.018293 402 249 397 253 392 236 Trgb
+0.000000 0.000000 0.000000 390 235 392 236 397 253 Trgb
+0.000000 0.699725 0.209917 388 238 390 237 389 239 Trgb
+0.000000 0.699725 0.209917 390 237 392 238 389 239 Trgb
+0.000000 0.699725 0.209917 392 238 391 240 389 239 Trgb
+0.000000 0.699725 0.209917 391 240 388 241 389 239 Trgb
+0.000000 0.699725 0.209917 388 241 387 240 389 239 Trgb
+0.000000 0.699725 0.209917 387 240 388 238 389 239 Trgb
+0.000000 0.011031 0.003309 371 205 390 237 388 238 Trgb
+0.000000 0.005515 0.001655 371 205 388 238 369 206 Trgb
+0.000000 0.017121 0.005136 372 206 392 238 390 237 Trgb
+0.000000 0.016834 0.005050 372 206 390 237 371 205 Trgb
+0.000000 0.000000 0.000000 369 206 388 238 387 240 Trgb
+0.000000 0.000000 0.000000 369 206 387 240 368 207 Trgb
+0.349698 0.218700 0.113680 387 242 406 239 397 252 Trgb
+0.133776 0.083663 0.043488 379 231 393 224 387 242 Trgb
+0.271918 0.170056 0.088395 406 239 387 242 393 224 Trgb
+0.255724 0.159929 0.083131 393 224 405 226 406 239 Trgb
+0.354064 0.221431 0.115099 406 239 402 254 397 252 Trgb
+0.280651 0.175518 0.091234 402 254 406 239 407 236 Trgb
+0.260091 0.162660 0.084550 405 226 407 236 406 239 Trgb
+0.250481 0.156650 0.081426 384 257 387 242 397 252 Trgb
+0.086350 0.054003 0.028071 371 242 379 231 387 242 Trgb
+0.125275 0.078347 0.040724 387 242 384 257 371 242 Trgb
+0.038925 0.024344 0.012654 374 251 371 242 384 257 Trgb
+0.047425 0.029660 0.015417 393 224 379 231 376 224 Trgb
+0.047425 0.029660 0.015417 376 224 394 221 393 224 Trgb
+0.117582 0.073536 0.038224 405 226 393 224 394 221 Trgb
+0.254847 0.159381 0.082846 402 254 384 257 397 252 Trgb
+0.000000 0.000000 0.000000 379 231 371 242 376 224 Trgb
+0.000000 0.682373 0.204712 391 162 392 163 390 162 Trgb
+0.000000 0.682373 0.204712 392 163 391 163 390 162 Trgb
+0.000000 0.682373 0.204712 391 163 389 162 390 162 Trgb
+0.000000 0.682373 0.204712 389 162 388 161 390 162 Trgb
+0.000000 0.682373 0.204712 388 161 389 161 390 162 Trgb
+0.000000 0.682373 0.204712 389 161 391 162 390 162 Trgb
+0.000000 0.137665 0.041299 371 208 391 163 392 163 Trgb
+0.000000 0.128141 0.038442 371 208 392 163 372 208 Trgb
+0.000000 0.068110 0.020433 369 207 389 162 391 163 Trgb
+0.000000 0.107649 0.032295 369 207 391 163 371 208 Trgb
+0.000000 0.009524 0.002857 368 206 388 161 389 162 Trgb
+0.000000 0.019047 0.005714 368 206 389 162 369 207 Trgb
+0.163081 0.086165 0.049849 403 150 407 155 399 143 Trgb
+0.357741 0.189016 0.109351 408 169 406 171 407 155 Trgb
+0.201687 0.106563 0.061650 407 155 389 148 399 143 Trgb
+0.192638 0.101782 0.058884 394 168 380 161 389 148 Trgb
+0.292072 0.154319 0.089278 389 148 407 155 394 168 Trgb
+0.396347 0.209413 0.121152 406 171 394 168 407 155 Trgb
+0.311639 0.164657 0.095259 406 171 408 169 395 181 Trgb
+0.074953 0.039602 0.022911 389 148 385 143 399 143 Trgb
+0.069652 0.036801 0.021291 380 161 372 155 389 148 Trgb
+0.042354 0.022378 0.012946 385 143 389 148 372 155 Trgb
+0.080631 0.042602 0.024647 377 174 395 181 382 180 Trgb
+0.150284 0.079404 0.045937 380 161 394 168 377 174 Trgb
+0.203616 0.107582 0.062240 395 181 377 174 394 168 Trgb
+0.350245 0.185055 0.107060 394 168 406 171 395 181 Trgb
+0.027298 0.014423 0.008344 372 155 380 161 377 174 Trgb
+0.000000 0.000000 0.000000 377 174 374 169 372 155 Trgb
+0.000000 0.697969 0.209391 293 250 295 248 296 251 Trgb
+0.000000 0.697969 0.209391 295 248 299 249 296 251 Trgb
+0.000000 0.697969 0.209391 299 249 299 253 296 251 Trgb
+0.000000 0.697969 0.209391 299 253 297 254 296 251 Trgb
+0.000000 0.697969 0.209391 297 254 293 253 296 251 Trgb
+0.000000 0.697969 0.209391 293 253 293 250 296 251 Trgb
+0.000000 0.000000 0.000000 313 215 295 248 293 250 Trgb
+0.000000 0.000000 0.000000 313 215 293 250 310 217 Trgb
+0.000000 0.029354 0.008806 316 217 299 249 295 248 Trgb
+0.000000 0.014677 0.004403 316 217 295 248 313 215 Trgb
+0.000000 0.046680 0.014004 317 220 299 253 299 249 Trgb
+0.000000 0.045355 0.013607 317 220 299 249 316 217 Trgb
+0.156998 0.121144 0.055628 280 252 297 247 291 260 Trgb
+0.000000 0.000000 0.000000 279 244 288 235 280 252 Trgb
+0.084838 0.065463 0.030060 297 247 280 252 288 235 Trgb
+0.132657 0.102362 0.047004 288 235 302 236 297 247 Trgb
+0.278211 0.214675 0.098577 297 247 305 263 291 260 Trgb
+0.324474 0.250373 0.114969 312 246 313 259 305 263 Trgb
+0.310052 0.239244 0.109859 305 263 297 247 312 246 Trgb
+0.236658 0.182612 0.083854 302 236 312 246 297 247 Trgb
+0.089372 0.068962 0.031667 289 268 280 252 291 260 Trgb
+0.000000 0.000000 0.000000 280 256 279 244 280 252 Trgb
+0.017212 0.013281 0.006099 280 252 289 268 280 256 Trgb
+0.047819 0.036898 0.016943 302 236 288 235 303 235 Trgb
+0.210585 0.162493 0.074615 305 263 289 268 291 260 Trgb
+0.256848 0.198191 0.091008 313 259 304 267 305 263 Trgb
+0.174799 0.134880 0.061936 289 268 305 263 304 267 Trgb
+0.151820 0.117148 0.053794 312 246 302 236 303 235 Trgb
+0.000000 0.699942 0.209983 348 304 347 302 351 301 Trgb
+0.000000 0.699942 0.209983 347 302 349 298 351 301 Trgb
+0.000000 0.699942 0.209983 349 298 353 297 351 301 Trgb
+0.000000 0.699942 0.209983 353 297 355 300 351 301 Trgb
+0.000000 0.699942 0.209983 355 300 352 303 351 301 Trgb
+0.000000 0.699942 0.209983 352 303 348 304 351 301 Trgb
+0.000000 0.000000 0.000000 298 255 347 302 348 304 Trgb
+0.000000 0.000000 0.000000 298 255 348 304 300 258 Trgb
+0.000000 0.001821 0.000546 301 252 349 298 347 302 Trgb
+0.000000 0.000911 0.000273 301 252 347 302 298 255 Trgb
+0.000000 0.006793 0.002038 304 251 353 297 349 298 Trgb
+0.000000 0.004762 0.001429 304 251 349 298 301 252 Trgb
+0.000000 0.018322 0.005497 350 301 386 356 384 357 Trgb
+0.000000 0.009161 0.002748 350 301 384 357 348 302 Trgb
+0.000000 0.035636 0.010691 353 299 389 354 386 356 Trgb
+0.000000 0.031560 0.009468 353 299 386 356 350 301 Trgb
+0.000000 0.021390 0.006417 353 299 390 354 389 354 Trgb
+0.000000 0.030551 0.009165 353 299 389 354 353 299 Trgb
+0.000000 0.677885 0.203366 386 356 385 355 387 356 Trgb
+0.000000 0.677885 0.203366 385 355 386 354 387 356 Trgb
+0.000000 0.677885 0.203366 386 354 388 355 387 356 Trgb
+0.000000 0.677885 0.203366 388 355 389 356 387 356 Trgb
+0.000000 0.677885 0.203366 389 356 388 357 387 356 Trgb
+0.000000 0.677885 0.203366 388 357 386 356 387 356 Trgb
+0.000000 0.144797 0.043439 388 357 369 396 367 395 Trgb
+0.000000 0.115047 0.034514 388 357 367 395 386 356 Trgb
+0.000000 0.117682 0.035305 389 356 369 395 369 396 Trgb
+0.000000 0.146114 0.043834 389 356 369 396 388 357 Trgb
+0.000000 0.056865 0.017059 386 356 367 395 365 394 Trgb
+0.000000 0.028432 0.008530 386 356 365 394 385 355 Trgb
+0.009232 0.148327 0.031512 363 401 370 403 364 402 Trgb
+0.022270 0.357806 0.076015 365 397 371 399 363 401 Trgb
+0.022149 0.355867 0.075603 370 403 363 401 371 399 Trgb
+0.031065 0.499105 0.106034 371 399 375 399 370 403 Trgb
+0.009353 0.150267 0.031924 360 393 365 397 363 401 Trgb
+0.002795 0.044900 0.009539 363 401 359 396 360 393 Trgb
+0.000000 0.000000 0.000000 360 390 360 393 359 396 Trgb
+0.019209 0.308621 0.065566 376 392 369 391 371 387 Trgb
+0.025955 0.417018 0.088595 371 399 365 397 369 391 Trgb
+0.029520 0.474291 0.100762 369 391 376 392 371 399 Trgb
+0.034750 0.558317 0.118613 375 399 371 399 376 392 Trgb
+0.009086 0.145981 0.031013 369 391 365 386 371 387 Trgb
+0.013038 0.209479 0.044503 365 397 360 393 369 391 Trgb
+0.006480 0.104112 0.022118 365 386 369 391 360 393 Trgb
+0.000000 0.000000 0.000000 360 393 360 390 365 386 Trgb
+0.000000 0.698602 0.209581 389 395 390 396 387 396 Trgb
+0.000000 0.698602 0.209581 390 396 388 397 387 396 Trgb
+0.000000 0.698602 0.209581 388 397 386 397 387 396 Trgb
+0.000000 0.698602 0.209581 386 397 385 396 387 396 Trgb
+0.000000 0.698602 0.209581 385 396 387 395 387 396 Trgb
+0.000000 0.698602 0.209581 387 395 389 395 387 396 Trgb
+0.000000 0.037233 0.011170 389 356 390 396 389 395 Trgb
+0.000000 0.038872 0.011662 389 356 389 395 389 355 Trgb
+0.000000 0.003278 0.000983 386 354 387 395 385 396 Trgb
+0.000000 0.001639 0.000492 386 354 385 396 385 355 Trgb
+0.000000 0.028646 0.008594 389 355 389 395 387 395 Trgb
+0.000000 0.016781 0.005034 389 355 387 395 386 354 Trgb
+0.404995 0.114698 0.103939 398 404 399 414 388 415 Trgb
+0.435739 0.123405 0.111829 402 388 409 395 398 404 Trgb
+0.425131 0.120400 0.109106 399 414 398 404 409 395 Trgb
+0.324162 0.091805 0.083193 376 404 398 404 388 415 Trgb
+0.354905 0.100512 0.091083 386 385 402 388 398 404 Trgb
+0.263463 0.074615 0.067616 398 404 376 404 386 385 Trgb
+0.091315 0.025861 0.023435 371 389 386 385 376 404 Trgb
+0.276324 0.078257 0.070916 409 395 402 388 397 377 Trgb
+0.152013 0.043051 0.039013 377 414 376 404 388 415 Trgb
+0.039290 0.011127 0.010084 376 404 377 414 366 396 Trgb
+0.039290 0.011127 0.010084 366 396 371 389 376 404 Trgb
+0.195491 0.055364 0.050171 402 388 386 385 397 377 Trgb
+0.064759 0.018340 0.016620 376 378 397 377 386 385 Trgb
+0.052024 0.014734 0.013352 386 385 371 389 376 378 Trgb
+0.000000 0.000000 0.000000 371 389 366 396 376 378 Trgb
+0.000000 0.699996 0.209999 421 374 420 376 419 375 Trgb
+0.000000 0.699996 0.209999 420 376 419 377 419 375 Trgb
+0.000000 0.699996 0.209999 419 377 418 376 419 375 Trgb
+0.000000 0.699996 0.209999 418 376 418 374 419 375 Trgb
+0.000000 0.699996 0.209999 418 374 420 373 419 375 Trgb
+0.000000 0.699996 0.209999 420 373 421 374 419 375 Trgb
+0.000000 0.000000 0.000000 385 357 418 376 419 377 Trgb
+0.000000 0.000000 0.000000 385 357 419 377 386 358 Trgb
+0.000000 0.000000 0.000000 386 355 418 374 418 376 Trgb
+0.000000 0.000000 0.000000 386 355 418 376 385 357 Trgb
+0.000000 0.001176 0.000353 388 354 420 373 418 374 Trgb
+0.000000 0.000588 0.000176 388 354 418 374 386 355 Trgb
+0.289362 0.280459 0.113964 436 374 429 389 431 382 Trgb
+0.278122 0.269564 0.109537 429 389 419 386 431 382 Trgb
+0.077960 0.075561 0.030704 412 390 407 384 419 386 Trgb
+0.159921 0.155000 0.062984 419 386 429 389 412 390 Trgb
+0.292601 0.283598 0.115240 426 371 436 374 431 382 Trgb
+0.104389 0.101177 0.041113 426 360 431 366 436 374 Trgb
+0.181640 0.176051 0.071538 436 374 426 371 426 360 Trgb
+0.094729 0.091814 0.037309 417 362 426 360 426 371 Trgb
+0.281360 0.272703 0.110813 419 386 426 371 431 382 Trgb
+0.077960 0.075561 0.030704 407 384 409 372 419 386 Trgb
+0.163159 0.158139 0.064260 426 371 419 386 409 372 Trgb
+0.087489 0.084798 0.034457 409 372 417 362 426 371 Trgb
+0.009530 0.009236 0.003753 426 360 417 362 410 361 Trgb
+0.000000 0.000000 0.000000 409 372 407 384 403 376 Trgb
+0.000000 0.000000 0.000000 403 376 410 361 409 372 Trgb
+0.002290 0.002219 0.000902 417 362 409 372 410 361 Trgb
+0.000000 0.697280 0.209184 347 363 350 363 349 364 Trgb
+0.000000 0.697280 0.209184 350 363 352 364 349 364 Trgb
+0.000000 0.697280 0.209184 352 364 351 365 349 364 Trgb
+0.000000 0.697280 0.209184 351 365 348 365 349 364 Trgb
+0.000000 0.697280 0.209184 348 365 346 364 349 364 Trgb
+0.000000 0.697280 0.209184 346 364 347 363 349 364 Trgb
+0.000000 0.034648 0.010394 352 300 350 363 347 363 Trgb
+0.000000 0.017324 0.005197 352 300 347 363 349 300 Trgb
+0.000000 0.053795 0.016138 354 301 352 364 350 363 Trgb
+0.000000 0.052883 0.015865 354 301 350 363 352 300 Trgb
+0.000000 0.000000 0.000000 349 300 347 363 346 364 Trgb
+0.000000 0.000000 0.000000 349 300 346 364 348 301 Trgb
+0.308371 0.106028 0.082880 340 375 360 376 349 384 Trgb
+0.157725 0.054231 0.042391 336 359 352 359 340 375 Trgb
+0.324928 0.111721 0.087330 360 376 340 375 352 359 Trgb
+0.420222 0.144486 0.112941 352 359 366 361 360 376 Trgb
+0.317849 0.109287 0.085427 360 376 358 381 349 384 Trgb
+0.343885 0.118239 0.092425 358 381 360 376 369 365 Trgb
+0.429700 0.147745 0.115489 366 361 369 365 360 376 Trgb
+0.141167 0.048538 0.037941 337 380 340 375 349 384 Trgb
+0.055697 0.019150 0.014970 329 363 336 359 340 375 Trgb
+0.055697 0.019150 0.014970 340 375 337 380 329 363 Trgb
+0.046330 0.015930 0.012452 361 348 341 347 350 344 Trgb
+0.102027 0.035080 0.027422 352 359 336 359 341 347 Trgb
+0.148358 0.051010 0.039874 341 347 361 348 352 359 Trgb
+0.299349 0.102926 0.080455 366 361 352 359 361 348 Trgb
+0.308827 0.106185 0.083002 369 365 366 361 361 348 Trgb
+0.000000 0.000000 0.000000 336 359 329 363 341 347 Trgb
+0.000000 0.698661 0.209598 356 291 357 294 353 293 Trgb
+0.000000 0.698661 0.209598 357 294 354 296 353 293 Trgb
+0.000000 0.698661 0.209598 354 296 351 295 353 293 Trgb
+0.000000 0.698661 0.209598 351 295 350 292 353 293 Trgb
+0.000000 0.698661 0.209598 350 292 353 290 353 293 Trgb
+0.000000 0.698661 0.209598 353 290 356 291 353 293 Trgb
+0.000000 0.033302 0.009991 352 304 354 296 357 294 Trgb
+0.000000 0.037838 0.011351 352 304 357 294 354 302 Trgb
+0.000000 0.009589 0.002877 348 303 351 295 354 296 Trgb
+0.000000 0.019177 0.005753 348 303 354 296 352 304 Trgb
+0.000000 0.000000 0.000000 348 300 350 292 351 295 Trgb
+0.000000 0.000000 0.000000 348 300 351 295 348 303 Trgb
+0.000000 0.000000 0.000000 328 260 328 261 326 261 Trgb
+0.000000 0.000000 0.000000 328 261 326 263 326 261 Trgb
+0.000000 0.000000 0.000000 326 263 324 263 326 261 Trgb
+0.000000 0.000000 0.000000 324 263 324 262 326 261 Trgb
+0.000000 0.000000 0.000000 324 262 326 260 326 261 Trgb
+0.000000 0.000000 0.000000 326 260 328 260 326 261 Trgb
+0.000000 0.115033 0.034510 355 293 328 261 328 260 Trgb
+0.000000 0.073975 0.022192 355 293 328 260 355 291 Trgb
+0.000000 0.134147 0.040244 354 295 326 263 328 261 Trgb
+0.000000 0.145119 0.043536 354 295 328 261 355 293 Trgb
+0.000000 0.041058 0.012317 352 295 324 263 326 263 Trgb
+0.000000 0.082116 0.024635 352 295 326 263 354 295 Trgb
+0.012930 0.111978 0.024982 327 251 325 259 320 255 Trgb
+0.024464 0.211872 0.047267 334 254 335 258 327 251 Trgb
+0.032663 0.282874 0.063107 325 259 327 251 335 258 Trgb
+0.055838 0.483582 0.107884 335 258 331 265 325 259 Trgb
+0.012930 0.111978 0.024982 325 259 317 262 320 255 Trgb
+0.013042 0.112948 0.025198 324 269 319 269 317 262 Trgb
+0.025972 0.224926 0.050180 317 262 325 259 324 269 Trgb
+0.049147 0.425634 0.094956 331 265 324 269 325 259 Trgb
+0.000000 0.000000 0.000000 319 254 327 251 320 255 Trgb
+0.046381 0.401681 0.089613 336 261 334 269 335 258 Trgb
+0.062754 0.543471 0.121245 331 265 335 258 334 269 Trgb
+0.000000 0.000000 0.000000 317 262 319 254 320 255 Trgb
+0.013154 0.113918 0.025414 319 269 324 269 325 272 Trgb
+0.032999 0.285785 0.063757 334 269 325 272 324 269 Trgb
+0.056063 0.485523 0.108317 324 269 331 265 334 269 Trgb
+0.000000 0.677401 0.203220 372 250 370 250 370 249 Trgb
+0.000000 0.677401 0.203220 370 250 368 249 370 249 Trgb
+0.000000 0.677401 0.203220 368 249 367 248 370 249 Trgb
+0.000000 0.677401 0.203220 367 248 369 248 370 249 Trgb
+0.000000 0.677401 0.203220 369 248 371 249 370 249 Trgb
+0.000000 0.677401 0.203220 371 249 372 250 370 249 Trgb
+0.000000 0.155473 0.046642 354 294 370 250 372 250 Trgb
+0.000000 0.146657 0.043997 354 294 372 250 356 294 Trgb
+0.000000 0.072397 0.021719 352 293 368 249 370 250 Trgb
+0.000000 0.118344 0.035503 352 293 370 250 354 294 Trgb
+0.000000 0.008817 0.002645 351 292 367 248 368 249 Trgb
+0.000000 0.017634 0.005290 351 292 368 249 352 293 Trgb
+0.253712 0.080223 0.066787 390 240 373 240 377 229 Trgb
+0.428856 0.135602 0.112892 390 257 383 259 390 240 Trgb
+0.393311 0.124363 0.103535 373 240 390 240 383 259 Trgb
+0.382168 0.120840 0.100601 383 259 367 256 373 240 Trgb
+0.133898 0.042338 0.035247 373 240 360 230 377 229 Trgb
+0.000000 0.000000 0.000000 353 248 349 241 360 230 Trgb
+0.100475 0.031770 0.026449 360 230 373 240 353 248 Trgb
+0.209145 0.066131 0.055055 367 256 353 248 373 240 Trgb
+0.125755 0.039763 0.033104 363 268 379 268 362 269 Trgb
+0.381589 0.120657 0.100449 383 259 390 257 379 268 Trgb
+0.298777 0.094472 0.078650 379 268 363 268 383 259 Trgb
+0.334900 0.105894 0.088159 367 256 383 259 363 268 Trgb
+0.053208 0.016824 0.014006 350 258 363 268 362 269 Trgb
+0.000000 0.000000 0.000000 349 241 353 248 350 258 Trgb
+0.053208 0.016824 0.014006 363 268 350 258 353 248 Trgb
+0.161878 0.051185 0.042613 353 248 367 256 363 268 Trgb
+0.000000 0.699775 0.209932 374 329 375 328 376 328 Trgb
+0.000000 0.699775 0.209932 375 328 377 327 376 328 Trgb
+0.000000 0.699775 0.209932 377 327 378 327 376 328 Trgb
+0.000000 0.699775 0.209932 378 327 378 329 376 328 Trgb
+0.000000 0.699775 0.209932 378 329 375 330 376 328 Trgb
+0.000000 0.699775 0.209932 375 330 374 329 376 328 Trgb
+0.000000 0.000000 0.000000 352 292 375 328 374 329 Trgb
+0.000000 0.000000 0.000000 352 292 374 329 351 294 Trgb
+0.000000 0.010089 0.003027 354 291 377 327 375 328 Trgb
+0.000000 0.005044 0.001513 354 291 375 328 352 292 Trgb
+0.000000 0.015452 0.004635 356 292 378 327 377 327 Trgb
+0.000000 0.015292 0.004588 356 292 377 327 354 291 Trgb
+0.251815 0.220453 0.094454 371 344 380 331 385 342 Trgb
+0.043448 0.038037 0.016297 360 337 362 328 371 344 Trgb
+0.140870 0.123326 0.052839 380 331 371 344 362 328 Trgb
+0.124253 0.108778 0.046606 362 328 373 319 380 331 Trgb
+0.321818 0.281738 0.120711 380 331 393 331 385 342 Trgb
+0.216925 0.189909 0.081367 385 315 392 319 393 331 Trgb
+0.264847 0.231862 0.099342 393 331 380 331 385 315 Trgb
+0.178226 0.156030 0.066851 373 319 385 315 380 331 Trgb
+0.213871 0.187235 0.080221 384 344 371 344 385 342 Trgb
+0.000000 0.000000 0.000000 362 328 360 337 359 325 Trgb
+0.000000 0.000000 0.000000 359 325 368 312 362 328 Trgb
+0.026831 0.023489 0.010064 373 319 362 328 368 312 Trgb
+0.283874 0.248520 0.106479 393 331 384 344 385 342 Trgb
+0.103473 0.090587 0.038812 392 319 385 315 381 313 Trgb
+0.053974 0.047252 0.020245 368 312 381 313 385 315 Trgb
+0.080804 0.070741 0.030309 385 315 373 319 368 312 Trgb
+0.000000 0.665402 0.199621 241 278 244 280 242 282 Trgb
+0.000000 0.665402 0.199621 244 280 245 284 242 282 Trgb
+0.000000 0.665402 0.199621 245 284 243 286 242 282 Trgb
+0.000000 0.665402 0.199621 243 286 240 284 242 282 Trgb
+0.000000 0.665402 0.199621 240 284 239 280 242 282 Trgb
+0.000000 0.665402 0.199621 239 280 241 278 242 282 Trgb
+0.000000 0.101649 0.030495 305 252 244 280 241 278 Trgb
+0.000000 0.050824 0.015247 305 252 241 278 301 250 Trgb
+0.000000 0.191076 0.057323 305 257 245 284 244 280 Trgb
+0.000000 0.171775 0.051532 305 257 244 280 305 252 Trgb
+0.000000 0.108729 0.032619 303 259 243 286 245 284 Trgb
+0.000000 0.159553 0.047866 303 259 245 284 305 257 Trgb
+0.000000 0.000000 0.000000 183 257 182 260 181 259 Trgb
+0.000000 0.000000 0.000000 182 260 180 262 181 259 Trgb
+0.000000 0.000000 0.000000 180 262 180 261 181 259 Trgb
+0.000000 0.000000 0.000000 180 261 181 258 181 259 Trgb
+0.000000 0.000000 0.000000 181 258 182 256 181 259 Trgb
+0.000000 0.000000 0.000000 182 256 183 257 181 259 Trgb
+0.000000 0.058545 0.017564 243 283 182 260 183 257 Trgb
+0.000000 0.052058 0.015618 243 283 183 257 243 280 Trgb
+0.000000 0.034650 0.010395 241 285 180 262 182 260 Trgb
+0.000000 0.049841 0.014952 241 285 182 260 243 283 Trgb
+0.000000 0.030381 0.009114 243 280 183 257 182 256 Trgb
+0.000000 0.015191 0.004557 243 280 182 256 243 279 Trgb
+0.000000 0.699531 0.209859 182 258 183 258 181 259 Trgb
+0.000000 0.699531 0.209859 183 258 182 259 181 259 Trgb
+0.000000 0.699531 0.209859 182 259 180 260 181 259 Trgb
+0.000000 0.699531 0.209859 180 260 179 260 181 259 Trgb
+0.000000 0.699531 0.209859 179 260 180 259 181 259 Trgb
+0.000000 0.699531 0.209859 180 259 182 258 181 259 Trgb
+0.000000 0.018127 0.005438 180 259 158 222 160 221 Trgb
+0.000000 0.021833 0.006550 180 259 160 221 182 258 Trgb
+0.000000 0.004807 0.001442 179 260 157 224 158 222 Trgb
+0.000000 0.009615 0.002884 179 260 158 222 180 259 Trgb
+0.000000 0.020731 0.006219 182 258 160 221 161 221 Trgb
+0.000000 0.015923 0.004777 182 258 161 221 183 258 Trgb
+0.000000 0.000000 0.000000 158 206 144 215 151 210 Trgb
+0.125687 0.116237 0.048385 165 212 154 217 158 206 Trgb
+0.054272 0.050191 0.020893 144 215 158 206 154 217 Trgb
+0.059609 0.055128 0.022947 154 217 145 225 144 215 Trgb
+0.005337 0.004936 0.002055 145 225 145 232 144 215 Trgb
+0.118139 0.109256 0.045479 173 213 165 212 158 206 Trgb
+0.290405 0.268570 0.111795 155 233 169 224 167 235 Trgb
+0.245347 0.226900 0.094449 154 217 165 212 169 224 Trgb
+0.246867 0.228306 0.095035 169 224 155 233 154 217 Trgb
+0.132545 0.122579 0.051025 145 225 154 217 155 233 Trgb
+0.189409 0.175168 0.072915 160 239 155 233 167 235 Trgb
+0.091599 0.084712 0.035262 155 233 160 239 145 232 Trgb
+0.078273 0.072388 0.030132 145 232 145 225 155 233 Trgb
+0.282857 0.261589 0.108889 169 224 174 230 167 235 Trgb
+0.237798 0.219919 0.091543 165 212 173 213 169 224 Trgb
+0.231771 0.214345 0.089223 174 230 169 224 173 213 Trgb
+0.000000 0.687742 0.206322 155 248 154 246 156 245 Trgb
+0.000000 0.687742 0.206322 154 246 155 244 156 245 Trgb
+0.000000 0.687742 0.206322 155 244 157 243 156 245 Trgb
+0.000000 0.687742 0.206322 157 243 158 244 156 245 Trgb
+0.000000 0.687742 0.206322 158 244 157 247 156 245 Trgb
+0.000000 0.687742 0.206322 157 247 155 248 156 245 Trgb
+0.000000 0.066457 0.019937 183 258 158 244 157 243 Trgb
+0.000000 0.033228 0.009969 183 258 157 243 182 257 Trgb
+0.000000 0.115018 0.034505 183 261 157 247 158 244 Trgb
+0.000000 0.107351 0.032205 183 261 158 244 183 258 Trgb
+0.000000 0.056227 0.016868 181 261 155 248 157 247 Trgb
+0.000000 0.089455 0.026837 181 261 157 247 183 261 Trgb
+0.095233 0.034446 0.025936 143 255 136 238 145 239 Trgb
+0.080765 0.029213 0.021996 149 265 139 256 143 255 Trgb
+0.051549 0.018645 0.014039 136 238 143 255 139 256 Trgb
+0.053915 0.019501 0.014683 136 238 153 226 145 239 Trgb
+0.010230 0.003700 0.002786 153 226 136 238 149 228 Trgb
+0.241449 0.087332 0.065756 160 244 143 255 145 239 Trgb
+0.216750 0.078399 0.059030 163 263 149 265 143 255 Trgb
+0.333750 0.120718 0.090894 143 255 160 244 163 263 Trgb
+0.445297 0.161065 0.121272 173 250 163 263 160 244 Trgb
+0.200131 0.072388 0.054504 153 226 160 244 145 239 Trgb
+0.104898 0.037942 0.028568 163 225 173 234 153 226 Trgb
+0.251114 0.090828 0.068388 160 244 153 226 173 234 Trgb
+0.403979 0.146120 0.110020 173 234 173 250 160 244 Trgb
+0.165202 0.059754 0.044991 149 265 163 263 159 264 Trgb
+0.383518 0.138719 0.104448 163 263 173 250 176 253 Trgb
+0.342200 0.123775 0.093195 173 250 173 234 176 253 Trgb
+0.000000 0.000000 0.000000 138 279 137 277 139 279 Trgb
+0.000000 0.000000 0.000000 137 277 138 277 139 279 Trgb
+0.000000 0.000000 0.000000 138 277 139 279 139 279 Trgb
+0.000000 0.000000 0.000000 139 279 140 281 139 279 Trgb
+0.000000 0.000000 0.000000 140 281 139 281 139 279 Trgb
+0.000000 0.000000 0.000000 139 281 138 279 139 279 Trgb
+0.000000 0.007901 0.002370 181 257 138 277 137 277 Trgb
+0.000000 0.003951 0.001185 181 257 137 277 180 257 Trgb
+0.000000 0.086361 0.025908 182 259 139 279 138 277 Trgb
+0.000000 0.049106 0.014732 182 259 138 277 181 257 Trgb
+0.000000 0.115714 0.034714 182 261 140 281 139 279 Trgb
+0.000000 0.119664 0.035899 182 261 139 279 182 259 Trgb
+0.103705 0.001023 0.020945 115 270 125 287 116 290 Trgb
+0.383332 0.003780 0.077422 134 263 143 280 125 287 Trgb
+0.180283 0.001778 0.036412 125 287 115 270 134 263 Trgb
+0.076578 0.000755 0.015467 128 256 134 263 115 270 Trgb
+0.130831 0.001290 0.026424 125 287 130 303 116 290 Trgb
+0.517330 0.005102 0.104486 143 280 149 296 125 287 Trgb
+0.341407 0.003367 0.068955 130 303 125 287 149 296 Trgb
+0.332454 0.003279 0.067146 149 296 149 301 130 303 Trgb
+0.239839 0.002365 0.048441 158 272 147 256 161 269 Trgb
+0.463077 0.004567 0.093529 143 280 134 263 158 272 Trgb
+0.260028 0.002564 0.052519 147 256 158 272 134 263 Trgb
+0.076578 0.000755 0.015467 134 263 128 256 147 256 Trgb
+0.346710 0.003419 0.070026 162 287 158 272 161 269 Trgb
+0.597075 0.005888 0.120593 149 296 143 280 158 272 Trgb
+0.500898 0.004940 0.101168 158 272 162 287 149 296 Trgb
+0.412199 0.004065 0.083253 149 301 149 296 162 287 Trgb
+0.000000 0.698970 0.209691 239 286 235 285 237 282 Trgb
+0.000000 0.698970 0.209691 235 285 233 282 237 282 Trgb
+0.000000 0.698970 0.209691 233 282 235 279 237 282 Trgb
+0.000000 0.698970 0.209691 235 279 239 279 237 282 Trgb
+0.000000 0.698970 0.209691 239 279 241 283 237 282 Trgb
+0.000000 0.698970 0.209691 241 283 239 286 237 282 Trgb
+0.000000 0.004282 0.001285 244 279 239 279 235 279 Trgb
+0.000000 0.002141 0.000642 244 279 235 279 241 279 Trgb
+0.000000 0.025877 0.007763 245 282 241 283 239 279 Trgb
+0.000000 0.016150 0.004845 245 282 239 279 244 279 Trgb
+0.000000 0.031322 0.009397 244 285 239 286 241 283 Trgb
+0.000000 0.033463 0.010039 244 285 241 283 245 282 Trgb
+0.000000 0.699983 0.209995 269 294 268 292 270 291 Trgb
+0.000000 0.699983 0.209995 268 292 269 290 270 291 Trgb
+0.000000 0.699983 0.209995 269 290 270 289 270 291 Trgb
+0.000000 0.699983 0.209995 270 289 272 290 270 291 Trgb
+0.000000 0.699983 0.209995 272 290 271 293 270 291 Trgb
+0.000000 0.699983 0.209995 271 293 269 294 270 291 Trgb
+0.000000 0.002735 0.000821 235 283 268 292 269 294 Trgb
+0.000000 0.003769 0.001131 235 283 269 294 236 285 Trgb
+0.000000 0.000567 0.000170 236 281 269 290 268 292 Trgb
+0.000000 0.001134 0.000340 236 281 268 292 235 283 Trgb
+0.000000 0.000000 0.000000 238 280 270 289 269 290 Trgb
+0.000000 0.000000 0.000000 238 280 269 290 236 281 Trgb
+0.376135 0.200455 0.115318 276 308 269 291 284 295 Trgb
+0.154087 0.082118 0.047241 265 311 256 303 276 308 Trgb
+0.237541 0.126594 0.072827 269 291 276 308 256 303 Trgb
+0.116308 0.061985 0.035659 256 303 255 288 269 291 Trgb
+0.346879 0.184863 0.106348 269 291 283 279 284 295 Trgb
+0.091976 0.049017 0.028199 263 274 275 271 283 279 Trgb
+0.196118 0.104518 0.060127 283 279 269 291 263 274 Trgb
+0.104142 0.055501 0.031929 255 288 263 274 269 291 Trgb
+0.381060 0.203080 0.116828 290 296 276 308 284 295 Trgb
+0.012166 0.006484 0.003730 255 288 256 303 250 286 Trgb
+0.351803 0.187488 0.107858 283 279 290 296 284 295 Trgb
+0.091976 0.049017 0.028199 275 271 284 279 283 279 Trgb
+0.201042 0.107142 0.061637 290 296 283 279 284 279 Trgb
+0.000000 0.000000 0.000000 263 274 255 288 250 286 Trgb
+0.000000 0.696680 0.209004 220 322 221 321 222 322 Trgb
+0.000000 0.696680 0.209004 221 321 224 322 222 322 Trgb
+0.000000 0.696680 0.209004 224 322 225 323 222 322 Trgb
+0.000000 0.696680 0.209004 225 323 223 324 222 322 Trgb
+0.000000 0.696680 0.209004 223 324 221 323 222 322 Trgb
+0.000000 0.696680 0.209004 221 323 220 322 222 322 Trgb
+0.000000 0.003836 0.001151 236 281 221 321 220 322 Trgb
+0.000000 0.001918 0.000575 236 281 220 322 235 282 Trgb
+0.000000 0.043010 0.012903 238 282 224 322 221 321 Trgb
+0.000000 0.024382 0.007315 238 282 221 321 236 281 Trgb
+0.000000 0.057802 0.017341 239 283 225 323 224 322 Trgb
+0.000000 0.059720 0.017916 239 283 224 322 238 282 Trgb
+0.032130 0.233204 0.053067 212 326 221 325 219 331 Trgb
+0.000000 0.000000 0.000000 212 319 216 316 212 326 Trgb
+0.019262 0.139807 0.031814 221 325 212 326 216 316 Trgb
+0.033635 0.244129 0.055553 216 316 223 317 221 325 Trgb
+0.055827 0.405196 0.092205 221 325 227 331 219 331 Trgb
+0.069102 0.501547 0.114130 231 321 233 326 227 331 Trgb
+0.067720 0.491517 0.111847 227 331 221 325 231 321 Trgb
+0.058397 0.423846 0.096448 223 317 231 321 221 325 Trgb
+0.012868 0.093396 0.021253 219 333 212 326 219 331 Trgb
+0.000000 0.000000 0.000000 216 316 212 319 217 314 Trgb
+0.001064 0.007725 0.001758 217 314 225 312 216 316 Trgb
+0.015437 0.112046 0.025497 223 317 216 316 225 312 Trgb
+0.036565 0.265389 0.060391 227 331 219 333 219 331 Trgb
+0.050904 0.369464 0.084074 233 326 231 321 232 318 Trgb
+0.031324 0.227352 0.051735 225 312 232 318 231 321 Trgb
+0.040198 0.291763 0.066392 231 321 223 317 225 312 Trgb
+0.000000 0.000000 0.000000 194 295 195 296 195 297 Trgb
+0.000000 0.000000 0.000000 195 296 196 298 195 297 Trgb
+0.000000 0.000000 0.000000 196 298 196 299 195 297 Trgb
+0.000000 0.000000 0.000000 196 299 194 299 195 297 Trgb
+0.000000 0.000000 0.000000 194 299 193 296 195 297 Trgb
+0.000000 0.000000 0.000000 193 296 194 295 195 297 Trgb
+0.000000 0.120080 0.036024 238 281 195 296 194 295 Trgb
+0.000000 0.060040 0.018012 238 281 194 295 236 280 Trgb
+0.000000 0.307224 0.092167 238 283 196 298 195 296 Trgb
+0.000000 0.243672 0.073102 238 283 195 296 238 281 Trgb
+0.000000 0.250695 0.075208 238 285 196 299 196 298 Trgb
+0.000000 0.310735 0.093220 238 285 196 298 238 283 Trgb
+0.017736 0.110162 0.025580 185 292 191 298 185 301 Trgb
+0.007836 0.048670 0.011301 191 286 195 288 185 292 Trgb
+0.025572 0.158832 0.036881 191 298 185 292 195 288 Trgb
+0.053236 0.330662 0.076779 195 288 199 295 191 298 Trgb
+0.027636 0.171654 0.039858 191 298 191 307 185 301 Trgb
+0.057770 0.358825 0.083319 201 303 199 308 191 307 Trgb
+0.058923 0.365987 0.084982 191 307 191 298 201 303 Trgb
+0.076687 0.476325 0.110603 199 295 201 303 191 298 Trgb
+0.000000 0.000000 0.000000 185 301 185 292 185 301 Trgb
+0.007836 0.048670 0.011301 195 288 191 286 199 287 Trgb
+0.029223 0.181512 0.042147 199 287 205 293 195 288 Trgb
+0.056887 0.353342 0.082046 199 295 195 288 205 293 Trgb
+0.009900 0.061492 0.014278 191 307 185 301 185 301 Trgb
+0.061421 0.381505 0.088585 199 308 201 303 204 302 Trgb
+0.066226 0.411348 0.095515 205 293 204 302 201 303 Trgb
+0.080339 0.499005 0.115869 201 303 199 295 205 293 Trgb
+0.000000 0.000000 0.000000 204 336 203 336 206 337 Trgb
+0.000000 0.000000 0.000000 203 336 206 337 206 337 Trgb
+0.000000 0.000000 0.000000 206 337 208 339 206 337 Trgb
+0.000000 0.000000 0.000000 208 339 208 339 206 337 Trgb
+0.000000 0.000000 0.000000 208 339 206 337 206 337 Trgb
+0.000000 0.000000 0.000000 206 337 204 336 206 337 Trgb
+0.000000 0.287100 0.086130 242 282 206 337 203 336 Trgb
+0.000000 0.143550 0.043065 242 282 203 336 240 280 Trgb
+0.000000 0.549999 0.165000 244 283 208 339 206 337 Trgb
+0.000000 0.490325 0.147098 244 283 206 337 242 282 Trgb
+0.000000 0.322574 0.096772 244 284 208 339 208 339 Trgb
+0.000000 0.466124 0.139837 244 284 208 339 244 283 Trgb
+0.000000 0.698197 0.209459 204 336 205 335 206 337 Trgb
+0.000000 0.698197 0.209459 205 335 207 337 206 337 Trgb
+0.000000 0.698197 0.209459 207 337 208 339 206 337 Trgb
+0.000000 0.698197 0.209459 208 339 206 339 206 337 Trgb
+0.000000 0.698197 0.209459 206 339 204 338 206 337 Trgb
+0.000000 0.698197 0.209459 204 338 204 336 206 337 Trgb
+0.000000 0.008040 0.002412 204 338 183 364 182 362 Trgb
+0.000000 0.004020 0.001206 204 338 182 362 204 336 Trgb
+0.000000 0.036178 0.010854 206 339 185 365 183 364 Trgb
+0.000000 0.024119 0.007236 206 339 183 364 204 338 Trgb
+0.000000 0.040198 0.012059 208 339 186 364 185 365 Trgb
+0.000000 0.044218 0.013265 208 339 185 365 206 339 Trgb
+0.000000 0.000000 0.000000 166 351 166 365 164 363 Trgb
+0.000000 0.000000 0.000000 172 382 164 363 166 365 Trgb
+0.121419 0.011415 0.026567 166 365 177 378 172 382 Trgb
+0.296498 0.027876 0.064875 177 378 193 382 172 382 Trgb
+0.293709 0.027614 0.064265 187 364 178 346 195 351 Trgb
+0.000000 0.000000 0.000000 166 365 166 351 178 346 Trgb
+0.171952 0.016166 0.037624 178 346 187 364 166 365 Trgb
+0.293371 0.027582 0.064191 177 378 166 365 187 364 Trgb
+0.469028 0.044097 0.102625 205 363 187 364 195 351 Trgb
+0.476578 0.044806 0.104277 203 375 193 382 205 363 Trgb
+0.522349 0.049110 0.114292 187 364 205 363 193 382 Trgb
+0.468450 0.044042 0.102498 193 382 177 378 187 364 Trgb
+0.121997 0.011470 0.026693 178 346 197 344 195 351 Trgb
+0.000000 0.000000 0.000000 166 351 176 345 178 346 Trgb
+0.000239 0.000023 0.000052 197 344 178 346 176 345 Trgb
+0.297315 0.027953 0.065054 197 344 205 363 195 351 Trgb
+0.000000 0.699742 0.209923 205 337 206 335 206 337 Trgb
+0.000000 0.699742 0.209923 206 335 207 336 206 337 Trgb
+0.000000 0.699742 0.209923 207 336 207 338 206 337 Trgb
+0.000000 0.699742 0.209923 207 338 206 340 206 337 Trgb
+0.000000 0.699742 0.209923 206 340 205 339 206 337 Trgb
+0.000000 0.699742 0.209923 205 339 205 337 206 337 Trgb
+0.000000 0.015210 0.004563 205 339 165 339 165 337 Trgb
+0.000000 0.011503 0.003451 205 339 165 337 205 337 Trgb
+0.000000 0.013720 0.004116 206 340 167 340 165 339 Trgb
+0.000000 0.016319 0.004896 206 340 165 339 205 339 Trgb
+0.000000 0.005197 0.001559 205 337 165 337 166 335 Trgb
+0.000000 0.002599 0.000780 205 337 166 335 206 335 Trgb
+0.058239 0.091602 0.029968 159 333 159 344 153 334 Trgb
+0.040484 0.063676 0.020832 156 347 153 334 159 344 Trgb
+0.079983 0.125802 0.041157 159 344 164 351 156 347 Trgb
+0.017755 0.027926 0.009136 163 325 159 333 153 334 Trgb
+0.232855 0.366250 0.119821 173 347 170 334 178 337 Trgb
+0.127138 0.199970 0.065422 159 344 159 333 170 334 Trgb
+0.193657 0.304596 0.099650 170 334 173 347 159 344 Trgb
+0.164256 0.258353 0.084522 164 351 159 344 173 347 Trgb
+0.207746 0.326757 0.106901 180 341 173 347 178 337 Trgb
+0.139147 0.218860 0.071601 170 350 164 351 173 347 Trgb
+0.176996 0.278391 0.091077 170 334 177 328 178 337 Trgb
+0.086654 0.136294 0.044590 159 333 163 325 170 334 Trgb
+0.097313 0.153061 0.050075 177 328 170 334 163 325 Trgb
+0.028415 0.044692 0.014621 163 325 169 324 177 328 Trgb
+0.151887 0.238897 0.078157 177 328 180 341 178 337 Trgb
+0.000000 0.698962 0.209689 220 381 218 381 220 381 Trgb
+0.000000 0.698962 0.209689 218 381 217 381 220 381 Trgb
+0.000000 0.698962 0.209689 217 381 219 380 220 381 Trgb
+0.000000 0.698962 0.209689 219 380 221 380 220 381 Trgb
+0.000000 0.698962 0.209689 221 380 222 380 220 381 Trgb
+0.000000 0.698962 0.209689 222 380 220 381 220 381 Trgb
+0.000000 0.016514 0.004954 205 337 219 380 217 381 Trgb
+0.000000 0.008257 0.002477 205 337 217 381 204 338 Trgb
+0.000000 0.033230 0.009969 207 336 221 380 219 380 Trgb
+0.000000 0.029001 0.008700 207 336 219 380 205 337 Trgb
+0.000000 0.020944 0.006283 208 337 222 380 221 380 Trgb
+0.000000 0.029201 0.008760 208 337 221 380 207 336 Trgb
+0.307148 0.060281 0.073486 210 400 221 393 226 401 Trgb
+0.252761 0.049607 0.060474 201 384 214 377 221 393 Trgb
+0.175305 0.034406 0.041942 221 393 210 400 201 384 Trgb
+0.015997 0.003140 0.003827 199 388 201 384 210 400 Trgb
+0.461610 0.090596 0.110441 221 393 239 390 226 401 Trgb
+0.396072 0.077734 0.094761 214 377 231 373 221 393 Trgb
+0.473078 0.092847 0.113185 239 390 221 393 231 373 Trgb
+0.422991 0.083017 0.101202 231 373 240 373 239 390 Trgb
+0.000000 0.000000 0.000000 211 364 201 371 213 360 Trgb
+0.093452 0.018341 0.022359 214 377 201 384 211 364 Trgb
+0.000000 0.000000 0.000000 201 371 211 364 201 384 Trgb
+0.000000 0.000000 0.000000 201 384 199 388 201 371 Trgb
+0.000000 0.000000 0.000000 229 361 211 364 213 360 Trgb
+0.236764 0.046468 0.056646 231 373 214 377 211 364 Trgb
+0.143312 0.028127 0.034288 211 364 229 361 231 373 Trgb
+0.252533 0.049563 0.060419 240 373 231 373 229 361 Trgb
+0.000000 0.699663 0.209899 381 310 379 311 383 307 Trgb
+0.000000 0.699663 0.209899 379 311 381 307 383 307 Trgb
+0.000000 0.699663 0.209899 381 307 385 304 383 307 Trgb
+0.000000 0.699663 0.209899 385 304 387 303 383 307 Trgb
+0.000000 0.699663 0.209899 387 303 385 307 383 307 Trgb
+0.000000 0.699663 0.209899 385 307 381 310 383 307 Trgb
+0.000000 0.009326 0.002798 303 230 381 307 379 311 Trgb
+0.000000 0.004663 0.001399 303 230 379 311 301 233 Trgb
+0.000000 0.018911 0.005673 307 226 385 304 381 307 Trgb
+0.000000 0.016450 0.004935 307 226 381 307 303 230 Trgb
+0.000000 0.012047 0.003614 310 226 387 303 385 304 Trgb
+0.000000 0.016710 0.005013 310 226 385 304 307 226 Trgb
+0.000000 0.000000 0.000000 381 310 381 307 383 307 Trgb
+0.000000 0.000000 0.000000 381 307 384 304 383 307 Trgb
+0.000000 0.000000 0.000000 384 304 386 304 383 307 Trgb
+0.000000 0.000000 0.000000 386 304 385 307 383 307 Trgb
+0.000000 0.000000 0.000000 385 307 383 310 383 307 Trgb
+0.000000 0.000000 0.000000 383 310 381 310 383 307 Trgb
+0.000000 0.025647 0.007694 383 310 439 357 437 357 Trgb
+0.000000 0.012824 0.003847 383 310 437 357 381 310 Trgb
+0.000000 0.054647 0.016394 385 307 442 354 439 357 Trgb
+0.000000 0.046559 0.013968 385 307 439 357 383 310 Trgb
+0.000000 0.037089 0.011127 386 304 442 352 442 354 Trgb
+0.000000 0.049912 0.014974 386 304 442 354 385 307 Trgb
+0.000000 0.687787 0.206336 438 356 437 353 440 355 Trgb
+0.000000 0.687787 0.206336 437 353 439 352 440 355 Trgb
+0.000000 0.687787 0.206336 439 352 442 353 440 355 Trgb
+0.000000 0.687787 0.206336 442 353 442 356 440 355 Trgb
+0.000000 0.687787 0.206336 442 356 440 357 440 355 Trgb
+0.000000 0.687787 0.206336 440 357 438 356 440 355 Trgb
+0.000000 0.101740 0.030522 442 356 464 346 462 348 Trgb
+0.000000 0.074722 0.022417 442 356 462 348 440 357 Trgb
+0.000000 0.096953 0.029086 442 353 463 344 464 346 Trgb
+0.000000 0.112855 0.033857 442 353 464 346 442 356 Trgb
+0.000000 0.027017 0.008105 439 352 461 343 463 344 Trgb
+0.000000 0.054034 0.016210 439 352 463 344 442 353 Trgb
+0.000000 0.691825 0.207548 460 345 460 344 461 345 Trgb
+0.000000 0.691825 0.207548 460 344 462 345 461 345 Trgb
+0.000000 0.691825 0.207548 462 345 463 345 461 345 Trgb
+0.000000 0.691825 0.207548 463 345 463 346 461 345 Trgb
+0.000000 0.691825 0.207548 463 346 461 346 461 345 Trgb
+0.000000 0.691825 0.207548 461 346 460 345 461 345 Trgb
+0.000000 0.075590 0.022677 462 345 472 314 474 314 Trgb
+0.000000 0.090975 0.027293 462 345 474 314 463 345 Trgb
+0.000000 0.020068 0.006020 460 344 471 313 472 314 Trgb
+0.000000 0.040137 0.012041 460 344 472 314 462 345 Trgb
+0.000000 0.000000 0.000000 460 345 470 314 471 313 Trgb
+0.000000 0.000000 0.000000 460 345 471 313 460 344 Trgb
+0.009659 0.007219 0.003376 468 307 460 308 472 301 Trgb
+0.060429 0.045167 0.021119 484 307 472 301 476 303 Trgb
+0.283462 0.211871 0.099067 485 316 478 310 484 307 Trgb
+0.156813 0.117208 0.054804 472 301 484 307 478 310 Trgb
+0.106043 0.079261 0.037061 478 310 468 307 472 301 Trgb
+0.182166 0.136158 0.063665 478 324 472 327 468 326 Trgb
+0.328054 0.245201 0.114651 485 316 483 320 478 324 Trgb
+0.077145 0.057661 0.026961 460 321 467 317 468 326 Trgb
+0.000000 0.000000 0.000000 459 313 460 308 460 321 Trgb
+0.035955 0.026874 0.012566 467 317 460 321 460 308 Trgb
+0.045614 0.034094 0.015942 460 308 468 307 467 317 Trgb
+0.195825 0.146368 0.068439 467 317 478 324 468 326 Trgb
+0.341713 0.255410 0.119425 478 310 485 316 478 324 Trgb
+0.251020 0.187622 0.087728 478 324 467 317 478 310 Trgb
+0.141998 0.106135 0.049627 468 307 478 310 467 317 Trgb
+0.000000 0.000000 0.000000 463 344 462 346 461 345 Trgb
+0.000000 0.000000 0.000000 462 346 461 347 461 345 Trgb
+0.000000 0.000000 0.000000 461 347 460 346 461 345 Trgb
+0.000000 0.000000 0.000000 460 346 460 345 461 345 Trgb
+0.000000 0.000000 0.000000 460 345 462 344 461 345 Trgb
+0.000000 0.000000 0.000000 462 344 463 344 461 345 Trgb
+0.000000 0.014411 0.004323 461 347 485 367 485 366 Trgb
+0.000000 0.007206 0.002162 461 347 485 366 460 346 Trgb
+0.000000 0.054003 0.016201 462 346 487 366 485 367 Trgb
+0.000000 0.037810 0.011343 462 346 485 367 461 347 Trgb
+0.000000 0.055784 0.016735 463 344 487 364 487 366 Trgb
+0.000000 0.062990 0.018897 463 344 487 366 462 346 Trgb
+0.117681 0.406254 0.104787 491 366 493 361 495 366 Trgb
+0.126551 0.436877 0.112686 495 366 491 373 491 366 Trgb
+0.122641 0.423379 0.109204 487 372 491 366 491 373 Trgb
+0.006385 0.022042 0.005685 481 358 487 358 480 360 Trgb
+0.038254 0.132061 0.034063 491 358 493 361 487 358 Trgb
+0.006385 0.022042 0.005685 487 358 481 358 491 358 Trgb
+0.077571 0.267788 0.069072 481 373 487 372 491 373 Trgb
+0.000000 0.000000 0.000000 477 365 481 358 480 360 Trgb
+0.014824 0.051177 0.013200 487 358 482 366 480 360 Trgb
+0.085380 0.294746 0.076025 493 361 491 366 487 358 Trgb
+0.061950 0.213861 0.055162 482 366 487 358 491 366 Trgb
+0.090341 0.311871 0.080442 491 366 487 372 482 366 Trgb
+0.008440 0.029135 0.007515 482 366 477 365 480 360 Trgb
+0.002055 0.007094 0.001830 481 373 479 370 477 365 Trgb
+0.010495 0.036229 0.009345 477 365 482 366 481 373 Trgb
+0.045270 0.156280 0.040310 487 372 481 373 482 366 Trgb
+0.000000 0.000000 0.000000 461 344 461 344 461 345 Trgb
+0.000000 0.000000 0.000000 461 344 462 346 461 345 Trgb
+0.000000 0.000000 0.000000 462 346 462 347 461 345 Trgb
+0.000000 0.000000 0.000000 462 347 461 346 461 345 Trgb
+0.000000 0.000000 0.000000 461 346 460 344 461 345 Trgb
+0.000000 0.000000 0.000000 460 344 461 344 461 345 Trgb
+0.000000 0.074013 0.022204 462 346 495 335 494 336 Trgb
+0.000000 0.062494 0.018748 462 346 494 336 462 347 Trgb
+0.000000 0.051548 0.015464 461 344 494 333 495 335 Trgb
+0.000000 0.068539 0.020562 461 344 495 335 462 346 Trgb
+0.000000 0.011519 0.003456 461 344 493 332 494 333 Trgb
+0.000000 0.023037 0.006911 461 344 494 333 461 344 Trgb
+0.094155 0.178202 0.054471 504 331 498 324 503 331 Trgb
+0.011283 0.021354 0.006527 494 326 490 324 498 324 Trgb
+0.075245 0.142413 0.043532 498 324 504 331 494 326 Trgb
+0.135510 0.256474 0.078397 498 333 494 326 504 331 Trgb
+0.000000 0.000000 0.000000 484 337 485 329 484 337 Trgb
+0.170934 0.323519 0.098891 497 344 499 341 503 339 Trgb
+0.190588 0.360716 0.110261 504 331 503 339 499 341 Trgb
+0.198172 0.375072 0.114649 499 341 498 333 504 331 Trgb
+0.021265 0.040247 0.012302 485 329 490 336 484 337 Trgb
+0.011283 0.021354 0.006527 490 324 494 326 485 329 Trgb
+0.032547 0.061601 0.018830 490 336 485 329 494 326 Trgb
+0.092812 0.175662 0.053695 494 326 498 333 490 336 Trgb
+0.031247 0.059140 0.018077 490 336 490 344 484 337 Trgb
+0.128236 0.242707 0.074189 499 341 497 344 490 344 Trgb
+0.105192 0.199092 0.060857 490 344 490 336 499 341 Trgb
+0.155475 0.294260 0.089947 498 333 499 341 490 336 Trgb
+0.000000 0.698488 0.209546 453 408 454 408 451 408 Trgb
+0.000000 0.698488 0.209546 454 408 452 409 451 408 Trgb
+0.000000 0.698488 0.209546 452 409 449 409 451 408 Trgb
+0.000000 0.698488 0.209546 449 409 448 409 451 408 Trgb
+0.000000 0.698488 0.209546 448 409 450 408 451 408 Trgb
+0.000000 0.698488 0.209546 450 408 453 408 451 408 Trgb
+0.000000 0.035029 0.010509 442 354 454 408 453 408 Trgb
+0.000000 0.040113 0.012034 442 354 453 408 441 354 Trgb
+0.000000 0.010168 0.003050 439 354 450 408 448 409 Trgb
+0.000000 0.005084 0.001525 439 354 448 409 437 355 Trgb
+0.000000 0.035216 0.010565 441 354 453 408 450 408 Trgb
+0.000000 0.025234 0.007570 441 354 450 408 439 354 Trgb
+0.000000 0.696558 0.208967 443 433 443 434 441 433 Trgb
+0.000000 0.696558 0.208967 443 434 441 435 441 433 Trgb
+0.000000 0.696558 0.208967 441 435 439 434 441 433 Trgb
+0.000000 0.696558 0.208967 439 434 439 432 441 433 Trgb
+0.000000 0.696558 0.208967 439 432 441 432 441 433 Trgb
+0.000000 0.696558 0.208967 441 432 443 433 441 433 Trgb
+0.000000 0.059446 0.017834 453 409 443 434 443 433 Trgb
+0.000000 0.060519 0.018156 453 409 443 433 453 408 Trgb
+0.000000 0.002147 0.000644 451 407 441 432 439 432 Trgb
+0.000000 0.001074 0.000322 451 407 439 432 449 407 Trgb
+0.000000 0.042136 0.012641 453 408 443 433 441 432 Trgb
+0.000000 0.022679 0.006804 453 408 441 432 451 407 Trgb
+0.329826 0.121701 0.090305 449 438 444 450 437 444 Trgb
+0.430194 0.158735 0.117786 456 429 458 440 449 438 Trgb
+0.398450 0.147022 0.109094 444 450 449 438 458 440 Trgb
+0.318627 0.117568 0.087239 458 440 450 446 444 450 Trgb
+0.180059 0.066439 0.049300 444 450 428 444 437 444 Trgb
+0.230910 0.085202 0.063223 432 432 449 438 437 444 Trgb
+0.331278 0.122236 0.090703 445 421 456 429 449 438 Trgb
+0.200618 0.074025 0.054929 449 438 432 432 445 421 Trgb
+0.050851 0.018763 0.013923 432 420 445 421 432 432 Trgb
+0.081143 0.029941 0.022217 428 444 432 432 437 444 Trgb
+0.004639 0.001712 0.001270 432 432 428 444 425 427 Trgb
+0.004639 0.001712 0.001270 425 427 432 420 432 432 Trgb
+0.223084 0.082315 0.061080 456 429 445 421 455 423 Trgb
+0.087786 0.032392 0.024036 438 416 455 423 445 421 Trgb
+0.046212 0.017052 0.012653 445 421 432 420 438 416 Trgb
+0.000000 0.699959 0.209988 485 427 484 429 484 427 Trgb
+0.000000 0.699959 0.209988 484 429 483 429 484 427 Trgb
+0.000000 0.699959 0.209988 483 429 484 427 484 427 Trgb
+0.000000 0.699959 0.209988 484 427 485 425 484 427 Trgb
+0.000000 0.699959 0.209988 485 425 485 426 484 427 Trgb
+0.000000 0.699959 0.209988 485 426 485 427 484 427 Trgb
+0.000000 0.005578 0.001673 450 408 484 427 483 429 Trgb
+0.000000 0.003816 0.001145 450 408 483 429 450 410 Trgb
+0.000000 0.005972 0.001792 451 407 485 425 484 427 Trgb
+0.000000 0.006656 0.001997 451 407 484 427 450 408 Trgb
+0.000000 0.001762 0.000529 452 407 485 426 485 425 Trgb
+0.000000 0.003525 0.001057 452 407 485 425 451 407 Trgb
+0.371114 0.204675 0.115158 489 443 491 432 498 435 Trgb
+0.172821 0.095313 0.053627 475 436 479 426 491 432 Trgb
+0.240382 0.132574 0.074591 491 432 489 443 475 436 Trgb
+0.114646 0.063229 0.035575 477 441 475 436 489 443 Trgb
+0.382205 0.210792 0.118599 491 432 499 422 498 435 Trgb
+0.183911 0.101430 0.057068 479 426 486 416 491 432 Trgb
+0.262562 0.144807 0.081474 499 422 491 432 486 416 Trgb
+0.144668 0.079787 0.044891 486 416 492 413 499 422 Trgb
+0.000000 0.000000 0.000000 471 421 470 432 471 419 Trgb
+0.047085 0.025968 0.014611 479 426 475 436 471 421 Trgb
+0.016255 0.008965 0.005044 470 432 471 421 475 436 Trgb
+0.016255 0.008965 0.005044 475 436 477 441 470 432 Trgb
+0.000000 0.000000 0.000000 480 412 471 421 471 419 Trgb
+0.058175 0.032084 0.018052 486 416 479 426 471 421 Trgb
+0.027345 0.015081 0.008485 471 421 480 412 486 416 Trgb
+0.035187 0.019406 0.010919 492 413 486 416 480 412 Trgb
+0.000000 0.668910 0.200673 449 408 449 407 451 408 Trgb
+0.000000 0.668910 0.200673 449 407 451 407 451 408 Trgb
+0.000000 0.668910 0.200673 451 407 452 408 451 408 Trgb
+0.000000 0.668910 0.200673 452 408 453 409 451 408 Trgb
+0.000000 0.668910 0.200673 453 409 451 409 451 408 Trgb
+0.000000 0.668910 0.200673 451 409 449 408 451 408 Trgb
+0.000000 0.099272 0.029782 451 409 439 442 437 441 Trgb
+0.000000 0.049636 0.014891 451 409 437 441 449 408 Trgb
+0.000000 0.181706 0.054512 453 409 441 441 439 442 Trgb
+0.000000 0.165307 0.049592 453 409 439 442 451 409 Trgb
+0.000000 0.000000 0.000000 449 408 437 441 437 440 Trgb
+0.000000 0.000000 0.000000 449 408 437 440 449 407 Trgb
+0.004375 0.127388 0.026353 433 445 440 448 437 446 Trgb
+0.003962 0.115366 0.023866 433 441 438 444 433 445 Trgb
+0.008337 0.242754 0.050218 440 448 433 445 438 444 Trgb
+0.015764 0.459008 0.094954 438 444 443 445 440 448 Trgb
+0.018343 0.534106 0.110490 443 445 446 443 440 448 Trgb
+0.000000 0.000000 0.000000 432 438 433 441 433 445 Trgb
+0.007368 0.214543 0.044382 443 439 436 437 441 435 Trgb
+0.003962 0.115366 0.023866 438 444 433 441 436 437 Trgb
+0.010090 0.293808 0.060780 436 437 443 439 438 444 Trgb
+0.017517 0.510062 0.105516 443 445 438 444 443 439 Trgb
+0.009534 0.277619 0.057431 445 436 443 439 441 435 Trgb
+0.014836 0.431982 0.089364 443 439 445 436 446 443 Trgb
+0.020096 0.585160 0.121051 446 443 443 445 443 439 Trgb
+0.001240 0.036101 0.007468 436 437 438 433 441 435 Trgb
+0.000000 0.000000 0.000000 433 441 432 438 436 437 Trgb
+0.000000 0.000000 0.000000 438 433 436 437 432 438 Trgb
+0.000000 0.699421 0.209826 496 351 496 354 496 353 Trgb
+0.000000 0.699421 0.209826 496 354 496 355 496 353 Trgb
+0.000000 0.699421 0.209826 496 355 496 354 496 353 Trgb
+0.000000 0.699421 0.209826 496 354 496 351 496 353 Trgb
+0.000000 0.699421 0.209826 496 351 496 350 496 353 Trgb
+0.000000 0.699421 0.209826 496 350 496 351 496 353 Trgb
+0.000000 0.023624 0.007087 439 356 496 354 496 355 Trgb
+0.000000 0.018777 0.005633 439 356 496 355 440 357 Trgb
+0.000000 0.019183 0.005755 439 354 496 351 496 354 Trgb
+0.000000 0.023827 0.007148 439 354 496 354 439 356 Trgb
+0.000000 0.004847 0.001454 439 352 496 350 496 351 Trgb
+0.000000 0.009693 0.002908 439 352 496 351 439 354 Trgb
+0.000000 0.172605 0.051782 496 353 494 352 496 353 Trgb
+0.000000 0.172605 0.051782 494 352 494 351 496 353 Trgb
+0.000000 0.172605 0.051782 494 351 496 352 496 353 Trgb
+0.000000 0.172605 0.051782 496 352 497 353 496 353 Trgb
+0.000000 0.172605 0.051782 497 353 497 354 496 353 Trgb
+0.000000 0.172605 0.051782 497 354 496 353 496 353 Trgb
+0.000000 0.589120 0.176736 497 353 517 321 517 322 Trgb
+0.000000 0.508333 0.152500 497 353 517 322 497 354 Trgb
+0.000000 0.384877 0.115463 496 352 516 320 517 321 Trgb
+0.000000 0.527393 0.158218 496 352 517 321 497 353 Trgb
+0.000000 0.080787 0.024236 494 351 515 320 516 320 Trgb
+0.000000 0.161575 0.048472 494 351 516 320 496 352 Trgb
+0.147652 0.061182 0.041767 532 317 522 307 524 308 Trgb
+0.249743 0.103485 0.070645 526 322 516 315 522 307 Trgb
+0.298271 0.123593 0.084373 522 307 532 317 526 322 Trgb
+0.412156 0.170783 0.116588 531 329 526 322 532 317 Trgb
+0.040189 0.016653 0.011368 522 307 512 306 524 308 Trgb
+0.099123 0.041073 0.028039 516 315 506 311 522 307 Trgb
+0.040189 0.016653 0.011368 512 306 522 307 506 311 Trgb
+0.000000 0.000000 0.000000 506 311 502 313 512 306 Trgb
+0.155686 0.064511 0.044039 510 326 520 336 507 334 Trgb
+0.252711 0.104714 0.071485 516 315 526 322 510 326 Trgb
+0.304207 0.126053 0.086052 520 336 510 326 526 322 Trgb
+0.415124 0.172013 0.117427 526 322 531 329 520 336 Trgb
+0.045255 0.018752 0.012802 500 325 510 326 507 334 Trgb
+0.102091 0.042303 0.028879 506 311 516 315 510 326 Trgb
+0.043157 0.017883 0.012208 510 326 500 325 506 311 Trgb
+0.000000 0.000000 0.000000 502 313 506 311 500 325 Trgb
+0.000000 0.000000 0.000000 496 354 495 352 496 353 Trgb
+0.000000 0.000000 0.000000 495 352 494 351 496 353 Trgb
+0.000000 0.000000 0.000000 494 351 496 351 496 353 Trgb
+0.000000 0.000000 0.000000 496 351 497 353 496 353 Trgb
+0.000000 0.000000 0.000000 497 353 497 354 496 353 Trgb
+0.000000 0.000000 0.000000 497 354 496 354 496 353 Trgb
+0.000000 0.192098 0.057629 497 353 525 330 525 331 Trgb
+0.000000 0.177366 0.053210 497 353 525 331 497 354 Trgb
+0.000000 0.098407 0.029522 496 351 523 328 525 330 Trgb
+0.000000 0.152618 0.045785 496 351 525 330 497 353 Trgb
+0.000000 0.014732 0.004420 494 351 522 328 523 328 Trgb
+0.000000 0.029463 0.008839 494 351 523 328 496 351 Trgb
+0.180153 0.097673 0.055565 540 329 531 317 535 320 Trgb
+0.192968 0.104621 0.059518 532 329 523 320 531 317 Trgb
+0.282334 0.153073 0.087081 531 317 540 329 532 329 Trgb
+0.391187 0.212089 0.120655 535 338 532 329 540 329 Trgb
+0.087413 0.047393 0.026961 524 342 516 342 512 339 Trgb
+0.315976 0.171312 0.097458 535 338 532 342 524 342 Trgb
+0.067950 0.036840 0.020958 523 320 515 317 531 317 Trgb
+0.092721 0.050270 0.028598 515 330 524 342 512 339 Trgb
+0.160670 0.087110 0.049556 523 320 532 329 515 330 Trgb
+0.217739 0.118051 0.067158 524 342 515 330 532 329 Trgb
+0.358889 0.194578 0.110694 532 329 535 338 524 342 Trgb
+0.005308 0.002878 0.001637 508 330 515 330 512 339 Trgb
+0.035652 0.019330 0.010996 515 317 523 320 515 330 Trgb
+0.005308 0.002878 0.001637 515 330 508 330 515 317 Trgb
+0.000000 0.000000 0.000000 512 321 515 317 508 330 Trgb
+0.000000 0.000000 0.000000 496 353 495 354 496 353 Trgb
+0.000000 0.000000 0.000000 495 354 495 354 496 353 Trgb
+0.000000 0.000000 0.000000 495 354 496 352 496 353 Trgb
+0.000000 0.000000 0.000000 496 352 497 351 496 353 Trgb
+0.000000 0.000000 0.000000 497 351 497 352 496 353 Trgb
+0.000000 0.000000 0.000000 497 352 496 353 496 353 Trgb
+0.000000 0.028228 0.008468 497 352 526 379 524 380 Trgb
+0.000000 0.027588 0.008276 497 352 524 380 496 353 Trgb
+0.000000 0.010903 0.003271 497 351 526 378 526 379 Trgb
+0.000000 0.019885 0.005966 497 351 526 379 497 352 Trgb
+0.000000 0.017965 0.005390 496 353 524 380 523 381 Trgb
+0.000000 0.008983 0.002695 496 353 523 381 495 354 Trgb
+0.553377 0.015557 0.113787 535 393 545 380 539 394 Trgb
+0.488126 0.013722 0.100370 525 384 535 373 535 393 Trgb
+0.537456 0.015109 0.110513 545 380 535 393 535 373 Trgb
+0.413448 0.011623 0.085014 535 373 539 366 545 380 Trgb
+0.433488 0.012186 0.089135 525 399 535 393 539 394 Trgb
+0.368237 0.010352 0.075718 514 393 525 384 535 393 Trgb
+0.297677 0.008368 0.061209 535 393 525 399 514 393 Trgb
+0.088894 0.002499 0.018279 510 393 514 393 525 399 Trgb
+0.000000 0.000000 0.000000 524 360 514 373 510 366 Trgb
+0.279343 0.007853 0.057439 535 373 525 384 514 373 Trgb
+0.150823 0.004240 0.031012 514 373 524 360 535 373 Trgb
+0.235597 0.006623 0.048444 539 366 535 373 524 360 Trgb
+0.000000 0.000000 0.000000 514 373 504 380 510 366 Trgb
+0.159453 0.004483 0.032787 525 384 514 393 514 373 Trgb
+0.030933 0.000870 0.006360 504 380 514 373 514 393 Trgb
+0.030933 0.000870 0.006360 514 393 510 393 504 380 Trgb
+0.000000 0.698638 0.209592 397 383 401 383 397 384 Trgb
+0.000000 0.698638 0.209592 401 383 400 384 397 384 Trgb
+0.000000 0.698638 0.209592 400 384 396 385 397 384 Trgb
+0.000000 0.698638 0.209592 396 385 393 385 397 384 Trgb
+0.000000 0.698638 0.209592 393 385 393 384 397 384 Trgb
+0.000000 0.698638 0.209592 393 384 397 383 397 384 Trgb
+0.000000 0.038092 0.011428 387 306 401 383 397 383 Trgb
+0.000000 0.033330 0.009999 387 306 397 383 384 306 Trgb
+0.000000 0.000000 0.000000 380 307 393 384 393 385 Trgb
+0.000000 0.000000 0.000000 380 307 393 385 380 308 Trgb
+0.000000 0.019045 0.005714 384 306 397 383 393 384 Trgb
+0.000000 0.009523 0.002857 384 306 393 384 380 307 Trgb
+0.000000 0.617376 0.185213 369 434 371 436 369 435 Trgb
+0.000000 0.617376 0.185213 371 436 371 437 369 435 Trgb
+0.000000 0.617376 0.185213 371 437 369 436 369 435 Trgb
+0.000000 0.617376 0.185213 369 436 367 434 369 435 Trgb
+0.000000 0.617376 0.185213 367 434 367 434 369 435 Trgb
+0.000000 0.617376 0.185213 367 434 369 434 369 435 Trgb
+0.000000 0.264623 0.079387 399 385 371 436 369 434 Trgb
+0.000000 0.200825 0.060247 399 385 369 434 397 383 Trgb
+0.000000 0.237071 0.071121 399 386 371 437 371 436 Trgb
+0.000000 0.282747 0.084824 399 386 371 436 399 385 Trgb
+0.000000 0.091351 0.027405 397 383 369 434 367 434 Trgb
+0.000000 0.045675 0.013703 397 383 367 434 394 383 Trgb
+0.000000 0.698748 0.209624 369 435 369 433 369 435 Trgb
+0.000000 0.698748 0.209624 369 433 369 434 369 435 Trgb
+0.000000 0.698748 0.209624 369 434 369 435 369 435 Trgb
+0.000000 0.698748 0.209624 369 435 370 437 369 435 Trgb
+0.000000 0.698748 0.209624 370 437 369 437 369 435 Trgb
+0.000000 0.698748 0.209624 369 437 369 435 369 435 Trgb
+0.000000 0.035263 0.010579 369 437 329 445 329 443 Trgb
+0.000000 0.028701 0.008610 369 437 329 443 369 435 Trgb
+0.000000 0.027065 0.008120 370 437 329 445 329 445 Trgb
+0.000000 0.034445 0.010334 370 437 329 445 369 437 Trgb
+0.000000 0.014759 0.004428 369 435 329 443 328 442 Trgb
+0.000000 0.007380 0.002214 369 435 328 442 369 433 Trgb
+0.000793 0.000950 0.000349 318 443 321 455 315 446 Trgb
+0.122526 0.146716 0.053848 327 441 329 451 318 443 Trgb
+0.080197 0.096030 0.035245 321 455 318 443 329 451 Trgb
+0.149369 0.178859 0.065646 329 451 331 457 321 455 Trgb
+0.000000 0.000000 0.000000 318 436 318 443 315 446 Trgb
+0.043122 0.051635 0.018951 326 432 327 441 318 443 Trgb
+0.000000 0.000000 0.000000 318 443 318 436 326 432 Trgb
+0.000000 0.000000 0.000000 326 430 326 432 318 436 Trgb
+0.243693 0.291804 0.107100 340 451 337 439 342 441 Trgb
+0.201137 0.240847 0.088397 329 451 327 441 337 439 Trgb
+0.255047 0.305399 0.112089 337 439 340 451 329 451 Trgb
+0.245608 0.294097 0.107941 331 457 329 451 340 451 Trgb
+0.146662 0.175617 0.064456 337 439 337 432 342 441 Trgb
+0.121733 0.145766 0.053500 327 441 326 432 337 439 Trgb
+0.078611 0.094131 0.034548 337 432 337 439 326 432 Trgb
+0.000000 0.000000 0.000000 326 432 326 430 337 432 Trgb
+0.000000 0.696899 0.209070 360 448 358 449 358 447 Trgb
+0.000000 0.696899 0.209070 358 449 356 448 358 447 Trgb
+0.000000 0.696899 0.209070 356 448 356 446 358 447 Trgb
+0.000000 0.696899 0.209070 356 446 358 445 358 447 Trgb
+0.000000 0.696899 0.209070 358 445 360 446 358 447 Trgb
+0.000000 0.696899 0.209070 360 446 360 448 358 447 Trgb
+0.000000 0.000000 0.000000 369 433 358 445 356 446 Trgb
+0.000000 0.000000 0.000000 369 433 356 446 367 434 Trgb
+0.000000 0.028512 0.008554 371 434 360 446 358 445 Trgb
+0.000000 0.014256 0.004277 371 434 358 445 369 433 Trgb
+0.000000 0.057393 0.017218 371 436 360 448 360 446 Trgb
+0.000000 0.050081 0.015024 371 436 360 446 371 434 Trgb
+0.031196 0.349100 0.076059 362 452 354 455 356 450 Trgb
+0.044298 0.495717 0.108003 366 452 361 456 362 452 Trgb
+0.031814 0.356014 0.077566 354 455 362 452 361 456 Trgb
+0.013721 0.153545 0.033453 361 456 355 455 354 455 Trgb
+0.013103 0.146631 0.031947 354 455 351 446 356 450 Trgb
+0.000000 0.000000 0.000000 350 450 350 443 351 446 Trgb
+0.004147 0.046407 0.010111 351 446 354 455 350 450 Trgb
+0.035568 0.398023 0.086718 359 444 362 452 356 450 Trgb
+0.048670 0.544640 0.118662 366 445 366 452 362 452 Trgb
+0.040558 0.453861 0.098884 362 452 359 444 366 445 Trgb
+0.025556 0.285986 0.062308 362 440 366 445 359 444 Trgb
+0.017475 0.195555 0.042606 351 446 359 444 356 450 Trgb
+0.000000 0.000000 0.000000 350 443 355 439 351 446 Trgb
+0.008519 0.095331 0.020770 359 444 351 446 355 439 Trgb
+0.011610 0.129925 0.028307 355 439 362 440 359 444 Trgb
+0.017037 0.190656 0.041539 366 445 362 440 362 440 Trgb
+0.000000 0.000000 0.000000 367 434 369 434 369 435 Trgb
+0.000000 0.000000 0.000000 369 434 371 435 369 435 Trgb
+0.000000 0.000000 0.000000 371 435 371 436 369 435 Trgb
+0.000000 0.000000 0.000000 371 436 369 436 369 435 Trgb
+0.000000 0.000000 0.000000 369 436 367 436 369 435 Trgb
+0.000000 0.000000 0.000000 367 436 367 434 369 435 Trgb
+0.000000 0.242861 0.072858 369 436 372 469 370 468 Trgb
+0.000000 0.121430 0.036429 369 436 370 468 367 436 Trgb
+0.000000 0.537282 0.161185 371 436 374 468 372 469 Trgb
+0.000000 0.450787 0.135236 371 436 372 469 369 436 Trgb
+0.000000 0.380917 0.114275 371 435 374 467 374 468 Trgb
+0.000000 0.502347 0.150704 371 435 374 468 371 436 Trgb
+0.023187 0.019364 0.008510 357 469 363 475 366 481 Trgb
+0.316349 0.264191 0.116108 374 477 384 473 381 480 Trgb
+0.200748 0.167650 0.073679 381 480 366 481 374 477 Trgb
+0.121324 0.101321 0.044529 363 475 374 477 366 481 Trgb
+0.006442 0.005380 0.002364 365 465 363 456 371 456 Trgb
+0.006442 0.005380 0.002364 363 456 365 465 357 469 Trgb
+0.018714 0.015629 0.006869 363 475 357 469 365 465 Trgb
+0.298993 0.249697 0.109738 384 473 387 466 381 480 Trgb
+0.093666 0.078222 0.034378 379 463 365 465 371 456 Trgb
+0.311877 0.260456 0.114467 384 473 374 477 379 463 Trgb
+0.191803 0.160180 0.070397 365 465 379 463 374 477 Trgb
+0.116852 0.097586 0.042888 374 477 363 475 365 465 Trgb
+0.000000 0.000000 0.000000 363 456 378 454 371 456 Trgb
+0.087224 0.072843 0.032013 378 454 379 463 371 456 Trgb
+0.294521 0.245962 0.108097 387 466 384 473 379 463 Trgb
+0.168006 0.140306 0.061662 379 463 378 454 387 466 Trgb
+0.000000 0.699893 0.209968 443 419 441 421 443 419 Trgb
+0.000000 0.699893 0.209968 441 421 441 420 443 419 Trgb
+0.000000 0.699893 0.209968 441 420 442 418 443 419 Trgb
+0.000000 0.699893 0.209968 442 418 444 416 443 419 Trgb
+0.000000 0.699893 0.209968 444 416 444 417 443 419 Trgb
+0.000000 0.699893 0.209968 444 417 443 419 443 419 Trgb
+0.000000 0.001169 0.000351 395 386 441 420 441 421 Trgb
+0.000000 0.000585 0.000175 395 386 441 421 396 386 Trgb
+0.000000 0.008146 0.002444 396 383 442 418 441 420 Trgb
+0.000000 0.004950 0.001485 396 383 441 420 395 386 Trgb
+0.000000 0.010173 0.003052 398 382 444 416 442 418 Trgb
+0.000000 0.010758 0.003227 398 382 442 418 396 383 Trgb
+0.000000 0.699690 0.209907 475 413 475 415 474 414 Trgb
+0.000000 0.699690 0.209907 475 415 474 416 474 414 Trgb
+0.000000 0.699690 0.209907 474 416 473 415 474 414 Trgb
+0.000000 0.699690 0.209907 473 415 473 412 474 414 Trgb
+0.000000 0.699690 0.209907 473 412 474 412 474 414 Trgb
+0.000000 0.699690 0.209907 474 412 475 413 474 414 Trgb
+0.000000 0.009727 0.002918 441 419 473 415 474 416 Trgb
+0.000000 0.014819 0.004446 441 419 474 416 443 421 Trgb
+0.000000 0.001545 0.000463 441 417 473 412 473 415 Trgb
+0.000000 0.003090 0.000927 441 417 473 415 441 419 Trgb
+0.000000 0.000000 0.000000 442 416 474 412 473 412 Trgb
+0.000000 0.000000 0.000000 442 416 473 412 441 417 Trgb
+0.444852 0.102658 0.109502 492 406 490 425 489 411 Trgb
+0.475371 0.109701 0.117014 490 425 477 419 489 411 Trgb
+0.234152 0.054035 0.057637 472 433 463 423 477 419 Trgb
+0.394626 0.091068 0.097139 477 419 490 425 472 433 Trgb
+0.358772 0.082794 0.088313 482 431 472 433 490 425 Trgb
+0.311095 0.071791 0.076577 479 399 492 406 489 411 Trgb
+0.148213 0.034203 0.036483 492 406 479 399 476 395 Trgb
+0.048297 0.011145 0.011888 466 396 476 395 479 399 Trgb
+0.341613 0.078834 0.084089 477 419 479 399 489 411 Trgb
+0.152014 0.035080 0.037419 463 423 461 407 477 419 Trgb
+0.178731 0.041246 0.043995 479 399 477 419 461 407 Trgb
+0.048297 0.011145 0.011888 461 407 466 396 479 399 Trgb
+0.103718 0.023935 0.025530 463 423 472 433 456 422 Trgb
+0.021580 0.004980 0.005312 461 407 463 423 456 422 Trgb
+0.000000 0.000000 0.000000 456 422 458 403 461 407 Trgb
+0.000000 0.000000 0.000000 466 396 461 407 458 403 Trgb
+0.000000 0.000000 0.000000 442 419 441 419 443 419 Trgb
+0.000000 0.000000 0.000000 441 419 441 419 443 419 Trgb
+0.000000 0.000000 0.000000 441 419 443 418 443 419 Trgb
+0.000000 0.000000 0.000000 443 418 445 418 443 419 Trgb
+0.000000 0.000000 0.000000 445 418 444 418 443 419 Trgb
+0.000000 0.000000 0.000000 444 418 442 419 443 419 Trgb
+0.000000 0.045400 0.013620 444 418 452 460 450 460 Trgb
+0.000000 0.030855 0.009257 444 418 450 460 442 419 Trgb
+0.000000 0.049070 0.014721 445 418 453 460 452 460 Trgb
+0.000000 0.054507 0.016352 445 418 452 460 444 418 Trgb
+0.000000 0.010874 0.003262 442 419 450 460 449 460 Trgb
+0.000000 0.005437 0.001631 442 419 449 460 441 419 Trgb
+0.353693 0.099034 0.090545 448 476 466 472 455 479 Trgb
+0.272514 0.076304 0.069763 443 463 458 461 448 476 Trgb
+0.402283 0.112639 0.102985 466 472 448 476 458 461 Trgb
+0.462817 0.129589 0.118481 458 461 468 458 466 472 Trgb
+0.182115 0.050992 0.046621 442 475 448 476 455 479 Trgb
+0.134561 0.037677 0.034448 434 464 443 463 448 476 Trgb
+0.092752 0.025971 0.023745 448 476 442 475 434 464 Trgb
+0.045201 0.012656 0.011571 461 445 443 449 447 441 Trgb
+0.179761 0.050333 0.046019 458 461 443 463 443 449 Trgb
+0.183153 0.051283 0.046887 443 449 461 445 458 461 Trgb
+0.336439 0.094203 0.086129 468 458 458 461 461 445 Trgb
+0.277313 0.077648 0.070992 469 456 468 458 461 445 Trgb
+0.000000 0.000000 0.000000 443 449 437 448 447 441 Trgb
+0.041809 0.011706 0.010703 443 463 434 464 443 449 Trgb
+0.000000 0.000000 0.000000 437 448 443 449 434 464 Trgb
+0.000000 0.698795 0.209638 443 439 445 440 442 440 Trgb
+0.000000 0.698795 0.209638 445 440 444 442 442 440 Trgb
+0.000000 0.698795 0.209638 444 442 441 442 442 440 Trgb
+0.000000 0.698795 0.209638 441 442 440 440 442 440 Trgb
+0.000000 0.698795 0.209638 440 440 441 439 442 440 Trgb
+0.000000 0.698795 0.209638 441 439 443 439 442 440 Trgb
+0.000000 0.031657 0.009497 445 418 445 440 443 439 Trgb
+0.000000 0.022869 0.006861 445 418 443 439 444 417 Trgb
+0.000000 0.000000 0.000000 441 417 441 439 440 440 Trgb
+0.000000 0.000000 0.000000 441 417 440 440 440 419 Trgb
+0.000000 0.009388 0.002816 444 417 443 439 441 439 Trgb
+0.000000 0.004694 0.001408 444 417 441 439 441 417 Trgb
+0.464524 0.061662 0.105237 449 436 456 454 442 452 Trgb
+0.328483 0.043604 0.074417 452 424 463 435 449 436 Trgb
+0.473280 0.062825 0.107221 456 454 449 436 463 435 Trgb
+0.488213 0.064807 0.110604 463 435 462 449 456 454 Trgb
+0.388439 0.051563 0.088000 456 454 436 460 442 452 Trgb
+0.321110 0.042625 0.072747 436 460 456 454 449 458 Trgb
+0.265926 0.035300 0.060245 428 442 449 436 442 452 Trgb
+0.186236 0.024722 0.042191 435 423 452 424 449 436 Trgb
+0.132435 0.017580 0.030003 449 436 428 442 435 423 Trgb
+0.000000 0.000000 0.000000 423 432 435 423 428 442 Trgb
+0.196048 0.026024 0.044414 463 435 452 424 449 421 Trgb
+0.189841 0.025200 0.043008 436 460 428 442 442 452 Trgb
+0.056350 0.007480 0.012766 428 442 436 460 422 446 Trgb
+0.000000 0.000000 0.000000 422 446 423 432 428 442 Trgb
+0.053800 0.007142 0.012188 452 424 435 423 449 421 Trgb
+0.000000 0.000000 0.000000 435 423 423 432 429 427 Trgb
+0.000000 0.000000 0.000000 394 385 396 383 397 384 Trgb
+0.000000 0.000000 0.000000 396 383 398 382 397 384 Trgb
+0.000000 0.000000 0.000000 398 382 399 383 397 384 Trgb
+0.000000 0.000000 0.000000 399 383 398 385 397 384 Trgb
+0.000000 0.000000 0.000000 398 385 395 386 397 384 Trgb
+0.000000 0.000000 0.000000 395 386 394 385 397 384 Trgb
+0.000000 0.009095 0.002729 395 386 418 431 417 430 Trgb
+0.000000 0.004548 0.001364 395 386 417 430 394 385 Trgb
+0.000000 0.072128 0.021639 398 385 420 430 418 431 Trgb
+0.000000 0.042886 0.012866 398 385 418 431 395 386 Trgb
+0.000000 0.092276 0.027683 399 383 422 429 420 430 Trgb
+0.000000 0.096823 0.029047 399 383 420 430 398 385 Trgb
+0.000000 0.697133 0.209140 418 430 418 428 419 429 Trgb
+0.000000 0.697133 0.209140 418 428 419 427 419 429 Trgb
+0.000000 0.697133 0.209140 419 427 421 428 419 429 Trgb
+0.000000 0.697133 0.209140 421 428 421 430 419 429 Trgb
+0.000000 0.697133 0.209140 421 430 419 431 419 429 Trgb
+0.000000 0.697133 0.209140 419 431 418 430 419 429 Trgb
+0.000000 0.020589 0.006177 419 431 420 435 418 434 Trgb
+0.000000 0.010295 0.003088 419 431 418 434 418 430 Trgb
+0.000000 0.052480 0.015744 421 430 422 435 420 435 Trgb
+0.000000 0.041682 0.012505 421 430 420 435 419 431 Trgb
+0.000000 0.042689 0.012807 421 428 422 433 422 435 Trgb
+0.000000 0.052984 0.015895 421 428 422 435 421 430 Trgb
+0.291762 0.030182 0.064389 426 444 408 438 420 431 Trgb
+0.050562 0.005231 0.011159 415 452 403 442 408 438 Trgb
+0.235211 0.024332 0.051909 408 438 426 444 415 452 Trgb
+0.389230 0.040265 0.085899 429 450 415 452 426 444 Trgb
+0.425848 0.044053 0.093980 432 426 426 444 420 431 Trgb
+0.413548 0.042781 0.091266 437 425 438 439 432 426 Trgb
+0.503383 0.052074 0.111092 426 444 432 426 438 439 Trgb
+0.523316 0.054136 0.115491 438 439 429 450 426 444 Trgb
+0.107113 0.011081 0.023639 408 438 413 420 420 431 Trgb
+0.005095 0.000527 0.001124 403 442 402 428 408 438 Trgb
+0.005095 0.000527 0.001124 413 420 408 438 402 428 Trgb
+0.000000 0.000000 0.000000 402 428 411 417 413 420 Trgb
+0.241200 0.024952 0.053230 413 420 432 426 420 431 Trgb
+0.233994 0.024206 0.051640 426 416 437 425 432 426 Trgb
+0.139181 0.014398 0.030716 432 426 413 420 426 416 Trgb
+0.000000 0.000000 0.000000 411 417 426 416 413 420 Trgb
+0.000000 0.697171 0.209151 417 467 417 468 415 467 Trgb
+0.000000 0.697171 0.209151 417 468 415 468 415 467 Trgb
+0.000000 0.697171 0.209151 415 468 414 467 415 467 Trgb
+0.000000 0.697171 0.209151 414 467 414 467 415 467 Trgb
+0.000000 0.697171 0.209151 414 467 415 467 415 467 Trgb
+0.000000 0.697171 0.209151 415 467 417 467 415 467 Trgb
+0.000000 0.044776 0.013433 421 430 417 468 417 467 Trgb
+0.000000 0.053715 0.016115 421 430 417 467 421 429 Trgb
+0.000000 0.017878 0.005364 419 428 415 467 414 467 Trgb
+0.000000 0.008939 0.002682 419 428 414 467 418 429 Trgb
+0.000000 0.050709 0.015213 421 429 417 467 415 467 Trgb
+0.000000 0.038763 0.011629 421 429 415 467 419 428 Trgb
+0.398748 0.030157 0.085781 427 480 421 486 413 487 Trgb
+0.541936 0.040987 0.116584 433 466 435 471 427 480 Trgb
+0.376526 0.028477 0.081001 407 476 427 480 413 487 Trgb
+0.519713 0.039306 0.111804 421 461 433 466 427 480 Trgb
+0.393916 0.029792 0.084742 427 480 407 476 421 461 Trgb
+0.185847 0.014056 0.039980 405 460 421 461 407 476 Trgb
+0.393176 0.029736 0.084582 435 471 433 466 429 453 Trgb
+0.168457 0.012740 0.036239 401 482 407 476 413 487 Trgb
+0.063268 0.004785 0.013611 407 476 401 482 396 463 Trgb
+0.063268 0.004785 0.013611 396 463 405 460 407 476 Trgb
+0.059310 0.004486 0.012759 429 453 410 449 417 448 Trgb
+0.370954 0.028055 0.079802 433 466 421 461 429 453 Trgb
+0.181888 0.013756 0.039129 410 449 429 453 421 461 Trgb
+0.122578 0.009271 0.026370 421 461 405 460 410 449 Trgb
+0.000000 0.000000 0.000000 405 460 396 463 410 449 Trgb
+0.000000 0.013103 0.003931 419 430 457 446 456 446 Trgb
+0.000000 0.006551 0.001965 419 430 456 446 419 431 Trgb
+0.000000 0.020230 0.006069 420 429 457 444 457 446 Trgb
+0.000000 0.019942 0.005983 420 429 457 446 419 430 Trgb
+0.000000 0.007416 0.002225 420 427 458 443 457 444 Trgb
+0.000000 0.013967 0.004190 420 427 457 444 420 429 Trgb
+0.105394 0.247297 0.070538 453 455 455 452 463 453 Trgb
+0.099335 0.233080 0.066483 463 453 462 453 453 455 Trgb
+0.076087 0.178532 0.050924 460 437 461 434 467 442 Trgb
+0.177850 0.417308 0.119032 463 453 467 442 468 449 Trgb
+0.134392 0.315339 0.089946 455 452 458 444 463 453 Trgb
+0.157331 0.369162 0.105299 467 442 463 453 458 444 Trgb
+0.113669 0.266714 0.076077 458 444 460 437 467 442 Trgb
+0.000000 0.000000 0.000000 448 446 447 447 447 440 Trgb
+0.041228 0.096737 0.027593 455 452 453 455 448 446 Trgb
+0.008584 0.020141 0.005745 447 447 448 446 453 455 Trgb
+0.000000 0.000000 0.000000 451 436 452 436 447 440 Trgb
+0.020505 0.048112 0.013723 461 434 460 437 452 436 Trgb
+0.000000 0.000000 0.000000 452 436 448 446 447 440 Trgb
+0.070226 0.164778 0.047001 458 444 455 452 448 446 Trgb
+0.037582 0.088182 0.025153 448 446 452 436 458 444 Trgb
+0.058087 0.136295 0.038876 460 437 458 444 452 436 Trgb
+0.000000 0.699414 0.209824 398 361 400 364 396 364 Trgb
+0.000000 0.699414 0.209824 400 364 398 366 396 364 Trgb
+0.000000 0.699414 0.209824 398 366 394 367 396 364 Trgb
+0.000000 0.699414 0.209824 394 367 392 364 396 364 Trgb
+0.000000 0.699414 0.209824 392 364 394 361 396 364 Trgb
+0.000000 0.699414 0.209824 394 361 398 361 396 364 Trgb
+0.000000 0.025252 0.007576 387 307 400 364 398 361 Trgb
+0.000000 0.023246 0.006974 387 307 398 361 385 304 Trgb
+0.000000 0.000000 0.000000 381 305 394 361 392 364 Trgb
+0.000000 0.000000 0.000000 381 305 392 364 379 307 Trgb
+0.000000 0.014159 0.004248 385 304 398 361 394 361 Trgb
+0.000000 0.007080 0.002124 385 304 394 361 381 305 Trgb
+0.000000 0.670057 0.201017 363 403 365 405 363 405 Trgb
+0.000000 0.670057 0.201017 365 405 366 407 363 405 Trgb
+0.000000 0.670057 0.201017 366 407 364 407 363 405 Trgb
+0.000000 0.670057 0.201017 364 407 361 406 363 405 Trgb
+0.000000 0.670057 0.201017 361 406 361 404 363 405 Trgb
+0.000000 0.670057 0.201017 361 404 363 403 363 405 Trgb
+0.000000 0.126608 0.037982 398 364 365 405 363 403 Trgb
+0.000000 0.070797 0.021239 398 364 363 403 396 362 Trgb
+0.000000 0.172428 0.051728 399 366 366 407 365 405 Trgb
+0.000000 0.177423 0.053227 399 366 365 405 398 364 Trgb
+0.000000 0.009991 0.002997 396 362 363 403 361 404 Trgb
+0.000000 0.004996 0.001499 396 362 361 404 394 362 Trgb
+0.000000 0.000000 0.000000 321 398 321 400 321 399 Trgb
+0.000000 0.000000 0.000000 321 400 320 401 321 399 Trgb
+0.000000 0.000000 0.000000 320 401 320 400 321 399 Trgb
+0.000000 0.000000 0.000000 320 400 320 397 321 399 Trgb
+0.000000 0.000000 0.000000 320 397 321 396 321 399 Trgb
+0.000000 0.000000 0.000000 321 396 321 398 321 399 Trgb
+0.000000 0.039172 0.011752 363 407 321 400 321 398 Trgb
+0.000000 0.034938 0.010481 363 407 321 398 364 405 Trgb
+0.000000 0.022937 0.006881 363 408 320 401 321 400 Trgb
+0.000000 0.033171 0.009951 363 408 321 400 363 407 Trgb
+0.000000 0.020469 0.006141 364 405 321 398 321 396 Trgb
+0.000000 0.010235 0.003070 364 405 321 396 363 403 Trgb
+0.000000 0.000000 0.000000 316 395 314 403 312 397 Trgb
+0.027860 0.282235 0.062019 323 395 322 402 316 395 Trgb
+0.016503 0.167185 0.036738 314 403 316 395 322 402 Trgb
+0.028485 0.288569 0.063411 322 402 320 407 314 403 Trgb
+0.012424 0.125863 0.027657 320 407 319 407 314 403 Trgb
+0.000000 0.000000 0.000000 315 392 316 395 312 397 Trgb
+0.011357 0.115051 0.025282 322 390 323 395 316 395 Trgb
+0.000000 0.000000 0.000000 316 395 315 392 322 390 Trgb
+0.047694 0.483162 0.106171 326 405 328 397 329 400 Trgb
+0.045026 0.456136 0.100232 322 402 323 395 328 397 Trgb
+0.051278 0.519465 0.114148 328 397 326 405 322 402 Trgb
+0.046094 0.466948 0.102608 320 407 322 402 326 405 Trgb
+0.030749 0.311499 0.068450 328 397 327 394 329 400 Trgb
+0.028523 0.288951 0.063495 323 395 322 390 328 397 Trgb
+0.017829 0.180617 0.039689 327 394 328 397 322 390 Trgb
+0.000000 0.699487 0.209846 371 439 368 439 370 437 Trgb
+0.000000 0.699487 0.209846 368 439 368 437 370 437 Trgb
+0.000000 0.699487 0.209846 368 437 370 436 370 437 Trgb
+0.000000 0.699487 0.209846 370 436 372 436 370 437 Trgb
+0.000000 0.699487 0.209846 372 436 372 438 370 437 Trgb
+0.000000 0.699487 0.209846 372 438 371 439 370 437 Trgb
+0.000000 0.000605 0.000182 363 404 370 436 368 437 Trgb
+0.000000 0.000303 0.000091 363 404 368 437 361 405 Trgb
+0.000000 0.016071 0.004821 365 404 372 436 370 436 Trgb
+0.000000 0.008489 0.002547 365 404 370 436 363 404 Trgb
+0.000000 0.023048 0.006914 365 406 372 438 372 436 Trgb
+0.000000 0.023350 0.007005 365 406 372 436 365 404 Trgb
+0.065732 0.277683 0.068683 373 448 364 445 372 445 Trgb
+0.067033 0.283180 0.070043 364 445 370 438 372 445 Trgb
+0.026637 0.112527 0.027833 361 434 368 430 370 438 Trgb
+0.031584 0.133427 0.033002 370 438 364 445 361 434 Trgb
+0.005867 0.024787 0.006131 360 440 361 434 364 445 Trgb
+0.104129 0.439892 0.108804 379 441 373 448 372 445 Trgb
+0.089964 0.380052 0.094003 381 435 379 440 379 441 Trgb
+0.105430 0.445389 0.110164 370 438 379 441 372 445 Trgb
+0.046486 0.196380 0.048573 368 430 376 430 370 438 Trgb
+0.089831 0.379489 0.093864 379 441 370 438 376 430 Trgb
+0.091265 0.385549 0.095363 376 430 381 435 379 441 Trgb
+0.000920 0.003887 0.000961 368 430 361 434 367 427 Trgb
+0.000000 0.000000 0.000000 361 434 367 427 361 434 Trgb
+0.020769 0.087740 0.021702 376 430 368 430 367 427 Trgb
+0.019849 0.083853 0.020740 367 427 376 430 376 430 Trgb
+0.047000 0.198553 0.049111 381 435 376 430 376 430 Trgb
+0.000000 0.699497 0.209849 381 445 379 445 381 444 Trgb
+0.000000 0.699497 0.209849 379 445 380 444 381 444 Trgb
+0.000000 0.699497 0.209849 380 444 382 443 381 444 Trgb
+0.000000 0.699497 0.209849 382 443 383 443 381 444 Trgb
+0.000000 0.699497 0.209849 383 443 383 444 381 444 Trgb
+0.000000 0.699497 0.209849 383 444 381 445 381 444 Trgb
+0.000000 0.000696 0.000209 362 406 380 444 379 445 Trgb
+0.000000 0.000348 0.000104 362 406 379 445 361 406 Trgb
+0.000000 0.016007 0.004802 364 405 382 443 380 444 Trgb
+0.000000 0.008525 0.002558 364 405 380 444 362 406 Trgb
+0.000000 0.022792 0.006838 365 404 383 443 382 443 Trgb
+0.000000 0.023140 0.006942 365 404 382 443 364 405 Trgb
+0.310982 0.003067 0.062810 384 465 374 464 391 465 Trgb
+0.084174 0.000830 0.017001 363 455 361 451 374 464 Trgb
+0.485793 0.004791 0.098117 374 464 393 453 391 465 Trgb
+0.382596 0.003773 0.077274 371 443 388 435 393 453 Trgb
+0.343159 0.003384 0.069309 393 453 374 464 371 443 Trgb
+0.125602 0.001239 0.025368 361 451 371 443 374 464 Trgb
+0.577749 0.005698 0.116689 393 453 403 454 391 465 Trgb
+0.474551 0.004680 0.095846 388 435 400 433 393 453 Trgb
+0.527070 0.005198 0.106454 403 454 393 453 400 433 Trgb
+0.374535 0.003694 0.075646 400 433 401 437 403 454 Trgb
+0.000000 0.000000 0.000000 379 423 360 435 372 424 Trgb
+0.165038 0.001628 0.033333 388 435 371 443 379 423 Trgb
+0.041428 0.000409 0.008367 360 435 379 423 371 443 Trgb
+0.041428 0.000409 0.008367 371 443 361 451 360 435 Trgb
+0.256994 0.002534 0.051906 400 433 388 435 379 423 Trgb
+0.133383 0.001315 0.026940 379 423 389 425 400 433 Trgb
+0.000000 0.699868 0.209960 440 368 438 370 438 367 Trgb
+0.000000 0.699868 0.209960 438 370 436 368 438 367 Trgb
+0.000000 0.699868 0.209960 436 368 436 365 438 367 Trgb
+0.000000 0.699868 0.209960 436 365 438 363 438 367 Trgb
+0.000000 0.699868 0.209960 438 363 440 365 438 367 Trgb
+0.000000 0.699868 0.209960 440 365 440 368 438 367 Trgb
+0.000000 0.005175 0.001553 394 366 436 368 438 370 Trgb
+0.000000 0.008820 0.002646 394 366 438 370 396 367 Trgb
+0.000000 0.000510 0.000153 394 363 436 365 436 368 Trgb
+0.000000 0.001020 0.000306 394 363 436 368 394 366 Trgb
+0.000000 0.000000 0.000000 396 361 438 363 436 365 Trgb
+0.000000 0.000000 0.000000 396 361 436 365 394 363 Trgb
+0.130763 0.477881 0.121729 448 370 441 374 446 367 Trgb
+0.101991 0.372731 0.094944 441 374 448 370 440 377 Trgb
+0.069415 0.253681 0.064619 440 377 434 377 441 374 Trgb
+0.110114 0.402415 0.102506 441 374 438 363 446 367 Trgb
+0.022716 0.083017 0.021147 430 370 431 362 438 363 Trgb
+0.063387 0.231649 0.059007 438 363 441 374 430 370 Trgb
+0.051461 0.188065 0.047905 434 377 430 370 441 374 Trgb
+0.115504 0.422115 0.107524 446 360 448 370 446 367 Trgb
+0.094854 0.346649 0.088301 438 363 446 360 446 367 Trgb
+0.022716 0.083017 0.021147 431 362 435 356 438 363 Trgb
+0.048127 0.175883 0.044802 446 360 438 363 435 356 Trgb
+0.025411 0.092867 0.023656 435 356 442 357 446 360 Trgb
+0.000000 0.000000 0.000000 431 362 430 370 427 363 Trgb
+0.000000 0.000000 0.000000 430 373 427 363 430 370 Trgb
+0.010790 0.039432 0.010044 430 370 434 377 430 373 Trgb
+0.000000 0.000000 0.000000 435 356 431 362 427 363 Trgb
+0.000000 0.697531 0.209259 400 424 402 424 403 424 Trgb
+0.000000 0.697531 0.209259 402 424 405 424 403 424 Trgb
+0.000000 0.697531 0.209259 405 424 406 424 403 424 Trgb
+0.000000 0.697531 0.209259 406 424 404 424 403 424 Trgb
+0.000000 0.697531 0.209259 404 424 401 425 403 424 Trgb
+0.000000 0.697531 0.209259 401 425 400 424 403 424 Trgb
+0.000000 0.010115 0.003035 395 364 402 424 400 424 Trgb
+0.000000 0.005058 0.001517 395 364 400 424 393 364 Trgb
+0.000000 0.042881 0.012864 398 363 405 424 402 424 Trgb
+0.000000 0.029027 0.008708 398 363 402 424 395 364 Trgb
+0.000000 0.046621 0.013986 399 364 406 424 405 424 Trgb
+0.000000 0.051678 0.015503 399 364 405 424 398 363 Trgb
+0.000000 0.692681 0.207804 401 424 402 423 403 424 Trgb
+0.000000 0.692681 0.207804 402 423 404 423 403 424 Trgb
+0.000000 0.692681 0.207804 404 423 405 424 403 424 Trgb
+0.000000 0.692681 0.207804 405 424 405 426 403 424 Trgb
+0.000000 0.692681 0.207804 405 426 403 426 403 424 Trgb
+0.000000 0.692681 0.207804 403 426 401 424 403 424 Trgb
+0.000000 0.033284 0.009985 403 426 395 452 393 450 Trgb
+0.000000 0.016642 0.004993 403 426 393 450 401 424 Trgb
+0.000000 0.083949 0.025185 405 426 397 451 395 452 Trgb
+0.000000 0.066938 0.020081 405 426 395 452 403 426 Trgb
+0.000000 0.067677 0.020303 405 424 397 450 397 451 Trgb
+0.000000 0.084319 0.025296 405 424 397 451 405 426 Trgb
+0.009477 0.046295 0.011154 386 451 390 456 387 455 Trgb
+0.023261 0.113633 0.027379 396 460 387 455 390 456 Trgb
+0.055621 0.271710 0.065466 390 456 398 458 396 460 Trgb
+0.082430 0.402675 0.097021 398 458 403 455 396 460 Trgb
+0.044843 0.219063 0.052781 398 451 390 446 397 444 Trgb
+0.009477 0.046295 0.011154 390 456 386 451 390 446 Trgb
+0.041455 0.202511 0.048793 390 446 398 451 390 456 Trgb
+0.073815 0.360588 0.086881 398 458 390 456 398 451 Trgb
+0.067345 0.328984 0.079266 403 445 398 451 397 444 Trgb
+0.077745 0.379787 0.091506 404 449 403 455 403 445 Trgb
+0.090766 0.443397 0.106833 398 451 403 445 403 455 Trgb
+0.100624 0.491553 0.118435 403 455 398 458 398 451 Trgb
+0.012865 0.062846 0.015142 390 446 395 440 397 444 Trgb
+0.000000 0.000000 0.000000 386 451 387 445 390 446 Trgb
+0.000000 0.000000 0.000000 395 440 390 446 387 445 Trgb
+0.035367 0.172767 0.041627 395 440 403 445 397 444 Trgb
+0.000000 0.637740 0.191322 379 451 379 452 377 451 Trgb
+0.000000 0.637740 0.191322 379 452 378 452 377 451 Trgb
+0.000000 0.637740 0.191322 378 452 376 451 377 451 Trgb
+0.000000 0.637740 0.191322 376 451 376 449 377 451 Trgb
+0.000000 0.637740 0.191322 376 449 377 449 377 451 Trgb
+0.000000 0.637740 0.191322 377 449 379 451 377 451 Trgb
+0.000000 0.252303 0.075691 405 426 379 452 379 451 Trgb
+0.000000 0.246714 0.074014 405 426 379 451 404 424 Trgb
+0.000000 0.000000 0.000000 403 423 377 449 376 449 Trgb
+0.000000 0.000000 0.000000 403 423 376 449 402 423 Trgb
+0.000000 0.160749 0.048225 404 424 379 451 377 449 Trgb
+0.000000 0.080375 0.024112 404 424 377 449 403 423 Trgb
+0.017498 0.271496 0.057799 377 454 377 459 372 456 Trgb
+0.034877 0.541162 0.115208 382 450 384 455 377 454 Trgb
+0.029698 0.460799 0.098099 377 459 377 454 384 455 Trgb
+0.028021 0.434774 0.092559 384 455 382 458 377 459 Trgb
+0.008105 0.125751 0.026771 377 459 370 455 372 456 Trgb
+0.010945 0.169818 0.036153 370 450 377 454 372 456 Trgb
+0.023966 0.371853 0.079164 378 445 382 450 377 454 Trgb
+0.012233 0.189812 0.040409 377 454 370 450 378 445 Trgb
+0.002840 0.044067 0.009382 373 444 378 445 370 450 Trgb
+0.032683 0.507117 0.107960 384 455 382 450 385 447 Trgb
+0.025310 0.392708 0.083604 385 447 384 452 384 455 Trgb
+0.001552 0.024074 0.005125 370 455 370 450 372 456 Trgb
+0.000000 0.000000 0.000000 371 447 373 444 370 450 Trgb
+0.021771 0.337807 0.071916 382 450 378 445 385 447 Trgb
+0.010039 0.155767 0.033161 378 442 385 447 378 445 Trgb
+0.002840 0.044067 0.009382 378 445 373 444 378 442 Trgb
+0.000000 0.699962 0.209989 436 449 434 451 435 449 Trgb
+0.000000 0.699962 0.209989 434 451 433 451 435 449 Trgb
+0.000000 0.699962 0.209989 433 451 434 449 435 449 Trgb
+0.000000 0.699962 0.209989 434 449 435 447 435 449 Trgb
+0.000000 0.699962 0.209989 435 447 436 447 435 449 Trgb
+0.000000 0.699962 0.209989 436 447 436 449 435 449 Trgb
+0.000000 0.002331 0.000699 402 424 434 449 433 451 Trgb
+0.000000 0.001165 0.000350 402 424 433 451 402 426 Trgb
+0.000000 0.006038 0.001812 404 423 435 447 434 449 Trgb
+0.000000 0.004767 0.001430 404 423 434 449 402 424 Trgb
+0.000000 0.004978 0.001494 405 423 436 447 435 447 Trgb
+0.000000 0.006144 0.001843 405 423 435 447 404 423 Trgb
+0.240590 0.297323 0.107583 437 464 437 455 445 458 Trgb
+0.089658 0.110800 0.040092 424 458 427 449 437 455 Trgb
+0.138434 0.171078 0.061902 437 455 437 464 424 458 Trgb
+0.058982 0.072890 0.026374 428 461 424 458 437 464 Trgb
+0.252665 0.312245 0.112982 447 446 447 455 445 458 Trgb
+0.110270 0.136273 0.049309 442 437 445 440 447 446 Trgb
+0.267098 0.330082 0.119436 437 455 447 446 445 458 Trgb
+0.110128 0.136097 0.049245 427 449 434 441 437 455 Trgb
+0.185412 0.229133 0.082909 447 446 437 455 434 441 Trgb
+0.124703 0.154109 0.055763 434 441 442 437 447 446 Trgb
+0.010206 0.012612 0.004564 427 449 424 458 422 443 Trgb
+0.000000 0.000000 0.000000 422 452 422 443 424 458 Trgb
+0.000000 0.000000 0.000000 432 435 422 443 424 441 Trgb
+0.030676 0.037910 0.013717 434 441 427 449 422 443 Trgb
+0.020470 0.025297 0.009154 422 443 432 435 434 441 Trgb
+0.039214 0.048461 0.017535 442 437 434 441 432 435 Trgb
+0.000000 0.675208 0.202562 239 301 244 305 240 305 Trgb
+0.000000 0.675208 0.202562 244 305 244 309 240 305 Trgb
+0.000000 0.675208 0.202562 244 309 241 309 240 305 Trgb
+0.000000 0.675208 0.202562 241 309 236 305 240 305 Trgb
+0.000000 0.675208 0.202562 236 305 236 301 240 305 Trgb
+0.000000 0.675208 0.202562 236 301 239 301 240 305 Trgb
+0.000000 0.139589 0.041877 309 230 244 305 239 301 Trgb
+0.000000 0.098494 0.029548 309 230 239 301 305 226 Trgb
+0.000000 0.142419 0.042726 310 234 244 309 244 305 Trgb
+0.000000 0.161552 0.048465 310 234 244 305 309 230 Trgb
+0.000000 0.038266 0.011480 305 226 239 301 236 301 Trgb
+0.000000 0.019133 0.005740 305 226 236 301 301 226 Trgb
+0.000000 0.697893 0.209368 237 302 239 302 240 305 Trgb
+0.000000 0.697893 0.209368 239 302 242 305 240 305 Trgb
+0.000000 0.697893 0.209368 242 305 243 308 240 305 Trgb
+0.000000 0.697893 0.209368 243 308 241 308 240 305 Trgb
+0.000000 0.697893 0.209368 241 308 238 305 240 305 Trgb
+0.000000 0.697893 0.209368 238 305 237 302 240 305 Trgb
+0.000000 0.017023 0.005107 238 305 176 350 175 346 Trgb
+0.000000 0.008512 0.002553 238 305 175 346 237 302 Trgb
+0.000000 0.044670 0.013401 241 308 179 352 176 350 Trgb
+0.000000 0.035103 0.010531 241 308 176 350 238 305 Trgb
+0.000000 0.037215 0.011165 243 308 181 352 179 352 Trgb
+0.000000 0.045727 0.013718 243 308 179 352 241 308 Trgb
+0.000000 0.699920 0.209976 176 348 178 347 178 349 Trgb
+0.000000 0.699920 0.209976 178 347 180 348 178 349 Trgb
+0.000000 0.699920 0.209976 180 348 180 351 178 349 Trgb
+0.000000 0.699920 0.209976 180 351 178 352 178 349 Trgb
+0.000000 0.699920 0.209976 178 352 176 351 178 349 Trgb
+0.000000 0.699920 0.209976 176 351 176 348 178 349 Trgb
+0.000000 0.001914 0.000574 176 351 145 347 145 344 Trgb
+0.000000 0.000957 0.000287 176 351 145 344 176 348 Trgb
+0.000000 0.007792 0.002337 178 352 147 348 145 347 Trgb
+0.000000 0.005332 0.001599 178 352 145 347 176 351 Trgb
+0.000000 0.000000 0.000000 176 348 145 344 147 343 Trgb
+0.000000 0.000000 0.000000 176 348 147 343 178 347 Trgb
+0.000000 0.699197 0.209759 146 344 148 344 147 345 Trgb
+0.000000 0.699197 0.209759 148 344 149 345 147 345 Trgb
+0.000000 0.699197 0.209759 149 345 148 347 147 345 Trgb
+0.000000 0.699197 0.209759 148 347 146 347 147 345 Trgb
+0.000000 0.699197 0.209759 146 347 145 345 147 345 Trgb
+0.000000 0.699197 0.209759 145 345 146 344 147 345 Trgb
+0.000000 0.000000 0.000000 145 345 151 323 151 321 Trgb
+0.000000 0.000000 0.000000 145 345 151 321 146 344 Trgb
+0.000000 0.025417 0.007625 148 344 153 321 154 322 Trgb
+0.000000 0.029199 0.008760 148 344 154 322 149 345 Trgb
+0.000000 0.007212 0.002163 146 344 151 321 153 321 Trgb
+0.000000 0.014423 0.004327 146 344 153 321 148 344 Trgb
+0.041504 0.027267 0.013754 155 311 144 313 148 310 Trgb
+0.041504 0.027267 0.013754 148 310 162 312 155 311 Trgb
+0.133196 0.087504 0.044140 164 317 155 311 162 312 Trgb
+0.157254 0.103310 0.052113 143 333 145 322 150 331 Trgb
+0.048551 0.031896 0.016089 138 320 144 313 145 322 Trgb
+0.055597 0.036525 0.018424 145 322 143 333 138 320 Trgb
+0.007046 0.004629 0.002335 141 328 138 320 143 333 Trgb
+0.203918 0.133965 0.067577 157 336 143 333 150 331 Trgb
+0.286927 0.188499 0.095085 145 322 159 325 150 331 Trgb
+0.090055 0.059162 0.029843 144 313 155 311 145 322 Trgb
+0.226774 0.148981 0.075151 159 325 145 322 155 311 Trgb
+0.269915 0.177323 0.089448 155 311 164 317 159 325 Trgb
+0.333590 0.219155 0.110549 159 325 157 336 150 331 Trgb
+0.216378 0.142151 0.071706 167 325 161 332 157 336 Trgb
+0.320101 0.210293 0.106079 157 336 159 325 167 325 Trgb
+0.316578 0.207979 0.104911 164 317 167 325 159 325 Trgb
+0.000000 0.698678 0.209603 147 347 147 346 147 345 Trgb
+0.000000 0.698678 0.209603 147 346 147 344 147 345 Trgb
+0.000000 0.698678 0.209603 147 344 147 344 147 345 Trgb
+0.000000 0.698678 0.209603 147 344 147 345 147 345 Trgb
+0.000000 0.698678 0.209603 147 345 147 346 147 345 Trgb
+0.000000 0.698678 0.209603 147 346 147 347 147 345 Trgb
+0.000000 0.018415 0.005524 147 344 109 337 110 336 Trgb
+0.000000 0.009207 0.002762 147 344 110 336 147 344 Trgb
+0.000000 0.037448 0.011234 147 346 109 338 109 337 Trgb
+0.000000 0.032535 0.009761 147 346 109 337 147 344 Trgb
+0.000000 0.023946 0.007184 147 347 109 339 109 338 Trgb
+0.000000 0.033154 0.009946 147 347 109 338 147 346 Trgb
+0.013745 0.002545 0.003258 96 334 94 347 91 334 Trgb
+0.190914 0.035354 0.045254 106 349 105 355 94 347 Trgb
+0.152290 0.028202 0.036098 94 347 96 334 106 349 Trgb
+0.295853 0.054788 0.070128 108 336 106 349 96 334 Trgb
+0.013745 0.002545 0.003258 99 323 96 334 91 334 Trgb
+0.064484 0.011941 0.015285 113 320 111 324 99 323 Trgb
+0.078229 0.014487 0.018543 96 334 99 323 111 324 Trgb
+0.221792 0.041073 0.052573 111 324 108 336 96 334 Trgb
+0.438208 0.081150 0.103872 119 353 121 339 127 341 Trgb
+0.315714 0.058466 0.074836 105 355 106 349 119 353 Trgb
+0.452629 0.083820 0.107290 121 339 119 353 106 349 Trgb
+0.471392 0.087295 0.111737 106 349 108 336 121 339 Trgb
+0.364147 0.067435 0.086316 121 339 125 328 127 341 Trgb
+0.115222 0.021337 0.027312 111 324 113 320 125 328 Trgb
+0.304506 0.056390 0.072179 125 328 121 339 111 324 Trgb
+0.397330 0.073580 0.094182 108 336 111 324 121 339 Trgb
+0.000000 0.691781 0.207534 149 346 148 347 147 345 Trgb
+0.000000 0.691781 0.207534 148 347 147 346 147 345 Trgb
+0.000000 0.691781 0.207534 147 346 145 345 147 345 Trgb
+0.000000 0.691781 0.207534 145 345 146 344 147 345 Trgb
+0.000000 0.691781 0.207534 146 344 147 345 147 345 Trgb
+0.000000 0.691781 0.207534 147 345 149 346 147 345 Trgb
+0.000000 0.000000 0.000000 145 345 131 375 131 374 Trgb
+0.000000 0.000000 0.000000 145 345 131 374 146 344 Trgb
+0.000000 0.058813 0.017644 147 346 132 376 131 375 Trgb
+0.000000 0.029406 0.008822 147 346 131 375 145 345 Trgb
+0.000000 0.093726 0.028118 148 347 134 376 132 376 Trgb
+0.000000 0.090973 0.027292 148 347 132 376 147 346 Trgb
+0.000000 0.000000 0.000000 124 370 125 375 124 380 Trgb
+0.107475 0.388264 0.099148 136 381 141 379 133 384 Trgb
+0.029201 0.105490 0.026938 133 366 141 370 136 368 Trgb
+0.031304 0.113090 0.028879 125 375 130 379 124 380 Trgb
+0.054230 0.195912 0.050028 133 384 124 380 130 379 Trgb
+0.102218 0.369274 0.094298 130 379 136 381 133 384 Trgb
+0.023944 0.086500 0.022089 129 369 133 366 136 368 Trgb
+0.008378 0.030267 0.007729 125 375 124 370 129 369 Trgb
+0.008378 0.030267 0.007729 133 366 129 369 124 370 Trgb
+0.074140 0.267838 0.068396 141 370 138 374 136 368 Trgb
+0.095135 0.343686 0.087764 138 374 141 370 141 379 Trgb
+0.129488 0.467789 0.119455 141 379 136 381 138 374 Trgb
+0.068883 0.248847 0.063546 138 374 129 369 136 368 Trgb
+0.039682 0.143357 0.036608 130 379 125 375 129 369 Trgb
+0.084621 0.305704 0.078065 129 369 138 374 130 379 Trgb
+0.124231 0.448798 0.114606 136 381 130 379 138 374 Trgb
+0.000000 0.000000 0.000000 133 384 131 383 131 381 Trgb
+0.000000 0.000000 0.000000 131 383 130 380 131 381 Trgb
+0.000000 0.000000 0.000000 130 380 129 379 131 381 Trgb
+0.000000 0.000000 0.000000 129 379 131 380 131 381 Trgb
+0.000000 0.000000 0.000000 131 380 132 382 131 381 Trgb
+0.000000 0.000000 0.000000 132 382 133 384 131 381 Trgb
+0.000000 0.087931 0.026379 178 348 131 380 129 379 Trgb
+0.000000 0.043965 0.013190 178 348 129 379 176 347 Trgb
+0.000000 0.299857 0.089957 179 350 132 382 131 380 Trgb
+0.000000 0.215876 0.064763 179 350 131 380 178 348 Trgb
+0.000000 0.295907 0.088772 179 352 133 384 132 382 Trgb
+0.000000 0.339872 0.101962 179 352 132 382 179 350 Trgb
+0.000000 0.691585 0.207476 106 387 105 387 105 385 Trgb
+0.000000 0.691585 0.207476 105 387 103 386 105 385 Trgb
+0.000000 0.691585 0.207476 103 386 104 384 105 385 Trgb
+0.000000 0.691585 0.207476 104 384 105 383 105 385 Trgb
+0.000000 0.691585 0.207476 105 383 107 385 105 385 Trgb
+0.000000 0.691585 0.207476 107 385 106 387 105 385 Trgb
+0.000000 0.038905 0.011671 131 383 105 387 106 387 Trgb
+0.000000 0.068470 0.020541 131 383 106 387 132 383 Trgb
+0.000000 0.059130 0.017739 133 381 107 385 105 383 Trgb
+0.000000 0.029565 0.008870 133 381 105 383 131 379 Trgb
+0.000000 0.094922 0.028477 132 383 106 387 107 385 Trgb
+0.000000 0.091809 0.027543 132 383 107 385 133 381 Trgb
+0.036557 0.227068 0.052725 105 391 97 391 99 386 Trgb
+0.065148 0.404652 0.093960 111 392 105 395 105 391 Trgb
+0.037225 0.231217 0.053688 97 391 105 391 105 395 Trgb
+0.009849 0.061174 0.014205 97 391 97 381 99 386 Trgb
+0.052749 0.327638 0.076077 104 381 105 391 99 386 Trgb
+0.083603 0.519279 0.120576 113 385 111 392 105 391 Trgb
+0.071872 0.446414 0.103657 105 391 104 381 113 385 Trgb
+0.058213 0.361574 0.083957 110 379 113 385 104 381 Trgb
+0.026041 0.161745 0.037557 97 381 104 381 99 386 Trgb
+0.000000 0.000000 0.000000 100 378 105 376 97 381 Trgb
+0.016192 0.100570 0.023352 104 381 97 381 105 376 Trgb
+0.029241 0.181624 0.042173 105 376 110 379 104 381 Trgb
+0.069674 0.432765 0.100488 111 392 113 385 113 389 Trgb
+0.044015 0.273387 0.063480 113 380 113 389 113 385 Trgb
+0.044284 0.275061 0.063869 113 385 110 379 113 380 Trgb
+0.015313 0.095110 0.022085 110 379 105 376 113 380 Trgb
+0.000000 0.698498 0.209550 130 380 132 380 131 381 Trgb
+0.000000 0.698498 0.209550 132 380 133 381 131 381 Trgb
+0.000000 0.698498 0.209550 133 381 132 383 131 381 Trgb
+0.000000 0.698498 0.209550 132 383 130 383 131 381 Trgb
+0.000000 0.698498 0.209550 130 383 129 381 131 381 Trgb
+0.000000 0.698498 0.209550 129 381 130 380 131 381 Trgb
+0.000000 0.000000 0.000000 129 381 111 401 111 400 Trgb
+0.000000 0.000000 0.000000 129 381 111 400 130 380 Trgb
+0.000000 0.023294 0.006988 130 383 112 403 111 401 Trgb
+0.000000 0.011647 0.003494 130 383 111 401 129 381 Trgb
+0.000000 0.040413 0.012124 132 383 113 403 112 403 Trgb
+0.000000 0.037677 0.011303 132 383 112 403 130 383 Trgb
+0.019290 0.043219 0.012502 102 398 104 406 103 408 Trgb
+0.112959 0.253086 0.073209 111 411 119 410 113 412 Trgb
+0.059036 0.132271 0.038261 113 412 103 408 111 411 Trgb
+0.071059 0.159208 0.046053 104 406 111 411 103 408 Trgb
+0.088148 0.197496 0.057129 110 400 111 391 118 396 Trgb
+0.000000 0.000000 0.000000 102 398 106 393 111 391 Trgb
+0.044502 0.099707 0.028842 111 391 110 400 102 398 Trgb
+0.063792 0.142926 0.041344 104 406 102 398 110 400 Trgb
+0.157140 0.352073 0.101843 121 404 110 400 118 396 Trgb
+0.174684 0.391380 0.113213 119 410 111 411 121 404 Trgb
+0.165263 0.370273 0.107107 110 400 121 404 111 411 Trgb
+0.115561 0.258915 0.074895 111 411 104 406 110 400 Trgb
+0.060868 0.136376 0.039449 111 391 121 395 118 396 Trgb
+0.129860 0.290952 0.084162 121 395 121 404 118 396 Trgb
+0.147404 0.330260 0.095533 122 405 119 410 121 404 Trgb
+0.110704 0.248032 0.071747 121 404 121 395 122 405 Trgb
+0.000000 0.699554 0.209866 131 380 131 379 131 381 Trgb
+0.000000 0.699554 0.209866 131 379 132 380 131 381 Trgb
+0.000000 0.699554 0.209866 132 380 132 382 131 381 Trgb
+0.000000 0.699554 0.209866 132 382 131 383 131 381 Trgb
+0.000000 0.699554 0.209866 131 383 130 382 131 381 Trgb
+0.000000 0.699554 0.209866 130 382 131 380 131 381 Trgb
+0.000000 0.019279 0.005784 130 382 92 378 93 376 Trgb
+0.000000 0.013935 0.004181 130 382 93 376 131 380 Trgb
+0.000000 0.018894 0.005668 131 383 93 380 92 378 Trgb
+0.000000 0.021758 0.006527 131 383 92 378 130 382 Trgb
+0.000000 0.005728 0.001718 131 380 93 376 94 376 Trgb
+0.000000 0.002864 0.000859 131 380 94 376 131 379 Trgb
+0.000000 0.000000 0.000000 83 371 82 384 82 377 Trgb
+0.062639 0.107049 0.033938 90 370 88 379 83 371 Trgb
+0.045424 0.077629 0.024611 82 384 83 371 88 379 Trgb
+0.092448 0.157993 0.050088 88 379 89 387 82 384 Trgb
+0.068102 0.116386 0.036898 89 387 93 390 82 384 Trgb
+0.017215 0.029420 0.009327 94 365 90 370 83 371 Trgb
+0.214613 0.366772 0.116277 98 385 99 373 105 379 Trgb
+0.124366 0.212540 0.067381 88 379 90 370 99 373 Trgb
+0.189956 0.324634 0.102918 99 373 98 385 88 379 Trgb
+0.175253 0.299506 0.094952 89 387 88 379 98 385 Trgb
+0.190267 0.325166 0.103087 104 384 98 385 105 379 Trgb
+0.141265 0.241421 0.076537 98 385 104 384 93 390 Trgb
+0.150908 0.257900 0.081762 93 390 89 387 98 385 Trgb
+0.148111 0.253120 0.080246 99 373 104 372 105 379 Trgb
+0.078942 0.134911 0.042771 90 370 94 365 99 373 Trgb
+0.078030 0.133353 0.042277 104 372 99 373 94 365 Trgb
+0.000000 0.651830 0.195549 178 348 180 348 178 349 Trgb
+0.000000 0.651830 0.195549 180 348 180 350 178 349 Trgb
+0.000000 0.651830 0.195549 180 350 178 351 178 349 Trgb
+0.000000 0.651830 0.195549 178 351 175 350 178 349 Trgb
+0.000000 0.651830 0.195549 175 350 175 349 178 349 Trgb
+0.000000 0.651830 0.195549 175 349 178 348 178 349 Trgb
+0.000000 0.136743 0.041023 178 351 181 395 179 394 Trgb
+0.000000 0.068371 0.020511 178 351 179 394 175 350 Trgb
+0.000000 0.224390 0.067317 180 350 184 394 181 395 Trgb
+0.000000 0.214752 0.064426 180 350 181 395 178 351 Trgb
+0.000000 0.097284 0.029185 180 348 184 392 184 394 Trgb
+0.000000 0.165656 0.049697 180 348 184 394 180 350 Trgb
+0.000000 0.000000 0.000000 181 392 182 391 181 393 Trgb
+0.000000 0.000000 0.000000 182 391 183 393 181 393 Trgb
+0.000000 0.000000 0.000000 183 393 182 394 181 393 Trgb
+0.000000 0.000000 0.000000 182 394 181 395 181 393 Trgb
+0.000000 0.000000 0.000000 181 395 180 394 181 393 Trgb
+0.000000 0.000000 0.000000 180 394 181 392 181 393 Trgb
+0.000000 0.098567 0.029570 182 394 210 409 209 410 Trgb
+0.000000 0.058014 0.017404 182 394 209 410 181 395 Trgb
+0.000000 0.127481 0.038244 183 393 211 408 210 409 Trgb
+0.000000 0.133301 0.039990 183 393 210 409 182 394 Trgb
+0.000000 0.040554 0.012166 182 391 211 407 211 408 Trgb
+0.000000 0.081108 0.024332 182 391 211 408 183 393 Trgb
+0.449781 0.027005 0.095357 204 426 214 420 223 422 Trgb
+0.000000 0.000000 0.000000 191 412 197 394 196 401 Trgb
+0.570312 0.034242 0.120911 214 420 222 408 223 422 Trgb
+0.467717 0.028082 0.099160 228 405 223 422 222 408 Trgb
+0.379352 0.022777 0.080426 222 408 222 395 228 405 Trgb
+0.105134 0.006312 0.022289 203 412 191 412 196 401 Trgb
+0.381323 0.022895 0.080844 214 420 204 426 203 412 Trgb
+0.184233 0.011062 0.039059 191 412 203 412 204 426 Trgb
+0.079098 0.004749 0.016769 204 426 198 421 191 412 Trgb
+0.026036 0.001563 0.005520 197 394 209 394 196 401 Trgb
+0.026036 0.001563 0.005520 209 394 197 394 216 391 Trgb
+0.111265 0.006680 0.023589 216 391 222 395 209 394 Trgb
+0.131171 0.007876 0.027809 209 394 203 412 196 401 Trgb
+0.501854 0.030132 0.106397 222 408 214 420 203 412 Trgb
+0.330800 0.019862 0.070132 203 412 209 394 222 408 Trgb
+0.310894 0.018666 0.065912 222 395 222 408 209 394 Trgb
+0.000000 0.699809 0.209943 180 394 180 392 181 393 Trgb
+0.000000 0.699809 0.209943 180 392 182 391 181 393 Trgb
+0.000000 0.699809 0.209943 182 391 183 392 181 393 Trgb
+0.000000 0.699809 0.209943 183 392 183 394 181 393 Trgb
+0.000000 0.699809 0.209943 183 394 181 395 181 393 Trgb
+0.000000 0.699809 0.209943 181 395 180 394 181 393 Trgb
+0.000000 0.006766 0.002030 181 395 168 392 166 391 Trgb
+0.000000 0.003383 0.001015 181 395 166 391 180 394 Trgb
+0.000000 0.000000 0.000000 180 392 167 389 168 388 Trgb
+0.000000 0.000000 0.000000 180 392 168 388 182 391 Trgb
+0.000000 0.000000 0.000000 180 394 166 391 167 389 Trgb
+0.000000 0.000000 0.000000 180 394 167 389 180 392 Trgb
+0.168457 0.380906 0.109873 173 398 164 393 172 391 Trgb
+0.049902 0.112835 0.032547 164 400 159 394 164 393 Trgb
+0.115650 0.261502 0.075430 164 393 173 398 164 400 Trgb
+0.105923 0.239508 0.069086 171 400 164 400 173 398 Trgb
+0.184304 0.416738 0.120208 177 388 173 398 172 391 Trgb
+0.147343 0.333164 0.096101 173 398 177 388 177 395 Trgb
+0.121770 0.275339 0.079422 177 395 171 400 173 398 Trgb
+0.128611 0.290809 0.083884 164 393 169 384 172 391 Trgb
+0.037902 0.085702 0.024721 159 394 159 386 164 393 Trgb
+0.063804 0.144271 0.041615 169 384 164 393 159 386 Trgb
+0.025902 0.058569 0.016894 159 386 165 380 169 384 Trgb
+0.144458 0.326640 0.094220 169 384 177 388 172 391 Trgb
+0.064954 0.146870 0.042365 173 381 177 387 177 388 Trgb
+0.079651 0.180103 0.051951 177 388 169 384 173 381 Trgb
+0.025902 0.058569 0.016894 165 380 173 381 169 384 Trgb
+0.000000 0.694743 0.208423 182 394 181 393 181 393 Trgb
+0.000000 0.694743 0.208423 181 393 180 392 181 393 Trgb
+0.000000 0.694743 0.208423 180 392 181 392 181 393 Trgb
+0.000000 0.694743 0.208423 181 392 182 393 181 393 Trgb
+0.000000 0.694743 0.208423 182 393 183 394 181 393 Trgb
+0.000000 0.694743 0.208423 183 394 182 394 181 393 Trgb
+0.000000 0.065286 0.019586 183 394 157 420 156 420 Trgb
+0.000000 0.074712 0.022413 183 394 156 420 182 394 Trgb
+0.000000 0.018852 0.005655 181 393 154 418 154 417 Trgb
+0.000000 0.009426 0.002828 181 393 154 417 180 392 Trgb
+0.000000 0.065517 0.019655 182 394 156 420 154 418 Trgb
+0.000000 0.046897 0.014069 182 394 154 418 181 393 Trgb
+0.365097 0.114210 0.095861 159 429 167 431 150 434 Trgb
+0.067185 0.021017 0.017640 139 421 150 434 144 430 Trgb
+0.321781 0.100660 0.084488 149 421 159 429 150 434 Trgb
+0.159955 0.050037 0.041999 150 434 139 421 149 421 Trgb
+0.092770 0.029020 0.024358 143 411 149 421 139 421 Trgb
+0.297384 0.093028 0.078082 172 416 166 418 167 407 Trgb
+0.459583 0.143767 0.120670 167 431 159 429 166 418 Trgb
+0.366658 0.114698 0.096271 166 418 172 416 167 431 Trgb
+0.000000 0.000000 0.000000 144 406 143 411 139 421 Trgb
+0.254068 0.079478 0.066709 166 418 155 406 167 407 Trgb
+0.416267 0.130217 0.109297 159 429 149 421 166 418 Trgb
+0.280026 0.087598 0.073525 155 406 166 418 149 421 Trgb
+0.118355 0.037024 0.031076 149 421 143 411 155 406 Trgb
+0.092397 0.028904 0.024260 155 406 161 403 167 407 Trgb
+0.025585 0.008004 0.006718 161 403 155 406 144 406 Trgb
+0.025585 0.008004 0.006718 143 411 144 406 155 406 Trgb
+0.000000 0.699458 0.209837 243 351 238 351 240 348 Trgb
+0.000000 0.699458 0.209837 238 351 236 348 240 348 Trgb
+0.000000 0.699458 0.209837 236 348 238 345 240 348 Trgb
+0.000000 0.699458 0.209837 238 345 243 345 240 348 Trgb
+0.000000 0.699458 0.209837 243 345 245 348 240 348 Trgb
+0.000000 0.699458 0.209837 245 348 243 351 240 348 Trgb
+0.000000 0.000000 0.000000 238 302 238 345 236 348 Trgb
+0.000000 0.000000 0.000000 238 302 236 348 236 305 Trgb
+0.000000 0.010118 0.003035 242 302 243 345 238 345 Trgb
+0.000000 0.005059 0.001518 242 302 238 345 238 302 Trgb
+0.000000 0.023392 0.007018 244 305 245 348 243 345 Trgb
+0.000000 0.019284 0.005785 244 305 243 345 242 302 Trgb
+0.000000 0.699769 0.209931 279 344 276 345 277 342 Trgb
+0.000000 0.699769 0.209931 276 345 274 343 277 342 Trgb
+0.000000 0.699769 0.209931 274 343 274 340 277 342 Trgb
+0.000000 0.699769 0.209931 274 340 277 338 277 342 Trgb
+0.000000 0.699769 0.209931 277 338 279 340 277 342 Trgb
+0.000000 0.699769 0.209931 279 340 279 344 277 342 Trgb
+0.000000 0.006306 0.001892 238 349 274 343 276 345 Trgb
+0.000000 0.011255 0.003376 238 349 276 345 240 351 Trgb
+0.000000 0.000452 0.000136 238 346 274 340 274 343 Trgb
+0.000000 0.000904 0.000271 238 346 274 343 238 349 Trgb
+0.000000 0.000000 0.000000 241 345 277 338 274 340 Trgb
+0.000000 0.000000 0.000000 241 345 274 340 238 346 Trgb
+0.000000 0.582895 0.174869 282 300 282 301 280 301 Trgb
+0.000000 0.582895 0.174869 282 301 280 302 280 301 Trgb
+0.000000 0.582895 0.174869 280 302 278 301 280 301 Trgb
+0.000000 0.582895 0.174869 278 301 278 300 280 301 Trgb
+0.000000 0.582895 0.174869 278 300 279 299 280 301 Trgb
+0.000000 0.582895 0.174869 279 299 282 300 280 301 Trgb
+0.000000 0.335109 0.100533 277 343 280 302 282 301 Trgb
+0.000000 0.336208 0.100862 277 343 282 301 279 342 Trgb
+0.000000 0.111337 0.033401 275 342 278 301 280 302 Trgb
+0.000000 0.222674 0.066802 275 342 280 302 277 343 Trgb
+0.000000 0.000000 0.000000 275 341 278 300 278 301 Trgb
+0.000000 0.000000 0.000000 275 341 278 301 275 342 Trgb
+0.156119 0.052040 0.041632 292 284 290 293 281 282 Trgb
+0.267437 0.089146 0.071317 290 293 292 284 300 303 Trgb
+0.431611 0.143870 0.115096 300 303 293 309 290 293 Trgb
+0.154020 0.051340 0.041072 290 293 269 291 281 282 Trgb
+0.130571 0.043524 0.034819 278 310 264 306 269 291 Trgb
+0.263240 0.087747 0.070197 269 291 290 293 278 310 Trgb
+0.429512 0.143171 0.114537 293 309 278 310 290 293 Trgb
+0.413054 0.137685 0.110148 293 309 300 303 288 319 Trgb
+0.021351 0.007117 0.005694 269 291 271 282 281 282 Trgb
+0.008229 0.002743 0.002194 264 306 259 298 269 291 Trgb
+0.008229 0.002743 0.002194 271 282 269 291 259 298 Trgb
+0.114112 0.038037 0.030430 267 317 288 319 278 319 Trgb
+0.122342 0.040781 0.032624 264 306 278 310 267 317 Trgb
+0.236454 0.078818 0.063054 288 319 267 317 278 310 Trgb
+0.410955 0.136985 0.109588 278 310 293 309 288 319 Trgb
+0.000000 0.000000 0.000000 259 298 264 306 267 317 Trgb
+0.000000 0.699650 0.209895 320 357 320 355 320 355 Trgb
+0.000000 0.699650 0.209895 320 355 321 353 320 355 Trgb
+0.000000 0.699650 0.209895 321 353 321 353 320 355 Trgb
+0.000000 0.699650 0.209895 321 353 321 355 320 355 Trgb
+0.000000 0.699650 0.209895 321 355 320 357 320 355 Trgb
+0.000000 0.699650 0.209895 320 357 320 357 320 355 Trgb
+0.000000 0.019057 0.005717 276 342 320 355 320 357 Trgb
+0.000000 0.016121 0.004836 276 342 320 357 276 344 Trgb
+0.000000 0.013204 0.003961 277 340 321 353 320 355 Trgb
+0.000000 0.017599 0.005280 277 340 320 355 276 342 Trgb
+0.000000 0.002937 0.000881 277 340 321 353 321 353 Trgb
+0.000000 0.005873 0.001762 277 340 321 353 277 340 Trgb
+0.051513 0.547915 0.119886 325 363 327 354 330 358 Trgb
+0.033489 0.356204 0.077939 317 363 318 358 325 363 Trgb
+0.045176 0.480506 0.105136 327 354 325 363 318 358 Trgb
+0.037293 0.396663 0.086791 318 358 320 351 327 354 Trgb
+0.042482 0.451858 0.098868 327 354 329 351 330 358 Trgb
+0.009041 0.096168 0.021042 322 346 324 347 329 351 Trgb
+0.027114 0.288393 0.063101 329 351 327 354 322 346 Trgb
+0.028262 0.300606 0.065774 320 351 322 346 327 354 Trgb
+0.022883 0.243388 0.053254 319 364 317 363 325 363 Trgb
+0.000000 0.000000 0.000000 314 350 312 359 311 352 Trgb
+0.016992 0.180738 0.039546 318 358 317 363 312 359 Trgb
+0.010607 0.112815 0.024684 312 359 314 350 318 358 Trgb
+0.019221 0.204438 0.044732 320 351 318 358 314 350 Trgb
+0.000000 0.000000 0.000000 316 347 314 350 311 352 Trgb
+0.001576 0.016759 0.003667 314 350 316 347 322 346 Trgb
+0.010190 0.108381 0.023714 322 346 320 351 314 350 Trgb
+0.000000 0.698163 0.209449 265 347 268 347 266 349 Trgb
+0.000000 0.698163 0.209449 268 347 268 350 266 349 Trgb
+0.000000 0.698163 0.209449 268 350 267 351 266 349 Trgb
+0.000000 0.698163 0.209449 267 351 265 351 266 349 Trgb
+0.000000 0.698163 0.209449 265 351 264 348 266 349 Trgb
+0.000000 0.698163 0.209449 264 348 265 347 266 349 Trgb
+0.000000 0.014969 0.004491 278 340 268 347 265 347 Trgb
+0.000000 0.007485 0.002245 278 340 265 347 276 339 Trgb
+0.000000 0.041203 0.012361 279 342 268 350 268 347 Trgb
+0.000000 0.031829 0.009549 279 342 268 347 278 340 Trgb
+0.000000 0.035609 0.010683 277 344 267 351 268 350 Trgb
+0.000000 0.043093 0.012928 277 344 268 350 279 342 Trgb
+0.005581 0.351590 0.071434 263 344 271 348 264 350 Trgb
+0.000872 0.054960 0.011166 264 340 270 341 263 344 Trgb
+0.004101 0.258361 0.052492 271 348 263 344 270 341 Trgb
+0.006315 0.397826 0.080828 270 341 274 347 271 348 Trgb
+0.007937 0.500031 0.101594 271 348 267 356 264 350 Trgb
+0.007251 0.456807 0.092812 274 353 269 357 267 356 Trgb
+0.008813 0.555244 0.112812 267 356 271 348 274 353 Trgb
+0.008671 0.546267 0.110988 274 347 274 353 271 348 Trgb
+0.002352 0.148188 0.030108 259 351 263 344 264 350 Trgb
+0.000284 0.017904 0.003638 259 345 264 340 263 344 Trgb
+0.000284 0.017904 0.003638 263 344 259 351 259 345 Trgb
+0.000000 0.000000 0.000000 258 351 259 345 259 351 Trgb
+0.004708 0.296630 0.060268 267 356 259 351 264 350 Trgb
+0.004307 0.271310 0.055123 269 357 262 356 267 356 Trgb
+0.002640 0.166346 0.033797 259 351 267 356 262 356 Trgb
+0.000000 0.000000 0.000000 262 356 258 351 259 351 Trgb
+0.000000 0.699555 0.209867 274 400 274 399 276 398 Trgb
+0.000000 0.699555 0.209867 274 399 276 397 276 398 Trgb
+0.000000 0.699555 0.209867 276 397 279 396 276 398 Trgb
+0.000000 0.699555 0.209867 279 396 279 397 276 398 Trgb
+0.000000 0.699555 0.209867 279 397 276 399 276 398 Trgb
+0.000000 0.699555 0.209867 276 399 274 400 276 398 Trgb
+0.000000 0.001828 0.000548 238 349 274 399 274 400 Trgb
+0.000000 0.000914 0.000274 238 349 274 400 238 350 Trgb
+0.000000 0.016145 0.004843 240 347 276 397 274 399 Trgb
+0.000000 0.009443 0.002833 240 347 274 399 238 349 Trgb
+0.000000 0.021019 0.006306 243 346 279 396 276 397 Trgb
+0.000000 0.021933 0.006580 243 346 276 397 240 347 Trgb
+0.000000 0.000000 0.000000 275 399 275 398 276 398 Trgb
+0.000000 0.000000 0.000000 275 398 277 396 276 398 Trgb
+0.000000 0.000000 0.000000 277 396 278 397 276 398 Trgb
+0.000000 0.000000 0.000000 278 397 278 398 276 398 Trgb
+0.000000 0.000000 0.000000 278 398 276 400 276 398 Trgb
+0.000000 0.000000 0.000000 276 400 275 399 276 398 Trgb
+0.000000 0.040083 0.012025 276 400 304 426 303 425 Trgb
+0.000000 0.020042 0.006012 276 400 303 425 275 399 Trgb
+0.000000 0.090960 0.027288 278 398 305 424 304 426 Trgb
+0.000000 0.075542 0.022663 278 398 304 426 276 400 Trgb
+0.000000 0.066294 0.019888 278 397 306 422 305 424 Trgb
+0.000000 0.086336 0.025901 278 397 305 424 278 398 Trgb
+0.082512 0.183187 0.053140 311 434 303 434 299 434 Trgb
+0.144624 0.321084 0.093142 299 434 307 431 311 434 Trgb
+0.131873 0.292775 0.084930 313 423 314 416 316 424 Trgb
+0.161712 0.359021 0.104147 316 424 311 434 313 423 Trgb
+0.186888 0.414915 0.120361 307 431 313 423 311 434 Trgb
+0.028116 0.062421 0.018107 300 424 292 424 296 417 Trgb
+0.022788 0.050592 0.014676 299 434 295 431 292 424 Trgb
+0.050904 0.113013 0.032783 292 424 300 424 299 434 Trgb
+0.113016 0.250910 0.072785 307 431 299 434 300 424 Trgb
+0.033444 0.074249 0.021539 305 413 300 424 296 417 Trgb
+0.100265 0.222601 0.064573 314 416 313 423 305 413 Trgb
+0.098496 0.218673 0.063434 300 424 305 413 313 423 Trgb
+0.155280 0.344741 0.100004 313 423 307 431 300 424 Trgb
+0.000000 0.000000 0.000000 292 424 297 414 296 417 Trgb
+0.005328 0.011829 0.003431 297 414 305 413 296 417 Trgb
+0.035213 0.078177 0.022678 309 414 314 416 305 413 Trgb
+0.000000 0.000000 0.000000 276 398 274 397 276 398 Trgb
+0.000000 0.000000 0.000000 274 397 275 397 276 398 Trgb
+0.000000 0.000000 0.000000 275 397 277 398 276 398 Trgb
+0.000000 0.000000 0.000000 277 398 278 399 276 398 Trgb
+0.000000 0.000000 0.000000 278 399 278 399 276 398 Trgb
+0.000000 0.000000 0.000000 278 399 276 398 276 398 Trgb
+0.000000 0.456347 0.136904 278 399 262 440 260 440 Trgb
+0.000000 0.340193 0.102058 278 399 260 440 276 398 Trgb
+0.000000 0.423140 0.126942 278 399 263 440 262 440 Trgb
+0.000000 0.497820 0.149346 278 399 262 440 278 399 Trgb
+0.000000 0.149360 0.044808 276 398 260 440 259 439 Trgb
+0.000000 0.074680 0.022404 276 398 259 439 274 397 Trgb
+0.212339 0.022980 0.047064 249 455 269 460 253 460 Trgb
+0.339481 0.036740 0.075244 252 441 268 447 249 455 Trgb
+0.400003 0.043290 0.088659 269 460 249 455 268 447 Trgb
+0.531030 0.057471 0.117700 268 447 280 448 269 460 Trgb
+0.070112 0.007588 0.015540 242 448 249 455 253 460 Trgb
+0.144590 0.015648 0.032048 241 434 252 441 249 455 Trgb
+0.062885 0.006806 0.013938 249 455 242 448 241 434 Trgb
+0.184671 0.019986 0.040931 280 431 260 426 268 419 Trgb
+0.329260 0.035634 0.072979 268 447 252 441 260 426 Trgb
+0.379562 0.041078 0.084128 260 426 280 431 268 447 Trgb
+0.520810 0.056365 0.115435 280 448 268 447 280 431 Trgb
+0.052664 0.005700 0.011673 260 426 253 419 268 419 Trgb
+0.134369 0.014542 0.029782 252 441 241 434 260 426 Trgb
+0.052664 0.005700 0.011673 253 419 260 426 241 434 Trgb
+0.000000 0.000000 0.000000 241 434 242 431 253 419 Trgb
+0.000000 0.699838 0.209951 305 398 304 400 303 399 Trgb
+0.000000 0.699838 0.209951 304 400 303 401 303 399 Trgb
+0.000000 0.699838 0.209951 303 401 301 400 303 399 Trgb
+0.000000 0.699838 0.209951 301 400 301 398 303 399 Trgb
+0.000000 0.699838 0.209951 301 398 303 397 303 399 Trgb
+0.000000 0.699838 0.209951 303 397 305 398 303 399 Trgb
+0.000000 0.004567 0.001370 275 399 301 400 303 401 Trgb
+0.000000 0.008870 0.002661 275 399 303 401 276 400 Trgb
+0.000000 0.000088 0.000026 275 397 301 398 301 400 Trgb
+0.000000 0.000176 0.000053 275 397 301 400 275 399 Trgb
+0.000000 0.000000 0.000000 277 396 303 397 301 398 Trgb
+0.000000 0.000000 0.000000 277 396 301 398 275 397 Trgb
+0.222606 0.358895 0.116300 316 395 312 409 312 399 Trgb
+0.223481 0.360306 0.116757 312 409 301 403 312 399 Trgb
+0.084475 0.136195 0.044134 299 413 292 405 301 403 Trgb
+0.166838 0.268984 0.087164 301 403 312 409 299 413 Trgb
+0.143692 0.231666 0.075072 307 412 299 413 312 409 Trgb
+0.172674 0.278393 0.090214 306 390 316 395 312 399 Trgb
+0.090628 0.146114 0.047348 316 395 306 390 307 386 Trgb
+0.033050 0.053284 0.017267 298 386 307 386 306 390 Trgb
+0.173550 0.279804 0.090671 301 403 306 390 312 399 Trgb
+0.059072 0.095239 0.030862 292 405 292 394 301 403 Trgb
+0.091503 0.147525 0.047806 306 390 301 403 292 394 Trgb
+0.033050 0.053284 0.017267 292 394 298 386 306 390 Trgb
+0.026022 0.041954 0.013595 292 405 299 413 289 403 Trgb
+0.000619 0.000998 0.000323 292 394 292 405 289 403 Trgb
+0.000000 0.000000 0.000000 298 386 292 394 294 389 Trgb
+0.000000 0.683893 0.205168 199 372 201 375 199 375 Trgb
+0.000000 0.683893 0.205168 201 375 201 378 199 375 Trgb
+0.000000 0.683893 0.205168 201 378 199 378 199 375 Trgb
+0.000000 0.683893 0.205168 199 378 197 376 199 375 Trgb
+0.000000 0.683893 0.205168 197 376 197 373 199 375 Trgb
+0.000000 0.683893 0.205168 197 373 199 372 199 375 Trgb
+0.000000 0.091401 0.027420 243 347 201 375 199 372 Trgb
+0.000000 0.049695 0.014909 243 347 199 372 240 345 Trgb
+0.000000 0.127779 0.038334 243 350 201 378 201 375 Trgb
+0.000000 0.130442 0.039133 243 350 201 375 243 347 Trgb
+0.000000 0.005327 0.001598 240 345 199 372 197 373 Trgb
+0.000000 0.002663 0.000799 240 345 197 373 238 346 Trgb
+0.144027 0.150940 0.058993 191 371 200 384 189 382 Trgb
+0.110751 0.116067 0.045364 199 362 207 369 191 371 Trgb
+0.201210 0.210868 0.082416 200 384 191 371 207 369 Trgb
+0.289919 0.303835 0.118751 207 369 211 381 200 384 Trgb
+0.135622 0.142131 0.055551 200 384 192 390 189 382 Trgb
+0.184399 0.193250 0.075530 192 390 200 384 208 388 Trgb
+0.281513 0.295026 0.115308 211 381 208 388 200 384 Trgb
+0.047625 0.049911 0.019507 183 377 191 371 189 382 Trgb
+0.028132 0.029483 0.011523 190 362 199 362 191 371 Trgb
+0.022189 0.023254 0.009088 191 371 183 377 190 362 Trgb
+0.088563 0.092814 0.036275 207 369 199 362 206 361 Trgb
+0.143049 0.149916 0.058593 206 361 215 374 207 369 Trgb
+0.253947 0.266136 0.104017 211 381 207 369 215 374 Trgb
+0.039219 0.041102 0.016064 192 390 183 377 189 382 Trgb
+0.245542 0.257328 0.100574 208 388 211 381 215 374 Trgb
+0.005944 0.006229 0.002434 199 362 190 362 206 361 Trgb
+0.000000 0.663069 0.198921 237 303 239 304 240 305 Trgb
+0.000000 0.663069 0.198921 239 304 243 306 240 305 Trgb
+0.000000 0.663069 0.198921 243 306 243 307 240 305 Trgb
+0.000000 0.663069 0.198921 243 307 241 306 240 305 Trgb
+0.000000 0.663069 0.198921 241 306 237 304 240 305 Trgb
+0.000000 0.663069 0.198921 237 304 237 303 240 305 Trgb
+0.000000 0.004603 0.001381 237 304 193 373 193 372 Trgb
+0.000000 0.002302 0.000690 237 304 193 372 237 303 Trgb
+0.000000 0.134078 0.040224 241 306 197 375 193 373 Trgb
+0.000000 0.070492 0.021148 241 306 193 373 237 304 Trgb
+0.000000 0.193062 0.057919 243 307 199 376 197 375 Trgb
+0.000000 0.195363 0.058609 243 307 197 375 241 306 Trgb
+0.000000 0.000000 0.000000 195 373 198 373 196 374 Trgb
+0.000000 0.000000 0.000000 198 373 199 374 196 374 Trgb
+0.000000 0.000000 0.000000 199 374 197 375 196 374 Trgb
+0.000000 0.000000 0.000000 197 375 194 376 196 374 Trgb
+0.000000 0.000000 0.000000 194 376 193 374 196 374 Trgb
+0.000000 0.000000 0.000000 193 374 195 373 196 374 Trgb
+0.000000 0.116215 0.034865 194 376 202 423 201 422 Trgb
+0.000000 0.058108 0.017432 194 376 201 422 193 374 Trgb
+0.000000 0.468066 0.140420 197 375 204 423 202 423 Trgb
+0.000000 0.321194 0.096358 197 375 202 423 194 376 Trgb
+0.000000 0.498723 0.149617 199 374 206 422 204 423 Trgb
+0.000000 0.556831 0.167049 199 374 204 423 197 375 Trgb
+0.000000 0.011484 0.003445 202 423 231 450 230 451 Trgb
+0.000000 0.005742 0.001723 202 423 230 451 202 423 Trgb
+0.000000 0.027990 0.008397 204 422 232 449 231 450 Trgb
+0.000000 0.022608 0.006782 204 422 231 450 202 423 Trgb
+0.000000 0.021887 0.006566 205 420 233 448 232 449 Trgb
+0.000000 0.027629 0.008289 205 420 232 449 204 422 Trgb
+0.140855 0.120441 0.052259 222 460 224 457 234 462 Trgb
+0.240544 0.205683 0.089245 244 451 244 451 242 459 Trgb
+0.170476 0.145769 0.063249 244 451 244 451 242 439 Trgb
+0.212239 0.181480 0.078744 238 442 242 439 244 451 Trgb
+0.303940 0.259891 0.112766 234 462 244 451 242 459 Trgb
+0.225159 0.192527 0.083537 224 457 231 450 234 462 Trgb
+0.297267 0.254185 0.110290 244 451 234 462 231 450 Trgb
+0.275635 0.235688 0.102265 231 450 238 442 244 451 Trgb
+0.044827 0.038331 0.016632 224 457 222 460 219 448 Trgb
+0.000000 0.000000 0.000000 230 437 229 437 221 439 Trgb
+0.020908 0.017878 0.007757 229 437 230 437 242 439 Trgb
+0.095304 0.081492 0.035359 242 439 238 442 229 437 Trgb
+0.000000 0.000000 0.000000 229 437 219 448 221 439 Trgb
+0.129131 0.110416 0.047909 231 450 224 457 219 448 Trgb
+0.084303 0.072086 0.031278 219 448 229 437 231 450 Trgb
+0.158699 0.135699 0.058880 238 442 231 450 229 437 Trgb
+0.000000 0.697205 0.209161 203 423 202 421 203 422 Trgb
+0.000000 0.697205 0.209161 202 421 202 420 203 422 Trgb
+0.000000 0.697205 0.209161 202 420 203 421 203 422 Trgb
+0.000000 0.697205 0.209161 203 421 205 422 203 422 Trgb
+0.000000 0.697205 0.209161 205 422 205 423 203 422 Trgb
+0.000000 0.697205 0.209161 205 423 203 423 203 422 Trgb
+0.000000 0.053582 0.016075 205 423 177 446 175 445 Trgb
+0.000000 0.054544 0.016363 205 423 175 445 203 423 Trgb
+0.000000 0.001924 0.000577 202 421 174 444 174 443 Trgb
+0.000000 0.000962 0.000289 202 421 174 443 202 420 Trgb
+0.000000 0.037965 0.011390 203 423 175 445 174 444 Trgb
+0.000000 0.020425 0.006128 203 423 174 444 202 421 Trgb
+0.316256 0.106519 0.084555 174 454 183 458 166 458 Trgb
+0.035608 0.011993 0.009520 158 444 166 458 164 454 Trgb
+0.217204 0.073158 0.058072 166 444 174 454 166 458 Trgb
+0.081816 0.027557 0.021875 166 458 158 444 166 444 Trgb
+0.046208 0.015564 0.012354 163 434 166 444 158 444 Trgb
+0.350542 0.118068 0.093722 193 445 183 444 188 434 Trgb
+0.436507 0.147022 0.116706 183 458 174 454 183 444 Trgb
+0.410770 0.138353 0.109825 183 444 193 445 183 458 Trgb
+0.324951 0.109448 0.086880 188 454 183 458 193 445 Trgb
+0.251490 0.084706 0.067239 183 444 175 430 188 434 Trgb
+0.337456 0.113660 0.090223 174 454 166 444 183 444 Trgb
+0.212668 0.071630 0.056859 175 430 183 444 166 444 Trgb
+0.056808 0.019134 0.015188 166 444 163 434 175 430 Trgb
+0.095631 0.032210 0.025568 175 430 185 430 188 434 Trgb
+0.010600 0.003570 0.002834 163 434 168 430 175 430 Trgb
+0.000000 0.699705 0.209912 228 451 227 452 227 452 Trgb
+0.000000 0.699705 0.209912 227 452 226 453 227 452 Trgb
+0.000000 0.699705 0.209912 226 453 225 453 227 452 Trgb
+0.000000 0.699705 0.209912 225 453 226 451 227 452 Trgb
+0.000000 0.699705 0.209912 226 451 228 450 227 452 Trgb
+0.000000 0.699705 0.209912 228 450 228 451 227 452 Trgb
+0.000000 0.012277 0.003683 203 421 226 451 225 453 Trgb
+0.000000 0.006561 0.001968 203 421 225 453 202 423 Trgb
+0.000000 0.017430 0.005229 204 421 228 450 226 451 Trgb
+0.000000 0.017712 0.005313 204 421 226 451 203 421 Trgb
+0.000000 0.005716 0.001715 205 421 228 451 228 450 Trgb
+0.000000 0.011432 0.003430 205 421 228 450 204 421 Trgb
+0.039036 0.368851 0.081578 229 459 226 459 232 458 Trgb
+0.014453 0.136564 0.030203 221 457 220 456 226 459 Trgb
+0.054216 0.512286 0.113300 232 453 235 454 232 458 Trgb
+0.042493 0.401514 0.088801 235 454 232 453 233 446 Trgb
+0.040366 0.381422 0.084358 229 448 233 446 232 453 Trgb
+0.054876 0.518519 0.114679 226 459 232 453 232 458 Trgb
+0.022702 0.214515 0.047443 220 456 223 452 226 459 Trgb
+0.043812 0.413980 0.091559 232 453 226 459 223 452 Trgb
+0.041026 0.387655 0.085736 223 452 229 448 232 453 Trgb
+0.007590 0.071717 0.015861 225 444 228 445 233 446 Trgb
+0.018790 0.177548 0.039268 233 446 229 448 225 444 Trgb
+0.000000 0.000000 0.000000 225 444 219 450 222 445 Trgb
+0.008716 0.082358 0.018215 223 452 220 456 219 450 Trgb
+0.008250 0.077951 0.017240 219 450 225 444 223 452 Trgb
+0.019450 0.183782 0.040646 229 448 223 452 225 444 Trgb
+0.000000 0.675852 0.202756 157 401 155 402 154 399 Trgb
+0.000000 0.675852 0.202756 155 402 153 400 154 399 Trgb
+0.000000 0.675852 0.202756 153 400 152 397 154 399 Trgb
+0.000000 0.675852 0.202756 152 397 154 396 154 399 Trgb
+0.000000 0.675852 0.202756 154 396 156 398 154 399 Trgb
+0.000000 0.675852 0.202756 156 398 157 401 154 399 Trgb
+0.000000 0.082884 0.024865 197 377 155 402 157 401 Trgb
+0.000000 0.128084 0.038425 197 377 157 401 198 376 Trgb
+0.000000 0.090401 0.027120 198 373 156 398 154 396 Trgb
+0.000000 0.045200 0.013560 198 373 154 396 195 371 Trgb
+0.000000 0.160724 0.048217 198 376 157 401 156 398 Trgb
+0.000000 0.148162 0.044449 198 376 156 398 198 373 Trgb
+0.000000 0.624566 0.187370 133 381 132 382 132 381 Trgb
+0.000000 0.624566 0.187370 132 382 130 382 132 381 Trgb
+0.000000 0.624566 0.187370 130 382 130 380 132 381 Trgb
+0.000000 0.624566 0.187370 130 380 132 379 132 381 Trgb
+0.000000 0.624566 0.187370 132 379 134 379 132 381 Trgb
+0.000000 0.624566 0.187370 134 379 133 381 132 381 Trgb
+0.000000 0.236481 0.070944 154 401 132 382 133 381 Trgb
+0.000000 0.274378 0.082313 154 401 133 381 156 400 Trgb
+0.000000 0.066195 0.019858 153 400 130 382 132 382 Trgb
+0.000000 0.132389 0.039717 153 400 132 382 154 401 Trgb
+0.000000 0.246080 0.073824 156 400 133 381 134 379 Trgb
+0.000000 0.179885 0.053966 156 400 134 379 156 398 Trgb
+0.190356 0.052692 0.048610 134 378 117 386 121 372 Trgb
+0.466388 0.129100 0.119098 146 386 134 397 134 378 Trgb
+0.319369 0.088404 0.081555 117 386 134 378 134 397 Trgb
+0.207824 0.057527 0.053070 134 397 122 397 117 386 Trgb
+0.050611 0.014010 0.012924 117 386 115 370 121 372 Trgb
+0.032644 0.009036 0.008336 115 370 117 386 115 388 Trgb
+0.060843 0.016842 0.015537 122 397 115 388 117 386 Trgb
+0.157712 0.043656 0.040274 132 362 134 378 121 372 Trgb
+0.426508 0.118061 0.108914 149 373 146 386 134 378 Trgb
+0.246846 0.068329 0.063035 134 378 132 362 149 373 Trgb
+0.107101 0.029646 0.027349 142 364 149 373 132 362 Trgb
+0.440979 0.122066 0.112609 134 397 146 386 149 391 Trgb
+0.268552 0.074337 0.068578 149 391 132 398 134 397 Trgb
+0.182415 0.050494 0.046582 122 397 134 397 132 398 Trgb
+0.017967 0.004973 0.004588 115 370 132 362 121 372 Trgb
+0.401099 0.111028 0.102425 146 386 149 373 149 391 Trgb
+0.000000 0.696208 0.208862 150 441 149 441 152 441 Trgb
+0.000000 0.696208 0.208862 149 441 151 441 152 441 Trgb
+0.000000 0.696208 0.208862 151 441 153 441 152 441 Trgb
+0.000000 0.696208 0.208862 153 441 154 441 152 441 Trgb
+0.000000 0.696208 0.208862 154 441 152 441 152 441 Trgb
+0.000000 0.696208 0.208862 152 441 150 441 152 441 Trgb
+0.000000 0.021860 0.006558 154 399 151 441 149 441 Trgb
+0.000000 0.010930 0.003279 154 399 149 441 152 399 Trgb
+0.000000 0.059363 0.017809 156 399 153 441 151 441 Trgb
+0.000000 0.046076 0.013823 156 399 151 441 154 399 Trgb
+0.000000 0.050790 0.015237 157 399 154 441 153 441 Trgb
+0.000000 0.061719 0.018516 157 399 153 441 156 399 Trgb
+0.039530 0.023325 0.012571 135 441 138 440 141 452 Trgb
+0.241096 0.142261 0.076671 141 452 158 453 150 458 Trgb
+0.358611 0.211603 0.114043 149 440 162 441 158 453 Trgb
+0.265973 0.156940 0.084583 158 453 141 452 149 440 Trgb
+0.127736 0.075372 0.040622 138 440 149 440 141 452 Trgb
+0.000000 0.000000 0.000000 138 440 135 441 143 428 Trgb
+0.251597 0.148458 0.080011 158 453 160 454 150 458 Trgb
+0.369112 0.217799 0.117382 162 441 168 442 158 453 Trgb
+0.286976 0.169334 0.091262 160 454 158 453 168 442 Trgb
+0.048676 0.028722 0.015480 160 429 143 428 153 424 Trgb
+0.269050 0.158756 0.085561 162 441 149 440 160 429 Trgb
+0.136882 0.080769 0.043530 143 428 160 429 149 440 Trgb
+0.088206 0.052047 0.028051 149 440 138 440 143 428 Trgb
+0.279552 0.164953 0.088901 168 442 162 441 160 429 Trgb
+0.147384 0.086966 0.046870 160 429 162 430 168 442 Trgb
+0.000000 0.698453 0.209536 154 397 154 397 154 399 Trgb
+0.000000 0.698453 0.209536 154 397 155 399 154 399 Trgb
+0.000000 0.698453 0.209536 155 399 155 401 154 399 Trgb
+0.000000 0.698453 0.209536 155 401 155 401 154 399 Trgb
+0.000000 0.698453 0.209536 155 401 154 399 154 399 Trgb
+0.000000 0.698453 0.209536 154 399 154 397 154 399 Trgb
+0.000000 0.024988 0.007496 154 399 112 404 112 402 Trgb
+0.000000 0.012494 0.003748 154 399 112 402 154 397 Trgb
+0.000000 0.040894 0.012268 155 401 112 406 112 404 Trgb
+0.000000 0.039188 0.011756 155 401 112 404 154 399 Trgb
+0.000000 0.017612 0.005284 155 401 113 406 112 406 Trgb
+0.000000 0.030106 0.009032 155 401 112 406 155 401 Trgb
+0.013474 0.018613 0.006417 101 396 102 410 99 405 Trgb
+0.048974 0.067653 0.023325 110 392 110 400 101 396 Trgb
+0.062448 0.086266 0.029743 102 410 101 396 110 400 Trgb
+0.140330 0.193851 0.066836 110 400 111 410 102 410 Trgb
+0.074641 0.103109 0.035550 104 413 102 410 113 417 Trgb
+0.152523 0.210694 0.072643 111 410 113 417 102 410 Trgb
+0.000000 0.000000 0.000000 112 391 110 392 101 396 Trgb
+0.190994 0.263838 0.090966 121 407 120 394 126 402 Trgb
+0.084474 0.116692 0.040233 110 400 110 392 120 394 Trgb
+0.181141 0.250228 0.086274 120 394 121 407 110 400 Trgb
+0.223523 0.308773 0.106459 111 410 110 400 121 407 Trgb
+0.203187 0.280681 0.096774 123 411 121 407 126 402 Trgb
+0.205527 0.283915 0.097888 121 407 123 411 113 417 Trgb
+0.235716 0.325617 0.112267 113 417 111 410 121 407 Trgb
+0.035500 0.049040 0.016908 110 392 112 391 120 394 Trgb
+0.000000 0.000000 0.000000 196 373 198 373 196 374 Trgb
+0.000000 0.000000 0.000000 198 373 199 374 196 374 Trgb
+0.000000 0.000000 0.000000 199 374 196 375 196 374 Trgb
+0.000000 0.000000 0.000000 196 375 194 375 196 374 Trgb
+0.000000 0.000000 0.000000 194 375 194 374 196 374 Trgb
+0.000000 0.000000 0.000000 194 374 196 373 196 374 Trgb
+0.000000 0.058250 0.017475 196 375 211 428 209 428 Trgb
+0.000000 0.029125 0.008737 196 375 209 428 194 375 Trgb
+0.000000 0.089543 0.026863 199 374 214 427 211 428 Trgb
+0.000000 0.088459 0.026538 199 374 211 428 196 375 Trgb
+0.000000 0.032377 0.009713 198 373 213 426 214 427 Trgb
+0.000000 0.061502 0.018451 198 373 214 427 199 374 Trgb
+0.000000 0.030777 0.009233 211 428 250 437 250 438 Trgb
+0.000000 0.024674 0.007402 211 428 250 438 211 429 Trgb
+0.000000 0.024499 0.007350 211 426 250 435 250 437 Trgb
+0.000000 0.030690 0.009207 211 426 250 437 211 428 Trgb
+0.000000 0.006103 0.001831 212 425 250 434 250 435 Trgb
+0.000000 0.012206 0.003662 212 425 250 435 211 426 Trgb
+0.191392 0.316343 0.101547 257 446 258 441 262 439 Trgb
+0.197092 0.325763 0.104571 248 447 249 440 258 441 Trgb
+0.176218 0.291262 0.093496 258 441 257 446 248 447 Trgb
+0.088556 0.146370 0.046985 247 447 248 447 257 446 Trgb
+0.191022 0.315731 0.101350 258 441 260 430 262 439 Trgb
+0.196721 0.325151 0.104374 249 440 251 431 258 441 Trgb
+0.175477 0.290037 0.093103 260 430 258 441 251 431 Trgb
+0.087553 0.144712 0.046453 251 431 253 425 260 430 Trgb
+0.002361 0.003902 0.001253 241 437 240 442 238 433 Trgb
+0.111529 0.184341 0.059174 249 440 248 447 241 437 Trgb
+0.047688 0.078822 0.025302 240 442 241 437 248 447 Trgb
+0.045589 0.075353 0.024188 248 447 247 447 240 442 Trgb
+0.002361 0.003902 0.001253 243 426 241 437 238 433 Trgb
+0.111158 0.183728 0.058977 251 431 249 440 241 437 Trgb
+0.047318 0.078209 0.025105 241 437 243 426 251 431 Trgb
+0.044957 0.074307 0.023853 253 425 251 431 243 426 Trgb
+0.000000 0.696159 0.208848 210 428 209 426 211 427 Trgb
+0.000000 0.696159 0.208848 209 426 211 426 211 427 Trgb
+0.000000 0.696159 0.208848 211 426 212 426 211 427 Trgb
+0.000000 0.696159 0.208848 212 426 213 428 211 427 Trgb
+0.000000 0.696159 0.208848 213 428 212 429 211 427 Trgb
+0.000000 0.696159 0.208848 212 429 210 428 211 427 Trgb
+0.000000 0.053681 0.016104 212 429 198 454 197 453 Trgb
+0.000000 0.036521 0.010956 212 429 197 453 210 428 Trgb
+0.000000 0.057934 0.017380 213 428 200 453 198 454 Trgb
+0.000000 0.064388 0.019316 213 428 198 454 212 429 Trgb
+0.000000 0.012907 0.003872 210 428 197 453 196 451 Trgb
+0.000000 0.006454 0.001936 210 428 196 451 209 426 Trgb
+0.154398 0.084429 0.047765 188 459 198 464 187 464 Trgb
+0.165493 0.090496 0.051198 202 466 187 464 198 464 Trgb
+0.296883 0.162344 0.091845 198 464 209 463 202 466 Trgb
+0.036020 0.019697 0.011143 183 449 188 459 187 464 Trgb
+0.274719 0.150224 0.084989 209 453 194 450 203 442 Trgb
+0.225659 0.123397 0.069811 198 464 188 459 194 450 Trgb
+0.328338 0.179544 0.101576 194 450 209 453 198 464 Trgb
+0.388466 0.212424 0.120178 209 463 198 464 209 453 Trgb
+0.223779 0.122368 0.069229 209 440 209 453 203 442 Trgb
+0.226457 0.123833 0.070058 209 453 209 440 213 455 Trgb
+0.337526 0.184568 0.104419 213 455 209 463 209 453 Trgb
+0.136021 0.074380 0.042080 194 450 194 438 203 442 Trgb
+0.107282 0.058665 0.033189 188 459 183 449 194 450 Trgb
+0.071262 0.038968 0.022046 194 438 194 450 183 449 Trgb
+0.000000 0.000000 0.000000 183 449 187 441 194 438 Trgb
+0.085080 0.046524 0.026321 194 438 209 440 203 442 Trgb
+0.000000 0.695760 0.208728 202 465 202 466 200 465 Trgb
+0.000000 0.695760 0.208728 202 466 201 466 200 465 Trgb
+0.000000 0.695760 0.208728 201 466 199 465 200 465 Trgb
+0.000000 0.695760 0.208728 199 465 198 464 200 465 Trgb
+0.000000 0.695760 0.208728 198 464 200 465 200 465 Trgb
+0.000000 0.695760 0.208728 200 465 202 465 200 465 Trgb
+0.000000 0.053534 0.016060 213 428 202 466 202 465 Trgb
+0.000000 0.065180 0.019554 213 428 202 465 213 427 Trgb
+0.000000 0.023293 0.006988 211 427 200 465 198 464 Trgb
+0.000000 0.011646 0.003494 211 427 198 464 209 427 Trgb
+0.000000 0.062864 0.018859 213 427 202 465 200 465 Trgb
+0.000000 0.048901 0.014670 213 427 200 465 211 427 Trgb
+0.375597 0.014475 0.078015 207 480 205 484 195 485 Trgb
+0.566565 0.021835 0.117680 216 466 220 471 207 480 Trgb
+0.435134 0.016770 0.090381 205 484 207 480 220 471 Trgb
+0.360499 0.013893 0.074879 187 474 207 480 195 485 Trgb
+0.551467 0.021253 0.114544 202 460 216 466 207 480 Trgb
+0.404938 0.015606 0.084109 207 480 187 474 202 460 Trgb
+0.194920 0.007512 0.040486 187 458 202 460 187 474 Trgb
+0.435649 0.016790 0.090488 220 471 216 466 215 452 Trgb
+0.150481 0.005799 0.031256 185 479 187 474 195 485 Trgb
+0.057909 0.002232 0.012028 187 474 185 479 180 460 Trgb
+0.057909 0.002232 0.012028 180 460 187 458 187 474 Trgb
+0.079101 0.003049 0.016430 215 452 195 446 206 446 Trgb
+0.420551 0.016208 0.087352 216 466 202 460 215 452 Trgb
+0.216112 0.008329 0.044888 195 446 215 452 202 460 Trgb
+0.137011 0.005280 0.028458 202 460 187 458 195 446 Trgb
+0.000000 0.000000 0.000000 187 458 180 460 195 446 Trgb
+
+0.2 20 20 592 592 BDR
+
+grestore
+showpage
+%%Trailer
+%%Pages: 1
+end
+clear cleardictstack
+doretreesave restore
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/escher.ps b/Master/xemtex/doc/ghostscript/examples/escher.ps new file mode 100644 index 00000000000..74b3e92d6de --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/escher.ps @@ -0,0 +1,384 @@ +%!
+% If you're concerned that the cpu in your PostScript printer will atrophy
+% from disuse, here is another Escher-like contribution to to keep it busy
+% for a while. It uses PostScript color commands, but will still work on
+% a monochrome printer (but isn't very pretty in black & white).
+%
+% The butterflies are arranged in a hexagonal grid (wallpaper group p6),
+% and the moveto, lineto, curveto commands used to render the tesselation
+% are redefined so as to impose a nonlinear transform that shrinks the
+% infinite plane to an ellipse. This is a sleazy way to mimic Escher's
+% "circle limit" sorts of things.
+%
+% The butterfly permimeter was made by imposing all the symmetry constraints
+% on a path, and then that path was filled in using Adobe Illustrator
+%
+% The routines Xform and next_color are easy to change if you want to hack
+% with them. The code was written to sacrifice efficiency for readability.
+%
+% Bob Wallis
+%
+% UUCP {sun,pyramid,cae780,apple}!weitek!wallis
+
+/eschersave save def % prevent left over side effects
+
+%statusdict begin waittimeout 6000 lt % if you have a slow printer, you
+% {0 60 6000 setdefaulttimeouts} % might need to uncomment this
+%if end
+
+/nlayers 1 def % 1 takes about 10 minutes on a LW+; 2 takes 4x longer
+/warp 1 def % 1 -> ellipsoidal distortion; 0 -> flat Euclidean
+/inch {72 mul} def
+
+/x4 152 def /y4 205.6 def % 6 fold rotation center of bfly
+/x12 387.20 def /y12 403.84 def % 3 fold center of bfly
+
+/dx x4 x12 sub def % [dx,dy] = distance between the
+/dy y4 y12 sub def % two fixed points above
+
+/Dm dx dup mul dy dup mul % magnitude of basis vectors of
+ add sqrt 3 sqrt mul % parallelogram lattice
+def % = |dx,dy| * sqrt(3)
+
+/Da dy dx atan 30 add def
+/D1x Dm Da cos mul def % [D1x, D1y] = basis vector vector #1
+/D1y Dm Da sin mul def % = [Dm,0] exp(j30)
+
+/Da dy dx atan 30 sub def
+/D2x Dm Da cos mul def % [D2x, D2y] = basis vector vector #2
+/D2y Dm Da sin mul def % = [Dm,0] exp(-j30)
+
+/m { moveto} def
+/L {lineto} def
+/S {stroke} def
+/c {curveto} def
+/f {closepath fill} def
+/F {closepath fill} def
+/g { setgray} def
+
+/FillStroke { % fill interior & stroke black border
+ closepath gsave fill grestore 0 setgray stroke
+} def
+
+%
+% Description of 1 butterfly
+%
+/body {
+ 314.96 280.19 m
+ 383.4 261.71 445.11 243.23 513.52 224.68 c
+ 463.68 256.59 490.26 328.83 446.99 360.76 c
+ 423.71 347.32 397.08 339.7 367.07 337.9 c
+ 388.93 358.28 414.14 372.84 442.73 381.58 c
+ 426.68 398.18 394.07 389.7 387.2 403.84 c
+ 371.52 404.96 362.56 372.48 340.16 366.88 c
+ 346.88 396.01 346.88 425.12 340.16 454.24 c
+ 326.72 427.35 320 400.48 320 373.6 c
+ 270.71 352.1 221.44 411.23 168.88 384.02 c
+ 189.04 388.03 202.48 380.4 212.57 366.95 c
+ 216.72 350.85 209.23 341.46 190.1 338.79 c
+ 177.34 343.57 167.94 354.17 161.9 370.59 c
+ 176.06 305.52 132.02 274.05 152 205.6 c
+ 201.29 257.12 250.56 234.72 299.84 279.52 c
+ 288.64 266.08 284.16 252.64 286.4 239.2 c
+ 298.27 223.97 310.15 222.18 322.02 233.82 c
+ 328.62 249.28 328.51 264.74 314.96 280.19 c
+ FillStroke
+} def
+
+/eyes {
+ 294.8125 238.3246 m
+ 296.9115 238.3246 298.6132 242.7964 298.6132 248.3125 c
+ 298.6132 253.8286 296.9115 258.3004 294.8125 258.3004 c
+ 292.7135 258.3004 291.0118 253.8286 291.0118 248.3125 c
+ 291.0118 242.7964 292.7135 238.3246 294.8125 238.3246 c
+ closepath gsave 1 g fill grestore 0 g S
+
+ 319.5 241.1782 m
+ 321.7455 241.1782 323.5659 245.4917 323.5659 250.8125 c
+ 323.5659 256.1333 321.7455 260.4468 319.5 260.4468 c
+ 317.2545 260.4468 315.4341 256.1333 315.4341 250.8125 c
+ 315.4341 245.4917 317.2545 241.1782 319.5 241.1782 c
+ closepath gsave 1 g fill grestore 0 g S
+ 0 g
+ 296.875 242.0939 m
+ 297.4608 242.0939 297.9356 243.479 297.9356 245.1875 c
+ 297.9356 246.896 297.4608 248.2811 296.875 248.2811 c
+ 296.2892 248.2811 295.8143 246.896 295.8143 245.1875 c
+ 295.8143 243.479 296.2892 242.0939 296.875 242.0939 c
+ f
+ 0 g
+ 318.5 243.7707 m
+ 319.281 243.7707 319.9142 245.0766 319.9142 246.6875 c
+ 319.9142 248.2984 319.281 249.6043 318.5 249.6043 c
+ 317.719 249.6043 317.0858 248.2984 317.0858 246.6875 c
+ 317.0858 245.0766 317.719 243.7707 318.5 243.7707 c
+ f
+} def
+
+/stripes {
+ 292 289 m
+ 252 294 241 295 213 279 c
+ 185 263 175 252 159 222 c
+ S
+ 285 313 m
+ 239 326 226 325 206 315 c
+ 186 305 164 278 161 267 c
+ S
+ 298 353 m
+ 262 342 251 339 237 355 c
+ 223 371 213 380 201 383 c
+ S
+ 330 288 m
+ 384 293 385 292 418 280 c
+ 451 268 452 264 473 247 c
+ S
+ 342 306 m
+ 381 311 386 317 410 311 c
+ 434 305 460 287 474 262 c
+ S
+ 345 321 m
+ 352 357 359 367 379 377 c
+ 399 387 409 385 426 382 c
+ S
+ 327.75 367.75 m
+ 336.5 392.25 333.682 403.348 335.25 415.5 c
+ S
+ 320 364.75 m
+ 322 361.75 323.5 360.5 326.25 360 c
+ 329 359.5 332 360.5 334 362.75 c
+ S
+ 316.25 356.5 m
+ 318.75 353.25 320 353 323.25 352.25 c
+ 326.5 351.5 329 352 331.5 353.25 c
+ S
+ 312.5 349 m
+ 316.75 345.5 318.25 344.5 321.25 343.75 c
+ 324.25 343 327 344 329.75 346 c
+ S
+ 310.75 340.75 m
+ 314.25 336.5 316.25 335.25 320 335.25 c
+ 323.75 335.25 327 336.5 329.25 338 c
+ S
+ 308.5 332 m
+ 311.75 328.5 312.5 327.25 317 327 c
+ 321.5 326.75 325.75 328.25 327.75 329.75 c
+ S
+ 305 322 m
+ 309.5 317.75 310.75 317 315 316.5 c
+ 319.25 316 322.25 318 324.75 320 c
+ S
+ 302.25 311 m
+ 307 307.5 307.75 306.25 312.75 306 c
+ 317.75 305.75 320 307.25 323.75 309.5 c
+ S
+ 301.25 298.25 m
+ 304.5 292.75 305.25 292 308.25 292 c
+ 311.25 292 313.75 293.75 315.75 295.75 c
+ S
+} def
+/nostrils {
+ 0 g
+ 304.062 227.775 m
+ 304.599 227.775 305.034 228.883 305.034 230.25 c
+ 305.034 231.616 304.599 232.724 304.062 232.724 c
+ 303.525 232.724 303.09 231.616 303.09 230.25 c
+ 303.09 228.883 303.525 227.775 304.062 227.775 c
+ f
+ 304.062 230.25 m
+ F
+ 309.562 228.275 m
+ 310.099 228.275 310.534 229.383 310.534 230.75 c
+ 310.534 232.116 310.099 233.224 309.562 233.224 c
+ 309.025 233.224 308.59 232.116 308.59 230.75 c
+ 308.59 229.383 309.025 228.275 309.562 228.275 c
+ f
+} def
+/thorax
+{
+ 327.5 300 m
+ 316.5 283 315.5 275.5 308 277.5 c
+ 294 311.5 299 313.5 304 334 c
+ 309 354.5 315.5 362 322.5 372 c
+ 329.5 382 327.5 376.5 331 376 c
+ 334.5 375.5 339.1367 379.1109 339 369 c
+ 338.5 332 333.4999 324.5 330.5 311.5 c
+ 0 g S
+} def
+/spots {
+ next_color
+ 192 242.201 m
+ 202.1535 242.201 210.3848 251.0655 210.3848 262 c
+ 210.3848 272.9345 202.1535 281.799 192 281.799 c
+ 181.8465 281.799 173.6152 272.9345 173.6152 262 c
+ 173.6152 251.0655 181.8465 242.201 192 242.201 c
+ FillStroke
+ next_color
+ 447.5 250.2365 m
+ 459.6061 250.2365 469.4203 257.5181 469.4203 266.5 c
+ 469.4203 275.4819 459.6061 282.7635 447.5 282.7635 c
+ 435.3939 282.7635 425.5797 275.4819 425.5797 266.5 c
+ 425.5797 257.5181 435.3939 250.2365 447.5 250.2365 c
+ FillStroke
+ next_color
+ 401 369.1005 m
+ 409.5914 369.1005 416.5563 373.5327 416.5563 379 c
+ 416.5563 384.4673 409.5914 388.8995 401 388.8995 c
+ 392.4086 388.8995 385.4436 384.4673 385.4436 379 c
+ 385.4436 373.5327 392.4086 369.1005 401 369.1005 c
+ FillStroke
+ next_color
+ 249 348.2721 m
+ 261.4966 348.2721 271.6274 353.9707 271.6274 361 c
+ 271.6274 368.0293 261.4966 373.7279 249 373.7279 c
+ 236.5034 373.7279 226.3726 368.0293 226.3726 361 c
+ 226.3726 353.9707 236.5034 348.2721 249 348.2721 c
+ FillStroke
+} def
+
+/ncolor 6 def
+/cidx 0 def
+
+/next_color {
+ cidx ncolor div % hue
+ .75 % saturation (change these if you like)
+ .8 % lightness
+ sethsbcolor
+ /cidx cidx 1 add ncolor mod def
+} def
+
+/cidx 0 def
+
+/max_r2 % radius^2 for center of outermost ring of butterflies
+ Dm nlayers mul 1.05 mul dup mul
+def
+
+/max_radius max_r2 sqrt def
+/max_radius_inv 1 max_radius div def
+/Dm_inv 1 Dm div def
+
+%
+% Ellipsoidal distortion, maps "nlayers" concentric rings of cells into
+% an ellipse centered on page
+
+% D length of 1 basis vector separating hexagonal cells
+% z0 center of 6-fold rotation = origin of shrink xform
+% z' = (z - z0)/D new coord system
+% |z'| = sqrt(x^2 + [(8.5/11)*y]^2) aspect ratio of paper
+% z" = z' * a/M(|z'|) shrink by "a/M(|z|)" as fcn of radius
+
+% At the max radius, we want the shrunk ellipse to be "W" units wide so it
+% just fits our output format - solve for scale factor "a"
+
+% zmax = n+0.5 for n layers of cells
+% zmax * [a/M(zmax)] = W 1/2 width of output on paper
+% a = M(zmax)*W/zmax solve for "a"
+
+%/M{dup mul 1 add sqrt}bind def % M(u) = sqrt(1+|u|^2) = one possible shrink
+/M { 1.5 add } bind def % M(u) = (1.5+|u|) = another possible one
+/W 3.8 inch def % 1/2 width of ellipse
+/zmax 0.5 nlayers add def % radius at last layer of hexagons
+/a zmax M W mul zmax div def % a = M(zmax)*W/zmax
+
+/Xform { % [x0,y0] = ctr ellipse
+ Matrix transform
+ /y exch def
+ /x exch def
+ /z x dup mul y .773 mul dup mul add sqrt def % ellipse radius
+ /Scale a z M div def % z=a/M(|z|)
+ x Scale mul x0 add % magnify back up
+ y Scale mul y0 add % [x0+x*s, y0+y*s]
+} def
+
+
+/Helvetica findfont 8 scalefont setfont
+4.25 inch 0.5 inch moveto
+(RHW) stringwidth pop -0.5 mul 0 rmoveto
+(RHW) show % autograph
+
+warp 1 eq { % redefine commands to use Xform
+ /moveto { Xform //moveto} def
+ /lineto { Xform //lineto} def
+ /curveto {
+ Xform 6 -2 roll
+ Xform 6 -2 roll
+ Xform 6 -2 roll
+ //curveto
+ } def
+}if
+
+
+/bfly { % paint 1 butterfly
+ next_color body
+ 1 setgray eyes
+ stripes
+ 0 setgray nostrils
+ 0.5 setgray thorax next_color
+ spots
+} def
+
+/x0 x4 def % center
+/y0 y4 def
+
+/T1matrix % xlate to center of image
+ x0 neg y0 neg matrix translate
+def
+
+/Smatrix % scale so that 1 basis vector = 1.0
+ Dm_inv dup matrix scale
+def
+
+/HexCell { % 6 butterflys rotated about center of
+ /cidx 0 def % 6 fold symmetry
+ /color 0 def
+ /T2matrix dx dy matrix translate def
+ 0 60 300 {
+ /angle exch def
+ /Rmatrix angle matrix rotate def
+ /Matrix % translate, rotate, scale - used by Xform
+ T1matrix Rmatrix matrix concatmatrix
+ T2matrix matrix concatmatrix
+ Smatrix matrix concatmatrix
+ def
+ gsave
+ warp 0 eq % then may use usual PostScript machinery
+ { % else using Xform
+ x0 y0 translate angle rotate
+ .5 dup scale
+ dx x0 sub dy y0 sub translate
+ } if
+ bfly
+ next_color
+ grestore
+ } for
+} def
+
+
+%320 x4 sub 240 y4 sub translate
+4.25 inch x4 sub 5.5 inch y4 sub translate
+
+
+0 setlinewidth
+/N 2 def
+N neg 1 N {
+ /i exch def % translate to
+ N neg 1 N { % i*D1 + j*D2
+ /j exch def % and draw HexCell
+ gsave
+ /dx i D1x mul j D2x mul add def % translate HexCell by
+ /dy i D1y mul j D2y mul add def % [dx,dy]
+ /r2 dx dup mul dy dup mul add def % r^2 = |dx,dy|^2
+ r2 max_r2 lt % inside radius?
+ { % yes
+ 1 r2 max_r2 div sub sqrt 2 div
+ setlinewidth % make skinnier lines
+ HexCell % 6 butterflies
+ }
+ if
+ grestore
+ } for
+} for
+
+showpage
+
+clear cleardictstack
+eschersave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/golfer.ps b/Master/xemtex/doc/ghostscript/examples/golfer.ps new file mode 100644 index 00000000000..9f3a8916d49 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/golfer.ps @@ -0,0 +1,1401 @@ +%!PS-Adobe-2.0 EPSF-1.2
+%%Creator:Adobe Illustrator(TM) 1.0b2-
+%%Title:golfer art+
+%%CreationDate:1/6/87 9:32 AM
+%%DocumentFonts:Helvetica-Bold
+%%BoundingBox:7 31 577 726
+%%TemplateBox:0 -48 576 672
+%%EndComments
+/golfersave save def % prevent left over effects
+100 dict begin
+/q{bind def}bind def
+/Q{load def}q
+/x{exch def}q
+/X/def Q
+/g{/_g x/p{_g setgray}X}q
+/G{/_G x/P{_G setgray}X}q
+/k{/_b x/_g x/_r x/p{_r _g _b setrgbcolor}X}q
+/K{/_B x/_G x/_R x/P{_R _G _B setrgbcolor}X}q
+/d/setdash Q
+/i/setflat Q
+/j/setlinejoin Q
+/J/setlinecap Q
+/M/setmiterlimit Q
+/w/setlinewidth Q
+/_C{.25 sub round .25 add}q
+/_c{transform _C exch _C exch itransform}q
+/c{_c curveto}q
+/C/c Q
+/v{currentpoint 6 2 roll _c curveto}q
+/V/v Q
+/y{_c 2 copy curveto}q
+/Y/y Q
+/l{_c lineto}q
+/L/l Q
+/m{_c moveto}q
+/_e[]X
+/_E{_e length 0 ne{gsave 1 g 0 G 1 i 0 J 0 j .5 w 10 M[]0 d
+/Helvetica-Bold 24 0 0 1 z
+[0.966 0.259 -0.259 0.966
+_e 0 get _e 2 get add 2 div _e 1 get _e 3 get add 2 div]a
+(ERROR: can't fill a path)t T grestore}if}q
+/n/newpath Q
+/N/newpath Q
+/F{p{fill}stopped{/_e[pathbbox]X n _E}if}q
+/f{closepath F}q
+/S{P stroke}q
+/s{closepath S}q
+/B{gsave F grestore S}q
+/b{closepath B}q
+/u{}q
+/U{}q
+/_s/ashow Q
+/_S{(?)exch{2 copy 0 exch put pop dup true charpath currentpoint _m setmatrix
+stroke _M setmatrix moveto 3 copy pop rmoveto}forall pop pop pop n}q
+/_A{_a moveto _t exch 0 exch}q
+/_L{0 _l neg translate _M currentmatrix pop}q
+/_w{dup stringwidth exch 3 -1 roll length 1 sub _t mul add exch}q
+/_z[{0 0}bind{dup _w exch neg 2 div exch neg 2 div}bind
+{dup _w exch neg exch neg}bind]X
+/z{_z exch get/_a x/_t x/_l x exch findfont exch scalefont setfont}q
+/_d{matrix currentmatrix X}q
+/_D{/_m _d gsave concat/_M _d}q
+/e{_D p/t{_A _s _L}X}q
+/r{_D P/t{_A _S _L}X}q
+/a{_D/t{dup p _A _s P _A _S _L}X}q
+/o{_D/t{pop _L}X}q
+/T{grestore}q
+/Z{findfont begin currentdict dup length dict begin
+{1 index/FID ne{X}{pop pop}ifelse}forall/FontName exch X dup length 0 ne
+{/Encoding Encoding 256 array copy X 0 exch{dup type/nametype eq
+{Encoding 2 index 2 index put pop 1 add}{exch pop}ifelse}forall}if pop
+currentdict dup end end/FontName get exch definefont pop}q
+n
+%%EndProlog
+u
+0.9 g
+0 G
+1 i
+0 J
+0 j
+1 w
+10 M
+[]0 d
+%%Note:
+15.815 40.248 m
+567.815 40.002 L
+567.748 716.565 L
+15.998 716.81 L
+15.815 40.248 L
+b
+U
+1 g
+285.313 40 m
+567.688 40.125 L
+567.812 78.375 L
+285.312 78.25 L
+285.313 40 L
+b
+0 g
+175.5 163 m
+180.007 163 173.738 169.081 171.75 168.75 c
+174.75 169.25 176.25 169.5 174.5 171.25 C
+178 171.25 176.349 173.783 175 176.75 c
+173.75 179.5 170.75 182.25 168.25 182 C
+165.5 181.25 167.622 182.838 165.25 186 c
+164.5 187 164.75 187.5 161.75 186.75 c
+158.75 186 163.25 190 156.75 190 c
+150.25 190 148.5 189 145.5 186 c
+142.5 183 139.75 183.75 139.5 182.5 c
+139.25 181.25 139.5 176.75 138.75 175.5 c
+138 174.25 136.75 174.25 136.25 178 c
+135.75 181.75 140.25 182.25 134 187 C
+135.75 190.75 134.5 191.75 131 193.5 C
+131 200 129.202 203.364 119.5 208.5 c
+115.25 210.75 107 212.75 104.75 208.75 c
+102.5 204.75 103 206.5 96.5 205.75 c
+90 205 87.25 202.5 86.5 197.75 c
+85.75 193 82.75 195 79 194.75 c
+75.25 194.5 77 192.75 77.25 191.75 c
+77.5 190.75 75.25 192.5 71.5 192 c
+67.75 191.5 64.25 185.5 69.5 180.75 c
+74.75 176 66.5 180.75 64.25 182.25 c
+62 183.75 60.5 181.75 61 180.25 c
+61.5 178.75 58.75 180.75 57.5 180.75 c
+56.25 180.75 51.008 180.188 52 172.25 c
+52.25 170.25 51.5 170.5 49.75 169.25 c
+48 168 45.75 164.25 48.5 158.75 c
+51.25 153.25 49 150 48 145.5 c
+47 141 48 138.25 51.25 137.25 c
+54.5 136.25 54 133.791 54 130.75 C
+57 130.5 59 129.25 58.75 124.5 C
+62.25 124.5 61.75 126.75 62.5 130 c
+63.25 133.25 65.75 129 66.25 127 c
+66.75 125 67.5 125 72 125 C
+74.75 116.25 74.75 120.5 75.25 117.25 C
+80 117.5 79.5 116.75 83.25 113.75 c
+87 110.75 88.25 115.5 92 118.5 c
+95.75 121.5 94.25 122.75 96.25 118.75 c
+98.25 114.75 98.5 119 101.5 119.25 c
+104.5 119.5 101 115.75 105.25 114.5 c
+109.5 113.25 105 113.75 103.5 111.25 c
+102 108.75 95 103.5 101.75 101.5 c
+108.5 99.5 103.5 99.75 94.75 99.5 c
+86 99.25 73.75 87.5 97.25 73.25 C
+117.25 53.25 117.25 53.5 v
+117.25 53.75 175.25 163 175.5 163 c
+f
+1 J
+0.2 w
+389.709 210.076 m
+511.826 210.076 l
+S
+394.709 212.461 m
+516.826 212.461 l
+S
+415.459 215.112 m
+537.576 215.112 l
+S
+399.709 217.762 m
+521.826 217.762 l
+S
+402.459 222.799 m
+524.576 222.799 l
+S
+402.709 225.45 m
+524.826 225.45 l
+S
+392.959 227.851 m
+515.076 227.851 l
+S
+400.691 232.856 m
+522.809 232.856 l
+S
+388.191 235.241 m
+510.309 235.241 l
+S
+393.941 237.892 m
+516.059 237.892 l
+S
+393.441 240.292 m
+515.559 240.292 l
+S
+396.191 242.928 m
+518.309 242.928 l
+S
+386.441 245.579 m
+508.559 245.579 l
+S
+393.191 248.23 m
+515.309 248.23 l
+S
+414.191 250.631 m
+536.309 250.631 l
+S
+397.95 252.973 m
+520.067 252.973 l
+S
+398.7 255.358 m
+520.817 255.358 l
+S
+400.7 258.009 m
+522.817 258.009 l
+S
+384.45 260.659 m
+506.567 260.659 l
+S
+380.7 265.696 m
+502.817 265.696 l
+S
+379.95 268.347 m
+502.067 268.347 l
+S
+386.7 270.748 m
+508.817 270.748 l
+S
+394.433 275.752 m
+516.55 275.752 l
+S
+381.933 278.138 m
+504.05 278.138 l
+S
+379.433 280.789 m
+501.55 280.789 l
+S
+383.183 283.189 m
+505.3 283.189 l
+S
+370.433 285.825 m
+492.55 285.825 l
+S
+382.433 288.476 m
+504.55 288.476 l
+S
+356.183 291.127 m
+478.3 291.127 l
+S
+372.433 293.277 m
+494.55 293.277 l
+S
+361.866 296.006 m
+483.984 296.006 l
+S
+365.616 298.406 m
+487.734 298.406 l
+S
+366.866 301.042 m
+488.984 301.042 l
+S
+346.866 303.693 m
+468.984 303.693 l
+S
+338.616 306.344 m
+460.734 306.344 l
+S
+330.866 308.494 m
+452.984 308.494 l
+S
+301.575 344.342 m
+423.692 344.342 l
+S
+314.075 346.728 m
+436.192 346.728 l
+S
+318.325 349.378 m
+440.442 349.378 l
+S
+312.075 352.029 m
+434.192 352.029 l
+S
+327.325 357.065 m
+449.442 357.065 l
+S
+327.575 359.716 m
+449.692 359.716 l
+S
+317.825 362.117 m
+439.942 362.117 l
+S
+335.558 367.122 m
+457.675 367.122 l
+S
+313.058 369.507 m
+435.175 369.507 l
+S
+318.808 372.158 m
+440.925 372.158 l
+S
+317.579 404.674 m
+439.696 404.674 l
+S
+322.312 409.179 m
+444.429 409.179 l
+S
+323.812 412.065 m
+445.929 412.065 l
+S
+329.562 414.715 m
+451.679 414.715 l
+S
+329.062 417.116 m
+451.179 417.116 l
+S
+331.812 419.752 m
+453.929 419.752 l
+S
+322.062 422.402 m
+444.179 422.402 l
+S
+328.812 425.053 m
+450.929 425.053 l
+S
+349.812 427.454 m
+471.929 427.454 l
+S
+333.571 429.796 m
+455.688 429.796 l
+S
+334.321 432.182 m
+456.438 432.182 l
+S
+336.321 434.832 m
+458.438 434.832 l
+S
+320.071 437.483 m
+442.188 437.483 l
+S
+316.321 442.519 m
+438.438 442.519 l
+S
+315.571 445.17 m
+437.688 445.17 l
+S
+322.321 447.571 m
+444.438 447.571 l
+S
+330.054 452.576 m
+452.171 452.576 l
+S
+317.554 454.961 m
+439.671 454.961 l
+S
+315.054 457.612 m
+437.171 457.612 l
+S
+318.804 460.012 m
+440.921 460.012 l
+S
+306.054 462.648 m
+428.171 462.648 l
+S
+300.054 465.299 m
+422.171 465.299 l
+S
+291.804 467.95 m
+413.921 467.95 l
+S
+308.054 470.101 m
+430.171 470.101 l
+S
+260.834 543.511 m
+382.951 543.511 l
+S
+246.066 548.016 m
+368.184 548.016 l
+S
+256.066 550.901 m
+378.184 550.901 l
+S
+253.566 553.552 m
+375.684 553.552 l
+S
+230.316 555.952 m
+352.434 555.952 l
+S
+244.566 558.588 m
+366.684 558.588 l
+S
+238.566 561.239 m
+360.684 561.239 l
+S
+230.316 563.89 m
+352.434 563.89 l
+S
+216.566 565.541 m
+338.684 565.541 l
+S
+104.443 572.01 m
+226.575 572.209 l
+S
+98.682 567.48 m
+220.814 567.68 l
+S
+91.688 565.11 m
+213.82 565.31 l
+S
+97.192 561.955 m
+219.324 562.155 l
+S
+73.943 559.517 m
+196.075 559.717 l
+S
+88.199 556.904 m
+210.331 557.103 l
+S
+82.203 554.243 m
+204.335 554.443 l
+S
+73.956 551.578 m
+196.088 551.778 l
+S
+73.707 549.405 m
+195.839 549.605 l
+S
+85.302 539.953 m
+207.434 540.152 l
+S
+79.541 535.423 m
+201.673 535.623 l
+S
+72.547 533.053 m
+194.679 533.253 l
+S
+78.051 529.898 m
+200.183 530.098 l
+S
+54.802 527.46 m
+176.934 527.66 l
+S
+69.058 524.847 m
+191.19 525.046 l
+S
+63.061 522.186 m
+185.194 522.385 l
+S
+54.815 519.521 m
+176.947 519.721 l
+S
+54.566 517.348 m
+176.698 517.547 l
+S
+u
+189.475 196.879 m
+311.592 196.879 l
+S
+176.975 199.265 m
+299.092 199.265 l
+S
+174.475 201.916 m
+296.592 201.916 l
+S
+178.225 204.316 m
+300.342 204.316 l
+S
+165.475 206.952 m
+287.592 206.952 l
+S
+177.475 209.603 m
+299.592 209.603 l
+S
+155.725 212.254 m
+277.842 212.254 l
+S
+167.475 214.404 m
+289.592 214.404 l
+S
+156.908 217.133 m
+279.026 217.133 l
+S
+144.658 219.533 m
+266.776 219.533 l
+S
+161.908 222.169 m
+284.026 222.169 l
+S
+153.908 224.82 m
+276.026 224.82 l
+S
+163.658 226.971 m
+285.776 226.971 l
+S
+152.408 229.121 m
+274.526 229.121 l
+S
+145.925 233.316 m
+268.042 233.316 l
+S
+157.675 235.466 m
+279.792 235.466 l
+S
+147.108 238.195 m
+269.226 238.195 l
+S
+134.858 240.595 m
+256.976 240.595 l
+S
+137.608 243.231 m
+259.726 243.231 l
+S
+144.108 245.882 m
+266.226 245.882 l
+S
+153.858 248.033 m
+275.976 248.033 l
+S
+155.108 231.183 m
+277.226 231.183 l
+S
+103.425 247.816 m
+225.542 247.816 l
+S
+100.175 249.966 m
+222.292 249.966 l
+S
+89.608 252.695 m
+211.726 252.695 l
+S
+77.358 255.095 m
+199.476 255.095 l
+S
+U
+u
+1 g
+0 J
+1 w
+120.001 389.999 m
+170.811 344.713 248.714 349.191 294.001 400.001 c
+339.287 450.811 334.809 528.714 283.999 574.001 c
+233.189 619.287 155.286 614.809 109.999 563.999 c
+64.713 513.189 69.191 435.286 120.001 389.999 c
+f
+202 482 m
+F
+U
+u
+258 302 m
+306.6 267.759 373.759 279.4 408 328 c
+442.241 376.6 430.6 443.759 382 478 c
+333.4 512.241 266.241 500.6 232 452 c
+197.759 403.4 209.4 336.241 258 302 c
+f
+320 390 m
+F
+U
+u
+196 376 m
+252.332 345.072 323.072 365.668 354 422 c
+384.928 478.332 364.332 549.072 308 580 c
+251.668 610.928 180.928 590.332 150 534 c
+119.072 477.668 139.668 406.928 196 376 c
+f
+252 478 m
+F
+U
+u
+106 257 m
+170.064 231.595 242.595 262.936 268 327 c
+293.405 391.064 262.064 463.595 198 489 c
+133.936 514.405 61.405 483.064 36 419 c
+10.595 354.936 41.936 282.405 106 257 c
+f
+152 373 m
+F
+U
+u
+366.001 122 m
+415.706 97.7 475.7 118.296 500 168.001 c
+524.3 217.706 503.704 277.7 453.999 302 c
+404.294 326.3 344.3 305.704 320 255.999 c
+295.7 206.294 316.296 146.3 366.001 122 c
+f
+410 212 m
+F
+U
+u
+227.999 198 m
+267.763 185.85 309.849 208.236 322 247.999 c
+334.15 287.763 311.764 329.849 272.001 342 c
+232.237 354.15 190.151 331.764 178 292.001 c
+165.85 252.237 188.236 210.151 227.999 198 c
+f
+250 270 m
+F
+U
+0 g
+15.75 71.25 m
+24.25 82.75 24.75 84.75 27.75 82.25 c
+30.75 79.75 31.75 81.25 32.75 82.75 c
+33.75 84.25 30.75 86.75 35.75 88.75 c
+40.75 90.75 41.25 91.75 43.25 89.75 c
+45.25 87.75 39.25 89.25 50.25 88.75 c
+61.25 88.25 70.25 81.75 74.25 75.25 c
+78.25 68.75 77.75 67.25 75.25 63.25 c
+72.75 59.25 68.25 56.75 72.25 57.25 c
+76.25 57.75 75.75 60.75 77.75 56.75 c
+79.75 52.75 80.25 51.25 79.25 49.25 c
+78.25 47.25 74.25 46.75 81.25 46.25 c
+88.25 45.75 91.75 37.557 91.75 40.25 c
+15.752 40.248 l
+15.75 71.25 l
+f
+340.75 55.5 m
+F
+u
+u
+3 w
+280.774 44.223 m
+567.893 44.223 l
+S
+280.774 48.728 m
+567.893 48.728 l
+S
+280.774 53.734 m
+567.893 53.734 l
+S
+U
+u
+280.774 58.739 m
+567.893 58.739 l
+S
+280.774 63.245 m
+567.893 63.245 l
+S
+280.774 68.251 m
+567.893 68.251 l
+S
+U
+u
+280.774 73.257 m
+567.893 73.257 l
+S
+280.774 78.263 m
+567.893 78.263 l
+S
+U
+U
+0.8 g
+0.2 w
+243 252 m
+323 235 l
+346 273 l
+368 248 l
+376 247 376 248 V
+377 174 380.5 121 330.5 40 C
+90.5 40 91.5 40 V
+138.5 129 163 162 214 200 C
+236 229 234.527 240.11 238 254 c
+240 262 243 252 y
+b
+0.5 g
+359.5 485 m
+389.267 485 402.5 486.25 415.75 489 c
+429 491.75 435 493.25 439 493.5 c
+443 493.75 490.398 537.797 502.5 562 c
+507 571 514.5 577 517.5 579.5 c
+520.5 582 501.5 591 y
+428 512 428 512.5 v
+428 513 356.5 510 356 509.5 c
+355.5 509 351 488 y
+359 485 359.5 485 v
+b
+0.7 g
+370 496.5 m
+368 480.5 365.5 472.5 364.5 471.5 C
+329.5 476.5 l
+323.5 489.5 l
+370 496.5 l
+b
+0.5 g
+352.75 494 m
+380 493.25 399.626 496.75 407.5 499 c
+418 502 424.586 497.135 432.75 505.5 c
+453 526.25 473.5 544.5 496.5 586.5 C
+473.5 590 473.5 590.5 V
+456 571.5 443 563.5 434 558 c
+425 552.5 416 544 408.5 534.5 C
+399 533 379.5 537.5 364 537.5 c
+348.5 537.5 352.75 494 y
+b
+1 g
+500 583 m
+500.5 577.098 517 573.5 520.5 572 c
+524 570.5 526.353 568.989 526.5 579 c
+526.675 590.992 541 586 539 624 C
+538.5 624 506 628 y
+499.958 583.498 500 583 v
+b
+0 g
+1 J
+3 w
+562 629 m
+343 645 217 644 77 601 C
+52 576 L
+59.5 562 80.132 560.877 87 589 c
+89.513 599.292 87 597 101 601 c
+108.323 603.092 265 654 561 617 C
+562 629 l
+f
+1 G
+0 J
+0.7 w
+305 634 m
+391.5 636.5 415 635 473 632 c
+S
+0.5 w
+213 626.5 m
+153.5 619 125.925 611.699 90.75 602.5 c
+78.654 599.337 82.567 597.884 82.5 592 c
+82.395 582.717 73.75 571 59 572.5 c
+S
+1 g
+0 G
+1 w
+73 595.25 m
+79.25 592.5 76.25 574.75 57.25 580 C
+73 595.25 l
+f
+0.5 g
+0.2 w
+312 574.25 m
+311.25 570.5 310.687 571.687 306.187 569.187 C
+307.687 564.187 311.106 565.66 304.5 561.5 c
+302.594 560.299 305.598 556.561 305.75 555.5 c
+306.038 553.485 304.629 548.098 297 548.5 c
+292.25 548.75 255.5 536 y
+229.5 608.5 l
+224 650 224.5 650 v
+248.101 650 273.345 678.918 298 655.5 c
+324.857 629.99 316.981 613.501 316.75 612.875 c
+313.346 603.644 313.238 604.937 314.75 597.375 c
+316.88 586.725 317.016 588.834 318.625 584.75 C
+320.25 581.875 318.625 580.375 y
+316.689 578.236 313.081 579.809 310.375 579 c
+307.013 577.994 312 574.25 y
+B
+0 g
+0.5 w
+288.5 456 m
+S
+0.2 w
+211 511 m
+194.5 518.5 187 520.5 170.5 500 C
+154.5 498.5 149.5 501 131.5 479.5 C
+151 477.5 140 475 161 460 c
+182 445 190.5 436.5 212 461 C
+224.5 458 229 454.5 238.5 447 C
+238 446.5 237 500.5 y
+211 511 l
+f
+1 g
+207.5 526.5 m
+206 514.5 204 506 236 490.5 C
+242.5 509.5 l
+207.5 526.5 l
+b
+0 g
+1 w
+294.464 627.589 m
+288.571 618.522 284.821 617.313 280 615.5 c
+275.179 613.686 271.429 605.224 277.857 587.089 C
+274.107 586.485 275.179 585.88 275.714 582.858 C
+271.429 599.179 270.357 606.433 259.643 609.455 c
+248.929 612.477 245.714 589.507 247.321 566.537 C
+228.572 554.448 L
+224.639 578.851 235.956 576.38 212.5 600.992 c
+194.17 620.226 195.893 654.791 225.357 658.418 C
+223.214 667.485 233.929 678.97 259.107 677.761 c
+284.286 676.552 281.071 667.485 Y
+302.5 667.485 334.964 665.942 301.429 614.895 C
+306.25 639.679 303.571 643.306 296.607 646.933 C
+299.286 634.239 294.464 627.589 y
+f
+0.7 g
+0.2 w
+207.5 524.5 m
+214.75 519.25 241.5 509 y
+239 504.5 l
+232 503 214.5 508.75 206.75 519 C
+207 522.5 207.5 524.5 y
+b
+1 g
+298 546.5 m
+272.625 574.625 248.5 596 195.5 568.5 C
+196.26 524.417 214.492 504.333 239.5 510.5 C
+298 546.5 l
+b
+0.8 g
+351.5 542 m
+367 540 L
+358.5 509.5 357 489.5 357 482 C
+323.5 482.5 295.5 485.5 284.5 477.5 c
+298.5 468.5 l
+299 457 l
+270.5 451 l
+238.5 483.5 l
+241 513.5 l
+250.5 538 252.5 547.5 282.5 550 C
+306.251 550 334.454 541.702 343.687 542.187 C
+342.576 538.175 346.737 538.055 351.5 542 c
+b
+0 g
+1 w
+333.25 484.75 m
+343.25 458.25 371.5 466 349 418.5 C
+359 348.5 378 357 363 336 C
+358.5 333 359 333 v
+359.5 333 353 328 359 327.5 c
+365 327 371 316.5 373.5 253.5 C
+381 245.5 l
+371 221 371 220.5 V
+360.5 247 358 253 351 261.5 C
+340 238 331.5 220.5 328.5 211.5 C
+301 229.5 265 250 232.5 244.5 C
+247.5 287 246 299.5 275 320.5 C
+270 331.5 268.689 334.634 265.75 336.25 c
+255.75 341.75 261.891 340.771 251 375 c
+247.5 386 249.5 384 255.5 399 C
+252.5 397 253.5 401 253.5 402.5 c
+253.5 404 252.057 400.023 251 402.5 c
+235 440 219.5 489.5 249.5 534 C
+238.5 503.5 242.102 477.13 260 463 c
+269.5 455.5 278.75 453.25 291 457.25 C
+297.5 461 299.549 465.787 282 476.75 C
+292.5 487.5 333.25 484.75 y
+f
+457.25 576.25 m
+454.936 574.233 453.51 595.217 479.25 583 C
+495.651 573.321 495.931 560.263 482.5 560.5 C
+486.25 566 491.682 565.465 478.5 575 c
+463.444 585.891 460.318 578.924 457.25 576.25 c
+f
+1 g
+460.75 581.5 m
+463.387 583.699 467.528 583.937 470.5 583.375 c
+473.752 582.76 473.75 581.75 Y
+461.735 583.841 458.891 579.95 460.75 581.5 c
+f
+0 g
+310.393 647.785 m
+329.089 651.66 328.75 623.692 320.178 607.976 C
+319.107 621.274 316.428 636.386 310.536 635.782 c
+304.643 635.177 310.393 647.785 y
+f
+284.286 663.858 m
+286.964 677.157 280.536 689.246 281.071 689.246 C
+289.107 677.761 288.036 665.672 y
+284.286 663.858 l
+f
+0.2 w
+274.643 683.201 m
+278.929 678.97 280 668.694 279.464 665.672 c
+S
+276.25 686.224 m
+284.393 677.036 283.75 662.045 y
+S
+1 w
+297.679 661.44 m
+312.602 661.44 312.143 677.157 310.536 680.784 C
+308.929 672.321 305.179 666.276 292.857 664.463 C
+297.679 661.44 l
+f
+0.2 w
+295 661.44 m
+298.75 666.276 302.5 675.343 294.464 683.201 c
+S
+300.357 681.992 m
+304.265 669.255 303.814 670.807 292.321 656.604 c
+S
+311.821 649.078 m
+321.464 649.078 330.571 646.66 329.5 627.921 c
+S
+307.536 650.892 m
+316.268 651.33 319.057 653.025 326.821 646.056 c
+330.446 642.802 331.1 637.618 331.107 637.593 c
+S
+304.643 665.067 m
+305.629 663.874 321.031 667.072 321.304 651.569 c
+S
+0.5 w
+311.071 639.679 m
+317.893 638.968 312.696 617.332 v
+S
+1 w
+313.375 612.875 m
+315.455 614.262 313.5 617.375 297.125 615.375 C
+310.375 616.625 311.875 611.875 313.375 612.875 c
+f
+1 g
+308.5 604.875 m
+309.833 600.875 309.125 601.25 307.375 599 C
+302.25 600.625 303.25 599.875 299 602.5 C
+304.25 604.75 308.375 605.25 308.5 604.875 c
+f
+0 g
+307.5 604.437 m
+305.463 602.811 305.481 601.49 307.375 598.937 C
+309.261 601.307 309.489 602.172 308.562 605.062 C
+308.562 604.937 308.191 604.989 307.5 604.437 c
+f
+0.2 w
+305.625 583.75 m
+304.687 582.562 306.5 579.375 308.875 579.75 c
+S
+1 w
+311.125 574.5 m
+310.25 573.898 310 573.437 304.937 569.312 C
+306.229 564.611 308.063 564.014 308.312 564.562 C
+309.775 566.476 307.663 569.565 306.687 569.75 C
+311.812 571.75 311.625 572.5 312 574.25 C
+311.687 574.75 311.176 574.535 311.125 574.5 c
+f
+298.625 603 m
+302 600.437 304.294 599.524 307.812 598.937 c
+308.187 598.875 308.562 598.5 308.687 597.875 c
+S
+297.5 602.25 m
+299.939 602.851 307.687 603.062 311.75 607.812 C
+307.812 606 297.011 602.129 297.5 602.25 c
+f
+213.5 576.125 m
+218.674 549.92 230.862 532.355 245.5 526.5 C
+243.75 514.5 209.75 494.25 195.5 568.5 C
+203.75 572.25 213.347 576.901 213.5 576.125 c
+f
+0.2 w
+343.375 541.75 m
+333.375 534.75 318.25 525.5 312 521.25 c
+S
+351.562 541.937 m
+337.936 530.579 327.2 525.581 313.25 517.75 c
+S
+0.3 w
+312.75 495 m
+291.75 483.5 276.25 476 274.25 466 c
+S
+0.5 w
+229 580.75 m
+235.5 571 241.25 554.75 245.75 528 c
+S
+1 w
+235 581 m
+246 555.75 246.75 537.75 245.75 526 C
+252.125 560.5 243.75 567.75 239.75 581.5 C
+240 581.5 237 581.75 235 581 C
+f
+0.7 g
+0.2 w
+248.625 580.5 m
+253.169 564.605 256.75 553.75 250.25 535.75 C
+257.5 552.75 259.125 558.937 252.875 579.687 C
+251.029 580.149 248.517 580.879 248.625 580.5 c
+b
+0 g
+1 w
+258.25 577.75 m
+262.047 567.879 262.5 552.5 259.25 544.25 C
+267.75 548.25 275 549.75 278.25 549.75 C
+281.75 555.25 282.75 556.75 279.5 565.25 C
+270.06 573.13 257.909 578.635 258.25 577.75 c
+f
+207.5 524.5 m
+F
+207.25 514.75 m
+207.185 514.86 228.75 497.5 238 500.75 C
+236 494.5 l
+225 498 213.924 503.454 207.25 514.75 c
+f
+1 g
+0.2 w
+191 516 m
+175.472 497.418 168.5 492 171.5 453 C
+185 443.5 189 443.5 200 450.5 C
+186.5 469.5 182 491 198.5 515.5 C
+194.5 516 191.339 516.406 191 516 c
+b
+201 515 m
+194 499 187 484 203.5 453 C
+206.5 455 211.5 460.5 212 461 C
+203.5 480.5 193.5 501.5 206 510.5 C
+205 499.5 210.5 490.5 232.5 473.5 C
+232.5 483 231.5 482.5 233 492 C
+221 498 210 505 208 512.5 C
+201 515 l
+b
+0 g
+1 G
+0.5 w
+268 442.5 m
+253.5 402.5 l
+S
+269.5 435.5 m
+258.5 407 258.5 407.5 v
+S
+0.5 G
+0.4 w
+293.5 480.5 m
+297.5 463.5 298.5 460.5 289 445.5 c
+S
+1 G
+1 J
+0.3 w
+349.125 418.125 m
+338.393 403.978 348.387 416.158 341.625 408.875 c
+S
+u
+1 g
+0 G
+0 J
+0.2 w
+336.038 340.015 m
+338.267 329.694 L
+342.937 338.843 L
+340.707 349.164 L
+336.038 340.015 L
+b
+339.487 339.429 m
+B
+U
+u
+328.791 340.569 m
+331.562 330.38 L
+335.743 339.762 L
+332.972 349.952 L
+328.791 340.569 L
+b
+332.267 340.166 m
+B
+U
+u
+321.758 340.67 m
+325.133 330.664 L
+328.746 340.28 L
+325.37 350.286 L
+321.758 340.67 L
+b
+325.252 340.475 m
+B
+U
+u
+314.504 340.97 m
+317.88 330.964 L
+321.492 340.58 L
+318.117 350.586 L
+314.504 340.97 L
+b
+317.998 340.775 m
+B
+U
+u
+u
+307.24 340.468 m
+311.982 331.033 L
+314.214 341.059 L
+309.473 350.494 L
+307.24 340.468 L
+b
+310.727 340.764 m
+B
+U
+u
+300.016 339.751 m
+304.757 330.316 L
+306.99 340.342 L
+302.249 349.777 L
+300.016 339.751 L
+b
+303.503 340.047 m
+B
+U
+U
+u
+u
+292.985 339.2 m
+298.349 330.104 L
+299.903 340.258 L
+294.54 349.353 L
+292.985 339.2 L
+b
+296.444 339.729 m
+B
+U
+u
+285.826 338 m
+291.189 328.904 L
+292.744 339.057 L
+287.38 348.153 L
+285.826 338 L
+b
+289.285 338.529 m
+B
+U
+U
+u
+278.742 336.229 m
+285.413 328.042 L
+285.423 338.314 L
+278.753 346.501 L
+278.742 336.229 L
+b
+282.083 337.272 m
+B
+U
+u
+272.228 332.392 m
+279.743 324.974 L
+278.644 335.186 L
+271.13 342.604 L
+272.228 332.392 L
+b
+275.437 333.789 m
+B
+U
+0 g
+1 G
+1 w
+266.25 335.5 m
+276.25 351.5 284.659 350 343 350 c
+364 350 363 336 y
+S
+271 321 m
+294 332 309 335 362 324 c
+S
+u
+1 g
+0 G
+0.2 w
+350.823 325.912 m
+364.33 322.302 L
+361.658 347.078 L
+348.151 350.689 L
+350.823 325.912 L
+b
+356.24 336.495 m
+B
+U
+0 g
+1 w
+274 347.5 m
+281.5 351.5 280.229 357.581 311 338 c
+316.5 334.5 322.5 338 351 357.5 C
+282 360 l
+274 347.5 l
+f
+1 G
+0.5 w
+269.25 355.75 m
+277.75 353.25 284.25 352.5 288.75 349.75 c
+S
+353.25 358.25 m
+347.25 354 345.5 353.5 339.75 349.5 c
+S
+0.3 w
+355.25 272.75 m
+359.75 281.5 361.25 285 363.25 290.75 c
+S
+0.5 G
+0.5 w
+354 219 m
+339 195 327 176 317 166 c
+S
+323 197 m
+310 150 308 135 235 48 c
+S
+1 w
+241 241.5 m
+232 227.5 215.231 198.443 215 198 c
+192.581 155 178 110 164 71 c
+S
+0 G
+0.2 w
+265.394 600.822 m
+263.576 606.114 262.122 612.994 253.035 607.173 C
+250.126 603.468 249.763 601.704 249.763 596.589 c
+249.763 591.473 254.307 592.179 257.76 587.24 c
+261.213 582.301 266.484 579.302 267.029 588.475 c
+S
+0.3 g
+260.668 605.409 m
+262.486 601.352 261.94 599.941 257.578 597.824 c
+253.216 595.707 257.76 591.473 260.305 592.355 c
+262.849 593.237 263.394 592.532 264.303 591.65 c
+265.212 590.768 266.666 591.826 264.667 594.119 c
+262.667 596.413 259.759 593.943 261.032 597.471 c
+262.304 600.999 260.668 605.409 y
+b
+0 g
+257.578 606.644 m
+254.125 605.056 251.58 604.174 251.58 598.177 c
+251.58 592.179 258.487 590.415 259.214 588.651 c
+S
+u
+1 g
+257.397 584.594 m
+258.601 581.671 262.019 580.25 265.03 581.419 c
+268.041 582.588 269.506 585.905 268.302 588.827 c
+267.097 591.75 263.679 593.172 260.668 592.003 c
+257.657 590.833 256.192 587.516 257.397 584.594 c
+b
+262.849 586.711 m
+B
+U
+u
+0.2 g
+1 w
+258.487 586.358 m
+263.213 582.477 L
+267.211 587.063 L
+262.486 590.944 L
+258.487 586.358 L
+f
+262.849 586.711 m
+F
+U
+0 g
+309.25 579.875 m
+310.75 580.5 313.25 583.125 314.625 581 c
+F
+1 g
+307.964 565.926 m
+307.88 566.015 306.794 566.513 307.22 566.682 c
+307.647 566.851 307.68 566.599 307.935 566.639 C
+307.924 566.13 307.971 566.31 307.964 565.926 c
+f
+510 104 m
+509.564 104.895 511.5 89 495.5 74.5 C
+495.5 68 l
+506 79 518.582 86.358 510 104 c
+f
+0 g
+0.2 w
+403.75 534.25 m
+413.25 533.75 415.75 534.25 417.75 534.75 c
+S
+1 G
+0.3 w
+538.5 629 m
+542 625 547.5 620 y
+S
+548.75 629.25 m
+552.25 625.25 557.75 620.25 y
+S
+0 G
+0.2 w
+518.5 587.5 m
+522.5 586 526 587.5 527 587.5 c
+S
+514 617.5 m
+518 614 518.5 611.5 520 607.5 c
+S
+528.25 613.75 m
+533.25 615.25 532.5 615.5 538.25 614.25 c
+S
+1 g
+538 637.5 m
+537.25 618 533 617.5 531.25 617.5 c
+529.5 617.5 528.235 615.255 528.5 622.5 c
+529.25 643 528.775 643.326 534.25 642.75 c
+539 642.25 539 642.25 540.5 630.75 C
+538 631 l
+538 629 538 631.25 v
+538 633.5 538 637.5 Y
+b
+0.7 g
+507.5 650.75 m
+510 648.5 510.25 645.75 511.75 643.25 c
+513.25 640.75 508.5 638.25 508.5 638 c
+508.5 637.75 507.5 650.75 y
+b
+1 g
+529.25 639.25 m
+528.5 643 527 642.75 524 642.75 c
+521 642.75 519.75 644 519.5 632.25 C
+519.75 638 519.75 641 v
+519.75 644 518.75 644.25 515.25 644.25 c
+511.75 644.25 511.75 646 509.25 641.25 c
+506.75 636.5 505.75 633.25 506 633.25 c
+506.25 633.25 509.75 628.25 Y
+511.5 620.25 512.75 619.75 515.5 619.5 c
+518.25 619.25 520.25 618.25 519.5 623.5 C
+521 618.25 521 617.75 524.75 617 c
+528.5 616.25 528.5 618.25 528.5 622.5 c
+528.5 626.75 529.25 639.25 y
+b
+507.75 636.75 m
+512.687 638.231 515.604 641 515.25 641 C
+517.839 637.469 517.494 629.281 508.75 625.5 C
+508.75 625.25 502 635 502.25 634.75 c
+502.5 634.5 507.75 636.75 y
+b
+493.5 571.5 m
+495.171 563.425 503.634 565.498 503.5 576.25 c
+503.25 596.25 515.75 586.25 509 636.75 c
+508.301 641.977 510 650.75 506.5 651.5 c
+501.514 652.568 500.436 652.26 499.25 644.75 c
+498.5 640 496.5 646.25 496 648.5 c
+495.5 650.75 493.75 651 490.75 650.25 c
+487.75 649.5 488.253 648.665 487.5 645.5 c
+486.194 640.013 486.75 641.75 484.5 645.5 c
+482.39 649.016 481.306 648.011 477.5 647.25 c
+475 646.75 474.784 644.479 475.25 640.75 c
+475.5 638.75 474 642.25 472.5 644.5 c
+471 646.75 469.25 645.5 466.5 645.5 c
+463.75 645.5 463.25 641.003 463.5 635.5 c
+463.511 635.25 463 626.25 y
+449.75 627.25 l
+459.25 618.5 465.606 612.863 468.25 597 c
+468.75 594 468 592.25 470 592.75 C
+459.719 593.497 459.195 585.398 461 586 c
+466.25 587.75 471.75 589.25 476.75 587 c
+481.75 584.75 486.25 584.25 489.5 586.25 C
+490.25 582.75 492 578.75 493.5 571.5 c
+b
+0 g
+486.25 592.5 m
+489 595.25 492.117 593.078 492.25 592.75 c
+494.972 586.028 477 591.75 467.25 593 c
+S
+0.4 w
+470 592.75 m
+474.25 595.75 475 596 481.5 595.75 c
+S
+1 J
+2.5 w
+477.75 630 m
+478.5 620.75 l
+S
+479.25 617.5 m
+480 610.5 l
+S
+480.25 607.75 m
+481 600.25 481 600.5 v
+S
+487.5 631.75 m
+487.75 623.5 l
+S
+487.75 620.75 m
+487.75 612.5 l
+S
+488 609.25 m
+488.25 609.25 487.75 602.5 y
+S
+498 630.75 m
+497.25 623.75 l
+S
+496.75 620.75 m
+495.5 612.5 l
+S
+495.25 609.5 m
+493.75 602 l
+S
+0 J
+0.2 w
+465.5 637.25 m
+464.5 629.75 461.25 628.75 464.75 617 c
+S
+0.5 w
+502 589.25 m
+503.25 585 503.5 583.25 503.5 577 c
+S
+1 g
+1 w
+521.949 86.694 m
+521.637 87.353 523.021 75.657 511.583 64.988 C
+511.583 60.205 l
+519.089 68.299 528.083 73.713 521.949 86.694 c
+f
+553.457 99.673 m
+553.091 100.449 554.713 86.67 541.309 74.1 C
+541.309 68.465 l
+550.105 78.001 560.646 84.379 553.457 99.673 c
+f
+482.74 95.04 m
+482.429 95.699 483.812 84.003 472.375 73.334 C
+472.375 68.551 l
+479.881 76.645 488.875 82.059 482.74 95.04 c
+f
+450.924 87.63 m
+450.69 88.028 451.731 80.968 443.129 74.528 C
+443.129 71.641 l
+448.774 76.527 455.538 79.795 450.924 87.63 c
+f
+0 g
+308 61.5 m
+N
+3 w
+16.002 40.373 m
+568.002 40.127 L
+567.748 716.565 L
+S
+u
+15.815 40.248 m
+567.815 40.002 L
+567.748 716.565 L
+15.998 716.81 L
+15.815 40.248 L
+s
+U
+%%Trailer
+_E end
+showpage
+golfersave restore
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/grayalph.ps b/Master/xemtex/doc/ghostscript/examples/grayalph.ps new file mode 100644 index 00000000000..fffb5f6a2a1 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/grayalph.ps @@ -0,0 +1,65 @@ +%!
+% grayscaled text test, including a trivial user bitmap font
+
+/grayalphsave save def % prevent left over effects
+
+/inch {72 mul} def
+
+/BuildCharDict 10 dict def
+/$ExampleFont 7 dict def
+$ExampleFont begin
+ /FontType 3 def % user defined font.
+ /FontMatrix [1 0 0 1 0 0] def
+ /FontBBox [0 0 1 1] def
+ /Encoding 256 array def
+ 0 1 255 {Encoding exch /.notdef put} for
+ Encoding (a) 0 get /plus put
+ /CharStrings 2 dict def
+ CharStrings /.notdef {} put
+ CharStrings /plus
+ { gsave
+ 0 0 moveto
+ 32 32 true [32 0 0 -32 0 32]
+ {<0007E000 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000
+ 0007E000 0007E000 0007E000 0007E000 0007E000 FFFFFFFF FFFFFFFF FFFFFFFF
+ FFFFFFFF FFFFFFFF FFFFFFFF 0007E000 0007E000 0007E000 0007E000 0007E000
+ 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000 0007E000>
+ } imagemask
+ grestore
+ } put
+ /BuildChar
+ { BuildCharDict begin
+ /char exch def
+ /fontdict exch def
+ /charproc
+ fontdict /Encoding get char get
+ fontdict /CharStrings get
+ exch get def
+ 1 0 0 0 1 1 setcachedevice
+ charproc
+ end
+ } def
+end
+
+/MyFont $ExampleFont definefont pop
+
+ newpath
+ .5 inch 7.5 inch moveto
+ 7.5 inch 0 rlineto
+ 0 1.5 inch rlineto
+ -7.5 inch 0 rlineto
+ closepath
+ 0 setgray
+ fill
+
+ /MyFont findfont 72 scalefont setfont
+ .75 inch 7.75 inch moveto
+ 0 1 6
+ { /n exch def
+ 1 n 6 div sub setgray
+ (a) show
+ } for
+
+showpage
+clear cleardictstack
+grayalphsave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/ridt91.eps b/Master/xemtex/doc/ghostscript/examples/ridt91.eps new file mode 100644 index 00000000000..1de3c14f29c --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/ridt91.eps @@ -0,0 +1,135 @@ +%!PS-Adobe-3.0 EPSF-3.0
+%%BoundingBox: 0 0 380 200
+%%Creator: karl@cs.umb.edu from code by Roger Hersch
+%%CreationDate: 8 March 1991
+%%Title: RIDT logo
+
+% Forget everything we do.
+save
+
+% Make definitions in our own dictionary.
+20 dict begin
+
+% However, this isn't quite a true EPS file, because we use the
+% setscreen operator, which has device- and document-dependent effects.
+% In particular, if the document is being printed in landscape mode, we
+% have to rotate the cell by 90 degrees. The dvips translator sets the
+% variable `isls' to be true in landscape mode, so we test for that.
+%
+/screen_angle
+ /isls where
+ { /isls get { 90 } { 0 } ifelse }
+ { 0 }
+ ifelse
+def
+
+
+% Increasing this number makes the screen finer (it isn't the actual
+% frequency).
+%
+/screen_frequency 10 def
+
+
+% If you change these numbers, change the bounding box comment above.
+% This default size is approximately 134mm by 71mm.
+/logo_width 380 def
+/logo_height 200 def
+
+% Besides changing the size from the outside, you can also change the
+% scale factor defined here. Of course then the bounding box won't be
+% accurate.
+/scalefactor 1 def
+
+% We need a string to hold the gray values.
+/fountainstring 256 string def
+
+% Put values varying from 0 to 255 into the string; these will be values
+% for the image operator.
+0 1 255
+ {
+ fountainstring exch dup
+ 255 div 180 mul cos neg 2 div
+ .5 add 255 mul cvi
+ put
+ }
+bind for
+
+
+% This procedure takes the bounding box of a rectangle, and images
+% /fountainstring into it.
+/fountain
+ {
+ /ury exch def
+ /urx exch def
+ /lly exch def
+ /llx exch def
+ gsave
+ llx lly translate
+
+ % Scale to the size of the rectangle.
+ urx llx sub ury lly sub scale
+
+ % The source image has one row of 256 8-bit values.
+ 1 256 8
+
+ % Map unit square to source.
+ [1 0 0 -256 0 256]
+
+ % Image the string.
+ { fountainstring } image
+ grestore
+ }
+bind def
+
+
+% Draw a line across the bottom for visual anchoring.
+%
+0 0 moveto
+logo_width 0 lineto stroke
+
+ screen_frequency scalefactor div
+ screen_angle
+ { exch pop abs 1 exch sub } bind
+setscreen
+
+scalefactor scalefactor scale
+
+/Palatino-Roman findfont 100 scalefont setfont
+
+% Determine the dimensions of our string.
+/logo_words (RIDT 91) def
+
+0 0 moveto
+logo_words true charpath flattenpath pathbbox
+/word_height exch def
+/word_width exch def
+pop pop % llx and lly are zero.
+newpath
+
+/x_offset logo_width word_width sub 2 div def
+/y_offset 15 def
+
+% Draw the background pattern, which is dark at the top and light at the
+% bottom.
+%
+0 0 logo_width logo_height fountain
+
+% Make the clipping path be `RIDT 91', twice.
+x_offset y_offset moveto
+logo_words true charpath
+x_offset logo_height y_offset word_height add sub moveto
+logo_words true charpath
+clip
+newpath
+
+% Paint the pattern again, this time with light at the top and dark at
+% the bottom.
+%
+logo_width logo_height translate
+180 rotate
+0 0 logo_width logo_height fountain
+
+end
+restore
+
+% showpage
diff --git a/Master/xemtex/doc/ghostscript/examples/snowflak.ps b/Master/xemtex/doc/ghostscript/examples/snowflak.ps new file mode 100644 index 00000000000..8ebdf0adc8a --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/snowflak.ps @@ -0,0 +1,93 @@ +%!
+%% Elizabeth D. Zwicky
+%% zwicky@erg.sri.com
+%% multiflake
+
+/snowflaksave save def % prevent left over effects
+/newflake
+{/seed usertime def
+seed srand
+/strokecolor [rand 99 mod 100 div
+ rand 99 mod 100 div
+ 100 rand 22 mod sub 100 div] def
+/fillcolor [rand 99 mod 100 div
+ 100 rand 22 mod sub 100 div
+ rand 99 mod 100 div] def
+/eofillcolor [rand 99 mod 100 div
+ rand 22 mod 100 div
+ 100 rand 22 mod sub 100 div] def
+
+/colorfill {fillcolor aload pop setrgbcolor fill } def
+/colorstroke {strokecolor aload pop setrgbcolor stroke } def
+/eocolorfill {eofillcolor aload pop setrgbcolor eofill } def
+/arm {0 0 moveto
+ 5 {3 {x y x y x y curveto} repeat} repeat
+ seed srand
+ 0 0 moveto
+ 5 {3 {x neg y x neg y x neg y curveto} repeat} repeat
+ seed srand
+} def
+
+ newpath
+
+0 0 moveto boxsize 0 rlineto 0 boxsize rlineto boxsize neg 0 rlineto
+0 0 lineto
+
+rand 99 mod 100 div
+100 rand 22 mod sub 100 div
+100 rand 22 mod sub 100 div
+ sethsbcolor fill
+seed srand
+boxsize 2 div boxsize 2 div translate
+
+%% If the device you are using can handle complex fills, replace the
+%% next three lines with:
+%%
+6 {arm 60 rotate} repeat
+gsave colorfill grestore gsave eocolorfill grestore colorstroke
+%%
+%% This will be not only faster, but prettier. On a LaserWriter or a
+%% Tektronix Phaser II PS it gives a limitcheck.
+
+%% 6 {arm 60 rotate colorfill} repeat
+%% 6 {arm 60 rotate eocolorfill} repeat
+%% 6 {arm 60 rotate} repeat colorstroke
+} def
+
+1 setlinewidth
+clippath pathbbox /ury exch def /urx exch def /lly exch def /llx exch def
+/minsize 250 def
+/pagewidth urx llx sub def
+/pageheight ury lly sub def
+/inwidth pagewidth minsize div def
+/inheight pageheight minsize div def
+
+/boxsize
+ inwidth inheight gt
+ {pagewidth inwidth truncate div}
+ {pageheight inheight truncate div}
+ ifelse
+def
+
+/inwidth pagewidth boxsize div cvi def
+/inheight pageheight boxsize div cvi def
+
+/x {rand 70 mod abs} def
+/y {rand 120 mod abs} def
+
+llx lly translate
+
+inheight {
+ inwidth {
+ gsave
+ newflake
+ grestore
+ boxsize 0 translate
+ } repeat
+ boxsize inwidth mul neg boxsize translate
+} repeat
+
+
+showpage
+clear cleardictstack
+snowflaksave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/tiger.ps b/Master/xemtex/doc/ghostscript/examples/tiger.ps new file mode 100644 index 00000000000..ea887726051 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/tiger.ps @@ -0,0 +1,2737 @@ +%!PS-Adobe-2.0 EPSF-1.2
+%%Creator: Adobe Illustrator(TM) 1.2d4
+%%For: OpenWindows Version 2
+%%Title: tiger.eps
+%%CreationDate: 4/12/90 3:20 AM
+%%DocumentProcSets: Adobe_Illustrator_1.2d1 0 0
+%%DocumentSuppliedProcSets: Adobe_Illustrator_1.2d1 0 0
+%%BoundingBox: 17 171 567 739
+%%EndComments
+/tigersave save def % prevent residual side effects
+
+%%BeginProcSet:Adobe_Illustrator_1.2d1 0 0
+
+/Adobe_Illustrator_1.2d1 dup 100 dict def load begin
+% definition operators
+/bdef {bind def} bind def
+/ldef {load def} bdef
+/xdef {exch def} bdef
+% graphic state operators
+/_K { 3 index add neg dup 0 lt {pop 0} if 3 1 roll } bdef
+/_k /setcmybcolor where {
+ /setcmybcolor get
+} {
+ { 1 sub 4 1 roll _K _K _K setrgbcolor pop } bind
+} ifelse def
+/g {/_b xdef /p {_b setgray} def} bdef
+/G {/_B xdef /P {_B setgray} def} bdef
+/k {/_b xdef /_y xdef /_m xdef /_c xdef /p {_c _m _y _b _k} def} bdef
+/K {/_B xdef /_Y xdef /_M xdef /_C xdef /P {_C _M _Y _B _k} def} bdef
+/d /setdash ldef
+/_i currentflat def
+/i {dup 0 eq {pop _i} if setflat} bdef
+/j /setlinejoin ldef
+/J /setlinecap ldef
+/M /setmiterlimit ldef
+/w /setlinewidth ldef
+% path construction operators
+/_R {.25 sub round .25 add} bdef
+/_r {transform _R exch _R exch itransform} bdef
+/c {_r curveto} bdef
+/C /c ldef
+/v {currentpoint 6 2 roll _r curveto} bdef
+/V /v ldef
+/y {_r 2 copy curveto} bdef
+/Y /y ldef
+/l {_r lineto} bdef
+/L /l ldef
+/m {_r moveto} bdef
+% path painting operators
+/n /newpath ldef
+/N /n ldef
+/F {p fill} bdef
+/f {closepath F} bdef
+/S {P stroke} bdef
+/s {closepath S} bdef
+/B {gsave F grestore S} bdef
+/b {closepath B} bdef
+end
+%%EndProcSet
+%%EndProlog
+
+%%Page: 1 1
+
+Adobe_Illustrator_1.2d1 begin
+
+.8 setgray
+clippath fill
+-110 -300 translate
+1.1 dup scale
+
+0 g
+0 G
+0 i
+0 J
+0 j
+0.172 w
+10 M
+[]0 d
+0 0 0 0 k
+
+177.696 715.715 m
+177.797 713.821 176.973 713.84 v
+176.149 713.859 159.695 761.934 139.167 759.691 C
+156.95 767.044 177.696 715.715 V
+b
+181.226 718.738 m
+180.677 716.922 179.908 717.221 v
+179.14 717.519 180.023 768.325 159.957 773.199 C
+179.18 774.063 181.226 718.738 V
+b
+208.716 676.41 m
+210.352 675.45 209.882 674.773 v
+209.411 674.096 160.237 686.898 150.782 668.541 C
+154.461 687.428 208.716 676.41 V
+b
+205.907 666.199 m
+207.763 665.803 207.529 665.012 v
+207.296 664.221 156.593 660.879 153.403 640.478 C
+150.945 659.563 205.907 666.199 V
+b
+201.696 671.724 m
+203.474 671.061 203.128 670.313 v
+202.782 669.565 152.134 673.654 146.002 653.936 C
+146.354 673.175 201.696 671.724 V
+b
+190.991 689.928 m
+192.299 688.554 191.66 688.033 v
+191.021 687.512 147.278 713.366 133.131 698.324 C
+141.872 715.467 190.991 689.928 V
+b
+183.446 685.737 m
+184.902 684.52 184.326 683.929 v
+183.75 683.339 137.362 704.078 125.008 687.531 C
+131.753 705.553 183.446 685.737 V
+b
+180.846 681.665 m
+182.454 680.657 181.964 679.994 v
+181.474 679.331 132.692 693.554 122.709 675.478 C
+126.934 694.251 180.846 681.665 V
+b
+191.58 681.051 m
+192.702 679.52 192.001 679.085 v
+191.3 678.65 151.231 709.898 135.273 696.793 C
+146.138 712.674 191.58 681.051 V
+b
+171.8 710 m
+172.4 708.2 171.6 708 v
+170.8 707.8 142.2 749.8 122.999 742.2 C
+138.2 754 171.8 710 V
+b
+172.495 703.021 m
+173.47 701.392 172.731 701.025 v
+171.993 700.657 135.008 735.501 117.899 723.939 C
+130.196 738.739 172.495 703.021 V
+b
+172.38 698.651 m
+173.502 697.12 172.801 696.685 v
+172.1 696.251 132.031 727.498 116.073 714.393 C
+126.938 730.274 172.38 698.651 V
+b
+0 J 1 w
+170.17 696.935 m
+170.673 690.887 171.661 684.318 173.4 681.199 C
+169.8 668.799 178.6 655.599 V
+178.2 648.399 179.8 645.199 V
+183.8 636.799 188.6 635.999 v
+192.484 635.352 201.207 632.283 211.068 630.879 c
+228.2 616.799 225 603.999 V
+224.6 587.599 221 585.999 V
+232.6 597.199 223 580.399 V
+218.6 561.599 l
+244.2 583.199 228.6 564.799 V
+218.6 538.799 l
+238.2 557.199 231 548.799 V
+227.8 539.999 l
+271 567.199 240.2 537.599 V
+248.2 541.199 252.6 538.399 V
+259.4 539.599 258.6 537.999 V
+237.8 527.599 234.2 509.199 V
+242.6 519.199 239.4 508.399 V
+239.8 496.799 l
+243.8 518.399 243.4 480.799 V
+262.6 498.799 251 477.999 V
+251 461.199 l
+266.2 477.599 259.8 464.799 V
+269.8 473.599 265.8 458.399 V
+265 447.999 269.4 459.199 V
+285.4 489.799 279.4 463.599 V
+278.6 444.399 283.4 459.199 V
+283.8 448.799 293 441.599 V
+291.8 492.399 304.6 456.399 V
+308.6 439.999 l
+311.4 449.199 311 454.399 V
+325.8 470.799 319 446.399 V
+334.2 469.199 331 455.999 V
+323.4 439.999 325 435.199 V
+341.8 469.999 343 471.599 V
+341 429.198 351.8 465.199 V
+357.4 453.199 354.6 448.799 V
+362.6 456.799 361.8 459.999 V
+366.4 468.199 369.2 454.599 V
+371 445.199 372.6 448.399 V
+376.6 424.398 377.8 447.199 V
+379.4 460.799 372.2 472.399 V
+373 475.599 370.2 479.599 v
+383.8 457.999 376.6 486.799 V
+387.801 478.799 389.001 478.799 V
+375.4 501.999 384.2 497.199 V
+379 507.599 397.001 495.599 V
+381 511.599 398.601 501.999 V
+406.601 495.599 399.001 505.599 V
+384.6 521.599 406.601 503.599 V
+418.201 487.199 419.001 484.399 V
+409.001 513.599 404.601 516.399 V
+413.001 552.799 454.201 537.199 V
+461.001 519.999 465.401 538.399 V
+478.201 544.799 489.401 517.199 V
+493.401 530.799 492.601 533.599 V
+499.401 532.399 498.601 533.599 V
+511.801 529.199 513.001 529.999 V
+519.801 523.199 520.201 526.799 V
+529.401 523.999 527.401 527.599 V
+536.201 511.999 536.601 508.399 V
+539.001 522.399 l
+541.001 519.599 l
+542.601 527.199 541.801 528.399 v
+541.001 529.599 561.801 521.599 566.601 500.799 C
+568.601 492.399 l
+574.601 507.199 573.001 511.199 V
+578.201 510.399 578.601 505.999 V
+582.601 529.199 577.801 535.199 V
+582.201 535.999 583.401 532.399 V
+583.401 539.599 l
+590.601 538.799 590.601 541.199 V
+595.001 545.199 597.001 540.399 V
+584.601 575.599 603.001 556.399 V
+610.201 545.599 606.601 564.399 v
+603.001 583.199 599.001 584.799 603.801 585.199 C
+604.601 588.799 602.601 590.399 v
+600.601 591.999 603.801 590.399 y
+608.601 586.399 603.401 608.399 V
+609.801 606.799 597.801 635.999 V
+600.601 638.399 596.601 646.799 V
+604.601 642.399 607.401 643.999 V
+607.001 645.599 603.801 649.599 V
+582.201 704.4 602.601 682.399 V
+614.451 668.849 608.051 691.649 V
+598.94 715.659 599.717 719.955 V
+170.17 696.935 l
+b
+0.2 0.55 0.85 0 k
+599.717 719.755 m
+600.345 719.574 602.551 718.45 603.801 716.8 C
+610.601 706 605.401 724.4 V
+596.201 753.2 605.001 742 V
+611.001 734.8 607.801 748.4 v
+603.936 764.827 601.401 771.2 y
+613.001 766.4 586.201 806 V
+595.001 802.4 l
+575.401 842 553.801 847.2 V
+545.801 853.2 l
+584.201 891.2 571.401 928 V
+564.601 933.2 555.001 924 V
+548.601 919.2 542.601 920.8 V
+511.801 919.6 509.801 919.6 v
+507.801 919.6 473.001 956.8 407.401 939.2 C
+402.201 937.2 397.801 938.4 V
+379.4 954.4 330.6 931.6 v
+320.6 929.6 319 929.6 v
+317.4 929.6 314.6 929.6 306.6 923.2 c
+298.6 916.8 298.2 916 296.2 914.4 C
+279.8 903.2 275 902.4 V
+263.4 896 259 886 V
+255.4 884.8 l
+253.8 877.6 253.4 876.4 V
+248.6 872.8 247.8 867.2 V
+239 861.2 239.4 856.8 V
+237.8 851.6 237 846.8 V
+229.8 842 230.6 839.2 V
+223 825.2 224.2 818.4 V
+217.8 818.8 215 816.4 V
+214.2 811.6 212.6 811.2 V
+209.8 810 212.2 806 V
+210.6 803.2 210.2 801.6 V
+211 798.8 206.6 793.2 V
+200.2 774.4 202.2 769.2 V
+202.6 764.4 199.8 762.8 V
+196.2 763.2 204.6 751.2 V
+205.4 750 202.2 747.6 V
+185 744 182.6 727.6 V
+169 712.8 169 707.6 v
+169 705.295 169.271 702.148 169.97 697.535 C
+169.4 689.199 197 688.399 v
+224.6 687.599 599.717 719.755 Y
+b
+184.4 697.4 m
+159.4 736.8 173.8 680.399 Y
+182.6 645.999 312.2 683.599 y
+481.001 714 492.201 718 v
+503.401 722 598.601 715.6 y
+593.001 732.4 L
+528.201 778.8 509.001 755.6 495.401 759.6 c
+481.801 763.6 484.201 754 481.001 753.2 c
+477.801 752.4 438.601 777.2 432.201 776.4 c
+425.801 775.6 400.459 799.351 415.401 767.6 c
+431.401 733.6 357 728.4 340.2 739.6 c
+323.4 750.8 347.4 721.2 Y
+365.8 701.2 331.4 718 y
+297 730.8 273 705.2 269.8 704.4 c
+266.6 703.6 261.8 700.4 261 706.8 c
+260.2 713.2 252.69 729.901 221 703.6 c
+201 686.999 187.2 709 Y
+184.4 697.4 L
+f
+0.09 0.5 0.772 0 k
+433.51 774.654 m
+427.11 773.854 401.743 797.593 416.71 765.854 c
+433.31 730.654 358.31 726.654 341.51 737.854 c
+324.709 749.054 348.71 719.454 Y
+367.11 699.454 332.709 716.254 y
+298.309 729.054 274.309 703.454 271.109 702.654 c
+267.909 701.854 263.109 698.654 262.309 705.054 c
+261.509 711.454 254.13 727.988 222.309 701.854 c
+201.073 684.508 187.582 705.963 Y
+184.382 695.854 L
+159.382 735.654 174.454 677.345 Y
+183.255 642.944 313.509 681.854 y
+482.31 712.254 493.51 716.254 v
+504.71 720.254 599.038 713.927 y
+593.51 731.236 L
+528.71 777.636 510.31 753.854 496.71 757.854 c
+483.11 761.854 485.51 752.254 482.31 751.454 c
+479.11 750.654 439.91 775.454 433.51 774.654 c
+f
+0.081 0.45 0.695 0 k
+434.819 772.909 m
+428.419 772.109 403.685 796.138 418.019 764.109 c
+434.219 727.908 359.619 724.908 342.819 736.108 c
+326.019 747.308 350.019 717.708 Y
+368.419 697.708 334.019 714.508 y
+299.619 727.308 275.618 701.708 272.418 700.908 c
+269.218 700.108 264.418 696.908 263.618 703.308 c
+262.818 709.708 255.57 726.075 223.618 700.108 c
+201.145 682.017 187.964 702.926 Y
+184.364 694.308 L
+160.564 733.308 175.109 674.29 Y
+183.909 639.89 314.819 680.108 y
+483.619 710.508 494.819 714.508 v
+506.019 718.508 599.474 712.254 y
+594.02 730.072 L
+529.219 776.472 511.619 752.109 498.019 756.109 c
+484.419 760.109 486.819 750.509 483.619 749.708 c
+480.419 748.908 441.219 773.709 434.819 772.909 c
+f
+0.072 0.4 0.618 0 k
+436.128 771.163 m
+429.728 770.363 404.999 794.395 419.328 762.363 c
+436.128 724.807 360.394 723.518 344.128 734.363 c
+327.328 745.563 351.328 715.963 Y
+369.728 695.963 335.328 712.763 y
+300.928 725.563 276.928 699.963 273.728 699.163 c
+270.528 698.363 265.728 695.163 264.928 701.563 c
+264.128 707.963 257.011 724.161 224.927 698.363 c
+201.218 679.526 188.345 699.89 Y
+184.345 692.763 L
+162.545 729.563 175.764 671.235 Y
+184.564 636.835 316.128 678.363 y
+484.928 708.763 496.129 712.763 v
+507.329 716.763 599.911 710.581 y
+594.529 728.908 L
+529.729 775.309 512.929 750.363 499.329 754.363 c
+485.728 758.363 488.128 748.763 484.928 747.963 c
+481.728 747.163 442.528 771.963 436.128 771.163 c
+f
+0.063 0.35 0.54 0 k
+437.438 769.417 m
+431.037 768.617 406.814 792.871 420.637 760.617 c
+437.438 721.417 362.237 721.417 345.437 732.617 c
+328.637 743.817 352.637 714.217 Y
+371.037 694.217 336.637 711.017 y
+302.237 723.817 278.237 698.217 275.037 697.417 c
+271.837 696.617 267.037 693.417 266.237 699.817 c
+265.437 706.217 258.452 722.248 226.237 696.617 c
+201.291 677.035 188.727 696.854 Y
+184.327 691.217 L
+164.527 726.018 176.418 668.181 Y
+185.218 633.78 317.437 676.617 y
+486.238 707.017 497.438 711.017 v
+508.638 715.017 600.347 708.908 y
+595.038 727.745 L
+530.238 774.145 514.238 748.617 500.638 752.617 c
+487.038 756.617 489.438 747.017 486.238 746.217 c
+483.038 745.417 443.838 770.217 437.438 769.417 c
+f
+0.054 0.3 0.463 0 k
+438.747 767.672 m
+432.347 766.872 406.383 790.323 421.947 758.872 c
+441.147 720.072 363.546 719.672 346.746 730.872 c
+329.946 742.072 353.946 712.472 Y
+372.346 692.472 337.946 709.272 y
+303.546 722.072 279.546 696.472 276.346 695.672 c
+273.146 694.872 268.346 691.672 267.546 698.072 c
+266.746 704.472 259.892 720.335 227.546 694.872 c
+201.364 674.544 189.109 693.817 Y
+184.309 689.672 L
+166.309 722.872 177.073 665.126 Y
+185.873 630.726 318.746 674.872 y
+487.547 705.272 498.747 709.272 v
+509.947 713.272 600.783 707.236 y
+595.547 726.581 L
+530.747 772.981 515.547 746.872 501.947 750.872 c
+488.347 754.872 490.747 745.272 487.547 744.472 c
+484.347 743.672 445.147 768.472 438.747 767.672 c
+f
+0.045 0.25 0.386 0 k
+440.056 765.927 m
+433.655 765.127 407.313 788.387 423.255 757.127 c
+443.656 717.126 364.855 717.926 348.055 729.126 c
+331.255 740.326 355.255 710.726 Y
+373.655 690.726 339.255 707.526 y
+304.855 720.326 280.855 694.726 277.655 693.926 c
+274.455 693.126 269.655 689.926 268.855 696.326 c
+268.055 702.726 261.332 718.422 228.855 693.126 c
+201.436 672.053 189.491 690.781 Y
+184.291 688.126 L
+168.291 718.326 177.727 662.071 Y
+186.527 627.671 320.055 673.126 y
+488.856 703.526 500.056 707.526 v
+511.256 711.526 601.22 705.563 y
+596.056 725.417 L
+531.256 771.817 516.856 745.126 503.256 749.126 c
+489.656 753.127 492.056 743.526 488.856 742.726 c
+485.656 741.926 446.456 766.727 440.056 765.927 c
+f
+0.036 0.2 0.309 0 k
+441.365 764.181 m
+434.965 763.381 407.523 786.056 424.565 755.381 c
+446.565 715.781 366.164 716.181 349.364 727.381 c
+332.564 738.581 356.564 708.981 Y
+374.964 688.981 340.564 705.781 y
+306.164 718.581 282.164 692.981 278.964 692.181 c
+275.764 691.381 270.964 688.181 270.164 694.581 c
+269.364 700.981 262.773 716.508 230.164 691.381 c
+201.509 669.562 189.873 687.744 Y
+184.273 686.581 L
+169.872 714.981 178.382 659.017 Y
+187.182 624.616 321.364 671.381 y
+490.165 701.781 501.365 705.781 v
+512.565 709.781 601.656 703.89 y
+596.565 724.254 L
+531.765 770.654 518.165 743.381 504.565 747.381 c
+490.965 751.381 493.365 741.781 490.165 740.981 c
+486.965 740.181 447.765 764.981 441.365 764.181 c
+f
+0.027 0.15 0.231 0 k
+442.674 762.435 m
+436.274 761.635 408.832 784.311 425.874 753.635 c
+447.874 714.035 367.474 714.435 350.674 725.635 c
+333.874 736.835 357.874 707.235 Y
+376.274 687.235 341.874 704.035 y
+307.473 716.835 283.473 691.235 280.273 690.435 c
+277.073 689.635 272.273 686.435 271.473 692.835 c
+270.673 699.235 264.214 714.595 231.473 689.635 c
+201.582 667.071 190.255 684.707 Y
+184.255 685.035 L
+170.654 711.436 179.037 655.962 Y
+187.837 621.562 322.673 669.635 y
+491.474 700.035 502.674 704.035 v
+513.874 708.035 602.093 702.217 y
+597.075 723.09 L
+532.274 769.49 519.474 741.635 505.874 745.635 c
+492.274 749.635 494.674 740.035 491.474 739.235 c
+488.274 738.435 449.074 763.235 442.674 762.435 c
+f
+0.018 0.1 0.154 0 k
+443.983 760.69 m
+437.583 759.89 410.529 782.777 427.183 751.89 c
+449.183 711.09 368.783 712.69 351.983 723.89 c
+335.183 735.09 359.183 705.49 Y
+377.583 685.49 343.183 702.29 y
+308.783 715.09 284.783 689.49 281.583 688.69 c
+278.382 687.89 273.582 684.69 272.782 691.09 c
+271.982 697.49 265.654 712.682 232.782 687.89 c
+201.655 664.58 190.637 681.671 Y
+184.236 683.49 L
+171.236 707.49 179.691 652.907 Y
+188.491 618.507 323.983 667.89 y
+492.783 698.29 503.983 702.29 v
+515.183 706.29 602.529 700.544 y
+597.583 721.926 L
+532.783 768.327 520.783 739.89 507.183 743.89 c
+493.583 747.89 495.983 738.29 492.783 737.49 c
+489.583 736.69 450.383 761.49 443.983 760.69 c
+f
+0.009 0.05 0.077 0 k
+445.292 758.945 m
+438.892 758.145 412.917 781.589 428.492 750.145 c
+449.692 707.344 370.092 710.944 353.292 722.144 c
+336.492 733.344 360.492 703.744 Y
+378.892 683.744 344.492 700.544 y
+310.092 713.344 286.092 687.744 282.892 686.944 c
+279.692 686.144 274.892 682.944 274.092 689.344 c
+273.292 695.744 267.095 710.768 234.092 686.144 c
+201.727 662.089 191.018 678.635 Y
+184.218 681.944 L
+171.418 705.144 180.346 649.853 Y
+189.146 615.453 325.292 666.144 y
+494.093 696.544 505.293 700.544 v
+516.493 704.544 602.965 698.872 y
+598.093 720.763 L
+533.292 767.163 522.093 738.144 508.493 742.144 c
+494.893 746.145 497.293 736.544 494.093 735.744 c
+490.892 734.944 451.692 759.745 445.292 758.945 c
+f
+1 g
+184.2 680.399 m
+171.4 702.4 181 646.799 Y
+189.8 612.399 326.6 664.399 y
+495.401 694.8 506.601 698.8 v
+517.801 702.8 603.401 697.2 y
+598.601 719.6 L
+533.801 766 523.401 736.4 509.801 740.4 c
+496.201 744.4 498.601 734.8 495.401 734 c
+492.201 733.2 453.001 758 446.601 757.2 c
+440.201 756.4 414.981 780.207 429.801 748.4 c
+452.028 700.693 369.041 710.773 354.6 720.4 c
+337.8 731.6 361.8 702 Y
+380.2 681.999 345.8 698.8 y
+311.4 711.6 287.4 685.999 284.2 685.199 c
+281 684.399 276.2 681.199 275.4 687.599 c
+274.6 694 268.535 708.856 235.4 684.399 c
+201.8 659.599 191.4 675.599 Y
+184.2 680.399 L
+f
+0 g
+225.8 650.399 m
+218.6 638.799 239.4 625.599 V
+240.8 624.199 222.8 628.399 V
+216.6 630.399 215 640.799 V
+210.2 645.199 205.4 650.799 v
+200.6 656.399 225.8 650.399 y
+f
+0.8 g
+365.8 698 m
+383.498 671.179 382.9 666.399 v
+381.6 655.999 381.4 646.399 384.6 642.399 c
+387.801 638.399 396.601 605.199 y
+396.201 603.999 408.601 641.999 V
+420.201 657.999 400.201 676.399 V
+365 705.2 365.8 698 v
+f
+0 g
+1 J 0.1 w
+245.8 623.599 m
+257 616.399 242.6 585.199 V
+249 587.599 l
+248.2 576.399 245 573.999 V
+252.2 577.199 l
+257 569.199 253 564.399 V
+269.8 556.399 269 549.999 V
+275.4 557.999 271.4 564.399 v
+267.4 570.799 260.2 566.799 261 585.199 C
+252.2 581.999 l
+257.8 590.799 257.8 597.199 V
+249.8 594.799 l
+265.269 621.377 254.6 622.799 v
+248.6 623.599 245.8 623.599 Y
+f
+0.8 g
+278.2 606.799 m
+281 611.199 278.2 610.399 v
+275.4 609.599 244.2 594.799 238.2 585.199 C
+272.6 609.599 278.2 606.799 V
+f
+288.6 598.799 m
+291.4 603.199 288.6 602.399 v
+285.8 601.599 254.6 586.799 248.6 577.199 C
+283 601.599 288.6 598.799 V
+f
+301.8 613.999 m
+304.6 618.399 301.8 617.599 v
+299 616.799 267.8 601.999 261.8 592.399 C
+296.2 616.799 301.8 613.999 V
+f
+278.6 570.399 m
+278.6 576.399 275.8 575.599 v
+273 574.799 237 557.199 231 547.599 C
+273 573.199 278.6 570.399 V
+f
+279.8 581.199 m
+281 585.999 278.2 585.199 V
+276.2 585.199 249.8 573.599 243.8 563.999 C
+273.4 585.599 279.8 581.199 V
+f
+265.4 533.599 m
+255.4 525.999 l
+265.8 533.599 269.4 532.399 V
+262.6 521.199 261.8 515.999 V
+272.2 528.799 277.8 528.399 V
+285.4 527.999 285.4 517.199 V
+291 527.599 294.2 527.199 V
+295.4 520.799 294.2 513.999 V
+298.2 521.599 302.2 519.999 V
+308.6 521.999 307.8 510.399 V
+307.8 499.999 307 497.199 V
+312.6 523.599 315 523.999 V
+323 525.199 327.8 516.399 V
+323.8 523.999 328.6 521.999 V
+339.4 520.399 342.6 513.599 V
+335.8 525.599 341.4 522.399 V
+348.2 522.399 349.4 515.999 V
+357.8 494.799 359.8 493.199 V
+352.2 514.799 353.8 514.799 V
+351.8 526.799 357 511.999 V
+353.8 525.999 359.4 525.199 v
+365 524.399 369.4 514.399 377.8 516.799 C
+387.401 511.199 389.401 580.399 V
+265.4 533.599 L
+f
+0 g
+0 J 1 w
+270.2 626.399 m
+285 632.399 325 626.399 V
+332.2 625.999 339 634.799 v
+345.8 643.599 372.6 650.799 379 648.799 C
+388.601 642.399 l
+389.401 641.199 l
+401.801 630.799 402.201 623.199 v
+402.601 615.599 387.801 567.599 378.2 551.599 c
+368.6 535.599 359 523.199 339.8 525.599 C
+319 529.599 293.4 525.599 v
+264.2 527.199 261.4 535.199 v
+258.6 543.199 272.6 558.399 y
+277 566.799 275.8 581.199 v
+274.6 595.599 275 623.599 270.2 626.399 c
+f
+0.1 0.6 0.45 0 k
+292.2 624.399 m
+300.6 605.999 271 540.799 y
+269 539.199 283.66 533.154 293.8 535.599 c
+304.746 538.237 345 533.999 Y
+368.6 549.599 381.4 593.999 y
+391.801 617.999 374.2 621.199 v
+356.6 624.399 292.2 624.399 y
+f
+0.1 0.6 0.45 0.2 k
+290.169 593.503 m
+293.495 606.293 295.079 618.094 292.2 624.399 c
+354.6 617.999 365.8 638.799 v
+370.041 646.674 384.801 615.999 384.4 606.399 c
+321.4 591.999 306.6 603.199 V
+290.169 593.503 L
+f
+0.1 0.6 0.45 0.25 k
+294.6 577.199 m
+296.6 569.999 294.2 565.999 V
+292.6 565.199 291.4 564.799 V
+292.6 561.199 298.6 559.599 V
+300.6 555.199 303 554.799 v
+305.4 554.399 310.2 548.799 314.2 549.999 c
+318.2 551.199 329.4 555.199 y
+335 558.399 343.8 554.799 V
+346.175 555.601 346.6 559.599 v
+347.1 564.299 350.2 567.999 352.2 569.999 c
+354.2 571.999 363.8 584.799 362.6 585.199 c
+361.4 585.599 294.6 577.199 Y
+f
+0 0.55 0.5 0 k
+290.2 625.599 m
+287.4 603.199 290.6 594.799 v
+293.8 586.399 293 584.399 292.2 580.399 c
+291.4 576.399 295.8 566.399 301.4 560.399 C
+313.4 558.799 l
+328.6 562.399 337.8 559.599 V
+346.794 558.256 350.2 573.199 V
+355 579.599 362.2 582.399 v
+369.4 585.199 376.6 626.799 372.6 634.799 c
+368.6 642.799 354.2 647.199 338.2 631.599 c
+322.2 615.999 320.2 632.799 290.2 625.599 C
+b
+0 0 0.2 0 k
+0.5 w
+291.8 550.799 m
+291 552.799 286.6 553.199 V
+264.2 556.799 255.8 569.199 V
+249 574.799 253.4 563.199 V
+263.8 542.799 270.6 539.999 V
+287 535.999 291.8 550.799 V
+b
+0 0.55 0.5 0.2 k
+1 w
+371.742 614.771 m
+372.401 622.677 374.354 631.291 372.6 634.799 c
+366.154 647.693 349.181 642.305 338.2 631.599 c
+322.2 615.999 320.2 632.799 290.2 625.599 C
+288.455 611.636 289.295 601.624 v
+326.6 613.199 327.4 607.599 V
+329 610.799 338.2 610.799 v
+347.4 610.799 370.142 611.971 371.742 614.771 C
+f
+0 g
+0 0.55 0.5 0.35 K
+2 w
+328.6 624.799 m
+333.4 619.999 329.8 610.399 V
+315.4 594.399 317.4 580.399 v
+S
+0 0 0.2 0 k
+0 G
+0.5 w
+280.6 539.999 m
+276.2 552.799 285 545.999 V
+289.8 543.999 288.6 542.399 v
+287.4 540.799 281.8 536.799 280.6 539.999 C
+b
+285.64 538.799 m
+282.12 549.039 289.16 543.599 V
+293.581 541.151 292.04 540.719 v
+287.48 539.439 292.04 536.879 285.64 538.799 C
+b
+290.44 538.799 m
+286.92 549.039 293.96 543.599 V
+298.335 541.289 296.84 540.719 v
+293.48 539.439 296.84 536.879 290.44 538.799 C
+b
+297.04 538.599 m
+293.52 548.839 300.56 543.399 V
+304.943 541.067 303.441 540.519 v
+300.48 539.439 303.441 536.679 297.04 538.599 C
+b
+303.52 538.679 m
+300 548.919 307.041 543.479 V
+310.881 541.879 309.921 540.599 v
+308.961 539.319 309.921 536.759 303.52 538.679 C
+b
+310.2 537.999 m
+305.4 550.399 314.6 543.999 V
+319.4 541.999 318.2 540.399 v
+317 538.799 318.2 535.599 310.2 537.999 C
+b
+0 g
+0.1 0.6 0.45 0.25 K
+2 w
+281.8 555.199 m
+295 557.999 301 554.799 V
+307 553.599 308.2 553.999 v
+309.4 554.399 312.6 554.799 y
+S
+315.8 546.399 m
+327.8 559.999 339.8 555.599 v
+346.816 553.026 345.8 556.399 346.6 559.199 c
+347.4 561.999 347.6 566.199 352.6 569.199 c
+S
+0 0 0.2 0 k
+0 G
+0.5 w
+333 562.399 m
+329 573.199 326.2 560.399 v
+323.4 547.599 320.2 543.999 318.6 541.199 C
+318.6 535.999 327 536.399 V
+337.8 536.799 338.2 539.599 v
+338.6 542.399 337 553.999 333 562.399 C
+b
+0 g
+0.1 0.6 0.45 0.25 K
+2 w
+347 555.199 m
+350.6 557.599 353 556.399 v
+S
+353.5 571.599 m
+356.4 576.499 361.2 577.299 v
+S
+0.7 g
+0 G
+1 w
+274.2 534.799 m
+292.2 531.599 296.6 533.199 V
+305.4 533.199 297 531.199 V
+284.2 531.199 276.2 532.399 V
+264.6 537.999 274.2 534.799 V
+f
+0 0 0.2 0 k
+0.5 w
+288.2 627.999 m
+305.8 627.999 307.8 627.199 V
+315 596.399 311.4 588.799 V
+310.2 585.999 307.4 591.599 V
+289 624.399 285.8 626.399 v
+282.6 628.399 287 627.999 288.2 627.999 C
+b
+211.1 630.699 m
+220 628.999 232.6 626.399 V
+237.4 603.999 240.6 599.199 v
+243.8 594.399 240.2 594.399 236.6 597.199 c
+233 599.999 218.2 613.999 216.2 618.399 c
+214.2 622.799 211.1 630.699 y
+b
+232.961 626.182 m
+238.761 624.634 239.77 622.419 v
+240.778 620.205 238.568 616.908 y
+237.568 613.603 236.366 615.765 v
+235.164 617.928 232.292 625.588 232.961 626.182 c
+b
+0 g
+233 626.399 m
+236.6 621.199 240.2 621.199 v
+243.8 621.199 244.182 621.612 247 620.999 c
+251.6 619.999 251.2 621.999 257.8 620.799 c
+260.44 620.319 263 621.199 265.8 619.999 c
+268.6 618.799 271.8 619.599 273 621.599 c
+274.2 623.599 279 627.799 Y
+266.2 625.999 263.4 625.199 V
+241 623.999 233 626.399 V
+f
+0 0 0.2 0 k
+277.6 626.199 m
+271.15 622.699 270.75 620.299 v
+270.35 617.899 276 614.199 y
+278.75 609.599 279.35 611.999 v
+279.95 614.399 278.4 625.799 277.6 626.199 c
+b
+240.115 620.735 m
+247.122 609.547 247.339 620.758 V
+247.896 622.016 246.136 622.038 v
+240.061 622.114 241.582 626.216 240.115 620.735 C
+b
+247.293 620.486 m
+255.214 609.299 254.578 620.579 V
+254.585 620.911 252.832 621.064 v
+248.085 621.478 248.43 625.996 247.293 620.486 C
+b
+254.506 620.478 m
+262.466 609.85 261.797 619.516 V
+261.916 620.749 260.262 621.05 v
+256.37 621.756 256.159 625.005 254.506 620.478 C
+b
+261.382 620.398 m
+269.282 608.837 269.63 618.618 V
+271.274 619.996 269.528 620.218 v
+263.71 620.958 264.508 625.412 261.382 620.398 C
+b
+0 0 0.2 0.1 k
+225.208 616.868 m
+217.55 618.399 l
+214.95 623.399 212.85 629.549 y
+219.2 628.549 231.7 625.749 V
+232.576 622.431 234.048 616.636 v
+225.208 616.868 l
+f
+290.276 621.53 m
+288.61 624.036 287.293 625.794 286.643 626.2 c
+283.63 628.083 287.773 627.706 288.902 627.706 C
+305.473 627.706 307.356 626.953 V
+307.88 624.711 308.564 621.32 V
+298.476 623.33 290.276 621.53 V
+f
+0.2 0.55 0.85 0 k
+1 w
+343.88 759.679 m
+371.601 755.719 397.121 791.359 398.881 801.04 c
+400.641 810.72 390.521 822.6 Y
+391.841 825.68 387.001 839.76 381.721 849 c
+376.441 858.24 360.54 857.266 343 858.24 c
+327.16 859.12 308.68 835.8 307.36 834.04 c
+306.04 832.28 312.2 793.999 313.52 788.279 c
+314.84 782.559 312.2 756.159 y
+346.44 765.259 316.16 763.639 343.88 759.679 c
+f
+0.08 0.44 0.68 0 k
+308.088 833.392 m
+306.792 831.664 312.84 794.079 314.136 788.463 c
+315.432 782.847 312.84 756.927 y
+345.512 765.807 316.728 764.271 343.944 760.383 c
+371.161 756.495 396.217 791.487 397.945 800.992 c
+399.673 810.496 389.737 822.16 Y
+391.033 825.184 386.281 839.008 381.097 848.08 c
+375.913 857.152 360.302 856.195 343.08 857.152 c
+327.528 858.016 309.384 835.12 308.088 833.392 c
+f
+0.06 0.33 0.51 0 k
+308.816 832.744 m
+307.544 831.048 313.48 794.159 314.752 788.647 c
+316.024 783.135 313.48 757.695 y
+344.884 766.855 317.296 764.903 344.008 761.087 c
+370.721 757.271 395.313 791.615 397.009 800.944 c
+398.705 810.272 388.953 821.72 Y
+390.225 824.688 385.561 838.256 380.473 847.16 c
+375.385 856.064 360.063 855.125 343.16 856.064 c
+327.896 856.912 310.088 834.44 308.816 832.744 c
+f
+0.04 0.22 0.34 0 k
+309.544 832.096 m
+308.296 830.432 314.12 794.239 315.368 788.831 c
+316.616 783.423 314.12 758.463 y
+343.556 767.503 317.864 765.535 344.072 761.791 c
+370.281 758.047 394.409 791.743 396.073 800.895 c
+397.737 810.048 388.169 821.28 Y
+389.417 824.192 384.841 837.504 379.849 846.24 c
+374.857 854.976 359.824 854.055 343.24 854.976 c
+328.264 855.808 310.792 833.76 309.544 832.096 c
+f
+0.02 0.11 0.17 0 k
+310.272 831.448 m
+309.048 829.816 314.76 794.319 315.984 789.015 c
+317.208 783.711 314.76 759.231 y
+342.628 768.151 318.432 766.167 344.136 762.495 c
+369.841 758.823 393.505 791.871 395.137 800.848 c
+396.769 809.824 387.385 820.84 Y
+388.609 823.696 384.121 836.752 379.225 845.32 c
+374.329 853.888 359.585 852.985 343.32 853.888 c
+328.632 854.704 311.496 833.08 310.272 831.448 c
+f
+1 g
+344.2 763.2 m
+369.4 759.6 392.601 792 394.201 800.8 c
+395.801 809.6 386.601 820.4 Y
+387.801 823.2 383.4 836 378.6 844.4 c
+373.8 852.8 359.346 851.914 343.4 852.8 c
+329 853.6 312.2 832.4 311 830.8 c
+309.8 829.2 315.4 794.4 316.6 789.2 c
+317.8 784 315.4 760 y
+340.9 768.6 319 766.8 344.2 763.2 c
+f
+0.8 g
+390.601 797.2 m
+362.8 789.6 351.2 791.2 V
+335.4 797.8 326.6 776 V
+323 768.8 321 766.8 v
+319 764.8 390.601 797.2 Y
+f
+0 g
+394.401 799.4 m
+365.4 787.2 355.4 787.6 v
+339 792.2 330.6 777.6 V
+322.2 768.4 319 766.8 V
+318.6 765.2 325 769.2 V
+335.4 764 l
+350.2 754.4 359.8 770.4 V
+363.8 781.6 363.8 783.6 v
+363.8 785.6 385 791.2 386.601 791.6 c
+388.201 792 394.801 796.2 394.401 799.4 C
+f
+0.4 0.2 0.8 0 k
+347 763.486 m
+340.128 763.486 331.755 767.351 331.755 773.6 c
+331.755 779.848 340.128 786.113 347 786.113 c
+353.874 786.113 359.446 781.048 359.446 774.8 c
+359.446 768.551 353.874 763.486 347 763.486 c
+f
+0.4 0.2 0.8 0.2 k
+343.377 780.17 m
+338.531 779.448 333.442 777.945 333.514 778.161 c
+335.054 782.78 341.415 786.113 347 786.113 c
+351.296 786.113 355.084 784.135 357.32 781.125 c
+352.004 781.455 343.377 780.17 v
+f
+1 g
+355.4 780.4 m
+351 783.6 351 781.4 V
+354.6 777 355.4 780.4 V
+f
+0 g
+345.4 772.274 m
+342.901 772.274 340.875 774.3 340.875 776.8 c
+340.875 779.299 342.901 781.325 345.4 781.325 c
+347.9 781.325 349.926 779.299 349.926 776.8 c
+349.926 774.3 347.9 772.274 345.4 772.274 c
+f
+0.2 0.55 0.85 0 k
+241.4 785.6 m
+238.2 806.8 240.6 811.2 V
+251.4 821.2 251 824.8 V
+250.6 842.8 249.4 843.6 v
+248.2 844.4 240.6 850.4 234.6 844 C
+224.2 826 225 819.6 V
+225 817.6 l
+217.4 818 215.8 816 V
+214.6 810.8 213.4 810.4 V
+210.6 808 212.6 805.2 V
+210.6 802.8 211 798.8 V
+218.6 794.8 L
+220.6 780.4 231.4 775.2 v
+236.236 772.871 239.4 779.6 241.4 785.6 c
+f
+1 g
+240.4 787.44 m
+237.52 806.52 239.68 810.48 V
+249.4 819.48 249.04 822.72 V
+248.68 838.92 247.6 839.64 v
+246.52 840.36 239.68 845.76 234.28 840 C
+224.92 823.8 225.64 818.04 V
+225.64 816.24 l
+218.8 816.6 217.36 814.8 V
+216.28 810.12 215.2 809.76 V
+212.68 807.6 214.48 805.08 V
+212.68 802.92 213.04 799.32 V
+219.88 795.72 L
+221.68 782.76 231.4 778.08 v
+235.752 775.985 238.6 782.04 240.4 787.44 c
+f
+0.075 0.412 0.637 0 k
+248.95 842.61 m
+247.86 843.47 240.37 849.24 234.52 843 C
+224.38 825.45 225.16 819.21 V
+225.16 817.26 l
+217.75 817.65 216.19 815.7 V
+215.02 810.63 213.85 810.24 V
+211.12 807.9 213.07 805.17 V
+211.12 802.83 211.51 798.93 V
+218.92 795.03 L
+220.87 780.99 231.4 775.92 v
+236.114 773.65 239.2 780.21 241.15 786.06 c
+238.03 806.73 240.37 811.02 V
+250.9 820.77 250.51 824.28 V
+250.12 841.83 248.95 842.61 V
+f
+0.05 0.275 0.425 0 k
+248.5 841.62 m
+247.52 842.54 240.14 848.08 234.44 842 C
+224.56 824.9 225.32 818.82 V
+225.32 816.92 l
+218.1 817.3 216.58 815.4 V
+215.44 810.46 214.3 810.08 V
+211.64 807.8 213.54 805.14 V
+211.64 802.86 212.02 799.06 V
+219.24 795.26 L
+221.14 781.58 231.4 776.64 v
+235.994 774.428 239 780.82 240.9 786.52 c
+237.86 806.66 240.14 810.84 V
+250.4 820.34 250.02 823.76 V
+249.64 840.86 248.5 841.62 V
+f
+0.025 0.137 0.212 0 k
+248.05 840.63 m
+247.18 841.61 239.91 846.92 234.36 841 C
+224.74 824.35 225.48 818.43 V
+225.48 816.58 l
+218.45 816.95 216.97 815.1 V
+215.86 810.29 214.75 809.92 V
+212.16 807.7 214.01 805.11 V
+212.16 802.89 212.53 799.19 V
+219.56 795.49 L
+221.41 782.17 231.4 777.36 v
+235.873 775.206 238.8 781.43 240.65 786.98 c
+237.69 806.59 239.91 810.66 V
+249.9 819.91 249.53 823.24 V
+249.16 839.89 248.05 840.63 V
+f
+1 g
+240.4 787.54 m
+237.52 806.52 239.68 810.48 V
+249.4 819.48 249.04 822.72 V
+248.68 838.92 247.6 839.64 V
+246.84 840.68 239.68 845.76 234.28 840 C
+224.92 823.8 225.64 818.04 V
+225.64 816.24 l
+218.8 816.6 217.36 814.8 V
+216.28 810.12 215.2 809.76 V
+212.68 807.6 214.48 805.08 V
+212.68 802.92 213.04 799.32 V
+219.88 795.72 L
+221.68 782.76 231.4 778.08 v
+235.752 775.985 238.6 782.14 240.4 787.54 c
+f
+0.8 g
+237.3 793.8 m
+215.7 804 214.8 804.8 V
+223.9 796.6 224.7 796.6 v
+225.5 796.6 237.3 793.8 Y
+f
+0 g
+220.2 800 m
+238.6 796.4 238.6 792 v
+238.6 789.088 238.357 775.669 233 777.2 c
+224.6 779.6 228.2 794 220.2 800 c
+f
+0.4 0.2 0.8 0 k
+228.6 796.2 m
+237.578 794.726 238.6 792 v
+239.2 790.4 239.863 782.092 234.4 781 c
+229.848 780.089 227.618 790.31 228.6 796.2 c
+f
+0 g
+314.595 753.651 m
+314.098 755.393 315.409 755.262 317.2 755.8 c
+319.2 756.4 331.4 760.2 332.2 762.8 c
+333 765.4 346.2 761 Y
+348 760.2 352.4 757.6 Y
+357.2 756.4 363.8 756 Y
+366.2 755 369.6 752.2 Y
+384.2 742 396.601 749.2 Y
+416.601 755.8 410.601 773 Y
+407.601 782 410.801 785.4 Y
+411.001 789.2 418.201 782.8 Y
+420.801 778.6 421.601 773.6 Y
+429.601 762.4 426.201 780.2 Y
+426.401 781.2 423.601 784.8 423.601 786 c
+423.601 787.2 421.801 790.6 Y
+418.801 794 421.201 801 Y
+423.001 814.8 420.801 813 Y
+419.601 814.8 410.401 804.8 Y
+408.201 801.4 402.201 799.8 Y
+399.401 798 396.001 799.4 Y
+393.401 799.8 387.801 792.8 Y
+390.601 793 393.001 788.6 395.401 788.4 c
+397.801 788.2 399.601 790.8 401.201 791.4 c
+402.801 792 405.601 786.2 Y
+406.001 783.6 400.401 778.8 Y
+400.001 774.2 398.401 775.8 Y
+395.401 776.4 394.201 772.6 393.201 768 c
+392.201 763.4 388.001 763 y
+386.401 755.6 385.2 758.6 Y
+385 764.2 379 758.4 Y
+377.8 756.4 373.2 758.6 Y
+366.4 760.6 368.8 762.6 Y
+370.6 764.8 381.8 762.6 Y
+384 764.2 376 768.2 Y
+375.4 770 376.4 774.4 Y
+377.6 777.6 384.4 783.2 Y
+393.801 784.4 391.001 786 Y
+384.801 791.2 379 783.6 Y
+376.8 777.4 359.4 762.4 Y
+354.6 759 357.2 765.8 353.2 762.4 c
+349.2 759 328.6 768 y
+317.038 769.193 314.306 753.451 310.777 756.571 c
+316.195 748.051 314.595 753.651 v
+f
+509.401 920 m
+483.801 912 481.001 893.2 V
+478.601 870.4 499.001 852.8 V
+499.401 846.4 501.401 843.2 v
+499.801 838.4 518.601 846 V
+545.801 854.4 l
+552.201 856.8 557.401 865.6 v
+562.601 874.4 577.801 893.2 574.201 918.4 C
+575.401 929.6 569.401 930 V
+561.001 931.6 553.801 924 V
+547.001 920.8 544.601 921.2 V
+509.401 920 L
+f
+564.022 920.99 m
+566.122 929.92 561.282 925.08 V
+554.242 919.36 546.761 919.36 V
+532.241 917.16 527.841 903.96 V
+523.881 877.12 531.801 871.4 V
+536.641 863.92 543.681 870.52 v
+550.722 877.12 566.222 907.35 564.022 920.99 C
+f
+0.2 g
+563.648 920.632 m
+565.738 929.376 560.986 924.624 V
+554.074 919.008 546.729 919.008 V
+532.473 916.848 528.153 903.888 V
+524.265 877.536 532.041 871.92 V
+536.793 864.576 543.705 871.056 v
+550.618 877.536 565.808 907.24 563.648 920.632 C
+f
+0.4 g
+563.274 920.274 m
+565.354 928.832 560.69 924.168 V
+553.906 918.656 546.697 918.656 V
+532.705 916.536 528.465 903.816 V
+524.649 877.952 532.281 872.44 V
+536.945 865.232 543.729 871.592 v
+550.514 877.952 565.394 907.13 563.274 920.274 C
+f
+0.6 g
+562.9 919.916 m
+564.97 928.288 560.394 923.712 V
+553.738 918.304 546.665 918.304 V
+532.937 916.224 528.777 903.744 V
+525.033 878.368 532.521 872.96 V
+537.097 865.888 543.753 872.128 v
+550.41 878.368 564.98 907.02 562.9 919.916 C
+f
+0.8 g
+562.526 919.558 m
+564.586 927.744 560.098 923.256 V
+553.569 917.952 546.633 917.952 V
+533.169 915.912 529.089 903.672 V
+525.417 878.784 532.761 873.48 V
+537.249 866.544 543.777 872.664 v
+550.305 878.784 564.566 906.91 562.526 919.558 C
+f
+1 g
+562.151 919.2 m
+564.201 927.2 559.801 922.8 V
+553.401 917.6 546.601 917.6 V
+533.401 915.6 529.401 903.6 V
+525.801 879.2 533.001 874 V
+537.401 867.2 543.801 873.2 v
+550.201 879.2 564.151 906.8 562.151 919.2 C
+f
+0.1 0.55 0.85 0.3 k
+350.6 716 m
+330.2 735.2 322.2 736 V
+287.8 740 273 722 V
+290.6 742.4 318.2 736.8 V
+296.6 741.2 284.2 738 V
+267.4 738 257.8 724 V
+255 719.2 l
+259 734 277.4 740 V
+300.2 744.8 311 740 V
+289.4 746.8 279.4 744.8 V
+249 747.2 236.2 720.8 V
+240.2 735.2 255 742.4 V
+268.6 751.2 289 748.4 V
+303.4 745.2 308.6 742.8 v
+313.8 740.4 312.6 743.2 304.2 748 C
+298.6 758 284.6 757.6 V
+241.8 754 231.4 742 V
+245 753.2 255.4 756 V
+277.8 764 286.2 763.2 V
+311 762.2 318.6 766.2 V
+307.4 761.2 310.6 758 v
+313.8 754.8 320.6 747.2 320.6 746 c
+320.6 744.8 344.8 722.7 348.4 718.3 C
+350.6 716 l
+f
+0.8 g
+1 J 0.1 w
+489 522 m
+473.5 558.5 461 568 V
+487 552 490.5 534 V
+490.5 524 489 522 V
+f
+536 514.5 m
+509.5 569.5 491 593.5 V
+534.5 556 539.5 529.5 V
+540 524 l
+537 526.5 l
+536.5 517.5 536 514.5 V
+f
+592.5 563 m
+530 622.5 528.5 625 V
+589 559 592 551.5 V
+590 560.5 592.5 563 V
+f
+404 519.5 m
+423.5 571.5 442.5 549 V
+457.5 539 457 536 V
+453 542.5 435 542 V
+416 545 404 519.5 V
+f
+594.5 647 m
+549.5 675.5 542 677 v
+530.193 679.361 591.5 648 596.5 637.5 C
+598.5 640 594.5 647 V
+f
+0 g
+0 J 1 w
+443.801 540.399 m
+464.201 542.399 471.001 549.199 V
+475.401 545.599 l
+493.001 583.999 l
+496.601 578.799 l
+511.001 593.599 510.201 601.599 v
+509.401 609.599 523.001 595.599 y
+522.201 607.199 529.401 600.399 V
+527.001 615.999 535.401 607.999 V
+524.864 638.156 547.401 612.399 v
+553.001 605.999 548.601 612.799 y
+522.601 660.799 544.201 646.399 v
+546.201 669.199 545.001 673.599 v
+543.801 677.999 541.801 700.4 537.001 705.6 c
+532.201 710.8 537.401 712.4 543.001 707.2 C
+531.801 731.2 545.001 719.2 V
+541.401 734.4 537.001 737.2 V
+531.401 754.4 546.601 743.6 V
+542.201 756 539.001 759.2 V
+527.401 786.8 534.601 782 V
+539.001 778.4 l
+532.201 792.4 538.601 788 v
+545.001 783.6 545.001 784 y
+523.801 817.2 544.201 799.6 V
+536.042 813.518 532.601 820.4 V
+513.801 840.8 528.201 834.4 V
+533.001 832.8 l
+524.201 842.8 516.201 844.4 v
+508.201 846 518.601 852.4 525.001 850.4 c
+531.401 848.4 547.001 840.8 y
+559.801 822 563.801 821.6 V
+543.801 829.2 549.801 821.2 V
+564.201 807.2 557.001 807.6 V
+551.001 800.4 555.801 791.6 V
+537.342 809.991 552.201 784.4 v
+559.001 768 l
+534.601 792.8 545.801 770.8 V
+563.001 747.2 565.001 746.8 v
+567.001 746.4 571.401 737.6 y
+567.001 739.6 l
+572.201 730.8 l
+561.001 742.8 567.001 729.6 V
+572.601 715.2 l
+552.201 737.2 565.801 707.6 V
+549.401 712.8 558.201 695.6 V
+556.601 679.599 557.001 674.399 v
+557.401 669.199 558.601 640.799 554.201 632.799 c
+549.801 624.799 560.201 605.599 562.201 601.599 c
+564.201 597.599 567.801 586.799 559.001 595.999 c
+550.201 605.199 554.601 599.599 556.601 590.799 c
+558.601 581.999 564.601 566.399 563.801 560.799 C
+562.601 559.599 559.401 563.199 V
+544.601 585.999 546.201 571.599 V
+545.001 563.599 541.801 554.799 V
+538.601 543.999 538.601 552.799 V
+535.401 569.599 532.601 561.999 v
+529.801 554.399 526.201 548.399 523.401 545.999 c
+520.601 543.599 515.401 566.399 514.201 555.999 C
+502.201 568.399 497.401 551.999 V
+485.801 535.599 l
+485.401 547.999 484.201 541.999 V
+454.201 535.999 443.801 540.399 V
+f
+409.401 897.2 m
+397.801 905.2 393.801 904.8 v
+389.801 904.4 421.401 913.6 462.601 886 C
+467.401 883.2 471.001 883.6 V
+474.201 881.2 471.401 877.6 V
+462.601 868 473.801 856.8 V
+492.201 850 486.601 858.8 V
+497.401 854.8 499.801 850.8 v
+502.201 846.8 501.001 850.8 y
+494.601 858 488.601 863.2 V
+483.401 865.2 480.601 873.6 v
+477.801 882 475.401 892 479.801 895.2 C
+475.801 890.8 476.601 894.8 v
+477.401 898.8 481.001 902.4 482.601 902.8 c
+484.201 903.2 500.601 919 507.401 919.4 C
+498.201 918 495.201 919 v
+492.201 920 465.601 931.4 459.601 932.6 C
+442.801 939.2 454.801 937.2 V
+490.601 933.4 508.801 920.2 V
+501.601 928.6 483.201 935.6 V
+461.001 948.2 425.801 943.2 V
+408.001 940 400.201 938.2 V
+397.601 938.8 397.001 939.2 v
+396.401 939.6 384.6 948.6 357 941.6 C
+340 937 331.4 932.2 V
+316.2 931 312.6 927.8 V
+294 913.2 292 912.4 v
+290 911.6 278.6 904 277.8 903.6 C
+302.4 910.2 304.8 912.6 v
+307.2 915 324.6 917.6 327 916.2 c
+329.4 914.8 337.8 915.4 328.2 914.8 C
+403.801 900 404.601 898 v
+405.401 896 409.401 897.2 y
+f
+0.2 0.55 0.85 0 k
+480.801 906.4 m
+470.601 913.8 468.601 913.8 v
+466.601 913.8 454.201 924 450.001 923.6 c
+445.801 923.2 433.601 933.2 406.201 925 C
+405.601 927 409.201 927.8 V
+415.601 930 416.001 930.6 V
+436.201 934.8 443.401 931.2 V
+452.601 928.6 458.801 922.4 V
+470.001 919.2 473.201 920.2 V
+482.001 918 482.401 916.2 V
+488.201 913.2 486.401 910.6 V
+486.801 909 480.801 906.4 V
+f
+468.33 908.509 m
+469.137 907.877 470.156 907.779 470.761 906.97 c
+470.995 906.656 470.706 906.33 470.391 906.233 c
+469.348 905.916 468.292 906.486 467.15 905.898 c
+466.748 905.691 466.106 905.873 465.553 906.022 c
+463.921 906.463 462.092 906.488 460.401 905.8 C
+458.416 906.929 456.056 906.345 453.975 907.346 c
+453.917 907.373 453.695 907.027 453.621 907.054 c
+450.575 908.199 446.832 907.916 444.401 910.2 C
+441.973 910.612 439.616 911.074 437.188 911.754 c
+435.37 912.263 433.961 913.252 432.341 914.084 c
+430.964 914.792 429.507 915.314 427.973 915.686 c
+426.11 916.138 424.279 916.026 422.386 916.546 c
+422.293 916.571 422.101 916.227 422.019 916.254 c
+421.695 916.362 421.405 916.945 421.234 916.892 c
+419.553 916.37 418.065 917.342 416.401 917 C
+415.223 918.224 413.495 917.979 411.949 918.421 c
+408.985 919.269 405.831 917.999 402.801 919 C
+406.914 920.842 411.601 919.61 415.663 921.679 c
+417.991 922.865 420.653 921.763 423.223 922.523 c
+423.71 922.667 424.401 922.869 424.801 922.2 C
+424.935 922.335 425.117 922.574 425.175 922.546 c
+427.625 921.389 429.94 920.115 432.422 919.049 c
+432.763 918.903 433.295 919.135 433.547 918.933 c
+435.067 917.717 437.01 917.82 438.401 916.6 C
+440.099 917.102 441.892 916.722 443.621 917.346 c
+443.698 917.373 443.932 917.032 443.965 917.054 c
+445.095 917.802 446.25 917.531 447.142 917.227 c
+447.48 917.112 448.143 916.865 448.448 916.791 c
+449.574 916.515 450.43 916.035 451.609 915.852 c
+451.723 915.834 451.908 916.174 451.98 916.146 c
+453.103 915.708 454.145 915.764 454.801 914.6 C
+454.936 914.735 455.101 914.973 455.183 914.946 c
+456.21 914.608 456.859 913.853 457.96 913.612 c
+458.445 913.506 459.057 912.88 459.633 912.704 c
+462.025 911.973 463.868 910.444 466.062 909.549 c
+466.821 909.239 467.697 909.005 468.33 908.509 c
+f
+391.696 922.739 m
+389.178 924.464 386.81 925.57 384.368 927.356 c
+384.187 927.489 383.827 927.319 383.625 927.441 c
+382.618 928.05 381.73 928.631 380.748 929.327 c
+380.209 929.709 379.388 929.698 378.88 929.956 c
+376.336 931.248 373.707 931.806 371.2 933 C
+371.882 933.638 373.004 933.394 373.6 934.2 C
+373.795 933.92 374.033 933.636 374.386 933.827 c
+376.064 934.731 377.914 934.884 379.59 934.794 c
+381.294 934.702 383.014 934.397 384.789 934.125 c
+385.096 934.078 385.295 933.555 385.618 933.458 c
+387.846 932.795 390.235 933.32 392.354 932.482 c
+393.945 931.853 395.515 931.03 396.754 929.755 c
+397.006 929.495 396.681 929.194 396.401 929 C
+396.789 929.109 397.062 928.903 397.173 928.59 c
+397.257 928.351 397.257 928.049 397.173 927.81 c
+397.061 927.498 396.782 927.397 396.408 927.346 c
+395.001 927.156 396.773 928.536 396.073 928.088 c
+394.8 927.274 395.546 925.868 394.801 924.6 C
+394.521 924.794 394.291 925.012 394.401 925.4 C
+394.635 924.878 394.033 924.588 393.865 924.272 c
+393.48 923.547 392.581 922.132 391.696 922.739 c
+f
+359.198 915.391 m
+356.044 916.185 352.994 916.07 349.978 917.346 c
+349.911 917.374 349.688 917.027 349.624 917.054 c
+348.258 917.648 347.34 918.614 346.264 919.66 c
+345.351 920.548 343.693 920.161 342.419 920.648 c
+342.095 920.772 341.892 921.284 341.591 921.323 c
+340.372 921.48 339.445 922.429 338.4 923 C
+340.736 923.795 343.147 923.764 345.609 924.148 c
+345.722 924.166 345.867 923.845 346 923.845 c
+346.136 923.845 346.266 924.066 346.4 924.2 C
+346.595 923.92 346.897 923.594 347.154 923.848 c
+347.702 924.388 348.258 924.198 348.798 924.158 c
+348.942 924.148 349.067 923.845 349.2 923.845 c
+349.336 923.845 349.467 924.156 349.6 924.156 c
+349.736 924.155 349.867 923.845 350 923.845 c
+350.136 923.845 350.266 924.066 350.4 924.2 C
+351.092 923.418 351.977 923.972 352.799 923.793 c
+353.837 923.566 354.104 922.418 355.178 922.12 c
+359.893 920.816 364.03 918.671 368.393 916.584 c
+368.7 916.437 368.91 916.189 368.8 915.8 C
+369.067 915.8 369.38 915.888 369.57 915.756 c
+370.628 915.024 371.669 914.476 372.366 913.378 c
+372.582 913.039 372.253 912.632 372.02 912.684 c
+367.591 913.679 363.585 914.287 359.198 915.391 c
+f
+345.338 871.179 m
+343.746 872.398 343.162 874.429 342.034 876.221 c
+341.82 876.561 342.094 876.875 342.411 876.964 c
+342.971 877.123 343.514 876.645 343.923 876.443 c
+345.668 875.581 347.203 874.339 349.2 874.2 C
+351.19 871.966 355.45 871.581 355.457 868.2 c
+355.458 867.341 354.03 868.259 353.6 867.4 C
+351.149 868.403 348.76 868.3 346.38 869.767 c
+345.763 870.148 346.093 870.601 345.338 871.179 c
+f
+317.8 923.756 m
+317.935 923.755 324.966 923.522 324.949 923.408 c
+324.904 923.099 317.174 922.05 316.81 922.22 c
+316.646 922.296 309.134 919.866 309 920 C
+309.268 920.135 317.534 923.756 317.8 923.756 c
+f
+0 g
+333.2 914 m
+318.4 912.2 314 911 v
+309.6 909.8 291 902.2 288 900.2 C
+274.6 894.8 257.6 874.8 V
+265.2 878.2 267.4 881 V
+281 893.6 280.8 891 V
+293 899.6 292.4 897.4 V
+316.8 908.6 314.8 905.4 V
+336.4 910 335.4 908 V
+354.2 903.6 351.4 903.4 V
+345.6 902.2 352 898.6 V
+348.6 894.2 343.2 898.2 v
+337.8 902.2 340.8 900 335.8 899 C
+333.2 898.2 328.6 902.2 V
+323 906.8 314.2 903.2 V
+283.6 890.6 281.6 890 V
+278 887.2 275.6 883.6 V
+269.8 879.2 266.8 877.8 V
+254 866.2 252.8 864.8 V
+249.4 859.6 248.6 859.2 V
+255 863 257 865 V
+271 875 276.4 875.8 V
+280.8 878.8 281.6 880.2 V
+296 889.4 300.2 889.4 V
+309.4 884.2 311.8 891.2 V
+317.6 893 323.2 891.8 V
+326.4 894.4 325.6 896.6 V
+327.2 898.4 328.2 894.6 V
+331.6 891 336.4 893 V
+340.4 893.2 338.4 890.8 V
+334 887 322.2 886.8 V
+309.8 886.2 293.4 878.6 V
+263.6 868.2 254.4 857.8 V
+248 849 242.6 847.8 V
+236.8 847 230.8 839.6 V
+240.6 845.4 249.6 845.4 V
+253.6 847.8 249.8 844.2 V
+246.2 836.6 247.8 831.2 V
+247.2 826 246.4 824.4 V
+238.6 811.6 238.6 809.2 v
+238.6 806.8 239.8 797 240.2 796.4 c
+240.6 795.8 239.2 798 243 795.6 c
+246.8 793.2 249.6 791.6 250.4 788.8 c
+251.2 786 248.4 794.2 248.2 796 c
+248 797.8 243.8 805 244.6 807.4 C
+245.6 806.4 246.4 805 V
+245.8 805.6 246.4 809.2 V
+247.2 814.4 248.6 817.6 v
+250 820.8 252 824.6 252.4 825.4 c
+252.8 826.2 252.8 832 254.2 829.4 C
+257.6 826.8 l
+254.8 829.4 257 831.6 V
+256 837.2 257.8 839.8 V
+264.8 848.2 266.4 849.2 v
+268 850.2 266.6 849.8 y
+272.6 854 266.8 852.4 V
+262.8 850.8 259.8 850.8 V
+252.2 848.8 256.2 853 v
+260.2 857.2 270.2 862.6 274 862.4 C
+274.8 860.8 l
+286 863.2 l
+284.8 862.4 l
+284.6 862.6 288.8 863 v
+293 863.4 298.8 862 300.2 863.8 c
+301.6 865.6 305 866.6 304.6 865.2 c
+304.2 863.8 304 861.8 y
+309 867.6 308.4 865.4 v
+307.8 863.2 299.6 858 298.2 851.8 C
+308.6 860 l
+312.2 863 l
+315.8 860.8 316 862.4 v
+316.2 864 320.8 869.8 322 869.6 c
+323.2 869.4 325.2 872.2 325 869.6 c
+324.8 867 332.4 861.6 y
+335.6 863.4 337 862 v
+338.4 860.6 342.6 881.8 y
+367.6 892.4 l
+411.201 895.8 l
+394.201 902.6 l
+333.2 914 l
+f
+0.2 0.55 0.85 0.5 K
+1 J 2 w
+351.4 715 m
+336.4 731.8 328 734.4 V
+314.6 741.2 290 733.4 v
+S
+324.8 735.8 m
+299.6 743.8 284.2 739.6 V
+265.8 737.6 257.4 723.8 v
+S
+321.2 737 m
+304.2 744.2 289.4 746.4 V
+272.8 749 256.2 741.8 V
+244 735.8 238.6 725.6 v
+S
+322.2 736.6 m
+306.8 747.6 305.8 749 V
+298.8 760 285.8 760.4 V
+264.4 759.6 247.2 751.6 v
+S
+0 G
+0 J 1 w
+320.895 745.593 m
+322.437 744.13 349.4 715.2 Y
+384.6 678.599 356.6 712.8 Y
+349 717.6 339.8 736.4 Y
+338.6 739.2 353.8 729.2 Y
+357.8 728.4 371.4 709.2 Y
+364.6 711.6 369.4 704.4 Y
+372.2 702.4 392.601 686.799 Y
+396.201 682.799 400.201 681.199 Y
+414.201 686.399 407.801 673.199 Y
+410.201 666.399 415.801 677.999 Y
+427.001 694.8 410.601 692.399 Y
+380.6 689.599 373.8 705.6 Y
+371.4 708 380.2 705.6 Y
+388.601 703.6 373 718 Y
+375.4 718 384.6 711.2 Y
+395.001 702 397.001 704 Y
+415.001 712.8 425.401 705.2 Y
+427.401 703.6 421.801 696.8 423.401 691.599 c
+425.001 686.399 429.801 673.999 Y
+427.401 672.399 427.801 661.599 Y
+444.601 638.399 435.001 640.399 Y
+419.401 640.799 434.201 633.199 Y
+437.401 631.199 446.201 623.999 Y
+443.401 625.199 441.801 619.999 Y
+446.601 615.999 443.801 611.199 Y
+437.801 609.999 436.601 605.999 Y
+443.401 597.999 433.401 597.599 Y
+437.001 593.199 432.201 581.199 Y
+427.401 581.199 421.001 575.599 Y
+423.401 570.799 413.001 565.199 Y
+404.601 563.599 407.401 556.799 Y
+399.401 550.799 397.001 534.799 Y
+396.201 524.399 393.801 521.199 399.001 523.199 c
+404.201 525.199 403.401 537.599 Y
+398.601 553.199 441.401 569.199 Y
+445.401 570.799 446.201 575.999 Y
+448.201 575.599 457.001 567.999 Y
+464.601 556.799 465.001 565.999 Y
+466.201 569.599 464.601 575.599 Y
+470.601 597.199 456.601 603.599 Y
+446.601 637.199 460.601 628.799 Y
+463.401 623.199 474.201 617.999 y
+477.801 620.399 L
+476.201 625.199 484.601 631.199 Y
+487.401 624.799 493.401 632.799 Y
+497.001 657.199 509.401 642.799 Y
+513.401 641.599 514.601 648.399 Y
+518.201 658.799 514.601 672.399 Y
+518.201 672.799 527.801 666.799 Y
+530.601 670.399 521.401 687.199 525.401 684.799 c
+529.401 682.399 533.801 680.799 Y
+534.601 682.799 524.601 695.199 Y
+520.201 698 515.001 718.4 Y
+522.201 714.8 512.201 730 Y
+512.201 733.2 518.201 744.4 Y
+517.401 751.2 518.201 750.8 Y
+521.001 749.6 529.001 748 522.201 754.4 c
+515.401 760.8 523.001 765.6 Y
+527.401 768.4 513.801 768 Y
+508.601 772.4 509.001 776.4 Y
+517.001 774.4 502.601 788.8 500.201 792.4 c
+497.801 796 507.401 801.2 Y
+520.601 804.8 509.001 808 Y
+489.401 807.6 500.201 818.4 Y
+506.201 818 504.601 820.4 Y
+499.401 821.6 489.801 828 Y
+485.801 831.6 489.401 830.8 Y
+506.201 829.6 477.401 840.8 Y
+485.401 840.8 467.401 851.2 Y
+465.401 852.8 462.201 860.4 Y
+456.201 865.6 451.401 872.4 Y
+451.001 876.8 446.201 881.6 Y
+434.601 895.2 429.001 894.8 Y
+414.201 898.4 409.001 897.6 Y
+356.2 893.2 l
+329.8 880.4 337.6 859.4 Y
+344 851 353.2 854.8 Y
+357.8 861 369.4 858.8 Y
+389.801 855.6 387.201 859.2 Y
+384.801 863.8 368.6 870 368.4 870.6 c
+368.2 871.2 359.4 874.6 Y
+356.4 875.8 352 885 Y
+348.8 888.4 364.6 882.6 Y
+363.4 881.6 370.8 877.6 Y
+388.201 878.6 398.801 867.8 Y
+409.601 851.2 409.801 859.4 Y
+412.601 868.8 400.801 890 Y
+401.201 892 409.401 885.4 Y
+410.801 887.4 411.601 881.6 Y
+411.801 879.2 415.601 871.2 Y
+418.401 858.2 422.001 865.6 Y
+426.601 856.2 L
+428.001 853.6 422.001 846 Y
+421.801 843.2 422.601 843.4 417.001 835.8 c
+411.401 828.2 414.801 823.8 Y
+413.401 817.2 422.201 817.6 Y
+424.801 815.4 428.201 815.4 Y
+430.001 813.4 432.401 814 Y
+434.001 817.8 440.201 815.8 Y
+441.601 818.2 449.801 818.6 Y
+450.801 821.2 451.201 822.8 454.601 823.4 c
+458.001 824 433.401 867 Y
+439.801 867.8 431.601 880.2 Y
+429.401 886.8 440.801 872.2 443.001 870.8 c
+445.201 869.4 446.201 867.2 444.601 867.4 c
+443.001 867.6 441.201 865.4 442.601 865.2 c
+444.001 865 457.001 850 460.401 839.8 c
+463.801 829.6 469.801 825.6 476.001 819.6 c
+482.201 813.6 481.401 789.4 Y
+481.001 780.6 487.001 770 Y
+489.001 766.2 484.801 748 Y
+482.801 745.8 484.201 745 Y
+485.201 743.8 492.001 730.6 Y
+490.201 730.8 493.801 727.2 Y
+499.001 721.2 492.601 724.2 Y
+486.601 725.8 493.601 716 Y
+494.801 714.2 485.801 718.8 Y
+476.601 719.4 488.201 712.2 Y
+496.801 705 485.401 709.4 Y
+480.801 711.2 484.001 704.4 Y
+487.201 702.8 504.401 695.8 Y
+504.801 691.999 501.801 686.999 Y
+502.201 682.999 500.001 679.599 Y
+498.801 671.399 498.201 670.599 Y
+494.001 670.399 486.601 656.599 Y
+484.801 653.999 474.601 641.999 Y
+472.601 634.999 454.601 642.199 Y
+448.001 638.799 450.001 642.199 Y
+449.601 644.399 454.401 650.399 Y
+461.401 652.999 458.801 663.799 Y
+462.801 665.199 451.601 667.999 451.801 669.199 c
+452.001 670.399 457.801 671.799 Y
+465.801 673.799 461.401 676.199 Y
+460.801 680.199 463.801 685.799 Y
+475.401 686.599 463.801 702.8 Y
+453.001 710.4 452.001 716.2 Y
+464.601 724.4 456.401 736.8 456.601 740.4 c
+456.801 744 458.001 765.6 Y
+456.001 771.8 453.001 785.4 Y
+455.201 790.6 462.601 803.2 Y
+465.401 807.4 474.201 812.2 472.001 815.2 c
+469.801 818.2 462.001 816.4 Y
+454.201 817.8 454.801 812.6 Y
+453.201 811.6 452.401 806.6 Y
+451.68 798.667 442.801 792.4 Y
+431.601 786.2 440.801 782.2 Y
+446.801 775.6 437.001 775.4 Y
+426.001 777.2 434.201 767 Y
+445.001 754.2 442.001 751.4 Y
+431.801 750.4 444.401 741.2 y
+443.601 743.2 443.801 741.4 v
+444.001 739.6 447.001 735.4 447.801 733.4 c
+448.601 731.4 444.601 731.2 Y
+445.201 721.6 429.801 725.8 y
+429.801 725.8 428.201 725.6 v
+426.601 725.4 415.401 726.2 409.601 728.4 c
+403.801 730.6 397.001 730.6 y
+393.001 728.8 385.4 729 v
+377.8 729.2 369.8 726.4 Y
+365.4 726.8 374 731.2 374.2 731 c
+374.4 730.8 380 736.4 372 735.8 c
+350.203 734.165 339.4 744.4 Y
+337.4 745.8 334.8 748.6 Y
+324.8 750.6 336.2 736.2 Y
+337.4 734.8 336 733.8 Y
+335.2 735.4 327.4 740.8 Y
+324.589 741.773 323.226 743.107 320.895 745.593 C
+f
+0.2 0.55 0.85 0.5 k
+1 J 2 w
+297 757.2 m
+308.6 751.6 311.2 748.8 v
+313.8 746 327.8 734.6 y
+322.4 736.6 319.8 738.4 v
+317.2 740.2 306.4 748.4 y
+302.6 754.4 297 757.2 v
+f
+0.4 0.2 0.8 0 k
+0 J 1 w
+238.991 788.397 m
+239.328 788.545 238.804 791.257 238.6 791.8 c
+237.578 794.526 228.6 796 y
+228.373 794.635 228.318 793.039 228.424 791.401 c
+233.292 785.882 238.991 788.397 v
+f
+0.4 0.2 0.8 0.2 k
+238.991 788.597 m
+238.542 788.439 238.976 791.331 238.8 791.8 c
+237.778 794.526 228.6 796.1 y
+228.373 794.735 228.318 793.139 228.424 791.501 c
+232.692 786.382 238.991 788.597 v
+f
+0 g
+234.6 788.454 m
+233.975 788.454 233.469 789.594 233.469 791 c
+233.469 792.405 233.975 793.545 234.6 793.545 c
+235.225 793.545 235.732 792.405 235.732 791 c
+235.732 789.594 235.225 788.454 234.6 788.454 c
+f
+234.6 791 m
+F
+189 690.399 m
+183.4 680.399 208.2 686.399 V
+222.2 687.599 224.6 689.999 V
+225.8 689.199 234.166 686.266 237 685.599 c
+243.8 683.999 252.2 694 y
+256.8 704.5 259.6 704.5 v
+262.4 704.5 259.2 702.9 y
+252.6 692.799 253 691.199 V
+247.8 671.199 231.8 670.399 V
+215.65 669.449 217 663.599 V
+225.8 665.999 228.2 663.599 V
+239 663.999 231 657.599 V
+224.2 645.999 l
+224.34 642.081 214.2 645.599 v
+204.4 648.999 194.1 661.899 y
+178.15 676.449 189 690.399 V
+f
+0.1 0.4 0.4 0 k
+187.8 686.399 m
+185.8 676.799 222.6 687.199 V
+227 687.199 229.4 686.399 v
+231.8 685.599 243.8 682.799 245.8 683.999 C
+238.6 670.399 227 671.999 V
+213.8 670.399 214.2 665.599 V
+218.2 658.399 223 655.999 V
+225.8 653.599 225.4 650.399 v
+225 647.199 222.2 645.599 220.2 644.799 c
+218.2 643.999 215 647.199 213.4 647.199 c
+211.8 647.199 203.4 653.599 199 658.399 c
+194.6 663.199 186.2 675.199 186.6 677.999 c
+187 680.799 187.8 686.399 Y
+f
+0.1 0.4 0.4 0.2 k
+191 668.949 m
+193.6 664.999 196.8 660.799 199 658.399 c
+203.4 653.599 211.8 647.199 213.4 647.199 c
+215 647.199 218.2 643.999 220.2 644.799 c
+222.2 645.599 225 647.199 225.4 650.399 c
+225.8 653.599 223 655.999 Y
+219.934 657.532 217.194 661.024 215.615 663.347 C
+215.8 660.799 210.6 661.599 v
+205.4 662.399 200.2 665.199 198.6 668.399 c
+197 671.599 194.6 673.999 196.2 670.399 c
+197.8 666.799 200.2 663.199 201.8 662.799 c
+203.4 662.399 203 661.199 200.6 661.599 c
+198.2 661.999 195.4 662.399 191 667.599 c
+F
+0.1 0.55 0.85 0.3 k
+188.4 689.999 m
+190.2 703.6 191.4 707.6 V
+190.6 714.4 193 718.6 v
+195.4 722.8 197.4 729 200.4 734.4 c
+203.4 739.8 203.6 743.8 207.6 745.4 c
+211.6 747 217.6 755.6 220.4 756.6 c
+223.2 757.6 223 756.8 y
+229.8 771.6 243.4 767.6 V
+227.2 770.4 243 779.8 V
+238.2 778.7 241.5 785.7 v
+243.701 790.368 243.2 783.6 232.2 771.8 C
+227.2 763.2 222 760.2 v
+216.8 757.2 204.8 750.2 203.6 746.4 c
+202.4 742.6 199.2 736.8 197.2 735.2 c
+195.2 733.6 192.4 729.4 192 726 C
+190.8 722 189.4 720.8 v
+188 719.6 187.8 716.4 187.8 714.4 c
+187.8 712.4 185.8 709.6 186 707.2 C
+186.8 688.199 186.4 686.199 V
+188.4 689.999 L
+f
+1 g
+179.8 685.399 m
+177.8 686.799 173.4 680.799 V
+180.7 647.799 180.7 646.399 V
+181.8 648.499 180.5 655.699 v
+179.2 662.899 178.3 675.599 y
+179.8 685.399 l
+f
+0.1 0.55 0.85 0.3 k
+201.4 746 m
+183.8 742.8 184.2 713.6 V
+183.4 688.799 l
+182.2 714.4 181 716 v
+179.8 717.6 183.8 728.8 180.6 722.8 C
+166.6 708.8 174.6 687.599 V
+176.1 684.299 173.1 688.899 V
+168.5 701.5 169.6 707.9 V
+169.8 710.1 171.7 712.9 V
+180.3 724.6 183 726.9 V
+184.8 741.3 200.2 746.5 V
+205.9 748.8 201.4 746 V
+f
+0 g
+340.8 812.2 m
+341.46 812.554 341.451 813.524 342.031 813.697 c
+343.18 814.041 343.344 815.108 343.862 815.892 c
+344.735 817.211 344.928 818.744 345.51 820.235 c
+345.782 820.935 345.809 821.89 345.496 822.55 c
+344.322 825.031 343.62 827.48 342.178 829.906 c
+341.91 830.356 341.648 831.15 341.447 831.748 c
+340.984 833.132 339.727 834.123 338.867 835.443 c
+338.579 835.884 339.104 836.809 338.388 836.893 c
+337.491 836.998 336.042 837.578 335.809 836.552 c
+335.221 833.965 336.232 831.442 337.2 829 C
+336.418 828.308 336.752 827.387 336.904 826.62 c
+337.614 823.014 336.416 819.662 335.655 816.188 c
+335.632 816.084 335.974 815.886 335.946 815.824 c
+334.724 813.138 333.272 810.693 331.453 808.312 c
+330.695 807.32 329.823 806.404 329.326 805.341 c
+328.958 804.554 328.55 803.588 328.8 802.6 C
+325.365 799.82 323.115 795.975 320.504 792.129 c
+320.042 791.449 320.333 790.24 320.884 789.971 c
+321.697 789.573 322.653 790.597 323.123 791.443 c
+323.512 792.141 323.865 792.791 324.356 793.434 c
+324.489 793.609 324.31 794.028 324.445 794.149 c
+327.078 796.496 328.747 799.432 331.2 801.8 C
+333.15 802.129 334.687 803.127 336.435 804.14 c
+336.743 804.319 337.267 804.07 337.557 804.265 c
+339.31 805.442 339.308 807.478 339.414 809.388 c
+339.464 810.272 339.66 811.589 340.8 812.2 c
+f
+331.959 816.666 m
+332.083 816.743 331.928 817.166 332.037 817.382 c
+332.199 817.706 332.602 817.894 332.764 818.218 c
+332.873 818.434 332.71 818.814 332.846 818.956 c
+335.179 821.403 335.436 824.427 334.4 827.4 C
+335.424 828.02 335.485 829.282 335.06 830.129 c
+334.207 831.829 334.014 833.755 333.039 835.298 c
+332.237 836.567 330.659 837.811 329.288 836.508 c
+328.867 836.108 328.546 835.321 328.824 834.609 c
+328.888 834.446 329.173 834.3 329.146 834.218 c
+329.039 833.894 328.493 833.67 328.487 833.398 c
+328.457 831.902 327.503 830.391 328.133 829.062 c
+328.905 827.433 329.724 825.576 330.4 823.8 C
+329.166 821.684 330.199 819.235 328.446 817.358 c
+328.31 817.212 328.319 816.826 328.441 816.624 c
+328.733 816.138 329.139 815.732 329.625 815.44 c
+329.827 815.319 330.175 815.317 330.375 815.441 c
+330.953 815.803 331.351 816.29 331.959 816.666 c
+f
+394.771 826.977 m
+396.16 825.185 396.45 822.39 394.401 821 C
+394.951 817.691 398.302 819.67 400.401 820.2 C
+400.292 820.588 400.519 820.932 400.802 820.937 c
+401.859 820.952 402.539 821.984 403.601 821.8 C
+404.035 823.357 405.673 824.059 406.317 825.439 c
+408.043 829.134 407.452 833.407 404.868 836.653 c
+404.666 836.907 404.883 837.424 404.759 837.786 c
+404.003 839.997 401.935 840.312 400.001 841 C
+398.824 844.875 398.163 848.906 396.401 852.6 C
+394.787 852.85 394.089 854.589 392.752 855.309 c
+391.419 856.028 390.851 854.449 390.892 853.403 c
+390.899 853.198 391.351 852.974 391.181 852.609 c
+391.105 852.445 390.845 852.334 390.845 852.2 c
+390.846 852.065 391.067 851.934 391.201 851.8 C
+390.283 850.98 388.86 850.503 388.565 849.358 c
+387.611 845.648 390.184 842.523 391.852 839.322 c
+392.443 838.187 391.707 836.916 390.947 835.708 c
+390.509 835.013 390.617 833.886 390.893 833.03 c
+391.645 830.699 393.236 828.96 394.771 826.977 c
+f
+357.611 808.591 m
+356.124 806.74 352.712 804.171 355.629 802.243 c
+355.823 802.114 356.193 802.11 356.366 802.244 c
+358.387 803.809 360.39 804.712 362.826 805.294 c
+362.95 805.323 363.224 804.856 363.593 805.017 c
+365.206 805.72 367.216 805.662 368.4 807 C
+372.167 806.776 375.732 807.892 379.123 809.2 c
+380.284 809.648 381.554 810.207 382.755 810.709 c
+384.131 811.285 385.335 812.213 386.447 813.354 c
+386.58 813.49 386.934 813.4 387.201 813.4 C
+387.161 814.263 388.123 814.39 388.37 815.012 c
+388.462 815.244 388.312 815.64 388.445 815.742 c
+390.583 817.372 391.503 819.39 390.334 821.767 c
+390.049 822.345 389.8 822.963 389.234 823.439 c
+388.149 824.35 387.047 823.496 386 823.8 C
+385.841 823.172 385.112 823.344 384.726 823.146 c
+383.867 822.707 382.534 823.292 381.675 822.854 c
+380.313 822.159 379.072 821.99 377.65 821.613 c
+377.338 821.531 376.56 821.627 376.4 821 C
+376.266 821.134 376.118 821.368 376.012 821.346 c
+374.104 820.95 372.844 820.736 371.543 819.044 c
+371.44 818.911 370.998 819.09 370.839 818.955 c
+369.882 818.147 369.477 816.913 368.376 816.241 c
+368.175 816.118 367.823 816.286 367.629 816.157 c
+366.983 815.726 366.616 815.085 365.974 814.638 c
+365.645 814.409 365.245 814.734 365.277 814.99 c
+365.522 816.937 366.175 818.724 365.6 820.6 C
+367.677 823.12 370.194 825.069 372 827.8 C
+372.015 829.966 372.707 832.112 372.594 834.189 c
+372.584 834.382 372.296 835.115 372.17 835.462 c
+371.858 836.316 372.764 837.382 371.92 838.106 c
+370.516 839.309 369.224 838.433 368.4 837 C
+366.562 836.61 364.496 835.917 362.918 837.151 c
+361.911 837.938 361.333 838.844 360.534 839.9 c
+359.549 841.202 359.884 842.638 359.954 844.202 c
+359.96 844.33 359.645 844.466 359.645 844.6 c
+359.646 844.735 359.866 844.866 360 845 C
+359.294 845.626 359.019 846.684 358 847 C
+358.305 848.092 357.629 848.976 356.758 849.278 c
+354.763 849.969 353.086 848.057 351.194 847.984 c
+350.68 847.965 350.213 849.003 349.564 849.328 c
+349.132 849.544 348.428 849.577 348.066 849.311 c
+347.378 848.807 346.789 848.693 346.031 848.488 c
+344.414 848.052 343.136 846.958 341.656 846.103 c
+340.171 845.246 339.216 843.809 338.136 842.489 c
+337.195 841.337 337.059 838.923 338.479 838.423 c
+340.322 837.773 341.626 840.476 343.592 840.15 c
+343.904 840.099 344.11 839.788 344 839.4 C
+344.389 839.291 344.607 839.52 344.8 839.8 C
+345.658 838.781 346.822 838.444 347.76 837.571 c
+348.73 836.667 350.476 837.085 351.491 836.088 c
+353.02 834.586 352.461 831.905 354.4 830.6 C
+353.814 829.287 353.207 828.01 352.872 826.583 c
+352.59 825.377 353.584 824.18 354.795 824.271 c
+356.053 824.365 356.315 825.124 356.8 826.2 C
+357.067 825.933 357.536 825.636 357.495 825.42 c
+357.038 823.033 356.011 821.04 355.553 818.609 c
+355.494 818.292 355.189 818.09 354.8 818.2 C
+354.332 814.051 350.28 811.657 347.735 808.492 c
+347.332 807.99 347.328 806.741 347.737 806.338 c
+349.14 804.951 351.1 806.497 352.8 807 C
+353.013 808.206 353.872 809.148 355.204 809.092 c
+355.46 809.082 355.695 809.624 356.019 809.754 c
+356.367 809.892 356.869 809.668 357.155 809.866 c
+358.884 811.061 360.292 812.167 362.03 813.356 c
+362.222 813.487 362.566 813.328 362.782 813.436 c
+363.107 813.598 363.294 813.985 363.617 814.17 c
+363.965 814.37 364.207 814.08 364.4 813.8 C
+363.754 813.451 363.75 812.494 363.168 812.292 c
+362.393 812.024 361.832 811.511 361.158 811.064 c
+360.866 810.871 360.207 811.119 360.103 810.94 c
+359.505 809.912 358.321 809.474 357.611 808.591 c
+f
+302.2 858 m
+292.962 860.872 281.8 835.2 V
+279.4 830 277 828 v
+274.6 826 263.4 822.4 261.4 818.4 C
+251 802.4 L
+265.8 818.4 269 820.8 V
+277 829.2 273.8 822.4 V
+259.8 811.6 261 802.4 V
+255.4 788 254.6 786 V
+270.6 818 273 819.2 v
+275.4 820.4 276.6 820.4 275.4 816.8 c
+274.2 813.2 273.8 796.8 271 794.8 C
+279 815.2 278.2 818.4 V
+281.4 822 283.8 816.8 V
+282.6 800.8 l
+287 788.8 l
+284.6 800 286.2 815.6 V
+284.2 826 288.2 820.4 v
+292.2 814.8 301.8 808.8 301.8 804 C
+296.6 821.6 287.4 826.4 V
+283.4 820.4 l
+282.2 822.4 l
+278.6 823.2 283 830 v
+287.4 836.8 287 837.6 y
+293.4 830.4 295 830.4 V
+308.2 838 309.4 813.6 V
+316.2 828 307 834.8 V
+292.2 836.8 293.4 842 V
+300.6 854.4 L
+304.2 859.6 302.6 856.8 y
+F
+282.2 841.6 m
+269.4 841.6 266.2 836.4 V
+259 826.8 l
+276.2 836.8 280.2 838 v
+284.2 839.2 282.2 841.6 Y
+f
+242.2 835.2 m
+240.2 834 239.8 831.2 v
+239.4 828.4 237 828 237.8 825.2 c
+238.6 822.4 240.6 820 240.6 824 c
+240.6 828 242.2 830 243 831.2 c
+243.8 832.4 245.4 836.8 242.2 835.2 c
+f
+233.4 774 m
+225 778 221.8 781.6 v
+218.6 785.2 219.052 780.034 214.2 780.4 c
+208.353 780.841 209.4 796.8 y
+205.4 789.2 l
+204.2 774.8 212.2 777.2 v
+216.107 778.372 217.4 776.8 215.8 776 c
+214.2 775.2 221.4 774.8 218.6 773.2 c
+215.8 771.6 230.2 776.8 227.8 766.4 C
+233.4 774 L
+f
+220.8 759.6 m
+205.4 755.2 201.8 764.8 V
+197 762.4 199.2 759.4 v
+201.4 756.4 202.6 756 y
+208 754.8 207.4 754 v
+206.8 753.2 204.4 749.8 y
+214.6 755.8 220.8 759.6 v
+f
+1 g
+449.201 681.399 m
+448.774 679.265 447.103 678.464 445.201 677.799 C
+443.284 678.757 440.686 681.863 438.801 679.799 C
+438.327 680.279 437.548 680.339 437.204 681.001 c
+436.739 681.899 437.011 682.945 436.669 683.743 c
+436.124 685.015 435.415 686.381 435.601 687.799 C
+437.407 688.511 438.002 690.417 437.528 692.18 c
+437.459 692.437 437.03 692.634 437.23 692.983 c
+437.416 693.306 437.734 693.533 438.001 693.8 C
+437.866 693.665 437.721 693.432 437.61 693.452 c
+437 693.558 437.124 694.195 437.254 694.582 c
+437.839 696.328 439.853 696.592 441.201 695.4 C
+441.457 695.965 441.966 695.771 442.401 695.8 C
+442.351 696.379 442.759 696.906 442.957 697.326 c
+443.475 698.424 445.104 697.318 445.901 697.93 c
+446.977 698.755 448.04 699.454 449.118 698.851 c
+450.927 697.838 452.636 696.626 453.835 694.885 c
+454.41 694.051 454.65 692.77 454.592 691.812 c
+454.554 691.165 453.173 691.517 452.83 690.588 c
+452.185 688.84 454.016 688.321 454.772 686.983 c
+454.97 686.634 454.706 686.33 454.391 686.232 c
+453.98 686.104 453.196 686.293 453.334 685.84 c
+454.306 682.647 451.55 681.969 449.201 681.399 C
+f
+439.6 661.799 m
+439.593 663.537 437.992 665.293 439.201 666.999 C
+439.336 666.865 439.467 666.644 439.601 666.644 c
+439.736 666.644 439.867 666.865 440.001 666.999 C
+441.496 664.783 445.148 663.855 445.006 661.009 c
+444.984 660.562 443.897 659.644 444.801 658.999 C
+442.988 657.651 442.933 655.281 442.001 653.399 C
+440.763 653.685 439.551 654.048 438.401 654.599 C
+438.753 656.085 438.636 657.769 439.456 659.089 c
+439.89 659.787 439.603 660.866 439.6 661.799 c
+f
+0.8 g
+273.4 670.799 m
+256.542 660.663 270.6 675.999 v
+279.4 685.599 289.4 691.199 y
+299.8 695.6 303.4 696.8 v
+307 698 322.2 703.2 325.4 703.6 c
+328.6 704 338.2 708 345 704 c
+351.8 700 359.8 695.6 y
+343.4 704 339.8 701.6 v
+336.2 699.2 329 699.6 323 696.4 C
+308.2 691.999 305 689.999 v
+301.8 687.999 291.4 676.399 289.8 677.199 c
+288.2 677.999 290.2 678.399 291.4 681.199 c
+292.6 683.999 290.6 685.599 282.6 679.199 c
+274.6 672.799 273.4 670.799 Y
+f
+0 g
+280.805 676.766 m
+282.215 689.806 290.693 688.141 V
+298.919 692.311 301.641 694.279 V
+309.78 695.981 311.09 696.598 v
+329.569 705.298 344.288 700.779 344.835 701.899 c
+345.381 703.018 365.006 695.901 368.615 691.815 c
+369.006 691.372 358.384 697.412 348.686 699.303 c
+340.413 700.917 318.811 699.056 307.905 693.52 c
+304.932 692.011 295.987 686.227 293.456 686.338 c
+290.925 686.45 280.805 676.766 Y
+f
+0.8 g
+277 651.199 m
+261.8 653.599 278.6 655.199 V
+296.6 657.199 300.6 662.399 V
+314.2 671.599 317 671.999 v
+319.8 672.399 349.8 679.599 350.2 681.999 c
+350.6 684.399 356.2 684.399 357.8 683.599 c
+359.4 682.799 358.6 681.599 355.8 680.799 c
+353 679.999 321.8 663.599 315.4 662.399 c
+309 661.199 297.4 653.599 292.6 652.399 c
+287.8 651.199 277 651.199 Y
+f
+0 g
+296.52 658.597 m
+287.938 659.426 296.539 660.245 V
+305.355 663.669 307.403 666.332 V
+314.367 671.043 315.8 671.247 v
+317.234 671.452 331.194 675.139 331.399 676.367 c
+331.604 677.596 365.67 690.177 370.09 686.987 c
+373.001 684.886 363.1 686.563 353.466 682.153 c
+352.111 681.533 318.258 666.946 314.981 666.332 c
+311.704 665.717 305.765 661.826 303.307 661.212 c
+300.85 660.597 296.52 658.597 Y
+f
+288.6 656.399 m
+293.8 656.799 292.6 655.199 v
+291.4 653.599 289 654.399 y
+288.6 656.399 l
+f
+281.4 654.799 m
+286.6 655.199 285.4 653.599 v
+284.2 651.999 281.8 652.799 y
+281.4 654.799 l
+f
+271 653.199 m
+276.2 653.599 275 651.999 v
+273.8 650.399 271.4 651.199 y
+271 653.199 l
+f
+263.4 652.399 m
+268.6 652.799 267.4 651.199 v
+266.2 649.599 263.8 650.399 y
+263.4 652.399 l
+f
+301.8 691.999 m
+306.2 691.999 305 690.399 v
+303.8 688.799 300.6 689.199 y
+301.8 691.999 l
+f
+291.8 686.399 m
+298.306 688.54 295.8 685.199 v
+294.6 683.599 292.2 684.399 y
+291.8 686.399 l
+f
+280.6 681.599 m
+285.8 681.999 284.6 680.399 v
+283.4 678.799 281 679.599 y
+280.6 681.599 l
+f
+273 675.599 m
+278.2 675.999 277 674.399 v
+275.8 672.799 273.4 673.599 y
+273 675.599 l
+f
+266.2 670.799 m
+271.4 671.199 270.2 669.599 v
+269 667.999 266.6 668.799 y
+266.2 670.799 l
+f
+305.282 664.402 m
+312.203 664.934 310.606 662.805 v
+309.009 660.675 305.814 661.74 y
+305.282 664.402 l
+f
+315.682 669.202 m
+322.603 669.734 321.006 667.605 v
+319.409 665.475 316.214 666.54 y
+315.682 669.202 l
+f
+326.482 673.602 m
+333.403 674.134 331.806 672.005 v
+330.209 669.875 327.014 670.94 y
+326.482 673.602 l
+f
+336.882 678.402 m
+343.803 678.934 342.206 676.805 v
+340.609 674.675 337.414 675.74 y
+336.882 678.402 l
+f
+309.282 696.402 m
+316.203 696.934 314.606 694.805 v
+313.009 692.675 309.014 692.94 y
+309.282 696.402 l
+f
+319.282 699.602 m
+326.203 700.134 324.606 698.005 v
+323.009 695.875 318.614 696.14 y
+319.282 699.602 l
+f
+296.6 659.599 m
+301.8 659.999 300.6 658.399 v
+299.4 656.799 297 657.599 y
+296.6 659.599 l
+f
+0.1 0.55 0.85 0.3 k
+223.4 758.8 m
+219 750 218.6 746.8 V
+219.4 755.6 220.6 757.6 v
+221.8 759.6 223.4 758.8 y
+f
+205 744.8 m
+201.8 730.4 202.2 727.6 V
+201 739.2 201.4 740.4 v
+201.8 741.6 205 744.8 y
+f
+0.8 g
+225.8 819.4 m
+225.6 816.2 l
+223.4 816 l
+237.6 803.4 238.2 795.8 V
+239 804 225.8 819.4 V
+f
+0 g
+229.784 818.135 m
+229.353 818.551 229.572 819.296 229.164 819.556 c
+228.355 820.072 230.462 820.129 230.234 820.845 c
+229.851 822.051 230.038 822.072 229.916 823.348 c
+229.859 823.946 230.447 825.486 230.832 825.926 c
+232.278 827.578 230.954 830.51 232.594 832.061 c
+232.898 832.35 233.274 832.902 233.559 833.32 c
+234.218 834.283 235.402 834.771 236.352 835.599 c
+236.67 835.875 236.469 836.702 237.038 836.61 c
+237.752 836.495 238.993 836.625 238.948 835.784 c
+238.835 833.664 237.506 831.944 236.226 830.276 C
+236.677 829.572 236.219 828.937 235.935 828.38 c
+234.6 825.76 234.789 822.919 234.615 820.079 c
+234.61 819.994 234.303 819.916 234.311 819.863 c
+234.664 817.528 235.248 815.329 236.127 813.1 c
+236.493 812.17 236.964 811.275 237.114 810.348 c
+237.225 809.662 237.328 808.829 236.92 808.124 C
+238.955 805.234 237.646 802.583 238.815 799.052 c
+239.022 798.427 240.714 796.513 240.251 796.674 c
+237.738 797.545 237.626 797.943 237.449 798.696 c
+237.303 799.319 236.973 800.696 236.736 801.298 c
+236.672 801.462 236.501 803.346 236.423 803.468 c
+234.91 805.85 236.268 805.674 234.898 808.032 C
+233.47 808.712 232.504 809.816 231.381 810.978 c
+231.183 811.182 232.326 811.906 232.145 812.119 c
+231.053 813.408 229.9 814.175 230.236 815.668 c
+230.391 816.358 230.528 817.415 229.784 818.135 c
+f
+226.2 816.4 m
+226.6 809.6 229 808 v
+231.4 806.4 230.2 807.2 227 808.4 c
+223.8 809.6 225 810.4 y
+222.2 810 224.6 808 v
+227 806 230.6 803.6 229 803.6 c
+227.4 803.6 219.8 807.6 219.8 810.4 c
+219.8 813.2 218.8 817.3 y
+219.9 818.1 224.7 818 V
+226.1 817.3 226.2 816.4 V
+f
+1 g
+1 J 0.1 w
+225.4 797.8 m
+216.88 800.591 198.4 797.2 V
+207.431 799.278 226.2 797 v
+236.5 795.75 225.4 797.8 Y
+b
+227.498 797.871 m
+219.252 801.389 200.547 799.608 V
+209.725 800.897 228.226 797.005 v
+238.38 794.869 227.498 797.871 Y
+b
+229.286 797.778 m
+221.324 801.899 202.539 801.514 V
+211.787 802.118 229.948 796.86 v
+239.914 793.975 229.286 797.778 Y
+b
+230.556 797.555 m
+223.732 801.862 206.858 802.96 V
+215.197 802.79 231.078 796.681 v
+239.794 793.328 230.556 797.555 Y
+b
+345.84 787.039 m
+344.91 786.395 345.124 787.576 v
+345.339 788.757 373.547 801.927 377.161 801.677 C
+346.913 788.471 345.84 787.039 V
+b
+342.446 786.4 m
+341.57 785.685 341.691 786.879 v
+341.812 788.073 368.899 803.418 372.521 803.452 C
+343.404 787.911 342.446 786.4 V
+b
+339.16 785.025 m
+338.332 784.253 338.374 785.453 v
+338.416 786.652 358.233 802.149 368.045 804.023 C
+350.015 795.896 339.16 785.025 V
+b
+336.284 783.162 m
+335.539 782.468 335.577 783.547 v
+335.615 784.627 353.449 798.574 362.28 800.26 C
+346.054 792.946 336.284 783.162 V
+b
+0.8 g
+0 J 1 w
+304.6 635.199 m
+289.4 637.599 306.2 639.199 V
+324.2 641.199 328.2 646.399 V
+341.8 655.599 344.6 655.999 v
+347.4 656.399 363.8 659.999 364.2 662.399 c
+364.6 664.799 370.6 667.199 372.2 666.399 c
+373.8 665.599 373.8 656.399 371 655.599 c
+368.2 654.799 349.4 647.599 343 646.399 c
+336.6 645.199 325 637.599 320.2 636.399 c
+315.4 635.199 304.6 635.199 Y
+f
+0 g
+377.6 672.599 m
+374.6 670.999 373.4 668.399 V
+367 657.799 352.8 654.599 V
+329.8 645.599 322 643.599 V
+308.6 638.599 301.2 639.399 V
+294.2 639.199 300.4 637.599 V
+320.6 639.599 324 641.399 V
+339.6 646.599 342.6 649.199 v
+345.6 651.799 363.8 656.799 366 658.799 c
+368.2 660.799 378 669.199 377.6 672.599 C
+f
+318.882 641.089 m
+324.111 641.315 322.958 639.766 v
+321.805 638.216 319.357 639.09 y
+318.882 641.089 l
+f
+311.68 639.737 m
+316.908 639.963 315.756 638.414 v
+314.603 636.864 312.155 637.737 y
+311.68 639.737 l
+f
+301.251 638.489 m
+306.48 638.716 305.327 637.166 v
+304.174 635.617 301.726 636.49 y
+301.251 638.489 l
+f
+293.617 637.945 m
+298.846 638.171 297.693 636.622 v
+296.54 635.072 294.092 635.946 y
+293.617 637.945 l
+f
+335.415 648.487 m
+342.375 648.788 340.84 646.726 v
+339.306 644.664 336.047 645.826 y
+335.415 648.487 l
+f
+345.73 652.912 m
+351.689 656.213 351.155 651.151 v
+350.885 648.595 346.362 650.251 y
+345.73 652.912 l
+f
+354.862 655.726 m
+362.021 659.427 360.287 653.965 v
+359.509 651.515 355.493 653.065 y
+354.862 655.726 l
+f
+364.376 660.551 m
+368.735 665.452 369.801 658.79 v
+370.207 656.252 365.008 657.89 y
+364.376 660.551 l
+f
+326.834 644.003 m
+332.062 644.23 330.91 642.68 v
+329.757 641.131 327.308 642.004 y
+326.834 644.003 l
+f
+1 g
+1 J 0.1 w
+362.434 765.397 m
+361.708 764.732 361.707 765.803 v
+361.707 766.873 379.191 780.137 388.034 781.521 C
+371.935 774.792 362.434 765.397 V
+b
+0 g
+0 J 1 w
+365.4 701.6 m
+387.401 679.199 396.601 675.599 V
+405.801 664.399 401.801 638.399 V
+398.601 630.799 395.401 651.599 V
+398.601 676.799 387.401 660.799 V
+379 670.699 385.4 670.399 V
+388.601 668.399 389.001 669.999 v
+389.401 671.599 381.4 685.199 364.2 699.6 c
+347 714 365.4 701.6 Y
+f
+1 g
+1 J 0.1 w
+307 662.799 m
+306.8 664.599 308.6 663.799 v
+310.4 662.999 404.601 656.799 436.201 632.799 C
+391.001 655.999 307 662.799 V
+b
+317.4 667.199 m
+317.2 668.999 319 668.199 v
+320.8 667.399 457.401 668.399 481.001 635.999 C
+459.001 661.199 317.4 667.199 V
+b
+329 671.199 m
+328.8 672.999 330.6 672.199 v
+332.4 671.399 505.801 684.399 529.401 651.999 C
+519.801 677.599 329 671.199 V
+b
+339 675.999 m
+338.8 677.799 340.6 676.999 v
+342.4 676.199 464.601 714.8 488.201 682.399 C
+474.801 707 339 675.999 V
+b
+281 653.199 m
+280.8 654.999 282.6 654.199 v
+284.4 653.399 302.2 651.199 304.2 612.399 C
+297 654.399 281 653.199 V
+b
+272.2 651.599 m
+272 653.399 273.8 652.599 v
+275.6 651.799 289.8 656.399 287 617.599 C
+288.2 652.799 272.2 651.599 V
+b
+264.2 651.199 m
+264 652.999 265.8 652.199 v
+267.6 651.399 283 650.799 270.6 628.399 C
+280.2 652.399 264.2 651.199 V
+b
+311.526 695.535 m
+311.082 693.536 312.631 694.753 v
+328.699 707.378 361.141 766.28 416.826 771.914 C
+378.518 784.024 311.526 695.535 V
+b
+322.726 697.335 m
+321.363 698.528 323.231 699.153 v
+325.099 699.778 437.541 772.28 476.826 764.314 C
+449.719 771.824 322.726 697.335 V
+b
+301.885 691.233 m
+301.376 689.634 303.087 690.61 v
+312.062 695.73 315.677 752.941 359.254 754.196 C
+326.843 768.91 301.885 691.233 V
+b
+281.962 680.207 m
+280.885 678.921 282.838 679.175 v
+293.084 680.507 314.489 721.778 358.928 716.699 C
+326.962 731.045 281.962 680.207 V
+b
+293.2 686.333 m
+292.389 684.864 294.258 685.489 v
+304.057 688.763 317.141 733.375 361.729 736.922 C
+327.603 744.865 293.2 686.333 V
+b
+274.922 675.088 m
+274.049 674.046 275.631 674.252 v
+283.93 675.331 301.268 708.76 337.264 704.646 C
+311.371 716.266 274.922 675.088 V
+b
+267.323 669.179 m
+266.318 668.134 267.909 668.252 v
+272.077 668.561 302.715 701.64 321.183 686.138 C
+309.168 704.861 267.323 669.179 V
+b
+336.855 701.102 m
+335.654 702.457 337.586 702.842 v
+339.518 703.226 460.221 760.939 498.184 748.073 C
+472.243 758.947 336.855 701.102 V
+b
+303.4 636.799 m
+303.2 638.599 305 637.799 v
+306.8 636.999 322.2 636.399 309.8 613.999 C
+319.4 637.999 303.4 636.799 V
+b
+313.8 638.399 m
+313.6 640.199 315.4 639.399 v
+317.2 638.599 335 636.399 337 597.599 C
+329.8 639.599 313.8 638.399 V
+b
+320.6 639.999 m
+320.4 641.799 322.2 640.999 v
+324 640.199 348.6 636.799 372.2 604.399 C
+336.6 641.199 320.6 639.999 V
+b
+328.225 642.028 m
+327.788 643.786 329.678 643.232 v
+331.568 642.678 352.002 644.577 390.099 610.401 C
+343.924 645.344 328.225 642.028 V
+b
+338.625 646.428 m
+338.188 648.186 340.078 647.632 v
+341.968 647.078 376.802 642.577 428.499 607.601 C
+354.324 649.744 338.625 646.428 V
+b
+298.2 657.999 m
+298 659.799 299.8 658.999 v
+301.6 658.199 355 655.599 385.4 628.799 C
+350.499 653.574 298.2 657.999 V
+b
+288.2 653.999 m
+288 655.799 289.8 654.999 v
+291.6 654.199 316.2 650.799 339.8 618.399 C
+304.2 655.199 288.2 653.999 V
+b
+349.503 651.038 m
+348.938 652.759 350.864 652.345 v
+352.79 651.932 387.86 649.996 441.981 618.902 C
+364.317 653.296 349.503 651.038 V
+b
+357.903 653.438 m
+357.338 655.159 359.264 654.745 v
+361.19 654.332 396.26 652.396 450.381 621.302 C
+373.317 656.096 357.903 653.438 V
+b
+367.503 658.438 m
+366.938 660.159 368.864 659.745 v
+370.79 659.332 413.86 654.996 503.582 620.702 C
+382.917 661.096 367.503 658.438 V
+b
+0 g
+0 J 1 w
+256.2 651.599 m
+261.4 651.999 260.2 650.399 v
+259 648.799 256.6 649.599 y
+256.2 651.599 l
+f
+287 637.599 m
+292.2 637.999 291 636.399 v
+289.8 634.799 287.4 635.599 y
+287 637.599 l
+f
+278.2 637.999 m
+283.4 638.399 282.2 636.799 v
+281 635.199 278.6 635.999 y
+278.2 637.999 l
+f
+182.831 649.818 m
+187.876 648.495 186.218 647.376 v
+184.561 646.256 182.554 647.798 y
+182.831 649.818 l
+f
+184.831 659.418 m
+189.876 658.095 188.218 656.976 v
+186.561 655.856 184.554 657.398 y
+184.831 659.418 l
+f
+177.631 663.818 m
+182.676 662.495 181.018 661.376 v
+179.361 660.256 177.354 661.798 y
+177.631 663.818 l
+f
+0.8 g
+1 J 0.1 w
+257.4 588.799 m
+255.8 588.799 251.8 586.799 V
+249.8 586.799 238.6 583.199 233 573.199 C
+245.4 582.799 257.4 588.799 V
+f
+345.116 496.153 m
+345.257 495.895 345.312 495.475 345.604 495.458 c
+346.262 495.418 347.495 495.117 347.37 495.753 c
+346.522 500.059 345.648 504.996 341.515 506.803 c
+340.876 507.082 339.434 506.669 339.36 505.785 c
+339.233 504.261 339.116 502.912 339.425 501.446 c
+339.725 500.025 341.883 500.015 342.8 501.399 C
+343.736 499.727 344.168 497.884 345.116 496.153 c
+f
+334.038 491.419 m
+334.786 490.006 334.659 488.147 336.074 487.584 c
+336.814 487.29 338.664 488.265 338.246 489.339 c
+337.444 491.4 337.056 493.639 335.667 495.45 c
+335.467 495.712 335.707 496.245 335.547 496.573 c
+334.953 497.793 333.808 498.528 332.4 498.199 C
+331.285 495.996 332.433 493.867 333.955 492.158 c
+334.091 492.006 333.925 491.63 334.038 491.419 c
+f
+294.436 496.609 m
+294.328 496.986 294.29 497.449 294.455 497.77 c
+294.986 498.803 295.779 499.925 295.442 500.947 c
+295.094 502.003 293.978 501.821 293.328 501.252 c
+292.193 500.258 292.144 498.432 291.453 497.073 c
+291.257 496.687 291.308 496.114 290.867 495.723 c
+290.393 495.302 289.953 493.778 290.049 493.207 c
+290.102 492.894 289.919 482.986 290.141 483.249 c
+290.76 483.982 293.81 493.716 293.879 494.608 c
+293.936 495.339 294.668 495.804 294.436 496.609 c
+f
+268.798 503.401 m
+271.432 505.9 274.222 508.861 273.78 512.573 c
+273.664 513.549 271.889 513.022 271.702 512.176 c
+270.9 508.551 268.861 505.89 266.293 503.498 c
+264.097 501.451 262.235 495.107 262 494.599 C
+265.697 499.855 267.954 502.601 268.798 503.401 c
+f
+255.224 509.365 m
+255.747 509.735 255.445 510.226 255.662 510.558 c
+256.615 512.016 257.916 513.262 257.934 515 c
+257.937 515.277 257.559 515.586 257.224 515.362 c
+256.947 515.178 256.605 515.048 256.497 514.918 c
+254.467 512.469 253.067 509.798 251.624 506.986 c
+251.441 506.629 250.297 502.138 250.61 502.027 c
+250.849 501.942 252.569 506.123 252.779 506.237 c
+254.042 506.923 254.054 508.538 255.224 509.365 c
+f
+271.957 489.821 m
+272.401 490.69 273.977 491.892 273.864 492.781 c
+273.746 493.709 274.214 495.152 273.302 494.464 c
+272.045 493.516 268.596 492.167 268.326 486.359 c
+268.3 485.788 271.274 488.481 271.957 489.821 c
+f
+286.4 506.999 m
+286.8 507.667 287.508 507.194 287.967 507.457 c
+288.615 507.829 289.226 508.387 289.518 509.036 c
+290.488 511.185 292.257 513.005 292.4 515.399 C
+290.909 516.804 290.23 514.764 289.6 513.799 C
+288.277 515.446 287.278 513.572 285.978 513.053 c
+285.908 513.025 285.695 513.372 285.62 513.345 c
+284.443 512.905 283.763 511.824 282.765 511.043 c
+282.594 510.909 282.189 511.089 282.042 510.953 c
+281.39 510.35 280.417 510.025 280.137 509.343 c
+279.027 506.636 275.887 504.541 274 496.999 C
+274.381 496.09 278.512 503.641 278.999 504.339 c
+279.835 505.535 279.953 502.678 281.229 503.344 c
+281.28 503.371 281.466 503.133 281.6 502.999 C
+281.794 503.279 282.012 503.508 282.4 503.399 C
+282.4 503.799 282.266 504.355 282.467 504.514 c
+283.704 505.491 283.62 506.559 284.4 507.799 C
+284.858 507.01 285.919 507.729 286.4 506.999 C
+f
+346.2 452.599 m
+353.6 472.999 349.2 484.199 V
+360.6 462.599 356 451.399 V
+355.6 461.799 351.6 466.799 V
+347.6 453.999 346.2 452.599 V
+f
+331.4 455.199 m
+336.8 463.999 328.8 482.399 V
+328 461.999 321.2 450.999 V
+335.4 471.199 331.4 455.199 V
+f
+321.4 457.199 m
+321.2 477.199 321.6 480.199 V
+317.8 463.599 307.6 453.999 V
+322 465.999 321.4 457.199 V
+f
+311.8 489.199 m
+317.8 475.599 307.8 457.199 V
+314.2 469.399 309.4 476.399 V
+312 479.799 311.8 489.199 V
+f
+292.6 457.599 m
+291.6 473.199 293.4 475.399 V
+293.6 481.799 293.2 482.799 V
+297.2 488.999 297.4 481.599 V
+298.8 473.799 301.6 469.199 V
+305.2 463.799 305 457.399 V
+295 487.599 292.6 457.599 V
+f
+289 485.199 m
+282.4 474.399 280.6 455.399 V
+279.2 461.599 283 475.999 V
+287.2 491.399 289 485.199 V
+f
+267.2 465.399 m
+272.2 470.799 273.6 475.799 V
+277.2 491.599 270.8 482.999 V
+271 474.999 262.8 467.599 V
+267.6 469.999 267.2 465.399 V
+f
+261.4 470.399 m
+264.8 487.799 265.6 488.599 V
+267.4 491.999 264.6 488.799 V
+255.8 469.599 251.8 462.999 V
+259.8 472.199 261.4 470.399 V
+f
+255.6 486.999 m
+267.2 509.399 245.4 483.599 V
+256.4 493.399 255.6 486.999 V
+f
+240.2 501.599 m
+245 520.399 247.6 520.199 V
+255.8 529.199 249.2 518.599 V
+243.2 508.999 243.8 499.199 V
+243.2 508.799 240.2 501.599 V
+f
+570.5 513 m
+558.5 523 556 526.5 V
+569.5 508 569.5 501 V
+572 508.5 570.5 513 V
+f
+576 535 m
+555 550 551.5 557.5 V
+578 528 578 523.5 V
+578.5 532.5 576 535 V
+f
+593 689 m
+581 697 579.5 695 V
+590 688.5 592.5 680 V
+591 689 593 689 V
+f
+601.5 608.5 m
+584 620.5 l
+603 603.5 603.5 599.5 V
+601.5 608.5 L
+f
+0 g
+1 w
+210.75 631 m
+232.75 626.25 l
+S
+261 469 m
+260.5 472.5 251.5 462 v
+S
+266.5 464 m
+268.5 470.5 262 466 v
+S
+320.5 455.5 m
+322 466.5 310.5 453.5 v
+S
+
+showpage
+
+%%Trailer
+end
+tigersave restore
+%%EOF
diff --git a/Master/xemtex/doc/ghostscript/examples/vasarely.ps b/Master/xemtex/doc/ghostscript/examples/vasarely.ps new file mode 100644 index 00000000000..82b9e616562 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/vasarely.ps @@ -0,0 +1,588 @@ +%!
+% vasarely
+% Elizabeth D. Zwicky
+% zwicky@sgi.com
+/vasarelysave save def % prevent residual side effects
+%
+% Inspired by Vasarely's experiments with tilting circles and squares
+% (for instance "Tlinko" and "Betelgeuse"
+
+%% circles
+/part { circle } def /nnrand false def
+%% squares
+% /part { ngon } def /nn 4 def /nnrand false def
+%% random polygons
+% /part { ngon } def /nnrand true def
+%% random stars (not my favorite on this program)
+% /part { nstar } def /nnrand true def
+
+%% tilt the base shape a random amount?
+/twist false def
+% /twist true def
+
+
+/rainbow false def
+%% To make rainbows
+% /rainbow true def
+%% Set this to 1 to go through a full range of colors
+/rainrange .25 def
+
+% number of different designs per page
+/inheight 2 def
+/inwidth 2 def
+% number of repeats in a design
+/xtimes 10 def
+/ytimes 16 def
+
+%% This sets the relationship between the two hues: comptwo is maximum contrast
+/colorway {comptwo} def
+%% monochrome comptwo harmtwo harmfour freecolor compthree closeharm
+%% origcolor
+
+%% This sets the brightness and saturation of the colors; vivid makes
+%% them both bright
+/colorfam {vivid} def
+%% vivid jewel intense medium pastel free orig contrast
+%% medjewel medvivid vivpastel medpastel
+
+
+%% Only experts below this point!
+
+usertime srand
+/seed rand def
+
+/starcompensate false def
+/constroke 1 def
+
+
+
+/circle {
+ /radius radius 1.33 mul def
+ currentpoint /herey exch def /herex exch def
+ herex herey radius 0 360 arc
+} def
+
+/ngon{ % polygon of n sides, n determined by nn
+ nside 2 div radius rmoveto
+ nn cvi {
+ nside neg 0 rlineto
+ 360 360 nn div sub neg rotate
+ } repeat
+ closepath
+} def
+
+/nstar{ % star of n points, n determined by nstarslider
+ /radius radius 1.33 mul def
+ currentpoint /herey exch def /herex exch def
+ 0 radius rmoveto
+ 90 nstarangle 2 div add neg rotate
+ nn cvi {nstarside 0 rlineto
+ 180 180 nstarangle 2 mul sub sub neg rotate
+ nstarside 0 rlineto
+ 180 180 360 nn div sub nstarangle 2 mul sub sub rotate
+ } repeat
+ 90 nstarangle 2 div add rotate
+ closepath
+} def
+
+/nstarangle {180 360 nn div sub 3 div} def
+/nstarside {
+ 2
+ radius
+ 1
+ 180 nn div
+ sin
+ div
+ div
+ mul
+ nstarangle sin
+ mul
+ 180
+ nstarangle 2 mul
+ sub
+ sin
+ div
+} def
+
+/nside {
+ 2
+ radius
+ 360 nn div 2 div tan
+ mul
+ mul
+} def
+
+
+/tan { /alpha exch def
+ alpha sin
+ 1 alpha sin dup mul sub sqrt
+ div
+} def
+
+
+/pastel {
+ /backbright high def
+ /backsat medlow def
+ /fillbright high def
+ /fillsat medlow def
+ /eobright high def
+ /eosat medlow def
+ constroke 0 eq {
+ /strokebright high def
+ /strokesat medlow def
+ }
+ {
+ /strokebright low def
+ /strokesat high def
+ } ifelse
+} def
+
+/jewel {
+ /fillbright med def
+ /fillsat high def
+ /backbright med def
+ /backsat high def
+ /eobright med def
+ /eosat high def
+ constroke 0 eq {
+ /strokebright medlow def
+ /strokesat high def
+ }
+ {
+ /strokebright high def
+ /strokesat medlow def
+ } ifelse
+} def
+
+/vivid {
+ /fillsat 1 def
+ /fillbright high def
+ /eosat 1 def
+ /eobright high def
+ /backsat 1 def
+ /backbright high def
+ constroke 0 eq {
+ /strokesat 1 def
+ /strokebright high def
+ }
+ {
+ /strokesat high def
+ /strokebright medlow def
+ } ifelse
+} def
+
+/free {
+ /fillsat anyrand def
+ /fillbright anyrand def
+ /eosat anyrand def
+ /eobright anyrand def
+ /backsat anyrand def
+ /backbright anyrand def
+ /strokesat anyrand def
+ /strokebright anyrand def
+} def
+
+/contrast {
+ /sat medhigh def
+ /bright rand 2 mod 0 eq {medhigh} {medlow} ifelse def
+ /backsat sat def
+ /backbright bright def
+ /eosat sat def
+ /eobright 1 bright sub def
+ /fillsat sat def
+ /fillbright bright def
+ /strokebright rand 2 mod def
+ /strokesat rand 2 mod def
+
+} def
+/medium {
+ /backsat med def
+ /backbright med def
+ /eosat med def
+ /eobright med def
+ /fillsat med def
+ /fillbright med def
+ /strokebright med def
+ /strokesat med def
+
+} def
+/intense {
+ /backsat high def
+ /backbright med def
+ /eosat high def
+ /eobright high def
+ /fillsat high def
+ /fillbright med def
+ /strokebright high def
+ /strokesat high def
+
+} def
+/orig {
+ /backsat rand 99 mod 55 add 100 div def
+ /backbright rand 99 mod 35 add 100 div def
+ /eosat rand 77 mod 22 add 100 div def
+ /eobright 90 rand 75 mod sub 15 add 100 div def
+ /fillsat 100 rand 90 mod sub 100 div def
+ /fillbright 100 rand 45 mod sub 20 add 100 div def
+ /strokebright 100 rand 55 mod sub 100 div def
+ /strokesat 100 rand 85 mod sub 100 div def
+
+} def
+
+/medjewel {
+ /alt rand 2 mod def
+ /backsat alt 0 eq {high} { med} ifelse def
+ /fillsat alt 0 eq {med} {high} ifelse def
+ /eosat alt 0 eq {high} {med} ifelse def
+ /backbright med def
+ /fillbright med def
+ /eobright med def
+ constroke 0 eq {
+ /strokebright medlow def
+ /strokesat high def
+ }
+ {
+ /strokebright high def
+ /strokesat medlow def
+ } ifelse
+} def
+
+/medvivid {
+ /alt rand 2 mod def
+ /backsat alt 0 eq {1} { med} ifelse def
+ /fillsat alt 0 eq {med} {1} ifelse def
+ /eosat alt 0 eq {1} {med} ifelse def
+ /backbright alt 0 eq {high} {med} ifelse def
+ /eobright alt 0 eq {high} {med} ifelse def
+ /fillbright alt 0 eq {med} {high} ifelse def
+ constroke 0 eq {
+ /strokesat 1 def
+ /strokebright high def
+ }
+ {
+ /strokesat high def
+ /strokebright medlow def
+ } ifelse
+} def
+/vivpastel {
+ /backlight rand 2 mod def
+ /backsat backlight 0 eq {medlow} {1} ifelse def
+ /eosat backlight 0 eq {medlow} {1} ifelse def
+ /fillsat backlight 0 eq {1} {medlow} ifelse def
+ /fillbright high def
+ /backbright high def
+ /eobright high def
+ constroke 0 eq {
+ /strokesat 1 def
+ /strokebright high def
+ }
+ {
+ /strokesat high def
+ /strokebright medlow def
+ } ifelse
+} def
+
+/medpastel {
+ /alt rand 2 mod def
+ /backsat alt 0 eq {medlow} {med} ifelse def
+ /eosat alt 0 eq {medlow} {med} ifelse def
+ /fillsat alt 0 eq {med} {medlow} ifelse def
+ /fillbright alt 0 eq { high } {med} ifelse def
+ /backbright alt 0 eq {med} { high } ifelse def
+ /eobright alt 0 eq {med} { high } ifelse def
+ constroke 0 eq {
+ /strokebright high def
+ /strokesat medlow def
+ }
+ {
+ /strokebright low def
+ /strokesat high def
+ } ifelse
+} def
+
+/maxcon {
+ rand 2 mod 1 eq {
+ /backsat 0 def
+ /backbright 0 def
+ /eosat 0 def
+ /eobright 0 def
+ /fillsat 0 def
+ /fillbright 1 def
+ /strokebright 1 def
+ /strokesat 0 def
+ }
+ {
+ /backsat 0 def
+ /backbright 1 def
+ /eosat 0 def
+ /eobright 1 def
+ /fillsat 0 def
+ /fillbright 0 def
+ /strokebright 0 def
+ /strokesat 0 def
+ }
+ ifelse
+} def
+
+/monochrome {
+ /fillhue hue closevary def
+ /strokehue hue closevary def
+ /eohue hue closevary def
+ /backhue hue def
+} def
+
+/blackandwhite {
+ /fillhue 1 def
+ /eohue 0 def
+ /backhue 0 def
+ /strokehue 1 def
+} def
+
+
+/freecolor {
+ /fillhue anyrand def
+ /strokehue anyrand def
+ /eohue anyrand def
+ /backhue anyrand def
+} def
+
+/purple {
+ /fillhue rand 15 mod 80 add 100 div def
+ /backhue rand 15 mod 80 add 100 div def
+ /strokehue rand 15 mod 80 add 100 div def
+ /eohue rand 15 mod 80 add 100 div def
+ /backhue rand 15 mod 80 add 100 div def
+} def
+
+/comptwo {
+ /fillhue hue closevary def
+ /strokehue hue .5 add dup 1 gt {1 sub} if def
+ /backhue strokehue def
+ /eohue strokehue closevary def
+} def
+
+/compthree {
+ /backhue hue def
+ /strokehue hue 1 3 div add dup 1 gt {1 sub} if closevary def
+ /fillhue strokehue closevary def
+ /eohue hue 1 3 div sub dup 1 lt { 1 add} if closevary def
+} def
+
+/origcolor {
+ /backhue hue def
+ /strokehue
+ hue 1000 mul cvi 3 mod dup 1 eq
+ {hue closevary}
+ {2 eq
+ {rand 999 mod 1000 div}
+ {hue .5 add dup 1 gt {1 sub} if }
+ ifelse
+ }
+ ifelse def
+ /fillhue hue 1000 mul cvi 3 mod dup 1 eq
+ {hue closevary}
+ {2 eq
+ {rand 999 mod 1000 div}
+ {hue .5 add dup 1 gt {1 sub} if }
+ ifelse
+ }
+ ifelse
+ def
+ /eohue hue 1000 mul cvi 2 mod 1 eq
+ {hue closevary}
+ {rand 999 mod 1000 div}
+ ifelse def
+} def
+
+/harmtwo {
+ /fillhue hue closevary def
+ /backhue hue def
+ /strokehue hue .2 add dup 1 gt {1 sub} if closevary def
+ /eohue strokehue closevary def
+} def
+
+/harmfour {
+ /fillhue hue closevary def
+ /backhue hue .1 add dup 1 gt {1 sub} if def
+ /strokehue hue .2 add dup 1 gt {1 sub} if closevary def
+ /eohue hue .1 sub dup 1 lt {1 add} if closevary def
+} def
+
+/closeharm {
+ /fillhue hue def
+ /backhue hue .05 add dup 1 gt {1 sub} if closevary def
+ /strokehue hue .1 add dup 1 gt {1 sub} if closevary def
+ /eohue hue .05 sub dup 0 lt {1 add} if closevary def
+} def
+
+
+/high {100 rand 25 mod sub 100 div } def
+/med { rand 33 mod 33 add 100 div } def
+/medhigh {100 rand 50 mod sub 100 div } def
+/medlow {rand 50 mod 100 div } def
+/low { rand 25 mod 100 div} def
+/anyrand { rand 100 mod 100 div } def
+/closevary {rand 70 mod rand 100 mod sub 1000 div add} def
+
+%rainbow
+% {/colorfill {fillhue 1 1 sethsbcolor fill} def}
+ /colorfill {fillhue fillsat fillbright sethsbcolor fill } def
+%ifelse
+/colorstroke {strokehue strokesat strokebright sethsbcolor stroke } def
+/eocolorfill {eohue eosat eobright sethsbcolor eofill } def
+/backfill{ backhue backsat backbright sethsbcolor fill } def
+
+/xstep { xrange xtimes 1 sub div x 1 sub mul } def
+/ystep { yrange ytimes 1 sub div y 1 sub mul} def
+
+/functionarray [
+ {sin abs}
+ {sin }
+ {cos }
+ {cos abs}
+ {sin dup mul }
+ {cos dup mul }
+ {sin abs sqrt }
+ {cos abs sqrt }
+] def
+
+/range { /top exch def /bottom exch def /number exch def
+% number is between -1 and 1
+ /rangesize top bottom sub def
+ number 1 add 2 div
+ % number is now between 0 and 1
+ rangesize mul
+ bottom add
+ } def
+
+/drawone {
+ /radius
+ width height lt {width 3 div} {height 3 div} ifelse
+ def
+ seed srand
+ 0 0 moveto
+ /origmatrix [ 0 0 0 0 0 0 ] currentmatrix def
+ [ % xstep function ystep function2 add .4 1.3 range
+ 1
+ ystep function xstep function add -.25 .25 range
+ ystep function3 xstep function2 add -.5 .5 range
+% xstep function4 ystep function mul .4 1.3 range
+ 1
+ 0
+ 0
+ ]
+ concat
+ twist {twistdeg rotate} if
+ part colorfill
+ origmatrix setmatrix
+ rainbow
+ {/fillhue fillhue rainrange xtimes ytimes mul div add dup 1 gt {1 sub} if def}
+ if
+
+} def
+
+/notdrawone {
+ seed srand
+ twist {/twistdeg rand 360 mod def} if
+ nnrand {/nn rand 6 mod 3 add def} if
+ /x1 rand width 3 div cvi mod width 8 div add def
+ /y1 rand height 3 div cvi mod height 8 div add def
+ rand 3 mod dup 1 eq
+ {pop /x2 rand width 2 div cvi mod def
+ /y2 rand height 2 div cvi mod def}
+ { 2 eq
+ {/x2 y1 def /y2 x1 def}
+ {/x2 y1 width mul height div def /y2 x1 height mul width div def}
+ ifelse
+ }
+ ifelse
+ /radius width height gt {width} {height} ifelse 2.5 div def
+ /stripe rand width 10 div cvi mod 2 add def
+ starcompensate { /stripe stripe 2 mul def /radius radius 10 nn div mul def } if
+ /i 1 def
+ /repeats radius stripe div cvi 1 add def
+ /nnincr 1 def
+ repeats {
+ colorvary {colorfam colorway} if
+ /i i 1 add def
+ /radius radius stripe sub def
+
+ } repeat
+} def
+
+
+/page {
+ clippath pathbbox /ury exch def /urx exch def /lly exch def /llx exch
+def
+/pagewidth urx llx sub def
+/pageheight ury lly sub def
+0 0 moveto
+ llx lly translate
+ /outerwidth
+ pagewidth inwidth div
+ def
+ /outerheight
+ pageheight inheight div
+ def
+ /width
+ outerwidth xtimes div
+ def
+ /height
+ outerheight ytimes div
+ def
+
+
+
+ /size
+ width height gt {width} {height} ifelse
+ def
+ inwidth {
+ inheight {
+
+ /seed rand def
+ /hue rand 999 mod 1000 div def
+ colorway colorfam
+ /x 1 def /y 1 def
+ nnrand {/nn rand 6 mod 3 add def} if
+ /twistdeg rand 360 mod def
+
+ /function functionarray rand functionarray length mod get def
+ /function2 functionarray rand functionarray length mod get def
+ /function3 functionarray rand functionarray length mod get def
+ /function4 functionarray rand functionarray length mod get def
+
+/xrange [ 90 180 270 360 180 360 ] rand 6 mod get def
+/yrange [ 90 180 270 360 180 360 ] rand 6 mod get def
+ initclip
+ newpath
+ 0 0 moveto
+ outerwidth 0 rlineto
+ 0 outerheight rlineto
+ outerwidth neg 0 rlineto
+ backfill
+
+ xtimes {
+ ytimes{
+ /y y 1 add def
+ width 2 div height 2 div translate
+ drawone
+ width 2 div neg height 2 div neg translate
+ 0 height translate
+ } repeat
+
+ /y 1 def
+ /x x 1 add def
+ width height ytimes mul neg translate
+
+ } repeat
+
+ width xtimes mul neg outerheight translate
+ } repeat
+ outerwidth outerheight inheight mul neg translate
+ } repeat
+
+ } def
+
+page showpage
+clear cleardictstack
+vasarelysave restore
diff --git a/Master/xemtex/doc/ghostscript/examples/waterfal.ps b/Master/xemtex/doc/ghostscript/examples/waterfal.ps new file mode 100644 index 00000000000..0236f8f06a2 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/examples/waterfal.ps @@ -0,0 +1,80 @@ +%! +/waterfalsave save def % prevent residual side effects +% Copyright (C) 1992, 1993, 1996 Aladdin Enterprises. All rights reserved. +% +% This program is free software; you can redistribute it and/or modify it +% under the terms of the GNU General Public License as published by the +% Free Software Foundation; either version 2 of the License, or (at your +% option) any later version. +% +% This program is distributed in the hope that it will be useful, but +% WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +% Public License for more details. +% +% You should have received a copy of the GNU General Public License along +% with this program; if not, write to the Free Software Foundation, Inc., +% 59 Temple Place, Suite 330, Boston, MA, 02111-1307. + +% $Id: waterfal.ps,v 1.3.2.1.2.1 2003/04/12 14:02:38 giles Exp $ +% waterfal.ps +% This file produces a 'waterfall' printout of fonts at various sizes. + + +% Specify any desired set of up to 3 fonts here. +/Fonts [/Courier /Helvetica] def + +% Specify any desired set of point sizes here. +% The sum of the sizes should not exceed (roughly) 100. +% For sizes larger than about 16, some characters may fall off the page. +/Sizes [6 7 8 9 10 11 12 14 16] def + +/eol + { currentfont /FontBBox get aload pop + exch pop sub exch pop 0 exch + % Many Ghostscript fonts have incorrect FontBBoxes.... + pop -1000 + 1.15 mul currentfont /FontMatrix get dtransform + translate + 0 0 moveto + } def + +(landscap.ps) runlibfile +clippath pathbbox newpath +/ury exch def /urx exch def /lly exch def /llx exch def +llx 18 add ury 18 sub translate +% Read the current Y resolution without using Ghostscript-specific operators. +gsave initmatrix 0 72 dtransform abs exch abs exch .max grestore +round cvi /dpi exch def +QUIET not + { (Creating waterfall printout at ) print dpi =only ( DPI.\n) print flush + } +if + +newpath 0 setgray +/Courier findfont 20 scalefont setfont + +Fonts + { save exch + QUIET not { dup ==only flush } if + findfont /basefont exch def + basefont 20 scalefont setfont eol + basefont /FontName get =string cvs show + ( ) show dpi =string cvs show ( DPI) show + Sizes + { QUIET not { ( ) print dup =only flush } if + dup /size exch def basefont exch scalefont setfont eol + size =string cvs show ( ) show + (qwertyuiop-asdfghjkl_zxcvbnm ) show + (QWERTYUIOP+ASDFGHJKL/ZXCVBNM ) show + (1470258369 .,:;?!) show + } forall + QUIET not { () = flush } if + matrix currentmatrix aload pop + 7 -1 roll restore + 6 array astore setmatrix + } forall + +showpage +clear cleardictstack +waterfalsave restore diff --git a/Master/xemtex/doc/ghostscript/gs-vms.hlp b/Master/xemtex/doc/ghostscript/gs-vms.hlp new file mode 100644 index 00000000000..9156b6af303 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/gs-vms.hlp @@ -0,0 +1,293 @@ +1 gs + gs - GNU Ghostscript interpreter/previewer +! $Id: gs-vms.hlp,v 1.12.2.10.2.5 2003/05/17 14:39:00 giles Exp $ +! Ghostscript version 7.07, 17 May 2003 + Usage: + $ gs [options] [file ...] + + Ghostscript is an implementation of Adobe Systems' PostScript (tm) + and Portable Document Format (PDF) languages. Gs reads files in sequence + and executes them as Ghostscript programs. After doing this, it reads + further input from the standard input stream (normally the keyboard). + Each line is interpreted separately. To exit from the interpreter, + enter the `quit' command. The interpreter also exits gracefully if it + encounters end-of-file. Typing the interrupt character (e.g. Control-C) + is also safe. + +2 Description + The interpreter recognizes several switches described below, which + may appear anywhere in the command line and apply to all files + thereafter. + + You can get a help message by invoking Ghostscript with the -h + or -? option. This message also lists the available devices. + + Ghostscript may be built with multiple output devices. Ghostscript + normally opens the first one and directs output to it. To use + device xyz as the initial output device, include the switch + "-sDEVICE=xyz" + in the command line. Note that this switch must precede the first + .ps file, and only its first invocation has any effect. For example, + for printer output in a normal configuration that includes an Epson + printer driver, you might use the command + gs "-sDEVICE=epson" myfile.ps + instead of just + gs myfile.ps + Alternatively, you can type + (epson) selectdevice + (myfile.ps) run + All output then goes to the printer instead of the display until + further notice. You can switch devices at any time by using the + selectdevice procedure, e.g., + (vga) selectdevice + or + (epson) selectdevice + As yet a third alternative, you can define a logical name GS_DEVICE + as the desired default device name. The order of precedence for these + alternatives, highest to lowest, is: + selectdevice + (command line) + GS_DEVICE + (first device in build list) + + To select the density on a printer, use + gs "-sDEVICE=<device>" -r<xres>x<yres> + For example, on a 9-pin Epson-compatible printer, you can get the + lowest-density (fastest) mode with + gs "-sDEVICE=epson" -r60x72 + and the highest-density mode with + gs "-sDEVICE=epson" -r240x72. + + If you select a printer as the output device, Ghostscript also + allows you to control where the device sends its output. Normally, + output goes directly to a scratch file on Unix and VMS systems. To + send the output to a series of files foo1.xyz, foo2.xyz, ..., use + the switch + "-sOutputFile=foo%d.xyz" + The %d is a printf format specification; you can use other formats + like %02d. Each file will receive one page of output. Alternatively, + to send the output to a single file foo.xyz, with all the pages con- + catenated, use the switch + "-sOutputFile=foo.xyz" + + To find out what devices are available, type + devicenames == + after starting up Ghostscript. Alternatively, you can use the -h or -? + switch in the command line; the help message also lists the available + devices. + + To select a different paper size, use the command line switch + "-sPAPERSIZE=a_known_paper_size" + e.g., + "-sPAPERSIZE=a4" + or + "-sPAPERSIZE=legal" + + As of this printing, the known paper sizes, defined in gs_statd.ps, are: + + PAPERSIZE X" Y" X cm Y cm + ____________________________________________________ + 11x17 11" 17" 27.94 43.18 + a0 33.0556" 46.7778" 83.9611 118.816 + a10 1.02778" 1.45833" 2.61056 3.70417 + a1 23.3889" 33.0556" 59.4078 83.9611 + a2 16.5278" 23.3889" 41.9806 59.4078 + a3 11.6944" 16.5278" 29.7039 41.9806 + a4 8.26389" 11.6944" 20.9903 29.7039 + a5 5.84722" 8.26389" 14.8519 20.9903 + a6 4.125" 5.84722" 10.4775 14.8519 + a7 2.91667" 4.125" 7.40833 10.4775 + a8 2.05556" 2.91667" 5.22111 7.40833 + a9 1.45833" 2.05556" 3.70417 5.22111 + archA 9" 12" 22.86 30.48 + archB 12" 18" 30.48 45.72 + archC 18" 24" 45.72 60.96 + archD 24" 36" 60.96 91.44 + archE 36" 48" 91.44 121.92 + b0 39.3889" 55.6667" 100.048 141.393 + b1 27.8333" 39.3889" 70.6967 100.048 + b2 19.6944" 27.8333" 50.0239 70.6967 + b3 13.9167" 19.6944" 35.3483 50.0239 + b4 9.84722" 13.9167" 25.0119 35.3483 + b5 6.95833" 9.84722" 17.6742 25.0119 + flsa 8.5" 13" 21.59 33.02 + flse 8.5" 13" 21.59 33.02 + halfletter 5.5" 8.5" 13.97 21.59 + ledger 17" 11" 43.18 27.94 + legal 8.5" 14" 21.59 35.56 + letter 8.5" 11" 21.59 27.94 + note 7.5" 10" 19.05 25.4 + + Note that the B paper sizes are ISO sizes: for information about using + JIS B sizes, see `Use.htm'. + +2 Initialization_files + When looking for the initialization files (gs_*.ps), the files related + to fonts, or the file for the `run' operator, Ghostscript first tries + opening the file with the name as given (i.e., using the current + working directory if none is specified). If this fails, and the file + name doesn't specify an explicit directory or drive, Ghostscript will + try directories in the following order: + + 1. The directory/ies specified by the -I switch(es) in the command + line (see below), if any; + 2. The directory/ies specified by the GS_LIB logical, if any; + 3. The directory/ies specified by the GS_LIB_DEFAULT macro in the + Ghostscript makefile. + + Each of these (GS_LIB_DEFAULT, GS_LIB, and -I parameter) may be either + a single directory, or a list of directories separated by a `:'. + +2 X_resources + Ghostscript looks for the following resources under the program name + `Ghostscript': + + borderWidth + The border width in pixels (default = 1). + + borderColor + The name of the border color (default = black). + + geometry + The window size and placement, WxH+X+Y (default is NULL). + + xResolution + The number of x pixels per inch (default is computed from + WidthOfScreen and WidthMMOfScreen). + + yResolution + The number of y pixels per inch (default is computed from + HeightOfScreen and HeightMMOfScreen). + + useBackingPixmap + Determines whether backing store is to be used for saving display + window (default = true). + + See the file `Use.htm' for a more complete list of resources. + + To set these resources, put them in a file (such as + SYS$Login:ghostscript.dat) in the following form: + + Ghostscript*geometry: 612x792-0+0 + Ghostscript*xResolution: 72 + Ghostscript*yResolution: 72 + +2 Options + Note that VMS will convert all command line arguments to lower case + if they are not within quotes. Therefore, if a certain command does + not work, try again but with quotes around it. + + -- filename arg1 ... + Takes the next argument as a file name as usual, but takes all + remaining arguments (even if they have the syntactic form of switches) + and defines the name ARGUMENTS in userdict (not systemdict) as an + array of those strings, before running the file. When Ghostscript + finishes executing the file, it exits. + + -Dname=token + -dname=token + Define a name in systemdict with the given definition. The token must + be exactly one token (as defined by the `token' operator) and must not + contain any whitespace. + + -Dname + -dname + Define a name in systemdict with value=null. + + -Sname=string + -sname=string + Define a name in systemdict with a given string as value. This is + different from -d. For example, -dname=35 is equivalent to the + program fragment + /name 35 def + whereas -sname=35 is equivalent to + /name (35) def + + -q + Quiet startup - suppress normal startup messages, and also do the + equivalent of -dQUIET. + + -gnumber1Xnumber2 + Equivalent to -dDEVICEWIDTH=number1 and -dDEVICEHEIGHT=number2. This is + for the benefit of devices (such as X11 windows) that require (or allow) + width and height to be specified. + + -rnumber + -rnumber1Xnumber2 + Equivalent to -dDEVICEXRESOLUTION=number1 and -dDEVICEYRESOLUTION=number2 + This is for the benefit of devices (such as printers) that support + multiple X and Y resolutions. (If only one number is given, it is used + for both X and Y resolutions.) + + -Idirectories + Adds the designated list of directories at the head of the search path + for library files. + + Note that gs_init.ps makes systemdict read-only, so the values of names + defined with -D/d/S/s cannot be changed (although, of course, they can + be superseded by definitions in userdict or other dictionaries.) + +2 Special_names + + -dDISKFONTS + Causes individual character outlines to be loaded from the disk the + first time they are encountered. (Normally Ghostscript loads all the + character outlines when it loads a font.) This may allow loading more + fonts into RAM, at the expense of slower rendering. + + -dNOCACHE + Disables character caching. Only useful for debugging. + + -dNOBIND + Disables the `bind' operator. Only useful for debugging. + + -dNODISPLAY + Suppresses the normal initialization of the output device. This may be + useful when debugging. + + -dNOPAUSE + Disables the prompt and pause at the end of each page. This may be + desirable for applications where another program is `driving' + Ghostscript. + + -dNOPLATFONTS + Disables the use of fonts supplied by the underlying platform (e.g. + X Windows). This may be needed if the platform fonts look undesirably + different from the scalable fonts. + + -dSAFER + Disables the deletefile and renamefile operators, and the ability to + open files in any mode other than read-only. This may be desirable + for spoolers or other sensitive environments. + + -dWRITESYSTEMDICT + Leaves systemdict writable. This is necessary when running special + utility programs such as font2c and pcharstr, which must bypass normal + PostScript access protection. + + -sDEVICE=device + Selects an alternate initial output device, as described above. + + -sOutputFile=filename + Selects an alternate output file for the initial output device, as + described above. + +2 Files +!!! Change + GS_Root:[Ghostscript.gs4_0] + Startup-files, utilities, and basic font definitions. + + GS_Root:[Ghostscript.Fonts4_0] + Additional font definitions. + + GS_Root:[Ghostscript.gs4_0.Examples] + Demo Ghostscript files. + + GS_Root:[Ghostscript.gs4_0.Doc] + Assorted document files. +!!! Change +2 See_also + The various Ghostscript document files (above). + +2 Bugs + See the network news group comp.lang.postscript. diff --git a/Master/xemtex/doc/ghostscript/gs.css b/Master/xemtex/doc/ghostscript/gs.css new file mode 100644 index 00000000000..d59976ed00e --- /dev/null +++ b/Master/xemtex/doc/ghostscript/gs.css @@ -0,0 +1,73 @@ +/* This is the default Ghostscript stylesheet */ + +body +{ + color: black; + background-color: white; +} + +h1,h2,h3,h4,h5,h6 +{ + font-family: sans-serif; +} + +/* This needs a patched html file else you have it all over the place */ +/* we only want this for the "visual header" at the page top */ +h1 +{ + text-align: center; + background-color: #CCCC00; +} + +/* Number the h2/h3 -- doesn't work on v4/5 browsers */ +h2 +{ + counter-increment: h2-count; + counter-reset: h3-count; +} + +h2:before +{ + content: counter(h2-count) " "; +} + +h3 +{ + counter-increment: h3-count; +} + +h3:before +{ + content: counter(h2-count) "." counter(h3-count) " "; + +} + +tt +{ + color: rgb(40%,24%,24%); +} + +a > tt, a > b > tt +{ + color: blue; +} + +a +{ + color: blue; +} + +a.offsite +{ + font-style: oblique; +} + +a:visited +{ + color: rgb(60%,0%,30%); +} + +a:hover, a:active, a:focus +{ + background: #FFFFAA; +} diff --git a/Master/xemtex/doc/ghostscript/gsdoc.el b/Master/xemtex/doc/ghostscript/gsdoc.el new file mode 100644 index 00000000000..76be2c15fe4 --- /dev/null +++ b/Master/xemtex/doc/ghostscript/gsdoc.el @@ -0,0 +1,701 @@ +;; gsdoc.el +;; +;; GNU emacs (19.34) functions to help working with the HTML form of +;; Ghostscript documentation. +;; +;; Pete Kaiser 8 September 1998 V1.2 +;; 2 December 1999 V1.3 Correct improper "--" to "==" +;; in HTML marker comments +;;============================================================ +;; One global key setting, which runs the function to bind some keys +;; locally -- presumably in a buffer containing HTML code. Plus that +;; function itself. + +(global-set-key [?\C-\S-k] 'gskeys) + +(defun gskeys () + +"Set the keys in this buffer to use with Ghostscript HTML docs." + +(interactive) +(local-set-key [?\C-\S-b] 'gs-bold) +(local-set-key [?\C-\S-c] 'gs-code) +(local-set-key [?\C-\S-e] 'gs-emphatic) +(local-set-key [?\C-\S-g] 'gs-get-anchor) +(local-set-key [?\C-\S-h] 'gs-href) +(local-set-key [?\C-\S-i] 'gs-italic) +(local-set-key [?\C-\S-m] 'gs-mailto) +(local-set-key [?\C-\S-n] 'gs-name) +(local-set-key [?\C-\S-p] 'gs-put-anchor) +(local-set-key [?\C-\S-q] 'gs-quote) +(local-set-key [?\C-\S-r] 'gs-row-of-table) +(local-set-key [?\C-\S-s] 'gs-selfref) +(local-set-key [?\C-\S-t] 'gs-table) +(local-set-key [?\C-\S-u] 'gs-tag) +(local-set-key [?\C-\S-x] 'gs-example) +) + +;;============================================================ +;; Each of these next few functions just wraps a region in a +;; <TAG>...</TAG>, or two nested tags. Where there are two, the first one +;; is inner. See the inner function ~gsregion. + +(defun gs-bold () "Make text strong (bold)." +(interactive) +(~gsregion "b")) + +(defun gs-code () "Make text strong code (bold TT)." +(interactive) +(~gsregion "tt") +(~gsregion "b")) + +(defun gs-emphatic () "Make text emphatic (bold italic)." +(interactive) +(~gsregion "em") +(~gsregion "b")) + +(defun gs-italic () "Make text italic." +(interactive) +(~gsregion "em")) + +;;============================================================ + +(defun gs-quote () + +"Indent a region with BLOCKQUOTE and separate it with empty lines from +surrounding text." + +(interactive) + +(save-restriction (narrow-to-region (region-beginning) (region-end)) + (goto-char (point-min)) (insert "\n\n") + (push-mark (1+ (point-min)) t) + (goto-char (point-max)) + (~gsregion "blockquote") + (insert "\n\n") + ) +) + +;;============================================================ + +(defun gs-example () + +"Make an indented literatim example BLOCKQUOTE PRE and separate it with +empty lines from surrounding text." + +(interactive) + +(save-restriction (narrow-to-region (region-beginning) (region-end)) + (goto-char (point-min)) (insert "\n") + (push-mark (point-min) t) + (goto-char (point-max)) + (~gsregion "pre") + (~gsregion "blockquote") + (insert "\n") + ) +) + +;;============================================================ + +(defun gs-get-anchor () + +"Beginning at the head of this line, pick up the next anchor name for later +use along with its HTML file name. This is useful when picking up an +anchor name from a file in one buffer and using it in another buffer +containing a different file." + +(interactive) + +;; From the beginning of this line find and pick up the next non-empty +;; anchor, which might, of course not be right here -- though that's how it +;; ought to be used, to pick up an anchor for immediate use. The regular +;; expression picks up only the name itself. + +(beginning-of-line) +(re-search-forward "<a name=\"?\\([^\">]+\\)\"?></a>" nil t) +(setq gs-anchor (buffer-substring (match-beginning 1) (match-end 1))) + +;; Get the name of this buffer, treating it as the filename. + +(setq gs-anchor-file (buffer-name)) +) + +;;============================================================ + +(defun gs-href () + +"Wrap a region in an empty link and leave point in the middle of the +emptiness to write the link. Maybe some day read the URL and put it +there." + +(interactive) + +(save-restriction + (narrow-to-region (region-beginning) (region-end)) + (goto-char (point-min)) (insert "<a href=\"#\">") + (setq HREF (- (point) 2)) + (goto-char (point-max)) (insert "</a>") + (goto-char HREF) + ) +) + +;;============================================================ + +(defun gs-mailto () + +"Turn an address into a proper \"mailto:\" visually bracketed with <>." + +(interactive) + +(save-restriction + (narrow-to-region (region-beginning) (region-end)) + (setq gs-address (buffer-substring (point-min) (point-max))) + (goto-char (point-min)) (insert "<<a href=\"mailto:") + (goto-char (point-max)) (insert "\">" gs-address "</a>>") + ) +) + +;;============================================================ + +(defun gs-tag (Tag) + +"Bracket a region with some arbitrary tag read from the minibuffer, leaving +point right after the opening word of the opening tag, and the end of the +region at the end of the closing tag. Leaving point there makes it +possible, for instance, to enter additional matter in a <FONT> tag. Get to +the end of a region with ^x-^x." + +(interactive "*sTag: ") + + (~gsregion Tag) + (exchange-point-and-mark) (forward-word 1) +) + +;;============================================================ + +(defun gs-toc () + +"[Re]build the table of contents by picking up all the <Hn> lines and +converting them to properly indented <UL> entries, placing the TOC within +the standard TOC markers. Note that several of the original Ghostscript +HTML files have hand-modified TOCs, so it's wise to check before running +this function. It can be run from anywhere within the HTML file. + +This function relies on the specific format of the structure comments for +the table of contents, which are set by the g~marker function used in +defvars run when this package is loaded." + +(interactive) + +(setq g~html-buffer (buffer-name)) + +(save-restriction (save-excursion + (widen) + +;; Since we're building the TOC, delete any current TOC. Locate the place +;; for the TOC using the standard markers, deleting everything between the +;; TOC-beginning and TOC-end markers. The new TOC is built entirely in the +;; work buffer before being copied into the HTML buffer at that point. + + (goto-char (point-min)) + (search-forward g~toc-begin nil t) + (next-line 1) (beginning-of-line) (setq g~toc-insert (point)) + (search-forward g~toc-end nil t) + (beginning-of-line) (delete-region g~toc-insert (point)) + +;; Empty the work buffer by copying nothing into it. + + (copy-to-buffer gs-work-buffer 1 1) + +;; Now collect all the following header lines into a buffer to work on +;; them. The later append-to-buffer needs point to be in the middle of the +;; empty list, so go there before entering the work buffer. + + (save-excursion (while (re-search-forward "^<h[1-6][^>]*>" nil t) + (beginning-of-line) (setq BOH (point)) + (re-search-forward "</h[1-6]>\n" nil t) + (append-to-buffer gs-work-buffer BOH (point)) + )) + (goto-char g~toc-insert) + +;; All the useful header lines should be in the work buffer now. + + (save-excursion + (set-buffer gs-work-buffer) + +;; Formatting as list entries: insert <ul> when the level deepens and </ul> +;; when it rises. + + (goto-char (point-min)) + (while (search-forward "</a>" nil t) (replace-match "")) + (goto-char (point-min)) + (while (re-search-forward "</h[1-6]>" nil t) (replace-match "</a>")) + (goto-char (point-min)) + (while (re-search-forward "<a name=\"" nil t) (replace-match "<a href=\"#")) + +;; Change <h[1-6]> to <li>, inserting <ul>...</ul> as needed. Pick up the +;; upmost level from the first header, usually <h1>, and save a copy to +;; use to insert any terminating </ul>. + + (goto-char (point-min)) + (re-search-forward "^<h\\([1-6]\\)[^>]*>" nil t) + (setq First (string-to-number + (buffer-substring (match-beginning 1) (match-end 1)))) + (setq Previous First) + (replace-match "<li>" t t) + +;; Got the first one, now handle the rest. + + (while (re-search-forward "^<h\\([1-6]\\)[^>]*>" nil t) + (setq This (string-to-number + (buffer-substring (match-beginning 1) (match-end 1)))) + (setq Hold This) + (replace-match "<li>" t t) (beginning-of-line) + +;; No point being too fancy with conditionals: the "while" statements here +;; make at most one logically unnecessary test. + + (while (> This Previous) (insert "<ul>\n") (setq This (1- This))) + (while (< This Previous) (insert "</ul>\n") (setq This (1+ This))) + (setq Previous Hold) + ) + +;; Done with the loop. Clean up by inserting at the end any </ul> needed +;; to get back to the top level. + + (goto-char (point-max)) + (while (> Previous First) (insert "</ul>\n") (setq Previous (1- Previous))) + +;; Finally add the trailing whitespace and leading whitespace and header line. + + (insert "</ul></blockquote>\n\n") + (goto-char (point-min)) + (insert "\n<h2>Table of contents</h2>\n\n<blockquote><ul>\n") + +;; The TOC is now entirely built in the work buffer. Move it to where it's +;; supposed to be in the original buffer. + + (append-to-buffer g~html-buffer (point-min) (point-max)) + ) + )) +) + +;;============================================================ + +(defun gs-name () + +"Insert a name anchor at point and leave point ready to enter the anchor's +name. Anchors are always empty (that is, <a name=...></a>)." + +(interactive) + +(insert "<a name=\"\"></a>") +(backward-char 6) +) + +;;============================================================ + +(defun gs-put-anchor () + +"Insert around the current region the last anchor picked up with +gs-get-anchor. This includes the HTML file name if the href is put in a +file other than the anchor." + +(interactive) + +(save-restriction + (narrow-to-region (region-beginning) (region-end)) + (goto-char (point-min)) + (insert (concat + "<a href=\"" + +;; Insert the filename (buffer name) picked up by gs-get-anchor only if +;; this is a different buffer. + + (if (string-equal gs-anchor-file (buffer-name)) "" gs-anchor-file) + +;; And finish unconditionally with the specific anchor name. + + "#" gs-anchor "\">")) + (goto-char (point-max)) (insert "</a>")) +) + +;;============================================================ + +(defun gs-row-of-table () + +"Set up a row of a table from the line containing point. + +Insert the right things at beginning and end, and in between convert tab +and \"|\" into column breaks with a nonbreaking space in between -- which +means that no entry can contain a tab or \"|\". Format the HTML nicely +for readability. + +Between each two substantive columns this function puts a column containing +a single nonbreaking space to provide a visual break. Generally in the +first row of a table those columns should be given enough NBSPs to make +the table look right on screen and when converted to text, but this has to +be done by hand." + +(interactive) + +(save-restriction + (end-of-line) (setq EOL (point)) + (beginning-of-line) (narrow-to-region (point) EOL) + (insert "<tr valign=top>\t<td>") + (while (re-search-forward "[|\t]" nil t) + (replace-match "\n\t<td> \n\t<td>" t t)) + (goto-char (point-max)) + ) +(next-line 1) (beginning-of-line) +) + +;;============================================================ + +(defun gs-selfref () + +"Wrap an URL to make it its own link. This is useful for links that should +be visible when converted to text." + +(interactive) + +(save-restriction + (narrow-to-region (region-beginning) (region-end)) + (goto-char (point-min)) + (if (not (looking-at "http:\\|ftp:")) (insert "http://")) + (setq g~url (buffer-substring (point-min) (point-max))) + (goto-char (point-min)) + (insert "<a href=\"") + (goto-char (point-max)) (insert "\">" g~url "</a>") + ) +) + +;;============================================================ + +(defun gs-table () + +"Set up an indented table around this region, leaving plenty of white space +around the table within the HTML. The number of columns in the table is +hardcoded here as 3, so that number must be changed by hand if the table +has more than 3 columns. See gs-row-of-table for how rows are built: a +table with N visible columns generally has 2N-1 HTML columns, including the +columns that provide vertical white space." + +(interactive) + +(save-restriction + (narrow-to-region (region-beginning) (region-end)) + (indent-rigidly (region-beginning) (region-end) -80) + (goto-char (point-min)) + (insert (concat + "\n\n<blockquote><table cellpadding=0 cellspacing=0>\n" + "<tr><th colspan=3 bgcolor=\"#CCCC00\"><hr><font size=\"+1\">XXXXXXXXXX</font><hr>\n" + "<tr valign=bottom>\n" + "\t<th align=left>\n" + "\t<td> \n" + "\t<th align=left>\n" + "<tr>\t<td colspan=3><hr>\n" + )) + (goto-char (point-max)) + (insert "</table></blockquote>\n") + ) +) + +;;============================================================ + +(defun gs-text-chars () + +"Prepare text for inclusion in HTML by converting \"&\", \"<\", and \">\" into +their HTML special forms. The function acts from point to end-of-region or +end-of-buffer, whichever comes first. + +This function is NOT idempotent -- running it twice on the same text will +certainly do the wrong thing, unless at first the text contained none of +those characters." + +(interactive) +(setq BEGIN (point)) + +;; Replace significant characters: "&", "<", and ">". + +(while (search-forward "&" nil t) (replace-match "&" t t)) + +(goto-char BEGIN) +(while (search-forward "<" nil t) (replace-match "<" t t)) + +(goto-char BEGIN) +(while (search-forward ">" nil t) (replace-match ">" t t)) + +(goto-char BEGIN) +) + +;;============================================================ + +(defun gs-wrap-textfile () + +"Prepare a text file for inclusion between <pre> and </pre>, then put a +header and footer around it. One would generally run this function on a +buffer containing only an original text file; it is how the original +history and news files were first prepared. At this point it's likely to +be most useful in preparing new sections for the news document." + +(interactive) + +(widen) + +;; First prepare the entire text by replacing special characters. + +(goto-char (point-min)) +(gs-text-chars) + +;; At the end of the file, end as-is text and add the standard footer. + +(goto-char (point-max)) +(backward-word 1) (next-line 1) (beginning-of-line) +(delete-region (point) (point-max)) +(insert "\n</pre>\n") +(insert-file "Footer.htm") + +;; At the beginning of the file, begin as-is text and delete everything +;; up to the identity string (if any), saving the identity string. + +(goto-char (point-min)) +(insert "<pre>\n") (setq g~pre-point (point)) +(setq g~ID " [No pre-existing ID] ") +(if (re-search-forward "^\\$Id:\\( [^ ]+ \\)\\$" nil t) (progn + (setq g~ID (buffer-substring (match-beginning 1) (match-end 1))) + (next-line 1) (beginning-of-line) (delete-region g~pre-point (point)) + )) + +;; Insert the standard header and fill in the identity string. + +(goto-char (point-min)) (insert-file "Header.htm") +(goto-char (point-min)) (search-forward "<!--" nil t) +(delete-horizontal-space) (insert g~ID) +(search-forward "<pre>\n" nil t) +) + +;;============================================================ + +(defun ~gsregion (Tag) + +"Tag a region, leaving point at its end and the region around the whole +thing including the new surrounding tags; thus invoking this function twice +successively makes the first invocation the inner tags and the second the +outer. + +Not intended for interactive use; for that use gs-tag, which gives a little +bit of additional service." + +(interactive) + +(if (not (= 0 (length Tag))) (save-restriction + (narrow-to-region (region-beginning) (region-end)) + (goto-char (point-min)) (insert "<" Tag ">") + (goto-char (point-max)) (insert "</" Tag ">") + (push-mark (point-min) t) + (goto-char (point-max)) + ) + ) +) + +;;============================================================ + +(defun gs-structure () + +"For historical interest only: add structuring commentary to a Ghostscript +HTML file. It's crude, but it did most of the work. Future files will +acquire their structure through plagiarism, like any other code. + +Now they've all been structured, and this function was used to do it. The +placement of table-of-contents lines never worked, because most of the +files didn't yet have TOCS. Now all files that should have TOCs have +properly placed markers, but that's history." + +(interactive) + +(setq g~thisfile (buffer-name)) + +(widen) +(goto-char (point-min)) + +;; Replace the RCS $Id if one can be found in exactly the right format, and +;; otherwise insert one just after the title, along with a warning message. + +(if (re-search-forward "<!-- $Id: *\\([^ ]*\\) $ -->" nil t) + (progn + (setq Original (buffer-substring (match-beginning 1) (match-end 1))) + (replace-match g~thisfile t t nil 1) + ) + (progn + (search-forward "</title>" nil t) (end-of-line) + (insert (concat "\n<!-- $Id: " g~thisfile " $ -->")) + (setq Original "(UNSET by gs-structure)") + ) + ) + +(end-of-line) +(insert (concat "\n<!-- Originally: " Original " -->")) + +;; Place the visible header marker immediately after <BODY>. + +(re-search-forward "<body[^>]*>" nil t) + (end-of-line) (forward-char 1) + (insert (concat g~header-begin "\n\n")) + +;; Place the headline marker before the first <table> block. + +(search-forward "<table" nil t) (search-backward "\n\n" nil t) + (forward-word 1) (beginning-of-line) + (insert (concat g~headline-begin "\n\n")) + +;; After the first table block place the end-headline marker and both +;; table-of-contents markers, without worrying where the table of contents +;; really is. The TOC markers can easily be moved by hand later. + +(search-forward "\n\n" nil t) + (backward-word 1) (end-of-line) (forward-char 1) + (insert (concat + "\n" + g~headline-end "\n\n" + g~toc-begin "\n\n" + g~toc-end "\n\n")) + +;; The hints section begins with the first paragraph after where the TOC +;; markers are placed, and ends with <HR>. This isn't precise, and in fact +;; fails for several files, but once again only an approximation is needed +;; because it'll be edited by hand later. + +(search-forward "<p>" nil t) (beginning-of-line) + (insert (concat g~hint-begin "\n\n")) + +(search-forward "<hr>" nil t) (beginning-of-line) + (insert (concat g~hint-end "\n\n")) + +;; The visible header ends with (and includes) the first <HR>, and the +;; contents begin immediately thereafter. + +(search-forward "<hr>\n" nil t) + (insert (concat "\n" g~header-end "\n\n")) + +(forward-word 1) (beginning-of-line) + (insert (concat g~contents-begin "\n\n")) + +;; The contents end before the final <HR> and the trailer begins +;; immediately thereafter. + +(goto-char (point-max)) (search-backward "<hr>" nil t) + (backward-word 1) (end-of-line) (forward-char 1) + (insert (concat + "\n" + g~contents-end "\n\n" + g~trailer-begin "\n\n")) + +;; The trailer ends with </BODY>. + +(goto-char (point-max)) (search-backward "</body>" nil t) + (insert (concat "\n" g~trailer-end "\n\n")) + +;; We may have introduced trailing whitespace and extra empty lines. +;; Remove them. + +(goto-char (point-min)) +(while (re-search-forward "[ \t\240\r]+$" nil t) (replace-match "" t t)) +(goto-char (point-min)) +(while (re-search-forward "\n\n\n+" nil t) (replace-match "\n\n" t t)) + +) + +;;============================================================ +;; When this file is loaded into emacs, define the structure markers for GS +;; HTML files. These markers have two purposes: first, to make the HTML +;; more readable, and second, to enable these functions to locate sections +;; unambiguously (see gs-toc, the table of contents builder). Note that +;; the markers do not include LF. + +(defun g~marker (basic) + +"Build a complete Ghostscript HTML file marker from its text-only part. +gs-toc relies entirely on this function, so if it's ever changed, gs-toc +and existing markers would also have to be changed to keep pace. + +Intended only for initialization, not interactive use. + +All the existing files are now marked up, and since any future ones are +(properly) likely to be created by plagiarism, it's difficult to imagine +why anyone would want to change this unless they want to go to the trouble +of coming up with a much more useful marking scheme." + +(interactive) + +(setq HEAD (concat "<!-- [" basic "] ")) +(concat HEAD + (substring + "====================================================================== -->" + (- (length HEAD) 80) + )) +) + +;;============================================================ +;; Initialization code that must run after functions are defined. +;; +;; Look in a Ghostscript HTML file to see how these markers are used, +;; generally +;; +;; begin visible header +;; begin headline +;; end headline +;; begin table of contents +;; end table of contents +;; begin hint +;; end hint +;; end visible header +;; begin contents +;; end contents +;; begin visible trailer +;; end visible trailer +;; +;; although the TOC is in slightly different positions in a few files. + +(defvar g~header-begin (g~marker "1.0 begin visible header") + "Begin the HTML file's visible header material") + +(defvar g~header-end (g~marker "1.0 end visible header") + "End the HTML file's visible header") + +(defvar g~headline-begin (g~marker "1.1 begin headline") + "Begin the conspicuous headline") + +(defvar g~headline-end (g~marker "1.1 end headline") + "End the conspicuous headline") + +(defvar g~toc-begin (g~marker "1.2 begin table of contents") + "Begin the table of contents") + +(defvar g~toc-end (g~marker "1.2 end table of contents") + "End the table of contents") + +(defvar g~hint-begin (g~marker "1.3 begin hint") + "Begin the \"for other information\" section") + +(defvar g~hint-end (g~marker "1.3 end hint") + "End the \"for other information\" section") + +(defvar g~contents-begin (g~marker "2.0 begin contents") + "Begin the main contents") + +(defvar g~contents-end (g~marker "2.0 end contents") + "End the main contents") + +(defvar g~trailer-begin (g~marker "3.0 begin visible trailer") + "Begin the visible standard trailer material") + +(defvar g~trailer-end (g~marker "3.0 end visible trailer") + "End the visible standard trailer material") + +;;============================================================ +;; Some working variables + +(defvar gs-anchor "JUNK" "*Anchor name to insert") +(defvar gs-anchor-file "JUNKFILE" "*Anchor filename to insert") +(defvar gs-work-buffer "*GS work*" "*Ghostscript working buffer") diff --git a/Master/xemtex/doc/ghostscript/index.html b/Master/xemtex/doc/ghostscript/index.html new file mode 100644 index 00000000000..d931f27faad --- /dev/null +++ b/Master/xemtex/doc/ghostscript/index.html @@ -0,0 +1,14 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<title>Ghostscript</title> +<!-- Ghostscript auto-referral to the introductory document --> +<!-- $Id: index.html,v 1.2.4.2 2002/04/10 09:45:40 giles Exp $ --> +<meta http-equiv="REFRESH" content="0; url=Readme.htm"> +</head> +<body> +<p> +Please see <a href="Readme.htm">Readme.htm</a> for an index of the +Ghostscript documentation. +</body> +</html> |