summaryrefslogtreecommitdiff
path: root/gs/devices.txt
diff options
context:
space:
mode:
Diffstat (limited to 'gs/devices.txt')
-rw-r--r--gs/devices.txt2352
1 files changed, 2352 insertions, 0 deletions
diff --git a/gs/devices.txt b/gs/devices.txt
new file mode 100644
index 000000000..ff2d2bc97
--- /dev/null
+++ b/gs/devices.txt
@@ -0,0 +1,2352 @@
+ Copyright (C) 1992, 1995 Aladdin Enterprises. All rights reserved.
+
+ This file is part of Aladdin Ghostscript.
+
+ Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author
+ or distributor accepts any responsibility for the consequences of using it,
+ or for whether it serves any particular purpose or works at all, unless he
+ or she says so in writing. Refer to the Aladdin Ghostscript Free Public
+ License (the "License") for full details.
+
+ Every copy of Aladdin Ghostscript must include a copy of the License,
+ normally in a plain ASCII text file named PUBLIC. The License grants you
+ the right to copy, modify and redistribute Aladdin Ghostscript, but only
+ under certain conditions described in the License. Among other things, the
+ License requires that the copyright notice and this notice be preserved on
+ all copies.
+
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+This file, devices.txt, gives more detailed documentation about
+certain specific devices for which Ghostscript can produce output.
+
+For an overview of Ghostscript and a list of the documentation files, see
+README.
+
+Devices for which this file currently contains documentation:
+ SPARCprinter
+ HP DeskJet 520, 540, and 560C
+ HP DeskJet 500C & 550C
+ HP PaintJet, XL, and XL300
+ DEC LJ250
+ Apple Dot Matrix Printer (and Imagewriter)
+ Epson Stylus Color Printer
+ ESC/P, ESC/P2 Color-Printers
+ Canon BJC-600/BJC-4000/BJC-70 and BJC-800 BubbleJet Color Printers
+ (and Apple StyleWriter 2x00)
+ uniprint - a configurable ESC/P, ESC/P2 & HP-RTL/PCL-Driver
+ JPEG files
+
+### ------------------------- The SPARCprinter ------------------------- ###
+
+This section was written by Martin Schulte.
+
+Introduction
+------------
+
+The SPARCprinter is is connected to SPARCStation via a special SBUS card's
+video interface, the picture is composed on the host and only a bitmap is
+send to the printer unit.
+
+Together with a SPARCprinter, you always buy (as far as I know) software
+that enables you to do postscript-printing on your SPARCPrinter.
+
+So, the need for a Ghostscript-Interface to the SPARCPrinter seems low,
+but on the other hand some Postscript drawings are not correctly printed
+with SUN's software: on some pages occurred a thin vertical line of rubbish
+(reproduceable), on some Mathematica drawings the text at the axes wasn't
+rotated.
+
+I tried all of these with Ghostscript and always got the expected results.
+
+However, replacing proprietary software should never be a bad idea.
+
+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
+mentioned under Installation.
+
+Installation
+------------
+
+Add sparc.dev to DEVICE_DEVS and compile ghostscript as described in
+make.txt.
+
+Afterwards, you can use the following script (the way of handling standard
+input versus filename-arguments doesn't look very clever, has anyone a
+better idea ?) to print if you substitute <GSPATH> by the place where you
+installed the ghostscript binary:
+
+outcmd1='/vol/local/lib/troff2/psxlate -r'
+outcmd2='<GSPATH> -I/home/schulte/gs252 -sDEVICE=sparc -sOUTPUTFILE=/dev/lpvi0 -'
+
+if [ $# -eq 0 ]
+then
+ $outcmd1 | $outcmd2
+else
+ cat $* | $outcmd1 | $outcmd2
+fi
+
+Problems
+--------
+
+Since /dev/lpvi can only be opened for exclusive use, another job having
+opened it (engine_ctl_sparc or another ghostscript as the most probable
+candidates) will cause to stop ghostscript with "Error: /invalidfileaccess
+in --.outputpage--"
+
+In case of common printer problems like out of paper, a warning describing
+the reason will be printed to stdout, the driver will try to access again
+and again each five seconds.
+
+Due to a problem with the device-driver (in the kernel) the reason of
+printer failure is not always correctly reported to program. This is the
+case at least if you open the top cover (Error in the display: E5). Look
+to the display at the printer if a "Printer problem with unknown reason"
+is reported.
+
+Fatal errors will cause the print-job to be terminated.
+
+### ------------------------------ End --------------------------------- ###
+
+### ------------------- H-P color inkjet printers ---------------------- ###
+### (DeskJet 500C, DeskJet 550C, PaintJet, PaintJet XL, PaintJet XL300 ###
+### and the DEC LJ250 which can operate in a Paintjet-compatible mode) ###
+
+This section was written by George Cameron.
+
+Information and tips on usage for the drivers contained in gdevcdj.c
+====================================================================
+
+OVERVIEW:
+
+There are 6 generic drivers contained in the source module:
+
+ 1 - cdj500: HP DeskJet 500C and 540C
+ 2 - cdj550: HP DeskJet 550C, 560C, 660C, 660Cse
+ 3 - pjxl300: HP PaintJet XL300 and DeskJet 1200C
+ 4 - pjtest: HP PaintJet
+ 5 - pjxltest: HP PaintJet XL
+ 6 - declj250: DEC LJ250
+
+ All of 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 gs command line, eg.
+
+ gs -sDEVICE=cdeskjet -dBitsPerPixel=16 -dDepletion=1 -dShingling=2 tiger.ps
+
+NB/ The old names cdeskjet, cdjcolor and cdjmono drivers have been retained;
+ however, their functionality duplicates that available using the above
+ drivers (and cdeskjet is identical to cdj500), ie. we can use:
+
+ gs -sDEVICE=cdj500 -dBitsPerPixel=24 ... for cdjcolor, and
+ gs -sDEVICE=cdj500 -dBitsPerPixel=1 ... for cdjmono
+
+
+DEFAULT PAPER SIZE:
+
+ If the preprocessor symbol A4 is defined, the default paper size is the
+ European A4 size; otherwise it is the U.S. letter size (8.5"x11"). Other
+ paper sizes (including A3 for the PaintJet XL and PaintJet XL300) may be
+ specified on the command line as explained in the Ghostscript documentation.
+
+
+DEFAULT BITS-PER-PIXEL:
+
+ If the preprocessor symbol BITSPERPIXEL is defined as an integer (see below
+ for the range of allowable values), this number will be used to define the
+ default bits-per-pixel (ie. bit depth) for the generic drivers. If the
+ symbol is not defined, the default is set to 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 cdeskjet, cdjcolor and cdjmono
+ drivers are unaffected by setting this symbol, as their default settings
+ are predefined to be 1, 3 and 24 respectively.
+
+
+DESKJET PHYSICAL LIMITS:
+
+ Maximum printing width = 2400 dots = 8". The printer manuals say that the
+ maximum recommended printing height on the page is 10.3", 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.
+
+ All Deskjets have 1/2" unprintable bottom margin, due to the mechanical
+ arrangement used to grab the paper. Side margins are approximately 0.25"
+ for US Letter paper, and 0.15" for A4.
+
+
+COMMAND LINE PARAMETERS:
+
+ Several printer 'properties' have been implemented for these printers.
+ Those available so far are all integer quantities, and thus may be
+ specified as eg.
+
+ gs -dBitsPerPixel=32 -dShingling=1 ...
+
+ which sets the BitsPerPixel parameter to 32 and the Shingling parameter
+ to 1.
+
+
+BITS-PER-PIXEL:
+
+ All of the drivers in gdevcdj.c accept a command line option to set the
+ BitsPerPixel property. This gives considerable flexibility in choosing
+ various trade-offs between speed/quality/colour etc. The valid numbers
+ are:
+
+ 1: This is a standard Ghostscript monochrome driver, and uses
+ black ink (by installing the separate mono cartridge in
+ the case of the DeskJet 500C, or automatically for the
+ other printers)
+
+ 3: 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.
+
+ 8: 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.
+
+ 16: This is a 'cheaper' version of the following (24-bit)
+ driver, which generates a Floyd-Steinberg colour dithered
+ output using the minimum amount of memory (this may be
+ helpful when using IBM PC's when Ghostscript has not
+ been compiled using a 32-bit 386-style compiler). The
+ quality can be almost as good as the 24-bit version.
+
+ 24: 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 (and it
+ tends to produce rather larger raw data files, so they
+ can also be slower to print).
+
+ 32: This is for the DeskJet 550C only, which uses the black
+ cartridge and the colour cartridge simultaneously (ie.
+ CMYK printing). This printer can be both 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 very small.)
+
+
+DESKJET PROPERTIES:
+
+ The additional properties available for the DeskJets are:
+
+ BlackCorrect (int) /* Colour correction to give
+ * better blacks when using the DJ500C
+ * in colour mode, eg. the default of 4
+ * reduces the cyan component to 4/5
+ * Range accepted: 0 - 9 (0 = none) */
+ Shingling (int) /* Interlaced, multi-pass printing
+ * 0 = none, 1 = 50%, 2 = 25%, 2 is
+ * best & slowest */
+ Depletion (int) /* 'Intelligent' dot-removal
+ * 0 = none, 1 = 25%, 2 = 50%, 1 best
+ * for graphics?
+ * Use 0 for transparencies */
+
+PAINTJET XL300/PAINTJET XL PROPERTIES:
+
+ PrintQuality (int) /* 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
+ * max number of passes, ie. slowest
+ * printing for highest quality */
+ RenderType (int) /* 0 = driver does dithering
+ * 1 = snap to primaries
+ * 2 = snap black -> white, others to black
+ * 3 = ordered dither
+ * 4 = error diffusion
+ * 5 = monochrome ordered dither
+ * 6 = monochrome error diffusion
+ * 7 = cluster ordered dither
+ * 8 = monochrome cluster ordered dither
+ * 9 = user-defined dither (not supported)
+ * 10 = monochrome user-defined dither ns. */
+
+PAINTJET PROPERTIES:
+
+ No additional properties
+
+
+GAMMA CORRECTION:
+
+ 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" or 1/300"
+ 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, eg.
+
+ gs ... gamma.ps colorpic.ps -c quit
+
+ where gamma.ps is
+
+%!
+{0.333 exp} dup dup currenttransfer setcolortransfer
+
+ This example sets the gamma for r, g, and b to 3, which seems to work
+ reasonably well in practice.
+
+
+GENERAL TIPS:
+
+ For all the above printers, the paper is critically important to the
+ final results. Smoother, less fibrous paper is generally better (and
+ suggested types are given in the printer manuals). In particular, the
+ special ink-jet paper can make a big difference; the 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!)
+
+ The unix-lpr.sh provides one example of setting up a multi-option
+ colour postscript lpr queue on Unix systems, and includes the ability
+ to choose a range of different colour options and printer accounting
+ and error logging.
+
+
+CAVEAT EMPTOR!:
+
+ 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 testing
+ drivers for the additional machines and reporting their findings back to
+ me.
+
+HP's 600x300 dpi resolution-enhanced mode for inkjet printers
+=============================================================
+
+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:
+
+These printers do not offer true 600x300 dpi resolution. Those that
+print in colour are strictly 300x300 dpi in colour mode, while in mono
+mode there is a pseudo 600x300 dot mode, with the restriction that you
+can't print two adjacent dots. Thus, in effect what you have is 600 dpi
+dot positioning, but on average you don't get more dots per line.
+
+What this does give is the possibility to have eg. sharper character
+outlines, as you can place dots on the edges nearer to their ideal
+positions - this is why it is worth doing.
+
+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.
+
+To summarise, you may lose a smidgin of (potential) text clarity using
+the 550c drivers (cdj550, cdjcolor, cdjmono etc.), but other than that,
+they are the ones for the job.
+
+### ------------------------------ End --------------------------------- ###
+
+### ------------------- Apple Dot Matrix Printer ---------------------- ###
+
+This section was written by Mark Wedel.
+
+ The Dot Matrix Driver (DMP) driver is a simple driver I wrote. It
+could more more efficient, but it seems to print the images fine.
+
+ The Dot Matrix Printer was a parallel predecessor to the Imagewriter
+printer. As far as I know, the Imagewriter commands are a superset
+to those of the Dot Matrix printer, so the driver should work fine at
+generating output that can be printed on Imagewriters.
+
+ A few notes (from the gdevadmp.c file):
+
+ * To print out images, it sets the printer for unidirectional printing
+ * and 15 cpi (120 dpi). It sets the line feed to 1/9 of an inch (72 dpi).
+ * When finished, it sets things back to bidirectional printing, 1/8" line
+ * feeds, and 12 cpi. There does not appear to be a way to reset
+ * things to initial values.
+ *
+ * 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 cr only.
+ *
+ * You can search for the strings Init and Reset (in devdemp.c) to find the
+ * strings that set up the printer and clear things when finished, and change
+ * them to meet your needs.
+ *
+ * Also, you need to make sure that the printer daemon (assuming unix)
+ * doesn't change the data as it is being printed. I have set my
+ * printcap file (sunos 4.1.1) with the string:
+ * ms=pass8,-opost
+ * and it works fine.
+
+ Mark Wedel
+master@cats.ucsc.edu
+
+### ------------------------------ End --------------------------------- ###
+
+### ------------------ The Epson Stylus Color printer ------------------ ###
+/*
+ Epson Stylus-Color Driver, contributed by Gunther Hess (address: see below)
+
+I N T R O D U C T I O N
+=======================
+This documentation accompanies version 1.90 of the stcolor-driver.
+Compared to version 1.21 (gs3.53) there are just a few, but somehow
+important chages:
+
+ - Default: noWeave escpBand=1 (-> default works with all known models)
+ - added Parameter "Softweave" (useful only with Original STC and PRO-Series)
+ - added Compile-Option (-DSTC_SIGNAL) to catch interrupts during printing
+ (thanks to Frederic Loyer)
+ - compatibility with ansi2knr
+ - compatibility with 64Bit Processors
+ - clarification of usage with Pro-XL and Stylus Color II
+
+A Note on the Version-Numbering: Version 1.xx comes to it's end.
+Any 1.xx > 1.90 will have only Bug-Fixes. Maybe that Version 2.xx
+comes to life, if this is the case it will include full support of
+the newer models.
+
+U S A G E
+=========
+This driver is selected with "-sDEVICE=stcolor" and produces 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 the monochrome-versions
+of this printer.
+
+This can be achieved either via command-line options or via ghostscript-input.
+For convenience a Postscript-File is supplied, that can be used as initial
+inputfile. Thus, assumed that ghostscript is invoked via "gs" on your computer,
+try the following command:
+
+ gs -sDEVICE=stcolor -rXDPIxYDPI stcolor.ps ... (e.g.: your input-files)
+
+were XDPI is one of 180/360/720 and YDPI is one of (90/)180/360/720. The result
+should be significantly better, you may use "stcolor.ps" with other devices
+too, but I do not recommend this, since it does nothing then. "stcolor.ps"
+should be available with binary distributions and should reside in the
+ghostscript input-directory. Thus if ghostscript is part of your
+printer-spooler, you can insert
+
+ (stcolor.ps) findlibfile { pop run } if pop
+
+to the files you want to run through the improved algorithms and you may want
+to adapt this file to your specific needs. The methods and options for this
+are described here, but this description is restricted to the gs-options, while
+their manipulation at the Postscript-level is documented in "language.txt" and
+in the mentioned "stcolor.ps".
+
+Next thing is to explain the options (as written on my unix-system).
+The order is somehow related to their use during the printing-Process:
+
+ -dUnidirectional - Force unidirectional printing,
+ recommended for transparencies
+
+ -dMicroweave - enable the printers "microweave"-feature.
+ -dnoWeave - disable any Weaving, overrides -dMicroweave
+ -dSoftweave - enable internal weaving of the driver.
+
+* Weave-Note: Softweave works *ONLY* with the original Stylus-Color
+* and the PRO-Series.
+
+ -sDithering="name" - select another dithering-algorithm, available are:
+ "gscmyk" : fast color-output, with CMYK-ProcessColorModel [D]
+ "gsmono" : fast black & white output
+ "gsrgb" : fast color-output, with RGB-ProcessColorModel
+ "fsmono" : Floyd-Steinberg, Monochrome
+ "fsrgb" : Floyd-Steinberg, with RGB-ProcessColorModel
+ (Almost identical to cdj550/mjcxxx-Algorithm)
+ "fsx4" : Floyd-Steinberg, with CMYK-ProcessColorModel
+ (shares code with fsmono & fsrgb, but is
+ algorithmically really bad)
+ "fscmyk" : Floyd-Steinberg, with CMYK-ProcessColorModel
+ and proper modifications for CMYK
+ "hscmyk" : modified Floyd-Steinberg with CMYK-Model
+ ("hs" stands for "hess" nor for "high speed",
+ but the major difference to "fscmyk" is speed)
+ "fs2" : algorithm by Steven Singer (RGB)
+ should be identical to escp2cfs2.
+
+ -dBitsPerPixel=1...32 - number of bits used for pixel-storage, the larger
+ the value, the better the quality - at least in
+ theory. In fsrgb one can gain some speed, when
+ restricting to 24 Bits, rather than the default
+ of 30.
+
+ -dFlag0 - causes some algorithms to select a uniform
+ initialisation rather than a set of random-values.
+ May yield "sharper" image-impression at the
+ cost of "dithering-artifacts".
+ (applies to hscmyk and all fs-modi, except for fs2,
+ which always uses a constant initialization.)
+
+ -dFlag1 ... -dFlag4 - available to future algorithms.
+
+ -dColorAdjustMatrix={3/9/16 x float}'
+ - This is a Matrix to adjust the colors. Values should
+ be between -1.0 and 1.0, and the number of
+ values depend on the colormodel used by the
+ selected algorithm. In RGB- and CMYK-modi a matrix
+ with 1.0 on the diagonal produces no transformation.
+ (I could not identify a similar feature at the
+ language-level, so this option was implemented, it
+ is really required, but I don't know reasonable
+ values yet.)
+
+ -dCtransfer='{float float ...}', -dMtransfer=..., -dY..., -dK... or
+ -dRtransfer='{float float ...}', -dG..., -dB... or
+ -dKtransfer='{float float ...}'
+ - which is used, depends on the algorithm, which
+ maybe either either CMYK, RGB or monochrome.
+ The values are arrays of floats in the range from
+ 0 to 1.0, which represent the visible
+ color-intensity for the device. One may achieve
+ similar effects with "setcolortransfer" 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 {0.0 1.0}, which
+ is a linear characteristic, most of the code in
+ "stcolor.ps" are better transfer-arrays.
+
+ -dKcoding='{float...}', -dC..., -dM... etc.
+ - this are again arrays between 0.0 and 1.0, and
+ they control the internal coding of the
+ color-values. Clever usage of this arrays may
+ yield further enhancements, but no experience yet.
+ [To be discontinued with version >= 2.x]
+
+ -sModel=st800 - causes output to be suitable for the monochrome
+ Stylus 800 (no Weaving, no Color).
+
+ -sOutputCode= - can be either "plain", "runlength" or "deltarow"
+ and changes the ESC/P2 (TM) coding-technique used
+ by the driver. The default is to use the
+ runlength-encoding. "plain" selects uncompressed
+ encoding and yields enormous amounts of data to
+ generated.
+
+ -descp_Band=1/8/15/24 - Number of Nozzles of scanlines used in printing.
+ Useful only with -dnoWeave. Larger Values yield
+ smaller code, but this doesn't increase the
+ Printing-Speed.
+
+ -descp_Width= - Number of Pixels Printed in each scan-Line.
+ (Useful when tuning Margins only, se below)
+
+ -descp_Height= - Length of the entire Page in Pixels
+ (Parameter of "ESC(C" in default initialization)
+
+ -descp_Top= - Top-Margin in scanlines.
+ (1st Parameter of "ESC(c" in default initialization)
+
+ -descp_Bottom= - Bottom-Margin in scanlines.
+ (2nd Parameter of "ESC(c" in default initialization)
+
+ -sescp_Init="..." - Override for the initialization-sequence.
+ (Must set Graphics-Mode-1 & Units)
+
+ -sescp_Release="..." - Overrides the release-sequence.
+ (ESC @ FF by default)
+
+ Valid Resolutions:
+ any, ESC/P2 allows in theory, but only the following are
+ known to work with most printers:
+
+ -r360x360 (Default)
+ -r720x720 (not on STC-IIs ? and st800)
+
+ Valid Option Combinations: (Stylus I & PRO-Series only)
+
+ escp_Band ?Weave escp_Band/#Passes
+ 180x 90 15 no-Weave
+ 180x180 1 , 8, 24 no/u-Weave 15/2 sWeave
+ 180x360 15/4 sWeave
+ 180x720 15/8 sWeave
+ 360x 90 15 no-Weave
+ 360x180 1, 8, 24 no/u-Weave 15/2 sWeave
+ 360x360 1, 8, 24 no/u-Weave 15/4 sWeave
+ 360x720 15/8 sWeave
+ 720x 90 15 no-Weave
+ 720x180 15/2 sWeave
+ 720x360 15/4 sWeave
+ 720x720 1 no/u-Weave 15/8 sWeave
+
+*************************************************************************
+*************************************************************************
+** **
+** BEWARE: There are only few validity-checks for parameters. A good **
+** example is "escp_Band": if you set this, the driver tries **
+** to use your value, even if this value is not supported by **
+** the printer: **
+** **
+** YOU ASKED FOR IT, AND YOU GOT IT! **
+** **
+*************************************************************************
+*************************************************************************
+
+
+A P P L I C A T I O N - N O T E
+================================
+
+Quite a bunch of Parameters. Hopefully you never need any of them, besides
+feeding "stcolor.ps" to ghostscript in front of your input.
+
+After answering some questions over 50 Times, I prepared a STC-FAQ-Collection.
+I am currently unable offer this FAQ on the net.
+But thanks to Bill Davidson it is available as:
+
+ http://www.isisnet.com/bdavidson/gs_stc.FAQ.html
+
+And here it comes (as plain text):
+
+VERSION:
+This FAQ refers to ghostscript > 3.50 with stcolor > 1.20. The former
+release (ghostscript-3.33/stcolor-1.12) used different parameters and
+had some severe bugs. This FAQ is itself version 1.3.
+
+TOPIC: Pro XL?
+Yes, this driver supports the A3-Size Printer. Simply set the required
+pagesize and margins. A simple way to do this, is to specify the
+parameter "-sPAPERSIZE=a3" on the command line or to include the
+procedure-call "a3" in the postscript-Prolog section. If you want
+to optimize the printable area and/or set the proper Margins, see
+topic Margins, PageSize.
+
+TOPIC: Margins, PageSize
+Different than other drivers, i refuse to add code to the stcolor-driver,
+that tries to guess the proper margins or pagesize. This is due to the
+fact, that i found that such guessing is usually wrong and needs correction
+either in the source or the parameters. The following code can be
+inserted to "stcolor.ps" after the line:
+
+ mark % prepare stack for "putdeviceprops"
+
+And this is the new code:
+
+/.HWMargins [9.0 39.96 12.6 9.0] % Left, Bottom, Right, Top (1/72")
+/PageSize [597.6 842.4] % Paper, including Marings (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
+]
+
+Feel free to change the Values for ".HWMargins" and "PageSize" to match
+your needs. The given Values are the defaults from the driver, when
+compiled with "-DA4" set.
+
+This Option -or it's omission- may cause trouble: The Stylus Color can
+print exactly 8" or 2880Pixel@360DpI. The remaining paper is the
+margin, where the left margin varies only slightly with the papersize,
+while the right margin ist significantly increased for wider paper,
+such as letter.
+
+-> If you are using stcolor > 1.20, compiled without "-DA4", on european
+ paper, then the Default-Margin is too large. You need to add the
+ proper ".HWMargins" to the command line or stolor.ps
+
+
+TOPIC: Stylus Color II / IIs and 1500.
+First the good news: The driver can print on the Stylus Color II.
+And the bad ones:
+- According to Epson-Support the driver "abuses" the color-capabilities.
+ (See topic "Future Plans" for details.)
+- You need some parameters on the command-line (or in stcolor.ps).
+- I doubted that it would be usable with the Stylus Color IIs.
+ *BUT* it is usable and suffers from the mixing-Problems!!.
+
+To make thinks work, you *MUST* disable the drivers internal
+weaving ("Softweave"). This can be done in two ways:
+
+ gs .... -dMicroweave ....
+
+or
+ gs ... -dnoWeave -descp_Band=1 ....
+
+[1.90 fixes this "bug" due to a changed default-behaviour]
+
+I experienced significantly increased printing speed with the second
+variant on the old Stylus Color, when printing mostly monochrome data.
+
+TOPIC: Future Plans
+Actually i thought, that the driver is finished by now, but an answer
+from Epson triggered future development. This was the answer from
+Epson-Support:
+
+To: Klaus-Gunther Hess
+Subject: Help: Need Programming Info for Stylus-(Color)-Printers
+
+The differentiation is necessary, as the printers produce the graphics
+differently. To wit:
+
+ CMY Class - ( Stylus Color IIs ) The Stylus Color IIs prints color
+ graphics with the three different color inks (cyan, magenta, and yellow).
+ Also, black is printed using composit black (mixture of CMY). For high
+ quality laser like black, a separate black ink cartridge should be used.
+
+ CMY + K Class - ( Stylus Color II ) This printer has both a CMY and a
+ black ink (K) cartridge installed at the same time. However, due to the
+ nature of the black ink it can not be mixed or overlaid with the color
+ inks. Therefore, when black is needed, composite black is used.
+ If the image calls for pure black (e.g., text), the black cartridge is used.
+
+ CMYK Class - ( Stylus Color, Stylus Pro and Pro XL ) These printers
+ have a mixable black (K) ink. This ink is compatible with the CMY inks
+ and will not bleed when combined or printed next to the CMY inks.
+
+Bruce U.
+The Epson Connection
+
+Thus I am working on a version, that supports CMY and CMY + K dithering.
+Actually there are also some new (*undocumented*) instructions used by
+the windows-driver in conjunction withe the Stylus Color II/IIs, that
+raises the need for some more "escp_*" Parameters.
+
+
+A C K N O W L E D G E M E N T S
+===============================
+
+This driver was "copied" from gdevcdj.c (ghostscript-3.12), which was
+contributed by:
+ George Cameron - g.cameron@biomed.abdn.ac.uk
+ Koert Zeilstra - koert@zen.cais.com
+ Eckhard Rueggeberg - eckhard@ts.go.dlr.de
+
+Some of the ESC/P2-code was drawn from gdevescp.c, contributed by
+ Richard Brown - rab@eos.ncsu.edu
+
+The POSIX-Interrupt-Code is from (Compile-Time-Option -DSTC_SIGNAL)
+ Frederic Loyer - loyer@ensta.fr
+
+And several improvements are based on discussions with
+ Brian Converse - BCONVERSE@ids.net
+ Bill Davidson - bdavidson@ra.isisnet.com
+ Gero Guenther - gero@cs.tu-berlin.de
+ Jason Patterson - jason@reflections.com.au
+ ? Rueschstroer - rue@ibe.med.uni-muenchen.de
+ Steven Singer - S.Singer@ph.surrey.ac.uk
+
+While I wish to thank all this people mentioned above, they are by no means
+responsible for bugs in the stcolor-driver - just for the features.
+
+Duisburg 8-May-1996, Gunther Hess
+
+up to sometime E-Mail: gunther@elmos.de
+After that time, one should use snail-mail or phone:
+
+Gunther Hess phone: ++49 203 376273
+Richard Wagner Strasse 112
+D-47057 Duisburg
+Germany
+
+R E C O M M E N D A T I O N S
+=============================
+
+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:
+
+ gs -sDEVICE=stcolor [-r720x720] -sDithering=... -sOutputFile=escp.out \
+ stcolor.ps whatsoever.ps
+
+where "..." is the name of the desired algorithm. "stcolor.ps" was omitted
+for the gs-algorithms (gsmono, gsrgb and gscmyk), for which it is useless
+*and* it would not allow the selection of "gscmyk".
+
+So here comes a very truncated version of Jasons text:
+
+ COLOR DITHERING EXPERIMENTS with gdevstc-1.21
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Here's a bit of feedback about the EPSON Stylus Color driver's different
+dithering methods, based on a little experiment using 4 good quality
+scanned images of quite varied nature.
+
+Here is a summary of the results of the four experiments...
+
+
+ gsmono: Pretty much what you'd expect from a mono ordered pattern. Looks
+ like what a lot of mono laser printers produce.
+
+ fsmono: Excellent for monochrome.
+
+ gscmyk: Not very good, but then you'd expect that from an ordered pattern.
+
+ gsrgb: A little better than gscmyk. More consistent looking.
+
+ fs2: Good, but not quite as good as fsrgb. Gets the brightness wrong,
+ too light at 720dpi, too dark at 360dpi.
+
+ fsrgb: Very good, but a little too dark and has a slight blue tint.
+
+ hscmyk: Excellent. Slightly better than fsrgb and fs2. Better than fscmyk on
+ some images, almost the same on most.
+
+ fscmyk: Best. Very, *very* slightly better than hscmyk. On some images,
+ nearly as good as the EPSON demos (which were done with the
+ MS-Windows driver).
+
+ Overall Visual Quality (out of ten):
+
+ gsmono |*********
+ fsmono |*****************
+ |
+ gscmyk |********
+ gsrgb |*********
+ fs2 |****************
+ fsrgb |*****************
+ hscmyk |******************
+ fscmyk |******************
+ +---------------------
+ 0 1 2 3 4 5 6 7 8 9 10
+
+ best-to-worst order: color: fscmyk hscmyk fsrgb fs2 gsrgb gscmyk
+ mono: fsmono gsmono
+
+
+SANITY NOTE: The above results are only from *four* images, a total of 24
+ printouts (8 on 720dpi paper, 16 on plain paper). Your results
+ will almost certainly vary, and your standards might not be
+ the same as mine, so use these results as a *guide* only, not
+ as a formal evaluation.
+
+C O L O R - T R A N S F O R M A T I O N
+=======================================
+
+*NOTE*: Things are changing with version gdevstc > 2.00!
+
+In the initial version of the driver, distributed with Ghostscript-3.33,
+the parameter "SpotSize" 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. This is the result of
+an ongoing discussion about dithering-algorithms and "false color" on the
+Epson-Stylus-Color. This initiated the transformation of the stcolor-driver
+into a framework for different dithering-algorithms, that provides a generalized
+interface to the internal Ghostscript-Color-Models and the other data-structures
+related to Ghostscript-Drivers.
+
+The main thing such a framework should be able to do is to deliver the
+values the dithering-algorithm needs and since this influences directly
+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:
+
+ ColorAdjustMatrix Coding Transfer
+ +---------------------+ +---------------------+ +------------------+
+ | Ghostscript Color | | Ghostscript Raster | | Dithering Data |
+ | | => | 1/2/4/8/16/24/32Bit | => | 1/3/4x Values |
+ | 1/3/4x16Bit Values | | for all components | | (arbitrary type) |
+ +---------------------+ +---------------------+ +------------------+
+
+Due to the limitations on raster-storage, information is lost in the first
+transformation step, except for the 16Bit Monochrome-Mode. So any color
+adjustment should take place before this step and this is where the optional
+ColorAdjustMatrix works.
+
+The first transformation-step is called "coding" and is controlled by the
+?coding-Arrays. The Decoding-process expands the range of values
+pontentially to a larger range than that provided by the initial ghostscript
+color-model. It is therefore a reasonable place to make device- and/or
+algorithm-specific adjustments. This is the place where the ?transfer-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 8Bits are stored per color-component and if the algorithm
+uses bytes too, the second transformation is included within the first, what
+saves significant computation-time when printing the data.
+
+
+ColorAdjustMatrix
+-----------------
+
+The driver supports different "ProcessColorModel"-Values, which raises the
+need for different color-adjustments. In the following "CAM" stands for
+ColorAdjustMatrix:
+
+ DeviceGray: (3 Floats):
+ if((r == g) && (g == b))
+ K' = 1.0 - R;
+ else
+ K' = 1.0 - CAM[0] * R + CAM[1] * G + CAM[2] * B;
+
+ According to the documentation in drivers.txt, the latter should
+ never happen.
+
+ DeviceRGB: (9 Floats)
+ 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;
+
+ The Printer uses always four inks, thus a special treatment of black
+ is provided. Algorithms may take special action, if r==g==b. Maybe
+ that in future versions Kcoding & Ktransfer become active in RGB-Mode.
+
+ DeviceCMYK: (16 Floats)
+
+ 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;
+
+ Again we have a special black-treatment. "max(C,K)" was introduced
+ because of a slight misbehaviour of ghostscript, that 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 ColorAdjustMatrix
+ quite tedious, thus during mapping black-separation is done for
+ (c,m,y,0)-Requests and if there is a ColorAdjustMatrix, undercolor-
+ removal is used too. In other words the Default-Matrix is:
+
+ 1 0 0 1
+ 0 1 0 1
+ 0 0 1 1
+ 0 0 0 1
+
+ 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, even low
+ deviations from the default cause drastic changes.
+
+If no ColorAdjustMatrix is set, the matrix-computations are skipped. Thus
+the transformation reduces to:
+
+ - Range-Inversion in Monochrome-Mode
+ - Black-Separation in CMYK-Mode
+
+
+RGB/CMYK-coding & -transfer and BitsPerPixel
+--------------------------------------------
+
+This 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 the raster-memory (BitsPerPixel) and the ink-density.
+
+The "truncation" may become a nonlinear-function, if any of the ?coding-arrays
+are set. Assume the following Ghostscript invocation:
+
+ gs -sDEVICE=stcolor -sDithering=fscmyk -dBitsPerPixel=16 \
+ -dMcoding='{ 0.0 0.09 0.9 1.0 }' \
+ -dYtransfer='{ 0.0 0.09 0.9 1.0 }' \
+ -dKcoding='{ 0.0 0.09 0.9 1.0 }' -dKtransfer='{ 0.0 0.09 0.9 1.0 }' \
+
+We may have ?coding and/or ?transfer, thus four combinations are possible
+and this four combinations appear in the given example. The resulting mapping
+is given in the following tables, where except for the internal Indices
+(4 Components * 4 Bits = 16 BitsPerPixel), all values are normalized to the
+Range 0-1. The actual range is 0 to 65535 for the ghostscript-color and
+0 to 16777215 (2^24-1) for the ink-values delivered to the fscmyk-algorithm.
+Sorry for the bunch of numbers following, but you may try this example in
+conjunction with "stcinfo.ps", what should give you a graphical
+printout of the following numbers, when you issue a "showpage"-command:
+
+ CYAN MAGENTA
+ CI/15 gs_color_values CI ink gs_color_values CI ink
+ 0.000 0.000 - 0.062 0 0.000 -0.123 - 0.123 0 0.000
+ 0.067 0.063 - 0.125 1 0.067 0.123 - 0.299 1 0.247
+ 0.133 0.125 - 0.187 2 0.133 0.299 - 0.365 2 0.351
+ 0.200 0.188 - 0.250 3 0.200 0.365 - 0.392 3 0.379
+ 0.267 0.250 - 0.312 4 0.267 0.392 - 0.420 4 0.406
+ 0.333 0.313 - 0.375 5 0.333 0.420 - 0.447 5 0.433
+ 0.400 0.375 - 0.437 6 0.400 0.447 - 0.475 6 0.461
+ 0.467 0.438 - 0.500 7 0.467 0.475 - 0.502 7 0.488
+ 0.533 0.500 - 0.562 8 0.533 0.502 - 0.529 8 0.516
+ 0.600 0.563 - 0.625 9 0.600 0.529 - 0.557 9 0.543
+ 0.667 0.625 - 0.687 10 0.667 0.557 - 0.584 10 0.571
+ 0.733 0.688 - 0.750 11 0.733 0.584 - 0.612 11 0.598
+ 0.800 0.750 - 0.812 12 0.800 0.612 - 0.639 12 0.626
+ 0.867 0.813 - 0.875 13 0.867 0.639 - 0.715 13 0.653
+ 0.933 0.875 - 0.937 14 0.933 0.715 - 0.889 14 0.778
+ 1.000 0.938 - 1.000 15 1.000 0.889 - 1.111 15 1.000
+
+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 16
+component-indices. If no coding-array is given, this is accomplished
+by a division with 4096 -equivalent to a right-shift by 12 Bits-. The
+final ink-density resides in the given interval and moves form the left to
+the right side from 0 to 15. In the Magenta-case, 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.
+
+Now let us take a look at the case with Transfer-Arrays:
+
+ YELLOW BLACK
+ CI/15 gs_color_values CI ink gs_color_values CI ink
+ 0.000 0.000 - 0.062 0 0.000 -0.123-0.123 0 0.000
+ 0.067 0.063 - 0.125 1 0.018 0.123-0.299 1 0.067
+ 0.133 0.125 - 0.187 2 0.036 0.299-0.365 2 0.133
+ 0.200 0.188 - 0.250 3 0.054 0.365-0.392 3 0.200
+ 0.267 0.250 - 0.312 4 0.072 0.392-0.420 4 0.267
+ 0.333 0.313 - 0.375 5 0.090 0.420-0.447 5 0.333
+ 0.400 0.375 - 0.437 6 0.252 0.447-0.475 6 0.400
+ 0.467 0.438 - 0.500 7 0.414 0.475-0.502 7 0.467
+ 0.533 0.500 - 0.562 8 0.576 0.502-0.529 8 0.533
+ 0.600 0.563 - 0.625 9 0.738 0.529-0.557 9 0.600
+ 0.667 0.625 - 0.687 10 0.900 0.557-0.584 10 0.667
+ 0.733 0.688 - 0.750 11 0.920 0.584-0.612 11 0.733
+ 0.800 0.750 - 0.812 12 0.940 0.612-0.639 12 0.800
+ 0.867 0.813 - 0.875 13 0.960 0.639-0.715 13 0.867
+ 0.933 0.875 - 0.937 14 0.980 0.715-0.889 14 0.933
+ 1.000 0.938 - 1.000 15 1.000 0.889-1.111 15 1.000
+
+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, what is exactly the same functionality, that
+Postscript's "(color)transfer"-function provides.
+
+While in the case of Yellow, the intervals match the intervals used with Cyan,
+the intervals used for Black 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.
+
+Not a bad idea, I think. Consider the fs2-algorithm: It uses values in
+the range 0-255 (Bytes). If any transfer-array would be supplied alone,
+some of the 256 possible values would never be used and others will be
+used for adjacent intervals several times. Establishing an identical
+coding-array solves this problem, so that the full potential of the
+algorithm is utilized.
+
+Another useful feature of the coding-arrays is, that they are internally
+normalized to the 0-1 Range. In the 720x720Dpi-Mode the transfer-arrays
+in stcolor.ps limit the Dot-Density to about 50%, thus this arrays end
+at 0.5 (respectively start at 0.5 in the RGB-case). Due to the automatic
+normalization this arrays can be used as coding-arrays too. But of course
+in the fs2-case mentioned above, values from 0-127 will never be delivered
+to the algorithm, while values 128-255 are delivered for adjacent intervals.
+
+To clearify the intended use of the three parameters/parameter-groups the
+following statements should be kept in mind:
+
+- ColorAdjustMatrix is never used, when transferring gray-values. This
+ restricts it to what the name says: Adjustment of Colors e.g. the
+ correction for miscolored ink. Do not use it for saturation or
+ brightness-control.
+
+- ?transfer-arrays control the values delivered to the driver, which in
+ turn controls the ink-quantity. This arrays should be used for control
+ of saturation and brightness. Maybe that a Postscript-Header for the
+ manipulation of brightness and so on will be provided with future
+ versions. In general this arrays are identical for all inks.
+ If they differ they provide a simpler scheme for color-correction,
+ which is not necessarily faster than the ColorAdjustMatrix.
+
+- ?coding-arrays control the color-value-intervals mapped to
+ the internal color-indices.
+
+P R I N T - M O D I
+===================
+
+The parameters "Unidirectional", "Microweave", "noWeave",
+"OutputCode", "Model" and the given resolution provide control over the
+data generated for the printer.
+
+Unidirectional
+--------------
+Simply toggles the unidirectional-mode of the printer. Setting "Unidirectional"
+definitely decreases printing-speed, but may increase the quality. I use
+this for printing tranparencies, where fast head-movement could smear the ink.
+
+Microweave, noWeave and OutputCode=deltarow
+-------------------------------------------
+The first are two Booleans, what immediately tells, that 4 combinations are
+possible. Actually only three exist (if you don't count for deltarow):
+
+ 1. Softweave
+ 2. Microweave
+ 3. noWeave
+
+First and second are functionally identical, their difference is that either
+the driver or the printer does the job. So the question
+
+ What is weaving ?
+
+arises. The Epson Stylus Color has a Head-Assembly that contains two physically
+identifiable Heads. One for Black and one for Cyan/Magenta/Yellow. This
+makes 4 logical Heads, one for each color-component. Each of this four heads
+has several jets at some Y-distance, so several horizontal lines can be printed
+during one pass of the heads. From the experience I think there are 15 Jets
+per color spaced at 1/90".
+
+So the question arises, how to print at a Y-Resolution of 360Dpi with this
+90DpI-Jets. Simply by division, one gets 360/90 = 4, what tells us, that
+4 Passes of the head-assembly are required to achieve a Y-resolution of
+360DpI. Weaving is just the scheme how the 15 jets are utilized to print
+adjacent horizontal rows:
+
+ Weaving noWeave
+ Pass: 1 2 3 4 1 2 3 4
+ 0/360" jet0 - - - jet0 - - -
+ 1/360" - jet1 - - - jet0 - -
+ 2/360" - - jet2 - - - jet0 -
+ 3/360" - - - jet3 - - - jet0
+ 4/360" jet1 - - - jet1 - - -
+ 5/360" - jet2 - - - jet1 - -
+ 6/360" - - jet3 - - - jet1 -
+ ....
+
+Now let us 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 the some averaging
+takes place. Without weaving adjacent rows are printed by the same jet and
+this makes the dot-diameter-deviations visible as 1/90"-stripes in the printout.
+
+In Softweave-Mode (the default) the driver sends the data properly arranged to
+the printer, while in Microweave-Mode the printer does the same job. But in
+general the host-processor is much faster than the printers processor and
+thus it is advantageous to let the host do this job. In addition to that, for
+720DpI 8 Passes are required and the amount of buffer-space required to buffer
+the data for the passes is far beyond the printers memory. Softweave requires
+an odd value of "escp_Band", the Stylus Color provides 15 for that.
+
+"OutputCode" controls the encoding used. In the basic modi, the choice consists
+of "plain" and "runlength". The computation of runlength-encoded data does not
+take much time, at least 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, since there were not potential
+advantages found, "deltarow" is available as an option. "Softweave" cannot
+be used with this encoding, so if "OutputCode=deltarow" is set, Microweave
+becomes the default. Maybe that the size of the ESC/P2-code becomes smaller,
+but I have never observed increased printing-speed - things tend to become
+slower with deltarow compared to Softweave.
+
+Model
+-----
+Some ESC/P2-Printers, such as the Stylus 800, do not offer Microweave or
+the commands required to do Softweave. Setting Model just changes the defaults
+and omits some parts of the initialization-sequence, which are not compatible
+with the given printer model. Currently only "st800" is supported besides the
+default (stcolor).
+
+
+BEWARE: BUGS & PITFALLS
+=======================
+
+* The given ?coding and ?transfer arrays should be strictly monotonic.
+
+* It is impossible to change WHITE: that's your paper.
+ Thus R/G/B-transfer should end at 1.0 and C/M/Y/K-transfer should
+ start at 0.0.
+
+* Usually 8Bits per component yields fastest operation.
+
+* The ColorAdjustMatrix is not used in the reverse-transformation, which
+ is used, when Ghostscript does the dithering (gs*-Modi). Expect funny
+ results.
+
+* If BitsPerPixel is less than 6, the entire coding/transfer-process
+ does not work. This is always true for the gs*-modi and becomes true
+ for the other modi, if BitsPerPixel is forced to low values.
+
+* 720x720Dpi-Printing should never select the gs-modi and should always
+ use stcolor.ps. (I prefer 360x720)
+
+T E S T S (version 1.13 and above)
+==================================
+
+This section should give an overview over the performance in terms of
+processing- & printing-time. Printing is done offline (via cp-instruction)
+to measure real printing-speed, since at high-resolutions processing-time
+is in the same order of magnitude and thus may become the limiting factor.
+
+The various OutputCodes
+-----------------------
+
+I ran several files though ghostscript and recorded the size of the code,
+the processing time and the printing-time, at least for some of the files.
+Always the following options were used:
+
+ "-sDEVICE=stcolor -sPAPERSIZE=a4 stcolor.ps - < file.ps"
+
+(Actually "-sPAPERSIZE=a4" is in my gs_init.ps since I'm a germ.)
+
+"Softweave" means actually, that nothing else was used, it is the default and
+implies that odd v=40/h=10/m=15 mode (ESC . 1 40 10 15).
+
+"Microweave" is just "-dMicroweave", which is equivalent to "ESC . 1 10 10 1",
+with full skip-optimization and microweave-activated.
+
+"deltarow" is the new encoding principle ("ESC . 3 10 10 1") with Microweave on.
+It is activated with "-sOutputCode=deltarow".
+
+Finally I wanted to see the plain Kathy Ireland and used "-sOutputCode=plain",
+which is just replacing RLE by no encoding, thus "ESC . 0 40 10 15" is
+used then.
+[So sorry ;-) Kathy was still blue dressed in front of the blue sea on a blue
+air-cushion - nice to see but hard to dither]
+
+So here are the results:
+
+ golfer.ps colorcir.ps drawing.ps brief.ps
+
+deltarow 572751/48.180u 643374/41.690u 90142/46.180u/1:50 178563/49.350u/2:22
+Softweave 559593/46.810u 669966/44.960u 296168/48.160u/1:30 269808/43.320u/1:55
+Microweave 590999/56.060u 754276/42.890u 338885/47.060u/1:50 282314/44.690u/2:22
+
+ kathy.ps
+deltarow 3975334/111.940u/5:35
+Softweave 3897112/101.940u/3:10
+Microweave 4062829/100.990u/3:15
+plain/soft 5072255/104.390u/3:05
+
+Evaluation:
+
+A.) Might be, that I've not chosen the optimal deltarow-code, but even if
+ it saves at lot of bytes, printing-speed is not increased.
+
+B.) At least the printer prefers plain-kathy. In other words: Sending a
+ 1 Megabyte or 20% more data, has no impact on printing speed.
+ [drawing.ps is an exception to this rule: plain prints slower than rle]
+
+C.) But "unclever" coding -especially with deltarow- can significantly
+ slows down printing. But even if very significant advantages in the
+ size of the code ar achieved, "deltarow" is not competitive.
+ [colorcir.ps shows savings in deltarow, but printing is a mess.]
+
+
+Printing-Time related to other options
+--------------------------------------
+
+Full page halftone images printed, unless otherwise noted.
+
+ DpI print-mode Size Time comments
+180x180 mono -/uni 358KB 1:15
+ -/bi 358KB 0:45
+ micro/bi 205KB 0:45 (not weaving)
+ soft/bi 179KB 1:25
+ color -/bi 641KB 2:45
+ soft/bi 556KB 1:32
+
+360x360 mono -/uni 269KB 0:50 (b/w Text)
+ -/bi 269KB 0:35 (b/w Text)
+ micro/bi 269KB 2:25 (b/w Text)
+ soft/uni 250KB 3:15 (b/w Text)
+ soft/bi 250KB 1:55 (b/w Text)
+ color -/bi 346KB 1:00 (sparse color-page, visible displacements)
+ micro/bi 346KB 1:50 (sparse color-page, looks buggy - printer?)
+ soft/bi 294KB 1:30 (sparse color-page, O.K.)
+ -/bi 2218KB 2:45 (visible stripes)
+ micro/bi 5171KB 3:17
+ soft/bi 3675KB 3:05
+
+360x720 mono soft/bi 2761KB 5:40
+ color soft/bi 7789KB 6:15 (just a small difference!)
+
+720x360 color soft/bi 7182KB 5:40
+
+720x720 color micro/bi 14748KB 30:26 (actually beyond printers capabilities)
+ soft/bi 14407KB 11:08
+### ------------------------------ End --------------------------------- ###
+
+### ------------ uniprint - an unified (?) printer driver ------------- ###
+
+uniprint -- ESC/P, ESC/P2 and PCL/RTL-Driver by Gunther Hess gunther@elmos.de
+=============================================================================
+
+This driver is intended to _become_ 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 drivers
+name is:
+
+ Ugly- -> Updated- -> Unified-Printer-Driver
+
+But probably you want to know, something about the functionality:
+At the time of this writing uniprint drives:
+
+ NEC Pinwriter P2X (24Pin B/W Impact printer, ESC/P-Style)
+ Several Epson Stylus Color Models (ESC/P2-Style)
+ HP-Deskjet 550c (Basic HP-RTL)
+ Canon BJC 610
+
+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:
+
+ gs @MODEL.upp -sOutputFile=PRINT_FILE POSTSCRIPT_FILE -c quit
+
+with MODEL, PRINT_FILE and POSTSCRIPT_FILE replaced by actual filenames
+as in the following example from my Linux-Box:
+
+ gs @stc.upp -sOutputFile=/dev/lp1 tiger.ps -c quit
+
+There are several Unified-Printer-Parameterfiles (.upp) distributed
+with Ghostscript:
+
+ bjc610a0 - Canon BJC 610, 360x360DpI, plain paper high speed, color, rendered
+ bjc610a1 - Canon BJC 610, 360x360DpI, plain paper, color, rendered
+ bjc610a2 - Canon BJC 610, 360x360DpI, coated paper, color, rendered
+ bjc610a3 - Canon BJC 610, 360x360DpI, transparency film, color, rendered
+ bjc610a4 - Canon BJC 610, 360x360DpI, back print film, color, rendered
+ bjc610a5 - Canon BJC 610, 360x360DpI, fabric sheet, color, rendered
+ bjc610a6 - Canon BJC 610, 360x360DpI, glossy paper, color, rendered
+ bjc610a7 - Canon BJC 610, 360x360DpI, high gloss film, color, rendered
+ bjc610a8 - Canon BJC 610, 360x360DpI, high resolution paper, color, rendered
+
+ bjc610b1 - Canon BJC 610, 720x720DpI, plain paper, color, rendered
+ bjc610b2 - Canon BJC 610, 720x720DpI, coated paper, color, rendered
+ bjc610b3 - Canon BJC 610, 720x720DpI, transparency film, color, rendered
+ bjc610b4 - Canon BJC 610, 720x720DpI, back print film, color, rendered
+ bjc610b6 - Canon BJC 610, 720x720DpI, glossy paper, color, rendered
+ bjc610b8 - Canon BJC 610, 720x720DpI, high resolution paper, color, rendered
+
+ cdj550 - HP Deskjet 550C, 300DpI, 32Bit-CMYK
+
+ necp2x - NEC P2X at 360x360DpI, 8Bit (Floyd-Steinberg)
+
+ stcany - Any Epson Stylus Color, 360x360DpI, 4Bit, POSTSCRIPT-Halftoning
+
+ The next group is suitable for Original Stylus & Stylus Pro.
+ stc - Epson Stylus Color, 360x360DpI, 32Bit-CMYK, 15 Pin
+ stc_l - ditto, but 360x360DpI, 4Bit, POSTSCRIPT-Halftoning, Weaved noWeave
+ stc_h - ditto, but 720x720DpI, 32Bit-CMYK, 15 Pin Weave
+
+ stc2 - Epson Stylus Color II(s), 360x360DpI, 32Bit-CMYK, 20Pin
+ stc2_h - Epson Stylus Color II, 720x720DpI, 32Bit-CMYK, 20Pin
+ stc2s_h - Epson Stylus Color IIs, 720x720DpI, 32Bit-CMYK, 20Pin
+
+ Thanks to Mark Goldberg, the following two are known to have
+ good transfer-curves for plain-paper.
+ stc500p - Espon Stylus Color 500, 360DpI, 32Bit-CMYK, noWeave, plain paper
+ stc500ph - ditto, 720x720DpI, 32Bit-CMYK, noWeave, plain paper
+
+ The Stylus Color 600 does 32/90"-Weaving
+ stc600pl - Epson Stylus Color 800, 360DpI, 32Bit-CMYK, 32 Pin, plain paper
+ stc600p - Epson Stylus Color 800, 720DpI, 32Bit-CMYK, 32 Pin, plain paper
+ stc600ih - Epson Stylus Color 800, 1440DpI 32Bit-CMYK, 30 Pin, inkjet paper
+
+ The Stylus Color 800 does 64/180"-Weaving
+ stc800pl - Epson Stylus Color 800, 360DpI, 32Bit-CMYK, 64 Pin, plain paper
+ stc800p - Epson Stylus Color 800, 720DpI, 32Bit-CMYK, 64 Pin, plain paper
+ stc800ih - Epson Stylus Color 800, 1440DpI 32Bit-CMYK, 62 Pin, inkjet paper
+
+ ras1 - SUN rasterfile, 1Bit, monochrome (Ghostscript)
+ ras8m - SUN rasterfile, 8Bit, grayscale (Floyd-Steinberg)
+
+ ras3 - SUN rasterfile, 3Bit, RGB (Ghostscript)
+ ras24 - SUN rasterfile, 24Bit, RGB (Floyd-Steinberg)
+
+ ras4 - SUN rasterfile, 4Bit, CMYK (Ghostscript)
+ ras32 - SUN rasterfile, 32Bit, CMYK (CMYK-Floyd-Steinberg)
+
+There may be more parameter files available. I am trying to keep them together
+with the latest version of the driver-sources and some additional stuff at:
+
+ http://www-md.e-technik.uni-rostock.de/ma/gunther/gs/index.html
+
+At the time of this writing (21-Sep-1997) the contents of the website is
+outdated, but i still live in the hope to update it. I am becoming 42 in
+November, Thus all answers might be available on the web then.
+
+Please note the following:
+
+ - Changing the resolution via the -r-Parameter of Ghostscript is
+ usually _not_ possible.
+
+ - For Epson Stylus Color Models not listed above, the two stc500-Variants
+ are likely to work besides stcany, but the Gamma-Correction might be wrong.
+
+A few notes on the state of this driver
+=======================================
+
+The coding of uniprint 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 testphase, three other drivers appreared on
+the scene, that could/should at least partially integrated into uniprint:
+
+ cdj850 by Uli Wortmann (available via ftp://bonk.ethz.ch)
+ hpdj by Martin Lottermoser
+ bjc610 by Helmut Riegler
+
+Uli addresses features of the more recent Deskjet-Models, that will not be
+available in uniprint soon. Martin taught me a lesson on HP-PCL3-Headers,
+that will be available in uniprint 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, the bjc-support
+is available. The work on the hpdj-Integration will start after the update of
+my website.
+
+A few notes on the uniprint-background
+======================================
+
+Uniprint is actually an update of stcolor, but much more versatile than
+its predecessor. Stcolor in turn started as a clone of the Color-Deskjet
+family of drivers (cdj*). Finally cdj* can be considered as 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
+uniprint:
+
+1. Monochrome -> advanced Color (cdj*):
+ This adds color-mapping and rendering-functions to the driver.
+ Especially the Error-Diffusion is important for the printout quality.
+
+2.1. HP-Color -> Epson-Color (stcolor)
+ The Epson Stylus Color offered two features simultaneously: It could
+ produce 720x720Dpi-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.
+
+2.2. Weaving-Techniques (stcolor)
+ Besides the internal color-management the Stylus Color did not provide
+ enough buffer-space to operate the printer fast at the 720x720DpI.
+ The use of Weaving could yield the triple print-speed. Weaving, also
+ called interleaving, is present in some monochrome-drivers too. The new
+ thing in stcolor was the combination with Error-Diffusion. Unfortunately
+ the weaving was somehow hardcoded, as the problems with the newer
+ members of the Stylus Color family of printers demonstrated.
+
+3. Generalized Output-Format and Weaving (uniprint)
+ The features mentioned above yielded about 90% of stolors source-code,
+ only 10% were related to the formatting of the output. The idea to
+ make the Output-Format switchable came up soon after completing
+ stcolor. But the final design of uniprint became triggered by the
+ (personal) necessity to drive a NEC-P2X and a Designjet 750c. (If
+ you are missing the dnj750-parameter-file: a temporary version will
+ be available soon, but a reasonable one requires some additions to
+ uniprint, which will take some time.)
+
+Thus uniprint accumulates almost any features, that can be found among
+the printer drivers. Clearly this has some disadvantages in terms of
+processing speed. This is still true for the current version (1.75),
+since it is targetted for the functionality and several speed-gaining
+features were (willingly) omitted.
+
+To summarize and to introduce the terms used in the description of the
+Parameters, the features of uniprint, that can be parameterized are:
+
+ 1. The Color-Mapping
+ 2. The Color-Renderining (alias Error-Diffusion or Floyd-Steinberg)
+ 3. The Output-Format, including
+ 4. The Weaving
+
+And the Parameters used for that are:
+
+upAbortCommand upAdjustBottomMarginCommand
+upAdjustMediaSizeCommand upAdjustPageLengthCommand
+upAdjustPageWidthCommand upAdjustTopMarginCommand
+upAdjustResolutionCommand upBeginJobCommand
+upBeginPageCommand upBlackTransfer
+upBlueTransfer upColorInfo
+upColorModel upColorModelInitialized
+upComponentBits upComponentShift
+upCyanTransfer upEndJobCommand
+upEndPageCommand upErrorDetected
+upFSFixedDirection upFSProcessWhiteSpace
+upFSReverseDirection upFSZeroInit
+upFormatXabsolute upFormatYabsolute
+upGreenTransfer upMagentaTransfer
+upMargins upModel
+upOutputAborted upOutputBuffers
+upOutputComponentOrder upOutputComponents
+upOutputFormat upOutputFormatInitialized
+upOutputHeight upOutputPins
+upOutputWidth upOutputXOffset
+upOutputXStep upOutputYOffset
+upOutputYStep upRasterBufferInitialized
+upRedTransfer upRendering
+upRenderingInitialized upSelectComponentCommands
+upSetLineFeedCommand upVersion
+upWeaveFinalPins upWeaveFinalScan
+upWeaveFinalXStarts upWeaveFinalYFeeds
+upWeaveInitialPins upWeaveInitialScan
+upWeaveInitialXStarts upWeaveInitialYFeeds
+upWeavePasses upWeaveXPasses
+upWeaveXStarts upWeaveYFeeds
+upWeaveYOffset upWeaveYPasses
+upWhiteTransfer upWriteComponentCommands
+upWroteData upXMoveCommand
+upXStepCommand upYFlip
+upYMoveCommand upYStepCommand
+upYellowTransfer
+
+All this Parameters are specific to uniprint. But since the names are
+choosen to be self-explanatory, you can now go ahead and write your
+own parameterfile ;-).
+
+Godzillas Guide to the Creation of Unified-Printer-Parameterfiles
+=================================================================
+
+Learning by example might be a good idea, thus here is one of the
+distributed parameter files (stc_l.upp) with some added "--"-Comments:
+
+ -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 1/72")
+ -dupComponentBits="{1 1 1 1}" -- Map: Bit's Per Component (Default: 8)
+ -dupWeaveYPasses=4 -- Weave: Y-Passes (Default: 1)
+ -dupOutputPins=15 -- Format/Weave: Scans per Command
+ -dupBeginPageCommand="< -- Goes to the Printer (second-data)
+ 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 Pagelength 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)"
+
+That's short, and if one removes the "upWeaveYPasses" and "upOutputPins"
+this becomes shorter and almost "stcany.upp". This miniature-size
+is the result of the fact, that I am most familiar with ESC/P2 and was able
+to add defaults for the omitted parameters.
+
+Just a few notes about the parameters used in this example:
+
+- upModel, is a string serving as a comment (and nothing else)
+
+- DEVICE, NOPAUSE, SAFER are well known Ghostscript-Parameters
+
+- upColorModel, is one of major uniprint-Parameters and selects the
+ color-mapping and in turn the Postscript-ColorModel. The following
+ values are currently supported:
+
+ /DeviceGray, /DeviceRGBW, /DeviceRGB, /DeviceCMYK, /DeviceCMYKgenerate
+
+- upRendering, is the next major uniprint-Parameter and selects the
+ (Color-) Rendering. The following values are currently supported:
+
+ /ErrorDiffusion, /FSCMYK32
+
+ The first is similar to fsmono, fsrgb and fsx4 of stcolor, while the
+ second is (almost) identical to fscmyk/hscmyk, but is restricted to
+ 32Bit-Data and should be used in conjunction with /DeviceCMYKgenerate.
+
+- upOutputFormat, is the final major uniprint-Parameter and selects the
+ Output-Method. The following values are currently supported:
+
+ /SunRaster, /Epson, /EscP2, /EscP2XY, /Pcl
+
+ /SunRaster creates the Raster-Files and requires no other Parameters.
+ /Epson is used for the elderly ESC/P-Format (used by many printers)
+ /EscP2 is used by more recent Epson-printers (no X-Weaving supported)
+ /EscP2XY supports X-Weaving, used with 1440DpI-Printers and in stc2s_h
+ /Pcl is the HP-PCL/RTL-Style output-formatter without weaving.
+
+- -r360x360 is the Standard Resolution-Parameter of Ghostscript
+
+- upMargins="{ 9.0 39.96 9.0 9.0}
+ Has a similar function as the normal Ghostscript-Parameter ".HWMargins",
+ it sets the Left/Bottom/Right/Top-Margins in 1/72" units. Uniprint
+ provides this parameter to enable automatic L<>R exchange, if upYFlip
+ is active.
+
+- upComponentBits, is an array of integers, that selects the Bits stored
+ in Raster-Memory. The Default is to store 8 Bits per component. In this
+ example 1 Bit is selected for each component, thus turning down the
+ Floyd-Steinberg-Algorithm (But the time consuming computation is
+ still carried out, but this will change in future Versions). There is
+ a related Parameter "upComponentShift", which offers control over the
+ positioning of the components within the raster-memory. Each of the
+ given numbers corresponds to a component, and which depends on the
+ selected "upColorModel":
+
+ /DeviceGray /DeviceRGBW /DeviceRGB /DeviceCMYK, /DeviceCMYKgenerate
+ 0 White White Red Black Black
+ 1 - Red Green Cyan Cyan
+ 2 - Green Blue Magenta Magenta
+ 3 - Blue - Yellow Yellow
+
+ This order may not be suitable for some printers, thus there is
+ another Parameter to select the Output-Order. This is an array
+ of integers too, is named "upOutputComponentOrder" and uses the
+ numbers on the left.
+
+One group of very important Parameters, not used in the example above
+deserves to be mentioned here: The Transfer-Arrays, named
+
+ "up<color>Transfer"
+
+where <color> is one of the names in the table above. These are arrays
+of floats in the range from 0.0 to 1.0 and represent the colortransfer
+functions. They are used during mapping _and_ rendering. In the simplest
+case, this arrays ensure an equidistant distribution of the stored
+values within the device-space (Which means a non-linear 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
+the raster-memory (thus it is fully utilized) and the rendering takes
+care of the "overhang" (In this case the Post-Diffusion of 1 Bit components
+makes sense).
+
+Finally an important note on the Transfer-Arrays: In the case of monochrome
+devices, the stored Component is White, which is the way Postscript defines
+this devices, but most printers require "Black", thus one has to provide
+a falling "upWhiteTransfer" for such printers.
+
+- upWeaveYPasses, is an integer, that gives the number of printhead passes
+ required to achieve the requested Y-DpI. This makes sense only if
+
+- upOutputPins ist set to something greater than 1, thus multiple Pins/Nozzles
+ are transferred with a single command and of course such a command must
+ be supported by the device.
+
+If no other Weave-Parameters are given, uniprint computes several defaults,
+which altogether do no weaving. The /Epson and /EscP2XY-Formats take care
+of "upWeaveXPasses" too.
+
+- upBeginPageCommand, represents the data transferred to the printer,
+ whenever a new Page begins. Prior to that, the "upBeginJobCommand"
+ is written to the device only once per OutputFile. (Intended for the
+ HP-PJL-Sequences).
+
+- upAdjustBottomMarginCommand, upAdjustMediaSize, upAdjustPageLengthCommand,
+ upAdjustPageWidthCommand, upAdjustResolutionCommand,
+ upAdjustTopMarginCommand
+ Normally uniprint does not change the "upBeginPageCommand" nor does it
+ provide a default. But 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)
+
+- upEndPageCommand is the fixed termination sequence for each page and
+ of course there is a "upEndJobCommand" too.
+
+- "upAbortCommand" is written, if the interrupt-detection in uniprint
+ is enabled and a signal is caught. It _replaces_ the "upEndPageCommand"
+ _and_ the "upEndJobCommand", thus allowing the indication of an
+ aborted job. (Ghostscript gets an error-return from uniprint in this
+ case and abandons further processing.)
+
+For the ESC/P(2) formats all commands represent binary data, while for
+the PCL/RTL-Formatter some of them are formats for fprintf. This strings
+_must_ have explicitly a trailing '\0'.
+
+I should write more, but time is short and the only recommendation is to
+take a look at the various parameter-files. But at least three more hints
+should be given:
+
+ 1. If the Driver rejects a Configuration, nothing happens until a
+ showpage occurs. Then an error is raised and a message with
+ "CALL-REJECTED upd_print_page..." is printed on stderr.
+
+ 2. uniprint has lots of messages that can be activated by setting bits
+ in the preprocessor macro UPD_MESSAGES. I usually use the compile-
+ time option -DUPD_MESSAGES=0x17 for Configuration-Development.
+ (For the semantics, check the UPD_M_... macros in the source.)
+
+ 3. There is a file "uninfo.ps" distributed. This file prints (on
+ the terminal, not on the printer) the contents of the
+ current-pagedevice-dictionary in alphabetical order. This includes
+ the parameters generated/changed by uniprint.
+
+Quick comments on all Parameters in alphabetical order
+======================================================
+String upAbortCommand - End of Page & File upon Interrupt
+Bool upAdjustBottomMarginCommand - Manipulate B-Marg in upBeginPageCommand
+Bool upAdjustMediaSize - Manipulate Mediasize [intended]
+Bool upAdjustPageLengthCommand - Manipulate P-Lngth in upBeginPageCommand
+Bool upAdjustPageWidthCommand - Manipulate P-Wdth in upBeginPageCommand
+Bool upAdjustResolutionCommand - Manipulate Resolution
+Bool upAdjustTopMarginCommand - Manipulate T-Marg in upBeginPageCommand
+String upBeginJobCommand - Begin of each OutputFile
+String upBeginPageCommand - Begin of each Page
+Float[] upBlackTransfer - Black-Transfer (CMKY* only!)
+Float[] upBlueTransfer - Blue-Transfer
+Int[] upColorInfo - struct gx_device_color_info
+Name upColorModel - Selects Color-Mapping
+Bool/RO upColorModelInitialized - Color-Mapping O.K. (readonly)
+Int[] upComponentBits - Bits stored per Component
+Int[] upComponentShift - Positioning within gx_color_index
+Float[] upCyanTransfer - Cyan-Transfer
+String upEndJobCommand - End of each File unless upAbortCommand
+String upEndPageCommand - End of each Page unless upAbortCommand
+Bool/RO upErrorDetected - Severe (VM) Error, not fully operational
+Bool upFSFixedDirection - Inhbits Direction-Toggling in Rendering
+Bool upFSProcessWhiteSpace - Causes White-Space Rendering
+Bool upFSReverseDirection - Run Rendering in Reverse (if fixed)
+Bool upFSZeroInit - Non-Random Rendering-Initialization
+Bool upFormatXabsolute - Write absolute X-Coordinates
+Bool upFormatYabsolute - Write absolute Y-Coordinates
+Float[] upGreenTransfer - Green-Transfer
+Float[] upMagentaTransfer - Magenta-Transfer
+Float[] upMargins - L/B/R/T-Margins in 1/72"
+String upModel - Comment-String, holds some info
+Bool/RO upOutputAborted - Caught an Interrupt
+Int upOutputBuffers - # of Rendering buffers (2^n)
+Int[] upOutputComponentOrder - Order of Comps when Printing
+Int upOutputComponents - # written Comps, not fully operational
+Name upOutputFormat - Selects Output-Format
+Bool/RO upOutputFormatInitialized - Format-Data o.k. (readonly)
+Int upOutputHeight - Output-Height in Pixels
+Int upOutputPins - # Pins/Nozzles per command
+Int upOutputWidth - Output Width in Pixels
+Int upOutputXOffset - Offset in Pixels, if upFormatXabsolute
+Int upOutputXStep - Divisor / Multiplier for X-Coords
+Int upOutputYOffset - Offset in Pixels, if upFormatYabsolute
+Int upOutputYStep - Divisor / Multiplier for Y-Coords
+Bool/RO upRasterBufferInitialized - GS-Buffer o.k. (readonly)
+Float[] upRedTransfer - Red-Transfer
+Name upRendering - Selects Rendering Algorithm
+Bool/RO upRenderingInitialized - Rendering-Parameters o.k. (readonly)
+String[] upSelectComponentCommands - Establishes Color (Output-Order!)
+String upSetLineFeedCommand - Adjust Linefeed (/Epson only)
+String/RO upVersion - Source code Version (readonly)
+Int[] upWeaveFinalPins - # of Bottom pins on EOP-Passes
+Int upWeaveFinalScan - Begin of EOP-Passes (Y-coord)
+Int[] upWeaveFinalXStarts - X-Pass indices for EOP-Passes
+Int[] upWeaveFinalYFeeds - Y-Increments for EOP-Passes
+Int[] upWeaveInitialPins - # of Top pins on BOP-Passes
+Int upWeaveInitialScan - End of BOP-Passes (Y-Coord)
+Int[] upWeaveInitialXStarts - X-Pass indices for BOP-Passes
+int[] upWeaveInitialYFeeds - Y-Increments for BOP-Passes
+Int upWeavePasses - XPasses * YPasses
+Int upWeaveXPasses - Number of X-Passes
+Int[] upWeaveXStarts - X-Pass indices for normal Passes
+Int[] upWeaveYFeeds - Y-Increments for normal Passes
+Int upWeaveYOffset - # of blank/incomplete scans at BOP
+Int upWeaveYPasses - Number of X-Passes
+Float[] upWhiteTransfer - White Transfer (Monochrome Devices!)
+String[] upWriteComponentCommands - Commands to write each component
+Bool/RO upWroteData - Something (BeginJob) written to Output
+String upXMoveCommand - X-Positioning-command
+String upXStepCommand - Single Step to the right
+Bool upYFlip - Flips Output along the Y-Axis
+String upYMoveCommand - Y-Positioning-Command
+String upYStepCommand - Single Step down
+Float[] upYellowTransfer - Yellow Transfer
+
+Uniprint's Roll of Honor
+========================
+
+I should mention all of the people, who were involved in stcolors
+evolution, but I've decided to start from scratch here:
+
+John P. Beale - for testing the stc600-modi
+Bill Davidson - who triggered some weaving-research (and tested stc2s_h)
+L. Peter Deutsch - who triggered an ease of configuration
+Mark Goldberg - who prepared the stc500-Transfers
+Scott F. Johnston and
+Scott J. Kramer - for testing the stc800-modi
+Martin Lottermoser - for his great commented hpdj-driver
+Helmut Riegler - for the BJC-Extension
+Hans-Gerd Straeter - for some measured transfer-curves and more
+Uli Wortmann - for discussions and his cdj850-driver
+
+my family - for tolerating my printer-driver-hacking,
+
+Duisburg 21-Sep-1997, Gunther Hess
+
+Gunther Hess phone: ++49 203 376273 (MET-evening hours)
+Richard Wagner Strasse 112 E-Mail: gunther@elmos.de
+D-47057 Duisburg
+Germany
+
+### ------------------------------ End --------------------------------- ###
+
+### -- The BJC-600/BJC-4000/BJC-70/Stylewriter 2x00, BJC-800 printers -- ###
+
+This section was written by Yves Arrouye <Yves.Arrouye@marin.fdn.fr>.
+
+
+HISTORY
+-------
+
+The BJC-600 driver was written in the first place by Yoshio Kuniyoshi
+<yoshio@nak.math.keio.ac.jp> and later modified by me, Yves Arrouye
+<Yves.Arrouye@marin.fdn.fr>. We both tried to make it evolve synchronously,
+though Yoshio cannot be reached since a long time.
+
+The drivers are based on code for the HP printers by George Cameron
+<g.cameron@biomed.abdn.ac.uk> (in fact, they are in the same file!),
+so he's the first person to thank!
+
+The 2.00 version of the drivers was a complete rewrite of the driver
+(arguments, optimization, colour handling, in short: everything!) by
+Yves Arrouye. The 2.x release is also the first one to be able to
+use the full width of an A3 paper size...
+
+With the 2.15 release, PostScript Printer Description (PPD) files for
+the drivers are released. They are not complete at the moment but they
+can be used to drive the printers' main features.
+
+VERSION INFORMATION
+-------------------
+
+The BJC-600 driver is version 2.17.00 dated 5/23/96.
+The BJC-800 driver is version 2.17.00 dated 5/23/96.
+
+
+COMPILATION NOTES
+-----------------
+
+Configuration
+-------------
+
+* Default values for options and other stuff
+
+Configuration for the drivers can be made by modifying default values
+in the file gdevbjc.h 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 given below are defined in this file if you need
+to change them to customize your installation (a bad idea, better use
+options...).
+
+* CMYK to RGB color conversion
+
+By default, the drivers use the same algorithm as Ghostscript to
+convert CMYK colors to RGB. If you prefer to use Adobe formulaes,
+define USE_ADOBE_CMYK_RGB when compiling. (See the top of the
+gdevcdj.c file to see the difference between the two.)
+
+* Vertical centering of the printable area
+
+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 BJC_DEFAULT_CENTEREDAREA when compiling, then the top and
+bottom margins will be the same, resulting in a (smaller) vertically
+centered imageable area too.
+
+* Margins
+
+If you define USE_RECOMMENDED_MARGINS then the top and bottom margins
+will be the same (i.e. BJC_DEFAULT_CENTEREDAREA will be defined for
+you) and these margins will be those recommended by Canon, 12.4 mm.
+ Because margins are a complicated thing (due to the fact that one
+does rely on the mechanical precision of the printer), the drivers do
+something about the bottom margin: by default the bottom margin is
+9.54 mm for the bjc600 driver and 7 mm for the bjc800 one. If you
+define USE_TIGHT_MARGINS then the bottom margin is 7 mm for both
+drivers (but I never managed to get my own bjc600 print a line on this
+low bound, hence the greater default). Regardless of the presence of
+this define, USE_FIXED_MARGINS will not allow the bjc800 to use the
+lower 7 mm bottom margin, so if you have a problem with the bottom
+margin on a bjc800, just define that (without defining USE_TIGHT_MARGINS,
+of course).
+
+Compilation
+-----------
+
+Make sure the bjc600 and/or bjc800 devices are in your DEVICE_DEVS
+variable. That is look in the makefile for your platform and add them
+if necessary. This means for example adding them to the DEVICE_DEVS6
+variable. The line should read something like that:
+
+ DEVICE_DEVS6=bj10e.dev bj200.dev bjc600.dev bjc800.dev
+
+Now if you get an error from make saying that it does not know how to
+make bjc800.dev it's because you have an old makefile with only the
+bjc600 device in it. You then have to copy the lines explaining how to
+make bjc800.dev in your makefile. These lines are in devs.mak (under
+the lines for making bjc600.dev) and should go just after the lines
+for making bjc600.dev.
+
+Testing the margins
+-------------------
+
+A quick way to be sure that the margins you selected (see above) are
+okay is to print a file whose contents are:
+
+ %!
+ clippath stroke showpage
+
+If the margins are okay, you will obtain a rectangle surrounding the
+printable area.
+
+USE OF THE DRIVERS
+------------------
+
+There are two drivers here: the "bjc600" one supports the BJC-600 and
+BJC-4000 (maybe the BJC-70 as well) and the "bjc800" one supports the
+BJC-800 series. When remarks here apply to both drivers, the name
+"bjc" will be used.
+
+Supported Options and Defaults
+------------------------------
+
+(Note: the names "options", "properties" and "parameters" will be used
+to designate the same thing: device parameters that you can change.)
+
+Preamble: if an option is given an incorrect value, an error will
+occur. Unless stated otherwise, this error will be a rangecheckerror.
+ Options may be set from the gs command-line (using the -d and -s
+switches or other predetermined switches if they have an effect on the
+driver) or using the setpagedevice Level 2 operator if Ghostscript has
+been compiled with the level2 device (it should ;-)). There are *no*
+special-purpose operators as one was able to find in Level 1 printers.
+
+The default number of bits per pixel for the bjc is 24 (unless you
+change the value of BJC_BITSPERPIXEL) and corresponds to a CMYK
+printing. Supported modes are 1 bpp and 4 bpp (gray levels), 8 bpp, 16
+bpp, 24 bpp and 32 bpp (colours). Colours are preferrably stored in
+the CMYK model (which means that with 16 bpp there are only 16
+different shades of each color, for example) but it is possible to
+store them as RGB color for some depths.
+ Some modes do Floyd-Steinberg dithering while some others don't and
+use the default Ghostscript halftoning (in fact, when halftoning is used
+dithering takes also place but due to the low point density it is
+usually not efficient and thus invisible).
+
+Here is a short description of each printing mode (expressed in
+bpp/colors):
+
+ 32/4 CMYK Colour printing, Floyd-Steinberg dithering.
+ 24/4 Id. (But each primary colour is stored on 6 bits instead of 8.)
+
+ 24/3 RGB colour printing, Floyd-Steinberg dithering. This mode will
+ *not* use the black cartridge (that's why it exists, for when you
+ don't want to use it ;-)). Each primary colour is stored on 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
+ do not have any control on it. (This mode is not supported anymore
+ on this driver.)
+
+ 16/4 CMYK colour printing, halftoned by Ghostscript. FS dithering
+ is still visible here (but the halftone patterns are visible
+ too!).
+
+ 8/4 Id. (But each primary colour is stored on 2 bits instead of 4.)
+
+ 8/3 RGB colour printing. This mode is not intended to be
+ used. What I mean is that it should be used only if you
+ want to use custom halftone screens *and* the halftoning is
+ broken using the 8/4 mode (some versions of gs have this
+ problem).
+
+ 8/1 Gray-levels printing, Floyd-Steinberg dithering.
+
+ 1/1 Gray-levels printing, halftoned by GhostScript.
+
+These modes are selected using the BitsPerPixel *and* Colors integers
+options (either from the command line or in a PostScript program using
+setpagedevice). See below.
+
+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 gs as in
+
+ % gs -sDEVICE=bjc600 gamma.ps myfile.ps
+
+where gamma.ps changes the gamma correction (here to 3 for all colors):
+
+ { 0.45 exp } dup dup currenttransfer setcolortransfer
+
+(0.45 being value giving good results for me, your mileage may vary;
+the bigger the value the lighter the output).
+
+The drivers support printing at 90 dpi, 180 dpi and 360 dpi. 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**n. (If the
+driver is compiled with -DBJC_STRICT a rangecheck will also happen if
+the resolution is not one of those supported. This is not the case as we
+expect that there may be a 720 dpi bjc someday).
+
+Here are the various options supported by the bjc drivers, along with
+their type, supported values, effect(s) and usage:
+
+ BitsPerPixel (int) Choose the depth of the page. Valid values are
+ 1, 8, 16, 24 and 32. Default is 24.
+ Note that when this is set for the first
+ time, the Colors property is automatically
+ adjusted unless it is also specified. Defaults
+ adjustments are show in the table below,
+ default choices are indicated by a star (*).
+ This table gives also the corresponding
+ color models and the rendering method that is
+ visible (GS means Ghostscript halftoning, FS
+ Floyd-Steinberg dithering, and if both are
+ present it means that the dithering of
+ halftones is visible).
+
+ +-----+--------+---+----------+-------+
+ | Bpp | Colors | * | C. Model | Dith. |
+ +-----+--------+---+----------+-------+
+ | 32 | 4 | | CMYK | FS |
+ +-----+--------+---+----------+-------+
+ | 24 | 4 | * | CMYK | FS |
+ | | 3 | | RGB | FS |
+ +-----+--------+---+----------+-------+
+ | 16 | 4 | | CMYK | GS FS |
+ +-----+--------+---+----------+-------+
+ | 8 | 4 | * | CMYK | GS |
+ | | 3 | | RGB | GS |
+ | | 1 | | K (CMYK) | FS |
+ +-----+--------+---+----------+-------+
+ | 1 | 1 | * | K (CMYK) | GS |
+ +-----+--------+---+----------+-------+
+
+ Valid Colors values for allowed
+ BitsPerPixel values.
+
+ Also note that automagical change of one
+ parameter depending on the other one does not
+ work in a setpagedevice call. This means that
+ if you want to change BitsPerPixel to a value
+ whose valid Colors values do not include the
+ actual Colors value, you must change Colors
+ too.
+
+ Colors (int) Choose the number of color components. Valid
+ values are 1, 3 and 4. Default is 4.
+ This setting cannot be used in a PostScript
+ program, only on Ghostscript's command-line.
+ See ProcessColorModel below for what to use to
+ change the number of colors with PostScript
+ code.
+ Note that setting this property does limit
+ the choices of BitsPerPixel. As for the
+ previous property, its first setting may
+ induce a setting of the "other value" (namely
+ BitsPerPixel, here). Valid combinations are
+ shown in the table below (XX indicates that
+ the combination is valid, ** that this is the
+ default).
+
+ +--------+------+------------------------+
+ | | | BitsPerPixel ok values |
+ | Colors | Type +----+----+----+----+----+
+ | | | 32 | 24 | 16 | 8 | 1 |
+ +--------+------+----+----+----+----+----+
+ | 4 | CMYK | XX | ** | XX | XX | |
+ | 3 | RGB | | ** | | XX | |
+ | 1 | K | | | | XX | ** |
+ +--------+------+----+----+----+----+----+
+
+ Valid BitsPerPixel values
+ for allowed Colors values.
+
+ Also note that automagical change of one
+ parameter depending on the other one does not
+ work in a setpagedevice call. This means that
+ if you want to change Colors to a value whose
+ valid BitsPerPixel values do not include the
+ actual BitsPerPixel value, you must change
+ BitsPerPixel too.
+
+ ProcessColorModel (symbol)
+ A symbol taken from /DeviceGray, /DeviceRGB
+ or /DeviceCMYK which can be used to select 1,
+ 3 or 4 colors respectively.
+ Note that this parameter takes precedence
+ over the Colors one, and that both affect the
+ same variable of the driver. (See Colors above
+ for values combined with BitsPerPixel.)
+
+ HWResolution (floats array)
+ An array of 2 floats giving the horizontal and
+ vertical resolution in dots per inch. Supported
+ values are 90, 180 and 360 and both values
+ must be the same. Default is 360.
+ (On the gs command line, the resolution is
+ changed by saying "-rXDPIxYDPI".)
+
+ ManualFeed (bool) Indicate that the sheets won't be fed automatically
+ by the printer. Default is false.
+ (Not meaningful on the BJC-600, I fear.)
+
+ MediaType (string) Choose the media to print on. Values are chosen
+ amongst "PlainPaper", "CoatedPaper",
+ "TransparencyFilm", "Envelope", "Card" and "Other".
+ Default is "PlainPaper".
+ If the chosen media is "Envelope", "Card" or
+ "Other", the driver will make the printer go
+ in thick mode automatically regardless of the
+ media weight.
+
+ MediaWeight (int or null)
+ Choose the weight of the media (in g/m2). Using
+ null indicates that the weight is of no
+ importance. Default is null.
+ If the specified media weight is greater
+ than 105 (i.e. the value of the compilation
+ default BJC???_MEDIAWEIGHT_THICKLIMIT) then
+ the printer will be setup to use thick paper.
+
+ PrintQuality (string) Choose the quality of printing. For the bjc600
+ driver it can be one of "Normal", "High" and
+ "Draft". For the bjc800 driver it can be one
+ of "Low", "Normal", "High" and "Draft".
+ Default is "Normal" for both drivers.
+ For both drivers, "High" means 200% black and
+ 100% cyan, magenta and yellow (on a bjc600 you
+ will get the "Bk+" light).
+ For the bjc600 driver, "Normal" lits the
+ "HQ" light while "Draft" unlits it.
+ For the bjc800 driver, "Low" has the effect
+ of making only two printing passes instead of
+ four (should be twice as fast ;-)). This is
+ what is known as "CN" (Color Normal) mode.
+
+ DitheringType (string)
+ Choose a dithering algorithm. Actually the
+ only valid values are "Floyd-Steinberg" and
+ "None". "None" is the default for 1/1 print
+ mode, "Floyd-Steinberg" for other modes.
+ At the moment this parameter is read-only,
+ though no error will be generated if one tries
+ to change it.
+ This parameter is not of much value at the
+ moment and is mainly here to reserve the name
+ for future addition of dithering algorithms.
+
+ PrintColors (int) 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 those colour
+ specified will be printed (this means that
+ some planes will be missing).
+ When printing grays, black is used if it is
+ present in the PrintColors; otherwise, the
+ data is printed by superimposing each
+ requested color.
+
+ MonochromePrint (bool)
+ *For bjc600 only*. Substitute black for Cyan,
+ Magenta and Yellow when printing (useful for
+ getting some monochrome output of a dithered
+ printing for example). Default is false.
+ This is a hardware mechanism as opposed to
+ the previous software one. I think that using
+ this or setting PrintColors to 0 will give the
+ same results.
+
+Note that the MediaType and ThickMedia options will be replaced by the use
+of the device InputAttributes and OutputAttributes as soon as possible.
+
+Please note too that the print mode may be reset at the start of a print,
+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
+showpage.
+
+Device Informations
+-------------------
+
+Here are other informations published by the driver that you will find
+in the deviceinfo dictionary:
+
+ OutputFaceUp (bool) This has the boolean value true, indicating that
+ the sheets are stacked face up.
+
+ Version (float) In the form M.mmpp where M is the major version,
+ mm the bjc drivers minor version and pp the specific
+ driver minor version (that is, M.mm will always be
+ the same for the bjc600 and bjc800 drivers).
+
+ VersionString (string)
+ A string that gives the version info plus
+ other indications. At the moment, things like
+ 'a' or 'b' may follow the version to indicate
+ alpha or beta versions and 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!).
+
+Hardware Margins
+----------------
+
+The BJC printers have top and bottom hardware margins of 3 mm and 7.1
+mm respectively (Canon says 7 mm but this is not usable because of
+the rounding of paper sizes to PostScript points).. The left margin is
+3.4 mm for A4 and smaller paper sizes, 6.4 mm for US paper sizes,
+envelopes and cards. It is 4.0 mm for A3 paper on the BJC-800.
+
+The maximum printing width of a BJC-600 printer is 203 mm, in any event.
+The maximum printing width of a BJC-800 printer is 289 mm on A3 paper,
+and 203 mm on letter and A4 paper.
+
+
+POSTSCRIPT PRINTER DESCRIPTION FILES
+------------------------------------
+
+The BJC600.PPD and BJC800.PPD files (whose long names are, respectively,
+Canon_BubbleJetColor_600.ppd and Canon_BubbleJetColor_800.ppd) are PPD
+files driving the features of the bjc600 and bjc800 drivers.
+
+They can be used for example on NEXTSTEP systems (presumably on
+OpenStep systems too) and on Unix systems with Adobe's TranScript and
+pslpr (not tested).
+
+The files are not complete at the moment. Please note too 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.
+
+Customization of the PPD files
+------------------------------
+
+By default the files say that the paper used is US Letter, and they
+use a normalized transfer function.
+ If you choose to use A4 printing by default, you must replace Letter by
+A4 in lines that match the '\*Default.*: Letter' pattern.
+ Some versions of Ghostscript have problems with normalized colors,
+which makes them add magenta in gray levels. If you have this problem,
+replace the '*DefaultTransfer: Normalized' line by the alternate (correct)
+'*DefaultTransfer: Null' line.
+
+Also note that the 'Thick Media' option is implemented by choosing a
+value of 120 or 80 (for thick and thin media respectively) for the
+MediaWeight 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.
+
+All customization should be done using the '*Include: ' feature of PPD
+files so that your local changes will be kept if you get an update of
+these PPD files.
+
+
+OTHER INFORMATIONS
+------------------
+
+Reporting Problems
+------------------
+
+When you report a problem please be as descriptive as possible, and
+please send information that can be used to reproduce the problem.
+ Please don't forget to tell me which driver you use and its
+version. Version information can be found in this file or preferrably
+by issuing the following command in a shell:
+
+ % echo "currentpagedevice /VersionString get ==" | \
+ gs -q -sDEVICE=bjc600 -
+
+(the % doesn't count as part of the command and the device name should
+be the device you really use).
+
+Contact Address
+---------------
+
+If you have problems with this driver (or if you are extremely
+satisfied with it) you may email me at Yves.Arrouye@marin.fdn.fr.
+
+Acknowledgements
+----------------
+
+I am particularly grateful to Yoshio Kuniyoshi <yoshio@nak.math.keio.ac.jp>
+without whom I'd never make these drivers and also to L. Peter Deutsch
+<ghost@aladdin.com> who answered *all* my (often silly) questions about
+the drivers interface used by Ghostscript.
+ Thanks also to the people who volunteered to beta-test the v2.x BJC
+drivers; David Gaudine <david@donald.concordia.ca>, Robert M. Kenney
+<rmk@unh.edu>, James McPherson <someone@erols.com> and Ian Thurlbeck
+<ian@stams.strath.ac.uk> (in an alphabetic listing) were particularly
+helpful by discovering bugs and helping find out exact paper margins on
+printers I don't have access to.
+ And *many* thanks to Klaus-Gunther Hess <gunther@elmos.de> for
+looking at the dithering code and devising a good CMYK dithering
+algorithm for the Stylus Color, which I then adapted to the code of
+these drivers.
+
+### ------------------------------ End --------------------------------- ###
+
+### ---------------- MS-Windows DIB printer driver ----------------- ###
+
+This section was written by Russell Lang, 4 September 1996
+
+The mswinpr2 device uses MS-Windows printer drivers and should work
+with any printer with DIB raster capabilities.
+The printer resolution cannot be selected using PostScript commands
+from Ghostscript; use the printer setup in the Control Panel instead.
+
+If no Windows printer name is specified in -sOutputFile, Ghostscript
+will prompt for a Windows printer using the standard Print Setup
+dialog box. You must set the orientation to Portrait, and you must
+set the page size to that expected by Ghostscript. Failure to do so
+will result in the image being clipped. Ghostscript sets the physical
+device size to that of the Windows printer driver, but it does not
+update the PostScript clipping path.
+
+If a Windows printer name is specified in -sOutputFile, using
+the format "\\spool\printer_name", e.g.
+ -sOutputFile="\\spool\Apple LaserWriter II NT"
+then Ghostscript will attempt to open the Windows printer without
+any prompts (except of course if the printer is connected to FILE:).
+Ghostscript attempts to set the Windows printer page size and orientation
+to match that expected by Ghostscript, but doesn't always succeed.
+The following algorithm is used:
+- If the requested page size matches one of the Windows standard
+ page sizes +/- 2mm, ask for that standard size.
+- Otherwise if the requested page size matches one of the Windows
+ standard page sizes in landscape mode, ask for that standard size
+ in landscape.
+- Otherwise ask for the page size by specifying its dimensions only.
+- If using Windows NT, select a form that matches the page size.
+ (This isn't working at the moment)
+- Merge the above requests with the defaults.
+ If the printer driver ignores the requested paper size, no
+ error will be generated. It will print on the wrong paper size.
+- Open the Windows printer with the merged orientation and size.
+The Ghostscript physical device size will be updated to match
+the Windows printer physical device.
+
+### ------------------------- JPEG file format ------------------------- ###
+
+Ghostscript includes output drivers that can produce JPEG (JFIF) files from
+Postscript images. *Please note* that JPEG is designed for continuous-tone
+images (such as photographs) and is therefore quite unsuitable for the vast
+majority of page images produced with Postscript. 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 available at
+http://www.faqs.org/faqs/jpeg-faq/.
+
+There are two JPEG output drivers, "jpeg" to produce color JPEG files and
+"jpeggray" to produce grayscale JPEGs. Basic usage is the same as for other
+file-format drivers: specify the device name and an output file name, for
+example
+ gs -sDEVICE=jpeg -sOutputFile=foo.jpg foo.ps
+You can also use the -r switch to determine the imaging resolution and thus
+the output file's size in pixels. (The default resolution is normally
+72x72dpi.)
+
+The JPEG devices support two special parameters to control the JPEG "quality
+setting" (DCT quantization level). You can write
+ -dJPEGQ=number
+to set the quality level according to the widely used IJG quality scale; or
+if you prefer Adobe's QFactor quality scale, use
+ -dQFactor=number
+The QFactor scale is used by Postscript's DCTEncode filter but is nearly
+unheard-of elsewhere.
+
+-dJPEGQ accepts an integer from 0 to 100, while -dQFactor expects a decimal
+fraction near 1.0. The default quality level is equivalent to -dJPEGQ=75.
+(At this writing, that is the same as -dQFactor=0.5; but the IJG default
+quality level might change in future releases.)
+
+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.
+
+### ------------------------------ End --------------------------------- ###