diff options
Diffstat (limited to 'gs/contrib/pcl3/src/pclcap.c')
-rw-r--r-- | gs/contrib/pcl3/src/pclcap.c | 872 |
1 files changed, 0 insertions, 872 deletions
diff --git a/gs/contrib/pcl3/src/pclcap.c b/gs/contrib/pcl3/src/pclcap.c deleted file mode 100644 index ecf55ed9c..000000000 --- a/gs/contrib/pcl3/src/pclcap.c +++ /dev/null @@ -1,872 +0,0 @@ -/****************************************************************************** - File: $Id: pclcap.c,v 1.17 2001/03/08 09:17:51 Martin Rel $ - Contents: Description of PCL printer capabilities and supporting functionality - Author: Martin Lottermoser, Greifswaldstrasse 28, 38124 Braunschweig, - Germany. E-mail: Martin.Lottermoser@t-online.de. - -******************************************************************************* -* * -* Copyright (C) 2000, 2001 by Martin Lottermoser * -* All rights reserved * -* * -******************************************************************************/ - -/* Configuration management identification */ -#ifndef lint -static const char - cm_id[] = "@(#)$Id: pclcap.c,v 1.17 2001/03/08 09:17:51 Martin Rel $"; -#endif - -/*****************************************************************************/ - -#ifndef _XOPEN_SOURCE -#define _XOPEN_SOURCE 500 -#endif - -/* Standard headers */ -#include <assert.h> -#include <string.h> /* for memset() */ -#include <stdlib.h> - -/* Special headers */ -#include "pclcap.h" -#include "pclsize.h" - -/*****************************************************************************/ - -/* Number of elements in an array */ -#define array_size(a) (sizeof(a)/sizeof(a[0])) - -/* Distance in terms of pixels at 300 ppi */ -#define BP_PER_DOT (BP_PER_IN/300) - -/*****************************************************************************/ - -/* - Lists of media dimensions supported by each model and the (monochrome raster - mode) margins in force for them. Read the comments on 'pcl_PageSize' in - pclgen.h before reading further. - - These data have been obtained from various sources. A number of - inconsistencies and omissions, partially within a single source, indicate - that this information is not entirely reliable. If you find more reliable - information than the one used here or you discover an entry to be definitely - wrong by doing a test on the printer in question, send me a message. - - The PCL documentation (TRG500, DJ3/4, DJ6/8 and DJ1120C) should be the most - reliable and I have usually given it priority. Besides this I have used HP - support documents (e.g., "HP DeskJet 660C Printer - Printable Regions", - BPD02519), user manuals for individual printers, a support document covering - a range of printers ("HP DeskJet and DeskWriter Printers - Printable - Areas/Minimum Margins", BPD05054), and the "Software Developer's Guide for HP - DeskJet Printer Drivers", May 1996 (called "DG" in what follows). - - The DG seems the least reliable. Apart from several internal inconsistencies - (conversion between units), some strange data (unexplicably large top margins) - and frequent deviations from the documentation for the series-500 Deskjets - (TRG500), I also suspect that some of the sizes listed are not supported by - the printer at the PCL level but are handled in the driver, i.e., the driver - uses a PCL Page Size code other than the one belonging to the size requested. - In addition, HP distinguishes at least between margins when printing from DOS - and margins when printing in Windows (see, e.g., BPD02519 for the DJ 660C). - The DG lists the Windows margins which are usually larger than the hardware - margins. I assume the DOS margins to be the real hardware margins. - - A statement that the DeskJets 500 and 500C but not 510, 520, 540, 550C, 560C - or any newer models load envelopes long edge first can be found on p. 24 of - DG. In addition, BPD01246 describes how to load envelopes on the HP DeskJet, - DeskJet Plus, DJ 500 and DJ 500C printers and it has to be done flap first, - i.e., long edge first. - - Some care is necessary when inserting margin specifications. In particular - for envelopes, older (pre-1997) HP documentation frequently gives them in - landscape orientation instead of in portrait orientation as needed here - (except when the MS_TRANSVERSE_FLAG is set). A useful rule of thumb: If the - bottom margin is not the largest of the four margins but the left margin is, - it's very likely landscape. The value should be around 0.5 in (ca. 12 mm). -*/ - -static const eprn_PageDescription - /* Order of margins: left, bottom, right, top. */ - hpdj3xx_sizes[] = { - /* These are the page descriptions for the DeskJets Portable, 310, 320 and - 340, taken from DJ3/4, pp. 1 and 20. When printing in colour, the - bottom margin is larger by 50 d. - Note that BPD05054 gives different margins. - */ - {ms_Letter, - 75*BP_PER_DOT, 120*BP_PER_DOT, 75*BP_PER_DOT, 30*BP_PER_DOT}, - {ms_Legal, - 75*BP_PER_DOT, 120*BP_PER_DOT, 75*BP_PER_DOT, 30*BP_PER_DOT}, - {ms_A4, - 37*BP_PER_DOT, 120*BP_PER_DOT, 43*BP_PER_DOT, 30*BP_PER_DOT}, - {ms_Executive, - 75*BP_PER_DOT, 120*BP_PER_DOT, 75*BP_PER_DOT, 30*BP_PER_DOT}, - {ms_none} - }, - hpdj400_sizes[] = { - /* These are the page descriptions for the DeskJet 400 taken from DJ3/4, - pp. 1 and 21, and are stated to be valid valid for black and colour. - Page 21 contains the following statement: "The mechanism will - physically shift the page image downwards by a nominal 0.08 inch - (2.0 mm)." I conclude this to mean that the real top margin is - 0.08 inch instead of zero as specified and that the real bottom margin - is smaller than specified by 0.08 inch. - Note that BPD05054 gives different margins. - */ - {ms_Letter, - 0.25*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.25*BP_PER_IN, 0.08*BP_PER_IN}, - {ms_Legal, - 0.25*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.25*BP_PER_IN, 0.08*BP_PER_IN}, - {ms_A4, - 0.125*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 3.6*BP_PER_MM, 0.08*BP_PER_IN}, - {ms_Executive, - 0.25*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.25*BP_PER_IN, 0.08*BP_PER_IN}, - {ms_JISB5, - 3.175*BP_PER_MM, (0.5-0.08)*BP_PER_IN, 3.25*BP_PER_MM, 0.08*BP_PER_IN}, - /* DJ3/4 p. 21: "Envelopes are printed in the landscape mode". As the - margins are given such that the largest value is designated as "bottom" - and the bottom is designated on page 19 as a long edge, I conclude that - the DJ 400 feeds envelopes long edge first. The list on p. 1 gives the - dimensions for Env10 in portrait and EnvDL in landscape orientation. - */ - {ms_Env10 | MS_TRANSVERSE_FLAG, - 0.125*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.08*BP_PER_IN, 0.08*BP_PER_IN}, - {ms_EnvDL | MS_TRANSVERSE_FLAG, - 0.125*BP_PER_IN, (0.5-0.08)*BP_PER_IN, 0.11*BP_PER_IN, 0.08*BP_PER_IN}, - {ms_none} - }, - hpdj500_sizes[] = { - /* These are taken from the TRG500 p. 1-18 except for No. 10 envelopes - which are supported according to p. 3-2 and where I took the margins - from BPD05054. The resulting collection agrees with BPD05054 which - declares it to be valid for the HP DeskJet and the HP DeskJet Plus as - well. - Order of margins: left, bottom, right, top. */ - {ms_Letter, - 0.25*BP_PER_IN, 0.57*BP_PER_IN, 0.25*BP_PER_IN, 0.1*BP_PER_IN}, - {ms_Legal, - 0.25*BP_PER_IN, 0.57*BP_PER_IN, 0.25*BP_PER_IN, 0.1*BP_PER_IN}, - {ms_A4, - 3.1*BP_PER_MM, 0.57*BP_PER_IN, 3.6*BP_PER_MM, 0.1*BP_PER_IN}, - {ms_Env10 | MS_TRANSVERSE_FLAG, /* Margins from BPD05054 */ - 0.75*BP_PER_IN, 0.57*BP_PER_IN, 0.75*BP_PER_IN, 0.1*BP_PER_IN}, - {ms_none} - }, - hpdj500c_sizes[] = { - /* The data are from the TRG500 pp. 1-18 and 1-19 except for No. 10 - envelopes which are supported according to p. 3-2 and which I took from - BPD05054. The values listed in both documents agree. - These are the values for the black cartridge; the CMY cartridge needs - 0.17 inches more at the bottom. - Order of margins: left, bottom, right, top. */ - {ms_Letter, - 0.25*BP_PER_IN, 0.4*BP_PER_IN, 0.25*BP_PER_IN, 0.1*BP_PER_IN}, - {ms_Legal, - 0.25*BP_PER_IN, 0.4*BP_PER_IN, 0.25*BP_PER_IN, 0.1*BP_PER_IN}, - {ms_A4, - 3.1*BP_PER_MM, 0.4*BP_PER_IN, 3.6*BP_PER_MM, 0.1*BP_PER_IN}, - {ms_Env10 | MS_TRANSVERSE_FLAG, - /* Margins from BPD05054, but I've chosen 0.4 in for the bottom margin - instead of 0.57 in as listed there because it looks to me like the - colour bottom. Compare with the DJ 500. */ - 0.75*BP_PER_IN, 0.4*BP_PER_IN, 0.75*BP_PER_IN, 0.1*BP_PER_IN}, - {ms_none} - }, - common_sizes[] = { /* DJs 510, 520, 550C und 560C for printing in black */ - /* The data are from the TRG500 p. 1-19 except for envelopes which are - supported according to p. 3-2 and where I took the margins from - BPD05054. The values listed in both documents agree. - For colour, the bottom margin must be increased by 0.13 inches. - Order of margins: left, bottom, right, top. */ - {ms_Letter, - 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Legal, - 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Executive, - 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A4, - 3.1*BP_PER_MM, 0.46*BP_PER_IN, 3.6*BP_PER_MM, 0.04*BP_PER_IN}, - /* Envelopes are supported according the TRG500, the margins are from - BPD05054. */ - {ms_Env10, /* given in landscape by HP */ - 0.123*BP_PER_IN, 0.71*BP_PER_IN, 0.125*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_EnvDL, /* given in landscape by HP */ - 3.1*BP_PER_MM, 18.0*BP_PER_MM, 3.6*BP_PER_MM, 1.0*BP_PER_MM}, - {ms_none} - }, - hpdj540_sizes[] = { - /* The data are from the TRG500 pp. 1-20 and 1-21 except that I have used - a top margin of 0.04 inch from the DG instead of zero from the TRG500. - Taking into account that the bottom margin is larger by 0.13 inches in - colour, the resulting data agree with those in the DG, pp. 65-66. - Order of margins: left, bottom, right, top. */ - {ms_Executive, - 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A4, 3.2*BP_PER_MM, 11.7*BP_PER_MM, 3.2*BP_PER_MM, 0.04*BP_PER_IN}, - {ms_A5, 3.2*BP_PER_MM, 18.0*BP_PER_MM, 3.2*BP_PER_MM, 0.04*BP_PER_IN}, - {ms_JISB5, 4.2*BP_PER_MM, 11.7*BP_PER_MM, 4.2*BP_PER_MM, 0.04*BP_PER_IN}, - {ms_Index4x6in, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Index5x8in, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A6 | PCL_CARD_FLAG, - 3.2*BP_PER_MM, 18.0*BP_PER_MM, 3.2*BP_PER_MM, 0.04*BP_PER_IN}, - {ms_Env10, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - /* given in landscape by HP */ - {ms_EnvDL, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - /* given in landscape by HP */ - {ms_EnvC6, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - /* given in landscape by HP */ - {ms_Postcard, 4.2*BP_PER_MM, 18.0*BP_PER_MM, 4.2*BP_PER_MM, 0.04*BP_PER_IN}, - {ms_none} - }, - hpdj660c_sizes[] = { - /* These are taken from "HP DeskJet 660C Printer - Printable Regions", - BPD02519, 1996 (obtained in March 1997), except that I've again - increased the top margin from zero to 0.04 inches following BPD05054 - and DG pp. 69-70. These are the values for printing in black from DOS. - Colour printing increases the bottom margin by 0.13 inch. Adding this - value reproduces the data from BPD05054 and the DG. This is, however, a - contradiction with DG because BPD02519 gives different values for - printing from Windows. - */ - {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Executive, - 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A4, 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A5, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_JISB5, 0.17*BP_PER_IN, 0.46*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN}, - /* The bottom margin for JISB5 is given with large differences. BPD02519 - specifies it as 0.46 in for black from DOS, 0.59 in DOS/colour (agreeing - with +0.13 in for 'bottom_increment') and the same for Windows black or - colour. BPD05054 gives 0.84 in without distinguishing between black and - colour, and the DG gives 0.59 in. */ - {ms_Env10, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - /* given in landscape by HP */ - {ms_EnvDL, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - /* given in landscape by HP */ - {ms_EnvC6, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - /* given in landscape by HP */ - {ms_Index4x6in, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Index5x8in, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A6 | PCL_CARD_FLAG, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Postcard, - 0.17*BP_PER_IN, 0.71*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_EnvUS_A2, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - /* Supported (BPD02925, BPD05054, DG), margins from BPD05054 agreeing - with DG p. 70 */ - {ms_none} - }, - hpdj680c_sizes[] = { - /* For a change, these data are taken from the DG pp. 73-74. It is assumed - that they are there given for colour printing and that the additional - bottom margin included is 0.13 inches. Except for banner printing which - is not supported by the DJ 660C, this gives identical margins as those - for the DJ 660C. - These data also almost agree with the German printer manual, - Hewlett Packard - "Weitere Informationen ueber den HP DeskJet 690C Series-Drucker" - 1. Auflage, September 1996 - Bestellnummer C4562-60105, Artikelnummer C4562-90160 - for the DJ 690C. The difference is at most 0.31 mm except for the bottom - margin in the case of JIS B5 which is given as 21.2 mm instead of 14.9 mm - (0.83 in vs. 0.59 in). - The DJ 690C does support banner printing (DJ6/8 p. 9). - */ - {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A4, 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Env10, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Executive, - 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_EnvDL, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A5, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_JISB5, 0.17*BP_PER_IN, 0.46*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_EnvC6, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Index4x6in, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Index5x8in, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A6 | PCL_CARD_FLAG, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Postcard, - 0.17*BP_PER_IN, 0.71*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_EnvUS_A2, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Letter | MS_BIG_FLAG, /* banner */ - 0.25*BP_PER_IN, 0.0, 0.25*BP_PER_IN, 0.0}, - {ms_A4 | MS_BIG_FLAG, /* banner */ - 0.13*BP_PER_IN, 0.0, 0.13*BP_PER_IN, 0.0}, - /* BPD05054 claims left and right margins of 0.25 in. */ - {ms_none} - }, - hpdj6xx_and_8xx_sizes[] = { - /* This entry is a combination from the sizes supported according to - DJ6/8 pp. 23-24 by all series 600 and 800 DeskJets, and the corresponding - margins from 'hpdj660c_sizes[]' above. This is only used for - series 600 DeskJets for which there is no other information and not for - series 800 DeskJets. - */ - {ms_Executive, - 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A5, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A4, 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_JISB5, 0.17*BP_PER_IN, 0.46*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Postcard, - 0.17*BP_PER_IN, 0.71*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_DoublePostcard, /* not present in 'hpdj660c_sizes[]'; guessed */ - 0.17*BP_PER_IN, 0.71*BP_PER_IN, 0.17*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A6 | PCL_CARD_FLAG, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Index4x6in, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Index5x8in, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_Env10, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_EnvDL, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_EnvC6, 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_EnvUS_A2, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_none} - }, - hpdj850c_sizes[] = { - /* Apart from JIS B5, these specifications have been taken from the German - HP user manual for the DeskJet 850C, "HP DeskJet 850C Handbuch", - C2145-90248, 3/95. They are valid for black and colour printing. - The manual agrees with "HP DeskJet 850C and 855C Printer -- Printable - Regions" (BPD02523), HP FIRST #: 2789, 1995-09-05, and the newer - "HP DeskJet 855C, 850C, 870C and 890C Series Printers -- Printable Areas" - (BPD02523), effective date 1996-06-06. - There are some minor deviations in the DG, pp. 81-82, which I have - partially adopted. - First some shorthand notation for margin types. The order is: - left, bottom, right, top. - */ -#define type1 6.4*BP_PER_MM, 11.7*BP_PER_MM, 6.4*BP_PER_MM, 1.0*BP_PER_MM -#define type2 3.4*BP_PER_MM, 11.7*BP_PER_MM, 3.4*BP_PER_MM, 1.0*BP_PER_MM -#define type3 3.4*BP_PER_MM, 11.7*BP_PER_MM, 3.4*BP_PER_MM, 11.7*BP_PER_MM -#define type4 3.2*BP_PER_MM, 11.7*BP_PER_MM, 3.2*BP_PER_MM, 1.0*BP_PER_MM -#define type5 3.2*BP_PER_MM, 22.0*BP_PER_MM, 3.2*BP_PER_MM, 1.0*BP_PER_MM - {ms_Letter, type1}, - {ms_Legal, type1}, - {ms_Executive, type1}, - {ms_A4, type2}, - {ms_A5, type2}, /* also BPD05054. DG: type4 */ - {ms_JISB5, type4}, /* from DG */ - /* The German handbook as well as BPD02523 and BPD05054 state that this - should be type3. This is however demonstrably wrong for the DJ 850C. - Besides I can't see why the top margin should be so much larger for - JIS B5 than for the other sizes. 'type4' agrees fairly well with what - I've measured on a DJ 850C. In particular the right and bottom clipping - margins are definitely close to 3 and 11.5 mm, respectively. - */ - {ms_Index4x6in, type4}, - {ms_Index5x8in, type4}, - {ms_A6 | PCL_CARD_FLAG, type4}, - {ms_Postcard, type4}, - {ms_Env10, type5}, - {ms_EnvDL, type5}, - {ms_EnvC6, type5}, - /* BPD02926 claims that the series-800 DeskJets support also US A2 envelope - size (ms_EnvUS_A2). I've experimented with a DeskJet 850C and I don't - believe it: when sent this page size code, the printer establishes - clipping regions which agree with those for US Letter size. This - indicates that the PCL interpreter has not recognized the page size code - and has therefore switched to the default size. */ - {ms_none} -#undef type1 -/* type2 will be needed in a moment */ -#undef type3 -#undef type4 -#undef type5 - }, - hpdj1120c_sizes[] = { - /* These values are from DJ1120C, pp. 11-12, and from BPD05567. I don't - consider them particularly trustworthy. */ - {ms_Executive, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, - 0.12*BP_PER_IN}, - {ms_Letter, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, - 0.12*BP_PER_IN}, - {ms_Legal, 0.25*BP_PER_IN, 0.46*BP_PER_IN, 0.25*BP_PER_IN, - 0.12*BP_PER_IN}, - {ms_Tabloid, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, - 0.12*BP_PER_IN}, - {ms_Statement, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, - 0.12*BP_PER_IN}, /* Not in BPD05567. */ - {ms_HPSuperB, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, - 0.12*BP_PER_IN}, - {ms_A6, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, /* Not in BPD05567. */ - {ms_A5, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_A4, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.13 in, 0.46 in, 0.13 in, 0.12 in. */ - {ms_A3, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, - 0.12*BP_PER_IN}, /* Only in BPD05567. */ - {ms_JISB5, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_JISB4, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, - 0.12*BP_PER_IN}, /* Not in BPD05567. */ - {ms_Postcard, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_A6 | PCL_CARD_FLAG, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_Index4x6in, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_Index5x8in, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_Env10, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_EnvDL, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_EnvC6, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_EnvUS_A2, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_EnvChou3, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_EnvChou4, 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, - 0.12*BP_PER_IN}, - /* BPD05567: 0.12 in, 0.46 in, 0.12 in, 0.12 in. */ - {ms_EnvKaku2, 0.20*BP_PER_IN, 0.46*BP_PER_IN, 0.20*BP_PER_IN, - 0.12*BP_PER_IN}, /* Not in BPD05567. */ - /* Banners are listed only in BPD05567: */ - {ms_Letter | MS_BIG_FLAG, - 0.25*BP_PER_IN, 0, 0.25*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_A4 | MS_BIG_FLAG, - 0.13*BP_PER_IN, 0, 0.13*BP_PER_IN, 0.04*BP_PER_IN}, - {ms_none} - }; - -/*---------------------------------------------------------------------------*/ - -/* Custom page size descriptions. - First the limits: width min and max, height min and max. - Then the margins in the usual order: left, bottom, right, top. - - Again, I have assumed something I could find no explicit documentation for, - namely that these limits refer to raster space (which is identical to - pixmap device space for the 'pcl3' device). It is, however, clear from the - upper limits for the DJ 850C that "height" does not refer to the direction - orthogonal to the feeding direction. - */ -static const eprn_CustomPageDescription - hpdj540_custom_sizes[] = { - /* These values are taken from the document "HP DeskJet 540 Printer - - Print Regions", BPD02194, 1996, except for the right margin which is - stated to be application-dependent (the TRG500 recommends that one should - enforce at least 1/8 in) and the top margin which I've extended from - zero to 0.04 in. - These are the correct values for printing in black. Note that the - DeskJet 540 in colour mode needs a bottom margin which is larger by - 0.13 in. - */ - { /* Page width 7.12 to 8.5 in */ - ms_CustomPageSize, - 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, 0.04*BP_PER_IN, - 7.12*BP_PER_IN, 8.5*BP_PER_IN, 5.83*BP_PER_IN, 14*BP_PER_IN - }, - { /* Page width 5 to 7.12 in */ - ms_CustomPageSize, - 0.13*BP_PER_IN, 0.71*BP_PER_IN, 0.125*BP_PER_IN, 0.04*BP_PER_IN, - 5*BP_PER_IN, 7.12*BP_PER_IN, 5.83*BP_PER_IN, 14*BP_PER_IN - }, - {ms_none, 0, 0, 0, 0, 0, 0, 0, 0} - }, - hpdj_6xx_and_8xx_custom_sizes[] = { - /* Ranges from DJ6/8 p. 23, margins from A4 for the DJ 660C (BPD02519) */ - { - ms_CustomPageSize, - 0.13*BP_PER_IN, 0.46*BP_PER_IN, 0.13*BP_PER_IN, 0.04*BP_PER_IN, - 5*BP_PER_IN, 8.5*BP_PER_IN, 148*BP_PER_MM, 14*BP_PER_IN - }, - {ms_none, 0, 0, 0, 0, 0, 0, 0, 0} - }, - hpdj850c_custom_sizes[] = { - { /* - The following values have been taken from the German DeskJet 850C - manual, "HP DeskJet 850C Handbuch", C2145-90248, 3/95. - They agree with the values given in the newer version of BPD02523 for - the DeskJets 850C, 855C, 870C and 890C except that the left and right - margins are stated to be 3.44 mm instead of 3.4 mm. This is almost - certainly a misprint because the accompanying value in inches is - identical (0.13 in, i.e. 3.30 mm), and specifying the margins to a - hundredth of a millimetre is ridiculous. - */ - ms_CustomPageSize, - type2, - 100*BP_PER_MM, 216*BP_PER_MM, 148*BP_PER_MM, 356*BP_PER_MM - }, - {ms_none, 0, 0, 0, 0, 0, 0, 0, 0} - }, - hpdj1120c_custom_sizes[] = { - { /* Taken from DJ1120C pp. 10 and 12. The minimum sizes are guessed - (smallest supported discrete dimensions) */ - ms_CustomPageSize, - 0.125*BP_PER_IN, 0.46*BP_PER_IN, 0.125*BP_PER_IN, 0.12*BP_PER_IN, - 90*BP_PER_MM, 13*BP_PER_IN, 146*BP_PER_MM, 19*BP_PER_IN, - }, - {ms_none, 0, 0, 0, 0, 0, 0, 0, 0} - }, - any_custom_sizes[] = { - /* Any value is permitted in this case. This is approximated by permitting - 10^-37-10^37 bp for both, width and height (10^37 bp = 3.5*10^33 m). - Note that 10^37 is the smallest upper bound and 10^-37 the largest lower - bound for 'float' values permitted by the C standard. */ - { - ms_CustomPageSize, - type2, /* use DJ 850C margins */ - 1.0E-37, 1.0E37, 1.0E-37, 1.0E37 - }, - {ms_none, 0, 0, 0, 0, 0, 0, 0, 0} - }; - -#undef type2 - -/*****************************************************************************/ - -/* Resolution lists */ -static const eprn_Resolution - threehundred[] = { - { 300, 300 }, { 0, 0 } - }, - six_by_three[] = { - { 600, 300 }, { 0, 0 } - }, - sixhundred[] = { - { 600, 600 }, { 0, 0 } - }, - basic_resolutions[] = { - { 75, 75 }, { 100, 100 }, { 150, 150 }, { 300, 300 }, { 0, 0 } - /* This is the list of resolutions supported by the series 300, 400 and - 500 DeskJets (except the DJ 540) in black and colour and by the series - 600 and 800 DeskJets (except the DJs 85xC) in colour. */ - }, - basic_without_100[] = { - { 75, 75 }, { 150, 150 }, { 300, 300 }, { 0, 0 } - }, - rel_hpdj1120c_black[] = { - { 150, 150 }, { 300, 300 }, { 600, 600 }, { 0, 0 } - }, - rel_150_and_300[] = { - { 150, 150 }, { 300, 300 }, { 0, 0 } - }; - -/* Lists of permitted numbers of intensity levels */ -static const eprn_IntensityLevels - two_levels[] = { {2, 2}, {0, 0} }, - four_levels[] = { {4, 4}, {0, 0} }, - two_to_four_levels[] = { {2, 4}, {0, 0} }, - three_to_four_levels[] = { {3, 4}, {0, 0} }, - any_levels[] = { {2, 65535}, {0, 0} }; - /* More than 65535 levels cannot be represented in a Configure Raster Data - command with format 2. */ - -/* Combinations of resolutions and intensity levels */ -static const eprn_ResLev - rl_basic[] = { - {basic_resolutions, two_levels}, {NULL, NULL} - }, - rl_basic_without_100[] = { - {basic_without_100, two_levels}, {NULL, NULL} - }, - rl_hpdj6xx_black[] = { - {basic_resolutions, two_levels}, {six_by_three, two_levels}, - {sixhundred, two_levels}, {NULL, NULL} - }, - rl_hpdj6xx_colour[] = { - {basic_resolutions, two_levels}, {six_by_three, two_levels}, {NULL, NULL} - }, - rl_three[] = { - {threehundred, two_levels}, {NULL, NULL} - }, - rl_six[] = { - {sixhundred, two_levels}, {NULL, NULL} - }, - rl_hpdj85x_black[] = { - {basic_without_100, two_levels}, {sixhundred, two_levels}, {NULL, NULL} - }, - rl_three_with_levels_2_4[] = { - {threehundred, two_to_four_levels}, {NULL, NULL} - }, - rl_three_with_levels_3_4[] = { - {threehundred, three_to_four_levels}, {NULL, NULL} - }, - rl_three_with_levels_4[] = { - {threehundred, four_levels}, {NULL, NULL} - }, - rl_hpdj1120c_black[] = { - {rel_hpdj1120c_black, two_levels}, - {threehundred, four_levels}, - {NULL, NULL} - }, - rl_150_and_300[] = { - {rel_150_and_300, two_levels}, {NULL, NULL} - }, - rl_any_two_levels[] = { - /* Any resolution, but only two intensity levels */ - {NULL, two_levels}, {NULL, NULL} - }, - rl_any[] = { - {NULL, any_levels}, {NULL, NULL} - }; - -/*****************************************************************************/ - -/* Colour capability lists */ -static const eprn_ColourInfo - ci_old_mono[] = { /* DeskJet 5xx monochrome printers */ - { eprn_DeviceGray, {rl_basic, NULL} }, - { eprn_DeviceGray, {NULL, NULL} } - }, - ci_hpdj500c[] = { /* HP DeskJet 500C: black or CMY cartridge */ - { eprn_DeviceGray, {rl_basic, NULL} }, - { eprn_DeviceCMY, {rl_basic, NULL} }, - { eprn_DeviceGray, {NULL, NULL} } - }, - ci_hpdj540[] = { /* HP DeskJet 540: black or CMY cartridge */ - { eprn_DeviceGray, {rl_basic_without_100, NULL} }, - { eprn_DeviceCMY, {rl_basic_without_100, NULL} }, - { eprn_DeviceGray, {NULL, NULL} } - }, - ci_hpdj5xx_cmyk[] = { - /* HP DeskJet 550C or 560C: black and CMY cartridges, but the inks should - not mix. */ - { eprn_DeviceGray, {rl_basic, NULL} }, - { eprn_DeviceCMY, {rl_basic, NULL} }, - { eprn_DeviceCMY_plus_K, {rl_basic, NULL} }, - { eprn_DeviceGray, {NULL, NULL} } - }, - ci_hpdj600[] = { - /* HP DeskJet 600: black or CMY cartridge */ - { eprn_DeviceGray, {rl_hpdj6xx_black, NULL} }, - { eprn_DeviceCMY, {rl_hpdj6xx_colour, NULL} }, - { eprn_DeviceGray, {NULL, NULL} } - }, - ci_hpdj6xx[] = { - /* Series-600 CMYK printers */ - { eprn_DeviceGray, {rl_hpdj6xx_black, NULL} }, - { eprn_DeviceCMY, {rl_hpdj6xx_colour, NULL} }, - { eprn_DeviceCMYK, {rl_hpdj6xx_colour, NULL} }, - { eprn_DeviceCMYK, {rl_six, rl_three} }, - { eprn_DeviceGray, {NULL, NULL} } - }, - ci_hpdj85x[] = { - { eprn_DeviceGray, {rl_hpdj85x_black, NULL} }, - { eprn_DeviceCMY, {rl_basic_without_100, NULL} }, - { eprn_DeviceCMYK, {rl_basic_without_100, NULL} }, - /* The following I have determined experimentally on a DJ 850C: */ - { eprn_DeviceGray, {rl_three_with_levels_4, NULL} }, - { eprn_DeviceCMYK, {rl_six, rl_three_with_levels_2_4} }, - { eprn_DeviceCMYK, {rl_three_with_levels_4, rl_three_with_levels_3_4} }, - { eprn_DeviceGray, {NULL, NULL} } - }, - ci_hpdj1120c[] = { - /* DJ1120C p. 48 */ - { eprn_DeviceGray, {rl_hpdj1120c_black, NULL} }, - { eprn_DeviceCMYK, {rl_six, rl_three_with_levels_4} }, - { eprn_DeviceCMYK, {rl_six, rl_three} }, - { eprn_DeviceCMYK, {rl_three_with_levels_4, rl_three_with_levels_3_4} }, - { eprn_DeviceCMYK, {rl_150_and_300, NULL} }, - /* The following are combined from DJ1120C pp. 36 and 52. */ - { eprn_DeviceGray, {rl_hpdj85x_black, NULL} }, - { eprn_DeviceCMY, {rl_basic_without_100, NULL} }, - { eprn_DeviceCMYK, {rl_basic_without_100, NULL} }, - { eprn_DeviceGray, {NULL, NULL} } - }, - ci_any[] = { - { eprn_DeviceGray, {rl_any, NULL} }, - { eprn_DeviceRGB, {rl_any_two_levels, NULL} }, - { eprn_DeviceCMY, {rl_any, NULL} }, - { eprn_DeviceCMYK, {rl_any, rl_any} }, - { eprn_DeviceGray, {NULL, NULL} } - }; - -/*****************************************************************************/ - -/* Descriptions of known PCL printers */ - -const pcl_PrinterDescription pcl3_printers[] = { - /* For the HP DeskJet and the HP DeskJet Plus I am guessing that they can - be treated like the DJ 500. This seems reasonable because several HP - documents group the HP DeskJet, the HP DeskJet Plus and the 500 and - 500C DeskJets together. */ - { HPDeskJet, pcl_level_3plus_DJ500, - { "HP DeskJet", hpdj500_sizes, NULL, 0.0, ci_old_mono } }, - { HPDeskJetPlus, pcl_level_3plus_DJ500, - { "HP DeskJet Plus", hpdj500_sizes, NULL, 0.0, ci_old_mono } }, - { HPDJPortable, pcl_level_3plus_S5, - { "HP DeskJet Portable", hpdj3xx_sizes, NULL, 0.0, ci_old_mono } }, - /* DJ3/4 p. 2: This printer behaves as the 550C without the colour - cartridge. */ - { HPDJ310, pcl_level_3plus_S5, - { "HP DeskJet 310", hpdj3xx_sizes, NULL, 50*BP_PER_DOT, ci_hpdj500c } }, - /* DJ3/4 p. 3: The 3xx DeskJets with the black cartridge installed behave - identically to the DJ Portable, with the colour cartridge they can be - treated as the DJ 500C. */ - { HPDJ320, pcl_level_3plus_S5, - { "HP DeskJet 320", hpdj3xx_sizes, NULL, 50*BP_PER_DOT, ci_hpdj500c } }, - { HPDJ340, pcl_level_3plus_S5, - { "HP DeskJet 340", hpdj3xx_sizes, NULL, 50*BP_PER_DOT, ci_hpdj500c } }, - { HPDJ400, pcl_level_3plus_S5, - { "HP DeskJet 400", hpdj400_sizes, NULL, 0.0, ci_hpdj500c } }, - /* DJ3/4 p. 3 and p. 6. */ - { HPDJ500, pcl_level_3plus_DJ500, - {"HP DeskJet 500", hpdj500_sizes, NULL, 0.0, ci_old_mono } }, - { HPDJ500C, pcl_level_3plus_S5, - { "HP DeskJet 500C", hpdj500c_sizes, NULL, 0.17*BP_PER_IN, ci_hpdj500c } }, - { HPDJ510, pcl_level_3plus_S5, - { "HP DeskJet 510", common_sizes, NULL, 0.0, ci_old_mono } }, - { HPDJ520, pcl_level_3plus_S5, - { "HP DeskJet 520", common_sizes, NULL, 0.0, ci_old_mono } }, - { HPDJ540, pcl_level_3plus_S68, - { "HP DeskJet 540", hpdj540_sizes, hpdj540_custom_sizes, - 0.13*BP_PER_IN, ci_hpdj540 } }, - { HPDJ550C, pcl_level_3plus_S5, - { "HP DeskJet 550C", common_sizes, NULL, 0.13*BP_PER_IN, ci_hpdj5xx_cmyk }}, - { HPDJ560C, pcl_level_3plus_S5, - { "HP DeskJet 560C", common_sizes, NULL, 0.13*BP_PER_IN, ci_hpdj5xx_cmyk }}, - { pcl3_generic_old, pcl_level_3plus_ERG_both, - { "unspecified PCL-3+ printer (old)", common_sizes, NULL, 0.0, ci_any } }, - { HPDJ600, pcl_level_3plus_S68, - { "HP DeskJet 600", hpdj6xx_and_8xx_sizes, hpdj_6xx_and_8xx_custom_sizes, - 0.13*BP_PER_IN, ci_hpdj600 } }, - { HPDJ660C, pcl_level_3plus_S68, - { "HP DeskJet 660C", hpdj660c_sizes, hpdj_6xx_and_8xx_custom_sizes, - 0.13*BP_PER_IN, ci_hpdj6xx } }, - { HPDJ670C, pcl_level_3plus_S68, - { "HP DeskJet 670C", hpdj660c_sizes, hpdj_6xx_and_8xx_custom_sizes, - 0.13*BP_PER_IN, ci_hpdj6xx } }, - /* This printer can be treated as the DJ 660C (DJ6/8 p. 2). */ - { HPDJ680C, pcl_level_3plus_S68, - { "HP DeskJet 680C", hpdj680c_sizes, hpdj_6xx_and_8xx_custom_sizes, - 0.13*BP_PER_IN, ci_hpdj6xx } }, - { HPDJ690C, pcl_level_3plus_S68, - { "HP DeskJet 690C", hpdj680c_sizes, hpdj_6xx_and_8xx_custom_sizes, - 0.13*BP_PER_IN, ci_hpdj6xx } }, - { HPDJ850C, pcl_level_3plus_S68, - { "HP DeskJet 850C", hpdj850c_sizes, hpdj850c_custom_sizes, - 0.0, ci_hpdj85x } }, - { HPDJ855C, pcl_level_3plus_S68, - { "HP DeskJet 855C", hpdj850c_sizes, hpdj850c_custom_sizes, - 0.0, ci_hpdj85x } }, - /* I'm treating the 870C and the 890C just as the 85xCs. */ - { HPDJ870C, pcl_level_3plus_S68, - { "HP DeskJet 870C", hpdj850c_sizes, hpdj850c_custom_sizes, - 0.0, ci_hpdj85x } }, - { HPDJ890C, pcl_level_3plus_S68, - { "HP DeskJet 890C", hpdj850c_sizes, hpdj850c_custom_sizes, - 0.0, ci_hpdj85x } }, - { HPDJ1120C, pcl_level_3plus_S68, - { "HP DeskJet 1120C", hpdj1120c_sizes, hpdj1120c_custom_sizes, - 0.0, ci_hpdj1120c } }, - { pcl3_generic_new, pcl_level_3plus_S68, - {"unspecified PCL-3+ printer", - hpdj850c_sizes, any_custom_sizes, 0.0, ci_any }} -}; - -/*****************************************************************************/ - -#ifndef NDEBUG - -static int checked = 0; - -static void check(void) -{ - int j; - - /* Check that 'pcl3_printers[]' is indexed by printer code */ - for (j = 0; j < array_size(pcl3_printers); j++) - assert(pcl3_printers[j].id == j); - - checked = 1; - - return; -} - -#endif /* !NDEBUG */ - -/****************************************************************************** - - Function: pcl3_fill_defaults - - This function overwrites all fields in '*data' irrespective of their old - contents and replaces them with default values acceptable for the printer. - In particular, everything which is printer-specific and cannot be chosen by - the user will be set in accordance with 'printer'. - -******************************************************************************/ - -void pcl3_fill_defaults(pcl_Printer printer, pcl_FileData *data) -{ -#ifndef NDEBUG - if (!checked) check(); -#endif /* !NDEBUG */ - - /* Set everything to zero */ - memset(data, 0, sizeof(pcl_FileData)); - - /* Data which must not be zero */ - /* At present, every printer listed here supports 300 ppi monochrome data - with two intensity levels. Hence we need not look at the printer - description. */ - data->number_of_colorants = 1; - data->colorant_array[0].hres = data->colorant_array[0].vres = 300; - data->colorant_array[0].levels = 2; - - /* Data which are fixed by the printer model */ - data->level = pcl3_printers[printer].level; - - /* Data for which zero is acceptable but not sensible */ - data->duplex = -1; /* no simplex/duplex requests */ - data->dry_time = -1; /* request no dry time */ - switch (printer) { - case HPDeskJet: - /*FALLTHROUGH*/ - case HPDeskJetPlus: - /*FALLTHROUGH*/ - case HPDJ500: - /* The DJ 500 does not support method 9 but it does support method 3 - (TRG500). I am guessing that the same is true for the HP DeskJet and - the HP DeskJet Plus. */ - data->compression = pcl_cm_delta; - break; - case pcl3_generic_old: - /*FALLTHROUGH*/ - case pcl3_generic_new: - /* All HP drivers I have seen use method 2 when writing a PCL file to - disk. Presumably, this is the most portable compression method. */ - data->compression = pcl_cm_tiff; - break; - default: - /* The best compression method, but not always supported. */ - data->compression = pcl_cm_crdr; - } - - /* Derived data */ - pcl3_set_oldquality(data); - - return; -} |