summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2016-10-05 09:16:08 +0200
committerDidier Raboud <odyx@debian.org>2016-10-05 09:16:08 +0200
commitd69d392d8c45cdcc93e58f0e1bdbb2b66d6b9566 (patch)
treefbd96013c3d605249b167a97c8862f38f8a1cdee /src
parent7f5731038556e5b03d2a886163ca2c873c77333d (diff)
New upstream version 5.2.12~pre3
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.in1
-rw-r--r--src/cups/Makefile.in1
-rw-r--r--src/cups/backend_common.c2
-rw-r--r--src/cups/backend_mitsu70x.c451
-rw-r--r--src/cups/backend_mitsu9550.c42
-rw-r--r--src/cups/commandtocanon.c1
-rw-r--r--src/cups/commandtoepson.c1
-rw-r--r--src/cups/genppd.c44
-rw-r--r--src/cups/i18n.c1
-rw-r--r--src/cups/rastertoprinter.c7
-rwxr-xr-xsrc/cups/test-rastertogutenprint.in20
-rw-r--r--src/escputil/Makefile.in1
-rw-r--r--src/escputil/d4lib.c31
-rw-r--r--src/escputil/escputil.c4
-rw-r--r--src/gimp2/Makefile.in1
-rw-r--r--src/gutenprintui2/Makefile.in1
-rw-r--r--src/gutenprintui2/plist.c2
-rw-r--r--src/main/Makefile.in1
-rw-r--r--src/main/canon-media-mode.h53
-rw-r--r--src/main/canon-media.h17
-rw-r--r--src/main/canon-modes.h23
-rw-r--r--src/main/canon-printers.h27
-rw-r--r--src/main/curve.c1
-rw-r--r--src/main/escp2-papers.c1
-rw-r--r--src/main/print-canon.c11
-rw-r--r--src/main/print-olympus.c622
-rw-r--r--src/main/print-ps.c1
-rw-r--r--src/main/xmlppd.c1
-rw-r--r--src/testpattern/Makefile.am21
-rw-r--r--src/testpattern/Makefile.in31
-rwxr-xr-xsrc/testpattern/compare-checksums.in80
-rw-r--r--src/testpattern/compress-checksums.in121
-rw-r--r--src/testpattern/run-testpattern-2.in1
-rw-r--r--src/testpattern/testpatternl.c2
-rw-r--r--src/testpattern/testpatternl.l2
-rw-r--r--src/testpattern/testpatterny.c143
-rw-r--r--src/testpattern/testpatterny.y3
-rw-r--r--src/testpattern/uncompress-checksums.in47
-rw-r--r--src/xml/Makefile.in1
-rw-r--r--src/xml/escp2/Makefile.in1
-rw-r--r--src/xml/escp2/inks/Makefile.in1
-rw-r--r--src/xml/escp2/inputslots/Makefile.in1
-rw-r--r--src/xml/escp2/media/Makefile.in1
-rw-r--r--src/xml/escp2/mediasizes/Makefile.in1
-rw-r--r--src/xml/escp2/model/Makefile.in1
-rw-r--r--src/xml/escp2/qualitypresets/Makefile.in1
-rw-r--r--src/xml/escp2/weaves/Makefile.in1
-rw-r--r--src/xml/printers.xml35
48 files changed, 1304 insertions, 560 deletions
diff --git a/src/Makefile.in b/src/Makefile.in
index feacab6..19d2f2a 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -193,6 +193,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/cups/Makefile.in b/src/cups/Makefile.in
index 94a6dc8..fcb9787 100644
--- a/src/cups/Makefile.in
+++ b/src/cups/Makefile.in
@@ -485,6 +485,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/cups/backend_common.c b/src/cups/backend_common.c
index 171f564..643d738 100644
--- a/src/cups/backend_common.c
+++ b/src/cups/backend_common.c
@@ -713,7 +713,7 @@ void print_help(char *argv0, struct dyesub_backend *backend)
DEBUG("Standalone %s backend version %s\n",
backend->name, backend->version);
DEBUG("\t%s\n", backend->uri_prefix);
- DEBUG("\t[ -D ] [ -G ] [ -S serialnum ] \n");
+ DEBUG("\t[ -D ] [ -G ] \n");
DEBUG("\t[ -V extra_vid ] [ -P extra_pid ] [ -T extra_type ] \n");
if (backend->cmdline_usage)
backend->cmdline_usage();
diff --git a/src/cups/backend_mitsu70x.c b/src/cups/backend_mitsu70x.c
index e0b0587..9a94a32 100644
--- a/src/cups/backend_mitsu70x.c
+++ b/src/cups/backend_mitsu70x.c
@@ -50,6 +50,14 @@
//#define ENABLE_CORRTABLES
+#ifndef CORRTABLE_PATH
+#define CORRTABLE_PATH "D70"
+#endif
+
+#ifdef ENABLE_CORRTABLES
+#include "D70/Mitsu_D70.c"
+#endif
+
/* Private data stucture */
struct mitsu70x_ctx {
struct libusb_device_handle *dev;
@@ -70,11 +78,17 @@ struct mitsu70x_ctx {
uint16_t last_donor_u;
int num_decks;
+ int supports_jobs_query;
+
#ifdef ENABLE_CORRTABLES
- struct mitsu70x_corrdata *corrdata;
- struct mitsu70x_corrdatalens *corrdatalens;
char *laminatefname;
char *lutfname;
+ char *cpcfname;
+
+ struct CColorConv3D lut;
+ struct CPCData cpcdata;
+
+ char *last_cpcfname;
int raw_format;
#endif
@@ -82,9 +96,9 @@ struct mitsu70x_ctx {
/* Printer data structures */
struct mitsu70x_jobstatus {
- uint8_t hdr[4];
- uint16_t jobid;
- uint16_t mecha_no;
+ uint8_t hdr[4]; /* E4 56 31 30 */
+ uint16_t jobid; /* BE */
+ uint16_t mecha_no; /* BE */
uint8_t job_status[4];
uint8_t memory;
uint8_t power;
@@ -95,11 +109,11 @@ struct mitsu70x_jobstatus {
} __attribute__((packed));
struct mitsu70x_jobs {
- uint8_t hdr[4];
+ uint8_t hdr[4]; /* E4 56 31 31 */
uint16_t dummy;
- uint16_t jobid_0;
+ uint16_t jobid_0; /* BE */
uint8_t job0_status[4];
- uint16_t jobid_1;
+ uint16_t jobid_1; /* BE */
uint8_t job1_status[4];
// XXX are there more?
} __attribute__((packed));
@@ -224,8 +238,10 @@ struct mitsu70x_status_ver {
} __attribute__((packed));
struct mitsu70x_printerstatus_resp {
- uint8_t hdr[4];
- uint8_t unk[36];
+ uint8_t hdr[4]; /* E4 56 32 31 */
+ uint8_t memory;
+ uint8_t power;
+ uint8_t unk[34];
int16_t model[6]; /* LE, UTF-16 */
int16_t serno[6]; /* LE, UTF-16 */
struct mitsu70x_status_ver vers[7]; // components are 'LMFTR??'
@@ -235,7 +251,7 @@ struct mitsu70x_printerstatus_resp {
} __attribute__((packed));
struct mitsu70x_memorystatus_resp {
- uint8_t hdr[3];
+ uint8_t hdr[3]; /* E4 56 33 */
uint8_t memory;
uint8_t size;
uint8_t rsvd;
@@ -260,75 +276,13 @@ struct mitsu70x_hdr {
uint8_t zero3[6];
uint8_t multicut;
- uint8_t zero4[15];
+ uint8_t zero4[13];
+ uint8_t mode; /* 0 for cooked YMC planar, 1 for packed BGR */
+ uint8_t use_lut; /* in BGR mode, 0 disables, 1 enables */
uint8_t pad[448];
} __attribute__((packed));
-#ifdef ENABLE_CORRTABLES
-/* Correction data definitions */
-#define CORRDATA_DEF
-struct mitsu70x_corrdata {
- uint16_t liney[2730];
- uint16_t linem[2730];
- uint16_t linec[2730];
- uint16_t gnmby[256]; // B->Y conversion matrix
- uint16_t gnmgm[256]; // G->M conversion matrix
- uint16_t gnmrc[256]; // R->C conversion matrix
- double fm[256];
- double ksp[128];
- double ksm[128];
- double osp[128];
- double osm[128];
- double kp[11];
- double km[11];
- double hk[4];
- uint16_t speed[3];
- double fh[5]; /* only 4 in length on D70 Normal/Superfine */
- double shk[72];
- double uh[101];
- uint16_t rolk[13]; /* Missing on D70x family */
- uint32_t rev[76]; /* Missing on D70x and ASK300 */
-};
-
-struct mitsu70x_corrdatalens {
- size_t liney;
- size_t linem;
- size_t linec;
- size_t gnmby;
- size_t gnmgm;
- size_t gnmrc;
- size_t fm;
- size_t ksp;
- size_t ksm;
- size_t osp;
- size_t osm;
- size_t kp;
- size_t km;
- size_t hk;
- size_t speed;
- size_t fh;
- size_t shk;
- size_t uh;
- size_t rolk;
- size_t rev;
-};
-
-#include "D70/CPD70N01.h" // Normal/Fine
-#include "D70/CPD70S01.h" // Superfine
-#include "D70/CPD70U01.h" // Ultrafine
-//#include "D70/CPD80E01.h" // ???
-#include "D70/CPD80N01.h" // Normal/Fine
-#include "D70/CPD80S01.h" // Superfine
-#include "D70/CPD80U01.h" // Ultrafine
-#include "D70/ASK300T1.h" // Normal/Fine
-#include "D70/ASK300T3.h" // Superfine/Ultrafine
-#include "D70/CPS60T01.h" // Normal/Fine
-#include "D70/CPS60T03.h" // Superfine/Ultrafine
-#include "D70/EK305T01.h" // Normal/Fine
-#include "D70/EK305T03.h" // Superfine/Ultrafine
-#endif
-
/* Error dumps, etc */
static char *mitsu70x_mechastatus(uint8_t *sts)
@@ -382,11 +336,11 @@ static char *mitsu70x_jobstatuses(uint8_t *sts)
case JOB_STATUS1_PRINT_EJECT:
return "Ejecting page";
default:
- return "Unknown 'Print' status1\n";
+ return "Unknown 'Print' status1";
}
break;
case JOB_STATUS0_ASSIGN:
- return "Unknown 'Assignment' status1\n";
+ return "Unknown 'Assignment' status1";
case JOB_STATUS0_END:
switch(sts[1]) {
case JOB_STATUS1_END_OK:
@@ -606,7 +560,14 @@ static void mitsu70x_attach(void *vctx, struct libusb_device_handle *dev,
ctx->type = lookup_printer_type(&mitsu70x_backend,
desc.idVendor, desc.idProduct);
- ctx->last_donor_l = ctx->last_donor_u = 65535;}
+ ctx->last_donor_l = ctx->last_donor_u = 65535;
+
+ if (ctx->type == P_KODAK_305 ||
+ ctx->type == P_MITSU_K60)
+ ctx->supports_jobs_query = 0;
+ else
+ ctx->supports_jobs_query = 1;
+}
static void mitsu70x_teardown(void *vctx) {
struct mitsu70x_ctx *ctx = vctx;
@@ -616,6 +577,7 @@ static void mitsu70x_teardown(void *vctx) {
if (ctx->databuf)
free(ctx->databuf);
+
free(ctx);
}
@@ -623,6 +585,7 @@ static int mitsu70x_read_parse(void *vctx, int data_fd) {
struct mitsu70x_ctx *ctx = vctx;
int i, remain;
struct mitsu70x_hdr mhdr;
+ uint32_t planelen;
if (!ctx)
return CUPS_BACKEND_FAILED;
@@ -663,83 +626,77 @@ repeat:
}
#ifdef ENABLE_CORRTABLES
- ctx->raw_format = 1; // XXX until we define a new spool format for
- // the data. Maybe reuse D90 header?
+ ctx->raw_format = !mhdr.mode;
/* Figure out the correction data table to use */
if (ctx->type == P_MITSU_D70X) {
- ctx->laminatefname = "D70MAT01.raw";
- ctx->lutfname = "CPD70L01.lut";
+ ctx->laminatefname = CORRTABLE_PATH "/D70MAT01.raw";
+ ctx->lutfname = CORRTABLE_PATH "/CPD70L01.lut";
if (mhdr.speed == 3) {
- ctx->corrdata = &CPD70S01_data;
- ctx->corrdatalens = &CPD70S01_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/CPD70S01.cpc";
} else if (mhdr.speed == 4) {
- ctx->corrdata = &CPD70U01_data;
- ctx->corrdatalens = &CPD70U01_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/CPD70U01.cpc";
} else {
- ctx->corrdata = &CPD70N01_data;
- ctx->corrdatalens = &CPD70N01_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/CPD70N01.cpc";
}
} else if (ctx->type == P_MITSU_D80) {
- ctx->laminatefname = "D80MAT01.raw";
- ctx->lutfname = "CPD80L01.lut";
+ ctx->laminatefname = CORRTABLE_PATH "/D80MAT01.raw";
+ ctx->lutfname = CORRTABLE_PATH "/CPD80L01.lut";
if (mhdr.speed == 3) {
- ctx->corrdata = &CPD80S01_data;
- ctx->corrdatalens = &CPD80S01_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/CPD80S01.cpc";
} else if (mhdr.speed == 4) {
- ctx->corrdata = &CPD80U01_data;
- ctx->corrdatalens = &CPD80U01_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/CPD80U01.cpc";
} else {
- ctx->corrdata = &CPD80N01_data;
- ctx->corrdatalens = &CPD80N01_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/CPD80N01.cpc";
}
// XXX what about CPD80**E**01?
} else if (ctx->type == P_MITSU_K60) {
- ctx->laminatefname = "S60MAT02.raw";
- ctx->lutfname = "CPS60L01.lut";
+ ctx->laminatefname = CORRTABLE_PATH "/S60MAT02.raw";
+ ctx->lutfname = CORRTABLE_PATH "/CPS60L01.lut";
if (mhdr.speed == 3 || mhdr.speed == 4) {
- ctx->corrdata = &CPS60T03_data;
- ctx->corrdatalens = &CPS60T03_lengths;
+ mhdr.speed = 4; /* Ultra Fine */
+ ctx->cpcfname = CORRTABLE_PATH "/CPS60T03.cpc";
} else {
- ctx->corrdata = &CPS60T01_data;
- ctx->corrdatalens = &CPS60T01_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/CPS60T01.cpc";
}
-
} else if (ctx->type == P_KODAK_305) {
- ctx->laminatefname = "EK305MAT.raw"; // Same as K60
- ctx->lutfname = "EK305L01.lut";
+ ctx->laminatefname = CORRTABLE_PATH "/EK305MAT.raw"; // Same as K60
+ ctx->lutfname = CORRTABLE_PATH "/EK305L01.lut";
if (mhdr.speed == 3 || mhdr.speed == 4) {
- ctx->corrdata = &EK305T03_data;
- ctx->corrdatalens = &EK305T03_lengths;
+ mhdr.speed = 4; /* Ultra Fine */
+ ctx->cpcfname = CORRTABLE_PATH "/EK305T03.cpc";
} else {
- ctx->corrdata = &EK305T01_data;
- ctx->corrdatalens = &EK305T01_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/EK305T01.cpc";
}
- } else if (ctx->type == P_FUJI_ASK300) {
- ctx->laminatefname = "ASK300M2.raw"; // Same as D70
- ctx->lutfname = "CPD70L01.lut"; // XXX guess!
+ } else if (ctx->type == P_FUJI_ASK300) {
+ ctx->laminatefname = CORRTABLE_PATH "/ASK300M2.raw"; // Same as D70
+ ctx->lutfname = CORRTABLE_PATH "/CPD70L01.lut"; // XXX guess, driver did not come with external LUT!
if (mhdr.speed == 3 || mhdr.speed == 4) {
- ctx->corrdata = &ASK300T3_data;
- ctx->corrdatalens = &ASK300T3_lengths;
+ mhdr.speed = 3; /* Super Fine */
+ ctx->cpcfname = CORRTABLE_PATH "/ASK300T3.cpc";
} else {
- ctx->corrdata = &ASK300T1_data;
- ctx->corrdatalens = &ASK300T1_lengths;
+ ctx->cpcfname = CORRTABLE_PATH "/ASK300T1.cpc";
}
}
+ if (!mhdr.use_lut)
+ ctx->lutfname = NULL;
+
+ /* Clean up header back to pristine. */
+ mhdr.use_lut = 0;
+ mhdr.mode = 0;
#endif
- /* Work out printjob size */
+ /* Work out total printjob size */
ctx->cols = be16_to_cpu(mhdr.cols);
ctx->rows = be16_to_cpu(mhdr.rows);
- remain = ctx->rows * ctx->cols * 2;
- remain = (remain + 511) / 512 * 512; /* Round to nearest 512 bytes. */
- remain *= 3; /* One for each plane */
+ planelen = ctx->rows * ctx->cols * 2;
+ planelen = (planelen + 511) / 512 * 512; /* Round to nearest 512 bytes. */
if (!mhdr.laminate && mhdr.laminate_mode) {
i = be16_to_cpu(mhdr.lamcols) * be16_to_cpu(mhdr.lamrows) * 2;
@@ -747,53 +704,143 @@ repeat:
ctx->matte = i;
}
- ctx->databuf = malloc(sizeof(mhdr) + remain + ctx->matte);
+ remain = 3 * planelen + ctx->matte;
+
+ ctx->datalen = 0;
+ ctx->databuf = malloc(sizeof(mhdr) + remain);
if (!ctx->databuf) {
ERROR("Memory allocation failure!\n");
return CUPS_BACKEND_FAILED;
}
- memcpy(ctx->databuf, &mhdr, sizeof(mhdr));
+ memcpy(ctx->databuf + ctx->datalen, &mhdr, sizeof(mhdr));
ctx->datalen += sizeof(mhdr);
-#ifndef ENABLE_CORRTABLES
- /* Read matte from spool... */
- remain += ctx->matte;
+#ifdef ENABLE_CORRTABLES
+ if (ctx->raw_format) { /* RAW MODE */
#endif
+ DEBUG("Reading in %d bytes of 16bpp YMCL data\n", remain);
- /* Read in the spool data */
- while(remain) {
- i = read(data_fd, ctx->databuf + ctx->datalen, remain);
- if (i == 0)
- return CUPS_BACKEND_CANCEL;
- if (i < 0)
- return CUPS_BACKEND_CANCEL;
- ctx->datalen += i;
- remain -= i;
- }
-
+ /* Read in the spool data */
+ while(remain) {
+ i = read(data_fd, ctx->databuf + ctx->datalen, remain);
+ if (i == 0)
+ return CUPS_BACKEND_CANCEL;
+ if (i < 0)
+ return CUPS_BACKEND_CANCEL;
+ ctx->datalen += i;
+ remain -= i;
+ }
#ifdef ENABLE_CORRTABLES
- /* Read matte from matte file */
- if (!ctx->raw_format && ctx->matte) {
- int fd;
- fd = open(ctx->laminatefname, O_RDONLY);
- if (fd < 0) {
- ERROR("Unable to open matte lamination data file '%s'\n", ctx->laminatefname);
- return CUPS_BACKEND_CANCEL;
+ } else { /* RAW MODE OFF */
+ int spoolbuflen = 0;
+ uint8_t *spoolbuf;
+
+ remain = ctx->rows * ctx->cols * 3;
+ DEBUG("Reading in %d bytes of 8bpp BGR data\n", remain);
+
+ spoolbuflen = 0; spoolbuf = malloc(remain);
+ if (!spoolbuf) {
+ ERROR("Memory allocation failure!\n");
+ return CUPS_BACKEND_FAILED;
}
- remain = ctx->matte;
+
+ /* Read in the BGR data */
while (remain) {
- i = read(fd, ctx->databuf + ctx->datalen, remain);
+ i = read(data_fd, spoolbuf + spoolbuflen, remain);
if (i == 0)
return CUPS_BACKEND_CANCEL;
if (i < 0)
return CUPS_BACKEND_CANCEL;
- ctx->datalen += i;
+ spoolbuflen += i;
remain -= i;
}
+
+ /* Run through basic LUT, if present and enabled */
+ if (ctx->lutfname) {
+ DEBUG("Running print data through LUT\n");
+ uint8_t *buf = malloc(LUT_LEN);
+ if (!buf) {
+ ERROR("Memory allocation failure!\n");
+ return CUPS_BACKEND_FAILED;
+ }
+ if (CColorConv3D_Get3DColorTable(buf, ctx->lutfname)) {
+ ERROR("Unable to open LUT file '%s'\n", ctx->lutfname);
+ return CUPS_BACKEND_CANCEL;
+ }
+ CColorConv3D_Load3DColorTable(&ctx->lut, buf);
+ free(buf);
+ CColorConv3D_DoColorConv(&ctx->lut, spoolbuf, ctx->cols, ctx->rows, ctx->cols * 3, 1);
+ // XXX proprietary lib also does gamma+contrast+brightness
+ }
+
+ /* Load in the CPC file, if needed! */
+ if (ctx->cpcfname && ctx->cpcfname != ctx->last_cpcfname) {
+ ctx->last_cpcfname = ctx->cpcfname;
+ if (load_CPCData(&ctx->cpcdata, ctx->cpcfname)) {
+ ERROR("Unable to load CPC file '%s'\n", ctx->cpcfname);
+ return CUPS_BACKEND_CANCEL;
+ }
+ }
+
+ // XXX INSERT ALGORITHM HERE...
+
+ // XXX optionally CreateInkCorrectGammaTable(...)
+
+ /* Convert to YMC using corrtables (aka CImageEffect70::DoGamma) */
+ {
+ uint32_t r, c;
+ uint32_t in = 0, out = 0;
+
+ uint16_t *offset_y = (uint16_t*)(ctx->databuf + ctx->datalen);
+ uint16_t *offset_m = offset_y + planelen/2;
+ uint16_t *offset_c = offset_m + planelen/2;
+// uint16_t *offset_l = offset_c + planelen/2;
+
+ DEBUG("Running print data through BGR->YMC table (crude)\n");
+ for(r = 0 ; r < ctx->rows; r++) {
+ for (c = 0 ; c < ctx->cols ; c++) {
+ offset_y[out] = cpu_to_be16(ctx->cpcdata.GNMby[spoolbuf[in]]);
+ offset_m[out] = cpu_to_be16(ctx->cpcdata.GNMgm[spoolbuf[in + 1]]);
+ offset_c[out] = cpu_to_be16(ctx->cpcdata.GNMrc[spoolbuf[in + 2]]);
+ in += 3;
+ out++;
+ }
+ }
+ }
+ // XXX then call CImageEffect70::DoConv(...) to do the final corrections..
+
+ /* Move up the pointer */
+ ctx->datalen += 3*planelen;
+
+ /* Clean up */
+ free(spoolbuf);
+
+ /* Now that we've filled everything in, read latte from file */
+ if (ctx->matte) {
+ int fd;
+ DEBUG("Reading %d bytes of matte data from disk\n", ctx->matte);
+ fd = open(ctx->laminatefname, O_RDONLY);
+ if (fd < 0) {
+ ERROR("Unable to open matte lamination data file '%s'\n", ctx->laminatefname);
+ return CUPS_BACKEND_CANCEL;
+ }
+ remain = ctx->matte;
+ while (remain) {
+ i = read(fd, ctx->databuf + ctx->datalen, remain);
+ if (i == 0) {
+ /* We hit EOF, restart from beginning */
+ lseek(fd, 0, SEEK_SET);
+ continue;
+ }
+ if (i < 0)
+ return CUPS_BACKEND_CANCEL;
+ ctx->datalen += i;
+ remain -= i;
+ }
+ }
}
#endif
-
return CUPS_BACKEND_OK;
}
@@ -831,7 +878,6 @@ static int mitsu70x_get_jobstatus(struct mitsu70x_ctx *ctx, struct mitsu70x_jobs
return 0;
}
-#ifdef BROKEN_ON_EK305 // XXX broken on EK305
static int mitsu70x_get_jobs(struct mitsu70x_ctx *ctx, struct mitsu70x_jobs *resp)
{
uint8_t cmdbuf[CMDBUF_LEN];
@@ -864,7 +910,6 @@ static int mitsu70x_get_jobs(struct mitsu70x_ctx *ctx, struct mitsu70x_jobs *res
return 0;
}
-#endif
static int mitsu70x_get_memorystatus(struct mitsu70x_ctx *ctx, struct mitsu70x_memorystatus_resp *resp)
{
@@ -952,7 +997,7 @@ static int mitsu70x_cancel_job(struct mitsu70x_ctx *ctx, uint16_t jobid)
cmdbuf[0] = 0x1b;
cmdbuf[1] = 0x44;
cmdbuf[2] = (jobid >> 8) & 0xff;
- cmdbuf[3] = jobid & 0xffl;
+ cmdbuf[3] = jobid & 0xff;
if ((ret = send_data(ctx->dev, ctx->endp_down,
cmdbuf, 4)))
return ret;
@@ -979,13 +1024,31 @@ static int mitsu70x_set_sleeptime(struct mitsu70x_ctx *ctx, uint8_t time)
return 0;
}
-static int mitsu70x_main_loop(void *vctx, int copies) {
+static int mitsu70x_wakeup(struct mitsu70x_ctx *ctx)
+{
+ int ret;
+ uint8_t buf[512];
+
+ memset(buf, 0, sizeof(buf));
+ buf[0] = 0x1b;
+ buf[1] = 0x45;
+ buf[2] = 0x57;
+ buf[3] = 0x55;
+
+ INFO("Waking up printer...\n");
+ if ((ret = send_data(ctx->dev, ctx->endp_down,
+ buf, sizeof(buf))))
+ return CUPS_BACKEND_FAILED;
+
+ return 0;
+}
+
+static int mitsu70x_main_loop(void *vctx, int copies)
+{
struct mitsu70x_ctx *ctx = vctx;
struct mitsu70x_jobstatus jobstatus;
struct mitsu70x_printerstatus_resp resp;
-#ifdef BROKEN_ON_EK305
struct mitsu70x_jobs jobs;
-#endif
struct mitsu70x_hdr *hdr;
int ret;
@@ -1005,18 +1068,10 @@ top:
/* Make sure we're awake! */
if (jobstatus.power) {
- uint8_t buf[512];
-
- memset(buf, 0, sizeof(buf));
- buf[0] = 0x1b;
- buf[1] = 0x45;
- buf[2] = 0x57;
- buf[3] = 0x55;
-
- INFO("Waking up printer...\n");
- if ((ret = send_data(ctx->dev, ctx->endp_down,
- buf, sizeof(buf))))
+ ret = mitsu70x_wakeup(ctx);
+ if (ret)
return CUPS_BACKEND_FAILED;
+
sleep(1);
goto top;
}
@@ -1093,19 +1148,21 @@ skip_status:
}
}
-#ifdef BROKEN_ON_EK305 // XXX broken on K305, at least.
/* Make sure we don't have any jobid collisions */
- ret = mitsu70x_get_jobs(ctx, &jobs);
- if (ret)
- return CUPS_BACKEND_FAILED;
-
- while (ctx->jobid == be16_to_cpu(jobs.jobid_0) ||
- ctx->jobid == be16_to_cpu(jobs.jobid_1)) {
- ctx->jobid++;
- if (!ctx->jobid)
+ if (ctx->supports_jobs_query) {
+ ret = mitsu70x_get_jobs(ctx, &jobs);
+ if (ret)
+ return CUPS_BACKEND_FAILED;
+ while (ctx->jobid == be16_to_cpu(jobs.jobid_0) ||
+ ctx->jobid == be16_to_cpu(jobs.jobid_1)) {
+ ctx->jobid++;
+ if (!ctx->jobid)
+ ctx->jobid++;
+ }
+ } else {
+ while(!ctx->jobid || ctx->jobid == be16_to_cpu(jobstatus.jobid))
ctx->jobid++;
}
-#endif
/* Set jobid */
hdr->jobid = cpu_to_be16(ctx->jobid);
@@ -1287,6 +1344,7 @@ static void mitsu70x_dump_printerstatus(struct mitsu70x_printerstatus_resp *resp
INFO("Lower Prints remaining: %03d/%03d\n",
be16_to_cpu(resp->lower.remain),
be16_to_cpu(resp->lower.capacity));
+// INFO("Lower Lifetime prints: %d\n", be16_to_cpu(resp->lower.prints));
if (resp->upper.mecha_status[0] != MECHA_STATUS_INIT) {
INFO("Upper Mechanical Status: %s\n",
@@ -1310,26 +1368,45 @@ static void mitsu70x_dump_printerstatus(struct mitsu70x_printerstatus_resp *resp
static int mitsu70x_query_status(struct mitsu70x_ctx *ctx)
{
struct mitsu70x_printerstatus_resp resp;
-#ifdef BROKEN_ON_EK305
struct mitsu70x_jobs jobs;
-#endif
+ struct mitsu70x_jobstatus jobstatus;
+
int ret;
+top:
+ ret = mitsu70x_get_jobstatus(ctx, &jobstatus, 0x0000);
+ if (ret)
+ goto done;
+
+ /* Make sure we're awake! */
+ if (jobstatus.power) {
+ ret = mitsu70x_wakeup(ctx);
+ if (ret)
+ return CUPS_BACKEND_FAILED;
+
+ sleep(1);
+ goto top;
+ }
+
ret = mitsu70x_get_printerstatus(ctx, &resp);
if (!ret)
mitsu70x_dump_printerstatus(&resp);
-#ifdef BROKEN_ON_EK305 // XXX broken on EK305, at least
- ret = mitsu70x_get_jobs(ctx, &jobs);
- if (!ret) {
- INFO("JOB0 ID : %06u\n", jobs.jobid_0);
- INFO("JOB0 status : %s\n", mitsu70x_jobstatuses(jobs.job0_status));
- INFO("JOB1 ID : %06u\n", jobs.jobid_1);
- INFO("JOB1 status : %s\n", mitsu70x_jobstatuses(jobs.job1_status));
- // XXX are there more?
+ if (ctx->supports_jobs_query) {
+ ret = mitsu70x_get_jobs(ctx, &jobs);
+ if (!ret) {
+ INFO("JOB0 ID : %06u\n", jobs.jobid_0);
+ INFO("JOB0 status : %s\n", mitsu70x_jobstatuses(jobs.job0_status));
+ INFO("JOB1 ID : %06u\n", jobs.jobid_1);
+ INFO("JOB1 status : %s\n", mitsu70x_jobstatuses(jobs.job1_status));
+ // XXX are there more?
+ }
+ } else {
+ INFO("JOB0 ID : %06u\n", jobstatus.jobid);
+ INFO("JOB0 status : %s\n", mitsu70x_jobstatuses(jobstatus.job_status));
}
-#endif
+done:
return ret;
}
@@ -1399,7 +1476,7 @@ static int mitsu70x_cmdline_arg(void *vctx, int argc, char **argv)
/* Exported */
struct dyesub_backend mitsu70x_backend = {
.name = "Mitsubishi CP-D70/D707/K60/D80",
- .version = "0.41WIP",
+ .version = "0.43WIP",
.uri_prefix = "mitsu70x",
.cmdline_usage = mitsu70x_cmdline,
.cmdline_arg = mitsu70x_cmdline_arg,
diff --git a/src/cups/backend_mitsu9550.c b/src/cups/backend_mitsu9550.c
index d257227..862f5f0 100644
--- a/src/cups/backend_mitsu9550.c
+++ b/src/cups/backend_mitsu9550.c
@@ -66,7 +66,7 @@ struct mitsu9550_ctx {
/* Spool file structures */
struct mitsu9550_hdr1 {
uint8_t cmd[4]; /* 1b 57 20 2e */
- uint8_t unk[10];
+ uint8_t unk[10];
uint16_t cols; /* BE */
uint16_t rows; /* BE */
uint8_t null[32];
@@ -74,25 +74,25 @@ struct mitsu9550_hdr1 {
struct mitsu9550_hdr2 {
uint8_t cmd[4]; /* 1b 57 21 2e */
- uint8_t unk[24];
- uint16_t copies; /* BE, 1-580 */
+ uint8_t unk[24]; /* 00 80 00 22 08 03 00 [...] */
+ uint16_t copies; /* BE, 1-680 */
uint8_t null[2];
uint8_t cut; /* 00 == normal, 83 == 2x6*2 */
uint8_t unkb[5];
uint8_t mode; /* 00 == normal, 80 == fine */
- uint8_t unkc[11];
+ uint8_t unkc[11]; /* 00 [...] 00 01 */
} __attribute__((packed));
struct mitsu9550_hdr3 {
uint8_t cmd[4]; /* 1b 57 22 2e */
- uint8_t unk[7];
+ uint8_t unk[7]; /* 00 40 00 [...] */
uint8_t mode2; /* 00 == normal, 01 == finedeep */
- uint8_t unkb[38];
+ uint8_t null[38];
} __attribute__((packed));
struct mitsu9550_hdr4 {
uint8_t cmd[4]; /* 1b 57 26 2e */
- uint8_t unk[46];
+ uint8_t unk[46]; /* 00 70 00 00 00 00 00 00 01 01 00 [...] */
} __attribute__((packed));
struct mitsu9550_plane {
@@ -124,7 +124,7 @@ struct mitsu9550_status {
uint8_t null[4];
uint8_t sts1; // MM
uint8_t nullb[1];
- uint16_t copies; // NN
+ uint16_t copies; // BE, NN
uint8_t nullc[6];
uint8_t sts3; // QQ
uint8_t sts4; // RR
@@ -347,19 +347,19 @@ static int mitsu9550_get_status(struct mitsu9550_ctx *ctx, uint8_t *resp, int st
static char *mitsu9550_media_types(uint8_t type)
{
- switch (type) {
+ switch (type & 0xf) { /* values can be 0x0? or 0x4? */
case 0x01:
- return "3.5x5";
+ return "CK9035 (3.5x5)";
case 0x02:
- return "4x6";
+ return "CK9046 (4x6)";
case 0x03:
- return "PC";
+ return "CK9046PST (4x6)";
case 0x04:
- return "5x7";
+ return "CK9057 (5x7)";
case 0x05:
- return "6x9";
+ return "CK9069 (6x9)";
case 0x06:
- return "V";
+ return "CK9068 (6x8)";
default:
return "Unknown";
}
@@ -373,7 +373,7 @@ static int validate_media(int type, int cols, int rows) {
return 1;
break;
case 0x02: /* 4x6 */
- case 0x03: /* PC ??? */
+ case 0x03: /* 4x6 postcard */
if (cols != 2152)
return 1;
if (rows != 1416 && rows != 1184 &&
@@ -389,11 +389,15 @@ static int validate_media(int type, int cols, int rows) {
case 0x05: /* 6x9 */
if (cols != 2152)
return 1;
- if (rows != 1416 && rows != 2972 &&
+ if (rows != 1416 && rows != 2792 &&
rows != 2956 && rows != 3146)
return 1;
break;
- case 0x06: /* V */
+ case 0x06: /* V (6x8??) */
+ if (cols != 2152)
+ return 1;
+ if (rows != 1416 && rows != 2792)
+ return 1;
break;
default: /* Unknown */
break;
@@ -781,7 +785,7 @@ static int mitsu9550_cmdline_arg(void *vctx, int argc, char **argv)
/* Exported */
struct dyesub_backend mitsu9550_backend = {
.name = "Mitsubishi CP-9550DW-S",
- .version = "0.16",
+ .version = "0.17",
.uri_prefix = "mitsu9550",
.cmdline_usage = mitsu9550_cmdline,
.cmdline_arg = mitsu9550_cmdline_arg,
diff --git a/src/cups/commandtocanon.c b/src/cups/commandtocanon.c
index b7b7ef2..13d96d7 100644
--- a/src/cups/commandtocanon.c
+++ b/src/cups/commandtocanon.c
@@ -15,6 +15,7 @@
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
+#include <strings.h>
/*
diff --git a/src/cups/commandtoepson.c b/src/cups/commandtoepson.c
index 7706a04..0582df2 100644
--- a/src/cups/commandtoepson.c
+++ b/src/cups/commandtoepson.c
@@ -31,6 +31,7 @@
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <strings.h>
/*
* Macros...
diff --git a/src/cups/genppd.c b/src/cups/genppd.c
index 53b970d..0c8830d 100644
--- a/src/cups/genppd.c
+++ b/src/cups/genppd.c
@@ -55,6 +55,7 @@
#include <ctype.h>
#include <errno.h>
#include <libgen.h>
+#include <strings.h>
#if defined(HAVE_VARARGS_H) && !defined(HAVE_STDARG_H)
#include <varargs.h>
#else
@@ -224,13 +225,6 @@ static int write_ppd(gpFile fp, const stp_printer_t *p,
* 'main()' - Process files on the command-line...
*/
-const char slang_c[] = "LANG=C";
-const char slcall_c[] = "LC_ALL=C";
-const char slcnumeric_c[] = "LC_NUMERIC=C";
-char lang_c[sizeof(slang_c) + 1];
-char lcall_c[sizeof(slcall_c) + 1];
-char lcnumeric_c[sizeof(slcnumeric_c) + 1];
-
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
@@ -239,12 +233,9 @@ main(int argc, /* I - Number of command-line arguments */
* Force POSIX locale, since stp_init incorrectly calls setlocale...
*/
- strcpy(lang_c, slang_c);
- strcpy(lcall_c, slcall_c);
- strcpy(lcnumeric_c, slcnumeric_c);
- putenv(lang_c);
- putenv(lcall_c);
- putenv(lcnumeric_c);
+ (void) setenv("LANG", "C", 1);
+ (void) setenv("LC_ALL", "C", 1);
+ (void) setenv("LC_NUMERIC", "C", 1);
/*
* Initialise libgutenprint
@@ -2431,33 +2422,6 @@ write_ppd(
}
stp_parameter_description_destroy(&desc);
- /* Constraints */
- stp_describe_parameter(v, "PPDUIConstraints", &desc);
- if (desc.is_active && desc.p_type == STP_PARAMETER_TYPE_STRING_LIST)
- {
- num_opts = stp_string_list_count(desc.bounds.str);
- if (num_opts > 0)
- {
- gpputs(fp, "*% ===== Constraints ===== \n");
- for (i = 0; i < num_opts; i++)
- {
- char *opt1, *opt2;
- opt = stp_string_list_param(desc.bounds.str, i);
- opt1 = stp_strdup(opt->text);
- opt2 = strrchr(opt1, '*');
- if (opt2)
- {
- opt2[-1] = 0;
- gpprintf(fp, "*%s: %s %s\n", opt->name, opt1, opt2);
- gpprintf(fp, "*%s: %s %s\n", opt->name, opt2, opt1);
- }
- stp_free(opt1);
- }
- gpputs(fp, "\n");
- }
- }
- stp_parameter_description_destroy(&desc);
-
if (!language)
{
/*
diff --git a/src/cups/i18n.c b/src/cups/i18n.c
index afe59a3..7c3351b 100644
--- a/src/cups/i18n.c
+++ b/src/cups/i18n.c
@@ -39,6 +39,7 @@
#include <unistd.h>
#include <errno.h>
#include <iconv.h>
+#include <strings.h>
/*
diff --git a/src/cups/rastertoprinter.c b/src/cups/rastertoprinter.c
index 1a89bc5..e68c90d 100644
--- a/src/cups/rastertoprinter.c
+++ b/src/cups/rastertoprinter.c
@@ -51,6 +51,8 @@
#include <fcntl.h>
#include <errno.h>
#include <sys/times.h>
+#include <strings.h>
+#include <sys/time.h>
#ifdef HAVE_LIMITS_H
#include <limits.h>
#endif
@@ -1092,7 +1094,6 @@ main(int argc, /* I - Number of command-line arguments */
struct tms tms;
long clocks_per_sec;
struct timeval t1, t2;
- struct timezone tz;
char *page_size_name = NULL;
int aborted = 0;
#ifdef ENABLE_CUPS_LOAD_SAVE_OPTIONS
@@ -1120,7 +1121,7 @@ main(int argc, /* I - Number of command-line arguments */
theImage.rep = &cups;
- (void) gettimeofday(&t1, &tz);
+ (void) gettimeofday(&t1, NULL);
stp_init();
version_id = stp_get_version();
default_settings = stp_vars_create();
@@ -1402,7 +1403,7 @@ main(int argc, /* I - Number of command-line arguments */
}
cupsRasterClose(cups.ras);
(void) times(&tms);
- (void) gettimeofday(&t2, &tz);
+ (void) gettimeofday(&t2, NULL);
clocks_per_sec = sysconf(_SC_CLK_TCK);
fprintf(stderr, "DEBUG: Gutenprint: stats %.0fB, %.3fu, %.3fs, %.3fel\n",
total_bytes_printed,
diff --git a/src/cups/test-rastertogutenprint.in b/src/cups/test-rastertogutenprint.in
index 0574704..a8bb6d8 100755
--- a/src/cups/test-rastertogutenprint.in
+++ b/src/cups/test-rastertogutenprint.in
@@ -33,6 +33,12 @@ npages=3
enable_static='@ENABLE_STATIC@'
enable_shared='@ENABLE_SHARED@'
+if [ -r "$sdir/../../src/cups/gutenprint-users-manual.pdf" ] ; then
+ testfile="$sdir/../../src/cups/gutenprint-users-manual.pdf"
+else
+ testfile="$sdir/../../doc/gutenprint-users-manual.pdf"
+fi
+
usage() {
echo "Usage: test-rastertogutenprint [-s] [-v|--valgrind]"
exit 0;
@@ -113,12 +119,12 @@ if [ -n "$postscript" ] ; then
if [ -n "$pdftops" -a ! -x "$cupsdir/cgpdftoraster" ] ; then
tfile=`mktemp`
trap cleanup 1 2 3 6 14 15 30
- "$pdftops" -f 24 -l `expr 24 + $npages - 1` "$sdir/../../doc/gutenprint-users-manual.pdf" $tfile
+ "$pdftops" -f 24 -l `expr 24 + $npages - 1` "$testfile" $tfile
fi
else
tfile=`mktemp`
trap cleanup 1 2 3 6 14 15 30
- "$pdfjam" -q "$sdir/../../doc/gutenprint-users-manual.pdf" "$pages" -o $tfile
+ "$pdfjam" -q "$testfile" "$pages" -o $tfile
fi
if [ -z "$verbose" ] ; then
@@ -250,15 +256,15 @@ if [ -d ppd/C ] ; then
PPD=$f
export PPD
if [ -x "$cupsdir/cgpdftoraster" ] ; then
- output="`($cupsdir/cgpdftoraster 1 1 1 1 $pages < $sdir/../../doc/gutenprint-users-manual.pdf 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
+ output="`($cupsdir/cgpdftoraster 1 1 1 1 $pages < "$testfile" 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
elif [ -f "$tfile" -a -x "$cupsdir/gstoraster" ] ; then
- output="`($cupsdir/gstoraster 1 1 1 1 \"$cupsargs\" < $tfile 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
+ output="`($cupsdir/gstoraster 1 1 1 1 \"$cupsargs\" < "$testfile" 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
elif [ -f "$tfile" ] ; then
- output="`($cupsdir/pstops 1 1 1 1 \"$cupsargs\" < $tfile 2>/dev/null | $cupsdir/pstoraster 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
+ output="`($cupsdir/pstops 1 1 1 1 \"$cupsargs\" < "$testfile" 2>/dev/null | $cupsdir/pstoraster 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
elif [ -x "$cupsdir/pstoraster" ] ; then
- output="`($cupsdir/pdftops 1 1 1 1 \"$pages$cupsargs\" < $sdir/../../doc/gutenprint-users-manual.pdf 2>/dev/null | $cupsdir/pstops 1 1 1 1 \"$pages$cupsargs\" 2>/dev/null | $cupsdir/pstoraster 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
+ output="`($cupsdir/pdftops 1 1 1 1 \"$pages$cupsargs\" < "$testfile" 2>/dev/null | $cupsdir/pstops 1 1 1 1 \"$pages$cupsargs\" 2>/dev/null | $cupsdir/pstoraster 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
elif [ -x "$cupsdir/gstoraster" ] ; then
- output="`($cupsdir/pdftops 1 1 1 1 \"$pages$cupsargs\" < $sdir/../../doc/gutenprint-users-manual.pdf 2>/dev/null | $cupsdir/gstoraster 1 1 1 1 \"$pages$cupsargs\" 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
+ output="`($cupsdir/pdftops 1 1 1 1 \"$pages$cupsargs\" < "$testfile" 2>/dev/null | $cupsdir/gstoraster 1 1 1 1 \"$pages$cupsargs\" 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2 `"
else
output="`($cupsdir/imagetoraster 1 1 1 1 \"$pages$cupsargs\" < calibrate.ppm 2>/dev/null | run_rastertogp | do_output) 2>&1 3>&2`"
fi
diff --git a/src/escputil/Makefile.in b/src/escputil/Makefile.in
index da27b47..838b6c6 100644
--- a/src/escputil/Makefile.in
+++ b/src/escputil/Makefile.in
@@ -185,6 +185,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/escputil/d4lib.c b/src/escputil/d4lib.c
index 5c99409..aef85be 100644
--- a/src/escputil/d4lib.c
+++ b/src/escputil/d4lib.c
@@ -47,6 +47,7 @@
#include <errno.h>
#include <string.h>
#include <ctype.h>
+#include <time.h>
#include "d4lib.h"
@@ -183,6 +184,14 @@ static errorMessage_t errorMessage[] =
sig = signal(SIGALRM, sigAlarm); \
}
+static int d4USleep(long usec)
+{
+ struct timespec t;
+ t.tv_sec = 0;
+ t.tv_nsec = 1000l * usec;
+ return nanosleep(&t, NULL);
+}
+
/*******************************************************************/
/* Function printHexValues */
/* */
@@ -275,7 +284,7 @@ int SafeWrite(int fd, const void *data, int len)
{
status = write(fd, data, len);
if(status < len)
- usleep(d4WrTimeout);
+ d4USleep(d4WrTimeout);
retries--;
}
while ((status < len) && (retries > 0));
@@ -405,7 +414,7 @@ static int writeCmd(int fd, unsigned char *cmd, int len)
/* according to Glen Steward, this will solve problems */
/* for the cartridge exchange with the Stylus Color 580 */
- usleep(d4MicroTimeout);
+ d4USleep(d4MicroTimeout);
timeoutGot = 0;
errno = 0;
@@ -464,7 +473,7 @@ int readAnswer(int fd, unsigned char *buf, int len, int allowExtra)
int first_read = 1;
int excess = 0;
/* wait a little bit before reading an answer */
- usleep(d4RdTimeout);
+ d4USleep(d4RdTimeout);
/* for error handling in case of timeout */
timeoutGot = 0;
@@ -542,7 +551,7 @@ int readAnswer(int fd, unsigned char *buf, int len, int allowExtra)
}
}
}
- usleep(d4RdTimeout);
+ d4USleep(d4RdTimeout);
}
if (debugD4)
printf("\n");
@@ -563,7 +572,7 @@ int readAnswer(int fd, unsigned char *buf, int len, int allowExtra)
else
retry_count = 0;
if (status < bytes)
- usleep(d4RdTimeout);
+ d4USleep(d4RdTimeout);
if (debugD4)
printHexValues("waste", (const unsigned char *) wastebuf, status);
excess -= status;
@@ -600,7 +609,7 @@ static void _flushData(int fd)
char buf[1024];
int len = 1023;
int count = 200;
- usleep(d4RdTimeout);
+ d4USleep(d4RdTimeout);
/* for error handling in case of timeout */
timeoutGot = 0;
@@ -613,7 +622,7 @@ static void _flushData(int fd)
printf("+++flush data: length: %i\n", len);
do
{
- usleep(d4RdTimeout);
+ d4USleep(d4RdTimeout);
SET_TIMER(ti,oti, d4RdTimeout);
rd = read(fd, buf, len);
if (debugD4)
@@ -1144,7 +1153,7 @@ int askForCredit(int fd, unsigned char socketID, int *sndSize, int *rcvSize)
while (credit == 0 && retries-- >= 0 )
{
while((credit=CreditRequest(fd,socketID)) == 0 && count < MAX_CREDIT_REQUEST && retries-- >= 0)
- usleep(d4RdTimeout);
+ d4USleep(d4RdTimeout);
if ( credit == -1 )
{
@@ -1281,7 +1290,7 @@ int readData(int fd, unsigned char socketID, unsigned char *buf, int len)
if ( Credit(fd, socketID, 1) == 1 )
{
/* wait a little bit */
- usleep(d4RdDataTimeout);
+ d4USleep(d4RdDataTimeout);
ret = _readData(fd, buf, len);
return ret;
}
@@ -1332,7 +1341,7 @@ int writeAndReadData(int fd, unsigned char socketID,
/* wait a little bit */
do
{
- usleep(d4RdDataTimeout);
+ d4USleep(d4RdDataTimeout);
ret = _readData(fd, buf, len);
if (ret < 0)
return ret;
@@ -1366,7 +1375,7 @@ void flushData(int fd, unsigned char socketID)
if ( Credit(fd, socketID, 1) == 1 )
{
/* wait a little bit */
- usleep(d4RdDataTimeout);
+ d4USleep(d4RdDataTimeout);
_flushData(fd);
}
}
diff --git a/src/escputil/escputil.c b/src/escputil/escputil.c
index 8f4ae9e..76c5fc8 100644
--- a/src/escputil/escputil.c
+++ b/src/escputil/escputil.c
@@ -31,6 +31,7 @@
#include <signal.h>
#include <sys/wait.h>
#include <ctype.h>
+#include <time.h>
#if defined(HAVE_VARARGS_H) && !defined(HAVE_STDARG_H)
#include <varargs.h>
#else
@@ -577,7 +578,8 @@ read_from_printer(int fd, char *buf, int bufsize, int quiet)
status = read(fd, buf, bufsize - 1);
if (status == 0 || (status < 0 && errno == EAGAIN))
{
- usleep(2000);
+ struct timespec tm = {0, 2000000};
+ nanosleep(&tm, &tm);
status = 0; /* not an error (read would have blocked) */
}
}
diff --git a/src/gimp2/Makefile.in b/src/gimp2/Makefile.in
index e91ae1d..e0bf142 100644
--- a/src/gimp2/Makefile.in
+++ b/src/gimp2/Makefile.in
@@ -190,6 +190,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/gutenprintui2/Makefile.in b/src/gutenprintui2/Makefile.in
index 50b86f8..453273a 100644
--- a/src/gutenprintui2/Makefile.in
+++ b/src/gutenprintui2/Makefile.in
@@ -246,6 +246,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/gutenprintui2/plist.c b/src/gutenprintui2/plist.c
index 577d549..bbc4eed 100644
--- a/src/gutenprintui2/plist.c
+++ b/src/gutenprintui2/plist.c
@@ -32,8 +32,10 @@
#include <ctype.h>
#include <stdio.h>
#include <string.h>
+#include <strings.h>
#include <errno.h>
#include <locale.h>
+#include <stdlib.h>
#include <sys/types.h>
#include <signal.h>
diff --git a/src/main/Makefile.in b/src/main/Makefile.in
index 47a0c41..1e89eb9 100644
--- a/src/main/Makefile.in
+++ b/src/main/Makefile.in
@@ -340,6 +340,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/main/canon-media-mode.h b/src/main/canon-media-mode.h
index da2f9e3..b2b088e 100644
--- a/src/main/canon-media-mode.h
+++ b/src/main/canon-media-mode.h
@@ -186,6 +186,7 @@ DECLARE_MODEUSES(canon_BJC_240);
/* ----------------------------------- Canon BJC 2000 ----------------------------------- */
/* TODO: mode-media correlation */
+/*
static const char* canon_BJC_2000_modeuses_plain[] = {
"360x360dpi",
"180x180dpi",
@@ -208,6 +209,58 @@ static const canon_modeuse_t canon_BJC_2000_modeuses[] = {
};
DECLARE_MODEUSES(canon_BJC_2000);
+*/
+
+/* ----------------------------------- Canon BJC 2100 ----------------------------------- */
+
+static const char* canon_BJC_2100_modeuses_plain[] = {
+ "360x360dmt_high",
+ "360x360dpi_high",
+ "360x360dpi",
+ "720x360dpi",
+ "360x360dpi_draft",
+ "180x180dpi",
+ /* Photo */
+ "360x360dmt_photo",
+ NULL
+};
+
+static const char* canon_BJC_2100_modeuses_PPgloss[] = {
+ "360x360dmt_high",
+ "360x360dpi_high",
+ "360x360dpi",
+ /* Photo */
+ "360x360dmt_photo",
+ NULL
+};
+
+static const char* canon_BJC_2100_modeuses_coated[] = {
+ "360x360dmt_high",
+ "360x360dpi_high",
+ "360x360dpi",
+ "720x360dpi",
+ "360x360dpi_draft",
+ /* Photo */
+ "360x360dmt_photo",
+ NULL
+};
+
+static const canon_modeuse_t canon_BJC_2100_modeuses[] = {
+ { "Plain", canon_BJC_2100_modeuses_plain, INKSET_BLACK_SUPPORT | INKSET_PHOTO_SUPPORT | INKSET_PHOTO_MODEREPL },
+ { "Transparency", canon_BJC_2100_modeuses_PPgloss, INKSET_BLACK_SUPPORT },
+ { "BackPrint", canon_BJC_2100_modeuses_PPgloss, INKSET_BLACK_SUPPORT },
+ { "Fabric", canon_BJC_2100_modeuses_PPgloss, INKSET_BLACK_SUPPORT },
+ { "Envelope", canon_BJC_2100_modeuses_plain, INKSET_BLACK_SUPPORT | INKSET_PHOTO_SUPPORT | INKSET_PHOTO_MODEREPL },
+ { "Coated", canon_BJC_2100_modeuses_coated, INKSET_BLACK_SUPPORT | INKSET_PHOTO_SUPPORT | INKSET_PHOTO_MODEREPL },
+ { "TShirt", canon_BJC_2100_modeuses_PPgloss, INKSET_BLACK_SUPPORT },
+ { "GlossyFilm", canon_BJC_2100_modeuses_PPgloss, INKSET_BLACK_SUPPORT },
+ { "GlossyPaper", canon_BJC_2100_modeuses_PPgloss, INKSET_BLACK_SUPPORT | INKSET_PHOTO_SUPPORT | INKSET_PHOTO_MODEREPL },
+ { "GlossyCard", canon_BJC_2100_modeuses_PPgloss, INKSET_BLACK_SUPPORT | INKSET_PHOTO_SUPPORT | INKSET_PHOTO_MODEREPL },
+ { "GlossyPro", canon_BJC_2100_modeuses_PPgloss, INKSET_BLACK_SUPPORT | INKSET_PHOTO_SUPPORT | INKSET_PHOTO_MODEREPL },/*untested*/
+ { "Other", canon_BJC_2100_modeuses_plain, INKSET_BLACK_SUPPORT | INKSET_PHOTO_SUPPORT | INKSET_PHOTO_MODEREPL },
+};
+
+DECLARE_MODEUSES(canon_BJC_2100);
/* ----------------------------------- Canon BJC 3000 ----------------------------------- */
diff --git a/src/main/canon-media.h b/src/main/canon-media.h
index 2b37391..62c641e 100644
--- a/src/main/canon-media.h
+++ b/src/main/canon-media.h
@@ -311,6 +311,23 @@ static const canon_paper_t canon_default_papers[] = { /*
};
DECLARE_PAPERS(canon_default);
+static const canon_paper_t canon_BJC_2100_papers[] = {
+ /* Name Text (c (l (P (w Density k_upper lum_adj */
+ { "Plain", N_ ("Plain Paper"), 0x00,0x00,0x00,0x00,0.50, 0.25, 0.500, 0, 0, 0 },
+ { "Transparency", N_ ("Transparencies"), 0x02,0x02,0x00,0x00,1.00, 1.00, 0.900, 0, 0, 0 },
+ { "BackPrint", N_ ("Back Print Film"), 0x03,0x03,0x00,0x00,1.00, 1.00, 0.900, 0, 0, 0 },
+ { "Fabric", N_ ("Fabric Sheets"), 0x04,0x05,0x00,0x00,0.50, 0.25, 0.500, 0, 0, 0 },
+ { "Envelope", N_ ("Envelope"), 0x08,0x08,0x00,0x00,0.50, 0.25, 0.500, 0, 0, 0 },
+ { "Coated", N_ ("High Resolution Paper"), 0x07,0x0b,0x00,0x00,0.78, 0.25, 0.500, 0, 0, 0 },
+ { "TShirt", N_ ("T-Shirt Transfers"), 0x03,0x03,0x00,0x00,0.50, 0.25, 0.500, 0, 0, 0 },
+ { "GlossyFilm", N_ ("High Gloss Film"), 0x06,0x07,0x00,0x00,1.00, 1.00, 0.999, 0, 0, 0 },
+ { "GlossyPaper", N_ ("Glossy Photo Paper"), 0x05,0x06,0x00,0x00,1.00, 1.00, 0.999, 0, 0, 0 },
+ { "GlossyCard", N_ ("Glossy Photo Cards"), 0x05,0x0c,0x00,0x00,1.00, 1.00, 0.999, 0, 0, 0 },
+ { "GlossyPro", N_ ("Photo Paper Pro"), 0x09,0x09,0x00,0x00,1.00, 1.00, 0.999, 0, 0, 0 },
+ { "Other", N_ ("Other"), 0x01,0x09,0x00,0x00,0.50, 0.25, 0.500, 0, 0, 0 },
+};
+DECLARE_PAPERS(canon_BJC_2100);
+
static const canon_paper_t canon_PIXMA_iP4000_papers[] = {
{ "Plain", N_ ("Plain Paper"), 0x00,0x00,0x00,0x00,1.00, 0.25, 0.500, 0, 0, 0 },
{ "Transparency", N_ ("Transparencies"), 0x02,0x02,0x00,0x00,0.78, 0.25, 0.500, 0, 0, 0 },
diff --git a/src/main/canon-modes.h b/src/main/canon-modes.h
index bb9ed09..41bb12e 100644
--- a/src/main/canon-modes.h
+++ b/src/main/canon-modes.h
@@ -180,12 +180,29 @@ static const canon_mode_t canon_BJC_240_modes[] = {
};
DECLARE_MODES(canon_BJC_240,0);
-
-static const canon_mode_t canon_BJC_2000_modes[] = {
+/* BJC-2000 has same modes as BJC-2100, hence the below are outmoded */
+/*
+ * static const canon_mode_t canon_BJC_2000_modes[] = {
{ 360, 360,CANON_INK_CMYK,"360x360dpi",N_("360x360 DPI"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,2},
{ 180, 180,CANON_INK_CMYK,"180x180dpi",N_("180x180 DPI"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,2},
};
DECLARE_MODES(canon_BJC_2000,0);
+*/
+
+/* these printers only have K and CMYK */
+/* using color (CMYK) cartridge, all media use CMYK */
+/* some modes use ESC (t 0x02 0x80 0x09 which implies bits per ink > 1, but how to know how many? guess 2 bits */
+/* added MODE_FLAG_PHOTO as a means to set ESC (t to 0x02 0x80 0x0a --- no idea if 1 bit or 2 bits here */
+static const canon_mode_t canon_BJC_2100_modes[] = {
+ { 360, 360,CANON_INK_K | CANON_INK_CMYK,"360x360dmt_high",N_("360x360 DMT HIGH (plain/Env/PPgloss/HR/HGF/GPC/TST/BPF/TPY/O)"),INKSET(4_C4M4Y4K4),8,0,NULL,1.0,1.0,NULL,NULL,NULL,1},/* 0x02 0x80 0x9 */
+ { 360, 360,CANON_INK_K | CANON_INK_CMYK,"360x360dpi_high",N_("360x360 DPI (high legacy)"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,2},
+ { 360, 360,CANON_INK_K | CANON_INK_CMYK,"360x360dpi",N_("360x360 DPI (plain ud2/PPgloss std/Env/HR/HGF/GPC/TST/BPF/TPY/O)"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,1},
+ { 720, 360,CANON_INK_K | CANON_INK_CMYK,"720x360dpi",N_("720x360 DPI (plain ud3/Env/HR/O)"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,0},
+ { 360, 360,CANON_INK_K | CANON_INK_CMYK,"360x360dpi_draft",N_("360x360 DPI DRAFT (plain std/Env/HR/O)"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,0},
+ { 180, 180,CANON_INK_K | CANON_INK_CMYK,"180x180dpi",N_("180x180 DPI (plain fast/Env/O)"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,2},
+ { 360, 360,CANON_INK_CMYK,"360x360dmt_photo",N_("360x360 DMT PHOTO CARTRIDGE"),INKSET(4_C4M4Y4K4),8,MODE_FLAG_PHOTO,NULL,1.0,1.0,NULL,NULL,NULL,1},
+};
+DECLARE_MODES(canon_BJC_2100,1);
/* these printers only have CMYK, so CcMmYK is not required I think */
/* using color (CMYK) cartridge, some media use CMYK, others only use CMY --- need to check this as my test image lacked Y apparently */
@@ -207,7 +224,7 @@ DECLARE_MODES(canon_BJC_3000,1);
/* some modes use ESC (t 0x2 0x80 0x9 which implies bits per ink > 1, but how to know how many? */
/* added MODE_FLAG_PHOTO as a means to set ESC (t */
static const canon_mode_t canon_BJC_4300_modes[] = {
- { 760, 360,CANON_INK_K | CANON_INK_CMYK,"720x360dpi",N_("720x360 DPI"),INKSET(4_C4M4Y4K4),8,0,NULL,1.0,1.0,NULL,NULL,NULL,0},
+ { 720, 360,CANON_INK_K | CANON_INK_CMYK,"720x360dpi",N_("720x360 DPI"),INKSET(4_C4M4Y4K4),8,0,NULL,1.0,1.0,NULL,NULL,NULL,0},
{ 360, 360,CANON_INK_K | CANON_INK_CMYK,"360x360dpi_high",N_("360x360 DPI HIGH"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,1},/* different code */
{ 360, 360,CANON_INK_K | CANON_INK_CMYK,"360x360dpi",N_("360x360 DPI"),INKSET(4_C2M2Y2K2),8,0,NULL,1.0,1.0,NULL,NULL,NULL,1},
{ 360, 360,CANON_INK_K | CANON_INK_CMYK,"360x360dmt",N_("360x360 DMT"),INKSET(4_C4M4Y4K4),8,0,NULL,1.0,1.0,NULL,NULL,NULL,1},
diff --git a/src/main/canon-printers.h b/src/main/canon-printers.h
index fae13b9..91bfaac 100644
--- a/src/main/canon-printers.h
+++ b/src/main/canon-printers.h
@@ -631,6 +631,25 @@ static const canon_cap_t canon_model_capabilities[] =
NULL
},
+ { /* Canon BJC 2100 *//* heads: BC-20 (black), BC-21e (color/black), BC-22e (photo) (also IS-22 color scanner cartridge) */
+ /* 720 (hor) x 360 dpi (vert) */
+ "2100", 1,
+ 618, 980, /* 8.58" x 13.61" different per paper size, and banner (max 70") */
+ 10, 10, 9, 20, /* for A4 from user manual */
+ &canon_default_slotlist,
+ CANON_CAP_STD0 | CANON_CAP_a | CANON_CAP_cart,0,
+ 2,0,
+ 0, /* Upper/Lower Cassette option */
+ NULL,/* only SetTime */
+ &canon_BJC_2100_modelist,
+ &canon_BJC_2100_paperlist,
+ &canon_BJC_2100_modeuselist,
+ NULL,
+ NULL,
+ NULL,
+ NULL
+ },
+
{ /* Canon BJC 4300 *//* heads: BC-20 BC-21 BC-22 BC-29 */
"4300", 1,
618, 936, /* 8.58" x 13 " */
@@ -835,13 +854,13 @@ static const canon_cap_t canon_model_capabilities[] =
842, INCH(17),
11, 9, 10, 18, /* unconfirmed */
&canon_default_slotlist,
- CANON_CAP_STD0 | CANON_CAP_a,0,
+ CANON_CAP_STD0 | CANON_CAP_a | CANON_CAP_cart,0,
2,0,
0, /* Upper/Lower Cassette option */
NULL,
- &canon_BJC_2000_modelist,
- &canon_default_paperlist,
- &canon_BJC_2000_modeuselist,
+ &canon_BJC_2100_modelist,
+ &canon_BJC_2100_paperlist,
+ &canon_BJC_2100_modeuselist,
NULL,
NULL,
NULL,
diff --git a/src/main/curve.c b/src/main/curve.c
index 8425c05..9c0795e 100644
--- a/src/main/curve.c
+++ b/src/main/curve.c
@@ -36,6 +36,7 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <strings.h>
#ifdef __GNUC__
#define inline __inline__
diff --git a/src/main/escp2-papers.c b/src/main/escp2-papers.c
index c96d42f..5eebc49 100644
--- a/src/main/escp2-papers.c
+++ b/src/main/escp2-papers.c
@@ -26,6 +26,7 @@
#include <gutenprint/gutenprint.h>
#include "gutenprint-internal.h"
#include <gutenprint/gutenprint-intl-internal.h>
+#include <strings.h>
#include "print-escp2.h"
static stp_mxml_node_t *
diff --git a/src/main/print-canon.c b/src/main/print-canon.c
index 6d27060..3a76c01 100644
--- a/src/main/print-canon.c
+++ b/src/main/print-canon.c
@@ -4942,7 +4942,7 @@ canon_init_setImage(const stp_vars_t *v, const canon_privdata_t *init)
generic condition based on CANON_INK_CMY */
if (init->used_inks == CANON_INK_CMY) arg_74_3= 0x02; /* for BC-06 cartridge!!! */
/* example of better way: for BJC-3000 series */
- if (!strcmp(init->caps->name,"3000") || !strcmp(init->caps->name,"4300")) {
+ if ( !strcmp(init->caps->name,"3000") || !strcmp(init->caps->name,"4300")) {
/* but if photo cartridge selection, set differently again */
if (init->mode->flags & MODE_FLAG_PHOTO)
arg_74_3= 0x0a;
@@ -4953,6 +4953,15 @@ canon_init_setImage(const stp_vars_t *v, const canon_privdata_t *init)
/* other media */
arg_74_3= 0x09; /* return to default after broken code above */
}
+ if ( (!strcmp(init->caps->name,"2000")) || (!strcmp(init->caps->name,"2100")) ) {
+ /* but if photo cartridge selection, set differently again */
+ if (init->mode->flags & MODE_FLAG_PHOTO)
+ arg_74_3= 0x0a;
+ else
+ /* other media */
+ arg_74_3= 0x09; /* return to default after broken code above */
+ }
+
}
/* workaround for the bjc8200 in 6color mode - not really understood */
diff --git a/src/main/print-olympus.c b/src/main/print-olympus.c
index 5af9d28..ad26726 100644
--- a/src/main/print-olympus.c
+++ b/src/main/print-olympus.c
@@ -232,9 +232,12 @@ typedef struct /* printer specific parameters */
const char *adj_yellow;
const laminate_list_t *laminate;
const dyesub_media_list_t *media;
- const dyesub_stringlist_t *uiconstraints;
void (*job_start_func)(stp_vars_t *);
void (*job_end_func)(stp_vars_t *);
+ const stp_parameter_t *parameters;
+ int parameter_count;
+ int (*load_parameters)(const stp_vars_t *, const char *name, stp_parameter_t *);
+ void (*parse_parameters)(stp_vars_t *);
} dyesub_cap_t;
@@ -2279,7 +2282,7 @@ static void kodak_8500_printer_init(stp_vars_t *v)
/* Number of copies */
stp_putc(0x1b, v);
stp_putc(0x4e, v);
- stp_putc(1, v); /* XXX always 1 for now, up to 50 */
+ stp_putc(1, v); /* 1-50 */
dyesub_nputc(v, 0x00, 61);
/* Paper type. Fixed. */
stp_putc(0x1b, v);
@@ -2317,7 +2320,6 @@ static void kodak_8500_printer_init(stp_vars_t *v)
stp_putc(0x47, v);
dyesub_nputc(v, 0x00, 61);
-
/* Data header */
stp_putc(0x1b, v);
stp_putc(0x5a, v);
@@ -2382,7 +2384,7 @@ static void mitsu_cp3020d_printer_init(stp_vars_t *v)
/* Number of copies */
stp_putc(0x1b, v);
stp_putc(0x4e, v);
- stp_putc(1, v); /* XXX always 1 for now, up to 50 */
+ stp_putc(1, v); /* 1-50 */
dyesub_nputc(v, 0x00, 61);
/* Unknown */
stp_putc(0x1b, v);
@@ -2529,7 +2531,7 @@ static const dyesub_pagesize_t mitsu_cp9550_page[] =
DYESUB_LANDSCAPE},
{ "w288h432-div2", "2x6*2", PT(1416,346)+1, PT(2152,346)+1, 0, 0, 0, 0,
DYESUB_LANDSCAPE},
- { "w360h504", "5x7", PT(1812,346)+1, PT(2402,346)+1, 0, 0, 0, 0,
+ { "w360h504", "5x7", PT(1812,346)+1, PT(2452,346)+1, 0, 0, 0, 0,
DYESUB_PORTRAIT},
{ "w432h576", "6x8", PT(2152,346)+1, PT(2792,346)+1, 0, 0, 0, 0,
DYESUB_PORTRAIT},
@@ -2537,6 +2539,8 @@ static const dyesub_pagesize_t mitsu_cp9550_page[] =
DYESUB_PORTRAIT},
{ "w432h648", "6x9", PT(2152,346)+1, PT(3146,346)+1, 0, 0, 0, 0,
DYESUB_PORTRAIT},
+ /* XXX also 3.3x6 and 3.5x6!
+ XXX also 4x6*2, 4.4*6*2, 3x6*3, 2x6*4! (Built on 6x9 media) */
};
LIST(dyesub_pagesize_list_t, mitsu_cp9550_page_list, dyesub_pagesize_t, mitsu_cp9550_page);
@@ -2546,7 +2550,7 @@ static const dyesub_printsize_t mitsu_cp9550_printsize[] =
{ "346x346", "B7", 1240, 1812},
{ "346x346", "w288h432", 1416, 2152},
{ "346x346", "w288h432-div2", 1416, 2152},
- { "346x346", "w360h504", 1812, 2402},
+ { "346x346", "w360h504", 1812, 2452},
{ "346x346", "w432h576", 2152, 2792},
{ "346x346", "w432h612", 2152, 2956},
{ "346x346", "w432h648", 2152, 3146},
@@ -2580,7 +2584,7 @@ static void mitsu_cp9550_printer_init(stp_vars_t *v)
stp_putc(0x08, v);
stp_putc(0x03, v);
dyesub_nputc(v, 0x00, 19);
- stp_putc(0x01, v); /* This is Copies on other models.. */
+ stp_putc(0x01, v); /* Copies */
dyesub_nputc(v, 0x00, 2);
if (strcmp(privdata.pagesize,"w288h432-div2") == 0)
stp_putc(0x83, v);
@@ -2622,6 +2626,101 @@ static void mitsu_cp9550_printer_end(stp_vars_t *v)
stp_putc(0x00, v);
}
+/* Mitsubishi 9600D/DW */
+static const dyesub_resolution_t res_mitsu9600_dpi[] =
+{
+ { "300x300", 300, 300},
+ { "600x600", 600, 600},
+};
+
+LIST(dyesub_resolution_list_t, res_mitsu9600_dpi_list, dyesub_resolution_t, res_mitsu9600_dpi);
+
+static const dyesub_pagesize_t mitsu_cp9600_page[] =
+{
+ { "B7", "3.5x5", PT(1076,300)+1, PT(1572,300)+1, 0, 0, 0, 0,
+ DYESUB_LANDSCAPE},
+ { "w288h432", "4x6", PT(1228,300)+1, PT(1868,300)+1, 0, 0, 0, 0,
+ DYESUB_LANDSCAPE},
+ { "w360h504", "5x7", PT(1572,300)+1, PT(2128,300)+1, 0, 0, 0, 0,
+ DYESUB_PORTRAIT},
+ { "w432h576", "6x8", PT(1868,300)+1, PT(2442,300)+1, 0, 0, 0, 0,
+ DYESUB_PORTRAIT},
+ { "w432h612", "6x8.5", PT(1868,300)+1, PT(2564,300)+1, 0, 0, 0, 0,
+ DYESUB_PORTRAIT},
+ { "w432h648", "6x9", PT(1868,300)+1, PT(2730,300)+1, 0, 0, 0, 0,
+ DYESUB_PORTRAIT},
+};
+
+LIST(dyesub_pagesize_list_t, mitsu_cp9600_page_list, dyesub_pagesize_t, mitsu_cp9600_page);
+
+static const dyesub_printsize_t mitsu_cp9600_printsize[] =
+{
+ { "300x300", "B7", 1076, 1572},
+ { "600x600", "B7", 2152, 3144},
+ { "300x300", "w288h432", 1228, 1868},
+ { "600x600", "w288h432", 2458, 3736},
+ { "300x300", "w360h504", 1572, 2128},
+ { "600x600", "w360h504", 3144, 4256},
+ { "300x300", "w432h576", 1868, 2442},
+ { "600x600", "w432h576", 3736, 4846},
+ { "300x300", "w432h612", 1868, 2564},
+ { "600x600", "w432h612", 3736, 5130},
+ { "300x300", "w432h648", 1868, 2730},
+ { "600x600", "w432h648", 3736, 5462},
+};
+
+LIST(dyesub_printsize_list_t, mitsu_cp9600_printsize_list, dyesub_printsize_t, mitsu_cp9600_printsize);
+
+static void mitsu_cp9600_printer_init(stp_vars_t *v)
+{
+ /* Parameters 1 */
+ stp_putc(0x1b, v);
+ stp_putc(0x57, v);
+ stp_putc(0x21, v);
+ stp_putc(0x2e, v);
+ stp_putc(0x00, v);
+ stp_putc(0x80, v);
+ stp_putc(0x00, v);
+ stp_putc(0x22, v);
+ stp_putc(0x00, v);
+ stp_putc(0x03, v);
+ dyesub_nputc(v, 0x00, 19);
+ stp_putc(0x01, v); /* Copies */
+ dyesub_nputc(v, 0x00, 19);
+ stp_putc(0x01, v);
+ /* Parameters 2 */
+ stp_putc(0x1b, v);
+ stp_putc(0x57, v);
+ stp_putc(0x20, v);
+ stp_putc(0x2e, v);
+ stp_putc(0x00, v);
+ stp_putc(0x0a, v);
+ stp_putc(0x10, v);
+ dyesub_nputc(v, 0x00, 7);
+ stp_put16_be(privdata.w_size, v);
+ stp_put16_be(privdata.h_size, v);
+ dyesub_nputc(v, 0x00, 32);
+ /* Parameters 3 */
+ stp_putc(0x1b, v);
+ stp_putc(0x57, v);
+ stp_putc(0x26, v);
+ stp_putc(0x2e, v);
+ stp_putc(0x00, v);
+ stp_putc(0x60, v);
+ dyesub_nputc(v, 0x00, 6);
+ stp_putc(0x01, v);
+ dyesub_nputc(v, 0x00, 37);
+}
+
+static void mitsu_cp9600_printer_end(stp_vars_t *v)
+{
+ /* Page Footer */
+ stp_putc(0x1b, v);
+ stp_putc(0x50, v);
+ stp_putc(0x48, v);
+ stp_putc(0x00, v);
+}
+
/* Mitsubishi 9810D/DW */
static const dyesub_pagesize_t mitsu_cp9810_page[] =
{
@@ -2805,8 +2904,100 @@ static const laminate_t mitsu_cpd70x_laminate[] =
LIST(laminate_list_t, mitsu_cpd70x_laminate_list, laminate_t, mitsu_cpd70x_laminate);
+/* This list is *not* translated */
+static const dyesub_stringitem_t mitsu70x_uiconstraints[] = {
+ /* PPD generation handles constraint reciprocation */
+ /* Basically, exclude Matte and "Fine" quality */
+ {"UIConstraints", "*StpLaminate Matte *StpPrintSpeed Fine"},
+};
+LIST(dyesub_stringlist_t, mitsu70x_uiconstraints_list, dyesub_stringitem_t, mitsu70x_uiconstraints);
+
+typedef struct
+{
+ const char *quality;
+ int laminate_offset;
+} mitsu70x_privdata_t;
+
+static mitsu70x_privdata_t mitsu70x_privdata;
+
+static const dyesub_stringitem_t mitsu70x_qualities[] =
+{
+ { "Fine", N_ ("Fine") },
+ { "SuperFine", N_ ("Super Fine") },
+ { "UltraFine", N_ ("Ultra Fine") }
+};
+LIST(dyesub_stringlist_t, mitsu70x_quality_list, dyesub_stringitem_t, mitsu70x_qualities);
+
+static const stp_parameter_t mitsu70x_parameters[] =
+{
+ {
+ "PrintSpeed", N_("Print Speed"), "Color=No,Category=Advanced Printer Setup",
+ N_("Print Speed"),
+ STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
+ STP_PARAMETER_LEVEL_BASIC, 1, 1, STP_CHANNEL_NONE, 1, 0
+ },
+};
+#define mitsu70x_parameter_count (sizeof(mitsu70x_parameters) / sizeof(const stp_parameter_t))
+
+static int
+mitsu70x_load_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ int i;
+ const dyesub_cap_t *caps = dyesub_get_model_capabilities(
+ stp_get_model_id(v));
+
+ if (caps->parameter_count && caps->parameters)
+ {
+ for (i = 0; i < caps->parameter_count; i++)
+ if (strcmp(name, caps->parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(caps->parameters[i]));
+ break;
+ }
+ }
+
+ if (strcmp(name, "PrintSpeed") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+
+ const dyesub_stringlist_t *mlist = &mitsu70x_quality_list;
+ for (i = 0; i < mlist->n_items; i++)
+ {
+ const dyesub_stringitem_t *m = &(mlist->item[i]);
+ stp_string_list_add_string(description->bounds.str,
+ m->name, m->text); /* Do *not* want this translated, otherwise use gettext(m->text) */
+ }
+ description->deflt.str = stp_string_list_param(description->bounds.str, 0)->name;
+ description->is_active = 1;
+ }
+ else
+ {
+ return 0;
+ }
+ return 1;
+}
+
+static void mitsu70x_parse_parameters(stp_vars_t *v)
+{
+ mitsu70x_privdata.quality = stp_get_string_parameter(v, "PrintSpeed");
+}
+
static void mitsu_cpd70k60_printer_init(stp_vars_t *v, unsigned char model)
{
+ int quality;
+
+ /* Parse options */
+ if (strcmp(mitsu70x_privdata.quality, "SuperFine") == 0) {
+ quality = 3;
+ } else if (strcmp(mitsu70x_privdata.quality, "UltraFine") == 0) {
+ quality = 4;
+ } else if (strcmp(mitsu70x_privdata.quality, "Fine") == 0) {
+ quality = 0;
+ } else {
+ quality = 0;
+ }
+
/* Printer wakeup */
stp_putc(0x1b, v);
stp_putc(0x45, v);
@@ -2818,30 +3009,32 @@ static void mitsu_cpd70k60_printer_init(stp_vars_t *v, unsigned char model)
stp_putc(0x1b, v);
stp_putc(0x5a, v);
stp_putc(0x54, v);
- stp_putc(model, v); /* k60 == x02, 305 == x90, d70x == x01 */
+ stp_putc(model, v); /* k60 == x02, 305 == x90, d70x/d80 == x01 */
dyesub_nputc(v, 0x00, 12);
stp_put16_be(privdata.w_size, v);
stp_put16_be(privdata.h_size, v);
if (*((const char*)((privdata.laminate->seq).data)) != 0x00) {
- /* Laminate a slightly larger boundary in Matte mode */
stp_put16_be(privdata.w_size, v);
- stp_put16_be(privdata.h_size + 12, v);
if (model == 0x02 || model == 0x90) {
- stp_putc(0x04, v); /* Matte Lamination forces UltraFine on K60 or K305 */
+ mitsu70x_privdata.laminate_offset = 0;
+ quality = 4; /* Matte Lamination forces UltraFine on K60 or K305 */
} else {
- stp_putc(0x03, v); /* Matte Lamination forces Superfine (or UltraFine) */
+ /* Laminate a slightly larger boundary in Matte mode */
+ mitsu70x_privdata.laminate_offset = 12;
+ quality = 3; /* Matte Lamination forces Superfine (or UltraFine) */
}
+ stp_put16_be(privdata.h_size + mitsu70x_privdata.laminate_offset, v);
} else {
/* Glossy lamination here */
stp_put16_be(0, v);
- stp_put16_be(0, v);
- stp_putc(0x00, v); /* ...and just use fine mode. XXX (optional?) */
+ stp_put16_be(0, v);
}
+ stp_putc(quality, v);
dyesub_nputc(v, 0x00, 7);
if (model != 0x01) {
- stp_putc(0x00, v); /* D70x: 0x00 Auto deck selection, 0x01 for Lower, 0x02 for Upper */
+ stp_putc(0x00, v); /* D70x: 0x00 Auto deck selection, 0x01 for Lower, 0x02 for Upper. */
} else {
stp_putc(0x01, v); /* All others have a single "lower" deck */
}
@@ -2852,7 +3045,7 @@ static void mitsu_cpd70k60_printer_init(stp_vars_t *v, unsigned char model)
(privdata.laminate->seq).bytes, v); /* Lamination mode */
dyesub_nputc(v, 0x00, 6);
- /* Multi-cut controlx */
+ /* Multi-cut control */
if (strcmp(privdata.pagesize,"w432h576-div2") == 0) {
stp_putc(0x01, v);
} else if (strcmp(privdata.pagesize,"w360h504-div2") == 0) {
@@ -2869,7 +3062,7 @@ static void mitsu_cpd70k60_printer_init(stp_vars_t *v, unsigned char model)
static void mitsu_cpd70x_printer_init(stp_vars_t *v)
{
- mitsu_cpd70k60_printer_init(v, 0x01);
+ mitsu_cpd70k60_printer_init(v, 0x01);
}
static void mitsu_cpd70x_printer_end(stp_vars_t *v)
@@ -2877,54 +3070,32 @@ static void mitsu_cpd70x_printer_end(stp_vars_t *v)
/* If Matte lamination is enabled, generate a lamination plane */
if (*((const char*)((privdata.laminate->seq).data)) != 0x00) {
- /* The Windows drivers generate a lamination pattern consisting of
- three values: 0xe84b, 0x286a, 0x6c22 */
-
- int r, c;
- unsigned long seed = 1;
-
- /* Now generate lamination pattern */
- for (c = 0 ; c < privdata.w_size ; c++) {
- for (r = 0 ; r < privdata.h_size + 12 ; r++) {
- int i = xrand(&seed) & 0x3f;
- if (i < 42)
- stp_put16_be(0xe84b, v);
- else if (i < 62)
- stp_put16_be(0x286a, v);
- else
- stp_put16_be(0x6c22, v);
- }
- }
- /* Pad up to a 512-byte block */
- dyesub_nputc(v, 0x00, 512 - ((privdata.w_size * (privdata.h_size + 12) * 2) % 512));
- }
-}
-
-static void mitsu_cpk60_printer_end(stp_vars_t *v)
-{
- /* If Matte lamination is enabled, generate a lamination plane */
- if (*((const char*)((privdata.laminate->seq).data)) != 0x00) {
-
- /* The Windows drivers generate a lamination pattern consisting of
- three values: 0x9d00, 0x6500, 0x2900 */
-
int r, c;
unsigned long seed = 1;
/* Now generate lamination pattern */
for (c = 0 ; c < privdata.w_size ; c++) {
- for (r = 0 ; r < privdata.h_size + 12 ; r++) {
+ for (r = 0 ; r < privdata.h_size + mitsu70x_privdata.laminate_offset ; r++) {
int i = xrand(&seed) & 0x3f;
- if (i < 42)
- stp_put16_be(0x9d00, v);
- else if (i < 62)
- stp_put16_be(0x2900, v);
- else
- stp_put16_be(0x6500, v);
+ if (mitsu70x_privdata.laminate_offset) { /* D70x uses 0x384b, 0x286a, 0x6c22 */
+ if (i < 42)
+ stp_put16_be(0xe84b, v);
+ else if (i < 62)
+ stp_put16_be(0x286a, v);
+ else
+ stp_put16_be(0x6c22, v);
+ } else { /* K60 and EK305 use 0x9d00, 0x6500, 0x2900 */
+ if (i < 42)
+ stp_put16_be(0x9d00, v);
+ else if (i < 62)
+ stp_put16_be(0x2900, v);
+ else
+ stp_put16_be(0x6500, v);
+ }
}
}
/* Pad up to a 512-byte block */
- dyesub_nputc(v, 0x00, 512 - ((privdata.w_size * (privdata.h_size + 12) * 2) % 512));
+ dyesub_nputc(v, 0x00, 512 - ((privdata.w_size * (privdata.h_size + mitsu70x_privdata.laminate_offset) * 2) % 512));
}
}
@@ -2977,6 +3148,53 @@ static void mitsu_cpk60_printer_init(stp_vars_t *v)
mitsu_cpd70k60_printer_init(v, 0x02);
}
+/* Identical to the D70 except for one fewer quality mode */
+static const dyesub_stringitem_t mitsu_k60_qualities[] =
+{
+ { "Fine", N_ ("Fine") },
+ { "UltraFine", N_ ("Ultra Fine") }
+};
+LIST(dyesub_stringlist_t, mitsu_k60_quality_list, dyesub_stringitem_t, mitsu_k60_qualities);
+
+static int
+mitsu_k60_load_parameters(const stp_vars_t *v, const char *name,
+ stp_parameter_t *description)
+{
+ int i;
+ const dyesub_cap_t *caps = dyesub_get_model_capabilities(
+ stp_get_model_id(v));
+
+ if (caps->parameter_count && caps->parameters)
+ {
+ for (i = 0; i < caps->parameter_count; i++)
+ if (strcmp(name, caps->parameters[i].name) == 0)
+ {
+ stp_fill_parameter_settings(description, &(caps->parameters[i]));
+ break;
+ }
+ }
+
+ if (strcmp(name, "PrintSpeed") == 0)
+ {
+ description->bounds.str = stp_string_list_create();
+
+ const dyesub_stringlist_t *mlist = &mitsu_k60_quality_list;
+ for (i = 0; i < mlist->n_items; i++)
+ {
+ const dyesub_stringitem_t *m = &(mlist->item[i]);
+ stp_string_list_add_string(description->bounds.str,
+ m->name, m->text); /* Do *not* want this translated, otherwise use gettext(m->text) */
+ }
+ description->deflt.str = stp_string_list_param(description->bounds.str, 0)->name;
+ description->is_active = 1;
+ }
+ else
+ {
+ return 0;
+ }
+ return 1;
+}
+
static const dyesub_pagesize_t mitsu_cpd80_page[] =
{
{ "w288h432", "4x6", PT(1228,300)+1, PT(1864,300)+1, 0, 0, 0, 0,
@@ -3010,7 +3228,6 @@ static const dyesub_printsize_t mitsu_cpd80_printsize[] =
LIST(dyesub_printsize_list_t, mitsu_cpd80_printsize_list, dyesub_printsize_t, mitsu_cpd80_printsize);
-
/* Kodak 305 */
static const dyesub_pagesize_t kodak305_page[] =
{
@@ -3427,10 +3644,10 @@ static void shinko_chcs1245_printer_init(stp_vars_t *v)
((const unsigned char*)(privdata.laminate->seq).data)[0] == 0x03) {
stp_put32_le(0x07fffffff, v); /* Glossy */
} else {
- stp_put32_le(0x0, v); /* XXX -25>0>+25 */
+ stp_put32_le(0x0, v); /* XXX matte intensity -25>0>+25 */
}
- stp_put32_le(0x00, v); /* XXX 0x00 printer default, 0x02 for "dust removal" on, 0x01 for off. */
+ stp_put32_le(0x00, v); /* XXX "dust removal mode" -- 0x00 printer default, 0x02 on, 0x01 for off. */
stp_put32_le(privdata.w_size, v); /* Columns */
stp_put32_le(privdata.h_size, v); /* Rows */
stp_put32_le(0x01, v); /* Copies */
@@ -3987,31 +4204,12 @@ static const dyesub_media_t dnpds80dx_medias[] =
LIST(dyesub_media_list_t, dnpds80dx_media_list, dyesub_media_t, dnpds80dx_medias);
-/* This list is *not* translated */
-static const dyesub_stringitem_t dnpds80dx_uiconstraints[] =
-{
- /* PPD generation handles constraint reciprocation */
- {"UIConstraints", "*Duplex *MediaType Roll"},
- {"UIConstraints", "*PageSize A4 *MediaType Sheet"},
- {"UIConstraints", "*PageSize w576h792-w576h432_w576h360 *MediaType Sheet"},
- {"UIConstraints", "*PageSize w576h648-w576h360_w576h288 *MediaType Sheet"},
- {"UIConstraints", "*PageSize c8x10-w576h432_w576h288 *MediaType Sheet"},
- {"UIConstraints", "*PageSize w576h864-w576h576_w576h288 *MediaType Sheet"},
- {"UIConstraints", "*PageSize w576h864-div3 *MediaType Sheet"},
- {"UIConstraints", "*PageSize w576h864-div3sheet *MediaType Roll"},
- {"UIConstraints", "*PageSize w576h774-w576h756 *MediaType Roll"},
- {"UIConstraints", "*PageSize w576h774 *MediaType Roll"},
-};
-
-LIST(dyesub_stringlist_t, dnpds80dx_uiconstraints_list, dyesub_stringitem_t, dnpds80dx_uiconstraints);
-
/* This is the same as the DS80, except with 10.5" and 10.75" sizes
only meant for sheet media. Duplex is *only* supported on sheet media.
Also, 8x4*3 differs depending on if you're using sheet or roll media,
hence the almost-duplicated definition.
- See the constraints list for the illegal combinations
*/
static const dyesub_pagesize_t dnpds80dx_page[] =
@@ -4458,8 +4656,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
&p10_block_init_func, NULL,
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &p10_laminate_list, NULL, NULL,
+ &p10_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Olympus P-200 */
4,
@@ -4474,8 +4673,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&p200_plane_init_func, NULL,
NULL, NULL,
p200_adj_any, p200_adj_any, p200_adj_any,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Olympus P-300 */
0,
@@ -4490,8 +4690,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, &p300_plane_end_func,
&p300_block_init_func, NULL,
p300_adj_cyan, p300_adj_magenta, p300_adj_yellow,
- NULL, NULL, NULL,
+ NULL, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Olympus P-400 */
1,
@@ -4506,8 +4707,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&p400_plane_init_func, &p400_plane_end_func,
&p400_block_init_func, NULL,
p400_adj_cyan, p400_adj_magenta, p400_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Olympus P-440 */
3,
@@ -4521,8 +4723,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
&p440_block_init_func, &p440_block_end_func,
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &p10_laminate_list, NULL, NULL,
+ &p10_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Olympus P-S100 */
20,
@@ -4536,8 +4739,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon CP-10 */
1002,
@@ -4553,8 +4757,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&cpx00_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon CP-100, CP-200, CP-300 */
1000,
@@ -4570,8 +4775,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&cpx00_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon CP-220, CP-330, SELPHY CP400, SELPHY CP500, SELPHY CP510,
SELPHY CP520, SELPHY CP530, SELPHY CP600, SELPHY CP710,
@@ -4590,8 +4796,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&cpx00_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon SELPHY ES1 */
1003,
@@ -4607,8 +4814,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&es1_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon SELPHY ES2, SELPHY ES20 */
1005,
@@ -4624,8 +4832,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&es2_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon SELPHY ES3, SELPHY ES30 */
1006,
@@ -4641,8 +4850,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&es2_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon SELPHY ES40 */
1007,
@@ -4658,8 +4868,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&es2_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon SELPHY CP790 */
1008,
@@ -4675,8 +4886,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&es2_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon SELPHY CP800 */
1009,
@@ -4692,8 +4904,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&cpx00_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon SELPHY CP900 */
1010,
@@ -4709,8 +4922,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&cpx00_plane_init_func, NULL,
NULL, NULL,
cpx00_adj_cyan, cpx00_adj_magenta, cpx00_adj_yellow,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Canon CP820, CP910 */
1011,
@@ -4726,8 +4940,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL, /* Printer handles color correction! */
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Sony UP-DP10 */
2000,
@@ -4742,8 +4957,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
updp10_adj_cyan, updp10_adj_magenta, updp10_adj_yellow,
- &updp10_laminate_list, NULL, NULL,
+ &updp10_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Sony UP-DR150 */
2001,
@@ -4757,8 +4973,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &updp10_laminate_list, NULL, NULL,
+ &updp10_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Sony DPP-EX5, DPP-EX7 */
2002,
@@ -4773,8 +4990,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
&dppex5_block_init, NULL,
NULL, NULL, NULL,
- &dppex5_laminate_list, NULL, NULL,
+ &dppex5_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Sony UP-DR100 */
2003,
@@ -4788,8 +5006,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &updr100_laminate_list, NULL, NULL,
+ &updr100_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Sony UP-DR200 */
2004,
@@ -4803,8 +5022,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &updr200_laminate_list, NULL, NULL,
+ &updr200_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Sony UP-CR10L / DNP SL10 */
2005,
@@ -4818,8 +5038,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Fujifilm Printpix CX-400 */
3000,
@@ -4834,8 +5055,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Fujifilm Printpix CX-550 */
3001,
@@ -4850,8 +5072,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Fujifilm FinePix NX-500 */
3002,
@@ -4865,8 +5088,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak Easyshare Dock family */
4000,
@@ -4881,8 +5105,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&kodak_dock_plane_init, NULL,
NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak Photo Printer 6800 */
4001,
@@ -4896,8 +5121,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No plane funcs */
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_6800_laminate_list, NULL, NULL,
+ &kodak_6800_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak Photo Printer 6850 */
4002,
@@ -4911,8 +5137,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No plane funcs */
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_6800_laminate_list, NULL, NULL,
+ &kodak_6800_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak Photo Printer 605 */
4003,
@@ -4926,8 +5153,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No plane funcs */
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_605_laminate_list, NULL, NULL,
+ &kodak_605_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak Professional 1400 */
4004,
@@ -4943,8 +5171,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &kodak_6800_laminate_list, &kodak_1400_media_list, NULL,
+ &kodak_6800_laminate_list, &kodak_1400_media_list,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak Photo Printer 805 */
4005,
@@ -4960,8 +5189,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No plane funcs */
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_6800_laminate_list, NULL, NULL,
+ &kodak_6800_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak Professional 9810 */
4006,
@@ -4976,8 +5206,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&kodak_9810_plane_init, NULL,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_9810_laminate_list, NULL, NULL,
+ &kodak_9810_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak 8810 */
4007,
@@ -4992,8 +5223,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_8810_laminate_list, NULL, NULL,
+ &kodak_8810_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak 7000/7010 */
4008,
@@ -5008,8 +5240,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_7000_laminate_list, NULL, NULL,
+ &kodak_7000_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak 7015 */
4009,
@@ -5024,8 +5257,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_7000_laminate_list, NULL, NULL,
+ &kodak_7000_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Kodak Professional 8500 */
4100,
@@ -5039,8 +5273,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No plane funcs */
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &kodak_8500_laminate_list, &kodak_8500_media_list, NULL,
+ &kodak_8500_laminate_list, &kodak_8500_media_list,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Mitsubishi CP3020D/DU/DE */
4101,
@@ -5055,8 +5290,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&mitsu_cp3020d_plane_init, &mitsu_cp3020d_plane_end,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Mitsubishi CP3020DA/DAE */
4102,
@@ -5071,8 +5307,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&mitsu_cp3020da_plane_init, NULL,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Mitsubishi CP9550D */
4103,
@@ -5087,8 +5324,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&mitsu_cp3020da_plane_init, NULL,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- NULL, NULL, NULL,
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Mitsubishi CP9810D */
4104,
@@ -5104,8 +5342,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&mitsu_cp3020da_plane_init, NULL,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &mitsu_cp9810_laminate_list, NULL, NULL,
+ &mitsu_cp9810_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Mitsubishi CPD70D/CPD707D */
4105,
@@ -5121,8 +5360,12 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, &mitsu_cpd70x_plane_end,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &mitsu_cpd70x_laminate_list, NULL, NULL,
+ &mitsu_cpd70x_laminate_list, NULL,
NULL, NULL,
+ mitsu70x_parameters,
+ mitsu70x_parameter_count,
+ mitsu70x_load_parameters,
+ mitsu70x_parse_parameters,
},
{ /* Mitsubishi CPK60D */
4106,
@@ -5134,12 +5377,16 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
DYESUB_FEATURE_FULL_WIDTH | DYESUB_FEATURE_FULL_HEIGHT
| DYESUB_FEATURE_PLANE_INTERLACE | DYESUB_FEATURE_16BPP
| DYESUB_FEATURE_BIGENDIAN,
- &mitsu_cpk60_printer_init, &mitsu_cpk60_printer_end,
+ &mitsu_cpk60_printer_init, &mitsu_cpd70x_printer_end,
NULL, &mitsu_cpd70x_plane_end,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &mitsu_cpd70x_laminate_list, NULL, NULL,
+ &mitsu_cpd70x_laminate_list, NULL,
NULL, NULL,
+ mitsu70x_parameters,
+ mitsu70x_parameter_count,
+ mitsu_k60_load_parameters,
+ mitsu70x_parse_parameters,
},
{ /* Mitsubishi CPD80D */
4107,
@@ -5155,8 +5402,12 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, &mitsu_cpd70x_plane_end,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &mitsu_cpd70x_laminate_list, NULL, NULL,
+ &mitsu_cpd70x_laminate_list, NULL,
NULL, NULL,
+ mitsu70x_parameters,
+ mitsu70x_parameter_count,
+ mitsu70x_load_parameters,
+ mitsu70x_parse_parameters,
},
{ /* Kodak 305 */
4108,
@@ -5168,12 +5419,16 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
DYESUB_FEATURE_FULL_WIDTH | DYESUB_FEATURE_FULL_HEIGHT
| DYESUB_FEATURE_PLANE_INTERLACE | DYESUB_FEATURE_16BPP
| DYESUB_FEATURE_BIGENDIAN,
- &kodak305_printer_init, &mitsu_cpk60_printer_end,
+ &kodak305_printer_init, &mitsu_cpd70x_printer_end,
NULL, &mitsu_cpd70x_plane_end,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &mitsu_cpd70x_laminate_list, NULL, NULL,
+ &mitsu_cpd70x_laminate_list, NULL,
NULL, NULL,
+ mitsu70x_parameters,
+ mitsu70x_parameter_count,
+ mitsu_k60_load_parameters,
+ mitsu70x_parse_parameters,
},
{ /* Mitsubishi CPD90D */
4109,
@@ -5187,8 +5442,43 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL, /* No block funcs */
NULL, NULL, NULL, /* color profile/adjustment is built into printer */
- &mitsu_cpd70x_laminate_list, NULL, NULL,
+ &mitsu_cpd70x_laminate_list, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
+ },
+ { /* Mitsubishi CP9600D */
+ 4110,
+ &bgr_ink_list,
+ &res_mitsu9600_dpi_list,
+ &mitsu_cp9600_page_list,
+ &mitsu_cp9600_printsize_list,
+ SHRT_MAX,
+ DYESUB_FEATURE_FULL_WIDTH | DYESUB_FEATURE_FULL_HEIGHT
+ | DYESUB_FEATURE_PLANE_INTERLACE,
+ &mitsu_cp9600_printer_init, &mitsu_cp9600_printer_end,
+ &mitsu_cp3020da_plane_init, NULL,
+ NULL, NULL, /* No block funcs */
+ NULL, NULL, NULL, /* color profile/adjustment is built into printer */
+ NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
+ },
+ { /* Mitsubishi CP9550DW-S */
+ 4111,
+ &rgb_ink_list, /* Identical to 9550D except it's rgb instead of bgr */
+ &res_346dpi_list,
+ &mitsu_cp9550_page_list,
+ &mitsu_cp9550_printsize_list,
+ SHRT_MAX,
+ DYESUB_FEATURE_FULL_WIDTH | DYESUB_FEATURE_FULL_HEIGHT
+ | DYESUB_FEATURE_PLANE_INTERLACE,
+ &mitsu_cp9550_printer_init, &mitsu_cp9550_printer_end,
+ &mitsu_cp3020da_plane_init, NULL,
+ NULL, NULL, /* No block funcs */
+ NULL, NULL, NULL, /* color profile/adjustment is built into printer */
NULL, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Shinko CHC-S9045 (experimental) */
5000,
@@ -5202,8 +5492,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL,
NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Shinko/Sinfonia CHC-S2145 */
5001,
@@ -5217,8 +5508,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No planes */
NULL, NULL, /* No blocks */
NULL, NULL, NULL, /* Color correction in printer */
- &shinko_chcs2145_laminate_list, NULL, NULL,
+ &shinko_chcs2145_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Shinko/Sinfonia CHC-S1245 */
5002,
@@ -5232,7 +5524,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No planes */
NULL, NULL, /* No blocks */
NULL, NULL, NULL, /* Color correction in printer */
- &shinko_chcs1245_laminate_list, NULL, NULL,
+ &shinko_chcs1245_laminate_list, NULL,
+ NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Shinko/Sinfonia CHC-S6245 */
5003,
@@ -5246,8 +5540,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No planes */
NULL, NULL, /* No blocks */
NULL, NULL, NULL, /* Color correction in printer */
- &shinko_chcs6245_laminate_list, NULL, NULL,
+ &shinko_chcs6245_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Shinko/Sinfonia CHC-S6145 */
5004,
@@ -5261,8 +5556,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No planes */
NULL, NULL, /* No blocks */
NULL, NULL, NULL, /* Color correction in printer */
- &shinko_chcs6145_laminate_list, NULL, NULL,
+ &shinko_chcs6145_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* CIAAT Brava 21 (aka CHC-S6145D) */
5005,
@@ -5276,8 +5572,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
NULL, NULL, /* No planes */
NULL, NULL, /* No blocks */
NULL, NULL, NULL, /* Color correction in printer */
- &shinko_chcs6145_laminate_list, NULL, NULL,
+ &shinko_chcs6145_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Dai Nippon Printing DS40 */
6000,
@@ -5292,8 +5589,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&dnpds40_plane_init, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &dnpds40_laminate_list, NULL, NULL,
+ &dnpds40_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Dai Nippon Printing DS80 */
6001,
@@ -5308,8 +5606,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&dnpds40_plane_init, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &dnpds40_laminate_list, NULL, NULL,
+ &dnpds40_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Dai Nippon Printing DSRX1 */
6002,
@@ -5324,8 +5623,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&dnpds40_plane_init, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &dnpds40_laminate_list, NULL, NULL,
+ &dnpds40_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Dai Nippon Printing DS620 */
6003,
@@ -5340,8 +5640,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&dnpds40_plane_init, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &dnpds620_laminate_list, NULL, NULL,
+ &dnpds620_laminate_list, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Citizen CW-01 */
6005,
@@ -5356,8 +5657,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&citizen_cw01_plane_init, NULL,
NULL, NULL,
NULL, NULL, NULL,
- NULL, NULL, NULL,
+ NULL, NULL,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
{ /* Dai Nippon Printing DS80DX */
6006,
@@ -5372,8 +5674,9 @@ static const dyesub_cap_t dyesub_model_capabilities[] =
&dnpds40_plane_init, NULL,
NULL, NULL,
NULL, NULL, NULL,
- &dnpds40_laminate_list, &dnpds80dx_media_list, &dnpds80dx_uiconstraints_list,
+ &dnpds40_laminate_list, &dnpds80dx_media_list,
NULL, NULL,
+ NULL, 0, NULL, NULL,
},
};
@@ -5443,12 +5746,6 @@ static const stp_parameter_t the_parameters[] =
STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
STP_PARAMETER_LEVEL_BASIC, 1, 1, STP_CHANNEL_NONE, 1, 0
},
- {
- "PPDUIConstraints", N_("PPD User Interface Constraints"), "Color=No,Category=Advanced Printer Functionality",
- N_("PPD UIConstraints List"),
- STP_PARAMETER_TYPE_STRING_LIST, STP_PARAMETER_CLASS_FEATURE,
- STP_PARAMETER_LEVEL_INTERNAL, 0, 0, STP_CHANNEL_NONE, 0, 1
- },
};
static int the_parameter_count =
@@ -5602,6 +5899,8 @@ dyesub_feature(const dyesub_cap_t *caps, int feature)
static stp_parameter_list_t
dyesub_list_parameters(const stp_vars_t *v)
{
+ const dyesub_cap_t *caps = dyesub_get_model_capabilities(stp_get_model_id(v));
+
stp_parameter_list_t *ret = stp_parameter_list_create();
int i;
@@ -5609,6 +5908,10 @@ dyesub_list_parameters(const stp_vars_t *v)
stp_parameter_list_add_param(ret, &(the_parameters[i]));
for (i = 0; i < float_parameter_count; i++)
stp_parameter_list_add_param(ret, &(float_parameters[i].param));
+ if (caps->parameter_count && caps->parameters)
+ for (i = 0; i < caps->parameter_count ; i++)
+ stp_parameter_list_add_param(ret, &(caps->parameters[i]));
+
return ret;
}
@@ -5641,6 +5944,12 @@ dyesub_parameters(const stp_vars_t *v, const char *name,
stp_fill_parameter_settings(description, &(the_parameters[i]));
break;
}
+ if (caps->load_parameters) /* do *NOT* use dyesub_exec() here */
+ {
+ if (caps->load_parameters(v, name, description))
+ return; /* Ie parameter handled */
+ }
+
if (strcmp(name, "PageSize") == 0)
{
int default_specified = 0;
@@ -5746,24 +6055,6 @@ dyesub_parameters(const stp_vars_t *v, const char *name,
description->deflt.str =
stp_string_list_param(description->bounds.str, 0)->name;
}
- else if (strcmp(name, "PPDUIConstraints") == 0)
- {
- description->bounds.str = stp_string_list_create();
- if (caps->uiconstraints) {
- const dyesub_stringlist_t *mlist = caps->uiconstraints;
- for (i = 0; i < mlist->n_items; i++)
- {
- const dyesub_stringitem_t *m = &(mlist->item[i]);
- stp_string_list_add_string(description->bounds.str,
- m->name, m->text); /* Do *not* want this translated */
- }
- description->deflt.str =
- stp_string_list_param(description->bounds.str, 0)->name;
- description->is_active = 1;
- } else {
- description->is_active = 0;
- }
- }
else if (strcmp(name, "Duplex") == 0)
{
int offer_duplex=0;
@@ -5782,7 +6073,7 @@ dyesub_parameters(const stp_vars_t *v, const char *name,
else
offer_duplex=1;
- if (offer_duplex && (caps->features & DYESUB_FEATURE_DUPLEX))
+ if (offer_duplex && dyesub_feature(caps, DYESUB_FEATURE_DUPLEX))
{
description->deflt.str = duplex_types[0].name;
for (i=0; i < NUM_DUPLEX; i++)
@@ -6329,6 +6620,9 @@ dyesub_do_print(stp_vars_t *v, stp_image_t *image)
stp_describe_resolution(v, &w_dpi, &h_dpi);
dyesub_printsize(v, &max_print_px_width, &max_print_px_height);
+ /* Parse any per-printer parameters */
+ dyesub_exec(v, caps->parse_parameters, "caps->parse_parameters");
+
/* Duplex processing -- Rotate even pages for DuplexNoTumble */
privdata.duplex_mode = stp_get_string_parameter(v, "Duplex");
privdata.page_number = stp_get_int_parameter(v, "PageNumber");
@@ -6426,7 +6720,7 @@ dyesub_do_print(stp_vars_t *v, stp_image_t *image)
pv.byteswap = !dyesub_feature(caps, DYESUB_FEATURE_BIGENDIAN);
#else
#error "Unable to determine endianness, aborting compilation!"
-#endif
+#endif
}
pv.image_data = dyesub_read_image(v, &pv, image);
diff --git a/src/main/print-ps.c b/src/main/print-ps.c
index 3596e01..6a4a85f 100644
--- a/src/main/print-ps.c
+++ b/src/main/print-ps.c
@@ -39,6 +39,7 @@
#endif
#include <stdio.h>
#include <unistd.h>
+#include <strings.h>
#include "xmlppd.h"
#ifdef _MSC_VER
diff --git a/src/main/xmlppd.c b/src/main/xmlppd.c
index 0ee9dc9..27bd6b8 100644
--- a/src/main/xmlppd.c
+++ b/src/main/xmlppd.c
@@ -26,6 +26,7 @@
#include <gutenprint/util.h>
#include <gutenprint/string-list.h>
#include <stdlib.h>
+#include <strings.h>
#include "xmlppd.h"
typedef struct
diff --git a/src/testpattern/Makefile.am b/src/testpattern/Makefile.am
index b02ac4a..8e3089d 100644
--- a/src/testpattern/Makefile.am
+++ b/src/testpattern/Makefile.am
@@ -33,7 +33,7 @@ TESTS = run-testpattern-1 run-testpattern-2
if BUILD_TESTPATTERN
bin_PROGRAMS = testpattern
noinst_PROGRAMS = printers printer_options
-noinst_SCRIPTS = run-testpattern-2 compare-checksums
+noinst_SCRIPTS = run-testpattern-2 compare-checksums compress-checksums uncompress-checksums
endif
AM_LFLAGS = -i
@@ -55,10 +55,25 @@ if INSTALL_SAMPLES
pkgdata_DATA = testpattern.sample extended.sample
endif
+## Generate checksums
+
+if BUILD_TESTPATTERN
+checksums: testpattern run-testpattern-2 ./compress-checksums
+ $(MKDIR_P) Checksums
+ ./run-testpattern-2 -q -M Checksums/sums.@GUTENPRINT_VERSION@.in
+ ./compress-checksums < Checksums/sums.@GUTENPRINT_VERSION@.in |$(BZIP2) -c > Checksums/sums.@GUTENPRINT_VERSION@.bz2
+ rm -f Checksums/sums.@GUTENPRINT_VERSION@.in
+endif
## Clean
MAINTAINERCLEANFILES = Makefile.in testpatternl.c testpatterny.c testpatterny.h
-EXTRA_DIST = testpatterny.h $(pkgdata_DATA) run-testpattern run-testpattern-1 compare-checksums.in
-
+EXTRA_DIST = \
+ testpatterny.h \
+ $(pkgdata_DATA) \
+ run-testpattern \
+ run-testpattern-1 \
+ compare-checksums.in \
+ compress-checksums.in \
+ uncompress-checksums.in
diff --git a/src/testpattern/Makefile.in b/src/testpattern/Makefile.in
index 9003446..9b44a91 100644
--- a/src/testpattern/Makefile.in
+++ b/src/testpattern/Makefile.in
@@ -86,8 +86,9 @@ build_triplet = @build@
host_triplet = @host@
DIST_COMMON = $(top_srcdir)/scripts/global.mk $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(srcdir)/run-testpattern-2.in \
- $(srcdir)/compare-checksums.in testpatterny.h testpatterny.c \
- testpatternl.c $(top_srcdir)/scripts/depcomp \
+ $(srcdir)/compare-checksums.in $(srcdir)/compress-checksums.in \
+ $(srcdir)/uncompress-checksums.in testpatterny.h \
+ testpatterny.c testpatternl.c $(top_srcdir)/scripts/depcomp \
$(top_srcdir)/scripts/ylwrap $(top_srcdir)/scripts/test-driver
@BUILD_TESTPATTERN_TRUE@bin_PROGRAMS = testpattern$(EXEEXT)
@BUILD_TESTPATTERN_TRUE@noinst_PROGRAMS = printers$(EXEEXT) \
@@ -108,7 +109,8 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES = run-testpattern-2 compare-checksums
+CONFIG_CLEAN_FILES = run-testpattern-2 compare-checksums \
+ compress-checksums uncompress-checksums
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)"
PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS)
@@ -424,6 +426,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
@@ -631,7 +634,7 @@ top_srcdir = @top_srcdir@
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include $(LOCAL_CPPFLAGS) $(GNUCFLAGS)
GUTENPRINTUI_LIBS = $(top_builddir)/src/gutenprintui/libgutenprintui.la
TESTS = run-testpattern-1 run-testpattern-2
-@BUILD_TESTPATTERN_TRUE@noinst_SCRIPTS = run-testpattern-2 compare-checksums
+@BUILD_TESTPATTERN_TRUE@noinst_SCRIPTS = run-testpattern-2 compare-checksums compress-checksums uncompress-checksums
AM_LFLAGS = -i
AM_YFLAGS = -d
testpattern_SOURCES = testpattern.c testpatterny.y testpatternl.l testpattern.h
@@ -640,7 +643,15 @@ printers_LDADD = $(GUTENPRINT_LIBS)
printer_options_LDADD = $(GUTENPRINT_LIBS)
@INSTALL_SAMPLES_TRUE@pkgdata_DATA = testpattern.sample extended.sample
MAINTAINERCLEANFILES = Makefile.in testpatternl.c testpatterny.c testpatterny.h
-EXTRA_DIST = testpatterny.h $(pkgdata_DATA) run-testpattern run-testpattern-1 compare-checksums.in
+EXTRA_DIST = \
+ testpatterny.h \
+ $(pkgdata_DATA) \
+ run-testpattern \
+ run-testpattern-1 \
+ compare-checksums.in \
+ compress-checksums.in \
+ uncompress-checksums.in
+
all: all-am
.SUFFIXES:
@@ -680,6 +691,10 @@ run-testpattern-2: $(top_builddir)/config.status $(srcdir)/run-testpattern-2.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
compare-checksums: $(top_builddir)/config.status $(srcdir)/compare-checksums.in
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+compress-checksums: $(top_builddir)/config.status $(srcdir)/compress-checksums.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+uncompress-checksums: $(top_builddir)/config.status $(srcdir)/uncompress-checksums.in
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
@@ -1226,6 +1241,12 @@ $(top_builddir)/src/gutenprintui2/libgutenprintui2.la:
testpatternl.o: testpatterny.o
testpattern.o: testpatterny.o
+@BUILD_TESTPATTERN_TRUE@checksums: testpattern run-testpattern-2 ./compress-checksums
+@BUILD_TESTPATTERN_TRUE@ $(MKDIR_P) Checksums
+@BUILD_TESTPATTERN_TRUE@ ./run-testpattern-2 -q -M Checksums/sums.@GUTENPRINT_VERSION@.in
+@BUILD_TESTPATTERN_TRUE@ ./compress-checksums < Checksums/sums.@GUTENPRINT_VERSION@.in |$(BZIP2) -c > Checksums/sums.@GUTENPRINT_VERSION@.bz2
+@BUILD_TESTPATTERN_TRUE@ rm -f Checksums/sums.@GUTENPRINT_VERSION@.in
+
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/src/testpattern/compare-checksums.in b/src/testpattern/compare-checksums.in
index c27ffdf..1d7e1ea 100755
--- a/src/testpattern/compare-checksums.in
+++ b/src/testpattern/compare-checksums.in
@@ -1,4 +1,19 @@
#!@PERL@
+## Copyright (C) 2016 Robert Krawitz
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
use strict;
@@ -14,9 +29,6 @@ if ($#ARGV != 1) {
die "Usage: $0 old_checksum_file new_checksum_file\n";
}
-open(OLD, $ARGV[0]) or die("Can't open old checksum file $ARGV[0]: $!\n");
-open(NEW, $ARGV[1]) or die("Can't open new checksum file $ARGV[1]: $!\n");
-
sub get_printer($) {
my ($mode) = @_;
$mode =~ s/_PrintingMode.*//;
@@ -29,25 +41,53 @@ sub get_mode($) {
return $mode;
}
-while (<OLD>) {
- chomp;
- my ($sum, $mode) = split(/ +[*]?/);
- $mode =~ s/\.prn$//;
- $old_modes{$mode} = $sum;
- my ($printer) = get_printer($mode);
- $old_printers{$printer} = 1;
+sub load_file($\%\%) {
+ my ($file, $modes, $printers) = @_;
+ if ($file =~ /\.bz2$/) {
+ open(IN, "bunzip2 -c $file|") or die("Can't open checksum file $file: $!\n");
+ } elsif ($file =~ /.gz$/) {
+ open(IN, "gunzip -c $file|") or die("Can't open checksum file $file: $!\n");
+ } else {
+ open(IN, "$file") or die("Can't open checksum file $file: $!\n");
+ }
+ my ($inline);
+ while ($inline = <IN>) {
+ chomp $inline;
+ my ($sum, @okeys) = split(/ /, $inline);
+ my @keys = map {
+ s/\.prn$//;
+ s/^\*//;
+ $_;
+ } @okeys;
+ my (@pchunks) = ();
+ foreach my $k (@keys) {
+ $k =~ s/=/________/g;
+ $k =~ s/!/_______/g;
+ $k =~ s/"/______/g;
+ $k =~ s/,/_____/g;
+ $k =~ s/'/____/g;
+ $k =~ s/%/___/g;
+ $k =~ s/>/__/g;
+ my (@chunks) = split(/_/, $k, -1);
+ foreach my $i (0..$#chunks) {
+ if ($chunks[$i] eq '') {
+ $chunks[$i] = $pchunks[$i];
+ } elsif ($chunks[$i] =~ /^([0-9]+)\+(.*)/) {
+ $chunks[$i] = substr($pchunks[$i], 0, $1) . $2;
+ }
+ }
+ my ($val) = join('_', @chunks);
+ $val =~ s/(^[^:]*)_:(.*)/$2_$1/;
+ $$modes{$val} = $sum;
+ $$printers{get_printer($val)} = 1;
+ @pchunks = @chunks;
+ }
+ }
+ close IN;
}
-close OLD;
-
-while (<NEW>) {
- chomp;
- my ($sum, $mode) = split(/ +[*]?/);
- $mode =~ s/\.prn$//;
- $new_modes{$mode} = $sum;
- my ($printer) = get_printer($mode);
- $new_printers{$printer} = 1;
-}
+load_file($ARGV[0], %old_modes, %old_printers);
+load_file($ARGV[1], %new_modes, %new_printers);
my (%only_old_printers, %only_new_printers);
diff --git a/src/testpattern/compress-checksums.in b/src/testpattern/compress-checksums.in
new file mode 100644
index 0000000..5ecfee3
--- /dev/null
+++ b/src/testpattern/compress-checksums.in
@@ -0,0 +1,121 @@
+#!@PERL@
+## Copyright (C) 2016 Robert Krawitz
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+use strict;
+
+my (%checksums);
+
+while (<>) {
+ chomp;
+ my ($sum, @keys) = split;
+ my (@pchunks) = ();
+ foreach my $k (@keys) {
+ my (@chunks) = split(/_/, $k, -1);
+ foreach my $i (0..$#chunks) {
+ if ($chunks[$i] eq '') {
+ $chunks[$i] = $pchunks[$i];
+ } elsif ($chunks[$i] =~ /^([0-9]+)\+(.*)/) {
+ $chunks[$i] = substr($pchunks[$i], 0, $1) . $2;
+ }
+ }
+ my $key = join('_', @chunks), '.prn';
+ if (! defined $checksums{$sum}) {
+ $checksums{$sum} = [];
+ }
+ push @{$checksums{$sum}}, $key;
+ }
+}
+
+sub min($$) {
+ my ($a, $b) = @_;
+ if ($a < $b) {
+ return $a;
+ } else {
+ return $b;
+ }
+}
+
+sub get_printer($) {
+ my ($mode) = @_;
+ $mode =~ s/_PrintingMode.*//;
+ return $mode;
+}
+
+sub get_mode($) {
+ my ($mode) = @_;
+ $mode =~ s/.*_PrintingMode/PrintingMode/;
+ return $mode;
+}
+
+foreach my $sum (sort keys %checksums) {
+ my ($out) = $sum;
+ my ($prun) = "";
+ my (@pchunks) = ();
+ my ($plen) = 0;
+ my (@runs) = sort map {
+ s/^\*//;
+ s/\.prn$//;
+ my ($printer) = get_printer($_);
+ my ($mode) = get_mode($_);
+ "${mode}_:$printer"
+ } @{$checksums{$sum}};
+ foreach my $run (@runs) {
+ my (@chunks) = split(/_/, $run);
+ my ($mchunks) = min(scalar @pchunks, scalar @chunks);
+ my ($i) = 0;
+ $out .= " ";
+ while ($i < $mchunks) {
+ if ($i > 0) {
+ $out .= '_';
+ }
+ if ($chunks[$i] ne $pchunks[$i]) {
+ my ($plen) = length $pchunks[$i];
+ my ($len) = length $chunks[$i];
+ my ($maxc) = min($len, $plen);
+ my ($dup) = 0;
+ while ($dup < $maxc) {
+ last if (substr($pchunks[$i], $dup, 1) ne
+ substr($chunks[$i], $dup, 1));
+ $dup++;
+ }
+ if ($dup > 2) {
+ $out .= "$dup+" . substr($chunks[$i], $dup);
+ } else {
+ $out .= "$chunks[$i]";
+ }
+ } else {
+ $out .= "";
+ }
+ $i++;
+ }
+ if ($i < scalar @chunks) {
+ if ($i > 0) {
+ $out .= '_';
+ }
+ $out .= join("_", @chunks[$i..$#chunks]);
+ }
+ $out =~ s/________/=/g;
+ $out =~ s/_______/!/g;
+ $out =~ s/______/"/g;
+ $out =~ s/_____/,/g;
+ $out =~ s/____/'/g;
+ $out =~ s/___/%/g;
+ $out =~ s/__/>/g;
+ @pchunks = @chunks;
+ }
+ print "$out\n";
+}
diff --git a/src/testpattern/run-testpattern-2.in b/src/testpattern/run-testpattern-2.in
index 48d84d2..8df73b8 100644
--- a/src/testpattern/run-testpattern-2.in
+++ b/src/testpattern/run-testpattern-2.in
@@ -8,6 +8,7 @@ use strict;
my $valgrind = 0;
my $callgrind = 0;
my $gdb_attach = 0;
+my $compress_checksums = 0;
my $csum_file = undef;
my $csum_dir = undef;
my $csum_type = 'sha512';
diff --git a/src/testpattern/testpatternl.c b/src/testpattern/testpatternl.c
index 3a6e90e..c042918 100644
--- a/src/testpattern/testpatternl.c
+++ b/src/testpattern/testpatternl.c
@@ -804,7 +804,7 @@ c_strstrip(char *s)
return sn;
}
else
- return strdup(s);
+ return stp_strdup(s);
}
#define DBG(x) \
diff --git a/src/testpattern/testpatternl.l b/src/testpattern/testpatternl.l
index 21f1530..a340ce6 100644
--- a/src/testpattern/testpatternl.l
+++ b/src/testpattern/testpatternl.l
@@ -52,7 +52,7 @@ c_strstrip(char *s)
return sn;
}
else
- return strdup(s);
+ return stp_strdup(s);
}
#define DBG(x) \
diff --git a/src/testpattern/testpatterny.c b/src/testpattern/testpatterny.c
index 47bd3bf..da90dcc 100644
--- a/src/testpattern/testpatterny.c
+++ b/src/testpattern/testpatterny.c
@@ -71,6 +71,7 @@
#endif
#include <string.h>
+#include <strings.h>
#include <stdio.h>
#include <stdlib.h>
#include "testpattern.h"
@@ -131,7 +132,7 @@ find_color(const char *name)
/* Line 371 of yacc.c */
-#line 135 "testpatterny.c"
+#line 136 "testpatterny.c"
# ifndef YY_NULL
# if defined __cplusplus && 201103L <= __cplusplus
@@ -292,7 +293,7 @@ int yyparse ();
/* Copy the second part of user declarations. */
/* Line 390 of yacc.c */
-#line 296 "testpatterny.c"
+#line 297 "testpatterny.c"
#ifdef short
# undef short
@@ -628,20 +629,20 @@ static const yytype_int8 yyrhs[] =
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 143, 143, 143, 148, 158, 168, 178, 188, 198,
- 208, 218, 218, 218, 218, 218, 218, 218, 221, 229,
- 229, 232, 235, 245, 254, 264, 273, 280, 287, 294,
- 303, 312, 321, 321, 324, 334, 343, 352, 361, 375,
- 375, 375, 375, 375, 377, 384, 391, 398, 405, 412,
- 419, 426, 426, 426, 426, 428, 430, 437, 444, 452,
- 460, 475, 475, 478, 478, 481, 484, 498, 511, 511,
- 514, 514, 517, 517, 520, 520, 523, 538, 541, 556,
- 567, 584, 591, 591, 594, 597, 607, 613, 613, 616,
- 620, 624, 624, 624, 624, 624, 624, 625, 625, 625,
- 625, 625, 625, 625, 626, 626, 626, 626, 626, 626,
- 627, 627, 627, 627, 630, 634, 634, 634, 634, 637,
- 641, 641, 644, 648, 648, 651, 651, 654, 654, 659,
- 658
+ 0, 144, 144, 144, 149, 159, 169, 179, 189, 199,
+ 209, 219, 219, 219, 219, 219, 219, 219, 222, 230,
+ 230, 233, 236, 246, 255, 265, 274, 281, 288, 295,
+ 304, 313, 322, 322, 325, 335, 344, 353, 362, 376,
+ 376, 376, 376, 376, 378, 385, 392, 399, 406, 413,
+ 420, 427, 427, 427, 427, 429, 431, 438, 445, 453,
+ 461, 476, 476, 479, 479, 482, 485, 499, 512, 512,
+ 515, 515, 518, 518, 521, 521, 524, 539, 542, 557,
+ 568, 585, 592, 592, 595, 598, 608, 614, 614, 617,
+ 621, 625, 625, 625, 625, 625, 625, 626, 626, 626,
+ 626, 626, 626, 626, 627, 627, 627, 627, 627, 627,
+ 628, 628, 628, 628, 631, 635, 635, 635, 635, 638,
+ 642, 642, 645, 649, 649, 652, 652, 655, 655, 660,
+ 659
};
#endif
@@ -1682,14 +1683,14 @@ yyreduce:
{
case 3:
/* Line 1792 of yacc.c */
-#line 144 "testpatterny.y"
+#line 145 "testpatterny.y"
{
}
break;
case 4:
/* Line 1792 of yacc.c */
-#line 149 "testpatterny.y"
+#line 150 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>cmykspec\n");
@@ -1701,7 +1702,7 @@ yyreduce:
case 5:
/* Line 1792 of yacc.c */
-#line 159 "testpatterny.y"
+#line 160 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>kcmyspec\n");
@@ -1713,7 +1714,7 @@ yyreduce:
case 6:
/* Line 1792 of yacc.c */
-#line 169 "testpatterny.y"
+#line 170 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>rgbspec\n");
@@ -1725,7 +1726,7 @@ yyreduce:
case 7:
/* Line 1792 of yacc.c */
-#line 179 "testpatterny.y"
+#line 180 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>cmyspec\n");
@@ -1737,7 +1738,7 @@ yyreduce:
case 8:
/* Line 1792 of yacc.c */
-#line 189 "testpatterny.y"
+#line 190 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>grayspec\n");
@@ -1749,7 +1750,7 @@ yyreduce:
case 9:
/* Line 1792 of yacc.c */
-#line 199 "testpatterny.y"
+#line 200 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>whitespec\n");
@@ -1761,7 +1762,7 @@ yyreduce:
case 10:
/* Line 1792 of yacc.c */
-#line 209 "testpatterny.y"
+#line 210 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>extendedspec %d\n", (yyvsp[(2) - (2)].ival));
@@ -1773,7 +1774,7 @@ yyreduce:
case 18:
/* Line 1792 of yacc.c */
-#line 222 "testpatterny.y"
+#line 223 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>modespec2 %d\n", (yyvsp[(2) - (2)].ival));
@@ -1784,7 +1785,7 @@ yyreduce:
case 22:
/* Line 1792 of yacc.c */
-#line 236 "testpatterny.y"
+#line 237 "testpatterny.y"
{
int channel = find_color((yyvsp[(2) - (3)].sval));
if (getenv("STP_TESTPATTERN_DEBUG"))
@@ -1796,7 +1797,7 @@ yyreduce:
case 23:
/* Line 1792 of yacc.c */
-#line 246 "testpatterny.y"
+#line 247 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>channel_level %d %f\n", (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval));
@@ -1807,7 +1808,7 @@ yyreduce:
case 24:
/* Line 1792 of yacc.c */
-#line 255 "testpatterny.y"
+#line 256 "testpatterny.y"
{
int channel = find_color((yyvsp[(2) - (3)].sval));
if (getenv("STP_TESTPATTERN_DEBUG"))
@@ -1819,7 +1820,7 @@ yyreduce:
case 25:
/* Line 1792 of yacc.c */
-#line 265 "testpatterny.y"
+#line 266 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>channel_gamma %d %f\n", (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].dval));
@@ -1830,7 +1831,7 @@ yyreduce:
case 26:
/* Line 1792 of yacc.c */
-#line 274 "testpatterny.y"
+#line 275 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>global_gamma %f\n", (yyvsp[(2) - (2)].dval));
@@ -1840,7 +1841,7 @@ yyreduce:
case 27:
/* Line 1792 of yacc.c */
-#line 281 "testpatterny.y"
+#line 282 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>steps %d\n", (yyvsp[(2) - (2)].ival));
@@ -1850,7 +1851,7 @@ yyreduce:
case 28:
/* Line 1792 of yacc.c */
-#line 288 "testpatterny.y"
+#line 289 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>ink_limit %f\n", (yyvsp[(2) - (2)].dval));
@@ -1860,18 +1861,18 @@ yyreduce:
case 29:
/* Line 1792 of yacc.c */
-#line 295 "testpatterny.y"
+#line 296 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>printer %s\n", (yyvsp[(2) - (2)].sval));
- global_printer = strdup((yyvsp[(2) - (2)].sval));
+ global_printer = stp_strdup((yyvsp[(2) - (2)].sval));
free((yyvsp[(2) - (2)].sval));
}
break;
case 30:
/* Line 1792 of yacc.c */
-#line 304 "testpatterny.y"
+#line 305 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>page_size_name %s\n", (yyvsp[(2) - (2)].sval));
@@ -1882,7 +1883,7 @@ yyreduce:
case 31:
/* Line 1792 of yacc.c */
-#line 313 "testpatterny.y"
+#line 314 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>page_size_custom %d %d\n", (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival));
@@ -1893,7 +1894,7 @@ yyreduce:
case 34:
/* Line 1792 of yacc.c */
-#line 325 "testpatterny.y"
+#line 326 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>parameter_string %s %s\n", (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].sval));
@@ -1905,7 +1906,7 @@ yyreduce:
case 35:
/* Line 1792 of yacc.c */
-#line 335 "testpatterny.y"
+#line 336 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>parameter_int %s %d\n", (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].ival));
@@ -1916,7 +1917,7 @@ yyreduce:
case 36:
/* Line 1792 of yacc.c */
-#line 344 "testpatterny.y"
+#line 345 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>parameter_bool %s %d\n", (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].ival));
@@ -1927,7 +1928,7 @@ yyreduce:
case 37:
/* Line 1792 of yacc.c */
-#line 353 "testpatterny.y"
+#line 354 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>parameter_float %s %f\n", (yyvsp[(2) - (3)].sval), (yyvsp[(3) - (3)].dval));
@@ -1938,7 +1939,7 @@ yyreduce:
case 38:
/* Line 1792 of yacc.c */
-#line 362 "testpatterny.y"
+#line 363 "testpatterny.y"
{
stp_curve_t *curve = stp_curve_create_from_string((yyvsp[(3) - (3)].sval));
if (getenv("STP_TESTPATTERN_DEBUG"))
@@ -1954,7 +1955,7 @@ yyreduce:
case 44:
/* Line 1792 of yacc.c */
-#line 378 "testpatterny.y"
+#line 379 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>density %f\n", (yyvsp[(2) - (2)].dval));
@@ -1964,7 +1965,7 @@ yyreduce:
case 45:
/* Line 1792 of yacc.c */
-#line 385 "testpatterny.y"
+#line 386 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>top %f\n", (yyvsp[(2) - (2)].dval));
@@ -1974,7 +1975,7 @@ yyreduce:
case 46:
/* Line 1792 of yacc.c */
-#line 392 "testpatterny.y"
+#line 393 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>left %f\n", (yyvsp[(2) - (2)].dval));
@@ -1984,7 +1985,7 @@ yyreduce:
case 47:
/* Line 1792 of yacc.c */
-#line 399 "testpatterny.y"
+#line 400 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>relative size\n");
@@ -1994,7 +1995,7 @@ yyreduce:
case 48:
/* Line 1792 of yacc.c */
-#line 406 "testpatterny.y"
+#line 407 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>size inches\n");
@@ -2004,7 +2005,7 @@ yyreduce:
case 49:
/* Line 1792 of yacc.c */
-#line 413 "testpatterny.y"
+#line 414 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>size pt\n");
@@ -2014,7 +2015,7 @@ yyreduce:
case 50:
/* Line 1792 of yacc.c */
-#line 420 "testpatterny.y"
+#line 421 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>size mm\n");
@@ -2024,7 +2025,7 @@ yyreduce:
case 56:
/* Line 1792 of yacc.c */
-#line 431 "testpatterny.y"
+#line 432 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>hsize %f\n", (yyvsp[(2) - (2)].dval));
@@ -2034,7 +2035,7 @@ yyreduce:
case 57:
/* Line 1792 of yacc.c */
-#line 438 "testpatterny.y"
+#line 439 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>vsize %f\n", (yyvsp[(2) - (2)].dval));
@@ -2044,7 +2045,7 @@ yyreduce:
case 58:
/* Line 1792 of yacc.c */
-#line 445 "testpatterny.y"
+#line 446 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>blackline %d\n", (yyvsp[(2) - (2)].ival));
@@ -2054,7 +2055,7 @@ yyreduce:
case 59:
/* Line 1792 of yacc.c */
-#line 453 "testpatterny.y"
+#line 454 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>noscale %d\n", (yyvsp[(2) - (2)].ival));
@@ -2064,7 +2065,7 @@ yyreduce:
case 60:
/* Line 1792 of yacc.c */
-#line 461 "testpatterny.y"
+#line 462 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>color_block1 %f %f %f (%d)\n", (yyvsp[(1) - (3)].dval), (yyvsp[(2) - (3)].dval), (yyvsp[(3) - (3)].dval),
@@ -2081,7 +2082,7 @@ yyreduce:
case 66:
/* Line 1792 of yacc.c */
-#line 485 "testpatterny.y"
+#line 486 "testpatterny.y"
{
int channel = find_color((yyvsp[(1) - (4)].sval));
if (getenv("STP_TESTPATTERN_DEBUG"))
@@ -2097,7 +2098,7 @@ yyreduce:
case 67:
/* Line 1792 of yacc.c */
-#line 499 "testpatterny.y"
+#line 500 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>color_block2b %d %f %f %f\n", (yyvsp[(2) - (5)].ival), (yyvsp[(3) - (5)].dval), (yyvsp[(4) - (5)].dval), (yyvsp[(5) - (5)].dval));
@@ -2112,7 +2113,7 @@ yyreduce:
case 76:
/* Line 1792 of yacc.c */
-#line 524 "testpatterny.y"
+#line 525 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>patvars %f %f %f %f %f\n", (yyvsp[(1) - (5)].dval), (yyvsp[(2) - (5)].dval), (yyvsp[(3) - (5)].dval), (yyvsp[(4) - (5)].dval), (yyvsp[(5) - (5)].dval));
@@ -2129,7 +2130,7 @@ yyreduce:
case 78:
/* Line 1792 of yacc.c */
-#line 542 "testpatterny.y"
+#line 543 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>xpattern\n");
@@ -2146,7 +2147,7 @@ yyreduce:
case 79:
/* Line 1792 of yacc.c */
-#line 557 "testpatterny.y"
+#line 558 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>grid %d\n", (yyvsp[(2) - (2)].ival));
@@ -2159,7 +2160,7 @@ yyreduce:
case 80:
/* Line 1792 of yacc.c */
-#line 568 "testpatterny.y"
+#line 569 "testpatterny.y"
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>image %d %d\n", (yyvsp[(2) - (3)].ival), (yyvsp[(3) - (3)].ival));
@@ -2178,7 +2179,7 @@ yyreduce:
case 81:
/* Line 1792 of yacc.c */
-#line 585 "testpatterny.y"
+#line 586 "testpatterny.y"
{
fprintf(stderr,"%s",(yyvsp[(1) - (1)].sval));
free((yyvsp[(1) - (1)].sval));
@@ -2187,7 +2188,7 @@ yyreduce:
case 85:
/* Line 1792 of yacc.c */
-#line 598 "testpatterny.y"
+#line 599 "testpatterny.y"
{
close_output();
if (global_output)
@@ -2199,7 +2200,7 @@ yyreduce:
case 86:
/* Line 1792 of yacc.c */
-#line 608 "testpatterny.y"
+#line 609 "testpatterny.y"
{
global_output = (yyvsp[(2) - (2)].sval);
}
@@ -2207,43 +2208,43 @@ yyreduce:
case 89:
/* Line 1792 of yacc.c */
-#line 617 "testpatterny.y"
+#line 618 "testpatterny.y"
{ start_job = 1; }
break;
case 90:
/* Line 1792 of yacc.c */
-#line 621 "testpatterny.y"
+#line 622 "testpatterny.y"
{ end_job = 1; }
break;
case 114:
/* Line 1792 of yacc.c */
-#line 631 "testpatterny.y"
+#line 632 "testpatterny.y"
{ global_did_something = 1; }
break;
case 119:
/* Line 1792 of yacc.c */
-#line 638 "testpatterny.y"
+#line 639 "testpatterny.y"
{ global_did_something = 1; }
break;
case 122:
/* Line 1792 of yacc.c */
-#line 645 "testpatterny.y"
+#line 646 "testpatterny.y"
{ global_did_something = 1; }
break;
case 128:
/* Line 1792 of yacc.c */
-#line 655 "testpatterny.y"
+#line 656 "testpatterny.y"
{ return 0; }
break;
case 129:
/* Line 1792 of yacc.c */
-#line 659 "testpatterny.y"
+#line 660 "testpatterny.y"
{
current_testpattern = get_next_testpattern();
}
@@ -2251,7 +2252,7 @@ yyreduce:
/* Line 1792 of yacc.c */
-#line 2255 "testpatterny.c"
+#line 2256 "testpatterny.c"
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -2483,5 +2484,5 @@ yyreturn:
/* Line 2055 of yacc.c */
-#line 665 "testpatterny.y"
+#line 666 "testpatterny.y"
diff --git a/src/testpattern/testpatterny.y b/src/testpattern/testpatterny.y
index 4f921e6..3b89160 100644
--- a/src/testpattern/testpatterny.y
+++ b/src/testpattern/testpatterny.y
@@ -26,6 +26,7 @@
#endif
#include <string.h>
+#include <strings.h>
#include <stdio.h>
#include <stdlib.h>
#include "testpattern.h"
@@ -295,7 +296,7 @@ printer: PRINTER tSTRING
{
if (getenv("STP_TESTPATTERN_DEBUG"))
fprintf(stderr, ">>>printer %s\n", $2);
- global_printer = strdup($2);
+ global_printer = stp_strdup($2);
free($2);
}
;
diff --git a/src/testpattern/uncompress-checksums.in b/src/testpattern/uncompress-checksums.in
new file mode 100644
index 0000000..e97fe25
--- /dev/null
+++ b/src/testpattern/uncompress-checksums.in
@@ -0,0 +1,47 @@
+#!@PERL@
+## Copyright (C) 2016 Robert Krawitz
+##
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2, or (at your option)
+## any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+use strict;
+
+my (%checksums);
+
+while (<>) {
+ chomp;
+ my ($sum, @keys) = split;
+ my (@pchunks) = ();
+ foreach my $k (@keys) {
+ $k =~ s/=/________/g;
+ $k =~ s/!/_______/g;
+ $k =~ s/"/______/g;
+ $k =~ s/,/_____/g;
+ $k =~ s/'/____/g;
+ $k =~ s/%/___/g;
+ $k =~ s/>/__/g;
+ my (@chunks) = split(/_/, $k, -1);
+ foreach my $i (0..$#chunks) {
+ if ($chunks[$i] eq '') {
+ $chunks[$i] = $pchunks[$i];
+ } elsif ($chunks[$i] =~ /^([0-9]+)\+(.*)/) {
+ $chunks[$i] = substr($pchunks[$i], 0, $1) . $2;
+ }
+ }
+ my ($answer) = join('_', @chunks);
+ $answer =~ s/(^[^:]*)_:(.*)/$2_$1/;
+ print "$sum *$answer.prn\n";
+ @pchunks = @chunks;
+ }
+}
diff --git a/src/xml/Makefile.in b/src/xml/Makefile.in
index 5b5c1d5..1816f06 100644
--- a/src/xml/Makefile.in
+++ b/src/xml/Makefile.in
@@ -255,6 +255,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/escp2/Makefile.in b/src/xml/escp2/Makefile.in
index f0f8623..e6075d0 100644
--- a/src/xml/escp2/Makefile.in
+++ b/src/xml/escp2/Makefile.in
@@ -193,6 +193,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/escp2/inks/Makefile.in b/src/xml/escp2/inks/Makefile.in
index ab0cfff..0999d8c 100644
--- a/src/xml/escp2/inks/Makefile.in
+++ b/src/xml/escp2/inks/Makefile.in
@@ -163,6 +163,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/escp2/inputslots/Makefile.in b/src/xml/escp2/inputslots/Makefile.in
index c323768..9d96498 100644
--- a/src/xml/escp2/inputslots/Makefile.in
+++ b/src/xml/escp2/inputslots/Makefile.in
@@ -163,6 +163,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/escp2/media/Makefile.in b/src/xml/escp2/media/Makefile.in
index 5cda659..f4fb48d 100644
--- a/src/xml/escp2/media/Makefile.in
+++ b/src/xml/escp2/media/Makefile.in
@@ -163,6 +163,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/escp2/mediasizes/Makefile.in b/src/xml/escp2/mediasizes/Makefile.in
index 78215ca..f8d0142 100644
--- a/src/xml/escp2/mediasizes/Makefile.in
+++ b/src/xml/escp2/mediasizes/Makefile.in
@@ -163,6 +163,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/escp2/model/Makefile.in b/src/xml/escp2/model/Makefile.in
index 36147cd..6a575ae 100644
--- a/src/xml/escp2/model/Makefile.in
+++ b/src/xml/escp2/model/Makefile.in
@@ -163,6 +163,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/escp2/qualitypresets/Makefile.in b/src/xml/escp2/qualitypresets/Makefile.in
index 4b88e4d..c1e6569 100644
--- a/src/xml/escp2/qualitypresets/Makefile.in
+++ b/src/xml/escp2/qualitypresets/Makefile.in
@@ -163,6 +163,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/escp2/weaves/Makefile.in b/src/xml/escp2/weaves/Makefile.in
index d541297..9975a0a 100644
--- a/src/xml/escp2/weaves/Makefile.in
+++ b/src/xml/escp2/weaves/Makefile.in
@@ -163,6 +163,7 @@ AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_CUPS_PPDS = @BUILD_CUPS_PPDS@
+BZIP2 = @BZIP2@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
diff --git a/src/xml/printers.xml b/src/xml/printers.xml
index 3fbdac3..45826f1 100644
--- a/src/xml/printers.xml
+++ b/src/xml/printers.xml
@@ -103,8 +103,8 @@
<printer translate="name" name="Canon BJC-1000" deviceid="MFG:Canon;MDL:BJC-1000;DES:Canon BJC-1000;CMD:BJL,BJRaster,BSCC,TXT01;" driver="bjc-1000" manufacturer="Canon" model="1000" parameters="density_800_params" />
<printer translate="name" name="Canon BJC-2000" driver="bjc-2000" manufacturer="Canon" model="2000" parameters="density_800_params" />
<printer translate="name" name="Canon BJC-2010" driver="bjc-2010" manufacturer="Canon" model="2000" parameters="density_800_params" />
- <printer translate="name" name="Canon BJC-2100" deviceid="MFG:Canon;MDL:BJC-2100;DES:Canon BJC-2100;" driver="bjc-2100" manufacturer="Canon" model="4300" parameters="gamma_750_params" />
- <printer translate="name" name="Canon BJC-2110" driver="bjc-2110" manufacturer="Canon" model="2000" parameters="density_800_params" />
+ <printer translate="name" name="Canon BJC-2100" deviceid="MFG:Canon;MDL:BJC-2100;DES:Canon BJC-2100;" driver="bjc-2100" manufacturer="Canon" model="2100" parameters="gamma_750_params" />
+ <printer translate="name" name="Canon BJC-2110" driver="bjc-2110" manufacturer="Canon" model="2100" parameters="density_800_params" />
<printer translate="name" name="Canon BJC-3000" deviceid="MFG:Canon;MDL:BJC-3000;DES:Canon BJC-3000;CMD:BJL,BJRaster3,BSCC,TXT01,BJScan2;" driver="bjc-3000" manufacturer="Canon" model="3000" parameters="density_800_params" />
<printer translate="name" name="Canon BJC-4000" driver="bjc-4000" manufacturer="Canon" model="4300" parameters="gamma_750_params" />
<printer translate="name" name="Canon BJC-4300" deviceid="MFG:Canon;MDL:BJC-4300;DES:Canon BJC-4300;CMD:BJ,LQ,BJL,BJRaster,BSCC;" driver="bjc-4300" manufacturer="Canon" model="4300" parameters="gamma_750_params" />
@@ -1285,19 +1285,19 @@
<parameter type="float" name="Gamma">1.000</parameter>
<parameter type="float" name="Density">1.000</parameter>
</parameters>
- <printer translate="name" name="Datamax-O'Neil I4212e Mark II" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:I4212e Mark II;" color="false" driver="datamax_oneil_I4212e" manufacturer="Datamax O'Neil" model="10017" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil I4310e Mark II" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:I4310e Mark II;" color="false" driver="datamax_oneil_I4310e" manufacturer="Datamax O'Neil" model="10018" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil I4606e Mark II" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:I4606e Mark II;" color="false" driver="datamax_oneil_I4606e" manufacturer="Datamax O'Neil" model="10020" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil E4204B Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4204B Mark III;" color="false" driver="datamax_oneil_E4204B" manufacturer="Datamax O'Neil" model="10021" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil E4304B Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4304B Mark III;" color="false" driver="datamax_oneil_E4304B" manufacturer="Datamax O'Neil" model="10022" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil E4205A Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4205A Mark III;" color="false" driver="datamax_oneil_E4205A" manufacturer="Datamax O'Neil" model="10023" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil E4305A Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4305A Mark III;" color="false" driver="datamax_oneil_E4305A" manufacturer="Datamax O'Neil" model="10024" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil E4206P Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4206P Mark III;" color="false" driver="datamax_oneil_E4206P" manufacturer="Datamax O'Neil" model="10025" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil E4305P Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4305P Mark III;" color="false" driver="datamax_oneil_E4305P" manufacturer="Datamax O'Neil" model="10026" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil E4206L Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4206L Mark III;" color="false" driver="datamax_oneil_E4206L" manufacturer="Datamax O'Neil" model="10027" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil E4305L Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4305L Mark III;" color="false" driver="datamax_oneil_E4305L" manufacturer="Datamax O'Neil" model="10028" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil RL3e" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:RL3e;" color="false" driver="datamax_oneil_RL3e" manufacturer="Datamax O'Neil" model="10029" parameters="dpl_params" />
- <printer translate="name" name="Datamax-O'Neil RL4e" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:RL4e;" color="false" driver="datamax_oneil_RL4e" manufacturer="Datamax O'Neil" model="10030" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil I4212e Mark II" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:I4212e Mark II;" color="false" driver="datamax_oneil_I4212e" manufacturer="DatamaxONeil" model="10017" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil I4310e Mark II" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:I4310e Mark II;" color="false" driver="datamax_oneil_I4310e" manufacturer="DatamaxONeil" model="10018" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil I4606e Mark II" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:I4606e Mark II;" color="false" driver="datamax_oneil_I4606e" manufacturer="DatamaxONeil" model="10020" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil E4204B Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4204B Mark III;" color="false" driver="datamax_oneil_E4204B" manufacturer="DatamaxONeil" model="10021" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil E4304B Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4304B Mark III;" color="false" driver="datamax_oneil_E4304B" manufacturer="DatamaxONeil" model="10022" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil E4205A Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4205A Mark III;" color="false" driver="datamax_oneil_E4205A" manufacturer="DatamaxONeil" model="10023" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil E4305A Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4305A Mark III;" color="false" driver="datamax_oneil_E4305A" manufacturer="DatamaxONeil" model="10024" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil E4206P Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4206P Mark III;" color="false" driver="datamax_oneil_E4206P" manufacturer="DatamaxONeil" model="10025" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil E4305P Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4305P Mark III;" color="false" driver="datamax_oneil_E4305P" manufacturer="DatamaxONeil" model="10026" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil E4206L Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4206L Mark III;" color="false" driver="datamax_oneil_E4206L" manufacturer="DatamaxONeil" model="10027" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil E4305L Mark III" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:E4305L Mark III;" color="false" driver="datamax_oneil_E4305L" manufacturer="DatamaxONeil" model="10028" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil RL3e" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:RL3e;" color="false" driver="datamax_oneil_RL3e" manufacturer="DatamaxONeil" model="10029" parameters="dpl_params" />
+ <printer translate="name" name="Datamax-ONeil RL4e" deviceid="MFG:Datamax-O'Neil;CMD:DPL;MDL:RL4e;" color="false" driver="datamax_oneil_RL4e" manufacturer="DatamaxONeil" model="10030" parameters="dpl_params" />
</family>
<family name="escp2">
<parameters name="standard_params">
@@ -2947,8 +2947,6 @@
<printer translate="name" name="Mitsubishi CP-3020DAE" driver="mitsubishi-3020dae" manufacturer="Mitsubishi" model="4102">EXPERIMENTAL</printer>
<printer translate="name" name="Mitsubishi CP-9550D" deviceid="MFG:MITSUBISHI;CMD:MEL;MDL:CP9550D ;CLS:PRINTER;DES:MITSUBISHI CP9550D" driver="mitsubishi-9550d" manufacturer="Mitsubishi" model="4103" parameters="nativecopies" />
<printer translate="name" name="Mitsubishi CP-9550DW" driver="mitsubishi-9550dw" manufacturer="Mitsubishi" model="4103" parameters="nativecopies" />
- <printer translate="name" name="Mitsubishi CP-9550DZ" deviceid="MFG:MITSUBISHI;CMD:MEL;MDL:CP9550DZ;CLS:PRINTER;DES:MITSUBISHI CP9550DZ;" driver="mitsubishi-9550dz" manufacturer="Mitsubishi" model="4103" parameters="nativecopies">EXPERIMENTAL</printer>
- <printer translate="name" name="Mitsubishi CP-9550DW-S" driver="mitsubishi-9550dw-s" manufacturer="Mitsubishi" model="4103" parameters="nativecopies">EXPERIMENTAL</printer>
<printer translate="name" name="Mitsubishi CP-9810D" driver="mitsubishi-9810d" manufacturer="Mitsubishi" model="4104" />
<printer translate="name" name="Mitsubishi CP-9810DW" driver="mitsubishi-9810dw" manufacturer="Mitsubishi" model="4104" />
<printer translate="name" name="Mitsubishi CP-D70DW" deviceid="MFG:MITSUBISHI;CMD:MEL;MDL:CP60D70D707D;CLS:PRINTER;DES:MITSUBISHI CP60D70D707D" driver="mitsubishi-d70dw" manufacturer="Mitsubishi" model="4105" parameters="nativecopies">EXPERIMENTAL</printer>
@@ -2957,6 +2955,9 @@
<printer translate="name" name="Mitsubishi CP-D80DW" driver="mitsubishi-d80dw" manufacturer="Mitsubishi" model="4107" parameters="nativecopies">EXPERIMENTAL</printer>
<printer translate="name" name="Kodak 305" deviceid="MFG:KODAK;CMD:KODAK305;MDL:305 Photo Printer;CLS:PRINTER;DES:KODAK 305 Photo Printer" driver="kodak-305" manufacturer="Kodak" model="4108" parameters="nativecopies">EXPERIMENTAL</printer>
<printer translate="name" name="Mitsubishi CP-D90DW" driver="mitsubishi-d90dw" manufacturer="Mitsubishi" model="4109" parameters="nativecopies">EXPERIMENTAL</printer>
+ <printer translate="name" name="Mitsubishi CP-9600DW" driver="mitsubishi-9600dw" manufacturer="Mitsubishi" model="4110" parameters="nativecopies">EXPERIMENTAL</printer>
+ <printer translate="name" name="Mitsubishi CP-9550DZ" deviceid="MFG:MITSUBISHI;CMD:MEL;MDL:CP9550DZ;CLS:PRINTER;DES:MITSUBISHI CP9550DZ;" driver="mitsubishi-9550dz" manufacturer="Mitsubishi" model="4111" parameters="nativecopies" />
+ <printer translate="name" name="Mitsubishi CP-9550DW-S" driver="mitsubishi-9550dw-s" manufacturer="Mitsubishi" model="4111" parameters="nativecopies" />
<printer translate="name" name="Shinko CHC-S9045" driver="shinko-chcs9045" manufacturer="Shinko" model="5000" />
<printer translate="name" name="Shinko CHC-S2145" deviceid="MFG:SHINKO;CMD:SUPCC;MDL:CHC-S2145;CLS:PRINTER;DES:SHINKO CHC-S2145;" driver="shinko-chcs2145" manufacturer="Shinko" model="5001" parameters="nativecopies" />
<printer translate="name" name="Sinfonia S2145/S2" driver="sinfonia-chcs2145" manufacturer="Sinfonia" model="5001" parameters="nativecopies" />