summaryrefslogtreecommitdiff
path: root/src/main/print-pcl.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/print-pcl.c')
-rw-r--r--src/main/print-pcl.c112
1 files changed, 103 insertions, 9 deletions
diff --git a/src/main/print-pcl.c b/src/main/print-pcl.c
index 9a8fb2e..2455aa6 100644
--- a/src/main/print-pcl.c
+++ b/src/main/print-pcl.c
@@ -1,5 +1,5 @@
/*
- * "$Id: print-pcl.c,v 1.145.2.1 2007/12/15 20:35:49 rlk Exp $"
+ * "$Id: print-pcl.c,v 1.150 2008/04/26 01:15:11 rlk Exp $"
*
* Print plug-in HP PCL driver for the GIMP.
*
@@ -199,6 +199,9 @@ static const pcl_t pcl_media_types[] =
*/
#define PAPERSOURCE_MOD 16
+#define PAPERSOURCE_340_MOD (PAPERSOURCE_MOD)
+#define PAPERSOURCE_DJ_MOD (PAPERSOURCE_MOD << 1)
+#define PAPERSOURCE_ADJ_GUIDE (PAPERSOURCE_MOD << 2)
#define PCL_PAPERSOURCE_STANDARD 0 /* Don't output code */
#define PCL_PAPERSOURCE_MANUAL 2
@@ -209,20 +212,24 @@ static const pcl_t pcl_media_types[] =
#define PCL_PAPERSOURCE_LJ_TRAY3 4
#define PCL_PAPERSOURCE_LJ_TRAY4 5
#define PCL_PAPERSOURCE_LJ_TRAY1 8
+#define PCL_PAPERSOURCE_LJ_TRAY1_ADJ (PCL_PAPERSOURCE_LJ_TRAY1 + PAPERSOURCE_ADJ_GUIDE)
+#define PCL_PAPERSOURCE_LJ_TRAY2_ADJ (PCL_PAPERSOURCE_LJ_TRAY2 + PAPERSOURCE_ADJ_GUIDE)
+#define PCL_PAPERSOURCE_LJ_TRAY3_ADJ (PCL_PAPERSOURCE_LJ_TRAY3 + PAPERSOURCE_ADJ_GUIDE)
+#define PCL_PAPERSOURCE_LJ_TRAY4_ADJ (PCL_PAPERSOURCE_LJ_TRAY4 + PAPERSOURCE_ADJ_GUIDE)
/* Deskjet 340 types */
-#define PCL_PAPERSOURCE_340_PCSF 1 + PAPERSOURCE_MOD
+#define PCL_PAPERSOURCE_340_PCSF (1 + PAPERSOURCE_340_MOD)
/* Portable sheet feeder for 340 */
-#define PCL_PAPERSOURCE_340_DCSF 4 + PAPERSOURCE_MOD
+#define PCL_PAPERSOURCE_340_DCSF (4 + PAPERSOURCE_340_MOD)
/* Desktop sheet feeder for 340 */
/* Other Deskjet types */
-#define PCL_PAPERSOURCE_DJ_TRAY 1 + PAPERSOURCE_MOD + PAPERSOURCE_MOD
-#define PCL_PAPERSOURCE_DJ_TRAY2 4 + PAPERSOURCE_MOD + PAPERSOURCE_MOD
+#define PCL_PAPERSOURCE_DJ_TRAY (1 + PAPERSOURCE_DJ_MOD)
+#define PCL_PAPERSOURCE_DJ_TRAY2 (4 + PAPERSOURCE_DJ_MOD)
/* Tray 2 for 2500 */
-#define PCL_PAPERSOURCE_DJ_OPTIONAL 5 + PAPERSOURCE_MOD + PAPERSOURCE_MOD
+#define PCL_PAPERSOURCE_DJ_OPTIONAL (5 + PAPERSOURCE_DJ_MOD)
/* Optional source for 2500 */
-#define PCL_PAPERSOURCE_DJ_AUTO 7 + PAPERSOURCE_MOD + PAPERSOURCE_MOD
+#define PCL_PAPERSOURCE_DJ_AUTO (7 + PAPERSOURCE_DJ_MOD)
/* Autoselect for 2500 */
static const pcl_t pcl_media_sources[] =
@@ -230,9 +237,13 @@ static const pcl_t pcl_media_sources[] =
{ "Standard", N_ ("Standard"), PCL_PAPERSOURCE_STANDARD},
{ "Manual", N_ ("Manual"), PCL_PAPERSOURCE_MANUAL},
/* {"Envelope", PCL_PAPERSOURCE_ENVELOPE}, */
+ { "MultiPurposeAdj", N_ ("Tray 1 - Movable Guides"), PCL_PAPERSOURCE_LJ_TRAY1_ADJ},
{ "MultiPurpose", N_ ("Tray 1"), PCL_PAPERSOURCE_LJ_TRAY1},
+ { "UpperAdj", N_ ("Tray 2 - Movable Guides"), PCL_PAPERSOURCE_LJ_TRAY2_ADJ},
{ "Upper", N_ ("Tray 2"), PCL_PAPERSOURCE_LJ_TRAY2},
+ { "LowerAdj", N_ ("Tray 3 - Movable Guides"), PCL_PAPERSOURCE_LJ_TRAY3_ADJ},
{ "Lower", N_ ("Tray 3"), PCL_PAPERSOURCE_LJ_TRAY3},
+ { "LargeCapacityAdj", N_ ("Tray 4 - Movable Guides"), PCL_PAPERSOURCE_LJ_TRAY4_ADJ},
{ "LargeCapacity", N_ ("Tray 4"), PCL_PAPERSOURCE_LJ_TRAY4},
{ "Portable", N_ ("Portable Sheet Feeder"), PCL_PAPERSOURCE_340_PCSF},
{ "Desktop", N_ ("Desktop Sheet Feeder"), PCL_PAPERSOURCE_340_DCSF},
@@ -611,9 +622,13 @@ static const short laserjet_papersources[] =
{
PCL_PAPERSOURCE_STANDARD,
PCL_PAPERSOURCE_MANUAL,
+ PCL_PAPERSOURCE_LJ_TRAY1_ADJ,
PCL_PAPERSOURCE_LJ_TRAY1,
+ PCL_PAPERSOURCE_LJ_TRAY2_ADJ,
PCL_PAPERSOURCE_LJ_TRAY2,
+ PCL_PAPERSOURCE_LJ_TRAY3_ADJ,
PCL_PAPERSOURCE_LJ_TRAY3,
+ PCL_PAPERSOURCE_LJ_TRAY4_ADJ,
PCL_PAPERSOURCE_LJ_TRAY4,
-1,
};
@@ -1034,6 +1049,19 @@ static const pcl_cap_t pcl_model_capabilities[] =
emptylist,
laserjet_papersources,
},
+ /* PCL-4 with large paper */
+ { 23,
+ 13 * 72, 19 * 72,
+ 1, 1, /* Min paper size */
+ PCL_RES_150_150 | PCL_RES_300_300,
+ {12, 12, 18, 18},
+ {12, 12, 10, 10}, /* Check/Fix */
+ PCL_COLOR_NONE,
+ PCL_PRINTER_LJ,
+ ljbig_papersizes,
+ emptylist,
+ laserjet_papersources,
+ },
/* LaserJet III series */
{ 3,
17 * 72 / 2, 14 * 72,
@@ -1047,6 +1075,19 @@ static const pcl_cap_t pcl_model_capabilities[] =
emptylist,
laserjet_papersources,
},
+ /* LaserJet III series */
+ { 31,
+ 17 * 72 / 2, 14 * 72,
+ 1, 1, /* Min paper size */
+ PCL_RES_150_150 | PCL_RES_300_300,
+ {12, 12, 18, 18},
+ {12, 12, 10, 10}, /* Check/Fix */
+ PCL_COLOR_NONE,
+ PCL_PRINTER_LJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
+ ljsmall_papersizes,
+ emptylist,
+ laserjet_papersources,
+ },
/* Some laser printers don't have expanded A4 margins */
{ 32,
17 * 72 / 2, 14 * 72,
@@ -1060,6 +1101,19 @@ static const pcl_cap_t pcl_model_capabilities[] =
emptylist,
laserjet_papersources,
},
+ /* PCL-5 with large paper */
+ { 33,
+ 13 * 72, 19 * 72,
+ 1, 1, /* Min paper size */
+ PCL_RES_150_150 | PCL_RES_300_300,
+ {12, 12, 18, 18},
+ {12, 12, 10, 10}, /* Check/Fix */
+ PCL_COLOR_NONE,
+ PCL_PRINTER_LJ | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE,
+ ljbig_papersizes,
+ emptylist,
+ laserjet_papersources,
+ },
/* LaserJet 4L */
{ 4,
17 * 72 / 2, 14 * 72,
@@ -1114,6 +1168,20 @@ static const pcl_cap_t pcl_model_capabilities[] =
emptylist,
laserjet_papersources,
},
+ /* PCL-5c/5e/6/XL with large paper */
+ { 61,
+ 13 * 72, 19 * 72,
+ 1, 1, /* Min paper size */
+ PCL_RES_150_150 | PCL_RES_300_300 | PCL_RES_600_600,
+ {12, 12, 18, 18},
+ {12, 12, 10, 10}, /* Check/Fix */
+ PCL_COLOR_NONE,
+ PCL_PRINTER_LJ | PCL_PRINTER_NEW_ERG | PCL_PRINTER_TIFF | PCL_PRINTER_BLANKLINE |
+ PCL_PRINTER_DUPLEX,
+ ljbig_papersizes,
+ emptylist,
+ laserjet_papersources,
+ },
/* Some laser printers don't have expanded A4 margins */
{ 62,
17 * 72 / 2, 14 * 72,
@@ -2079,6 +2147,8 @@ pcl_do_print(stp_vars_t *v, stp_image_t *image)
const stp_papersize_t *pp;
int the_top_margin, /* Corrected top margin */
the_left_margin; /* Corrected left margin */
+ int manual_feed_left_adjust = 0;
+ int extra_left_margin = 0;
stp_curve_t *lum_adjustment;
stp_curve_t *hue_adjustment;
double density;
@@ -2264,6 +2334,12 @@ pcl_do_print(stp_vars_t *v, stp_image_t *image)
/* Correct the value by taking the modulus */
+ if ((pcl_media_source & PAPERSOURCE_ADJ_GUIDE) ==
+ PAPERSOURCE_ADJ_GUIDE)
+ {
+ manual_feed_left_adjust = 1;
+ stp_deprintf(STP_DBG_PCL, "Adjusting left margin for manual feed.\n");
+ }
pcl_media_source = pcl_media_source % PAPERSOURCE_MOD;
stp_zprintf(v, "\033&l%dH", pcl_media_source);
}
@@ -2454,8 +2530,26 @@ pcl_do_print(stp_vars_t *v, stp_image_t *image)
stp_deprintf(STP_DBG_PCL, "left %d margin %d top %d margin %d width %d height %d\n",
left, the_left_margin, top, the_top_margin, out_width, out_height);
+ if (manual_feed_left_adjust)
+ {
+ unsigned wdelta = caps->custom_max_width - stp_get_page_width(v);
+ if (wdelta > 0)
+ {
+ /*
+ * Why 3? I would expect it would be 2 here, but it appears
+ * that at least one printer (LJ 1022) actually partially
+ * adjusts the margin itself. Adjusting the left margin by 1/3
+ * of the difference between the maximum width and the actual
+ * width experimentally yields correct results -- rlk 20081014
+ */
+ stp_deprintf(STP_DBG_PCL,
+ " Adjusting manual feed left margin by %d\n", wdelta / 3);
+ extra_left_margin += wdelta / 3;
+ }
+ }
+
if (!privdata.do_cretb) {
- stp_zprintf(v, "\033&a%dH", 10 * left); /* Set left raster position */
+ stp_zprintf(v, "\033&a%dH", 10 * (left + extra_left_margin)); /* Set left raster position */
stp_zprintf(v, "\033&a%dV", 10 * (top + the_top_margin));
/* Set top raster position */
}
@@ -2466,7 +2560,7 @@ pcl_do_print(stp_vars_t *v, stp_image_t *image)
{
/* Move to top left of printed area */
stp_zprintf(v, "\033*p%dY", (top + the_top_margin)*4); /* Measured in dots. */
- stp_zprintf(v, "\033*p%dX", left*4);
+ stp_zprintf(v, "\033*p%dX", (left + extra_left_margin)*4);
}
stp_puts("\033*r1A", v); /* Start GFX */