diff options
Diffstat (limited to 'test/escp2-weavetest.c')
-rw-r--r-- | test/escp2-weavetest.c | 307 |
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); } |