[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