[arch-commits] Commit in ghostscript/repos (3 files)

andyrtr at archlinux.org andyrtr at archlinux.org
Fri Feb 13 20:56:39 UTC 2009


    Date: Friday, February 13, 2009 @ 15:56:39
  Author: andyrtr
Revision: 26876

Merged revisions 26874 via svnmerge from 
svn+ssh://svn.archlinux.org/srv/svn-packages/ghostscript/trunk

........
  r26874 | andyrtr | 2009-02-13 20:48:03 +0000 (Fr, 13 Feb 2009) | 2 lines
  
  upgpkg: ghostscript 8.64-2
      fix #13259
........

Added:
  ghostscript/repos/extra-i686/gdevbit.c.patch
    (from rev 26874, ghostscript/trunk/gdevbit.c.patch)
Modified:
  ghostscript/repos/extra-i686/	(properties)
  ghostscript/repos/extra-i686/PKGBUILD

-----------------+
 PKGBUILD        |   11 
 gdevbit.c.patch |  602 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 610 insertions(+), 3 deletions(-)


Property changes on: ghostscript/repos/extra-i686
___________________________________________________________________
Modified: svnmerge-integrated
   - /ghostscript/trunk:1-26298
   + /ghostscript/trunk:1-26875

Modified: extra-i686/PKGBUILD
===================================================================
--- extra-i686/PKGBUILD	2009-02-13 20:48:37 UTC (rev 26875)
+++ extra-i686/PKGBUILD	2009-02-13 20:56:39 UTC (rev 26876)
@@ -3,7 +3,7 @@
 
 pkgname=ghostscript
 pkgver=8.64
-pkgrel=1
+pkgrel=2
 pkgdesc="An interpreter for the PostScript language"
 arch=(i686 x86_64)
 license=('GPL' 'custom')
