summaryrefslogtreecommitdiff
path: root/src/testpattern
diff options
context:
space:
mode:
Diffstat (limited to 'src/testpattern')
-rw-r--r--src/testpattern/Makefile.am7
-rw-r--r--src/testpattern/Makefile.in33
-rw-r--r--src/testpattern/printer_options.c246
-rw-r--r--src/testpattern/run-testpattern-2.in236
-rw-r--r--src/testpattern/testpattern.c5
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;