diff options
Diffstat (limited to 'src/testpattern')
-rw-r--r-- | src/testpattern/Makefile.am | 7 | ||||
-rw-r--r-- | src/testpattern/Makefile.in | 33 | ||||
-rw-r--r-- | src/testpattern/printer_options.c | 246 | ||||
-rw-r--r-- | src/testpattern/run-testpattern-2.in | 236 | ||||
-rw-r--r-- | src/testpattern/testpattern.c | 5 |
5 files changed, 512 insertions, 15 deletions
diff --git a/src/testpattern/Makefile.am b/src/testpattern/Makefile.am index 45027ff..6db8e05 100644 --- a/src/testpattern/Makefile.am +++ b/src/testpattern/Makefile.am @@ -1,4 +1,4 @@ -## $Id: Makefile.am,v 1.23 2005/11/21 11:16:23 rleigh Exp $ +## $Id: Makefile.am,v 1.24 2006/05/12 01:10:19 rlk Exp $ ## Copyright (C) 2000 Roger Leigh ## ## This program is free software; you can redistribute it and/or modify @@ -26,14 +26,14 @@ include $(top_srcdir)/scripts/global.mk pkgdatadir = $(datadir)/$(PACKAGE)/samples -TESTS = run-testpattern run-testpattern-1 +TESTS = run-testpattern run-testpattern-1 run-testpattern-2 ## Programs if BUILD_TESTPATTERN bin_PROGRAMS = testpattern -noinst_PROGRAMS = printers +noinst_PROGRAMS = printers printer_options endif AM_LFLAGS = -i @@ -46,6 +46,7 @@ testpatternl.o: testpatterny.o testpattern.o: testpatterny.o printers_LDADD = $(GUTENPRINT_LIBS) +printer_options_LDADD = $(GUTENPRINT_LIBS) ## Data diff --git a/src/testpattern/Makefile.in b/src/testpattern/Makefile.in index 0a5dbd8..698168d 100644 --- a/src/testpattern/Makefile.in +++ b/src/testpattern/Makefile.in @@ -16,6 +16,9 @@ # Variables +#export STP_MODULE_PATH = $(top_builddir)/src/main/.libs:$(top_builddir)/src/main +#export STP_DATA_PATH = $(top_srcdir)/src/main + srcdir = @srcdir@ top_srcdir = @top_srcdir@ @@ -39,10 +42,11 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ - $(top_srcdir)/scripts/global.mk testpatternl.c testpatterny.c \ - testpatterny.h + $(srcdir)/run-testpattern-2.in $(top_srcdir)/scripts/global.mk \ + testpatternl.c testpatterny.c testpatterny.h @BUILD_TESTPATTERN_TRUE@bin_PROGRAMS = testpattern$(EXEEXT) -@BUILD_TESTPATTERN_TRUE@noinst_PROGRAMS = printers$(EXEEXT) +@BUILD_TESTPATTERN_TRUE@noinst_PROGRAMS = printers$(EXEEXT) \ +@BUILD_TESTPATTERN_TRUE@ printer_options$(EXEEXT) subdir = src/testpattern ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ @@ -56,13 +60,16 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = +CONFIG_CLEAN_FILES = run-testpattern-2 am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) +printer_options_SOURCES = printer_options.c +printer_options_OBJECTS = printer_options.$(OBJEXT) +am__DEPENDENCIES_1 = $(top_builddir)/src/main/libgutenprint.la +printer_options_DEPENDENCIES = $(am__DEPENDENCIES_1) printers_SOURCES = printers.c printers_OBJECTS = printers.$(OBJEXT) -am__DEPENDENCIES_1 = $(top_builddir)/src/main/libgutenprint.la printers_DEPENDENCIES = $(am__DEPENDENCIES_1) am_testpattern_OBJECTS = testpattern.$(OBJEXT) testpatterny.$(OBJEXT) \ testpatternl.$(OBJEXT) @@ -84,8 +91,8 @@ LTLEXCOMPILE = $(LIBTOOL) --mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS) YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS) LTYACCCOMPILE = $(LIBTOOL) --mode=compile $(YACC) $(YFLAGS) \ $(AM_YFLAGS) -SOURCES = printers.c $(testpattern_SOURCES) -DIST_SOURCES = printers.c $(testpattern_SOURCES) +SOURCES = printer_options.c printers.c $(testpattern_SOURCES) +DIST_SOURCES = printer_options.c printers.c $(testpattern_SOURCES) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ @@ -281,6 +288,7 @@ USE_NLS = @USE_NLS@ USE_NLS_FALSE = @USE_NLS_FALSE@ USE_NLS_TRUE = @USE_NLS_TRUE@ VERSION = @VERSION@ +WHICH_PPDS = @WHICH_PPDS@ XGETTEXT = @XGETTEXT@ YACC = @YACC@ ac_ct_AR = @ac_ct_AR@ @@ -340,12 +348,13 @@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include $(LOCAL_CPPFLAGS) $(GNUCFLAGS) -TESTS = run-testpattern run-testpattern-1 +TESTS = run-testpattern run-testpattern-1 run-testpattern-2 AM_LFLAGS = -i AM_YFLAGS = -d testpattern_SOURCES = testpattern.c testpatterny.y testpatternl.l testpattern.h testpattern_LDADD = $(GUTENPRINT_LIBS) printers_LDADD = $(GUTENPRINT_LIBS) +printer_options_LDADD = $(GUTENPRINT_LIBS) 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 @@ -382,6 +391,8 @@ $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +run-testpattern-2: $(top_builddir)/config.status $(srcdir)/run-testpattern-2.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @@ -417,6 +428,9 @@ clean-noinstPROGRAMS: echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done +printer_options$(EXEEXT): $(printer_options_OBJECTS) $(printer_options_DEPENDENCIES) + @rm -f printer_options$(EXEEXT) + $(LINK) $(printer_options_LDFLAGS) $(printer_options_OBJECTS) $(printer_options_LDADD) $(LIBS) printers$(EXEEXT): $(printers_OBJECTS) $(printers_DEPENDENCIES) @rm -f printers$(EXEEXT) $(LINK) $(printers_LDFLAGS) $(printers_OBJECTS) $(printers_LDADD) $(LIBS) @@ -749,9 +763,6 @@ uninstall-am: uninstall-binPROGRAMS uninstall-info-am \ @SET_MAKE@ -export STP_MODULE_PATH = $(top_builddir)/src/main/.libs:$(top_builddir)/src/main -export STP_DATA_PATH = $(top_srcdir)/src/main - # Rules $(top_builddir)/src/main/libgutenprint.la: diff --git a/src/testpattern/printer_options.c b/src/testpattern/printer_options.c new file mode 100644 index 0000000..9381be0 --- /dev/null +++ b/src/testpattern/printer_options.c @@ -0,0 +1,246 @@ +/* + * "$Id: printer_options.c,v 1.1 2006/05/12 01:10:19 rlk Exp $" + * + * Dump the per-printer options for Grant Taylor's *-omatic database + * + * Copyright 2000 Robert Krawitz (rlk@alum.mit.edu) + * + * 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 of the License, 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. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif +#include <stdio.h> +#include <string.h> +#include <gutenprint/gutenprint.h> +#include <gutenprint/gutenprint-intl.h> + +int +main(int argc, char **argv) +{ + int i, j, k; + stp_parameter_level_t max_level = STP_PARAMETER_LEVEL_ADVANCED4; + if (argc > 1 && !strcmp(argv[1], "-s")) + max_level = STP_PARAMETER_LEVEL_BASIC; + + stp_init(); + for (i = 0; i < stp_printer_model_count(); i++) + { + stp_parameter_list_t params; + int nparams; + stp_parameter_t desc; + const stp_printer_t *printer = stp_get_printer_by_index(i); + const char *driver = stp_printer_get_driver(printer); + const char *family = stp_printer_get_family(printer); + stp_vars_t *pv = stp_vars_create_copy(stp_printer_get_defaults(printer)); + int tcount = 0; + size_t count; + int printer_is_color = 0; + if (strcmp(family, "ps") == 0 || strcmp(family, "raw") == 0) + continue; + + /* Set Job Mode to "Job" as this enables the Duplex option */ + stp_set_string_parameter(pv, "JobMode", "Job"); + + stp_describe_parameter(pv, "PrintingMode", &desc); + if (stp_string_list_is_present(desc.bounds.str, "Color")) + printer_is_color = 1; + stp_parameter_description_destroy(&desc); + if (printer_is_color) + stp_set_string_parameter(pv, "PrintingMode", "Color"); + else + stp_set_string_parameter(pv, "PrintingMode", "BW"); + stp_set_string_parameter(pv, "ChannelBitDepth", "8"); + + printf("# Printer model %s, long name `%s'\n", driver, + stp_printer_get_long_name(printer)); + + printf("$families{'%s'} = '%s';\n", driver, family); + printf("$models{'%s'} = '%d';\n", driver, stp_get_model_id(pv)); + + params = stp_get_parameter_list(pv); + nparams = stp_parameter_list_count(params); + + for (k = 0; k < nparams; k++) + { + const stp_parameter_t *p = stp_parameter_list_param(params, k); + if (p->read_only || + (p->p_level > max_level && strcmp(p->name, "Resolution") != 0) || + (p->p_class != STP_PARAMETER_CLASS_OUTPUT && + p->p_class != STP_PARAMETER_CLASS_CORE && + p->p_class != STP_PARAMETER_CLASS_FEATURE)) + continue; + count = 0; + stp_describe_parameter(pv, p->name, &desc); + if (desc.is_active) + { + printf("$longnames{'%s'} = '%s';\n", + desc.name, desc.text); + printf("$param_classes{'%s'} = %d;\n", + desc.name, desc.p_class); + printf("$param_levels{'%s'} = %d;\n", + desc.name, desc.p_level); + if (desc.p_type == STP_PARAMETER_TYPE_STRING_LIST) + { + count = stp_string_list_count(desc.bounds.str); + if (count > 0) + { + if (desc.is_mandatory) + { + printf("$defaults{'%s'}{'%s'} = '%s';\n", + driver, desc.name, desc.deflt.str); + } + else + { + printf("$defaults{'%s'}{'%s'} = '%s';\n", + driver, desc.name, "None"); + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%s';\n", + driver, desc.name, "None", "None"); + } + for (j = 0; j < count; j++) + { + const stp_param_string_t *param = + stp_string_list_param(desc.bounds.str, j); + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%s';\n", + driver, desc.name, param->name, param->text); + if (strcmp(desc.name, "Resolution") == 0) + { + int x, y; + stp_set_string_parameter(pv, "Resolution", + param->name); + stp_describe_resolution(pv, &x, &y); + if (x > 0 && y > 0) + { + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%d';\n", + driver, "x_resolution", param->name, x); + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%d';\n", + driver, "y_resolution", param->name, y); + } + } + } + } + } + else if (desc.p_type == STP_PARAMETER_TYPE_BOOLEAN) + { + if (desc.is_mandatory) + { + printf("$defaults{'%s'}{'%s'} = '%d';\n", + driver, desc.name, desc.deflt.boolean); + } + else + { + printf("$defaults{'%s'}{'%s'} = '%s';\n", + driver, desc.name, "None"); + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%s';\n", + driver, desc.name, "None", "None"); + } + + printf("$stpdata{'%s'}{'%s'}{'False'} = 'False';\n", + driver, desc.name); + printf("$stpdata{'%s'}{'%s'}{'True'} = 'True';\n", + driver, desc.name); + } + else if (desc.p_type == STP_PARAMETER_TYPE_DOUBLE) + { + if (desc.bounds.dbl.lower <= desc.deflt.dbl && + desc.bounds.dbl.upper >= desc.deflt.dbl) + { + printf("$stp_float_values{'%s'}{'MINVAL'}{'%s'} = %.3f;\n", + driver, desc.name, desc.bounds.dbl.lower); + printf("$stp_float_values{'%s'}{'MAXVAL'}{'%s'} = %.3f;\n", + driver, desc.name, desc.bounds.dbl.upper); + printf("$stp_float_values{'%s'}{'DEFVAL'}{'%s'} = %.3f;\n", + driver, desc.name, desc.deflt.dbl); + /* printf("$stp_float_values{'%s'}{'LONG_NAME'}{'%s'} = '%s';\n", + driver, desc.name, _(desc.text)); */ + printf("$stp_float_values{'%s'}{'CATEGORY'}{'%s'} = '%s';\n", + driver, desc.name, _(desc.category)); + printf("$stp_float_values{'%s'}{'HELP'}{'%s'} = q(%s);\n", + driver, desc.name, (desc.help ? _(desc.help) : "''")); + printf("$stp_float_values{'%s'}{'MANDATORY'}{'%s'} = q(%d);\n", + driver, desc.name, desc.is_mandatory); + } + } + else if (desc.p_type == STP_PARAMETER_TYPE_INT) + { + if (desc.bounds.integer.lower <= desc.deflt.integer && + desc.bounds.integer.upper >= desc.deflt.integer) + { + printf("$stp_int_values{'%s'}{'MINVAL'}{'%s'} = %d;\n", + driver, desc.name, desc.bounds.integer.lower); + printf("$stp_int_values{'%s'}{'MAXVAL'}{'%s'} = %d;\n", + driver, desc.name, desc.bounds.integer.upper); + printf("$stp_int_values{'%s'}{'DEFVAL'}{'%s'} = %d;\n", + driver, desc.name, desc.deflt.integer); + /* printf("$stp_int_values{'%s'}{'LONG_NAME'}{'%s'} = '%s';\n", + driver, desc.name, _(desc.text)); */ + printf("$stp_int_values{'%s'}{'CATEGORY'}{'%s'} = '%s';\n", + driver, desc.name, _(desc.category)); + printf("$stp_int_values{'%s'}{'HELP'}{'%s'} = q(%s);\n", + driver, desc.name, (desc.help ? _(desc.help) : "''")); + printf("$stp_int_values{'%s'}{'MANDATORY'}{'%s'} = q(%d);\n", + driver, desc.name, desc.is_mandatory); + } + } + else if (desc.p_type == STP_PARAMETER_TYPE_DIMENSION) + { + if (desc.bounds.dimension.lower <= desc.deflt.dimension && + desc.bounds.dimension.upper >= desc.deflt.dimension) + { + printf("$stp_dimension_values{'%s'}{'MINVAL'}{'%s'} = %d;\n", + driver, desc.name, desc.bounds.dimension.lower); + printf("$stp_dimension_values{'%s'}{'MAXVAL'}{'%s'} = %d;\n", + driver, desc.name, desc.bounds.dimension.upper); + printf("$stp_dimension_values{'%s'}{'DEFVAL'}{'%s'} = %d;\n", + driver, desc.name, desc.deflt.dimension); + /* printf("$stp_dimension_values{'%s'}{'LONG_NAME'}{'%s'} = '%s';\n", + driver, desc.name, _(desc.text)); */ + printf("$stp_dimension_values{'%s'}{'CATEGORY'}{'%s'} = '%s';\n", + driver, desc.name, _(desc.category)); + printf("$stp_dimension_values{'%s'}{'HELP'}{'%s'} = q(%s);\n", + driver, desc.name, (desc.help ? _(desc.help) : "''")); + printf("$stp_dimension_values{'%s'}{'MANDATORY'}{'%s'} = q(%d);\n", + driver, desc.name, desc.is_mandatory); + } + } + tcount += count; + } + stp_parameter_description_destroy(&desc); + } + stp_parameter_list_destroy(params); + if (tcount > 0) + { + if (printer_is_color) + { + printf("$defaults{'%s'}{'%s'} = '%s';\n", + driver, "Color", "Color"); + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%s';\n", + driver, "Color", "Color", "Color"); + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%s';\n", + driver, "Color", "RawCMYK", "Raw CMYK"); + } + else + printf("$defaults{'%s'}{'%s'} = '%s';\n", + driver, "Color", "Grayscale"); + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%s';\n", + driver, "Color", "Grayscale", "Gray Scale"); + printf("$stpdata{'%s'}{'%s'}{'%s'} = '%s';\n", + driver, "Color", "BlackAndWhite", "Black and White"); + } + stp_vars_destroy(pv); + } + return 0; +} diff --git a/src/testpattern/run-testpattern-2.in b/src/testpattern/run-testpattern-2.in new file mode 100644 index 0000000..daba8db --- /dev/null +++ b/src/testpattern/run-testpattern-2.in @@ -0,0 +1,236 @@ +#!@PERL@ + +use Getopt::Long; +Getopt::Long::Configure("bundling", "no_ignore_case", "pass_through"); + +use strict; + +my $valgrind = 0; +my $cachegrind = 0; +my $gdb_attach = 0; +my $dontrun = 0; +my $retval = 0; +my @printer_list = (); + +my @extras = (); +my @messages = (); +my %stpdata = (); +my %models_found = (); +my %models; +my %families; +my $skip_duplicate_printers = 0; + +GetOptions("v+" => \$valgrind, + "c" => \$cachegrind, + "g" => \$gdb_attach, + "n" => \$dontrun, + "s!" => \$skip_duplicate_printers); + +my $pwd = `pwd`; +chomp $pwd; + +if (! defined $ENV{"STP_DATA_PATH"}) { + $ENV{"STP_DATA_PATH"} = "${pwd}/../main"; +} + +if (! defined $ENV{"STP_MODULE_PATH"}) { + $ENV{"STP_MODULE_PATH"} = "${pwd}/../main:${pwd}/../main/.libs"; +} + +sub set_opt($$) { + my ($opt, $val) = @_; + push @extras, "parameter \"$opt\" \"$val\";\n"; +} + +sub set_message($) { + my ($message) = @_; + push @messages, "message \"$message\";\n"; +} + +sub print_one_testpattern($) { + my ($printer) = @_; + my $stuff = "printer \"$printer\";\n"; + $stuff .= join "", @extras, @messages; + $stuff .= << 'EOF'; +hsize 0.1; +vsize 0.1; +left 0.15; +top 0.15; +blackline 0; +steps 16; +mode rgb 8; +pattern 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 ; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 -2.0 1.0 0.0 -2.0 1.0 0.0 -2.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 -2.0 -2.0 -2.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.1 0.3 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.3 0.7 -2.0 -2.0 -2.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.1 0.999 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.3 0.999 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.5 0.999 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.1 0.3 -2.0 -2.0 -2.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.3 0.7 1.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.1 0.999 -2.0 -2.0 -2.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.3 0.999 -2.0 -2.0 -2.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 0.5 0.999 -2.0 -2.0 -2.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.25 1.0 0.0 0.0 1.0 0.0 0.75 1.0 0.0 0.75 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.25 1.0 0.0 0.0 1.0 0.0 0.75 1.0 0.0 0.75 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.75 1.0 0.0 0.0 1.0 0.0 0.25 1.0 0.0 0.25 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.75 1.0 0.0 0.0 1.0 0.0 0.25 1.0 0.0 0.25 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.9 1.0 0.0 0.0 1.0 0.0 0.1 1.0 0.0 0.1 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.9 1.0 0.0 0.0 1.0 0.0 0.1 1.0 0.0 0.1 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.25 1.0 0.0 0.75 1.0 0.0 0.0 1.0 0.0 0.75 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.25 1.0 0.0 0.75 1.0 0.0 0.0 1.0 0.0 0.75 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.5 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.5 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.75 1.0 0.0 0.25 1.0 0.0 0.0 1.0 0.0 0.25 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.75 1.0 0.0 0.25 1.0 0.0 0.0 1.0 0.0 0.25 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.9 1.0 0.0 0.1 1.0 0.0 0.0 1.0 0.0 0.1 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.9 1.0 0.0 0.1 1.0 0.0 0.0 1.0 0.0 0.1 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.0 1.0 0.0 1.0 1.0 0.0 1.0 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.25 1.0 0.0 0.75 1.0 0.0 0.75 1.0 0.0 0.0 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.25 1.0 0.0 0.75 1.0 0.0 0.75 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.0 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.5 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.75 1.0 0.0 0.25 1.0 0.0 0.25 1.0 0.0 0.0 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.75 1.0 0.0 0.25 1.0 0.0 0.25 1.0 0.0 0.0 1.0; +pattern 1.0 1.0 1.0 1.0 1.0 0.0 0.9 1.0 0.0 0.1 1.0 0.0 0.1 1.0 0.0 0.0 1.0; +pattern 0.0 0.0 1.0 1.0 1.0 0.0 0.9 1.0 0.0 0.1 1.0 0.0 0.1 1.0 0.0 0.0 1.0; +end; +EOF + return $stuff; +} + +open PIPE, "./printer_options|" or die "Cannot run printer_options: $!\n"; +while(<PIPE>) { + next if m!^#!; + eval $_; +} +close PIPE or die "Cannot run printer_options: $!\n"; + +if ($#ARGV >= 0) { + @printer_list = @ARGV; +} else { + open PIPE, "./printers|" or die "Cannot run printers: $!\n"; + while(<PIPE>) { + next if m!^#!; + chomp; + push @printer_list, $_; + } + close PIPE; +} + +sub do_printer($$) { + my ($printer, $fh) = @_; + my $tmp = $stpdata{$printer}{'Resolution'}; + my $min_res_name; + my $min_res_value = 0; + my $first_time = 1; + my $model_id = $models{$printer}; + my $family_id = $families{$printer}; + if ($skip_duplicate_printers && $models_found{$family_id}{$model_id}) { + return; + } else { + $models_found{$family_id}{$model_id} = 1; + } + my (@resolutions) = grep {$_ ne 'None' } keys %$tmp; + $tmp = $stpdata{$printer}{'PrintingMode'}; + my (@printing_modes) = grep {$_ ne 'None' } keys %$tmp; + $tmp = $stpdata{$printer}{'InkType'}; + my (@ink_types) = grep {$_ ne 'None' } keys %$tmp; + foreach $tmp (sort @resolutions) { + my $res_value = ($stpdata{$printer}{'x_resolution'}{$tmp} * + $stpdata{$printer}{'y_resolution'}{$tmp}); + if ($min_res_value == 0 || $res_value < $min_res_value) { + $min_res_value = $res_value; + $min_res_name = $tmp; + } + } + # We want to do all resolutions and all ink types in both color modes. + # We don't need to do both resolutions and ink types. + my $pmode; + foreach $pmode (@printing_modes) { + my ($resolution, $ink_type); + foreach $resolution (@resolutions) { + @extras = (); + @messages = (); + if ($first_time) { + set_message("$printer\n"); + $first_time = 0; + } + set_opt("PrintingMode", $pmode); + set_opt("Resolution", $resolution); + set_opt("DitherAlgorithm", "Fast"); + set_opt("ColorCorrection", "Raw"); + set_message(" ${pmode}+${resolution}"); + my $output = print_one_testpattern($printer); + print $fh $output; + } + if ($#ink_types >= 1) { + foreach $ink_type (@ink_types) { + @extras = (); + @messages = (); + if ($first_time) { + set_message("$printer\n"); + $first_time = 0; + } + set_opt("PrintingMode", $pmode); + set_opt("Resolution", $min_res_name); + set_opt("InkType", $ink_type); + set_opt("DitherAlgorithm", "Fast"); + set_opt("ColorCorrection", "Raw"); + set_message(" ${ink_type}+${pmode}+${min_res_name}"); + my $output = print_one_testpattern($printer); + print $fh $output; + } + } + } +} + +if ($dontrun) { + map { do_printer($_, \*STDOUT) } @printer_list; + exit 0; +} else { + my $testpattern_command; + my $valgrind_command; + my $valopts; + if ($cachegrind) { + $valopts = '--tool=cachegrind'; + $valgrind = 4; + } elsif ($valgrind) { + $valopts = '--tool=memcheck'; + } + if ($gdb_attach) { + $valopts .= ' --db-attach=yes'; + } + if ($valgrind == 1) { + $valgrind_command = "valgrind $valopts -q --num-callers=100 --error-limit=no --leak-check=yes"; + } elsif ($valgrind == 2) { + $valgrind_command = "valgrind $valopts --num-callers=100 --error-limit=no --show-reachable=yes --leak-resolution=high --leak-check=yes"; + } elsif ($valgrind == 3) { + $valgrind_command = "valgrind $valopts --error-limit=no --num-callers=100 --show-reachable=yes --leak-resolution=high --leak-check=yes"; + } elsif ($valgrind == 4) { + $valgrind_command = "valgrind $valopts"; + } + + $testpattern_command = "$valgrind_command ./testpattern -n"; + + open TESTPATTERN, "|$testpattern_command" or + die "Can't run $testpattern_command: $!\n"; + map { do_printer($_, \*TESTPATTERN) } @printer_list; + my $status = close TESTPATTERN; + if ($status) { + exit 0; + } else { + exit 1; + } +} diff --git a/src/testpattern/testpattern.c b/src/testpattern/testpattern.c index 1585303..db7fe2f 100644 --- a/src/testpattern/testpattern.c +++ b/src/testpattern/testpattern.c @@ -1,5 +1,5 @@ /* - * "$Id: testpattern.c,v 1.43 2006/01/15 22:00:57 rlk Exp $" + * "$Id: testpattern.c,v 1.44 2006/04/18 12:30:57 rlk Exp $" * * Test pattern generator for Gimp-Print * @@ -39,6 +39,7 @@ #include <math.h> #include <string.h> #include "testpattern.h" +#include <gutenprint/gutenprint-intl.h> extern int yyparse(void); @@ -239,7 +240,9 @@ do_print(void) stp_set_outdata(global_vars, stdout); stp_set_errdata(global_vars, stderr); + setlocale(LC_ALL, "C"); retval = yyparse(); + setlocale(LC_ALL, ""); if (retval) return retval + 1; |