packages: ghostscript/ghostscript.spec, ghostscript/ghostscript-gdevcd8-fix...
qboosh
qboosh at pld-linux.org
Thu Sep 16 21:48:30 CEST 2010
Author: qboosh Date: Thu Sep 16 19:48:30 2010 GMT
Module: packages Tag: HEAD
---- Log message:
- updated gdevcd8-fixes patch is back (driver exists, just has been moved to contrib)
---- Files affected:
packages/ghostscript:
ghostscript.spec (1.194 -> 1.195) , ghostscript-gdevcd8-fixes.patch (1.2 -> 1.3)
---- Diffs:
================================================================
Index: packages/ghostscript/ghostscript.spec
diff -u packages/ghostscript/ghostscript.spec:1.194 packages/ghostscript/ghostscript.spec:1.195
--- packages/ghostscript/ghostscript.spec:1.194 Wed Sep 15 20:05:24 2010
+++ packages/ghostscript/ghostscript.spec Thu Sep 16 21:48:25 2010
@@ -35,9 +35,7 @@
Patch3: %{name}-libpng14.patch
Patch4: %{name}-system-zlib.patch
Patch5: %{name}-cups-sh.patch
-# no device for cdj850 in non-espgs ghostscript
-# look for patch in old spec for GNU ghostscript
-#Patch4: %{name}-gdevcd8-fixes.patch
+Patch6: %{name}-gdevcd8-fixes.patch
URL: http://www.ghostscript.com/
BuildRequires: autoconf >= 2.57
BuildRequires: automake >= 1.6
@@ -193,6 +191,7 @@
%patch3 -p1
%patch4 -p1
%patch5 -p1
+%patch6 -p1
%build
%if %{with system_jbig2dec}
@@ -409,6 +408,9 @@
All persons listed below can be reached at <cvs_login>@pld-linux.org
$Log$
+Revision 1.195 2010/09/16 19:48:25 qboosh
+- updated gdevcd8-fixes patch is back (driver exists, just has been moved to contrib)
+
Revision 1.194 2010/09/15 18:05:24 qboosh
- moved X11 module (dynamic x11/x11alpha drivers) to subpackage; base no longer requires X11 libs
================================================================
Index: packages/ghostscript/ghostscript-gdevcd8-fixes.patch
diff -u /dev/null packages/ghostscript/ghostscript-gdevcd8-fixes.patch:1.3
--- /dev/null Thu Sep 16 21:48:30 2010
+++ packages/ghostscript/ghostscript-gdevcd8-fixes.patch Thu Sep 16 21:48:25 2010
@@ -0,0 +1,311 @@
+Fixes:
+ - cdj850 and cdj1600 were broken, because of terminating *b command
+ (by 'Y' or 'V' instead of 'y' or 'v'); now *b is terminated only
+ for cdj880
+ - do_gcr replaced whole black component by CMY (so everything was
+ printed using colour ink!); do_gcr with NOBLACK looks strange,
+ like somebody didn't know what he's doing... now old, actual
+ DOGCR is used, but NOBLACK can be enabled by -dUseBlack=0 though
+
+Jakub Bogusz <qboosh at pld-linux.org>
+--- ghostscript-8.71/contrib/gdevcd8.c.orig 2009-12-30 18:30:30.000000000 +0100
++++ ghostscript-8.71/contrib/gdevcd8.c 2010-09-16 09:20:18.580564844 +0200
+@@ -609,6 +609,7 @@
+ StartRasterMode start_raster_mode; /* output function to start raster mode */
+ PrintNonBlankLines print_non_blank_lines; /* output function to print a non blank line */
+ TerminatePage terminate_page; /* page termination output function */
++ int useblack; /* use K compound */
+ } gx_device_cdj850;
+
+ typedef struct {
+@@ -665,7 +666,7 @@
+ blackcorrect,\
+ start_raster_mode,\
+ print_non_blank_line,\
+- terminate_page\
++ terminate_page, 1\
+ }
+
+ #define cdj_1600_device(procs, dev_name, x_dpi, y_dpi, bpp, print_page, correction, quality, papertype, intensities,ptype,compression,mastergamma,gammavalc,gammavalm,gammavaly,gammavalk,blackcorrect,start_raster_mode,print_non_blank_line,terminate_page)\
+@@ -684,7 +685,7 @@
+ blackcorrect,\
+ start_raster_mode,\
+ print_non_blank_line,\
+- terminate_page\
++ terminate_page, 1\
+ }
+
+ /* HP2200 and DNJ500 is a RGB printer */
+@@ -704,7 +705,7 @@
+ blackcorrect,\
+ start_raster_mode,\
+ print_non_blank_line,\
+- terminate_page\
++ terminate_page, 1\
+ }
+
+ #define cmyk_colour_procs(proc_colour_open, proc_get_params, proc_put_params, \
+@@ -1066,6 +1067,7 @@
+ if (code < 0 ||
+ (code = param_write_int(plist, "Quality", &cdj850->quality)) < 0 ||
+ (code = param_write_int(plist, "Papertype", &cdj850->papertype)) < 0 ||
++ (code = param_write_int(plist, "UseBlack", &cdj850->useblack)) < 0 ||
+ (code = param_write_float(plist, "MasterGamma", &cdj850->gammavalc))
+ < 0 ||
+ (code = param_write_float(plist, "GammaValC", &cdj850->gammavalc)) <
+@@ -1089,6 +1091,7 @@
+ {
+ int quality = cdj850->quality;
+ int papertype = cdj850->papertype;
++ int useblack = cdj850->useblack;
+ float mastergamma = cdj850->mastergamma;
+ float gammavalc = cdj850->gammavalc;
+ float gammavalm = cdj850->gammavalm;
+@@ -1101,6 +1104,7 @@
+ code = cdj_put_param_int(plist, "BitsPerPixel", &bpp, 1, 32, code);
+ code = cdj_put_param_int(plist, "Quality", &quality, 0, 2, code);
+ code = cdj_put_param_int(plist, "Papertype", &papertype, 0, 4, code);
++ code = cdj_put_param_int(plist, "UseBlack", &useblack, 0, 1, code);
+ code = cdj_put_param_float(plist, "MasterGamma", &mastergamma, 0.1, 9.0, code);
+ code = cdj_put_param_float(plist, "GammaValC", &gammavalc, 0.0, 9.0, code);
+ code = cdj_put_param_float(plist, "GammaValM", &gammavalm, 0.0, 9.0, code);
+@@ -1118,6 +1122,7 @@
+
+ cdj850->quality = quality;
+ cdj850->papertype = papertype;
++ cdj850->useblack = useblack;
+ cdj850->mastergamma = mastergamma;
+ cdj850->gammavalc = gammavalc;
+ cdj850->gammavalm = gammavalm;
+@@ -1171,7 +1176,13 @@
+ gx_device_printer * pdev,
+ struct error_val_field *error_values);
+ static int
+- do_gcr(int bytecount, byte * inbyte, const byte * kvalues,
++ do_gcr_noblack(int bytecount, byte * inbyte, const byte * kvalues,
++ const byte * cvalues, const byte * mvalues,
++ const byte * yvalues, const int *kcorrect,
++ word * inword);
++
++static int
++ do_gcr_gcr(int bytecount, byte * inbyte, const byte * kvalues,
+ const byte * cvalues, const byte * mvalues,
+ const byte * yvalues, const int *kcorrect,
+ word * inword);
+@@ -2036,7 +2047,10 @@
+ }
+ /* Skip blank lines if any */
+ if (num_blank_lines > 0) {
++ if(cdj850->ptype == DJ880C)
+ fprintf(prn_stream, "\033*b%dY", num_blank_lines / (cdj850->yscal + 1));
++ else /* still in *b if not dj880 */
++ fprintf(prn_stream, "%dy", num_blank_lines / (cdj850->yscal + 1));
+ memset(data_ptrs->plane_data[0][0], 0,
+ (misc_vars->plane_size * 2 * misc_vars->num_comps));
+ memset(data_ptrs->plane_data_c[0][0], 0,
+@@ -2046,7 +2060,10 @@
+ /* all blank lines printed, now for the non-blank lines */
+ if (cdj850->yscal && odd(lnum)) {
+ /* output a blank black plane for odd lines */
++ if(cdj850->ptype == DJ880C)
+ fprintf(prn_stream, "\033*b0V");
++ else /* still in *b if not dj880 */
++ putc('v', prn_stream);
+ }
+ /* now output all non blank lines */
+ while (lnum < lend && llen != 0) {
+@@ -2072,9 +2089,11 @@
+ int out_count = gdev_pcl_mode9compress(plane_size, curr, prev, out_data);
+
+ /* and output the data */
+- fprintf(prn_stream, "%d%c", out_count, plane_code);
+ if (out_count > 0) {
++ fprintf(prn_stream, "%d%c", out_count, plane_code);
+ fwrite(out_data, sizeof(byte), out_count, prn_stream);
++ } else { /* single plane_code is sufficient for cdj850 */
++ putc(plane_code, prn_stream);
+ }
+ }
+
+@@ -2134,16 +2153,22 @@
+ byte *dp = data_ptrs->data[misc_vars->scan + 2];
+ int *ep = data_ptrs->errors[misc_vars->scan];
+
+- /* we need cmyk color separation befor all the rest, since
++ /* we need cmyk color separation before all the rest, since
+ black may be contained in the color fields. This needs to
+ be done on all pixel-rows, since even unused color-bytes
+ might generate black */
+
++ if(cdj850->useblack) {
+ misc_vars->is_color_data =
+- do_gcr(misc_vars->databuff_size, data_ptrs->data[misc_vars->scan],
++ do_gcr_gcr(misc_vars->databuff_size, data_ptrs->data[misc_vars->scan],
+ gamma->k, gamma->c, gamma->m, gamma->y, gamma->correct,
+ (word *) data_ptrs->data[misc_vars->scan]);
+-
++ } else {
++ misc_vars->is_color_data =
++ do_gcr_noblack(misc_vars->databuff_size, data_ptrs->data[misc_vars->scan],
++ gamma->k, gamma->c, gamma->m, gamma->y, gamma->correct,
++ (word *) data_ptrs->data[misc_vars->scan]);
++ }
+ /* dithering the black-plane */
+ FSDlinebw(misc_vars->scan, misc_vars->plane_size,
+ error_values, kP, misc_vars->num_comps, ep, dp);
+@@ -2212,15 +2237,22 @@
+ byte *dp = data_ptrs->data[misc_vars->scan + 2];
+ int *ep = data_ptrs->errors[misc_vars->scan];
+
+- /* we need cmyk color separation befor all the rest, since
++ /* we need cmyk color separation before all the rest, since
+ black may be contained in the color fields. This needs to
+ be done on all pixel-rows, since even unused color-bytes
+ might generate black */
+
++ if(cdj850->useblack) {
+ misc_vars->is_color_data =
+- do_gcr(misc_vars->databuff_size, data_ptrs->data[misc_vars->scan],
++ do_gcr_gcr(misc_vars->databuff_size, data_ptrs->data[misc_vars->scan],
+ gamma->k, gamma->c, gamma->m, gamma->y, gamma->correct,
+ (word *) data_ptrs->data[misc_vars->scan]);
++ } else {
++ misc_vars->is_color_data =
++ do_gcr_noblack(misc_vars->databuff_size, data_ptrs->data[misc_vars->scan],
++ gamma->k, gamma->c, gamma->m, gamma->y, gamma->correct,
++ (word *) data_ptrs->data[misc_vars->scan]);
++ }
+
+ /* dithering the black-plane */
+ FSDlinebw(misc_vars->scan, misc_vars->plane_size,
+@@ -2429,7 +2461,7 @@
+ do real color separation, here we try a real grey component
+ replacement */
+ static int
+-do_gcr(int bytecount, byte * inbyte, const byte kvalues[256],
++do_gcr_noblack(int bytecount, byte * inbyte, const byte kvalues[256],
+ const byte cvalues[256], const byte mvalues[256],
+ const byte yvalues[256], const int kcorrect[256],
+ word * inword)
+@@ -2467,14 +2499,15 @@
+
+ is_color = 1;
+
+- /* Test whether we 've already computet the value */
++ /* Test whether we've already computed the value */
+ if (*inword == last_color_value) {
+ /* save a copy of the current color before it will be modified */
+- last_color_value = *inword;
++ last_color_value = *inword; /* NOP --q */
+ /* debug_print_string("\n", 1);*/
+ /* copy the result of the old value onto the new position */
+ *inword = *last_color;
+ } else {
++ /* ??? ALL these NOBLACKs will be NOPs after the first NOBLACK! what are they for??? --q */
+ /* save a copy of the current color before it will be modified */
+ last_color_value = *inword;
+ NOBLACK(cyan, magenta, yellow, black);
+@@ -2511,6 +2544,7 @@
+ debug_print_string(output, strlen(output));
+ }
+ #endif /* 0 */
++ /* XXX: how byte could be >255??? --q */
+ if ( *cyan > 255) *cyan = 255;
+ if (*magenta > 255) *magenta = 255;
+ if ( *yellow > 255) *yellow = 255;
+@@ -2518,6 +2552,95 @@
+ *cyan = *(cvalues + *cyan);
+ *magenta = *(mvalues + *magenta);
+ *yellow = *(yvalues + *yellow);
++ last_color = inword; /* save pointer */
++ }/* end current_color */
++ } /* end of if c+m+y > 0 */
++ *black = *(kvalues + *black);
++ inword = inword + 1;
++ } /* end of for bytecount */
++ return is_color;
++}
++
++static int
++do_gcr_gcr(int bytecount, byte * inbyte, const byte kvalues[256],
++ const byte cvalues[256], const byte mvalues[256],
++ const byte yvalues[256], const int kcorrect[256],
++ word * inword)
++{
++ int i, ucr, kadd, is_color = 0;
++ float uca_fac;
++ byte *black, *cyan, *magenta, *yellow;
++ word last_color_value = 0;
++ word *last_color;
++ char output[255], out2[128];
++
++ /* initialise *last_color with a dummmy value */
++ last_color = &last_color_value;
++ /* Grey component replacement */
++ for (i = 0; i < bytecount; i += 4) {
++
++ /* Assign to black the current address of inbyte */
++ black = inbyte++;
++ cyan = inbyte++;
++ magenta = inbyte++;
++ yellow = inbyte++;
++
++ if (*magenta + *yellow + *cyan > 0) { /* if any color at all */
++
++#if 0
++ if ((*cyan > 0) && (*magenta > 0) && (*yellow > 0))
++ {
++ sprintf(output, "%3d %3d %3d %3d - ", *cyan, *magenta, *yellow, *black);
++ debug_print_string(output, strlen(output));
++ }
++#endif /* 0 */
++
++ is_color = 1;
++
++ /* Test whether we've already computed the value */
++ if (*inword == last_color_value) {
++/* debug_print_string("\n", 1);*/
++ /* copy the result of the old value onto the new position */
++ *inword = *last_color;
++ } else {
++ /* save a copy of the current color before it will be modified */
++ last_color_value = *inword;
++ if ((*cyan >= *magenta)
++ && (*magenta >= *yellow)
++ && (*yellow > 0)) { /* if any grey component */
++ DOGCR(cyan, magenta, yellow, black);
++ } else if ((*cyan >= *yellow)
++ && (*yellow >= *magenta)
++ && (*magenta > 0)) {
++ DOGCR(cyan, yellow, magenta, black);
++ } else if ((*yellow >= *magenta)
++ && (*magenta >= *cyan)
++ && (*cyan > 0)) {
++ DOGCR(yellow, magenta, cyan, black);
++ } else if ((*yellow >= *cyan)
++ && (*cyan >= *magenta)
++ && (*magenta > 0)) {
++ DOGCR(yellow, cyan, magenta, black);
++ } else if ((*magenta >= *yellow)
++ && (*yellow >= *cyan)
++ && (*cyan > 0)) {
++ DOGCR(magenta, yellow, cyan, black);
++ } else if ((*magenta >= *cyan)
++ && (*cyan >= *yellow)
++ && (*yellow > 0)) {
++ DOGCR(magenta, cyan, yellow, black);
++ } else { /* do gamma only if no black */
++ }
++#if 0
++ if (ucr > 0)
++ {
++ sprintf(output, "%3d %3d %3d %3d - %5d\n", *cyan, *magenta, *yellow, *black, ucr);
++ debug_print_string(output, strlen(output));
++ }
++#endif /* 0 */
++ *cyan = *(cvalues + *cyan);
++ *magenta = *(mvalues + *magenta);
++ *yellow = *(yvalues + *yellow);
+ last_color = inword; /* save pointer */
+ }/* end current_color */
+ } /* end of if c+m+y > 0 */
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/ghostscript/ghostscript.spec?r1=1.194&r2=1.195&f=u
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/ghostscript/ghostscript-gdevcd8-fixes.patch?r1=1.2&r2=1.3&f=u
More information about the pld-cvs-commit
mailing list