[gs-cvs] rev 8124 - in trunk/gs: contrib src
henrys at ghostscript.com
henrys at ghostscript.com
Sat Jul 14 12:18:43 PDT 2007
Author: henrys
Date: 2007-07-14 12:18:42 -0700 (Sat, 14 Jul 2007)
New Revision: 8124
Modified:
trunk/gs/contrib/gdevhl12.c
trunk/gs/src/gdevdjet.c
trunk/gs/src/gdevdljm.c
trunk/gs/src/gdevdljm.h
Log:
Changes from Neil Muller to support tumble duplex in several deskjet
printers (see 687978). We have done no testing of these changes.
Modified: trunk/gs/contrib/gdevhl12.c
===================================================================
--- trunk/gs/contrib/gdevhl12.c 2007-07-13 18:48:05 UTC (rev 8123)
+++ trunk/gs/contrib/gdevhl12.c 2007-07-14 19:18:42 UTC (rev 8124)
@@ -667,7 +667,8 @@
sprintf(page_init, "\033&l-120U\033*r0F\033&u%dD%s", y_dpi, tray_pcl);
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- y_dpi, PCL_LJ4_FEATURES, page_init);
+ y_dpi, PCL_LJ4_FEATURES,
+ page_init, page_init, false);
}
return hl1250_print_1200dpi(pdev, prn_stream, num_copies, tray_pcl);
}
Modified: trunk/gs/src/gdevdjet.c
===================================================================
--- trunk/gs/src/gdevdjet.c 2007-07-13 18:48:05 UTC (rev 8123)
+++ trunk/gs/src/gdevdjet.c 2007-07-14 19:18:42 UTC (rev 8124)
@@ -129,13 +129,14 @@
bool MediaPosition_set;
bool ManualFeed;
bool ManualFeed_set;
+ bool Tumble;
};
#define HPJET_DEVICE(procs, dname, w10, h10, xdpi, ydpi, lm, bm, rm, tm, color_bits, print_page_copies)\
{ prn_device_std_margins_body_copies(gx_device_hpjet, procs, dname, \
w10, h10, xdpi, ydpi, lm, tm, lm, bm, rm, tm, color_bits, \
print_page_copies), \
- 0, false, false, false }
+ 0, false, false, false, false }
const gx_device_hpjet gs_deskjet_device =
HPJET_DEVICE(prn_hp_procs, "deskjet",
@@ -336,7 +337,7 @@
hpjet_make_init(pdev, init, "\033&k1W\033*b2M");
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 300, PCL_DJ_FEATURES, init);
+ 300, PCL_DJ_FEATURES, init, init, false);
}
/* The DeskJet500 can compress (modes 2&3) */
private int
@@ -347,7 +348,7 @@
hpjet_make_init(pdev, init, "\033&k1W");
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 300, PCL_DJ500_FEATURES, init);
+ 300, PCL_DJ500_FEATURES, init, init, false);
}
/* The Kyocera FS-600 laser printer (and perhaps other printers */
/* which use the PeerlessPrint5 firmware) doesn't handle */
@@ -364,7 +365,7 @@
hpjet_make_init(pdev, init, base_init);
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
dots_per_inch, PCL_FS600_FEATURES,
- init);
+ init, init, false);
}
/* The LaserJet series II can't compress */
private int
@@ -375,7 +376,7 @@
hpjet_make_init(pdev, init, "\033*b0M");
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 300, PCL_LJ_FEATURES, init);
+ 300, PCL_LJ_FEATURES, init, init, false);
}
/* The LaserJet Plus can't compress */
private int
@@ -386,7 +387,7 @@
hpjet_make_init(pdev, init, "\033*b0M");
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 300, PCL_LJplus_FEATURES, init);
+ 300, PCL_LJplus_FEATURES, init, init, false);
}
/* LaserJet series IIp & IId compress (mode 2) */
/* but don't support *p+ or *b vertical spacing. */
@@ -398,7 +399,7 @@
hpjet_make_init(pdev, init, "\033*r0F\033*b2M");
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 300, PCL_LJ2p_FEATURES, init);
+ 300, PCL_LJ2p_FEATURES, init, init, false);
}
/* All LaserJet series IIIs (III,IIId,IIIp,IIIsi) compress (modes 2&3) */
/* They also need their coordinate system translated slightly. */
@@ -410,7 +411,7 @@
hpjet_make_init(pdev, init, "\033&l-180u36Z\033*r0F");
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 300, PCL_LJ3_FEATURES, init);
+ 300, PCL_LJ3_FEATURES, init, init, false);
}
/* LaserJet IIId is same as LaserJet III, except for duplex */
private int
@@ -418,10 +419,15 @@
int num_copies)
{
char init[80];
+ char even_init[80];
+ gx_device_hpjet *dev = (gx_device_hpjet *)pdev;
+ bool tumble=dev->Tumble;
+
hpjet_make_init(pdev, init, "\033&l-180u36Z\033*r0F");
+ hpjet_make_init(pdev, even_init, "\033&l180u36Z\033*r0F");
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 300, PCL_LJ3D_FEATURES, init);
+ 300, PCL_LJ3D_FEATURES, init, even_init, tumble);
}
/* LaserJet 4 series compresses, and it needs a special sequence to */
/* allow it to specify coordinates at 600 dpi. */
@@ -436,9 +442,10 @@
sprintf(base_init, "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch);
hpjet_make_init(pdev, init, base_init);
+
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
dots_per_inch, PCL_LJ4_FEATURES,
- init);
+ init, init, false);
}
private int
ljet4d_print_page_copies(gx_device_printer * pdev, FILE * prn_stream,
@@ -447,12 +454,19 @@
int dots_per_inch = (int)pdev->y_pixels_per_inch;
char base_init[60];
char init[80];
+ char even_base_init[80];
+ char even_init[80];
+ gx_device_hpjet *dev = (gx_device_hpjet *)pdev;
+ bool tumble=dev->Tumble;
+
sprintf(base_init, "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch);
hpjet_make_init(pdev, init, base_init);
+ sprintf(even_base_init, "\033&l180u36Z\033*r0F\033&u%dD", dots_per_inch);
+ hpjet_make_init(pdev, even_init, even_base_init);
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
dots_per_inch, PCL_LJ4D_FEATURES,
- init);
+ init,even_init,tumble);
}
/* LaserJet 4 series compresses, and it needs a special sequence to */
@@ -467,7 +481,7 @@
sprintf(real_init, "\033&l-180u36Z\033*r0F\033&u%dD", dots_per_inch);
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
dots_per_inch, PCL_LJ4PJL_FEATURES,
- real_init);
+ real_init, real_init, false);
}
/* The 2563B line printer can't compress */
@@ -480,7 +494,7 @@
hpjet_make_init(pdev, init, "\033*b0M");
return dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 300, PCL_LP2563B_FEATURES, init);
+ 300, PCL_LP2563B_FEATURES, init, init, false);
}
/* The Oce line printer has TIFF compression */
/* and doesn't support *p+ or *b vertical spacing. */
@@ -500,7 +514,7 @@
hpjet_make_init(pdev, init, "\033*b0M");
code = dljet_mono_print_page_copies(pdev, prn_stream, num_copies,
- 400, PCL_OCE9050_FEATURES, init);
+ 400, PCL_OCE9050_FEATURES, init, init, false);
/* Return to HPGL/2 mode. */
fputs("\033%1B", prn_stream); /* Enter HPGL/2 mode */
@@ -520,7 +534,11 @@
int code = gdev_prn_get_params(pdev, plist);
if (code >= 0)
+ {
code = param_write_bool(plist, "ManualFeed", &dev->ManualFeed);
+ }
+ if (code >=0)
+ code = param_write_bool(plist, "Tumble", &dev->Tumble);
return code;
}
@@ -533,6 +551,7 @@
bool ManualFeed_set = false;
int MediaPosition;
bool MediaPosition_set = false;
+ bool Tumble;
code = param_read_bool(plist, "ManualFeed", &ManualFeed);
if (code == 0) ManualFeed_set = true;
@@ -545,11 +564,14 @@
}
}
}
+ if (code>=0)
+ code=param_read_bool(plist,"Tumble",&Tumble);
if (code >= 0)
code = gdev_prn_put_params(pdev, plist);
if (code >= 0) {
+ dev->Tumble=Tumble;
if (ManualFeed_set) {
dev->ManualFeed = ManualFeed;
dev->ManualFeed_set = true;
Modified: trunk/gs/src/gdevdljm.c
===================================================================
--- trunk/gs/src/gdevdljm.c 2007-07-13 18:48:05 UTC (rev 8123)
+++ trunk/gs/src/gdevdljm.c 2007-07-14 19:18:42 UTC (rev 8124)
@@ -47,12 +47,12 @@
int dots_per_inch, int features, const char *page_init)
{
return dljet_mono_print_page_copies(pdev, prn_stream, 1, dots_per_inch,
- features, page_init);
+ features, page_init, page_init, false);
}
int
dljet_mono_print_page_copies(gx_device_printer * pdev, FILE * prn_stream,
int num_copies, int dots_per_inch, int features,
- const char *page_init)
+ const char *odd_page_init, const char *even_page_init, bool tumble)
{
int line_size = gdev_mem_bytes_per_scan_line((gx_device *) pdev);
int line_size_words = (line_size + W - 1) / W;
@@ -112,8 +112,10 @@
}
/* If printer can duplex, set duplex mode appropriately. */
if (features & PCL_HAS_DUPLEX) {
- if (dupset && dup)
+ if (dupset && dup && !tumble)
fputs("\033&l1S", prn_stream);
+ else if (dupset && dup && tumble)
+ fputs("\033&l2S", prn_stream);
else if (dupset && !dup)
fputs("\033&l0S", prn_stream);
else /* default to duplex for this printer */
@@ -125,7 +127,16 @@
fprintf(prn_stream, "\033&l%dA", paper_size);
}
fputs("\033&l0o0l0E", prn_stream);
- fputs(page_init, prn_stream);
+ if ((features & PCL_HAS_DUPLEX) && dupset && dup)
+ {
+ /* We are printing duplex, so change margins as needed */
+ if ((pdev->PageCount%2)==0)
+ fputs(odd_page_init, prn_stream);
+ else
+ fputs(even_page_init, prn_stream);
+ }
+ else
+ fputs(odd_page_init, prn_stream);
fprintf(prn_stream, "\033&l%dX", num_copies); /* # of copies */
/* End raster graphics, position cursor at top. */
@@ -134,7 +145,7 @@
/* The DeskJet and DeskJet Plus reset everything upon */
/* receiving \033*rB, so we must reinitialize graphics mode. */
if (features & PCL_END_GRAPHICS_DOES_RESET) {
- fputs(page_init, prn_stream);
+ fputs(odd_page_init, prn_stream); /* Assume this does the right thing */
fprintf(prn_stream, "\033&l%dX", num_copies); /* # of copies */
}
Modified: trunk/gs/src/gdevdljm.h
===================================================================
--- trunk/gs/src/gdevdljm.h 2007-07-13 18:48:05 UTC (rev 8123)
+++ trunk/gs/src/gdevdljm.h 2007-07-14 19:18:42 UTC (rev 8124)
@@ -140,7 +140,9 @@
int num_copies,
int dots_per_inch,
int features,
- const char *page_init
+ const char *odd_page_init,
+ const char *even_page_init,
+ bool tumble
);
#endif /* gdevdljm_INCLUDED */
More information about the gs-cvs
mailing list