[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