*******************************************************************************
  File:     @(#)$Id: gs-mods.txt,v 2.3 2001/08/19 09:04:56 Martin Rel $
  Contents: Suggested changes to ghostscript's source code or configuration
  Author:   Martin Lottermoser, Greifswaldstrasse 28, 38124 Braunschweig,
            Germany. E-mail: Martin.Lottermoser@t-online.de.

*******************************************************************************
*									      *
*	Copyright (C) 1997, 1998, 1999, 2000, 2001 by Martin Lottermoser      *
*	All rights reserved						      *
*									      *
*******************************************************************************

Changes to source code require recompilation of ghostscript, changes to the
configuration files can be made at any time, even after installation.


Changes to Source Code
**********************

 S1 Present ghostscript versions have a bug in make_adjustment_matrix() when
    given significantly positive lower bounds for size ranges in
    "InputAttributes". I have provided an appropriate patch in
    src/zmedia2.c-N.NN.diff. To test for this bug if you already have a working
    binary of ghostscript including the "bit" device, run

      gs -sDEVICE=bit

    on the following PostScript code:

      << /InputAttributes
	<< 0 << /PageSize [ 100 100 700 900 ] >> >>
      >> setpagedevice
      << /PageSize [ 200 300 ] >> setpagedevice
      matrix defaultmatrix ==
      quit

    This tells ghostscript to assume that the device supports media widths
    between 100 and 700 and heights between 100 and 900 bp, and requests a
    page size 200 bp wide and 300 bp tall. Ghostscript should print

      [1.0 0.0 0.0 -1.0 0.0 300.0]

    on standard output if you don't have the bug and

      [1.0 0.0 0.0 -1.0 200.0 0.0]

    if you do. You can use other drivers to test for this, too, but to reliably
    evaluate the result you need information on the driver's device coordinate
    system.

    A simple visual test can be made by replacing the last two lines in the
    program, "matrix ... quit", by

      /Courier findfont 10 scalefont setfont
      100 150 moveto (Hello) show
      showpage

    and running it through a real device driver, preferably for the screen.
    If you have the bug, the page will be empty, if you don't, you'll see
    "Hello" in the middle.

    If you are unsure whether to apply the patch, proceed without it and do
    the test afterwards. The worst which can happen is that you'll have to
    recompile after patching.

    I had reported this bug to L. Peter Deutsch on 1997-12-02. He promised to
    look at it when he would have time. The bug is still present in gs 7.0,
    released more than three years later.

 S2 There is a bug in the UNIX make files for GNU ghostscript 6.51 which leads
    to a failure during "make install" when trying to install the manual pages.
    Add the line

      man1dir = $(mandir)/man$(man1ext)

    to your platform-specific makefile to fix this problem.



Changes to Configuration Files
******************************

 C1 There is a bug in ghostscript's default configuration for the
    undercolour removal and black generation functions. It shows up when
    printing PostScript documents using the RGB colour space ("setrgbcolor" or
    "sethsbcolor") on a device where the CMYK space is the native colour space;
    this is the case for pcl3 if you specify "-sColourModel=CMYK". The bug
    results in black being printed as a mixture of cyan, magenta, and yellow.
    On my printer, this is a slightly greenish grey with fuzzy edges.

    To check for the presence of this bug, run gs on the following command:

      0 0 0 setrgbcolor [ currentcmykcolor ] ==

    gs will issue "[1.0 1.0 1.0 0.0]" on standard output if it would print the
    mixture and "[0.0 0.0 0.0 1.0]" if it would print true black. You should
    specify a CMYK device like "bitcmyk" for this test.

    To correct this behaviour, you'll have to modify gs_init.ps. Look for the
    following lines (starting at line 1263 in AFPL gs 7.0 and at line 1247 in
    GNU ghostscript 6.51):

      % Set the default screen and BG/UCR.
      /.setdefaultbgucr {
	systemdict /setblackgeneration known {
	  { pop 0 } dup setblackgeneration setundercolorremoval
	} if
      } bind def

    Replace the line containing "setundercolorremoval" with the following:

      {} dup setblackgeneration setundercolorremoval

    I had reported this bug to L. Peter Deutsch on 1998-12-09 and he wrote he
    would change the behaviour in the next release. This happened subsequently
    in gs 6.0 (released 2000-02-03), but gs 6.01 reverted to the previous
    behaviour.

 C2 Ghostscript's default configuration prohibits a driver from seeing the
    value of the standard page device parameter "LeadingEdge" if set from
    PostScript; it is only visible if you set it from the command line. This is
    a logical error in ghostscript because (a) "LeadingEdge" fixes the
    orientation between default user space and the feeding direction which is a
    property of the default CTM, and because (b) determining the default CTM in
    ghostscript is the job of the driver-specific get_initial_matrix device
    procedure. Hence the driver must have access to the value of "LeadingEdge".

    To change this, edit the definition of ".presentspecial" in gs_setpd.ps to
    not include "LeadingEdge". Look for the line "/.presentspecial mark" and
    after that for the following lines (starting at line 356 in
    GNU ghostscript 6.51 and at line 355 in AFPL ghostscript 7.0):

     /InputAttributes false
     .inputattrkeys
       { dup /PageSize eq
	  { pop }
	  { { 2 index /InputAttributes .knownget { null eq } { true } ifelse } }
	 ifelse
       }
     forall

    Replace the line containing "PageSize" with the following:

       { dup dup /PageSize eq exch /LeadingEdge eq or

    You need correct this bug only if you wish to set "LeadingEdge" from
    PostScript. This is normally not necessary except when you are using a
    document manager with pcl3's PPD files to print on a custom page size in a
    non-default orientation.

 C3 Unless your default media size is US Letter, it is a good idea to remove
    the "%" comment in the "% (a4)..." line in gs_init.ps in order to set the
    default page size to ISO A4 instead of US Letter (see also Use.htm in the
    ghostscript distribution). This is essential for correctly printing all
    documents not explicitly requesting a page size.

 C4 If you intend to use PostScript resources, you should also edit the
    definitions of "FontResourceDir" and "GenericResourceDir" in gs_res.ps to
    reflect your local conventions. (And if you don't know what I'm talking
    about you don't need it.)
