aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Li <pat@FreeBSD.org>2005-06-13 04:46:55 +0000
committerPatrick Li <pat@FreeBSD.org>2005-06-13 04:46:55 +0000
commit383906694dde2935c591e53791504f8bcc4d9f97 (patch)
tree090c35ddd7692beaa1db5a19a4b7281bfde95c95
parentd6f84a188c0bb94b0a3c7a1083e2443f9376ae7c (diff)
downloadports-383906694dde2935c591e53791504f8bcc4d9f97.tar.gz
ports-383906694dde2935c591e53791504f8bcc4d9f97.zip
Notes
-rw-r--r--print/ghostscript-afpl/Makefile10
-rw-r--r--print/ghostscript-afpl/Makefile.inc2
-rw-r--r--print/ghostscript-afpl/distinfo4
-rw-r--r--print/ghostscript-afpl/files/patch-epag:gdevepag.c6
-rw-r--r--print/ghostscript-afpl/files/patch-lxm3200:gdevlx32.c7
-rw-r--r--print/ghostscript-afpl/files/patch-src-gdevijs.c659
-rw-r--r--print/ghostscript-afpl/pkg-descr4
-rw-r--r--print/ghostscript-afpl/scripts/configure6
8 files changed, 684 insertions, 14 deletions
diff --git a/print/ghostscript-afpl/Makefile b/print/ghostscript-afpl/Makefile
index 81051de7ff55..522f03ba2d10 100644
--- a/print/ghostscript-afpl/Makefile
+++ b/print/ghostscript-afpl/Makefile
@@ -13,7 +13,7 @@ CATEGORIES= print
MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:S/$/:gs_srcs,bjc250/} \
http://www.gelhaus.net/hp880c/1.4beta/:hp8xx \
http://www.harsch.net/Download/:dj970 \
- http://plaza26.mbn.or.jp/~higamasa/gdevmd2k/:md2k \
+ http://www33.ocn.ne.jp/~higamasa/gdevmd2k/:md2k \
${MASTER_SITE_PORTS_JP:S/$/:ports_jp,ports_jp_gs/} \
ftp://download.canon-sales.co.jp/pub/driver/lasershot/linux/:cpca \
http://www.ucatv.ne.jp/~taeko/software/gs/:lips \
@@ -129,7 +129,7 @@ DJ970= gdevdj9
DJ970_SRCS= ${DJ970}.c.gz
# MD2K - additional driver for Alps MD-2000/2010/4000/1300/1500/5000
-# http://plaza26.mbn.or.jp/~higamasa/gdevmd2k/
+# http://www33.ocn.ne.jp/~higamasa/gdevmd2k/
MD2K= md2k
MD2K_VERS= 0.2a
MD2K_NAME= gdevmd2k-${MD2K_VERS}
@@ -169,14 +169,13 @@ LIPS_SRCS= ${LIPS_NAME}.tar.gz
# EPAG - additional driver for Epson ESC/Page printers
# http://www.humblesoft.com/gdevepag.html
-# XXX FIXME
EPAG= epag
EPAG_VERS= 3.09
EPAG_NAME= ${EPAG}-${EPAG_VERS}
EPAG_SRCS= ${EPAG_NAME}.tar.gz
-# EPLASER - additional driver for ESC/Page printers (Epson Kowa developed)
-# http://www.epkowa.co.jp/english/linux_e/index.html
+# EPLASER - additional driver for ESC/Page printers, by EPSON AVASYS Corp.
+# http://www.avasys.jp/english/linux_e/index.html
EPLASER= eplaser
EPLASER_VERS= 3.1.4
EPLASER_NAME= ${EPLASER}-${EPLASER_VERS}
@@ -194,7 +193,6 @@ GDI_NAME= Samsung-SmartGDI-all-GS
GDI_SRCS= ${GDI_NAME}.orig.tar.gz
# LXM3200 - additional driver for Lexmark 3200/Z12/Z22/Z31/Z32
-# XXX FIXME
LXM3200= lxm3200
LXM3200_VERS= 20030501
LXM3200_NAME= ${LXM3200}-tweaked-${LXM3200_VERS}
diff --git a/print/ghostscript-afpl/Makefile.inc b/print/ghostscript-afpl/Makefile.inc
index 9a49ba4042d6..bc9edabb9f1d 100644
--- a/print/ghostscript-afpl/Makefile.inc
+++ b/print/ghostscript-afpl/Makefile.inc
@@ -1,5 +1,5 @@
# $FreeBSD$
GS_VERSION= 8.51
-GS_REVISION= 0
+GS_REVISION= 1
GS_EPOCH= 1
diff --git a/print/ghostscript-afpl/distinfo b/print/ghostscript-afpl/distinfo
index 3983a4fd133c..0b8f69fc898c 100644
--- a/print/ghostscript-afpl/distinfo
+++ b/print/ghostscript-afpl/distinfo
@@ -2,6 +2,8 @@ MD5 (ghostscript/ghostscript-8.51.tar.bz2) = 8b328b47cce3b7f97f35296aae8e7b77
SIZE (ghostscript/ghostscript-8.51.tar.bz2) = 8377372
MD5 (ghostscript/gdevcd8.tar.gz) = 5ce48bff6082a023199c8ede4aae63a0
SIZE (ghostscript/gdevcd8.tar.gz) = 24803
+MD5 (ghostscript/pcl3-3.3.tar.gz) = 34e664c2a98b847598f8441f8cac7ab6
+SIZE (ghostscript/pcl3-3.3.tar.gz) = 301470
MD5 (ghostscript/gdevdj9.c.gz) = 3a9c20c34b79ffab434abfbcc31d1c27
SIZE (ghostscript/gdevdj9.c.gz) = 20139
MD5 (ghostscript/gdevmd2k-0.2a.tar.gz) = 5ed2b4218b8f77cb411f3d2e4509ed24
@@ -16,6 +18,8 @@ MD5 (ghostscript/canon-lips4-1.0.0-651.tgz) = 3105272a9351ea632416b53367e2f38a
SIZE (ghostscript/canon-lips4-1.0.0-651.tgz) = 38835
MD5 (ghostscript/gdevlips-2.4.0.tar.gz) = 89327cac37665f3fdbae0da5f2c8a89f
SIZE (ghostscript/gdevlips-2.4.0.tar.gz) = 67683
+MD5 (ghostscript/dmprt-2.01.tar.gz) = c7a9fb127fde5d888a798bf5e1822b88
+SIZE (ghostscript/dmprt-2.01.tar.gz) = 44232
MD5 (ghostscript/epag-3.09.tar.gz) = 63304a6afe44842124d2d880bf24dbe3
SIZE (ghostscript/epag-3.09.tar.gz) = 12858
MD5 (ghostscript/eplaser-3.1.4-705.tgz) = 94246b034af171b4336d90198e9f4bd8
diff --git a/print/ghostscript-afpl/files/patch-epag:gdevepag.c b/print/ghostscript-afpl/files/patch-epag:gdevepag.c
index e0009a57b348..f3823f24998b 100644
--- a/print/ghostscript-afpl/files/patch-epag:gdevepag.c
+++ b/print/ghostscript-afpl/files/patch-epag:gdevepag.c
@@ -1,5 +1,5 @@
--- epag/gdevepag.c.orig Sat Jul 8 13:33:09 2000
-+++ epag/gdevepag.c Fri Dec 31 19:59:24 2004
++++ epag/gdevepag.c Thu May 26 00:12:48 2005
@@ -417,15 +417,15 @@
cont->maxY = epag_cont.cRowBuf / cont->bh * cont->bh ;
if(cont->maxY < cont->bh) cont->maxY = cont->bh;
@@ -20,13 +20,15 @@
bbtbl = (EpagBubble *)cont->bubbleBuffer;
for(i=0;i<cont->maxBx-1;i++)
bbtbl[i].next = &bbtbl[i+1];
-@@ -436,9 +436,9 @@
+@@ -436,9 +436,11 @@
private void
epag_page_close(EpagPageCont *cont)
{
- gs_free(cont->bp, bpl, cont->maxY, "epag_skip_blank_init(bp)");
- gs_free(cont->bp2, bpl*3/2+1, cont->maxY, "epag_skip_blank_init(bp2)");
- gs_free(cont->bubbleBuffer, sizeof(EpagBubble), cont->maxBx,"bubbleBuffer");
++ gx_device* pdev;
++
+ gs_free(pdev->memory, cont->bp, bpl, cont->maxY, "epag_skip_blank_init(bp)");
+ gs_free(pdev->memory, cont->bp2, bpl*3/2+1, cont->maxY, "epag_skip_blank_init(bp2)");
+ gs_free(pdev->memory, cont->bubbleBuffer, sizeof(EpagBubble), cont->maxBx,"bubbleBuffer");
diff --git a/print/ghostscript-afpl/files/patch-lxm3200:gdevlx32.c b/print/ghostscript-afpl/files/patch-lxm3200:gdevlx32.c
index bafbc2dde9b5..e4b45a4bece2 100644
--- a/print/ghostscript-afpl/files/patch-lxm3200:gdevlx32.c
+++ b/print/ghostscript-afpl/files/patch-lxm3200:gdevlx32.c
@@ -1,5 +1,5 @@
--- lxm3200/gdevlx32.c.orig Wed Apr 23 01:06:20 2003
-+++ lxm3200/gdevlx32.c Fri Dec 17 19:46:04 2004
++++ lxm3200/gdevlx32.c Thu May 26 00:11:50 2005
@@ -422,9 +422,11 @@
* of the nearest color.
*/
@@ -36,9 +36,12 @@
"lxm3200_print_page(outdata)");
if(gendata.scanbuf == NULL ||
-@@ -944,11 +946,11 @@
+@@ -943,12 +945,14 @@
+ private void
freeresources(void)
{
++ gx_device *pdev;
++
if(gendata.scanbuf)
- gs_free((char *)gendata.scanbuf, gendata.numbytes, gendata.numblines,
+ gs_free(pdev->memory, (char *)gendata.scanbuf, gendata.numbytes, gendata.numblines,
diff --git a/print/ghostscript-afpl/files/patch-src-gdevijs.c b/print/ghostscript-afpl/files/patch-src-gdevijs.c
new file mode 100644
index 000000000000..3788e967996c
--- /dev/null
+++ b/print/ghostscript-afpl/files/patch-src-gdevijs.c
@@ -0,0 +1,659 @@
+--- src/gdevijs.c.orig Thu Mar 10 23:57:23 2005
++++ src/gdevijs.c Fri May 27 02:56:55 2005
+@@ -27,15 +27,29 @@
+ * which is a security risk, since any program can be run.
+ * You should use -dSAFER which sets .LockSafetyParams to true
+ * before opening this device.
++ *
++ * 11/26/03 David Suffield
++ * (c) 2003-2004 Copyright Hewlett-Packard Development Company, LP
++ *
++ * 1. Removed hpijs 1.0-1.0.2 workarounds, use hpijs 1.0.3 or higher.
++ * 2. Added krgb support.
++ *
++ * 02/21/05 David Suffield
++ * 1. Fixed segfault issue with 1-bit color space.
++ * 2. Fixed z-order issue with colored text on black rectangle.
++ *
+ */
+
+ #include "unistd_.h" /* for dup() */
+ #include <stdlib.h>
++#include <fcntl.h>
+ #include "gdevprn.h"
+ #include "gp.h"
+ #include "ijs.h"
+ #include "ijs_client.h"
+
++//#define KRGB_DEBUG
++
+ /* This should go into gdevprn.h, or, better yet, gdevprn should
+ acquire an API for changing resolution. */
+ int gdev_prn_maybe_realloc_memory(gx_device_printer *pdev,
+@@ -52,6 +66,14 @@
+ private dev_proc_put_params(gsijs_put_params);
+ private dev_proc_finish_copydevice(gsijs_finish_copydevice);
+
++/* Following definitions are for krgb support. */
++private dev_proc_create_buf_device(gsijs_create_buf_device);
++private dev_proc_fill_rectangle(gsijs_fill_rectangle);
++private dev_proc_copy_mono(gsijs_copy_mono);
++private dev_proc_fill_mask(gsijs_fill_mask);
++private dev_proc_fill_path(gsijs_fill_path);
++private dev_proc_stroke_path(gsijs_stroke_path);
++
+ private const gx_device_procs gsijs_procs = {
+ gsijs_open,
+ NULL, /* get_initial_matrix */
+@@ -126,6 +148,14 @@
+
+ IjsClientCtx *ctx;
+ int ijs_version;
++
++ /* Additional parameters for krgb support. */
++ int krgb_mode; /* 0=false, 1=true */
++ int k_path; /* k plane path, 0=false, 1=true */
++ int k_width; /* k plane width in pixels */
++ int k_band_size; /* k plane buffer size in bytes, byte aligned */
++ unsigned char *k_band; /* k plane buffer */
++ gx_device_procs prn_procs; /* banding playback procedures */
+ };
+
+ #define DEFAULT_DPI 74 /* See gsijs_set_resolution() below. */
+@@ -153,7 +183,12 @@
+ FALSE, /* Tumble_set */
+
+ NULL, /* IjsClient *ctx */
+- 0 /* ijs_version */
++ 0, /* ijs_version */
++ 0, /* krgb_mode */
++ 0, /* k_path */
++ 0, /* k_width */
++ 0, /* k_band_size */
++ NULL /* k_band buffer */
+ };
+
+
+@@ -169,12 +204,254 @@
+
+ /**************************************************************************/
+
+-/* ------ Private definitions ------ */
++/* ---------------- Low-level graphic procedures ---------------- */
++
++static unsigned char xmask[] =
++{
++ 0x80, /* x=0 */
++ 0x40, /* 1 */
++ 0x20, /* 2 */
++ 0x10, /* 3 */
++ 0x08, /* 4 */
++ 0x04, /* 5 */
++ 0x02, /* 6 */
++ 0x01 /* 7 */
++};
++
++private int gsijs_fill_rectangle(gx_device * dev, int x, int y, int w, int h,
++ gx_color_index color)
++{
++ gx_device_ijs *ijsdev = (gx_device_ijs *)((gx_device_forward *)dev)->target;
++
++ if (ijsdev->krgb_mode && ijsdev->k_path && y >= 0 && x >= 0)
++ {
++ int raster = (ijsdev->k_width+7) >> 3;
++ register unsigned char *dest=ijsdev->k_band+(raster*y)+(x >> 3);
++ int dest_start_bit = x & 7;
++ int i,j,w1;
++
++ if (h <= 0 || w <= 0)
++ return 0;
++
++ if ((x+w) > ijsdev->k_width)
++ w1 = ijsdev->k_width - x;
++ else
++ w1 = w;
++
++ /* Note x,y orgin 0,0 is stored first byte 0 left to right. */
++
++ if (color==0x0)
++ {
++ /* Color is black, store in k plane band instead of regular band. */
++ for (j=0; j<h; j++)
++ {
++ for (i=0; i<w1; i++)
++ dest[(dest_start_bit+i)>>3] |= xmask[(dest_start_bit+i)&7];
++ dest+=raster;
++ }
++ return 0;
++ }
++ else
++ {
++ /* Color is not black, remove any k plane bits for z-order dependencies, store in regular band. */
++ for (j=0; j<h; j++)
++ {
++ for (i=0; i<w1; i++)
++ dest[(dest_start_bit+i)>>3] &= ~xmask[(dest_start_bit+i)&7];
++ dest+=raster;
++ }
++ }
++ }
++
++ return (*ijsdev->prn_procs.fill_rectangle)(dev, x, y, w, h, color);
++}
++
++private int gsijs_copy_mono(gx_device * dev, const byte * data,
++ int dx, int draster, gx_bitmap_id id,
++ int x, int y, int w, int height, gx_color_index zero, gx_color_index one)
++{
++ gx_device_ijs *ijsdev = (gx_device_ijs *)((gx_device_forward *)dev)->target;
++
++ // if (ijsdev->krgb_mode && ijsdev->k_path && one==0x0)
++ if (ijsdev->krgb_mode && ijsdev->k_path)
++ {
++ /* Store in k plane band instead of regular band. */
++ int raster = (ijsdev->k_width+7) >> 3; /* raster width in bytes, byte aligned */
++ register unsigned char *dest=ijsdev->k_band+(raster*y)+(x >> 3);
++ register const unsigned char *scan=data+(dx >> 3);
++ int dest_start_bit = x & 7;
++ int scan_start_bit = dx & 7;
++ int i, h=height;
++
++ if (h <= 0 || w <= 0)
++ return 0;
++
++ if (one==0x0)
++ {
++ /* Color is black, store in k plane band instead of regular band. */
++ while (h-- > 0)
++ {
++ for (i=0; i<w; i++)
++ {
++ if (scan[(scan_start_bit+i)>>3] & xmask[(scan_start_bit+i)&7])
++ dest[(dest_start_bit+i)>>3] |= xmask[(dest_start_bit+i)&7];
++ }
++ scan+=draster;
++ dest+=raster;
++ }
++ return 0;
++ }
++ else
++ {
++ /* Color is not black, remove any k plane bits for z-order dependencies, store in regular band. */
++ while (h-- > 0)
++ {
++ for (i=0; i<w; i++)
++ {
++ if (scan[(scan_start_bit+i)>>3] & xmask[(scan_start_bit+i)&7])
++ dest[(dest_start_bit+i)>>3] &= ~xmask[(dest_start_bit+i)&7];
++ }
++ scan+=draster;
++ dest+=raster;
++ }
++ }
++ }
++
++ return (*ijsdev->prn_procs.copy_mono)(dev, data, dx, draster, id, x, y, w, height, zero, one);
++}
++
++/* ---------------- High-level graphic procedures ---------------- */
++
++private int gsijs_fill_mask(gx_device * dev,
++ const byte * data, int dx, int raster, gx_bitmap_id id,
++ int x, int y, int w, int h,
++ const gx_drawing_color * pdcolor, int depth,
++ gs_logical_operation_t lop, const gx_clip_path * pcpath)
++{
++ gx_device_ijs *ijsdev = (gx_device_ijs *)((gx_device_forward *)dev)->target;
++ int code;
++
++ ijsdev->k_path = 1;
++
++ code = (*ijsdev->prn_procs.fill_mask)(dev, data, dx, raster, id, x, y, w, h, pdcolor, depth, lop, pcpath);
++
++ ijsdev->k_path = 0;
++
++ return code;
++}
++
++private int gsijs_fill_path(gx_device * dev, const gs_imager_state * pis,
++ gx_path * ppath, const gx_fill_params * params,
++ const gx_drawing_color * pdcolor,
++ const gx_clip_path * pcpath)
++{
++ gx_device_ijs *ijsdev = (gx_device_ijs *)((gx_device_forward *)dev)->target;
++ int code;
++
++ ijsdev->k_path = 1;
++
++ code = (*ijsdev->prn_procs.fill_path)(dev, pis, ppath, params, pdcolor, pcpath);
++
++ ijsdev->k_path = 0;
++
++ return 0;
++}
++
++private int gsijs_stroke_path(gx_device * dev, const gs_imager_state * pis,
++ gx_path * ppath, const gx_stroke_params * params,
++ const gx_drawing_color * pdcolor,
++ const gx_clip_path * pcpath)
++{
++ gx_device_ijs *ijsdev = (gx_device_ijs *)((gx_device_forward *)dev)->target;
++ int code;
++
++ ijsdev->k_path = 1;
+
+-/* Versions 1.0 through 1.0.2 of hpijs report IJS version 0.29, and
+- require some workarounds. When more up-to-date hpijs versions
+- become ubiquitous, all these workarounds should be removed. */
+-#define HPIJS_1_0_VERSION 29
++ code = (*ijsdev->prn_procs.stroke_path)(dev, pis, ppath, params, pdcolor, pcpath);
++
++ ijsdev->k_path = 0;
++
++ return code;
++}
++
++/* ---------------- krgb banding playback procedures ---------------- */
++
++private int gsijs_get_bits(gx_device_printer * pdev, int y, byte * str, byte ** actual_data)
++{
++ gx_device_ijs *ijsdev = (gx_device_ijs *)pdev;
++ gx_device_clist_common *cdev = (gx_device_clist_common *)pdev;
++ int band_height = cdev->page_info.band_params.BandHeight;
++ int band_number = y/band_height;
++ int raster = (ijsdev->k_width+7) >> 3; /* raster width in bytes, byte aligned */
++ int y1=raster*(y-(band_height*band_number));
++
++ if (y1 == 0)
++ {
++ /* First raster for band, clear k_band. Banding playback occurs on first raster. */
++ memset(ijsdev->k_band, 0, ijsdev->k_band_size);
++ }
++
++ return gdev_prn_get_bits(pdev, y, str, actual_data); /* get raster from regular band */
++}
++
++private int gsijs_k_get_bits(gx_device_printer * pdev, int y, byte ** actual_data)
++{
++ gx_device_ijs *ijsdev = (gx_device_ijs *)pdev;
++ gx_device_clist_common *cdev = (gx_device_clist_common *)pdev;
++ int band_height = cdev->page_info.band_params.BandHeight;
++ int band_number = y/band_height;
++ int raster = (ijsdev->k_width+7) >> 3; /* raster width in bytes, byte aligned */
++ int y1=raster*(y-(band_height*band_number));
++
++ *actual_data = ijsdev->k_band+y1;
++
++ return 0;
++}
++
++private int gsijs_create_buf_device(gx_device **pbdev, gx_device *target,
++ const gx_render_plane_t *render_plane, gs_memory_t *mem, bool for_band)
++{
++ gx_device_ijs *ijsdev = (gx_device_ijs *)target;
++ int n_chan = ijsdev->color_info.num_components;
++ int code = gx_default_create_buf_device(pbdev, target, render_plane, mem, for_band);
++ if (code < 0 || n_chan != 3)
++ return code;
++
++ /* Save buffer (vector) procedures so that we can hook them during banding playback. */
++ ijsdev->prn_procs = (*pbdev)->procs;
++
++ /* Replace buffer procedures with krgb procedures. */
++ set_dev_proc(*pbdev, fill_rectangle, gsijs_fill_rectangle);
++ set_dev_proc(*pbdev, copy_mono, gsijs_copy_mono);
++ set_dev_proc(*pbdev, fill_mask, gsijs_fill_mask);
++ set_dev_proc(*pbdev, fill_path, gsijs_fill_path);
++ set_dev_proc(*pbdev, stroke_path, gsijs_stroke_path);
++
++ return code;
++}
++
++/* See if IJS server supports krgb. Return value: 0=false, 1=true. */
++private int
++gsijs_set_krgb_mode(gx_device_ijs *ijsdev)
++{
++ char buf[256];
++ int n_chan = ijsdev->color_info.num_components;
++ int code;
++
++ if (n_chan != 3)
++ return 0; /* no krgb support, not RGB colorspace */
++
++ buf[0] = 0;
++ code = ijs_client_enum_param(ijsdev->ctx, 0, "ColorSpace", buf, sizeof(buf)-1);
++ if (code >= 0)
++ buf[code] = 0;
++ if (strstr(buf, "KRGB") == NULL)
++ return 0; /* no krgb support */
++
++ return 1; /* krgb is supported */
++}
++
++/* ------ Private definitions ------ */
+
+ private int
+ gsijs_parse_wxh (const char *val, int size, double *pw, double *ph)
+@@ -212,34 +489,6 @@
+ }
+
+ /**
+- * gsijs_set_generic_params_hpijs: Set generic IJS parameters.
+- *
+- * This version is specialized for hpijs 1.0 through 1.0.2, and
+- * accommodates a number of quirks.
+- **/
+-private int
+-gsijs_set_generic_params_hpijs(gx_device_ijs *ijsdev)
+-{
+- char buf[256];
+- int code = 0;
+-
+- /* IjsParams, Duplex, and Tumble get set at this point because
+- they may affect margins. */
+- if (ijsdev->IjsParams) {
+- code = gsijs_client_set_param(ijsdev, "IjsParams", ijsdev->IjsParams);
+- }
+-
+- if (code == 0 && ijsdev->Duplex_set) {
+- int duplex_val;
+-
+- duplex_val = ijsdev->Duplex ? (ijsdev->IjsTumble ? 1 : 2) : 0;
+- sprintf (buf, "%d", duplex_val);
+- code = gsijs_client_set_param(ijsdev, "Duplex", buf);
+- }
+- return code;
+-}
+-
+-/**
+ * gsijs_set_generic_params: Set generic IJS parameters.
+ **/
+ private int
+@@ -250,9 +499,6 @@
+ int i, j;
+ char *value;
+
+- if (ijsdev->ijs_version == HPIJS_1_0_VERSION)
+- return gsijs_set_generic_params_hpijs(ijsdev);
+-
+ /* Split IjsParams into separate parameters and send to ijs server */
+ value = NULL;
+ for (i=0, j=0; (j < ijsdev->IjsParams_size) && (i < sizeof(buf)-1); j++) {
+@@ -293,68 +539,6 @@
+ }
+
+ /**
+- * gsijs_set_margin_params_hpijs: Do margin negotiation with IJS server.
+- *
+- * This version is specialized for hpijs 1.0 through 1.0.2, and
+- * accommodates a number of quirks.
+- **/
+-private int
+-gsijs_set_margin_params_hpijs(gx_device_ijs *ijsdev)
+-{
+- char buf[256];
+- int code = 0;
+-
+- if (code == 0) {
+- sprintf(buf, "%d", ijsdev->width);
+- code = gsijs_client_set_param(ijsdev, "Width", buf);
+- }
+- if (code == 0) {
+- sprintf(buf, "%d", ijsdev->height);
+- code = gsijs_client_set_param(ijsdev, "Height", buf);
+- }
+-
+- if (code == 0) {
+- double printable_width, printable_height;
+- double printable_left, printable_top;
+- float m[4];
+-
+- code = ijs_client_get_param(ijsdev->ctx, 0, "PrintableArea",
+- buf, sizeof(buf));
+- if (code == IJS_EUNKPARAM)
+- /* IJS server doesn't support margin negotiations.
+- That's ok. */
+- return 0;
+- else if (code >= 0) {
+- code = gsijs_parse_wxh(buf, code,
+- &printable_width, &printable_height);
+- }
+-
+- if (code == 0) {
+- code = ijs_client_get_param(ijsdev->ctx, 0, "PrintableTopLeft",
+- buf, sizeof(buf));
+- if (code == IJS_EUNKPARAM)
+- return 0;
+- else if (code >= 0) {
+- code = gsijs_parse_wxh(buf, code,
+- &printable_left, &printable_top);
+- }
+- }
+-
+- if (code == 0) {
+- m[0] = printable_left;
+- m[1] = ijsdev->MediaSize[1] * (1.0 / 72) -
+- printable_top - printable_height;
+- m[2] = ijsdev->MediaSize[0] * (1.0 / 72) -
+- printable_left - printable_width;
+- m[3] = printable_top;
+- gx_device_set_margins((gx_device *)ijsdev, m, true);
+- }
+- }
+-
+- return code;
+-}
+-
+-/**
+ * gsijs_set_margin_params: Do margin negotiation with IJS server.
+ **/
+ private int
+@@ -365,9 +549,6 @@
+ int i, j;
+ char *value;
+
+- if (ijsdev->ijs_version == HPIJS_1_0_VERSION)
+- return gsijs_set_margin_params_hpijs(ijsdev);
+-
+ /* Split IjsParams into separate parameters and send to ijs server */
+ value = NULL;
+ for (i=0, j=0; (j < ijsdev->IjsParams_size) && (i < sizeof(buf)-1); j++) {
+@@ -534,12 +715,18 @@
+ char buf[256];
+ bool use_outputfd;
+ int fd = -1;
++ long max_bitmap = ijsdev->space_params.MaxBitmap;
+
+ if (strlen(ijsdev->IjsServer) == 0) {
+ eprintf("ijs server not specified\n");
+ return gs_note_error(gs_error_ioerror);
+ }
+
++ ijsdev->space_params.MaxBitmap = 0; /* force banding */
++
++ /* Set create_buf_device in printer device, so that we can hook the banding playback procedures. */
++ ijsdev->printer_procs.buf_procs.create_buf_device = gsijs_create_buf_device;
++
+ /* Decide whether to use OutputFile or OutputFD. Note: how to
+ determine this is a tricky question, so we just allow the
+ user to set it.
+@@ -554,6 +741,8 @@
+ if (code < 0)
+ return code;
+
++ ijsdev->space_params.MaxBitmap = max_bitmap;
++
+ if (use_outputfd) {
+ /* Note: dup() may not be portable to all interesting IJS
+ platforms. In that case, this branch should be #ifdef'ed out.
+@@ -613,6 +802,9 @@
+ if (code >= 0)
+ code = gsijs_set_margin_params(ijsdev);
+
++ if (code >= 0)
++ ijsdev->krgb_mode = gsijs_set_krgb_mode(ijsdev);
++
+ return code;
+ }
+
+@@ -695,21 +887,6 @@
+ return min(width, end);
+ }
+
+-private int ijs_all_white(unsigned char *data, int size)
+-{
+- int clean = 1;
+- int i;
+- for (i = 0; i < size; i++)
+- {
+- if (data[i] != 0xFF)
+- {
+- clean = 0;
+- break;
+- }
+- }
+- return clean;
+-}
+-
+ /* Print a page. Don't use normal printer gdev_prn_output_page
+ * because it opens the output file.
+ */
+@@ -720,8 +897,9 @@
+ gx_device_printer *pdev = (gx_device_printer *)dev;
+ int raster = gdev_prn_raster(pdev);
+ int ijs_width, ijs_height;
+- int row_bytes;
++ int row_bytes, k_row_bytes=0;
+ int n_chan = pdev->color_info.num_components;
++ int krgb_mode = ijsdev->krgb_mode;
+ unsigned char *data;
+ char buf[256];
+ double xres = pdev->HWResolution[0];
+@@ -737,13 +915,23 @@
+
+ /* Determine bitmap width and height */
+ ijs_height = gdev_prn_print_scan_lines(dev);
+- if (ijsdev->ijs_version == HPIJS_1_0_VERSION) {
+- ijs_width = pdev->width;
+- } else {
+ ijs_width = gsijs_raster_width(dev);
+- }
++
+ row_bytes = (ijs_width * pdev->color_info.depth + 7) >> 3;
+
++ if (krgb_mode)
++ {
++ gx_device_clist_common *cdev = (gx_device_clist_common *)dev;
++ int band_height = cdev->page_info.band_params.BandHeight;
++ k_row_bytes = (ijs_width + 7) >> 3;
++
++ /* Create banding buffer for k plane. */
++ ijsdev->k_width = ijs_width;
++ ijsdev->k_band_size = band_height * k_row_bytes;
++ if ((ijsdev->k_band = gs_malloc(pdev->memory, ijsdev->k_band_size, 1, "gsijs_output_page")) == (unsigned char *)NULL)
++ return gs_note_error(gs_error_VMerror);
++ }
++
+ /* Required page parameters */
+ sprintf(buf, "%d", n_chan);
+ gsijs_client_set_param(ijsdev, "NumChan", buf);
+@@ -752,44 +940,71 @@
+
+ /* This needs to become more sophisticated for DeviceN. */
+ strcpy(buf, (n_chan == 4) ? "DeviceCMYK" :
+- ((n_chan == 3) ? "DeviceRGB" : "DeviceGray"));
++ ((n_chan == 3) ? (krgb_mode ? "KRGB" : "DeviceRGB") : "DeviceGray"));
+ gsijs_client_set_param(ijsdev, "ColorSpace", buf);
+
+- /* If hpijs 1.0, don't set width and height here, because it
+- expects them to be the paper size. */
+- if (ijsdev->ijs_version != HPIJS_1_0_VERSION) {
+- sprintf(buf, "%d", ijs_width);
+- gsijs_client_set_param(ijsdev, "Width", buf);
+- sprintf(buf, "%d", ijs_height);
+- gsijs_client_set_param(ijsdev, "Height", buf);
+- }
++ sprintf(buf, "%d", ijs_width);
++ gsijs_client_set_param(ijsdev, "Width", buf);
++ sprintf(buf, "%d", ijs_height);
++ gsijs_client_set_param(ijsdev, "Height", buf);
+
+ sprintf(buf, "%gx%g", xres, yres);
+ gsijs_client_set_param(ijsdev, "Dpi", buf);
+
++#ifdef KRGB_DEBUG
++ int kfd, rgbfd;
++ char sz[128];
++ kfd = open("/tmp/k.pbm", O_CREAT | O_TRUNC | O_RDWR, 0644);
++ rgbfd = open("/tmp/rgb.ppm", O_CREAT | O_TRUNC | O_RDWR, 0644);
++ snprintf(sz, sizeof(sz), "P4\n#gdevijs test\n%d\n%d\n", ijs_width, ijs_height);
++ write(kfd, sz, strlen(sz));
++ snprintf(sz, sizeof(sz), "P6\n#gdevijs test\n%d\n%d\n255\n", ijs_width, ijs_height);
++ write(rgbfd, sz, strlen(sz));
++#endif
++
+ for (i=0; i<num_copies; i++) {
+ unsigned char *actual_data;
+ ijs_client_begin_cmd (ijsdev->ctx, IJS_CMD_BEGIN_PAGE);
+ status = ijs_client_send_cmd_wait(ijsdev->ctx);
+
+ for (y = 0; y < ijs_height; y++) {
+- code = gdev_prn_get_bits(pdev, y, data, &actual_data);
+- if (code < 0)
+- break;
++ if (krgb_mode)
++ code = gsijs_get_bits(pdev, y, data, &actual_data);
++ else
++ code = gdev_prn_get_bits(pdev, y, data, &actual_data);
++ if (code < 0)
++ break;
++#ifdef KRGB_DEBUG
++ write(rgbfd, actual_data, row_bytes);
++#endif
++ status = ijs_client_send_data_wait(ijsdev->ctx, 0, (char *)actual_data, row_bytes);
++ if (status)
++ break;
+
+- if (ijsdev->ijs_version == HPIJS_1_0_VERSION &&
+- ijs_all_white(actual_data, row_bytes))
+- status = ijs_client_send_data_wait(ijsdev->ctx, 0, NULL, 0);
+- else
+- status = ijs_client_send_data_wait(ijsdev->ctx, 0,
+- (char *)actual_data, row_bytes);
+- if (status)
+- break;
++ if (krgb_mode) {
++ code = gsijs_k_get_bits(pdev, y, &actual_data);
++ if (code < 0)
++ break;
++#ifdef KRGB_DEBUG
++ write(kfd, actual_data, k_row_bytes);
++#endif
++ status = ijs_client_send_data_wait(ijsdev->ctx, 0, (char *)actual_data, k_row_bytes);
++ if (status)
++ break;
++ }
+ }
+ ijs_client_begin_cmd(ijsdev->ctx, IJS_CMD_END_PAGE);
+ status = ijs_client_send_cmd_wait(ijsdev->ctx);
+ }
+
++#ifdef KRGB_DEBUG
++ close(kfd);
++ close(rgbfd);
++#endif
++
++ if(krgb_mode)
++ gs_free(pdev->memory, ijsdev->k_band, ijsdev->k_band_size, 1, "gsijs_output_page");
++
+ gs_free_object(pdev->memory, data, "gsijs_output_page");
+
+ endcode = (pdev->buffer_space && !pdev->is_async_renderer ?
+@@ -1093,7 +1308,6 @@
+ dprintf2("ijs: Can't set parameter %s=%s\n", key, value);
+ return code;
+ }
+-
+
+ private int
+ gsijs_set_color_format(gx_device_ijs *ijsdev)
diff --git a/print/ghostscript-afpl/pkg-descr b/print/ghostscript-afpl/pkg-descr
index 6f086df47f0b..e3d97f845b58 100644
--- a/print/ghostscript-afpl/pkg-descr
+++ b/print/ghostscript-afpl/pkg-descr
@@ -7,8 +7,8 @@ from the GPL. Read the file PUBLIC in the work/gsX.Y directory or in
${PREFIX}/share/ghostscript/X.Y/doc/PUBLIC after installation for details !
This port includes add-on packages (not part of the official gs release)
- o HP2200 driver for HP DeskJet 8xx and Business Inkjet 2200
- - http://hp.sourceforge.net/gs-hp2200.php
+ o HP8XX driver for HP DeskJet 880C/882C/895C
+ - http://www.gelhaus.net/hp880c/
o DJ970 driver for HP DeskJet 970CXi
- http://www.harsch.net/Ghostscript/ghostscript.html
o Special drivers for verious printer models
diff --git a/print/ghostscript-afpl/scripts/configure b/print/ghostscript-afpl/scripts/configure
index 5f7fdd275ec9..34a1f8b598bf 100644
--- a/print/ghostscript-afpl/scripts/configure
+++ b/print/ghostscript-afpl/scripts/configure
@@ -32,6 +32,7 @@ else
lips2p lips3 lips4 bjc880j lips4v \
m8510 coslw2p coslwxl uniprint \
lj250 declj250 ap3250 epson eps9mid eps9high lp8000 \
+ epag \
escpage lp2000 \
alc8600 alc8500 alc2000 alc4000 alc1900 alc4100 \
lp9800c lp9000c lp9500c lp8800c lp8300c lp8500c lp3000c \
@@ -51,7 +52,7 @@ else
pj pjetxl pjxl paintjet \
pjxl300 pxlmono pxlcolor \
ijs ibmpro jetp3852 imagen fs600 lxm5700m \
- lx5000 lex2050 lex3200 lex5700 lex7000 \
+ lxm3200 lx5000 lex2050 lex3200 lex5700 lex7000 \
cp50 necp6 \
npdl \
oce9050 oki182 okiibm atx23 atx24 atx38 r4081 \
@@ -60,6 +61,7 @@ else
sj48 t4693d2 t4693d4 t4693d8 tek4696 \
bmpmono bmpgray bmp16 bmp256 bmp16m bmp32b bmpsep1 bmpsep8 \
ccr \
+ cgmmono cgm8 cgm24 \
cif \
dfaxhigh dfaxlow \
xcf xcfcmyk \
@@ -149,6 +151,7 @@ Have fun with this new configuration style ! -andreas \n\n\
"eps9mid" "Epson-compatible 9-pin, interleaved lines, medium resol" "$status_eps9mid" \
"eps9high" "Epson-compatible 9-pin, interleaved lines, triple resol" "$status_eps9high" \
"lp8000" "Epson LP-8000 line printer" "$status_lp8000" \
+ "epag" "Epson ESC/Page laser printer (generic) [EPAG]" "$status_epag" \
"escpage" "Epson ESC/Page laser printer (generic) [LIPS]" "$status_escpage" \
"lp2000" "Epson LP-2000/3000/7000/7000G laser printer [LIPS]" "$status_lp2000" \
"alc8600" "Epson AL-C8600 color laser printer [EPLASER]" "$status_alc8600" \
@@ -246,6 +249,7 @@ Have fun with this new configuration style ! -andreas \n\n\
"imagen" "Imagen ImPress printers" "$status_imagen" \
"fs600" "Kyocera FS-600 (600 dpi)" "$status_fs600" \
"lxm5700m" "Lexmark 5700 monotone" "$status_lxm5700m" \
+ "lxm3200" "Lexmark 3200/Z12/Z22/Z31/Z32 [LXM3200]" "$status_lxm3200" \
"lx5000" "Lexmark 5000/Z51/Z82 [LX5000]" "$status_lx5000" \
"lex2050" "Lexmark 2050 [LEX7000]" "$status_lex2050" \
"lex3200" "Lexmark 3200 [LEX7000]" "$status_lex3200" \