@@ -14,13 +14,18 @@
 provides=('ghostscript-lprng')
 url="http://www.cs.wisc.edu/~ghost/"
 source=(http://ghostscript.com/releases/ghostscript-${pkgver}.tar.bz2
-	ghostscript-fPIC.patch)
+	ghostscript-fPIC.patch
+	gdevbit.c.patch)
 options=('!libtool' '!makeflags')
 md5sums=('b13289cb2115f38f40c5e064f87e228a'
-         '1a8fcacf0005214db823225c870f093d')
+         '1a8fcacf0005214db823225c870f093d'
+         '47cda3310c19cd19bd822012a12f1e07')
 
 build() {
   cd ${srcdir}/ghostscript-${pkgver}
+  #fix http://bugs.ghostscript.com/show_bug.cgi?id=690287 / http://bugs.archlinux.org/task/13259
+  patch -Np0 -i ${srcdir}/gdevbit.c.patch || return 1
+
   if [ "$CARCH" = "x86_64" ]; then
     patch -Np1 -i ${srcdir}/ghostscript-fPIC.patch || return 1
   fi

Copied: ghostscript/repos/extra-i686/gdevbit.c.patch (from rev 26874, ghostscript/trunk/gdevbit.c.patch)
===================================================================
--- extra-i686/gdevbit.c.patch	                        (rev 0)
+++ extra-i686/gdevbit.c.patch	2009-02-13 20:56:39 UTC (rev 26876)
@@ -0,0 +1,602 @@
+--- base/gdevbit.c	2008-08-20 23:58:43.000000000 +0000
++++ base/gdevbit.c.new	2009-02-13 20:30:59.755698657 +0000
+@@ -11,7 +11,7 @@
+    San Rafael, CA  94903, U.S.A., +1(415)492-9861, for further information.
+ */
+ 
+-/* $Id: gdevbit.c 9007 2008-08-20 23:58:43Z giles $ */
++/* $Id$ */
+ /* "Plain bits" devices to measure rendering time. */
+ 
+ #include "gdevprn.h"
+@@ -48,59 +48,59 @@
+ static dev_proc_print_page(bit_print_page);
+ 
+ #define bit_procs(encode_color)\
+-{	gdev_prn_open,\
+-	gx_default_get_initial_matrix,\
+-	NULL,	/* sync_output */\
+-	gdev_prn_output_page,\
+-	gdev_prn_close,\
+-	encode_color,	/* map_rgb_color */\
+-	bit_map_color_rgb,	/* map_color_rgb */\
+-	NULL,	/* fill_rectangle */\
+-	NULL,	/* tile_rectangle */\
+-	NULL,	/* copy_mono */\
+-	NULL,	/* copy_color */\
+-	NULL,	/* draw_line */\
+-	NULL,	/* get_bits */\
+-	bit_get_params,\
+-	bit_put_params,\
+-	encode_color,	/* map_cmyk_color */\
+-	NULL,	/* get_xfont_procs */\
+-	NULL,	/* get_xfont_device */\
+-	NULL,	/* map_rgb_alpha_color */\
+-	gx_page_device_get_page_device,	/* get_page_device */\
+-	NULL,	/* get_alpha_bits */\
+-	NULL,	/* copy_alpha */\
+-	NULL,	/* get_band */\
+-	NULL,	/* copy_rop */\
+-	NULL,	/* fill_path */\
+-	NULL,	/* stroke_path */\
+-	NULL,	/* fill_mask */\
+-	NULL,	/* fill_trapezoid */\
+-	NULL,	/* fill_parallelogram */\
+-	NULL,	/* fill_triangle */\
+-	NULL,	/* draw_thin_line */\
+-	NULL,	/* begin_image */\
+-	NULL,	/* image_data */\
+-	NULL,	/* end_image */\
+-	NULL,	/* strip_tile_rectangle */\
+-	NULL,	/* strip_copy_rop */\
+-	NULL,	/* get_clipping_box */\
+-	NULL,	/* begin_typed_image */\
+-	NULL,	/* get_bits_rectangle */\
+-	NULL,	/* map_color_rgb_alpha */\
+-	NULL,	/* create_compositor */\
+-	NULL,	/* get_hardware_params */\
+-	NULL,	/* text_begin */\
+-	NULL,	/* finish_copydevice */\
+-	NULL,	/* begin_transparency_group */\
+-	NULL,	/* end_transparency_group */\
+-	NULL,	/* begin_transparency_mask */\
+-	NULL,	/* end_transparency_mask */\
+-	NULL,	/* discard_transparency_layer */\
+-	NULL,	/* get_color_mapping_procs */\
+-	NULL,	/* get_color_comp_index */\
+-	encode_color,		/* encode_color */\
+-	bit_map_color_rgb	/* decode_color */\
++{       gdev_prn_open,\
++        gx_default_get_initial_matrix,\
++        NULL,   /* sync_output */\
++        gdev_prn_output_page,\
++        gdev_prn_close,\
++        encode_color,   /* map_rgb_color */\
++        bit_map_color_rgb,      /* map_color_rgb */\
++        NULL,   /* fill_rectangle */\
++        NULL,   /* tile_rectangle */\
++        NULL,   /* copy_mono */\
++        NULL,   /* copy_color */\
++        NULL,   /* draw_line */\
++        NULL,   /* get_bits */\
++        bit_get_params,\
++        bit_put_params,\
++        encode_color,   /* map_cmyk_color */\
++        NULL,   /* get_xfont_procs */\
++        NULL,   /* get_xfont_device */\
++        NULL,   /* map_rgb_alpha_color */\
++        gx_page_device_get_page_device, /* get_page_device */\
++        NULL,   /* get_alpha_bits */\
++        NULL,   /* copy_alpha */\
++        NULL,   /* get_band */\
++        NULL,   /* copy_rop */\
++        NULL,   /* fill_path */\
++        NULL,   /* stroke_path */\
++        NULL,   /* fill_mask */\
++        NULL,   /* fill_trapezoid */\
++        NULL,   /* fill_parallelogram */\
++        NULL,   /* fill_triangle */\
++        NULL,   /* draw_thin_line */\
++        NULL,   /* begin_image */\
++        NULL,   /* image_data */\
++        NULL,   /* end_image */\
++        NULL,   /* strip_tile_rectangle */\
++        NULL,   /* strip_copy_rop */\
++        NULL,   /* get_clipping_box */\
++        NULL,   /* begin_typed_image */\
++        NULL,   /* get_bits_rectangle */\
++        NULL,   /* map_color_rgb_alpha */\
++        NULL,   /* create_compositor */\
++        NULL,   /* get_hardware_params */\
++        NULL,   /* text_begin */\
++        NULL,   /* finish_copydevice */\
++        NULL,   /* begin_transparency_group */\
++        NULL,   /* end_transparency_group */\
++        NULL,   /* begin_transparency_mask */\
++        NULL,   /* end_transparency_mask */\
++        NULL,   /* discard_transparency_layer */\
++        NULL,   /* get_color_mapping_procs */\
++        NULL,   /* get_color_comp_index */\
++        encode_color,           /* encode_color */\
++        bit_map_color_rgb       /* decode_color */\
+ }
+ 
+ /*
+@@ -112,11 +112,11 @@
+  * parameter, which alters dev->num_components.
+  */
+ #define REAL_NUM_COMPONENTS(dev) (dev->dname[3] == 'c' ? 4 : \
+-				  dev->dname[3] == 'r' ? 3 : 1)
++                                  dev->dname[3] == 'r' ? 3 : 1)
+ struct gx_device_bit_s {
+     gx_device_common;
+     gx_prn_device_common;
+-    int  FirstLine, LastLine;	/* to allow multi-threaded rendering testing */
++    int  FirstLine, LastLine;   /* to allow multi-threaded rendering testing */
+ };
+ typedef struct gx_device_bit_s gx_device_bit;
+ 
+@@ -124,34 +124,34 @@
+ bit_procs(bit_mono_map_color);
+ const gx_device_bit gs_bit_device =
+ {prn_device_body(gx_device_bit, bitmono_procs, "bit",
+-		 DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+-		 X_DPI, Y_DPI,
+-		 0, 0, 0, 0,    /* margins */
+-		 1, 1, 1, 0, 2, 1, bit_print_page)
++                 DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
++                 X_DPI, Y_DPI,
++                 0, 0, 0, 0,    /* margins */
++                 1, 1, 1, 0, 2, 1, bit_print_page)
+ };
+ 
+ static const gx_device_procs bitrgb_procs =
+ bit_procs(gx_default_rgb_map_rgb_color);
+ const gx_device_bit gs_bitrgb_device =
+ {prn_device_body(gx_device_bit, bitrgb_procs, "bitrgb",
+-		 DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+-		 X_DPI, Y_DPI,
+-		 0, 0, 0, 0,	/* margins */
+-		 3, 4, 1, 1, 2, 2, bit_print_page)
++                 DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
++                 X_DPI, Y_DPI,
++                 0, 0, 0, 0,    /* margins */
++                 3, 4, 1, 1, 2, 2, bit_print_page)
+ };
+ 
+ static const gx_device_procs bitcmyk_procs =
+ bit_procs(bit_map_cmyk_color);
+ const gx_device_bit gs_bitcmyk_device =
+ {prn_device_body(gx_device_bit, bitcmyk_procs, "bitcmyk",
+-		 DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
+-		 X_DPI, Y_DPI,
+-		 0, 0, 0, 0,	/* margins */
+-		 4, 4, 1, 1, 2, 2, bit_print_page)
++                 DEFAULT_WIDTH_10THS, DEFAULT_HEIGHT_10THS,
++                 X_DPI, Y_DPI,
++                 0, 0, 0, 0,    /* margins */
++                 4, 4, 1, 1, 2, 2, bit_print_page)
+ };
+ 
+ static const gx_device_procs bitrgbtags_procs =
+-    { 
++    {
+         gdev_prn_open,                        /* open_device */
+         gx_default_get_initial_matrix,        /* initial_matrix */
+         ((void *)0),                        /* sync_output */
+@@ -207,6 +207,7 @@
+         bittag_map_color_rgb                 /* decode_color */
+     };
+ 
++
+ const gx_device_bit gs_bitrgbtags_device =
+     {
+         sizeof(gx_device_bit),
+@@ -239,21 +240,21 @@
+             GX_CINFO_OPMODE_UNKNOWN ,   /* overprint mode */
+             0                           /* process comps */
+         },
+-        { 
++        {
+             ((gx_color_index)(~0)),
+-            ((gx_color_index)(~0)) 
++            ((gx_color_index)(~0))
+         },
+         (int)((float)(85) * (X_DPI) / 10 + 0.5),
+         (int)((float)(110) * (Y_DPI) / 10 + 0.5),
+         0,
+-        { 
++        {
+             (float)(((((int)((float)(85) * (X_DPI) / 10 + 0.5)) * 72.0 + 0.5) - 0.5) / (X_DPI)) ,
+             (float)(((((int)((float)(110) * (Y_DPI) / 10 + 0.5)) * 72.0 + 0.5) - 0.5) / (Y_DPI)) },
+         {
+             0,
+             0,
+             0,
+-            0 
++            0
+         } ,
+         0 ,
+         { X_DPI, Y_DPI } ,
+@@ -271,10 +272,10 @@
+         0 ,
+         0 ,
+         0 ,
+-	0,
+-	0,
+-	{false},
+-        { 
++        0,
++        0,
++        {false},
++        {
+             gx_default_install,
+             gx_default_begin_page,
+             gx_default_end_page
+@@ -292,7 +293,7 @@
+           gx_default_open_render_device,
+           gx_default_close_render_device,
+           gx_default_buffer_page },
+-        { 
++        {
+             PRN_MAX_BITMAP,
+             PRN_BUFFER_SPACE,
+             { 0, 0, 0 },
+@@ -325,7 +326,7 @@
+ 
+ static void
+ private_rgb_cs_to_rgb_cm(gx_device * dev, const gs_imager_state *pis,
+-				  frac r, frac g, frac b, frac out[])
++                                  frac r, frac g, frac b, frac out[])
+ {
+     out[0] = r;
+     out[1] = g;
+@@ -398,19 +399,20 @@
+ bit_forcemono_map_rgb_color(gx_device * dev, const gx_color_value cv[])
+ {
+     gx_color_value color;
+-    int bpc = dev->color_info.depth / 4;	/* This function is used in CMYK mode */
++    int bpc = dev->color_info.depth / 4;        /* This function is used in CMYK mode */
+     int drop = sizeof(gx_color_value) * 8 - bpc;
+     gx_color_value gray, red, green, blue;
+     red = cv[0]; green = cv[1]; blue = cv[2];
+     gray = red;
+     if ((red != green) || (green != blue))
+-	gray = (red * (unsigned long)lum_red_weight +
+-	     green * (unsigned long)lum_green_weight +
+-	     blue * (unsigned long)lum_blue_weight +
+-	     (lum_all_weights / 2))
+-		/ lum_all_weights;
++        gray = (red * (unsigned long)lum_red_weight +
++             green * (unsigned long)lum_green_weight +
++             blue * (unsigned long)lum_blue_weight +
++             (lum_all_weights / 2))
++                / lum_all_weights;
++
+ 
+-    color = (gx_max_color_value - gray) >> drop;	/* color is in K channel */
++    color = (gx_max_color_value - gray) >> drop;        /* color is in K channel */
+     return color;
+ }
+ #endif
+@@ -428,39 +430,39 @@
+ #define cvalue(c) ((gx_color_value)((ulong)(c) * gx_max_color_value / mask))
+ 
+     switch (ncomp) {
+-	case 1:		/* gray */
+-	    cv[0] =
+-		(depth == 1 ? (color ? 0 : gx_max_color_value) :
+-		 cvalue(color));
+-	    break;
+-	case 3:		/* RGB */
+-	    {
+-		gx_color_index cshift = color;
+-
+-		cv[2] = cvalue(cshift & mask);
+-		cshift >>= bpc;
+-		cv[1] = cvalue(cshift & mask);
+-		cv[0] = cvalue(cshift >> bpc);
+-	    }
+-	    break;
+-	case 4:		/* CMYK */
+-	    /* Map CMYK back to RGB. */
+-	    {
+-		gx_color_index cshift = color;
+-		uint c, m, y, k;
+-
+-		k = cshift & mask;
+-		cshift >>= bpc;
+-		y = cshift & mask;
+-		cshift >>= bpc;
+-		m = cshift & mask;
+-		c = cshift >> bpc;
+-		/* We use our improved conversion rule.... */
+-		cv[0] = cvalue((mask - c) * (mask - k) / mask);
+-		cv[1] = cvalue((mask - m) * (mask - k) / mask);
+-		cv[2] = cvalue((mask - y) * (mask - k) / mask);
+-	    }
+-	    break;
++        case 1:         /* gray */
++            cv[0] =
++                (depth == 1 ? (color ? 0 : gx_max_color_value) :
++                 cvalue(color));
++            break;
++        case 3:         /* RGB */
++            {
++                gx_color_index cshift = color;
++
++                cv[2] = cvalue(cshift & mask);
++                cshift >>= bpc;
++                cv[1] = cvalue(cshift & mask);
++                cv[0] = cvalue(cshift >> bpc);
++            }
++            break;
++        case 4:         /* CMYK */
++            /* Map CMYK back to RGB. */
++            {
++                gx_color_index cshift = color;
++                uint c, m, y, k;
++
++                k = cshift & mask;
++                cshift >>= bpc;
++                y = cshift & mask;
++                cshift >>= bpc;
++                m = cshift & mask;
++                c = cshift >> bpc;
++                /* We use our improved conversion rule.... */
++                cv[0] = cvalue((mask - c) * (mask - k) / mask);
++                cv[1] = cvalue((mask - m) * (mask - k) / mask);
++                cv[2] = cvalue((mask - y) * (mask - k) / mask);
++            }
++            break;
+     }
+     return 0;
+ #undef cvalue
+@@ -474,7 +476,7 @@
+     int drop = sizeof(gx_color_value) * 8 - bpc;
+     gx_color_index color =
+     (((((((gx_color_index) cv[0] >> drop) << bpc) +
+-	(cv[1] >> drop)) << bpc) +
++        (cv[1] >> drop)) << bpc) +
+       (cv[2] >> drop)) << bpc) +
+     (cv[3] >> drop);
+ 
+@@ -509,15 +511,15 @@
+     ecode = gdev_prn_get_params(pdev, plist);
+     code = sample_device_crd_get_params(pdev, plist, "CRDDefault");
+     if (code < 0)
+-	    ecode = code;
++            ecode = code;
+     if ((code = param_write_int(plist, "ForceMono", &forcemono)) < 0) {
+-	ecode = code;
++        ecode = code;
+     }
+     if ((code = param_write_int(plist, "FirstLine", &((gx_device_bit *)pdev)->FirstLine)) < 0) {
+-	ecode = code;
++        ecode = code;
+     }
+     if ((code = param_write_int(plist, "LastLine", &((gx_device_bit *)pdev)->LastLine)) < 0) {
+-	ecode = code;
++        ecode = code;
+     }
+ 
+     /* Restore the working num_components */
+@@ -539,10 +541,10 @@
+     int ecode = 0;
+     int code;
+     static const byte depths[4][16] = {
+-	{1, 2, 0, 4, 8, 0, 0, 8, 0, 0, 0, 16, 0, 0, 0, 16},
+-	{0},
+-	{4, 8, 0, 16, 16, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0, 48},
+-	{4, 8, 0, 16, 32, 0, 0, 32, 0, 0, 0, 48, 0, 0, 0, 64}
++        {1, 2, 0, 4, 8, 0, 0, 8, 0, 0, 0, 16, 0, 0, 0, 16},
++        {0},
++        {4, 8, 0, 16, 16, 0, 0, 24, 0, 0, 0, 40, 0, 0, 0, 48},
++        {4, 8, 0, 16, 32, 0, 0, 32, 0, 0, 0, 48, 0, 0, 0, 64}
+     };
+     const char *vname;
+     int FirstLine = ((gx_device_bit *)pdev)->FirstLine;
+@@ -555,71 +557,72 @@
+     pdev->color_info.num_components = real_ncomps;
+ 
+     if ((code = param_read_int(plist, (vname = "GrayValues"), &v)) != 1 ||
+-	(code = param_read_int(plist, (vname = "RedValues"), &v)) != 1 ||
+-	(code = param_read_int(plist, (vname = "GreenValues"), &v)) != 1 ||
+-	(code = param_read_int(plist, (vname = "BlueValues"), &v)) != 1
+-	) {
+-	if (code < 0)
+-	    ecode = code;
+-	else
+-	    switch (v) {
+-		case   2: bpc = 1; break;
+-		case   4: bpc = 2; break;
+-		case  16: bpc = 4; break;
+-		case  32: bpc = 5; break;
+-		case 256: bpc = 8; break;
+-		case 4096: bpc = 12; break;
+-		case 65536: bpc = 16; break;
+-		default:
+-		    param_signal_error(plist, vname,
+-				       ecode = gs_error_rangecheck);
+-	    }
++        (code = param_read_int(plist, (vname = "RedValues"), &v)) != 1 ||
++        (code = param_read_int(plist, (vname = "GreenValues"), &v)) != 1 ||
++        (code = param_read_int(plist, (vname = "BlueValues"), &v)) != 1
++        ) {
++        if (code < 0)
++            ecode = code;
++        else
++            switch (v) {
++                case   2: bpc = 1; break;
++                case   4: bpc = 2; break;
++                case  16: bpc = 4; break;
++                case  32: bpc = 5; break;
++                case 256: bpc = 8; break;
++                case 4096: bpc = 12; break;
++                case 65536: bpc = 16; break;
++                default:
++                    param_signal_error(plist, vname,
++                                       ecode = gs_error_rangecheck);
++            }
+     }
+ 
+     switch (code = param_read_int(plist, (vname = "ForceMono"), &v)) {
+     case 0:
+-	if (v == 1) {
+-	    ncomps = 1;
+-	    break;
+-	}
+-	else if (v == 0) {
+-	    ncomps = real_ncomps;
+-	    break;
+-	}
+-	code = gs_error_rangecheck;
++        if (v == 1) {
++            ncomps = 1;
++            break;
++        }
++        else if (v == 0) {
++            ncomps = real_ncomps;
++            break;
++        }
++        code = gs_error_rangecheck;
+     default:
+-	ecode = code;
+-	param_signal_error(plist, vname, ecode);
++        ecode = code;
++        param_signal_error(plist, vname, ecode);
+     case 1:
+-	break;
++        break;
+     }
+     if (ecode < 0)
+-	return ecode;
++        return ecode;
+     switch (code = param_read_int(plist, (vname = "FirstLine"), &v)) {
+     case 0:
+         FirstLine = v;
+-	break;
++        break;
+     default:
+-	ecode = code;
+-	param_signal_error(plist, vname, ecode);
++        ecode = code;
++        param_signal_error(plist, vname, ecode);
+     case 1:
+-	break;
++        break;
+     }
+     if (ecode < 0)
+-	return ecode;
++        return ecode;
+ 
+     switch (code = param_read_int(plist, (vname = "LastLine"), &v)) {
+     case 0:
+         LastLine = v;
+-	break;
++        break;
+     default:
+-	ecode = code;
+-	param_signal_error(plist, vname, ecode);
++        ecode = code;
++        param_signal_error(plist, vname, ecode);
+     case 1:
+-	break;
++        break;
+     }
+     if (ecode < 0)
+-	return ecode;
++        return ecode;
++
+ 
+     /*
+      * Save the color_info in case gdev_prn_put_params fails, and for
+@@ -628,32 +631,32 @@
+     save_info = pdev->color_info;
+     pdev->color_info.depth = depths[real_ncomps - 1][bpc - 1];
+     pdev->color_info.max_gray = pdev->color_info.max_color =
+-	(pdev->color_info.dither_grays =
+-	 pdev->color_info.dither_colors =
+-	 (1 << bpc)) - 1;
++        (pdev->color_info.dither_grays =
++         pdev->color_info.dither_colors =
++         (1 << bpc)) - 1;
+     ecode = gdev_prn_put_params(pdev, plist);
+     if (ecode < 0) {
+-	pdev->color_info = save_info;
+-	return ecode;
++        pdev->color_info = save_info;
++        return ecode;
+     }
+-    /* Now restore/change num_components. This is done after other	*/
+-    /* processing since it is used in gx_default_put_params		*/
++    /* Now restore/change num_components. This is done after other      */
++    /* processing since it is used in gx_default_put_params             */
+     pdev->color_info.num_components = ncomps;
+     if (pdev->color_info.depth != save_info.depth ||
+-	pdev->color_info.num_components != save_info.num_components
+-	) {
+-	gs_closedevice(pdev);
++        pdev->color_info.num_components != save_info.num_components
++        ) {
++        gs_closedevice(pdev);
+     }
+     /* Reset the map_cmyk_color procedure if appropriate. */
+     if (dev_proc(pdev, map_cmyk_color) == cmyk_1bit_map_cmyk_color ||
+-	dev_proc(pdev, map_cmyk_color) == cmyk_8bit_map_cmyk_color ||
+-	dev_proc(pdev, map_cmyk_color) == bit_map_cmyk_color) {
+-	set_dev_proc(pdev, map_cmyk_color,
+-		     pdev->color_info.depth == 4 ? cmyk_1bit_map_cmyk_color :
+-		     pdev->color_info.depth == 32 ? cmyk_8bit_map_cmyk_color :
+-		     bit_map_cmyk_color);
++        dev_proc(pdev, map_cmyk_color) == cmyk_8bit_map_cmyk_color ||
++        dev_proc(pdev, map_cmyk_color) == bit_map_cmyk_color) {
++        set_dev_proc(pdev, map_cmyk_color,
++                     pdev->color_info.depth == 4 ? cmyk_1bit_map_cmyk_color :
++                     pdev->color_info.depth == 32 ? cmyk_8bit_map_cmyk_color :
++                     bit_map_cmyk_color);
+     }
+-    /* Reset the sparable and linear shift, masks, bits. */
++    /* Reset the separable and linear shift, masks, bits. */
+     set_linear_color_bits_mask_shift(pdev);
+     pdev->color_info.separable_and_linear = GX_CINFO_SEP_LIN;
+     ((gx_device_bit *)pdev)->FirstLine = FirstLine;
+@@ -665,26 +668,29 @@
+ /* Send the page to the printer. */
+ static int
+ bit_print_page(gx_device_printer * pdev, FILE * prn_stream)
+-{				/* Just dump the bits on the file. */
++{                               /* Just dump the bits on the file. */
+     /* If the file is 'nul', don't even do the writes. */
+     int line_size = gdev_mem_bytes_per_scan_line((gx_device *) pdev);
+     byte *in = gs_alloc_bytes(pdev->memory, line_size, "bit_print_page(in)");
+     byte *data;
+     int nul = !strcmp(pdev->fname, "nul") || !strcmp(pdev->fname, "/dev/null");
+-    int lnum = ((gx_device_bit *)pdev)->FirstLine;
+-    int bottom = ((gx_device_bit *)pdev)->LastLine;
++    int lnum = ((gx_device_bit *)pdev)->FirstLine >= pdev->height ?  pdev->height - 1 :
++                 ((gx_device_bit *)pdev)->FirstLine;
++    int bottom = ((gx_device_bit *)pdev)->LastLine >= pdev->height ?  pdev->height - 1 :
++                 ((gx_device_bit *)pdev)->LastLine;
+     int line_count = any_abs(bottom - lnum);
+     int i, step = lnum > bottom ? -1 : 1;
+ 
+     if (in == 0)
+-	return_error(gs_error_VMerror);
++        return_error(gs_error_VMerror);
+     if ((lnum == 0) && (bottom == 0))
+-	bottom = pdev->height - 1;
+-    for (i = 0; i < line_count; i++, lnum += step) {
+-	gdev_prn_get_bits(pdev, lnum, in, &data);
+-	if (!nul)
+-	    fwrite(data, 1, line_size, prn_stream);
++        line_count = pdev->height - 1;          /* default when LastLine == 0, FirstLine == 0 */
++    for (i = 0; i <= line_count; i++, lnum += step) {
++        gdev_prn_get_bits(pdev, lnum, in, &data);
++        if (!nul)
++            fwrite(data, 1, line_size, prn_stream);
+     }
+     gs_free_object(pdev->memory, in, "bit_print_page(in)");
+     return 0;
+ }
++




More information about the arch-commits mailing list