summaryrefslogtreecommitdiff
path: root/test/escp2-weavetest.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/escp2-weavetest.c')
-rw-r--r--test/escp2-weavetest.c307
1 files changed, 189 insertions, 118 deletions
diff --git a/test/escp2-weavetest.c b/test/escp2-weavetest.c
index 9ac8532..48ebea8 100644
--- a/test/escp2-weavetest.c
+++ b/test/escp2-weavetest.c
@@ -1,5 +1,5 @@
/*
- * "$Id: escp2-weavetest.c,v 1.19.4.2 2002/07/23 00:54:08 rlk Exp $"
+ * "$Id: escp2-weavetest.c,v 1.36 2005/05/27 02:11:51 rlk Exp $"
*
* Print plug-in EPSON ESC/P2 driver for the GIMP.
*
@@ -60,20 +60,16 @@
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
-#include "../lib/libprintut.h"
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
+#include <limits.h>
#define DEBUG_SIGNAL
#define MIN(x, y) ((x) <= (y) ? (x) : (y))
-#ifdef INCLUDE_GIMP_PRINT_H
-#include INCLUDE_GIMP_PRINT_H
-#else
-#include <gimp-print/gimp-print.h>
-#endif
-#include <gimp-print-internal.h>
+#include <gutenprint/gutenprint.h>
+#include <gutenprint-internal.h>
const char header[] = "Legend:\n"
"A Negative pass number.\n"
@@ -99,9 +95,11 @@ const char header[] = "Legend:\n"
"N Two different active passes are in the same slot.\n"
"O Number of missing start rows is incorrect.\n"
"P Physical row number out of bounds.\n"
-"Q Pass starts earlier than a prior pass.\n";
+"Q Pass starts earlier than a prior pass.\n"
+"R Pass is never flushed.\n"
+"S Pass is flushed but not created.\n";
-stp_vars_t v;
+int *passes_flushed;
static void
print_header(void)
@@ -110,10 +108,9 @@ print_header(void)
}
static void
-flush_pass(stp_softweave_t *sw, int passno, int model, int width,
- int hoffset, int ydpi, int xdpi, int physical_xdpi,
- int vertical_subpass)
+flush_pass(stp_vars_t *v, int passno, int vertical_subpass)
{
+ passes_flushed[passno] = 1;
}
static void
@@ -131,6 +128,7 @@ run_one_weavetest(int physjets, int physsep, int hpasses, int vpasses,
int i;
int j;
stp_weave_t w;
+ stp_vars_t *v;
int errors[26];
char errcodes[26];
int total_errors = 0;
@@ -144,8 +142,14 @@ run_one_weavetest(int physjets, int physsep, int hpasses, int vpasses,
signed char *rowdetail;
int *current_slot;
int vmod;
- void *sw;
int head_offset[8];
+ int last_good_pass;
+
+ v = stp_vars_create();
+ stp_set_outfunc(v, writefunc);
+ stp_set_errfunc(v, writefunc);
+ stp_set_outdata(v, stdout);
+ stp_set_errdata(v, stdout);
memset(errors, 0, sizeof(int) * 26);
#if 0
@@ -158,32 +162,52 @@ run_one_weavetest(int physjets, int physsep, int hpasses, int vpasses,
for(i=0; i<8; i++)
head_offset[i] = 0;
- if(color_jet_arrangement != 0)
+ switch (color_jet_arrangement)
{
+ case 1: /* C80-type */
head_offset[0] = (physjets+1)*physsep;
head_offset[1] = (physjets+1)*physsep;
head_offset[2] = 2*(physjets+1)*physsep;
phys_lines += 2*(physjets+1)*physsep;
+ break;
+ case 2: /* Offset by 1 (f360) */
+ if (physsep % 2 == 0)
+ {
+ head_offset[1] = physsep / 2;
+ head_offset[2] = physsep / 2;
+ phys_lines += physsep / 2;
+ }
+ break;
+ case 3: /* Offset by 1 or 2 (cx3650-type) */
+ if (physsep % 3 == 0)
+ {
+ head_offset[1] = physsep * 2 / 3;
+ head_offset[2] = physsep / 3;
+ phys_lines += physsep * 2 / 3;
+ }
+ break;
+ default: /* Normal */
+ break;
}
- sw = stp_initialize_weave(physjets, physsep, hpasses, vpasses, subpasses,
- 7, 1, 128, nrows, first_line,
- phys_lines, strategy, head_offset, v, flush_pass,
- stp_fill_tiff, stp_pack_tiff,
- stp_compute_tiff_linewidth);
- if (!sw)
- return 1;
- passstarts = xmalloc(sizeof(int) * (nrows + physsep));
- logpassstarts = xmalloc(sizeof(int) * (nrows + physsep));
- passends = xmalloc(sizeof(int) * (nrows + physsep));
- passcounts = xmalloc(sizeof(int) * (nrows + physsep));
+ stp_initialize_weave(v, physjets, physsep, hpasses, vpasses, subpasses,
+ 7, 1, 128, nrows, first_line,
+ phys_lines, head_offset, strategy, flush_pass,
+ stp_fill_tiff, stp_pack_tiff,
+ stp_compute_tiff_linewidth);
+
+ passstarts = stp_malloc(sizeof(int) * (nrows + physsep));
+ logpassstarts = stp_malloc(sizeof(int) * (nrows + physsep));
+ passends = stp_malloc(sizeof(int) * (nrows + physsep));
+ passcounts = stp_malloc(sizeof(int) * (nrows + physsep));
+ passes_flushed = stp_malloc(sizeof(int) * (nrows + physsep));
vmod = 2 * physsep * hpasses * vpasses * subpasses;
if (vmod == 0)
vmod = 1;
- current_slot = xmalloc(sizeof(int) * vmod);
- physpassstuff = xmalloc((nrows + physsep));
- rowdetail = xmalloc((nrows + physsep) * physjets);
+ current_slot = stp_malloc(sizeof(int) * vmod);
+ physpassstuff = stp_malloc((nrows + physsep));
+ rowdetail = stp_malloc((nrows + physsep) * physjets);
memset(rowdetail, 0, (nrows + physsep) * physjets);
memset(physpassstuff, -1, (nrows + physsep));
memset(current_slot, 0, (sizeof(int) * vmod));
@@ -197,6 +221,8 @@ run_one_weavetest(int physjets, int physsep, int hpasses, int vpasses,
current_slot[i] = -1;
for (i = 0; i < (nrows + physsep); i++)
{
+ passes_flushed[i] = 0;
+ logpassstarts[i] = INT_MIN;
passstarts[i] = -1;
passends[i] = -1;
}
@@ -206,7 +232,7 @@ run_one_weavetest(int physjets, int physsep, int hpasses, int vpasses,
for (j = 0; j < hpasses * vpasses * subpasses; j++)
{
int physrow;
- stp_weave_parameters_by_row((stp_softweave_t *)sw, i+first_line, j, &w);
+ stp_weave_parameters_by_row(v, i+first_line, j, &w);
physrow = w.logicalpassstart + physsep * w.jet;
errcodes[0] = (w.pass < 0 ? (errors[0]++, 'A') : ' ');
@@ -254,9 +280,12 @@ run_one_weavetest(int physjets, int physsep, int hpasses, int vpasses,
errcodes[16] = '\0';
if (!quiet)
- printf("%15s%5d %5d %5d %10d %10d %10d %10d\n",
- errcodes, w.row, w.pass, w.jet, w.missingstartrows,
- w.logicalpassstart, w.physpassstart, w.physpassend);
+ {
+ printf("%15s%5d %5d %5d %10d %10d %10d %10d\n",
+ errcodes, w.row, w.pass, w.jet, w.missingstartrows,
+ w.logicalpassstart, w.physpassstart, w.physpassend);
+ fflush(stdout);
+ }
if (w.pass >= 0 && w.pass < (nrows + physsep))
{
if (w.physpassend == w.row)
@@ -284,7 +313,7 @@ run_one_weavetest(int physjets, int physsep, int hpasses, int vpasses,
if (!quiet)
printf("Unterminated passes:\n");
for (i = 0; i <= newestpass; i++)
- if (passends[i] >= -1 && passends[i] < nrows)
+ if (passends[i] >= -1 && passends[i] < nrows && logpassstarts[i] != INT_MIN)
{
if (!quiet)
printf("%d %d\n", i, passends[i]);
@@ -295,115 +324,157 @@ run_one_weavetest(int physjets, int physsep, int hpasses, int vpasses,
printf("Last terminated pass: %d\n", lastpass);
printf("Pass starts:\n");
}
+ last_good_pass = 0;
+ errcodes[3] = '\0';
for (i = 0; i <= newestpass; i++)
{
- char qchar = ' ';
- if (i > 0)
- qchar = logpassstarts[i] < logpassstarts[i - 1] ?
- (errors[17]++, 'Q') : ' ';
- if (!quiet)
- printf("%c %d %d\n", qchar, i, logpassstarts[i]);
+ if (logpassstarts[i] != INT_MIN)
+ {
+ if (i > 0)
+ errcodes[0] = logpassstarts[i] < logpassstarts[last_good_pass] ?
+ (errors[17]++, 'Q') : ' ';
+ errcodes[1] = passes_flushed[i] ? (errors[18]++, 'R') : ' ';
+ errcodes[2] = ' ';
+ if (!quiet)
+ printf("%s %d %d\n", errcodes, i, logpassstarts[i]);
+ last_good_pass = i;
+ }
+ else if (!quiet)
+ {
+ errcodes[0] = ' ';
+ errcodes[1] = ' ';
+ errcodes[2] = '*';
+ printf("%s %d\n", errcodes, i);
+ }
}
for (i = 0; i < 26; i++)
total_errors += errors[i];
- stp_destroy_weave(sw);
- free(rowdetail);
- free(physpassstuff);
- free(current_slot);
- free(passcounts);
- free(passends);
- free(logpassstarts);
- free(passstarts);
+ stp_free(rowdetail);
+ stp_free(physpassstuff);
+ stp_free(current_slot);
+ stp_free(passcounts);
+ stp_free(passends);
+ stp_free(logpassstarts);
+ stp_free(passstarts);
+ stp_free(passes_flushed);
if (!quiet || (quiet == 1 && total_errors > 0))
printf("%d total error%s\n", total_errors, total_errors == 1 ? "" : "s");
- if (total_errors > 0)
- return 1;
- else
- return 0;
+ stp_vars_destroy(v);
+ return total_errors;
}
-
-int
-main(int argc, char **argv)
+static int
+run_weavetest_from_stdin(void)
{
int nrows;
int physjets;
int physsep;
int hpasses, vpasses, subpasses;
int first_line, phys_lines;
- int strategy = 1;
int color_jet_arrangement;
- int quiet = 0;
- int status = 0;
-
- /*
- * Initialise libgimpprint
- */
-
- stp_init();
-
- v = stp_allocate_vars();
- stp_set_outfunc(v, writefunc);
- stp_set_errfunc(v, writefunc);
- stp_set_outdata(v, stdout);
- stp_set_errdata(v, stdout);
-
- if (argc == 1)
+ int strategy;
+ int previous_strategy = -1;
+ int previous_jets = -1;
+ int previous_separation = -1;
+ int total_cases = 0;
+ int failures = 0;
+ char linebuf[4096];
+ while (fgets(linebuf, 4096, stdin))
{
- int total_cases = 0;
- int failures = 0;
- char linebuf[4096];
- while (fgets(linebuf, 4096, stdin))
+ int retval;
+ (void) sscanf(linebuf, "%d%d%d%d%d%d%d%d%d%d", &physjets, &physsep,
+ &hpasses, &vpasses, &subpasses, &nrows, &first_line,
+ &phys_lines, &color_jet_arrangement, &strategy);
+ fflush(stdout);
+ if (vpasses * subpasses > physjets)
+ continue;
+ retval = run_one_weavetest(physjets, physsep, hpasses, vpasses,
+ subpasses, nrows, first_line, phys_lines,
+ color_jet_arrangement, strategy, 2);
+ if (getenv("QUIET"))
+ {
+ /* Assume that we're running within run-weavetest, and */
+ /* print out the heartbeat */
+
+ if (previous_strategy != strategy)
+ {
+ printf("%s%d:", previous_strategy == -1 ? "" : "\n", strategy);
+ previous_jets = -1;
+ previous_separation = -1;
+ }
+ if (previous_jets != physjets)
+ {
+ printf("%d", physjets);
+ previous_separation = -1;
+ }
+ if (previous_separation != physsep)
+ printf(".");
+ previous_strategy = strategy;
+ previous_jets = physjets;
+ previous_separation = physsep;
+ }
+ if (!getenv("QUIET") || retval)
{
- int retval;
- (void) sscanf(linebuf, "%d%d%d%d%d%d%d%d%d", &physjets, &physsep,
- &hpasses, &vpasses, &subpasses, &nrows, &first_line,
- &phys_lines, &color_jet_arrangement);
- fflush(stdout);
- if (vpasses * subpasses > physjets)
- continue;
- printf("%d %d %d %d %d %d %d %d %d ", physjets, physsep, hpasses,
- vpasses, subpasses, nrows, first_line, phys_lines,
- color_jet_arrangement);
- retval = run_one_weavetest(physjets, physsep, hpasses, vpasses,
- subpasses, nrows, first_line, phys_lines,
- color_jet_arrangement, strategy, 1);
- total_cases++;
+ printf("%d %d %d %d %d %d %d %d %d %d ", physjets, physsep,
+ hpasses, vpasses, subpasses, nrows, first_line,
+ phys_lines, color_jet_arrangement, strategy);
if (retval)
- failures++;
- else
- putc('\n', stdout);
- fflush(stdout);
- status |= retval;
+ printf("%d total error%s", retval, retval == 1 ? "" : "s");
+ putc('\n', stdout);
}
- printf("Total cases: %d, failures: %d\n", total_cases, failures);
- return status;
+
+ total_cases++;
+ if (retval)
+ failures++;
+ fflush(stdout);
}
- if (argc != 10)
+ printf("%sTotal cases: %d, failures: %d\n",
+ (getenv("QUIET") ? "\n" : ""), total_cases, failures);
+ return (failures ? 1 : 0);
+}
+
+static int
+run_weavetest_from_cmdline(int argc, char **argv)
+{
+ if (argc != 11)
{
- fprintf(stderr, "Usage: %s jets separation hpasses vpasses subpasses rows start end arrangement\n",
+ fprintf(stderr, "Usage: %s jets separation hpasses vpasses subpasses rows start end arrangement strategy\n",
argv[0]);
return 2;
}
- physjets = atoi(argv[1]);
- physsep = atoi(argv[2]);
- hpasses = atoi(argv[3]);
- vpasses = atoi(argv[4]);
- subpasses = atoi(argv[5]);
- nrows = atoi(argv[6]);
- first_line = atoi(argv[7]);
- phys_lines = atoi(argv[8]);
- color_jet_arrangement = atoi(argv[9]);
-#if 0
- if (physjets < hpasses * vpasses * subpasses)
+ else
{
- fprintf(stderr, "Oversample exceeds jets\n");
- return 1;
+ int quiet = 0;
+ int physjets = atoi(argv[1]);
+ int physsep = atoi(argv[2]);
+ int hpasses = atoi(argv[3]);
+ int vpasses = atoi(argv[4]);
+ int subpasses = atoi(argv[5]);
+ int nrows = atoi(argv[6]);
+ int first_line = atoi(argv[7]);
+ int phys_lines = atoi(argv[8]);
+ int color_jet_arrangement = atoi(argv[9]);
+ int strategy = atoi(argv[10]);
+ int status;
+ if (getenv("QUIET"))
+ quiet = 2;
+ status = run_one_weavetest(physjets, physsep, hpasses, vpasses,
+ subpasses, nrows, first_line, phys_lines,
+ color_jet_arrangement, strategy, quiet);
+ if (status)
+ return 1;
+ else
+ return 0;
}
-#endif
- if (getenv("QUIET"))
- quiet = 2;
- return (run_one_weavetest(physjets, physsep, hpasses, vpasses,
- subpasses, nrows, first_line, phys_lines,
- color_jet_arrangement, strategy, quiet));
+}
+
+int
+main(int argc, char **argv)
+{
+ stp_init();
+
+ if (argc == 1)
+ return run_weavetest_from_stdin();
+ else
+ return run_weavetest_from_cmdline(argc, argv);
}