--- sane-backends-1.0.20.orig/debian/sane-utils.README.Debian +++ sane-backends-1.0.20/debian/sane-utils.README.Debian @@ -0,0 +1,72 @@ +sane-utils (sane-backends) for Debian +------------------------------------- + +This package contains various utilities shipped with sane-backends, among +which saned, the network scanner daemon used to share scanners over the +network. + + +saned setup +----------- + +Please read this file carefully to setup your saned server properly. + + -> Setting up permissions for saned + -> Running saned from inetd + -> Running saned as a standalone daemon + + + Setting up permissions for saned + -------------------------------- + +A saned user and a saned group have been added to your system; it is highly +recommended to run saned as user and group saned and NEVER EVER as root. + +To operate properly, saned must be able to access your scanners; different +setups are possible, depending on who should be able to use the scanners: + + * saned users only: + => device owned by saned:saned, saned:root or root:saned + + * saned users and local users: + => device owned by saned:scanner, local users added to the scanner group + + * local users only: + => device owned by root:scanner, local users added to the scanner group + +By default the saned user is NOT part of the scanner group. If you add the +saned user to the scanner group, ALL scanners will be made available over the +network without restrictions. Do that if you do not want/need to restrict one +or more scanners to local users only. + +If you intend to use saned with a USB scanner, note that the permissions for +USB scanners are handled by udev. + +See /usr/share/doc/libsane/README.Debian.gz for more information on setting up +appropriate permissions. + + Running saned from inetd + ------------------------ + +To enable saned in the default configuration (running as user and group saned), +use update-inetd to enable the service: + # update-inetd --enable sane-port +To disable saned, use update-inetd to disable the service: + # update-inetd --disable sane-port + +If you want to run saned under another user and/or group, edit /etc/inetd.conf +and change saned:saned for the appropriate user:group combination. + + Running saned as a standalone daemon + ------------------------------------ + +When run as a standalone daemon, saned can advertise its services over the +network, and the SANE clients will automatically discover the saned servers +(provided the clients support this). + +To run saned as a standalone server: + - if you were previously running saned from inetd, disable it (see above) + - run dpkg-reconfigure sane-utils + + +-- Julien BLACHE , Mon, 05 May 2008 19:29:28 +0200 --- sane-backends-1.0.20.orig/debian/sane-utils.config +++ sane-backends-1.0.20/debian/sane-utils.config @@ -0,0 +1,17 @@ +#!/bin/sh +set -e + +. /usr/share/debconf/confmodule + +if [ -e /etc/default/saned ]; then + . /etc/default/saned + + if [ "$RUN" != "yes" ]; then + db_set sane-utils/saned_run false + else + db_set sane-utils/saned_run true + fi +fi + +db_input medium sane-utils/saned_run || true +db_go || true --- sane-backends-1.0.20.orig/debian/libsane.postrm +++ sane-backends-1.0.20/debian/libsane.postrm @@ -0,0 +1,13 @@ +#!/bin/sh + +set -e + +#DEBHELPER# + +# remove directory /etc/sane.d/ +if [ "$1" = "purge" ]; then + echo "Removing directory /etc/sane.d/ ..." + rmdir --ignore-fail-on-non-empty /etc/sane.d/ +fi + + --- sane-backends-1.0.20.orig/debian/compat +++ sane-backends-1.0.20/debian/compat @@ -0,0 +1 @@ +5 --- sane-backends-1.0.20.orig/debian/libsane.preinst +++ sane-backends-1.0.20/debian/libsane.preinst @@ -0,0 +1,48 @@ +#!/bin/sh +set -e + +# From http://wiki.debian.org/DpkgConffileHandling +# Remove a no-longer used conffile +rm_conffile() { + PKGNAME="$1" + CONFFILE="$2" + if [ -e "$CONFFILE" ]; then + md5sum="`md5sum \"$CONFFILE\" | sed -e \"s/ .*//\"`" + old_md5sum="`dpkg-query -W -f='${Conffiles}' $PKGNAME | sed -n -e \"\\\\' $CONFFILE '{s/ obsolete$//;s/.* //p}\"`" + if [ "$md5sum" != "$old_md5sum" ]; then + echo "Obsolete conffile $CONFFILE has been modified by you." + echo "Saving as $CONFFILE.dpkg-bak ..." + mv -f "$CONFFILE" "$CONFFILE".dpkg-bak + else + echo "Removing obsolete conffile $CONFFILE ..." + rm -f "$CONFFILE" + fi + fi +} + +if [ "$1" = install ] || [ "$1" = upgrade ]; then + ## Transition from the old-style udev setup to the old-style dh_installudev setup + ## Then dh_installudev will take care of the transition to the new dh_installudev setup + if [ -e "/etc/udev/rules.d/025_libsane.rules" ]; then + mv /etc/udev/rules.d/025_libsane.rules /etc/udev/rules.d/z60_libsane.rules + fi + + if [ -e "/etc/modprobe.d/libsane" ]; then + if [ "`md5sum \"/etc/modprobe.d/libsane\" | sed -e \"s/ .*//\"`" = \ + "`dpkg-query -W -f='${Conffiles}' libsane | sed -n -e \"\\\\' /etc/modprobe.d/libsane's/.* //p\"`" ] + then + rm -f "/etc/modprobe.d/libsane" + fi + fi + + if [ -e "/etc/modprobe.d/blacklist-scanner" ]; then + rm -f "/etc/modprobe.d/blacklist-scanner" + fi + + ## Remove obsolete /etc/modprobe.d/libsane conffile + if dpkg --compare-versions "$2" le "1.0.19-25"; then + rm_conffile libsane /etc/modprobe.d/libsane + fi +fi + +#DEBHELPER# --- sane-backends-1.0.20.orig/debian/sane-utils.postrm +++ sane-backends-1.0.20/debian/sane-utils.postrm @@ -0,0 +1,12 @@ +#!/bin/sh + +set -e + +if [ "$1" = purge ]; then + if [ -x /usr/sbin/update-inetd ]; then + update-inetd --remove sane-port + update-inetd --remove "## sane-port" + fi +fi + +#DEBHELPER# --- sane-backends-1.0.20.orig/debian/sane-utils.install +++ sane-backends-1.0.20/debian/sane-utils.install @@ -0,0 +1,9 @@ +etc/sane.d/saned.conf +usr/sbin/saned +usr/bin/sane-find-scanner +usr/bin/scanimage +usr/bin/gamma4scanimage +usr/share/man/man8/saned.8 +usr/share/man/man1/scanimage.1 +usr/share/man/man1/sane-find-scanner.1 +usr/share/man/man1/gamma4scanimage.1 --- sane-backends-1.0.20.orig/debian/libsane.shlibs +++ sane-backends-1.0.20/debian/libsane.shlibs @@ -0,0 +1 @@ +libsane 1 libsane (>= 1.0.11-3) --- sane-backends-1.0.20.orig/debian/libsane.README.Debian +++ sane-backends-1.0.20/debian/libsane.README.Debian @@ -0,0 +1,170 @@ +libsane (sane-backends) for Debian : +------------------------------------ + +GENERAL +------- + +The configuration files for Debian releases of SANE are located in /etc/sane.d. + +A Debian-specific patch is applied to the dll backend, so that the backend +checks for pieces of dll.conf in the /etc/sane.d/dll.d directory; this +facility is used by packages providing external backends (like libsane-extras, +hpoj or hplip) to "register" the backends they provide without much hassle. + +Each backend has a configuration file which specifies which devices, +access methods, options etc. should be used by this backend. The format +and content of each configuration file is documented in the manpage for +the backend, e.g. sane-plustek (5). + +For USB and some SCSI scanners, the parameters can be auto-detected, and +manual configuration is not required. If the auto-detection fails, read +the next paragraph. Again, see the manpage for your backend for more +information. + +For SCSI devices (mostly scanners), the configuration files use the +/dev/scanner device; /dev/scanner is a symbolic link to the appropriate +SCSI device node. It's up to you to create this symbolic link, once you +will have determined which device node it needs to point to. Use the +sane-find-scanner command in the sane-utils package to determine which +SCSI device your scanner is attached to. The sane-find-scanner utility +also discovers USB scanners. + +It can be a good idea to try running sane-find-scanner as root to ensure +there will be no permissions problems while attempting to detect your +devices. + + +DOCUMENTATION +------------- + +For information on configuring and trouble-shooting the various SANE +components, please refer to the manual pages listed below: + + Regarding: Read: + ----------------- ------------------------------------------ + General sane(7) -- your starting point + + scanimage scanimage(1) + xscanimage xscanimage(1) + saned saned(8) + xcam xcam(1) + + Dynamic loading sane-dll(5) + Backends See sane-(5). Each backend + comes with a manual page in section 5 of + the manual system. + + +SETUP +----- + +Note: this is only a proposed solution, you are free to come up and implement +whatever access control mechanism you see fit (eg. by using saned on localhost). + +This package added a scanner group to your system. We recommend you add to +this group the users that should be able to access your scanner(s), and +make sure the appropriate device files (eg. /dev/sg0, ...) are owned by root +and the scanner group, with permissions set to 0660. + +You can change the ownership and permissions of the device files as follows : + chown root:scanner /dev/.... + chmod 0660 /dev/.... + + +If you intend to use a USB scanner, it is highly recommended that you install +the udev package, which will help you with setting up the permissions on +the device node referring to your scanner (under /dev/bus/usb/ -- libusb is +used to communicate with the scanner). + +The /lib/udev/rules.d/60-libsane.rules file contains a list of USB scanners +supported by SANE, so everything should just work once udev will be running on +your system. + +If your scanner is missing from the list, do NOT modify this file; it is not +a configuration file, which means your changes WILL be overwritten upon +upgrade. Instead, create /etc/udev/rules.d/60-libsane.rules and add the udev +rule for your scanner in this file. /lib/udev/rules.d/60-libsane.rules will +then be ignored by udev and /etc/udev/rules.d/60-libsane.rules will be used +instead. + +Feel free to file a bug report (severity wishlist) against the libsane package +to get your scanner added; please mention which backend you use and how well +the scanner is supported (basic, good, ...). + + Note: please do not file bugs requesting the addition of scanners that + aren't supported by the libsane package. For these devices, bugs should + be filed against the Debian package providing support for the device, if + such a package does exist. + +udev will automatically set up the permissions and ownership on the device +node corresponding to your scanner according to the rules defined in the +libsane.rules file (default is root:scanner, 0664). If you want to execute +a script when your scanner is plugged in, add RUN+="/path/to/script" to the +rule matching your scanner. + + +TROUBLESHOOTING +--------------- + +If your scanner does not work, edit the file /etc/sane.d/dll.conf. +Verify that your scanner is not commented out. You may need to +comment out all other scanners in dll.conf. It shouldn't matter, but +sometimes it does. + +The most common cause for a non-working scanner is inappropriate +permissions on the device. So your first reflex should be to check the +permissions of the device used to access your scanner, e.g. /dev/sg0 +or the device pointed to by /dev/scanner. + + +If you encounter any problems with getting your device(s) recognized, +try setting the various environment variables that are there to assist +in debugging such problems. The environment variables are documented +in the relevant manual pages. For example, to get the maximum amount +of debug information when testing a Mustek scanner, set environment +variables SANE_DEBUG_DLL, SANE_DEBUG_MUSTEK, and SANE_DEBUG_SANEI_SCSI +to 128 and then invoke scanimage or whatever program you're trying to +debug. For a Mustek SCSI scanner at /dev/scanner, you might want to +invoke scanimage as follows: + + scanimage -d mustek:/dev/scanner -h + +If this works, you could try to acquire an image with: + + scanimage -d mustek:/dev/scanner > t.pnm + +If you are not sure what generic SCSI device your scanner is connected +to, try the command sane-find-scanner (sane-utils package). It is +normally sufficient to invoke the program without any arguments. Invoking +this command should produce output similar to this: + + $ sane-find-scanner + sane-find-scanner: found "MUSTEK MFC-06000CZ 1.01" at device /dev/sge + +sane-find-scanner will help you discover your USB scanner, too. + + +REPORTING BUGS +-------------- + +When reporting a bug, be it to the SANE developers or to the Debian bug +tracking system, pleases always provide: + - the full version of libsane + - the backend you're using + - the configuration of the backend + - the debug output, obtained by setting the environment variable + SANE_DEBUG_ to a value of 255 (see above, TROUBLESHOOTING) + +Without that, your bug report will take longer to be processed, because we'll +need to ask you for each of these items. Please help us help you. + + +UNSUPPORTED DEVICES AND SPECIFIC NOTES +-------------------------------------- + +If your scanner (or camera, or whatever) is not supported by the regular +SANE distribution, have a look at the libsane-extras package which contains +some backends not yet included in the regular SANE distribution. + + +-- Julien BLACHE , Sat, 12 Dec 2009 11:29:42 +0100 --- sane-backends-1.0.20.orig/debian/sane-utils.saned.init +++ sane-backends-1.0.20/debian/sane-utils.saned.init @@ -0,0 +1,95 @@ +#! /bin/sh +# +### BEGIN INIT INFO +# Provides: saned +# Required-Start: $syslog $local_fs +# Required-Stop: $syslog $local_fs +# Should-Start: dbus avahi +# Should-Stop: dbus avahi +# Default-Start: 2 3 4 5 +# Default-Stop: 1 +# Short-Description: SANE network scanner server +# Description: saned makes local scanners available over the +# network. +### END INIT INFO + +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin +DAEMON=/usr/sbin/saned +NAME=saned +DESC="SANE network scanner server" + +test -x $DAEMON || exit 0 + +RUN=no +RUN_AS_USER=saned + +# Include saned defaults if available +if [ -f /etc/default/saned ] ; then + . /etc/default/saned +fi + +if [ "x$RUN" != "xyes" ] ; then + exit 0 +fi + +DAEMON_OPTS="-a $RUN_AS_USER" + +set -e + +case "$1" in + start) + echo -n "Starting $DESC: " + start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \ + --exec $DAEMON -- $DAEMON_OPTS + echo "$NAME." + ;; + stop) + echo -n "Stopping $DESC: " + start-stop-daemon --stop --oknodo --quiet --pidfile /var/run/$NAME.pid \ + --exec $DAEMON + echo "$NAME." + ;; + force-reload) + # check whether $DAEMON is running. If so, restart + start-stop-daemon --stop --test --quiet --pidfile \ + /var/run/$NAME.pid --exec $DAEMON \ + && $0 restart \ + || exit 0 + ;; + restart) + echo -n "Restarting $DESC: " + start-stop-daemon --stop --oknodo --quiet --pidfile \ + /var/run/$NAME.pid --exec $DAEMON + sleep 1 + start-stop-daemon --start --quiet --pidfile \ + /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS + echo "$NAME." + ;; + status) + if [ -s /var/run/$NAME.pid ]; then + RUNNING=$(cat /var/run/$NAME.pid) + if [ -d /proc/$RUNNING ]; then + if [ $(readlink /proc/$RUNNING/exe) = $DAEMON ]; then + echo "$NAME is running." + exit 0 + fi + fi + + # No such PID, or executables don't match + echo "$NAME is not running, but pidfile existed." + rm /var/run/$NAME.pid + exit 1 + else + rm -f /var/run/$NAME.pid + echo "$NAME not running." + exit 1 + fi + ;; + *) + N=/etc/init.d/$NAME + echo "Usage: $N {start|stop|restart|force-reload}" >&2 + exit 1 + ;; +esac + +exit 0 --- sane-backends-1.0.20.orig/debian/copyright +++ sane-backends-1.0.20/debian/copyright @@ -0,0 +1,50 @@ +This package was first debianized by Kevin Dalley . + +It is now maintained by Julien BLACHE , initially with +the help of Aurélien JARNO . + +It was downloaded from : ftp://ftp.sane-project.org/pub/sane/ + +Upstream Authors : see /usr/share/doc/libsane/AUTHORS.gz + + +Verbatim copy of the LICENSE : + +******************************************************************************** +Mon Nov 30 22:41:58 1998 + +This files attempts to clarify the licensing situation for the SANE +distribution. In case of doubt, the copyright information contained +in each file overrides what is said here. + +SANE consists of three parts each of which has its own licensing +terms: + + * The frontend programs. + + These programs are generally protected by the GNU General Public + License. (See file COPYING.) + + * The backend libraries. + + Backend libraries are protected by the GNU General Public License (see + file COPYING), but as an exception, it is permissible to link against + such a library without affecting the licensing status of the program + that uses the libraries. For details, see the copyright notice at the + head of the backend files (e.g., backend/dll.c). + + Note that some of the backends have additional licensing constraints. + E.g., the DC210 backend uses JPG code that is licensed as described + in backend/djpeg.README.gz. + + * The SANE API and network protocol as put forth in the standard document. + + The standard is considered to be in the public domain. Anyone is free + to implement SANE interface conforming applications or libraries in + any way he or she sees fit. + +******************************************************************************** + +On Debian systems, the complete text of the GNU General Public License (the +"COPYING" file referred to above) can be found in the +/usr/share/common-licenses/GPL file. --- sane-backends-1.0.20.orig/debian/control +++ sane-backends-1.0.20/debian/control @@ -0,0 +1,93 @@ +Source: sane-backends +Section: graphics +Priority: optional +Maintainer: Ubuntu Core Developers +XSBC-Original-Maintainer: Julien BLACHE +Standards-Version: 3.8.3 +Build-Depends: debhelper (>= 5.0.0), dpatch, po-debconf, libv4l-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], libgphoto2-2-dev, libltdl3-dev, libjpeg62-dev, libtiff4-dev, libusb-dev (>= 2:0.1.10a-9) [!hurd-i386], libieee1284-3-dev (>= 0.2.10-5) [!hurd-i386], libcam-dev [kfreebsd-i386 kfreebsd-amd64], libavahi-client-dev (>= 0.6.4), gettext, texlive, texlive-latex-extra, autotools-dev, pkg-config, chrpath, xutils-dev +Homepage: http://www.sane-project.org + +Package: sane-utils +Section: graphics +Architecture: any +Depends: adduser (>= 3.47), update-inetd (>= 4.31), ${shlibs:Depends}, ${misc:Depends} +Suggests: avahi-daemon, unpaper +Replaces: libsane (<< 1.0.11-4) +Description: API library for scanners -- utilities + SANE stands for "Scanner Access Now Easy" and is an application + programming interface (API) that provides standardized access to any + raster image scanner hardware (flatbed scanner, hand-held scanner, + video- and still-cameras, frame-grabbers, etc.). The SANE standard is + free and its discussion and development are open to everybody. The + current source code is written to support several operating systems, + including GNU/Linux, OS/2, Win32 and various Unices and is available + under the GNU General Public License (commercial applications and + backends are welcome, too, however). + . + This package includes the command line frontend scanimage, the saned + server and the sane-find-scanner utility, along with their documentation. + +Package: libsane +Section: libs +Architecture: any +Depends: adduser (>= 3.47), ${udev}, ${shlibs:Depends}, ${misc:Depends} +Suggests: hpoj, hplip, libsane-extras (>= 1.0.20.1), avahi-daemon, sane-utils (>= ${binary:Version}) +Replaces: libsane-extras (<< 1.0.18.14) +Description: API library for scanners + SANE stands for "Scanner Access Now Easy" and is an application + programming interface (API) that provides standardized access to any + raster image scanner hardware (flatbed scanner, hand-held scanner, + video- and still-cameras, frame-grabbers, etc.). The SANE standard is + free and its discussion and development are open to everybody. The + current source code is written to support several operating systems, + including GNU/Linux, OS/2, Win32 and various Unices and is available + under the GNU General Public License (commercial applications and + backends are welcome, too, however). + . + This package includes the backends for many scanners. A libsane-extras + package containing some not-yet-included backends is available separately. + . + Graphical frontends for sane are available in the packages sane and + xsane. Command line frontend scanimage, saned and sane-find-scanner are + available in the sane-utils package. + +Package: libsane-dev +Section: libdevel +Architecture: any +Depends: libsane (= ${binary:Version}), libjpeg62-dev, libtiff4-dev, libusb-dev (>= 1:0.1.6a-1) [!hurd-i386], libieee1284-3-dev (>= 0.2.10-5) [!hurd-i386], ${libcam-dev}, libgphoto2-2-dev, libv4l-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], libavahi-client-dev, ${misc:Depends} +Replaces: libsane-extras-dev (<< 1.0.18.14) +Suggests: libsane-extras-dev (>= 1.0.20.1) +Description: API development library for scanners [development files] + SANE stands for "Scanner Access Now Easy" and is an application + programming interface (API) that provides standardized access to any + raster image scanner hardware (flatbed scanner, hand-held scanner, + video- and still-cameras, frame-grabbers, etc.). The SANE standard is + free and its discussion and development are open to everybody. The + current source code is written to support several operating systems, + including GNU/Linux, OS/2, Win32 and various Unices and is available + under the GNU General Public License (commercial applications and + backends are welcome, too, however). + . + This package contains the files needed to build your applications + using SANE. + +Package: libsane-dbg +Section: debug +Priority: extra +Architecture: any +Depends: libsane (= ${binary:Version}), ${misc:Depends} +Suggests: libsane-extras-dbg (>= 1.0.20.1) +Replaces: libsane-extras-dbg (<< 1.0.18.14) +Description: API development library for scanners [debug symbols] + SANE stands for "Scanner Access Now Easy" and is an application + programming interface (API) that provides standardized access to any + raster image scanner hardware (flatbed scanner, hand-held scanner, + video- and still-cameras, frame-grabbers, etc.). The SANE standard is + free and its discussion and development are open to everybody. The + current source code is written to support several operating systems, + including GNU/Linux, OS/2, Win32 and various Unices and is available + under the GNU General Public License (commercial applications and + backends are welcome, too, however). + . + This package contains the debugging symbols for the SANE backends. + --- sane-backends-1.0.20.orig/debian/sane-utils.saned.default +++ sane-backends-1.0.20/debian/sane-utils.saned.default @@ -0,0 +1,7 @@ +# Defaults for the saned initscript, from sane-utils + +# Set to yes to start saned +RUN=no + +# Set to the user saned should run as +RUN_AS_USER=saned --- sane-backends-1.0.20.orig/debian/libsane-dev.doc-base +++ sane-backends-1.0.20/debian/libsane-dev.doc-base @@ -0,0 +1,16 @@ +Document: libsane-dev +Title: SANE Standard +Author: Andreas Beck and David Mosberger +Abstract: SANE stands for "Scanner Access Now Easy" and is an application + programming interface (API) that provides standardized access to any + raster image scanner hardware (flatbed scanner, hand-held scanner, + video- and still-cameras, frame-grabbers, etc.). The SANE standard is + free and its discussion and development are open to everybody. The + current source code is written to support several operating systems, + including GNU/Linux, OS/2, Win32 and various Unices and is available + under the GNU General Public License (commercial applications and + backends are welcome, too, however). +Section: Graphics + +Format: postscript +Files: /usr/share/doc/libsane-dev/sane.ps.gz --- sane-backends-1.0.20.orig/debian/libsane.install.in +++ sane-backends-1.0.20/debian/libsane.install.in @@ -0,0 +1,9 @@ +usr/share/man/man7 +usr/share/locale/ +usr/lib/sane/*.so.* +usr/lib/sane/*.la +usr/lib/*.so.* +usr/lib/*.la +etc/ +usr/share/man/man5/sane-scsi.5 +usr/share/man/man5/sane-usb.5 --- sane-backends-1.0.20.orig/debian/changelog +++ sane-backends-1.0.20/debian/changelog @@ -0,0 +1,2065 @@ +sane-backends (1.0.20-13ubuntu1) lucid; urgency=low + + * Merge from Debian testing, remaining changes: + - Add 42_add_epson_cx_6000.dpatch: Add Epson CX6000. (LP: #314485) + - Add 43_scanadf_error_check.dpatch: Backport from Debian's + sane-backends git repo adding additional error checking. + (LP: #469540) + - Add 44_add_epson_mfp_devs.dpatch: Add additional device id. + (LP: #469540) + - Don't apply 11_udev_147, because ubuntu_udev_noperm.dpatch is + more appropriate for Ubuntu: + + Do not change device permissions (already covered by udev-extra's + 70-acl.rules) + + Do not cover SCSI scanners (already covered by udev-extra's + 70-acl.rules) + + Simplify description and structure. + - debian/control: + + Demote libsane-extras from Depends: to Suggests:, as long as + this package is in universe. + + Demote sane-utils and avahi-daemon from Recommends to Suggests. + We do not want to have an init script for saned laying around, + which is disabled by default anyway. + - debian/libsane.dirs.linux: remove + - debian/{libsane.install.in,libsane-dev.install,rules}: Install + documentation into libsane-dev instead of libsane to save CD space. + - debian/rules: + + Link using -Bsymbolic-functions (startup time optimization). + + /etc/modprobe.d/libsane blacklists two modules that don't exist + anymore, dropped creation of this file + - debian{rules,sane-utils.saned.init}: saned init script does not need + to be started before gdm, and does not need to be called on shutdown. + - debian/libsane.postinst: Do not create the scanner group. + - debian/{sane-utils.config,sane-utils.postinst,sane-utils.templates}: + Drop the support for saned in the scanner group, since we don't have + a scanner group anymore! + - debian/libsane.preinst: + + Remove the old blacklist-scanner modprobe file. LP: #340873. + + Remove the old file if unmodified + - debian/rules: Install udev rules again, since we now don't rely on + hal any more and thus we need the ENV{libsane_matched}=="yes" flag. + + -- Daniel T Chen Mon, 08 Feb 2010 13:26:48 -0500 + +sane-backends (1.0.20-13) unstable; urgency=low + + * debian/patches/34_genesys_gl841_cal_fix.dpatch: + + Added; fix calibration on gl841-based scanners (closes: #563163). + + * debconf translations: + + ja.po: courtesy of Hideki Yamane (closes: #564294). + + -- Julien BLACHE Sun, 10 Jan 2010 15:21:22 +0100 + +sane-backends (1.0.20-12) unstable; urgency=low + + * debian/patches/33_epson2_update.dpatch: + + Update epson2 from git HEAD (closes: #534746). + + * debconf translations: + + de.po: courtesy of Helge Kreutzmann (closes: #562709). + + sv.po: courtesy of Martin Bagge (closes: #562931). + + ru.po: courtesy of Yuri Kozlov (closes: #563076). + + pt.po: courtesy of Américo Monteiro (closes: #563174). + + -- Julien BLACHE Fri, 01 Jan 2010 12:49:10 +0100 + +sane-backends (1.0.20-11) unstable; urgency=medium + + * Urgency set to medium to unbreak saned in testing. + + * debian/patches/12_saned_polling_fix.dpatch: + + Added; unbreak saned's polling loop for more than 1 fds (closes: #562248). + * debian/patches/13_saned_aliasing_fix.dpatch: + + Added; fix strict aliasing issues in saned for gcc 4.4. + + -- Julien BLACHE Thu, 24 Dec 2009 17:33:35 +0100 + +sane-backends (1.0.20-10) unstable; urgency=low + + * debian/libsane.README.Debian: + + Updated udev-related information and instructions, added a note about + only adding rules for scanners supported by libsane. + * debian/sane-utils.saned.init: + + Add missing --oknodo in s-s-d stop call in restart case + (closes: #558648). + * debian/sane-utils.templates: + + Rework the standalone saned template and mention Avahi explicitly + (closes: #556877). + + * debian/patches/22_dll_backend_conf.dpatch: + + Updated; use better wording for the comment about the net backend + in dll.conf (closes: #556912). + * debian/patches/32_epson_perfection636.dpatch: + + Added; add the Epson Perfection 636 SCSI scanner (closes: #555971). + + -- Julien BLACHE Sat, 12 Dec 2009 11:33:09 +0100 + +sane-backends (1.0.20-9) unstable; urgency=low + + * debian/patches/11_udev_147.dpatch: + + Added; remove NAME= from SCSI rules as udev 147 complains about it. Also + remove support for kernel < 2.6.22. (closes: #555443). + + -- Julien BLACHE Mon, 09 Nov 2009 21:01:32 +0100 + +sane-backends (1.0.20-8) unstable; urgency=low + + * debian/rules: + + Fix nostrip builds, thanks to Tollef Fog Heen (closes: #548152). + + * debian/patches/31_genesys_raw_log_fix.dpatch: + + Added; add missing check when logging raw data. Patch by + Tollef Fog Heen (closes: #548154). + + -- Julien BLACHE Sat, 26 Sep 2009 11:44:04 +0200 + +sane-backends (1.0.20-7) unstable; urgency=low + + * debian/control: + + Demote avahi-daemon to a Suggests (closes: #543335). + + libv4l-dev is not available on hurd-i386 either (closes: #545995). + + * debian/patches/30_xerox_samsung_ids.dpatch: + + Added; add USB IDs for various Samsung-branded MFPs (closes: #545290). + + -- Julien BLACHE Fri, 11 Sep 2009 19:16:15 +0200 + +sane-backends (1.0.20-6) unstable; urgency=low + + * debian/control: + + Bump Standards-Version to 3.8.3 (no changes). + * debian/rules: + + Empty dependency_libs in all .la files. + + * debian/patches/10_sanei_usb_update.dpatch: + + Added; from git, favour the interface detected by sanei_usb_init(). This + helps with some machines like the Canon MP730. + + -- Julien BLACHE Sat, 29 Aug 2009 16:55:34 +0200 + +sane-backends (1.0.20-5) unstable; urgency=low + + * debian/control: + + Bump Standards-Version to 3.8.2 (no changes). + + * debian/patches/08_cardscan_usbids.dpatch: + + Added; fix USB IDs for the CardScan 800c (closes: #528829). + * debian/patches/09_po_update_es_add_gl.dpatch: + + Added; update es translation and add new gl translation, courtesy of + Miguel Bouzada . + * debian/patches/20_disable_rpath.dpatch: + + Added; do not use rpath. For some reason this decided to pop up now, + even though the previous revision of the package did not suffer from + this. Go figure. + + -- Julien BLACHE Fri, 26 Jun 2009 14:39:41 +0200 + +sane-backends (1.0.20-4ubuntu3) karmic; urgency=low + + * debian/sane-utils.saned.init: be quiet if not enabled + (LP: #440852) + + -- Tormod Volden Wed, 14 Oct 2009 11:15:59 +0200 + +sane-backends (1.0.20-4ubuntu2) karmic; urgency=low + + * debian/control: Fix libsane-extras Recommends → Suggests again. + * ubuntu_udev_noperm.dpatch: Use ENV{DEVTYPE} instead of SUBSYSTEM, to avoid + processing all the rules twice. + + -- Martin Pitt Thu, 04 Jun 2009 12:05:07 +0200 + +sane-backends (1.0.20-4ubuntu1) karmic; urgency=low + + * Merge from debian unstable, remaining changes: + - Add 42_add_epson_cx_6000.dpatch: Add Epson CX6000. (LP: #314485) + - debian/control: + + Set Ubuntu maintainer address. + + Demote libsane-extras from Depends: to Suggests:, as long as + this package is in universe. + + Demote sane-utils and avahi-daemon from Recommends to Suggests. + We do not want to have an init script for saned laying around, + which is disabled by default anyway. + - debian/libsane.dirs.linux: remove + - debian/{libsane.install.in,libsane-dev.install,rules}: Install + documentation into libsane-dev instead of libsane to save CD space. + - debian/rules: + + Link using -Bsymbolic-functions (startup time optimization). + + /etc/modprobe.d/libsane blacklists two modules that don't exist + anymore, dropped creation of this file + - debian{rules,sane-utils.saned.init}: saned init script does not need + to be started before gdm, and does not need to be called on shutdown. + - debian/libsane.postinst: Do not create the scanner group. + - debian/{sane-utils.config,sane-utils.postinst,sane-utils.templates}: + Drop the support for saned in the scanner group, since we don't have + a scanner group anymore! + - debian/libsane.preinst: + + Remove the old blacklist-scanner modprobe file. LP: #340873. + + Remove the old file if unmodified + * Add ubuntu_udev_noperm.dpatch: Change udev rules to be suitable for + Ubuntu: + - Do not change device permissions (already covered by udev-extra's + 70-acl.rules) + - Do not cover SCSI scanners (already covered by udev-extra's + 70-acl.rules) + - Simplify description and structure. + * debian/rules: Install udev rules again, since we now don't rely on + hal any more and thus we need the ENV{libsane_matched}=="yes" flag. + + -- Martin Pitt Thu, 04 Jun 2009 10:06:14 +0200 + +sane-backends (1.0.20-4) unstable; urgency=low + + * debian/rules: + + Serialize autotools/patch/configure for parallel builds, now that + parallel builds are possible with the upstream build system + (closes: #506620). + * debian/control: + + Bump libsane-extras dependencies to 1.0.20.1. + * debian/sane-utils.saned.init: + + Add status action, taken from iaxmodem (closes: #528265). + + * debian/patches/07_tools_missing_libcam.dpatch: + + Added; fix sane_find_scanner build on kFreeBSD by adding missing SCSI + libraries. From upstream via Aurélien JARNO (closes: #528594). + + -- Julien BLACHE Thu, 14 May 2009 12:06:47 +0200 + +sane-backends (1.0.20-3ubuntu1) karmic; urgency=low + + * Merge from debian unstable (LP: #373168), remaining changes: + - Add 42_add_epson_cx_6000.dpatch: Add Epson CX6000. (LP: #314485) + - debian/control: + + Set Ubuntu maintainer address. + + Demote libsane-extras from Depends: to Suggests:, as long as + this package is in universe. + + Demote sane-utils and avahi-daemon from Recommends to Suggests. + We do not want to have an init script for saned laying around, + which is disabled by default anyway. + - debian/libsane.dirs.linux: remove + - debian/{libsane.install.in,libsane-dev.install,rules}: Install + documentation into libsane-dev instead of libsane to save CD space. + - debian/rules: + + Link using -Bsymbolic-functions (startup time optimization). + + Do not install the udev rules, since hal now provides dynamic ACLs on + device nodes. (See hardy-hardware-detection spec.) + + /etc/modprobe.d/libsane blacklists two modules that don't exist + anymore, dropped creation of this file + - debian{rules,sane-utils.saned.init}: saned init script does not need + to be started before gdm, and does not need to be called on shutdown. + - debian/libsane.postinst: Do not create the scanner group. + - debian/{sane-utils.config,sane-utils.postinst,sane-utils.templates}: + Drop the support for saned in the scanner group, since we don't have + a scanner group anymore! + - debian/libsane.preinst: + + Remove the old blacklist-scanner modprobe file. LP: #340873. + + Remove the old file if unmodified + + -- Артём Попов Mon, 11 May 2009 00:24:39 +0700 + +sane-backends (1.0.20-3) unstable; urgency=low + + * debian/patches/06_cap_always_settable.dpatch: + + Added; add back SANE_CAP_ALWAYS_SETTABLE which was mistakenly + removed from SANE 1.0.20 (closes: #527675, #527682). + + -- Julien BLACHE Fri, 08 May 2009 21:03:56 +0200 + +sane-backends (1.0.20-2) unstable; urgency=low + + * Update previous changelog entry wrt #519101 resolution. + + * debian/patches/04_udev_rules_fix.dpatch: + + Added; fix udev rules, use ATTRS instead of ATTR (closes: #527196). + * debian/patches/05_saned_avahi_fds_fix.dpatch: + + Added; fix a possible net backend hang when saned is run in debug + mode. Could also happen in standalone mode, but a lot less likely. + + -- Julien BLACHE Wed, 06 May 2009 12:02:59 +0200 + +sane-backends (1.0.20-1) unstable; urgency=low + + * New upstream release. + + Unsupported devices are no longer included in the udev rules + (closes: #519101). + + * debian/control: + + Bump Standards-Version to 3.8.1 (no changes). + + Add build-dep on libv4l-dev. + + Add dependency on libv4l-dev to libsane-dev. + + Move libsane-dbg to debug section. + * debian/rules: + + Use DESTDIR at install time. + + Remove rpath from sane-find-scanner. + + * debian/patches/01_missing_pthreads.dpatch: + + Added; new build system breaks build when using pthreads. + * debian/patches/02_frontends_libs.dpatch: + + Added; only link the frontends with the libraries they need. + * debian/patches/03_libsane_deps.dpatch: + + Added; reduce libsane.so deps to the bare minimum. + + * debian/patches/11_minimum_linkage.dpatch: + + Removed; build system was redone using automake and this isn't + needed anymore. + * debian/patches/12_new_configure.dpatch: + + Removed; not needed anymore, due to #11 going away. + + * debian/patches/21_sane-config.in_no_rpath.dpatch: + + Updated; updated for new build system. + * debian/patches/23_unneeded_doc.dpatch: + + Updated; updated for new build system. + + * debian/patches/22_dll_backend_conf.dpatch: + + Updated; dll.d support has been merged upstream, update dll.conf header. + + * debian/patches/01_manpages_fixes.dpatch, 02_pixma_update.dpatch, + 03_snapscan_usb_ftok_fix.dpatch, 04_sane-desc_hal_new.dpatch, + 05_hp_timing_fix.dpatch, 06_sanei_scsi_attach_fix.dpatch, + 07_epson2_be_nice.dpatch, 08_epson2_be_nice_to_saned.dpatch, + 09_avision_fixes.dpatch, 10_sm3840_unbreak_sane_open.dpatch, + 30_new_saned.dpatch, 31_sanei_pthread_64bit_fix.dpatch, + 32_net_backend_standard_fix.dpatch, 33_scanimage_options_fix.dpatch, + 40_fujitsu_fixes.dpatch, 41_epjitsu_fixes.dpatch: + + Removed; fixes and enhancements taken from upstream or merged upstream + in this release. + + -- Julien BLACHE Mon, 04 May 2009 12:45:50 +0200 + +sane-backends (1.0.19-26) unstable; urgency=low + + * debian/rules: + + Do not generate /etc/modprobe.d/libsane anymore. + + * debian/libsane.preinst: + + Remove obsolete /etc/modprobe.d/libsane conffile. + + * debian/patches/30_new_saned.dpatch: + + Updated; workaround for backends writing to stdin/stderr/stdout when + run via inetd, which breaks the network dialog and causes the remote + net backend to crash (closes: #516982). + + -- Julien BLACHE Wed, 04 Mar 2009 10:49:42 +0100 + +sane-backends (1.0.19-25) unstable; urgency=low + + * debian/rules: + + Remove comment bit, breaking configure invocation. + * debian/control: + + Add ${misc:Depends}. + * debian/sane-utils.postrm: + + Make the script set -e. + + * debian/patches/30_new_saned.dpatch: + + Updated; (net backend) do not attempt to lock the Avahi polling + thread before stopping it, it now produces a deadlock. Looks like + a change/fix was made in Avahi (closes: #513122). + + -- Julien BLACHE Wed, 18 Feb 2009 11:50:31 +0100 + +sane-backends (1.0.19-24) unstable; urgency=low + + * debian/rules: + + Enable use of pthread instead of fork for reader processes. + * debian/libsane.postinst: + + Remove code dealing with devfs/hotplug/hotplug-ng. + + * debian/patches/11_minimum_linkage.dpatch: + + Update; add $(LIBPTHREAD) to library dependencies where needed. + + -- Julien BLACHE Sun, 15 Feb 2009 11:50:13 +0100 + +sane-backends (1.0.19-23) unstable; urgency=low + + * debian/patches/09_avision_fixes.dpatch: + + Updated; fix reader task handling to not signal the whole process group + erroneously. + + * debconf translations: + + it.po: courtesy of Luca Monducci (closes: #507563). + + -- Julien BLACHE Tue, 09 Dec 2008 16:14:06 +0100 + +sane-backends (1.0.19-22) unstable; urgency=low + + * debian/patches/41_epjitsu_fixes.dpatch: + + Added; from CVS, fix double-free issues in epjitsu (closes: #506750). + + -- Julien BLACHE Mon, 24 Nov 2008 15:02:04 +0100 + +sane-backends (1.0.19-21) unstable; urgency=low + + * debian/rules: + + Use an error handler for saned's init. + * debian/sane-utils.postinst: + + Added error handler for saned init (closes: #493745). + + * debconf translations: + + es.po: courtesy of Ignacio Mondino (closes: #499202). + + -- Julien BLACHE Fri, 19 Sep 2008 10:50:04 +0200 + +sane-backends (1.0.19-20) unstable; urgency=low + + * debian/control: + + Make sane-utils depend on update-inetd (>= 4.31) which won't break + with debconf. + * debian/sane-utils.postinst: + + update-inetd needs debconf sometimes, so keep debconf enabled until + after the update-inetd call. + + -- Julien BLACHE Fri, 05 Sep 2008 11:04:59 +0200 + +sane-backends (1.0.19-19) unstable; urgency=low + + * debian/rules: + + Install umax_pp into sane-utils (closes: #496833). + + * debian/patches/40_fujitsu_fixes.dpatch: + + Added; upstream backport of fujitsu backend fixes, fixes a string + initialization issue in config file parsing, adds color mode for the + fi-6130, 6230, 6140, 6240 and fixes fi-6230 hangs at wakeup from + powersave mode. + Thanks to M. Allan Noah for providing a backport (closes: #494156). + + -- Julien BLACHE Thu, 28 Aug 2008 10:31:35 +0200 + +sane-backends (1.0.19-18) unstable; urgency=low + + * debian/patches/10_sm3840_unbreak_sane_open.dpatch: + + Added; from CVS, fix the way sane_open() checks for sanei_usb_open() + errors (closes: #496249). + + * debconf translations: + + ja.po: courtesy of Hideki Yamane (closes: #493568). + + -- Julien BLACHE Wed, 27 Aug 2008 19:58:15 +0200 + +sane-backends (1.0.19-17) unstable; urgency=low + + * debian/patches/33_scanimage_options_fix.dpatch: + + Added; get the option descriptor for option 0 before getting the value + for option 0. This is a standard-compliance fix needed for proper + operation with the net backend. + * debian/patches/30_new_saned.dpatch: + + Updated; fix initialization of runas_{g,u}id and ngroups, preventing + failures later on in some cases (saned -a without username). + + -- Julien BLACHE Tue, 05 Aug 2008 12:10:44 +0200 + +sane-backends (1.0.19-16) unstable; urgency=low + + * debian/patches/30_new_saned.dpatch: + + Updated; Fix seteuid()/setegid() call order and set supplemental group + list (closes: #493084). + + -- Julien BLACHE Thu, 31 Jul 2008 11:46:53 +0200 + +sane-backends (1.0.19-15) unstable; urgency=low + + * debian/patches/09_avision_fixes.dpatch: + + Enable this patch for real. + * debian/patches/31_sanei_pthread_64bit_fix.dpatch: + + Updated. + + -- Julien BLACHE Tue, 22 Jul 2008 23:05:50 +0200 + +sane-backends (1.0.19-14) unstable; urgency=low + + * debian/patches/32_net_backend_standard_fix.dpatch: + + Updated; fix sane_control_option() in the net backend so as to bring + the net backend behaviour back in line with standard backends. This + should fix some issues reported with the net backend lately. + * debian/patches/01_manpages_fixes.dpatch: + + Updated; fix some more hyphen vs. minus sign issues. + + * debian/rules: + + Include debug symbols for sane-utils into libsane-dbg. + * debian/copyright: + + Update. + + -- Julien BLACHE Sun, 20 Jul 2008 12:51:25 +0200 + +sane-backends (1.0.19-13) unstable; urgency=low + + * debian/libsane.README.Debian: + + Fix udev rules filename (closes: #490656). + * debian/patches/01_manpages_fixes.dpatch: + + Updated; fix hyphen vs. minus sign issues reported by lintian. + * debian/patches/30_new_saned.dpatch: + + Updated; manpage fixes. + + -- Julien BLACHE Mon, 14 Jul 2008 13:17:44 +0200 + +sane-backends (1.0.19-12) unstable; urgency=low + + * debian/control: + + Bump Standards-Version to 3.8.0 (no changes). + + * debian/patches/30_new_saned.dpatch: + + Updated; properly terminate child processes when exiting from the + debug mode. + * debian/patches/32_net_backend_standard_fix.dpatch: + + Added; do not reload the option descriptors cache behind the frontend's + back in sane_control_option(). Fetch options descriptors in sane_open() + so GET_VALUE on option 0 can still work without explicitely getting + option descriptor 0 first. + + * debconf translations: + + sv.po: courtesy of Martin Bagge (closes: #487369). + + -- Julien BLACHE Tue, 24 Jun 2008 22:10:35 +0200 + +sane-backends (1.0.19-11) unstable; urgency=low + + * debian/patches/30_new_saned.dpatch: + + Updated; lock the Avahi thread before stopping it and tearing down the + Avahi objects (closes: #484464). + * debian/patches/09_avision_fixes.dpatch: + + Added; from CVS, misc avision backend fixes (closes: #474706, #475198). + + * debconf translations: + + ru.po: courtesy of Yuri Kozlov (closes: #481656). + + -- Julien BLACHE Fri, 06 Jun 2008 17:37:28 +0200 + +sane-backends (1.0.19-10) unstable; urgency=low + + * debian/sane-utils.postinst: + + Make proper use of debconf !@#%$ (closes: #481442). + + * debconf translations: + + fr.po: update by Christian Perrier (closes: #481439). + + -- Julien BLACHE Fri, 16 May 2008 19:26:48 +0200 + +sane-backends (1.0.19-9) unstable; urgency=low + + * debian/sane-utils.postinst: + + Do not attempt to remove saned from the scanner group if it isn't part + of the group in the first place (closes: #481288). + * debian/patches/31_sanei_pthread_64bit_fix.dpatch: + + Added; from CVS, fix sanei_pthread on 64bit platforms. + + -- Julien BLACHE Thu, 15 May 2008 18:54:37 +0200 + +sane-backends (1.0.19-8) unstable; urgency=low + + * Reupload 1.0.19-7 to unstable. + + * debconf translations: + + pt.po: courtesy of Américo Monteiro (closes: #480219). + + cs.po: courtesy of Miroslav Kure (closes: #480313). + + de.po: courtesy of Helge Kreutzmann (closes: #480366). + + vi.po: courtesy of Clytie Siddall (closes: #480483). + + fi.po: courtesy of Esko Arajärvi (closes: #480550). + + fr.po: update by Christian Perrier. + + -- Julien BLACHE Wed, 14 May 2008 19:13:29 +0200 + +sane-backends (1.0.19-7) experimental; urgency=low + + * Introducing new saned & net backend features. + + saned can now run as a standalone daemon and offers mDNS/DNS-SD. The net + backend can discover saned servers on the (local) network. + + * debian/patches/01_manpages_fixes.dpatch: + + Fix man warnings in sane-config.1 and sane-mustek_pp.5. + * debian/patches/30_new_saned.dpatch: + + Added; from CVS HEAD, backport new saned and net backend. + * debian/sane-utils.README.Debian: + + Enhancements, typo fixes. + * debian/sane-utils.templates, debian/sane-utils.config, + debian/sane-utils.postinst: + + Add a debconf question to automatically add the saned user to the + scanner group. + + Add a debconf question to enable saned as a standalone daemon. + * debian/rules: + + Enable Avahi support at configure time. + + Call dh_installdebconf. + + Call dh_installinit. + * debian/control: + + Build-Depend on po-debconf, libavahi-client-dev (>= 0.6.4). + + sane-utils: add ${misc:Depends} to get the appropriate debconf + dependencies. + + sane-utils: recommend avahi-daemon. + + libsane: recommend avahi-daemon. + + libsane-dev: depend on libavahi-client-dev. + * debian/sane-utils.saned.init, debian/sane-utils.saned.default: + + Add an initscript & default file for saned. + + * debconf translations: + + eu.po: courtesy of Piarres Beobide (closes: #479380, #479808). + + fr.po: courtesy of Christian Perrier. + + pt_BR.po: courtesy of Eder L. Marques (closes: #479785). + + gl.po: courtesy of Jacobo Tarrio (closes: #479838). + + -- Julien BLACHE Wed, 07 May 2008 18:37:07 +0200 + +sane-backends (1.0.19-6) unstable; urgency=low + + * debian/patches/08_epson2_be_nice_to_saned.dpatch: + + Added; from CVS, be nice to saned and do not pollute fd 0 + (closes: #479052). + + -- Julien BLACHE Sat, 03 May 2008 16:46:12 +0200 + +sane-backends (1.0.19-5) unstable; urgency=low + + * debian/patches/07_epson2_be_nice.dpatch: + + Added; from CVS, be nice to other backends and close the scanner device + when the device is not recognized (or another error happens) + (closes: #476468). + + -- Julien BLACHE Sat, 19 Apr 2008 17:16:13 +0200 + +sane-backends (1.0.19-4) unstable; urgency=low + + * debian/patches/03_snapscan_usb_ftok_fix.dpatch: + + Updated; improve the patch by falling back to ftok() for non-libusb + devices. + * debian/patches/04_sane-desc_hal_new.dpatch: + + Added; add support for newer HAL versions. + * debian/patches/05_hp_timing_fix.dpatch: + + Added; fix timing issue with HP scanners (closes: #472819). + * debian/patches/06_sanei_scsi_attach_fix.dpatch: + + Added; from CVS, continue to iterate over the list of devices even + if an attempt to attach one of the devices fails. + * debian/rules: + + Generate HAL FDI file for newer HAL versions (closes: #472664). + * debian/libsane-dev.doc-base: + + Fix doc-base section. + + -- Julien BLACHE Fri, 28 Mar 2008 22:39:17 +0100 + +sane-backends (1.0.19-3) unstable; urgency=low + + * debian/patches/01_disable_epson2.dpatch: + + Removed; reenable the epson2 backend. + * debian/patches/03_snapscan_usb_ftok_fix.dpatch: + + Added; work around the usage of ftok() in the snapscan backend. See + the patch description for details (closes: #466855). + + -- Julien BLACHE Sat, 15 Mar 2008 16:16:38 +0100 + +sane-backends (1.0.19-2) unstable; urgency=low + + * debian/patches/02_pixma_update.dpatch: + + Added; update pixma backend from CVS, adding support for + - Pixma MP210, MP470, MP520, MP610, MultiPASS MP710 + - MP140, MP220, MultiPASS MP740 (untested) + - MP970 (experimental, untested) + (closes: #468270). + * debian/rules: + + Generate and install HAL fdi file (closes: #466540). + * debian/control: + + Add update-inetd dependency for sane-utils. + * debian/sane-utils.postinst, debian/sane-utils.postrm: + + Add support for update-inetd (closes: #426514). + * debian/sane-utils.README.Debian: + + Document update-inetd usage. + + -- Julien BLACHE Sat, 01 Mar 2008 14:11:29 +0100 + +sane-backends (1.0.19-1) unstable; urgency=low + + * New upstream release. + + New backends: cardscan (Corex Cardscan 800c), epjitsu (Epson-based + Fujitsu), epson2 (various Epson scanners), hp3900 (HP ScanJet 3970 and + more), hp5590 (HP ScanJet 5590 and more), hpljm1005 (HP LaserJet M1005 + and more), hs2p (Ricoh IS400 series) + + Fix for the pixma backend (closes: #459663). + + Regression fix for the avision backend (closes: #458478, #458932). + * debian/patches/02_hurd_no_plustek_pp.dpatch: + + Removed; merged upstream. + * debian/patches/11_minimum_linkage.dpatch: + + Updated. + * debian/patches/12_new_configure.dpatch: + + Updated. + * debian/control: + + Adjust libsane-extras dependencies for 1.0.19. + + -- Julien BLACHE Tue, 12 Feb 2008 21:44:19 +0100 + +sane-backends (1.0.19~cvs20071213-5) unstable; urgency=low + + * debian/control: + + Build-Depends: xutils-dev instead of xutils. + + Depend on libsane-extras{,-dev,-dbg} to help fix up the buggy udev rules + in libsane-extras. + + Promote libgphoto2-2-dev to Depends: for libsane-dev. + * debian/patches/02_hurd_no_plustek_pp.dpatch: + + Added; do not build plustek_pp on Hurd (closes: #457378). + * debian/patches/12_new_configure.dpatch: + + Updated. + + -- Julien BLACHE Mon, 07 Jan 2008 12:07:27 +0100 + +sane-backends (1.0.19~cvs20071213-4) unstable; urgency=low + + * debian/patches/11_minimum_linkage.dpatch: + + Updated; add libcam for coolscan & umax, remove it for cardscan. + + -- Julien BLACHE Mon, 31 Dec 2007 14:11:34 +0100 + +sane-backends (1.0.19~cvs20071213-3) unstable; urgency=low + + * debian/control: + + Tighten relationship with libsane-extras due to the udev rules renaming. + + -- Julien BLACHE Fri, 28 Dec 2007 11:45:30 +0100 + +sane-backends (1.0.19~cvs20071213-2) unstable; urgency=low + + * debian/rules: + + Generate udev rules as debian/libsane.udev, clean as needed. + + Use dh_installudev. + + Remove libsane-dll.* from /usr/lib/sane; libsane.so and libsane-dll.so + are the same backend. + * debian/libsane.postinst: + + Remove udev installation code. + * debian/libsane.preinst: + + Added; handle upgrade from previous udev code to dh_installudev. + * debian/patches/11_minimum_linkage.dpatch: + + Added; only link backends to the libraries they need. + * debian/patches/12_new_configure.dpatch: + + Added; new configure script. + * debian/patches/12_gphoto2_link_backend_only.dpatch: + + Removed; obsoleted by 11_minimum_linkage.dpatch. + * debian/patches/13_new_configure.dpatch: + + Removed; now 12_new_configure.dpatch. + + -- Julien BLACHE Tue, 25 Dec 2007 22:58:26 +0100 + +sane-backends (1.0.19~cvs20071213-1) unstable; urgency=low + + * New CVS snapshot. + + New backend: hp3900. + * debian/control: + + Bump Standards-Version to 3.7.3 (no changes). + + Bump libsane-extras{,-dev} dependencies/conflicts/replaces to 1.0.18.13. + + Remove module-init-tools recommendation, enforced by udev which is a + dependency. + * debian/rules: + + Remove ${module-init-tools} substvar. + + -- Julien BLACHE Thu, 13 Dec 2007 21:59:02 +0100 + +sane-backends (1.0.19~cvs20071028-1) unstable; urgency=low + + * New CVS snapshot. + + All backends now declare OPT_NUM_OPTS of type SANE_TYPE_INT (closes: #448162). + + Fixed USB IDs for the Epson CX-6600 (closes: #419349). + + Added USB IDs for the Epson DX-6000 (closes: #442051). + * debian/control: + + libsane-dev Recommends: libgphoto2-2-dev. + + -- Julien BLACHE Sun, 28 Oct 2007 11:17:36 +0100 + +sane-backends (1.0.19~cvs20070730-1) unstable; urgency=low + + * New CVS snapshot. + + Workaround for CONFIG_USB_SUSPEND (closes: #434276). + * debian/control, debian/rules: + + Make libsane depend on makedev | udev on Linux (closes: #428220). + * debian/libsane.postinst: + + Change MAKEDEV invocation to invoke /dev/MAKEDEV instead of /sbin/MAKEDEV. + * debian/control: + + Do not {build-,}depend on libusb-dev nor libieee1284-dev on hurd-i386 + (closes: #434575). + + Use ${binary:Version} instead of ${Source-Version}. + * debian/rules: + + Do not ignore make distclean errors. + * debian/patches/30_sanei_scsi_sg_ioctl.dpatch: + + Removed; merged upstream. + + -- Julien BLACHE Mon, 30 Jul 2007 14:03:13 +0200 + +sane-backends (1.0.19~cvs20070505-3) unstable; urgency=low + + * debian/patches/30_sanei_scsi_sg_ioctl.dpatch: + + Added; use the SG_IO ioctl interface instead of the asynchronous + read/write SG3 interface. This allows the use of SCSI scanners in + mixed 32/64bit environments, thanks to the ioctl 32bit compatibility + layer taking care of the 32/64bit sg_hdr conversion (closes: #420193). + + If you own a SCSI scanner, please report back on this change; especially + if, compared to the previous version (1.0.19~cvs20070505-2): + - the scanner backtracks more than it used to with the previous version + - you see weird errors OR you see no error and you should be seeing some + - performance sucks + - resulting image is broken in one way or another + - ... + + -- Julien BLACHE Sun, 20 May 2007 10:46:00 +0200 + +sane-backends (1.0.19~cvs20070505-2) unstable; urgency=low + + * debian/patches/01_disable_epson2.dpatch: + + Added; disable epson2 backend by default (closes: #422697). + + -- Julien BLACHE Sat, 12 May 2007 10:37:11 +0200 + +sane-backends (1.0.19~cvs20070505-1) unstable; urgency=low + + * New CVS snapshot. + + New backend: hp5590. + * debian/patches/31_epson_remove_check.dpatch: + + Removed; merged upstream. + + -- Julien BLACHE Sat, 05 May 2007 20:37:07 +0200 + +sane-backends (1.0.19~cvs20070421-1) unstable; urgency=low + + * debian/control: + + Update Build-Depends for the TeXLive migration. + + Removed old Conflicts. + + Upgrade libsane-extras minimum version to 1.0.18.6. + * debian/rules: + + Drop hotplug support. + + Drop code for Sarge backports. + * debian/libsane.postinst: + + Remove old hotplug-ng files, code taken from Ubuntu. + * debian/libsane.README.Debian, debian/sane-utils.README.Debian: + + Removed hotplug notes. + * debian/patches/03_usb_perms_664.dpatch: + + Removed; merged upstream. + * debian/patches/11_hotplug_wait_for_device.dpatch: + + Removed; not needed anymore. + * debian/patches/30_udev_long_comment_lines.dpatch: + + Removed; merged upstream. + * debian/patches/32_microtek2_add_check.dpatch: + + Removed; merged upstream. + * debian/patches/33_manpages_fixes.dpatch: + + Removed; merged upstream. + + -- Julien BLACHE Sat, 21 Apr 2007 13:33:26 +0200 + +sane-backends (1.0.18-6) unstable; urgency=low + + * Enable libieee1284 support on kFreeBSD-amd64 (closes: #413178). + * debian/control: + + Build-depend on libieee1284-3-dev (>= 0.2.10-5) for all architectures. + + libsane-dev depends on libieee1284-3-dev (>= 0.2.10-5) for all architectures. + * debian/rules: + + Remove the libieee1284-3-dev substitution variable. + + -- Julien BLACHE Sat, 3 Mar 2007 11:39:33 +0100 + +sane-backends (1.0.18-5) unstable; urgency=medium + + * debian/patches/32_microtek2_add_check.dpatch: + + Added; Add missing return status check, preventing a segfault later + on (closes: #398153). + * debian/patches/33_manpages_fixes.dpatch: + + Added; fix man warnings in some manpages. + + -- Julien BLACHE Mon, 8 Jan 2007 19:52:22 +0100 + +sane-backends (1.0.18-4) unstable; urgency=medium + + * debian/patches/31_epson_remove_check.dpatch: + + Added; Remove bogus check in epson backend get_identity2_information() + affecting Stylus CX5xxx models (closes: #399119, #402444). + * debian/sane-utils.README.Debian: + + Fix typo, the manpage for saned is in section 8 not 1. + * debian/control: + + libsane-dbg is Priority: extra. + + Remove Uploaders. + + Thank you Aurélien JARNO for your help during these years. + + -- Julien BLACHE Sat, 6 Jan 2007 18:46:43 +0100 + +sane-backends (1.0.18-3) unstable; urgency=low + + * debian/patches/30_udev_long_comment_lines.dpatch: + + Added; split very long comment lines in the udev rules file + (closes: #376859). + * debian/libsane.README.Debian: + + Updated; udev no longer sets permissions on /proc/bus/usb/xxx/yyy, + /dev/bus/usb/xxx/yyy is used instead now. + + -- Julien BLACHE Sun, 30 Jul 2006 20:40:09 +0200 + +sane-backends (1.0.18-2) unstable; urgency=low + + * debian/control: + + Build-Depends: libltdl3-dev, needed to link with libgphoto2-2. + + sane-utils Suggests: unpaper. + + -- Julien BLACHE Tue, 4 Jul 2006 09:09:04 +0200 + +sane-backends (1.0.18-1) unstable; urgency=low + + * New upstream release. + + New backends: dell1600n_net, hp3500, pixma, stv680 (closes: #360303). + + Canon LiDE 60 USBids added to the genesys description file (closes: #366871). + * debian/patches/01_usbids.dpatch: + + Removed; merged upstream. + * debian/patches/26_manpages_spelling_fixes.dpatch: + + Removed; merged upstream. + * debian/patches/25_glibc_sys_io_h.dpatch: + + Removed; merged upstream. + * debian/patches/03_usb_perms_664.dpatch: + + Updated; the convert-usermap.sh scripts are gone. + * debian/patches/04_udev_rules_fix.dpatch: + + Removed; merged upstream. + * debian/rules: + + Use sane-desc to generate the udev rules file and the hotplug data file. + + Improve manpage list generation for the libsane package. + * debian/control: + + Build-Depends: libtiff4-dev, for the dell1600n_net backend. + + -- Julien BLACHE Mon, 3 Jul 2006 20:30:17 +0200 + +sane-backends (1.0.17-4) unstable; urgency=low + + * debian/compat: + + Bumped DH_COMPAT to 5. + * debian/control: + + Bumped Standards-Version to 3.7.2 (no changes). + + Build-Depend on debhelper (>= 5.0.0) for DH_COMPAT=5. + + New libsane-dbg binary for debugging symbols (closes: #366767). + * debian/rules: + + Tell dh_strip to put debugging symbols into libsane-dbg. + + -- Julien BLACHE Fri, 26 May 2006 13:40:01 +0200 + +sane-backends (1.0.17-3) unstable; urgency=low + + * debian/control: + + Add ${libieee1284-3-dev} to libsane-dev Depends: (closes: #364294). + + -- Julien BLACHE Sat, 22 Apr 2006 19:58:12 +0200 + +sane-backends (1.0.17-2) unstable; urgency=low + + [ Aurélien JARNO ] + * debian/control: + + Build-depends: libcam-dev on kfreebsd-i386 and kfreebsd-amd64. + + Build-depends: !libieee1284-dev on kfreebsd-amd64. + + libsane-dev depends: libcam-dev on GNU/kFreeBSD. + * debian/patches/25_glibc_sys_io_h.dpatch: + + New; check for GNU libc instead of Linux kernel. + + [ Julien BLACHE ] + * debian/patches/02_udev_rules.dpatch: + + Removed; coldplugging now works OK, the hotplug script aren't needed + anymore (closes: #359800). + * debian/patches/03_usb_perms_664.dpatch: + + Updated. + * debian/patches/04_udev_rules_fix.dpatch: + + Added; fix udev rules file so that the rules only run for ACTION=add + on the usb subsystem (closes: #359797). + * debian/patches/01_usbids.dpatch: + + Added; add Epson Stylus CX7800 USB IDs (closes: #350436). + * debian/patches/26_manpages_spelling_fixes.dpatch: + + Added; various spelling fixes to the manpages (closes: #357568). + * debian/control: + + Removed Conflicts: on very old SANE versions. + + Recommends: module-init-tools (>= 3.2.2-1) (closes: #344541). + + Recommends: udev (>= 0.88-1) for a version of udev with working + coldplugging support. Let me know if the version can be lowered, + thanks. + * debian/rules: + + Add variable substitution for module-init-tools on Linux. + + Add version to the udev variable substitution. + + -- Julien BLACHE Thu, 13 Apr 2006 21:40:58 +0200 + +sane-backends (1.0.17-1) unstable; urgency=low + + Julien BLACHE: + * New upstream release. + + New backends: hp4200, lexmark, mustek_usb2. + + Now ignores EBUSY on set_configuration for real (closes: #332281). + + Fixed USB IDs for BearPaw 2448 TA Plus to use only lowercase letters (closes: #341046). + * debian/patches/01_hotplug_usbids.dpatch: + + Removed; merged upstream. + * debian/patches/02_tools_udev.dpatch: + + Removed; merged upstream. + * debian/patches/02_udev_rules.dpatch: + + Added; add a RUN rule to run the hotplug.d script (for coldplugging). + * debian/control: + + Build-Depends: xutils as makedepend is now used by the build system. + + Adjust conflicts/suggests for libsane-extras. + + Aurélien JARNO: + * debian/patches/03_usb_perms_664.dpatch: + + Added; lsusb needs read access to USB devices to work properly. + + -- Julien BLACHE Sun, 18 Dec 2005 17:09:47 +0100 + +sane-backends (1.0.16-5) unstable; urgency=low + + * debian/patches/02_tools_udev.dpatch: + + Run the hotplug.d script to ensure a working coldplug (closes: #334068). + * debian/patches/30_misc_fixes.dpatch: + + Fix a typo in sane-find-scanner(1) (closes: #310333). + * debian/patches/34_sanei_usb_ignore_set_config_ebusy.dpatch: + + Ignore EBUSY on set_configuration to better accomodate MFC devices (closes: #332281). + * debian/libsane.postrm: + + Remove /etc/udev/rules.d/025_libsane.rules on purge (closes: #333569). + + -- Julien BLACHE Thu, 27 Oct 2005 20:25:16 +0200 + +sane-backends (1.0.16-4) unstable; urgency=low + + * debian/patches/02_tools_udev.dpatch: + + Fix broken tools/udev/convert-usermap.sh script. + + -- Julien BLACHE Wed, 28 Sep 2005 22:59:41 +0200 + +sane-backends (1.0.16-3) unstable; urgency=low + + * The udev release. Thanks to Marco d'Itri for his help. + * debian/patches/02_tools_udev.dpatch: + + Added; adds tools/udev from CVS. + * debian/rules: + + Generate the udev rules file for libsane and install it. + + Generate a modprobe blacklist (same as the hotplug blacklist). + * debian/libsane.postinst: + + Symlink the udev rules file under /etc/udev/rules.d; do that only once. + * debian/control: + + Recommends: hotplug | udev + + -- Julien BLACHE Wed, 28 Sep 2005 22:42:38 +0200 + +sane-backends (1.0.16-2) unstable; urgency=low + + * debian/patches/11_hotplug_wait_for_device.dpatch: + + Bump timeout to 25 seconds. + * debian/patches/01_hotplug_usbids.dpatch: + + Added; pulled from CVS (closes: #323607). + * debian/patches/32_plustek_update.dpatch: + + Supersedes 32_add_lide25.dpatch; plustek backend update, adds LiDE 25 + support and fixes LiDE 20 support. + * debian/patches/33_sm3600_update.dpatch: + + Added; pulled from CVS, sm3600 adapted to sanei_usb. + + -- Julien BLACHE Sun, 28 Aug 2005 18:33:18 +0200 + +sane-backends (1.0.16-1) unstable; urgency=low + + Julien BLACHE: + * New upstream release. + + New backends: sm3840, genesys. + + Fixed typos in manpages (closes: #310332, #310333). + * Patches removed (integrated upstream): + + 01_hotplug_usbids.dpatch + + 02_tools_hotplug-ng.dpatch + + 03_manpages_fixes.dpatch + + Most of 30_misc_fixes.dpatch + + 31_gt68xx_fixes.dpatch + + 32_snapscan_update.dpatch + + 33_avision_update.dpatch + + 34_plustek_update.dpatch + + 35_libusbscanner_2.6_fixes.dpatch + + 36_sane-find-scanner_message.dpatch + + 37_epson_usbids.dpatch + * debian/libsane.postinst: + + Removed the udev check, it's broken and MAKEDEV now does the Right + Thing (tm) on its own (closes: #310216). + + Remove anything debconf-related. + * debian/control: + + Bumped Standards-Version to 3.6.2 (no changes). + + Update the conflict on libsane-extras. + + Downgrade Depends: sane-utils to Recommends: sane-utils now that Sarge + has been released. + + Drop dependency on debconf. + * debian/rules: + + Generate sane-backends.pot, patch from Martin Pitt (closes: #313527). + + Comment call to dh_installdebconf, we don't use debconf anymore. + + Aurélien JARNO: + * DEB_HOST_GNU_SYSTEM replaced by DEB_HOST_ARCH_OS. + * Get rid of debian/control.in by using the -V option of dpkg-gencontrol. + + -- Julien BLACHE Sun, 7 Aug 2005 15:00:05 +0200 + +sane-backends (1.0.15-10) unstable; urgency=low + + * debian/patches/01_hotplug_usbids.dpatch: + + Updated; added Genius ColorPage Vivid3XE (closes: #305993). + + Added Microtek ScanMaker 3700 (closes: #307952). + + Added Epson Stylus RX620 (closes: #308867). + * debian/patches/11_hotplug_wait_for_device.dpatch: + + Added; try to wait for the device to appear in the FS (closes: #302891). + * debian/patches/30_misc_fixes.dpatch: + + Updated; fixed "device model referenced not duplicated" in the v4l + backend (closes: #306458). + * debian/control.in: + + Build-Depend on a fixed libusb. + + -- Julien BLACHE Sun, 22 May 2005 11:09:19 +0200 + +sane-backends (1.0.15-9) unstable; urgency=low + + * debian/patches/22_dll_backend_conf.dpatch: + + Process /etc/sane.d/dll.d first, so that those backends will be loaded + last. This will prevent buggy extras backends to perturb other backends. + * debian/patches/03_manpages_fixes.dpatch: + + Fix a typo in sane(7), reported by A Costa (closes: #302675). + + Fix 3 typos in scanimage(1), also reported by A Costa (closes: #302334). + + -- Julien BLACHE Wed, 20 Apr 2005 16:17:20 +0200 + +sane-backends (1.0.15-8) unstable; urgency=low + + Aurélien Jarno: + * Drop support for the scanner kernel module. Switch to libusb NOW. + + Drop the devfs config file, remove /etc/devfs/conf.d/devfs + in libsane.postinst. + * Transition to the new hotplug hook scheme (pulled from CVS), which is + compatible with both hotplug and hotplug-ng. + + Remove /etc/hotplug/usb/libsane.usermap and /etc/hotplug/usb/libusbscanner + in libsane.postinst. + + Conflicts with libsane-extras (<< 1.0.15.7) to avoid partial upgrades, as + 1.0.15.7 is the version compatible with the new hotplug script. + + Julien Blache: + * Added support for GNU/kFreeBSD (closes: #297979). + + debian/rules: generate control at clean time. + + debian/rules: install README.{linux,freebsd} depending on the system. + + debian/patches/23_unneeded_doc.dpatch: do not install OS-specific READMEs. + + debian/control.in: do not depend on makedev on !linux (via debian/rules). + + debian/libsane.postinst: do not create device nodes on !linux. + * debian/rules: + + Install only the manpages for the backends which have been built. + + Cut the head of libsane.usermap to remove the comments pertaining to the + old usermap format. + * debian/libsane.README.Debian: + + Updated to relfect the hotplug changes. + * debian/libsane.postinst: + + Do not create device nodes when udev is in use. + + -- Julien BLACHE Sun, 6 Mar 2005 00:36:43 +0100 + +sane-backends (1.0.15-7) unstable; urgency=low + + Julien BLACHE: + * debian/patches/22_dll.conf_debian.dpatch + + Removed; renamed to 22_dll_backend_conf.dpatch. + * debian/patches/22_dll_backend_conf.dpatch + + Added; adds a Debian-specific comment to the dll.conf file, and patches + the dll backend to look for pieces of dll.conf in the /etc/sane.d/dll.d + directory; this is a facility for packages providing external backends, + like libsane-extras, hpoj and hplip. + + Aurélien Jarno: + * debian/patches/01_hotplug_usbids.dpatch + + Added Epson Corp. Stylus CX6600 to libsane.usermap (closes: #293082). + + -- Julien BLACHE Mon, 21 Feb 2005 16:43:41 +0100 + +sane-backends (1.0.15-6) unstable; urgency=low + + * debian/control + + Recommends: hotplug (was Suggests: hotplug). + + Suggests: hpoj, hplip. + * debian/rules + + Blacklist the scanner module wrt hotplug. + * debian/libsane.README.Debian + + Explain that the scanner module is going away, and that we're now + blacklisting it wrt hotplug upon installation of the package. + + * debian/patches/01_hotplug_usbids.dpatch + + Updated; added Epson Stylus RX-425. + * debian/patches/37_epson_usbids.dpatch + + Added; adds Epson Stylus RX-425. + * debian/patches/30_misc_fixes.dpatch + + Updated; added initialization of dev->scanning in coolscan.c. + * debian/patches/02_manpages_fixes.dpatch + + Added; manpages fixes from esr. + * debian/patches/32_snapscan_deinterlacer.dpatch + + Removed; renamed to 32_snapscan_update.dpatch. + * debian/patches/32_snapscan_update.dpatch + + Added; contains all of the previous 32_snapscan_deinterlacer.dpatch, + plus it adds support for the Epson Perfection 1270, BenQ 5250C and + quality calibration for the Epson Perfection 2480. + * debian/patches/22_dll.conf_debian.dpatch + + Updated; added the sm3840 backend provided by libsane-extras and the + hpaio backend provided by hplip (closes: #291435). + * debian/patches/38_artec_e+48_conf.dpatch + + Added; adds proper configuration for the Umax AstraSlim SE. + + -- Julien BLACHE Sat, 22 Jan 2005 13:54:58 +0100 + +sane-backends (1.0.15-5) unstable; urgency=medium + + * debian/patches/34_plustek_update.dpatch: + + Added; pulled from CVS, contains fixes for Epson Perfection 1260 + scanners (closes: #290029). + * debian/patches/35_libusbscanner_2.6_fixes.dpatch: + + Added; applied patch from Martin Pitt to use sysfs to determine the + device number, instead of guessing it in a semi-broken way + (closes: #289666). + * debian/patches/36_sane-find-scanner_message.dpatch + + Added; adds a "make sure your scanner is powered up and plugged in" + message to sane-find-scanner (closes: #287592). + + -- Julien BLACHE Wed, 12 Jan 2005 17:48:30 +0100 + +sane-backends (1.0.15-4) unstable; urgency=medium + + * debian/control: + + Added build-dependency on pkg-config (closes: #286140). + * debian/patches/13_new_configure.dpatch: + + Fixed; remove unwanted autom4te.cache directory from the patch + (closes: #286143). + + -- Julien BLACHE Sun, 19 Dec 2004 18:08:23 +0100 + +sane-backends (1.0.15-3) unstable; urgency=low + + * debian/patches/31_gt68xx_fixes.dpatch: + + Updated; added a fix for Mustek BearPaw 2448 TA/CS Plus scanners + (closes: #284674). + * debian/patches/33_avision_update.dpatch: + + Added; improved avision backend from CVS. + + -- Julien BLACHE Thu, 9 Dec 2004 16:01:50 +0100 + +sane-backends (1.0.15-2) unstable; urgency=low + + * debian/patches/01_hotplug_usbids.dpatch: + + Added; taken from CVS, adds missing USB IDs to the hotplug scripts + (closes: #280821, #281003). + * debian/patches/31_gt68xx_fixes.dpatch: + + Added; taken from CVS, fixes incorrect mode check for some scanners + (closes: #281061). + * debian/patches/30_misc_fixes.dpatch: + + Added; miscellaneous fixes from CVS/sane-devel. + * debian/patches/32_snapscan_deinterlacer.dpatch: + + Added; taken from CVS, adds a deinterlacer filter to the snapscan + backend, which is needed to scan at 2400 DPI with some scanners. + + -- Julien BLACHE Sun, 14 Nov 2004 15:39:36 +0100 + +sane-backends (1.0.15-1) unstable; urgency=low + + * New upstream release. + + Patch for Microtek Phantom C6 on PowerPC merged upstream + (closes: #274523). + + New backend: niash. + * debian/control: + + Update conflicts/replaces on libsane-extras 1.0.15.1. + * debian/patches/01_libusbscanner.dpatch: + + Removed; taken from CVS, included in this version. + * debian/patches/02_epson_usbids.dpatch: + + Removed; taken from CVS, included in this version. + * debian/patches/03_hotplug_usbids.dpatch: + + Removed; merged upstream. + * debian/patches/11_libtool_unneeded_checks.dpatch: + + Removed. + * debian/patches/12_gphoto2_link_backend_only.dpatch: + + Updated; revert unwanted backend/Makefile.in patch causing an incorrect + rpath in /usr/lib/libsane.la (closes: #279082). + * debian/patches/13_new_configure.dpatch: + + Updated. + * debian/patches/22_dll.conf_debian.dpatch: + + Updated; the niash backend is now part of SANE. + * debian/patches/25_saned_man_section.dpatch: + + Removed; merged upstream. + * debian/patches/26_scanimage_batch.dpatch: + + Removed; merged upstream. + * debian/patches/27_snapscan-usb_count_urb.dpatch: + + Removed; taken from CVS, included in this version. + * debian/sane-utils.README.Debian: + + Fix reference to /usr/share/doc/libsane/README.Debian.gz + (closes: #278670). + + -- Julien BLACHE Tue, 9 Nov 2004 23:28:23 +0100 + +sane-backends (1.0.14-7) unstable; urgency=medium + + * Co-maintainer upload. + * debian/patches/27_snapscan-usb_count_urb.dpatch: + + Added, backported from CVS: Don't enforce even number of URB packages + on snapscan 1212u_2 (closes: #250885). + * debian/patches/03_hotplug_usbids.dpatch: + + Added Epson Corp. Stylus CX6400 to libsane.usermap (closes: #293946). + + -- Aurelien Jarno Mon, 9 Aug 2004 11:17:13 +0200 + +sane-backends (1.0.14-6) unstable; urgency=medium + + * Urgency=medium as this revision will fix the upgrade path from Woody. + * debian/control: + + Removed obsolete gcc-3.3 build-depends (closes: #262245). + + Upgraded the sane-utils recommendation to a dependency as an upgrade + path from Woody (closes: #263408). + * debian/rules: + + Create /etc/hotplug/blacklist.d/libsane to prevent hotplug + from loading the no-longer-needed hpusbscsi module (closes: #260734). + * debian/patches/03_hotplug_usbids.dpatch: + + Added; adds HP ScanJet 5300C to libsane.usermap (closes: #260736). + * debian/patches/26_scanimage_batch.dpatch: + + Added; adds possibility to interrupt a batch scan in scanimage by + pressing ^D (closes: #260230). + + -- Julien BLACHE Wed, 4 Aug 2004 22:12:40 +0200 + +sane-backends (1.0.14-5) unstable; urgency=low + + * debian/patches/02_epson_usbids.dpatch + + Put back the USB IDs for the Perfection 1650, remove the USB IDs for the + Perfection 1250, which now really fixes the bug. + + -- Julien BLACHE Sun, 13 Jun 2004 13:48:27 +0200 + +sane-backends (1.0.14-4) unstable; urgency=low + + * debian/libsane.postinst + + modutils is Required, not Essential; replace kernelversion (provided by + modutils) by uname -r | cut (closes: #254140). + + -- Julien BLACHE Sun, 13 Jun 2004 12:12:02 +0200 + +sane-backends (1.0.14-3) unstable; urgency=low + + * debian/libsane.postinst + + Do not create /dev/usb/scanner* if running a 2.6 kernel. + * debian/patches/02_espon_usbids.dpatch + + Remove USB IDs for Perfection 1250 and 1260; these scanners are handled + by the plustek backend (pulled from CVS) (closes: #248859). + * debian/patches/25_saned_man_section.dpatch + + Added; saned goes to /usr/sbin, its manpage should go to section 8. + + -- Julien BLACHE Fri, 11 Jun 2004 21:37:18 +0200 + +sane-backends (1.0.14-2) unstable; urgency=low + + * debian/patches/22_dll.conf_debian.dpatch + + Enable the hpoj backend by default (closes: #246985, #248379). + * debian/patches/01_libusbscanner.dpatch + + Pulled from CVS, fixes hotplug's lack of backward compatibility + (closes: #248770). + + -- Julien BLACHE Thu, 20 May 2004 20:25:18 +0200 + +sane-backends (1.0.14-1) unstable; urgency=low + + * New upstream release. + + USB IDs for EPSON Stylus CX5400 added (closes: #243295). + + USB IDs for Nikon CoolScan 5000 added (closes: #243792). + * debian/hotplug/* + + removed, integrated upstream (tools/hotplug). + * debian/patches/01_mustek_pp_unified.dpatch + + removed, integrated in this release. + * debian/patches/02_hp_backend_usb_fix.dpatch + + removed, integrated in this release. + * debian/rules + + install the provided hotplug script and config file. + + -- Julien BLACHE Sat, 1 May 2004 16:26:47 +0200 + +sane-backends (1.0.13-4) unstable; urgency=low + + * debian/patches/02_hp_backend_usb_fix.dpatch + + added, pulled from CVS, fixes USB problems on kernel 2.6 (closes: #242188). + * Updated libsane.usermap from CVS (closes: #242090). + * Updated README.Debian, fixed a couple of typos. + + -- Julien BLACHE Sun, 11 Apr 2004 10:31:41 +0200 + +sane-backends (1.0.13-3) unstable; urgency=low + + * debian/libsane.config, debian/libsane.templates, debian/po: + + Removed, we don't use debconf anymore. + * debian/postinst: + + Fixed the /dev/usb/parport0 typo that should have read /dev/parport0. + Thanks to Tore Anderson for catching this one. + + Removed anything debconf-related, only purge whatever is left in the + debconf DB (closes: #224597). + + -- Julien BLACHE Sat, 20 Dec 2003 18:44:37 +0100 + +sane-backends (1.0.13-2) unstable; urgency=low + + * debian/patches: order of the patches changed (slightly). + + 01_mustek_pp_unified.dpatch: scan area fixes. + + -- Julien BLACHE Mon, 1 Dec 2003 19:19:19 +0100 + +sane-backends (1.0.13-1) unstable; urgency=low + + * New upstream release. + * debian/patches: + + 20_net.c_fixes.dpatch : removed, merged upstream. + + 21_gt68xx_uhci_fixes.dpatch : ditto. + + 04_hp5400_sanei_config2.dpatch : ditto. + + 03_new_configure : updated. + + 04_mustek_pp_unified: added; with this patch the mustek_pp backend + supports both CIS and CCD scanners (closes: #190998). + * debconf: + + Direct users to README.Debian.gz instead of README.Debian + (closes: #217347). + + Added Japanese translation (closes: #214040). + + Added Dutch translation (closes: #218905). + + Added German translation, thanks to Dirk Ritter and debian-l10n-german. + * debian/sane-utils.README.Debian: + + More details about the saned user and group, and the reason why the saned + user is not part of the scanner group by default (closes: #220024). + * debian/devfs/scanner: + + Added an example for SCSI devices, thanks to Dirk Ritter. + * debian/control: + + Standards-Version bumped to 3.6.1 (no changes). + * debian/rules, debian/compat: + + Switch to DH_COMPAT 4, and moved from dh_movefiles to dh_install. + * debian/control, debian/rules: + + Build-depend on chrpath and use it to remove rpath from the binaries. + + -- Julien BLACHE Mon, 24 Nov 2003 18:35:21 +0100 + +sane-backends (1.0.12-7) unstable; urgency=low + + * The "Maintainer's birthday" release. + * Simplified the needlessly complex debconf questions. Now use a multiselect + question instead of 3 independent questions. + + debian/libsane.templates: rewritten to use a multiselect type + + debian/libsane.config: ditto, try to convert from the older questions, + then purge them once done. + + debian/libsane.postinst: rewritten to parse the answer from the new + debconf thingy. + + debian/control: now Depends: debconf (>= 0.5.0) due to the use of db_fset + in debian/libsane.config. + * debian/libsane.postinst: use ':' as a separator for chown instead of '.'. + * debian/libsane.README.Debian: ditto. + * debian/control: only Suggests: hotplug (closes: #205291). + + -- Julien BLACHE Wed, 20 Aug 2003 14:03:14 +0200 + +sane-backends (1.0.12-6) unstable; urgency=low + + * Julien BLACHE + * debian/control + + Bumped Standards-Version to 3.6.0 (no changes). + + libsane depends on adduser (>= 3.47). + + libsane recommends hotplug. + * debian/libsane.templates: templates slightly rewritten to accomodate the + various debconf frontends (closes: #202744). + * debconf-related items: + + Switched debconf templates to debconf-po, thus build-depends on + debhelper (>= 4.1.16) (closes: #203669). + + Added french debconf translation based on translation from Michel + Grentzinger for sane-backends 1.0.12-5 + (closes: #203670). + * debian/libsane.postinst: + + Add a scanner system group, and chown root.scanner /dev/usb/scanner* if + we create them (closes: #201851). + * debian/libsane.README.Debian: + + Added a Setup paragraph, detailing permissions issues and solutions + implemented by this package. + * debian/sane-utils.README.Debian: + + Added, deals with permissions issues wrt the saned daemon. + * hotplug support: + + debian/hotplug/libusbscanner: added, hotplug script for scanners used + with libusb, courtesy of Max Kutny . Installed as + /etc/hotplug/usb/libusbscanner. + + debian/hotplug/libsane.usermap: example map file for use with hotplug. + Installed as /etc/hotplug/usb/libsane.usermap. + * Aurélien JARNO + * debian/devfs/scanner: + + Added, installed as /etc/devfs/conf.d/scanner. + + -- Julien BLACHE Wed, 6 Aug 2003 13:08:11 +0200 + +sane-backends (1.0.12-5) unstable; urgency=low + + * 21_gt68xx_uhci_fixes.dpatch : fix timeout with UHCI host controllers. + * debian/control: + + Added temporary Build-Dependency on gcc-3.3 (>= 3.3.1-0pre0), which should + fix the ICE on m68k. + * debian/rules: + + Should build with -O2 on m68k again. + + -- Julien BLACHE Wed, 2 Jul 2003 12:04:59 +0200 + +sane-backends (1.0.12-4) unstable; urgency=low + + * Julien BLACHE + * The "I fucking hate libtool" release. Prevent libtool from checking things + we do not need at all, such as a C++ or an F77 compiler. Sigh. + * Converted to dpatch. Build-depends on dpatch. + * Re-enable the gphoto2 backend, -but- do so that frontends do not get linked + against libgphoto2. Only the backend is linked against it. (closes: #195613) + * Thus, adds back the libgphoto2-2-dev build-dependency. + * Effectively move the html doc to the html subdir, instead of copying them + with dh_install. + * Aurélien JARNO + * Add autotools-stamp, so that configure won't be run twice. + * Do not link sanei_config2 in hp5400 : not needed (fixes an undefined + symbol, too). + + -- Julien BLACHE Tue, 3 Jun 2003 22:34:48 +0200 + +sane-backends (1.0.12-3) unstable; urgency=low + + * Fix the net backend so that it _does_ try all alternatives before giving + up connecting to the server (closes: #195396). + + -- Julien BLACHE Fri, 30 May 2003 19:22:54 +0200 + +sane-backends (1.0.12-2) unstable; urgency=low + + * Build with -O1 on m68k; -O2 triggers an ICE. + + -- Julien BLACHE Thu, 29 May 2003 11:36:41 +0200 + +sane-backends (1.0.12-1) unstable; urgency=low + + * New upstream release. + * Should now work on m68k. Yeah. (closes: #77356). + * sane(7) has been improved (closes: #188647). + * scanimage(1) has been fixed, wrt --batch. + * The hp5400 backend has been included, replaces libsane-extras (<< 1.0.12.1). + * IPv6 support. + * Standards-Version bumped to 3.5.10 (no changes). + * libsane-dev belongs to libdevel. + * Do not generate manpages and documentation we do not need. + + -- Julien BLACHE Sun, 25 May 2003 21:14:37 +0200 + +sane-backends (1.0.11-4) unstable; urgency=medium + + * Move saned.conf to the sane-utils package. Woops. (closes: #192742) + + -- Julien BLACHE Sat, 10 May 2003 08:41:23 +0200 + +sane-backends (1.0.11-3) unstable; urgency=medium + + * The "We want to enter testing" release. + * Do not build the gphoto2 backend. Gphoto2 is blocked by a bunch of other + packages (KDE, ...) and we're free of RC bugs. Enough. + * Moved libphoto2-2-dev to Build-Conflicts. + * Bumped shlibs. + + -- Julien BLACHE Sat, 3 May 2003 21:09:58 +0200 + +sane-backends (1.0.11-2) unstable; urgency=low + + * Ok, ok, do not tell how to configure libusb (closes: #180570). + * Do not print "Adding saned..." in sane-utils postinst when the user already + exists. + * Pulled fixed gphoto2 backend from CVS (closes: #180514). + + -- Julien BLACHE Thu, 13 Feb 2003 13:22:21 +0100 + +sane-backends (1.0.11-1) unstable; urgency=low + + * New upstream release. + * Security fixes to saned (closes: #180203). + * Added some debconf dialogs : + * /dev/parport* + * /dev/sg* + * note about /proc/bus/usb + + -- Julien BLACHE Sun, 9 Feb 2003 21:17:16 +0100 + +sane-backends (1.0.10-2) unstable; urgency=low + + * Fix postrm breakage (closes: #179586). + + -- Julien BLACHE Mon, 3 Feb 2003 12:39:14 +0100 + +sane-backends (1.0.10-1) unstable; urgency=low + + * New upstream release. + * Fixed sane-scsi manpage (closes: #174136). + * mustek_pp now has CIS support (closes: #152321). + * Added http://www.mostang.com/sane/sane-mfgs.html + as /usr/share/doc/libsane/supported.html (closes: #174131). + * New backends, previously included in libsane-extras : + * gt68xx + * artec_eplus48u (known as tevion9693usb) + * datadir is ${prefix}/share, not ${prefix}/share/sane. + * Remove /usr/lib/sane/libsane.so.1, as it's not libsane.so.1 (looks like + a libtool side-effect). + * Remove a couple more unwanted READMEs. + * Bumped Standards-Version to 3.5.8. + * Added a debconf dialog to create /dev/usb/* (closes: #177979). + * Added missing dependency on adduser to sane-utils. + + -- Julien BLACHE Sun, 2 Feb 2003 11:22:24 +0100 + +sane-backends (1.0.9-4) unstable; urgency=low + + * Pulled dll.c from CVS, fixes in-line comments (closes: #171521). + * Applied patch for Plustek backend rounding bug (closes: #172012). + + -- Julien BLACHE Mon, 9 Dec 2002 11:51:26 +0100 + +sane-backends (1.0.9-3) unstable; urgency=low + + * Rebuilt against new libgphoto2 package. + * Changed Uploaders: filed so that Aurélien's uploads won't be tagged as + NMU again. + * Do not generate debian/libsane.conffiles at build time, this is handled + by dh_installdeb automatically ; otherwise we end up with each conffile + being listed twice... + + -- Julien BLACHE Sun, 1 Dec 2002 11:29:43 +0100 + +sane-backends (1.0.9-2) unstable; urgency=low + + * Co-maintainer upload. + * Remove /etc/sane.d directory on purge (closes: bug#167603). + + -- Aurelien Jarno Mon, 4 Nov 2002 14:10:54 +0100 + +sane-backends (1.0.9-1) unstable; urgency=low + + * New upstream release. + * Video for Linux (v4l) backend cleanup (closes: #159634). + * Updated Avision backend (closes: #146054). + * Updated Epson backend (closes: #114017). + * Fixed char signedness in backend/plustek-usbshading.c (closes: #164464). + * Fixed debian/copyright (closes: #146057). + * Enabled translations. + * Do not install the upstream changelog twice. + * sane-utils does not create /home/saned. + * Fixed packages descriptions (wrt #165138). + + -- Julien BLACHE Thu, 24 Oct 2002 18:52:29 +0200 + +sane-backends (1.0.8-4) unstable; urgency=low + + * libsane-extras has its own source package now. + + -- Julien BLACHE Sun, 13 Oct 2002 10:49:54 +0200 + +sane-backends (1.0.8-3) unstable; urgency=low + + * New maintainers. + * New upstream release (closes: #162532, #149317). + * saned manpage mentions /usr/sbin/saned (closes: #141464). + * Symlinks for manpages are properly created (closes: #99551). + * Fixed hostnames handling in saned.conf (closes: #51171). + * HP backend update (closes: #116962). + * Backend loader respects LD_LIBRARY_PATH (closes: #143771). + * Path for Epson USB scanner corrected in conf file (closes: #154296, #154305). + * A test backend is included, safer than the pnm backend (closes: #139256). + * Umax backend fixed (closes: #158676). + * HP backend fixed, no longer segfaults (closes: 154827). + * Repackaged from scratch, using debhelper. + * Standards-Version bumped to 3.5.6. + * Do not include rpath informations in sane-config (closes: #143603). + * Fixed build problem wrt umask (closes: #95440). + * Updated libsane-dev Depends (closes: #142679). + * Fixed typos in umax_pp.conf (closes: #158742). + * Fixed hp.conf for some scanners (closes: #154828). + * Fixed README.Debian (closes: #146039). + * Fixed sane-plustek(5) manpage (closes: #159435). + * New package sane-utils, contains sane-find-scanner, scanimage and saned. + * sane-utils creates user and group saned (closes: #141465). + * New package libsane-extras, containing some extra backends + * hp4200 (v0.2p1) + * gt68xx (v1.0-23) + * niash (v20020217) (closes: #160327) + * tevion9693 (v0.0.9) + * Disabled translations until 1.0.9. + + -- Julien BLACHE Sat, 12 Oct 2002 10:28:09 +0200 + +sane-backends (1.0.8-2) unstable; urgency=low + + * Added build-depends on gettext(closes: #163681). + + -- Kevin Dalley Mon, 7 Oct 2002 09:32:21 -0700 + +sane-backends (1.0.8-1) unstable; urgency=low + + * New upstream release. Many n ew backends. Many more updated backends. + + -- Kevin Dalley Sun, 6 Oct 2002 18:09:28 -0700 + +sane-backends (1.0.7-3.2) unstable; urgency=high + + * Non-Maintainer Upload. + * Fix build on SPARC. + * Fix build on HPPA, although it's not RC (closes: Bug#138108). + + -- Julien BLACHE Sun, 7 Apr 2002 11:39:41 +0200 + +sane-backends (1.0.7-3.1) unstable; urgency=medium + + * Non-Maintainer Upload. + * Fixes compilation on Alpha, using the frontend/scanimage.c file from + the current CVS (close: Bug#138108). + * Applied patch submitted to #139509, regarding config.{sub,guess} issues + on MIPS (close: Bug#139509). + * Fixed lintian complaint wrt misplaced Conflicts: field in control file. + * Fixed lintian complaint about .comment section in /usr/lib/sane/*.so.*. + + -- Julien BLACHE Sun, 31 Mar 2002 20:24:48 +0200 + +sane-backends (1.0.7-3) unstable; urgency=low + + * link with libusb-0.1-4 (closes: #119393). + + -- Kevin Dalley Fri, 15 Mar 2002 18:31:08 +0000 + +sane-backends (1.0.7-2) unstable; urgency=low + + * stop link with libusb due to inconsistencies with versions of libusb + libraries. When libusb installation is cleaned up, then usb support + will be added again. Unfortunately, this re-opens bug #119393, though + with a lower severity. (closes: #138349). + + -- Kevin Dalley Thu, 14 Mar 2002 22:25:53 +0000 + +sane-backends (1.0.7-1) unstable; urgency=low + + * new upstream release of sane. + + * adds libusb, which includes ScanMaker 3600 drivers (closes: #119393). + * installs plustek-share.h so that plustek driver can be built (closes: + #72341) + + -- Kevin Dalley Thu, 14 Mar 2002 01:02:21 +0000 + +sane-backends (1.0.6-1) unstable; urgency=low + + * new upstream release of sane. + * new backends: gphoto2. + + -- Kevin Dalley Sun, 27 Jan 2002 23:30:19 -0800 + +sane-backends (1.0.5-3) unstable; urgency=low + + * rebuilt with new version of libgimp-1.2.2-2. + + -- Kevin Dalley Tue, 2 Oct 2001 22:31:15 -0700 + +sane-backends (1.0.5-2) unstable; urgency=low + + * removed incorrect build dependency on libc6-dev (closes: #108639). + + -- Kevin Dalley Thu, 16 Aug 2001 08:12:40 -0700 + +sane-backends (1.0.5-1) unstable; urgency=low + + * New backends: bh (Bell+Howell Copiscan II series), dc240 (Kodak DC240 + Digital Camera), sm3600 (Microtek ScanMaker 3600), umax_pp (Umax paralell + port scanners). + + * Fixed security bug in saned.c that allowed access to scanner without + password. + + -- Kevin Dalley Sat, 28 Jul 2001 12:38:46 -0700 + +sane-backends (1.0.4-2) unstable; urgency=low + + * increased timeout in sanei_scsi.c, which removes problem with 2.4 + kernel (closes: #84407). + + -- Kevin Dalley Thu, 31 May 2001 04:36:29 -0700 + +sane-backends (1.0.4-1) unstable; urgency=low + + * new upstream release of sane. + * as63driver added (closes: #69625). + + -- Kevin Dalley Sun, 28 Jan 2001 09:17:24 -0800 + +sane-gimp1.1 (1.0.3-4) unstable; urgency=low + + * link sane-gimp1.1 with libgimp1.1-1.1.29. + * change control files so that packages sane and sane-gimp1.1 are + explicitly described as working with gimp and gimp1.1 respectively. + The package sane now mentions the packages sane-gimp1.1 and vice + versa. + + -- Kevin Dalley Sun, 5 Nov 2000 13:56:49 -0800 + +sane (1.0.3-3) unstable; urgency=low + + * link sane-gimp1.1 with libgimp1.1-1.1.28, which is new library (closes: + #75029). + + * define GIMP_ENABLE_COMPAT_CRUFT to allow use of newer libgimp. + + -- Kevin Dalley Sun, 22 Oct 2000 21:52:29 -0700 + +sane (1.0.3-2) unstable; urgency=low + + * fix dependency in libsane-dev (closes: #71578). + * remove extraneous file which contains space in its name, which causes + patch and dpkg-source to fail. (closes: #71566, #71564, #71540). + + -- Kevin Dalley Fri, 22 Sep 2000 23:04:17 -0700 + +sane (1.0.3-1) unstable; urgency=low + + * new upstream release of sane + * new backends: mustek_pp, plustek, st400, v41 + * Many updated backends + * 16 bit support for scanimage. + + -- Kevin Dalley Sat, 2 Sep 2000 11:32:08 -0700 + +sane (1.0.2-1) unstable; urgency=low + + * new upstream release of sane + * Aliased and hidden backend support. + * Added Ricoh IS50 support. + * updated many backends. + * New Linux SCSI Generic driver. + * sane-gimp1.1 linked with libsane-1,1.22 (closes: #66544). + + -- Kevin Dalley Mon, 3 Jul 2000 23:38:42 -0700 + +sane (1.0.1-1999-10-21-12) frozen unstable; urgency=low + + * add libjpeg62-dev, tetex-bin, tetex-extra to Build-Depends (closes: + #61834, 61835). + + -- Kevin Dalley Wed, 5 Apr 2000 10:37:38 -0700 + +sane-gimp1.1 (1.0.1-1999-10-21-11) frozen unstable; urgency=low + + * Add Build-Depends to control files for sane and sane-gimp1.1 (closes: + #60923). + + -- Kevin Dalley Mon, 27 Mar 2000 03:16:55 -0800 + +sane (1.0.1-1999-10-21-10) frozen unstable; urgency=low + + * Improve description in control file (closes: #57032). + * link sane-gimp1.1 with libgimp1.1.17, which is the most recent + libgimp1.1 in frozen. + + -- Kevin Dalley Mon, 28 Feb 2000 02:37:20 +0000 + +sane (1.0.1-1999-10-21-9) frozen unstable; urgency=low + + * link sane-gimp1.1 with libgimp1.1.15, which is the most recent + libgimp1.1 in frozen. + + -- Kevin Dalley Sat, 22 Jan 2000 01:57:55 -0800 + +sane (1.0.1-1999-10-21-8) unstable; urgency=low + + * sane now conflicts with gimp1.1, which increases the chances of + getting the correct versions of gimp with each version of sane + (closes: #55070). Unfortunately, sane-gimp1.1 cannot conflict with + gimp, since gimp1.1 provides gimp. + + -- Kevin Dalley Sun, 16 Jan 2000 11:41:52 -0800 + +sane (1.0.1-1999-10-21-7) unstable; urgency=low + + * link with libgimp1.1.14 (closes: #53982) + * remove conflict of libsane-gimp1.1 with itself (closes: #49709). + * Each version of sane and sane-gimp1.1 now depend upon the same release + of libsane (closes: #50927). + * shlibs dependencies is updated to ">= 1.0.1-1999-10-21-7" to reduce + chances of problem #50927. + + -- Kevin Dalley Sun, 9 Jan 2000 13:22:57 -0800 + +sane (1.0.1-1999-10-21-6) unstable; urgency=low + + * add conflict between libsane and older version of sane, sane-gimp1.1 + due to moving documentation from sane to libsane (closes: #50735). + + -- Kevin Dalley Sat, 20 Nov 1999 15:15:30 -0400 + +sane (1.0.1-1999-10-21-5) unstable; urgency=low + + * added link for /usr/lib/libsane-dll.so, again. + + -- Kevin Dalley Fri, 19 Nov 1999 00:03:40 -0400 + +sane (1.0.1-1999-10-21-4) unstable; urgency=low + + * corrected problematic stripping of "libsane.la" (closes: #50099). + * move much of documentation from sane package to libsane and + libsane-dev package. + * move find-scanner to libsane + + -- Kevin Dalley Wed, 17 Nov 1999 23:08:44 -0400 + +sane (1.0.1-1999-10-21-3) unstable; urgency=low + + * added link for /usr/lib/libsane-dll.so + + -- Kevin Dalley Mon, 25 Oct 1999 01:24:30 -0700 + +sane (1.0.1-1999-10-21-2) unstable; urgency=low + + * corrected link of libsane.so.1 + + -- Kevin Dalley Sun, 24 Oct 1999 14:43:14 -0700 + +sane (1.0.1-1999-10-21-1) unstable; urgency=low + + * cvs server version from 1999-10-21 + * many bugs fixed in various backends + + -- Kevin Dalley Fri, 22 Oct 1999 22:06:52 -0700 + +sane (1.0.1-6) unstable; urgency=low + + * relink sane-gimp1.1 with libgimp1.1.10 + + -- Kevin Dalley Thu, 14 Oct 1999 23:33:18 -0700 + +sane (1.0.1-5) unstable; urgency=low + + * relink sane-gimp1.1 with libgimp1.1.9 + * separate sane-gimp1.1 from sane + + -- Kevin Dalley Sun, 10 Oct 1999 03:42:37 -0700 + +sane (1.0.1-4) unstable; urgency=low + + * added sane-gimp1.1 (used with gimp1.1) at the same time as sane for + gimp-1.0.x. + + -- Kevin Dalley Wed, 30 Jun 1999 00:54:57 -0700 + +sane (1.0.1-3) unstable; urgency=low + + * try to fix problems with shared libraries. Install libsane-dll.so in + /usr/lib so that programs linked with libsane will run. (Needed to + fix xsane bug #37756). + + -- Kevin Dalley Mon, 31 May 1999 22:15:16 -0700 + +sane (1.0.1-2) unstable; urgency=low + + * remove dependencies for libsane + + -- Kevin Dalley Fri, 30 Apr 1999 23:08:50 -0700 + +sane (1.0.1-1) unstable; urgency=low + + * version 1.0.1 + * new backend for Sharp scanner + * update backends for Kodak DC25, HP, Microtek, Micro, Mustek, Nikon + Coolscan, snapscan, UMAX. + * fixes problem with HP scanner (closes #32516) + * includes backend for dc210 (closes #31377) + + -- Kevin Dalley Tue, 27 Apr 1999 01:24:33 -0700 + +sane (1.00-2) unstable; urgency=low + + * removed examples directory. Moved examples/tools to tools directory. + + -- Kevin Dalley Mon, 5 Apr 1999 02:04:53 -0700 + +sane (1.00-1) unstable; urgency=low + + * 1.00 is released + * artec is back in dll.conf + * many more scanner supported and more changes + + -- Kevin Dalley Sat, 5 Dec 1998 01:00:30 -0800 + +sane (0.74-2) unstable; urgency=low + + * temporarily comment out artec in dll.conf, due to bad interaction with + Umax scanner. If artec is used as a scanner, uncomment artec from + dll.conf + * automatically generates conffiles, thanks for + Roman.Hodek@informatik.uni-erlangen.de (fixes bug #26545) + * fixes problem with creation of /usr/share/sane during build process + (bug #26314) + + -- Kevin Dalley Sun, 20 Sep 1998 18:00:28 -0700 + +sane (0.74-1) unstable; urgency=low + + * first release of 0.74 + + -- Kevin Dalley Sat, 22 Aug 1998 23:06:26 -0700 + +sane (0.72-1) frozen unstable; urgency=low + + * first official release which supports libgtk1-0.99.9 + + -- Kevin Dalley Fri, 10 Apr 1998 02:29:52 -0700 + +sane (0.71-2) frozen unstable; urgency=low + + * fixed spelling in control files (fixes bug# 19003) + * modified to match latest change in libgtk-0.99.5 + * change datadir to /usr/share/sane + * compatible with libgtk1-0.99.8 (fixes bug #19595) + + -- Kevin Dalley Sun, 22 Mar 1998 19:44:10 -0800 + +sane (0.71-1) unstable; urgency=low + + * new release, which adds support for the following scanners: + Polaroid Digital Microscope Camera (DMC) backend + Apple scanner backend + Nikon CoolScan backend + * removed execute permission in doc directory (fixes: bug #17949) + * modified manual page referring to symbolic link of xscanimage (fixes: + bug #18071) + + -- Kevin Dalley Fri, 27 Feb 1998 23:03:08 -0800 + +sane (0.70-1) unstable; urgency=low + + * update to version 0.70 of sane, adds AGFA SnapScan backend, updates + UMAX backend + + * add patches 2-5 to SnapScan backend which allows other scanners + to work + + -- Kevin Dalley Sat, 31 Jan 1998 17:32:53 -0800 + +sane (0.69-2) unstable; urgency=low + + * correct umax-scanner.h so that Astra 1200S is legal + + -- Kevin Dalley Sun, 25 Jan 1998 09:44:45 -0800 + +sane (0.69-1) unstable; urgency=low + + * update to version 0.69 of sane + + -- Kevin Dalley Fri, 23 Jan 1998 20:24:01 -0800 + +sane (0.68-4) unstable; urgency=low + + * modified gtkglue.c to correspond with changes to libgtk1 + + -- Kevin Dalley Tue, 6 Jan 1998 22:24:14 -0800 + +sane (0.68-3) unstable; urgency=low + + * change plug-in directory to 0.99 to match gimp changes, add explicit + gimp dependency. + * added README.debian + * install find-scanner + * install many documentation files + + -- Kevin Dalley Fri, 2 Jan 1998 21:51:52 -0800 + +sane (0.68-2) unstable; urgency=low + + * corrected control file + + -- Kevin Dalley Sun, 21 Dec 1997 18:26:23 -0800 + +sane (0.68-1) unstable; urgency=low + + * update to version 0.68 of sane + + -- Kevin Dalley Fri, 5 Dec 1997 00:42:27 -0800 + +sane (0.67-1) unstable; urgency=low + + * first Debian release of sane + + -- Kevin Dalley Tue, 18 Nov 1997 21:38:41 -0800 + + --- sane-backends-1.0.20.orig/debian/libsane.links +++ sane-backends-1.0.20/debian/libsane.links @@ -0,0 +1 @@ +usr/share/doc/libsane/html/sane-mfgs.html usr/share/doc/libsane/supported.html --- sane-backends-1.0.20.orig/debian/rules +++ sane-backends-1.0.20/debian/rules @@ -0,0 +1,199 @@ +#!/usr/bin/make -f +# Sample debian/rules that uses debhelper. +# GNU copyright 1997 to 1999 by Joey Hess. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) +DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) +ifeq ($(DEB_HOST_ARCH_OS),) + DEB_HOST_ARCH_OS := $(subst -gnu,,$(shell dpkg-architecture -qDEB_HOST_GNU_SYSTEM)) + ifeq ($(DEB_HOST_ARCH_OS),gnu) + DEB_HOST_ARCH_OS := hurd + endif +endif + +ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) + CFLAGS += -g +endif +ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) + INSTALL_PROGRAM += -s + INSTALL_STRIP_FLAG = "" + STRIP = "" +endif + +patch: patch-stamp +patch-stamp: + dpatch apply-all + dpatch cat-all >patch-stamp + touch patch-stamp + +unpatch: real-clean + dpatch deapply-all + rm -rf patch-stamp debian/patched + +autotools: autotools-stamp +autotools-stamp: + -rm -f config.sub config.guess + ln -s /usr/share/misc/config.sub config.sub + ln -s /usr/share/misc/config.guess config.guess + touch autotools-stamp + +configure: configure-stamp +configure-stamp: patch-stamp autotools-stamp + dh_testdir + + # Add here commands to configure the package. + LDFLAGS="-Wl,-Bsymbolic-functions" \ + ./configure --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) \ + --prefix=/usr \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --datadir=\$${prefix}/share \ + --mandir=\$${prefix}/share/man \ + --with-docdir=\$${prefix}/share/doc/libsane \ + --disable-locking \ + --enable-static \ + --disable-fork-process \ + --with-gphoto2 \ + --enable-translations \ + --enable-avahi + + # generate POT file for translators + (cd po && make sane-backends.pot) + + touch configure-stamp + +build: build-stamp +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + touch build-stamp + +clean: real-clean unpatch +real-clean: + dh_testdir + dh_testroot + rm -f autotools-stamp patch-stamp configure-stamp build-stamp + + # Autoconf-generated files + rm -f include/byteorder.h include/_stdint.h + + # Add here commands to clean up after the build process. + [ ! -f Makefile ] || $(MAKE) distclean + + rm -f debian/libsane.install debian/libsane.docs + rm -f debian/libsane.udev + rm -f config.sub config.guess + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/tmp + $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp + + # remove /usr/lib/sane/libsane.so.1 (libtool side-effect ?) + rm -f debian/tmp/usr/lib/sane/libsane.so.1 + + # remove libsane-dll, same as regular libsane + rm -f debian/tmp/usr/lib/sane/libsane-dll.* + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + + # install only the manpages for the backends which have been built + cp debian/libsane.install.in debian/libsane.install + ls debian/tmp/usr/lib/sane/*.so | sed -e "s#.*/lib\([^.]\+\)[.]so#usr/share/man/man5/\1.5#" | { while read mp; do \ + test -e debian/tmp/$$mp && echo $$mp >> debian/libsane.install; done } + + # Empty dependency_libs in all .la files + find debian/tmp/usr -name "*.la" -type f -exec sed -e "s,^dependency_libs=.*,dependency_libs=''," -i {} \; + + dh_install --sourcedir=debian/tmp + + # install the umax_pp tool into sane-utils + cp tools/umax_pp debian/sane-utils/usr/bin + +ifeq (kfreebsd,$(DEB_HOST_ARCH_OS)) + echo README.freebsd > debian/libsane.docs +endif +ifeq (linux,$(DEB_HOST_ARCH_OS)) + echo README.linux > debian/libsane.docs +endif + + dh_installdocs + + rm -f debian/libsane/etc/sane.d/saned.conf + + # move the html files into html/ + install -d debian/libsane-dev/usr/share/doc/libsane-dev/html + mv debian/libsane-dev/usr/share/doc/libsane-dev/*.html debian/libsane-dev/usr/share/doc/libsane-dev/html/ + + # create the PATH_SANE_DATA_DIR/gt68xx directory in libsane + install -d debian/libsane/usr/share/sane/gt68xx + + # create the /etc/sane.d/dll.d directory in libsane + install -d debian/libsane/etc/sane.d/dll.d + +ifeq (linux,$(DEB_HOST_ARCH_OS)) + # udev support + # Generate the udev rules file + $(CURDIR)/tools/sane-desc -s $(CURDIR)/doc/descriptions -m udev > $(CURDIR)/debian/libsane.udev + dh_installudev +endif + + # Install HAL fdi file + mkdir -p $(CURDIR)/debian/libsane/usr/share/hal/fdi/preprobe/10osvendor + $(CURDIR)/tools/sane-desc -s $(CURDIR)/doc/descriptions -m hal-new > $(CURDIR)/debian/libsane/usr/share/hal/fdi/preprobe/10osvendor/20-libsane.fdi + + # remove rpath from the binaries (wonderful tool !) + chrpath -d debian/sane-utils/usr/sbin/saned + chrpath -d debian/sane-utils/usr/bin/scanimage + chrpath -d debian/sane-utils/usr/bin/sane-find-scanner + + # install the xerox script as an example + dh_installexamples -plibsane tools/README tools/xerox + + dh_installdebconf + dh_installinit -psane-utils --name=saned --error-handler=saned_eh -- start 50 2 3 4 5 . stop 20 1 . + dh_installchangelogs ChangeLog + dh_link + dh_strip --dbg-package=libsane-dbg + dh_compress + dh_fixperms + dh_makeshlibs + dh_installdeb + dh_shlibdeps +ifeq (linux,$(DEB_HOST_ARCH_OS)) + dh_gencontrol -- -Vudev="udev (>= 0.88-1) | makedev (>= 2.3.1-58)" +else + ifeq (kfreebsd,$(DEB_HOST_ARCH_OS)) + dh_gencontrol -- -Vlibcam-dev="libcam-dev" + else + dh_gencontrol + endif +endif + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install patch unpatch real-clean autotools --- sane-backends-1.0.20.orig/debian/libsane-dev.install +++ sane-backends-1.0.20/debian/libsane-dev.install @@ -0,0 +1,8 @@ +usr/include/ +usr/lib/sane/*.a +usr/lib/sane/*.so +usr/lib/*.a +usr/lib/*.so +usr/bin/sane-config +usr/share/man/man1/sane-config.1 +usr/share/doc/*/* usr/share/doc/libsane-dev/ --- sane-backends-1.0.20.orig/debian/sane-utils.templates +++ sane-backends-1.0.20/debian/sane-utils.templates @@ -0,0 +1,19 @@ +Template: sane-utils/saned_run +Type: boolean +Default: false +_Description: Enable saned as a standalone server? + The saned server, when enabled, makes scanners available over the network. + . + There are two ways of running saned: + - as an inetd service, started by the inetd superserver. In this mode, + saned is started on demand when a client connects to the server; + - as a standalone daemon, started at system boot. In this mode, saned + runs in the background all by itself and listens for client connections. + . + When run in standalone mode, saned advertises itself on the network and + can be detected automatically by the SANE clients with no configuration + on the client side. You still need to configure the server to accept + connections from your clients. This feature is experimental and requires + a running Avahi daemon. + . + Accept this option if you want to make use of this feature. --- sane-backends-1.0.20.orig/debian/sane-utils.postinst +++ sane-backends-1.0.20/debian/sane-utils.postinst @@ -0,0 +1,51 @@ +#!/bin/sh +set -e +. /usr/share/debconf/confmodule + +SANED_DEFAULT=/etc/default/saned + +saned_eh () { + echo "saned couldn't start; check your inetd configuration and README.Debian" +} + +if [ "$1" = "configure" ] || [ "$1" = "reconfigure" ]; then + db_get sane-utils/saned_run + RUN_SANED="$RET" + + # Add saned service, disabled by default + if [ -x /usr/sbin/update-inetd ]; then + update-inetd --add "## sane-port\tstream\ttcp\tnowait\tsaned:saned\t/usr/sbin/saned saned" + fi + + # Stop debconf; output to stdout after this point. update-inetd needs debconf. + db_stop + + # Create saned user/group if they do not exist + if ! getent passwd | grep -q "^saned:"; then + echo "Adding saned group and user..." + adduser --quiet --system --no-create-home --group saned || true + fi + + if id saned | grep -q "groups=.*\(scanner\)"; then + deluser --quiet saned scanner + fi + + if [ -e $SANED_DEFAULT ]; then + if [ "$RUN_SANED" = "true" ]; then + RUN_SANED=yes + else + RUN_SANED=no + fi + + sed -e "s/^ *RUN=.*/RUN=$RUN_SANED/" < $SANED_DEFAULT > $SANED_DEFAULT.tmp + mv -f $SANED_DEFAULT.tmp $SANED_DEFAULT + fi + + if dpkg --compare-versions "$2" lt "1.0.19-23ubuntu4"; then + update-rc.d -f saned remove + fi +fi + + +#DEBHELPER# + --- sane-backends-1.0.20.orig/debian/libsane.postinst +++ sane-backends-1.0.20/debian/libsane.postinst @@ -0,0 +1,30 @@ +#!/bin/sh -e + +case "$1" in + configure) + + if [ "$(uname -s)" = "Linux" ]; then + if [ -e /dev/MAKEDEV ]; then + # create /dev/parport* + if [ ! -c /dev/parport0 ]; then + (cd /dev && ./MAKEDEV parport) || true + fi + # create /dev/sg* + if [ ! -c /dev/sg0 ]; then + (cd /dev && ./MAKEDEV sg) || true + fi + fi + fi + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "$0 called with unknown argument '$1'" >&2 + exit 1 + ;; +esac + + +#DEBHELPER# --- sane-backends-1.0.20.orig/debian/patches/03_libsane_deps.dpatch +++ sane-backends-1.0.20/debian/patches/03_libsane_deps.dpatch @@ -0,0 +1,24 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 03_libsane_deps.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Reduce libsane.so dependencies to the bare minimum. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/backend/Makefile.in sane-backends-1.0.20/backend/Makefile.in +--- sane-backends-1.0.20~/backend/Makefile.in 2009-05-04 12:19:41.653383532 +0200 ++++ sane-backends-1.0.20/backend/Makefile.in 2009-05-04 12:21:01.348356525 +0200 +@@ -2215,10 +2215,11 @@ + nodist_libsane_la_SOURCES = dll-s.c + libsane_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll + libsane_la_LDFLAGS = $(DIST_LIBS_LDFLAGS) +-libsane_la_LIBADD = $(COMMON_LIBS) @PRELOADABLE_BACKENDS_ENABLED@ libdll.la sane_strstatus.lo ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pv8630.lo ../sanei/sanei_pp.lo ../sanei/sanei_thread.lo ../sanei/sanei_lm983x.lo ../sanei/sanei_access.lo ../sanei/sanei_net.lo ../sanei/sanei_wire.lo ../sanei/sanei_codec_bin.lo ../sanei/sanei_pa4s2.lo ../sanei/sanei_ab306.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(DL_LIBS) $(LIBV4L_LIBS) $(MATH_LIB) $(IEEE1284_LIBS) $(TIFF_LIBS) $(JPEG_LIBS) $(GPHOTO2_LIBS) $(SOCKET_LIBS) $(USB_LIBS) $(AVAHI_LIBS) $(SCSI_LIBS) $(PTHREAD_LIBS) ++libsane_la_LIBADD = $(COMMON_LIBS) libdll.la sane_strstatus.lo ../sanei/sanei_init_debug.lo ../sanei/sanei_config.lo ../sanei/sanei_constrain_value.lo $(DL_LIBS) + + # WARNING: Automake is getting this wrong so have to do it ourselves. +-libsane_la_DEPENDENCIES = $(COMMON_LIBS) @PRELOADABLE_BACKENDS_ENABLED@ libdll.la sane_strstatus.lo ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pv8630.lo ../sanei/sanei_pp.lo ../sanei/sanei_thread.lo ../sanei/sanei_lm983x.lo ../sanei/sanei_access.lo ../sanei/sanei_net.lo ../sanei/sanei_wire.lo ../sanei/sanei_codec_bin.lo ../sanei/sanei_pa4s2.lo ../sanei/sanei_ab306.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo @SANEI_SANEI_JPEG_LO@ ++libsane_la_DEPENDENCIES = libdll.la sane_strstatus.lo ../sanei/sanei_init_debug.lo ../sanei/sanei_config.lo ++ + all: $(BUILT_SOURCES) + $(MAKE) $(AM_MAKEFLAGS) all-am + --- sane-backends-1.0.20.orig/debian/patches/24_sane-desc.c_debian_mods.dpatch +++ sane-backends-1.0.20/debian/patches/24_sane-desc.c_debian_mods.dpatch @@ -0,0 +1,73 @@ +#!/bin/sh -e +## 05_sane-desc.c_debian_mods.dpatch by Julien BLACHE +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Do not link to HTML manpages, we do not have them installed. Also, +## DP: do not use sane.png, as it's not distributed in the source tarball. + +if [ $# -ne 1 ]; then + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +fi + +[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts +patch_opts="${patch_opts:--f --no-backup-if-mismatch}" + +case "$1" in + -patch) patch $patch_opts -p1 < $0;; + -unpatch) patch $patch_opts -p1 -R < $0;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1;; +esac + +exit 0 + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/tools/sane-desc.c sane-backends-1.0.20/tools/sane-desc.c +--- sane-backends-1.0.20~/tools/sane-desc.c 2009-04-15 03:47:56.000000000 +0200 ++++ sane-backends-1.0.20/tools/sane-desc.c 2009-05-04 11:10:28.572357083 +0200 +@@ -46,7 +46,7 @@ + + #define SANE_DESC_VERSION "3.5" + +-#define MAN_PAGE_LINK "http://www.sane-project.org/man/%s.5.html" ++#define MAN_PAGE_LINK "/usr/share/doc/libsane/html/%s.5.html" + #define COLOR_MINIMAL "\"#B00000\"" + #define COLOR_BASIC "\"#FF9000\"" + #define COLOR_GOOD "\"#90B000\"" +@@ -2476,8 +2476,8 @@ + printf ("
\n"); + } + if (be->manpage) +- printf ("Manual page: %s
\n", be->manpage, be->manpage); ++ printf ("Manual page:" ++ "%s
\n", be->manpage); + + if (be->comment) + printf ("Comment: %s
\n", be->comment); +@@ -2711,9 +2711,9 @@ + + printf ("\n"); + if (model_record->be->manpage) +- printf ("%s\n", +- model_record->be->manpage, model_record->be->manpage); ++ printf ("" ++ "%s\n", ++ model_record->be->manpage); + else + printf ("?\n"); + +@@ -2738,8 +2738,8 @@ + printf + ("\n" + "\n" +- "
\n" +- "\"SANE\"\n"); ++ "
\n"); ++ /* "\"SANE\"\n"); */ + printf ("

%s

\n", title); + printf ("
\n" "
\n"); + printf ("%s\n", intro); --- sane-backends-1.0.20.orig/debian/patches/09_po_update_es_add_gl.dpatch +++ sane-backends-1.0.20/debian/patches/09_po_update_es_add_gl.dpatch @@ -0,0 +1,10604 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 09_po_update_es_add_gl.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Update es translation, add new gl translation. +## DP: Courtesy of Miguel Bouzada . + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/po/Makefile.in sane-backends-1.0.20/po/Makefile.in +--- sane-backends-1.0.20~/po/Makefile.in 2009-04-30 15:41:19.000000000 +0200 ++++ sane-backends-1.0.20/po/Makefile.in 2009-06-26 13:27:10.266291547 +0200 +@@ -210,18 +210,18 @@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ + TMP_FILE_DIR = .tmp +-ALL_LINGUAS = bg cs da de en_GB eo es fi fr it nl nb pl pt ru sv ++ALL_LINGUAS = bg cs da de en_GB eo es fi fr gl it nl nb pl pt ru sv + EXTRA_DIST = README template.po $(PO_FILES) + PO_FILES = sane-backends.bg.po sane-backends.cs.po sane-backends.da.po \ + sane-backends.de.po sane-backends.en_GB.po \ +- sane-backends.eo.po sane-backends.es.po \ ++ sane-backends.eo.po sane-backends.es.po sane-backends.gl.po \ + sane-backends.fi.po sane-backends.fr.po sane-backends.it.po \ + sane-backends.nb.po sane-backends.nl.po sane-backends.pl.po \ + sane-backends.pt.po sane-backends.ru.po sane-backends.sv.po + + MO_FILES = sane-backends.bg.mo sane-backends.cs.mo sane-backends.da.mo \ + sane-backends.de.mo sane-backends.en_GB.mo \ +- sane-backends.eo.mo sane-backends.es.mo \ ++ sane-backends.eo.mo sane-backends.es.mo sane-backends.gl.mo \ + sane-backends.fi.mo sane-backends.fr.mo sane-backends.it.mo \ + sane-backends.nb.mo sane-backends.nl.mo sane-backends.pl.mo \ + sane-backends.pt.mo sane-backends.ru.mo sane-backends.sv.mo +diff -urNad sane-backends-1.0.20~/po/sane-backends.es.po sane-backends-1.0.20/po/sane-backends.es.po +--- sane-backends-1.0.20~/po/sane-backends.es.po 2009-04-30 15:15:23.000000000 +0200 ++++ sane-backends-1.0.20/po/sane-backends.es.po 2009-06-26 13:24:52.630585462 +0200 +@@ -1,93 +1,174 @@ +-# translation of sane-backends.po to Español +-# Gustavo D. Vranjes , 2002. +-# Gerhard Jaeger , 2002. +-# Jonathan Bravo , 2006. +-# Jonathan Bravo Lopez , 2007. +-# Castellan translation for SANE backend options ++# Spanish (Castilian)translation of sane-backends.po + # Copyright (C) 2002 SANE Project. ++# This file is distributed under the same license as the sane-backends package. ++# Miguel Anxo Bouzada ,2009. + msgid "" + msgstr "" + "Project-Id-Version: sane-backends\n" + "Report-Msgid-Bugs-To: \n" + "POT-Creation-Date: 2009-04-29 21:03-0400\n" +-"PO-Revision-Date: 2007-12-19 14:14+0100\n" +-"Last-Translator: Jonathan Bravo Lopez \n" +-"Language-Team: Español \n" ++"PO-Revision-Date: 2009-06-25 10:22+0100\n" ++"Last-Translator: Miguel Anxo Bouzada \n" ++"Language-Team: GALPon MiniNo \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=UTF-8\n" + "Content-Transfer-Encoding: 8bit\n" + "X-Generator: KBabel 1.11.4\n" ++"Plural-Forms: nplurals=2: plural=(n != 1);\n" ++"X-Poedit-Language: Spanish\n" ++"X-Poedit-Country: SPAIN\n" + +-#: .tmp/artec_eplus48u.c:154 .tmp/canon-sane.c:703 .tmp/canon-sane.c:1060 +-#: .tmp/canon-sane.c:1269 .tmp/canon-sane.c:1302 .tmp/canon-sane.c:1398 +-#: .tmp/canon-sane.c:1623 .tmp/canon.c:140 .tmp/canon.c:151 +-#: .tmp/canon.c:157 .tmp/hp-option.c:2926 .tmp/hp3900_sane.c:381 +-#: .tmp/hp3900_sane.c:1038 .tmp/ma1509.c:101 .tmp/mustek.c:129 +-#: .tmp/mustek.c:134 .tmp/mustek_usb.c:270 .tmp/mustek_usb2.c:109 +-#: .tmp/saneopts.h:456 .tmp/sceptre.h:289 .tmp/sm3840.c:82 +-#: .tmp/sm3840.c:339 .tmp/snapscan-options.c:79 .tmp/umax.c:186 ++#: .tmp/artec_eplus48u.c:154 ++#: .tmp/canon-sane.c:703 ++#: .tmp/canon-sane.c:1060 ++#: .tmp/canon-sane.c:1269 ++#: .tmp/canon-sane.c:1302 ++#: .tmp/canon-sane.c:1398 ++#: .tmp/canon-sane.c:1623 ++#: .tmp/canon.c:140 ++#: .tmp/canon.c:151 ++#: .tmp/canon.c:157 ++#: .tmp/hp-option.c:2926 ++#: .tmp/hp3900_sane.c:381 ++#: .tmp/hp3900_sane.c:1038 ++#: .tmp/ma1509.c:101 ++#: .tmp/mustek.c:129 ++#: .tmp/mustek.c:134 ++#: .tmp/mustek_usb.c:270 ++#: .tmp/mustek_usb2.c:109 ++#: .tmp/saneopts.h:456 ++#: .tmp/sceptre.h:289 ++#: .tmp/sm3840.c:82 ++#: .tmp/sm3840.c:339 ++#: .tmp/snapscan-options.c:79 ++#: .tmp/umax.c:186 + #: .tmp/umax_pp.c:138 + #, no-c-format + msgid "Lineart" +-msgstr "Binario" ++msgstr "Línea de arte" + +-#: .tmp/artec_eplus48u.c:155 .tmp/hp-option.c:2928 .tmp/leo.h:261 +-#: .tmp/teco1.h:292 .tmp/teco3.h:295 .tmp/umax_pp.c:138 ++#: .tmp/artec_eplus48u.c:155 ++#: .tmp/hp-option.c:2928 ++#: .tmp/leo.h:261 ++#: .tmp/teco1.h:292 ++#: .tmp/teco3.h:295 ++#: .tmp/umax_pp.c:138 + #, no-c-format + msgid "Grayscale" +-msgstr "Gris" ++msgstr "Escala de grises" + +-#: .tmp/artec_eplus48u.c:156 .tmp/canon-sane.c:731 .tmp/canon-sane.c:939 +-#: .tmp/canon-sane.c:1075 .tmp/canon-sane.c:1317 .tmp/canon-sane.c:1635 +-#: .tmp/canon-sane.c:1740 .tmp/canon-sane.c:2057 .tmp/canon.c:141 +-#: .tmp/canon.c:146 .tmp/canon.c:151 .tmp/canon.c:157 .tmp/epson.c:490 +-#: .tmp/epson2.c:201 .tmp/hp-option.c:2929 .tmp/hp3900_sane.c:381 +-#: .tmp/hp3900_sane.c:1034 .tmp/hp5590.c:87 .tmp/leo.h:262 +-#: .tmp/ma1509.c:101 .tmp/mustek.c:130 .tmp/mustek.c:134 +-#: .tmp/mustek_usb.c:268 .tmp/pixma.c:644 .tmp/pixma_sane_options.c:70 +-#: .tmp/saneopts.h:454 .tmp/sceptre.h:292 .tmp/sm3840.c:81 +-#: .tmp/snapscan-options.c:76 .tmp/teco1.h:293 .tmp/teco3.h:296 +-#: .tmp/test.c:126 .tmp/umax.c:191 .tmp/umax_pp.c:138 ++#: .tmp/artec_eplus48u.c:156 ++#: .tmp/canon-sane.c:731 ++#: .tmp/canon-sane.c:939 ++#: .tmp/canon-sane.c:1075 ++#: .tmp/canon-sane.c:1317 ++#: .tmp/canon-sane.c:1635 ++#: .tmp/canon-sane.c:1740 ++#: .tmp/canon-sane.c:2057 ++#: .tmp/canon.c:141 ++#: .tmp/canon.c:146 ++#: .tmp/canon.c:151 ++#: .tmp/canon.c:157 ++#: .tmp/epson.c:490 ++#: .tmp/epson2.c:201 ++#: .tmp/hp-option.c:2929 ++#: .tmp/hp3900_sane.c:381 ++#: .tmp/hp3900_sane.c:1034 ++#: .tmp/hp5590.c:87 ++#: .tmp/leo.h:262 ++#: .tmp/ma1509.c:101 ++#: .tmp/mustek.c:130 ++#: .tmp/mustek.c:134 ++#: .tmp/mustek_usb.c:268 ++#: .tmp/pixma.c:644 ++#: .tmp/pixma_sane_options.c:70 ++#: .tmp/saneopts.h:454 ++#: .tmp/sceptre.h:292 ++#: .tmp/sm3840.c:81 ++#: .tmp/snapscan-options.c:76 ++#: .tmp/teco1.h:293 ++#: .tmp/teco3.h:296 ++#: .tmp/test.c:126 ++#: .tmp/umax.c:191 ++#: .tmp/umax_pp.c:138 + #, no-c-format + msgid "Color" + msgstr "Color" + +-#: .tmp/artec_eplus48u.c:2805 .tmp/canon.c:1482 .tmp/genesys.c:5002 +-#: .tmp/gt68xx.c:667 .tmp/hp-option.c:2952 .tmp/leo.c:871 +-#: .tmp/ma1509.c:597 .tmp/matsushita.c:1189 .tmp/microtek2.h:601 +-#: .tmp/mustek.c:4407 .tmp/mustek_usb.c:353 .tmp/mustek_usb2.c:431 +-#: .tmp/niash.c:756 .tmp/plustek.c:853 .tmp/plustek_pp.c:792 +-#: .tmp/saneopts.h:158 .tmp/sceptre.c:750 .tmp/snapscan-options.c:561 +-#: .tmp/stv680.c:1067 .tmp/teco1.c:1143 .tmp/teco2.c:1962 .tmp/teco3.c:968 +-#: .tmp/u12.c:592 .tmp/umax.c:5227 .tmp/umax_pp.c:627 ++#: .tmp/artec_eplus48u.c:2805 ++#: .tmp/canon.c:1482 ++#: .tmp/genesys.c:5002 ++#: .tmp/gt68xx.c:667 ++#: .tmp/hp-option.c:2952 ++#: .tmp/leo.c:871 ++#: .tmp/ma1509.c:597 ++#: .tmp/matsushita.c:1189 ++#: .tmp/microtek2.h:601 ++#: .tmp/mustek.c:4407 ++#: .tmp/mustek_usb.c:353 ++#: .tmp/mustek_usb2.c:431 ++#: .tmp/niash.c:756 ++#: .tmp/plustek.c:853 ++#: .tmp/plustek_pp.c:792 ++#: .tmp/saneopts.h:158 ++#: .tmp/sceptre.c:750 ++#: .tmp/snapscan-options.c:561 ++#: .tmp/stv680.c:1067 ++#: .tmp/teco1.c:1143 ++#: .tmp/teco2.c:1962 ++#: .tmp/teco3.c:968 ++#: .tmp/u12.c:592 ++#: .tmp/umax.c:5227 ++#: .tmp/umax_pp.c:627 + #, no-c-format + msgid "Enhancement" + msgstr "Mejora" + +-#: .tmp/artec_eplus48u.c:2874 .tmp/pnm.c:282 ++#: .tmp/artec_eplus48u.c:2874 ++#: .tmp/pnm.c:282 + #, no-c-format + msgid "Defaults" +-msgstr "Por defecto" ++msgstr "Predeterminados" + + #: .tmp/artec_eplus48u.c:2876 + #, no-c-format + msgid "Set default values for enhancement controls." +-msgstr "Establece valores por defecto para los controles." ++msgstr "Ajustar valores predeterminados para los controles de mejora." + +-#: .tmp/artec_eplus48u.c:2884 .tmp/epson.c:3288 .tmp/epson2.c:2149 +-#: .tmp/genesys.c:4951 .tmp/gt68xx.c:698 .tmp/hp-option.c:3296 +-#: .tmp/hp3500.c:976 .tmp/leo.c:823 .tmp/lexmark.c:214 .tmp/ma1509.c:549 +-#: .tmp/matsushita.c:1135 .tmp/microtek2.h:600 .tmp/mustek.c:4359 +-#: .tmp/mustek_usb.c:305 .tmp/mustek_usb2.c:465 +-#: .tmp/pixma_sane_options.c:144 .tmp/plustek.c:807 .tmp/plustek_pp.c:746 +-#: .tmp/saneopts.h:157 .tmp/sceptre.c:702 .tmp/snapscan-options.c:494 +-#: .tmp/teco1.c:1095 .tmp/teco2.c:1914 .tmp/teco3.c:920 .tmp/test.c:646 +-#: .tmp/u12.c:546 .tmp/umax.c:5177 .tmp/umax_pp.c:578 ++#: .tmp/artec_eplus48u.c:2884 ++#: .tmp/epson.c:3288 ++#: .tmp/epson2.c:2149 ++#: .tmp/genesys.c:4951 ++#: .tmp/gt68xx.c:698 ++#: .tmp/hp-option.c:3296 ++#: .tmp/hp3500.c:976 ++#: .tmp/leo.c:823 ++#: .tmp/lexmark.c:214 ++#: .tmp/ma1509.c:549 ++#: .tmp/matsushita.c:1135 ++#: .tmp/microtek2.h:600 ++#: .tmp/mustek.c:4359 ++#: .tmp/mustek_usb.c:305 ++#: .tmp/mustek_usb2.c:465 ++#: .tmp/pixma_sane_options.c:144 ++#: .tmp/plustek.c:807 ++#: .tmp/plustek_pp.c:746 ++#: .tmp/saneopts.h:157 ++#: .tmp/sceptre.c:702 ++#: .tmp/snapscan-options.c:494 ++#: .tmp/teco1.c:1095 ++#: .tmp/teco2.c:1914 ++#: .tmp/teco3.c:920 ++#: .tmp/test.c:646 ++#: .tmp/u12.c:546 ++#: .tmp/umax.c:5177 ++#: .tmp/umax_pp.c:578 + #, no-c-format + msgid "Geometry" + msgstr "Geometría" + +-#: .tmp/artec_eplus48u.c:2932 .tmp/canon.c:1600 ++#: .tmp/artec_eplus48u.c:2932 ++#: .tmp/canon.c:1600 + #, no-c-format + msgid "Calibration" + msgstr "Calibración" +@@ -95,107 +176,126 @@ + #: .tmp/artec_eplus48u.c:2941 + #, no-c-format + msgid "Calibrate before next scan" +-msgstr "Calibrar antes del siguiente escaneado" ++msgstr "Calibrar antes del siguiente escaneo" + + #: .tmp/artec_eplus48u.c:2943 + #, no-c-format +-msgid "" +-"If enabled, the device will be calibrated before the next scan. " +-"Otherwise, calibration is performed only before the first start." +-msgstr "" +-"Si está activado, el dispositivo se calibrará antes del siguiente " +-"escaneado. De lo contrario, la calibración se realizará solo la primera " +-"vez." ++msgid "If enabled, the device will be calibrated before the next scan. Otherwise, calibration is performed only before the first start." ++msgstr "Si se activa, el dispositivo se calibrará antes del siguiente escaneo. En otro caso, la calibración se realizará únicamente antes del primer escaneo." + + #: .tmp/artec_eplus48u.c:2954 + #, no-c-format + msgid "Only perform shading-correction" +-msgstr "Solo realizar la corrección de sombras" ++msgstr "Realizar sólo correcciones de sombras" + + #: .tmp/artec_eplus48u.c:2956 + #, no-c-format +-msgid "" +-"If enabled, only the shading correction is performed during calibration. " +-"The default values for gain, offset and exposure time, either build-in " +-"or from the configuration file, are used." +-msgstr "" +-"Si está activado, solo la corrección de sombras se realizará durante la " +-"calibración. Se usarán los valores por defecto de ganancia, offset y " +-"tiempo de exposición, tanto internos como tomados del archivo de " +-"configuración." ++msgid "If enabled, only the shading correction is performed during calibration. The default values for gain, offset and exposure time, either build-in or from the configuration file, are used." ++msgstr "Si está activado, sólo se realizarán correcciones de sombras durante la calibración. Se usarán los valores predeterminados de ganancia, desplazamiento y tiempo de exposición, ya sean los que trae incorporados el programa o los del archivo de configuración." + + #: .tmp/artec_eplus48u.c:2967 + #, no-c-format + msgid "Button state" +-msgstr "Estado del botón" ++msgstr "Botón de estado" + + #: .tmp/avision.h:766 + #, no-c-format + msgid "Number of the frame to scan" +-msgstr "Número de frames a escanear" ++msgstr "Número de muestra a escanear" + + #: .tmp/avision.h:767 + #, no-c-format + msgid "Selects the number of the frame to scan" +-msgstr "Selecciona el número de frames a escanear" ++msgstr "Selecciona el número de muestra a escanear" + + #: .tmp/avision.h:770 + #, no-c-format + msgid "Duplex scan" +-msgstr "Escaneo doble" ++msgstr "Escaneo a dos caras" + + #: .tmp/avision.h:771 + #, no-c-format +-msgid "" +-"Duplex scan provide a scan of the front and back side of the document" +-msgstr "" +-"El escaneo doble proporciona el escaneo en la cara frontal y trasera del " +-"documento" ++msgid "Duplex scan provide a scan of the front and back side of the document" ++msgstr "El escaneo a dos caras proporciona un escaneo del anverso y el reverso del documento" + +-#: .tmp/canon-sane.c:674 .tmp/canon.c:163 ++#: .tmp/canon-sane.c:674 ++#: .tmp/canon.c:163 + #, no-c-format + msgid "Correction according to transparency ratio" +-msgstr "Corrección acorde al ratio de transparencia" ++msgstr "Corrección conforme con la tasa de transparencia" + +-#: .tmp/canon-sane.c:680 .tmp/canon.c:162 ++#: .tmp/canon-sane.c:680 ++#: .tmp/canon.c:162 + #, no-c-format + msgid "Correction according to film type" +-msgstr "Corrección acorde al tipo de negativo" ++msgstr "Correción de acuerdo con el tipo de película" + +-#: .tmp/canon-sane.c:704 .tmp/canon-sane.c:1061 .tmp/canon-sane.c:1270 +-#: .tmp/canon-sane.c:1307 .tmp/canon.c:140 .tmp/hp-option.c:2927 +-#: .tmp/mustek.c:129 .tmp/plustek_pp.c:182 .tmp/plustek_pp.c:191 +-#: .tmp/sceptre.h:290 .tmp/sm3840.c:82 .tmp/sm3840.c:337 +-#: .tmp/snapscan-options.c:77 .tmp/umax.c:187 ++#: .tmp/canon-sane.c:704 ++#: .tmp/canon-sane.c:1061 ++#: .tmp/canon-sane.c:1270 ++#: .tmp/canon-sane.c:1307 ++#: .tmp/canon.c:140 ++#: .tmp/hp-option.c:2927 ++#: .tmp/mustek.c:129 ++#: .tmp/plustek_pp.c:182 ++#: .tmp/plustek_pp.c:191 ++#: .tmp/sceptre.h:290 ++#: .tmp/sm3840.c:82 ++#: .tmp/sm3840.c:337 ++#: .tmp/snapscan-options.c:77 ++#: .tmp/umax.c:187 + #, no-c-format + msgid "Halftone" +-msgstr "Mediotono" ++msgstr "Medios tonos" + +-#: .tmp/canon-sane.c:732 .tmp/canon-sane.c:940 .tmp/canon-sane.c:1076 +-#: .tmp/canon-sane.c:1318 .tmp/canon-sane.c:1487 .tmp/canon-sane.c:1636 ++#: .tmp/canon-sane.c:732 ++#: .tmp/canon-sane.c:940 ++#: .tmp/canon-sane.c:1076 ++#: .tmp/canon-sane.c:1318 ++#: .tmp/canon-sane.c:1487 ++#: .tmp/canon-sane.c:1636 + #: .tmp/canon.c:152 + #, no-c-format + msgid "Fine color" + msgstr "Color fino" + +-#: .tmp/canon-sane.c:776 .tmp/canon.c:168 ++#: .tmp/canon-sane.c:776 ++#: .tmp/canon.c:168 + #, no-c-format + msgid "Negatives" + msgstr "Negativos" + +-#: .tmp/canon-sane.c:937 .tmp/canon-sane.c:1069 .tmp/canon-sane.c:1312 +-#: .tmp/canon-sane.c:1633 .tmp/canon-sane.c:2070 .tmp/canon.c:140 +-#: .tmp/canon.c:151 .tmp/canon.c:157 .tmp/canon.c:566 .tmp/epson.c:489 +-#: .tmp/epson2.c:200 .tmp/hp3900_sane.c:381 .tmp/hp3900_sane.c:1036 +-#: .tmp/ma1509.c:101 .tmp/mustek.c:129 .tmp/mustek.c:134 +-#: .tmp/mustek_usb.c:269 .tmp/pixma.c:647 .tmp/saneopts.h:455 +-#: .tmp/sceptre.h:291 .tmp/sm3840.c:81 .tmp/sm3840.c:335 +-#: .tmp/snapscan-options.c:78 .tmp/test.c:126 .tmp/umax.c:188 ++#: .tmp/canon-sane.c:937 ++#: .tmp/canon-sane.c:1069 ++#: .tmp/canon-sane.c:1312 ++#: .tmp/canon-sane.c:1633 ++#: .tmp/canon-sane.c:2070 ++#: .tmp/canon.c:140 ++#: .tmp/canon.c:151 ++#: .tmp/canon.c:157 ++#: .tmp/canon.c:566 ++#: .tmp/epson.c:489 ++#: .tmp/epson2.c:200 ++#: .tmp/hp3900_sane.c:381 ++#: .tmp/hp3900_sane.c:1036 ++#: .tmp/ma1509.c:101 ++#: .tmp/mustek.c:129 ++#: .tmp/mustek.c:134 ++#: .tmp/mustek_usb.c:269 ++#: .tmp/pixma.c:647 ++#: .tmp/saneopts.h:455 ++#: .tmp/sceptre.h:291 ++#: .tmp/sm3840.c:81 ++#: .tmp/sm3840.c:335 ++#: .tmp/snapscan-options.c:78 ++#: .tmp/test.c:126 ++#: .tmp/umax.c:188 + #, no-c-format + msgid "Gray" + msgstr "Gris" + +-#: .tmp/canon-sane.c:1323 .tmp/canon.c:146 ++#: .tmp/canon-sane.c:1323 ++#: .tmp/canon.c:146 + #, no-c-format + msgid "Raw" + msgstr "En bruto" +@@ -203,14 +303,15 @@ + #: .tmp/canon.c:161 + #, no-c-format + msgid "No transparency correction" +-msgstr "No corrección de transparencia" ++msgstr "Sin corrección de transparencia" + + #: .tmp/canon.c:168 + #, no-c-format + msgid "Slides" + msgstr "Diapositivas" + +-#: .tmp/canon.c:178 .tmp/matsushita.c:178 ++#: .tmp/canon.c:178 ++#: .tmp/matsushita.c:178 + #, no-c-format + msgid "Automatic" + msgstr "Automático" +@@ -233,63 +334,67 @@ + #: .tmp/canon.c:362 + #, no-c-format + msgid "rounded parameter" +-msgstr "Parámetros" ++msgstr "parámetro redondeado" + +-#: .tmp/canon.c:365 .tmp/canon.c:381 .tmp/canon.c:416 .tmp/canon.c:466 +-#: .tmp/canon.c:484 .tmp/canon.c:527 ++#: .tmp/canon.c:365 ++#: .tmp/canon.c:381 ++#: .tmp/canon.c:416 ++#: .tmp/canon.c:466 ++#: .tmp/canon.c:484 ++#: .tmp/canon.c:527 + #, no-c-format + msgid "unknown" +-msgstr "desconocido" ++msgstr "desconocido/a" + + #: .tmp/canon.c:375 + #, no-c-format + msgid "ADF jam" +-msgstr "AAD atascado" ++msgstr "atasco en el alimentador" + + #: .tmp/canon.c:378 + #, no-c-format + msgid "ADF cover open" +-msgstr "Cubierta AAD abierta" ++msgstr "la tapa del alimentador está abierta" + + #: .tmp/canon.c:391 + #, no-c-format + msgid "lamp failure" +-msgstr "fallo de la lámpara" ++msgstr "fallo de lámpara" + + #: .tmp/canon.c:394 + #, no-c-format + msgid "scan head positioning error" +-msgstr "posicionamiento del cabezal erróneo" ++msgstr "error en el posicionamiento del cabezal de escaneo" + + #: .tmp/canon.c:397 + #, no-c-format + msgid "CPU check error" +-msgstr "Error de chequeo de CPU" ++msgstr "Error de verificación de CPU" + + #: .tmp/canon.c:400 + #, no-c-format + msgid "RAM check error" +-msgstr "Error de chequeo de RAM" ++msgstr "Error de verificación de RAM" + + #: .tmp/canon.c:403 + #, no-c-format + msgid "ROM check error" +-msgstr "Error de chequeo de ROM" ++msgstr "Error de verificación de ROM" + + #: .tmp/canon.c:406 + #, no-c-format + msgid "hardware check error" +-msgstr "Error de chequeo de hardware" ++msgstr "error de verificación de hardware" + + #: .tmp/canon.c:409 + #, no-c-format + msgid "transparency unit lamp failure" +-msgstr "fallo de la lámpara de la unidad de transparencias" ++msgstr "fallo de la lámpara de unidad de transparencias" + + #: .tmp/canon.c:412 + #, no-c-format + msgid "transparency unit scan head positioning failure" +-msgstr "fallo de posicionamiento del cabezal de la unidad de transparencia" ++msgstr "fallo de posición del cabezal de escaneo de la unidad de transparencias" + + #: .tmp/canon.c:426 + #, no-c-format +@@ -299,52 +404,52 @@ + #: .tmp/canon.c:430 + #, no-c-format + msgid "invalid command operation code" +-msgstr "código de operación inválido" ++msgstr "código de orden de operación incorrecto" + + #: .tmp/canon.c:434 + #, no-c-format + msgid "invalid field in CDB" +-msgstr "campo no válido en CDB" ++msgstr "campo incorrecto en CDB" + + #: .tmp/canon.c:438 + #, no-c-format + msgid "unsupported LUN" +-msgstr "LUN no soportada" ++msgstr "LUN no soportado" + + #: .tmp/canon.c:442 + #, no-c-format + msgid "invalid field in parameter list" +-msgstr "campo no válido en lista de parámetros" ++msgstr "campo incorrecto en la lista de parámetros" + + #: .tmp/canon.c:446 + #, no-c-format + msgid "command sequence error" +-msgstr "error en secuencia de comandos" ++msgstr "error en la secuencia de ordenes" + + #: .tmp/canon.c:450 + #, no-c-format + msgid "too many windows specified" +-msgstr "demasiadas ventanas especificadas" ++msgstr "se especificaron demasiadas ventanas" + + #: .tmp/canon.c:454 + #, no-c-format + msgid "medium not present" +-msgstr "medio no presente" ++msgstr "no se encuentra el soporte" + + #: .tmp/canon.c:458 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "invalid bit IDENTIFY message" +-msgstr "bit de IDENTIFICACION de mensaje no válido" ++msgstr "mensaje de bit de IDENTIFICACIÓN incorrecto" + + #: .tmp/canon.c:462 + #, no-c-format + msgid "option not connect" +-msgstr "" ++msgstr "la opción no conecta" + + #: .tmp/canon.c:476 + #, no-c-format + msgid "power on reset / bus device reset" +-msgstr "" ++msgstr "reiniciar el encendido / reiniciar el bus del dispositivo" + + #: .tmp/canon.c:480 + #, no-c-format +@@ -354,37 +459,37 @@ + #: .tmp/canon.c:494 + #, no-c-format + msgid "no additional sense information" +-msgstr "no hay información adicional" ++msgstr "sin información adicional" + + #: .tmp/canon.c:498 + #, no-c-format + msgid "reselect failure" +-msgstr "fallo de reselección" ++msgstr "fallo al volver a escoger" + + #: .tmp/canon.c:502 + #, no-c-format + msgid "SCSI parity error" +-msgstr "Error de paridad SCSI" ++msgstr "error de paridad SCSI" + + #: .tmp/canon.c:506 + #, no-c-format + msgid "initiator detected error message received" +-msgstr "el iniciador detectó la recepción de un mensaje de error" ++msgstr "el iniciador detectó la recepción deun mensaje de error" + + #: .tmp/canon.c:511 + #, no-c-format + msgid "invalid message error" +-msgstr "mensaje de error no válido" ++msgstr "mensaje de error incorrecto" + + #: .tmp/canon.c:515 + #, no-c-format + msgid "timeout error" +-msgstr "error de fuera de tiempo" ++msgstr "error de límite de tiempo" + + #: .tmp/canon.c:519 + #, no-c-format + msgid "transparency unit shading error" +-msgstr "error de sombreado en la unidad de transparencia" ++msgstr "error de sombreado en la unidad de transparencias" + + #: .tmp/canon.c:523 + #, no-c-format +@@ -394,27 +499,38 @@ + #: .tmp/canon.c:537 + #, no-c-format + msgid "problem not analyzed (unknown SCSI class)" +-msgstr "problema no analizado (clase SCSI desconocida)" ++msgstr "problema no analizado (clase de SCSI desconocido)" + +-#: .tmp/canon.c:855 .tmp/canon.c:870 ++#: .tmp/canon.c:855 ++#: .tmp/canon.c:870 + #, no-c-format + msgid "film scanner" +-msgstr "escaner de película" ++msgstr "escáner de películas" + +-#: .tmp/canon.c:885 .tmp/canon.c:900 .tmp/canon.c:915 +-#: .tmp/hp3900_sane.c:1681 .tmp/plustek.c:1334 .tmp/plustek_pp.c:1014 +-#: .tmp/sceptre.c:593 .tmp/teco2.c:1836 .tmp/u12.c:851 ++#: .tmp/canon.c:885 ++#: .tmp/canon.c:900 ++#: .tmp/canon.c:915 ++#: .tmp/hp3900_sane.c:1681 ++#: .tmp/plustek.c:1334 ++#: .tmp/plustek_pp.c:1014 ++#: .tmp/sceptre.c:593 ++#: .tmp/teco2.c:1836 ++#: .tmp/u12.c:851 + #, no-c-format + msgid "flatbed scanner" +-msgstr "escaner de sobremesa" ++msgstr "escáner plano" + +-#: .tmp/canon.c:1133 .tmp/leo.c:781 .tmp/pixma_sane_options.c:40 ++#: .tmp/canon.c:1133 ++#: .tmp/leo.c:781 ++#: .tmp/pixma_sane_options.c:40 + #: .tmp/saneopts.h:165 + #, no-c-format + msgid "Scan mode" +-msgstr "Modo de Escaneo" ++msgstr "Modo de escaneo" + +-#: .tmp/canon.c:1171 .tmp/epson.c:3376 .tmp/epson2.c:2223 ++#: .tmp/canon.c:1171 ++#: .tmp/epson.c:3376 ++#: .tmp/epson2.c:2223 + #, no-c-format + msgid "Film type" + msgstr "Tipo de película" +@@ -422,7 +538,7 @@ + #: .tmp/canon.c:1172 + #, no-c-format + msgid "Selects the film type, i.e. negatives or slides" +-msgstr "Selecciona el tipo de película, p.e. negativos o diapositivas" ++msgstr "Seleccionar el tipo de película, p.e. negativo o diapositiva" + + #: .tmp/canon.c:1184 + #, no-c-format +@@ -432,59 +548,58 @@ + #: .tmp/canon.c:1185 + #, no-c-format + msgid "Selects the negative film type" +-msgstr "Selecciona el tipo de película negativo" ++msgstr "Selecciona el tipo de negativo de película" + +-#: .tmp/canon.c:1209 .tmp/saneopts.h:173 ++#: .tmp/canon.c:1209 ++#: .tmp/saneopts.h:173 + #, no-c-format + msgid "Scan resolution" +-msgstr "Resolución de Escaneo" ++msgstr "Resolución de escaneo" + + #: .tmp/canon.c:1224 + #, no-c-format + msgid "Hardware resolution" +-msgstr "Resolución hardware" ++msgstr "Resolución del hardware" + + #: .tmp/canon.c:1225 + #, no-c-format + msgid "Use only hardware resolutions" +-msgstr "Usar sólo resoluciones hardware" ++msgstr "Usar sólo resoluciones de hardware" + + #: .tmp/canon.c:1306 + #, no-c-format + msgid "Focus" +-msgstr "Foco" ++msgstr "Enfoque" + + #: .tmp/canon.c:1316 + #, no-c-format + msgid "Auto focus" +-msgstr "Auto foco" ++msgstr "Enfoque automático" + + #: .tmp/canon.c:1317 + #, no-c-format + msgid "Enable/disable auto focus" +-msgstr "Des/activar auto foco" ++msgstr "Activar/desactivar enfoque automático" + + #: .tmp/canon.c:1324 + #, no-c-format + msgid "Auto focus only once" +-msgstr "Auto focalizar sólo una vez" ++msgstr "Enfoque automático solo una vez" + + #: .tmp/canon.c:1325 + #, no-c-format + msgid "Do auto focus only once between ejects" +-msgstr "Realizar la auto focalización sólo una vez" ++msgstr "Hacer enfoque automático solo una vez entre expulsiones" + + #: .tmp/canon.c:1333 + #, no-c-format + msgid "Manual focus position" +-msgstr "Fijar la posición del foco manualmente" ++msgstr "Posición de foco manual" + + #: .tmp/canon.c:1334 + #, no-c-format + msgid "Set the optical system's focus position by hand (default: 128)." +-msgstr "" +-"Establecer la posición del foco del sistema óptico a mano " +-"(predeterminado: 128)." ++msgstr "Ajustar el sistema óptico de foco en la posición manual (predeterminado: 128)." + + #: .tmp/canon.c:1344 + #, no-c-format +@@ -496,10 +611,12 @@ + msgid "Extra color adjustments" + msgstr "Ajustes de color extra" + +-#: .tmp/canon.c:1522 .tmp/epson.c:3195 .tmp/epson2.c:2103 ++#: .tmp/canon.c:1522 ++#: .tmp/epson.c:3195 ++#: .tmp/epson2.c:2103 + #, no-c-format + msgid "Mirror image" +-msgstr "Imagen espejo" ++msgstr "Invertir imagen" + + #: .tmp/canon.c:1523 + #, no-c-format +@@ -509,12 +626,12 @@ + #: .tmp/canon.c:1592 + #, no-c-format + msgid "Auto exposure" +-msgstr "Tiempo de exposición automático" ++msgstr "Exposición automática" + + #: .tmp/canon.c:1593 + #, no-c-format + msgid "Enable/disable the auto exposure feature" +-msgstr "Activa/desactiva el tiempo de exposición automático" ++msgstr "Activar/desactivar la característica de exposición automática" + + #: .tmp/canon.c:1609 + #, no-c-format +@@ -524,44 +641,42 @@ + #: .tmp/canon.c:1610 + #, no-c-format + msgid "Execute calibration *now*" +-msgstr "Realizar calibración *ahora*" ++msgstr "Ejecutar calibración *ahora*" + + #: .tmp/canon.c:1620 + #, no-c-format + msgid "Self diagnosis" +-msgstr "Auto diagnóstico" ++msgstr "Autodiagnóstico" + + #: .tmp/canon.c:1621 + #, no-c-format + msgid "Perform scanner self diagnosis" +-msgstr "Realiza un diagnóstico del escáner" ++msgstr "Realizar autodiagnóstico del escáner" + + #: .tmp/canon.c:1632 + #, no-c-format + msgid "Reset scanner" +-msgstr "Resetear escáner" ++msgstr "Reiniciar escáner" + + #: .tmp/canon.c:1633 + #, no-c-format + msgid "Reset the scanner" +-msgstr "Resetea el escáner" ++msgstr "Reiniciar el escáner" + + #: .tmp/canon.c:1643 + #, no-c-format + msgid "Medium handling" +-msgstr "" ++msgstr "Manejar el soporte" + + #: .tmp/canon.c:1652 + #, no-c-format + msgid "Eject film after each scan" +-msgstr "Expulsar película después de cada escaneo" ++msgstr "Expulsar la película después de cada escaneo" + + #: .tmp/canon.c:1653 + #, no-c-format + msgid "Automatically eject the film from the device after each scan" +-msgstr "" +-"Expulsar automáticamente la película del dispositivo después de cada " +-"escaneo" ++msgstr "Expulsar automáticamente la película del dispositivo después de cada escaneo" + + #: .tmp/canon.c:1662 + #, no-c-format +@@ -570,11 +685,8 @@ + + #: .tmp/canon.c:1663 + #, no-c-format +-msgid "" +-"Automatically eject the film from the device before exiting the program" +-msgstr "" +-"Expulsa automáticamente la película del dispositivo antes de salir de la " +-"aplicación" ++msgid "Automatically eject the film from the device before exiting the program" ++msgstr "Expulsar automáticamente la película del dispositivo antes de salir del programa" + + #: .tmp/canon.c:1672 + #, no-c-format +@@ -584,43 +696,43 @@ + #: .tmp/canon.c:1673 + #, no-c-format + msgid "Eject the film *now*" +-msgstr "Expulsa la película *ahora*" ++msgstr "Expulsar la película *ahora*" + + #: .tmp/canon.c:1682 + #, no-c-format + msgid "Document feeder extras" +-msgstr "Extras del alimentador de documentos" ++msgstr "Alimentador de documentos extras" + + #: .tmp/canon.c:1689 + #, no-c-format + msgid "Flatbed only" +-msgstr "Sólo sobremesa" ++msgstr "Sólo plano" + + #: .tmp/canon.c:1690 + #, no-c-format + msgid "Disable auto document feeder and use flatbed only" +-msgstr "" +-"Desactiva el alimentador de documentos y utiliza sólo el de sobremesa" ++msgstr "Desactivar el alimentador automático de documentos y usar sólo el plano" + +-#: .tmp/canon.c:1700 .tmp/canon.c:1710 ++#: .tmp/canon.c:1700 ++#: .tmp/canon.c:1710 + #, no-c-format + msgid "Transparency unit" +-msgstr "Unidad de transparencia" ++msgstr "Unidad de transparencias" + + #: .tmp/canon.c:1711 + #, no-c-format + msgid "Switch on/off the transparency unit (FAU, film adapter unit)" +-msgstr "Activa/desactiva la unidad de transparencias" ++msgstr "Activar/desactivar la unidad de transparencias (FAU, unidad adaptadora de película)" + + #: .tmp/canon.c:1721 + #, no-c-format + msgid "Negative film" +-msgstr "Película negativa" ++msgstr "Película en negativo" + + #: .tmp/canon.c:1722 + #, no-c-format + msgid "Positive or negative film" +-msgstr "Positivo o negativo" ++msgstr "Película en positivo o en negativo" + + #: .tmp/canon.c:1731 + #, no-c-format +@@ -630,42 +742,44 @@ + #: .tmp/canon.c:1732 + #, no-c-format + msgid "Set density control mode" +-msgstr "Establece el modo de control de densidad" ++msgstr "Ajustar el modo de control de densidad" + + #: .tmp/canon.c:1743 + #, no-c-format + msgid "Transparency ratio" +-msgstr "Ratio de transparencia" ++msgstr "Tasa de transparencia" + + #: .tmp/canon.c:1757 + #, no-c-format + msgid "Select film type" +-msgstr "Tipo de película" ++msgstr "Seleccionar tipo de película" + + #: .tmp/canon.c:1758 + #, no-c-format + msgid "Select the film type" +-msgstr "Selecciona el tipo de película" ++msgstr "Seleccionar el tipo de película" + + #: .tmp/canon630u.c:158 + #, no-c-format + msgid "Calibrate Scanner" +-msgstr "Calibración del Scanner" ++msgstr "Calibrar el escáner" + + #: .tmp/canon630u.c:159 + #, no-c-format + msgid "Force scanner calibration before scan" +-msgstr "Forzar calibración antes de escanear" ++msgstr "Fuerza la calibración del escáner antes de realizar el escaneo" + +-#: .tmp/canon630u.c:258 .tmp/umax1220u.c:208 ++#: .tmp/canon630u.c:258 ++#: .tmp/umax1220u.c:208 + #, no-c-format + msgid "Grayscale scan" +-msgstr "Escaneo de grises" ++msgstr "Escaneo en escala de grises" + +-#: .tmp/canon630u.c:259 .tmp/umax1220u.c:209 ++#: .tmp/canon630u.c:259 ++#: .tmp/umax1220u.c:209 + #, no-c-format + msgid "Do a grayscale rather than color scan" +-msgstr "Realiza un escaneo de grises en vez de color" ++msgstr "Escanea en escala de grises, no en color" + + #: .tmp/canon630u.c:305 + #, no-c-format +@@ -675,212 +789,307 @@ + #: .tmp/canon630u.c:306 + #, no-c-format + msgid "Increase or decrease the analog gain of the CCD array" +-msgstr "Incrementa o decrementa la ganancia analógica del array del CCD" ++msgstr "Aumenta o disminuye la ganancia analógica de la gama CCD" + +-#: .tmp/canon630u.c:346 .tmp/epson.h:68 .tmp/epson2.h:64 ++#: .tmp/canon630u.c:346 ++#: .tmp/epson.h:68 ++#: .tmp/epson2.h:64 + #, no-c-format + msgid "Gamma Correction" +-msgstr "Corrección de gamma" ++msgstr "Corrección gamma" + + #: .tmp/canon630u.c:347 + #, no-c-format + msgid "Selects the gamma corrected transfer curve" +-msgstr "Selecciona la gama corregida de la curva de transferencia" ++msgstr "Selecciona la curva de transferencia de la corrección gamma" + +-#: .tmp/epson.c:488 .tmp/epson2.c:199 ++#: .tmp/epson.c:488 ++#: .tmp/epson2.c:199 + #, no-c-format + msgid "Binary" +-msgstr "Binario" ++msgstr "Binaria" + +-#: .tmp/epson.c:495 .tmp/epson2.c:206 ++#: .tmp/epson.c:495 ++#: .tmp/epson2.c:206 + #, no-c-format + msgid "Simplex" +-msgstr "Simple" ++msgstr "Una cara" + +-#: .tmp/epson.c:496 .tmp/epson2.c:207 .tmp/matsushita.h:219 ++#: .tmp/epson.c:496 ++#: .tmp/epson2.c:207 ++#: .tmp/matsushita.h:219 + #, no-c-format + msgid "Duplex" +-msgstr "Doble" ++msgstr "Dos caras" + +-#: .tmp/epson.c:505 .tmp/epson2.c:213 .tmp/genesys.c:106 .tmp/gt68xx.c:146 +-#: .tmp/hp3900_sane.c:418 .tmp/hp3900_sane.c:427 .tmp/hp3900_sane.c:1017 +-#: .tmp/hp5590.c:81 .tmp/ma1509.c:106 .tmp/mustek.c:152 .tmp/mustek.c:156 +-#: .tmp/mustek.c:160 .tmp/pixma.c:652 .tmp/pixma_sane_options.c:85 +-#: .tmp/snapscan-options.c:82 .tmp/test.c:191 .tmp/umax.c:182 ++#: .tmp/epson.c:505 ++#: .tmp/epson2.c:213 ++#: .tmp/genesys.c:106 ++#: .tmp/gt68xx.c:146 ++#: .tmp/hp3900_sane.c:418 ++#: .tmp/hp3900_sane.c:427 ++#: .tmp/hp3900_sane.c:1017 ++#: .tmp/hp5590.c:81 ++#: .tmp/ma1509.c:106 ++#: .tmp/mustek.c:152 ++#: .tmp/mustek.c:156 ++#: .tmp/mustek.c:160 ++#: .tmp/pixma.c:652 ++#: .tmp/pixma_sane_options.c:85 ++#: .tmp/snapscan-options.c:82 ++#: .tmp/test.c:191 ++#: .tmp/umax.c:182 + #, no-c-format + msgid "Flatbed" +-msgstr "Plano" ++msgstr "Plana" + +-#: .tmp/epson.c:506 .tmp/epson2.c:214 .tmp/pixma.c:669 ++#: .tmp/epson.c:506 ++#: .tmp/epson2.c:214 ++#: .tmp/pixma.c:669 + #, no-c-format + msgid "Transparency Unit" +-msgstr "Unidad de Transparencia" ++msgstr "Unidad de transparencias" + +-#: .tmp/epson.c:507 .tmp/epson2.c:215 .tmp/mustek.c:156 .tmp/pixma.c:657 +-#: .tmp/test.c:191 .tmp/umax.c:184 ++#: .tmp/epson.c:507 ++#: .tmp/epson2.c:215 ++#: .tmp/mustek.c:156 ++#: .tmp/pixma.c:657 ++#: .tmp/test.c:191 ++#: .tmp/umax.c:184 + #, no-c-format + msgid "Automatic Document Feeder" +-msgstr "Alimentador Automático de Documentos" ++msgstr "Alimentador automático de documentos (ADF)" + +-#: .tmp/epson.c:527 .tmp/epson2.c:235 ++#: .tmp/epson.c:527 ++#: .tmp/epson2.c:235 + #, no-c-format + msgid "Positive Film" + msgstr "Película en positivo" + +-#: .tmp/epson.c:528 .tmp/epson2.c:236 ++#: .tmp/epson.c:528 ++#: .tmp/epson2.c:236 + #, no-c-format + msgid "Negative Film" + msgstr "Película en negativo" + +-#: .tmp/epson.c:533 .tmp/epson2.c:245 ++#: .tmp/epson.c:533 ++#: .tmp/epson2.c:245 + #, no-c-format + msgid "Focus on glass" +-msgstr "Focalizar en el cristal" ++msgstr "Enfoque en el cristal" + +-#: .tmp/epson.c:534 .tmp/epson2.c:246 ++#: .tmp/epson.c:534 ++#: .tmp/epson2.c:246 + #, no-c-format + msgid "Focus 2.5mm above glass" +-msgstr "Focalizar a 2.5mm sobre el cristal" ++msgstr "Enfoque a 2.5mm sobre el cristal" + +-#: .tmp/epson.c:560 .tmp/epson.c:568 .tmp/epson.c:580 .tmp/epson.c:602 +-#: .tmp/epson2.c:268 .tmp/epson2.c:276 .tmp/epson2.c:288 .tmp/epson2.c:310 +-#: .tmp/leo.c:109 .tmp/matsushita.c:138 .tmp/matsushita.c:159 +-#: .tmp/matsushita.c:191 .tmp/matsushita.c:213 .tmp/snapscan-options.c:87 ++#: .tmp/epson.c:560 ++#: .tmp/epson.c:568 ++#: .tmp/epson.c:580 ++#: .tmp/epson.c:602 ++#: .tmp/epson2.c:268 ++#: .tmp/epson2.c:276 ++#: .tmp/epson2.c:288 ++#: .tmp/epson2.c:310 ++#: .tmp/leo.c:109 ++#: .tmp/matsushita.c:138 ++#: .tmp/matsushita.c:159 ++#: .tmp/matsushita.c:191 ++#: .tmp/matsushita.c:213 ++#: .tmp/snapscan-options.c:87 + #, no-c-format + msgid "None" + msgstr "Ninguno" + +-#: .tmp/epson.c:561 .tmp/epson.c:569 .tmp/epson.c:581 .tmp/epson2.c:269 +-#: .tmp/epson2.c:277 .tmp/epson2.c:289 ++#: .tmp/epson.c:561 ++#: .tmp/epson.c:569 ++#: .tmp/epson.c:581 ++#: .tmp/epson2.c:269 ++#: .tmp/epson2.c:277 ++#: .tmp/epson2.c:289 + #, no-c-format + msgid "Halftone A (Hard Tone)" +-msgstr "Mediotono A" ++msgstr "Medios tonos A (tonos duros)" + +-#: .tmp/epson.c:562 .tmp/epson.c:570 .tmp/epson.c:582 .tmp/epson2.c:270 +-#: .tmp/epson2.c:278 .tmp/epson2.c:290 ++#: .tmp/epson.c:562 ++#: .tmp/epson.c:570 ++#: .tmp/epson.c:582 ++#: .tmp/epson2.c:270 ++#: .tmp/epson2.c:278 ++#: .tmp/epson2.c:290 + #, no-c-format + msgid "Halftone B (Soft Tone)" +-msgstr "Mediotono B" ++msgstr "Medios tonos B (tonos suaves)" + +-#: .tmp/epson.c:563 .tmp/epson.c:571 .tmp/epson.c:583 .tmp/epson2.c:271 +-#: .tmp/epson2.c:279 .tmp/epson2.c:291 ++#: .tmp/epson.c:563 ++#: .tmp/epson.c:571 ++#: .tmp/epson.c:583 ++#: .tmp/epson2.c:271 ++#: .tmp/epson2.c:279 ++#: .tmp/epson2.c:291 + #, no-c-format + msgid "Halftone C (Net Screen)" +-msgstr "Mediotono C" ++msgstr "Medios tonos C (matizado)" + +-#: .tmp/epson.c:572 .tmp/epson.c:584 .tmp/epson2.c:280 .tmp/epson2.c:292 ++#: .tmp/epson.c:572 ++#: .tmp/epson.c:584 ++#: .tmp/epson2.c:280 ++#: .tmp/epson2.c:292 + #, no-c-format + msgid "Dither A (4x4 Bayer)" +-msgstr "Entramado A (4x4 Bayer)" ++msgstr "Trama A (4x4 Bayer)" + +-#: .tmp/epson.c:573 .tmp/epson.c:585 .tmp/epson2.c:281 .tmp/epson2.c:293 ++#: .tmp/epson.c:573 ++#: .tmp/epson.c:585 ++#: .tmp/epson2.c:281 ++#: .tmp/epson2.c:293 + #, no-c-format + msgid "Dither B (4x4 Spiral)" +-msgstr "Entramado B (4x4 Espiral)" ++msgstr "Trama B (4x4 espiral)" + +-#: .tmp/epson.c:574 .tmp/epson.c:586 .tmp/epson2.c:282 .tmp/epson2.c:294 ++#: .tmp/epson.c:574 ++#: .tmp/epson.c:586 ++#: .tmp/epson2.c:282 ++#: .tmp/epson2.c:294 + #, no-c-format + msgid "Dither C (4x4 Net Screen)" +-msgstr "Entramado C (4x4 Net Screen)" ++msgstr "Trama C (4x4 matizado)" + +-#: .tmp/epson.c:575 .tmp/epson.c:587 .tmp/epson2.c:283 .tmp/epson2.c:295 ++#: .tmp/epson.c:575 ++#: .tmp/epson.c:587 ++#: .tmp/epson2.c:283 ++#: .tmp/epson2.c:295 + #, no-c-format + msgid "Dither D (8x4 Net Screen)" +-msgstr "Entramado D (8x4 Net Screen)" ++msgstr "Trama D (8x4 matizado)" + +-#: .tmp/epson.c:588 .tmp/epson2.c:296 ++#: .tmp/epson.c:588 ++#: .tmp/epson2.c:296 + #, no-c-format + msgid "Text Enhanced Technology" +-msgstr "Tecnología de texto mejorado" ++msgstr "Tecnología de mejora de texto" + +-#: .tmp/epson.c:589 .tmp/epson2.c:297 ++#: .tmp/epson.c:589 ++#: .tmp/epson2.c:297 + #, no-c-format + msgid "Download pattern A" +-msgstr "Patrón de descarga A" ++msgstr "Descargar patrón A" + +-#: .tmp/epson.c:590 .tmp/epson2.c:298 ++#: .tmp/epson.c:590 ++#: .tmp/epson2.c:298 + #, no-c-format + msgid "Download pattern B" +-msgstr "Patrón de descarga B" ++msgstr "Descargar patrón B" + +-#: .tmp/epson.c:603 .tmp/epson.c:3086 .tmp/epson2.c:311 .tmp/epson2.c:2015 +-#: .tmp/genesys.c:99 .tmp/gt68xx_low.h:135 .tmp/hp-option.c:3092 ++#: .tmp/epson.c:603 ++#: .tmp/epson.c:3086 ++#: .tmp/epson2.c:311 ++#: .tmp/epson2.c:2015 ++#: .tmp/genesys.c:99 ++#: .tmp/gt68xx_low.h:135 ++#: .tmp/hp-option.c:3092 + #, no-c-format + msgid "Red" + msgstr "Rojo" + +-#: .tmp/epson.c:604 .tmp/epson.c:3082 .tmp/epson2.c:312 .tmp/epson2.c:2011 +-#: .tmp/genesys.c:100 .tmp/gt68xx_low.h:136 .tmp/hp-option.c:3093 ++#: .tmp/epson.c:604 ++#: .tmp/epson.c:3082 ++#: .tmp/epson2.c:312 ++#: .tmp/epson2.c:2011 ++#: .tmp/genesys.c:100 ++#: .tmp/gt68xx_low.h:136 ++#: .tmp/hp-option.c:3093 + #, no-c-format + msgid "Green" + msgstr "Verde" + +-#: .tmp/epson.c:605 .tmp/epson.c:3090 .tmp/epson2.c:313 .tmp/epson2.c:2019 +-#: .tmp/genesys.c:101 .tmp/gt68xx_low.h:137 .tmp/hp-option.c:3094 ++#: .tmp/epson.c:605 ++#: .tmp/epson.c:3090 ++#: .tmp/epson2.c:313 ++#: .tmp/epson2.c:2019 ++#: .tmp/genesys.c:101 ++#: .tmp/gt68xx_low.h:137 ++#: .tmp/hp-option.c:3094 + #, no-c-format + msgid "Blue" + msgstr "Azul" + +-#: .tmp/epson.c:635 .tmp/epson2.c:342 ++#: .tmp/epson.c:635 ++#: .tmp/epson2.c:342 + #, no-c-format + msgid "No Correction" + msgstr "Sin corrección" + +-#: .tmp/epson.c:636 .tmp/epson.c:661 .tmp/epson2.c:343 .tmp/epson2.c:367 ++#: .tmp/epson.c:636 ++#: .tmp/epson.c:661 ++#: .tmp/epson2.c:343 ++#: .tmp/epson2.c:367 + #, no-c-format + msgid "User defined" +-msgstr "Definido por el usuario" ++msgstr "Definida por el usuario" + +-#: .tmp/epson.c:637 .tmp/epson2.c:344 ++#: .tmp/epson.c:637 ++#: .tmp/epson2.c:344 + #, no-c-format + msgid "Impact-dot printers" +-msgstr "Impresoras Matriciales" ++msgstr "Impresoras matriciales" + +-#: .tmp/epson.c:638 .tmp/epson2.c:345 ++#: .tmp/epson.c:638 ++#: .tmp/epson2.c:345 + #, no-c-format + msgid "Thermal printers" + msgstr "Impresoras térmicas" + +-#: .tmp/epson.c:639 .tmp/epson2.c:346 ++#: .tmp/epson.c:639 ++#: .tmp/epson2.c:346 + #, no-c-format + msgid "Ink-jet printers" + msgstr "Impresoras de inyección de tinta" + +-#: .tmp/epson.c:640 .tmp/epson2.c:347 ++#: .tmp/epson.c:640 ++#: .tmp/epson2.c:347 + #, no-c-format + msgid "CRT monitors" + msgstr "Monitores CRT" + +-#: .tmp/epson.c:660 .tmp/epson2.c:366 .tmp/hp-option.c:3225 ++#: .tmp/epson.c:660 ++#: .tmp/epson2.c:366 ++#: .tmp/hp-option.c:3225 + #: .tmp/test.c:142 + #, no-c-format + msgid "Default" + msgstr "Predeterminado" + +-#: .tmp/epson.c:662 .tmp/epson2.c:368 ++#: .tmp/epson.c:662 ++#: .tmp/epson2.c:368 + #, no-c-format + msgid "High density printing" + msgstr "Impresión de alta densidad" + +-#: .tmp/epson.c:663 .tmp/epson2.c:369 ++#: .tmp/epson.c:663 ++#: .tmp/epson2.c:369 + #, no-c-format + msgid "Low density printing" + msgstr "Impresión de baja densidad" + +-#: .tmp/epson.c:664 .tmp/epson2.c:370 ++#: .tmp/epson.c:664 ++#: .tmp/epson2.c:370 + #, no-c-format + msgid "High contrast printing" + msgstr "Impresión de alto contraste" + +-#: .tmp/epson.c:682 .tmp/epson2.c:388 ++#: .tmp/epson.c:682 ++#: .tmp/epson2.c:388 + #, no-c-format + msgid "User defined (Gamma=1.0)" +-msgstr "Definido por el usuario (Gamma=1.0)" ++msgstr "Definido por el usuario (gamma=1.0)" + +-#: .tmp/epson.c:683 .tmp/epson2.c:389 ++#: .tmp/epson.c:683 ++#: .tmp/epson2.c:389 + #, no-c-format + msgid "User defined (Gamma=1.8)" +-msgstr "Definido por el usuario (Gamma=1.8)" ++msgstr "Definido por el usuario (gamma=1.8)" + + #: .tmp/epson.c:761 + #, no-c-format +@@ -895,7 +1104,7 @@ + #: .tmp/epson.c:763 + #, no-c-format + msgid "A5 landscape" +-msgstr "A5 horizontal" ++msgstr "A5 apaisado" + + #: .tmp/epson.c:764 + #, no-c-format +@@ -910,267 +1119,314 @@ + #: .tmp/epson.c:766 + #, no-c-format + msgid "Max" +-msgstr "Máximo" ++msgstr "Máx" + +-#: .tmp/epson.c:2803 .tmp/epson2.c:1733 .tmp/genesys.c:4882 +-#: .tmp/gt68xx.c:455 .tmp/hp-option.c:2913 .tmp/ma1509.c:499 +-#: .tmp/matsushita.c:1084 .tmp/microtek2.h:599 .tmp/mustek.c:4201 +-#: .tmp/mustek_usb.c:260 .tmp/mustek_usb2.c:344 .tmp/niash.c:736 +-#: .tmp/plustek.c:720 .tmp/plustek_pp.c:657 .tmp/sceptre.c:673 +-#: .tmp/snapscan-options.c:315 .tmp/stv680.c:1030 .tmp/teco2.c:1886 +-#: .tmp/test.c:305 .tmp/u12.c:473 .tmp/umax.c:5055 ++#: .tmp/epson.c:2803 ++#: .tmp/epson2.c:1733 ++#: .tmp/genesys.c:4882 ++#: .tmp/gt68xx.c:455 ++#: .tmp/hp-option.c:2913 ++#: .tmp/ma1509.c:499 ++#: .tmp/matsushita.c:1084 ++#: .tmp/microtek2.h:599 ++#: .tmp/mustek.c:4201 ++#: .tmp/mustek_usb.c:260 ++#: .tmp/mustek_usb2.c:344 ++#: .tmp/niash.c:736 ++#: .tmp/plustek.c:720 ++#: .tmp/plustek_pp.c:657 ++#: .tmp/sceptre.c:673 ++#: .tmp/snapscan-options.c:315 ++#: .tmp/stv680.c:1030 ++#: .tmp/teco2.c:1886 ++#: .tmp/test.c:305 ++#: .tmp/u12.c:473 ++#: .tmp/umax.c:5055 + #, no-c-format + msgid "Scan Mode" +-msgstr "Modo de Escaneo" ++msgstr "Modo de escaneo" + +-#: .tmp/epson.c:2835 .tmp/epson2.c:1765 ++#: .tmp/epson.c:2835 ++#: .tmp/epson2.c:1765 + #, no-c-format + msgid "Selects the halftone." +-msgstr "Selecciona el tono medio." ++msgstr "Selecciona medios tonos" + +-#: .tmp/epson.c:2857 .tmp/epson2.c:1786 ++#: .tmp/epson.c:2857 ++#: .tmp/epson2.c:1786 + #, no-c-format + msgid "Dropout" + msgstr "Exclusión" + +-#: .tmp/epson.c:2858 .tmp/epson2.c:1787 ++#: .tmp/epson.c:2858 ++#: .tmp/epson2.c:1787 + #, no-c-format + msgid "Selects the dropout." +-msgstr "Selecciona el canal a excluir." ++msgstr "Seleccionar lo que se va a excluir." + +-#: .tmp/epson.c:2870 .tmp/epson2.c:1799 ++#: .tmp/epson.c:2870 ++#: .tmp/epson2.c:1799 + #, no-c-format + msgid "Selects the brightness." + msgstr "Selecciona el brillo." + +-#: .tmp/epson.c:2885 .tmp/epson2.c:1813 ++#: .tmp/epson.c:2885 ++#: .tmp/epson2.c:1813 + #, no-c-format + msgid "Sharpness" +-msgstr "Nitidez" ++msgstr "Enfoque" + +-#: .tmp/epson.c:3021 .tmp/epson2.c:1949 ++#: .tmp/epson.c:3021 ++#: .tmp/epson2.c:1949 + #, no-c-format + msgid "Color correction" + msgstr "Corrección de color" + +-#: .tmp/epson.c:3024 .tmp/epson2.c:1952 ++#: .tmp/epson.c:3024 ++#: .tmp/epson2.c:1952 + #, no-c-format + msgid "Sets the color correction table for the selected output device." +-msgstr "" +-"Establece la tabla de corrección de color para el dispositivo de salida " +-"seleccionado." ++msgstr "Ajusta la tabla de corrección del color para el dispositivo de salida seleccionado." + +-#: .tmp/epson.c:3065 .tmp/epson2.c:1993 ++#: .tmp/epson.c:3065 ++#: .tmp/epson2.c:1993 + #, no-c-format + msgid "Color correction coefficients" + msgstr "Coeficientes de corrección de color" + +-#: .tmp/epson.c:3066 .tmp/epson2.c:1995 ++#: .tmp/epson.c:3066 ++#: .tmp/epson2.c:1995 + #, no-c-format + msgid "Matrix multiplication of RGB" +-msgstr "Multiplicación matricial del valor RGB" ++msgstr "Matriz de multiplicación de RGB" + +-#: .tmp/epson.c:3083 .tmp/epson2.c:2012 ++#: .tmp/epson.c:3083 ++#: .tmp/epson2.c:2012 + #, no-c-format + msgid "Shift green to red" +-msgstr "Mover verde al rojo" ++msgstr "Cambiar de verde a rojo" + +-#: .tmp/epson.c:3084 .tmp/epson2.c:2013 ++#: .tmp/epson.c:3084 ++#: .tmp/epson2.c:2013 + #, no-c-format + msgid "Shift green to blue" +-msgstr "Mover verde al azul" ++msgstr "Cambiar de verde a azul" + +-#: .tmp/epson.c:3085 .tmp/epson2.c:2014 ++#: .tmp/epson.c:3085 ++#: .tmp/epson2.c:2014 + #, no-c-format + msgid "Shift red to green" +-msgstr "Mover rojo al verde" ++msgstr "Cambiar de rojo a verde" + +-#: .tmp/epson.c:3087 .tmp/epson2.c:2016 ++#: .tmp/epson.c:3087 ++#: .tmp/epson2.c:2016 + #, no-c-format + msgid "Shift red to blue" +-msgstr "Mover rojo al azul" ++msgstr "Cambiar de rojo a azul" + +-#: .tmp/epson.c:3088 .tmp/epson2.c:2017 ++#: .tmp/epson.c:3088 ++#: .tmp/epson2.c:2017 + #, no-c-format + msgid "Shift blue to green" +-msgstr "Mover azul al verde" ++msgstr "Cambiar de azul a verde" + +-#: .tmp/epson.c:3089 .tmp/epson2.c:2018 ++#: .tmp/epson.c:3089 ++#: .tmp/epson2.c:2018 + #, no-c-format + msgid "Shift blue to red" +-msgstr "Mover azul al rojo" ++msgstr "Cambiar de azul a rojo" + +-#: .tmp/epson.c:3092 .tmp/epson2.c:2021 ++#: .tmp/epson.c:3092 ++#: .tmp/epson2.c:2021 + #, no-c-format + msgid "Controls green level" + msgstr "Controla el nivel de verde" + +-#: .tmp/epson.c:3093 .tmp/epson2.c:2023 ++#: .tmp/epson.c:3093 ++#: .tmp/epson2.c:2023 + #, no-c-format + msgid "Adds to red based on green level" +-msgstr "Añade al rojo en base al nivel de verde" ++msgstr "Añade rojo basándose en el nivel de verde" + +-#: .tmp/epson.c:3094 .tmp/epson2.c:2025 ++#: .tmp/epson.c:3094 ++#: .tmp/epson2.c:2025 + #, no-c-format + msgid "Adds to blue based on green level" +-msgstr "Añade al azul en base al nivel de verde" ++msgstr "Añade azul basándose en el nivel de verde" + +-#: .tmp/epson.c:3095 .tmp/epson2.c:2027 ++#: .tmp/epson.c:3095 ++#: .tmp/epson2.c:2027 + #, no-c-format + msgid "Adds to green based on red level" +-msgstr "Añade al verde en base al nivel de rojo" ++msgstr "Añade verde basándose en el nivel de rojo" + +-#: .tmp/epson.c:3096 .tmp/epson2.c:2028 ++#: .tmp/epson.c:3096 ++#: .tmp/epson2.c:2028 + #, no-c-format + msgid "Controls red level" + msgstr "Controla el nivel de rojo" + +-#: .tmp/epson.c:3097 .tmp/epson2.c:2029 ++#: .tmp/epson.c:3097 ++#: .tmp/epson2.c:2029 + #, no-c-format + msgid "Adds to blue based on red level" +-msgstr "Añade al azul en base al nivel de rojo" ++msgstr "Añade azul basándose en el nivel de rojo" + +-#: .tmp/epson.c:3098 .tmp/epson2.c:2031 ++#: .tmp/epson.c:3098 ++#: .tmp/epson2.c:2031 + #, no-c-format + msgid "Adds to green based on blue level" +-msgstr "Añade al verde en base al nivel de azul" ++msgstr "Añade verde basándose en el nivel de azul" + +-#: .tmp/epson.c:3099 .tmp/epson2.c:2032 ++#: .tmp/epson.c:3099 ++#: .tmp/epson2.c:2032 + #, no-c-format + msgid "Adds to red based on blue level" +-msgstr "Añade al rojo en base al nivel de azul" ++msgstr "Añade rojo basándose en el nivel de azul." + +-#: .tmp/epson.c:3100 .tmp/epson2.c:2033 ++#: .tmp/epson.c:3100 ++#: .tmp/epson2.c:2033 + #, no-c-format + msgid "Controls blue level" + msgstr "Controla el nivel de azul" + +-#: .tmp/epson.c:3187 .tmp/epson2.c:2096 .tmp/rts8891.c:2766 +-#: .tmp/saneopts.h:159 .tmp/snapscan-options.c:816 .tmp/umax.c:5566 ++#: .tmp/epson.c:3187 ++#: .tmp/epson2.c:2096 ++#: .tmp/rts8891.c:2766 ++#: .tmp/saneopts.h:159 ++#: .tmp/snapscan-options.c:816 ++#: .tmp/umax.c:5566 + #, no-c-format + msgid "Advanced" + msgstr "Avanzado" + +-#: .tmp/epson.c:3196 .tmp/epson2.c:2104 ++#: .tmp/epson.c:3196 ++#: .tmp/epson2.c:2104 + #, no-c-format + msgid "Mirror the image." +-msgstr "Invierte la imagen." ++msgstr "Invertir la imagen." + +-#: .tmp/epson.c:3222 .tmp/mustek.c:4330 ++#: .tmp/epson.c:3222 ++#: .tmp/mustek.c:4330 + #, no-c-format + msgid "Fast preview" +-msgstr "Previsualizado rápido" ++msgstr "Vista previa rápida" + +-#: .tmp/epson.c:3235 .tmp/epson2.c:2114 ++#: .tmp/epson.c:3235 ++#: .tmp/epson2.c:2114 + #, no-c-format + msgid "Auto area segmentation" +-msgstr "Seccionamiento automático del area" ++msgstr "Segmentación automática de área" + +-#: .tmp/epson.c:3248 .tmp/epson2.c:2127 ++#: .tmp/epson.c:3248 ++#: .tmp/epson2.c:2127 + #, no-c-format + msgid "Short resolution list" +-msgstr "Lista de resoluciones ordenada" ++msgstr "Lista corta de resoluciones" + + #: .tmp/epson.c:3250 + #, no-c-format + msgid "Display short resolution list" +-msgstr "Muestra la resolución de escaneo" ++msgstr "Mostrar lista corta de resoluciones" + + #: .tmp/epson.c:3257 + #, no-c-format + msgid "Zoom" +-msgstr "Zoom" ++msgstr "Acercamiento" + + #: .tmp/epson.c:3259 + #, no-c-format + msgid "Defines the zoom factor the scanner will use" +-msgstr "Define el zoom que el escaner va a utilizar" ++msgstr "Define el factor de zoom que usará el escáner" + + #: .tmp/epson.c:3339 + #, no-c-format + msgid "Quick format" + msgstr "Formato rápido" + +-#: .tmp/epson.c:3350 .tmp/epson2.c:2199 ++#: .tmp/epson.c:3350 ++#: .tmp/epson2.c:2199 + #, no-c-format + msgid "Optional equipment" + msgstr "Equipamiento opcional" + +-#: .tmp/epson.c:3421 .tmp/epson2.c:2253 ++#: .tmp/epson.c:3421 ++#: .tmp/epson2.c:2253 + #, no-c-format + msgid "Eject" + msgstr "Expulsar" + +-#: .tmp/epson.c:3422 .tmp/epson2.c:2254 ++#: .tmp/epson.c:3422 ++#: .tmp/epson2.c:2254 + #, no-c-format + msgid "Eject the sheet in the ADF" +-msgstr "Expulsar la hoja en el AAD" ++msgstr "Expulsar la hoja del alimentador" + +-#: .tmp/epson.c:3434 .tmp/epson2.c:2264 ++#: .tmp/epson.c:3434 ++#: .tmp/epson2.c:2264 + #, no-c-format + msgid "Auto eject" +-msgstr "Auto expulsar" ++msgstr "Expulsión automática" + +-#: .tmp/epson.c:3435 .tmp/epson2.c:2266 ++#: .tmp/epson.c:3435 ++#: .tmp/epson2.c:2266 + #, no-c-format + msgid "Eject document after scanning" +-msgstr "Expulsar documento después del escaneo" ++msgstr "Expulsar el documento después del escaneo" + +-#: .tmp/epson.c:3447 .tmp/epson2.c:2276 ++#: .tmp/epson.c:3447 ++#: .tmp/epson2.c:2276 + #, no-c-format + msgid "ADF Mode" +-msgstr "Modo AAD" ++msgstr "Modo alimentador" + +-#: .tmp/epson.c:3449 .tmp/epson2.c:2278 ++#: .tmp/epson.c:3449 ++#: .tmp/epson2.c:2278 + #, no-c-format + msgid "Selects the ADF mode (simplex/duplex)" +-msgstr "Selecciona el modo de AAD (simple/doble)" ++msgstr "Seleccionar el modo del alimentador (una cara/dos caras)" + +-#: .tmp/epson.c:3463 .tmp/epson2.c:2290 ++#: .tmp/epson.c:3463 ++#: .tmp/epson2.c:2290 + #, no-c-format + msgid "Bay" + msgstr "Bahía" + +-#: .tmp/epson.c:3464 .tmp/epson2.c:2291 ++#: .tmp/epson.c:3464 ++#: .tmp/epson2.c:2291 + #, no-c-format + msgid "Select bay to scan" +-msgstr "Selecciona la bahía a escanear" ++msgstr "Seleccione la bahía para escanear" + +-#: .tmp/epson.h:69 .tmp/epson2.h:65 ++#: .tmp/epson.h:69 ++#: .tmp/epson2.h:65 + #, no-c-format +-msgid "" +-"Selects the gamma correction value from a list of pre-defined devices or " +-"the user defined table, which can be downloaded to the scanner" +-msgstr "" +-"Selecciona el valor de corrección gamma desde una lista de dispositivos " +-"pre-definidos o la tabla definida por el usuario, la cual puede ser " +-"descargada al escaner" ++msgid "Selects the gamma correction value from a list of pre-defined devices or the user defined table, which can be downloaded to the scanner" ++msgstr "Selecciona el valor de corrección gamma de una lista de dispositivos predefinidos o de una tabla definida por el usuario, que puede ser descargada al escáner." + +-#: .tmp/epson.h:72 .tmp/epson2.h:68 ++#: .tmp/epson.h:72 ++#: .tmp/epson2.h:68 + #, no-c-format + msgid "Focus Position" + msgstr "Posición del foco" + +-#: .tmp/epson.h:73 .tmp/epson2.h:69 ++#: .tmp/epson.h:73 ++#: .tmp/epson2.h:69 + #, no-c-format +-msgid "" +-"Sets the focus position to either the glass or 2.5mm above the glass" +-msgstr "" +-"Establece la posición del foco en el cristal o a 2.5mm sobre el cristal" ++msgid "Sets the focus position to either the glass or 2.5mm above the glass" ++msgstr "Ajusta la posición del foco, ya sea al cristal o a 2.5mm por encima del cristal" + +-#: .tmp/epson.h:75 .tmp/epson2.h:71 ++#: .tmp/epson.h:75 ++#: .tmp/epson2.h:71 + #, no-c-format + msgid "Wait for Button" +-msgstr "Esperar Botón" ++msgstr "Esperar por el botón" + +-#: .tmp/epson.h:76 .tmp/epson2.h:72 ++#: .tmp/epson.h:76 ++#: .tmp/epson2.h:72 + #, no-c-format +-msgid "" +-"After sending the scan command, wait until the button on the scanner is " +-"pressed to actually start the scan process." +-msgstr "" +-"Después de enviar el comando de escaneo, espera hasta que el botón del " +-"escaner se pulse para comenzar realmente el proceso de escaneo." ++msgid "After sending the scan command, wait until the button on the scanner is pressed to actually start the scan process." ++msgstr "Después de enviar la orden de escanear, esperar hasta que se presione el botón del escáner para empezar realmente el proceso de escaneo." + + #: .tmp/epson2.c:237 + #, no-c-format +@@ -1185,10 +1441,14 @@ + #: .tmp/epson2.c:2129 + #, no-c-format + msgid "Display a shortened resolution list" +-msgstr "Muestra una lista de resoluciones ordenada" ++msgstr "Mostrar una lista de resoluciones ordenada" + +-#: .tmp/genesys.c:107 .tmp/gt68xx.c:147 .tmp/ma1509.c:106 +-#: .tmp/mustek.c:160 .tmp/snapscan-options.c:83 .tmp/umax.c:183 ++#: .tmp/genesys.c:107 ++#: .tmp/gt68xx.c:147 ++#: .tmp/ma1509.c:106 ++#: .tmp/mustek.c:160 ++#: .tmp/snapscan-options.c:83 ++#: .tmp/umax.c:183 + #, no-c-format + msgid "Transparency Adapter" + msgstr "Adaptador de transparencias" +@@ -1196,7 +1456,7 @@ + #: .tmp/genesys.c:5052 + #, no-c-format + msgid "Extras" +-msgstr "Extra" ++msgstr "Extras" + + #: .tmp/genesys.c:5073 + #, no-c-format +@@ -1205,12 +1465,8 @@ + + #: .tmp/genesys.c:5076 + #, no-c-format +-msgid "" +-"When using high resolutions where the horizontal resolution is smaller " +-"than the vertical resolution this disables horizontal interpolation." +-msgstr "" +-"Cuando se usan resoluciones altas donde la resolución horizontal es " +-"menor que la vertical, esto desactiva la interpolación horizontal." ++msgid "When using high resolutions where the horizontal resolution is smaller than the vertical resolution this disables horizontal interpolation." ++msgstr "Cuando se usan altas resoluciones en las que la resolución horizontal es más pequeña que la vertical, esto desactiva la interpolación horizontal." + + #: .tmp/genesys.c:5085 + #, no-c-format +@@ -1220,94 +1476,95 @@ + #: .tmp/genesys.c:5088 + #, no-c-format + msgid "When using gray or lineart this option selects the used color." +-msgstr "Esta opción selecciona el color usado para modos grises y lineart." ++msgstr "Cuando se usa gris o línea de arte esta opción selecciona el color usado." + + #: .tmp/genesys.c:5097 + #, no-c-format + msgid "Lamp off time" +-msgstr "Tiempo de apagado de la lámpara" ++msgstr "Tiempo de espera de la lámpara" + + #: .tmp/genesys.c:5100 + #, no-c-format +-msgid "" +-"The lamp will be turned off after the given time (in minutes). A value " +-"of 0 means, that the lamp won't be turned off." +-msgstr "" +-"La lámpara se apagará después de un tiempo dado (en minutos). Un valor " +-"de 0 significa, que la lampara no se apagará." ++msgid "The lamp will be turned off after the given time (in minutes). A value of 0 means, that the lamp won't be turned off." ++msgstr "La lámpara será apagada después del tiempo dado (en minutos). Un valor de 0 significa que la lámpara no será apagada" + +-#: .tmp/genesys.c:5128 .tmp/genesys.c:5129 +-#, fuzzy, no-c-format ++#: .tmp/genesys.c:5128 ++#: .tmp/genesys.c:5129 ++#, no-c-format + msgid "File button" +-msgstr "Esperar Botón" ++msgstr "Botón de archivo" + +-#: .tmp/genesys.c:5181 .tmp/genesys.c:5182 ++#: .tmp/genesys.c:5181 ++#: .tmp/genesys.c:5182 + #, no-c-format + msgid "OCR button" +-msgstr "" ++msgstr "Botón de OCR" + +-#: .tmp/genesys.c:5195 .tmp/genesys.c:5196 +-#, fuzzy, no-c-format ++#: .tmp/genesys.c:5195 ++#: .tmp/genesys.c:5196 ++#, no-c-format + msgid "Power button" +-msgstr "Esperar Botón" ++msgstr "Botón de energía" + +-#: .tmp/genesys.c:5209 .tmp/genesys.c:5210 .tmp/pixma_sane_options.c:210 ++#: .tmp/genesys.c:5209 ++#: .tmp/genesys.c:5210 ++#: .tmp/pixma_sane_options.c:210 + #: .tmp/plustek.c:1079 + #, no-c-format + msgid "Buttons" + msgstr "Botones" + +-#: .tmp/genesys.c:5216 .tmp/hp-option.h:97 .tmp/hp5400_sane.c:392 +-#: .tmp/niash.c:728 .tmp/plustek.c:940 ++#: .tmp/genesys.c:5216 ++#: .tmp/hp-option.h:97 ++#: .tmp/hp5400_sane.c:392 ++#: .tmp/niash.c:728 ++#: .tmp/plustek.c:940 + #, no-c-format + msgid "Calibrate" + msgstr "Calibrar" + + #: .tmp/genesys.c:5217 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Start calibration using special sheet" +-msgstr "Comenzar proceso de calibración." ++msgstr "Iniciar calibración usando una hoja especial" + + #: .tmp/genesys.c:5229 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Clear calibration" +-msgstr "Calibración basta" ++msgstr "Limpiar la calibración" + + #: .tmp/genesys.c:5230 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Clear calibration cache" +-msgstr "Cache para la calibración" ++msgstr "Limpiar la caché de datos de calibración" + + #: .tmp/gt68xx.c:474 + #, no-c-format + msgid "Gray mode color" +-msgstr "Color para modo de grises" ++msgstr "Color en modo gris" + + #: .tmp/gt68xx.c:476 + #, no-c-format + msgid "Selects which scan color is used gray mode (default: green)." +-msgstr "" +-"Selecciona el color de escaneo que se usará en modo de grises (por " +-"defecto: verde)." ++msgstr "Selecciona qué color de escaneo se usará en modo gris (predefinido: verde)." + +-#: .tmp/gt68xx.c:557 .tmp/hp3900_sane.c:1391 .tmp/mustek_usb2.c:410 ++#: .tmp/gt68xx.c:557 ++#: .tmp/hp3900_sane.c:1391 ++#: .tmp/mustek_usb2.c:410 + #, no-c-format + msgid "Debugging Options" + msgstr "Opciones de depuración" + +-#: .tmp/gt68xx.c:568 .tmp/mustek_usb2.c:419 ++#: .tmp/gt68xx.c:568 ++#: .tmp/mustek_usb2.c:419 + #, no-c-format + msgid "Automatic warmup" + msgstr "Calentamiento automático" + + #: .tmp/gt68xx.c:570 + #, no-c-format +-msgid "" +-"Warm-up until the lamp's brightness is constant instead of insisting on " +-"60 seconds warm-up time." +-msgstr "" +-"Calentamiento hasta que el brillo de la lámpara es constante, en vez " +-"forzar el tiempo de calentamiento a 60 segundos." ++msgid "Warm-up until the lamp's brightness is constant instead of insisting on 60 seconds warm-up time." ++msgstr "Calentar hasta que el brillo de la lámpara sea constante en vez de esperar por los 60 segundos de calentamiento." + + #: .tmp/gt68xx.c:582 + #, no-c-format +@@ -1316,73 +1573,50 @@ + + #: .tmp/gt68xx.c:584 + #, no-c-format +-msgid "" +-"Scan the complete scanning area including calibration strip. Be careful. " +-"Don't select the full height. For testing only." +-msgstr "" +-"Escanea el area completa, incluyendo el patrón de calibración. Tenga " +-"cuidado. No seleccione la altura completa. Solo para pruebas." ++msgid "Scan the complete scanning area including calibration strip. Be careful. Don't select the full height. For testing only." ++msgstr "Escanear todo el área de escaneado incluyendo la franja de calibración. Tenga cuidado. No seleccione la altura total. Sólo para pruebas." + + #: .tmp/gt68xx.c:595 + #, no-c-format + msgid "Coarse calibration" +-msgstr "Calibración basta" ++msgstr "Calibración tosca" + + #: .tmp/gt68xx.c:597 + #, no-c-format +-msgid "" +-"Setup gain and offset for scanning automatically. If this option is " +-"disabled, options for setting the analog frontend parameters manually " +-"are provided. This option is enabled by default. For testing only." +-msgstr "" +-"Configura automáticamente la ganancia y el offset. Esta opción está " +-"desactivada. Se proporcionan los controles para establecer estos " +-"parámetros manualmente. Opción activada por defecto. Solo para pruebas." ++msgid "Setup gain and offset for scanning automatically. If this option is disabled, options for setting the analog frontend parameters manually are provided. This option is enabled by default. For testing only." ++msgstr "Configuración de la ganancia y desplazamiento para escanear automáticamente. Si esta opción está desactivada, se proporcionan las opciones de ajuste de los parámetros de forma manual en la interfaz analógica. Esta opción está activada como predefinida. Solo para pruebas." + + #: .tmp/gt68xx.c:616 + #, no-c-format + msgid "Coarse calibration for first scan only" +-msgstr "Calibración basta solo para el primer escaneo" ++msgstr "Calibración tosca sólo para el primer escaneo" + + #: .tmp/gt68xx.c:618 + #, no-c-format +-msgid "" +-"Coarse calibration is only done for the first scan. Works with most " +-"scanners and can save scanning time. If the image brightness is " +-"different with each scan, disable this option. For testing only." +-msgstr "" +-"La calibración basta se hace solo para el primer escaneo. Funciona con " +-"la mayoría de los escáneres y puede ahorrar tiempo. Si el brillo de la " +-"imagen es diferente en cada escaneo, desactiva esta opción. Solo para " +-"pruebas." ++msgid "Coarse calibration is only done for the first scan. Works with most scanners and can save scanning time. If the image brightness is different with each scan, disable this option. For testing only." ++msgstr "La calibración tosca se hace sólo para el primer escaneo. Funciona con la mayoría de escáneres y puede ahorrar tiempo de escaneo. Si el brillo de la imagen es diferente con cada escaneo, desactive esta opción. Sólo para pruebas." + + #: .tmp/gt68xx.c:649 + #, no-c-format + msgid "Backtrack lines" +-msgstr "Líneas de retroceso" ++msgstr "Lineas de vuelta atrás" + + #: .tmp/gt68xx.c:651 + #, no-c-format +-msgid "" +-"Number of lines the scan slider moves back when backtracking occurs. " +-"That happens when the scanner scans faster than the computer can receive " +-"the data. Low values cause faster scans but increase the risk of " +-"omitting lines." +-msgstr "" +-"Número de líneas que el cabezal debe desplazarse cuando hay retroceso. " +-"Eso sucede cuando el escáner escanea más rápido de lo que el ordenador " +-"puede datos. Valores bajos causan escaneos más rápidos pero incrementan " +-"el riesgo de omisión de líneas." ++msgid "Number of lines the scan slider moves back when backtracking occurs. That happens when the scanner scans faster than the computer can receive the data. Low values cause faster scans but increase the risk of omitting lines." ++msgstr "Número de líneas que retrocede el escáner cuando escanea más rápido de lo que el equipo puede recibir datos. Valores bajos hacen que los escaneos sean más rápidos, pero aumentan los riesgos de omitir líneas." + +-#: .tmp/gt68xx.c:676 .tmp/mustek_usb2.c:452 ++#: .tmp/gt68xx.c:676 ++#: .tmp/mustek_usb2.c:452 + #, no-c-format + msgid "Gamma value" + msgstr "Valor gamma" + +-#: .tmp/gt68xx.c:678 .tmp/mustek_usb2.c:454 ++#: .tmp/gt68xx.c:678 ++#: .tmp/mustek_usb2.c:454 + #, no-c-format + msgid "Sets the gamma value of all channels." +-msgstr "Establece el valor gamma para todos los canales." ++msgstr "Ajusta el valor gamma para todos los canales." + + #: .tmp/hp-option.c:2983 + #, no-c-format +@@ -1392,17 +1626,17 @@ + #: .tmp/hp-option.c:3040 + #, no-c-format + msgid "Coarse" +-msgstr "Basto" ++msgstr "Gruesa" + + #: .tmp/hp-option.c:3041 + #, no-c-format + msgid "Fine" +-msgstr "Fino" ++msgstr "Fina" + + #: .tmp/hp-option.c:3042 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Bayer" +-msgstr "Binario" ++msgstr "Bayer" + + #: .tmp/hp-option.c:3043 + #, no-c-format +@@ -1414,15 +1648,18 @@ + msgid "Horizontal" + msgstr "Horizontal" + +-#: .tmp/hp-option.c:3045 .tmp/hp-option.c:3096 ++#: .tmp/hp-option.c:3045 ++#: .tmp/hp-option.c:3096 + #, no-c-format + msgid "Custom" + msgstr "Personalizado" + +-#: .tmp/hp-option.c:3086 .tmp/hp-option.c:3142 .tmp/hp-option.c:3157 ++#: .tmp/hp-option.c:3086 ++#: .tmp/hp-option.c:3142 ++#: .tmp/hp-option.c:3157 + #, no-c-format + msgid "Auto" +-msgstr "Automático" ++msgstr "Auto" + + #: .tmp/hp-option.c:3087 + #, no-c-format +@@ -1432,12 +1669,12 @@ + #: .tmp/hp-option.c:3088 + #, no-c-format + msgid "XPA RGB" +-msgstr "XPA RGB" ++msgstr "Adaptador de transparencias RGB" + + #: .tmp/hp-option.c:3089 + #, no-c-format + msgid "Pass-through" +-msgstr "Pass-through" ++msgstr "A través" + + #: .tmp/hp-option.c:3090 + #, no-c-format +@@ -1447,15 +1684,19 @@ + #: .tmp/hp-option.c:3091 + #, no-c-format + msgid "XPA Gray" +-msgstr "XPA Gris" ++msgstr "Adaptador de transparencias gris" + + #: .tmp/hp-option.c:3143 + #, no-c-format + msgid "Slow" + msgstr "Lento" + +-#: .tmp/hp-option.c:3144 .tmp/hp-option.c:3251 .tmp/matsushita.c:244 +-#: .tmp/mustek.c:145 .tmp/plustek.c:233 .tmp/plustek_pp.c:200 ++#: .tmp/hp-option.c:3144 ++#: .tmp/hp-option.c:3251 ++#: .tmp/matsushita.c:244 ++#: .tmp/mustek.c:145 ++#: .tmp/plustek.c:233 ++#: .tmp/plustek_pp.c:200 + #: .tmp/u12.c:155 + #, no-c-format + msgid "Normal" +@@ -1469,34 +1710,38 @@ + #: .tmp/hp-option.c:3146 + #, no-c-format + msgid "Extra Fast" +-msgstr "Ultra rápido" ++msgstr "Muy rápido" + +-#: .tmp/hp-option.c:3158 .tmp/hp-option.c:3325 .tmp/hp-option.c:3338 ++#: .tmp/hp-option.c:3158 ++#: .tmp/hp-option.c:3325 ++#: .tmp/hp-option.c:3338 + #, no-c-format + msgid "Off" +-msgstr "Off" ++msgstr "Apagado" + + #: .tmp/hp-option.c:3159 + #, no-c-format + msgid "2-pixel" +-msgstr "2-pixel" ++msgstr "2-píxeles" + + #: .tmp/hp-option.c:3160 + #, no-c-format + msgid "4-pixel" +-msgstr "4-pixel" ++msgstr "4-píxeles" + + #: .tmp/hp-option.c:3161 + #, no-c-format + msgid "8-pixel" +-msgstr "8-pixel" ++msgstr "8-píxeles" + + #: .tmp/hp-option.c:3172 + #, no-c-format + msgid "Print" +-msgstr "Print" ++msgstr "Imprimir" + +-#: .tmp/hp-option.c:3173 .tmp/hp3900_sane.c:427 .tmp/hp3900_sane.c:1019 ++#: .tmp/hp-option.c:3173 ++#: .tmp/hp3900_sane.c:427 ++#: .tmp/hp3900_sane.c:1019 + #, no-c-format + msgid "Slide" + msgstr "Diapositiva" +@@ -1504,31 +1749,40 @@ + #: .tmp/hp-option.c:3174 + #, no-c-format + msgid "Film-strip" +-msgstr "Film-strip" ++msgstr "Tira de película" + +-#: .tmp/hp-option.c:3234 .tmp/hp3900_sane.c:428 .tmp/hp3900_sane.c:1021 +-#: .tmp/hp3900_sane.c:1420 .tmp/mustek_usb2.c:121 .tmp/plustek.c:235 +-#: .tmp/plustek_pp.c:202 .tmp/saneopts.h:206 .tmp/u12.c:157 ++#: .tmp/hp-option.c:3234 ++#: .tmp/hp3900_sane.c:428 ++#: .tmp/hp3900_sane.c:1021 ++#: .tmp/hp3900_sane.c:1420 ++#: .tmp/mustek_usb2.c:121 ++#: .tmp/plustek.c:235 ++#: .tmp/plustek_pp.c:202 ++#: .tmp/saneopts.h:206 ++#: .tmp/u12.c:157 + #, no-c-format + msgid "Negative" + msgstr "Negativo" + +-#: .tmp/hp-option.c:3252 .tmp/hp5590.c:82 ++#: .tmp/hp-option.c:3252 ++#: .tmp/hp5590.c:82 + #, no-c-format + msgid "ADF" +-msgstr "AAD" ++msgstr "Alimentador automático de documentos (ADF)" + + #: .tmp/hp-option.c:3253 + #, no-c-format + msgid "XPA" +-msgstr "XPA" ++msgstr "Adaptador de transparencias (XPA)" + +-#: .tmp/hp-option.c:3326 .tmp/hp-option.c:3339 ++#: .tmp/hp-option.c:3326 ++#: .tmp/hp-option.c:3339 + #, no-c-format + msgid "On" +-msgstr "On" ++msgstr "Activo" + +-#: .tmp/hp-option.c:3327 .tmp/hp-option.c:3340 ++#: .tmp/hp-option.c:3327 ++#: .tmp/hp-option.c:3340 + #, no-c-format + msgid "Conditional" + msgstr "Condicional" +@@ -1536,7 +1790,7 @@ + #: .tmp/hp-option.c:3413 + #, no-c-format + msgid "Experiment" +-msgstr "Experimental" ++msgstr "Experimento" + + #: .tmp/hp-option.h:60 + #, no-c-format +@@ -1546,7 +1800,7 @@ + #: .tmp/hp-option.h:61 + #, no-c-format + msgid "Set sharpening value." +-msgstr "Establecer valor de nitidez." ++msgstr "Ajustar el valor de nitidez." + + #: .tmp/hp-option.h:66 + #, no-c-format +@@ -1556,7 +1810,7 @@ + #: .tmp/hp-option.h:68 + #, no-c-format + msgid "Enable automatic determination of threshold for line-art scans." +-msgstr "Activa el umbral automático para escaneos line-art." ++msgstr "Activar la determinación automática de umbral para escaneos como línea de arte." + + #: .tmp/hp-option.h:73 + #, no-c-format +@@ -1566,17 +1820,17 @@ + #: .tmp/hp-option.h:74 + #, no-c-format + msgid "Select smoothing filter." +-msgstr "Selecciona el filtro de suavizado." ++msgstr "Seleccionar filtro de suavizado." + + #: .tmp/hp-option.h:79 + #, no-c-format + msgid "Unload media after scan" +-msgstr "Descargar medio después de escaneo" ++msgstr "Descargar soporte después de escanear" + + #: .tmp/hp-option.h:80 + #, no-c-format + msgid "Unloads the media after a scan." +-msgstr "Descarga el medio después de un escaneo." ++msgstr "Descargar los soportes después de escanear." + + #: .tmp/hp-option.h:85 + #, no-c-format +@@ -1586,7 +1840,7 @@ + #: .tmp/hp-option.h:86 + #, no-c-format + msgid "Change Document." +-msgstr "Cambiar Documento." ++msgstr "Cambiar documento." + + #: .tmp/hp-option.h:91 + #, no-c-format +@@ -1596,22 +1850,22 @@ + #: .tmp/hp-option.h:92 + #, no-c-format + msgid "Unload Document." +-msgstr "Descargar documento." ++msgstr "Descargar documento" + + #: .tmp/hp-option.h:98 + #, no-c-format + msgid "Start calibration process." +-msgstr "Comenzar proceso de calibración." ++msgstr "Iniciar proceso de calibración" + + #: .tmp/hp-option.h:103 + #, no-c-format + msgid "Media" +-msgstr "Medio" ++msgstr "Soporte" + + #: .tmp/hp-option.h:104 + #, no-c-format + msgid "Set type of media." +-msgstr "Establecer tipo de medio." ++msgstr "Ajustar tipo de soporte." + + #: .tmp/hp-option.h:109 + #, no-c-format +@@ -1620,18 +1874,11 @@ + + #: .tmp/hp-option.h:111 + #, no-c-format +-msgid "" +-"A longer exposure time lets the scanner collect more light. Suggested " +-"use is 175% for prints, 150% for normal slides and \"Negative\" for " +-"negative film. For dark (underexposed) images you can increase this " +-"value." +-msgstr "" +-"Un tiempo de exposición mayor permite al escaner acumular más luz. Se " +-"aconseja 175% para impresiones, 150% para diapositivas y \"Negativo\" " +-"para película negativa. Para imágenes oscuras (baja exposición) puedes " +-"incrementer este valor." ++msgid "A longer exposure time lets the scanner collect more light. Suggested use is 175% for prints, 150% for normal slides and \"Negative\" for negative film. For dark (underexposed) images you can increase this value." ++msgstr "Una exposición prolongada permite al escáner recoger más luz. Se sugiere usar 175% para impresiones, 150% para diapositivas normales y «Negativo» para película en negativo. Para imágenes oscuras (subexpuestas) puede incrementar este valor." + +-#: .tmp/hp-option.h:119 .tmp/hp-option.h:126 ++#: .tmp/hp-option.h:119 ++#: .tmp/hp-option.h:126 + #, no-c-format + msgid "Color Matrix" + msgstr "Matriz de color" +@@ -1639,42 +1886,42 @@ + #: .tmp/hp-option.h:121 + #, no-c-format + msgid "Set the scanners color matrix." +-msgstr "Establece la matriz de color del escaner." ++msgstr "Ajustar la matriz de color del escáner." + + #: .tmp/hp-option.h:127 + #, no-c-format + msgid "Custom color matrix." +-msgstr "Matriz personalizada de color." ++msgstr "Matriz de color personalizada." + + #: .tmp/hp-option.h:132 + #, no-c-format + msgid "Mono Color Matrix" +-msgstr "Matriz de un solo color" ++msgstr "Matriz monocromo" + + #: .tmp/hp-option.h:133 + #, no-c-format + msgid "Custom color matrix for grayscale scans." +-msgstr "Matriz personalizada de color para escaneo de grises." ++msgstr "Matriz de color personalizada para escáneres en escala de grises." + + #: .tmp/hp-option.h:138 + #, no-c-format + msgid "Mirror horizontal" +-msgstr "Espejo horizontal" ++msgstr "Inversión horizontal" + + #: .tmp/hp-option.h:139 + #, no-c-format + msgid "Mirror image horizontally." +-msgstr "Invierte la imagen horizontalmente." ++msgstr "Invertir la imagen horizontalmente." + + #: .tmp/hp-option.h:144 + #, no-c-format + msgid "Mirror vertical" +-msgstr "Espejo vertical" ++msgstr "Inversión vertical" + + #: .tmp/hp-option.h:145 + #, no-c-format + msgid "Mirror image vertically." +-msgstr "Invierte la imagen verticalmente." ++msgstr "Invertir la imagen verticalmente." + + #: .tmp/hp-option.h:150 + #, no-c-format +@@ -1689,14 +1936,12 @@ + #: .tmp/hp-option.h:156 + #, no-c-format + msgid "8 bit output" +-msgstr "8 bits de salida" ++msgstr "Salida de 8 bits" + + #: .tmp/hp-option.h:158 + #, no-c-format + msgid "Use bit depth greater eight internally, but output only eight bits." +-msgstr "" +-"Internamente usa una profundidad mayor a ocho bits, pero la salida es de " +-"ocho." ++msgstr "Usar bit de profundidad mayor de ocho internamente, pero en la salida usar sólo ocho bits." + + #: .tmp/hp-option.h:164 + #, no-c-format +@@ -1706,7 +1951,7 @@ + #: .tmp/hp-option.h:165 + #, no-c-format + msgid "Wait to scan for front-panel button push." +-msgstr "Espera el uso del botón del panel frontal para escanear." ++msgstr "Esperar a que se presione en el botón frontal para escanear." + + #: .tmp/hp-option.h:172 + #, no-c-format +@@ -1716,17 +1961,18 @@ + #: .tmp/hp-option.h:173 + #, no-c-format + msgid "Shut off scanner lamp." +-msgstr "Apaga la lámpara del escaner." ++msgstr "Apagar la lámpara del escáner." + + #: .tmp/hp3500.c:977 + #, no-c-format + msgid "Geometry Group" +-msgstr "Geometría" ++msgstr "Grupo de geometría" + +-#: .tmp/hp3500.c:1033 .tmp/hp3500.c:1034 ++#: .tmp/hp3500.c:1033 ++#: .tmp/hp3500.c:1034 + #, no-c-format + msgid "Scan Mode Group" +-msgstr "Modo de Escaneo" ++msgstr "Grupo de modo de escaneo" + + #: .tmp/hp3900_sane.c:1404 + #, no-c-format +@@ -1736,14 +1982,12 @@ + #: .tmp/hp3900_sane.c:1407 + #, no-c-format + msgid "Allows to test device behaviour with other supported models" +-msgstr "" +-"Permite comprobar el comportamiento del dispositivo con otros modelos " +-"soportados" ++msgstr "Permite comprobar el comportamiento del dispositivo con otros modelos soportados" + + #: .tmp/hp3900_sane.c:1421 + #, no-c-format + msgid "Image colours will be inverted" +-msgstr "Los colores de la imagen se invertirán" ++msgstr "Las imágenes de color se invertirán" + + #: .tmp/hp3900_sane.c:1435 + #, no-c-format +@@ -1753,44 +1997,37 @@ + #: .tmp/hp3900_sane.c:1436 + #, no-c-format + msgid "Gamma correction will be disabled" +-msgstr "La corrección gamma será desactivada" ++msgstr "La corrección gamma se desactivará" + + #: .tmp/hp3900_sane.c:1450 + #, no-c-format + msgid "Disable white shading correction" +-msgstr "Desactivar la corrección de sombras" ++msgstr "Desactivar la corrección de sombra blanca" + + #: .tmp/hp3900_sane.c:1452 + #, no-c-format + msgid "White shading correction will be disabled" +-msgstr "Se desactivará la corrección de sombras" ++msgstr "La corrección de sombra blanca se desactivará" + + #: .tmp/hp3900_sane.c:1466 + #, no-c-format + msgid "Skip warmup process" +-msgstr "Saltarse el proceso de calentamiento" ++msgstr "Omitir proceso de calentamiento" + + #: .tmp/hp3900_sane.c:1467 + #, no-c-format + msgid "Warmup process will be disabled" +-msgstr "Se desactivará el proceso de calentamiento" ++msgstr "El proceso de calentamiento se desactivará" + + #: .tmp/hp3900_sane.c:1481 + #, no-c-format + msgid "Force real depth" +-msgstr "Forzar resolución real" ++msgstr "Forzar profundidad real" + + #: .tmp/hp3900_sane.c:1484 + #, no-c-format +-msgid "" +-"If gamma is enabled, scans are always made in 16 bits depth to improve " +-"image quality and then converted to the selected depth. This option " +-"avoids depth emulation." +-msgstr "" +-"Si la corrección gamma está activada, los escaneos se realizan siempre " +-"con una profundidad de color de 16 bits para mejorar la calidad de la " +-"imágen y después se convierten a la profundidad de color seleccionada. " +-"Esta opción evita la emulación de profundidad de color." ++msgid "If gamma is enabled, scans are always made in 16 bits depth to improve image quality and then converted to the selected depth. This option avoids depth emulation." ++msgstr "Si gamma está activada, siempre se analiza en profundidad de 16 bits para mejorar la calidad de la imagen y después convertirla a la profundidad seleccionada. Esta opción evita la emulación de profundidad." + + #: .tmp/hp3900_sane.c:1498 + #, no-c-format +@@ -1799,14 +2036,8 @@ + + #: .tmp/hp3900_sane.c:1501 + #, no-c-format +-msgid "" +-"If enabled, image will be scanned in color mode and then converted to " +-"grayscale by software. This may improve image quality in some " +-"circumstances." +-msgstr "" +-"Si se activa, la imagen se escaneará en color y después se converirá a " +-"escala de grises por software. Esto puede mejorar la calidad de la " +-"imagen en algunas circunstancias." ++msgid "If enabled, image will be scanned in color mode and then converted to grayscale by software. This may improve image quality in some circumstances." ++msgstr "Si está activada, la imagen será escaneada en modo de color y después convertida a escala de grises por software. Esto puede mejorar la calidad de la imagen en algunas circunstancias." + + #: .tmp/hp3900_sane.c:1515 + #, no-c-format +@@ -1815,22 +2046,18 @@ + + #: .tmp/hp3900_sane.c:1518 + #, no-c-format +-msgid "" +-"If enabled, some images involved in scanner processing are saved to " +-"analyze them." +-msgstr "" +-"Si se activa, se guardarán algunas imágenes relacionadas con el proceso " +-"de escaneo para analizarlas." ++msgid "If enabled, some images involved in scanner processing are saved to analyze them." ++msgstr "Si se activa, algunas imágenes implicadas en el proceso de escaneo se guardarán para analizarlas." + + #: .tmp/hp3900_sane.c:1532 + #, no-c-format + msgid "Reset chipset" +-msgstr "Resetear el chipset" ++msgstr "Reiniciar el chipset" + + #: .tmp/hp3900_sane.c:1533 + #, no-c-format + msgid "Resets chipset data" +-msgstr "Resetea los datos del chipset" ++msgstr "Reiniciar los datos del chipset" + + #: .tmp/hp3900_sane.c:1546 + #, no-c-format +@@ -1845,7 +2072,7 @@ + #: .tmp/hp3900_sane.c:1560 + #, no-c-format + msgid "Shows chipset name used in device." +-msgstr "Muestra el nombre del chipset que usa el dispositivo." ++msgstr "Muestra el nombre del chipset usado en el dispositivo." + + #: .tmp/hp3900_sane.c:1564 + #, no-c-format +@@ -1860,7 +2087,7 @@ + #: .tmp/hp3900_sane.c:1570 + #, no-c-format + msgid "Shows the chipset ID" +-msgstr "Muestra la ID del chipset" ++msgstr "Mostrar la ID del chipset" + + #: .tmp/hp3900_sane.c:1580 + #, no-c-format +@@ -1870,7 +2097,7 @@ + #: .tmp/hp3900_sane.c:1582 + #, no-c-format + msgid "Shows the number of scans made by scanner" +-msgstr "Muestra el número de escaneos realizados por el escáner" ++msgstr "Mostrar el número de escaneos hechas por el escáner" + + #: .tmp/hp3900_sane.c:1592 + #, no-c-format +@@ -1880,72 +2107,78 @@ + #: .tmp/hp3900_sane.c:1593 + #, no-c-format + msgid "Updates information about device" +-msgstr "Actualiza la información del dispositivo" ++msgstr "Actualiza la información acerca del dispositivo" + + #: .tmp/hp3900_sane.c:1633 + #, no-c-format + msgid "This option reflects a front panel scanner button" +-msgstr "Esta opción refleja el estado de los botones del escaner" ++msgstr "Esta opción refleja un botón del panel frontal del escáner" + +-#: .tmp/hp5400_sane.c:313 .tmp/niash.c:683 ++#: .tmp/hp5400_sane.c:313 ++#: .tmp/niash.c:683 + #, no-c-format + msgid "Image" + msgstr "Imagen" + +-#: .tmp/hp5400_sane.c:352 .tmp/niash.c:711 ++#: .tmp/hp5400_sane.c:352 ++#: .tmp/niash.c:711 + #, no-c-format + msgid "Miscellaneous" +-msgstr "Miscelánea" ++msgstr "Varios" + + #: .tmp/hp5400_sane.c:358 + #, no-c-format + msgid "offset X" +-msgstr "offset X" ++msgstr "posición X" + + #: .tmp/hp5400_sane.c:359 + #, no-c-format + msgid "Hardware internal X position of the scanning area." +-msgstr "Posición X de la zona de escaneo." ++msgstr "Posición X interna en el hardware de la zona de escaneo." + + #: .tmp/hp5400_sane.c:368 + #, no-c-format + msgid "offset Y" +-msgstr "offset Y" ++msgstr "posición Y" + + #: .tmp/hp5400_sane.c:369 + #, no-c-format + msgid "Hardware internal Y position of the scanning area." +-msgstr "Posición Y de la zona de escaneo." ++msgstr "Posición Y interna en el hardware de la zona de escaneo." + +-#: .tmp/hp5400_sane.c:381 .tmp/niash.c:718 ++#: .tmp/hp5400_sane.c:381 ++#: .tmp/niash.c:718 + #, no-c-format + msgid "Lamp status" + msgstr "Estado de la lámpara" + +-#: .tmp/hp5400_sane.c:382 .tmp/niash.c:719 ++#: .tmp/hp5400_sane.c:382 ++#: .tmp/niash.c:719 + #, no-c-format + msgid "Switches the lamp on or off." +-msgstr "Enciende/Apaga la lámpara." ++msgstr "Enciende o apaga la lámpara" + +-#: .tmp/hp5400_sane.c:393 .tmp/niash.c:729 ++#: .tmp/hp5400_sane.c:393 ++#: .tmp/niash.c:729 + #, no-c-format + msgid "Calibrates for black and white level." +-msgstr "Calibración de niveles blancos y negros." ++msgstr "Calibrar el nivel de blanco y negro." + +-#: .tmp/hp5590.c:83 .tmp/pixma.c:663 ++#: .tmp/hp5590.c:83 ++#: .tmp/pixma.c:663 + #, no-c-format + msgid "ADF Duplex" +-msgstr "AAD Doble" ++msgstr "Alimentador a dos caras" + + #: .tmp/hp5590.c:84 + #, no-c-format + msgid "TMA Slides" +-msgstr "Diapositivas" ++msgstr "Adaptador (TMA) para diapositivas" + + #: .tmp/hp5590.c:85 + #, no-c-format + msgid "TMA Negatives" +-msgstr "Negativos" ++msgstr "Adaptador (TMA) para negativos" + + #: .tmp/hp5590.c:88 + #, no-c-format +@@ -1955,22 +2188,22 @@ + #: .tmp/hp5590.c:91 + #, no-c-format + msgid "Extend lamp timeout" +-msgstr "Aumentar timeout de la lámpara" ++msgstr "Retardar el tiempo de apagado de la lámpara" + + #: .tmp/hp5590.c:92 + #, no-c-format + msgid "Extends lamp timeout (from 15 minutes to 1 hour)" +-msgstr "Aumenta el timeout de la lámpara (de 15 minutos a 1 hora)" ++msgstr "Retarda los tiempos de apagado de la lámpara (de 15 minutos a 1 hora)" + + #: .tmp/hp5590.c:94 + #, no-c-format + msgid "Wait for button" +-msgstr "Esperar Botón" ++msgstr "Esperando por el botón" + + #: .tmp/hp5590.c:95 + #, no-c-format + msgid "Waits for button before scanning" +-msgstr "Espera la pulsación del botón antes de escanear" ++msgstr "Esperando por el botón antes de escanear" + + #: .tmp/leo.c:110 + #, no-c-format +@@ -1980,102 +2213,118 @@ + #: .tmp/leo.c:111 + #, no-c-format + msgid "8x8 Coarse Fatting" +-msgstr "" ++msgstr "8x8 «Engrasado» tosco" + + #: .tmp/leo.c:112 + #, no-c-format + msgid "8x8 Fine Fatting" +-msgstr "" ++msgstr "8x8 «Engrasado» fino" + + #: .tmp/leo.c:113 + #, no-c-format + msgid "8x8 Bayer" +-msgstr "8x8 Bahía" ++msgstr "8x8 Bayer" + + #: .tmp/leo.c:114 + #, no-c-format + msgid "8x8 Vertical Line" +-msgstr "8x8 Línea Vertical" ++msgstr "8x8 Línea vertical" + +-#: .tmp/leo.h:260 .tmp/matsushita.h:209 .tmp/teco1.h:291 .tmp/teco3.h:294 ++#: .tmp/leo.h:260 ++#: .tmp/matsushita.h:209 ++#: .tmp/teco1.h:291 ++#: .tmp/teco3.h:294 + #, no-c-format + msgid "Black & White" + msgstr "Blanco y negro" + +-#: .tmp/lexmark.c:288 .tmp/umax_pp.c:713 ++#: .tmp/lexmark.c:288 ++#: .tmp/umax_pp.c:713 + #, no-c-format + msgid "Gain" + msgstr "Ganancia" + +-#: .tmp/lexmark.c:289 .tmp/umax_pp.c:714 ++#: .tmp/lexmark.c:289 ++#: .tmp/umax_pp.c:714 + #, no-c-format + msgid "Color channels gain settings" +-msgstr "Opciones de ganancia" ++msgstr "Ajustes de ganancia de los canales de color" + +-#: .tmp/lexmark.c:298 .tmp/umax_pp.c:721 ++#: .tmp/lexmark.c:298 ++#: .tmp/umax_pp.c:721 + #, no-c-format + msgid "Gray gain" +-msgstr "Ganancia de Gris" ++msgstr "Ganancia de gris" + +-#: .tmp/lexmark.c:299 .tmp/umax_pp.c:722 ++#: .tmp/lexmark.c:299 ++#: .tmp/umax_pp.c:722 + #, no-c-format + msgid "Sets gray channel gain" +-msgstr "Establece la ganancia de gris" ++msgstr "Ajusta la ganancia del canal de gris" + +-#: .tmp/lexmark.c:312 .tmp/plustek.c:1000 .tmp/umax_pp.c:733 ++#: .tmp/lexmark.c:312 ++#: .tmp/plustek.c:1000 ++#: .tmp/umax_pp.c:733 + #, no-c-format + msgid "Red gain" +-msgstr "Ganancia de Rojo" ++msgstr "Ganancia de rojo" + +-#: .tmp/lexmark.c:313 .tmp/umax_pp.c:734 ++#: .tmp/lexmark.c:313 ++#: .tmp/umax_pp.c:734 + #, no-c-format + msgid "Sets red channel gain" +-msgstr "Establece la ganancia del canal rojo" ++msgstr "Ajusta la ganancia del canal de rojo" + +-#: .tmp/lexmark.c:326 .tmp/plustek.c:1016 .tmp/umax_pp.c:745 ++#: .tmp/lexmark.c:326 ++#: .tmp/plustek.c:1016 ++#: .tmp/umax_pp.c:745 + #, no-c-format + msgid "Green gain" +-msgstr "Ganancia verde" ++msgstr "Ganancia de Verde" + +-#: .tmp/lexmark.c:327 .tmp/umax_pp.c:746 ++#: .tmp/lexmark.c:327 ++#: .tmp/umax_pp.c:746 + #, no-c-format + msgid "Sets green channel gain" +-msgstr "Establece la ganancia del canal verde" ++msgstr "Ajusta la ganancia del canal de verde" + +-#: .tmp/lexmark.c:340 .tmp/plustek.c:1032 .tmp/umax_pp.c:757 ++#: .tmp/lexmark.c:340 ++#: .tmp/plustek.c:1032 ++#: .tmp/umax_pp.c:757 + #, no-c-format + msgid "Blue gain" +-msgstr "Ganancia de azul" ++msgstr "Ganancia de Azul" + +-#: .tmp/lexmark.c:341 .tmp/umax_pp.c:758 ++#: .tmp/lexmark.c:341 ++#: .tmp/umax_pp.c:758 + #, no-c-format + msgid "Sets blue channel gain" +-msgstr "Establece la ganancia del canal azul" ++msgstr "Ajusta la ganancia del canal de azul" + + #: .tmp/matsushita.c:139 + #, no-c-format + msgid "Bayer Dither 16" +-msgstr "" ++msgstr "Trama Bayer 16" + + #: .tmp/matsushita.c:140 + #, no-c-format + msgid "Bayer Dither 64" +-msgstr "" ++msgstr "Trama Bayer 64" + + #: .tmp/matsushita.c:141 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Halftone Dot 32" +-msgstr "Mediotono 32" ++msgstr "Medio tono punto 32" + + #: .tmp/matsushita.c:142 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Halftone Dot 64" +-msgstr "Mediotono 64" ++msgstr "Medio tono punto 64" + + #: .tmp/matsushita.c:143 + #, no-c-format + msgid "Error Diffusion" +-msgstr "Error de difusión" ++msgstr "Difusión de error" + + #: .tmp/matsushita.c:160 + #, no-c-format +@@ -2095,29 +2344,33 @@ + #: .tmp/matsushita.c:176 + #, no-c-format + msgid "From white stick" +-msgstr "" ++msgstr "De palo blanco" + + #: .tmp/matsushita.c:177 + #, no-c-format + msgid "From paper" +-msgstr "Desde el papel" ++msgstr "Del papel" + + #: .tmp/matsushita.c:212 + #, no-c-format + msgid "Smooth" +-msgstr "Suavizado" ++msgstr "Suave" + +-#: .tmp/matsushita.c:214 .tmp/matsushita.c:229 ++#: .tmp/matsushita.c:214 ++#: .tmp/matsushita.c:229 + #, no-c-format + msgid "Low" + msgstr "Bajo" + +-#: .tmp/matsushita.c:215 .tmp/matsushita.c:230 .tmp/matsushita.c:1296 ++#: .tmp/matsushita.c:215 ++#: .tmp/matsushita.c:230 ++#: .tmp/matsushita.c:1296 + #, no-c-format + msgid "Medium" +-msgstr "Medio" ++msgstr "Soporte" + +-#: .tmp/matsushita.c:216 .tmp/matsushita.c:231 ++#: .tmp/matsushita.c:216 ++#: .tmp/matsushita.c:231 + #, no-c-format + msgid "High" + msgstr "Alto" +@@ -2137,20 +2390,21 @@ + msgid "All pages" + msgstr "Todas las páginas" + +-#: .tmp/matsushita.c:1034 .tmp/plustek.c:1332 ++#: .tmp/matsushita.c:1034 ++#: .tmp/plustek.c:1332 + #, no-c-format + msgid "sheetfed scanner" +-msgstr "scanner con cargador automático" ++msgstr "escáner con cargador automático" + + #: .tmp/matsushita.c:1126 + #, no-c-format + msgid "Feeder mode" +-msgstr "Modo de carga" ++msgstr "Modo de alimentación" + + #: .tmp/matsushita.c:1127 + #, no-c-format + msgid "Sets the feeding mode" +-msgstr "Selecciona el modo de carga" ++msgstr "Ajusta el modo de alimentación" + + #: .tmp/matsushita.c:1224 + #, no-c-format +@@ -2159,12 +2413,8 @@ + + #: .tmp/matsushita.c:1227 + #, no-c-format +-msgid "" +-"Automatically sets brightness, contrast, white level, gamma, noise " +-"reduction and image emphasis" +-msgstr "" +-"Automáticamente establece el brillo, contraste, nivel blanco, gamma " +-"reducción de ruido y la intensidad de la imagen" ++msgid "Automatically sets brightness, contrast, white level, gamma, noise reduction and image emphasis" ++msgstr "Ajusta automáticamente el brillo, contraste, niveles de blanco, gamma y reducción de intensidad del ruido de la imagen" + + #: .tmp/matsushita.c:1275 + #, no-c-format +@@ -2174,19 +2424,20 @@ + #: .tmp/matsushita.c:1277 + #, no-c-format + msgid "Reduce the isolated dot noise" +-msgstr "Reduce el ruido del punto aislado" ++msgstr "Reduce los puntos aislados de ruido" + + #: .tmp/matsushita.c:1288 + #, no-c-format + msgid "Image emphasis" +-msgstr "Intensidad de imagen" ++msgstr "Resalte de imagen" + + #: .tmp/matsushita.c:1289 + #, no-c-format + msgid "Sets the image emphasis" +-msgstr "Establece la intensidad de la imagen" ++msgstr "Ajusta el resalte de la imagen" + +-#: .tmp/matsushita.c:1300 .tmp/matsushita.c:1301 ++#: .tmp/matsushita.c:1300 ++#: .tmp/matsushita.c:1301 + #: .tmp/pixma_sane_options.c:107 + #, no-c-format + msgid "Gamma" +@@ -2195,19 +2446,20 @@ + #: .tmp/matsushita.h:210 + #, no-c-format + msgid "Grayscale 4 bits" +-msgstr "Grises 4 bits" ++msgstr "Escala de grises de 4 bits" + + #: .tmp/matsushita.h:211 + #, no-c-format + msgid "Grayscale 8 bits" +-msgstr "Grises 8 bits" ++msgstr "Escala de grises de 8 bits" + + #: .tmp/matsushita.h:220 + #, no-c-format + msgid "Paper size" + msgstr "Tamaño del papel" + +-#: .tmp/matsushita.h:221 .tmp/matsushita.h:228 ++#: .tmp/matsushita.h:221 ++#: .tmp/matsushita.h:228 + #, no-c-format + msgid "Automatic separation" + msgstr "Separación automática" +@@ -2215,17 +2467,17 @@ + #: .tmp/matsushita.h:224 + #, no-c-format + msgid "Enable Duplex (Dual-Sided) Scanning" +-msgstr "Activar escaneo Doble (Doble-Cara)" ++msgstr "Activa el escaneo por las dos caras" + + #: .tmp/matsushita.h:226 + #, no-c-format + msgid "Physical size of the paper in the ADF" +-msgstr "Tamaño del papel en el cargador" ++msgstr "Tamaño físico del papel en el alimentador" + + #: .tmp/microtek2.h:602 + #, no-c-format + msgid "Shadow, midtone, highlight, exposure time" +-msgstr "Sombra, mediotono, contraste, tiempo de exposición" ++msgstr "Sombras, medias tintas, resalte, tiempo de exposición" + + #: .tmp/microtek2.h:604 + #, no-c-format +@@ -2245,50 +2497,49 @@ + #: .tmp/microtek2.h:609 + #, no-c-format + msgid "If checked the scanner does not perform backtracking" +-msgstr "Si está seleccionado, el escaner no realiza retroceso" ++msgstr "Si se selecciona, el escáner no retrocede cuando pierde una línea" + + #: .tmp/microtek2.h:613 + #, no-c-format + msgid "Toggle lamp of flatbed" +-msgstr "Cambiar de lámpara" ++msgstr "Conmutar el estado de lámpara del plano" + + #: .tmp/microtek2.h:614 + #, no-c-format + msgid "Toggles the lamp of the flatbed" +-msgstr "Cambia la lámpara del escaner" ++msgstr "Conmuta el estado de lámpara del plano" + + #: .tmp/microtek2.h:617 + #, no-c-format + msgid "Calibration by backend" +-msgstr "Calibración por el backend" ++msgstr "Calibración por el motor" + + #: .tmp/microtek2.h:618 + #, no-c-format +-msgid "" +-"If checked the color calibration before a scan is done by the backend" +-msgstr "" +-"Si está activado, la calibración de color antes del escaneo la realiza " +-"el backend" ++msgid "If checked the color calibration before a scan is done by the backend" ++msgstr "Si se selecciona la calibración del color antes del escaneo la hace el motor" + + #: .tmp/microtek2.h:622 + #, no-c-format + msgid "Use the lightlid-35mm adapter" +-msgstr "Usar el adaptador de diapositivas" ++msgstr "Usar el adaptador de diapositivas de 35mm" + + #: .tmp/microtek2.h:623 + #, no-c-format + msgid "This option turns off the lamp of the flatbed during a scan" +-msgstr "Esta opción apaga la lámpara durante un escaneo" ++msgstr "Esta opción apaga la lámpara del plano durante el escaneo" + +-#: .tmp/microtek2.h:627 .tmp/snapscan-options.c:375 ++#: .tmp/microtek2.h:627 ++#: .tmp/snapscan-options.c:375 + #, no-c-format + msgid "Quality scan" + msgstr "Escaneo de calidad" + +-#: .tmp/microtek2.h:628 .tmp/snapscan-options.c:376 ++#: .tmp/microtek2.h:628 ++#: .tmp/snapscan-options.c:376 + #, no-c-format + msgid "Highest quality but lower speed" +-msgstr "Mayor calidad pero menor velocidad" ++msgstr "La mejor calidad, pero a velocidad lenta" + + #: .tmp/microtek2.h:631 + #, no-c-format +@@ -2298,81 +2549,77 @@ + #: .tmp/microtek2.h:632 + #, no-c-format + msgid "Highest speed but lower quality" +-msgstr "Mayor velocidad pero menor calidad" ++msgstr "Más rápido, pero de peor calidad" + + #: .tmp/microtek2.h:635 + #, no-c-format + msgid "Automatic adjustment of threshold" +-msgstr "Ajuste automático del umbral" ++msgstr "Ajuste automático de umbral" + + #: .tmp/microtek2.h:636 + #, no-c-format +-msgid "" +-"If checked the backend automatically tries to determine an optimal value " +-"for the threshold." +-msgstr "" +-"Si está seleccionado, el backend trata de determinar automáticamente el " +-"valor óptimo del umbral." ++msgid "If checked the backend automatically tries to determine an optimal value for the threshold." ++msgstr "Si se selecciona, el motor intenta determinar automáticamente un valor óptimo para el umbral." + + #: .tmp/microtek2.h:641 + #, no-c-format + msgid "Gamma correction" +-msgstr "Corrección de gamma" ++msgstr "Corrección gamma" + + #: .tmp/microtek2.h:642 + #, no-c-format + msgid "Selects the gamma correction mode." +-msgstr "Selecciona el modo de corrección gamma." ++msgstr "Selecciona el modo de corrección gamma" + + #: .tmp/microtek2.h:645 + #, no-c-format + msgid "Bind gamma" +-msgstr "Enlazar gamma" ++msgstr "Asociar gamma" + + #: .tmp/microtek2.h:646 + #, no-c-format + msgid "Use same gamma values for all colour channels." +-msgstr "Usar mismos valores para todos los canales de color." ++msgstr "Usar los mismos valores gamma para todos los canales de colores." + + #: .tmp/microtek2.h:650 + #, no-c-format + msgid "Scalar gamma" +-msgstr "Gamma" ++msgstr "Gamma escalar" + + #: .tmp/microtek2.h:651 + #, no-c-format + msgid "Selects a value for scalar gamma correction." +-msgstr "Selecciona un valor para la corrección de gamma." ++msgstr "Seleccionar un valor para la corrección gamma escalar." + + #: .tmp/microtek2.h:655 + #, no-c-format + msgid "Scalar gamma red" +-msgstr "Gamma rojo" ++msgstr "Gamma escalar rojo" + + #: .tmp/microtek2.h:656 + #, no-c-format + msgid "Selects a value for scalar gamma correction (red channel)" +-msgstr "Selecciona un valor para la corrección gamma (canal rojo)" ++msgstr "Seleccionar un valor para la corrección gamma escalar (canal de rojo)" + + #: .tmp/microtek2.h:660 + #, no-c-format + msgid "Scalar gamma green" +-msgstr "Gamma verde" ++msgstr "Gamma escalar verde" + + #: .tmp/microtek2.h:661 + #, no-c-format + msgid "Selects a value for scalar gamma correction (green channel)" +-msgstr "Selecciona un valor para la correción gamma (canal verde)" ++msgstr "Seleccionar un valor para la corrección gamma escalar (canal de verde)" + + #: .tmp/microtek2.h:665 + #, no-c-format + msgid "Scalar gamma blue" +-msgstr "Gamma azul" ++msgstr "Gamma escalar azul" + + #: .tmp/microtek2.h:666 + #, no-c-format + msgid "Selects a value for scalar gamma correction (blue channel)" +-msgstr "Selecciona un valor para la correción gamma (canal azul)" ++msgstr "Seleccionar un valor para la corrección gamma escalar (canal de azul)" + + #: .tmp/microtek2.h:670 + #, no-c-format +@@ -2381,55 +2628,48 @@ + + #: .tmp/microtek2.h:671 + #, no-c-format +-msgid "" +-"Selects the colour band, \"Master\" means that all colours are affected." +-msgstr "" +-"Selecciona la banda de color, \"Maestro\" significa que afecta a todos " +-"los canales." ++msgid "Selects the colour band, \"Master\" means that all colours are affected." ++msgstr "Selecciona la gama de color, «Master» significa que afecta a todos los colores." + + #: .tmp/microtek2.h:675 + #, no-c-format + msgid "Midtone" +-msgstr "Mediotono" ++msgstr "Medias tintas" + + #: .tmp/microtek2.h:676 + #, no-c-format + msgid "Selects which radiance level should be considered \"50 % gray\"." +-msgstr "" +-"Selecciona que nivel de radiancia debe ser considerado \"50% gris\"." ++msgstr "Selecciona que nivel de radiancia debe ser considerado «50% gris»." + + #: .tmp/microtek2.h:680 + #, no-c-format + msgid "Midtone for red" +-msgstr "Mediotono para rojo" ++msgstr "Medias tintas para rojo" + + #: .tmp/microtek2.h:681 + #, no-c-format + msgid "Selects which radiance level should be considered \"50 % red\"." +-msgstr "" +-"Selecciona que nivel de radiancia debe ser considerado \"50% rojo\"." ++msgstr "Selecciona que nivel de radiancia debe ser considerado «50% rojo»." + + #: .tmp/microtek2.h:685 + #, no-c-format + msgid "Midtone for green" +-msgstr "Mediotono para verde" ++msgstr "Medias tintas para verde" + + #: .tmp/microtek2.h:686 + #, no-c-format + msgid "Selects which radiance level should be considered \"50 % green\"." +-msgstr "" +-"Selecciona que nivel de radiancia debe ser considerado \"50% verde\"." ++msgstr "Selecciona que nivel de radiancia debe ser considerado «50% verde»." + + #: .tmp/microtek2.h:690 + #, no-c-format + msgid "Midtone for blue" +-msgstr "Mediotono para azul" ++msgstr "Medias tintas para azul" + + #: .tmp/microtek2.h:691 + #, no-c-format + msgid "Selects which radiance level should be considered \"50 % blue\"." +-msgstr "" +-"Selecciona que nivel de radiancia debe ser considerado \"50% azul\"." ++msgstr "Selecciona que nivel de radiancia debe ser considerado «50% azul»." + + #: .tmp/microtek2.h:695 + #, no-c-format +@@ -2439,43 +2679,37 @@ + #: .tmp/microtek2.h:696 + #, no-c-format + msgid "Balance factor for red. A value of 100% means no correction." +-msgstr "" +-"Factor de balance para rojo. Un valor de 100% significa que no hay " +-"corrección." ++msgstr "Factor de balance para rojo. Un valor de 100% significa sin corrección." + + #: .tmp/microtek2.h:700 + #, no-c-format + msgid "Green balance" +-msgstr "Balance de Verde" ++msgstr "Balance de verde" + + #: .tmp/microtek2.h:701 + #, no-c-format + msgid "Balance factor for green. A value of 100% means no correction." +-msgstr "" +-"Factor de balance para verde. Un valor de 100% significa que no hay " +-"corrección." ++msgstr "Factor de balance para verde. Un valor de 100% significa sin corrección." + + #: .tmp/microtek2.h:705 + #, no-c-format + msgid "Blue balance" +-msgstr "Balance de Azul" ++msgstr "Balance de azul" + + #: .tmp/microtek2.h:706 + #, no-c-format + msgid "Balance factor for blue. A value of 100% means no correction." +-msgstr "" +-"Factor de balance para azul. Un valor de 100% significa que no hay " +-"corrección." ++msgstr "Factor de balance para azul. Un valor de 100% significa sin corrección." + + #: .tmp/microtek2.h:710 + #, no-c-format + msgid "Firmware balance" +-msgstr "Balance del firmware" ++msgstr "Balance de firmware" + + #: .tmp/microtek2.h:711 + #, no-c-format + msgid "Sets the color balance values to the firmware provided values." +-msgstr "Establece los valores de balance de color tomados del firmware." ++msgstr "Ajusta el balance de color a los valores facilitados por el firmware." + + #: .tmp/mustek.c:145 + #, no-c-format +@@ -2500,7 +2734,7 @@ + #: .tmp/mustek.c:173 + #, no-c-format + msgid "8x8 coarse" +-msgstr "8x8 basto" ++msgstr "8x8 tosco" + + #: .tmp/mustek.c:173 + #, no-c-format +@@ -2525,7 +2759,7 @@ + #: .tmp/mustek.c:175 + #, no-c-format + msgid "5x5 coarse" +-msgstr "5x5 basto" ++msgstr "5x5 tosco" + + #: .tmp/mustek.c:175 + #, no-c-format +@@ -2535,7 +2769,7 @@ + #: .tmp/mustek.c:175 + #, no-c-format + msgid "4x4 coarse" +-msgstr "4x4 basto" ++msgstr "4x4 tosco" + + #: .tmp/mustek.c:176 + #, no-c-format +@@ -2560,51 +2794,47 @@ + #: .tmp/mustek.c:177 + #, no-c-format + msgid "8x8 custom" +-msgstr "8x8 definido" ++msgstr "8x8 personalizado" + + #: .tmp/mustek.c:178 + #, no-c-format + msgid "6x6 custom" +-msgstr "6x6 definido" ++msgstr "6x6 personalizado" + + #: .tmp/mustek.c:179 + #, no-c-format + msgid "5x5 custom" +-msgstr "5x5 definido" ++msgstr "5x5 personalizado" + + #: .tmp/mustek.c:179 + #, no-c-format + msgid "4x4 custom" +-msgstr "4x4 definido" ++msgstr "4x4 personalizado" + + #: .tmp/mustek.c:180 + #, no-c-format + msgid "3x3 custom" +-msgstr "3x3 definido" ++msgstr "3x3 personalizado" + + #: .tmp/mustek.c:181 + #, no-c-format + msgid "2x2 custom" +-msgstr "2x2 definido" ++msgstr "2x2 personalizado" + + #: .tmp/mustek.c:4233 + #, no-c-format + msgid "Fast gray mode" +-msgstr "Modo de grises rápido" ++msgstr "Modo gris rápido" + + #: .tmp/mustek.c:4234 + #, no-c-format + msgid "Scan in fast gray mode (lower quality)." +-msgstr "Escanea en modo de grises rápido (baja calidad)." ++msgstr "Escanear en modo gris rápido (menor calidad)." + + #: .tmp/mustek.c:4331 + #, no-c-format +-msgid "" +-"Request that all previews are done in the fastest (low-quality) mode. " +-"This may be a non-color mode or a low resolution mode." +-msgstr "" +-"Pide que todos los previsualizados se hagan en el modo más rápido (baja-" +-"calidad). Esto puede ser un modo sin color o un modo de resolución baja." ++msgid "Request that all previews are done in the fastest (low-quality) mode. This may be a non-color mode or a low resolution mode." ++msgstr "Precisa que todas las vistas previas se hagan del modo más rápido (baja calidad). Este puede ser un modo sin color o un modo de baja resolución." + + #: .tmp/mustek.c:4339 + #, no-c-format +@@ -2614,12 +2844,12 @@ + #: .tmp/mustek.c:4340 + #, no-c-format + msgid "Set the time (in minutes) after which the lamp is shut off." +-msgstr "Establece el tiempo (en minutos) de apagado de la lámpara." ++msgstr "Ajustar el tiempo (en minutos) tras el que se apagará la lámpara." + + #: .tmp/mustek.c:4351 + #, no-c-format + msgid "Turn lamp off" +-msgstr "Apagar lámpara" ++msgstr "Apagar la lámpara" + + #: .tmp/mustek.c:4352 + #, no-c-format +@@ -2629,87 +2859,88 @@ + #: .tmp/mustek.c:4429 + #, no-c-format + msgid "Red brightness" +-msgstr "Brillo de Rojo" ++msgstr "Brillo de rojo" + + #: .tmp/mustek.c:4430 + #, no-c-format + msgid "Controls the brightness of the red channel of the acquired image." +-msgstr "Controla el brillo del canal rojo de la imagen adquirida." ++msgstr "Controla el brillo del canal de rojo de la imagen obtenida." + + #: .tmp/mustek.c:4442 + #, no-c-format + msgid "Green brightness" +-msgstr "Brillo de Verde" ++msgstr "Brillo de verde" + + #: .tmp/mustek.c:4443 + #, no-c-format + msgid "Controls the brightness of the green channel of the acquired image." +-msgstr "Controla el brillo del canal verde de la imagen adquirida." ++msgstr "Controla el brillo del canal de verde de la imagen obtenida." + + #: .tmp/mustek.c:4455 + #, no-c-format + msgid "Blue brightness" +-msgstr "Brillo de Azul" ++msgstr "Brillo de azul" + + #: .tmp/mustek.c:4456 + #, no-c-format + msgid "Controls the brightness of the blue channel of the acquired image." +-msgstr "Controla el brillo del canal azul de la imagen adquirida." ++msgstr "Controla el brillo del canal de azul de la imagen obtenida." + + #: .tmp/mustek.c:4481 + #, no-c-format + msgid "Contrast red channel" +-msgstr "Contraste de Rojo" ++msgstr "Contraste de canal de rojo" + + #: .tmp/mustek.c:4482 + #, no-c-format + msgid "Controls the contrast of the red channel of the acquired image." +-msgstr "Controla el contraste del canal rojo de la imagen adquirida." ++msgstr "Controla el contraste del canal de rojo de la imagen obtenida." + + #: .tmp/mustek.c:4494 + #, no-c-format + msgid "Contrast green channel" +-msgstr "Contraste de Verde" ++msgstr "Contraste de canal de verde" + + #: .tmp/mustek.c:4495 + #, no-c-format + msgid "Controls the contrast of the green channel of the acquired image." +-msgstr "Controla el contraste del canal verde de la imagen adquirida." ++msgstr "Controla el contraste del canal de verde de la imagen obtenida." + + #: .tmp/mustek.c:4507 + #, no-c-format + msgid "Contrast blue channel" +-msgstr "Contraste de Azul" ++msgstr "Contraste de canal de azul" + + #: .tmp/mustek.c:4508 + #, no-c-format + msgid "Controls the contrast of the blue channel of the acquired image." +-msgstr "Controla el contraste del canal azul de la imagen adquirida." ++msgstr "Controla el contraste del canal de azul de la imagen obtenida." + + #: .tmp/mustek_usb2.c:105 + #, no-c-format + msgid "Color48" +-msgstr "Color48" ++msgstr "Color 48" + +-#: .tmp/mustek_usb2.c:106 .tmp/mustek_usb2.c:114 ++#: .tmp/mustek_usb2.c:106 ++#: .tmp/mustek_usb2.c:114 + #, no-c-format + msgid "Color24" +-msgstr "Color24" ++msgstr "Color 24" + + #: .tmp/mustek_usb2.c:107 + #, no-c-format + msgid "Gray16" +-msgstr "Gris16" ++msgstr "Gris 16" + + #: .tmp/mustek_usb2.c:108 + #, no-c-format + msgid "Gray8" +-msgstr "Gris8" ++msgstr "Gris 8" + + #: .tmp/mustek_usb2.c:119 + #, no-c-format + msgid "Reflective" +-msgstr "Reflectivo" ++msgstr "Reflectantes" + + #: .tmp/mustek_usb2.c:120 + #, no-c-format +@@ -2718,28 +2949,18 @@ + + #: .tmp/mustek_usb2.c:421 + #, no-c-format +-msgid "" +-"Warm-up until the lamp's brightness is constant instead of insisting on " +-"40 seconds warm-up time." +-msgstr "" +-"Calienta la lámpara hasta que el brillo es constante, en vez de forzar " +-"un tiempo de calentamiento de 40 segundos." ++msgid "Warm-up until the lamp's brightness is constant instead of insisting on 40 seconds warm-up time." ++msgstr "Calentar hasta que el brillo de la lámpara sea constante en vez de esperar por los 40 segundos de calentamiento." + + #: .tmp/pixma_sane_options.c:91 + #, no-c-format + msgid "Button-controlled scan" +-msgstr "Escaneo controlado por botón" ++msgstr "Botón de control de escaneo" + + #: .tmp/pixma_sane_options.c:94 + #, no-c-format +-msgid "" +-"When enabled, scan process will not start immediately. To proceed, press " +-"\"SCAN\" button (for MP150) or \"COLOR\" button (for other models). To " +-"cancel, press \"GRAY\" button." +-msgstr "" +-"Activado, el proceso de escaneado no empieza inmediatamente. Para " +-"proceder, pulse el botón \"SCAN\" (en MP150) o el botón \"COLOR\" (en " +-"otros modelos). Para cancelar, pulse el botón \"GRAY\"." ++msgid "When enabled, scan process will not start immediately. To proceed, press \"SCAN\" button (for MP150) or \"COLOR\" button (for other models). To cancel, press \"GRAY\" button." ++msgstr "Habilitado, el proceso de escaneo no comenzará inmediatamente. Para proceder, haga clic en el botón \"SCAN\" (para MP150) o \"COLOR\" (para otros modelos). Para cancelar, haga clic en el botón \"GRAY\"." + + #: .tmp/pixma_sane_options.c:216 + #, no-c-format +@@ -2756,7 +2977,9 @@ + msgid "Button 2" + msgstr "Botón 2" + +-#: .tmp/plustek.c:234 .tmp/plustek_pp.c:201 .tmp/u12.c:156 ++#: .tmp/plustek.c:234 ++#: .tmp/plustek_pp.c:201 ++#: .tmp/u12.c:156 + #, no-c-format + msgid "Transparency" + msgstr "Transparencia" +@@ -2764,52 +2987,52 @@ + #: .tmp/plustek.c:912 + #, no-c-format + msgid "Device-Settings" +-msgstr "Opciones del dispositivo" ++msgstr "Ajustes del dispositivo" + + #: .tmp/plustek.c:919 + #, no-c-format + msgid "Lampswitch" +-msgstr "Cambio de lámpara" ++msgstr "Interruptor de lámpara" + + #: .tmp/plustek.c:920 + #, no-c-format + msgid "Manually switching the lamp(s)." +-msgstr "Cambio manual de lampara." ++msgstr "Cambiar la(s) lámpara(s) manualmente." + + #: .tmp/plustek.c:925 + #, no-c-format + msgid "Lamp off during dark calibration" +-msgstr "Apagar lámpara durante calibración dark" ++msgstr "Apagar la lámpara durante la calibración de oscuridad" + + #: .tmp/plustek.c:926 + #, no-c-format + msgid "Always switches lamp off when doing dark calibration." +-msgstr "Apaga siempre la lámpara cuando realiza la calibración dark." ++msgstr "Apagar siempre la lámpara cuando se calibra la oscuridad." + + #: .tmp/plustek.c:934 + #, no-c-format + msgid "Calibration data cache" +-msgstr "Cache para la calibración" ++msgstr "Caché de datos de calibración" + + #: .tmp/plustek.c:935 + #, no-c-format + msgid "Enables or disables calibration data cache." +-msgstr "Activa o desactiva el cache para la calibración." ++msgstr "Activa o desactiva la caché de datos de calibración" + + #: .tmp/plustek.c:941 + #, no-c-format + msgid "Performs calibration" +-msgstr "Realiza la calibración" ++msgstr "Calibración de precisión" + + #: .tmp/plustek.c:958 + #, no-c-format + msgid "Speedup sensor" +-msgstr "Acelerar sensor" ++msgstr "Acelerar el sensor" + + #: .tmp/plustek.c:959 + #, no-c-format + msgid "Enables or disables speeding up sensor movement." +-msgstr "Activa o desactiva la aceleración del movimiento del sensor." ++msgstr "Activa o desactiva la aceleración de movimiento del sensor." + + #: .tmp/plustek.c:973 + #, no-c-format +@@ -2819,117 +3042,120 @@ + #: .tmp/plustek.c:974 + #, no-c-format + msgid "Warmup-time in seconds." +-msgstr "Tiempo de calentamiento de la lámpara en segundos." ++msgstr "Tiempo de calentamiento en segundos." + + #: .tmp/plustek.c:986 + #, no-c-format + msgid "Lampoff-time" +-msgstr "Tiempo de apagado" ++msgstr "Tiempo de apagado de lámpara" + + #: .tmp/plustek.c:987 + #, no-c-format + msgid "Lampoff-time in seconds." +-msgstr "Tiempo de apagado de la lámpara en segundos." ++msgstr "Tiempo de apagado de lámpara en segundos." + + #: .tmp/plustek.c:994 + #, no-c-format + msgid "Analog frontend" +-msgstr "Frontend analógico" ++msgstr "Interfaz analógica (AFE)" + + #: .tmp/plustek.c:1001 + #, no-c-format + msgid "Red gain value of the AFE" +-msgstr "Valor de ganancia rojo de AFE" ++msgstr "Valor de ganancia de rojo en el AFE" + +-#: .tmp/plustek.c:1008 .tmp/umax_pp.c:790 ++#: .tmp/plustek.c:1008 ++#: .tmp/umax_pp.c:790 + #, no-c-format + msgid "Red offset" +-msgstr "Offset rojo" ++msgstr "Desviación rojo" + + #: .tmp/plustek.c:1009 + #, no-c-format + msgid "Red offset value of the AFE" +-msgstr "Valor de offset rojo de AFE (Analog FrontEnd)" ++msgstr "Valor de la desviación de rojo en el AFE" + + #: .tmp/plustek.c:1017 + #, no-c-format + msgid "Green gain value of the AFE" +-msgstr "Valor de ganancia verde de AFE (Analog FrontEnd)" ++msgstr "Valor de ganancia de verde en el AFE" + +-#: .tmp/plustek.c:1024 .tmp/umax_pp.c:802 ++#: .tmp/plustek.c:1024 ++#: .tmp/umax_pp.c:802 + #, no-c-format + msgid "Green offset" +-msgstr "Offset verde" ++msgstr "Desviación verde" + + #: .tmp/plustek.c:1025 + #, no-c-format + msgid "Green offset value of the AFE" +-msgstr "Valor del offset verde de AFE (Analog FronEnd)" ++msgstr "Valor de la desviación de verde en el AFE" + + #: .tmp/plustek.c:1033 + #, no-c-format + msgid "Blue gain value of the AFE" +-msgstr "Valor de ganancia azul de AFE (Analog FrontEnd)" ++msgstr "Valor de ganancia de azul en el AFE" + +-#: .tmp/plustek.c:1040 .tmp/umax_pp.c:814 ++#: .tmp/plustek.c:1040 ++#: .tmp/umax_pp.c:814 + #, no-c-format + msgid "Blue offset" +-msgstr "Offset azul" ++msgstr "Desviación azul" + + #: .tmp/plustek.c:1041 + #, no-c-format + msgid "Blue offset value of the AFE" +-msgstr "Valor de offset azul de AFE (Analog FrontEnd)" ++msgstr "Valor de la desviación de azul en el AFE" + + #: .tmp/plustek.c:1048 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Red lamp off" +-msgstr "Establecer densidad de lámpara" ++msgstr "Apagar lámpara roja" + + #: .tmp/plustek.c:1049 + #, no-c-format + msgid "Defines red lamp off parameter" +-msgstr "" ++msgstr "Define los parámetros de apagado de lámpara roja" + + #: .tmp/plustek.c:1056 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Green lamp off" +-msgstr "Establecer densidad de lámpara" ++msgstr "Apagar lámpara verde" + + #: .tmp/plustek.c:1057 + #, no-c-format + msgid "Defines green lamp off parameter" +-msgstr "" ++msgstr "Define los parámetros de apagado de lámpara verde" + + #: .tmp/plustek.c:1064 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Blue lamp off" +-msgstr "Establecer densidad de lámpara" ++msgstr "Apagar lámpara azul" + + #: .tmp/plustek.c:1065 + #, no-c-format + msgid "Defines blue lamp off parameter" +-msgstr "" ++msgstr "Define los parámetros de apagado de lámpara azul" + + #: .tmp/plustek.c:1095 + #, no-c-format + msgid "This option reflects the status of the scanner buttons." +-msgstr "Esta opción refleja el estado de los botones del escaner." ++msgstr "Esta opción refleja el estado de los botones del escáner" + + #: .tmp/plustek_pp.c:194 + #, no-c-format + msgid "Color36" +-msgstr "Color36" ++msgstr "Color 36" + + #: .tmp/plustek_pp.c:208 + #, no-c-format + msgid "Dithermap 1" +-msgstr "Mapa de entramado 1" ++msgstr "Mapa de trama 1" + + #: .tmp/plustek_pp.c:209 + #, no-c-format + msgid "Dithermap 2" +-msgstr "Mapa de entramado 2" ++msgstr "Mapa de trama 2" + + #: .tmp/plustek_pp.c:210 + #, no-c-format +@@ -2939,70 +3165,57 @@ + #: .tmp/pnm.c:168 + #, no-c-format + msgid "Source Selection" +-msgstr "Selección de la fuente" ++msgstr "Selección de origen" + + #: .tmp/pnm.c:205 + #, no-c-format + msgid "Image Enhancement" +-msgstr "Mejora de imagen" ++msgstr "Mejora de la Imagen" + + #: .tmp/pnm.c:241 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Grayify" +-msgstr "Gris" ++msgstr "Agrisar" + + #: .tmp/pnm.c:242 + #, no-c-format + msgid "Load the image as grayscale." +-msgstr "Carga la imagen como gris." ++msgstr "Cargar la imagen como escala de grises." + + #: .tmp/pnm.c:253 + #, no-c-format + msgid "Three-Pass Simulation" +-msgstr "Simulación de Tres-pasadas" ++msgstr "Simulación de tres pasadas" + + #: .tmp/pnm.c:255 + #, no-c-format +-msgid "" +-"Simulate a three-pass scanner by returning 3 separate frames. For " +-"kicks, it returns green, then blue, then red." +-msgstr "" +-"Simula un escaner de tres-pasadas devolviendo 3 frames separados. Verde, " +-"luego azul y por último el rojo." ++msgid "Simulate a three-pass scanner by returning 3 separate frames. For kicks, it returns green, then blue, then red." ++msgstr "Simula un escáner de tres pasadas devolviendo 3 muestras separadas. Por diversión, devuelve verde, después azul y finalmente rojo." + + #: .tmp/pnm.c:267 + #, no-c-format + msgid "Hand-Scanner Simulation" +-msgstr "Simulación de Escaner de mano" ++msgstr "Simulación de escáner manual" + + #: .tmp/pnm.c:268 + #, no-c-format +-msgid "" +-"Simulate a hand-scanner. Hand-scanners often do not know the image " +-"height a priori. Instead, they return a height of -1. Setting this " +-"option allows to test whether a frontend can handle this correctly." +-msgstr "" +-"Simula un escaner d emano. Los escaners de mano, amenudo no conocen el " +-"la altura de la imagen. En cambio, devuelven una altura de -1. Esta " +-"opción permite probar si un frontend maneja esto correctamente." ++msgid "Simulate a hand-scanner. Hand-scanners often do not know the image height a priori. Instead, they return a height of -1. Setting this option allows to test whether a frontend can handle this correctly." ++msgstr "Simula un escáner de mano. Los escáneres de mano a menudo no conocen a priori la distancia a la imagen. En su lugar utiliza una altura de retorno -1. Ajustando esta opción permite comprobar si una interfaz puede manejar esto correctamente." + + #: .tmp/pnm.c:283 + #, no-c-format +-msgid "" +-"Set default values for enhancement controls (brightness & contrast)." +-msgstr "" +-"Establece los valores por defecto para los controles de mejora (brillo y " +-"contraste)." ++msgid "Set default values for enhancement controls (brightness & contrast)." ++msgstr "Ajustar los valores predeterminados para los controles de mejora (brillo y contraste)" + + #: .tmp/pnm.c:295 + #, no-c-format + msgid "Read only test-option" +-msgstr "Opción de solo lectura" ++msgstr "Opción de prueba de sólo lectura" + + #: .tmp/pnm.c:296 + #, no-c-format + msgid "Let's see whether frontends can treat this right" +-msgstr "Veamos si los frontends tratan esto correctamente" ++msgstr "Veamos si la interfaz puede tratar esto correctamente" + + #: .tmp/pnm.c:307 + #, no-c-format +@@ -3022,135 +3235,114 @@ + #: .tmp/pnm.c:392 + #, no-c-format + msgid "Do not force the backend to return a status code." +-msgstr "No forzar al backend a retornar el código de estado." ++msgstr "No forzar al motor a devolver un código de estado." + + #: .tmp/pnm.c:403 + #, no-c-format + msgid "Return SANE_STATUS_EOF" +-msgstr "Retornar SANE_STATUS_EOF" ++msgstr "Devuelve SANE_STATUS_EOF" + + #: .tmp/pnm.c:404 + #, no-c-format +-msgid "" +-"Force the backend to return the status code SANE_STATUS_EOF after " +-"sane_read() has been called." +-msgstr "" +-"Fuerza al backend a retornar el código de estado SANE_STATUS_EOF despues " +-"de que sane_read() ha sido llamado." ++msgid "Force the backend to return the status code SANE_STATUS_EOF after sane_read() has been called." ++msgstr "Forzar al motor a devolver el código de estado de SANE_STATUS_EOF después de haber sido llamado sane_read()." + + #: .tmp/pnm.c:416 + #, no-c-format + msgid "Return SANE_STATUS_JAMMED" +-msgstr "Retorna SANE_STATUS_JAMMED" ++msgstr "Devuelve SANE_STATUS_JAMMED" + + #: .tmp/pnm.c:418 + #, no-c-format +-msgid "" +-"Force the backend to return the status code SANE_STATUS_JAMMED after " +-"sane_read() has been called." +-msgstr "" +-"Fuerza al backend a retornar el código de estado SANE_STATUS_JAMMED " +-"después de que sane_read() ha sido llamado." ++msgid "Force the backend to return the status code SANE_STATUS_JAMMED after sane_read() has been called." ++msgstr "Forzar al motor a devolver el código de estado de SANE_STATUS_JAMMED después de haber sido llamado sane_read()." + + #: .tmp/pnm.c:430 + #, no-c-format + msgid "Return SANE_STATUS_NO_DOCS" +-msgstr "Retornar SANE_STATUS_NO_DOCS" ++msgstr "Devuelve SANE_STATUS_NO_DOCS" + + #: .tmp/pnm.c:431 + #, no-c-format +-msgid "" +-"Force the backend to return the status code SANE_STATUS_NO_DOCS after " +-"sane_read() has been called." +-msgstr "" +-"Fuerza al backend a retornar el código de estado SANE_STATUS_NO_DOCS " +-"después de que sane_read() ha sido llamado." ++msgid "Force the backend to return the status code SANE_STATUS_NO_DOCS after sane_read() has been called." ++msgstr "Forzar al motor a devolver el código de estado de SANE_STATUS_NO_DOCS después de haber sido llamado sane_read()." + + #: .tmp/pnm.c:443 + #, no-c-format + msgid "Return SANE_STATUS_COVER_OPEN" +-msgstr "Retornar SANE_STATUS_COVER_OPEN" ++msgstr "Devuelve SANE_STATUS_COVER_OPEN" + + #: .tmp/pnm.c:444 + #, no-c-format +-msgid "" +-"Force the backend to return the status code SANE_STATUS_COVER_OPEN after " +-"sane_read() has been called." +-msgstr "" +-"Forzar al backend a retornar el código de estado SANE_STATUS_COVER_OPEN " +-"después de que sane_read() ha sido llamado." ++msgid "Force the backend to return the status code SANE_STATUS_COVER_OPEN after sane_read() has been called." ++msgstr "Forzar al motor a devolver el código de estado de SANE_STATUS_COVER_OPEN después de haber sido llamado sane_read()." + + #: .tmp/pnm.c:456 + #, no-c-format + msgid "Return SANE_STATUS_IO_ERROR" +-msgstr "Retornar SANE_STATUS_IO_ERROR" ++msgstr "Devuelve SANE_STATUS_IO_ERROR" + + #: .tmp/pnm.c:457 + #, no-c-format +-msgid "" +-"Force the backend to return the status code SANE_STATUS_IO_ERROR after " +-"sane_read() has been called." +-msgstr "" +-"Forzar al backend a retornar el código de estado SANE_STATUS_IO_ERROR " +-"después de que sane_read() ha sido llamado." ++msgid "Force the backend to return the status code SANE_STATUS_IO_ERROR after sane_read() has been called." ++msgstr "Forzar al motor a devolver el código de estado de SANE_STATUS_IO_ERROR después de haber sido llamado sane_read()." + + #: .tmp/pnm.c:469 + #, no-c-format + msgid "Return SANE_STATUS_NO_MEM" +-msgstr "Retornar SANE_STATUS_NO_MEM" ++msgstr "Devuelve SANE_STATUS_NO_MEM" + + #: .tmp/pnm.c:471 + #, no-c-format +-msgid "" +-"Force the backend to return the status code SANE_STATUS_NO_MEM after " +-"sane_read() has been called." +-msgstr "" +-"Forzar al backend a retornar el código de estado SANE_STATUS_NO_MEM " +-"después de que sane_read() ha sido llamado." ++msgid "Force the backend to return the status code SANE_STATUS_NO_MEM after sane_read() has been called." ++msgstr "Forzar al motor a devolver el código de estado de SANE_STATUS_NO_MEM después de haber sido llamado sane_read()." + + #: .tmp/pnm.c:483 + #, no-c-format + msgid "Return SANE_STATUS_ACCESS_DENIED" +-msgstr "Retorna SANE_STATUS_ACCESS_DENIED" ++msgstr "Devuelve SANE_STATUS_ACCESS_DENIED" + + #: .tmp/pnm.c:484 + #, no-c-format +-msgid "" +-"Force the backend to return the status code SANE_STATUS_ACCESS_DENIED " +-"after sane_read() has been called." +-msgstr "" +-"Forzar al backend a retornar el código de estado " +-"SANE_STATUS_ACCESS_DENIED después de que sane_read() ha sido llamado." ++msgid "Force the backend to return the status code SANE_STATUS_ACCESS_DENIED after sane_read() has been called." ++msgstr "Forzar al motor a devolver el código de estado de SANE_STATUS_ACCESS_DENIED después de haber sido llamado sane_read()." + + #: .tmp/rts8891.c:2744 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "This option reflects the status of a scanner button." +-msgstr "Esta opción refleja el estado de los botones del escaner." ++msgstr "Esta opción refleja el estado de los botones del escáner" + +-#: .tmp/rts8891.c:2775 .tmp/umax.c:5796 .tmp/umax_pp.c:637 ++#: .tmp/rts8891.c:2775 ++#: .tmp/umax.c:5796 ++#: .tmp/umax_pp.c:637 + #, no-c-format + msgid "Lamp on" + msgstr "Encender lámpara" + +-#: .tmp/rts8891.c:2776 .tmp/umax.c:5797 ++#: .tmp/rts8891.c:2776 ++#: .tmp/umax.c:5797 + #, no-c-format + msgid "Turn on scanner lamp" +-msgstr "Enciende la lámpara del escaner" ++msgstr "Enciende la lámpara del escáner" + +-#: .tmp/rts8891.c:2786 .tmp/umax.c:5813 .tmp/umax1220u.c:248 ++#: .tmp/rts8891.c:2786 ++#: .tmp/umax.c:5813 ++#: .tmp/umax1220u.c:248 + #, no-c-format + msgid "Lamp off" + msgstr "Apagar lámpara" + +-#: .tmp/rts8891.c:2787 .tmp/umax.c:5814 .tmp/umax1220u.c:249 ++#: .tmp/rts8891.c:2787 ++#: .tmp/umax.c:5814 ++#: .tmp/umax1220u.c:249 + #, no-c-format + msgid "Turn off scanner lamp" +-msgstr "Apagar la lampara del escaner" ++msgstr "Apaga la lámpara del escáner" + + #: .tmp/sane_strstatus.c:59 + #, no-c-format + msgid "Success" +-msgstr "Éxito" ++msgstr "Importación con éxito" + + #: .tmp/sane_strstatus.c:62 + #, no-c-format +@@ -3160,7 +3352,7 @@ + #: .tmp/sane_strstatus.c:65 + #, no-c-format + msgid "Operation was cancelled" +-msgstr "Operación cancelada" ++msgstr "La operación va a ser cancelada" + + #: .tmp/sane_strstatus.c:68 + #, no-c-format +@@ -3170,12 +3362,12 @@ + #: .tmp/sane_strstatus.c:71 + #, no-c-format + msgid "Invalid argument" +-msgstr "Argumento no válido" ++msgstr "Argumento incorrecto" + + #: .tmp/sane_strstatus.c:74 + #, no-c-format + msgid "End of file reached" +-msgstr "Alcanzado final de archivo" ++msgstr "Fin de archivo alcanzado" + + #: .tmp/sane_strstatus.c:77 + #, no-c-format +@@ -3185,7 +3377,7 @@ + #: .tmp/sane_strstatus.c:80 + #, no-c-format + msgid "Document feeder out of documents" +-msgstr "Alimentador de documentos sin documentos" ++msgstr "El alimentador de documentos está vacio" + + #: .tmp/sane_strstatus.c:83 + #, no-c-format +@@ -3195,27 +3387,27 @@ + #: .tmp/sane_strstatus.c:86 + #, no-c-format + msgid "Error during device I/O" +-msgstr "Error de E/S" ++msgstr "Error en dispositivo de E/S" + + #: .tmp/sane_strstatus.c:89 + #, no-c-format + msgid "Out of memory" +-msgstr "Fuera de memoria" ++msgstr "No queda memoria" + + #: .tmp/sane_strstatus.c:92 + #, no-c-format + msgid "Access to resource has been denied" +-msgstr "El acceso al recurso ha sido denegado" ++msgstr "Se ha denegado el acceso al recurso" + + #: .tmp/sane_strstatus.c:96 + #, no-c-format + msgid "Lamp not ready, please retry" +-msgstr "La lámpara no está lista, por favor reinténtelo" ++msgstr "La lámpara no está preparada, intentelo de nuevo" + + #: .tmp/sane_strstatus.c:101 + #, no-c-format + msgid "Scanner mechanism locked for transport" +-msgstr "Mecanismo del escáner bloqueado para transporte" ++msgstr "El escáner está bloqueado para transporte" + + #: .tmp/saneopts.h:154 + #, no-c-format +@@ -3225,12 +3417,12 @@ + #: .tmp/saneopts.h:156 + #, no-c-format + msgid "Standard" +-msgstr "" ++msgstr "Estándar" + + #: .tmp/saneopts.h:160 + #, no-c-format + msgid "Sensors" +-msgstr "" ++msgstr "Sensores" + + #: .tmp/saneopts.h:162 + #, no-c-format +@@ -3245,67 +3437,67 @@ + #: .tmp/saneopts.h:164 + #, no-c-format + msgid "Bit depth" +-msgstr "Profundidad de color" ++msgstr "Bit de profundidad" + + #: .tmp/saneopts.h:166 + #, no-c-format + msgid "Scan speed" +-msgstr "Velocidad de Escaneo" ++msgstr "Velocidad de escaneo" + + #: .tmp/saneopts.h:167 + #, no-c-format + msgid "Scan source" +-msgstr "Fuente de Escaneo" ++msgstr "Origen de escaneo" + + #: .tmp/saneopts.h:168 + #, no-c-format + msgid "Force backtracking" +-msgstr "Forzar backtracking" ++msgstr "Forzar retroceso" + + #: .tmp/saneopts.h:169 + #, no-c-format + msgid "Top-left x" +-msgstr "Arriba-izquierda x" ++msgstr "Arriba-izquierda X" + + #: .tmp/saneopts.h:170 + #, no-c-format + msgid "Top-left y" +-msgstr "Arriba-izquierda y" ++msgstr "Arriba-izquierda Y" + + #: .tmp/saneopts.h:171 + #, no-c-format + msgid "Bottom-right x" +-msgstr "Abajo-derecha x" ++msgstr "Abajo-derecha X" + + #: .tmp/saneopts.h:172 + #, no-c-format + msgid "Bottom-right y" +-msgstr "Abajo-derecha y" ++msgstr "Abajo-derecha Y" + + #: .tmp/saneopts.h:174 + #, no-c-format + msgid "X-resolution" +-msgstr "Resolución-X" ++msgstr "Resolución X" + + #: .tmp/saneopts.h:175 + #, no-c-format + msgid "Y-resolution" +-msgstr "Resolución-Y" ++msgstr "Resolución Y" + + #: .tmp/saneopts.h:176 + #, no-c-format + msgid "Page width" +-msgstr "" ++msgstr "Ancho de página" + + #: .tmp/saneopts.h:177 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Page height" +-msgstr "Resaltado" ++msgstr "Altura de página" + + #: .tmp/saneopts.h:178 + #, no-c-format + msgid "Use custom gamma table" +-msgstr "Usar tabla de gamma personalizada" ++msgstr "Usar tabla gamma personalizada" + + #: .tmp/saneopts.h:179 + #, no-c-format +@@ -3315,17 +3507,17 @@ + #: .tmp/saneopts.h:180 + #, no-c-format + msgid "Red intensity" +-msgstr "Intensidad de Rojo" ++msgstr "Intensidad de rojo" + + #: .tmp/saneopts.h:181 + #, no-c-format + msgid "Green intensity" +-msgstr "Intensidad de Verde" ++msgstr "Intensidad de verde" + + #: .tmp/saneopts.h:182 + #, no-c-format + msgid "Blue intensity" +-msgstr "Intensidad de Azul" ++msgstr "Intensidad de azul" + + #: .tmp/saneopts.h:183 + #, no-c-format +@@ -3345,32 +3537,32 @@ + #: .tmp/saneopts.h:186 + #, no-c-format + msgid "Halftoning" +-msgstr "Mediostonos" ++msgstr "Medios tonos" + + #: .tmp/saneopts.h:187 + #, no-c-format + msgid "Black level" +-msgstr "Nivel de Negro" ++msgstr "Nivel de negro" + + #: .tmp/saneopts.h:188 + #, no-c-format + msgid "White level" +-msgstr "Nivel de Blanco" ++msgstr "Nivel de blanco" + + #: .tmp/saneopts.h:189 + #, no-c-format + msgid "White level for red" +-msgstr "Nivel de Blanco para rojo" ++msgstr "Nivel de blanco para rojo" + + #: .tmp/saneopts.h:190 + #, no-c-format + msgid "White level for green" +-msgstr "Nivel de Blanco para verde" ++msgstr "Nivel de blanco para verde" + + #: .tmp/saneopts.h:191 + #, no-c-format + msgid "White level for blue" +-msgstr "Nivel de Blanco para azul" ++msgstr "Nivel de blanco para azul" + + #: .tmp/saneopts.h:192 + #, no-c-format +@@ -3395,27 +3587,27 @@ + #: .tmp/saneopts.h:196 + #, no-c-format + msgid "Highlight" +-msgstr "Resaltado" ++msgstr "Resalte" + + #: .tmp/saneopts.h:197 + #, no-c-format + msgid "Highlight for red" +-msgstr "Resaltado para rojo" ++msgstr "Resalte para rojo" + + #: .tmp/saneopts.h:198 + #, no-c-format + msgid "Highlight for green" +-msgstr "Resaltado para verde" ++msgstr "Resalte para verde" + + #: .tmp/saneopts.h:199 + #, no-c-format + msgid "Highlight for blue" +-msgstr "Resaltado para azul" ++msgstr "Resalte para azul" + + #: .tmp/saneopts.h:200 + #, no-c-format + msgid "Hue" +-msgstr "Tono" ++msgstr "Matiz" + + #: .tmp/saneopts.h:201 + #, no-c-format +@@ -3430,12 +3622,12 @@ + #: .tmp/saneopts.h:203 + #, no-c-format + msgid "Halftone pattern size" +-msgstr "Medida del patrón de mediotono" ++msgstr "Tamaño del patrón de medios tonos" + + #: .tmp/saneopts.h:204 + #, no-c-format + msgid "Halftone pattern" +-msgstr "Medida del patrón" ++msgstr "Patrón de medios tonos" + + #: .tmp/saneopts.h:205 + #, no-c-format +@@ -3450,14 +3642,15 @@ + #: .tmp/saneopts.h:208 + #, no-c-format + msgid "Double Optical Resolution" +-msgstr "Doble Resolución Óptica" ++msgstr "Doble resolución óptica" + + #: .tmp/saneopts.h:209 + #, no-c-format + msgid "Bind RGB" + msgstr "Enlazar RGB" + +-#: .tmp/saneopts.h:210 .tmp/sm3840.c:768 ++#: .tmp/saneopts.h:210 ++#: .tmp/sm3840.c:768 + #, no-c-format + msgid "Threshold" + msgstr "Umbral" +@@ -3465,7 +3658,7 @@ + #: .tmp/saneopts.h:211 + #, no-c-format + msgid "Analog gamma correction" +-msgstr "Corrección de gamma analógica" ++msgstr "Corrección gamma analógica" + + #: .tmp/saneopts.h:212 + #, no-c-format +@@ -3490,7 +3683,7 @@ + #: .tmp/saneopts.h:216 + #, no-c-format + msgid "Warmup lamp" +-msgstr "Lámpara de calentamiento" ++msgstr "Calentamiento de lámpara" + + #: .tmp/saneopts.h:217 + #, no-c-format +@@ -3535,12 +3728,12 @@ + #: .tmp/saneopts.h:227 + #, no-c-format + msgid "Set exposure-time" +-msgstr "Establecer tiempo de exposición" ++msgstr "Ajustar tiempo de exposición" + + #: .tmp/saneopts.h:228 + #, no-c-format + msgid "Cal. lamp density" +-msgstr "Densidad de lámpara de calibración" ++msgstr "Cal. densidad de lámpara" + + #: .tmp/saneopts.h:229 + #, no-c-format +@@ -3550,309 +3743,255 @@ + #: .tmp/saneopts.h:230 + #, no-c-format + msgid "Set lamp density" +-msgstr "Establecer densidad de lámpara" ++msgstr "Ajustar densidad de lámpara" + +-#: .tmp/saneopts.h:231 .tmp/umax.c:5830 ++#: .tmp/saneopts.h:231 ++#: .tmp/umax.c:5830 + #, no-c-format + msgid "Lamp off at exit" +-msgstr "Apagar lámpara al salir" ++msgstr "Apagar la lámpara al salir" + + #: .tmp/saneopts.h:245 + #, no-c-format +-msgid "" +-"Read-only option that specifies how many options a specific devices " +-"supports." +-msgstr "" +-"Opción de lectura solamente que establece cuántas opciones soporta un " +-"dispositivo específico." ++msgid "Read-only option that specifies how many options a specific devices supports." ++msgstr "Opción de sólo lectura que establece cuantas opciones soporta un dispositivo específico." + + #: .tmp/saneopts.h:248 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Source, mode and resolution options" +-msgstr "Lista de resoluciones ordenada" ++msgstr "Origen, opciones de modo y resolución" + + #: .tmp/saneopts.h:249 + #, no-c-format + msgid "Scan area and media size options" +-msgstr "" ++msgstr "Opciones del área de escaneo y tamaño del soporte" + + #: .tmp/saneopts.h:250 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Image modification options" +-msgstr "Número de opciones" ++msgstr "Opciones de modificación de imagen" + + #: .tmp/saneopts.h:251 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Hardware specific options" +-msgstr "Resolución hardware" ++msgstr "Opciones especificas de hardaware" + + #: .tmp/saneopts.h:252 + #, no-c-format + msgid "Scanner sensors and buttons" +-msgstr "" ++msgstr "Sensores y botones del escáner" + + #: .tmp/saneopts.h:255 + #, no-c-format + msgid "Request a preview-quality scan." +-msgstr "Solicitar una previsualización de calidad del escaneo." ++msgstr "Solicitar una vista previa de calidad del escaneo." + + #: .tmp/saneopts.h:258 + #, no-c-format +-msgid "" +-"Request that all previews are done in monochrome mode. On a three-pass " +-"scanner this cuts down the number of passes to one and on a one-pass " +-"scanner, it reduces the memory requirements and scan-time of the preview." +-msgstr "" +-"Solicitar que todas las previsualizaciones sean hechas en modo " +-"monocromo. En un escáner de tres pasadas ésto reduce el número de " +-"pasadas a una, y en un escáner de una pasada ésto reduce los " +-"requerimientos de memoria y el tiempo de escaneo de la previsualización." ++msgid "Request that all previews are done in monochrome mode. On a three-pass scanner this cuts down the number of passes to one and on a one-pass scanner, it reduces the memory requirements and scan-time of the preview." ++msgstr "Solicitar que todas las vistas previas sean hechas en modo monocromo. En un escáner de tres pasadas esto reduce el número de pasadas a una, y en un escáner de una pasada esto reduce los requisitos de memoria y el tiempo de escaneo de la vista previa." + + #: .tmp/saneopts.h:264 + #, no-c-format +-msgid "" +-"Number of bits per sample, typical values are 1 for \"line-art\" and 8 " +-"for multibit scans." +-msgstr "" +-"Número de bits por toma, valores típicos son 1 para \"arte lineal\" y 8 " +-"para escaneos multibit." ++msgid "Number of bits per sample, typical values are 1 for \"line-art\" and 8 for multibit scans." ++msgstr "Número de bits por muestra, valores típicos son 1 para «linea de arte» y 8 para escaneos multibit." + + #: .tmp/saneopts.h:268 + #, no-c-format + msgid "Selects the scan mode (e.g., lineart, monochrome, or color)." +-msgstr "" +-"Selecciona el modo de escaneo (ej. arte lineal, monocromo, ó color)." ++msgstr "Selecciona el modo de escaneo (ej. línea de arte, monocromo, ó color)." + + #: .tmp/saneopts.h:271 + #, no-c-format + msgid "Determines the speed at which the scan proceeds." +-msgstr "Determina la velocidad con que se hace el escaneo." ++msgstr "Determina la velocidad a la que se hace el escaneo." + + #: .tmp/saneopts.h:274 + #, no-c-format + msgid "Selects the scan source (such as a document-feeder)." +-msgstr "" +-"Selecciona la fuente de escaneo (tal como un alimentador de documentos)." ++msgstr "Selecciona el origen del escaneo (tal como un alimentador de documentos)." + + #: .tmp/saneopts.h:277 + #, no-c-format + msgid "Controls whether backtracking is forced." +-msgstr "Controla si se fuerza el backtracking." ++msgstr "Controla si se fuerza el retroceso" + + #: .tmp/saneopts.h:280 + #, no-c-format + msgid "Top-left x position of scan area." +-msgstr "Posición x arriba-izquierda de la zona de escaneo." ++msgstr "Posición X arriba-izquierda del área de escaneo." + + #: .tmp/saneopts.h:283 + #, no-c-format + msgid "Top-left y position of scan area." +-msgstr "Posición y arriba-izquierda de la zona de escaneo." ++msgstr "Posición Y arriba-izquierda del área de escaneo." + + #: .tmp/saneopts.h:286 + #, no-c-format + msgid "Bottom-right x position of scan area." +-msgstr "Posición x abajo-derecha de la zona de escaneo.Abajo." ++msgstr "Posición X abajo-derecha del área de escaneo." + + #: .tmp/saneopts.h:289 + #, no-c-format + msgid "Bottom-right y position of scan area." +-msgstr "Posición y abajo-derecha de la zona de escaneo." ++msgstr "Posición Y abajo-derecha del área de escaneo." + + #: .tmp/saneopts.h:292 + #, no-c-format + msgid "Sets the resolution of the scanned image." +-msgstr "Establece la resolución de la imagen escaneada." ++msgstr "Ajusta la resolución de la imagen escaneada." + + #: .tmp/saneopts.h:295 + #, no-c-format + msgid "Sets the horizontal resolution of the scanned image." +-msgstr "Establece la resolución horizontal de la imagen escaneada." ++msgstr "Ajusta la resolución horizontal de la imagen escaneada." + + #: .tmp/saneopts.h:298 + #, no-c-format + msgid "Sets the vertical resolution of the scanned image." +-msgstr "Establece la resolución vertical de la imagen escaneada." ++msgstr "Ajusta la resolución vertical de la imagen escaneada." + + #: .tmp/saneopts.h:301 + #, no-c-format +-msgid "" +-"Specifies the width of the media. Required for automatic centering of " +-"sheet-fed scans." +-msgstr "" ++msgid "Specifies the width of the media. Required for automatic centering of sheet-fed scans." ++msgstr "Especifica la anchura del soporte. Necesario para el centrado automático de hojas de escaneo." + + #: .tmp/saneopts.h:305 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Specifies the height of the media." +-msgstr "Establece la resolución de la imagen escaneada." ++msgstr "Especifica la altura del soporte" + + #: .tmp/saneopts.h:308 + #, no-c-format +-msgid "" +-"Determines whether a builtin or a custom gamma-table should be used." +-msgstr "Determina si una tabla-gamma interna ó personalizado debe usarse." ++msgid "Determines whether a builtin or a custom gamma-table should be used." ++msgstr "Determina si debe usarse una tabla gamma interna ó personalizada." + + #: .tmp/saneopts.h:312 + #, no-c-format +-msgid "" +-"Gamma-correction table. In color mode this option equally affects the " +-"red, green, and blue channels simultaneously (i.e., it is an intensity " +-"gamma table)." +-msgstr "" +-"Tabla de corrección gamma. En modo color ésta opción afecta igualmente " +-"los canales rojo, verde y azul simultáneamente (ej., es una tabla de " +-"intensidad gamma)." ++msgid "Gamma-correction table. In color mode this option equally affects the red, green, and blue channels simultaneously (i.e., it is an intensity gamma table)." ++msgstr "Tabla de corrección gamma. En modo color ésta opción afecta igualmente a los canales de rojo, verde y azul simultáneamente (ej. es una tabla de intensidad gamma)." + + #: .tmp/saneopts.h:317 + #, no-c-format + msgid "Gamma-correction table for the red band." +-msgstr "Tabla de corrección gamma para la banda roja." ++msgstr "Tabla de corrección gamma para la gama roja." + + #: .tmp/saneopts.h:320 + #, no-c-format + msgid "Gamma-correction table for the green band." +-msgstr "Tabla de corrección gamma para la banda verde." ++msgstr "Tabla de corrección gamma para la gama verde." + + #: .tmp/saneopts.h:323 + #, no-c-format + msgid "Gamma-correction table for the blue band." +-msgstr "Tabla de corrección gamma para la banda azul." ++msgstr "Tabla de corrección gama para la gamma azul." + + #: .tmp/saneopts.h:326 + #, no-c-format + msgid "Controls the brightness of the acquired image." +-msgstr "Controla el brillo de la imagen adquirida." ++msgstr "Controla el brillo de la imagen obtenida." + + #: .tmp/saneopts.h:329 + #, no-c-format + msgid "Controls the contrast of the acquired image." +-msgstr "Controla el contraste de la imagen adquirida." ++msgstr "Controla el contraste de la imagen obtenida." + + #: .tmp/saneopts.h:332 + #, no-c-format +-msgid "" +-"Selects the \"graininess\" of the acquired image. Smaller values result " +-"in sharper images." +-msgstr "" +-"Selecciona la \" granularidad\" de la imagen adquirida. Valores más " +-"pequeños dan como resultado imágenes mejor definidas." ++msgid "Selects the \"graininess\" of the acquired image. Smaller values result in sharper images." ++msgstr "Selecciona el «granulado» de la imagen obtenida. Valores más pequeños dan como resultado imágenes mejor definidas." + + #: .tmp/saneopts.h:336 + #, no-c-format + msgid "Selects whether the acquired image should be halftoned (dithered)." +-msgstr "" +-"Selecciona si la imagen adquirida debe ser medio tonada (dithered)." ++msgstr "Selecciona si la imagen obtenida debe ser convertida a medios tonos (punteado)." + +-#: .tmp/saneopts.h:339 .tmp/saneopts.h:354 ++#: .tmp/saneopts.h:339 ++#: .tmp/saneopts.h:354 + #, no-c-format + msgid "Selects what radiance level should be considered \"black\"." +-msgstr "Selecciona que nivel de radiancia debe ser considerado \"negro\"." ++msgstr "Selecciona que nivel de radiancia debe tenerse en cuenta «negro»." + +-#: .tmp/saneopts.h:342 .tmp/saneopts.h:363 ++#: .tmp/saneopts.h:342 ++#: .tmp/saneopts.h:363 + #, no-c-format + msgid "Selects what radiance level should be considered \"white\"." +-msgstr "Selecciona que nivel de radiancia debe ser considerado \"blanco\"." ++msgstr "Selecciona que nivel de radiancia debe tenerse en cuenta «blanco»." + + #: .tmp/saneopts.h:345 + #, no-c-format + msgid "Selects what red radiance level should be considered \"white\"." +-msgstr "" +-"Selecciona que nivel de radiancia roja debe ser considerado \"blanco\"." ++msgstr "Selecciona que nivel de radiancia rojo debe tenerse en cuenta «blanco»." + + #: .tmp/saneopts.h:348 + #, no-c-format + msgid "Selects what green radiance level should be considered \"white\"." +-msgstr "" +-"Selecciona que nivel de radiancia verde debe ser considerado \"blanco\"." ++msgstr "Selecciona que nivel de radiancia verde debe tenerse en cuenta «blanco»." + + #: .tmp/saneopts.h:351 + #, no-c-format + msgid "Selects what blue radiance level should be considered \"white\"." +-msgstr "" +-"Selecciona que nivel de radiancia azul debe ser considerado \"blanco\"." ++msgstr "Selecciona que nivel de radiancia azul debe tenerse en cuenta «blanco»." + + #: .tmp/saneopts.h:356 + #, no-c-format + msgid "Selects what red radiance level should be considered \"black\"." +-msgstr "" +-"Selecciona que nivel de radiancia roja debe ser considerado \"negro\"." ++msgstr "Selecciona que nivel de radiancia rojo debe tenerse en cuenta «negro»." + + #: .tmp/saneopts.h:358 + #, no-c-format + msgid "Selects what green radiance level should be considered \"black\"." +-msgstr "" +-"Selecciona que nivel de radiancia verde debe ser considerado \"negro\"." ++msgstr "Selecciona que nivel de radiancia verde debe tenerse en cuenta «negro»." + + #: .tmp/saneopts.h:360 + #, no-c-format + msgid "Selects what blue radiance level should be considered \"black\"." +-msgstr "" +-"Selecciona que nivel de radiancia azul debe ser considerado \"negro\"." ++msgstr "Selecciona que nivel de radiancia azul debe tenerse en cuenta «negro»." + + #: .tmp/saneopts.h:365 + #, no-c-format + msgid "Selects what red radiance level should be considered \"full red\"." +-msgstr "" +-"Selecciona que nivel de radiancia roja debe ser considerado \"rojo " +-"completo\"." ++msgstr "Selecciona que nivel de radiancia rojo debe tenerse en cuenta «rojo total»." + + #: .tmp/saneopts.h:367 + #, no-c-format +-msgid "" +-"Selects what green radiance level should be considered \"full green\"." +-msgstr "" +-"Selecciona que nivel de radiancia verde debe ser considerado \"verde " +-"completo\"." ++msgid "Selects what green radiance level should be considered \"full green\"." ++msgstr "Selecciona que nivel de radiancia verde debe tenerse en cuenta «verde total»." + + #: .tmp/saneopts.h:370 + #, no-c-format +-msgid "" +-"Selects what blue radiance level should be considered \"full blue\"." +-msgstr "" +-"Selecciona que nivel de radiancia azul debe ser considerado \"azul " +-"completo\"." ++msgid "Selects what blue radiance level should be considered \"full blue\"." ++msgstr "Selecciona que nivel de radiancia azul debe tenerse en cuenta «azul total»." + + #: .tmp/saneopts.h:374 + #, no-c-format + msgid "Controls the \"hue\" (blue-level) of the acquired image." +-msgstr "Contola el \"matiz\" (nivel de azul) de la imagen adquirida." ++msgstr "Contola el «matiz» (nivel de azul) de la imagen obtenida." + + #: .tmp/saneopts.h:377 + #, no-c-format +-msgid "" +-"The saturation level controls the amount of \"blooming\" that occurs " +-"when acquiring an image with a camera. Larger values cause more blooming." +-msgstr "" +-"El nivel de saturación controla la cantidad de \"blooming\" (exposición) " +-"que ocurre cuando se adquiere una imagen con una cámara. Valores más " +-"grandes causan más blooming." ++msgid "The saturation level controls the amount of \"blooming\" that occurs when acquiring an image with a camera. Larger values cause more blooming." ++msgstr "El nivel de saturación controla la cantidad de «florecimiento» (halo) que ocurre cuando se obtiene una imagen con una cámara. Valores más altos producen más florecimiento." + + #: .tmp/saneopts.h:382 + #, no-c-format + msgid "The filename of the image to be loaded." +-msgstr "El nombre de archivo de la imagen a ser cargada." ++msgstr "Nombre de archivo de la imagen a cargar." + + #: .tmp/saneopts.h:385 + #, no-c-format +-msgid "" +-"Sets the size of the halftoning (dithering) pattern used when scanning " +-"halftoned images." +-msgstr "" +-"Establece la medida del patrón de medio tono (dithering) usado cuando se " +-"escanean imágenes de medio tono." ++msgid "Sets the size of the halftoning (dithering) pattern used when scanning halftoned images." ++msgstr "Ajusta el tamaño del patrón de medios tonos (punteado) usado cuando se escanean imágenes de medios tonos." + + #: .tmp/saneopts.h:389 + #, no-c-format +-msgid "" +-"Defines the halftoning (dithering) pattern for scanning halftoned images." +-msgstr "" +-"Establece el patrón de medio tono (dithering) para escanear imágenes de " +-"medio tono." ++msgid "Defines the halftoning (dithering) pattern for scanning halftoned images." ++msgstr "Define el patrón de medios tonos (punteado) para escanear imágenes de medios tonos." + + #: .tmp/saneopts.h:393 + #, no-c-format + msgid "Use same values for X and Y resolution" +-msgstr "Usar mismos valores para la resolución X e Y" ++msgstr "Usar los mismos valores para la resolución X e Y." + + #: .tmp/saneopts.h:395 + #, no-c-format +@@ -3862,14 +4001,15 @@ + #: .tmp/saneopts.h:397 + #, no-c-format + msgid "Do a quality white-calibration" +-msgstr "Hacer una calibración blanca de calidad" ++msgstr "Hacer una calibración de calidad de blancos " + + #: .tmp/saneopts.h:399 + #, no-c-format + msgid "Use lens that doubles optical resolution" + msgstr "Usar lente que duplica la resolución óptica" + +-#: .tmp/saneopts.h:401 .tmp/saneopts.h:413 ++#: .tmp/saneopts.h:401 ++#: .tmp/saneopts.h:413 + #, no-c-format + msgid "In RGB-mode use same values for each color" + msgstr "En modo RGB usar los mismos valores para cada color" +@@ -3947,7 +4087,7 @@ + #: .tmp/saneopts.h:433 + #, no-c-format + msgid "Enable selection of exposure-time" +-msgstr "Establecer selección del tiempo de exposición" ++msgstr "Activar selección del tiempo de exposición" + + #: .tmp/saneopts.h:435 + #, no-c-format +@@ -3957,170 +4097,153 @@ + #: .tmp/saneopts.h:437 + #, no-c-format + msgid "Define lamp density for scan" +-msgstr "Definir densidad de la lámpara para escanear" ++msgstr "Definir densidad de la lámpara para escaneo" + + #: .tmp/saneopts.h:439 + #, no-c-format + msgid "Enable selection of lamp density" +-msgstr "Establecer selección de la densidad de la lámpara" ++msgstr "Activar la selección de la densidad de la lámpara" + +-#: .tmp/saneopts.h:441 .tmp/umax.c:5831 ++#: .tmp/saneopts.h:441 ++#: .tmp/umax.c:5831 + #, no-c-format + msgid "Turn off lamp when program exits" +-msgstr "Apaga la lámpara cuando el programa finaliza" ++msgstr "Apaga la lámpara al salir del programa" + + #: .tmp/saneopts.h:444 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Scan button" +-msgstr "Resolución de Escaneo" ++msgstr "Botón de control de escaneo" + + #: .tmp/saneopts.h:445 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Email button" +-msgstr "Esperar Botón" ++msgstr "Botón de correo-e" + + #: .tmp/saneopts.h:446 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Fax button" +-msgstr "Esperar Botón" ++msgstr "Botón de fax" + + #: .tmp/saneopts.h:447 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Copy button" +-msgstr "Esperar Botón" ++msgstr "Botón de copia" + + #: .tmp/saneopts.h:448 + #, no-c-format + msgid "PDF button" +-msgstr "" ++msgstr "Botón de PDF" + + #: .tmp/saneopts.h:449 + #, no-c-format + msgid "Cancel button" +-msgstr "" ++msgstr "Botón de cancelar" + + #: .tmp/saneopts.h:450 + #, no-c-format + msgid "Page loaded" +-msgstr "" ++msgstr "Página cargada" + + #: .tmp/saneopts.h:451 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Cover open" +-msgstr "Cubierta AAD abierta" ++msgstr "La tapa está abierta" + + #: .tmp/sm3840.c:758 + #, no-c-format + msgid "Lamp timeout" +-msgstr "Timeout de la lámpara" ++msgstr "Límite de tiempo de lámpara" + + #: .tmp/sm3840.c:760 + #, no-c-format + msgid "Minutes until lamp is turned off after scan" +-msgstr "Minutos tras los cuales la lámpara se apagara después del escaneo" ++msgstr "Minutos que tardará la lámpara en apagarse tras el escaneo" + + #: .tmp/sm3840.c:770 + #, no-c-format + msgid "Threshold value for lineart mode" +-msgstr "Umbral para modo lineart" ++msgstr "Valor de umbral para el modo de línea de arte" + + #: .tmp/snapscan-options.c:84 + #, no-c-format + msgid "Document Feeder" +-msgstr "Alimentador de Documentos" ++msgstr "Alimentador de documentos" + + #: .tmp/snapscan-options.c:88 + #, no-c-format + msgid "6x4 (inch)" +-msgstr "6x4 (pulgadas)" ++msgstr "6x4 (pulg.)" + + #: .tmp/snapscan-options.c:89 + #, no-c-format + msgid "8x10 (inch)" +-msgstr "8x10 (pulgadas)" ++msgstr "8x10 (pulg.)" + + #: .tmp/snapscan-options.c:90 + #, no-c-format + msgid "8.5x11 (inch)" +-msgstr "8.5x11 (pulgadas)" ++msgstr "8.5x11 (pulg.)" + + #: .tmp/snapscan-options.c:93 + #, no-c-format + msgid "Halftoning Unsupported" +-msgstr "Mediostonos no soportados" ++msgstr "Medios tonos no compatibles" + + #: .tmp/snapscan-options.c:94 + #, no-c-format + msgid "DispersedDot8x8" +-msgstr "DispersedDot8x8" ++msgstr "Punto disperso 8x8" + + #: .tmp/snapscan-options.c:95 + #, no-c-format + msgid "DispersedDot16x16" +-msgstr "DispersedDot16x16" ++msgstr "Punto disperso 16x16" + + #: .tmp/snapscan-options.c:99 + #, no-c-format +-msgid "" +-"Number of scan lines to request in a SCSI read. Changing this parameter " +-"allows you to tune the speed at which data is read from the scanner " +-"during scans. If this is set too low, the scanner will have to stop " +-"periodically in the middle of a scan; if it's set too high, X-based " +-"frontends may stop responding to X events and your system could bog down." +-msgstr "" +-"Número de líneas a solicitar en una lectura SCSI. Cambiar este parámetro " +-"permite cambiar la velocidad en la que los datos son leídos del escaner. " +-"Si el dato es muy bajo, el escaner se detendrá periódicamente a mitadl " +-"del escaneo; si es demasiado alto, los frontends gráficos pueden dejar " +-"de responder a los eventos X y su sistema puede atascarse." ++msgid "Number of scan lines to request in a SCSI read. Changing this parameter allows you to tune the speed at which data is read from the scanner during scans. If this is set too low, the scanner will have to stop periodically in the middle of a scan; if it's set too high, X-based frontends may stop responding to X events and your system could bog down." ++msgstr "Número de líneas de escaneo a petición de una lectura SCSI. El cambio de este parámetro le permite ajustar la velocidad a la que se leen los datos desde el escáner durante los escaneos. Si este es demasiado bajo, el escáner tiene que parar periódicamente en medio de un escaneo, si es demasiado alto, basado en interfaces X puede dejar de responder a eventos de X y su sistema se podría atascar." + + #: .tmp/snapscan-options.c:436 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Preview mode" +-msgstr "Previsualizar" ++msgstr "Modo de vista previa" + + #: .tmp/snapscan-options.c:438 + #, no-c-format +-msgid "" +-"Select the mode for previews. Greyscale previews usually give the best " +-"combination of speed and detail." +-msgstr "" +-"Selecciona el modo para la previsualización. La escala de grises " +-"normalmente da la mejor combinación de velocidad y detalle." ++msgid "Select the mode for previews. Greyscale previews usually give the best combination of speed and detail." ++msgstr "Selecciona el modo para vista previa. La vista previa en escala de grises proporciona en general, la mejor relación entre velocidad y detalle." + + #: .tmp/snapscan-options.c:545 + #, no-c-format + msgid "Predefined settings" +-msgstr "Opciones predefinidas" ++msgstr "Ajustes predefinidos" + + #: .tmp/snapscan-options.c:547 + #, no-c-format +-msgid "" +-"Provides standard scanning areas for photographs, printed pages and the " +-"like." +-msgstr "" +-"Proporciona las areas de escaneado standard para fotogravías, páginas " +-"imprimidas, etc." ++msgid "Provides standard scanning areas for photographs, printed pages and the like." ++msgstr "Proporciona superficies de escaneo estándar para fotografías, páginas impresas, etc." + + #: .tmp/snapscan-options.c:823 + #, no-c-format + msgid "Colour lines per read" +-msgstr "Líneas de color por lectura" ++msgstr "Color, líneas por lectura" + + #: .tmp/snapscan-options.c:835 + #, no-c-format + msgid "Greyscale lines per read" +-msgstr "Líneas de grises por lectura" ++msgstr "Escala de grises, líneas de por lectura" + + #: .tmp/stv680.c:974 + #, no-c-format + msgid "webcam" +-msgstr "webcam" ++msgstr "cámara web" + + #: .tmp/stv680.h:115 + #, no-c-format + msgid "Color RAW" +-msgstr "Color RAW" ++msgstr "Color en BRUTO" + + #: .tmp/stv680.h:116 + #, no-c-format +@@ -4130,13 +4253,17 @@ + #: .tmp/stv680.h:117 + #, no-c-format + msgid "Color RGB TEXT" +-msgstr "Color RGB TEXT" ++msgstr "Color RGB TEXTO" + +-#: .tmp/teco1.c:1152 .tmp/teco1.c:1153 .tmp/teco2.c:1971 .tmp/teco2.c:1972 +-#: .tmp/teco3.c:977 .tmp/teco3.c:978 ++#: .tmp/teco1.c:1152 ++#: .tmp/teco1.c:1153 ++#: .tmp/teco2.c:1971 ++#: .tmp/teco2.c:1972 ++#: .tmp/teco3.c:977 ++#: .tmp/teco3.c:978 + #, no-c-format + msgid "Dither" +-msgstr "Entramado" ++msgstr "Difuminado" + + #: .tmp/test.c:136 + #, no-c-format +@@ -4156,76 +4283,59 @@ + #: .tmp/test.c:137 + #, no-c-format + msgid "Grid" +-msgstr "Red" ++msgstr "Rejilla" + +-#: .tmp/test.c:162 .tmp/test.c:170 ++#: .tmp/test.c:162 ++#: .tmp/test.c:170 + #, no-c-format + msgid "First entry" + msgstr "Primera entrada" + +-#: .tmp/test.c:162 .tmp/test.c:170 ++#: .tmp/test.c:162 ++#: .tmp/test.c:170 + #, no-c-format + msgid "Second entry" + msgstr "Segunda entrada" + + #: .tmp/test.c:164 + #, no-c-format +-msgid "" +-"This is the very long third entry. Maybe the frontend has an idea how to " +-"display it" +-msgstr "" +-"Esta entrada es muy larga. Puede que el frontend sepa cómo mostrarla" ++msgid "This is the very long third entry. Maybe the frontend has an idea how to display it" ++msgstr "Esta tercera entrada es muy larga. Tal vez la interfaz tiene una idea de cómo mostrarlo" + + #: .tmp/test.c:347 + #, no-c-format + msgid "Hand-scanner simulation" +-msgstr "Simulación de escaner de mano" ++msgstr "Simulación de escaneo manual" + + #: .tmp/test.c:348 + #, no-c-format +-msgid "" +-"Simulate a hand-scanner. Hand-scanners do not know the image height a " +-"priori. Instead, they return a height of -1. Setting this option " +-"allows to test whether a frontend can handle this correctly. This " +-"option also enables a fixed width of 11 cm." +-msgstr "" +-"Simula un escaner de mano. Los escaners de mano no saben la altura de la " +-"imagen. En cambio, devuelven una altura de -1. Esta opcioón te permite " +-"probar si un frontend puede tratar esto correctamente. Esta opción " +-"también activa un anchura fija de 11 cm." ++msgid "Simulate a hand-scanner. Hand-scanners do not know the image height a priori. Instead, they return a height of -1. Setting this option allows to test whether a frontend can handle this correctly. This option also enables a fixed width of 11 cm." ++msgstr "Simula un escáner de mano. Los escáneres de mano a menudo no conocen a priori la distancia a la imagen. En su lugar utiliza una altura de retorno -1. Ajustando esta opción permite comprobar si una interfaz puede manejar esto correctamente. Esta opción también permite un ancho de 11cm." + + #: .tmp/test.c:365 + #, no-c-format + msgid "Three-pass simulation" +-msgstr "Simulación de Tres-pasadas" ++msgstr "Simulación de tres pasadas" + + #: .tmp/test.c:366 + #, no-c-format +-msgid "" +-"Simulate a three-pass scanner. In color mode, three frames are " +-"transmitted." +-msgstr "" +-"Simula un escaner de tres-pasadas. En modo color, se transmiten tres " +-"frames." ++msgid "Simulate a three-pass scanner. In color mode, three frames are transmitted." ++msgstr "Simula un escaneo de tres pasadas. En el modo color, se generan tres muestras." + + #: .tmp/test.c:381 + #, no-c-format + msgid "Set the order of frames" +-msgstr "Establece el orden de los frames" ++msgstr "Ajustar el orden de las muestras" + + #: .tmp/test.c:382 + #, no-c-format + msgid "Set the order of frames in three-pass color mode." +-msgstr "Establece el orden de los frames en modo de color de tres-pasadas." ++msgstr "Ajustar el orden de las muestras en el modo de tres pasadas de color." + + #: .tmp/test.c:415 + #, no-c-format +-msgid "" +-"If Automatic Document Feeder is selected, the feeder will be 'empty' " +-"after 10 scans." +-msgstr "" +-"Si el Alimentador Automático de Documentos está seleccionado, se vaciará " +-"después de 10 escaneos." ++msgid "If Automatic Document Feeder is selected, the feeder will be 'empty' after 10 scans." ++msgstr "Si se selecciona el alimentador automático de documentos, el alimentador estará «vacío» tras 10 escaneos." + + #: .tmp/test.c:430 + #, no-c-format +@@ -4235,7 +4345,7 @@ + #: .tmp/test.c:443 + #, no-c-format + msgid "Select the test picture" +-msgstr "Selecciona el dibujo de prueba" ++msgstr "Seleccione la imagen de prueba" + + #: .tmp/test.c:445 + #, no-c-format +@@ -4244,30 +4354,23 @@ + "Solid black: fills the whole scan with black.\n" + "Solid white: fills the whole scan with white.\n" + "Color pattern: draws various color test patterns depending on the mode.\n" +-"Grid: draws a black/white grid with a width and height of 10 mm per " +-"square." ++"Grid: draws a black/white grid with a width and height of 10 mm per square." + msgstr "" +-"Selecciona el tipo de dibujo de prueba. Opciones disponibles:\n" +-"Negro sólido: rellena el area escaneada con negro.\n" +-"Blanco sólido: rellena el area escaneada con blanco.\n" +-"Patrón de color: dibuja varios patrones de color dependiendo del modo.\n" +-"Red: dibuja una red blanco/negro con un ancho y alto de 10mm por cuadro." ++"Selecciona el tipo de prueba de imagen. Posibles opciones:\n" ++"Negro sólido: llena todo el escaneo con negro.\n" ++"Blanco sólido: llena todo el escaneo con blanco.\n" ++"Patrón de color: dibuja varios patrones de prueba de color dependiendo del modo.\n" ++"Rejilla: dibuja una rejilla en blanco y negro con un tamaño de 10mm por cuadrado." + + #: .tmp/test.c:466 + #, no-c-format + msgid "Invert endianness" +-msgstr "Invertir 'endianness'" ++msgstr "Invertir el orden de los datos" + + #: .tmp/test.c:467 + #, no-c-format +-msgid "" +-"Exchange upper and lower byte of image data in 16 bit modes. This option " +-"can be used to test the 16 bit modes of frontends, e.g. if the frontend " +-"uses the correct endianness." +-msgstr "" +-"Intercambia el byte alto y bajo de un dato de 16 bits. Esta opción puede " +-"ser utilizada para probar que los frontends manejan el 'endianness' " +-"correcto en los modos de 16 bits." ++msgid "Exchange upper and lower byte of image data in 16 bit modes. This option can be used to test the 16 bit modes of frontends, e.g. if the frontend uses the correct endianness." ++msgstr "Intercambia los bytes de datos superiores e inferiores de imágenes en modo de 16 bits. Esta opción puede utilizarse para la prueba de 16 bits de los modos de interfaz, p.ej. si la interfaz utiliza el orden correcto." + + #: .tmp/test.c:483 + #, no-c-format +@@ -4277,21 +4380,17 @@ + #: .tmp/test.c:484 + #, no-c-format + msgid "Limit the amount of data transferred with each call to sane_read()." +-msgstr "" +-"Limita la cantidad de datos transferidos en cada llamada a sane_read()." ++msgstr "Limita la cantidad de datos transferidos con cada llamada a sane_read()." + + #: .tmp/test.c:497 + #, no-c-format + msgid "Size of read-limit" +-msgstr "Tamaño de read-limit" ++msgstr "Tamaño del límite de lectura" + + #: .tmp/test.c:498 + #, no-c-format +-msgid "" +-"The (maximum) amount of data transferred with each call to sane_read()." +-msgstr "" +-"La (máxima) cantidad de datos transferidos con cada llamada a sane_read" +-"()." ++msgid "The (maximum) amount of data transferred with each call to sane_read()." ++msgstr "Cantidad de datos (máxima) transferida con cada llamada a sane_read()." + + #: .tmp/test.c:513 + #, no-c-format +@@ -4301,7 +4400,7 @@ + #: .tmp/test.c:514 + #, no-c-format + msgid "Delay the transfer of data to the pipe." +-msgstr "Retrasar la transferencia de datos." ++msgstr "Retardar la transferencia de datos a la canalización." + + #: .tmp/test.c:526 + #, no-c-format +@@ -4310,9 +4409,8 @@ + + #: .tmp/test.c:527 + #, no-c-format +-msgid "" +-"How long to wait after transferring each buffer of data through the pipe." +-msgstr "Cuánto esperar después de transferir cada buffer de datos." ++msgid "How long to wait after transferring each buffer of data through the pipe." ++msgstr "Cuanto tiempo se esperará después de transferir cada búfer de datos a través de la canalización." + + #: .tmp/test.c:542 + #, no-c-format +@@ -4321,63 +4419,48 @@ + + #: .tmp/test.c:544 + #, no-c-format +-msgid "" +-"Select the return-value of sane_read(). \"Default\" is the normal " +-"handling for scanning. All other status codes are for testing how the " +-"frontend handles them." +-msgstr "" +-"Selecciona el valor de retorno de sane_read(). \"Default\" es el manejo " +-"normal para el escaneo. Los demás códigos de estado son para probar cómo " +-"los maneja el frontend." ++msgid "Select the return-value of sane_read(). \"Default\" is the normal handling for scanning. All other status codes are for testing how the frontend handles them." ++msgstr "Seleccione el valor de retorno de sane_read(). «Predeterminado» es el normal para hacer el escaneo. Todos los demás códigos de estado son para probar la forma en que la interfaz se encarga de ellos." + + #: .tmp/test.c:561 + #, no-c-format + msgid "Loss of pixels per line" +-msgstr "Pérdida de pixels por línea" ++msgstr "Pérdida de píxeles por línea" + + #: .tmp/test.c:563 + #, no-c-format + msgid "The number of pixels that are wasted at the end of each line." +-msgstr "Número de pixels que se pierden al final de cada línea." ++msgstr "Número de píxeles que se pierden en el extremo de cada línea." + + #: .tmp/test.c:576 + #, no-c-format + msgid "Fuzzy parameters" +-msgstr "Otros parámetros" ++msgstr "Parámetros difusos" + + #: .tmp/test.c:577 + #, no-c-format +-msgid "" +-"Return fuzzy lines and bytes per line when sane_parameters() is called " +-"before sane_start()." +-msgstr "" +-"Devolver líneas y bytes por línea cuando sane_parameters() sea llamado " +-"antes de sane_start()." ++msgid "Return fuzzy lines and bytes per line when sane_parameters() is called before sane_start()." ++msgstr "Devuelve líneas difusas y bytes por línea cuando se llama a sane_start() antes que a sane_parameters()." + + #: .tmp/test.c:590 + #, no-c-format + msgid "Use non-blocking IO" +-msgstr "Usar IO no-bloqueante" ++msgstr "Usar E/S no bloqueante" + + #: .tmp/test.c:591 + #, no-c-format + msgid "Use non-blocking IO for sane_read() if supported by the frontend." +-msgstr "" +-"Usa IO no-bloqueante para sane_read() si está soportado por el frontend." ++msgstr "Usar una E/S no bloqueante para sane_red() si lo permite la interfaz." + + #: .tmp/test.c:604 + #, no-c-format + msgid "Offer select file descriptor" +-msgstr "Ofrecer descriptor de fichero" ++msgstr "Proponer la selección de un descriptor de archivo" + + #: .tmp/test.c:605 + #, no-c-format +-msgid "" +-"Offer a select filedescriptor for detecting if sane_read() will return " +-"data." +-msgstr "" +-"Ofrece un descriptor de fichero para detectar si sane_read() devuelve " +-"datos." ++msgid "Offer a select filedescriptor for detecting if sane_read() will return data." ++msgstr "Proponer la selección un descriptor de archivo para detectar si sane_read () devolverá los datos." + + #: .tmp/test.c:618 + #, no-c-format +@@ -4386,233 +4469,188 @@ + + #: .tmp/test.c:619 + #, no-c-format +-msgid "" +-"Enable various test options. This is for testing the ability of " +-"frontends to view and modify all the different SANE option types." +-msgstr "" +-"Activa varias opciones de prueba. Esto es para probar la capacidad de " +-"los frontends para ver y modificar las diferentes opciones de SANE." ++msgid "Enable various test options. This is for testing the ability of frontends to view and modify all the different SANE option types." ++msgstr "Activa varias opciones de prueba. Esto se usa para probar la capacidad de las interfaces para ver y modificar los diferentes tipos de opciones de SANE." + + #: .tmp/test.c:633 + #, no-c-format + msgid "Print options" +-msgstr "Imprimir opciones" ++msgstr "Imprimir las opciones" + + #: .tmp/test.c:634 + #, no-c-format + msgid "Print a list of all options." +-msgstr "Imprimir una lista de todas las opciones." ++msgstr "Imprimir una lista de todas las opciones" + + #: .tmp/test.c:711 + #, no-c-format + msgid "Bool test options" +-msgstr "Test de opciones Booleanas" ++msgstr "Opciones de prueba «Booleanas»" + + #: .tmp/test.c:724 + #, no-c-format + msgid "(1/6) Bool soft select soft detect" +-msgstr "(1/6) Modificación y lectura lógicas" ++msgstr "(1/6) Booleana configurable y legible por software" + + #: .tmp/test.c:726 + #, no-c-format +-msgid "" +-"(1/6) Bool test option that has soft select and soft detect (and " +-"advanced) capabilities. That's just a normal bool option." +-msgstr "" +-"(1/6) Opción booleana modificable para la aplicación. Es solo una opción " +-"normal ." ++msgid "(1/6) Bool test option that has soft select and soft detect (and advanced) capabilities. That's just a normal bool option." ++msgstr "(1/6) Opción de prueba booleana configurable y legible por el software. Esta es la opción booleana normal. " + + #: .tmp/test.c:742 + #, no-c-format + msgid "(2/6) Bool hard select soft detect" +-msgstr "(2/6) Modificación material y lectura lógica" ++msgstr "(2/6) Booleana configurable por hardware legible por software" + + #: .tmp/test.c:744 + #, no-c-format +-msgid "" +-"(2/6) Bool test option that has hard select and soft detect (and " +-"advanced) capabilities. That means the option can't be set by the " +-"frontend but by the user (e.g. by pressing a button at the device)." +-msgstr "" +-"(2/6) Opción booleana que no puede establecerse por el frontend sino por " +-"el usuario (por ejemplo, pulsando un botón en el dispositivo)." ++msgid "(2/6) Bool test option that has hard select and soft detect (and advanced) capabilities. That means the option can't be set by the frontend but by the user (e.g. by pressing a button at the device)." ++msgstr "(2/6) Opción de prueba booleana configurable por hardware y legible por el software. Esta opción no puede ser ajustada por la interfaz, pero si por el usuario (p.ej. pulsando un botón en el dispositivo)." + + #: .tmp/test.c:761 + #, no-c-format + msgid "(3/6) Bool hard select" +-msgstr "(3/6) Opción booleana modificable por el usuario" ++msgstr "(3/6) Booleana configurable por hardware" + + #: .tmp/test.c:762 + #, no-c-format +-msgid "" +-"(3/6) Bool test option that has hard select (and advanced) capabilities. " +-"That means the option can't be set by the frontend but by the user (e.g. " +-"by pressing a button at the device) and can't be read by the frontend." +-msgstr "" +-"(3/6) Opción booleana modificable por el usuario. Esta opción no puede " +-"ser establecida por el frontend (por ejemplo, pulsando un botón de " +-"dispositivo) y no puede ser leída por el frontend." ++msgid "(3/6) Bool test option that has hard select (and advanced) capabilities. That means the option can't be set by the frontend but by the user (e.g. by pressing a button at the device) and can't be read by the frontend." ++msgstr "(3/6) Opción de prueba booleana configurable por hardware. Esta opción no puede ser ajustada por la interfaz, pero si por el usuario (p.ej. pulsando un botón en el dispositivo) tampoco puede ser leída por la interfaz ." + + #: .tmp/test.c:780 + #, no-c-format + msgid "(4/6) Bool soft detect" +-msgstr "(4/6) Opción booleana" ++msgstr "(4/6) Booleana lexible por software" + + #: .tmp/test.c:781 + #, no-c-format +-msgid "" +-"(4/6) Bool test option that has soft detect (and advanced) capabilities. " +-"That means the option is read-only." +-msgstr "(4/6) Opción booleana de solo lectura." ++msgid "(4/6) Bool test option that has soft detect (and advanced) capabilities. That means the option is read-only." ++msgstr "(4/6) Opción de prueba booleana legible por el software Esta es una opción de sólo lectura." + + #: .tmp/test.c:797 + #, no-c-format + msgid "(5/6) Bool soft select soft detect emulated" +-msgstr "(5/6) Opción booleana emulada" ++msgstr "(5/6) Booleana configurable y legible por software, emulada" + + #: .tmp/test.c:798 + #, no-c-format +-msgid "" +-"(5/6) Bool test option that has soft select, soft detect, and emulated " +-"(and advanced) capabilities." +-msgstr "(5/6) Opción booleana emulada, modificable." ++msgid "(5/6) Bool test option that has soft select, soft detect, and emulated (and advanced) capabilities." ++msgstr "(5/6) Opción de prueba booleana configurable y legible por el software y emulada." + + #: .tmp/test.c:814 + #, no-c-format + msgid "(6/6) Bool soft select soft detect auto" +-msgstr "(6/6) Opción booleana automática" ++msgstr "(6/6) Booleana configurable y legible por software, automática" + + #: .tmp/test.c:815 + #, no-c-format +-msgid "" +-"(6/6) Bool test option that has soft select, soft detect, and automatic " +-"(and advanced) capabilities. This option can be automatically set by the " +-"backend." +-msgstr "" +-"(6/6) Opción booleana modificable. Esta opción puede ser establecida " +-"automáticamente por el backend." ++msgid "(6/6) Bool test option that has soft select, soft detect, and automatic (and advanced) capabilities. This option can be automatically set by the backend." ++msgstr "(6/6) Opción de prueba booleana configurable y legible por el software y emulada. Esta opción puede ser ajustada automáticamente por el motor." + + #: .tmp/test.c:832 + #, no-c-format + msgid "Int test options" +-msgstr "Test de opciones de Enteros" ++msgstr "Opciones de prueba «Entero»" + + #: .tmp/test.c:845 + #, no-c-format + msgid "(1/6) Int" +-msgstr "(1/6) Tipo entero" ++msgstr "(1/6) Entero" + + #: .tmp/test.c:846 + #, no-c-format + msgid "(1/6) Int test option with no unit and no constraint set." +-msgstr "(1/6) Tipo entero sin unidad." ++msgstr "(1/6) Opción de prueba de valor entero sin unidad ni conjunto de restricciones." + + #: .tmp/test.c:861 + #, no-c-format + msgid "(2/6) Int constraint range" +-msgstr "(2/6) Tipo entero en un rango" ++msgstr "(2/6) Entero con rango de restricciones" + + #: .tmp/test.c:862 + #, no-c-format +-msgid "" +-"(2/6) Int test option with unit pixel and constraint range set. Minimum " +-"is 4, maximum 192, and quant is 2." +-msgstr "" +-"(2/6) Tipo entero con unidad pixel en un rango. Mínimo es 4, máximo 192 " +-"y paso 2." ++msgid "(2/6) Int test option with unit pixel and constraint range set. Minimum is 4, maximum 192, and quant is 2." ++msgstr "(2/6) Opción de prueba de valor entero con unidad de píxel y con conjunto de restricciones, El mínimo es 4, el máximo 192 y el salto 2." + + #: .tmp/test.c:878 + #, no-c-format + msgid "(3/6) Int constraint word list" +-msgstr "(3/6) Tipo entero en listado" ++msgstr "(3/6) Entero con restricción de lista de valores" + + #: .tmp/test.c:879 + #, no-c-format + msgid "(3/6) Int test option with unit bits and constraint word list set." +-msgstr "(3/6) Tipo entero con unidad bits en un listado." ++msgstr "(3/6) Opción de prueba de valor entero con unidad bits y restricción de lista de valores" + + #: .tmp/test.c:894 + #, no-c-format + msgid "(4/6) Int array" +-msgstr "(4/6) Vector de enteros" ++msgstr "(4/6) Matriz de enteros" + + #: .tmp/test.c:895 + #, no-c-format +-msgid "" +-"(4/6) Int test option with unit mm and using an array without " +-"constraints." +-msgstr "(4/6) Tipo entero con unidad mm y usando un vector." ++msgid "(4/6) Int test option with unit mm and using an array without constraints." ++msgstr "(4/6) Opción de prueba de valor entero con unidad mm usando una matriz con restricciones." + + #: .tmp/test.c:910 + #, no-c-format + msgid "(5/6) Int array constraint range" +-msgstr "(5/6) Tipo entero en un rango" ++msgstr "(5/6) Matriz de enteros con rango de restricciones" + + #: .tmp/test.c:911 + #, no-c-format +-msgid "" +-"(5/6) Int test option with unit dpi and using an array with a range " +-"constraint. Minimum is 4, maximum 192, and quant is 2." +-msgstr "" +-"(5/6) Tipo entero con unidad ppp y usando un vector con un rango. Mínimo " +-"es 4, máximo 192 y paso 2." ++msgid "(5/6) Int test option with unit dpi and using an array with a range constraint. Minimum is 4, maximum 192, and quant is 2." ++msgstr "(5/6) Opción de prueba de valor entero con unidad dpi y usando una matriz con rango de restricciones. El mínimo es 4, el máximo 192, y el salto 2." + + #: .tmp/test.c:928 + #, no-c-format + msgid "(6/6) Int array constraint word list" +-msgstr "(6/6) Vector de enteros en un listado" ++msgstr "(6/6) Matriz de enteros con restricción de lista de valores" + + #: .tmp/test.c:929 + #, no-c-format +-msgid "" +-"(6/6) Int test option with unit percent and using an array with a word " +-"list constraint." +-msgstr "" +-"(6/6) Tipo entero con unidad porcentaje y usando un vector con una lista." ++msgid "(6/6) Int test option with unit percent and using an array with a word list constraint." ++msgstr "(6/6) Opción de prueba de valor entero con unidad % y usando una matriz con restricciones en una lista de valores," + + #: .tmp/test.c:945 + #, no-c-format + msgid "Fixed test options" +-msgstr "Prueba con tipo Fixed" ++msgstr "Opción de prueba «Real fijo»" + + #: .tmp/test.c:958 + #, no-c-format + msgid "(1/3) Fixed" +-msgstr "(1/3) Tipo Fixed" ++msgstr "(1/3) Real fijo" + + #: .tmp/test.c:959 + #, no-c-format + msgid "(1/3) Fixed test option with no unit and no constraint set." +-msgstr "(1/3) Tipo Fixed, sin unidad." ++msgstr "(1/3) Opción de prueba de valor real (coma fija) sin unidad ni conjunto de restricciones." + + #: .tmp/test.c:974 + #, no-c-format + msgid "(2/3) Fixed constraint range" +-msgstr "(2/3) Tipo Fixed en un rango" ++msgstr "(2/3) Real fijo con rango de restricción" + + #: .tmp/test.c:975 + #, no-c-format +-msgid "" +-"(2/3) Fixed test option with unit microsecond and constraint range set. " +-"Minimum is -42.17, maximum 32767.9999, and quant is 2.0." +-msgstr "" +-"(2/3) Tipo Fixed con unidad microsegundos en un rango. El mínimo es -" +-"42.17, máximo 32767.9999, y el paso es 2.0." ++msgid "(2/3) Fixed test option with unit microsecond and constraint range set. Minimum is -42.17, maximum 32767.9999, and quant is 2.0." ++msgstr "(2/3) Opción de prueba de valor real (coma fija) con unidad de microsegundo y rango de restricción. El mínimo es -42,17, el máximo 32767,9999 y el salto 2,0." + + #: .tmp/test.c:991 + #, no-c-format + msgid "(3/3) Fixed constraint word list" +-msgstr "(3/3) Tipo fixed en listado" ++msgstr "(3/3) Real fijo con restricción de lista de valores" + + #: .tmp/test.c:992 + #, no-c-format + msgid "(3/3) Fixed test option with no unit and constraint word list set." +-msgstr "(3/3) Tipo fixed sin unidad en un listado." ++msgstr "(3/3) Opción de prueba de valor real (coma fija) sin unidad y restringida por un conjunto de valores de una lista." + + #: .tmp/test.c:1007 + #, no-c-format + msgid "String test options" +-msgstr "Test con cadenas de texto" ++msgstr "Opciones de prueba de cadena" + + #: .tmp/test.c:1020 + #, no-c-format +@@ -4622,36 +4660,32 @@ + #: .tmp/test.c:1021 + #, no-c-format + msgid "(1/3) String test option without constraint." +-msgstr "(1/3) Cadena sin tipo." ++msgstr "(1/3) Opciones de prueba de cadena sin restricciones." + + #: .tmp/test.c:1038 + #, no-c-format + msgid "(2/3) String constraint string list" +-msgstr "(2/3) Cadena en listado" ++msgstr "(2/3) Cadena restringida a lista de cadenas" + + #: .tmp/test.c:1039 + #, no-c-format + msgid "(2/3) String test option with string list constraint." +-msgstr "(2/3) Listado de cadenas." ++msgstr "(2/3) Opción de prueba de cadena con restricción de lista de cadenas" + + #: .tmp/test.c:1058 + #, no-c-format + msgid "(3/3) String constraint long string list" +-msgstr "(3/3) Listado extenso de cadenas" ++msgstr "(3/3) Restricción de cadenas lista larga de cadenas" + + #: .tmp/test.c:1059 + #, no-c-format +-msgid "" +-"(3/3) String test option with string list constraint. Contains some more " +-"entries..." +-msgstr "" +-"(3/3) Cadena de texto en una lista de cadenas. Contiene algunas entradas " +-"más..." ++msgid "(3/3) String test option with string list constraint. Contains some more entries..." ++msgstr "(3/3) Opción de prueba de cadena con restricción de lista de cadenas. Contiene más entradas..." + + #: .tmp/test.c:1079 + #, no-c-format + msgid "Button test options" +-msgstr "Prueba de botones" ++msgstr "Opciones de botón de prueba" + + #: .tmp/test.c:1092 + #, no-c-format +@@ -4661,7 +4695,7 @@ + #: .tmp/test.c:1093 + #, no-c-format + msgid "(1/1) Button test option. Prints some text..." +-msgstr "(1/1) Botón de prueba. Imprime algún texto..." ++msgstr "(1/1) Botón de opción de prueba. Imprime algún texto..." + + #: .tmp/u12.c:149 + #, no-c-format +@@ -4671,37 +4705,37 @@ + #: .tmp/umax.c:189 + #, no-c-format + msgid "Color Lineart" +-msgstr "Lineart" ++msgstr "Linea de arte a color" + + #: .tmp/umax.c:190 +-#, fuzzy, no-c-format ++#, no-c-format + msgid "Color Halftone" +-msgstr "Mediotono" ++msgstr "Medios tonos a color" + + #: .tmp/umax.c:236 + #, no-c-format + msgid "Use Image Composition" +-msgstr "Utilizar la composición de imagen" ++msgstr "Usar composición de imagen" + + #: .tmp/umax.c:237 + #, no-c-format + msgid "Bi-level black and white (lineart mode)" +-msgstr "Nivel de blanco y negro (modo lineart)" ++msgstr "Dos niveles blanco y negro (modo de línea de arte)" + + #: .tmp/umax.c:238 + #, no-c-format + msgid "Dithered/halftone black & white (halftone mode)" +-msgstr "Entramado/Mediotono blanco y negro (modo Mediotono)" ++msgstr "Difuminado/medios tonos blanco y negro (modo medios tonos)" + + #: .tmp/umax.c:239 + #, no-c-format + msgid "Multi-level black & white (grayscale mode)" +-msgstr "Nivel de blanco y negro (grises)" ++msgstr "Multinivel blanco y negro (modo de escala de grises)" + + #: .tmp/umax.c:240 + #, no-c-format + msgid "Multi-level RGB color (one pass color)" +-msgstr "Nivel de color RGB (una pasada)" ++msgstr "Multinivel color RGB (color de una pasada)" + + #: .tmp/umax.c:241 + #, no-c-format +@@ -4711,42 +4745,42 @@ + #: .tmp/umax.c:5734 + #, no-c-format + msgid "Disable pre focus" +-msgstr "Desactivar prefocalizado" ++msgstr "Desactivar foco previo" + + #: .tmp/umax.c:5735 + #, no-c-format + msgid "Do not calibrate focus" +-msgstr "No calibrar el foco" ++msgstr "No calibrar foco" + + #: .tmp/umax.c:5746 + #, no-c-format + msgid "Manual pre focus" +-msgstr "Prefocalizado manual" ++msgstr "Foco previo manual" + + #: .tmp/umax.c:5758 + #, no-c-format + msgid "Fix focus position" +-msgstr "Fijar la posición del foco" ++msgstr "Fijar la posición de foco" + + #: .tmp/umax.c:5770 + #, no-c-format + msgid "Lens calibration in doc position" +-msgstr "Calibración de la lente en el documento" ++msgstr "Calibración de lentes en la posición del documento" + + #: .tmp/umax.c:5771 + #, no-c-format + msgid "Calibrate lens focus in document position" +-msgstr "Calibrar el foco de la lente en el documento" ++msgstr "Calibrar las lentes en la posición del documento" + + #: .tmp/umax.c:5782 + #, no-c-format + msgid "Holder focus position 0mm" +-msgstr "Posición del foco a 0mm" ++msgstr "Marcar la posición del foco a 0mm" + + #: .tmp/umax.c:5783 + #, no-c-format + msgid "Use 0mm holder focus position instead of 0.6mm" +-msgstr "Usar posición del foco a 0mm en vez de 0.6mm" ++msgstr "Usar la marca de posición de foco a 0mm en vez de a 0,6mm" + + #: .tmp/umax.c:5886 + #, no-c-format +@@ -4756,54 +4790,55 @@ + #: .tmp/umax.c:5887 + #, no-c-format + msgid "Define calibration mode" +-msgstr "Definir modo de calibración" ++msgstr "Define el modo de calibración" + + #: .tmp/umax_pp.c:638 + #, no-c-format + msgid "Sets lamp on/off" +-msgstr "Establecer lámpara encendida/apagada" ++msgstr "Enciende/apaga la lámpara" + + #: .tmp/umax_pp.c:647 + #, no-c-format + msgid "UTA on" +-msgstr "UTA Activo" ++msgstr "UTA Activado" + + #: .tmp/umax_pp.c:648 + #, no-c-format + msgid "Sets UTA on/off" +-msgstr "Activa/desactiva el adaptador de transparencias" ++msgstr "Ajusta el encendido/apagado UTA" + + #: .tmp/umax_pp.c:769 + #, no-c-format + msgid "Offset" +-msgstr "Offset" ++msgstr "Desplazamiento" + + #: .tmp/umax_pp.c:771 + #, no-c-format + msgid "Color channels offset settings" +-msgstr "Opciones de offset de los canales" ++msgstr "Ajustes del desplazamiento de los canales de color" + + #: .tmp/umax_pp.c:778 + #, no-c-format + msgid "Gray offset" +-msgstr "Offset gris" ++msgstr "Desplazamiento de gris" + + #: .tmp/umax_pp.c:779 + #, no-c-format + msgid "Sets gray channel offset" +-msgstr "Establece el offset del canal gris" ++msgstr "Ajusta el desplazamiento del canal de gris" + + #: .tmp/umax_pp.c:791 + #, no-c-format + msgid "Sets red channel offset" +-msgstr "Establece el offset del canal rojo" ++msgstr "Ajusta el desplazamiento del canal de rojo" + + #: .tmp/umax_pp.c:803 + #, no-c-format + msgid "Sets green channel offset" +-msgstr "Establece el offset del canal verde" ++msgstr "Ajusta el desplazamiento del canal de verde" + + #: .tmp/umax_pp.c:815 + #, no-c-format + msgid "Sets blue channel offset" +-msgstr "Establece el offset del canal azul" ++msgstr "Ajusta el desplazamiento del canal de azul" ++ +diff -urNad sane-backends-1.0.20~/po/sane-backends.gl.po sane-backends-1.0.20/po/sane-backends.gl.po +--- sane-backends-1.0.20~/po/sane-backends.gl.po 1970-01-01 01:00:00.000000000 +0100 ++++ sane-backends-1.0.20/po/sane-backends.gl.po 2009-06-26 13:24:52.664585562 +0200 +@@ -0,0 +1,4845 @@ ++# Galiciantranslation of sane-backends.po ++# Copyright (C) 2002 SANE Project. ++# This file is distributed under the same license as the sane-backends package. ++# Miguel Anxo Bouzada ,2009. ++# Anton Meixome , 2009. ++msgid "" ++msgstr "" ++"Project-Id-Version: sane-backends\n" ++"Report-Msgid-Bugs-To: \n" ++"POT-Creation-Date: 2009-04-29 21:03-0400\n" ++"PO-Revision-Date: 2009-06-25 10:22+0100\n" ++"Last-Translator: Miguel Anxo Bouzada \n" ++"Language-Team: Galician \n" ++"MIME-Version: 1.0\n" ++"Content-Type: text/plain; charset=UTF-8\n" ++"Content-Transfer-Encoding: 8bit\n" ++"X-Generator: KBabel 1.11.4\n" ++"Plural-Forms: nplurals=2: plural=(n != 1);\n" ++"X-Poedit-Language: Galician\n" ++"X-Poedit-Country: SPAIN\n" ++ ++#: .tmp/artec_eplus48u.c:154 ++#: .tmp/canon-sane.c:703 ++#: .tmp/canon-sane.c:1060 ++#: .tmp/canon-sane.c:1269 ++#: .tmp/canon-sane.c:1302 ++#: .tmp/canon-sane.c:1398 ++#: .tmp/canon-sane.c:1623 ++#: .tmp/canon.c:140 ++#: .tmp/canon.c:151 ++#: .tmp/canon.c:157 ++#: .tmp/hp-option.c:2926 ++#: .tmp/hp3900_sane.c:381 ++#: .tmp/hp3900_sane.c:1038 ++#: .tmp/ma1509.c:101 ++#: .tmp/mustek.c:129 ++#: .tmp/mustek.c:134 ++#: .tmp/mustek_usb.c:270 ++#: .tmp/mustek_usb2.c:109 ++#: .tmp/saneopts.h:456 ++#: .tmp/sceptre.h:289 ++#: .tmp/sm3840.c:82 ++#: .tmp/sm3840.c:339 ++#: .tmp/snapscan-options.c:79 ++#: .tmp/umax.c:186 ++#: .tmp/umax_pp.c:138 ++#, no-c-format ++msgid "Lineart" ++msgstr "Liña de arte" ++ ++#: .tmp/artec_eplus48u.c:155 ++#: .tmp/hp-option.c:2928 ++#: .tmp/leo.h:261 ++#: .tmp/teco1.h:292 ++#: .tmp/teco3.h:295 ++#: .tmp/umax_pp.c:138 ++#, no-c-format ++msgid "Grayscale" ++msgstr "Escala de grises" ++ ++#: .tmp/artec_eplus48u.c:156 ++#: .tmp/canon-sane.c:731 ++#: .tmp/canon-sane.c:939 ++#: .tmp/canon-sane.c:1075 ++#: .tmp/canon-sane.c:1317 ++#: .tmp/canon-sane.c:1635 ++#: .tmp/canon-sane.c:1740 ++#: .tmp/canon-sane.c:2057 ++#: .tmp/canon.c:141 ++#: .tmp/canon.c:146 ++#: .tmp/canon.c:151 ++#: .tmp/canon.c:157 ++#: .tmp/epson.c:490 ++#: .tmp/epson2.c:201 ++#: .tmp/hp-option.c:2929 ++#: .tmp/hp3900_sane.c:381 ++#: .tmp/hp3900_sane.c:1034 ++#: .tmp/hp5590.c:87 ++#: .tmp/leo.h:262 ++#: .tmp/ma1509.c:101 ++#: .tmp/mustek.c:130 ++#: .tmp/mustek.c:134 ++#: .tmp/mustek_usb.c:268 ++#: .tmp/pixma.c:644 ++#: .tmp/pixma_sane_options.c:70 ++#: .tmp/saneopts.h:454 ++#: .tmp/sceptre.h:292 ++#: .tmp/sm3840.c:81 ++#: .tmp/snapscan-options.c:76 ++#: .tmp/teco1.h:293 ++#: .tmp/teco3.h:296 ++#: .tmp/test.c:126 ++#: .tmp/umax.c:191 ++#: .tmp/umax_pp.c:138 ++#, no-c-format ++msgid "Color" ++msgstr "Cor" ++ ++#: .tmp/artec_eplus48u.c:2805 ++#: .tmp/canon.c:1482 ++#: .tmp/genesys.c:5002 ++#: .tmp/gt68xx.c:667 ++#: .tmp/hp-option.c:2952 ++#: .tmp/leo.c:871 ++#: .tmp/ma1509.c:597 ++#: .tmp/matsushita.c:1189 ++#: .tmp/microtek2.h:601 ++#: .tmp/mustek.c:4407 ++#: .tmp/mustek_usb.c:353 ++#: .tmp/mustek_usb2.c:431 ++#: .tmp/niash.c:756 ++#: .tmp/plustek.c:853 ++#: .tmp/plustek_pp.c:792 ++#: .tmp/saneopts.h:158 ++#: .tmp/sceptre.c:750 ++#: .tmp/snapscan-options.c:561 ++#: .tmp/stv680.c:1067 ++#: .tmp/teco1.c:1143 ++#: .tmp/teco2.c:1962 ++#: .tmp/teco3.c:968 ++#: .tmp/u12.c:592 ++#: .tmp/umax.c:5227 ++#: .tmp/umax_pp.c:627 ++#, no-c-format ++msgid "Enhancement" ++msgstr "Optimización" ++ ++#: .tmp/artec_eplus48u.c:2874 ++#: .tmp/pnm.c:282 ++#, no-c-format ++msgid "Defaults" ++msgstr "Predeterminados" ++ ++#: .tmp/artec_eplus48u.c:2876 ++#, no-c-format ++msgid "Set default values for enhancement controls." ++msgstr "Axustar valores predeterminados para os controis de optimización." ++ ++#: .tmp/artec_eplus48u.c:2884 ++#: .tmp/epson.c:3288 ++#: .tmp/epson2.c:2149 ++#: .tmp/genesys.c:4951 ++#: .tmp/gt68xx.c:698 ++#: .tmp/hp-option.c:3296 ++#: .tmp/hp3500.c:976 ++#: .tmp/leo.c:823 ++#: .tmp/lexmark.c:214 ++#: .tmp/ma1509.c:549 ++#: .tmp/matsushita.c:1135 ++#: .tmp/microtek2.h:600 ++#: .tmp/mustek.c:4359 ++#: .tmp/mustek_usb.c:305 ++#: .tmp/mustek_usb2.c:465 ++#: .tmp/pixma_sane_options.c:144 ++#: .tmp/plustek.c:807 ++#: .tmp/plustek_pp.c:746 ++#: .tmp/saneopts.h:157 ++#: .tmp/sceptre.c:702 ++#: .tmp/snapscan-options.c:494 ++#: .tmp/teco1.c:1095 ++#: .tmp/teco2.c:1914 ++#: .tmp/teco3.c:920 ++#: .tmp/test.c:646 ++#: .tmp/u12.c:546 ++#: .tmp/umax.c:5177 ++#: .tmp/umax_pp.c:578 ++#, no-c-format ++msgid "Geometry" ++msgstr "Xeometría" ++ ++#: .tmp/artec_eplus48u.c:2932 ++#: .tmp/canon.c:1600 ++#, no-c-format ++msgid "Calibration" ++msgstr "Calibración" ++ ++#: .tmp/artec_eplus48u.c:2941 ++#, no-c-format ++msgid "Calibrate before next scan" ++msgstr "Calibrar antes do seguinte escaneo" ++ ++#: .tmp/artec_eplus48u.c:2943 ++#, no-c-format ++msgid "If enabled, the device will be calibrated before the next scan. Otherwise, calibration is performed only before the first start." ++msgstr "Se se activa, o dispositivo hase calibrar antes do seguinte escaneo. Noutro caso, a calibración farase unicamente antes do primeiro escaneo." ++ ++#: .tmp/artec_eplus48u.c:2954 ++#, no-c-format ++msgid "Only perform shading-correction" ++msgstr "Facer só correccións de sombras" ++ ++#: .tmp/artec_eplus48u.c:2956 ++#, no-c-format ++msgid "If enabled, only the shading correction is performed during calibration. The default values for gain, offset and exposure time, either build-in or from the configuration file, are used." ++msgstr "Se está activado, só se farán correccións de sombras durante a calibración. Usaranse os valores predeterminados de ganancia, desprazamento e tempo de exposición, xa sexan os que trae incorporados o programa ou os do ficheiro de configuración." ++ ++#: .tmp/artec_eplus48u.c:2967 ++#, no-c-format ++msgid "Button state" ++msgstr "Botón de estado" ++ ++#: .tmp/avision.h:766 ++#, no-c-format ++msgid "Number of the frame to scan" ++msgstr "Número de mostra a escanear" ++ ++#: .tmp/avision.h:767 ++#, no-c-format ++msgid "Selects the number of the frame to scan" ++msgstr "Escolle o número de mostra a escanear" ++ ++#: .tmp/avision.h:770 ++#, no-c-format ++msgid "Duplex scan" ++msgstr "Escaneo dúplex" ++ ++#: .tmp/avision.h:771 ++#, no-c-format ++msgid "Duplex scan provide a scan of the front and back side of the document" ++msgstr "O escaneo dúplex fornece un escaneo do anverso e o reverso do documento" ++ ++#: .tmp/canon-sane.c:674 ++#: .tmp/canon.c:163 ++#, no-c-format ++msgid "Correction according to transparency ratio" ++msgstr "Corrección conforme coa taxa de transparencia" ++ ++#: .tmp/canon-sane.c:680 ++#: .tmp/canon.c:162 ++#, no-c-format ++msgid "Correction according to film type" ++msgstr "Corrección conforme co tipo de filme" ++ ++#: .tmp/canon-sane.c:704 ++#: .tmp/canon-sane.c:1061 ++#: .tmp/canon-sane.c:1270 ++#: .tmp/canon-sane.c:1307 ++#: .tmp/canon.c:140 ++#: .tmp/hp-option.c:2927 ++#: .tmp/mustek.c:129 ++#: .tmp/plustek_pp.c:182 ++#: .tmp/plustek_pp.c:191 ++#: .tmp/sceptre.h:290 ++#: .tmp/sm3840.c:82 ++#: .tmp/sm3840.c:337 ++#: .tmp/snapscan-options.c:77 ++#: .tmp/umax.c:187 ++#, no-c-format ++msgid "Halftone" ++msgstr "Medios tons" ++ ++#: .tmp/canon-sane.c:732 ++#: .tmp/canon-sane.c:940 ++#: .tmp/canon-sane.c:1076 ++#: .tmp/canon-sane.c:1318 ++#: .tmp/canon-sane.c:1487 ++#: .tmp/canon-sane.c:1636 ++#: .tmp/canon.c:152 ++#, no-c-format ++msgid "Fine color" ++msgstr "Cor fina" ++ ++#: .tmp/canon-sane.c:776 ++#: .tmp/canon.c:168 ++#, no-c-format ++msgid "Negatives" ++msgstr "Negativos" ++ ++#: .tmp/canon-sane.c:937 ++#: .tmp/canon-sane.c:1069 ++#: .tmp/canon-sane.c:1312 ++#: .tmp/canon-sane.c:1633 ++#: .tmp/canon-sane.c:2070 ++#: .tmp/canon.c:140 ++#: .tmp/canon.c:151 ++#: .tmp/canon.c:157 ++#: .tmp/canon.c:566 ++#: .tmp/epson.c:489 ++#: .tmp/epson2.c:200 ++#: .tmp/hp3900_sane.c:381 ++#: .tmp/hp3900_sane.c:1036 ++#: .tmp/ma1509.c:101 ++#: .tmp/mustek.c:129 ++#: .tmp/mustek.c:134 ++#: .tmp/mustek_usb.c:269 ++#: .tmp/pixma.c:647 ++#: .tmp/saneopts.h:455 ++#: .tmp/sceptre.h:291 ++#: .tmp/sm3840.c:81 ++#: .tmp/sm3840.c:335 ++#: .tmp/snapscan-options.c:78 ++#: .tmp/test.c:126 ++#: .tmp/umax.c:188 ++#, no-c-format ++msgid "Gray" ++msgstr "Gris" ++ ++#: .tmp/canon-sane.c:1323 ++#: .tmp/canon.c:146 ++#, no-c-format ++msgid "Raw" ++msgstr "En bruto" ++ ++#: .tmp/canon.c:161 ++#, no-c-format ++msgid "No transparency correction" ++msgstr "Sen corrección de transparencia" ++ ++#: .tmp/canon.c:168 ++#, no-c-format ++msgid "Slides" ++msgstr "Diapositivas" ++ ++#: .tmp/canon.c:178 ++#: .tmp/matsushita.c:178 ++#, no-c-format ++msgid "Automatic" ++msgstr "Automático" ++ ++#: .tmp/canon.c:178 ++#, no-c-format ++msgid "Normal speed" ++msgstr "Velocidade normal" ++ ++#: .tmp/canon.c:179 ++#, no-c-format ++msgid "1/2 normal speed" ++msgstr "1/2 da velocidade normal" ++ ++#: .tmp/canon.c:179 ++#, no-c-format ++msgid "1/3 normal speed" ++msgstr "1/3 da velocidade normal" ++ ++#: .tmp/canon.c:362 ++#, no-c-format ++msgid "rounded parameter" ++msgstr "parámetro redondeado" ++ ++#: .tmp/canon.c:365 ++#: .tmp/canon.c:381 ++#: .tmp/canon.c:416 ++#: .tmp/canon.c:466 ++#: .tmp/canon.c:484 ++#: .tmp/canon.c:527 ++#, no-c-format ++msgid "unknown" ++msgstr "descoñecido" ++ ++#: .tmp/canon.c:375 ++#, no-c-format ++msgid "ADF jam" ++msgstr "Atoamento no alimentador" ++ ++#: .tmp/canon.c:378 ++#, no-c-format ++msgid "ADF cover open" ++msgstr "A tapa do alimentador está aberta" ++ ++#: .tmp/canon.c:391 ++#, no-c-format ++msgid "lamp failure" ++msgstr "fallo de lámpada" ++ ++#: .tmp/canon.c:394 ++#, no-c-format ++msgid "scan head positioning error" ++msgstr "erro no posicionamento do cabezal de escaneo" ++ ++#: .tmp/canon.c:397 ++#, no-c-format ++msgid "CPU check error" ++msgstr "erro de verificación de CPU" ++ ++#: .tmp/canon.c:400 ++#, no-c-format ++msgid "RAM check error" ++msgstr "erro de verificación de RAM" ++ ++#: .tmp/canon.c:403 ++#, no-c-format ++msgid "ROM check error" ++msgstr "erro de verificación de ROM" ++ ++#: .tmp/canon.c:406 ++#, no-c-format ++msgid "hardware check error" ++msgstr "erro de verificación de hardware" ++ ++#: .tmp/canon.c:409 ++#, no-c-format ++msgid "transparency unit lamp failure" ++msgstr "fallo da lámpada da unidade de transparencias" ++ ++#: .tmp/canon.c:412 ++#, no-c-format ++msgid "transparency unit scan head positioning failure" ++msgstr "fallo de posición do cabezal de escaneo da unidade de transparencias" ++ ++#: .tmp/canon.c:426 ++#, no-c-format ++msgid "parameter list length error" ++msgstr "erro na lonxitude da lista de parámetros" ++ ++#: .tmp/canon.c:430 ++#, no-c-format ++msgid "invalid command operation code" ++msgstr "código de orde de operación incorrecto" ++ ++#: .tmp/canon.c:434 ++#, no-c-format ++msgid "invalid field in CDB" ++msgstr "campo incorrecto en CDB" ++ ++#: .tmp/canon.c:438 ++#, no-c-format ++msgid "unsupported LUN" ++msgstr "LUN non é compatíbel" ++ ++#: .tmp/canon.c:442 ++#, no-c-format ++msgid "invalid field in parameter list" ++msgstr "campo incorrecto na lista de parámetros" ++ ++#: .tmp/canon.c:446 ++#, no-c-format ++msgid "command sequence error" ++msgstr "erro na secuencia de ordes" ++ ++#: .tmp/canon.c:450 ++#, no-c-format ++msgid "too many windows specified" ++msgstr "especifícanse demasiadas xanelas" ++ ++#: .tmp/canon.c:454 ++#, no-c-format ++msgid "medium not present" ++msgstr "non se atopa o soporte" ++ ++#: .tmp/canon.c:458 ++#, no-c-format ++msgid "invalid bit IDENTIFY message" ++msgstr "mensaxe de bit de IDENTIFICACIÓN incorrecta" ++ ++#: .tmp/canon.c:462 ++#, no-c-format ++msgid "option not connect" ++msgstr "a opción non conecta" ++ ++#: .tmp/canon.c:476 ++#, no-c-format ++msgid "power on reset / bus device reset" ++msgstr "reiniciar o acendido / reiniciar o bus do dispositivo" ++ ++#: .tmp/canon.c:480 ++#, no-c-format ++msgid "parameter changed by another initiator" ++msgstr "parámetro cambiado por outro iniciador" ++ ++#: .tmp/canon.c:494 ++#, no-c-format ++msgid "no additional sense information" ++msgstr "información sen senso adicional" ++ ++#: .tmp/canon.c:498 ++#, no-c-format ++msgid "reselect failure" ++msgstr "Fallou a volta a escoller" ++ ++#: .tmp/canon.c:502 ++#, no-c-format ++msgid "SCSI parity error" ++msgstr "erro de paridade SCSI" ++ ++#: .tmp/canon.c:506 ++#, no-c-format ++msgid "initiator detected error message received" ++msgstr "o iniciador detectou a recepción dunha mensaxe de erro" ++ ++#: .tmp/canon.c:511 ++#, no-c-format ++msgid "invalid message error" ++msgstr "mensaxe de erro incorrecta" ++ ++#: .tmp/canon.c:515 ++#, no-c-format ++msgid "timeout error" ++msgstr "erro de límite de tempo" ++ ++#: .tmp/canon.c:519 ++#, no-c-format ++msgid "transparency unit shading error" ++msgstr "erro de sombreado na unidade de transparencias" ++ ++#: .tmp/canon.c:523 ++#, no-c-format ++msgid "lamp not stabilized" ++msgstr "lámpada non estabilizada" ++ ++#: .tmp/canon.c:537 ++#, no-c-format ++msgid "problem not analyzed (unknown SCSI class)" ++msgstr "problema sen analizar (clase de SCSI descoñecida)" ++ ++#: .tmp/canon.c:855 ++#: .tmp/canon.c:870 ++#, no-c-format ++msgid "film scanner" ++msgstr "escáner de filmes" ++ ++#: .tmp/canon.c:885 ++#: .tmp/canon.c:900 ++#: .tmp/canon.c:915 ++#: .tmp/hp3900_sane.c:1681 ++#: .tmp/plustek.c:1334 ++#: .tmp/plustek_pp.c:1014 ++#: .tmp/sceptre.c:593 ++#: .tmp/teco2.c:1836 ++#: .tmp/u12.c:851 ++#, no-c-format ++msgid "flatbed scanner" ++msgstr "escáner plano" ++ ++#: .tmp/canon.c:1133 ++#: .tmp/leo.c:781 ++#: .tmp/pixma_sane_options.c:40 ++#: .tmp/saneopts.h:165 ++#, no-c-format ++msgid "Scan mode" ++msgstr "Modo de escaneo" ++ ++#: .tmp/canon.c:1171 ++#: .tmp/epson.c:3376 ++#: .tmp/epson2.c:2223 ++#, no-c-format ++msgid "Film type" ++msgstr "Tipo de filme" ++ ++#: .tmp/canon.c:1172 ++#, no-c-format ++msgid "Selects the film type, i.e. negatives or slides" ++msgstr "Escoller o tipo de filme, p.e. negativo ou diapositiva" ++ ++#: .tmp/canon.c:1184 ++#, no-c-format ++msgid "Negative film type" ++msgstr "Tipo de filme negativo" ++ ++#: .tmp/canon.c:1185 ++#, no-c-format ++msgid "Selects the negative film type" ++msgstr "Selecciona o tipo de negativo de filme" ++ ++#: .tmp/canon.c:1209 ++#: .tmp/saneopts.h:173 ++#, no-c-format ++msgid "Scan resolution" ++msgstr "Resolución de escaneo" ++ ++#: .tmp/canon.c:1224 ++#, no-c-format ++msgid "Hardware resolution" ++msgstr "Resolución do hardware" ++ ++#: .tmp/canon.c:1225 ++#, no-c-format ++msgid "Use only hardware resolutions" ++msgstr "Usar só resolucións do hardware" ++ ++#: .tmp/canon.c:1306 ++#, no-c-format ++msgid "Focus" ++msgstr "Enfoque" ++ ++#: .tmp/canon.c:1316 ++#, no-c-format ++msgid "Auto focus" ++msgstr "Enfoque automático" ++ ++#: .tmp/canon.c:1317 ++#, no-c-format ++msgid "Enable/disable auto focus" ++msgstr "Activar/desactivar enfoque automático" ++ ++#: .tmp/canon.c:1324 ++#, no-c-format ++msgid "Auto focus only once" ++msgstr "Enfoque automático só unha vez" ++ ++#: .tmp/canon.c:1325 ++#, no-c-format ++msgid "Do auto focus only once between ejects" ++msgstr "Facer enfoque automático só unha vez entre expulsións" ++ ++#: .tmp/canon.c:1333 ++#, no-c-format ++msgid "Manual focus position" ++msgstr "Posición de foco manual" ++ ++#: .tmp/canon.c:1334 ++#, no-c-format ++msgid "Set the optical system's focus position by hand (default: 128)." ++msgstr "Axustar o sistema óptico de foco na posición manual (predeterminado: 128)." ++ ++#: .tmp/canon.c:1344 ++#, no-c-format ++msgid "Scan margins" ++msgstr "Marxes de escaneo" ++ ++#: .tmp/canon.c:1391 ++#, no-c-format ++msgid "Extra color adjustments" ++msgstr "Axustes de cor extra" ++ ++#: .tmp/canon.c:1522 ++#: .tmp/epson.c:3195 ++#: .tmp/epson2.c:2103 ++#, no-c-format ++msgid "Mirror image" ++msgstr "Reflectir a imaxe horizontalmente" ++ ++#: .tmp/canon.c:1523 ++#, no-c-format ++msgid "Mirror the image horizontally" ++msgstr "Inverter a imaxe horizontalmente" ++ ++#: .tmp/canon.c:1592 ++#, no-c-format ++msgid "Auto exposure" ++msgstr "Exposición automática" ++ ++#: .tmp/canon.c:1593 ++#, no-c-format ++msgid "Enable/disable the auto exposure feature" ++msgstr "Activar/desactivar a característica de exposición automática" ++ ++#: .tmp/canon.c:1609 ++#, no-c-format ++msgid "Calibration now" ++msgstr "Calibrar agora" ++ ++#: .tmp/canon.c:1610 ++#, no-c-format ++msgid "Execute calibration *now*" ++msgstr "Executar a calibración *agora*" ++ ++#: .tmp/canon.c:1620 ++#, no-c-format ++msgid "Self diagnosis" ++msgstr "Diagnose automatica" ++ ++#: .tmp/canon.c:1621 ++#, no-c-format ++msgid "Perform scanner self diagnosis" ++msgstr "Facer unha diagnose automatica do escáner" ++ ++#: .tmp/canon.c:1632 ++#, no-c-format ++msgid "Reset scanner" ++msgstr "Reiniciar o escáner" ++ ++#: .tmp/canon.c:1633 ++#, no-c-format ++msgid "Reset the scanner" ++msgstr "Reiniciar o escáner" ++ ++#: .tmp/canon.c:1643 ++#, no-c-format ++msgid "Medium handling" ++msgstr "Manexar o soporte" ++ ++#: .tmp/canon.c:1652 ++#, no-c-format ++msgid "Eject film after each scan" ++msgstr "Expulsar o filme despois de cada escaneo" ++ ++#: .tmp/canon.c:1653 ++#, no-c-format ++msgid "Automatically eject the film from the device after each scan" ++msgstr "Expulsar automaticamente o filme do dispositivo despois de cada escaneo" ++ ++#: .tmp/canon.c:1662 ++#, no-c-format ++msgid "Eject film before exit" ++msgstr "Expulsar o filme antes de saír" ++ ++#: .tmp/canon.c:1663 ++#, no-c-format ++msgid "Automatically eject the film from the device before exiting the program" ++msgstr "Expulsar automaticamente o filme do dispositivo antes de saír do programa" ++ ++#: .tmp/canon.c:1672 ++#, no-c-format ++msgid "Eject film now" ++msgstr "Expulsar o filme agora" ++ ++#: .tmp/canon.c:1673 ++#, no-c-format ++msgid "Eject the film *now*" ++msgstr "Expulsar o filme *agora*" ++ ++#: .tmp/canon.c:1682 ++#, no-c-format ++msgid "Document feeder extras" ++msgstr "Alimentador de documentos extras" ++ ++#: .tmp/canon.c:1689 ++#, no-c-format ++msgid "Flatbed only" ++msgstr "Só plano" ++ ++#: .tmp/canon.c:1690 ++#, no-c-format ++msgid "Disable auto document feeder and use flatbed only" ++msgstr "Desactivar o alimentador automático de documentos e usar só o plano" ++ ++#: .tmp/canon.c:1700 ++#: .tmp/canon.c:1710 ++#, no-c-format ++msgid "Transparency unit" ++msgstr "Unidade de transparencias" ++ ++#: .tmp/canon.c:1711 ++#, no-c-format ++msgid "Switch on/off the transparency unit (FAU, film adapter unit)" ++msgstr "Activar/desactivar a unidade de transparencias (FAU, unidade adaptadora de filme)" ++ ++#: .tmp/canon.c:1721 ++#, no-c-format ++msgid "Negative film" ++msgstr "Filme en negativo" ++ ++#: .tmp/canon.c:1722 ++#, no-c-format ++msgid "Positive or negative film" ++msgstr "Filme en positivo ou en negativo" ++ ++#: .tmp/canon.c:1731 ++#, no-c-format ++msgid "Density control" ++msgstr "Control de densidade" ++ ++#: .tmp/canon.c:1732 ++#, no-c-format ++msgid "Set density control mode" ++msgstr "Axustar o modo de control de densidade" ++ ++#: .tmp/canon.c:1743 ++#, no-c-format ++msgid "Transparency ratio" ++msgstr "Taxa de transparencia" ++ ++#: .tmp/canon.c:1757 ++#, no-c-format ++msgid "Select film type" ++msgstr "Escoller tipo de filme" ++ ++#: .tmp/canon.c:1758 ++#, no-c-format ++msgid "Select the film type" ++msgstr "Escoller o tipo de filme" ++ ++#: .tmp/canon630u.c:158 ++#, no-c-format ++msgid "Calibrate Scanner" ++msgstr "Calibrar o escáner" ++ ++#: .tmp/canon630u.c:159 ++#, no-c-format ++msgid "Force scanner calibration before scan" ++msgstr "Forza a calibrar o escáner antes de facer o escaneo" ++ ++#: .tmp/canon630u.c:258 ++#: .tmp/umax1220u.c:208 ++#, no-c-format ++msgid "Grayscale scan" ++msgstr "Escaneo en escala de grises" ++ ++#: .tmp/canon630u.c:259 ++#: .tmp/umax1220u.c:209 ++#, no-c-format ++msgid "Do a grayscale rather than color scan" ++msgstr "Escanea en escala de grises, non en cores" ++ ++#: .tmp/canon630u.c:305 ++#, no-c-format ++msgid "Analog Gain" ++msgstr "Ganancia analóxica" ++ ++#: .tmp/canon630u.c:306 ++#, no-c-format ++msgid "Increase or decrease the analog gain of the CCD array" ++msgstr "Aumenta o diminúe a ganancia analóxica da gama CCD" ++ ++#: .tmp/canon630u.c:346 ++#: .tmp/epson.h:68 ++#: .tmp/epson2.h:64 ++#, no-c-format ++msgid "Gamma Correction" ++msgstr "Corrección gamma" ++ ++#: .tmp/canon630u.c:347 ++#, no-c-format ++msgid "Selects the gamma corrected transfer curve" ++msgstr "Selecciona a curva de transferencia da corrección gamma" ++ ++#: .tmp/epson.c:488 ++#: .tmp/epson2.c:199 ++#, no-c-format ++msgid "Binary" ++msgstr "Binaria" ++ ++#: .tmp/epson.c:495 ++#: .tmp/epson2.c:206 ++#, no-c-format ++msgid "Simplex" ++msgstr "Unha cara" ++ ++#: .tmp/epson.c:496 ++#: .tmp/epson2.c:207 ++#: .tmp/matsushita.h:219 ++#, no-c-format ++msgid "Duplex" ++msgstr "Duas caras" ++ ++#: .tmp/epson.c:505 ++#: .tmp/epson2.c:213 ++#: .tmp/genesys.c:106 ++#: .tmp/gt68xx.c:146 ++#: .tmp/hp3900_sane.c:418 ++#: .tmp/hp3900_sane.c:427 ++#: .tmp/hp3900_sane.c:1017 ++#: .tmp/hp5590.c:81 ++#: .tmp/ma1509.c:106 ++#: .tmp/mustek.c:152 ++#: .tmp/mustek.c:156 ++#: .tmp/mustek.c:160 ++#: .tmp/pixma.c:652 ++#: .tmp/pixma_sane_options.c:85 ++#: .tmp/snapscan-options.c:82 ++#: .tmp/test.c:191 ++#: .tmp/umax.c:182 ++#, no-c-format ++msgid "Flatbed" ++msgstr "Plano" ++ ++#: .tmp/epson.c:506 ++#: .tmp/epson2.c:214 ++#: .tmp/pixma.c:669 ++#, no-c-format ++msgid "Transparency Unit" ++msgstr "Unidade de transparencias" ++ ++#: .tmp/epson.c:507 ++#: .tmp/epson2.c:215 ++#: .tmp/mustek.c:156 ++#: .tmp/pixma.c:657 ++#: .tmp/test.c:191 ++#: .tmp/umax.c:184 ++#, no-c-format ++msgid "Automatic Document Feeder" ++msgstr "Alimentador automático de documentos (ADF)" ++ ++#: .tmp/epson.c:527 ++#: .tmp/epson2.c:235 ++#, no-c-format ++msgid "Positive Film" ++msgstr "Filme en positivo" ++ ++#: .tmp/epson.c:528 ++#: .tmp/epson2.c:236 ++#, no-c-format ++msgid "Negative Film" ++msgstr "Filme en negativo" ++ ++#: .tmp/epson.c:533 ++#: .tmp/epson2.c:245 ++#, no-c-format ++msgid "Focus on glass" ++msgstr "Enfoque no cristal" ++ ++#: .tmp/epson.c:534 ++#: .tmp/epson2.c:246 ++#, no-c-format ++msgid "Focus 2.5mm above glass" ++msgstr "Enfoque a 2.5mm sobre o cristal" ++ ++#: .tmp/epson.c:560 ++#: .tmp/epson.c:568 ++#: .tmp/epson.c:580 ++#: .tmp/epson.c:602 ++#: .tmp/epson2.c:268 ++#: .tmp/epson2.c:276 ++#: .tmp/epson2.c:288 ++#: .tmp/epson2.c:310 ++#: .tmp/leo.c:109 ++#: .tmp/matsushita.c:138 ++#: .tmp/matsushita.c:159 ++#: .tmp/matsushita.c:191 ++#: .tmp/matsushita.c:213 ++#: .tmp/snapscan-options.c:87 ++#, no-c-format ++msgid "None" ++msgstr "Ningún" ++ ++#: .tmp/epson.c:561 ++#: .tmp/epson.c:569 ++#: .tmp/epson.c:581 ++#: .tmp/epson2.c:269 ++#: .tmp/epson2.c:277 ++#: .tmp/epson2.c:289 ++#, no-c-format ++msgid "Halftone A (Hard Tone)" ++msgstr "Medios tons A (tons duros)" ++ ++#: .tmp/epson.c:562 ++#: .tmp/epson.c:570 ++#: .tmp/epson.c:582 ++#: .tmp/epson2.c:270 ++#: .tmp/epson2.c:278 ++#: .tmp/epson2.c:290 ++#, no-c-format ++msgid "Halftone B (Soft Tone)" ++msgstr "Medios tons B (tons suaves)" ++ ++#: .tmp/epson.c:563 ++#: .tmp/epson.c:571 ++#: .tmp/epson.c:583 ++#: .tmp/epson2.c:271 ++#: .tmp/epson2.c:279 ++#: .tmp/epson2.c:291 ++#, no-c-format ++msgid "Halftone C (Net Screen)" ++msgstr "Medios tons C (matizado)" ++ ++#: .tmp/epson.c:572 ++#: .tmp/epson.c:584 ++#: .tmp/epson2.c:280 ++#: .tmp/epson2.c:292 ++#, no-c-format ++msgid "Dither A (4x4 Bayer)" ++msgstr "Trama A (4x4 Bayer)" ++ ++#: .tmp/epson.c:573 ++#: .tmp/epson.c:585 ++#: .tmp/epson2.c:281 ++#: .tmp/epson2.c:293 ++#, no-c-format ++msgid "Dither B (4x4 Spiral)" ++msgstr "Trama B (4x4 espiral)" ++ ++#: .tmp/epson.c:574 ++#: .tmp/epson.c:586 ++#: .tmp/epson2.c:282 ++#: .tmp/epson2.c:294 ++#, no-c-format ++msgid "Dither C (4x4 Net Screen)" ++msgstr "Trama C (4x4 matizado)" ++ ++#: .tmp/epson.c:575 ++#: .tmp/epson.c:587 ++#: .tmp/epson2.c:283 ++#: .tmp/epson2.c:295 ++#, no-c-format ++msgid "Dither D (8x4 Net Screen)" ++msgstr "Trama D (8x4 matizado)" ++ ++#: .tmp/epson.c:588 ++#: .tmp/epson2.c:296 ++#, no-c-format ++msgid "Text Enhanced Technology" ++msgstr "Tecnoloxia de optimización de texto" ++ ++#: .tmp/epson.c:589 ++#: .tmp/epson2.c:297 ++#, no-c-format ++msgid "Download pattern A" ++msgstr "Descargar patrón A" ++ ++#: .tmp/epson.c:590 ++#: .tmp/epson2.c:298 ++#, no-c-format ++msgid "Download pattern B" ++msgstr "Descargar patrón B" ++ ++#: .tmp/epson.c:603 ++#: .tmp/epson.c:3086 ++#: .tmp/epson2.c:311 ++#: .tmp/epson2.c:2015 ++#: .tmp/genesys.c:99 ++#: .tmp/gt68xx_low.h:135 ++#: .tmp/hp-option.c:3092 ++#, no-c-format ++msgid "Red" ++msgstr "Vermello" ++ ++#: .tmp/epson.c:604 ++#: .tmp/epson.c:3082 ++#: .tmp/epson2.c:312 ++#: .tmp/epson2.c:2011 ++#: .tmp/genesys.c:100 ++#: .tmp/gt68xx_low.h:136 ++#: .tmp/hp-option.c:3093 ++#, no-c-format ++msgid "Green" ++msgstr "Verde" ++ ++#: .tmp/epson.c:605 ++#: .tmp/epson.c:3090 ++#: .tmp/epson2.c:313 ++#: .tmp/epson2.c:2019 ++#: .tmp/genesys.c:101 ++#: .tmp/gt68xx_low.h:137 ++#: .tmp/hp-option.c:3094 ++#, no-c-format ++msgid "Blue" ++msgstr "Azul" ++ ++#: .tmp/epson.c:635 ++#: .tmp/epson2.c:342 ++#, no-c-format ++msgid "No Correction" ++msgstr "Sen corrección" ++ ++#: .tmp/epson.c:636 ++#: .tmp/epson.c:661 ++#: .tmp/epson2.c:343 ++#: .tmp/epson2.c:367 ++#, no-c-format ++msgid "User defined" ++msgstr "Definida polo usuario" ++ ++#: .tmp/epson.c:637 ++#: .tmp/epson2.c:344 ++#, no-c-format ++msgid "Impact-dot printers" ++msgstr "Impresoras matriciais" ++ ++#: .tmp/epson.c:638 ++#: .tmp/epson2.c:345 ++#, no-c-format ++msgid "Thermal printers" ++msgstr "Impresoras térmicas" ++ ++#: .tmp/epson.c:639 ++#: .tmp/epson2.c:346 ++#, no-c-format ++msgid "Ink-jet printers" ++msgstr "Impresoras de inxección de tinta" ++ ++#: .tmp/epson.c:640 ++#: .tmp/epson2.c:347 ++#, no-c-format ++msgid "CRT monitors" ++msgstr "Monitores CRT" ++ ++#: .tmp/epson.c:660 ++#: .tmp/epson2.c:366 ++#: .tmp/hp-option.c:3225 ++#: .tmp/test.c:142 ++#, no-c-format ++msgid "Default" ++msgstr "Predeterminado" ++ ++#: .tmp/epson.c:662 ++#: .tmp/epson2.c:368 ++#, no-c-format ++msgid "High density printing" ++msgstr "Impresión de alta densidade" ++ ++#: .tmp/epson.c:663 ++#: .tmp/epson2.c:369 ++#, no-c-format ++msgid "Low density printing" ++msgstr "Impresión de baixa densidade" ++ ++#: .tmp/epson.c:664 ++#: .tmp/epson2.c:370 ++#, no-c-format ++msgid "High contrast printing" ++msgstr "Impresión de alto contraste" ++ ++#: .tmp/epson.c:682 ++#: .tmp/epson2.c:388 ++#, no-c-format ++msgid "User defined (Gamma=1.0)" ++msgstr "Definido polo usuario (gamma=1.0)" ++ ++#: .tmp/epson.c:683 ++#: .tmp/epson2.c:389 ++#, no-c-format ++msgid "User defined (Gamma=1.8)" ++msgstr "Definido polo usuario (gamma=1.8)" ++ ++#: .tmp/epson.c:761 ++#, no-c-format ++msgid "CD" ++msgstr "CD" ++ ++#: .tmp/epson.c:762 ++#, no-c-format ++msgid "A5 portrait" ++msgstr "A5 vertical" ++ ++#: .tmp/epson.c:763 ++#, no-c-format ++msgid "A5 landscape" ++msgstr "A5 apaisado" ++ ++#: .tmp/epson.c:764 ++#, no-c-format ++msgid "Letter" ++msgstr "Carta" ++ ++#: .tmp/epson.c:765 ++#, no-c-format ++msgid "A4" ++msgstr "A4" ++ ++#: .tmp/epson.c:766 ++#, no-c-format ++msgid "Max" ++msgstr "Máx" ++ ++#: .tmp/epson.c:2803 ++#: .tmp/epson2.c:1733 ++#: .tmp/genesys.c:4882 ++#: .tmp/gt68xx.c:455 ++#: .tmp/hp-option.c:2913 ++#: .tmp/ma1509.c:499 ++#: .tmp/matsushita.c:1084 ++#: .tmp/microtek2.h:599 ++#: .tmp/mustek.c:4201 ++#: .tmp/mustek_usb.c:260 ++#: .tmp/mustek_usb2.c:344 ++#: .tmp/niash.c:736 ++#: .tmp/plustek.c:720 ++#: .tmp/plustek_pp.c:657 ++#: .tmp/sceptre.c:673 ++#: .tmp/snapscan-options.c:315 ++#: .tmp/stv680.c:1030 ++#: .tmp/teco2.c:1886 ++#: .tmp/test.c:305 ++#: .tmp/u12.c:473 ++#: .tmp/umax.c:5055 ++#, no-c-format ++msgid "Scan Mode" ++msgstr "Modo de escaneo" ++ ++#: .tmp/epson.c:2835 ++#: .tmp/epson2.c:1765 ++#, no-c-format ++msgid "Selects the halftone." ++msgstr "Escolle o medios tons" ++ ++#: .tmp/epson.c:2857 ++#: .tmp/epson2.c:1786 ++#, no-c-format ++msgid "Dropout" ++msgstr "Exclusión" ++ ++#: .tmp/epson.c:2858 ++#: .tmp/epson2.c:1787 ++#, no-c-format ++msgid "Selects the dropout." ++msgstr "Escoller o que se vai a excluir" ++ ++#: .tmp/epson.c:2870 ++#: .tmp/epson2.c:1799 ++#, no-c-format ++msgid "Selects the brightness." ++msgstr "Escoller o brillo" ++ ++#: .tmp/epson.c:2885 ++#: .tmp/epson2.c:1813 ++#, no-c-format ++msgid "Sharpness" ++msgstr "Nitidez" ++ ++#: .tmp/epson.c:3021 ++#: .tmp/epson2.c:1949 ++#, no-c-format ++msgid "Color correction" ++msgstr "Corrección da cor" ++ ++#: .tmp/epson.c:3024 ++#: .tmp/epson2.c:1952 ++#, no-c-format ++msgid "Sets the color correction table for the selected output device." ++msgstr "Axusta a táboa de corrección da cor para o dispositivo de saída seleccionado." ++ ++#: .tmp/epson.c:3065 ++#: .tmp/epson2.c:1993 ++#, no-c-format ++msgid "Color correction coefficients" ++msgstr "Coeficientes de corrección da cor" ++ ++#: .tmp/epson.c:3066 ++#: .tmp/epson2.c:1995 ++#, no-c-format ++msgid "Matrix multiplication of RGB" ++msgstr "Matriz de multiplicación de RGB" ++ ++#: .tmp/epson.c:3083 ++#: .tmp/epson2.c:2012 ++#, no-c-format ++msgid "Shift green to red" ++msgstr "Cambiar de verde a vermello" ++ ++#: .tmp/epson.c:3084 ++#: .tmp/epson2.c:2013 ++#, no-c-format ++msgid "Shift green to blue" ++msgstr "Cambiar de verde a azul" ++ ++#: .tmp/epson.c:3085 ++#: .tmp/epson2.c:2014 ++#, no-c-format ++msgid "Shift red to green" ++msgstr "Cambiar de vermello a verde" ++ ++#: .tmp/epson.c:3087 ++#: .tmp/epson2.c:2016 ++#, no-c-format ++msgid "Shift red to blue" ++msgstr "Cambiar de vermello a azul" ++ ++#: .tmp/epson.c:3088 ++#: .tmp/epson2.c:2017 ++#, no-c-format ++msgid "Shift blue to green" ++msgstr "Cambiar de azul a verde" ++ ++#: .tmp/epson.c:3089 ++#: .tmp/epson2.c:2018 ++#, no-c-format ++msgid "Shift blue to red" ++msgstr "Cambiar de azul a vermello" ++ ++#: .tmp/epson.c:3092 ++#: .tmp/epson2.c:2021 ++#, no-c-format ++msgid "Controls green level" ++msgstr "Controla o nivel de verde" ++ ++#: .tmp/epson.c:3093 ++#: .tmp/epson2.c:2023 ++#, no-c-format ++msgid "Adds to red based on green level" ++msgstr "Engade vermello baseándose no nivel de verde" ++ ++#: .tmp/epson.c:3094 ++#: .tmp/epson2.c:2025 ++#, no-c-format ++msgid "Adds to blue based on green level" ++msgstr "Engade azul baseándose no nivel de verde" ++ ++#: .tmp/epson.c:3095 ++#: .tmp/epson2.c:2027 ++#, no-c-format ++msgid "Adds to green based on red level" ++msgstr "Engade verde baseándose no nivel de vermello" ++ ++#: .tmp/epson.c:3096 ++#: .tmp/epson2.c:2028 ++#, no-c-format ++msgid "Controls red level" ++msgstr "Controla o nivel de vermello" ++ ++#: .tmp/epson.c:3097 ++#: .tmp/epson2.c:2029 ++#, no-c-format ++msgid "Adds to blue based on red level" ++msgstr "Engade azul baseándose no nivel de vermello" ++ ++#: .tmp/epson.c:3098 ++#: .tmp/epson2.c:2031 ++#, no-c-format ++msgid "Adds to green based on blue level" ++msgstr "Engade verde baseándose no nivel de azul" ++ ++#: .tmp/epson.c:3099 ++#: .tmp/epson2.c:2032 ++#, no-c-format ++msgid "Adds to red based on blue level" ++msgstr "Engade vermello baseándose no nivel de azul" ++ ++#: .tmp/epson.c:3100 ++#: .tmp/epson2.c:2033 ++#, no-c-format ++msgid "Controls blue level" ++msgstr "Controla o nivel de azul" ++ ++#: .tmp/epson.c:3187 ++#: .tmp/epson2.c:2096 ++#: .tmp/rts8891.c:2766 ++#: .tmp/saneopts.h:159 ++#: .tmp/snapscan-options.c:816 ++#: .tmp/umax.c:5566 ++#, no-c-format ++msgid "Advanced" ++msgstr "Avanzado" ++ ++#: .tmp/epson.c:3196 ++#: .tmp/epson2.c:2104 ++#, no-c-format ++msgid "Mirror the image." ++msgstr "Reflectir a imaxe." ++ ++#: .tmp/epson.c:3222 ++#: .tmp/mustek.c:4330 ++#, no-c-format ++msgid "Fast preview" ++msgstr "Vista previa rápida" ++ ++#: .tmp/epson.c:3235 ++#: .tmp/epson2.c:2114 ++#, no-c-format ++msgid "Auto area segmentation" ++msgstr "Segmentación automática da área" ++ ++#: .tmp/epson.c:3248 ++#: .tmp/epson2.c:2127 ++#, no-c-format ++msgid "Short resolution list" ++msgstr "Lista curta de resolucións" ++ ++#: .tmp/epson.c:3250 ++#, no-c-format ++msgid "Display short resolution list" ++msgstr "Amosar lista curta de resolucións" ++ ++#: .tmp/epson.c:3257 ++#, no-c-format ++msgid "Zoom" ++msgstr "Zoom" ++ ++#: .tmp/epson.c:3259 ++#, no-c-format ++msgid "Defines the zoom factor the scanner will use" ++msgstr "Define o factor de zoom que vai usar o escáner" ++ ++#: .tmp/epson.c:3339 ++#, no-c-format ++msgid "Quick format" ++msgstr "Formato rápido" ++ ++#: .tmp/epson.c:3350 ++#: .tmp/epson2.c:2199 ++#, no-c-format ++msgid "Optional equipment" ++msgstr "Equipamento opcional" ++ ++#: .tmp/epson.c:3421 ++#: .tmp/epson2.c:2253 ++#, no-c-format ++msgid "Eject" ++msgstr "Expulsar" ++ ++#: .tmp/epson.c:3422 ++#: .tmp/epson2.c:2254 ++#, no-c-format ++msgid "Eject the sheet in the ADF" ++msgstr "Expulsar a folla do alimentador" ++ ++#: .tmp/epson.c:3434 ++#: .tmp/epson2.c:2264 ++#, no-c-format ++msgid "Auto eject" ++msgstr "Expulsión automática" ++ ++#: .tmp/epson.c:3435 ++#: .tmp/epson2.c:2266 ++#, no-c-format ++msgid "Eject document after scanning" ++msgstr "Expulsar o documento despois do escaneo" ++ ++#: .tmp/epson.c:3447 ++#: .tmp/epson2.c:2276 ++#, no-c-format ++msgid "ADF Mode" ++msgstr "Modo alimentador" ++ ++#: .tmp/epson.c:3449 ++#: .tmp/epson2.c:2278 ++#, no-c-format ++msgid "Selects the ADF mode (simplex/duplex)" ++msgstr "Escoller o modo do alimentador (unha cara/duas caras)" ++ ++#: .tmp/epson.c:3463 ++#: .tmp/epson2.c:2290 ++#, no-c-format ++msgid "Bay" ++msgstr "Badía" ++ ++#: .tmp/epson.c:3464 ++#: .tmp/epson2.c:2291 ++#, no-c-format ++msgid "Select bay to scan" ++msgstr "Escolla a badía para escanear" ++ ++#: .tmp/epson.h:69 ++#: .tmp/epson2.h:65 ++#, no-c-format ++msgid "Selects the gamma correction value from a list of pre-defined devices or the user defined table, which can be downloaded to the scanner" ++msgstr "Escolla o valor de corrección gamma dunha lista de dispositivos predefinidos ou dunha táboa definida polo usuario, que pode ser descargada ao escáner." ++ ++#: .tmp/epson.h:72 ++#: .tmp/epson2.h:68 ++#, no-c-format ++msgid "Focus Position" ++msgstr "Posición do foco" ++ ++#: .tmp/epson.h:73 ++#: .tmp/epson2.h:69 ++#, no-c-format ++msgid "Sets the focus position to either the glass or 2.5mm above the glass" ++msgstr "Axusta a posición do foco, xa sexa ao cristal ou a 2.5mm por riba do cristal" ++ ++#: .tmp/epson.h:75 ++#: .tmp/epson2.h:71 ++#, no-c-format ++msgid "Wait for Button" ++msgstr "Agardar ao botón" ++ ++#: .tmp/epson.h:76 ++#: .tmp/epson2.h:72 ++#, no-c-format ++msgid "After sending the scan command, wait until the button on the scanner is pressed to actually start the scan process." ++msgstr "Despois de enviar a orde de escaneo, agardar até que se prema no botón do escáner para comezar verdadeiramente o proceso de escaneo." ++ ++#: .tmp/epson2.c:237 ++#, no-c-format ++msgid "Positive Slide" ++msgstr "Diapositiva en positivo" ++ ++#: .tmp/epson2.c:238 ++#, no-c-format ++msgid "Negative Slide" ++msgstr "Diapositiva en negativo" ++ ++#: .tmp/epson2.c:2129 ++#, no-c-format ++msgid "Display a shortened resolution list" ++msgstr "Amosar unha lista de resolucións ordenada" ++ ++#: .tmp/genesys.c:107 ++#: .tmp/gt68xx.c:147 ++#: .tmp/ma1509.c:106 ++#: .tmp/mustek.c:160 ++#: .tmp/snapscan-options.c:83 ++#: .tmp/umax.c:183 ++#, no-c-format ++msgid "Transparency Adapter" ++msgstr "Adaptador de transparencias" ++ ++#: .tmp/genesys.c:5052 ++#, no-c-format ++msgid "Extras" ++msgstr "Extras" ++ ++#: .tmp/genesys.c:5073 ++#, no-c-format ++msgid "Disable interpolation" ++msgstr "Desactivar interpolación" ++ ++#: .tmp/genesys.c:5076 ++#, no-c-format ++msgid "When using high resolutions where the horizontal resolution is smaller than the vertical resolution this disables horizontal interpolation." ++msgstr "Cando se usan altas resolucións nas que a resolución horizontal é máis pequena que a vertical, isto desactiva a interpolación horizontal." ++ ++#: .tmp/genesys.c:5085 ++#, no-c-format ++msgid "Color Filter" ++msgstr "Filtro de cor" ++ ++#: .tmp/genesys.c:5088 ++#, no-c-format ++msgid "When using gray or lineart this option selects the used color." ++msgstr "Cando se usa gris ou liña de arte esta opción selecciona a cor a usar." ++ ++#: .tmp/genesys.c:5097 ++#, no-c-format ++msgid "Lamp off time" ++msgstr "Tempo para apagado da lámpada" ++ ++#: .tmp/genesys.c:5100 ++#, no-c-format ++msgid "The lamp will be turned off after the given time (in minutes). A value of 0 means, that the lamp won't be turned off." ++msgstr "A lámpada vai ser apagada despois do tempo indicado (en minutos). Un valor de 0 significa que a lámpada no vai ser apagada." ++ ++#: .tmp/genesys.c:5128 ++#: .tmp/genesys.c:5129 ++#, no-c-format ++msgid "File button" ++msgstr "Botón de ficheiro" ++ ++#: .tmp/genesys.c:5181 ++#: .tmp/genesys.c:5182 ++#, no-c-format ++msgid "OCR button" ++msgstr "Botón de OCR" ++ ++#: .tmp/genesys.c:5195 ++#: .tmp/genesys.c:5196 ++#, no-c-format ++msgid "Power button" ++msgstr "Botón de enerxía" ++ ++#: .tmp/genesys.c:5209 ++#: .tmp/genesys.c:5210 ++#: .tmp/pixma_sane_options.c:210 ++#: .tmp/plustek.c:1079 ++#, no-c-format ++msgid "Buttons" ++msgstr "Botóns" ++ ++#: .tmp/genesys.c:5216 ++#: .tmp/hp-option.h:97 ++#: .tmp/hp5400_sane.c:392 ++#: .tmp/niash.c:728 ++#: .tmp/plustek.c:940 ++#, no-c-format ++msgid "Calibrate" ++msgstr "Calibrar" ++ ++#: .tmp/genesys.c:5217 ++#, no-c-format ++msgid "Start calibration using special sheet" ++msgstr "Iniciar a calibración usando unha folla especial" ++ ++#: .tmp/genesys.c:5229 ++#, no-c-format ++msgid "Clear calibration" ++msgstr "Limpar a calibración" ++ ++#: .tmp/genesys.c:5230 ++#, no-c-format ++msgid "Clear calibration cache" ++msgstr "Limpar a caché de datos de calibración" ++ ++#: .tmp/gt68xx.c:474 ++#, no-c-format ++msgid "Gray mode color" ++msgstr "Cor en modo gris" ++ ++#: .tmp/gt68xx.c:476 ++#, no-c-format ++msgid "Selects which scan color is used gray mode (default: green)." ++msgstr "Escolle que cor de escaneo vai ser usada en modo gris (predefinido: verde)." ++ ++#: .tmp/gt68xx.c:557 ++#: .tmp/hp3900_sane.c:1391 ++#: .tmp/mustek_usb2.c:410 ++#, no-c-format ++msgid "Debugging Options" ++msgstr "Opcións de depuración" ++ ++#: .tmp/gt68xx.c:568 ++#: .tmp/mustek_usb2.c:419 ++#, no-c-format ++msgid "Automatic warmup" ++msgstr "Quecemento automático" ++ ++#: .tmp/gt68xx.c:570 ++#, no-c-format ++msgid "Warm-up until the lamp's brightness is constant instead of insisting on 60 seconds warm-up time." ++msgstr "Quecer até que o brillo da lámpada sexa constante no canto de agardar polos 60 segundos de quecemento." ++ ++#: .tmp/gt68xx.c:582 ++#, no-c-format ++msgid "Full scan" ++msgstr "Escaneo completo" ++ ++#: .tmp/gt68xx.c:584 ++#, no-c-format ++msgid "Scan the complete scanning area including calibration strip. Be careful. Don't select the full height. For testing only." ++msgstr "Escanear toda a área de escaneo incluindo a franxa de calibración. Teña cuidado. Non seleccione a altura total. Só para probas." ++ ++#: .tmp/gt68xx.c:595 ++#, no-c-format ++msgid "Coarse calibration" ++msgstr "Calibración grosa" ++ ++#: .tmp/gt68xx.c:597 ++#, no-c-format ++msgid "Setup gain and offset for scanning automatically. If this option is disabled, options for setting the analog frontend parameters manually are provided. This option is enabled by default. For testing only." ++msgstr "Configuración da ganancia e desprazamento para escanear automaticamente. Se esta opción está desactivada, proporciónanse as opcións de axuste dos parámetros de xeito manual na interface analóxica. Esta opción está activada como predefinida. Só para probas." ++ ++#: .tmp/gt68xx.c:616 ++#, no-c-format ++msgid "Coarse calibration for first scan only" ++msgstr "Calibración grosa só para o primeiro escaneo" ++ ++#: .tmp/gt68xx.c:618 ++#, no-c-format ++msgid "Coarse calibration is only done for the first scan. Works with most scanners and can save scanning time. If the image brightness is different with each scan, disable this option. For testing only." ++msgstr "A calibración grosa faise só para o primeiro escaneo. Funciona coa maioría de escáners e pode aforrar tempo de escaneo. Se o brillo da imaxe é diferente con cada escaneo, desactive esta opción. Só para probas." ++ ++#: .tmp/gt68xx.c:649 ++#, no-c-format ++msgid "Backtrack lines" ++msgstr "Liñas de retroceso" ++ ++#: .tmp/gt68xx.c:651 ++#, no-c-format ++msgid "Number of lines the scan slider moves back when backtracking occurs. That happens when the scanner scans faster than the computer can receive the data. Low values cause faster scans but increase the risk of omitting lines." ++msgstr "Número de liñas que o escáner retrocede cando escanea máis rápido do que o equipo pode recibir datos. Valores baixos fan que os escaneos sexan más rápidos, pero aumentan os riscos de omitir liñas.Número de liñas que o escáner retrocede cando escanea máis rápido do que o equipo pode recibir datos. Valores baixos fan que os escaneos sexan más rápidos, pero aumentan os riscos de omitir liñas." ++ ++#: .tmp/gt68xx.c:676 ++#: .tmp/mustek_usb2.c:452 ++#, no-c-format ++msgid "Gamma value" ++msgstr "Valor gamma" ++ ++#: .tmp/gt68xx.c:678 ++#: .tmp/mustek_usb2.c:454 ++#, no-c-format ++msgid "Sets the gamma value of all channels." ++msgstr "Axusta o valor gamma para todas as canles." ++ ++#: .tmp/hp-option.c:2983 ++#, no-c-format ++msgid "Advanced Options" ++msgstr "Opcions avanzadas" ++ ++#: .tmp/hp-option.c:3040 ++#, no-c-format ++msgid "Coarse" ++msgstr "Groso" ++ ++#: .tmp/hp-option.c:3041 ++#, no-c-format ++msgid "Fine" ++msgstr "Fina" ++ ++#: .tmp/hp-option.c:3042 ++#, no-c-format ++msgid "Bayer" ++msgstr "Bayer" ++ ++#: .tmp/hp-option.c:3043 ++#, no-c-format ++msgid "Vertical" ++msgstr "Vertical" ++ ++#: .tmp/hp-option.c:3044 ++#, no-c-format ++msgid "Horizontal" ++msgstr "Horizontal" ++ ++#: .tmp/hp-option.c:3045 ++#: .tmp/hp-option.c:3096 ++#, no-c-format ++msgid "Custom" ++msgstr "Personalizado" ++ ++#: .tmp/hp-option.c:3086 ++#: .tmp/hp-option.c:3142 ++#: .tmp/hp-option.c:3157 ++#, no-c-format ++msgid "Auto" ++msgstr "Automático" ++ ++#: .tmp/hp-option.c:3087 ++#, no-c-format ++msgid "NTSC RGB" ++msgstr "NTSC RGB" ++ ++#: .tmp/hp-option.c:3088 ++#, no-c-format ++msgid "XPA RGB" ++msgstr "Adaptador de transparencias RGB" ++ ++#: .tmp/hp-option.c:3089 ++#, no-c-format ++msgid "Pass-through" ++msgstr "A través" ++ ++#: .tmp/hp-option.c:3090 ++#, no-c-format ++msgid "NTSC Gray" ++msgstr "NTSC Gris" ++ ++#: .tmp/hp-option.c:3091 ++#, no-c-format ++msgid "XPA Gray" ++msgstr "Adaptador de transparencias gris" ++ ++#: .tmp/hp-option.c:3143 ++#, no-c-format ++msgid "Slow" ++msgstr "Lento" ++ ++#: .tmp/hp-option.c:3144 ++#: .tmp/hp-option.c:3251 ++#: .tmp/matsushita.c:244 ++#: .tmp/mustek.c:145 ++#: .tmp/plustek.c:233 ++#: .tmp/plustek_pp.c:200 ++#: .tmp/u12.c:155 ++#, no-c-format ++msgid "Normal" ++msgstr "Normal" ++ ++#: .tmp/hp-option.c:3145 ++#, no-c-format ++msgid "Fast" ++msgstr "Rápido" ++ ++#: .tmp/hp-option.c:3146 ++#, no-c-format ++msgid "Extra Fast" ++msgstr "Moi rápido" ++ ++#: .tmp/hp-option.c:3158 ++#: .tmp/hp-option.c:3325 ++#: .tmp/hp-option.c:3338 ++#, no-c-format ++msgid "Off" ++msgstr "Desactivado" ++ ++#: .tmp/hp-option.c:3159 ++#, no-c-format ++msgid "2-pixel" ++msgstr "2-píxeles" ++ ++#: .tmp/hp-option.c:3160 ++#, no-c-format ++msgid "4-pixel" ++msgstr "4-píxeles" ++ ++#: .tmp/hp-option.c:3161 ++#, no-c-format ++msgid "8-pixel" ++msgstr "8-píxeles" ++ ++#: .tmp/hp-option.c:3172 ++#, no-c-format ++msgid "Print" ++msgstr "Imprimir" ++ ++#: .tmp/hp-option.c:3173 ++#: .tmp/hp3900_sane.c:427 ++#: .tmp/hp3900_sane.c:1019 ++#, no-c-format ++msgid "Slide" ++msgstr "Diapositiva" ++ ++#: .tmp/hp-option.c:3174 ++#, no-c-format ++msgid "Film-strip" ++msgstr "Tira de filme" ++ ++#: .tmp/hp-option.c:3234 ++#: .tmp/hp3900_sane.c:428 ++#: .tmp/hp3900_sane.c:1021 ++#: .tmp/hp3900_sane.c:1420 ++#: .tmp/mustek_usb2.c:121 ++#: .tmp/plustek.c:235 ++#: .tmp/plustek_pp.c:202 ++#: .tmp/saneopts.h:206 ++#: .tmp/u12.c:157 ++#, no-c-format ++msgid "Negative" ++msgstr "Negativo" ++ ++#: .tmp/hp-option.c:3252 ++#: .tmp/hp5590.c:82 ++#, no-c-format ++msgid "ADF" ++msgstr "Alimentador automático de documentos (ADF)" ++ ++#: .tmp/hp-option.c:3253 ++#, no-c-format ++msgid "XPA" ++msgstr "Adaptador de transparencias (XPA)" ++ ++#: .tmp/hp-option.c:3326 ++#: .tmp/hp-option.c:3339 ++#, no-c-format ++msgid "On" ++msgstr "Activado" ++ ++#: .tmp/hp-option.c:3327 ++#: .tmp/hp-option.c:3340 ++#, no-c-format ++msgid "Conditional" ++msgstr "Condicional" ++ ++#: .tmp/hp-option.c:3413 ++#, no-c-format ++msgid "Experiment" ++msgstr "Experimento" ++ ++#: .tmp/hp-option.h:60 ++#, no-c-format ++msgid "Sharpening" ++msgstr "Nitidez" ++ ++#: .tmp/hp-option.h:61 ++#, no-c-format ++msgid "Set sharpening value." ++msgstr "Axustar o valor de nitidez." ++ ++#: .tmp/hp-option.h:66 ++#, no-c-format ++msgid "Auto Threshold" ++msgstr "Limiar automático" ++ ++#: .tmp/hp-option.h:68 ++#, no-c-format ++msgid "Enable automatic determination of threshold for line-art scans." ++msgstr "Activar a determinación automática do limiar para escaneos como liña de arte." ++ ++#: .tmp/hp-option.h:73 ++#, no-c-format ++msgid "Smoothing" ++msgstr "Suavizado" ++ ++#: .tmp/hp-option.h:74 ++#, no-c-format ++msgid "Select smoothing filter." ++msgstr "Escoller filtro de suavizado." ++ ++#: .tmp/hp-option.h:79 ++#, no-c-format ++msgid "Unload media after scan" ++msgstr "Descargar os soportes despois de escanear." ++ ++#: .tmp/hp-option.h:80 ++#, no-c-format ++msgid "Unloads the media after a scan." ++msgstr "Descargar as unidades despois de escanear." ++ ++#: .tmp/hp-option.h:85 ++#, no-c-format ++msgid "Change document" ++msgstr "Cambiar o documento" ++ ++#: .tmp/hp-option.h:86 ++#, no-c-format ++msgid "Change Document." ++msgstr "Cambiar o documento." ++ ++#: .tmp/hp-option.h:91 ++#, no-c-format ++msgid "Unload" ++msgstr "Descargar" ++ ++#: .tmp/hp-option.h:92 ++#, no-c-format ++msgid "Unload Document." ++msgstr "Descargar o documento" ++ ++#: .tmp/hp-option.h:98 ++#, no-c-format ++msgid "Start calibration process." ++msgstr "Iniciar proceso de calibración" ++ ++#: .tmp/hp-option.h:103 ++#, no-c-format ++msgid "Media" ++msgstr "Soporte" ++ ++#: .tmp/hp-option.h:104 ++#, no-c-format ++msgid "Set type of media." ++msgstr "Axustar tipo de soporte." ++ ++#: .tmp/hp-option.h:109 ++#, no-c-format ++msgid "Exposure time" ++msgstr "Tempo de exposición" ++ ++#: .tmp/hp-option.h:111 ++#, no-c-format ++msgid "A longer exposure time lets the scanner collect more light. Suggested use is 175% for prints, 150% for normal slides and \"Negative\" for negative film. For dark (underexposed) images you can increase this value." ++msgstr "Unha exposición prolongada permítelle ao escáner recoller máis luz. Suxírese usar 175% para impresións, 150% para diapositivas normais e «Negativo» para filme en negativo. Para imaxes escuras (subexpostas) pode incrementar este valor." ++ ++#: .tmp/hp-option.h:119 ++#: .tmp/hp-option.h:126 ++#, no-c-format ++msgid "Color Matrix" ++msgstr "Matriz de cor" ++ ++#: .tmp/hp-option.h:121 ++#, no-c-format ++msgid "Set the scanners color matrix." ++msgstr "Axustar a matriz de cor do escáner." ++ ++#: .tmp/hp-option.h:127 ++#, no-c-format ++msgid "Custom color matrix." ++msgstr "Matriz de cor personalizada." ++ ++#: .tmp/hp-option.h:132 ++#, no-c-format ++msgid "Mono Color Matrix" ++msgstr "Matriz monocroma" ++ ++#: .tmp/hp-option.h:133 ++#, no-c-format ++msgid "Custom color matrix for grayscale scans." ++msgstr "Matriz de cor personalizada para escáneres en escala de grises." ++ ++#: .tmp/hp-option.h:138 ++#, no-c-format ++msgid "Mirror horizontal" ++msgstr "Espello horizontal" ++ ++#: .tmp/hp-option.h:139 ++#, no-c-format ++msgid "Mirror image horizontally." ++msgstr "Reflectir a imaxe en horizontal" ++ ++#: .tmp/hp-option.h:144 ++#, no-c-format ++msgid "Mirror vertical" ++msgstr "Espello vertical" ++ ++#: .tmp/hp-option.h:145 ++#, no-c-format ++msgid "Mirror image vertically." ++msgstr "Reflectir a imaxe en verticalv" ++ ++#: .tmp/hp-option.h:150 ++#, no-c-format ++msgid "Update options" ++msgstr "Actualizar as opcións" ++ ++#: .tmp/hp-option.h:151 ++#, no-c-format ++msgid "Update options." ++msgstr "Actualizar as opcións." ++ ++#: .tmp/hp-option.h:156 ++#, no-c-format ++msgid "8 bit output" ++msgstr "Saída de 8 bits" ++ ++#: .tmp/hp-option.h:158 ++#, no-c-format ++msgid "Use bit depth greater eight internally, but output only eight bits." ++msgstr "Usar profundidade de bits maior de oito internamente, mais na saída usar só oito bits." ++ ++#: .tmp/hp-option.h:164 ++#, no-c-format ++msgid "Front button wait" ++msgstr "Agardar botón frontal" ++ ++#: .tmp/hp-option.h:165 ++#, no-c-format ++msgid "Wait to scan for front-panel button push." ++msgstr "Agardar a que se prema no botón frontal para escanear." ++ ++#: .tmp/hp-option.h:172 ++#, no-c-format ++msgid "Shut off lamp" ++msgstr "Apagar lámpada" ++ ++#: .tmp/hp-option.h:173 ++#, no-c-format ++msgid "Shut off scanner lamp." ++msgstr "Apagar a lámpada do escáner." ++ ++#: .tmp/hp3500.c:977 ++#, no-c-format ++msgid "Geometry Group" ++msgstr "Grupo de xeometría" ++ ++#: .tmp/hp3500.c:1033 ++#: .tmp/hp3500.c:1034 ++#, no-c-format ++msgid "Scan Mode Group" ++msgstr "Grupo de modo de escaneo" ++ ++#: .tmp/hp3900_sane.c:1404 ++#, no-c-format ++msgid "Scanner model" ++msgstr "Modelo de escáner" ++ ++#: .tmp/hp3900_sane.c:1407 ++#, no-c-format ++msgid "Allows to test device behaviour with other supported models" ++msgstr "Permite comprobar o comportamento do dispositivo con outros modelos compatíbeisPermite comprobar o comportamento do dispositivo con outros modelos compatíbeis" ++ ++#: .tmp/hp3900_sane.c:1421 ++#, no-c-format ++msgid "Image colours will be inverted" ++msgstr "As imaxes a cor hanse inverter" ++ ++#: .tmp/hp3900_sane.c:1435 ++#, no-c-format ++msgid "Disable gamma correction" ++msgstr "Desactivar a corrección gamma" ++ ++#: .tmp/hp3900_sane.c:1436 ++#, no-c-format ++msgid "Gamma correction will be disabled" ++msgstr "A corrección gamma hase desactivar" ++ ++#: .tmp/hp3900_sane.c:1450 ++#, no-c-format ++msgid "Disable white shading correction" ++msgstr "Desactivar a corrección de sombra branca" ++ ++#: .tmp/hp3900_sane.c:1452 ++#, no-c-format ++msgid "White shading correction will be disabled" ++msgstr "A corrección de sombra branca hase desactivar" ++ ++#: .tmp/hp3900_sane.c:1466 ++#, no-c-format ++msgid "Skip warmup process" ++msgstr "Omitir proceso de quecemento" ++ ++#: .tmp/hp3900_sane.c:1467 ++#, no-c-format ++msgid "Warmup process will be disabled" ++msgstr "O proceso de quecemento hase desactivar" ++ ++#: .tmp/hp3900_sane.c:1481 ++#, no-c-format ++msgid "Force real depth" ++msgstr "Forzar a profundidade real" ++ ++#: .tmp/hp3900_sane.c:1484 ++#, no-c-format ++msgid "If gamma is enabled, scans are always made in 16 bits depth to improve image quality and then converted to the selected depth. This option avoids depth emulation." ++msgstr "Se gamma está activada, sempre se analisa en profundidade de 16 bits para mellorar a calidade da imaxe e despois convertila á profundidade seleccionada. Esta opción evita a emulación da profundidade." ++ ++#: .tmp/hp3900_sane.c:1498 ++#, no-c-format ++msgid "Emulate Grayscale" ++msgstr "Emular escala de grises" ++ ++#: .tmp/hp3900_sane.c:1501 ++#, no-c-format ++msgid "If enabled, image will be scanned in color mode and then converted to grayscale by software. This may improve image quality in some circumstances." ++msgstr "Se está activada, a imaxe vai ser escaneada en modo de cor e despois convertida a escala de grises por software. Isto pode mellorar a calidade da imaxe nalgunhas circunstancias." ++ ++#: .tmp/hp3900_sane.c:1515 ++#, no-c-format ++msgid "Save debugging images" ++msgstr "Gardar as imaxes de depuración" ++ ++#: .tmp/hp3900_sane.c:1518 ++#, no-c-format ++msgid "If enabled, some images involved in scanner processing are saved to analyze them." ++msgstr "Se se activa, algunhas imaxes implicadas no proceso de escaneo gardaranse para analizalas." ++ ++#: .tmp/hp3900_sane.c:1532 ++#, no-c-format ++msgid "Reset chipset" ++msgstr "Reiniciar o chipset" ++ ++#: .tmp/hp3900_sane.c:1533 ++#, no-c-format ++msgid "Resets chipset data" ++msgstr "Reiniciar os datos do chipset" ++ ++#: .tmp/hp3900_sane.c:1546 ++#, no-c-format ++msgid "Information" ++msgstr "Información" ++ ++#: .tmp/hp3900_sane.c:1559 ++#, no-c-format ++msgid "Chipset name" ++msgstr "Nome do chipset" ++ ++#: .tmp/hp3900_sane.c:1560 ++#, no-c-format ++msgid "Shows chipset name used in device." ++msgstr "Amosa o nome do chipset usado no dispositivo." ++ ++#: .tmp/hp3900_sane.c:1564 ++#, no-c-format ++msgid "Unknown" ++msgstr "Descoñecido" ++ ++#: .tmp/hp3900_sane.c:1569 ++#, no-c-format ++msgid "Chipset ID" ++msgstr "ID do chipset" ++ ++#: .tmp/hp3900_sane.c:1570 ++#, no-c-format ++msgid "Shows the chipset ID" ++msgstr "Amosa o ID do chipset" ++ ++#: .tmp/hp3900_sane.c:1580 ++#, no-c-format ++msgid "Scan counter" ++msgstr "Contador de escaneos" ++ ++#: .tmp/hp3900_sane.c:1582 ++#, no-c-format ++msgid "Shows the number of scans made by scanner" ++msgstr "Amosa o número de escaneos feitas polo escáner" ++ ++#: .tmp/hp3900_sane.c:1592 ++#, no-c-format ++msgid "Update information" ++msgstr "Actualizar a información" ++ ++#: .tmp/hp3900_sane.c:1593 ++#, no-c-format ++msgid "Updates information about device" ++msgstr "Actualiza a información acerca do dispositivo" ++ ++#: .tmp/hp3900_sane.c:1633 ++#, no-c-format ++msgid "This option reflects a front panel scanner button" ++msgstr "Esta opción reflicte un botón do panel frontal do escáner" ++ ++#: .tmp/hp5400_sane.c:313 ++#: .tmp/niash.c:683 ++#, no-c-format ++msgid "Image" ++msgstr "Imaxe" ++ ++#: .tmp/hp5400_sane.c:352 ++#: .tmp/niash.c:711 ++#, no-c-format ++msgid "Miscellaneous" ++msgstr "Miscelánea" ++ ++#: .tmp/hp5400_sane.c:358 ++#, no-c-format ++msgid "offset X" ++msgstr "posición X" ++ ++#: .tmp/hp5400_sane.c:359 ++#, no-c-format ++msgid "Hardware internal X position of the scanning area." ++msgstr "Posición X interna no hardware da zona de escaneo." ++ ++#: .tmp/hp5400_sane.c:368 ++#, no-c-format ++msgid "offset Y" ++msgstr "posición Y" ++ ++#: .tmp/hp5400_sane.c:369 ++#, no-c-format ++msgid "Hardware internal Y position of the scanning area." ++msgstr "Posición Y interna no hardware da zona de escaneo." ++ ++#: .tmp/hp5400_sane.c:381 ++#: .tmp/niash.c:718 ++#, no-c-format ++msgid "Lamp status" ++msgstr "Estado da lámpada" ++ ++#: .tmp/hp5400_sane.c:382 ++#: .tmp/niash.c:719 ++#, no-c-format ++msgid "Switches the lamp on or off." ++msgstr "Acende ou apaga a lámpada" ++ ++#: .tmp/hp5400_sane.c:393 ++#: .tmp/niash.c:729 ++#, no-c-format ++msgid "Calibrates for black and white level." ++msgstr "Calibrar o nivel de branco e negro." ++ ++#: .tmp/hp5590.c:83 ++#: .tmp/pixma.c:663 ++#, no-c-format ++msgid "ADF Duplex" ++msgstr "Alimentador dúplex" ++ ++#: .tmp/hp5590.c:84 ++#, no-c-format ++msgid "TMA Slides" ++msgstr "Adaptador (TMA) para diapositivas" ++ ++#: .tmp/hp5590.c:85 ++#, no-c-format ++msgid "TMA Negatives" ++msgstr "Adaptador (TMA) para negativos" ++ ++#: .tmp/hp5590.c:88 ++#, no-c-format ++msgid "Color (48 bits)" ++msgstr "Cor (48 bits)" ++ ++#: .tmp/hp5590.c:91 ++#, no-c-format ++msgid "Extend lamp timeout" ++msgstr "Retardar o tempo de apagado da lámpada" ++ ++#: .tmp/hp5590.c:92 ++#, no-c-format ++msgid "Extends lamp timeout (from 15 minutes to 1 hour)" ++msgstr "Retarda os tempos de apagado da lámpada (de 15 minutos a 1 hora)" ++ ++#: .tmp/hp5590.c:94 ++#, no-c-format ++msgid "Wait for button" ++msgstr "Agardando polo botón" ++ ++#: .tmp/hp5590.c:95 ++#, no-c-format ++msgid "Waits for button before scanning" ++msgstr "Agardando polo botón antes de escanear" ++ ++#: .tmp/leo.c:110 ++#, no-c-format ++msgid "Diamond" ++msgstr "Diamante" ++ ++#: .tmp/leo.c:111 ++#, no-c-format ++msgid "8x8 Coarse Fatting" ++msgstr "8x8 «Engraxado» groso" ++ ++#: .tmp/leo.c:112 ++#, no-c-format ++msgid "8x8 Fine Fatting" ++msgstr "8x8 «Engraxado» fino" ++ ++#: .tmp/leo.c:113 ++#, no-c-format ++msgid "8x8 Bayer" ++msgstr "8x8 Bayer" ++ ++#: .tmp/leo.c:114 ++#, no-c-format ++msgid "8x8 Vertical Line" ++msgstr "8x8 Liña vertical" ++ ++#: .tmp/leo.h:260 ++#: .tmp/matsushita.h:209 ++#: .tmp/teco1.h:291 ++#: .tmp/teco3.h:294 ++#, no-c-format ++msgid "Black & White" ++msgstr "Branco e negro" ++ ++#: .tmp/lexmark.c:288 ++#: .tmp/umax_pp.c:713 ++#, no-c-format ++msgid "Gain" ++msgstr "Ganancia" ++ ++#: .tmp/lexmark.c:289 ++#: .tmp/umax_pp.c:714 ++#, no-c-format ++msgid "Color channels gain settings" ++msgstr "Axustes de ganancia das canles de cor" ++ ++#: .tmp/lexmark.c:298 ++#: .tmp/umax_pp.c:721 ++#, no-c-format ++msgid "Gray gain" ++msgstr "Ganancia de gris" ++ ++#: .tmp/lexmark.c:299 ++#: .tmp/umax_pp.c:722 ++#, no-c-format ++msgid "Sets gray channel gain" ++msgstr "Axusta a ganancia da canle de gris" ++ ++#: .tmp/lexmark.c:312 ++#: .tmp/plustek.c:1000 ++#: .tmp/umax_pp.c:733 ++#, no-c-format ++msgid "Red gain" ++msgstr "Ganancia vermella" ++ ++#: .tmp/lexmark.c:313 ++#: .tmp/umax_pp.c:734 ++#, no-c-format ++msgid "Sets red channel gain" ++msgstr "Axustar a ganancia da canle vermella" ++ ++#: .tmp/lexmark.c:326 ++#: .tmp/plustek.c:1016 ++#: .tmp/umax_pp.c:745 ++#, no-c-format ++msgid "Green gain" ++msgstr "Ganancia verde" ++ ++#: .tmp/lexmark.c:327 ++#: .tmp/umax_pp.c:746 ++#, no-c-format ++msgid "Sets green channel gain" ++msgstr "Axusta a ganancia da canle verde" ++ ++#: .tmp/lexmark.c:340 ++#: .tmp/plustek.c:1032 ++#: .tmp/umax_pp.c:757 ++#, no-c-format ++msgid "Blue gain" ++msgstr "Ganancia azul" ++ ++#: .tmp/lexmark.c:341 ++#: .tmp/umax_pp.c:758 ++#, no-c-format ++msgid "Sets blue channel gain" ++msgstr "Axusta a ganancia da canle azul" ++ ++#: .tmp/matsushita.c:139 ++#, no-c-format ++msgid "Bayer Dither 16" ++msgstr "Trama Bayer 16" ++ ++#: .tmp/matsushita.c:140 ++#, no-c-format ++msgid "Bayer Dither 64" ++msgstr "Trama Bayer 64" ++ ++#: .tmp/matsushita.c:141 ++#, no-c-format ++msgid "Halftone Dot 32" ++msgstr "Medio ton punto 32" ++ ++#: .tmp/matsushita.c:142 ++#, no-c-format ++msgid "Halftone Dot 64" ++msgstr "Medio ton punto 64" ++ ++#: .tmp/matsushita.c:143 ++#, no-c-format ++msgid "Error Diffusion" ++msgstr "Difusión de erro" ++ ++#: .tmp/matsushita.c:160 ++#, no-c-format ++msgid "Mode 1" ++msgstr "Modo 1" ++ ++#: .tmp/matsushita.c:161 ++#, no-c-format ++msgid "Mode 2" ++msgstr "Modo 2" ++ ++#: .tmp/matsushita.c:162 ++#, no-c-format ++msgid "Mode 3" ++msgstr "Modo 3" ++ ++#: .tmp/matsushita.c:176 ++#, no-c-format ++msgid "From white stick" ++msgstr "De pau branco" ++ ++#: .tmp/matsushita.c:177 ++#, no-c-format ++msgid "From paper" ++msgstr "De papel" ++ ++#: .tmp/matsushita.c:212 ++#, no-c-format ++msgid "Smooth" ++msgstr "Suave" ++ ++#: .tmp/matsushita.c:214 ++#: .tmp/matsushita.c:229 ++#, no-c-format ++msgid "Low" ++msgstr "Baixo" ++ ++#: .tmp/matsushita.c:215 ++#: .tmp/matsushita.c:230 ++#: .tmp/matsushita.c:1296 ++#, no-c-format ++msgid "Medium" ++msgstr "Soporte" ++ ++#: .tmp/matsushita.c:216 ++#: .tmp/matsushita.c:231 ++#, no-c-format ++msgid "High" ++msgstr "Alta" ++ ++#: .tmp/matsushita.c:245 ++#, no-c-format ++msgid "CRT" ++msgstr "CRT" ++ ++#: .tmp/matsushita.c:257 ++#, no-c-format ++msgid "One page" ++msgstr "Unha páxina" ++ ++#: .tmp/matsushita.c:258 ++#, no-c-format ++msgid "All pages" ++msgstr "Todas as páxinas" ++ ++#: .tmp/matsushita.c:1034 ++#: .tmp/plustek.c:1332 ++#, no-c-format ++msgid "sheetfed scanner" ++msgstr "escáner con cargador automático" ++ ++#: .tmp/matsushita.c:1126 ++#, no-c-format ++msgid "Feeder mode" ++msgstr "Modo de alimentación" ++ ++#: .tmp/matsushita.c:1127 ++#, no-c-format ++msgid "Sets the feeding mode" ++msgstr "Axusta o modo de alimentación" ++ ++#: .tmp/matsushita.c:1224 ++#, no-c-format ++msgid "Automatic threshold" ++msgstr "Limiar automático" ++ ++#: .tmp/matsushita.c:1227 ++#, no-c-format ++msgid "Automatically sets brightness, contrast, white level, gamma, noise reduction and image emphasis" ++msgstr "Axusta automaticamente o brillo, contraste, niveis de branco, gamma e redución da intensidade do ruído da imaxe" ++ ++#: .tmp/matsushita.c:1275 ++#, no-c-format ++msgid "Noise reduction" ++msgstr "Redución de ruído" ++ ++#: .tmp/matsushita.c:1277 ++#, no-c-format ++msgid "Reduce the isolated dot noise" ++msgstr "Reduce os puntos illados de ruído" ++ ++#: .tmp/matsushita.c:1288 ++#, no-c-format ++msgid "Image emphasis" ++msgstr "Destaque da imaxe" ++ ++#: .tmp/matsushita.c:1289 ++#, no-c-format ++msgid "Sets the image emphasis" ++msgstr "Axusta o destaque da imaxe" ++ ++#: .tmp/matsushita.c:1300 ++#: .tmp/matsushita.c:1301 ++#: .tmp/pixma_sane_options.c:107 ++#, no-c-format ++msgid "Gamma" ++msgstr "Gamma" ++ ++#: .tmp/matsushita.h:210 ++#, no-c-format ++msgid "Grayscale 4 bits" ++msgstr "Escala de grises de 4 bits" ++ ++#: .tmp/matsushita.h:211 ++#, no-c-format ++msgid "Grayscale 8 bits" ++msgstr "Escala de grises de 8 bits" ++ ++#: .tmp/matsushita.h:220 ++#, no-c-format ++msgid "Paper size" ++msgstr "Tamaño do papel" ++ ++#: .tmp/matsushita.h:221 ++#: .tmp/matsushita.h:228 ++#, no-c-format ++msgid "Automatic separation" ++msgstr "Separación automática" ++ ++#: .tmp/matsushita.h:224 ++#, no-c-format ++msgid "Enable Duplex (Dual-Sided) Scanning" ++msgstr "Activa o escaneo polas dúas caras" ++ ++#: .tmp/matsushita.h:226 ++#, no-c-format ++msgid "Physical size of the paper in the ADF" ++msgstr "Tamaño físico do papel no alimentador" ++ ++#: .tmp/microtek2.h:602 ++#, no-c-format ++msgid "Shadow, midtone, highlight, exposure time" ++msgstr "Sombras, medias tintas, destaque, tempo de exposición" ++ ++#: .tmp/microtek2.h:604 ++#, no-c-format ++msgid "Special options" ++msgstr "Opciós especiais" ++ ++#: .tmp/microtek2.h:605 ++#, no-c-format ++msgid "Color balance" ++msgstr "Balance de cor" ++ ++#: .tmp/microtek2.h:608 ++#, no-c-format ++msgid "Disable backtracking" ++msgstr "Desactivar o retroceso" ++ ++#: .tmp/microtek2.h:609 ++#, no-c-format ++msgid "If checked the scanner does not perform backtracking" ++msgstr "Se se activa, o escáner non retrocede cando perde unha liña" ++ ++#: .tmp/microtek2.h:613 ++#, no-c-format ++msgid "Toggle lamp of flatbed" ++msgstr "Alternar o estado da lámpada do plano" ++ ++#: .tmp/microtek2.h:614 ++#, no-c-format ++msgid "Toggles the lamp of the flatbed" ++msgstr "Alterna o estado da lámpada do plano" ++ ++#: .tmp/microtek2.h:617 ++#, no-c-format ++msgid "Calibration by backend" ++msgstr "Calibración polo motor" ++ ++#: .tmp/microtek2.h:618 ++#, no-c-format ++msgid "If checked the color calibration before a scan is done by the backend" ++msgstr "Se se selecciona a calibración da cor antes do escaneo faina o motor" ++ ++#: .tmp/microtek2.h:622 ++#, no-c-format ++msgid "Use the lightlid-35mm adapter" ++msgstr "Usar o adaptador de diapositivas de 35mm" ++ ++#: .tmp/microtek2.h:623 ++#, no-c-format ++msgid "This option turns off the lamp of the flatbed during a scan" ++msgstr "Esta opción apaga a lámpada do plano durante o escaneo" ++ ++#: .tmp/microtek2.h:627 ++#: .tmp/snapscan-options.c:375 ++#, no-c-format ++msgid "Quality scan" ++msgstr "Escaneo de calidade" ++ ++#: .tmp/microtek2.h:628 ++#: .tmp/snapscan-options.c:376 ++#, no-c-format ++msgid "Highest quality but lower speed" ++msgstr "A mellor calidade, pero a velocidade lenta" ++ ++#: .tmp/microtek2.h:631 ++#, no-c-format ++msgid "Fast scan" ++msgstr "Escaneo rápido" ++ ++#: .tmp/microtek2.h:632 ++#, no-c-format ++msgid "Highest speed but lower quality" ++msgstr "Máis rápido, pero de pior calidade" ++ ++#: .tmp/microtek2.h:635 ++#, no-c-format ++msgid "Automatic adjustment of threshold" ++msgstr "Axuste automático de limiar" ++ ++#: .tmp/microtek2.h:636 ++#, no-c-format ++msgid "If checked the backend automatically tries to determine an optimal value for the threshold." ++msgstr "Se se selecciona, o motor tenta determinar automaticamente un valor óptimo para o limiar." ++ ++#: .tmp/microtek2.h:641 ++#, no-c-format ++msgid "Gamma correction" ++msgstr "Corrección gamma" ++ ++#: .tmp/microtek2.h:642 ++#, no-c-format ++msgid "Selects the gamma correction mode." ++msgstr "Selecciona o modo de corrección gamma" ++ ++#: .tmp/microtek2.h:645 ++#, no-c-format ++msgid "Bind gamma" ++msgstr "Conectar gamma" ++ ++#: .tmp/microtek2.h:646 ++#, no-c-format ++msgid "Use same gamma values for all colour channels." ++msgstr "Usar os mesmos valores gamma para todas as canles de cores." ++ ++#: .tmp/microtek2.h:650 ++#, no-c-format ++msgid "Scalar gamma" ++msgstr "Gamma escalar" ++ ++#: .tmp/microtek2.h:651 ++#, no-c-format ++msgid "Selects a value for scalar gamma correction." ++msgstr "Escolle un valor para a corrección gamma escalar." ++ ++#: .tmp/microtek2.h:655 ++#, no-c-format ++msgid "Scalar gamma red" ++msgstr "Gamma escalar vermella" ++ ++#: .tmp/microtek2.h:656 ++#, no-c-format ++msgid "Selects a value for scalar gamma correction (red channel)" ++msgstr "Escolle un valor para a corrección gamma escalar (canle vermella)" ++ ++#: .tmp/microtek2.h:660 ++#, no-c-format ++msgid "Scalar gamma green" ++msgstr "Gamma escalar verde" ++ ++#: .tmp/microtek2.h:661 ++#, no-c-format ++msgid "Selects a value for scalar gamma correction (green channel)" ++msgstr "Escolle un valor para a corrección gamma escalar (canle verde)" ++ ++#: .tmp/microtek2.h:665 ++#, no-c-format ++msgid "Scalar gamma blue" ++msgstr "Gamma escalar azul" ++ ++#: .tmp/microtek2.h:666 ++#, no-c-format ++msgid "Selects a value for scalar gamma correction (blue channel)" ++msgstr "Escolle un valor para a corrección gamma escalar (canle azul)" ++ ++#: .tmp/microtek2.h:670 ++#, no-c-format ++msgid "Channel" ++msgstr "Canle" ++ ++#: .tmp/microtek2.h:671 ++#, no-c-format ++msgid "Selects the colour band, \"Master\" means that all colours are affected." ++msgstr "Escolle a gama de cor, «Master» significa que afecta a todas as cores." ++ ++#: .tmp/microtek2.h:675 ++#, no-c-format ++msgid "Midtone" ++msgstr "Medios tons" ++ ++#: .tmp/microtek2.h:676 ++#, no-c-format ++msgid "Selects which radiance level should be considered \"50 % gray\"." ++msgstr "Selecciona o nivel de radiancia a ter en conta \"50% gris\"." ++ ++#: .tmp/microtek2.h:680 ++#, no-c-format ++msgid "Midtone for red" ++msgstr "Medios tons para vermello" ++ ++#: .tmp/microtek2.h:681 ++#, no-c-format ++msgid "Selects which radiance level should be considered \"50 % red\"." ++msgstr "Selecciona o nivel de radiancia a ter en conta \"50% vermello\"." ++ ++#: .tmp/microtek2.h:685 ++#, no-c-format ++msgid "Midtone for green" ++msgstr "Medios tons para verde" ++ ++#: .tmp/microtek2.h:686 ++#, no-c-format ++msgid "Selects which radiance level should be considered \"50 % green\"." ++msgstr "Selecciona o nivel de radiancia a ter en conta \"50% verde\"." ++ ++#: .tmp/microtek2.h:690 ++#, no-c-format ++msgid "Midtone for blue" ++msgstr "Medios tons para azul" ++ ++#: .tmp/microtek2.h:691 ++#, no-c-format ++msgid "Selects which radiance level should be considered \"50 % blue\"." ++msgstr "Selecciona o nivel de radiancia a ter en conta \"50% azul\".Selecciona o nivel de radiancia a ter en conta \"50% azul\"." ++ ++#: .tmp/microtek2.h:695 ++#, no-c-format ++msgid "Red balance" ++msgstr "Balance de vermello" ++ ++#: .tmp/microtek2.h:696 ++#, no-c-format ++msgid "Balance factor for red. A value of 100% means no correction." ++msgstr "Factor de balance para vermello. Un valor de 100% significa sen corrección." ++ ++#: .tmp/microtek2.h:700 ++#, no-c-format ++msgid "Green balance" ++msgstr "Balance de verde" ++ ++#: .tmp/microtek2.h:701 ++#, no-c-format ++msgid "Balance factor for green. A value of 100% means no correction." ++msgstr "Factor de balance para verde. Un valor de 100% significa sen corrección." ++ ++#: .tmp/microtek2.h:705 ++#, no-c-format ++msgid "Blue balance" ++msgstr "Balance de azul" ++ ++#: .tmp/microtek2.h:706 ++#, no-c-format ++msgid "Balance factor for blue. A value of 100% means no correction." ++msgstr "Factor de balance para azul. Un valor de 100% significa sen corrección." ++ ++#: .tmp/microtek2.h:710 ++#, no-c-format ++msgid "Firmware balance" ++msgstr "Balance de firmware" ++ ++#: .tmp/microtek2.h:711 ++#, no-c-format ++msgid "Sets the color balance values to the firmware provided values." ++msgstr "Axusta o balance de cor aos valores fornecidos polo firmware." ++ ++#: .tmp/mustek.c:145 ++#, no-c-format ++msgid "Slowest" ++msgstr "O máis lento" ++ ++#: .tmp/mustek.c:145 ++#, no-c-format ++msgid "Slower" ++msgstr "Máis lento" ++ ++#: .tmp/mustek.c:146 ++#, no-c-format ++msgid "Faster" ++msgstr "Máis rápido" ++ ++#: .tmp/mustek.c:146 ++#, no-c-format ++msgid "Fastest" ++msgstr "O máis rápido" ++ ++#: .tmp/mustek.c:173 ++#, no-c-format ++msgid "8x8 coarse" ++msgstr "8x8 groso" ++ ++#: .tmp/mustek.c:173 ++#, no-c-format ++msgid "8x8 normal" ++msgstr "8x8 normal" ++ ++#: .tmp/mustek.c:173 ++#, no-c-format ++msgid "8x8 fine" ++msgstr "8x8 fino" ++ ++#: .tmp/mustek.c:174 ++#, no-c-format ++msgid "8x8 very fine" ++msgstr "8x8 moi fino" ++ ++#: .tmp/mustek.c:174 ++#, no-c-format ++msgid "6x6 normal" ++msgstr "6x6 normal" ++ ++#: .tmp/mustek.c:175 ++#, no-c-format ++msgid "5x5 coarse" ++msgstr "5x5 groso" ++ ++#: .tmp/mustek.c:175 ++#, no-c-format ++msgid "5x5 fine" ++msgstr "5x5 fino" ++ ++#: .tmp/mustek.c:175 ++#, no-c-format ++msgid "4x4 coarse" ++msgstr "4x4 groso" ++ ++#: .tmp/mustek.c:176 ++#, no-c-format ++msgid "4x4 normal" ++msgstr "4x4 normal" ++ ++#: .tmp/mustek.c:176 ++#, no-c-format ++msgid "4x4 fine" ++msgstr "4x4 fino" ++ ++#: .tmp/mustek.c:176 ++#, no-c-format ++msgid "3x3 normal" ++msgstr "3x3 normal" ++ ++#: .tmp/mustek.c:177 ++#, no-c-format ++msgid "2x2 normal" ++msgstr "2x2 normal" ++ ++#: .tmp/mustek.c:177 ++#, no-c-format ++msgid "8x8 custom" ++msgstr "8x8 personalizado" ++ ++#: .tmp/mustek.c:178 ++#, no-c-format ++msgid "6x6 custom" ++msgstr "6x6 personalizado" ++ ++#: .tmp/mustek.c:179 ++#, no-c-format ++msgid "5x5 custom" ++msgstr "5x5 personalizado" ++ ++#: .tmp/mustek.c:179 ++#, no-c-format ++msgid "4x4 custom" ++msgstr "4x4 personalizado" ++ ++#: .tmp/mustek.c:180 ++#, no-c-format ++msgid "3x3 custom" ++msgstr "3x3 personalizado" ++ ++#: .tmp/mustek.c:181 ++#, no-c-format ++msgid "2x2 custom" ++msgstr "2x2 personalizado" ++ ++#: .tmp/mustek.c:4233 ++#, no-c-format ++msgid "Fast gray mode" ++msgstr "Modo gris rápido" ++ ++#: .tmp/mustek.c:4234 ++#, no-c-format ++msgid "Scan in fast gray mode (lower quality)." ++msgstr "Escanear en modo gris rápido (menor calidade)." ++ ++#: .tmp/mustek.c:4331 ++#, no-c-format ++msgid "Request that all previews are done in the fastest (low-quality) mode. This may be a non-color mode or a low resolution mode." ++msgstr "Precisa que todas as vistas previas se fagan do modo máis rápido (baixa calidade). Este pode ser un modo sen cor ou un modo de baixa resolución." ++ ++#: .tmp/mustek.c:4339 ++#, no-c-format ++msgid "Lamp off time (minutes)" ++msgstr "Tempo de apagado de lámpada (minutos)" ++ ++#: .tmp/mustek.c:4340 ++#, no-c-format ++msgid "Set the time (in minutes) after which the lamp is shut off." ++msgstr "Axusta o tempo (en minutos) tras o que se apagará a lámpada." ++ ++#: .tmp/mustek.c:4351 ++#, no-c-format ++msgid "Turn lamp off" ++msgstr "Apagar a lámpada" ++ ++#: .tmp/mustek.c:4352 ++#, no-c-format ++msgid "Turns the lamp off immediately." ++msgstr "Apaga a lámpada inmediatamente." ++ ++#: .tmp/mustek.c:4429 ++#, no-c-format ++msgid "Red brightness" ++msgstr "Brillo de vermello" ++ ++#: .tmp/mustek.c:4430 ++#, no-c-format ++msgid "Controls the brightness of the red channel of the acquired image." ++msgstr "Controla o brillo da canle de vermello da imaxe obtida." ++ ++#: .tmp/mustek.c:4442 ++#, no-c-format ++msgid "Green brightness" ++msgstr "Brillo de verde" ++ ++#: .tmp/mustek.c:4443 ++#, no-c-format ++msgid "Controls the brightness of the green channel of the acquired image." ++msgstr "Controla o brillo da canle de verde da imaxe obtida." ++ ++#: .tmp/mustek.c:4455 ++#, no-c-format ++msgid "Blue brightness" ++msgstr "Brillo de azul" ++ ++#: .tmp/mustek.c:4456 ++#, no-c-format ++msgid "Controls the brightness of the blue channel of the acquired image." ++msgstr "Controla o brillo da canle de azul da imaxe obtida." ++ ++#: .tmp/mustek.c:4481 ++#, no-c-format ++msgid "Contrast red channel" ++msgstr "Contraste da canle vermella" ++ ++#: .tmp/mustek.c:4482 ++#, no-c-format ++msgid "Controls the contrast of the red channel of the acquired image." ++msgstr "Controla o contraste da canle vermella da imaxe obtida." ++ ++#: .tmp/mustek.c:4494 ++#, no-c-format ++msgid "Contrast green channel" ++msgstr "Contraste da canle verde" ++ ++#: .tmp/mustek.c:4495 ++#, no-c-format ++msgid "Controls the contrast of the green channel of the acquired image." ++msgstr "Controla o contraste da canle verde da imaxe obtida." ++ ++#: .tmp/mustek.c:4507 ++#, no-c-format ++msgid "Contrast blue channel" ++msgstr "Contraste da canle azul" ++ ++#: .tmp/mustek.c:4508 ++#, no-c-format ++msgid "Controls the contrast of the blue channel of the acquired image." ++msgstr "Controla o contraste da canle azul da imaxe obtida." ++ ++#: .tmp/mustek_usb2.c:105 ++#, no-c-format ++msgid "Color48" ++msgstr "Color48" ++ ++#: .tmp/mustek_usb2.c:106 ++#: .tmp/mustek_usb2.c:114 ++#, no-c-format ++msgid "Color24" ++msgstr "Color24" ++ ++#: .tmp/mustek_usb2.c:107 ++#, no-c-format ++msgid "Gray16" ++msgstr "Gris 16" ++ ++#: .tmp/mustek_usb2.c:108 ++#, no-c-format ++msgid "Gray8" ++msgstr "Gris 8" ++ ++#: .tmp/mustek_usb2.c:119 ++#, no-c-format ++msgid "Reflective" ++msgstr "Reflectantes" ++ ++#: .tmp/mustek_usb2.c:120 ++#, no-c-format ++msgid "Positive" ++msgstr "Positivo" ++ ++#: .tmp/mustek_usb2.c:421 ++#, no-c-format ++msgid "Warm-up until the lamp's brightness is constant instead of insisting on 40 seconds warm-up time." ++msgstr "Quecer até que o brillo da lámpada sexa constante no canto de agardar polos 40 segundos de quecemento." ++ ++#: .tmp/pixma_sane_options.c:91 ++#, no-c-format ++msgid "Button-controlled scan" ++msgstr "Botón de control de escaneo" ++ ++#: .tmp/pixma_sane_options.c:94 ++#, no-c-format ++msgid "When enabled, scan process will not start immediately. To proceed, press \"SCAN\" button (for MP150) or \"COLOR\" button (for other models). To cancel, press \"GRAY\" button." ++msgstr "Activado, o proceso de escaneo non comezará inmediatamente. Para proceder, faga clic no botón «SCAN» (para MP150) ou «COLOR» (para outros modelos). Para cancelar, prema no botón «GRAY»." ++ ++#: .tmp/pixma_sane_options.c:216 ++#, no-c-format ++msgid "Update button state" ++msgstr "Actualizar estado do botón" ++ ++#: .tmp/pixma_sane_options.c:228 ++#, no-c-format ++msgid "Button 1" ++msgstr "Botón 1" ++ ++#: .tmp/pixma_sane_options.c:242 ++#, no-c-format ++msgid "Button 2" ++msgstr "Botón 2" ++ ++#: .tmp/plustek.c:234 ++#: .tmp/plustek_pp.c:201 ++#: .tmp/u12.c:156 ++#, no-c-format ++msgid "Transparency" ++msgstr "Transparencia" ++ ++#: .tmp/plustek.c:912 ++#, no-c-format ++msgid "Device-Settings" ++msgstr "Axustes do dispositivo" ++ ++#: .tmp/plustek.c:919 ++#, no-c-format ++msgid "Lampswitch" ++msgstr "Interruptor de lámpada" ++ ++#: .tmp/plustek.c:920 ++#, no-c-format ++msgid "Manually switching the lamp(s)." ++msgstr "Cambiar a(s) lámpada(s) manualmente." ++ ++#: .tmp/plustek.c:925 ++#, no-c-format ++msgid "Lamp off during dark calibration" ++msgstr "Apagar a lámpada durante a calibración de escuridade" ++ ++#: .tmp/plustek.c:926 ++#, no-c-format ++msgid "Always switches lamp off when doing dark calibration." ++msgstr "Apagar sempre a lámpada cando se calibra a escuridade." ++ ++#: .tmp/plustek.c:934 ++#, no-c-format ++msgid "Calibration data cache" ++msgstr "Caché de datos de calibración" ++ ++#: .tmp/plustek.c:935 ++#, no-c-format ++msgid "Enables or disables calibration data cache." ++msgstr "Activa ou desactiva a caché de datos de calibración" ++ ++#: .tmp/plustek.c:941 ++#, no-c-format ++msgid "Performs calibration" ++msgstr "Calibración de precisión" ++ ++#: .tmp/plustek.c:958 ++#, no-c-format ++msgid "Speedup sensor" ++msgstr "Acelerar o sensor" ++ ++#: .tmp/plustek.c:959 ++#, no-c-format ++msgid "Enables or disables speeding up sensor movement." ++msgstr "Activa ou desactiva a aceleración de movimento do sensor." ++ ++#: .tmp/plustek.c:973 ++#, no-c-format ++msgid "Warmup-time" ++msgstr "Tempo de quecemento" ++ ++#: .tmp/plustek.c:974 ++#, no-c-format ++msgid "Warmup-time in seconds." ++msgstr "Tempo de quecemento en segundos" ++ ++#: .tmp/plustek.c:986 ++#, no-c-format ++msgid "Lampoff-time" ++msgstr "Tempo de apagado da lámpada" ++ ++#: .tmp/plustek.c:987 ++#, no-c-format ++msgid "Lampoff-time in seconds." ++msgstr "Tempo de apagado da lámpada en segundos" ++ ++#: .tmp/plustek.c:994 ++#, no-c-format ++msgid "Analog frontend" ++msgstr "Interface analóxica (AFE)" ++ ++#: .tmp/plustek.c:1001 ++#, no-c-format ++msgid "Red gain value of the AFE" ++msgstr "Valor de ganancia vermella no AFE" ++ ++#: .tmp/plustek.c:1008 ++#: .tmp/umax_pp.c:790 ++#, no-c-format ++msgid "Red offset" ++msgstr "Desviación vermella" ++ ++#: .tmp/plustek.c:1009 ++#, no-c-format ++msgid "Red offset value of the AFE" ++msgstr "Valor da desviación vermella no AFE" ++ ++#: .tmp/plustek.c:1017 ++#, no-c-format ++msgid "Green gain value of the AFE" ++msgstr "Valor de ganancia verde no AFE" ++ ++#: .tmp/plustek.c:1024 ++#: .tmp/umax_pp.c:802 ++#, no-c-format ++msgid "Green offset" ++msgstr "Desviación verde" ++ ++#: .tmp/plustek.c:1025 ++#, no-c-format ++msgid "Green offset value of the AFE" ++msgstr "Valor da desviación verde no AFE" ++ ++#: .tmp/plustek.c:1033 ++#, no-c-format ++msgid "Blue gain value of the AFE" ++msgstr "Valor de ganancia azul no AFE" ++ ++#: .tmp/plustek.c:1040 ++#: .tmp/umax_pp.c:814 ++#, no-c-format ++msgid "Blue offset" ++msgstr "Desviación azul" ++ ++#: .tmp/plustek.c:1041 ++#, no-c-format ++msgid "Blue offset value of the AFE" ++msgstr "Valor da desviación azul no AFE" ++ ++#: .tmp/plustek.c:1048 ++#, no-c-format ++msgid "Red lamp off" ++msgstr "Apagar alámpada vermella" ++ ++#: .tmp/plustek.c:1049 ++#, no-c-format ++msgid "Defines red lamp off parameter" ++msgstr "Define os parámetros de apagado da lámpada vermella" ++ ++#: .tmp/plustek.c:1056 ++#, no-c-format ++msgid "Green lamp off" ++msgstr "Apagar lámpada verde" ++ ++#: .tmp/plustek.c:1057 ++#, no-c-format ++msgid "Defines green lamp off parameter" ++msgstr "Define os parámetros de apagado da lámpada verde" ++ ++#: .tmp/plustek.c:1064 ++#, no-c-format ++msgid "Blue lamp off" ++msgstr "Apagar lámpada azul" ++ ++#: .tmp/plustek.c:1065 ++#, no-c-format ++msgid "Defines blue lamp off parameter" ++msgstr "Define os parámetros de apagado da lámpada azul" ++ ++#: .tmp/plustek.c:1095 ++#, no-c-format ++msgid "This option reflects the status of the scanner buttons." ++msgstr "Esta opción reflicte o estado dos botóns do escáner" ++ ++#: .tmp/plustek_pp.c:194 ++#, no-c-format ++msgid "Color36" ++msgstr "Color36" ++ ++#: .tmp/plustek_pp.c:208 ++#, no-c-format ++msgid "Dithermap 1" ++msgstr "Mapa de trama 1" ++ ++#: .tmp/plustek_pp.c:209 ++#, no-c-format ++msgid "Dithermap 2" ++msgstr "Mapa de trama 2" ++ ++#: .tmp/plustek_pp.c:210 ++#, no-c-format ++msgid "Randomize" ++msgstr "Aleatorio" ++ ++#: .tmp/pnm.c:168 ++#, no-c-format ++msgid "Source Selection" ++msgstr "Escoller a orixe" ++ ++#: .tmp/pnm.c:205 ++#, no-c-format ++msgid "Image Enhancement" ++msgstr "Optimización da imaxe" ++ ++#: .tmp/pnm.c:241 ++#, no-c-format ++msgid "Grayify" ++msgstr "Agrisar" ++ ++#: .tmp/pnm.c:242 ++#, no-c-format ++msgid "Load the image as grayscale." ++msgstr "Cargar a imaxe como escala de grises." ++ ++#: .tmp/pnm.c:253 ++#, no-c-format ++msgid "Three-Pass Simulation" ++msgstr "Simulación de tres pasadas" ++ ++#: .tmp/pnm.c:255 ++#, no-c-format ++msgid "Simulate a three-pass scanner by returning 3 separate frames. For kicks, it returns green, then blue, then red." ++msgstr "Semella un escáner de tres pasadas devolvendo 3 mostras separadas. Por diversión, devolve verde, despois azul y finalmente vermello." ++ ++#: .tmp/pnm.c:267 ++#, no-c-format ++msgid "Hand-Scanner Simulation" ++msgstr "Simulación de escáner de man" ++ ++#: .tmp/pnm.c:268 ++#, no-c-format ++msgid "Simulate a hand-scanner. Hand-scanners often do not know the image height a priori. Instead, they return a height of -1. Setting this option allows to test whether a frontend can handle this correctly." ++msgstr "Semella un escáner de man. Os escáneres de man adoitan descoñecer a priori a distancia á imaxe. Na súa vez utiliza unha altura de retorno -1. Axustar esta opción permítelle comprobar se unha interface pode manexar isto correctamente." ++ ++#: .tmp/pnm.c:283 ++#, no-c-format ++msgid "Set default values for enhancement controls (brightness & contrast)." ++msgstr "Axustar os valores predeterminados para os controis de optimización (brillo e contraste)" ++ ++#: .tmp/pnm.c:295 ++#, no-c-format ++msgid "Read only test-option" ++msgstr "Opción de proba de só lectura" ++ ++#: .tmp/pnm.c:296 ++#, no-c-format ++msgid "Let's see whether frontends can treat this right" ++msgstr "Vexamos se a interface pode tratar isto correctamente" ++ ++#: .tmp/pnm.c:307 ++#, no-c-format ++msgid "Gamma Tables" ++msgstr "Táboas gamma" ++ ++#: .tmp/pnm.c:379 ++#, no-c-format ++msgid "Status Code Simulation" ++msgstr "Simulación do código de estado" ++ ++#: .tmp/pnm.c:391 ++#, no-c-format ++msgid "Do not force status code" ++msgstr "Non forzar o código de estado" ++ ++#: .tmp/pnm.c:392 ++#, no-c-format ++msgid "Do not force the backend to return a status code." ++msgstr "Non forzar o motor a devolver un código de estado." ++ ++#: .tmp/pnm.c:403 ++#, no-c-format ++msgid "Return SANE_STATUS_EOF" ++msgstr "Devolve SANE_STATUS_EOF" ++ ++#: .tmp/pnm.c:404 ++#, no-c-format ++msgid "Force the backend to return the status code SANE_STATUS_EOF after sane_read() has been called." ++msgstr "Forzar o motor a devolver o código de estado de SANE_STATUS_EOF despois de ter sido chamado sane_read()." ++ ++#: .tmp/pnm.c:416 ++#, no-c-format ++msgid "Return SANE_STATUS_JAMMED" ++msgstr "Devolve SANE_STATUS_JAMMED" ++ ++#: .tmp/pnm.c:418 ++#, no-c-format ++msgid "Force the backend to return the status code SANE_STATUS_JAMMED after sane_read() has been called." ++msgstr "Forzar o motor a devolver o código de estado de SANE_STATUS_JAMMED despois de ter sido chamado sane_read()." ++ ++#: .tmp/pnm.c:430 ++#, no-c-format ++msgid "Return SANE_STATUS_NO_DOCS" ++msgstr "Devolve SANE_STATUS_NO_DOCS" ++ ++#: .tmp/pnm.c:431 ++#, no-c-format ++msgid "Force the backend to return the status code SANE_STATUS_NO_DOCS after sane_read() has been called." ++msgstr "Forzar o motor a devolver o código de estado de SANE_STATUS_NO_DOCS despois de ter sido chamado sane_read()." ++ ++#: .tmp/pnm.c:443 ++#, no-c-format ++msgid "Return SANE_STATUS_COVER_OPEN" ++msgstr "Devolve SANE_STATUS_COVER_OPEN" ++ ++#: .tmp/pnm.c:444 ++#, no-c-format ++msgid "Force the backend to return the status code SANE_STATUS_COVER_OPEN after sane_read() has been called." ++msgstr "Forzar o motor a devolver o código de estado de SANE_STATUS_COVER_OPEN despois de ter sido chamado sane_read()." ++ ++#: .tmp/pnm.c:456 ++#, no-c-format ++msgid "Return SANE_STATUS_IO_ERROR" ++msgstr "Devolve SANE_STATUS_IO_ERROR" ++ ++#: .tmp/pnm.c:457 ++#, no-c-format ++msgid "Force the backend to return the status code SANE_STATUS_IO_ERROR after sane_read() has been called." ++msgstr "Forzar o motor a devolver o código de estado de SANE_STATUS_IO_ERROR despois de ter sido chamado sane_read()." ++ ++#: .tmp/pnm.c:469 ++#, no-c-format ++msgid "Return SANE_STATUS_NO_MEM" ++msgstr "Devolve SANE_STATUS_NO_MEM" ++ ++#: .tmp/pnm.c:471 ++#, no-c-format ++msgid "Force the backend to return the status code SANE_STATUS_NO_MEM after sane_read() has been called." ++msgstr "Forzar o motor a devolver o código de estado de SANE_STATUS_NO_MEM despois de ter sido chamado sane_read()." ++ ++#: .tmp/pnm.c:483 ++#, no-c-format ++msgid "Return SANE_STATUS_ACCESS_DENIED" ++msgstr "Devolve SANE_STATUS_ACCESS_DENIED" ++ ++#: .tmp/pnm.c:484 ++#, no-c-format ++msgid "Force the backend to return the status code SANE_STATUS_ACCESS_DENIED after sane_read() has been called." ++msgstr "Forzar o motor a devolver o código de estado de SANE_STATUS_ACCESS_DENIED despois de ter sido chamado sane_read()." ++ ++#: .tmp/rts8891.c:2744 ++#, no-c-format ++msgid "This option reflects the status of a scanner button." ++msgstr "Esta opción reflicte o estado dos botóns do escáner" ++ ++#: .tmp/rts8891.c:2775 ++#: .tmp/umax.c:5796 ++#: .tmp/umax_pp.c:637 ++#, no-c-format ++msgid "Lamp on" ++msgstr "Acender lámpada" ++ ++#: .tmp/rts8891.c:2776 ++#: .tmp/umax.c:5797 ++#, no-c-format ++msgid "Turn on scanner lamp" ++msgstr "Acende a lámpada do escáner" ++ ++#: .tmp/rts8891.c:2786 ++#: .tmp/umax.c:5813 ++#: .tmp/umax1220u.c:248 ++#, no-c-format ++msgid "Lamp off" ++msgstr "Apagar lámpada" ++ ++#: .tmp/rts8891.c:2787 ++#: .tmp/umax.c:5814 ++#: .tmp/umax1220u.c:249 ++#, no-c-format ++msgid "Turn off scanner lamp" ++msgstr "Apaga a lámpada do escáner" ++ ++#: .tmp/sane_strstatus.c:59 ++#, no-c-format ++msgid "Success" ++msgstr "Éxito" ++ ++#: .tmp/sane_strstatus.c:62 ++#, no-c-format ++msgid "Operation not supported" ++msgstr "Operación non compatible" ++ ++#: .tmp/sane_strstatus.c:65 ++#, no-c-format ++msgid "Operation was cancelled" ++msgstr "A operación vai ser cancelada" ++ ++#: .tmp/sane_strstatus.c:68 ++#, no-c-format ++msgid "Device busy" ++msgstr "Dispositivo ocupado" ++ ++#: .tmp/sane_strstatus.c:71 ++#, no-c-format ++msgid "Invalid argument" ++msgstr "Argumento incorrecto" ++ ++#: .tmp/sane_strstatus.c:74 ++#, no-c-format ++msgid "End of file reached" ++msgstr "Acadouse o fin do ficheiro" ++ ++#: .tmp/sane_strstatus.c:77 ++#, no-c-format ++msgid "Document feeder jammed" ++msgstr "Alimentador de documentos atrancado" ++ ++#: .tmp/sane_strstatus.c:80 ++#, no-c-format ++msgid "Document feeder out of documents" ++msgstr "O alimentador de documentos está baleiro" ++ ++#: .tmp/sane_strstatus.c:83 ++#, no-c-format ++msgid "Scanner cover is open" ++msgstr "A tapa do escáner está aberta" ++ ++#: .tmp/sane_strstatus.c:86 ++#, no-c-format ++msgid "Error during device I/O" ++msgstr "Erro en dispositivo de E/S" ++ ++#: .tmp/sane_strstatus.c:89 ++#, no-c-format ++msgid "Out of memory" ++msgstr "Non queda memoria" ++ ++#: .tmp/sane_strstatus.c:92 ++#, no-c-format ++msgid "Access to resource has been denied" ++msgstr "Denegouse o acceso ao recurso" ++ ++#: .tmp/sane_strstatus.c:96 ++#, no-c-format ++msgid "Lamp not ready, please retry" ++msgstr "A lámpada non está preparada, tenteo de novo" ++ ++#: .tmp/sane_strstatus.c:101 ++#, no-c-format ++msgid "Scanner mechanism locked for transport" ++msgstr "O escáner está bloqueado para transporte" ++ ++#: .tmp/saneopts.h:154 ++#, no-c-format ++msgid "Number of options" ++msgstr "Número de opcións" ++ ++#: .tmp/saneopts.h:156 ++#, no-c-format ++msgid "Standard" ++msgstr "Estándar" ++ ++#: .tmp/saneopts.h:160 ++#, no-c-format ++msgid "Sensors" ++msgstr "Sensores" ++ ++#: .tmp/saneopts.h:162 ++#, no-c-format ++msgid "Preview" ++msgstr "Vista previa" ++ ++#: .tmp/saneopts.h:163 ++#, no-c-format ++msgid "Force monochrome preview" ++msgstr "Forzar vista previa monocroma" ++ ++#: .tmp/saneopts.h:164 ++#, no-c-format ++msgid "Bit depth" ++msgstr "Bit de profundidade" ++ ++#: .tmp/saneopts.h:166 ++#, no-c-format ++msgid "Scan speed" ++msgstr "Velocidade de escaneo" ++ ++#: .tmp/saneopts.h:167 ++#, no-c-format ++msgid "Scan source" ++msgstr "Orixe de escaneo" ++ ++#: .tmp/saneopts.h:168 ++#, no-c-format ++msgid "Force backtracking" ++msgstr "Forzar retroceso" ++ ++#: .tmp/saneopts.h:169 ++#, no-c-format ++msgid "Top-left x" ++msgstr "Arriba-esquerda X" ++ ++#: .tmp/saneopts.h:170 ++#, no-c-format ++msgid "Top-left y" ++msgstr "Arriba-esquerda Y" ++ ++#: .tmp/saneopts.h:171 ++#, no-c-format ++msgid "Bottom-right x" ++msgstr "Abaixo-dereita X" ++ ++#: .tmp/saneopts.h:172 ++#, no-c-format ++msgid "Bottom-right y" ++msgstr "Abaixo-dereita Y" ++ ++#: .tmp/saneopts.h:174 ++#, no-c-format ++msgid "X-resolution" ++msgstr "Resolución X" ++ ++#: .tmp/saneopts.h:175 ++#, no-c-format ++msgid "Y-resolution" ++msgstr "Resolución Y" ++ ++#: .tmp/saneopts.h:176 ++#, no-c-format ++msgid "Page width" ++msgstr "Ancho de páxina" ++ ++#: .tmp/saneopts.h:177 ++#, no-c-format ++msgid "Page height" ++msgstr "Altura de páxina" ++ ++#: .tmp/saneopts.h:178 ++#, no-c-format ++msgid "Use custom gamma table" ++msgstr "Usar táboa gamma personalizada" ++ ++#: .tmp/saneopts.h:179 ++#, no-c-format ++msgid "Image intensity" ++msgstr "Intensidade da imaxe" ++ ++#: .tmp/saneopts.h:180 ++#, no-c-format ++msgid "Red intensity" ++msgstr "Intensidade de vermello" ++ ++#: .tmp/saneopts.h:181 ++#, no-c-format ++msgid "Green intensity" ++msgstr "Intensidade de verde" ++ ++#: .tmp/saneopts.h:182 ++#, no-c-format ++msgid "Blue intensity" ++msgstr "Intensidade de azul" ++ ++#: .tmp/saneopts.h:183 ++#, no-c-format ++msgid "Brightness" ++msgstr "Brillo" ++ ++#: .tmp/saneopts.h:184 ++#, no-c-format ++msgid "Contrast" ++msgstr "Contraste" ++ ++#: .tmp/saneopts.h:185 ++#, no-c-format ++msgid "Grain size" ++msgstr "Tamaño do gran" ++ ++#: .tmp/saneopts.h:186 ++#, no-c-format ++msgid "Halftoning" ++msgstr "Medios tons" ++ ++#: .tmp/saneopts.h:187 ++#, no-c-format ++msgid "Black level" ++msgstr "Nivel do negro" ++ ++#: .tmp/saneopts.h:188 ++#, no-c-format ++msgid "White level" ++msgstr "Nivel do branco" ++ ++#: .tmp/saneopts.h:189 ++#, no-c-format ++msgid "White level for red" ++msgstr "Nivel do branco para vermello" ++ ++#: .tmp/saneopts.h:190 ++#, no-c-format ++msgid "White level for green" ++msgstr "Nivel do branco para verde" ++ ++#: .tmp/saneopts.h:191 ++#, no-c-format ++msgid "White level for blue" ++msgstr "Nivel do branco para azul" ++ ++#: .tmp/saneopts.h:192 ++#, no-c-format ++msgid "Shadow" ++msgstr "Sombra" ++ ++#: .tmp/saneopts.h:193 ++#, no-c-format ++msgid "Shadow for red" ++msgstr "Sombra para vermello" ++ ++#: .tmp/saneopts.h:194 ++#, no-c-format ++msgid "Shadow for green" ++msgstr "Sombra para verde" ++ ++#: .tmp/saneopts.h:195 ++#, no-c-format ++msgid "Shadow for blue" ++msgstr "Sombra para azul" ++ ++#: .tmp/saneopts.h:196 ++#, no-c-format ++msgid "Highlight" ++msgstr "Resaltar" ++ ++#: .tmp/saneopts.h:197 ++#, no-c-format ++msgid "Highlight for red" ++msgstr "Resalte para vermello" ++ ++#: .tmp/saneopts.h:198 ++#, no-c-format ++msgid "Highlight for green" ++msgstr "Resalte para verde" ++ ++#: .tmp/saneopts.h:199 ++#, no-c-format ++msgid "Highlight for blue" ++msgstr "Resalte para azul" ++ ++#: .tmp/saneopts.h:200 ++#, no-c-format ++msgid "Hue" ++msgstr "Matiz" ++ ++#: .tmp/saneopts.h:201 ++#, no-c-format ++msgid "Saturation" ++msgstr "Saturación" ++ ++#: .tmp/saneopts.h:202 ++#, no-c-format ++msgid "Filename" ++msgstr "Nome do ficheiro" ++ ++#: .tmp/saneopts.h:203 ++#, no-c-format ++msgid "Halftone pattern size" ++msgstr "Tamaño do patrón de medios tons" ++ ++#: .tmp/saneopts.h:204 ++#, no-c-format ++msgid "Halftone pattern" ++msgstr "Patrón de medios tons" ++ ++#: .tmp/saneopts.h:205 ++#, no-c-format ++msgid "Bind X and Y resolution" ++msgstr "Ligar resolucións X e Y" ++ ++#: .tmp/saneopts.h:207 ++#, no-c-format ++msgid "Quality calibration" ++msgstr "Calibración da calidade" ++ ++#: .tmp/saneopts.h:208 ++#, no-c-format ++msgid "Double Optical Resolution" ++msgstr "Dobre resolución óptica" ++ ++#: .tmp/saneopts.h:209 ++#, no-c-format ++msgid "Bind RGB" ++msgstr "Ligar RGB" ++ ++#: .tmp/saneopts.h:210 ++#: .tmp/sm3840.c:768 ++#, no-c-format ++msgid "Threshold" ++msgstr "Limiar" ++ ++#: .tmp/saneopts.h:211 ++#, no-c-format ++msgid "Analog gamma correction" ++msgstr "Corrección gamma analóxica" ++ ++#: .tmp/saneopts.h:212 ++#, no-c-format ++msgid "Analog gamma red" ++msgstr "Gamma analóxica vermella" ++ ++#: .tmp/saneopts.h:213 ++#, no-c-format ++msgid "Analog gamma green" ++msgstr "Gamma analóxica verde" ++ ++#: .tmp/saneopts.h:214 ++#, no-c-format ++msgid "Analog gamma blue" ++msgstr "Gamma analóxica azul" ++ ++#: .tmp/saneopts.h:215 ++#, no-c-format ++msgid "Bind analog gamma" ++msgstr "Ligar gamma analógico" ++ ++#: .tmp/saneopts.h:216 ++#, no-c-format ++msgid "Warmup lamp" ++msgstr "Quecemento da lámpada" ++ ++#: .tmp/saneopts.h:217 ++#, no-c-format ++msgid "Cal. exposure-time" ++msgstr "Cal. tempo de exposición" ++ ++#: .tmp/saneopts.h:218 ++#, no-c-format ++msgid "Cal. exposure-time for red" ++msgstr "Cal. tempo de exposición para vermello" ++ ++#: .tmp/saneopts.h:219 ++#, no-c-format ++msgid "Cal. exposure-time for green" ++msgstr "Cal. tempo de exposición para verde" ++ ++#: .tmp/saneopts.h:221 ++#, no-c-format ++msgid "Cal. exposure-time for blue" ++msgstr "Cal. tempo de exposición para azul" ++ ++#: .tmp/saneopts.h:222 ++#, no-c-format ++msgid "Scan exposure-time" ++msgstr "Tempo de exposición para escaneo" ++ ++#: .tmp/saneopts.h:223 ++#, no-c-format ++msgid "Scan exposure-time for red" ++msgstr "Tempo de exposición para vermello" ++ ++#: .tmp/saneopts.h:224 ++#, no-c-format ++msgid "Scan exposure-time for green" ++msgstr "Tempo de exposición para verde" ++ ++#: .tmp/saneopts.h:226 ++#, no-c-format ++msgid "Scan exposure-time for blue" ++msgstr "Tempo de exposición para azul" ++ ++#: .tmp/saneopts.h:227 ++#, no-c-format ++msgid "Set exposure-time" ++msgstr "Axustar tempo de exposición" ++ ++#: .tmp/saneopts.h:228 ++#, no-c-format ++msgid "Cal. lamp density" ++msgstr "Cal. densidade da lámpada" ++ ++#: .tmp/saneopts.h:229 ++#, no-c-format ++msgid "Scan lamp density" ++msgstr "Densidade da lámpada de escaneo" ++ ++#: .tmp/saneopts.h:230 ++#, no-c-format ++msgid "Set lamp density" ++msgstr "Axustar a densidade da lámpada" ++ ++#: .tmp/saneopts.h:231 ++#: .tmp/umax.c:5830 ++#, no-c-format ++msgid "Lamp off at exit" ++msgstr "Apagar a lámpada ao saír" ++ ++#: .tmp/saneopts.h:245 ++#, no-c-format ++msgid "Read-only option that specifies how many options a specific devices supports." ++msgstr "Opción de só lectura que define cantas opcións soporta un dispositivo específico." ++ ++#: .tmp/saneopts.h:248 ++#, no-c-format ++msgid "Source, mode and resolution options" ++msgstr "Orixe, opcións de modo e resolución" ++ ++#: .tmp/saneopts.h:249 ++#, no-c-format ++msgid "Scan area and media size options" ++msgstr "Opcións da área de escaneo e tamaño do soporte" ++ ++#: .tmp/saneopts.h:250 ++#, no-c-format ++msgid "Image modification options" ++msgstr "Opcións de modificación de imaxe" ++ ++#: .tmp/saneopts.h:251 ++#, no-c-format ++msgid "Hardware specific options" ++msgstr "Opcións especificas de hardaware" ++ ++#: .tmp/saneopts.h:252 ++#, no-c-format ++msgid "Scanner sensors and buttons" ++msgstr "Sensores e botóns do escáner" ++ ++#: .tmp/saneopts.h:255 ++#, no-c-format ++msgid "Request a preview-quality scan." ++msgstr "Solicitar unha vista previa de calidade d escaneo." ++ ++#: .tmp/saneopts.h:258 ++#, no-c-format ++msgid "Request that all previews are done in monochrome mode. On a three-pass scanner this cuts down the number of passes to one and on a one-pass scanner, it reduces the memory requirements and scan-time of the preview." ++msgstr "Solicitar que todas as vistas previas sexan feitas en modo monocromo. Nun escáner de tres pasadas isto reduce o número de pasadas a unha, e nun escáner dunha pasada isto reduce o requisitos de memoria e o tempo de escaneo da vista previa." ++ ++#: .tmp/saneopts.h:264 ++#, no-c-format ++msgid "Number of bits per sample, typical values are 1 for \"line-art\" and 8 for multibit scans." ++msgstr "Número de bits por mostra, valores típicos son 1 para «liña de arte» e 8 para escaneos multibit." ++ ++#: .tmp/saneopts.h:268 ++#, no-c-format ++msgid "Selects the scan mode (e.g., lineart, monochrome, or color)." ++msgstr "Selecciona o modo de escaneo (ex. liña de arte, monocromo, ou cor)." ++ ++#: .tmp/saneopts.h:271 ++#, no-c-format ++msgid "Determines the speed at which the scan proceeds." ++msgstr "Determina a velocidade á que se fai o escaneo." ++ ++#: .tmp/saneopts.h:274 ++#, no-c-format ++msgid "Selects the scan source (such as a document-feeder)." ++msgstr "Selecciona a orixe do escaneo (como pode ser un alimentador de documentos)." ++ ++#: .tmp/saneopts.h:277 ++#, no-c-format ++msgid "Controls whether backtracking is forced." ++msgstr "Controla se se forza o retroceso" ++ ++#: .tmp/saneopts.h:280 ++#, no-c-format ++msgid "Top-left x position of scan area." ++msgstr "Posición X arriba-esquerda da área de escaneo." ++ ++#: .tmp/saneopts.h:283 ++#, no-c-format ++msgid "Top-left y position of scan area." ++msgstr "Posición Y arriba-esquerda da área de escaneo." ++ ++#: .tmp/saneopts.h:286 ++#, no-c-format ++msgid "Bottom-right x position of scan area." ++msgstr "Posición X abaixo-dereita da área de escaneo." ++ ++#: .tmp/saneopts.h:289 ++#, no-c-format ++msgid "Bottom-right y position of scan area." ++msgstr "Posición Y abaixo-dereita da área de escaneo." ++ ++#: .tmp/saneopts.h:292 ++#, no-c-format ++msgid "Sets the resolution of the scanned image." ++msgstr "Axusta a resolución da imaxe escaneada." ++ ++#: .tmp/saneopts.h:295 ++#, no-c-format ++msgid "Sets the horizontal resolution of the scanned image." ++msgstr "Axusta a resolución horizontal da imaxe escaneada." ++ ++#: .tmp/saneopts.h:298 ++#, no-c-format ++msgid "Sets the vertical resolution of the scanned image." ++msgstr "Axusta a resolución vertical da imaxe escaneada." ++ ++#: .tmp/saneopts.h:301 ++#, no-c-format ++msgid "Specifies the width of the media. Required for automatic centering of sheet-fed scans." ++msgstr "Especifica a anchura do soporte. É preciso para o centrado automático de follas de escaneo." ++ ++#: .tmp/saneopts.h:305 ++#, no-c-format ++msgid "Specifies the height of the media." ++msgstr "Especifica a altura do soporte" ++ ++#: .tmp/saneopts.h:308 ++#, no-c-format ++msgid "Determines whether a builtin or a custom gamma-table should be used." ++msgstr "Determina se se debe usarse unha táboa gamma interna ou personalizada." ++ ++#: .tmp/saneopts.h:312 ++#, no-c-format ++msgid "Gamma-correction table. In color mode this option equally affects the red, green, and blue channels simultaneously (i.e., it is an intensity gamma table)." ++msgstr "Táboa de corrección gamma. No modo cor, esta opción afecta igualmente as canles vermella, verde e azul de vez (ex. é unha táboa de intensidade gamma)." ++ ++#: .tmp/saneopts.h:317 ++#, no-c-format ++msgid "Gamma-correction table for the red band." ++msgstr "Táboa de corrección gamma para a gama vermella." ++ ++#: .tmp/saneopts.h:320 ++#, no-c-format ++msgid "Gamma-correction table for the green band." ++msgstr "Táboa de corrección gamma para a gama verde." ++ ++#: .tmp/saneopts.h:323 ++#, no-c-format ++msgid "Gamma-correction table for the blue band." ++msgstr "Táboa de corrección gamma para a gama azul." ++ ++#: .tmp/saneopts.h:326 ++#, no-c-format ++msgid "Controls the brightness of the acquired image." ++msgstr "Controla o brillo da imaxe obtida." ++ ++#: .tmp/saneopts.h:329 ++#, no-c-format ++msgid "Controls the contrast of the acquired image." ++msgstr "Controla o contraste da imaxe obtida." ++ ++#: .tmp/saneopts.h:332 ++#, no-c-format ++msgid "Selects the \"graininess\" of the acquired image. Smaller values result in sharper images." ++msgstr "Escolle o «granulado» da imaxe obtida. Valores máis pequenos fornecen imaxes máis nitidas." ++ ++#: .tmp/saneopts.h:336 ++#, no-c-format ++msgid "Selects whether the acquired image should be halftoned (dithered)." ++msgstr "Define se a imaxe obtida debe ser convertida a medios tons (punteado)." ++ ++#: .tmp/saneopts.h:339 ++#: .tmp/saneopts.h:354 ++#, no-c-format ++msgid "Selects what radiance level should be considered \"black\"." ++msgstr "Selecciona que nivel de radiancia debe ser tida en conta \"negro\"." ++ ++#: .tmp/saneopts.h:342 ++#: .tmp/saneopts.h:363 ++#, no-c-format ++msgid "Selects what radiance level should be considered \"white\"." ++msgstr "Selecciona que nivel de radiancia debe ser tida en conta \"branco\"." ++ ++#: .tmp/saneopts.h:345 ++#, no-c-format ++msgid "Selects what red radiance level should be considered \"white\"." ++msgstr "Selecciona que nivel de radiancia vermella debe ser tida en conta \"branco\"." ++ ++#: .tmp/saneopts.h:348 ++#, no-c-format ++msgid "Selects what green radiance level should be considered \"white\"." ++msgstr "Selecciona que nivel de radiancia verde debe ser tida en conta \"branco\"." ++ ++#: .tmp/saneopts.h:351 ++#, no-c-format ++msgid "Selects what blue radiance level should be considered \"white\"." ++msgstr "Selecciona que nivel de radiancia azul debe ser tida en conta \"branco\"." ++ ++#: .tmp/saneopts.h:356 ++#, no-c-format ++msgid "Selects what red radiance level should be considered \"black\"." ++msgstr "Selecciona que nivel de radiancia vermella debe ser tida en conta \"negro\"." ++ ++#: .tmp/saneopts.h:358 ++#, no-c-format ++msgid "Selects what green radiance level should be considered \"black\"." ++msgstr "Selecciona que nivel de radiancia verde debe ser tida en conta \"negro\"." ++ ++#: .tmp/saneopts.h:360 ++#, no-c-format ++msgid "Selects what blue radiance level should be considered \"black\"." ++msgstr "Selecciona que nivel de radiancia azul debe ser tida en conta \"negro\"." ++ ++#: .tmp/saneopts.h:365 ++#, no-c-format ++msgid "Selects what red radiance level should be considered \"full red\"." ++msgstr "Selecciona que nivel de radiancia vermella debe ser tida en conta \"vermello total\"." ++ ++#: .tmp/saneopts.h:367 ++#, no-c-format ++msgid "Selects what green radiance level should be considered \"full green\"." ++msgstr "Selecciona que nivel de radiancia verde debe ser tida en conta \"verde total\"." ++ ++#: .tmp/saneopts.h:370 ++#, no-c-format ++msgid "Selects what blue radiance level should be considered \"full blue\"." ++msgstr "Selecciona que nivel de radiancia azul debe ser tida en conta \"azul total\"." ++ ++#: .tmp/saneopts.h:374 ++#, no-c-format ++msgid "Controls the \"hue\" (blue-level) of the acquired image." ++msgstr "Controla o \"matiz\" (nivel de azul) da imaxe obtida." ++ ++#: .tmp/saneopts.h:377 ++#, no-c-format ++msgid "The saturation level controls the amount of \"blooming\" that occurs when acquiring an image with a camera. Larger values cause more blooming." ++msgstr "O nivel de saturación controla a cantidade de «florecemento» (halo) que ocorre cando se obtén unha imaxe cunha cámara. Valores máis altos producen máis florecemento." ++ ++#: .tmp/saneopts.h:382 ++#, no-c-format ++msgid "The filename of the image to be loaded." ++msgstr "Nome do ficheiro da imaxe a cargar." ++ ++#: .tmp/saneopts.h:385 ++#, no-c-format ++msgid "Sets the size of the halftoning (dithering) pattern used when scanning halftoned images." ++msgstr "Axusta o tamaño do patrón de medios tons (punteado) usado cando se escanean as imaxes de medios tons." ++ ++#: .tmp/saneopts.h:389 ++#, no-c-format ++msgid "Defines the halftoning (dithering) pattern for scanning halftoned images." ++msgstr "Define o patrón de medios tons (punteado) para escanear as imaxes de medios tons." ++ ++#: .tmp/saneopts.h:393 ++#, no-c-format ++msgid "Use same values for X and Y resolution" ++msgstr "Usar os mesmos valores para a resolución X e Y." ++ ++#: .tmp/saneopts.h:395 ++#, no-c-format ++msgid "Swap black and white" ++msgstr "Intercambiar branco e negro" ++ ++#: .tmp/saneopts.h:397 ++#, no-c-format ++msgid "Do a quality white-calibration" ++msgstr "Facer unha calibración de calidade dos brancos" ++ ++#: .tmp/saneopts.h:399 ++#, no-c-format ++msgid "Use lens that doubles optical resolution" ++msgstr "Usar lente que duplica a resolución óptica" ++ ++#: .tmp/saneopts.h:401 ++#: .tmp/saneopts.h:413 ++#, no-c-format ++msgid "In RGB-mode use same values for each color" ++msgstr "En modo RGB usar os mesmos valores para cada cor" ++ ++#: .tmp/saneopts.h:403 ++#, no-c-format ++msgid "Select minimum-brightness to get a white point" ++msgstr "Seleccionar o brillo mínimo para obter un punto branco" ++ ++#: .tmp/saneopts.h:405 ++#, no-c-format ++msgid "Analog gamma-correction" ++msgstr "Corrección gamma analóxica" ++ ++#: .tmp/saneopts.h:407 ++#, no-c-format ++msgid "Analog gamma-correction for red" ++msgstr "Corrección gamma analóxica para vermello" ++ ++#: .tmp/saneopts.h:409 ++#, no-c-format ++msgid "Analog gamma-correction for green" ++msgstr "Corrección gamma analóxica para verde" ++ ++#: .tmp/saneopts.h:411 ++#, no-c-format ++msgid "Analog gamma-correction for blue" ++msgstr "Corrección gamma analóxica para azul" ++ ++#: .tmp/saneopts.h:415 ++#, no-c-format ++msgid "Warmup lamp before scanning" ++msgstr "Quecer a lámpada antes de escanear" ++ ++#: .tmp/saneopts.h:417 ++#, no-c-format ++msgid "Define exposure-time for calibration" ++msgstr "Definir tempo de exposición para a calibración" ++ ++#: .tmp/saneopts.h:419 ++#, no-c-format ++msgid "Define exposure-time for red calibration" ++msgstr "Definir tempo de exposición para a calibración vermella" ++ ++#: .tmp/saneopts.h:421 ++#, no-c-format ++msgid "Define exposure-time for green calibration" ++msgstr "Definir tempo de exposición para a calibración verde" ++ ++#: .tmp/saneopts.h:423 ++#, no-c-format ++msgid "Define exposure-time for blue calibration" ++msgstr "Definir tempo de exposición para a calibración azul" ++ ++#: .tmp/saneopts.h:425 ++#, no-c-format ++msgid "Define exposure-time for scan" ++msgstr "Definir tempo de exposición para o escaneo" ++ ++#: .tmp/saneopts.h:427 ++#, no-c-format ++msgid "Define exposure-time for red scan" ++msgstr "Definir tempo de exposición para o escaneo vermello" ++ ++#: .tmp/saneopts.h:429 ++#, no-c-format ++msgid "Define exposure-time for green scan" ++msgstr "Definir tempo de exposición para o escaneo verde" ++ ++#: .tmp/saneopts.h:431 ++#, no-c-format ++msgid "Define exposure-time for blue scan" ++msgstr "Definir tempo de exposición para o escaneo azul" ++ ++#: .tmp/saneopts.h:433 ++#, no-c-format ++msgid "Enable selection of exposure-time" ++msgstr "Activar selección do tempo de exposición" ++ ++#: .tmp/saneopts.h:435 ++#, no-c-format ++msgid "Define lamp density for calibration" ++msgstr "Definir densidade da lámpada para a calibración" ++ ++#: .tmp/saneopts.h:437 ++#, no-c-format ++msgid "Define lamp density for scan" ++msgstr "Definir densidade da lámpada para o escaneo" ++ ++#: .tmp/saneopts.h:439 ++#, no-c-format ++msgid "Enable selection of lamp density" ++msgstr "Activar a selección da densidade da lámpada" ++ ++#: .tmp/saneopts.h:441 ++#: .tmp/umax.c:5831 ++#, no-c-format ++msgid "Turn off lamp when program exits" ++msgstr "Apaga a lámpada ao saír do programa" ++ ++#: .tmp/saneopts.h:444 ++#, no-c-format ++msgid "Scan button" ++msgstr "Botón de control de escaneo" ++ ++#: .tmp/saneopts.h:445 ++#, no-c-format ++msgid "Email button" ++msgstr "Botón de correo-e" ++ ++#: .tmp/saneopts.h:446 ++#, no-c-format ++msgid "Fax button" ++msgstr "Botón de fax" ++ ++#: .tmp/saneopts.h:447 ++#, no-c-format ++msgid "Copy button" ++msgstr "Botón de copia" ++ ++#: .tmp/saneopts.h:448 ++#, no-c-format ++msgid "PDF button" ++msgstr "Botón de PDF" ++ ++#: .tmp/saneopts.h:449 ++#, no-c-format ++msgid "Cancel button" ++msgstr "Botón de cancelar" ++ ++#: .tmp/saneopts.h:450 ++#, no-c-format ++msgid "Page loaded" ++msgstr "Páxina cargada" ++ ++#: .tmp/saneopts.h:451 ++#, no-c-format ++msgid "Cover open" ++msgstr "A tapa está aberta" ++ ++#: .tmp/sm3840.c:758 ++#, no-c-format ++msgid "Lamp timeout" ++msgstr "Límite de tempo da lámpada" ++ ++#: .tmp/sm3840.c:760 ++#, no-c-format ++msgid "Minutes until lamp is turned off after scan" ++msgstr "Minutos que tardará a lámpada en apagarse despois do escaneo" ++ ++#: .tmp/sm3840.c:770 ++#, no-c-format ++msgid "Threshold value for lineart mode" ++msgstr "Valor do limiar para o modo de liña de arte" ++ ++#: .tmp/snapscan-options.c:84 ++#, no-c-format ++msgid "Document Feeder" ++msgstr "Alimentador de documentos" ++ ++#: .tmp/snapscan-options.c:88 ++#, no-c-format ++msgid "6x4 (inch)" ++msgstr "6x4 (polg.)" ++ ++#: .tmp/snapscan-options.c:89 ++#, no-c-format ++msgid "8x10 (inch)" ++msgstr "8x10 (polg.)" ++ ++#: .tmp/snapscan-options.c:90 ++#, no-c-format ++msgid "8.5x11 (inch)" ++msgstr "8.5x11 (polg.)" ++ ++#: .tmp/snapscan-options.c:93 ++#, no-c-format ++msgid "Halftoning Unsupported" ++msgstr "Medios tons non compatíbeis" ++ ++#: .tmp/snapscan-options.c:94 ++#, no-c-format ++msgid "DispersedDot8x8" ++msgstr "Punto disperso 8x8" ++ ++#: .tmp/snapscan-options.c:95 ++#, no-c-format ++msgid "DispersedDot16x16" ++msgstr "Punto disperso 16x16" ++ ++#: .tmp/snapscan-options.c:99 ++#, no-c-format ++msgid "Number of scan lines to request in a SCSI read. Changing this parameter allows you to tune the speed at which data is read from the scanner during scans. If this is set too low, the scanner will have to stop periodically in the middle of a scan; if it's set too high, X-based frontends may stop responding to X events and your system could bog down." ++msgstr "Número de liñas de escaneo por solicitude dunha lectura SCSI. O cambio deste parámetro permítelle axustar a velocidade á que se len os datos desde o escáner durante os escaneos. Se este é demasiado baixo, o escáner ten que parar periodicamente no medio dun escaneo, se é demasiado alto, baseado en interfaces X pode deixar de responder a eventos de X e o seu sistema poderíase atoar." ++ ++#: .tmp/snapscan-options.c:436 ++#, no-c-format ++msgid "Preview mode" ++msgstr "Modo de previsualización" ++ ++#: .tmp/snapscan-options.c:438 ++#, no-c-format ++msgid "Select the mode for previews. Greyscale previews usually give the best combination of speed and detail." ++msgstr "Escolle o modo para previsualización. A previsualización en escala de grises fornece en xeral, a mellor relación entre velocidade e detalle." ++ ++#: .tmp/snapscan-options.c:545 ++#, no-c-format ++msgid "Predefined settings" ++msgstr "Axustes predefinidos" ++ ++#: .tmp/snapscan-options.c:547 ++#, no-c-format ++msgid "Provides standard scanning areas for photographs, printed pages and the like." ++msgstr "Fornece superficies de escaneado estándar para fotografías, páxinas impresas, etc." ++ ++#: .tmp/snapscan-options.c:823 ++#, no-c-format ++msgid "Colour lines per read" ++msgstr "Cor, liñas por lectura" ++ ++#: .tmp/snapscan-options.c:835 ++#, no-c-format ++msgid "Greyscale lines per read" ++msgstr "Escala de grises, liñas por lectura" ++ ++#: .tmp/stv680.c:974 ++#, no-c-format ++msgid "webcam" ++msgstr "cámara web" ++ ++#: .tmp/stv680.h:115 ++#, no-c-format ++msgid "Color RAW" ++msgstr "Cor de texto RGB" ++ ++#: .tmp/stv680.h:116 ++#, no-c-format ++msgid "Color RGB" ++msgstr "Cor RGB" ++ ++#: .tmp/stv680.h:117 ++#, no-c-format ++msgid "Color RGB TEXT" ++msgstr "Cor RGB TEXTO" ++ ++#: .tmp/teco1.c:1152 ++#: .tmp/teco1.c:1153 ++#: .tmp/teco2.c:1971 ++#: .tmp/teco2.c:1972 ++#: .tmp/teco3.c:977 ++#: .tmp/teco3.c:978 ++#, no-c-format ++msgid "Dither" ++msgstr "Esfumado" ++ ++#: .tmp/test.c:136 ++#, no-c-format ++msgid "Solid black" ++msgstr "Negro sólido" ++ ++#: .tmp/test.c:136 ++#, no-c-format ++msgid "Solid white" ++msgstr "Branco sólido" ++ ++#: .tmp/test.c:137 ++#, no-c-format ++msgid "Color pattern" ++msgstr "Patrón de cor" ++ ++#: .tmp/test.c:137 ++#, no-c-format ++msgid "Grid" ++msgstr "Grade" ++ ++#: .tmp/test.c:162 ++#: .tmp/test.c:170 ++#, no-c-format ++msgid "First entry" ++msgstr "Primeira entrada" ++ ++#: .tmp/test.c:162 ++#: .tmp/test.c:170 ++#, no-c-format ++msgid "Second entry" ++msgstr "Segunda entrada" ++ ++#: .tmp/test.c:164 ++#, no-c-format ++msgid "This is the very long third entry. Maybe the frontend has an idea how to display it" ++msgstr "Esta terceira entrada é moi longa. Quizais a interface ten unha idea de como amosalo" ++ ++#: .tmp/test.c:347 ++#, no-c-format ++msgid "Hand-scanner simulation" ++msgstr "Simulación de escáner manual" ++ ++#: .tmp/test.c:348 ++#, no-c-format ++msgid "Simulate a hand-scanner. Hand-scanners do not know the image height a priori. Instead, they return a height of -1. Setting this option allows to test whether a frontend can handle this correctly. This option also enables a fixed width of 11 cm." ++msgstr "Semella un escáner de man. Os escáneres de man adoitan descoñecer a priori a distancia á imaxe. Na súa vez utiliza unha altura de retorno -1. Axustar esta opción permítelle comprobar se unha interface pode manexar isto correctamente. Esta opción tamén permite un ancho de 11cm." ++ ++#: .tmp/test.c:365 ++#, no-c-format ++msgid "Three-pass simulation" ++msgstr "Simulación de tres pasadas" ++ ++#: .tmp/test.c:366 ++#, no-c-format ++msgid "Simulate a three-pass scanner. In color mode, three frames are transmitted." ++msgstr "Semella un escáner de tres pasadas devolvendo 3 mostras separadas. Por diversión, devolve verde, despois azul e para rematar vermello." ++ ++#: .tmp/test.c:381 ++#, no-c-format ++msgid "Set the order of frames" ++msgstr "Axustar a orde das mostras" ++ ++#: .tmp/test.c:382 ++#, no-c-format ++msgid "Set the order of frames in three-pass color mode." ++msgstr "Axustar a orde das mostras no modo de tres pasadas de cor." ++ ++#: .tmp/test.c:415 ++#, no-c-format ++msgid "If Automatic Document Feeder is selected, the feeder will be 'empty' after 10 scans." ++msgstr "Se escolle o alimentador automático de documentos, o alimentador estará \"baleiro\" despois de 10 escaneos." ++ ++#: .tmp/test.c:430 ++#, no-c-format ++msgid "Special Options" ++msgstr "Opcións especiais" ++ ++#: .tmp/test.c:443 ++#, no-c-format ++msgid "Select the test picture" ++msgstr "Escolla a imaxe de proba" ++ ++#: .tmp/test.c:445 ++#, no-c-format ++msgid "" ++"Select the kind of test picture. Available options:\n" ++"Solid black: fills the whole scan with black.\n" ++"Solid white: fills the whole scan with white.\n" ++"Color pattern: draws various color test patterns depending on the mode.\n" ++"Grid: draws a black/white grid with a width and height of 10 mm per square." ++msgstr "" ++"Define o tipo de proba de imaxe. Posíbeis opcións:\n" ++"Negro sólido: enche todo o escaneo con negro.\n" ++"Branco sólido: enche todo o escaneo con branco.\n" ++"Patrón de cor: debuxa varios patróns de proba dependendo do modo.\n" ++"Grade: debuxa unha grade en branco e negro cun tamaño de 10mm por cadrado." ++ ++#: .tmp/test.c:466 ++#, no-c-format ++msgid "Invert endianness" ++msgstr "Inverter a orde dos datos" ++ ++#: .tmp/test.c:467 ++#, no-c-format ++msgid "Exchange upper and lower byte of image data in 16 bit modes. This option can be used to test the 16 bit modes of frontends, e.g. if the frontend uses the correct endianness." ++msgstr "Intercambia os bytes de datos superiores e inferiores de imaxes en modo de 16 bits. Esta opción pode utilizarse para a proba de 16 bits dos modos de interface, p.ex. se a interface utiliza a orde correcta." ++ ++#: .tmp/test.c:483 ++#, no-c-format ++msgid "Read limit" ++msgstr "Límite de lectura" ++ ++#: .tmp/test.c:484 ++#, no-c-format ++msgid "Limit the amount of data transferred with each call to sane_read()." ++msgstr "Limita a cantidade de datos transferidos con cada chamada a sane_read()." ++ ++#: .tmp/test.c:497 ++#, no-c-format ++msgid "Size of read-limit" ++msgstr "Tamaño do límite de lectura" ++ ++#: .tmp/test.c:498 ++#, no-c-format ++msgid "The (maximum) amount of data transferred with each call to sane_read()." ++msgstr "Cantidade de datos (máxima) transferida con cada chamada a sane_read()." ++ ++#: .tmp/test.c:513 ++#, no-c-format ++msgid "Read delay" ++msgstr "Retardo de lectura" ++ ++#: .tmp/test.c:514 ++#, no-c-format ++msgid "Delay the transfer of data to the pipe." ++msgstr "Retardar a transferencia de datos á canalización." ++ ++#: .tmp/test.c:526 ++#, no-c-format ++msgid "Duration of read-delay" ++msgstr "Duración do retardo de lectura" ++ ++#: .tmp/test.c:527 ++#, no-c-format ++msgid "How long to wait after transferring each buffer of data through the pipe." ++msgstr "Canto tempo se vai agardar despois de transferir cada búfer de datos a través da canalización." ++ ++#: .tmp/test.c:542 ++#, no-c-format ++msgid "Return-value of sane_read" ++msgstr "Valor de retorno de sane_read" ++ ++#: .tmp/test.c:544 ++#, no-c-format ++msgid "Select the return-value of sane_read(). \"Default\" is the normal handling for scanning. All other status codes are for testing how the frontend handles them." ++msgstr "Escolla o valor de retorno de sane_read(). «Predeterminado» é o normal para facer o escaneo. Todos os demáis códigos de estado son para probar a forma en que a interface se fai cargo deles" ++ ++#: .tmp/test.c:561 ++#, no-c-format ++msgid "Loss of pixels per line" ++msgstr "Perda de píxeles por liña" ++ ++#: .tmp/test.c:563 ++#, no-c-format ++msgid "The number of pixels that are wasted at the end of each line." ++msgstr "Número de píxeles que se perden no extremo de cada liña." ++ ++#: .tmp/test.c:576 ++#, no-c-format ++msgid "Fuzzy parameters" ++msgstr "Parámetros dubidosos" ++ ++#: .tmp/test.c:577 ++#, no-c-format ++msgid "Return fuzzy lines and bytes per line when sane_parameters() is called before sane_start()." ++msgstr "Devolve liñas dubidosas e bytes por liña cando se chama a sane_start() antes que a sane_parameters()." ++ ++#: .tmp/test.c:590 ++#, no-c-format ++msgid "Use non-blocking IO" ++msgstr "Usar E/S non bloqueante" ++ ++#: .tmp/test.c:591 ++#, no-c-format ++msgid "Use non-blocking IO for sane_read() if supported by the frontend." ++msgstr "Usar unha E/S non bloqueante para sane_red() se o permite a interface." ++ ++#: .tmp/test.c:604 ++#, no-c-format ++msgid "Offer select file descriptor" ++msgstr "Propor a selección dun descritor de ficheiro" ++ ++#: .tmp/test.c:605 ++#, no-c-format ++msgid "Offer a select filedescriptor for detecting if sane_read() will return data." ++msgstr "Propor un descritor de fichero para detectar si sane_read () devolverá os datos." ++ ++#: .tmp/test.c:618 ++#, no-c-format ++msgid "Enable test options" ++msgstr "Activar opcións de proba" ++ ++#: .tmp/test.c:619 ++#, no-c-format ++msgid "Enable various test options. This is for testing the ability of frontends to view and modify all the different SANE option types." ++msgstr "Activa varias opcións de proba. Isto úsase para probar a capacidade das interfaces para ver e modificar os diferentes tipos de opcións de SANE." ++ ++#: .tmp/test.c:633 ++#, no-c-format ++msgid "Print options" ++msgstr "Imprimir as opcións" ++ ++#: .tmp/test.c:634 ++#, no-c-format ++msgid "Print a list of all options." ++msgstr "Imprimir unha lista de todas ls opcións" ++ ++#: .tmp/test.c:711 ++#, no-c-format ++msgid "Bool test options" ++msgstr "Opcións de proba booleanas" ++ ++#: .tmp/test.c:724 ++#, no-c-format ++msgid "(1/6) Bool soft select soft detect" ++msgstr "(1/6) Booleana configurábel e lexíbel por software" ++ ++#: .tmp/test.c:726 ++#, no-c-format ++msgid "(1/6) Bool test option that has soft select and soft detect (and advanced) capabilities. That's just a normal bool option." ++msgstr "(1/6) Opción de proba booleana configurábel e lexíbel por software. Esta é a opción booleana normal." ++ ++#: .tmp/test.c:742 ++#, no-c-format ++msgid "(2/6) Bool hard select soft detect" ++msgstr "(2/6) Booleana configurábel por hardware lexíbel por software" ++ ++#: .tmp/test.c:744 ++#, no-c-format ++msgid "(2/6) Bool test option that has hard select and soft detect (and advanced) capabilities. That means the option can't be set by the frontend but by the user (e.g. by pressing a button at the device)." ++msgstr "(2/6) Opción de proba booleana configurábel por hardware e lexíbel polo software. Esta opción non pode ser configurada pola interface, mais si polo usuario (p.ex. premendo un botón no dispositivo)." ++ ++#: .tmp/test.c:761 ++#, no-c-format ++msgid "(3/6) Bool hard select" ++msgstr "(3/6) Booleana configurábel por hardware" ++ ++#: .tmp/test.c:762 ++#, no-c-format ++msgid "(3/6) Bool test option that has hard select (and advanced) capabilities. That means the option can't be set by the frontend but by the user (e.g. by pressing a button at the device) and can't be read by the frontend." ++msgstr "(3/6) Opción de proba booleana configurábel por hardware. Esta opción non pode ser configurada pola interface, mais si polo usuario (p.ex. premendo un botón no dispositivo) tampouco pode ser lida pola interface." ++ ++#: .tmp/test.c:780 ++#, no-c-format ++msgid "(4/6) Bool soft detect" ++msgstr "(4/6) Booleana lexíbel por software" ++ ++#: .tmp/test.c:781 ++#, no-c-format ++msgid "(4/6) Bool test option that has soft detect (and advanced) capabilities. That means the option is read-only." ++msgstr "(4/6) Opción de proba booleana lexíbel por software. Esta é unha opción de só lectura." ++ ++#: .tmp/test.c:797 ++#, no-c-format ++msgid "(5/6) Bool soft select soft detect emulated" ++msgstr "(5/6) Booleana configurábel e lexíbel por software, emulada" ++ ++#: .tmp/test.c:798 ++#, no-c-format ++msgid "(5/6) Bool test option that has soft select, soft detect, and emulated (and advanced) capabilities." ++msgstr "(5/6) Opción de proba booleana configurábel e lexíbel por software e emulada." ++ ++#: .tmp/test.c:814 ++#, no-c-format ++msgid "(6/6) Bool soft select soft detect auto" ++msgstr "(6/6) Booleana configurábel e lexíbel por software, automática" ++ ++#: .tmp/test.c:815 ++#, no-c-format ++msgid "(6/6) Bool test option that has soft select, soft detect, and automatic (and advanced) capabilities. This option can be automatically set by the backend." ++msgstr "(6/6) Opción de proba booleana configurábel e lexíbel por software e emulada. Esta opción pode ser configurada automaticamente polo motor." ++ ++#: .tmp/test.c:832 ++#, no-c-format ++msgid "Int test options" ++msgstr "Opción de proba «Enteiro»" ++ ++#: .tmp/test.c:845 ++#, no-c-format ++msgid "(1/6) Int" ++msgstr "(1/6) Enteiro" ++ ++#: .tmp/test.c:846 ++#, no-c-format ++msgid "(1/6) Int test option with no unit and no constraint set." ++msgstr "(1/6) Opción de proba de valor enteiro sen unidade nin conxunto de restricións." ++ ++#: .tmp/test.c:861 ++#, no-c-format ++msgid "(2/6) Int constraint range" ++msgstr "(2/6) Enteiro con rango de restricións" ++ ++#: .tmp/test.c:862 ++#, no-c-format ++msgid "(2/6) Int test option with unit pixel and constraint range set. Minimum is 4, maximum 192, and quant is 2." ++msgstr "(2/6) Opción de proba de valor enteiro con unidade de píxel e con conxunto de restricións. O mínimo é 4, o máximo 192 e o salto 2." ++ ++#: .tmp/test.c:878 ++#, no-c-format ++msgid "(3/6) Int constraint word list" ++msgstr "(3/6) Enteiro con restrición de lista de valores" ++ ++#: .tmp/test.c:879 ++#, no-c-format ++msgid "(3/6) Int test option with unit bits and constraint word list set." ++msgstr "(3/6) Opción de proba de valor enteiro con unidade bits e restrición de lista de valores" ++ ++#: .tmp/test.c:894 ++#, no-c-format ++msgid "(4/6) Int array" ++msgstr "(4/6) Matriz de enteiros" ++ ++#: .tmp/test.c:895 ++#, no-c-format ++msgid "(4/6) Int test option with unit mm and using an array without constraints." ++msgstr "(4/6) Opción de proba de valor enteiro con unidade mm usando unha Matriz con restricións." ++ ++#: .tmp/test.c:910 ++#, no-c-format ++msgid "(5/6) Int array constraint range" ++msgstr "(5/6) Matriz de enteiros con rango de restriciónsv" ++ ++#: .tmp/test.c:911 ++#, no-c-format ++msgid "(5/6) Int test option with unit dpi and using an array with a range constraint. Minimum is 4, maximum 192, and quant is 2." ++msgstr "(5/6) Opción de proba de valor enteiro con unidade dpi e usando unha matriz con intervalo de restricións. O mínimo é 4, o máximo 192, e o salto 2.v" ++ ++#: .tmp/test.c:928 ++#, no-c-format ++msgid "(6/6) Int array constraint word list" ++msgstr "(6/6) Matriz de enteiros con restrición de lista de valores" ++ ++#: .tmp/test.c:929 ++#, no-c-format ++msgid "(6/6) Int test option with unit percent and using an array with a word list constraint." ++msgstr "(6/6) Opción de proba de valor enteiro con unidade e% e usando unha matriz con restricións nunha lista de valores." ++ ++#: .tmp/test.c:945 ++#, no-c-format ++msgid "Fixed test options" ++msgstr "Opcións de proba «reais fixos»" ++ ++#: .tmp/test.c:958 ++#, no-c-format ++msgid "(1/3) Fixed" ++msgstr "(1/3) Real fixo" ++ ++#: .tmp/test.c:959 ++#, no-c-format ++msgid "(1/3) Fixed test option with no unit and no constraint set." ++msgstr "(1/3) Opción de proba de valor real (coma fixa) sen unidade nin conxunto de restricións." ++ ++#: .tmp/test.c:974 ++#, no-c-format ++msgid "(2/3) Fixed constraint range" ++msgstr "(2/3) Real fixo con intervalo de restrición" ++ ++#: .tmp/test.c:975 ++#, no-c-format ++msgid "(2/3) Fixed test option with unit microsecond and constraint range set. Minimum is -42.17, maximum 32767.9999, and quant is 2.0." ++msgstr "(2/3) Opción de proba de valor real (coma fixa) con unidade de microsegundo e intervalo de restrición. O mínimo é -42,17, o máximo 32767,9999 e o salto 2,0." ++ ++#: .tmp/test.c:991 ++#, no-c-format ++msgid "(3/3) Fixed constraint word list" ++msgstr "(3/3) Real fixo con restrición de lista de valores" ++ ++#: .tmp/test.c:992 ++#, no-c-format ++msgid "(3/3) Fixed test option with no unit and constraint word list set." ++msgstr "(3/3) Opción de proba de valor real (coma fixa) sen unidade e restrinxida por un conxunto de valores dunha lista." ++ ++#: .tmp/test.c:1007 ++#, no-c-format ++msgid "String test options" ++msgstr "Opcións de proba de cadea" ++ ++#: .tmp/test.c:1020 ++#, no-c-format ++msgid "(1/3) String" ++msgstr "(1/3) Cadea" ++ ++#: .tmp/test.c:1021 ++#, no-c-format ++msgid "(1/3) String test option without constraint." ++msgstr "(1/3) Opcións de proba de cadea sen restricións." ++ ++#: .tmp/test.c:1038 ++#, no-c-format ++msgid "(2/3) String constraint string list" ++msgstr "(2/3) Cadea restrinxida a lista de cadeas" ++ ++#: .tmp/test.c:1039 ++#, no-c-format ++msgid "(2/3) String test option with string list constraint." ++msgstr "(2/3) Opción de proba de cadea con restrición de lista de cadeas" ++ ++#: .tmp/test.c:1058 ++#, no-c-format ++msgid "(3/3) String constraint long string list" ++msgstr "(3/3) Restrición de cadeas lista longa de cadeas" ++ ++#: .tmp/test.c:1059 ++#, no-c-format ++msgid "(3/3) String test option with string list constraint. Contains some more entries..." ++msgstr "(3/3) Opción de proba de cadea con restrición de lista de cadeas. Conten máis entradas..." ++ ++#: .tmp/test.c:1079 ++#, no-c-format ++msgid "Button test options" ++msgstr "Opcións de botón de proba" ++ ++#: .tmp/test.c:1092 ++#, no-c-format ++msgid "(1/1) Button" ++msgstr "(1/1) Botón" ++ ++#: .tmp/test.c:1093 ++#, no-c-format ++msgid "(1/1) Button test option. Prints some text..." ++msgstr "(1/1) Botón de opción de proba. Imprime algún texto..." ++ ++#: .tmp/u12.c:149 ++#, no-c-format ++msgid "Color 36" ++msgstr "Color 36" ++ ++#: .tmp/umax.c:189 ++#, no-c-format ++msgid "Color Lineart" ++msgstr "Liña de arte coloreada" ++ ++#: .tmp/umax.c:190 ++#, no-c-format ++msgid "Color Halftone" ++msgstr "Medios tons coloreados" ++ ++#: .tmp/umax.c:236 ++#, no-c-format ++msgid "Use Image Composition" ++msgstr "Usar composición de imaxe" ++ ++#: .tmp/umax.c:237 ++#, no-c-format ++msgid "Bi-level black and white (lineart mode)" ++msgstr "Dous niveis branco e negro (modo de liña de arte)" ++ ++#: .tmp/umax.c:238 ++#, no-c-format ++msgid "Dithered/halftone black & white (halftone mode)" ++msgstr "Esfumado/medios tons de branco e negro (modo de medios tons)" ++ ++#: .tmp/umax.c:239 ++#, no-c-format ++msgid "Multi-level black & white (grayscale mode)" ++msgstr "Multinivel de branco e negro (modo de escala de grises)" ++ ++#: .tmp/umax.c:240 ++#, no-c-format ++msgid "Multi-level RGB color (one pass color)" ++msgstr "Multinivel de cor RGB (cor dunha pasada)" ++ ++#: .tmp/umax.c:241 ++#, no-c-format ++msgid "Ignore calibration" ++msgstr "Ignorar calibración" ++ ++#: .tmp/umax.c:5734 ++#, no-c-format ++msgid "Disable pre focus" ++msgstr "Desactivar foco previo" ++ ++#: .tmp/umax.c:5735 ++#, no-c-format ++msgid "Do not calibrate focus" ++msgstr "Non calibrar o foco" ++ ++#: .tmp/umax.c:5746 ++#, no-c-format ++msgid "Manual pre focus" ++msgstr "Foco previo manual" ++ ++#: .tmp/umax.c:5758 ++#, no-c-format ++msgid "Fix focus position" ++msgstr "Fixar a posición do foco" ++ ++#: .tmp/umax.c:5770 ++#, no-c-format ++msgid "Lens calibration in doc position" ++msgstr "Calibración de lentes na posición do documento" ++ ++#: .tmp/umax.c:5771 ++#, no-c-format ++msgid "Calibrate lens focus in document position" ++msgstr "Calibrar as lentes na posición do documento" ++ ++#: .tmp/umax.c:5782 ++#, no-c-format ++msgid "Holder focus position 0mm" ++msgstr "Marcar a posición do foco a 0mm" ++ ++#: .tmp/umax.c:5783 ++#, no-c-format ++msgid "Use 0mm holder focus position instead of 0.6mm" ++msgstr "Usar a marca de posición de foco a 0mm no canto de a 0,6mm" ++ ++#: .tmp/umax.c:5886 ++#, no-c-format ++msgid "Calibration mode" ++msgstr "Modo de calibración" ++ ++#: .tmp/umax.c:5887 ++#, no-c-format ++msgid "Define calibration mode" ++msgstr "Definir o modo de calibración" ++ ++#: .tmp/umax_pp.c:638 ++#, no-c-format ++msgid "Sets lamp on/off" ++msgstr "Acende/apaga a lámpada" ++ ++#: .tmp/umax_pp.c:647 ++#, no-c-format ++msgid "UTA on" ++msgstr "UTA Activado" ++ ++#: .tmp/umax_pp.c:648 ++#, no-c-format ++msgid "Sets UTA on/off" ++msgstr "Axusta o acendido/apagado UTA" ++ ++#: .tmp/umax_pp.c:769 ++#, no-c-format ++msgid "Offset" ++msgstr "Desprazamento" ++ ++#: .tmp/umax_pp.c:771 ++#, no-c-format ++msgid "Color channels offset settings" ++msgstr "Axustes do desprazamento das canles de cor" ++ ++#: .tmp/umax_pp.c:778 ++#, no-c-format ++msgid "Gray offset" ++msgstr "Desprazamento de gris" ++ ++#: .tmp/umax_pp.c:779 ++#, no-c-format ++msgid "Sets gray channel offset" ++msgstr "Axusta o desprazamento da canle gris" ++ ++#: .tmp/umax_pp.c:791 ++#, no-c-format ++msgid "Sets red channel offset" ++msgstr "Axusta o desprazamento da canle vermello" ++ ++#: .tmp/umax_pp.c:803 ++#, no-c-format ++msgid "Sets green channel offset" ++msgstr "Axusta o desprazamento da canle verde" ++ ++#: .tmp/umax_pp.c:815 ++#, no-c-format ++msgid "Sets blue channel offset" ++msgstr "Axusta o desprazamento da canle azul" ++ --- sane-backends-1.0.20.orig/debian/patches/32_epson_perfection636.dpatch +++ sane-backends-1.0.20/debian/patches/32_epson_perfection636.dpatch @@ -0,0 +1,22 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 32_epson_perfection636.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Add the Epson Perfection 636 SCSI scanner. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/doc/descriptions/epson.desc sane-backends-1.0.20/doc/descriptions/epson.desc +--- sane-backends-1.0.20~/doc/descriptions/epson.desc 2009-03-05 02:54:33.000000000 +0100 ++++ sane-backends-1.0.20/doc/descriptions/epson.desc 2009-12-12 11:08:16.835417248 +0100 +@@ -82,6 +82,11 @@ + :scsi "EPSON" "Perfection1200" "processor" + :status :complete + ++:model "Perfection 636" ++:interface "SCSI" ++:scsi "EPSON" "Perfection636" "processor" ++:status :complete ++ + :model "Perfection 636U" + :interface "USB" + :usbid "0x04b8" "0x0101" --- sane-backends-1.0.20.orig/debian/patches/04_udev_rules_fix.dpatch +++ sane-backends-1.0.20/debian/patches/04_udev_rules_fix.dpatch @@ -0,0 +1,20 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 04_udev_rules_fix.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix udev rules, use ATTRS instead of ATTR. +## DP: Upstream commit 79e6e5c4203bec6b98d1d6af4d3741fedc73dcd0 + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/tools/sane-desc.c sane-backends-1.0.20/tools/sane-desc.c +--- sane-backends-1.0.20~/tools/sane-desc.c 2009-05-06 11:55:58.000000000 +0200 ++++ sane-backends-1.0.20/tools/sane-desc.c 2009-05-06 11:58:12.811657055 +0200 +@@ -3475,7 +3475,7 @@ + } + } + printf ("\n"); +- printf ("ATTR{idVendor}==\"%s\", ATTR{idProduct}==\"%s\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", ++ printf ("ATTRS{idVendor}==\"%s\", ATTRS{idProduct}==\"%s\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", + usbid->usb_vendor_id + 2, usbid->usb_product_id + 2, DEVMODE, DEVGROUP); + usbid = usbid->next; + } --- sane-backends-1.0.20.orig/debian/patches/22_dll_backend_conf.dpatch +++ sane-backends-1.0.20/debian/patches/22_dll_backend_conf.dpatch @@ -0,0 +1,53 @@ +#!/bin/sh -e +## 03_dll.conf_debian.dpatch by Julien BLACHE +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: dll.conf comments for Debian +## DP: Patch to the dll backend to look for pieces of dll.conf inside the +## DP: /etc/sane.d/dll.d/ directory. This is a facility for packages providing +## DP: external backends (like libsane-extras, hpoj and hplip). + +if [ $# -ne 1 ]; then + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +fi + +[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts +patch_opts="${patch_opts:--f --no-backup-if-mismatch}" + +case "$1" in + -patch) patch $patch_opts -p1 < $0;; + -unpatch) patch $patch_opts -p1 -R < $0;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1;; +esac + +exit 0 + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/backend/dll.conf.in sane-backends-1.0.20/backend/dll.conf.in +--- sane-backends-1.0.20~/backend/dll.conf.in 2009-12-12 11:05:50.000000000 +0100 ++++ sane-backends-1.0.20/backend/dll.conf.in 2009-12-12 11:15:37.863890108 +0100 +@@ -1,4 +1,12 @@ +-# enable the next line if you want to allow access through the network: ++# /etc/sane.d/dll.conf - Configuration file for the SANE dynamic backend loader ++# ++# Backends can also be enabled by configuration snippets under ++# /etc/sane.d/dll.d directory -- packages providing backends should drop ++# a config file similar to dll.conf in this directory, named after the package. ++# ++ ++# The next line enables the network backend; comment it out if you don't need ++# to use a remote SANE scanner over the network - see sane-net(5) and saned(8) + net + abaton + agfafocus +@@ -51,7 +59,6 @@ + nec + niash + pie +-pint + pixma + plustek + #plustek_pp --- sane-backends-1.0.20.orig/debian/patches/05_saned_avahi_fds_fix.dpatch +++ sane-backends-1.0.20/debian/patches/05_saned_avahi_fds_fix.dpatch @@ -0,0 +1,56 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 05_saned_avahi_fds_fix.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Close network fds in the Avahi process to suppress a possible +## DP: net backend hang when saned is run in debug mode under certain +## DP: conditions. Also possible when saned is run in standalone mode +## DP: but the window is much much smaller in that case. +## DP: upstream commit d92a20febb31603340f3f6ea4e171e77d0b2946a + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/frontend/saned.c sane-backends-1.0.20/frontend/saned.c +--- sane-backends-1.0.20~/frontend/saned.c 2009-03-14 18:35:54.000000000 +0100 ++++ sane-backends-1.0.20/frontend/saned.c 2009-05-06 12:00:58.712633498 +0200 +@@ -2338,7 +2338,7 @@ + + #ifdef WITH_AVAHI + static void +-saned_avahi (void); ++saned_avahi (struct pollfd *fds, int nfds); + + static void + saned_create_avahi_services (AvahiClient *c); +@@ -2351,8 +2351,9 @@ + + + static void +-saned_avahi (void) ++saned_avahi (struct pollfd *fds, int nfds) + { ++ struct pollfd *fdp = NULL; + int error; + + avahi_pid = fork (); +@@ -2371,6 +2372,12 @@ + signal (SIGINT, NULL); + signal (SIGTERM, NULL); + ++ /* Close network fds */ ++ for (fdp = fds; nfds > 0; nfds--, fdp++) ++ close (fdp->fd); ++ ++ free(fds); ++ + avahi_svc_name = avahi_strdup(SANED_NAME); + + avahi_poll = avahi_simple_poll_new (); +@@ -3055,7 +3062,7 @@ + + #ifdef WITH_AVAHI + DBG (DBG_INFO, "run_standalone: spawning Avahi process\n"); +- saned_avahi (); ++ saned_avahi (fds, nfds); + #endif /* WITH_AVAHI */ + + DBG (DBG_MSG, "run_standalone: waiting for control connection\n"); --- sane-backends-1.0.20.orig/debian/patches/13_saned_aliasing_fix.dpatch +++ sane-backends-1.0.20/debian/patches/13_saned_aliasing_fix.dpatch @@ -0,0 +1,197 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 13_saned_aliasing_fix.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix strict-aliasing issues in saned, as gcc 4.4 is more strict about +## DP: aliasing than previous versions. +## DP: Upstream commits: +## DP: - d3f1f6fa509ef7432d6ef6c33c36a0f8c9e21668 +## DP: - f06cf4770b0859daec9122b9a417f6548434283f + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/frontend/saned.c sane-backends-1.0.20/frontend/saned.c +--- sane-backends-1.0.20~/frontend/saned.c 2009-12-24 17:29:33.555075014 +0100 ++++ sane-backends-1.0.20/frontend/saned.c 2009-12-24 17:32:02.974075639 +0100 +@@ -258,7 +258,14 @@ + static in_port_t data_port_hi; + + #ifdef SANED_USES_AF_INDEP +-static struct sockaddr_storage remote_address; ++static union { ++ struct sockaddr_storage ss; ++ struct sockaddr sa; ++ struct sockaddr_in sin; ++#ifdef ENABLE_IPV6 ++ struct sockaddr_in6 sin6; ++#endif ++} remote_address; + static int remote_address_len; + #else + static struct in_addr remote_address; +@@ -750,15 +757,15 @@ + FILE *fp; + + /* Get address of remote host */ +- remote_address_len = sizeof (remote_address); +- if (getpeername (fd, (struct sockaddr *) &remote_address, (socklen_t *) &remote_address_len) < 0) ++ remote_address_len = sizeof (remote_address.ss); ++ if (getpeername (fd, &remote_address.sa, (socklen_t *) &remote_address_len) < 0) + { + DBG (DBG_ERR, "check_host: getpeername failed: %s\n", strerror (errno)); + remote_ip = strdup ("[error]"); + return SANE_STATUS_INVAL; + } + +- err = getnameinfo ((struct sockaddr *) &remote_address, remote_address_len, ++ err = getnameinfo (&remote_address.sa, remote_address_len, + hostname, sizeof (hostname), NULL, 0, NI_NUMERICHOST); + if (err) + { +@@ -770,7 +777,7 @@ + remote_ip = strdup (hostname); + + #ifdef ENABLE_IPV6 +- sin6 = (struct sockaddr_in6 *) &remote_address; ++ sin6 = &remote_address.sin6; + + if (SANE_IN6_IS_ADDR_V4MAPPED (sin6->sin6_addr.s6_addr)) + { +@@ -815,9 +822,9 @@ + } + #endif /* ENABLE_IPV6 */ + +- sin = (struct sockaddr_in *) &remote_address; ++ sin = &remote_address.sin; + +- switch (SS_FAMILY(remote_address)) ++ switch (SS_FAMILY(remote_address.ss)) + { + case AF_INET: + if (IN_LOOPBACK (ntohl (sin->sin_addr.s_addr))) +@@ -995,7 +1002,7 @@ + { + if (strchr (config_line, ':') != NULL) /* is a v6 address */ + { +- if (SS_FAMILY(remote_address) == AF_INET6) ++ if (SS_FAMILY(remote_address.ss) == AF_INET6) + { + if (check_v6_in_range (sin6, config_line, netmask)) + { +@@ -1021,7 +1028,7 @@ + sin = (struct sockaddr_in *)res->ai_addr; + } + +- if ((SS_FAMILY(remote_address) == AF_INET) || ++ if ((SS_FAMILY(remote_address.ss) == AF_INET) || + (IPv4map == SANE_TRUE)) + { + +@@ -1034,7 +1041,7 @@ + else + { + /* restore the old sin pointer */ +- sin = (struct sockaddr_in *)&remote_address; ++ sin = &remote_address.sin; + } + + if (res != NULL) +@@ -1399,7 +1406,14 @@ + static int + start_scan (Wire * w, int h, SANE_Start_Reply * reply) + { +- struct sockaddr_storage ss; ++ union { ++ struct sockaddr_storage ss; ++ struct sockaddr sa; ++ struct sockaddr_in sin; ++#ifdef ENABLE_IPV6 ++ struct sockaddr_in6 sin6; ++#endif /* ENABLE_IPV6 */ ++ } data_addr; + struct sockaddr_in *sin; + #ifdef ENABLE_IPV6 + struct sockaddr_in6 *sin6; +@@ -1411,8 +1425,8 @@ + + be_handle = handle[h].handle; + +- len = sizeof (ss); +- if (getsockname (w->io.fd, (struct sockaddr *) &ss, (socklen_t *) &len) < 0) ++ len = sizeof (data_addr.ss); ++ if (getsockname (w->io.fd, &data_addr.sa, (socklen_t *) &len) < 0) + { + DBG (DBG_ERR, "start_scan: failed to obtain socket address (%s)\n", + strerror (errno)); +@@ -1420,7 +1434,7 @@ + return -1; + } + +- fd = socket (SS_FAMILY(ss), SOCK_STREAM, 0); ++ fd = socket (SS_FAMILY(data_addr.ss), SOCK_STREAM, 0); + if (fd < 0) + { + DBG (DBG_ERR, "start_scan: failed to obtain data socket (%s)\n", +@@ -1429,14 +1443,14 @@ + return -1; + } + +- switch (SS_FAMILY(ss)) ++ switch (SS_FAMILY(data_addr.ss)) + { + case AF_INET: +- sin = (struct sockaddr_in *) &ss; ++ sin = &data_addr.sin; + break; + #ifdef ENABLE_IPV6 + case AF_INET6: +- sin6 = (struct sockaddr_in6 *) &ss; ++ sin6 = &data_addr.sin6; + break; + #endif /* ENABLE_IPV6 */ + default: +@@ -1446,7 +1460,7 @@ + /* Try to bind a port between data_port_lo and data_port_hi for the data connection */ + for (data_port = data_port_lo; data_port <= data_port_hi; data_port++) + { +- switch (SS_FAMILY(ss)) ++ switch (SS_FAMILY(data_addr.ss)) + { + case AF_INET: + sin->sin_port = htons(data_port); +@@ -1462,7 +1476,7 @@ + + DBG (DBG_INFO, "start_scan: trying to bind data port %d\n", data_port); + +- ret = bind (fd, (struct sockaddr *) &ss, len); ++ ret = bind (fd, &data_addr.sa, len); + if (ret == 0) + break; + } +@@ -1483,7 +1497,7 @@ + return -1; + } + +- if (getsockname (fd, (struct sockaddr *) &ss, (socklen_t *) &len) < 0) ++ if (getsockname (fd, &data_addr.sa, (socklen_t *) &len) < 0) + { + DBG (DBG_ERR, "start_scan: failed to obtain socket address (%s)\n", + strerror (errno)); +@@ -1491,15 +1505,15 @@ + return -1; + } + +- switch (SS_FAMILY(ss)) ++ switch (SS_FAMILY(data_addr.ss)) + { + case AF_INET: +- sin = (struct sockaddr_in *) &ss; ++ sin = &data_addr.sin; + reply->port = ntohs (sin->sin_port); + break; + #ifdef ENABLE_IPV6 + case AF_INET6: +- sin6 = (struct sockaddr_in6 *) &ss; ++ sin6 = &data_addr.sin6; + reply->port = ntohs (sin6->sin6_port); + break; + #endif /* ENABLE_IPV6 */ --- sane-backends-1.0.20.orig/debian/patches/ubuntu_udev_noperm.dpatch +++ sane-backends-1.0.20/debian/patches/ubuntu_udev_noperm.dpatch @@ -0,0 +1,118 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## ubuntu_udev_noperm.dpatch by Martin Pitt +## +## DP: Change udev rules to be suitable for Ubuntu: +## DP: * Do not change device permissions (already covered by udev-extra's 70-acl.rules) +## DP: * Do not cover SCSI scanners (already covered by udev-extra's 70-acl.rules) +## DP: * Simplify description and structure + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/tools/sane-desc.c sane-backends-1.0.20/tools/sane-desc.c +--- sane-backends-1.0.20~/tools/sane-desc.c 2009-06-04 11:05:01.903253519 +0200 ++++ sane-backends-1.0.20/tools/sane-desc.c 2009-06-04 11:06:00.271283389 +0200 +@@ -3398,16 +3398,10 @@ + + printf + ("#\n" +- "# udev rules file for supported USB and SCSI devices\n" +- "#\n" +- "# The SCSI device support is very basic and includes only\n" +- "# scanners that mark themselves as type \"scanner\" or\n" +- "# SCSI-scanners from HP and other vendors that are entitled \"processor\"\n" +- "# but are treated accordingly.\n" ++ "# udev rules file for supported USB devices\n" + "#\n"); + printf +- ("# To add a USB device, add a rule to the list below between the\n" +- "# LABEL=\"libsane_usb_rules_begin\" and LABEL=\"libsane_usb_rules_end\" lines.\n" ++ ("# To add a USB device, add a rule to the list below.\n" + "#\n" + "# To run a script when your device is plugged in, add RUN+=\"/path/to/script\"\n" + "# to the appropriate rule.\n"); +@@ -3428,24 +3422,7 @@ + + print_udev_header (); + printf("ACTION!=\"add\", GOTO=\"libsane_rules_end\"\n" +- "ENV{DEVTYPE}==\"usb_device\", GOTO=\"libsane_create_usb_dev\"\n" +- "SUBSYSTEMS==\"scsi\", GOTO=\"libsane_scsi_rules_begin\"\n" +- "SUBSYSTEM==\"usb_device\", GOTO=\"libsane_usb_rules_begin\"\n" +- "SUBSYSTEM!=\"usb_device\", GOTO=\"libsane_usb_rules_end\"\n" +- "\n"); +- +- printf("# Kernel >= 2.6.22 jumps here\n" +- "LABEL=\"libsane_create_usb_dev\"\n" +- "\n"); +- +- printf("# For Linux >= 2.6.22 without CONFIG_USB_DEVICE_CLASS=y\n" +- "# If the following rule does not exist on your system yet, uncomment it\n" +- "# ENV{DEVTYPE}==\"usb_device\", NAME=\"bus/usb/$env{BUSNUM}/$env{DEVNUM}\", " +- "MODE=\"0664\", OWNER=\"root\", GROUP=\"root\"\n" +- "\n"); +- +- printf("# Kernel < 2.6.22 jumps here\n" +- "LABEL=\"libsane_usb_rules_begin\"\n" ++ "ENV{DEVTYPE}!=\"usb_device\", GOTO=\"libsane_rules_end\"\n" + "\n"); + + while (usbid) +@@ -3475,58 +3452,14 @@ + } + } + printf ("\n"); +- printf ("ATTRS{idVendor}==\"%s\", ATTRS{idProduct}==\"%s\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", +- usbid->usb_vendor_id + 2, usbid->usb_product_id + 2, DEVMODE, DEVGROUP); ++ printf ("ATTRS{idVendor}==\"%s\", ATTRS{idProduct}==\"%s\", ENV{libsane_matched}=\"yes\"\n", ++ usbid->usb_vendor_id + 2, usbid->usb_product_id + 2); + usbid = usbid->next; + } + + printf("\n# The following rule will disable USB autosuspend for the device\n"); + printf("ENV{libsane_matched}==\"yes\", RUN+=\"/bin/sh -c 'test -e /sys/$env{DEVPATH}/power/level && echo on > /sys/$env{DEVPATH}/power/level'\"\n"); + +- printf ("\nLABEL=\"libsane_usb_rules_end\"\n\n"); +- +- printf ("SUBSYSTEMS!=\"scsi\", GOTO=\"libsane_scsi_rules_end\"\n\n"); +- printf ("LABEL=\"libsane_scsi_rules_begin\"\n"); +- printf ("# Generic: SCSI device type 6 indicates a scanner\n"); +- printf ("KERNEL==\"sg[0-9]*\", NAME=\"%%k\", ATTRS{type}==\"6\", MODE=\"%s\", GROUP=\"%s\"\n", DEVMODE, DEVGROUP); +- printf ("# Some scanners advertise themselves as SCSI device type 3\n"); +- +- while (scsiid) +- { +- manufacturer_model_type * name = scsiid->name; +- +- if (!scsiid->is_processor) +- continue; +- +- i = 0; +- printf ("# "); +- while (name) +- { +- if ((name != scsiid->name) && (i > 0)) +- printf (" | "); +- printf ("%s", name->name); +- name = name->next; +- +- i++; +- +- /* +- * Limit the number of model names on the same line to 3, +- * as udev cannot handle very long lines and prints a warning +- * message while loading the rules files. +- */ +- if ((i == 3) && (name != NULL)) +- { +- printf("\n# "); +- i = 0; +- } +- } +- printf ("\n"); +- printf ("KERNEL==\"sg[0-9]*\", NAME=\"%%k\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", MODE=\"%s\", GROUP=\"%s\"\n", +- scsiid->scsi_vendor_id, scsiid->scsi_product_id, DEVMODE, DEVGROUP); +- scsiid = scsiid->next; +- } +- printf ("LABEL=\"libsane_scsi_rules_end\"\n\n"); +- + printf ("LABEL=\"libsane_rules_end\"\n"); + } + --- sane-backends-1.0.20.orig/debian/patches/20_disable_rpath.dpatch +++ sane-backends-1.0.20/debian/patches/20_disable_rpath.dpatch @@ -0,0 +1,713 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 20_disable_rpath.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Do not set rpath on build products. +## DP: Remove LINKER_RPATH macro and apply +## DP: sed -i -r 's/(hardcode_into_libs)=.*$/\1=no/' +## DP: on the updated configure script + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/configure sane-backends-1.0.20/configure +--- sane-backends-1.0.20~/configure 2009-06-26 14:36:41.000000000 +0200 ++++ sane-backends-1.0.20/configure 2009-06-26 14:38:21.899585310 +0200 +@@ -855,7 +855,6 @@ + DYNAMIC_FLAG + DL_LIBS + effective_target +-LINKER_RPATH + STRICT_LDFLAGS + INCLUDES + CROSS_COMPILING_FALSE +@@ -5129,27 +5128,6 @@ + ;; + esac + +- { $as_echo "$as_me:$LINENO: checking linker parameter to set runtime link path" >&5 +-$as_echo_n "checking linker parameter to set runtime link path... " >&6; } +-if test "${my_cv_LINKER_RPATH+set}" = set; then +- $as_echo_n "(cached) " >&6 +-else +- my_cv_LINKER_RPATH= +- case "$host_os" in +- linux* | freebsd* | netbsd* | openbsd* | irix*) +- # I believe this only works with GNU ld [pere 2001-04-16] +- my_cv_LINKER_RPATH="-Wl,-rpath," +- ;; +- solaris*) +- my_cv_LINKER_RPATH="-R " +- ;; +- esac +- +-fi +-{ $as_echo "$as_me:$LINENO: result: $my_cv_LINKER_RPATH" >&5 +-$as_echo "$my_cv_LINKER_RPATH" >&6; } +- LINKER_RPATH="$my_cv_LINKER_RPATH" +- + + { $as_echo "$as_me:$LINENO: checking for ANSI C header files" >&5 + $as_echo_n "checking for ANSI C header files... " >&6; } +@@ -18777,7 +18755,7 @@ + ;; + *-*-irix6*) + # Find out which ABI we are using. +- echo '#line 18780 "configure"' > conftest.$ac_ext ++ echo '#line 18758 "configure"' > conftest.$ac_ext + if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? +@@ -21657,11 +21635,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:21660: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:21638: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:21664: \$? = $ac_status" >&5 ++ echo "$as_me:21642: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -21947,11 +21925,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:21950: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:21928: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:21954: \$? = $ac_status" >&5 ++ echo "$as_me:21932: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -22051,11 +22029,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:22054: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:22032: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:22058: \$? = $ac_status" >&5 ++ echo "$as_me:22036: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -23246,7 +23224,7 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' +@@ -23429,16 +23407,16 @@ + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + esac + ;; +@@ -23450,7 +23428,7 @@ + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -23462,7 +23440,7 @@ + case $host_cpu in + ia64*) + shrext_cmds='.so' +- hardcode_into_libs=yes ++ hardcode_into_libs=no + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +@@ -23477,7 +23455,7 @@ + ;; + hppa*64*) + shrext_cmds='.sl' +- hardcode_into_libs=yes ++ hardcode_into_libs=no + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +@@ -23508,7 +23486,7 @@ + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + irix5* | irix6* | nonstopux*) +@@ -23545,7 +23523,7 @@ + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + # No shared lib support for Linux oldld, aout, or coff. +@@ -23566,7 +23544,7 @@ + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. +- hardcode_into_libs=yes ++ hardcode_into_libs=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + +@@ -23600,7 +23578,7 @@ + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + newsos6) +@@ -23678,7 +23656,7 @@ + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; +@@ -23735,7 +23713,7 @@ + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH +- hardcode_into_libs=yes ++ hardcode_into_libs=no + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no +@@ -24453,7 +24431,7 @@ + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext < conftest.$ac_ext <&5) ++ (eval echo "\"\$as_me:26947: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:26973: \$? = $ac_status" >&5 ++ echo "$as_me:26951: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -27070,11 +27048,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:27073: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:27051: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:27077: \$? = $ac_status" >&5 ++ echo "$as_me:27055: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -27252,7 +27230,7 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' +@@ -27434,16 +27412,16 @@ + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + esac + ;; +@@ -27455,7 +27433,7 @@ + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -27467,7 +27445,7 @@ + case $host_cpu in + ia64*) + shrext_cmds='.so' +- hardcode_into_libs=yes ++ hardcode_into_libs=no + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +@@ -27482,7 +27460,7 @@ + ;; + hppa*64*) + shrext_cmds='.sl' +- hardcode_into_libs=yes ++ hardcode_into_libs=no + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +@@ -27513,7 +27491,7 @@ + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + irix5* | irix6* | nonstopux*) +@@ -27550,7 +27528,7 @@ + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + # No shared lib support for Linux oldld, aout, or coff. +@@ -27571,7 +27549,7 @@ + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. +- hardcode_into_libs=yes ++ hardcode_into_libs=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + +@@ -27605,7 +27583,7 @@ + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + newsos6) +@@ -27683,7 +27661,7 @@ + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; +@@ -27740,7 +27718,7 @@ + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH +- hardcode_into_libs=yes ++ hardcode_into_libs=no + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no +@@ -28166,7 +28144,7 @@ + hardcode_action=$hardcode_action_CXX + + # Whether we should hardcode library paths into libraries. +-hardcode_into_libs=$hardcode_into_libs ++hardcode_into_libs=no + + # Flag to hardcode \$libdir into a binary during linking. + # This must work even if \$libdir does not exist. +@@ -28655,11 +28633,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:28658: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:28636: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:28662: \$? = $ac_status" >&5 ++ echo "$as_me:28640: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -28759,11 +28737,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:28762: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:28740: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:28766: \$? = $ac_status" >&5 ++ echo "$as_me:28744: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -29883,7 +29861,7 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' +@@ -30065,16 +30043,16 @@ + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + esac + ;; +@@ -30086,7 +30064,7 @@ + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -30098,7 +30076,7 @@ + case $host_cpu in + ia64*) + shrext_cmds='.so' +- hardcode_into_libs=yes ++ hardcode_into_libs=no + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +@@ -30113,7 +30091,7 @@ + ;; + hppa*64*) + shrext_cmds='.sl' +- hardcode_into_libs=yes ++ hardcode_into_libs=no + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +@@ -30144,7 +30122,7 @@ + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + irix5* | irix6* | nonstopux*) +@@ -30181,7 +30159,7 @@ + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + # No shared lib support for Linux oldld, aout, or coff. +@@ -30202,7 +30180,7 @@ + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. +- hardcode_into_libs=yes ++ hardcode_into_libs=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + +@@ -30236,7 +30214,7 @@ + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + newsos6) +@@ -30314,7 +30292,7 @@ + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; +@@ -30371,7 +30349,7 @@ + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH +- hardcode_into_libs=yes ++ hardcode_into_libs=no + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no +@@ -30797,7 +30775,7 @@ + hardcode_action=$hardcode_action_F77 + + # Whether we should hardcode library paths into libraries. +-hardcode_into_libs=$hardcode_into_libs ++hardcode_into_libs=no + + # Flag to hardcode \$libdir into a binary during linking. + # This must work even if \$libdir does not exist. +@@ -30980,11 +30958,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:30983: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:30961: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:30987: \$? = $ac_status" >&5 ++ echo "$as_me:30965: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -31270,11 +31248,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:31273: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:31251: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 +- echo "$as_me:31277: \$? = $ac_status" >&5 ++ echo "$as_me:31255: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. +@@ -31374,11 +31352,11 @@ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` +- (eval echo "\"\$as_me:31377: $lt_compile\"" >&5) ++ (eval echo "\"\$as_me:31355: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 +- echo "$as_me:31381: \$? = $ac_status" >&5 ++ echo "$as_me:31359: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized +@@ -32518,7 +32496,7 @@ + version_type=linux + need_lib_prefix=no + need_version=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' +@@ -32700,16 +32678,16 @@ + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + esac + ;; +@@ -32721,7 +32699,7 @@ + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + hpux9* | hpux10* | hpux11*) +@@ -32733,7 +32711,7 @@ + case $host_cpu in + ia64*) + shrext_cmds='.so' +- hardcode_into_libs=yes ++ hardcode_into_libs=no + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +@@ -32748,7 +32726,7 @@ + ;; + hppa*64*) + shrext_cmds='.sl' +- hardcode_into_libs=yes ++ hardcode_into_libs=no + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. +@@ -32779,7 +32757,7 @@ + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + irix5* | irix6* | nonstopux*) +@@ -32816,7 +32794,7 @@ + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + # No shared lib support for Linux oldld, aout, or coff. +@@ -32837,7 +32815,7 @@ + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. +- hardcode_into_libs=yes ++ hardcode_into_libs=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + +@@ -32871,7 +32849,7 @@ + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + ;; + + newsos6) +@@ -32949,7 +32927,7 @@ + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes +- hardcode_into_libs=yes ++ hardcode_into_libs=no + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; +@@ -33006,7 +32984,7 @@ + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH +- hardcode_into_libs=yes ++ hardcode_into_libs=no + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + shlibpath_overrides_runpath=no +@@ -33432,7 +33410,7 @@ + hardcode_action=$hardcode_action_GCJ + + # Whether we should hardcode library paths into libraries. +-hardcode_into_libs=$hardcode_into_libs ++hardcode_into_libs=no + + # Flag to hardcode \$libdir into a binary during linking. + # This must work even if \$libdir does not exist. +@@ -33918,7 +33896,7 @@ + hardcode_action=$hardcode_action_RC + + # Whether we should hardcode library paths into libraries. +-hardcode_into_libs=$hardcode_into_libs ++hardcode_into_libs=no + + # Flag to hardcode \$libdir into a binary during linking. + # This must work even if \$libdir does not exist. +diff -urNad sane-backends-1.0.20~/configure.in sane-backends-1.0.20/configure.in +--- sane-backends-1.0.20~/configure.in 2009-06-26 14:36:41.000000000 +0200 ++++ sane-backends-1.0.20/configure.in 2009-06-26 14:37:58.409585705 +0200 +@@ -86,7 +86,7 @@ + AC_SUBST(INCLUDES) + SANE_SET_CFLAGS([$is_release]) + SANE_SET_LDFLAGS +-SANE_LINKER_RPATH ++dnl SANE_LINKER_RPATH + + dnl *********************************************************************** + dnl Checks for unix variants --- sane-backends-1.0.20.orig/debian/patches/42_add_epson_cx_6000.dpatch +++ sane-backends-1.0.20/debian/patches/42_add_epson_cx_6000.dpatch @@ -0,0 +1,16 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 42_add_epson_cx_6000.dpatch by Martin Pitt +## +## DP: Add Epson CX6000. (LP: #314485) +@DPATCH@ +diff -urNad sane-backends-1.0.19~/backend/epson_usb.c sane-backends-1.0.19/backend/epson_usb.c +--- sane-backends-1.0.19~/backend/epson_usb.c 2007-08-18 14:06:36.000000000 +0200 ++++ sane-backends-1.0.19/backend/epson_usb.c 2009-02-13 12:12:07.520196551 +0100 +@@ -43,6 +43,7 @@ + 0x819, /* CX4800 */ + 0x820, /* CX4200 */ + 0x82b, /* Stylus CX5000/DX5000/DX5050 */ ++ 0x82e, /* CX6000 */ + 0x82f, /* Stylus DX4050 */ + 0 /* last entry - this is used for devices that are specified + in the config file as "usb " */ --- sane-backends-1.0.20.orig/debian/patches/33_epson2_update.dpatch +++ sane-backends-1.0.20/debian/patches/33_epson2_update.dpatch @@ -0,0 +1,8314 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 33_epson2_update.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Update epson2 backend, commit 66999f7e13ea912953f4dac8934f3ef0f0788822 +## DP: Slightly adapted for 1.0.20. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/backend/Makefile.in sane-backends-1.0.20/backend/Makefile.in +--- sane-backends-1.0.20~/backend/Makefile.in 2010-01-01 13:08:02.724455524 +0100 ++++ sane-backends-1.0.20/backend/Makefile.in 2010-01-01 13:08:55.906454492 +0100 +@@ -132,7 +132,8 @@ + am_libepson2_la_OBJECTS = libepson2_la-epson2.lo \ + libepson2_la-epson2_scsi.lo libepson2_la-epson_usb.lo \ + libepson2_la-epson2_net.lo libepson2_la-epson2-io.lo \ +- libepson2_la-epson2-commands.lo ++ libepson2_la-epson2-commands.lo libepson2_la-epson2-ops.lo \ ++ libepson2_la-epson2-cct.lo + libepson2_la_OBJECTS = $(am_libepson2_la_OBJECTS) + libfujitsu_la_LIBADD = + am_libfujitsu_la_OBJECTS = libfujitsu_la-fujitsu.lo +@@ -1843,12 +1844,12 @@ + libsane_epson_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson + libsane_epson_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) + libsane_epson_la_LIBADD = $(COMMON_LIBS) libepson.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo $(SCSI_LIBS) $(USB_LIBS) +-libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h ++libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h epson2-cct.c + libepson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2 + nodist_libsane_epson2_la_SOURCES = epson2-s.c + libsane_epson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2 + libsane_epson2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) +-libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) ++libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB) + libfujitsu_la_SOURCES = fujitsu.c fujitsu.h fujitsu-scsi.h + libfujitsu_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=fujitsu + nodist_libsane_fujitsu_la_SOURCES = fujitsu-s.c +@@ -2666,8 +2667,10 @@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdll_la-dll.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdmc_la-dmc.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepjitsu_la-epjitsu.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-cct.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-commands.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-io.Plo@am__quote@ ++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-ops.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2_net.Plo@am__quote@ + @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2_scsi.Plo@am__quote@ +@@ -3092,6 +3095,20 @@ + @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ + @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libepson2_la-epson2-commands.lo `test -f 'epson2-commands.c' || echo '$(srcdir)/'`epson2-commands.c + ++libepson2_la-epson2-ops.lo: epson2-ops.c ++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libepson2_la-epson2-ops.lo -MD -MP -MF $(DEPDIR)/libepson2_la-epson2-ops.Tpo -c -o libepson2_la-epson2-ops.lo `test -f 'epson2-ops.c' || echo '$(srcdir)/'`epson2-ops.c ++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libepson2_la-epson2-ops.Tpo $(DEPDIR)/libepson2_la-epson2-ops.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epson2-ops.c' object='libepson2_la-epson2-ops.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libepson2_la-epson2-ops.lo `test -f 'epson2-ops.c' || echo '$(srcdir)/'`epson2-ops.c ++ ++libepson2_la-epson2-cct.lo: epson2-cct.c ++@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libepson2_la-epson2-cct.lo -MD -MP -MF $(DEPDIR)/libepson2_la-epson2-cct.Tpo -c -o libepson2_la-epson2-cct.lo `test -f 'epson2-cct.c' || echo '$(srcdir)/'`epson2-cct.c ++@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libepson2_la-epson2-cct.Tpo $(DEPDIR)/libepson2_la-epson2-cct.Plo ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epson2-cct.c' object='libepson2_la-epson2-cct.lo' libtool=yes @AMDEPBACKSLASH@ ++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ ++@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libepson2_la-epson2-cct.lo `test -f 'epson2-cct.c' || echo '$(srcdir)/'`epson2-cct.c ++ + libfujitsu_la-fujitsu.lo: fujitsu.c + @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfujitsu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libfujitsu_la-fujitsu.lo -MD -MP -MF $(DEPDIR)/libfujitsu_la-fujitsu.Tpo -c -o libfujitsu_la-fujitsu.lo `test -f 'fujitsu.c' || echo '$(srcdir)/'`fujitsu.c + @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libfujitsu_la-fujitsu.Tpo $(DEPDIR)/libfujitsu_la-fujitsu.Plo +diff -urNad sane-backends-1.0.20~/backend/epson2-cct.c sane-backends-1.0.20/backend/epson2-cct.c +--- sane-backends-1.0.20~/backend/epson2-cct.c 1970-01-01 01:00:00.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2-cct.c 2010-01-01 13:08:05.194455679 +0100 +@@ -0,0 +1,552 @@ ++/* epson2 hardware colour correction coefficients ++ * Copyright (C) 2001-2009 SEIKO EPSON Corporation ++ * Copyright (C) 2009 Tower Technologies ++ * ++ * License: GPLv2 ++ * ++ * This file is part of the SANE epson2 backend and has been derived ++ * from the epkowa backend distributed with Image Scan! ++ * ++ */ ++ ++/*! Hardware colour correction coefficients (CCC). ++ ++ Each entry starts with a unique identifier, followed by four CCC ++ profiles; the first is for reflective materials, the second for ++ colour negatives, the third for monochrome negatives, and the ++ fourth and last one is for colour positives. ++*/ ++ ++#define DEBUG_DECLARE_ONLY ++ ++#include "epson2.h" ++ ++const struct epson_profile epson_cct_profiles[] = { ++ {0x00, /* default */ ++ {{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x05, /* ES-6000H */ ++ {{1.1419,-0.0596,-0.0825,-0.1234, 1.2812,-0.1413, 0.0703,-0.5720, 1.5016}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1419,-0.0596,-0.0825,-0.1234, 1.2812,-0.1413, 0.0703,-0.5720, 1.5016}}}, ++ {0x06, /* GT-6600 */ ++ {{1.1442,-0.0705,-0.0737,-0.0702, 1.1013,-0.0311,-0.0080,-0.3588, 1.3668}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x07, /* GT-7600 */ ++ {{1.1967,-0.1379,-0.0588,-0.0538, 1.0385, 0.0153, 0.0348,-0.4070, 1.3721}, ++ {1.0010,-0.0010, 0.0000,-0.1120, 1.1710,-0.0590, 0.0000,-0.0910, 1.0920}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1967,-0.1379,-0.0588,-0.0538, 1.0385, 0.0153, 0.0348,-0.4070, 1.3721}}}, ++ {0x0D, /* ES-2000 */ ++ {{1.1980,-0.1365,-0.0616,-0.1530, 1.1729,-0.0198,-0.0025,-0.2776, 1.2801}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1980,-0.1365,-0.0616,-0.1530, 1.1729,-0.0198,-0.0025,-0.2776, 1.2801}}}, ++ {0x0F, /* ES-8500 */ ++ {{1.0961,-0.0181,-0.0779,-0.1279, 1.1957,-0.0678, 0.0315,-0.3891, 1.3576}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0961,-0.0181,-0.0779,-0.1279, 1.1957,-0.0678, 0.0315,-0.3891, 1.3576}}}, ++ {0x15, /* GT-6700 */ ++ {{1.0999,-0.0425,-0.0574,-0.0806, 1.0835,-0.0028, 0.0057,-0.2924, 1.2866}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x16, /* GT-8700 */ ++ {{1.2020,-0.1518,-0.0502,-0.0847, 1.1385,-0.0538, 0.0059,-0.3255, 1.3196}, ++ {1.0030,-0.0030, 0.0000,-0.0980, 1.1500,-0.0520,-0.0030,-0.0840, 1.0880}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2456,-0.1617,-0.0839,-0.1160, 1.1862,-0.0702,-0.0036,-0.3438, 1.3473}}}, ++ {0x18, /* GT-7700 */ ++ {{1.1339,-0.0526,-0.0813,-0.1177, 1.1661,-0.0485,-0.0030,-0.3298, 1.3328}, ++ {1.0010,-0.0010, 0.0000,-0.1120, 1.1710,-0.0590, 0.0000,-0.0910, 1.0920}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2066,-0.0360,-0.1706,-0.1313, 1.2523,-0.1210,-0.0299,-0.3377, 1.3676}}}, ++ {0x1A, /* ES-9000H */ ++ {{1.0986, 0.0235,-0.1221,-0.1294, 1.0896, 0.0399, 0.0928,-0.6043, 1.5115}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x1B, /* ES-2200 */ ++ {{1.1855,-0.1372,-0.0483,-0.2060, 1.2468,-0.0407, 0.0358,-0.3059, 1.2701}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1976,-0.1182,-0.0794,-0.1578, 1.2720,-0.1142, 0.0122,-0.3467, 1.3345}}}, ++ {0x1D, /* GT-7200 */ ++ {{1.0675,-0.0586,-0.0088,-0.0332, 0.9716, 0.0616, 0.0175,-0.4054, 1.3879}, ++ {1.0090,-0.0090, 0.0000,-0.0390, 1.0750,-0.0360,-0.0070,-0.1060, 1.1130}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1394,-0.0829,-0.0564,-0.0003, 1.0008,-0.0004,-0.0059,-0.3674, 1.3733}}}, ++ {0x1F, /* GT-8200 */ ++ {{1.0800,-0.0607,-0.0193,-0.0787, 1.0846,-0.0059, 0.0135,-0.3334, 1.3199}, ++ {1.0040,-0.0040, 0.0000,-0.0780, 1.1360,-0.0570,-0.0020,-0.0810, 1.0830}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1334,-0.0929,-0.0405,-0.0418, 1.0689,-0.0271,-0.0521,-0.3262, 1.3783}}}, ++ {0x21, /* GT-9700 */ ++ {{1.0919,-0.0739,-0.0180,-0.0941, 1.1150,-0.0209, 0.0220,-0.3744, 1.3524}, ++ {1.0090,-0.0100, 0.0010,-0.0720, 1.1310,-0.0600, 0.0000,-0.1000, 1.1000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1374,-0.1396, 0.0021,-0.0489, 1.0655,-0.0166, 0.0081,-0.3492, 1.3411}}}, ++ {0x23, /* GT-7300 */ ++ {{1.0339,-0.0166,-0.0173,-0.0117, 0.9797, 0.0319, 0.0010,-0.3609, 1.3599}, ++ {1.0090,-0.0090, 0.0000,-0.0390, 1.0750,-0.0360,-0.0070,-0.1060, 1.1130}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1666,-0.0898,-0.0768,-0.0076, 1.0157,-0.0081, 0.0012,-0.3048, 1.3036}}}, ++ {0x25, /* GT-8300 */ ++ {{1.0800,-0.0607,-0.0193,-0.0787, 1.0846,-0.0059, 0.0135,-0.3334, 1.3199}, ++ {1.0040,-0.0040, 0.0000,-0.0780, 1.1360,-0.0570,-0.0020,-0.0810, 1.0830}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1334,-0.0929,-0.0405,-0.0418, 1.0689,-0.0271,-0.0521,-0.3262, 1.3783}}}, ++ {0x27, /* GT-9300 */ ++ {{1.0919,-0.0739,-0.0180,-0.0941, 1.1150,-0.0209, 0.0220,-0.3744, 1.3524}, ++ {1.0083,-0.0094, 0.0011,-0.0760, 1.1379,-0.0619,-0.0002,-0.0945, 1.0947}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1952,-0.1519,-0.0433,-0.0932, 1.1613,-0.0681,-0.0418,-0.3140, 1.3558}}}, ++ {0x29, /* GT-9800F */ ++ {{1.0369,-0.0210,-0.0160,-0.0820, 1.1160,-0.0341, 0.0150,-0.5035, 1.4885}, ++ {1.0122,-0.0151, 0.0029,-0.0861, 1.1402,-0.0542,-0.0061,-0.1607, 1.1669}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1764,-0.1749,-0.0014,-0.0590, 1.0983,-0.0393, 0.0208,-0.5194, 1.4986}}}, ++ {0x2B, /* ES-7000H */ ++ {{1.0305,-0.0116,-0.0189,-0.0936, 1.1245,-0.0309,-0.0072,-0.1413, 1.1485}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x32, /* GT-9400 */ ++ {{1.0932,-0.0529,-0.0403,-0.1077, 1.1416,-0.0338, 0.0079,-0.5525, 1.5446}, ++ {1.0259,-0.0356, 0.0097,-0.1085, 1.2225,-0.1140,-0.0046,-0.1848, 1.1894}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2720,-0.2665,-0.0054,-0.0672, 1.1301,-0.0629,-0.0048,-0.3917, 1.3965}}}, ++ {0x2D, /* CC-600PX */ ++ {{1.0436,-0.0078,-0.0359,-0.0169, 1.0114, 0.0056, 0.0308,-0.4425, 1.4117}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x3A, /* PM-A850 */ ++ {{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806}, ++ {1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}}, ++ {0x36, /* CX5300/CX5400 */ ++ {{1.0848,-0.0153,-0.0695,-0.0902, 1.0611, 0.0291, 0.0344,-0.5002, 1.4658}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x34, /* GT-X700 */ ++ {{1.1032,-0.0590,-0.0442,-0.1915, 1.3371,-0.1456, 0.0387,-0.5804, 1.5417}, ++ {1.0232,-0.0258, 0.0026,-0.1296, 1.2882,-0.1587,-0.0011,-0.1928, 1.1940}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2662,-0.2664, 0.0002,-0.1050, 1.3168,-0.2118,-0.0058,-0.4370, 1.4428}}}, ++ {0x38, /* RX500/RX510 */ ++ {{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806}, ++ {1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}}, ++ {0x37, /* CX6300/CX6400 */ ++ {{0.9640, 0.1455,-0.1095, 0.0108, 1.1933,-0.2041, 0.0071,-0.3487, 1.3416}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x3F, /* ES-10000G */ ++ {{1.1223,-0.0985,-0.0238,-0.0847, 1.1502,-0.0655, 0.0118,-0.5022, 1.4904}, ++ {1.0077,-0.0129, 0.0052,-0.0904, 1.1785,-0.0881, 0.0000,-0.1528, 1.1528}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1927,-0.1646,-0.0280,-0.0655, 1.1033,-0.0378, 0.0034,-0.4173, 1.4139}}}, ++ {0x41, /* GT-F500/F550 */ ++ {{1.0732,-0.0581,-0.0150,-0.0897, 1.1553,-0.0657,-0.0179,-0.6500, 1.6679}, ++ {1.0163,-0.0203, 0.0040,-0.1125, 1.1797,-0.0672,-0.0091,-0.2343, 1.2434}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2437,-0.2022,-0.0415,-0.0352, 1.0735,-0.0383,-0.0188,-0.5020, 1.5209}}}, ++ {0x43, /* GT-F600 */ ++ {{1.0782,-0.0697,-0.0085,-0.1605, 1.2862,-0.1257, 0.0148,-0.5854, 1.5706}, ++ {1.0136,-0.0151, 0.0016,-0.1836, 1.3422,-0.1586,-0.0014,-0.1851, 1.1865}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1491,-0.1456,-0.0035,-0.0990, 1.2657,-0.1666, 0.0015,-0.3868, 1.3853}}}, ++ {0x46, /* CX3500/CX3600/CX4500/CX4600 */ ++ {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x48, /* PM-A700/RX420/RX430 */ ++ {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x49, /* CX6500/CX6600 */ ++ {{0.9640, 0.1455,-0.1095, 0.0108, 1.1933,-0.2041, 0.0071,-0.3487, 1.3416}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x4B, /* PM-A870 */ ++ {{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806}, ++ {1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}}, ++ {0x4D, /* PM-A900 */ ++ {{1.1011,-0.0824,-0.0186,-0.0970, 1.1991,-0.1021,-0.0161,-0.6247, 1.6408}, ++ {1.0259,-0.0356, 0.0097,-0.1085, 1.2225,-0.1140,-0.0046,-0.1848, 1.1894}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2150,-0.2074,-0.0076,-0.0521, 1.1430,-0.0909,-0.0204,-0.4156, 1.4360}}}, ++ {0x4F, /* GT-X800 */ ++ {{1.1052,-0.0850,-0.0202,-0.1050, 1.2294,-0.1245,-0.0486,-0.4160, 1.4646}, ++ {1.0255,-0.0272, 0.0017,-0.0919, 1.2098,-0.1180,-0.0021,-0.1296, 1.1317}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2950,-0.2619,-0.0332,-0.0562, 1.1587,-0.1025,-0.0397,-0.3100, 1.3497}}}, ++ {0x51, /* LP-A500 */ ++ {{1.0614,-0.0361,-0.0253,-0.1081, 1.1320,-0.0240,-0.0536,-0.2045, 1.2580}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x52, /* GT-F520/F570 */ ++ {{1.0978,-0.0806,-0.0173,-0.0802, 1.1515,-0.0713,-0.0476,-0.4656, 1.5132}, ++ {1.0192,-0.0192, 0.0000,-0.0974, 1.1846,-0.0872,-0.0031,-0.1797, 1.1828}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2490,-0.2030,-0.0460,-0.0469, 1.1046,-0.0577,-0.0361,-0.3857, 1.4217}}}, ++ {0x54, /* GT-X750 */ ++ {{1.0905,-0.0654,-0.0251,-0.1030, 1.1801,-0.0771,-0.0685,-0.4238, 1.4923}, ++ {1.0206,-0.0207, 0.0000,-0.0890, 1.1770,-0.0880,-0.0014,-0.1450, 1.1464}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.3041,-0.2907,-0.0134,-0.0383, 1.0908,-0.0525,-0.0327,-0.2947, 1.3275}}}, ++ {0x56, /* LP-M5500 */ ++ {{1.0784,-0.0560,-0.0224,-0.1793, 1.2234,-0.0441,-0.0041,-0.2636, 1.2677}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x57, /* Stylus CX3700/CX3800/DX3800 */ ++ {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x58, /* PX-A650/Stylus CX4700/CX4800/DX4800 */ ++ {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x59, /* Stylus CX4100/CX4200/DX4200 */ ++ {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x5B, /* Stylus CX7700/CX7800 */ ++ {{0.9764, 0.1095,-0.0859, 0.0149, 1.1154,-0.1303, 0.0051,-0.2851, 1.2800}, ++ {1.0024,-0.0149, 0.0124,-0.2569, 1.3432,-0.0864,-0.0043,-0.1306, 1.1349}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1003,-0.0493,-0.0510,-0.1607, 1.2748,-0.1142,-0.0059,-0.3161, 1.3220}}}, ++ {0x5D, /* Stylus Photo RX520/RX530 */ ++ {{0.9764, 0.1095,-0.0859, 0.0149, 1.1154,-0.1303, 0.0051,-0.2851, 1.2800}, ++ {1.0024,-0.0149, 0.0124,-0.2569, 1.3432,-0.0864,-0.0043,-0.1306, 1.1349}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.1003,-0.0493,-0.0510,-0.1607, 1.2748,-0.1142,-0.0059,-0.3161, 1.3220}}}, ++ {0x5F, /* Stylus Photo RX640/RX650 */ ++ {{1.0697,-0.0561,-0.0137,-0.0824, 1.1291,-0.0467,-0.0390,-0.5218, 1.5608}, ++ {1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2606,-0.2125,-0.0482,-0.0567, 1.1441,-0.0874,-0.0431,-0.3490, 1.3921}}}, ++ {0x61, /* PM-A950 */ ++ {{1.0921,-0.0722,-0.0199,-0.0831, 1.1550,-0.0718,-0.0452,-0.3721, 1.4173}, ++ {1.0168,-0.0168, 0.0000,-0.0953, 1.1928,-0.0975,-0.0012,-0.1235, 1.1247}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2603,-0.2763, 0.0155,-0.0398, 1.1033,-0.0635,-0.0249,-0.2675, 1.2924}}}, ++ {0x63, /* GT-X900 */ ++ {{1.0976,-0.0789,-0.0187,-0.0958, 1.1821,-0.0863,-0.0565,-0.4179, 1.4744}, ++ {1.0250,-0.0267, 0.0016,-0.0930, 1.2108,-0.1178,-0.0022,-0.1296, 1.1317}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.3111,-0.2979,-0.0132,-0.0441, 1.1148,-0.0707,-0.0348,-0.2971, 1.3319}}}, ++ {0x65, /* ES-H300 */ ++ {{1.0359,-0.0146,-0.0213,-0.0752, 1.0963,-0.0211,-0.0456,-0.3238, 1.3693}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x66, /* GT-S600/F650, Perfection V10/V100 */ ++ {{1.0878,-0.0667,-0.0211,-0.0892, 1.1513,-0.0622,-0.0654,-0.5175, 1.5829}, ++ {1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2688,-0.2522,-0.0166,-0.0559, 1.1291,-0.0733,-0.0377,-0.3519, 1.3896}}}, ++ {0x68, /* GT-F700, Perfection V350 */ ++ {{1.0950,-0.0646,-0.0305,-0.0792, 1.1398,-0.0606,-0.0123,-0.5175, 1.5298}, ++ {1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2697,-0.2501,-0.0195,-0.0351, 1.1236,-0.0885,-0.0131,-0.3268, 1.3400}}}, ++ {0x6A, /* Stylus CX2800/CX2900/ME200 */ ++ {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x6B, /* Stylus PX-A620, CX3900/DX4000 */ ++ {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x6C, /* Stylus CX5900/CX6000/DX6000 */ ++ {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x70, /* Stylus Photo RX560/RX580/RX590 */ ++ {{0.9533, 0.0885,-0.0418, 0.0033, 1.0627,-0.0660,-0.0137,-0.1904, 1.2041}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x71, /* PM-A920 */ ++ {{1.0697,-0.0561,-0.0137,-0.0824, 1.1291,-0.0467,-0.0390,-0.5218, 1.5608}, ++ {1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2606,-0.2125,-0.0482,-0.0567, 1.1441,-0.0874,-0.0431,-0.3490, 1.3921}}}, ++ {0x73, /* PM-A970 */ ++ {{1.0828,-0.0739,-0.0089,-0.0895, 1.1597,-0.0702,-0.0531,-0.4291, 1.4822}, ++ {1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2579,-0.2384,-0.0195,-0.0569, 1.1454,-0.0884,-0.0411,-0.3072, 1.3483}}}, ++ {0x75, /* PM-T990 */ ++ {{1.0828,-0.0739,-0.0089,-0.0895, 1.1597,-0.0702,-0.0531,-0.4291, 1.4822}, ++ {1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.2579,-0.2384,-0.0195,-0.0569, 1.1454,-0.0884,-0.0411,-0.3072, 1.3483}}}, ++ {0x77, /* Stylus CX4900/CX5000/DX5000 */ ++ {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x78, /* LP-M5600 */ ++ {{1.0784,-0.0560,-0.0224,-0.1793, 1.2234,-0.0441,-0.0041,-0.2636, 1.2677}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x79, /* AcuLaser CX21 */ ++ {{1.0614,-0.0361,-0.0253,-0.1081, 1.1320,-0.0240,-0.0536,-0.2045, 1.2580}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x7A, /* GT-F670, Perfection V200 */ ++ {{1.1754,-0.1173,-0.0580,-0.0687, 1.1307,-0.0620,-0.0255,-0.4699, 1.4954}, ++ {1.0150,-0.0173, 0.0022,-0.0853, 1.2238,-0.1384,-0.0073,-0.1490, 1.1562}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.4283,-0.4335, 0.0052,-0.0170, 1.1308,-0.1138,-0.0147,-0.2230, 1.2377}}}, ++ {0x7C, /* GT-X770, Perfection V500 */ ++ {{1.2470,-0.2041,-0.0429,-0.1920, 1.2918,-0.0998,-0.0100,-0.2503, 1.2603}, ++ {1.0050,-0.0076, 0.0026,-0.2532, 1.1289, 0.1243,-0.0733,-0.0960, 1.1693}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.4724,-0.4599,-0.0125,-0.0876, 1.1562,-0.0686,-0.0097,-0.2278, 1.2375}}}, ++ {0x7E, /* Stylus CX4300/CX4400/CX5500/CX5600/DX4400 */ ++ {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x7F, /* PX-A640, Stylus CX7300/CX7400/DX7400 */ ++ {{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x80, /* PX-A740, Stylus CX8300/CX8400/DX8400 */ ++ {{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x81, /* PX-FA700, Stylus CX9300F/CX9400Fax/DX9400F */ ++ {{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x82, /* PM-T960 */ ++ {{1.1622,-0.1102,-0.0519,-0.0717, 1.1060,-0.0343,-0.0248,-0.4138, 1.4385}, ++ {0.9913, 0.0082, 0.0005,-0.1259, 1.0452, 0.0807,-0.0072,-0.0767, 1.0839}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.3900,-0.3008,-0.0892,-0.0254, 1.0890,-0.0636,-0.0300,-0.2501, 1.2801}}}, ++ {0x84, /* PM-A940, Stylus Photo RX680/RX685/RX690 */ ++ {{1.0934,-0.0042,-0.0892, 0.0052, 1.1019,-0.1071, 0.0259,-0.2651, 1.2392}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x85, /* PM-A840/A840S, Stylus Photo RX585/RX595/RX610 */ ++ {{1.0534, 0.0399,-0.0934, 0.0098, 1.0589,-0.0687, 0.0016,-0.1131, 1.1115}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x86, /* GT-D1000, GT-1500 */ ++ {{1.1945,-0.1413,-0.0532,-0.1929, 1.2525,-0.0596,-0.0235,-0.2761, 1.2996}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x87, /* GT-X970 */ ++ {{1.1978,-0.1417,-0.0561,-0.0852, 1.1610,-0.0758,-0.0395,-0.3212, 1.3607}, ++ {1.0000, 0.0009,-0.0009,-0.1268, 1.0523, 0.0745,-0.0075,-0.0873, 1.0948}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.4475,-0.3957,-0.0518,-0.0138, 1.0644,-0.0506,-0.0199,-0.2050, 1.2249}}}, ++ {0x97, /* LP-M5000 */ ++ {{1.1115,-0.0377,-0.0738,-0.0658, 1.0624, 0.0034, 0.0042,-0.2883, 1.2841}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x89, /* LP-M6000 */ ++ {{1.1115,-0.0377,-0.0738,-0.0658, 1.0624, 0.0034, 0.0042,-0.2883, 1.2841}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x8A, /* ES-H7200, GT-20000 */ ++ {{1.1221,-0.0396,-0.0825,-0.0718, 1.0822,-0.0104, 0.0112,-0.2995, 1.2883}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x8B, /* GT-F720/S620, Perfection V30/V300 */ ++ {{1.2402,-0.1891,-0.0511,-0.1535, 1.2008,-0.0473,-0.0316,-0.3293, 1.3609}, ++ {1.0027,-0.0048, 0.0021,-0.2067, 1.0878, 0.1189,-0.0408,-0.0767, 1.1175}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.4524,-0.4346,-0.0178,-0.0601, 1.1273,-0.0672,-0.0173,-0.1823, 1.1996}}}, ++ {0x8D, /* Stylus NX200/SX200/TX200 */ ++ {{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x8E, /* PX-501A, Stylus NX400/SX400/TX400 */ ++ {{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x8F, /* Stylus NX300 / Stylus Office BX300F/TX300F / ME Office 600F */ ++ {{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x90, /* PX-601F, Stylus SX600FW/TX600FW / Stylus Office BX600FW / WorkForce 600 */ ++ {{1.0316, 0.0864,-0.1180, 0.0268, 1.1111,-0.1379, 0.0213,-0.2235, 1.2022}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x91, /* EP-901A/901F, Artisan 800 / Stylus Photo PX800FW/FX800FW */ ++ {{1.0777, 0.0152,-0.0929, 0.0244, 1.1221,-0.1465, 0.0103,-0.1544, 1.1441}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x92, /* EP-801A, Artisan 700 / Stylus Photo PX700W/TX700W */ ++ {{1.0777, 0.0152,-0.0929, 0.0244, 1.1221,-0.1465, 0.0103,-0.1544, 1.1441}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x93, /* PX-401A, Stylus NX100/SX100/TX100 / ME 300 */ ++ {{1.0934,-0.0042,-0.0892, 0.0052, 1.1019,-0.1071, 0.0259,-0.2651, 1.2392}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ {0x96, /* WorkForce 500 */ ++ {{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, ++ {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, ++ ++ { 0xFF, { } } /* terminator */ ++}; ++ ++const struct epson_profile_map epson_cct_models[] = { ++ {"GT-10000", 0x05 }, ++ {"ES-6000", 0x05 }, ++ {"Perfection610", 0x06 }, ++ {"GT-6600", 0x06A }, ++ {"Perfection1200", 0x07 }, ++ {"GT-7600", 0x07 }, ++ {"Expression1600", 0x0D }, ++ {"ES-2000", 0x0D }, ++ {"Expression1640XL", 0x0F }, ++ {"ES-8500", 0x0F }, ++ {"Perfection640", 0x15 }, ++ {"GT-6700", 0x15 }, ++ {"Perfection1640", 0x16 }, ++ {"GT-8700", 0x16 }, ++ {"Perfection1240", 0x18 }, ++ {"GT-7700", 0x18 }, ++ {"GT-30000", 0x1A }, ++ {"ES-9000H", 0x1A }, ++ {"Expression1680", 0x1B }, ++ {"ES-2200", 0x1B }, ++ {"GT-7200", 0x1D }, ++ {"GT-8200", 0x1F }, ++ {"GT-9700", 0x21 }, ++ {"GT-7300", 0x23 }, ++ {"GT-8300", 0x25 }, ++ {"GT-9300", 0x27 }, ++ {"GT-9800", 0x29 }, ++ {"ES-7000H", 0x2B }, ++ {"LP-A500", 0x51 }, ++ {"AL-CX11", 0x51 }, ++ {"GT-9400", 0x32 }, ++ {"CC-600PX", 0x2D }, ++ {"PM-A850", 0x3A }, ++ {"CX5400", 0x36 }, ++ {"GT-X700", 0x34 }, ++ {"RX500", 0x38 }, ++ {"PX-A650", 0x37 }, ++ {"ES-10000G", 0x3F }, ++ {"Expression10000", 0x3F }, ++ {"CX4600", 0x46 }, ++ {"CX6600", 0x49 }, ++ {"CX3600", 0x46 }, ++ {"RX420", 0x48 }, ++ {"PM-A700", 0x48 }, ++ {"PM-A870", 0x4B }, ++ {"GT-F500", 0x41 }, ++ {"GT-F600", 0x43 }, ++ {"PM-A900", 0x4D }, ++ {"GT-X800", 0x4F }, ++ {"GT-X750", 0x54 }, ++ {"LP-M5500", 0x56 }, ++ {"LP-M5600", 0x78 }, ++ {"GT-F520", 0x52 }, ++ {"CX3800", 0x57 }, ++ {"CX7800", 0x5B }, ++ {"PM-A750", 0x5D }, ++ {"CX4800", 0x58 }, ++ {"CX4200", 0x59 }, ++ {"PM-A950", 0x61 }, ++ {"PM-A890", 0x5F }, ++ {"GT-X900", 0x63 }, ++ {"CX4000", 0x6B }, ++ {"CX3000v", 0x6A }, ++ {"ES-H300", 0x65 }, ++ {"CX6000", 0x6C }, ++ {"PM-A820", 0x70 }, ++ {"PM-A920", 0x71 }, ++ {"PM-A970", 0x73 }, ++ {"PM-T990", 0x75 }, ++ {"CX5000", 0x77 }, ++ {"GT-S600", 0x66 }, ++ {"GT-F700", 0x68 }, ++ {"AL-CX21", 0x79 }, ++ {"GT-F670", 0x7A }, ++ {"GT-X770", 0x7C }, ++ {"CX4400", 0x7E }, ++ {"CX7400", 0x7F }, ++ {"CX8400", 0x80 }, ++ {"CX9400Fax", 0x81 }, ++ {"PM-T960", 0x82 }, ++ {"PM-A940", 0x84 }, ++ {"PM-A840", 0x85 }, ++ {"GT-D1000", 0x86 }, ++ {"GT-X970", 0x87 }, ++ {"LP-M5000", 0x97 }, ++ {"LP-M6000", 0x89 }, ++ {"ES-H7200", 0x8A }, ++ {"GT-20000", 0x8A }, ++ {"NX200", 0x8D }, ++ {"NX400", 0x8E }, ++ {"NX100", 0x93 }, ++ {"NX300", 0x8F }, ++ {"WorkForce 600", 0x90 }, ++ {"Artisan 800", 0x91 }, ++ {"Artisan 700", 0x92 }, ++ {"WorkForce 500", 0x96 }, ++ {"GT-F720", 0x8B }, ++ {"GT-S620", 0x8B }, ++ {"GT-S50", 0x00 }, ++ {"GT-S80", 0x00 }, ++ {"PID 0851", 0x98 }, ++ {"PID 084D", 0x99 }, ++ {"PID 084F", 0x9A }, ++ {"PID 0854", 0x9B }, ++ {"PID 0856", 0x9C }, ++ ++ { } /* terminator */ ++}; +diff -urNad sane-backends-1.0.20~/backend/epson2-commands.c sane-backends-1.0.20/backend/epson2-commands.c +--- sane-backends-1.0.20~/backend/epson2-commands.c 2010-01-01 13:07:55.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2-commands.c 2010-01-01 13:08:05.195454801 +0100 +@@ -17,13 +17,10 @@ + + #define DEBUG_DECLARE_ONLY + +-#include "../include/sane/config.h" +- +-#include +-#include +-#include ++#include "sane/config.h" + + #include ++#include + + #include "epson2.h" + #include "epson2-io.h" +@@ -129,17 +126,158 @@ + return e2_cmd_simple(s, params, 8); + } + ++static int ++get_roundup_index(double frac[], int n) ++{ ++ int i, index = -1; ++ double max_val = 0.0; ++ ++ for (i = 0; i < n; i++) { ++ ++ if (frac[i] < 0) ++ continue; ++ ++ if (max_val < frac[i]) { ++ index = i; ++ max_val = frac[i]; ++ } ++ } ++ ++ return index; ++} ++ ++static int ++get_rounddown_index(double frac[], int n) ++{ ++ int i, index = -1; ++ double min_val = 1.0; ++ ++ for (i = 0; i < n; i++) { ++ ++ if (frac[i] > 0) ++ continue; ++ ++ if (min_val > frac[i]) { ++ index = i; ++ min_val = frac[i]; ++ } ++ } ++ ++ return index; ++} ++ ++static unsigned char ++int2cpt(int val) ++{ ++ if (val >= 0) { ++ ++ if (val > 127) ++ val = 127; ++ ++ return (unsigned char) val; ++ ++ } else { ++ ++ val = -val; ++ ++ if (val > 127) ++ val = 127; ++ ++ return (unsigned char) (0x80 | val); ++ } ++} ++ ++static void ++round_cct(double org_cct[], int rnd_cct[]) ++{ ++ int loop = 0; ++ int i, j, sum[3]; ++ double mult_cct[9], frac[9]; ++ ++ for (i = 0; i < 9; i++) { ++ mult_cct[i] = org_cct[i] * 32; ++ rnd_cct[i] = (int) floor(mult_cct[i] + 0.5); ++ } ++ ++ do { ++ for (i = 0; i < 3; i++) { ++ ++ int k = i * 3; ++ ++ if ((rnd_cct[k] == 11) && ++ (rnd_cct[k] == rnd_cct[k + 1]) && ++ (rnd_cct[k] == rnd_cct[k + 2])) { ++ ++ rnd_cct[k + i]--; ++ mult_cct[k + i] = rnd_cct[k + i]; ++ } ++ } ++ ++ for (i = 0; i < 3; i++) { ++ ++ int k = i * 3; ++ ++ for (sum[i] = j = 0; j < 3; j++) ++ sum[i] += rnd_cct[k + j]; ++ } ++ ++ for (i = 0; i < 9; i++) ++ frac[i] = mult_cct[i] - rnd_cct[i]; ++ ++ for (i = 0; i < 3; i++) { ++ ++ int k = i * 3; ++ ++ if (sum[i] < 32) { ++ ++ int index = get_roundup_index(&frac[k], 3); ++ if (index != -1) { ++ rnd_cct[k + index]++; ++ mult_cct[k + index] = rnd_cct[k + index]; ++ sum[i]++; ++ } ++ ++ } else if (sum[i] > 32) { ++ ++ int index = get_rounddown_index(&frac[k], 3); ++ if (index != -1) { ++ rnd_cct[k + index]--; ++ mult_cct[k + index] = rnd_cct[k + index]; ++ sum[i]--; ++ } ++ } ++ } ++ } ++ ++ while ((++loop < 2) ++ && ((sum[0] != 32) || (sum[1] != 32) || (sum[2] != 32))); ++} ++ ++static void ++profile_to_colorcoeff(double *profile, unsigned char *color_coeff) ++{ ++ int cc_idx[] = { 4, 1, 7, 3, 0, 6, 5, 2, 8 }; ++ int i, color_table[9]; ++ ++ round_cct(profile, color_table); ++ ++ for (i = 0; i < 9; i++) ++ color_coeff[i] = int2cpt(color_table[cc_idx[i]]); ++} ++ ++ + /* + * Sends the "set color correction coefficients" command with the + * currently selected parameters to the scanner. + */ + + SANE_Status +-esci_set_color_correction_coefficients(Epson_Scanner * s) ++esci_set_color_correction_coefficients(Epson_Scanner * s, SANE_Word *table) + { + SANE_Status status; + unsigned char params[2]; +- signed char cct[9]; ++ unsigned char data[9]; ++ double cct[9]; + + DBG(8, "%s\n", __func__); + if (!s->hw->cmd->set_color_correction_coefficients) { +@@ -154,21 +292,23 @@ + if (status != SANE_STATUS_GOOD) + return status; + +- cct[0] = s->val[OPT_CCT_1].w; +- cct[1] = s->val[OPT_CCT_2].w; +- cct[2] = s->val[OPT_CCT_3].w; +- cct[3] = s->val[OPT_CCT_4].w; +- cct[4] = s->val[OPT_CCT_5].w; +- cct[5] = s->val[OPT_CCT_6].w; +- cct[6] = s->val[OPT_CCT_7].w; +- cct[7] = s->val[OPT_CCT_8].w; +- cct[8] = s->val[OPT_CCT_9].w; ++ cct[0] = SANE_UNFIX(table[0]); ++ cct[1] = SANE_UNFIX(table[1]); ++ cct[2] = SANE_UNFIX(table[2]); ++ cct[3] = SANE_UNFIX(table[3]); ++ cct[4] = SANE_UNFIX(table[4]); ++ cct[5] = SANE_UNFIX(table[5]); ++ cct[6] = SANE_UNFIX(table[6]); ++ cct[7] = SANE_UNFIX(table[7]); ++ cct[8] = SANE_UNFIX(table[8]); ++ ++ profile_to_colorcoeff(cct, data); + + DBG(11, "%s: %d,%d,%d %d,%d,%d %d,%d,%d\n", __func__, +- cct[0], cct[1], cct[2], cct[3], +- cct[4], cct[5], cct[6], cct[7], cct[8]); ++ data[0] , data[1], data[2], data[3], ++ data[4], data[5], data[6], data[7], data[8]); + +- return e2_cmd_simple(s, params, 9); ++ return e2_cmd_simple(s, data, 9); + } + + SANE_Status +@@ -212,25 +352,11 @@ + } + } + +- /* +- * When handling inverted images, we must also invert the user +- * supplied gamma function. This is *not* just 255-gamma - +- * this gives a negative image. +- */ +- + for (table = 0; table < 3; table++) { + gamma[0] = gamma_cmds[table]; + +- if (s->invert_image) { +- for (n = 0; n < 256; ++n) { +- gamma[n + 1] = +- 255 - s->gamma_table[table][255 - n]; +- } +- } else { +- for (n = 0; n < 256; ++n) { +- gamma[n + 1] = s->gamma_table[table][n]; +- } +- } ++ for (n = 0; n < 256; ++n) ++ gamma[n + 1] = s->gamma_table[table][n]; + + status = e2_cmd_simple(s, params, 2); + if (status != SANE_STATUS_GOOD) +@@ -335,18 +461,18 @@ + return status; + + DBG(1, " command level : %c%c\n", buf[0], buf[1]); +- DBG(1, " basic resolution: %lu\n", (u_long) le32atoh(&buf[4])); +- DBG(1, " min resolution : %lu\n", (u_long) le32atoh(&buf[8])); +- DBG(1, " max resolution : %lu\n", (u_long) le32atoh(&buf[12])); +- DBG(1, " max pixel num : %lu\n", (u_long) le32atoh(&buf[16])); ++ DBG(1, " basic resolution: %lu\n", (unsigned long) le32atoh(&buf[4])); ++ DBG(1, " min resolution : %lu\n", (unsigned long) le32atoh(&buf[8])); ++ DBG(1, " max resolution : %lu\n", (unsigned long) le32atoh(&buf[12])); ++ DBG(1, " max pixel num : %lu\n", (unsigned long) le32atoh(&buf[16])); + DBG(1, " scan area : %lux%lu\n", +- (u_long) le32atoh(&buf[20]), (u_long) le32atoh(&buf[24])); ++ (unsigned long) le32atoh(&buf[20]), (unsigned long) le32atoh(&buf[24])); + + DBG(1, " adf area : %lux%lu\n", +- (u_long) le32atoh(&buf[28]), (u_long) le32atoh(&buf[32])); ++ (unsigned long) le32atoh(&buf[28]), (unsigned long) le32atoh(&buf[32])); + + DBG(1, " tpu area : %lux%lu\n", +- (u_long) le32atoh(&buf[36]), (u_long) le32atoh(&buf[40])); ++ (unsigned long) le32atoh(&buf[36]), (unsigned long) le32atoh(&buf[40])); + + DBG(1, " main status : 0x%02x\n", buf[44]); + DBG(1, " input depth : %d\n", buf[66]); +@@ -507,12 +633,12 @@ + params[0] = FS; + params[1] = 'W'; + +- DBG(10, "resolution of main scan : %lu\n", (u_long) le32atoh(&buf[0])); +- DBG(10, "resolution of sub scan : %lu\n", (u_long) le32atoh(&buf[4])); +- DBG(10, "offset length of main scan : %lu\n", (u_long) le32atoh(&buf[8])); +- DBG(10, "offset length of sub scan : %lu\n", (u_long) le32atoh(&buf[12])); +- DBG(10, "scanning length of main scan: %lu\n", (u_long) le32atoh(&buf[16])); +- DBG(10, "scanning length of sub scan : %lu\n", (u_long) le32atoh(&buf[20])); ++ DBG(10, "resolution of main scan : %lu\n", (unsigned long) le32atoh(&buf[0])); ++ DBG(10, "resolution of sub scan : %lu\n", (unsigned long) le32atoh(&buf[4])); ++ DBG(10, "offset length of main scan : %lu\n", (unsigned long) le32atoh(&buf[8])); ++ DBG(10, "offset length of sub scan : %lu\n", (unsigned long) le32atoh(&buf[12])); ++ DBG(10, "scanning length of main scan: %lu\n", (unsigned long) le32atoh(&buf[16])); ++ DBG(10, "scanning length of sub scan : %lu\n", (unsigned long) le32atoh(&buf[20])); + DBG(10, "scanning color : %d\n", buf[24]); + DBG(10, "data format : %d\n", buf[25]); + DBG(10, "option control : %d\n", buf[26]); +@@ -540,6 +666,100 @@ + return SANE_STATUS_GOOD; + } + ++/* FS S */ ++ ++SANE_Status ++esci_get_scanning_parameter(SANE_Handle handle, unsigned char *buf) ++{ ++ Epson_Scanner *s = (Epson_Scanner *) handle; ++ SANE_Status status; ++ unsigned char params[2]; ++ ++ DBG(8, "%s\n", __func__); ++ ++ if (buf == NULL) ++ return SANE_STATUS_INVAL; ++ ++ params[0] = FS; ++ params[1] = 'S'; ++ ++ status = e2_txrx(s, params, 2, buf, 64); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ DBG(10, "resolution of main scan : %lu\n", ++ (u_long) le32atoh(&buf[0])); ++ DBG(10, "resolution of sub scan : %lu\n", ++ (u_long) le32atoh(&buf[4])); ++ DBG(10, "offset length of main scan : %lu\n", ++ (u_long) le32atoh(&buf[8])); ++ DBG(10, "offset length of sub scan : %lu\n", ++ (u_long) le32atoh(&buf[12])); ++ DBG(10, "scanning length of main scan: %lu\n", ++ (u_long) le32atoh(&buf[16])); ++ DBG(10, "scanning length of sub scan : %lu\n", ++ (u_long) le32atoh(&buf[20])); ++ DBG(10, "scanning color : %d\n", buf[24]); ++ DBG(10, "data format : %d\n", buf[25]); ++ DBG(10, "option control : %d\n", buf[26]); ++ DBG(10, "scanning mode : %d\n", buf[27]); ++ DBG(10, "block line number : %d\n", buf[28]); ++ DBG(10, "gamma correction : %d\n", buf[29]); ++ DBG(10, "brightness : %d\n", buf[30]); ++ DBG(10, "color correction : %d\n", buf[31]); ++ DBG(10, "halftone processing : %d\n", buf[32]); ++ DBG(10, "threshold : %d\n", buf[33]); ++ DBG(10, "auto area segmentation : %d\n", buf[34]); ++ DBG(10, "sharpness control : %d\n", buf[35]); ++ DBG(10, "mirroring : %d\n", buf[36]); ++ DBG(10, "film type : %d\n", buf[37]); ++ DBG(10, "main lamp lighting mode : %d\n", buf[38]); ++ ++ return SANE_STATUS_GOOD; ++} ++ ++/* ESC # */ ++ ++SANE_Status ++esci_enable_infrared(SANE_Handle handle) ++{ ++ Epson_Scanner *s = (Epson_Scanner *) handle; ++ SANE_Status status; ++ int i; ++ unsigned char params[2]; ++ unsigned char buf[64]; ++ ++ unsigned char seq[32] = { ++ 0xCA, 0xFB, 0x77, 0x71, 0x20, 0x16, 0xDA, 0x09, ++ 0x5F, 0x57, 0x09, 0x12, 0x04, 0x83, 0x76, 0x77, ++ 0x3C, 0x73, 0x9C, 0xBE, 0x7A, 0xE0, 0x52, 0xE2, ++ 0x90, 0x0D, 0xFF, 0x9A, 0xEF, 0x4C, 0x2C, 0x81 ++ }; ++ ++ DBG(8, "%s\n", __func__); ++ ++ status = esci_get_scanning_parameter(handle, buf); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ for (i = 0; i < 32; i++) { ++ buf[i] = seq[i] ^ buf[i]; ++ } ++ ++ params[0] = ESC; ++ params[1] = '#'; ++ ++ status = e2_cmd_simple(s, params, 2); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ status = e2_cmd_simple(s, buf, 32); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ return SANE_STATUS_GOOD; ++} ++ + SANE_Status + esci_request_command_parameter(SANE_Handle handle, unsigned char *buf) + { +@@ -804,7 +1024,7 @@ + break; + default: + DBG(1, "%s: unknown reply length (%lu)\n", __func__, +- (u_long) buf_len); ++ (unsigned long) buf_len); + break; + } + +diff -urNad sane-backends-1.0.20~/backend/epson2-commands.h sane-backends-1.0.20/backend/epson2-commands.h +--- sane-backends-1.0.20~/backend/epson2-commands.h 2010-01-01 13:07:55.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2-commands.h 2010-01-01 13:08:05.195454801 +0100 +@@ -39,7 +39,7 @@ + SANE_Status esci_set_resolution(Epson_Scanner * s, int x, int y); + SANE_Status esci_set_scan_area(Epson_Scanner * s, int x, int y, int width, + int height); +-SANE_Status esci_set_color_correction_coefficients(Epson_Scanner * s); ++SANE_Status esci_set_color_correction_coefficients(Epson_Scanner * s, SANE_Word *table); + SANE_Status esci_set_gamma_table(Epson_Scanner * s); + + SANE_Status esci_request_status(SANE_Handle handle, unsigned char *scanner_status); +@@ -59,3 +59,4 @@ + SANE_Status esci_eject(Epson_Scanner * s); + SANE_Status esci_request_extended_status(SANE_Handle handle, unsigned char **data, + size_t * data_len); ++SANE_Status esci_enable_infrared(SANE_Handle handle); +diff -urNad sane-backends-1.0.20~/backend/epson2-io.c sane-backends-1.0.20/backend/epson2-io.c +--- sane-backends-1.0.20~/backend/epson2-io.c 2010-01-01 13:07:55.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2-io.c 2010-01-01 13:08:05.196454878 +0100 +@@ -17,26 +17,24 @@ + + #define DEBUG_DECLARE_ONLY + +-#include "../include/sane/config.h" ++#include "sane/config.h" + +-#include +-#include + #include + +-#include +- + #include "epson2.h" + #include "epson2-io.h" + +-#include +-#include +-#include +-#include ++#include "sane/sanei_scsi.h" ++#include "sane/sanei_usb.h" ++#include "sane/sanei_pio.h" ++#include "sane/sanei_tcp.h" + + #include "epson2_scsi.h" + #include "epson_usb.h" + #include "epson2_net.h" + ++#include "byteorder.h" ++ + /* flaming hack to get USB scanners + * working without timeouts under linux + * (cribbed from fujitsu.c) +diff -urNad sane-backends-1.0.20~/backend/epson2-ops.c sane-backends-1.0.20/backend/epson2-ops.c +--- sane-backends-1.0.20~/backend/epson2-ops.c 1970-01-01 01:00:00.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2-ops.c 2010-01-01 13:08:05.197454941 +0100 +@@ -0,0 +1,2136 @@ ++/* ++ * epson2.c - SANE library for Epson scanners. ++ * ++ * Based on Kazuhiro Sasayama previous ++ * Work on epson.[ch] file from the SANE package. ++ * Please see those files for additional copyrights. ++ * ++ * Copyright (C) 2006-09 Tower Technologies ++ * Author: Alessandro Zummo ++ * ++ * This file is part of the SANE package. ++ * ++ * 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, version 2. ++ */ ++ ++#define DEBUG_DECLARE_ONLY ++ ++#include "sane/config.h" ++ ++#include /* sleep */ ++ ++#include ++ ++ ++#include "byteorder.h" ++ ++#include "epson2.h" ++#include "epson2-ops.h" ++ ++#include "epson2-io.h" ++#include "epson2-commands.h" ++ ++#ifndef MM_PER_INCH ++# define MM_PER_INCH 25.4 ++#endif ++ ++/* ++ * request identity ++ * | request identity2 ++ * | | request status ++ * | | | request condition ++ * | | | | set color mode ++ * | | | | | start scanning ++ * | | | | | | set data format ++ * | | | | | | | set resolution ++ * | | | | | | | | set zoom ++ * | | | | | | | | | set scan area ++ * | | | | | | | | | | set brightness ++ * | | | | | | | | | | | set gamma ++ * | | | | | | | | | | | | set halftoning ++ * | | | | | | | | | | | | | set color correction ++ * | | | | | | | | | | | | | | initialize scanner ++ * | | | | | | | | | | | | | | | set speed ++ * | | | | | | | | | | | | | | | | set lcount ++ * | | | | | | | | | | | | | | | | | mirror image ++ * | | | | | | | | | | | | | | | | | | set gamma table ++ * | | | | | | | | | | | | | | | | | | | set outline emphasis ++ * | | | | | | | | | | | | | | | | | | | | set dither ++ * | | | | | | | | | | | | | | | | | | | | | set color correction coefficients ++ * | | | | | | | | | | | | | | | | | | | | | | request extension status ++ * | | | | | | | | | | | | | | | | | | | | | | | control an extension ++ * | | | | | | | | | | | | | | | | | | | | | | | | forward feed / eject ++ * | | | | | | | | | | | | | | | | | | | | | | | | | feed ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | request push button status ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | control auto area segmentation ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | set film type ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set exposure time ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set bay ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set threshold ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set focus position ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request focus position ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request extended identity ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request scanner status ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ++ * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ++ */ ++ ++static struct EpsonCmd epson_cmd[] = { ++ {"A1",'I', 0 ,'F','S', 0 ,'G', 0 ,'R', 0 ,'A', 0 ,{ 0, 0, 0}, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, ++ {"A2",'I', 0 ,'F','S', 0 ,'G','D','R','H','A','L',{-3, 3, 0},'Z','B', 0 ,'@', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, ++ {"B1",'I', 0 ,'F','S','C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0}, 0 ,'B', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, ++ {"B2",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B', 0 ,'@', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, ++ {"B3",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@', 0 , 0 , 0 , 0 , 0 , 0 ,'m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, ++ {"B4",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d', 0 ,'z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, ++ {"B5",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, ++ {"B6",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, ++ {"B7",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-4, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e','\f', 0 ,'!','s','N', 0 , 0 ,'t', 0 , 0 ,'I','F'}, ++ {"B8",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-4, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e','\f', 0x19,'!','s','N', 0 , 0 ,'t','p','q','I','F'}, ++/* XXX 'f' probably not supported on F5 */ ++ {"F5",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z', 0 ,'M','@','g','d','K','z','Q', 0 ,'m','f','e','\f', 0 , 0 , 0 ,'N','T','P', 0 , 0 , 0 , 0 , 0 }, ++ {"D1",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'m','f', 0 , 0 , 0 ,'!', 0 , 0 , 0 , 0 ,'t', 0 , 0 , 0 , 0 }, ++ {"D2",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'m','f','e', 0 , 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 }, ++ {"D7",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 , 0 ,'f','e','\f', 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 }, ++ {"D8",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'0','f','e','\f', 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 }, ++}; ++ ++ ++ ++extern struct mode_param mode_params[]; ++ ++/* Define the different scan sources */ ++ ++#define FBF_STR SANE_I18N("Flatbed") ++#define TPU_STR SANE_I18N("Transparency Unit") ++#define ADF_STR SANE_I18N("Automatic Document Feeder") ++ ++/* ++ * source list need one dummy entry (save device settings is crashing). ++ * NOTE: no const - this list gets created while exploring the capabilities ++ * of the scanner. ++ */ ++ ++extern SANE_String_Const source_list[]; ++ ++static int film_params[] = { 0, 1, 2, 3 }; ++ ++extern const int halftone_params[]; ++ ++static const int dropout_params[] = { ++ 0x00, /* none */ ++ 0x10, /* red */ ++ 0x20, /* green */ ++ 0x30 /* blue */ ++}; ++ ++/* ++ * Color correction: ++ * One array for the actual parameters that get sent to the scanner (color_params[]), ++ * one array for the strings that get displayed in the user interface (color_list[]) ++ * and one array to mark the user defined color correction (color_userdefined[]). ++ */ ++static const int color_params[] = { ++ 0x00, /* None */ ++ 0x01, /* Auto */ ++ 0x01, /* User defined */ ++ 0x10, ++ 0x20, ++ 0x40, ++ 0x80 ++}; ++ ++void ++e2_dev_init(Epson_Device *dev, const char *devname, int conntype) ++{ ++ dev->name = NULL; ++ dev->model = NULL; ++ dev->connection = conntype; ++ ++ dev->model_id = 0; ++ ++ dev->sane.name = devname; ++ dev->sane.model = NULL; ++ ++ dev->sane.type = "flatbed scanner"; ++ dev->sane.vendor = "Epson"; ++ ++ dev->optical_res = 0; /* just to have it initialized */ ++ dev->color_shuffle = SANE_FALSE; ++ dev->extension = SANE_FALSE; ++ dev->use_extension = SANE_FALSE; ++ ++ dev->need_color_reorder = SANE_FALSE; ++ dev->need_double_vertical = SANE_FALSE; ++ ++ dev->cct_profile = &epson_cct_profiles[0]; /* default profile */ ++ ++ dev->cmd = &epson_cmd[EPSON_LEVEL_DEFAULT]; ++ ++ /* Change default level when using a network connection */ ++ if (dev->connection == SANE_EPSON_NET) ++ dev->cmd = &epson_cmd[EPSON_LEVEL_B7]; ++ ++ dev->last_res = 0; ++ dev->last_res_preview = 0; /* set resolution to safe values */ ++ ++ dev->res_list_size = 0; ++ dev->res_list = NULL; ++} ++ ++SANE_Status ++e2_dev_post_init(struct Epson_Device *dev) ++{ ++ int i; ++ ++ /* find cct model id */ ++ for (i = 0; epson_cct_models[i].name != NULL; i++) { ++ if (strcmp(epson_cct_models[i].name, dev->model) == 0) { ++ dev->model_id = epson_cct_models[i].id; ++ break; ++ } ++ } ++ ++ /* find cct profile */ ++ for (i = 0; epson_cct_profiles[i].model != 0xFF; i++) { ++ if (epson_cct_profiles[i].model == dev->model_id) { ++ dev->cct_profile = &epson_cct_profiles[i]; ++ break; ++ } ++ } ++ ++ DBG(1, "CCT model id is 0x%02x, profile offset %d\n", dev->model_id, i); ++ ++ /* If we have been unable to obtain supported resolutions ++ * due to the fact we are on the network transport, ++ * add some convenient ones ++ */ ++ ++ if (dev->res_list_size == 0 && dev->connection == SANE_EPSON_NET) { ++ ++ int val = (dev->dpi_range.min < 150) ? 150 : dev->dpi_range.min; ++ ++ DBG(1, "networked scanner, faking resolution list (%d-%d)\n", ++ dev->dpi_range.min, dev->dpi_range.max); ++ ++ if (dev->dpi_range.min <= 50) ++ e2_add_resolution(dev, 50); ++ ++ if (dev->dpi_range.min <= 75) ++ e2_add_resolution(dev, 75); ++ ++ if (dev->dpi_range.min <= 100) ++ e2_add_resolution(dev, 100); ++ ++ while (val <= dev->dpi_range.max) { ++ e2_add_resolution(dev, val); ++ val *= 2; ++ } ++ } ++ ++ /* ++ * Copy the resolution list to the resolution_list array so that the frontend can ++ * display the correct values ++ */ ++ ++ dev->resolution_list = ++ malloc((dev->res_list_size + 1) * sizeof(SANE_Word)); ++ ++ if (dev->resolution_list == NULL) { ++ return SANE_STATUS_NO_MEM; ++ } ++ ++ *(dev->resolution_list) = dev->res_list_size; ++ memcpy(&(dev->resolution_list[1]), dev->res_list, ++ dev->res_list_size * sizeof(SANE_Word)); ++ ++ /* establish defaults */ ++ dev->need_reset_on_source_change = SANE_FALSE; ++ ++ if (e2_dev_model(dev, "ES-9000H") || e2_dev_model(dev, "GT-30000")) { ++ dev->cmd->set_focus_position = 0; ++ dev->cmd->feed = 0x19; ++ } ++ ++ if (e2_dev_model(dev, "GT-8200") || e2_dev_model(dev, "Perfection1650") ++ || e2_dev_model(dev, "Perfection1640") || e2_dev_model(dev, "GT-8700")) { ++ dev->cmd->feed = 0; ++ dev->cmd->set_focus_position = 0; ++ dev->need_reset_on_source_change = SANE_TRUE; ++ } ++ ++ return SANE_STATUS_GOOD; ++} ++ ++ ++SANE_Bool ++e2_dev_model(Epson_Device *dev, const char *model) ++{ ++ if (dev->model == NULL) ++ return SANE_FALSE; ++ ++ if (strncmp(dev->model, model, strlen(model)) == 0) ++ return SANE_TRUE; ++ ++ return SANE_FALSE; ++} ++ ++void ++e2_set_cmd_level(SANE_Handle handle, unsigned char *level) ++{ ++ Epson_Scanner *s = (Epson_Scanner *) handle; ++ Epson_Device *dev = s->hw; ++ ++ int n; ++ ++ DBG(1, "%s: %c%c\n", __func__, level[0], level[1]); ++ ++ /* set command type and level */ ++ for (n = 0; n < NELEMS(epson_cmd); n++) { ++ char type_level[3]; ++ sprintf(type_level, "%c%c", level[0], level[1]); ++ if (!strncmp(type_level, epson_cmd[n].level, 2)) ++ break; ++ } ++ ++ if (n < NELEMS(epson_cmd)) { ++ dev->cmd = &epson_cmd[n]; ++ } else { ++ dev->cmd = &epson_cmd[EPSON_LEVEL_DEFAULT]; ++ DBG(1, " unknown type %c or level %c, using %s\n", ++ level[0], level[1], dev->cmd->level); ++ } ++ ++ s->hw->level = dev->cmd->level[1] - '0'; ++} ++ ++SANE_Status ++e2_set_model(Epson_Scanner * s, unsigned char *model, size_t len) ++{ ++ unsigned char *buf; ++ unsigned char *p; ++ struct Epson_Device *dev = s->hw; ++ ++ buf = malloc(len + 1); ++ if (buf == NULL) ++ return SANE_STATUS_NO_MEM; ++ ++ memcpy(buf, model, len); ++ buf[len] = '\0'; ++ ++ p = &buf[len - 1]; ++ ++ while (*p == ' ') { ++ *p = '\0'; ++ p--; ++ } ++ ++ if (dev->model) ++ free(dev->model); ++ ++ dev->model = strndup((const char *) buf, len); ++ dev->sane.model = dev->model; ++ ++ DBG(10, "%s: model is '%s'\n", __func__, dev->model); ++ ++ free(buf); ++ ++ return SANE_STATUS_GOOD; ++} ++ ++SANE_Status ++e2_add_resolution(Epson_Device *dev, int r) ++{ ++ dev->res_list_size++; ++ dev->res_list = (SANE_Int *) realloc(dev->res_list, ++ dev->res_list_size * ++ sizeof(SANE_Word)); ++ ++ DBG(10, "%s: add (dpi): %d\n", __func__, r); ++ ++ if (dev->res_list == NULL) ++ return SANE_STATUS_NO_MEM; ++ ++ dev->res_list[dev->res_list_size - 1] = (SANE_Int) r; ++ ++ return SANE_STATUS_GOOD; ++} ++ ++void ++e2_set_fbf_area(Epson_Scanner * s, int x, int y, int unit) ++{ ++ struct Epson_Device *dev = s->hw; ++ ++ if (x == 0 || y == 0) ++ return; ++ ++ dev->fbf_x_range.min = 0; ++ dev->fbf_x_range.max = SANE_FIX(x * MM_PER_INCH / unit); ++ dev->fbf_x_range.quant = 0; ++ ++ dev->fbf_y_range.min = 0; ++ dev->fbf_y_range.max = SANE_FIX(y * MM_PER_INCH / unit); ++ dev->fbf_y_range.quant = 0; ++ ++ DBG(5, "%s: %f,%f %f,%f %d [mm]\n", ++ __func__, ++ SANE_UNFIX(dev->fbf_x_range.min), ++ SANE_UNFIX(dev->fbf_y_range.min), ++ SANE_UNFIX(dev->fbf_x_range.max), ++ SANE_UNFIX(dev->fbf_y_range.max), unit); ++} ++ ++void ++e2_set_adf_area(struct Epson_Scanner *s, int x, int y, int unit) ++{ ++ struct Epson_Device *dev = s->hw; ++ ++ dev->adf_x_range.min = 0; ++ dev->adf_x_range.max = SANE_FIX(x * MM_PER_INCH / unit); ++ dev->adf_x_range.quant = 0; ++ ++ dev->adf_y_range.min = 0; ++ dev->adf_y_range.max = SANE_FIX(y * MM_PER_INCH / unit); ++ dev->adf_y_range.quant = 0; ++ ++ DBG(5, "%s: %f,%f %f,%f %d [mm]\n", ++ __func__, ++ SANE_UNFIX(dev->adf_x_range.min), ++ SANE_UNFIX(dev->adf_y_range.min), ++ SANE_UNFIX(dev->adf_x_range.max), ++ SANE_UNFIX(dev->adf_y_range.max), unit); ++} ++ ++void ++e2_set_tpu_area(struct Epson_Scanner *s, int x, int y, int unit) ++{ ++ struct Epson_Device *dev = s->hw; ++ ++ dev->tpu_x_range.min = 0; ++ dev->tpu_x_range.max = SANE_FIX(x * MM_PER_INCH / unit); ++ dev->tpu_x_range.quant = 0; ++ ++ dev->tpu_y_range.min = 0; ++ dev->tpu_y_range.max = SANE_FIX(y * MM_PER_INCH / unit); ++ dev->tpu_y_range.quant = 0; ++ ++ DBG(5, "%s: %f,%f %f,%f %d [mm]\n", ++ __func__, ++ SANE_UNFIX(dev->tpu_x_range.min), ++ SANE_UNFIX(dev->tpu_y_range.min), ++ SANE_UNFIX(dev->tpu_x_range.max), ++ SANE_UNFIX(dev->tpu_y_range.max), unit); ++} ++ ++void ++e2_add_depth(Epson_Device * dev, SANE_Word depth) ++{ ++ if (depth > dev->maxDepth) ++ dev->maxDepth = depth; ++ ++ dev->depth_list[0]++; ++ dev->depth_list[dev->depth_list[0]] = depth; ++} ++ ++/* Helper function to correct the dpi ++ * gotten from scanners with known buggy firmware. ++ * - Epson Perfection 4990 Photo / GT-X800 ++ * - Epson Perfection 4870 Photo / GT-X700 (untested) ++ */ ++static void ++e2_fix_up_dpi(Epson_Scanner * s) ++{ ++ SANE_Status status; ++ /* ++ * EPSON Programming guide for ++ * EPSON Color Image Scanner Perfection 4870/4990 ++ */ ++ ++ if (e2_model(s, "GT-X800") || e2_model(s, "GT-X700")) { ++ status = e2_add_resolution(s->hw, 4800); ++ status = e2_add_resolution(s->hw, 6400); ++ status = e2_add_resolution(s->hw, 9600); ++ status = e2_add_resolution(s->hw, 12800); ++ } ++} ++ ++/* A little helper function to correct the extended status reply ++ * gotten from scanners with known buggy firmware. ++ */ ++static void ++fix_up_extended_status_reply(Epson_Scanner * s, unsigned char *buf) ++{ ++ if (e2_model(s, "ES-9000H") || e2_model(s, "GT-30000")) { ++ DBG(1, "fixing up buggy ADF max scan dimensions.\n"); ++ buf[2] = 0xB0; ++ buf[3] = 0x6D; ++ buf[4] = 0x60; ++ buf[5] = 0x9F; ++ } ++} ++ ++ ++SANE_Status ++e2_discover_capabilities(Epson_Scanner *s) ++{ ++ SANE_Status status; ++ ++ unsigned char scanner_status; ++ Epson_Device *dev = s->hw; ++ ++ SANE_String_Const *source_list_add = source_list; ++ ++ DBG(5, "%s\n", __func__); ++ ++ /* always add flatbed */ ++ *source_list_add++ = FBF_STR; ++ ++ /* ESC I, request identity ++ * this must be the first command on the FilmScan 200 ++ */ ++ if (dev->connection != SANE_EPSON_NET) { ++ unsigned int n, k, x = 0, y = 0; ++ unsigned char *buf, *area; ++ size_t len; ++ ++ status = esci_request_identity(s, &buf, &len); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ e2_set_cmd_level(s, &buf[0]); ++ ++ /* Setting available resolutions and xy ranges for sane frontend. */ ++ /* cycle thru the resolutions, saving them in a list */ ++ for (n = 2, k = 0; n < len; n += k) { ++ ++ area = buf + n; ++ ++ switch (*area) { ++ case 'R': ++ { ++ int val = area[2] << 8 | area[1]; ++ ++ status = e2_add_resolution(s->hw, val); ++ k = 3; ++ continue; ++ } ++ case 'A': ++ { ++ x = area[2] << 8 | area[1]; ++ y = area[4] << 8 | area[3]; ++ ++ DBG(1, "maximum scan area: %dx%d\n", x, y); ++ k = 5; ++ continue; ++ } ++ default: ++ break; ++ } ++ } ++ ++ /* min and max dpi */ ++ dev->dpi_range.min = dev->res_list[0]; ++ dev->dpi_range.max = dev->res_list[dev->res_list_size - 1]; ++ dev->dpi_range.quant = 0; ++ ++ e2_set_fbf_area(s, x, y, dev->dpi_range.max); ++ ++ free(buf); ++ } ++ ++ /* ESC F, request status */ ++ status = esci_request_status(s, &scanner_status); ++ if (status != SANE_STATUS_GOOD) ++ return status;; ++ ++ /* set capabilities */ ++ if (scanner_status & STATUS_OPTION) ++ dev->extension = SANE_TRUE; ++ ++ if (scanner_status & STATUS_EXT_COMMANDS) ++ dev->extended_commands = 1; ++ ++ /* ++ * Extended status flag request (ESC f). ++ * this also requests the scanner device name from the the scanner. ++ * It seems unsupported on the network transport (CX11NF/LP-A500). ++ * so avoid it if the device support request_extended_identity. ++ */ ++ ++ if (dev->connection != SANE_EPSON_NET && dev->cmd->request_extended_status ++ && !dev->cmd->request_extended_identity) { ++ ++ unsigned char *es; ++ size_t es_len; ++ ++ DBG(1, "detection with request_extended_status\n"); ++ ++ status = esci_request_extended_status(s, &es, &es_len); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ /* ++ * Get the device name and copy it to dev->sane.model. ++ * The device name starts at es[0x1A] and is up to 16 bytes long ++ * We are overwriting whatever was set previously! ++ */ ++ if (es_len == CMD_SIZE_EXT_STATUS) /* 42 */ ++ e2_set_model(s, es + 0x1A, 16); ++ ++ if (es[0] & EXT_STATUS_LID) ++ DBG(1, "LID detected\n"); ++ ++ if (es[0] & EXT_STATUS_PB) ++ DBG(1, "push button detected\n"); ++ else ++ dev->cmd->request_push_button_status = 0; ++ ++ /* Flatbed */ ++ e2_set_fbf_area(s, es[13] << 8 | es[12], es[15] << 8 | es[14], ++ dev->dpi_range.max); ++ ++ /* ADF */ ++ if (dev->extension && (es[1] & EXT_STATUS_IST)) { ++ DBG(1, "ADF detected\n"); ++ ++ fix_up_extended_status_reply(s, es); ++ ++ dev->duplex = (es[0] & EXT_STATUS_ADFS) != 0; ++ if (dev->duplex) ++ DBG(1, "ADF supports duplex\n"); ++ ++ if (es[1] & EXT_STATUS_EN) { ++ DBG(1, "ADF is enabled\n"); ++ dev->x_range = &dev->adf_x_range; ++ dev->y_range = &dev->adf_y_range; ++ } ++ ++ e2_set_adf_area(s, es[3] << 8 | es[2], ++ es[5] << 8 | es[4], ++ dev->dpi_range.max); ++ *source_list_add++ = ADF_STR; ++ ++ dev->ADF = SANE_TRUE; ++ } ++ ++ /* TPU */ ++ if (dev->extension && (es[6] & EXT_STATUS_IST)) { ++ DBG(1, "TPU detected\n"); ++ ++ if (es[6] & EXT_STATUS_EN) { ++ DBG(1, "TPU is enabled\n"); ++ dev->x_range = &dev->tpu_x_range; ++ dev->y_range = &dev->tpu_y_range; ++ } ++ ++ e2_set_tpu_area(s, ++ (es[8] << 8 | es[7]), ++ (es[10] << 8 | es[9]), ++ dev->dpi_range.max); ++ ++ *source_list_add++ = TPU_STR; ++ dev->TPU = SANE_TRUE; ++ } ++ ++ free(es); ++ ++ *source_list_add = NULL; /* add end marker to source list */ ++ } ++ /* FS I, request extended identity (B7/B8) */ ++ else if (dev->extended_commands && dev->cmd->request_extended_identity) { ++ unsigned char buf[80]; ++ ++ DBG(1, "detection with request_extended_identity\n"); ++ ++ status = esci_request_extended_identity(s, buf); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ e2_set_cmd_level(s, &buf[0]); ++ ++ dev->maxDepth = buf[67]; ++ ++ /* set model name. it will probably be ++ * different than the one reported by request_identity ++ * for the same unit (i.e. LP-A500 vs CX11) . ++ */ ++ e2_set_model(s, &buf[46], 16); ++ ++ dev->optical_res = le32atoh(&buf[4]); ++ ++ dev->dpi_range.min = le32atoh(&buf[8]); ++ dev->dpi_range.max = le32atoh(&buf[12]); ++ ++ /* Flatbed */ ++ e2_set_fbf_area(s, le32atoh(&buf[20]), ++ le32atoh(&buf[24]), dev->optical_res); ++ ++ /* ADF */ ++ if (le32atoh(&buf[28]) > 0) { ++ e2_set_adf_area(s, le32atoh(&buf[28]), ++ le32atoh(&buf[32]), dev->optical_res); ++ ++ if (!dev->ADF) { ++ *source_list_add++ = ADF_STR; ++ dev->ADF = SANE_TRUE; ++ } ++ } ++ ++ /* TPU */ ++ ++ if (e2_model(s, "GT-X800")) { ++ if (le32atoh(&buf[68]) > 0 && !dev->TPU) { ++ e2_set_tpu_area(s, ++ le32atoh(&buf[68]), ++ le32atoh(&buf[72]), ++ dev->optical_res); ++ ++ *source_list_add++ = TPU_STR; ++ dev->TPU = SANE_TRUE; ++ dev->TPU2 = SANE_TRUE; ++ } ++ } ++ ++ if (le32atoh(&buf[36]) > 0 && !dev->TPU) { ++ e2_set_tpu_area(s, ++ le32atoh(&buf[36]), ++ le32atoh(&buf[40]), dev->optical_res); ++ ++ *source_list_add++ = TPU_STR; ++ dev->TPU = SANE_TRUE; ++ } ++ ++ /* fix problem with broken report of dpi */ ++ e2_fix_up_dpi(s); ++ ++ *source_list_add = NULL; /* add end marker to source list */ ++ ++ } else { ++ DBG(1, "no command available to detect capabilities\n"); ++ } ++ ++ /* ++ * request identity 2 (ESC i), if available will ++ * get the information from the scanner and store it in dev ++ */ ++ ++ if (dev->cmd->request_identity2 && dev->connection != SANE_EPSON_NET) { ++ unsigned char *buf; ++ status = esci_request_identity2(s, &buf); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ /* the first two bytes of the buffer contain the optical resolution */ ++ dev->optical_res = buf[1] << 8 | buf[0]; ++ ++ /* ++ * the 4th and 5th byte contain the line distance. Both values have to ++ * be identical, otherwise this software can not handle this scanner. ++ */ ++ if (buf[4] != buf[5]) { ++ status = SANE_STATUS_INVAL; ++ return status; ++ } ++ ++ dev->max_line_distance = buf[4]; ++ } ++ ++ /* ++ * Check for the max. supported color depth and assign ++ * the values to the bitDepthList. ++ */ ++ dev->depth_list = malloc(sizeof(SANE_Word) * 4); ++ if (dev->depth_list == NULL) { ++ DBG(1, "out of memory (line %d)\n", __LINE__); ++ return SANE_STATUS_NO_MEM; ++ } ++ ++ dev->depth_list[0] = 0; ++ ++ /* maximum depth discovery */ ++ DBG(3, "discovering max depth, NAKs are expected\n"); ++ ++ if (dev->maxDepth >= 16 || dev->maxDepth == 0) { ++ if (esci_set_data_format(s, 16) == SANE_STATUS_GOOD) ++ e2_add_depth(dev, 16); ++ } ++ ++ if (dev->maxDepth >= 14 || dev->maxDepth == 0) { ++ if (esci_set_data_format(s, 14) == SANE_STATUS_GOOD) ++ e2_add_depth(dev, 14); ++ } ++ ++ if (dev->maxDepth >= 12 || dev->maxDepth == 0) { ++ if (esci_set_data_format(s, 12) == SANE_STATUS_GOOD) ++ e2_add_depth(dev, 12); ++ } ++ ++ /* add default depth */ ++ e2_add_depth(dev, 8); ++ ++ DBG(1, "maximum supported color depth: %d\n", dev->maxDepth); ++ ++ /* ++ * Check for "request focus position" command. If this command is ++ * supported, then the scanner does also support the "set focus ++ * position" command. ++ * XXX ??? ++ */ ++ ++ if (esci_request_focus_position(s, &s->currentFocusPosition) == ++ SANE_STATUS_GOOD) { ++ DBG(1, "setting focus is supported\n"); ++ dev->focusSupport = SANE_TRUE; ++ s->opt[OPT_FOCUS].cap &= ~SANE_CAP_INACTIVE; ++ ++ /* reflect the current focus position in the GUI */ ++ if (s->currentFocusPosition < 0x4C) { ++ /* focus on glass */ ++ s->val[OPT_FOCUS].w = 0; ++ } else { ++ /* focus 2.5mm above glass */ ++ s->val[OPT_FOCUS].w = 1; ++ } ++ ++ } else { ++ DBG(1, "setting focus is not supported\n"); ++ dev->focusSupport = SANE_FALSE; ++ s->opt[OPT_FOCUS].cap |= SANE_CAP_INACTIVE; ++ s->val[OPT_FOCUS].w = 0; /* on glass - just in case */ ++ } ++ ++ /* Set defaults for no extension. */ ++ dev->x_range = &dev->fbf_x_range; ++ dev->y_range = &dev->fbf_y_range; ++ ++ /* ++ * Correct for a firmware bug in some Perfection 1650 scanners: ++ * Firmware version 1.08 reports only half the vertical scan area, we have ++ * to double the number. To find out if we have to do this, we just compare ++ * is the vertical range is smaller than the horizontal range. ++ */ ++ ++ if ((dev->x_range->max - dev->x_range->min) > ++ (dev->y_range->max - dev->y_range->min)) { ++ DBG(1, "found buggy scan area, doubling it.\n"); ++ dev->y_range->max += (dev->y_range->max - dev->y_range->min); ++ dev->need_double_vertical = SANE_TRUE; ++ dev->need_color_reorder = SANE_TRUE; ++ } ++ ++ /* FS F, request scanner status */ ++ if (dev->extended_commands) { ++ unsigned char buf[16]; ++ ++ status = esci_request_scanner_status(s, buf); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ return status; ++} ++ ++ ++SANE_Status ++e2_set_extended_scanning_parameters(Epson_Scanner * s) ++{ ++ unsigned char buf[64]; ++ ++ const struct mode_param *mparam; ++ ++ DBG(1, "%s\n", __func__); ++ ++ mparam = &mode_params[s->val[OPT_MODE].w]; ++ ++ memset(buf, 0x00, sizeof(buf)); ++ ++ /* ESC R, resolution */ ++ htole32a(&buf[0], s->val[OPT_RESOLUTION].w); ++ htole32a(&buf[4], s->val[OPT_RESOLUTION].w); ++ ++ /* ESC A, scanning area */ ++ htole32a(&buf[8], s->left); ++ htole32a(&buf[12], s->top); ++ htole32a(&buf[16], s->params.pixels_per_line); ++ htole32a(&buf[20], s->params.lines); ++ ++ /* ++ * The byte sequence mode was introduced in B5, ++ *for B[34] we need line sequence mode ++ */ ++ ++ /* ESC C, set color */ ++ if ((s->hw->cmd->level[0] == 'D' ++ || (s->hw->cmd->level[0] == 'B' && s->hw->level >= 5)) ++ && mparam->flags == 0x02) { ++ buf[24] = 0x13; ++ } else { ++ buf[24] = mparam->flags | (mparam->dropout_mask ++ & dropout_params[s-> ++ val[OPT_DROPOUT]. ++ w]); ++ } ++ ++ /* ESC D, set data format */ ++ mparam = &mode_params[s->val[OPT_MODE].w]; ++ buf[25] = mparam->depth; ++ ++ /* ESC e, control option */ ++ if (s->hw->extension) { ++ ++ char extensionCtrl; ++ extensionCtrl = (s->hw->use_extension ? 1 : 0); ++ if (s->hw->use_extension && (s->val[OPT_ADF_MODE].w == 1)) ++ extensionCtrl = 2; ++ ++ /* Test for TPU2 ++ * Epson Perfection 4990 Command Specifications ++ * JZIS-0075 Rev. A, page 31 ++ */ ++ if (s->hw->use_extension && s->hw->TPU2) ++ extensionCtrl = 5; ++ ++ /* ESC e */ ++ buf[26] = extensionCtrl; ++ ++ /* XXX focus */ ++ } ++ ++ /* ESC g, scanning mode (normal or high speed) */ ++ if (s->val[OPT_PREVIEW].w) ++ buf[27] = 1; /* High speed */ ++ else ++ buf[27] = 0; ++ ++ /* ESC d, block line number */ ++ buf[28] = s->lcount; ++ ++ /* ESC Z, set gamma correction */ ++ buf[29] = 0x01; /* default */ ++ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_GAMMA_CORRECTION].cap)) { ++ char val; ++ if (s->hw->cmd->level[0] == 'D') { ++ /* The D1 level has only the two user defined gamma ++ * settings. ++ */ ++ val = gamma_params[s->val[OPT_GAMMA_CORRECTION].w]; ++ } else { ++ val = gamma_params[s->val[OPT_GAMMA_CORRECTION].w]; ++ ++ /* ++ * If "Default" is selected then determine the actual value ++ * to send to the scanner: If bilevel mode, just send the ++ * value from the table (0x01), for grayscale or color mode ++ * add one and send 0x02. ++ */ ++ ++ if (s->val[OPT_GAMMA_CORRECTION].w == 0) { ++ val += mparam->depth == 1 ? 0 : 1; ++ } ++ } ++ ++ buf[29] = val; ++ } ++ ++ /* ESC L, set brightness */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_BRIGHTNESS].cap)) ++ buf[30] = s->val[OPT_BRIGHTNESS].w; ++ ++ /* ESC B, set halftoning mode / halftone processing */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_HALFTONE].cap)) ++ buf[32] = halftone_params[s->val[OPT_HALFTONE].w]; ++ ++ /* ESC s, auto area segmentation */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_AAS].cap)) ++ buf[34] = s->val[OPT_AAS].w; ++ ++ /* ESC Q, set sharpness / sharpness control */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_SHARPNESS].cap)) ++ buf[35] = s->val[OPT_SHARPNESS].w; ++ ++ /* ESC K, set data order / mirroring */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_MIRROR].cap)) ++ buf[36] = s->val[OPT_MIRROR].w; ++ ++ /* ESC N, film type */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_FILM_TYPE].cap)) ++ buf[37] = film_params[s->val[OPT_FILM_TYPE].w]; ++ ++ /* ESC M, color correction */ ++ buf[31] = color_params[s->val[OPT_COLOR_CORRECTION].w]; ++ ++ /* ESC t, threshold */ ++ buf[33] = s->val[OPT_THRESHOLD].w; ++ ++ return esci_set_scanning_parameter(s, buf); ++} ++ ++SANE_Status ++e2_set_scanning_parameters(Epson_Scanner * s) ++{ ++ SANE_Status status; ++ struct mode_param *mparam = &mode_params[s->val[OPT_MODE].w]; ++ unsigned char color_mode; ++ ++ DBG(1, "%s\n", __func__); ++ ++ /* ++ * There is some undocumented special behavior with the TPU enable/disable. ++ * TPU power ESC e status ++ * on 0 NAK ++ * on 1 ACK ++ * off 0 ACK ++ * off 1 NAK ++ * ++ * It makes no sense to scan with TPU powered on and source flatbed, because ++ * light will come from both sides. ++ */ ++ ++ if (s->hw->extension) { ++ ++ int extensionCtrl; ++ extensionCtrl = (s->hw->use_extension ? 1 : 0); ++ if (s->hw->use_extension && (s->val[OPT_ADF_MODE].w == 1)) ++ extensionCtrl = 2; ++ ++ status = esci_control_extension(s, extensionCtrl); ++ if (status != SANE_STATUS_GOOD) { ++ DBG(1, "you may have to power %s your TPU\n", ++ s->hw->use_extension ? "on" : "off"); ++ DBG(1, ++ "and you may also have to restart the SANE frontend.\n"); ++ return status; ++ } ++ ++ /* XXX use request_extended_status and analyze ++ * buffer to set the scan area for ++ * ES-9000H and GT-30000 ++ */ ++ ++ /* ++ * set the focus position according to the extension used: ++ * if the TPU is selected, then focus 2.5mm above the glass, ++ * otherwise focus on the glass. Scanners that don't support ++ * this feature, will just ignore these calls. ++ */ ++ ++ if (s->hw->focusSupport == SANE_TRUE) { ++ if (s->val[OPT_FOCUS].w == 0) { ++ DBG(1, "setting focus to glass surface\n"); ++ esci_set_focus_position(s, 0x40); ++ } else { ++ DBG(1, ++ "setting focus to 2.5mm above glass\n"); ++ esci_set_focus_position(s, 0x59); ++ } ++ } ++ } ++ ++ /* ESC C, Set color */ ++ color_mode = mparam->flags | (mparam->dropout_mask ++ & dropout_params[s->val[OPT_DROPOUT]. ++ w]); ++ ++ /* ++ * The byte sequence mode was introduced in B5, for B[34] we need line sequence mode ++ * XXX Check what to do for the FilmScan 200 ++ */ ++ if ((s->hw->cmd->level[0] == 'D' ++ || (s->hw->cmd->level[0] == 'B' && s->hw->level >= 5)) ++ && mparam->flags == 0x02) ++ color_mode = 0x13; ++ ++ status = esci_set_color_mode(s, color_mode); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ /* ESC D, set data format */ ++ DBG(1, "%s: setting data format to %d bits\n", __func__, ++ mparam->depth); ++ status = esci_set_data_format(s, mparam->depth); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ /* ESC B, set halftoning mode */ ++ if (s->hw->cmd->set_halftoning ++ && SANE_OPTION_IS_ACTIVE(s->opt[OPT_HALFTONE].cap)) { ++ status = esci_set_halftoning(s, ++ halftone_params[s-> ++ val ++ [OPT_HALFTONE]. ++ w]); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ /* ESC L, set brightness */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_BRIGHTNESS].cap)) { ++ status = esci_set_bright(s, s->val[OPT_BRIGHTNESS].w); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_AAS].cap)) { ++ status = esci_set_auto_area_segmentation(s, ++ s->val[OPT_AAS].w); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_FILM_TYPE].cap)) { ++ status = esci_set_film_type(s, ++ film_params[s->val[OPT_FILM_TYPE].w]); ++ ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ if (s->hw->cmd->set_gamma ++ && SANE_OPTION_IS_ACTIVE(s->opt[OPT_GAMMA_CORRECTION].cap)) { ++ int val; ++ if (s->hw->cmd->level[0] == 'D') { ++ /* ++ * The D1 level has only the two user defined gamma ++ * settings. ++ */ ++ val = gamma_params[s->val[OPT_GAMMA_CORRECTION].w]; ++ } else { ++ val = gamma_params[s->val[OPT_GAMMA_CORRECTION].w]; ++ ++ /* ++ * If "Default" is selected then determine the actual value ++ * to send to the scanner: If bilevel mode, just send the ++ * value from the table (0x01), for grayscale or color mode ++ * add one and send 0x02. ++ */ ++ ++/* if( s->val[ OPT_GAMMA_CORRECTION].w <= 1) { */ ++ if (s->val[OPT_GAMMA_CORRECTION].w == 0) { ++ val += mparam->depth == 1 ? 0 : 1; ++ } ++ } ++ ++ status = esci_set_gamma(s, val); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ if (s->hw->cmd->set_threshold != 0 ++ && SANE_OPTION_IS_ACTIVE(s->opt[OPT_THRESHOLD].cap)) { ++ status = esci_set_threshold(s, s->val[OPT_THRESHOLD].w); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ /* XXX ESC Z here */ ++ ++ /* ESC M, set color correction */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_COLOR_CORRECTION].cap)) { ++ status = esci_set_color_correction(s, ++ color_params[s-> ++ val ++ [OPT_COLOR_CORRECTION]. ++ w]); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ /* ESC Q, set sharpness */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_SHARPNESS].cap)) { ++ ++ status = esci_set_sharpness(s, s->val[OPT_SHARPNESS].w); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ /* ESC g, set scanning mode */ ++ if (s->val[OPT_PREVIEW].w) ++ status = esci_set_speed(s, 1); ++ else ++ status = esci_set_speed(s, 0); ++ ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ /* ESC K, set data order */ ++ if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_MIRROR].cap)) { ++ status = esci_mirror_image(s, s->val[OPT_MIRROR].w); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ } ++ ++ /* ESC R */ ++ status = esci_set_resolution(s, s->val[OPT_RESOLUTION].w, ++ s->val[OPT_RESOLUTION].w); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ /* ESC H, set zoom */ ++ /* not implemented */ ++ ++ /* ESC A, set scanning area */ ++ status = esci_set_scan_area(s, s->left, s->top, ++ s->params.pixels_per_line, ++ s->params.lines); ++ ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ /* ESC d, set block line number / set line counter */ ++ status = esci_set_lcount(s, s->lcount); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ return SANE_STATUS_GOOD; ++} ++ ++void ++e2_setup_block_mode(Epson_Scanner * s) ++{ ++ int maxreq; ++ ++ if (s->hw->connection == SANE_EPSON_SCSI) ++ maxreq = sanei_scsi_max_request_size; ++ else if (s->hw->connection == SANE_EPSON_USB) ++ maxreq = 128 * 1024; ++ else ++ maxreq = 32 * 1024; ++ ++ s->block = SANE_TRUE; ++ s->lcount = maxreq / s->params.bytes_per_line; ++ ++ DBG(1, "max req size: %d\n", maxreq); ++ ++ if (s->lcount < 3 && e2_model(s, "GT-X800")) { ++ s->lcount = 21; ++ DBG(17, ++ "%s: set lcount = %i bigger than sanei_scsi_max_request_size\n", ++ __func__, s->lcount); ++ } ++ ++ if (s->lcount >= 255) ++ s->lcount = 255; ++ ++ /* XXX why this? */ ++ if (s->hw->TPU && s->hw->use_extension && s->lcount > 32) ++ s->lcount = 32; ++ ++ /* ++ * The D1 series of scanners only allow an even line number ++ * for bi-level scanning. If a bit depth of 1 is selected, then ++ * make sure the next lower even number is selected. ++ */ ++ if (s->lcount > 3 && s->lcount % 2) ++ s->lcount -= 1; ++ ++ DBG(1, "line count is %d\n", s->lcount); ++} ++ ++SANE_Status ++e2_init_parameters(Epson_Scanner * s) ++{ ++ int dpi, max_y, max_x, bytes_per_pixel; ++ struct mode_param *mparam; ++ ++ memset(&s->params, 0, sizeof(SANE_Parameters)); ++ ++ max_x = max_y = 0; ++ dpi = s->val[OPT_RESOLUTION].w; ++ ++ mparam = &mode_params[s->val[OPT_MODE].w]; ++ ++ if (SANE_UNFIX(s->val[OPT_BR_Y].w) == 0 || ++ SANE_UNFIX(s->val[OPT_BR_X].w) == 0) ++ return SANE_STATUS_INVAL; ++ ++ s->left = SANE_UNFIX(s->val[OPT_TL_X].w) / MM_PER_INCH * ++ s->val[OPT_RESOLUTION].w + 0.5; ++ ++ s->top = SANE_UNFIX(s->val[OPT_TL_Y].w) / MM_PER_INCH * ++ s->val[OPT_RESOLUTION].w + 0.5; ++ ++ /* XXX check this */ ++ s->params.pixels_per_line = ++ SANE_UNFIX(s->val[OPT_BR_X].w - ++ s->val[OPT_TL_X].w) / MM_PER_INCH * dpi + 0.5; ++ s->params.lines = ++ SANE_UNFIX(s->val[OPT_BR_Y].w - ++ s->val[OPT_TL_Y].w) / MM_PER_INCH * dpi + 0.5; ++ ++ /* ++ * Make sure that the number of lines is correct for color shuffling: ++ * The shuffling alghorithm produces 2xline_distance lines at the ++ * beginning and the same amount at the end of the scan that are not ++ * useable. If s->params.lines gets negative, 0 lines are reported ++ * back to the frontend. ++ */ ++ if (s->hw->color_shuffle) { ++ s->params.lines -= 4 * s->line_distance; ++ if (s->params.lines < 0) { ++ s->params.lines = 0; ++ } ++ DBG(1, ++ "adjusted params.lines for color_shuffle by %d to %d\n", ++ 4 * s->line_distance, s->params.lines); ++ } ++ ++ DBG(1, "%s: %p %p tlx %f tly %f brx %f bry %f [mm]\n", ++ __func__, (void *) s, (void *) s->val, ++ SANE_UNFIX(s->val[OPT_TL_X].w), SANE_UNFIX(s->val[OPT_TL_Y].w), ++ SANE_UNFIX(s->val[OPT_BR_X].w), SANE_UNFIX(s->val[OPT_BR_Y].w)); ++ ++ /* ++ * Calculate bytes_per_pixel and bytes_per_line for ++ * any color depths. ++ * ++ * The default color depth is stored in mode_params.depth: ++ */ ++ ++ if (mode_params[s->val[OPT_MODE].w].depth == 1) ++ s->params.depth = 1; ++ else ++ s->params.depth = s->val[OPT_BIT_DEPTH].w; ++ ++ if (s->params.depth > 8) { ++ s->params.depth = 16; /* ++ * The frontends can only handle 8 or 16 bits ++ * for gray or color - so if it's more than 8, ++ * it gets automatically set to 16. This works ++ * as long as EPSON does not come out with a ++ * scanner that can handle more than 16 bits ++ * per color channel. ++ */ ++ } ++ ++ /* this works because it can only be set to 1, 8 or 16 */ ++ bytes_per_pixel = s->params.depth / 8; ++ if (s->params.depth % 8) { /* just in case ... */ ++ bytes_per_pixel++; ++ } ++ ++ /* pixels_per_line is rounded to the next 8bit boundary */ ++ s->params.pixels_per_line = s->params.pixels_per_line & ~7; ++ ++ s->params.last_frame = SANE_TRUE; ++ ++ switch (s->val[OPT_MODE].w) { ++ case MODE_BINARY: ++ case MODE_GRAY: ++ s->params.format = SANE_FRAME_GRAY; ++ s->params.bytes_per_line = ++ s->params.pixels_per_line * s->params.depth / 8; ++ break; ++ case MODE_COLOR: ++ s->params.format = SANE_FRAME_RGB; ++ s->params.bytes_per_line = ++ 3 * s->params.pixels_per_line * bytes_per_pixel; ++ break; ++#ifdef SANE_FRAME_IR ++ case MODE_INFRARED: ++ s->params.format = SANE_FRAME_IR; ++ s->params.bytes_per_line = ++ s->params.pixels_per_line * s->params.depth / 8; ++ break; ++#endif ++ } ++ ++ /* ++ * Calculate correction for line_distance in D1 scanner: ++ * Start line_distance lines earlier and add line_distance lines at the end ++ * ++ * Because the actual line_distance is not yet calculated we have to do this ++ * first. ++ */ ++ ++ s->hw->color_shuffle = SANE_FALSE; ++ s->current_output_line = 0; ++ s->lines_written = 0; ++ s->color_shuffle_line = 0; ++ ++ if ((s->hw->optical_res != 0) && (mparam->depth == 8) ++ && (mparam->flags != 0)) { ++ s->line_distance = ++ s->hw->max_line_distance * dpi / s->hw->optical_res; ++ if (s->line_distance != 0) { ++ s->hw->color_shuffle = SANE_TRUE; ++ } else ++ s->hw->color_shuffle = SANE_FALSE; ++ } ++ ++ /* ++ * Modify the scan area: If the scanner requires color shuffling, then we try to ++ * scan more lines to compensate for the lines that will be removed from the scan ++ * due to the color shuffling alghorithm. ++ * At this time we add two times the line distance to the number of scan lines if ++ * this is possible - if not, then we try to calculate the number of additional ++ * lines according to the selected scan area. ++ */ ++ ++ if (s->hw->color_shuffle == SANE_TRUE) { ++ ++ /* start the scan 2 * line_distance earlier */ ++ s->top -= 2 * s->line_distance; ++ if (s->top < 0) { ++ s->top = 0; ++ } ++ ++ /* scan 4*line_distance lines more */ ++ s->params.lines += 4 * s->line_distance; ++ } ++ ++ /* ++ * If (s->top + s->params.lines) is larger than the max scan area, reset ++ * the number of scan lines: ++ */ ++ if (SANE_UNFIX(s->val[OPT_BR_Y].w) / MM_PER_INCH * dpi < ++ (s->params.lines + s->top)) { ++ s->params.lines = ++ ((int) SANE_UNFIX(s->val[OPT_BR_Y].w) / MM_PER_INCH * ++ dpi + 0.5) - s->top; ++ } ++ ++ s->block = SANE_FALSE; ++ s->lcount = 1; ++ ++ /* ++ * The set line count commands needs to be sent for certain scanners in ++ * color mode. The D1 level requires it, we are however only testing for ++ * 'D' and not for the actual numeric level. ++ */ ++ ++ if ((s->hw->cmd->level[0] == 'B') && (s->hw->level >= 5)) ++ e2_setup_block_mode(s); ++ else if ((s->hw->cmd->level[0] == 'B') && (s->hw->level == 4) ++ && (!mode_params[s->val[OPT_MODE].w].color)) ++ e2_setup_block_mode(s); ++ else if (s->hw->cmd->level[0] == 'D') ++ e2_setup_block_mode(s); ++ ++ /* XXX call print_params here */ ++ ++ return SANE_STATUS_GOOD; ++} ++ ++void ++e2_wait_button(Epson_Scanner * s) ++{ ++ DBG(5, "%s\n", __func__); ++ ++ s->hw->wait_for_button = SANE_TRUE; ++ ++ while (s->hw->wait_for_button == SANE_TRUE) { ++ unsigned char button_status = 0; ++ ++ if (s->canceling == SANE_TRUE) ++ s->hw->wait_for_button = SANE_FALSE; ++ ++ /* get the button status from the scanner */ ++ else if (esci_request_push_button_status(s, &button_status) == ++ SANE_STATUS_GOOD) { ++ if (button_status) ++ s->hw->wait_for_button = SANE_FALSE; ++ else ++ sleep(1); ++ } else { ++ /* we run into an error condition, just continue */ ++ s->hw->wait_for_button = SANE_FALSE; ++ } ++ } ++} ++ ++SANE_Status ++e2_check_warm_up(Epson_Scanner * s, SANE_Bool * wup) ++{ ++ SANE_Status status; ++ ++ DBG(5, "%s\n", __func__); ++ ++ *wup = SANE_FALSE; ++ ++ if (s->hw->extended_commands) { ++ unsigned char buf[16]; ++ ++ status = esci_request_scanner_status(s, buf); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ if (buf[0] & FSF_STATUS_MAIN_WU) ++ *wup = SANE_TRUE; ++ ++ } else { ++ unsigned char *es; ++ ++ /* this command is not available on some scanners */ ++ if (!s->hw->cmd->request_extended_status) ++ return SANE_STATUS_GOOD; ++ ++ status = esci_request_extended_status(s, &es, NULL); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ if (es[0] & EXT_STATUS_WU) ++ *wup = SANE_TRUE; ++ ++ free(es); ++ } ++ ++ return status; ++} ++ ++SANE_Status ++e2_wait_warm_up(Epson_Scanner * s) ++{ ++ SANE_Status status; ++ SANE_Bool wup; ++ ++ DBG(5, "%s\n", __func__); ++ ++ s->retry_count = 0; ++ ++ while (1) { ++ status = e2_check_warm_up(s, &wup); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ if (wup == SANE_FALSE) ++ break; ++ ++ s->retry_count++; ++ ++ if (s->retry_count > SANE_EPSON_MAX_RETRIES) { ++ DBG(1, "max retry count exceeded (%d)\n", ++ s->retry_count); ++ return SANE_STATUS_DEVICE_BUSY; ++ } ++ sleep(5); ++ } ++ ++ return SANE_STATUS_GOOD; ++} ++ ++SANE_Status ++e2_check_adf(Epson_Scanner * s) ++{ ++ SANE_Status status; ++ ++ DBG(5, "%s\n", __func__); ++ ++ if (s->hw->use_extension == SANE_FALSE) ++ return SANE_STATUS_GOOD; ++ ++ if (s->hw->extended_commands) { ++ unsigned char buf[16]; ++ ++ status = esci_request_scanner_status(s, buf); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ if (buf[1] & FSF_STATUS_ADF_PE) ++ return SANE_STATUS_NO_DOCS; ++ ++ if (buf[1] & FSF_STATUS_ADF_PJ) ++ return SANE_STATUS_JAMMED; ++ ++ } else { ++ unsigned char *buf, t; ++ ++ status = esci_request_extended_status(s, &buf, NULL); ++ if (status != SANE_STATUS_GOOD) ++ return status;; ++ ++ t = buf[1]; ++ ++ free(buf); ++ ++ if (t & EXT_STATUS_PE) ++ return SANE_STATUS_NO_DOCS; ++ ++ if (t & EXT_STATUS_PJ) ++ return SANE_STATUS_JAMMED; ++ } ++ ++ return SANE_STATUS_GOOD; ++} ++ ++SANE_Status ++e2_start_std_scan(Epson_Scanner * s) ++{ ++ SANE_Status status; ++ unsigned char params[2]; ++ ++ DBG(5, "%s\n", __func__); ++ ++ /* ESC g */ ++ params[0] = ESC; ++ params[1] = s->hw->cmd->start_scanning; ++ ++ e2_send(s, params, 2, 6 + (s->lcount * s->params.bytes_per_line), ++ &status); ++ ++ return status; ++} ++ ++SANE_Status ++e2_start_ext_scan(Epson_Scanner * s) ++{ ++ SANE_Status status; ++ unsigned char params[2]; ++ unsigned char buf[14]; ++ ++ DBG(5, "%s\n", __func__); ++ ++ params[0] = FS; ++ params[1] = 'G'; ++ ++ status = e2_txrx(s, params, 2, buf, 14); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ if (buf[0] != STX) ++ return SANE_STATUS_INVAL; ++ ++ if (buf[1] & 0x80) { ++ DBG(1, "%s: fatal error\n", __func__); ++ return SANE_STATUS_IO_ERROR; ++ } ++ ++ s->ext_block_len = le32atoh(&buf[2]); ++ s->ext_blocks = le32atoh(&buf[6]); ++ s->ext_last_len = le32atoh(&buf[10]); ++ ++ s->ext_counter = 0; ++ ++ DBG(5, " status : 0x%02x\n", buf[1]); ++ DBG(5, " block size : %u\n", (unsigned int) le32atoh(&buf[2])); ++ DBG(5, " block count : %u\n", (unsigned int) le32atoh(&buf[6])); ++ DBG(5, " last block size: %u\n", (unsigned int) le32atoh(&buf[10])); ++ ++ if (s->ext_last_len) { ++ s->ext_blocks++; ++ DBG(1, "adj block count: %d\n", s->ext_blocks); ++ } ++ ++ /* adjust block len if we have only one block to read */ ++ if (s->ext_block_len == 0 && s->ext_last_len) ++ s->ext_block_len = s->ext_last_len; ++ ++ return status; ++} ++ ++void ++e2_scan_finish(Epson_Scanner * s) ++{ ++ DBG(5, "%s\n", __func__); ++ ++ free(s->buf); ++ s->buf = NULL; ++ ++ if (s->hw->ADF && s->hw->use_extension && s->val[OPT_AUTO_EJECT].w) ++ if (e2_check_adf(s) == SANE_STATUS_NO_DOCS) ++ esci_eject(s); ++ ++ /* XXX required? */ ++ esci_reset(s); ++} ++ ++void ++e2_copy_image_data(Epson_Scanner * s, SANE_Byte * data, SANE_Int max_length, ++ SANE_Int * length) ++{ ++ if (!s->block && s->params.format == SANE_FRAME_RGB) { ++ ++ max_length /= 3; ++ ++ if (max_length > s->end - s->ptr) ++ max_length = s->end - s->ptr; ++ ++ *length = 3 * max_length; ++ ++ while (max_length-- != 0) { ++ *data++ = s->ptr[0]; ++ *data++ = s->ptr[s->params.pixels_per_line]; ++ *data++ = s->ptr[2 * s->params.pixels_per_line]; ++ ++s->ptr; ++ } ++ ++ } else { ++ if (max_length > s->end - s->ptr) ++ max_length = s->end - s->ptr; ++ ++ *length = max_length; ++ ++ if (s->params.depth == 1) { ++ while (max_length-- != 0) ++ *data++ = ~*s->ptr++; ++ } else { ++ memcpy(data, s->ptr, max_length); ++ s->ptr += max_length; ++ } ++ } ++} ++ ++SANE_Status ++e2_ext_sane_read(SANE_Handle handle) ++{ ++ Epson_Scanner *s = (Epson_Scanner *) handle; ++ SANE_Status status = SANE_STATUS_GOOD; ++ ssize_t buf_len = 0, read; ++ ++ /* did we passed everything we read to sane? */ ++ if (s->ptr == s->end) { ++ ++ if (s->eof) ++ return SANE_STATUS_EOF; ++ ++ s->ext_counter++; ++ ++ /* sane has already got the data, read some more, the final ++ * error byte must not be included in buf_len ++ */ ++ buf_len = s->ext_block_len; ++ ++ if (s->ext_counter == s->ext_blocks && s->ext_last_len) ++ buf_len = s->ext_last_len; ++ ++ DBG(18, "%s: block %d, size %lu\n", __func__, s->ext_counter, ++ (unsigned long) buf_len); ++ ++ /* receive image data + error code */ ++ read = e2_recv(s, s->buf, buf_len + 1, &status); ++ ++ DBG(18, "%s: read %lu bytes\n", __func__, (unsigned long) read); ++ ++ if (read != buf_len + 1) ++ return SANE_STATUS_IO_ERROR; ++ ++ /* XXX check error code in buf[buf_len] ++ if (s->buf[buf_len] & ... ++ */ ++ ++ /* ack every block except the last one */ ++ if (s->ext_counter < s->ext_blocks) { ++ size_t next_len = s->ext_block_len; ++ ++ if (s->ext_counter == (s->ext_blocks - 1)) ++ next_len = s->ext_last_len; ++ ++ status = e2_ack_next(s, next_len + 1); ++ } else ++ s->eof = SANE_TRUE; ++ ++ s->end = s->buf + buf_len; ++ s->ptr = s->buf; ++ } ++ ++ return status; ++} ++ ++/* XXXX use routine from sane-evolution */ ++ ++typedef struct ++{ ++ unsigned char code; ++ unsigned char status; ++ ++ unsigned char buf[4]; ++ ++} EpsonDataRec; ++ ++ ++/* XXX this routine is ugly and should be avoided */ ++static SANE_Status ++read_info_block(Epson_Scanner * s, EpsonDataRec * result) ++{ ++ SANE_Status status; ++ unsigned char params[2]; ++ ++ retry: ++ e2_recv(s, result, s->block ? 6 : 4, &status); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ if (result->code != STX) { ++ DBG(1, "error: got %02x, expected STX\n", result->code); ++ return SANE_STATUS_INVAL; ++ } ++ ++ /* XXX */ ++ if (result->status & STATUS_FER) { ++ unsigned char *ext_status; ++ ++ DBG(1, "fatal error, status = %02x\n", result->status); ++ ++ if (s->retry_count > SANE_EPSON_MAX_RETRIES) { ++ DBG(1, "max retry count exceeded (%d)\n", ++ s->retry_count); ++ return SANE_STATUS_INVAL; ++ } ++ ++ /* if the scanner is warming up, retry after a few secs */ ++ status = esci_request_extended_status(s, &ext_status, NULL); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ if (ext_status[0] & EXT_STATUS_WU) { ++ free(ext_status); ++ ++ sleep(5); /* for the next attempt */ ++ ++ DBG(1, "retrying ESC G - %d\n", ++(s->retry_count)); ++ ++ params[0] = ESC; ++ params[1] = s->hw->cmd->start_scanning; ++ ++ e2_send(s, params, 2, 0, &status); ++ if (status != SANE_STATUS_GOOD) ++ return status; ++ ++ goto retry; ++ } else ++ free(ext_status); ++ } ++ ++ return status; ++} ++ ++static SANE_Status ++color_shuffle(SANE_Handle handle, int *new_length) ++{ ++ Epson_Scanner *s = (Epson_Scanner *) handle; ++ SANE_Byte *buf = s->buf; ++ int length = s->end - s->buf; ++ ++ SANE_Byte *data_ptr; /* ptr to data to process */ ++ SANE_Byte *data_end; /* ptr to end of processed data */ ++ SANE_Byte *out_data_ptr; /* ptr to memory when writing data */ ++ int i; /* loop counter */ ++ ++ /* ++ * It looks like we are dealing with a scanner that has an odd way ++ * of dealing with colors... The red and blue scan lines are shifted ++ * up or down by a certain number of lines relative to the green line. ++ */ ++ DBG(5, "%s\n", __func__); ++ ++ /* ++ * Initialize the variables we are going to use for the ++ * copying of the data. data_ptr is the pointer to ++ * the currently worked on scan line. data_end is the ++ * end of the data area as calculated from adding *length ++ * to the start of data. ++ * out_data_ptr is used when writing out the processed data ++ * and always points to the beginning of the next line to ++ * write. ++ */ ++ data_ptr = out_data_ptr = buf; ++ data_end = data_ptr + length; ++ ++ /* ++ * The image data is in *buf, we know that the buffer contains s->end - s->buf ( = length) ++ * bytes of data. The width of one line is in s->params.bytes_per_line ++ * ++ * The buffer area is supposed to have a number of full scan ++ * lines, let's test if this is the case. ++ */ ++ ++ if (length % s->params.bytes_per_line != 0) { ++ DBG(1, "error in buffer size: %d / %d\n", length, ++ s->params.bytes_per_line); ++ return SANE_STATUS_INVAL; ++ } ++ ++ while (data_ptr < data_end) { ++ SANE_Byte *source_ptr, *dest_ptr; ++ int loop; ++ ++ /* copy the green information into the current line */ ++ ++ source_ptr = data_ptr + 1; ++ dest_ptr = s->line_buffer[s->color_shuffle_line] + 1; ++ ++ for (i = 0; i < s->params.bytes_per_line / 3; i++) { ++ *dest_ptr = *source_ptr; ++ dest_ptr += 3; ++ source_ptr += 3; ++ } ++ ++ /* copy the red information n lines back */ ++ ++ if (s->color_shuffle_line >= s->line_distance) { ++ source_ptr = data_ptr + 2; ++ dest_ptr = ++ s->line_buffer[s->color_shuffle_line - ++ s->line_distance] + 2; ++ ++/* while (source_ptr < s->line_buffer[s->color_shuffle_line] + s->params.bytes_per_line) */ ++ for (loop = 0; ++ loop < s->params.bytes_per_line / 3; ++ loop++) { ++ *dest_ptr = *source_ptr; ++ dest_ptr += 3; ++ source_ptr += 3; ++ } ++ } ++ ++ /* copy the blue information n lines forward */ ++ ++ source_ptr = data_ptr; ++ dest_ptr = ++ s->line_buffer[s->color_shuffle_line + ++ s->line_distance]; ++ ++/* while (source_ptr < s->line_buffer[s->color_shuffle_line] + s->params.bytes_per_line) */ ++ for (loop = 0; loop < s->params.bytes_per_line / 3; ++ loop++) { ++ *dest_ptr = *source_ptr; ++ dest_ptr += 3; ++ source_ptr += 3; ++ } ++ ++ data_ptr += s->params.bytes_per_line; ++ ++ if (s->color_shuffle_line == s->line_distance) { ++ /* ++ * We just finished the line in line_buffer[0] - write it to the ++ * output buffer and continue. ++ * ++ * The ouput buffer ist still "buf", but because we are ++ * only overwriting from the beginning of the memory area ++ * we are not interfering with the "still to shuffle" data ++ * in the same area. ++ */ ++ ++ /* ++ * Strip the first and last n lines and limit to ++ */ ++ if ((s->current_output_line >= ++ s->line_distance) ++ && (s->current_output_line < ++ s->params.lines + s->line_distance)) { ++ memcpy(out_data_ptr, ++ s->line_buffer[0], ++ s->params.bytes_per_line); ++ out_data_ptr += ++ s->params.bytes_per_line; ++ ++ s->lines_written++; ++ } ++ ++ s->current_output_line++; ++ ++ /* ++ * Now remove the 0-entry and move all other ++ * lines up by one. There are 2*line_distance + 1 ++ * buffers, * therefore the loop has to run from 0 ++ * to * 2*line_distance, and because we want to ++ * copy every n+1st entry to n the loop runs ++ * from - to 2*line_distance-1! ++ */ ++ ++ free(s->line_buffer[0]); ++ ++ for (i = 0; i < s->line_distance * 2; i++) { ++ s->line_buffer[i] = ++ s->line_buffer[i + 1]; ++ } ++ ++ /* ++ * and create one new buffer at the end ++ */ ++ ++ s->line_buffer[s->line_distance * 2] = ++ malloc(s->params.bytes_per_line); ++ if (s->line_buffer[s->line_distance * 2] == ++ NULL) { ++ DBG(1, "out of memory (line %d)\n", ++ __LINE__); ++ return SANE_STATUS_NO_MEM; ++ } ++ } else { ++ s->color_shuffle_line++; /* increase the buffer number */ ++ } ++ } ++ ++ /* ++ * At this time we've used up all the new data from the scanner, some of ++ * it is still in the line_buffers, but we are ready to return some of it ++ * to the front end software. To do so we have to adjust the size of the ++ * data area and the *new_length variable. ++ */ ++ ++ *new_length = out_data_ptr - buf; ++ ++ return SANE_STATUS_GOOD; ++} ++ ++static inline int ++get_color(int status) ++{ ++ switch ((status >> 2) & 0x03) { ++ case 1: ++ return 1; ++ case 2: ++ return 0; ++ case 3: ++ return 2; ++ default: ++ return 0; /* required to make the compiler happy */ ++ } ++} ++ ++ ++SANE_Status ++e2_block_sane_read(SANE_Handle handle) ++{ ++ Epson_Scanner *s = (Epson_Scanner *) handle; ++ SANE_Status status; ++ SANE_Bool reorder = SANE_FALSE; ++ SANE_Bool needStrangeReorder = SANE_FALSE; ++ ++ START_READ: ++ DBG(18, "%s: begin\n", __func__); ++ ++ if (s->ptr == s->end) { ++ EpsonDataRec result; ++ unsigned int buf_len; ++ ++ if (s->eof) { ++ if (s->hw->color_shuffle) { ++ DBG(1, ++ "written %d lines after color shuffle\n", ++ s->lines_written); ++ DBG(1, "lines requested: %d\n", ++ s->params.lines); ++ } ++ ++ return SANE_STATUS_EOF; ++ } ++ ++ status = read_info_block(s, &result); ++ if (status != SANE_STATUS_GOOD) { ++ return status; ++ } ++ ++ buf_len = result.buf[1] << 8 | result.buf[0]; ++ buf_len *= (result.buf[3] << 8 | result.buf[2]); ++ ++ DBG(18, "%s: buf len = %u\n", __func__, buf_len); ++ ++ { ++ /* do we have to reorder the data ? */ ++ if (get_color(result.status) == 0x01) ++ reorder = SANE_TRUE; ++ ++ e2_recv(s, s->buf, buf_len, &status); ++ if (status != SANE_STATUS_GOOD) { ++ return status; ++ } ++ } ++ ++ if (result.status & STATUS_AREA_END) { ++ DBG(1, "%s: EOF\n", __func__); ++ s->eof = SANE_TRUE; ++ } else { ++ if (s->canceling) { ++ status = e2_cmd_simple(s, S_CAN, 1); ++ return SANE_STATUS_CANCELLED; ++ } else { ++ status = e2_ack(s); ++ } ++ } ++ ++ s->end = s->buf + buf_len; ++ s->ptr = s->buf; ++ ++ /* ++ * if we have to re-order the color components (GRB->RGB) we ++ * are doing this here: ++ */ ++ ++ /* ++ * Some scanners (e.g. the Perfection 1640 and GT-2200) seem ++ * to have the R and G channels swapped. ++ * The GT-8700 is the Asian version of the Perfection 1640. ++ * If the scanner name is one of these and the scan mode is ++ * RGB then swap the colors. ++ */ ++ ++ needStrangeReorder = ++ (strstr(s->hw->model, "GT-2200") || ++ ((strstr(s->hw->model, "1640") ++ && strstr(s->hw->model, "Perfection")) ++ || strstr(s->hw->model, "GT-8700"))) ++ && s->params.format == SANE_FRAME_RGB; ++ ++ /* ++ * Certain Perfection 1650 also need this re-ordering of the two ++ * color channels. These scanners are identified by the problem ++ * with the half vertical scanning area. When we corrected this, ++ * we also set the variable s->hw->need_color_reorder ++ */ ++ if (s->hw->need_color_reorder) ++ reorder = SANE_FALSE; /* reordering once is enough */ ++ ++ if (reorder && s->params.format == SANE_FRAME_RGB) { ++ SANE_Byte *ptr; ++ ++ ptr = s->buf; ++ while (ptr < s->end) { ++ if (s->params.depth > 8) { ++ SANE_Byte tmp; ++ ++ /* R->G G->R */ ++ tmp = ptr[0]; ++ ptr[0] = ptr[2]; /* first Byte G */ ++ ptr[2] = tmp; /* first Byte R */ ++ ++ tmp = ptr[1]; ++ ptr[1] = ptr[3]; /* second Byte G */ ++ ptr[3] = tmp; /* second Byte R */ ++ ++ ptr += 6; /* go to next pixel */ ++ } else { ++ /* R->G G->R */ ++ SANE_Byte tmp; ++ ++ tmp = ptr[0]; ++ ptr[0] = ptr[1]; /* G */ ++ ptr[1] = tmp; /* R */ ++ /* B stays the same */ ++ ptr += 3; /* go to next pixel */ ++ } ++ } ++ } ++ ++ /* ++ * Do the color_shuffle if everything else is correct - at this time ++ * most of the stuff is hardcoded for the Perfection 610 ++ */ ++ ++ if (s->hw->color_shuffle) { ++ int new_length = 0; ++ ++ status = color_shuffle(s, &new_length); ++ /* XXX check status here */ ++ ++ /* ++ * If no bytes are returned, check if the scanner is already done, if so, ++ * we'll probably just return, but if there is more data to process get ++ * the next batch. ++ */ ++ if (new_length == 0 && s->end != s->ptr) ++ goto START_READ; ++ ++ s->end = s->buf + new_length; ++ s->ptr = s->buf; ++ } ++ ++ DBG(18, "%s: begin scan2\n", __func__); ++ } ++ ++ DBG(18, "%s: end\n", __func__); ++ ++ return SANE_STATUS_GOOD; ++} +diff -urNad sane-backends-1.0.20~/backend/epson2-ops.h sane-backends-1.0.20/backend/epson2-ops.h +--- sane-backends-1.0.20~/backend/epson2-ops.h 1970-01-01 01:00:00.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2-ops.h 2010-01-01 13:08:05.198454979 +0100 +@@ -0,0 +1,52 @@ ++/* ++ * epson2.c - SANE library for Epson scanners. ++ * ++ * Based on Kazuhiro Sasayama previous ++ * Work on epson.[ch] file from the SANE package. ++ * Please see those files for additional copyrights. ++ * ++ * Copyright (C) 2006-07 Tower Technologies ++ * Author: Alessandro Zummo ++ * ++ * This file is part of the SANE package. ++ * ++ * 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, version 2. ++ */ ++ ++/* some defines to make handling the TPU easier */ ++#define FILM_TYPE_NEGATIVE (1L << 0) ++#define FILM_TYPE_SLIDE (1L << 1) ++ ++#define e2_model(s,m) e2_dev_model((s)->hw,(m)) ++ ++extern int sanei_scsi_max_request_size; ++extern int *gamma_params; ++ ++extern void e2_dev_init(Epson_Device *dev, const char *devname, int conntype); ++extern SANE_Status e2_dev_post_init(struct Epson_Device *dev); ++extern SANE_Bool e2_dev_model(Epson_Device *dev, const char *model); ++extern void e2_set_cmd_level(SANE_Handle handle, unsigned char *level); ++extern SANE_Status e2_set_model(Epson_Scanner *s, unsigned char *model, size_t len); ++extern SANE_Status e2_add_resolution(Epson_Device *dev, int r); ++extern void e2_set_fbf_area(Epson_Scanner *s, int x, int y, int unit); ++extern void e2_set_adf_area(struct Epson_Scanner *s, int x, int y, int unit); ++extern void e2_set_tpu_area(struct Epson_Scanner *s, int x, int y, int unit); ++extern void e2_add_depth(Epson_Device *dev, SANE_Word depth); ++extern SANE_Status e2_discover_capabilities(Epson_Scanner *s); ++extern SANE_Status e2_set_extended_scanning_parameters(Epson_Scanner *s); ++extern SANE_Status e2_set_scanning_parameters(Epson_Scanner *s); ++extern void e2_setup_block_mode(Epson_Scanner *s); ++extern SANE_Status e2_init_parameters(Epson_Scanner *s); ++extern void e2_wait_button(Epson_Scanner *s); ++extern SANE_Status e2_check_warm_up(Epson_Scanner *s, SANE_Bool *wup); ++extern SANE_Status e2_wait_warm_up(Epson_Scanner *s); ++extern SANE_Status e2_check_adf(Epson_Scanner *s); ++extern SANE_Status e2_start_std_scan(Epson_Scanner *s); ++extern SANE_Status e2_start_ext_scan(Epson_Scanner *s); ++extern void e2_scan_finish(Epson_Scanner *s); ++extern void e2_copy_image_data(Epson_Scanner *s, SANE_Byte *data, SANE_Int max_length, ++ SANE_Int *length); ++extern SANE_Status e2_ext_sane_read(SANE_Handle handle); ++extern SANE_Status e2_block_sane_read(SANE_Handle handle); +diff -urNad sane-backends-1.0.20~/backend/epson2.c sane-backends-1.0.20/backend/epson2.c +--- sane-backends-1.0.20~/backend/epson2.c 2010-01-01 13:07:55.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2.c 2010-01-01 13:08:05.202454509 +0100 +@@ -17,15 +17,18 @@ + + #define EPSON2_VERSION 1 + #define EPSON2_REVISION 0 +-#define EPSON2_BUILD 117 ++#define EPSON2_BUILD 123 + + /* debugging levels: + * + * 127 e2_recv buffer + * 125 e2_send buffer ++ * 32 more network progression ++ * 24 network header ++ * 23 network info + * 20 usb cmd counters + * 18 sane_read +- * 17 setvalue ++ * 17 setvalue, getvalue, control_option + * 15 e2_send, e2_recv calls + * 13 e2_cmd_info_block + * 12 epson_cmd_simple +@@ -41,7 +44,7 @@ + * warnings + */ + +-#include "../include/sane/config.h" ++#include "sane/config.h" + + #include "epson2.h" + +@@ -55,124 +58,26 @@ + #include + #include + +-#include +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include ++#include "sane/saneopts.h" ++#include "sane/sanei_scsi.h" ++#include "sane/sanei_usb.h" ++#include "sane/sanei_pio.h" ++#include "sane/sanei_tcp.h" ++#include "sane/sanei_udp.h" ++#include "sane/sanei_backend.h" ++#include "sane/sanei_config.h" + + #include "epson2-io.h" + #include "epson2-commands.h" ++#include "epson2-ops.h" + + #include "epson2_scsi.h" + #include "epson_usb.h" + #include "epson2_net.h" + +-static EpsonCmdRec epson_cmd[] = { +- +-/* +- * request identity +- * | request identity2 +- * | | request status +- * | | | request command parameter +- * | | | | set color mode +- * | | | | | start scanning +- * | | | | | | set data format +- * | | | | | | | set resolution +- * | | | | | | | | set zoom +- * | | | | | | | | | set scan area +- * | | | | | | | | | | set brightness +- * | | | | | | | | | | | set gamma +- * | | | | | | | | | | | | set halftoning +- * | | | | | | | | | | | | | set color correction +- * | | | | | | | | | | | | | | initialize scanner +- * | | | | | | | | | | | | | | | set speed +- * | | | | | | | | | | | | | | | | set lcount +- * | | | | | | | | | | | | | | | | | mirror image +- * | | | | | | | | | | | | | | | | | | set gamma table +- * | | | | | | | | | | | | | | | | | | | set outline emphasis +- * | | | | | | | | | | | | | | | | | | | | set dither +- * | | | | | | | | | | | | | | | | | | | | | set color correction coefficients +- * | | | | | | | | | | | | | | | | | | | | | | request extended status +- * | | | | | | | | | | | | | | | | | | | | | | | control an extension +- * | | | | | | | | | | | | | | | | | | | | | | | | forward feed / eject +- * | | | | | | | | | | | | | | | | | | | | | | | | | feed +- * | | | | | | | | | | | | | | | | | | | | | | | | | | request push button status +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | control auto area segmentation +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | set film type +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set exposure time +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set bay +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set threshold +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set focus position +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request focus position +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request extended identity +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request scanner status +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +- * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +- */ +- {"A1", 'I', 0x0, 'F', 'S', 0x0, 'G', 0x0, 'R', 0x0, 'A', 0x0, +- {-0, 0, 0}, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0, 0x0, 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0, 0x0, 0x0, 0x0, 0x0}, +- {"A2", 'I', 0x0, 'F', 'S', 0x0, 'G', 'D', 'R', 'H', 'A', 'L', +- {-3, 3, 0}, 'Z', 'B', 0x0, '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"B1", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 0x0, 'A', 0x0, +- {-0, 0, 0}, 0x0, 'B', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"B2", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', +- {-3, 3, 0}, 'Z', 'B', 0x0, '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"B3", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', +- {-3, 3, 0}, 'Z', 'B', 'M', '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 'm', +- 'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"B4", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', +- {-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 0x0, 'z', 'Q', 'b', 'm', +- 'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"B5", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', +- {-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm', +- 'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"B6", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', +- {-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm', +- 'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"B7", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', +- {-4, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm', +- 'f', 'e', '\f', 0x00, '!', 's', 'N', 0x0, 0x0, 't', 0x0, 0x0, 'I', +- 'F'}, +- {"B8", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', +- {-4, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm', +- 'f', 'e', '\f', 0x19, '!', 's', 'N', 0x0, 0x0, 0x0, 'p', 'q', 'I', +- 'F'}, +- {"F5", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', +- {-3, 3, 0}, 'Z', 0x0, 'M', '@', 'g', 'd', 'K', 'z', 'Q', 0x0, 'm', +- 0x0, 'e', '\f', 0x00, 0x0, 0x0, 'N', 'T', 'P', 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"D1", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0, +- {-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0, +- 'f', 0x0, 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"D7", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0, +- {-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0, +- 'f', 0x0, 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +- {"D8", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0, +- {-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0, +- 'f', 'e', 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, +- 0x0}, +-}; ++#ifndef MM_PER_INCH ++# define MM_PER_INCH 25.4 ++#endif + + /* + * Definition of the mode_param struct, that is used to +@@ -181,24 +86,20 @@ + * The depth variable gets updated when the bit depth is modified. + */ + +-struct mode_param +-{ +- int color; +- int flags; +- int dropout_mask; +- int depth; +-}; +- +-static struct mode_param mode_params[] = { ++struct mode_param mode_params[] = { + {0, 0x00, 0x30, 1}, + {0, 0x00, 0x30, 8}, +- {1, 0x02, 0x00, 8} ++ {1, 0x02, 0x00, 8}, ++ {0, 0x00, 0x30, 1} + }; + +-static const SANE_String_Const mode_list[] = { ++static SANE_String_Const mode_list[] = { + SANE_I18N("Binary"), + SANE_I18N("Gray"), + SANE_I18N("Color"), ++#ifdef SANE_FRAME_IR ++ SANE_I18N("Infrared"), ++#endif + NULL + }; + +@@ -220,17 +121,13 @@ + * of the scanner. + */ + +-static SANE_String_Const source_list[] = { ++SANE_String_Const source_list[] = { + FBF_STR, + NULL, + NULL, + NULL + }; + +-/* some defines to make handling the TPU easier */ +-#define FILM_TYPE_NEGATIVE (1L << 0) +-#define FILM_TYPE_SLIDE (1L << 1) +- + static const SANE_String_Const film_list[] = { + SANE_I18N("Positive Film"), + SANE_I18N("Negative Film"), +@@ -239,8 +136,6 @@ + NULL + }; + +-static int film_params[] = { 0, 1, 2, 3 }; +- + static const SANE_String_Const focus_list[] = { + SANE_I18N("Focus on glass"), + SANE_I18N("Focus 2.5mm above glass"), +@@ -250,7 +145,7 @@ + #define HALFTONE_NONE 0x01 + #define HALFTONE_TET 0x03 + +-static const int halftone_params[] = { ++const int halftone_params[] = { + HALFTONE_NONE, + 0x00, + 0x10, +@@ -299,13 +194,6 @@ + NULL + }; + +-static const int dropout_params[] = { +- 0x00, /* none */ +- 0x10, /* red */ +- 0x20, /* green */ +- 0x30 /* blue */ +-}; +- + static const SANE_String_Const dropout_list[] = { + SANE_I18N("None"), + SANE_I18N("Red"), +@@ -314,24 +202,10 @@ + NULL + }; + +-/* +- * Color correction: +- * One array for the actual parameters that get sent to the scanner (color_params[]), +- * one array for the strings that get displayed in the user interface (color_list[]) +- * and one array to mark the user defined color correction (dolor_userdefined[]). +- */ +-static const int color_params[] = { +- 0x00, +- 0x01, +- 0x10, +- 0x20, +- 0x40, +- 0x80 +-}; +- + static const SANE_Bool color_userdefined[] = { + SANE_FALSE, + SANE_TRUE, ++ SANE_TRUE, + SANE_FALSE, + SANE_FALSE, + SANE_FALSE, +@@ -339,7 +213,8 @@ + }; + + static const SANE_String_Const color_list[] = { +- SANE_I18N("No Correction"), ++ SANE_I18N("None"), ++ SANE_I18N("Automatic"), + SANE_I18N("User defined"), + SANE_I18N("Impact-dot printers"), + SANE_I18N("Thermal printers"), +@@ -348,12 +223,28 @@ + NULL + }; + ++/* cct profile has precedence over normal color correction */ ++static const SANE_String_Const cct_mode_list[] = { ++ "Automatic", ++ "Reflective", ++ "Colour negatives", ++ "Monochrome negatives", ++ "Colour positives", ++ NULL ++}; ++ ++enum { ++ CCT_AUTO, CCT_REFLECTIVE, CCT_COLORNEG, CCT_MONONEG, ++ CCT_COLORPOS ++}; ++ + /* + * Gamma correction: +- * The A and B level scanners work differently than the D level scanners, therefore +- * I define two different sets of arrays, plus one set of variables that get set to +- * the actally used params and list arrays at runtime. ++ * The A and B level scanners work differently than the D level scanners, ++ * therefore I define two different sets of arrays, plus one set of ++ * variables that get set to the actally used params and list arrays at runtime. + */ ++ + static int gamma_params_ab[] = { + 0x01, + 0x03, +@@ -396,7 +287,7 @@ + }; + + static SANE_Bool *gamma_userdefined; +-static int *gamma_params; ++int *gamma_params; + + /* Bay list: + * this is used for the FilmScan +@@ -416,27 +307,16 @@ + /* minimum, maximum, quantization */ + static const SANE_Range u8_range = { 0, 255, 0 }; + static const SANE_Range s8_range = { -127, 127, 0 }; +- +-/* used for several boolean choices */ +-static int switch_params[] = { +- 0, +- 1 +-}; +- +-#define mirror_params switch_params ++static const SANE_Range fx_range = { SANE_FIX(-2.0), SANE_FIX(2.0), 0 }; + + static const SANE_Range outline_emphasis_range = { -2, 2, 0 }; + + +-static SANE_Word *bitDepthList = NULL; +- +- +- + /* + * List of pointers to devices - will be dynamically allocated depending + * on the number of devices found. + */ +-static const SANE_Device **devlist = 0; ++static const SANE_Device **devlist; + + + /* Some utility functions */ +@@ -455,86 +335,18 @@ + return max_size; + } + +-typedef struct +-{ +- unsigned char code; +- unsigned char status; +- +- unsigned char buf[4]; +- +-} EpsonDataRec; +- +-static SANE_Status color_shuffle(SANE_Handle handle, int *new_length); + static SANE_Status attach_one_usb(SANE_String_Const devname); + static SANE_Status attach_one_net(SANE_String_Const devname); +-static void filter_resolution_list(Epson_Scanner * s); +- +- +-static SANE_Bool +-e2_model(Epson_Scanner * s, const char *model) +-{ +- if (s->hw->model == NULL) +- return SANE_FALSE; +- +- if (strncmp(s->hw->model, model, strlen(model)) == 0) +- return SANE_TRUE; +- +- return SANE_FALSE; +-} +- +-/* A little helper function to correct the extended status reply +- * gotten from scanners with known buggy firmware. +- */ +-static void +-fix_up_extended_status_reply(Epson_Scanner * s, unsigned char *buf) +-{ +- if (e2_model(s, "ES-9000H") || e2_model(s, "GT-30000")) { +- DBG(1, "fixing up buggy ADF max scan dimensions.\n"); +- buf[2] = 0xB0; +- buf[3] = 0x6D; +- buf[4] = 0x60; +- buf[5] = 0x9F; +- } +-} + + static void + print_params(const SANE_Parameters params) + { +- DBG(6, "params.format = %d\n", params.format); +- DBG(6, "params.last_frame = %d\n", params.last_frame); +- DBG(6, "params.bytes_per_line = %d\n", params.bytes_per_line); ++ DBG(6, "params.format = %d\n", params.format); ++ DBG(6, "params.last_frame = %d\n", params.last_frame); ++ DBG(6, "params.bytes_per_line = %d\n", params.bytes_per_line); + DBG(6, "params.pixels_per_line = %d\n", params.pixels_per_line); +- DBG(6, "params.lines = %d\n", params.lines); +- DBG(6, "params.depth = %d\n", params.depth); +-} +- +-static void +-e2_set_cmd_level(SANE_Handle handle, unsigned char *level) +-{ +- Epson_Scanner *s = (Epson_Scanner *) handle; +- Epson_Device *dev = s->hw; +- +- int n; +- +- DBG(1, "%s: %c%c\n", __func__, level[0], level[1]); +- +- /* set command type and level */ +- for (n = 0; n < NELEMS(epson_cmd); n++) { +- char type_level[3]; +- sprintf(type_level, "%c%c", level[0], level[1]); +- if (!strncmp(type_level, epson_cmd[n].level, 2)) +- break; +- } +- +- if (n < NELEMS(epson_cmd)) { +- dev->cmd = &epson_cmd[n]; +- } else { +- dev->cmd = &epson_cmd[EPSON_LEVEL_DEFAULT]; +- DBG(1, " unknown type %c or level %c, using %s\n", +- level[0], level[1], dev->cmd->level); +- } +- +- s->hw->level = dev->cmd->level[1] - '0'; ++ DBG(6, "params.lines = %d\n", params.lines); ++ DBG(6, "params.depth = %d\n", params.depth); + } + + /* +@@ -545,7 +357,7 @@ + */ + + static void +-close_scanner(Epson_Scanner * s) ++close_scanner(Epson_Scanner *s) + { + DBG(7, "%s: fd = %d\n", __func__, s->fd); + +@@ -557,9 +369,8 @@ + esci_request_status(s, NULL); + + /* request extended status. This toggles w_cmd_count only */ +- if (w_cmd_count % 2) { ++ if (w_cmd_count % 2) + esci_request_extended_status(s, NULL, NULL); +- } + + if (s->hw->connection == SANE_EPSON_NET) { + sanei_epson_net_unlock(s); +@@ -573,7 +384,6 @@ + } + + s->fd = -1; +- return; + } + + static void +@@ -584,17 +394,17 @@ + SANE_Status status; + + char *ip, *query = "EPSONP\x00\xff\x00\x00\x00\x00\x00\x00\x00"; +- u_char buf[76]; ++ unsigned char buf[76]; + + struct timeval to; + +- long save_flags, flags; ++ long save_flags, flags; + + status = sanei_udp_open_broadcast(&fd); + if (status != SANE_STATUS_GOOD) + return; + +- sanei_udp_write_broadcast(fd, 3289, (u_char *) query, 15); ++ sanei_udp_write_broadcast(fd, 3289, (unsigned char *) query, 15); + + DBG(5, "%s, sent discovery packet\n", __func__); + +@@ -604,9 +414,9 @@ + FD_ZERO(&rfds); + FD_SET(fd, &rfds); + +- save_flags = flags = fcntl(fd, F_GETFL, 0L); +- flags |= O_NONBLOCK; +- fcntl(fd, F_SETFL, flags); ++ save_flags = flags = fcntl(fd, F_GETFL, 0L); ++ flags |= O_NONBLOCK; ++ fcntl(fd, F_SETFL, flags); + if (select(fd + 1, &rfds, NULL, NULL, &to) > 0) { + while ((len = sanei_udp_recvfrom(fd, buf, 76, &ip)) == 76) { + DBG(5, " response from %s\n", ip); +@@ -616,16 +426,13 @@ + attach_one_net(ip); + } + } +- fcntl(fd, F_SETFL, save_flags); ++ fcntl(fd, F_SETFL, save_flags); + + DBG(5, "%s, end\n", __func__); + + sanei_udp_close(fd); + } + +- +- +- + /* + * open_scanner() + * +@@ -634,11 +441,11 @@ + */ + + static SANE_Status +-open_scanner(Epson_Scanner * s) ++open_scanner(Epson_Scanner *s) + { + SANE_Status status = 0; + +- DBG(7, "%s\n", __func__); ++ DBG(7, "%s: %s\n", __func__, s->hw->sane.name); + + if (s->fd != -1) { + DBG(5, "scanner is already open: fd = %d\n", s->fd); +@@ -648,820 +455,260 @@ + if (s->hw->connection == SANE_EPSON_NET) { + unsigned char buf[5]; + +- /* Sleep a bit or the network scanner will not be ready */ +- sleep(1); ++ /* device name has the form net:ipaddr */ ++ status = sanei_tcp_open(&s->hw->sane.name[4], 1865, &s->fd); ++ if (status == SANE_STATUS_GOOD) { + +- status = sanei_tcp_open(s->hw->sane.name, 1865, &s->fd); +- if (status != SANE_STATUS_GOOD) +- goto end; ++ ssize_t read; ++ struct timeval tv; + +- s->netlen = 0; +- /* the scanner sends a kind of welcome msg */ +- e2_recv(s, buf, 5, &status); ++ tv.tv_sec = 5; ++ tv.tv_usec = 0; + +- /* lock the scanner for use by sane */ +- sanei_epson_net_lock(s); ++ setsockopt(s->fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(tv)); ++ ++ s->netlen = 0; ++ ++ DBG(32, "awaiting welcome message\n"); ++ ++ /* the scanner sends a kind of welcome msg */ ++ read = e2_recv(s, buf, 5, &status); ++ if (read != 5) ++ return SANE_STATUS_IO_ERROR; ++ ++ DBG(32, "welcome message received, locking the scanner...\n"); ++ ++ /* lock the scanner for use by sane */ ++ sanei_epson_net_lock(s); ++ ++ DBG(32, "scanner locked\n"); ++ } ++ + } else if (s->hw->connection == SANE_EPSON_SCSI) + status = sanei_scsi_open(s->hw->sane.name, &s->fd, + sanei_epson2_scsi_sense_handler, + NULL); + else if (s->hw->connection == SANE_EPSON_PIO) +- status = sanei_pio_open(s->hw->sane.name, &s->fd); ++ /* device name has the form pio:0xnnn */ ++ status = sanei_pio_open(&s->hw->sane.name[4], &s->fd); ++ + else if (s->hw->connection == SANE_EPSON_USB) + status = sanei_usb_open(s->hw->sane.name, &s->fd); + +- end: ++ if (status == SANE_STATUS_ACCESS_DENIED) { ++ DBG(1, "please check that you have permissions on the device.\n"); ++ DBG(1, "if this is a multi-function device with a printer,\n"); ++ DBG(1, "disable any conflicting driver (like usblp).\n"); ++ } + +- if (status != SANE_STATUS_GOOD) ++ if (status != SANE_STATUS_GOOD) + DBG(1, "%s open failed: %s\n", s->hw->sane.name, +- sane_strstatus(status)); ++ sane_strstatus(status)); ++ else ++ DBG(5, "scanner opened\n"); + + return status; + } + +- +-static int num_devices = 0; /* number of scanners attached to backend */ +-static Epson_Device *first_dev = NULL; /* first EPSON scanner in list */ +-static Epson_Scanner *first_handle = NULL; +- +-static SANE_Status +-e2_set_model(Epson_Scanner * s, unsigned char *model, size_t len) +-{ +- unsigned char *buf; +- char *p; +- struct Epson_Device *dev = s->hw; +- +- buf = malloc(len + 1); +- if (buf == NULL) +- return SANE_STATUS_NO_MEM; +- +- memcpy(buf, model, len); +- buf[len] = '\0'; +- +- p = strchr((const char *) buf, ' '); +- if (p != NULL) +- *p = '\0'; +- +- if (dev->model) +- free(dev->model); +- +- dev->model = strndup((const char *) buf, len); +- dev->sane.model = dev->model; +- +- DBG(10, "%s: model is '%s'\n", __func__, dev->model); +- +- free(buf); +- +- return SANE_STATUS_GOOD; +-} +- +-static SANE_Status +-e2_add_resolution(Epson_Scanner * s, int r) +-{ +- struct Epson_Device *dev = s->hw; +- +- dev->res_list_size++; +- dev->res_list = (SANE_Int *) realloc(dev->res_list, +- dev->res_list_size * +- sizeof(SANE_Word)); +- +- DBG(10, "%s: add (dpi): %d\n", __func__, r); +- +- if (dev->res_list == NULL) +- return SANE_STATUS_NO_MEM; +- +- dev->res_list[dev->res_list_size - 1] = (SANE_Int) r; +- +- return SANE_STATUS_GOOD; +-} +- +- +-/* Helper function to correct the dpi +- * gotten from scanners with known buggy firmware. +- * - Epson Perfection 4990 Photo / GT-X800 +- * - Epson Perfection 4870 Photo / GT-X700 (untested) +- */ +-static void +-fix_up_dpi(Epson_Scanner * s) ++static SANE_Status detect_scsi(struct Epson_Scanner *s) + { + SANE_Status status; +- /* +- * EPSON Programming guide for +- * EPSON Color Image Scanner Perfection 4870/4990 +- */ +- +- if (e2_model(s, "GT-X800") +- || e2_model(s, "GT-X700")) { +- status = e2_add_resolution(s, 4800); +- status = e2_add_resolution(s, 6400); +- status = e2_add_resolution(s, 9600); +- status = e2_add_resolution(s, 12800); +- } +-} +- +-static void +-e2_set_fbf_area(Epson_Scanner * s, int x, int y, int unit) +-{ + struct Epson_Device *dev = s->hw; + +- if (x == 0 || y == 0) +- return; +- +- dev->fbf_x_range.min = 0; +- dev->fbf_x_range.max = SANE_FIX(x * MM_PER_INCH / unit); +- dev->fbf_x_range.quant = 0; +- +- dev->fbf_y_range.min = 0; +- dev->fbf_y_range.max = SANE_FIX(y * MM_PER_INCH / unit); +- dev->fbf_y_range.quant = 0; +- +- DBG(5, "%s: %f,%f %f,%f %d [mm]\n", +- __func__, +- SANE_UNFIX(dev->fbf_x_range.min), +- SANE_UNFIX(dev->fbf_y_range.min), +- SANE_UNFIX(dev->fbf_x_range.max), +- SANE_UNFIX(dev->fbf_y_range.max), unit); +-} +- +-static void +-e2_set_adf_area(struct Epson_Scanner *s, int x, int y, int unit) +-{ +- struct Epson_Device *dev = s->hw; ++ char buf[INQUIRY_BUF_SIZE + 1]; ++ size_t buf_size = INQUIRY_BUF_SIZE; + +- dev->adf_x_range.min = 0; +- dev->adf_x_range.max = SANE_FIX(x * MM_PER_INCH / unit); +- dev->adf_x_range.quant = 0; ++ char *vendor = buf + 8; ++ char *model = buf + 16; ++ char *rev = buf + 32; + +- dev->adf_y_range.min = 0; +- dev->adf_y_range.max = SANE_FIX(y * MM_PER_INCH / unit); +- dev->adf_y_range.quant = 0; ++ status = sanei_epson2_scsi_inquiry(s->fd, buf, &buf_size); ++ if (status != SANE_STATUS_GOOD) { ++ DBG(1, "%s: inquiry failed: %s\n", __func__, ++ sane_strstatus(status)); ++ return status; ++ } + +- DBG(5, "%s: %f,%f %f,%f %d [mm]\n", +- __func__, +- SANE_UNFIX(dev->adf_x_range.min), +- SANE_UNFIX(dev->adf_y_range.min), +- SANE_UNFIX(dev->adf_x_range.max), +- SANE_UNFIX(dev->adf_y_range.max), unit); +-} ++ buf[INQUIRY_BUF_SIZE] = 0; ++ DBG(1, "inquiry data:\n"); ++ DBG(1, " vendor : %.8s\n", vendor); ++ DBG(1, " model : %.16s\n", model); ++ DBG(1, " revision: %.4s\n", rev); + +-static void +-e2_set_tpu_area(struct Epson_Scanner *s, int x, int y, int unit) +-{ +- struct Epson_Device *dev = s->hw; ++ if (buf[0] != TYPE_PROCESSOR) { ++ DBG(1, "%s: device is not of processor type (%d)\n", ++ __func__, buf[0]); ++ return SANE_STATUS_INVAL; ++ } + +- dev->tpu_x_range.min = 0; +- dev->tpu_x_range.max = SANE_FIX(x * MM_PER_INCH / unit); +- dev->tpu_x_range.quant = 0; ++ if (strncmp(vendor, "EPSON", 5) != 0) { ++ DBG(1, ++ "%s: device doesn't look like an EPSON scanner\n", ++ __func__); ++ return SANE_STATUS_INVAL; ++ } + +- dev->tpu_y_range.min = 0; +- dev->tpu_y_range.max = SANE_FIX(y * MM_PER_INCH / unit); +- dev->tpu_y_range.quant = 0; ++ if (strncmp(model, "SCANNER ", 8) != 0 ++ && strncmp(model, "FilmScan 200", 12) != 0 ++ && strncmp(model, "Perfection", 10) != 0 ++ && strncmp(model, "Expression", 10) != 0 ++ && strncmp(model, "GT", 2) != 0) { ++ DBG(1, "%s: this EPSON scanner is not supported\n", ++ __func__); ++ return SANE_STATUS_INVAL; ++ } + +- DBG(5, "%s: %f,%f %f,%f %d [mm]\n", +- __func__, +- SANE_UNFIX(dev->tpu_x_range.min), +- SANE_UNFIX(dev->tpu_y_range.min), +- SANE_UNFIX(dev->tpu_x_range.max), +- SANE_UNFIX(dev->tpu_y_range.max), unit); +-} ++ if (strncmp(model, "FilmScan 200", 12) == 0) { ++ dev->sane.type = "film scanner"; ++ e2_set_model(s, (unsigned char *) model, 12); ++ } + +-static void +-e2_add_depth(Epson_Device * dev, SANE_Word depth) +-{ +- if (dev->maxDepth == 0) +- dev->maxDepth = depth; ++ /* Issue a test unit ready SCSI command. The FilmScan 200 ++ * requires it for a sort of "wake up". We might eventually ++ * get the return code and reissue it in case of failure. ++ */ ++ sanei_epson2_scsi_test_unit_ready(s->fd); + +- bitDepthList[0]++; +- bitDepthList[bitDepthList[0]] = depth; ++ return SANE_STATUS_GOOD; + } + + static SANE_Status +-e2_discover_capabilities(Epson_Scanner *s) ++detect_usb(struct Epson_Scanner *s) + { + SANE_Status status; ++ int vendor, product; ++ int i, numIds; ++ SANE_Bool is_valid; + +- unsigned char scanner_status; +- Epson_Device *dev = s->hw; +- +- SANE_String_Const *source_list_add = source_list; +- +- DBG(5, "%s\n", __func__); +- +- /* ESC I, request identity +- * this must be the first command on the FilmScan 200 +- */ +- if (dev->connection != SANE_EPSON_NET) { +- unsigned int n, k, x = 0, y = 0; +- unsigned char *buf, *area; +- size_t len; +- +- status = esci_request_identity(s, &buf, &len); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- e2_set_cmd_level(s, &buf[0]); +- +- /* Setting available resolutions and xy ranges for sane frontend. */ +- /* cycle thru the resolutions, saving them in a list */ +- for (n = 2, k = 0; n < len; n += k) { +- +- area = buf + n; +- +- switch (*area) { +- case 'R': +- { +- int val = area[2] << 8 | area[1]; +- +- status = e2_add_resolution(s, val); +- k = 3; +- continue; +- } +- case 'A': +- { +- x = area[2] << 8 | area[1]; +- y = area[4] << 8 | area[3]; +- +- DBG(1, "maximum scan area: %dx%d\n", x, y); +- k = 5; +- continue; +- } +- default: +- break; +- } +- } +- +- /* min and max dpi */ +- dev->dpi_range.min = dev->res_list[0]; +- dev->dpi_range.max = dev->res_list[dev->res_list_size - 1]; +- dev->dpi_range.quant = 0; +- +- e2_set_fbf_area(s, x, y, dev->dpi_range.max); +- +- free(buf); +- } +- +- /* ESC F, request status */ +- status = esci_request_status(s, &scanner_status); +- if (status != SANE_STATUS_GOOD) +- return status;; +- +- /* set capabilities */ +- if (scanner_status & STATUS_OPTION) +- dev->extension = SANE_TRUE; +- +- if (scanner_status & STATUS_EXT_COMMANDS) +- dev->extended_commands = 1; +- +- /* +- * Extended status flag request (ESC f). +- * this also requests the scanner device name from the the scanner. +- * It seems unsupported on the network transport (CX11NF/LP-A500), +- * so avoid it if the device support extended commands. +- */ +- +- if (!dev->extended_commands && dev->cmd->request_extended_status) { +- unsigned char *es; +- size_t es_len; +- +- status = esci_request_extended_status(s, &es, &es_len); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- /* +- * Get the device name and copy it to dev->sane.model. +- * The device name starts at es[0x1A] and is up to 16 bytes long +- * We are overwriting whatever was set previously! +- */ +- if (es_len == CMD_SIZE_EXT_STATUS) /* 42 */ +- e2_set_model(s, es + 0x1A, 16); +- +- if (es[0] & EXT_STATUS_LID) +- DBG(1, "LID detected\n"); +- +- if (es[0] & EXT_STATUS_PB) +- DBG(1, "push button detected\n"); +- else +- dev->cmd->request_push_button_status = 0; +- +- /* Flatbed */ +- *source_list_add++ = FBF_STR; +- +- e2_set_fbf_area(s, es[13] << 8 | es[12], es[15] << 8 | es[14], +- dev->dpi_range.max); +- +- /* ADF */ +- if (dev->extension && (es[1] & EXT_STATUS_IST)) { +- DBG(1, "ADF detected\n"); +- +- fix_up_extended_status_reply(s, es); +- +- dev->duplex = (es[0] & EXT_STATUS_ADFS) != 0; +- if (dev->duplex) +- DBG(1, "ADF supports duplex\n"); +- +- if (es[1] & EXT_STATUS_EN) { +- DBG(1, "ADF is enabled\n"); +- dev->x_range = &dev->adf_x_range; +- dev->y_range = &dev->adf_y_range; +- } +- +- e2_set_adf_area(s, es[3] << 8 | es[2], +- es[5] << 8 | es[4], +- dev->dpi_range.max); +- *source_list_add++ = ADF_STR; +- +- dev->ADF = SANE_TRUE; +- } +- +- /* TPU */ +- if (dev->extension && (es[6] & EXT_STATUS_IST)) { +- DBG(1, "TPU detected\n"); +- +- if (es[6] & EXT_STATUS_EN) { +- DBG(1, "TPU is enabled\n"); +- dev->x_range = &dev->tpu_x_range; +- dev->y_range = &dev->tpu_y_range; +- } +- +- e2_set_tpu_area(s, +- (es[8] << 8 | es[7]), +- (es[10] << 8 | es[9]), +- dev->dpi_range.max); +- +- *source_list_add++ = TPU_STR; +- dev->TPU = SANE_TRUE; +- } +- +- free(es); +- } +- +- /* FS I, request extended identity */ +- if (dev->extended_commands && dev->cmd->request_extended_identity) { +- unsigned char buf[80]; +- +- status = esci_request_extended_identity(s, buf); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- e2_set_cmd_level(s, &buf[0]); +- +- dev->maxDepth = buf[67]; +- +- /* set model name. it will probably be +- * different than the one reported by request_identity +- * for the same unit (i.e. LP-A500 vs CX11) . +- */ +- e2_set_model(s, &buf[46], 16); +- +- dev->optical_res = le32atoh(&buf[4]); +- +- dev->dpi_range.min = le32atoh(&buf[8]); +- dev->dpi_range.max = le32atoh(&buf[12]); +- +- /* Flatbed */ +- *source_list_add++ = FBF_STR; +- +- e2_set_fbf_area(s, le32atoh(&buf[20]), +- le32atoh(&buf[24]), dev->optical_res); +- +- /* ADF */ +- if (le32atoh(&buf[28]) > 0) { +- e2_set_adf_area(s, le32atoh(&buf[28]), +- le32atoh(&buf[32]), dev->optical_res); +- +- if (!dev->ADF) { +- *source_list_add++ = ADF_STR; +- dev->ADF = SANE_TRUE; +- } +- } +- +- /* TPU */ +- +- if (e2_model(s, "GT-X800")) { +- if (le32atoh(&buf[68]) > 0 && !dev->TPU) { +- e2_set_tpu_area(s, +- le32atoh(&buf[68]), +- le32atoh(&buf[72]), +- dev->optical_res); +- +- *source_list_add++ = TPU_STR; +- dev->TPU = SANE_TRUE; +- dev->TPU2 = SANE_TRUE; +- } +- } +- +- if (le32atoh(&buf[36]) > 0 && !dev->TPU) { +- e2_set_tpu_area(s, +- le32atoh(&buf[36]), +- le32atoh(&buf[40]), dev->optical_res); +- +- *source_list_add++ = TPU_STR; +- dev->TPU = SANE_TRUE; +- } +- +- /* fix problem with broken report of dpi */ +- fix_up_dpi(s); +- } +- +- +- *source_list_add = NULL; /* add end marker to source list */ +- +- /* +- * request identity 2 (ESC i), if available will +- * get the information from the scanner and store it in dev ++ /* if the sanei_usb_get_vendor_product call is not supported, ++ * then we just ignore this and rely on the user to config ++ * the correct device. + */ + +- if (dev->cmd->request_identity2 && dev->connection != SANE_EPSON_NET) { +- unsigned char *buf; +- status = esci_request_identity2(s, &buf); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- /* the first two bytes of the buffer contain the optical resolution */ +- dev->optical_res = buf[1] << 8 | buf[0]; +- +- /* +- * the 4th and 5th byte contain the line distance. Both values have to +- * be identical, otherwise this software can not handle this scanner. +- */ +- if (buf[4] != buf[5]) { +- status = SANE_STATUS_INVAL; +- return status; +- } +- +- dev->max_line_distance = buf[4]; ++ status = sanei_usb_get_vendor_product(s->fd, &vendor, &product); ++ if (status != SANE_STATUS_GOOD) { ++ DBG(1, ++ "cannot use IOCTL interface to verify that device is a scanner - will continue\n"); ++ return SANE_STATUS_GOOD; + } +- +- /* +- * Check for the max. supported color depth and assign +- * the values to the bitDepthList. +- */ +- bitDepthList = malloc(sizeof(SANE_Word) * 4); +- if (bitDepthList == NULL) { +- DBG(1, "out of memory (line %d)\n", __LINE__); +- return SANE_STATUS_NO_MEM; ++ ++ /* check the vendor ID to see if we are dealing with an EPSON device */ ++ if (vendor != SANE_EPSON_VENDOR_ID) { ++ /* this is not a supported vendor ID */ ++ DBG(1, ++ "the device at %s is not manufactured by EPSON (vendor id=0x%x)\n", ++ s->hw->sane.name, vendor); ++ return SANE_STATUS_INVAL; + } + +- bitDepthList[0] = 0; +- +- /* maximum depth discovery */ +- DBG(3, "discovering max depth, NAKs are expected\n"); +- +- if (dev->maxDepth >= 16 || dev->maxDepth == 0) { +- if (esci_set_data_format(s, 16) == SANE_STATUS_GOOD) +- e2_add_depth(dev, 16); +- } ++ numIds = sanei_epson_getNumberOfUSBProductIds(); ++ is_valid = SANE_FALSE; ++ i = 0; + +- if (dev->maxDepth >= 14 || dev->maxDepth == 0) { +- if (esci_set_data_format(s, 14) == SANE_STATUS_GOOD) +- e2_add_depth(dev, 14); ++ /* check all known product IDs to verify that we know ++ about the device */ ++ while (i != numIds && !is_valid) { ++ if (product == sanei_epson_usb_product_ids[i]) ++ is_valid = SANE_TRUE; ++ i++; + } + +- if (dev->maxDepth >= 12 || dev->maxDepth == 0) { +- if (esci_set_data_format(s, 12) == SANE_STATUS_GOOD) +- e2_add_depth(dev, 12); ++ if (is_valid == SANE_FALSE) { ++ DBG(1, ++ "the device at %s is not a supported EPSON scanner (product id=0x%x)\n", ++ s->hw->sane.name, product); ++ return SANE_STATUS_INVAL; + } ++ ++ DBG(1, ++ "found valid EPSON scanner: 0x%x/0x%x (vendorID/productID)\n", ++ vendor, product); + +- /* add default depth */ +- e2_add_depth(dev, 8); +- +- DBG(1, "maximum supported color depth: %d\n", dev->maxDepth); +- +- /* +- * Check for "request focus position" command. If this command is +- * supported, then the scanner does also support the "set focus +- * position" command. +- * XXX ??? +- */ +- +- if (esci_request_focus_position(s, &s->currentFocusPosition) == +- SANE_STATUS_GOOD) { +- DBG(1, "setting focus is supported\n"); +- dev->focusSupport = SANE_TRUE; +- s->opt[OPT_FOCUS].cap &= ~SANE_CAP_INACTIVE; +- +- /* reflect the current focus position in the GUI */ +- if (s->currentFocusPosition < 0x4C) { +- /* focus on glass */ +- s->val[OPT_FOCUS].w = 0; +- } else { +- /* focus 2.5mm above glass */ +- s->val[OPT_FOCUS].w = 1; +- } +- +- } else { +- DBG(1, "setting focus is not supported\n"); +- dev->focusSupport = SANE_FALSE; +- s->opt[OPT_FOCUS].cap |= SANE_CAP_INACTIVE; +- s->val[OPT_FOCUS].w = 0; /* on glass - just in case */ +- } ++ return SANE_STATUS_GOOD; ++} + +- /* Set defaults for no extension. */ +- dev->x_range = &dev->fbf_x_range; +- dev->y_range = &dev->fbf_y_range; ++static int num_devices; /* number of scanners attached to backend */ ++static Epson_Device *first_dev; /* first EPSON scanner in list */ + +- /* +- * Correct for a firmware bug in some Perfection 1650 scanners: +- * Firmware version 1.08 reports only half the vertical scan area, we have +- * to double the number. To find out if we have to do this, we just compare +- * is the vertical range is smaller than the horizontal range. +- */ ++static struct Epson_Scanner * ++scanner_create(struct Epson_Device *dev, SANE_Status *status) ++{ ++ struct Epson_Scanner *s; + +- if ((dev->x_range->max - dev->x_range->min) > +- (dev->y_range->max - dev->y_range->min)) { +- DBG(1, "found buggy scan area, doubling it.\n"); +- dev->y_range->max += (dev->y_range->max - dev->y_range->min); +- dev->need_double_vertical = SANE_TRUE; +- dev->need_color_reorder = SANE_TRUE; ++ s = malloc(sizeof(struct Epson_Scanner)); ++ if (s == NULL) { ++ *status = SANE_STATUS_NO_MEM; ++ return NULL; + } + +- /* FS F, request scanner status */ +- if (dev->extended_commands) { +- unsigned char buf[16]; ++ memset(s, 0x00, sizeof(struct Epson_Scanner)); + +- status = esci_request_scanner_status(s, buf); +- if (status != SANE_STATUS_GOOD) +- return status; +- } ++ s->fd = -1; ++ s->hw = dev; + +- return status; ++ return s; + } + +-/* attach device to backend */ +- +-static SANE_Status +-attach(const char *name, Epson_Device * *devp, int type) ++static struct Epson_Scanner * ++device_detect(const char *name, int type, SANE_Status *status) + { +- SANE_Status status; +- Epson_Scanner *s; ++ struct Epson_Scanner *s; + struct Epson_Device *dev; +- int port; +- +- DBG(1, "epson2 backend, version %i.%i.%i\n", +- EPSON2_VERSION, EPSON2_REVISION, EPSON2_BUILD); +- +- DBG(7, "%s: devname = %s, type = %d\n", __func__, name, type); + ++ /* try to find the device in our list */ + for (dev = first_dev; dev; dev = dev->next) { + if (strcmp(dev->sane.name, name) == 0) { +- if (devp) { +- *devp = dev; +- } +- return SANE_STATUS_GOOD; ++ ++ /* the device might have been just probed, ++ * sleep a bit. ++ */ ++ if (dev->connection == SANE_EPSON_NET) ++ sleep(1); ++ ++ return scanner_create(dev, status); + } + } + +- ++ if (type == SANE_EPSON_NODEV) { ++ *status = SANE_STATUS_INVAL; ++ return NULL; ++ } ++ + /* alloc and clear our device structure */ + dev = malloc(sizeof(*dev)); + if (!dev) { +- DBG(1, "out of memory (line %d)\n", __LINE__); +- return SANE_STATUS_NO_MEM; ++ *status = SANE_STATUS_NO_MEM; ++ return NULL; + } + memset(dev, 0x00, sizeof(struct Epson_Device)); + +- /* check for PIO devices */ +- /* can we convert the device name to an integer? This is only possible +- with PIO devices */ +- if (type != SANE_EPSON_NET) { +- port = atoi(name); +- if (port != 0) +- type = SANE_EPSON_PIO; +- } +- +- if (strncmp +- (name, SANE_EPSON_CONFIG_PIO, +- strlen(SANE_EPSON_CONFIG_PIO)) == 0) { +- /* we have a match for the PIO string and adjust the device name */ +- name += strlen(SANE_EPSON_CONFIG_PIO); +- name = sanei_config_skip_whitespace(name); +- type = SANE_EPSON_PIO; +- } +- +- +- s = malloc(sizeof(struct Epson_Scanner)); ++ s = scanner_create(dev, status); + if (s == NULL) +- return SANE_STATUS_NO_MEM; +- +- memset(s, 0x00, sizeof(struct Epson_Scanner)); +- +- +- /* +- * set dummy values. +- */ +- +- s->fd = -1; +- s->hw = dev; +- +- dev->name = NULL; +- dev->model = NULL; +- +- dev->sane.name = NULL; +- dev->sane.model = NULL; +- +- dev->sane.type = "flatbed scanner"; +- dev->sane.vendor = "Epson"; +- +- dev->optical_res = 0; /* just to have it initialized */ +- dev->color_shuffle = SANE_FALSE; +- dev->extension = SANE_FALSE; +- dev->use_extension = SANE_FALSE; +- +- dev->need_color_reorder = SANE_FALSE; +- dev->need_double_vertical = SANE_FALSE; +- +- dev->cmd = &epson_cmd[EPSON_LEVEL_DEFAULT]; /* default function level */ +- dev->connection = type; +- +- /* Change default level when using a network connection */ +- if (dev->connection == SANE_EPSON_NET) +- dev->cmd = &epson_cmd[EPSON_LEVEL_B7]; +- +- DBG(3, "%s: opening %s, type = %d\n", __func__, name, +- dev->connection); +- +- dev->last_res = 0; +- dev->last_res_preview = 0; /* set resolution to safe values */ +- +- dev->res_list_size = 0; +- dev->res_list = NULL; +- +- if (dev->connection == SANE_EPSON_NET) { +- unsigned char buf[5]; +- +- if (strncmp(name, "autodiscovery", 13) == 0) { +- e2_network_discovery(); +- status = SANE_STATUS_INVAL; +- goto free; +- } +- +- status = sanei_tcp_open(name, 1865, &s->fd); +- if (status != SANE_STATUS_GOOD) { +- DBG(1, "%s: %s open failed: %s\n", __func__, +- name, sane_strstatus(status)); +- goto free; +- } +- +- s->netlen = 0; +- +- /* the scanner sends a kind of welcome msg */ +- /* XXX use a shorter timeout here */ +- e2_recv(s, buf, 5, &status); +- +- /* lock the scanner for use by sane */ +- sanei_epson_net_lock(s); +- +- } else if (dev->connection == SANE_EPSON_SCSI) { +- char buf[INQUIRY_BUF_SIZE + 1]; +- size_t buf_size = INQUIRY_BUF_SIZE; +- +- char *vendor = buf + 8; +- char *model = buf + 16; +- char *rev = buf + 32; +- +- status = sanei_scsi_open(name, &s->fd, +- sanei_epson2_scsi_sense_handler, +- NULL); +- if (status != SANE_STATUS_GOOD) { +- DBG(1, "%s: open failed: %s\n", __func__, +- sane_strstatus(status)); +- goto free; +- } +- status = sanei_epson2_scsi_inquiry(s->fd, buf, &buf_size); +- if (status != SANE_STATUS_GOOD) { +- DBG(1, "%s: inquiry failed: %s\n", __func__, +- sane_strstatus(status)); +- goto free; +- } +- +- buf[INQUIRY_BUF_SIZE] = 0; +- DBG(1, "inquiry data:\n"); +- DBG(1, " vendor : %.8s\n", vendor); +- DBG(1, " model : %.16s\n", model); +- DBG(1, " revision: %.4s\n", rev); +- +- if (buf[0] != TYPE_PROCESSOR) { +- DBG(1, "%s: device is not of processor type (%d)\n", +- __func__, buf[0]); +- return SANE_STATUS_INVAL; +- } +- +- if (strncmp(vendor, "EPSON", 5) != 0) { +- DBG(1, +- "%s: device doesn't look like an EPSON scanner\n", +- __func__); +- close_scanner(s); +- return SANE_STATUS_INVAL; +- } ++ return NULL; + +- if (strncmp(model, "SCANNER ", 8) != 0 +- && strncmp(model, "FilmScan 200", 12) != 0 +- && strncmp(model, "Perfection", 10) != 0 +- && strncmp(model, "Expression", 10) != 0 +- && strncmp(model, "GT", 2) != 0) { +- DBG(1, "%s: this EPSON scanner is not supported\n", +- __func__); +- close_scanner(s); +- return SANE_STATUS_INVAL; +- } ++ e2_dev_init(dev, name, type); + +- if (strncmp(model, "FilmScan 200", 12) == 0) { +- dev->sane.type = "film scanner"; +- e2_set_model(s, (unsigned char *) model, 12); +- } +- } +- /* use the SANEI functions to handle a PIO device */ +- else if (dev->connection == SANE_EPSON_PIO) { +- if (SANE_STATUS_GOOD != +- (status = sanei_pio_open(name, &s->fd))) { +- DBG(1, +- "cannot open %s as a parallel-port device: %s\n", +- name, sane_strstatus(status)); +- goto free; +- } ++ *status = open_scanner(s); ++ if (*status != SANE_STATUS_GOOD) { ++ free(s); ++ return NULL; + } +- /* use the SANEI functions to handle a USB device */ +- else if (dev->connection == SANE_EPSON_USB) { +- SANE_Word vendor; +- SANE_Word product; +- SANE_Bool isLibUSB; +- +- isLibUSB = (strncmp(name, "libusb:", strlen("libusb:")) == 0); +- +- if ((!isLibUSB) && (strlen(name) == 0)) { +- int i; +- int numIds; +- +- numIds = sanei_epson_getNumberOfUSBProductIds(); +- +- for (i = 0; i < numIds; i++) { +- product = sanei_epson_usb_product_ids[i]; +- vendor = 0x4b8; + +- status = sanei_usb_find_devices(vendor, +- product, +- attach_one_usb); +- } +- return SANE_STATUS_INVAL; /* return - the attach_one_usb() +- will take care of this */ +- } +- +- status = sanei_usb_open(name, &s->fd); +- +- if (status != SANE_STATUS_GOOD) { +- goto free; +- } +- +- /* if the sanei_usb_get_vendor_product call is not supported, +- then we just ignore this and rely on the user to config +- the correct device. +- */ +- +- if (sanei_usb_get_vendor_product(s->fd, &vendor, &product) == +- SANE_STATUS_GOOD) { +- int i; /* loop variable */ +- int numIds; +- SANE_Bool is_valid; ++ /* from now on, close_scanner() must be called */ + +- /* check the vendor ID to see if we are dealing with an EPSON device */ +- if (vendor != SANE_EPSON_VENDOR_ID) { +- /* this is not a supported vendor ID */ +- DBG(1, +- "the device at %s is not manufactured by EPSON (vendor id=0x%x)\n", +- name, vendor); +- sanei_usb_close(s->fd); +- s->fd = -1; +- return SANE_STATUS_INVAL; +- } ++ /* SCSI and USB requires special care */ ++ if (dev->connection == SANE_EPSON_SCSI) { + +- numIds = sanei_epson_getNumberOfUSBProductIds(); +- is_valid = SANE_FALSE; +- i = 0; ++ *status = detect_scsi(s); + +- /* check all known product IDs to verify that we know +- about the device */ +- while (i != numIds && !is_valid) { +- if (product == sanei_epson_usb_product_ids[i]) +- is_valid = SANE_TRUE; +- i++; +- } ++ } else if (dev->connection == SANE_EPSON_USB) { + +- if (is_valid == SANE_FALSE) { +- DBG(1, +- "the device at %s is not a supported EPSON scanner (product id=0x%x)\n", +- name, product); +- sanei_usb_close(s->fd); +- s->fd = -1; +- return SANE_STATUS_INVAL; +- } +- DBG(1, +- "found valid EPSON scanner: 0x%x/0x%x (vendorID/productID)\n", +- vendor, product); +- } else +- DBG(1, +- "cannot use IOCTL interface to verify that device is a scanner - will continue\n"); ++ *status = detect_usb(s); + } + ++ if (*status != SANE_STATUS_GOOD) ++ goto close; ++ + /* set name and model (if not already set) */ + if (dev->model == NULL) + e2_set_model(s, (unsigned char *) "generic", 7); +@@ -1469,206 +716,157 @@ + dev->name = strdup(name); + dev->sane.name = dev->name; + +- +- /* Issue a test unit ready SCSI command. The FilmScan 200 +- * requires it for a sort of "wake up". We might eventually +- * get the return code and reissue it in case of failure. +- */ +- if (dev->connection == SANE_EPSON_SCSI) +- sanei_epson2_scsi_test_unit_ready(s->fd); +- + /* ESC @, reset */ +- esci_reset(s); +- +- status = e2_discover_capabilities(s); +- if (status != SANE_STATUS_GOOD) +- goto free; +- +- /* If we have been unable to obtain supported resolutions +- * due to the fact we are on the network transport, +- * add some convenient ones +- */ +- +- if (dev->res_list_size == 0 && dev->connection == SANE_EPSON_NET) { +- +- int val = (dev->dpi_range.min < 150) ? 150 : dev->dpi_range.min; +- +- DBG(1, "networked scanner, faking resolution list (%d-%d)\n", +- dev->dpi_range.min, dev->dpi_range.max); +- +- if (dev->dpi_range.min <= 50) +- e2_add_resolution(s, 50); +- +- if (dev->dpi_range.min <= 75) +- e2_add_resolution(s, 75); ++ *status = esci_reset(s); ++ if (*status != SANE_STATUS_GOOD) ++ goto close; + +- if (dev->dpi_range.min <= 100) +- e2_add_resolution(s, 100); ++ *status = e2_discover_capabilities(s); ++ if (*status != SANE_STATUS_GOOD) ++ goto close; + +- while (val <= dev->dpi_range.max) { +- e2_add_resolution(s, val); +- val *= 2; +- } ++ if (source_list[0] == NULL || dev->dpi_range.min == 0) { ++ DBG(1, "something is wrong in the discovery process, aborting.\n"); ++ *status = SANE_STATUS_IO_ERROR; ++ goto close; + } + +- /* +- * Copy the resolution list to the resolution_list array so that the frontend can +- * display the correct values +- */ ++ e2_dev_post_init(dev); + +- dev->resolution_list = +- malloc((dev->res_list_size + 1) * sizeof(SANE_Word)); ++ *status = esci_reset(s); ++ if (*status != SANE_STATUS_GOOD) ++ goto close; + +- if (dev->resolution_list == NULL) { +- status = SANE_STATUS_NO_MEM; +- goto free; +- } ++ DBG(1, "scanner model: %s\n", dev->model); + +- *(dev->resolution_list) = dev->res_list_size; +- memcpy(&(dev->resolution_list[1]), dev->res_list, +- dev->res_list_size * sizeof(SANE_Word)); ++ /* add this scanner to the device list */ + +- /* XXX necessary? */ +- esci_reset(s); ++ num_devices++; ++ dev->next = first_dev; ++ first_dev = dev; + +- DBG(1, "scanner model: %s\n", dev->model); ++ return s; + +- /* establish defaults */ +- dev->need_reset_on_source_change = SANE_FALSE; ++close: ++ close_scanner(s); ++ free(s); ++ return NULL; ++} + +- if (e2_model(s, "ES-9000H") || e2_model(s, "GT-30000")) { +- dev->cmd->set_focus_position = 0; +- dev->cmd->feed = 0x19; +- } + +- if (e2_model(s, "GT-8200") || e2_model(s, "Perfection1650") +- || e2_model(s, "Perfection1640") || e2_model(s, "GT-8700")) { +- dev->cmd->feed = 0; +- dev->cmd->set_focus_position = 0; +- dev->need_reset_on_source_change = SANE_TRUE; +- } ++static SANE_Status ++attach(const char *name, int type) ++{ ++ SANE_Status status; ++ Epson_Scanner *s; + +- /* we are done with this one, prepare for the next scanner */ +- num_devices++; +- dev->next = first_dev; +- first_dev = dev; ++ DBG(7, "%s: devname = %s, type = %d\n", __func__, name, type); + +- if (devp) +- *devp = dev; ++ s = device_detect(name, type, &status); ++ if(s == NULL) ++ return status; + +- free: + close_scanner(s); + free(s); + return status; + } + +-/* +- * Part of the SANE API: Attaches the scanner with the device name in *dev. +- */ +- + static SANE_Status +-attach_one(const char *dev) ++attach_one_scsi(const char *dev) + { + DBG(7, "%s: dev = %s\n", __func__, dev); +- return attach(dev, 0, SANE_EPSON_SCSI); ++ return attach(dev, SANE_EPSON_SCSI); + } + + SANE_Status + attach_one_usb(const char *dev) + { + DBG(7, "%s: dev = %s\n", __func__, dev); +- return attach(dev, 0, SANE_EPSON_USB); ++ return attach(dev, SANE_EPSON_USB); + } + + static SANE_Status + attach_one_net(const char *dev) + { ++ char name[18]; ++ + DBG(7, "%s: dev = %s\n", __func__, dev); +- return attach(dev, 0, SANE_EPSON_NET); ++ ++ strcpy(name, "net:"); ++ strcat(name, dev); ++ return attach(name, SANE_EPSON_NET); + } + +-SANE_Status +-sane_init(SANE_Int * version_code, SANE_Auth_Callback authorize) ++static SANE_Status ++attach_one_pio(const char *dev) + { +- size_t len; +- FILE *fp; ++ DBG(7, "%s: dev = %s\n", __func__, dev); ++ return attach(dev, SANE_EPSON_PIO); ++} + +- authorize = authorize; /* get rid of compiler warning */ ++static SANE_Status ++attach_one_config(SANEI_Config __sane_unused__ *config, const char *line) ++{ ++ int vendor, product; + +- /* sanei_authorization(devicename, STRINGIFY(BACKEND_NAME), auth_callback); */ ++ int len = strlen(line); + +- DBG_INIT(); +- DBG(2, "%s: " PACKAGE " " VERSION "\n", __func__); ++ DBG(7, "%s: len = %d, line = %s\n", __func__, len, line); ++ ++ if (sscanf(line, "usb %i %i", &vendor, &product) == 2) { ++ /* add the vendor and product IDs to the list of ++ known devices before we call the attach function */ + +- if (version_code != NULL) +- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, +- EPSON2_BUILD); ++ int numIds = sanei_epson_getNumberOfUSBProductIds(); + +- sanei_usb_init(); ++ if (vendor != 0x4b8) ++ return SANE_STATUS_INVAL; /* this is not an EPSON device */ + +- if ((fp = sanei_config_open(EPSON2_CONFIG_FILE))) { +- char line[PATH_MAX]; ++ sanei_epson_usb_product_ids[numIds - 1] = product; ++ sanei_usb_attach_matching_devices(line, attach_one_usb); + +- DBG(3, "%s: reading config file, %s\n", __func__, +- EPSON2_CONFIG_FILE); ++ } else if (strncmp(line, "usb", 3) == 0 && len == 3) { + +- while (sanei_config_read(line, sizeof(line), fp)) { +- int vendor, product; ++ int i, numIds; + +- if (line[0] == '#') /* ignore line comments */ +- continue; ++ numIds = sanei_epson_getNumberOfUSBProductIds(); + +- len = strlen(line); +- if (len == 0) +- continue; /* ignore empty lines */ ++ for (i = 0; i < numIds; i++) { ++ sanei_usb_find_devices(0x4b8, ++ sanei_epson_usb_product_ids[i], attach_one_usb); ++ } + +- DBG(120, " %s\n", line); ++ } else if (strncmp(line, "net", 3) == 0) { + +- if (sscanf(line, "usb %i %i", &vendor, &product) == 2) { +- int numIds; ++ /* remove the "net" sub string */ ++ const char *name = sanei_config_skip_whitespace(line + 3); + +- /* add the vendor and product IDs to the list of +- known devices before we call the attach function */ +- numIds = sanei_epson_getNumberOfUSBProductIds +- (); +- if (vendor != 0x4b8) +- continue; /* this is not an EPSON device */ ++ if (strncmp(name, "autodiscovery", 13) == 0) ++ e2_network_discovery(); ++ else ++ attach_one_net(name); + +- sanei_epson_usb_product_ids[numIds - 1] = +- product; +- sanei_usb_attach_matching_devices(line, +- attach_one_usb); +- } else if (strncmp(line, "usb", 3) == 0) { +- const char *name; +- /* remove the "usb" sub string */ +- name = sanei_config_skip_whitespace(line + 3); +- attach_one_usb(name); +- } else if (strncmp(line, "net", 3) == 0) { +- const char *name; +- /* remove the "net" sub string */ +- name = sanei_config_skip_whitespace(line + 3); +- attach_one_net(name); +- } else { +- sanei_config_attach_matching_devices(line, +- attach_one); +- } +- } +- fclose(fp); +- } ++ } else if (strncmp(line, "pio", 3) == 0) { + +- /* read the option section and assign the connection type to the +- scanner structure - which we don't have at this time. So I have +- to come up with something :-) */ ++ /* remove the "pio" sub string */ ++ const char *name = sanei_config_skip_whitespace(line + 3); ++ ++ attach_one_pio(name); ++ ++ } else { ++ sanei_config_attach_matching_devices(line, attach_one_scsi); ++ } + + return SANE_STATUS_GOOD; + } + +-/* Clean up the list of attached scanners. */ +-void +-sane_exit(void) ++static void ++free_devices(void) + { + Epson_Device *dev, *next; + ++ DBG(5, "%s\n", __func__); ++ + for (dev = first_dev; dev; dev = next) { + next = dev->next; + free(dev->name); +@@ -1677,20 +875,56 @@ + } + + free(devlist); ++ ++ first_dev = NULL; ++} ++ ++static void ++probe_devices(void) ++{ ++ DBG(5, "%s\n", __func__); ++ ++ free_devices(); ++ ++ sanei_configure_attach(EPSON2_CONFIG_FILE, NULL, ++ attach_one_config); + } + + SANE_Status +-sane_get_devices(const SANE_Device * **device_list, SANE_Bool local_only) ++sane_init(SANE_Int *version_code, SANE_Auth_Callback __sane_unused__ authorize) ++{ ++ DBG_INIT(); ++ DBG(2, "%s: " PACKAGE " " VERSION "\n", __func__); ++ ++ DBG(1, "epson2 backend, version %i.%i.%i\n", ++ EPSON2_VERSION, EPSON2_REVISION, EPSON2_BUILD); ++ ++ if (version_code != NULL) ++ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, ++ EPSON2_BUILD); ++ ++ sanei_usb_init(); ++ ++ return SANE_STATUS_GOOD; ++} ++ ++/* Clean up the list of attached scanners. */ ++void ++sane_exit(void) ++{ ++ DBG(5, "%s\n", __func__); ++ free_devices(); ++} ++ ++SANE_Status ++sane_get_devices(const SANE_Device ***device_list, SANE_Bool __sane_unused__ local_only) + { + Epson_Device *dev; + int i; + + DBG(5, "%s\n", __func__); + +- local_only = local_only; /* just to get rid of the compailer warning */ +- +- if (devlist) +- free(devlist); ++ probe_devices(); + + devlist = malloc((num_devices + 1) * sizeof(devlist[0])); + if (!devlist) { +@@ -1698,8 +932,10 @@ + return SANE_STATUS_NO_MEM; + } + +- for (i = 0, dev = first_dev; i < num_devices; dev = dev->next, i++) { +- DBG(1, " %d: %s\n", i, dev->model); ++ DBG(5, "%s - results:\n", __func__); ++ ++ for (i = 0, dev = first_dev; i < num_devices && dev; dev = dev->next, i++) { ++ DBG(1, " %d (%d): %s\n", i, dev->connection, dev->model); + devlist[i] = &dev->sane; + } + +@@ -1711,13 +947,11 @@ + } + + static SANE_Status +-init_options(Epson_Scanner * s) ++init_options(Epson_Scanner *s) + { + int i; + +- DBG(5, "%s\n", __func__); +- +- for (i = 0; i < NUM_OPTIONS; ++i) { ++ for (i = 0; i < NUM_OPTIONS; i++) { + s->opt[i].size = sizeof(SANE_Word); + s->opt[i].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; + } +@@ -1745,6 +979,10 @@ + s->opt[OPT_MODE].constraint.string_list = mode_list; + s->val[OPT_MODE].w = 0; /* Binary */ + ++ /* disable infrared on unsupported scanners */ ++ if (!e2_model(s, "GT-X800") && !e2_model(s, "GT-X700")) ++ mode_list[MODE_INFRARED] = NULL; ++ + /* bit depth */ + s->opt[OPT_BIT_DEPTH].name = SANE_NAME_BIT_DEPTH; + s->opt[OPT_BIT_DEPTH].title = SANE_TITLE_BIT_DEPTH; +@@ -1752,11 +990,11 @@ + s->opt[OPT_BIT_DEPTH].type = SANE_TYPE_INT; + s->opt[OPT_BIT_DEPTH].unit = SANE_UNIT_NONE; + s->opt[OPT_BIT_DEPTH].constraint_type = SANE_CONSTRAINT_WORD_LIST; +- s->opt[OPT_BIT_DEPTH].constraint.word_list = bitDepthList; ++ s->opt[OPT_BIT_DEPTH].constraint.word_list = s->hw->depth_list; + s->opt[OPT_BIT_DEPTH].cap |= SANE_CAP_INACTIVE; +- s->val[OPT_BIT_DEPTH].w = bitDepthList[1]; /* the first "real" element is the default */ ++ s->val[OPT_BIT_DEPTH].w = s->hw->depth_list[1]; /* the first "real" element is the default */ + +- if (bitDepthList[0] == 1) /* only one element in the list -> hide the option */ ++ if (s->hw->depth_list[0] == 1) /* only one element in the list -> hide the option */ + s->opt[OPT_BIT_DEPTH].cap |= SANE_CAP_INACTIVE; + + /* halftone */ +@@ -1768,6 +1006,7 @@ + s->opt[OPT_HALFTONE].size = max_string_size(halftone_list_7); + s->opt[OPT_HALFTONE].constraint_type = SANE_CONSTRAINT_STRING_LIST; + ++ /* XXX use defines */ + if (s->hw->level >= 7) + s->opt[OPT_HALFTONE].constraint.string_list = halftone_list_7; + else if (s->hw->level >= 4) +@@ -1777,9 +1016,8 @@ + + s->val[OPT_HALFTONE].w = 1; /* Halftone A */ + +- if (!s->hw->cmd->set_halftoning) { ++ if (!s->hw->cmd->set_halftoning) + s->opt[OPT_HALFTONE].cap |= SANE_CAP_INACTIVE; +- } + + /* dropout */ + s->opt[OPT_DROPOUT].name = "dropout"; +@@ -1804,9 +1042,8 @@ + s->opt[OPT_BRIGHTNESS].constraint.range = &s->hw->cmd->bright_range; + s->val[OPT_BRIGHTNESS].w = 0; /* Normal */ + +- if (!s->hw->cmd->set_bright) { ++ if (!s->hw->cmd->set_bright) + s->opt[OPT_BRIGHTNESS].cap |= SANE_CAP_INACTIVE; +- } + + /* sharpness */ + s->opt[OPT_SHARPNESS].name = "sharpness"; +@@ -1830,6 +1067,7 @@ + s->opt[OPT_GAMMA_CORRECTION].type = SANE_TYPE_STRING; + s->opt[OPT_GAMMA_CORRECTION].constraint_type = + SANE_CONSTRAINT_STRING_LIST; ++ + /* + * special handling for D1 function level - at this time I'm not + * testing for D1, I'm just assuming that all D level scanners will +@@ -1854,26 +1092,8 @@ + gamma_params = gamma_params_ab; + } + +- if (!s->hw->cmd->set_gamma) { ++ if (!s->hw->cmd->set_gamma) + s->opt[OPT_GAMMA_CORRECTION].cap |= SANE_CAP_INACTIVE; +- } +- +- +- /* gamma vector */ +- +-/* +- s->opt[ OPT_GAMMA_VECTOR].name = SANE_NAME_GAMMA_VECTOR; +- s->opt[ OPT_GAMMA_VECTOR].title = SANE_TITLE_GAMMA_VECTOR; +- s->opt[ OPT_GAMMA_VECTOR].desc = SANE_DESC_GAMMA_VECTOR; +- +- s->opt[ OPT_GAMMA_VECTOR].type = SANE_TYPE_INT; +- s->opt[ OPT_GAMMA_VECTOR].unit = SANE_UNIT_NONE; +- s->opt[ OPT_GAMMA_VECTOR].size = 256 * sizeof (SANE_Word); +- s->opt[ OPT_GAMMA_VECTOR].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[ OPT_GAMMA_VECTOR].constraint.range = &u8_range; +- s->val[ OPT_GAMMA_VECTOR].wa = &s->gamma_table [ 0] [ 0]; +-*/ +- + + /* red gamma vector */ + s->opt[OPT_GAMMA_VECTOR_R].name = SANE_NAME_GAMMA_VECTOR_R; +@@ -1887,7 +1107,6 @@ + s->opt[OPT_GAMMA_VECTOR_R].constraint.range = &u8_range; + s->val[OPT_GAMMA_VECTOR_R].wa = &s->gamma_table[0][0]; + +- + /* green gamma vector */ + s->opt[OPT_GAMMA_VECTOR_G].name = SANE_NAME_GAMMA_VECTOR_G; + s->opt[OPT_GAMMA_VECTOR_G].title = SANE_TITLE_GAMMA_VECTOR_G; +@@ -1917,13 +1136,11 @@ + && gamma_userdefined[s->val[OPT_GAMMA_CORRECTION].w] == + SANE_TRUE) { + +-/* s->opt[ OPT_GAMMA_VECTOR].cap &= ~SANE_CAP_INACTIVE; */ + s->opt[OPT_GAMMA_VECTOR_R].cap &= ~SANE_CAP_INACTIVE; + s->opt[OPT_GAMMA_VECTOR_G].cap &= ~SANE_CAP_INACTIVE; + s->opt[OPT_GAMMA_VECTOR_B].cap &= ~SANE_CAP_INACTIVE; + } else { + +-/* s->opt[ OPT_GAMMA_VECTOR].cap |= SANE_CAP_INACTIVE; */ + s->opt[OPT_GAMMA_VECTOR_R].cap |= SANE_CAP_INACTIVE; + s->opt[OPT_GAMMA_VECTOR_G].cap |= SANE_CAP_INACTIVE; + s->opt[OPT_GAMMA_VECTOR_B].cap |= SANE_CAP_INACTIVE; +@@ -1948,20 +1165,17 @@ + s->opt[OPT_COLOR_CORRECTION].name = "color-correction"; + s->opt[OPT_COLOR_CORRECTION].title = SANE_I18N("Color correction"); + s->opt[OPT_COLOR_CORRECTION].desc = +- SANE_I18N +- ("Sets the color correction table for the selected output device."); ++ SANE_I18N("Sets the color correction table for the selected output device."); + + s->opt[OPT_COLOR_CORRECTION].type = SANE_TYPE_STRING; +- s->opt[OPT_COLOR_CORRECTION].size = 32; ++ s->opt[OPT_COLOR_CORRECTION].size = max_string_size(color_list); + s->opt[OPT_COLOR_CORRECTION].cap |= SANE_CAP_ADVANCED; +- s->opt[OPT_COLOR_CORRECTION].constraint_type = +- SANE_CONSTRAINT_STRING_LIST; ++ s->opt[OPT_COLOR_CORRECTION].constraint_type = SANE_CONSTRAINT_STRING_LIST; + s->opt[OPT_COLOR_CORRECTION].constraint.string_list = color_list; +- s->val[OPT_COLOR_CORRECTION].w = 5; /* scanner default: CRT monitors */ ++ s->val[OPT_COLOR_CORRECTION].w = 0; + +- if (!s->hw->cmd->set_color_correction) { ++ if (!s->hw->cmd->set_color_correction) + s->opt[OPT_COLOR_CORRECTION].cap |= SANE_CAP_INACTIVE; +- } + + /* resolution */ + s->opt[OPT_RESOLUTION].name = SANE_NAME_SCAN_RESOLUTION; +@@ -1985,29 +1199,10 @@ + s->opt[OPT_THRESHOLD].constraint.range = &u8_range; + s->val[OPT_THRESHOLD].w = 0x80; + +- if (!s->hw->cmd->set_threshold) { ++ if (!s->hw->cmd->set_threshold) + s->opt[OPT_THRESHOLD].cap |= SANE_CAP_INACTIVE; +- } +- +- s->opt[OPT_CCT_GROUP].title = +- SANE_I18N("Color correction coefficients"); +- s->opt[OPT_CCT_GROUP].desc = +- SANE_I18N("Matrix multiplication of RGB"); +- s->opt[OPT_CCT_GROUP].type = SANE_TYPE_GROUP; +- s->opt[OPT_CCT_GROUP].cap = SANE_CAP_ADVANCED; +- +- +- /* color correction coefficients */ +- s->opt[OPT_CCT_1].name = "cct-1"; +- s->opt[OPT_CCT_2].name = "cct-2"; +- s->opt[OPT_CCT_3].name = "cct-3"; +- s->opt[OPT_CCT_4].name = "cct-4"; +- s->opt[OPT_CCT_5].name = "cct-5"; +- s->opt[OPT_CCT_6].name = "cct-6"; +- s->opt[OPT_CCT_7].name = "cct-7"; +- s->opt[OPT_CCT_8].name = "cct-8"; +- s->opt[OPT_CCT_9].name = "cct-9"; + ++/* + s->opt[OPT_CCT_1].title = SANE_I18N("Green"); + s->opt[OPT_CCT_2].title = SANE_I18N("Shift green to red"); + s->opt[OPT_CCT_3].title = SANE_I18N("Shift green to blue"); +@@ -2031,72 +1226,44 @@ + SANE_I18N("Adds to green based on blue level"); + s->opt[OPT_CCT_8].desc = SANE_I18N("Adds to red based on blue level"); + s->opt[OPT_CCT_9].desc = SANE_I18N("Controls blue level"); +- +- s->opt[OPT_CCT_1].type = SANE_TYPE_INT; +- s->opt[OPT_CCT_2].type = SANE_TYPE_INT; +- s->opt[OPT_CCT_3].type = SANE_TYPE_INT; +- s->opt[OPT_CCT_4].type = SANE_TYPE_INT; +- s->opt[OPT_CCT_5].type = SANE_TYPE_INT; +- s->opt[OPT_CCT_6].type = SANE_TYPE_INT; +- s->opt[OPT_CCT_7].type = SANE_TYPE_INT; +- s->opt[OPT_CCT_8].type = SANE_TYPE_INT; +- s->opt[OPT_CCT_9].type = SANE_TYPE_INT; +- +- s->opt[OPT_CCT_1].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- s->opt[OPT_CCT_2].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- s->opt[OPT_CCT_3].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- s->opt[OPT_CCT_4].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- s->opt[OPT_CCT_5].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- s->opt[OPT_CCT_6].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- s->opt[OPT_CCT_7].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- s->opt[OPT_CCT_8].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- s->opt[OPT_CCT_9].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; +- +- s->opt[OPT_CCT_1].unit = SANE_UNIT_NONE; +- s->opt[OPT_CCT_2].unit = SANE_UNIT_NONE; +- s->opt[OPT_CCT_3].unit = SANE_UNIT_NONE; +- s->opt[OPT_CCT_4].unit = SANE_UNIT_NONE; +- s->opt[OPT_CCT_5].unit = SANE_UNIT_NONE; +- s->opt[OPT_CCT_6].unit = SANE_UNIT_NONE; +- s->opt[OPT_CCT_7].unit = SANE_UNIT_NONE; +- s->opt[OPT_CCT_8].unit = SANE_UNIT_NONE; +- s->opt[OPT_CCT_9].unit = SANE_UNIT_NONE; +- +- s->opt[OPT_CCT_1].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[OPT_CCT_2].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[OPT_CCT_3].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[OPT_CCT_4].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[OPT_CCT_5].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[OPT_CCT_6].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[OPT_CCT_7].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[OPT_CCT_8].constraint_type = SANE_CONSTRAINT_RANGE; +- s->opt[OPT_CCT_9].constraint_type = SANE_CONSTRAINT_RANGE; +- +- s->opt[OPT_CCT_1].constraint.range = &s8_range; +- s->opt[OPT_CCT_2].constraint.range = &s8_range; +- s->opt[OPT_CCT_3].constraint.range = &s8_range; +- s->opt[OPT_CCT_4].constraint.range = &s8_range; +- s->opt[OPT_CCT_5].constraint.range = &s8_range; +- s->opt[OPT_CCT_6].constraint.range = &s8_range; +- s->opt[OPT_CCT_7].constraint.range = &s8_range; +- s->opt[OPT_CCT_8].constraint.range = &s8_range; +- s->opt[OPT_CCT_9].constraint.range = &s8_range; +- +- s->val[OPT_CCT_1].w = 32; +- s->val[OPT_CCT_2].w = 0; +- s->val[OPT_CCT_3].w = 0; +- s->val[OPT_CCT_4].w = 0; +- s->val[OPT_CCT_5].w = 32; +- s->val[OPT_CCT_6].w = 0; +- s->val[OPT_CCT_7].w = 0; +- s->val[OPT_CCT_8].w = 0; +- s->val[OPT_CCT_9].w = 32; ++*/ + + /* "Advanced" group: */ + s->opt[OPT_ADVANCED_GROUP].title = SANE_I18N("Advanced"); + s->opt[OPT_ADVANCED_GROUP].desc = ""; + s->opt[OPT_ADVANCED_GROUP].type = SANE_TYPE_GROUP; +- s->opt[OPT_ADVANCED_GROUP].cap = SANE_CAP_ADVANCED; ++ s->opt[OPT_ADVANCED_GROUP].cap |= SANE_CAP_ADVANCED; ++ ++ /* "Color correction" group: */ ++ s->opt[OPT_CCT_GROUP].title = SANE_I18N("Color correction"); ++ s->opt[OPT_CCT_GROUP].desc = ""; ++ s->opt[OPT_CCT_GROUP].type = SANE_TYPE_GROUP; ++ s->opt[OPT_CCT_GROUP].cap |= SANE_CAP_ADVANCED; ++ ++ s->opt[OPT_CCT_MODE].name = "cct-mode"; ++ s->opt[OPT_CCT_MODE].title = "CCT Mode"; ++ s->opt[OPT_CCT_MODE].desc = "Color correction profile mode"; ++ s->opt[OPT_CCT_MODE].type = SANE_TYPE_STRING; ++ s->opt[OPT_CCT_MODE].cap |= SANE_CAP_ADVANCED; ++ s->opt[OPT_CCT_MODE].size = max_string_size(cct_mode_list); ++ s->opt[OPT_CCT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST; ++ s->opt[OPT_CCT_MODE].constraint.string_list = cct_mode_list; ++ s->val[OPT_CCT_MODE].w = CCT_AUTO; ++ ++ s->opt[OPT_CCT_PROFILE].name = "cct-profile"; ++ s->opt[OPT_CCT_PROFILE].title = "CCT Profile"; ++ s->opt[OPT_CCT_PROFILE].desc = "Color correction profile data"; ++ s->opt[OPT_CCT_PROFILE].type = SANE_TYPE_FIXED; ++ s->opt[OPT_CCT_PROFILE].cap |= SANE_CAP_ADVANCED; ++ s->opt[OPT_CCT_PROFILE].unit = SANE_UNIT_NONE; ++ s->opt[OPT_CCT_PROFILE].constraint_type = SANE_CONSTRAINT_RANGE; ++ s->opt[OPT_CCT_PROFILE].constraint.range = &fx_range; ++ s->opt[OPT_CCT_PROFILE].size = 9 * sizeof(SANE_Word); ++ s->val[OPT_CCT_PROFILE].wa = s->cct_table; ++ ++/* if (!s->hw->cmd->set_color_correction) ++ s->opt[OPT_FILM_TYPE].cap |= SANE_CAP_INACTIVE; ++*/ + + /* mirror */ + s->opt[OPT_MIRROR].name = "mirror"; +@@ -2121,16 +1288,6 @@ + if (!s->hw->cmd->control_auto_area_segmentation) + s->opt[OPT_AAS].cap |= SANE_CAP_INACTIVE; + +- /* limit resolution list */ +- s->opt[OPT_LIMIT_RESOLUTION].name = "short-resolution"; +- s->opt[OPT_LIMIT_RESOLUTION].title = +- SANE_I18N("Short resolution list"); +- s->opt[OPT_LIMIT_RESOLUTION].desc = +- SANE_I18N("Display a shortened resolution list"); +- s->opt[OPT_LIMIT_RESOLUTION].type = SANE_TYPE_BOOL; +- s->val[OPT_LIMIT_RESOLUTION].w = SANE_FALSE; +- +- + /* "Preview settings" group: */ + s->opt[OPT_PREVIEW_GROUP].title = SANE_TITLE_PREVIEW; + s->opt[OPT_PREVIEW_GROUP].desc = ""; +@@ -2240,13 +1397,12 @@ + s->opt[OPT_FOCUS].constraint_type = SANE_CONSTRAINT_STRING_LIST; + s->opt[OPT_FOCUS].constraint.string_list = focus_list; + s->val[OPT_FOCUS].w = 0; +- + s->opt[OPT_FOCUS].cap |= SANE_CAP_ADVANCED; +- if (s->hw->focusSupport == SANE_TRUE) { ++ ++ if (s->hw->focusSupport == SANE_TRUE) + s->opt[OPT_FOCUS].cap &= ~SANE_CAP_INACTIVE; +- } else { ++ else + s->opt[OPT_FOCUS].cap |= SANE_CAP_INACTIVE; +- } + + /* forward feed / eject */ + s->opt[OPT_EJECT].name = "eject"; +@@ -2309,58 +1465,91 @@ + s->opt[OPT_WAIT_FOR_BUTTON].constraint.range = NULL; + s->opt[OPT_WAIT_FOR_BUTTON].cap |= SANE_CAP_ADVANCED; + +- if (!s->hw->cmd->request_push_button_status) { ++ if (!s->hw->cmd->request_push_button_status) + s->opt[OPT_WAIT_FOR_BUTTON].cap |= SANE_CAP_INACTIVE; +- } + + return SANE_STATUS_GOOD; + } + + SANE_Status +-sane_open(SANE_String_Const name, SANE_Handle * handle) ++sane_open(SANE_String_Const name, SANE_Handle *handle) + { + SANE_Status status; +- Epson_Device *dev; +- Epson_Scanner *s; ++ Epson_Scanner *s = NULL; ++ ++ int l = strlen(name); + + DBG(7, "%s: name = %s\n", __func__, name); + +- /* search for device */ +- if (name[0]) { +- for (dev = first_dev; dev; dev = dev->next) +- if (strcmp(dev->sane.name, name) == 0) +- break; +- } else +- dev = first_dev; ++ /* probe if empty device name provided */ ++ if (l == 0) { + +- if (!dev) { +- DBG(1, "error opening the device\n"); +- return SANE_STATUS_INVAL; +- } ++ probe_devices(); + +- s = calloc(sizeof(Epson_Scanner), 1); +- if (!s) { +- DBG(1, "out of memory (line %d)\n", __LINE__); +- return SANE_STATUS_NO_MEM; ++ if (first_dev == NULL) { ++ DBG(1, "no device detected\n"); ++ return SANE_STATUS_INVAL; ++ } ++ ++ s = device_detect(first_dev->sane.name, first_dev->connection, ++ &status); ++ if (s == NULL) { ++ DBG(1, "cannot open a perfectly valid device (%s)," ++ " please report to the authors\n", name); ++ return SANE_STATUS_INVAL; ++ } ++ ++ } else { ++ ++ if (strncmp(name, "net:", 4) == 0) { ++ s = device_detect(name, SANE_EPSON_NET, &status); ++ if (s == NULL) ++ return status; ++ } else if (strncmp(name, "libusb:", 7) == 0) { ++ s = device_detect(name, SANE_EPSON_USB, &status); ++ if (s == NULL) ++ return status; ++ } else if (strncmp(name, "pio:", 4) == 0) { ++ s = device_detect(name, SANE_EPSON_PIO, &status); ++ if (s == NULL) ++ return status; ++ } else { ++ ++ /* as a last resort, check for a match ++ * in the device list. This should handle SCSI ++ * devices and platforms without libusb. ++ */ ++ ++ if (first_dev == NULL) ++ probe_devices(); ++ ++ s = device_detect(name, SANE_EPSON_NODEV, &status); ++ if (s == NULL) { ++ DBG(1, "invalid device name: %s\n", name); ++ return SANE_STATUS_INVAL; ++ } ++ } + } + +- s->fd = -1; +- s->hw = dev; + +- init_options(s); ++ /* s is always valid here */ + +- /* insert newly opened handle into list of open handles */ +- s->next = first_handle; +- first_handle = s; ++ DBG(1, "handle obtained\n"); ++ ++ init_options(s); + + *handle = (SANE_Handle) s; + + status = open_scanner(s); +- if (status != SANE_STATUS_GOOD) ++ if (status != SANE_STATUS_GOOD) { ++ free(s); + return status; ++ } + +- esci_reset(s); +- ++ status = esci_reset(s); ++ if (status != SANE_STATUS_GOOD) ++ close_scanner(s); ++ + return status; + } + +@@ -2368,7 +1557,7 @@ + sane_close(SANE_Handle handle) + { + int i; +- Epson_Scanner *s, *prev; ++ Epson_Scanner *s; + + /* + * XXX Test if there is still data pending from +@@ -2377,24 +1566,6 @@ + + s = (Epson_Scanner *) handle; + +- /* remove handle from list of open handles */ +- prev = 0; +- for (s = first_handle; s; s = s->next) { +- if (s == handle) +- break; +- prev = s; +- } +- +- if (!s) { +- DBG(1, "%s: invalid handle (0x%p)\n", __func__, handle); +- return; +- } +- +- if (prev) +- prev->next = s->next; +- else +- first_handle = s->next; +- + if (s->fd != -1) + close_scanner(s); + +@@ -2414,15 +1585,14 @@ + if (option < 0 || option >= NUM_OPTIONS) + return NULL; + +- return (s->opt + option); ++ return s->opt + option; + } + + static const SANE_String_Const * +-search_string_list(const SANE_String_Const * list, SANE_String value) ++search_string_list(const SANE_String_Const *list, SANE_String value) + { +- while (*list != NULL && strcmp(value, *list) != 0) { +- ++list; +- } ++ while (*list != NULL && strcmp(value, *list) != 0) ++ list++; + + return ((*list == NULL) ? NULL : list); + } +@@ -2435,7 +1605,7 @@ + */ + + static void +-activateOption(Epson_Scanner * s, SANE_Int option, SANE_Bool * change) ++activateOption(Epson_Scanner *s, SANE_Int option, SANE_Bool *change) + { + if (!SANE_OPTION_IS_ACTIVE(s->opt[option].cap)) { + s->opt[option].cap &= ~SANE_CAP_INACTIVE; +@@ -2444,7 +1614,7 @@ + } + + static void +-deactivateOption(Epson_Scanner * s, SANE_Int option, SANE_Bool * change) ++deactivateOption(Epson_Scanner *s, SANE_Int option, SANE_Bool *change) + { + if (SANE_OPTION_IS_ACTIVE(s->opt[option].cap)) { + s->opt[option].cap |= SANE_CAP_INACTIVE; +@@ -2453,8 +1623,8 @@ + } + + static void +-setOptionState(Epson_Scanner * s, SANE_Bool state, SANE_Int option, +- SANE_Bool * change) ++setOptionState(Epson_Scanner *s, SANE_Bool state, SANE_Int option, ++ SANE_Bool *change) + { + if (state) + activateOption(s, option, change); +@@ -2469,12 +1639,14 @@ + SANE_Option_Descriptor *sopt = &(s->opt[option]); + Option_Value *sval = &(s->val[option]); + ++ DBG(17, "%s: option = %d\n", __func__, option); ++ + switch (option) { + +-/* case OPT_GAMMA_VECTOR: */ + case OPT_GAMMA_VECTOR_R: + case OPT_GAMMA_VECTOR_G: + case OPT_GAMMA_VECTOR_B: ++ case OPT_CCT_PROFILE: + memcpy(value, sval->wa, sopt->size); + break; + +@@ -2490,23 +1662,16 @@ + case OPT_BRIGHTNESS: + case OPT_SHARPNESS: + case OPT_AUTO_EJECT: +- case OPT_CCT_1: +- case OPT_CCT_2: +- case OPT_CCT_3: +- case OPT_CCT_4: +- case OPT_CCT_5: +- case OPT_CCT_6: +- case OPT_CCT_7: +- case OPT_CCT_8: +- case OPT_CCT_9: ++/* case OPT_CCT_1: ++*/ + case OPT_THRESHOLD: + case OPT_BIT_DEPTH: + case OPT_WAIT_FOR_BUTTON: +- case OPT_LIMIT_RESOLUTION: + *((SANE_Word *) value) = sval->w; + break; + + case OPT_MODE: ++ case OPT_CCT_MODE: + case OPT_ADF_MODE: + case OPT_HALFTONE: + case OPT_DROPOUT: +@@ -2539,7 +1704,7 @@ + * Threshold is available when halftone is NONE, and depth is 1. + */ + static void +-handle_depth_halftone(Epson_Scanner * s, SANE_Bool * reload) ++handle_depth_halftone(Epson_Scanner *s, SANE_Bool *reload) + { + int hti = s->val[OPT_HALFTONE].w; + int mdi = s->val[OPT_MODE].w; +@@ -2569,7 +1734,7 @@ + */ + + static void +-handle_source(Epson_Scanner * s, SANE_Int optindex, char *value) ++change_source(Epson_Scanner *s, SANE_Int optindex, char *value) + { + int force_max = SANE_FALSE; + SANE_Bool dummy; +@@ -2671,15 +1836,15 @@ + } + + static SANE_Status +-setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int * info) ++setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) + { + Epson_Scanner *s = (Epson_Scanner *) handle; + SANE_Option_Descriptor *sopt = &(s->opt[option]); + Option_Value *sval = &(s->val[option]); + + SANE_Status status; +- const SANE_String_Const *optval; +- int optindex; ++ const SANE_String_Const *optval = NULL; ++ int optindex = 0; + SANE_Bool reload = SANE_FALSE; + + DBG(17, "%s: option = %d, value = %p\n", __func__, option, value); +@@ -2693,16 +1858,9 @@ + DBG(17, "%s: constrained val = %d\n", __func__, + *(SANE_Word *) value); + +- s->option_has_changed = SANE_TRUE; +- +- optval = NULL; +- optindex = 0; +- +- + if (sopt->constraint_type == SANE_CONSTRAINT_STRING_LIST) { + optval = search_string_list(sopt->constraint.string_list, + (char *) value); +- + if (optval == NULL) + return SANE_STATUS_INVAL; + optindex = optval - sopt->constraint.string_list; +@@ -2710,25 +1868,15 @@ + + switch (option) { + +-/* case OPT_GAMMA_VECTOR: */ + case OPT_GAMMA_VECTOR_R: + case OPT_GAMMA_VECTOR_G: + case OPT_GAMMA_VECTOR_B: ++ case OPT_CCT_PROFILE: + memcpy(sval->wa, value, sopt->size); /* Word arrays */ + break; + +- case OPT_CCT_1: +- case OPT_CCT_2: +- case OPT_CCT_3: +- case OPT_CCT_4: +- case OPT_CCT_5: +- case OPT_CCT_6: +- case OPT_CCT_7: +- case OPT_CCT_8: +- case OPT_CCT_9: +- sval->w = *((SANE_Word *) value); /* Simple values */ +- break; +- ++ case OPT_CCT_MODE: ++ case OPT_ADF_MODE: + case OPT_DROPOUT: + case OPT_FILM_TYPE: + case OPT_BAY: +@@ -2764,23 +1912,26 @@ + break; + + case OPT_SOURCE: +- handle_source(s, optindex, (char *) value); ++ change_source(s, optindex, (char *) value); + reload = SANE_TRUE; + break; + + case OPT_MODE: + { + SANE_Bool isColor = mode_params[optindex].color; +- SANE_Bool userDefined = ++/* SANE_Bool userDefined = + color_userdefined[s->val[OPT_COLOR_CORRECTION].w]; + ++ SANE_Bool canCCT = isColor && userDefined; */ ++ + sval->w = optindex; + ++ /* halftoning available only on bw scans */ + if (s->hw->cmd->set_halftoning != 0) +- setOptionState(s, +- mode_params[optindex].depth == +- 1, OPT_HALFTONE, &reload); ++ setOptionState(s, mode_params[optindex].depth == 1, ++ OPT_HALFTONE, &reload); + ++ /* disable dropout on non-color scans */ + setOptionState(s, !isColor, OPT_DROPOUT, &reload); + + if (s->hw->cmd->set_color_correction) +@@ -2788,31 +1939,16 @@ + OPT_COLOR_CORRECTION, &reload); + + if (s->hw->cmd->set_color_correction_coefficients) { +- setOptionState(s, isColor ++/*XXX setOptionState(s, isColor + && userDefined, OPT_CCT_1, &reload); +- setOptionState(s, isColor +- && userDefined, OPT_CCT_2, &reload); +- setOptionState(s, isColor +- && userDefined, OPT_CCT_3, &reload); +- setOptionState(s, isColor +- && userDefined, OPT_CCT_4, &reload); +- setOptionState(s, isColor +- && userDefined, OPT_CCT_5, &reload); +- setOptionState(s, isColor +- && userDefined, OPT_CCT_6, &reload); +- setOptionState(s, isColor +- && userDefined, OPT_CCT_7, &reload); +- setOptionState(s, isColor +- && userDefined, OPT_CCT_8, &reload); +- setOptionState(s, isColor +- && userDefined, OPT_CCT_9, &reload); ++*/ + } + + /* if binary, then disable the bit depth selection */ + if (optindex == 0) { + s->opt[OPT_BIT_DEPTH].cap |= SANE_CAP_INACTIVE; + } else { +- if (bitDepthList[0] == 1) ++ if (s->hw->depth_list[0] == 1) + s->opt[OPT_BIT_DEPTH].cap |= + SANE_CAP_INACTIVE; + else { +@@ -2829,10 +1965,6 @@ + break; + } + +- case OPT_ADF_MODE: +- sval->w = optindex; +- break; +- + case OPT_BIT_DEPTH: + sval->w = *((SANE_Word *) value); + mode_params[s->val[OPT_MODE].w].depth = sval->w; +@@ -2846,18 +1978,10 @@ + + case OPT_COLOR_CORRECTION: + { +- SANE_Bool f = color_userdefined[optindex]; ++/* SANE_Bool f = color_userdefined[optindex]; */ + + sval->w = optindex; +- setOptionState(s, f, OPT_CCT_1, &reload); +- setOptionState(s, f, OPT_CCT_2, &reload); +- setOptionState(s, f, OPT_CCT_3, &reload); +- setOptionState(s, f, OPT_CCT_4, &reload); +- setOptionState(s, f, OPT_CCT_5, &reload); +- setOptionState(s, f, OPT_CCT_6, &reload); +- setOptionState(s, f, OPT_CCT_7, &reload); +- setOptionState(s, f, OPT_CCT_8, &reload); +- setOptionState(s, f, OPT_CCT_9, &reload); ++/*XXX setOptionState(s, f, OPT_CCT_1, &reload); */ + + break; + } +@@ -2868,7 +1992,6 @@ + + sval->w = optindex; + +-/* setOptionState(s, f, OPT_GAMMA_VECTOR, &reload ); */ + setOptionState(s, f, OPT_GAMMA_VECTOR_R, &reload); + setOptionState(s, f, OPT_GAMMA_VECTOR_G, &reload); + setOptionState(s, f, OPT_GAMMA_VECTOR_B, &reload); +@@ -2888,12 +2011,6 @@ + sval->w = *((SANE_Word *) value); + break; + +- case OPT_LIMIT_RESOLUTION: +- sval->w = *((SANE_Word *) value); +- filter_resolution_list(s); +- reload = SANE_TRUE; +- break; +- + default: + return SANE_STATUS_INVAL; + } +@@ -2908,8 +2025,10 @@ + + SANE_Status + sane_control_option(SANE_Handle handle, SANE_Int option, SANE_Action action, +- void *value, SANE_Int * info) ++ void *value, SANE_Int *info) + { ++ DBG(17, "%s: action = %x, option = %d\n", __func__, action, option); ++ + if (option < 0 || option >= NUM_OPTIONS) + return SANE_STATUS_INVAL; + +@@ -2927,385 +2046,11 @@ + return SANE_STATUS_INVAL; + } + +- return SANE_STATUS_GOOD; +-} +- +-static SANE_Status +-e2_set_extended_scanning_parameters(Epson_Scanner * s) +-{ +- unsigned char buf[64]; +- +- const struct mode_param *mparam; +- +- DBG(1, "%s\n", __func__); +- +- mparam = &mode_params[s->val[OPT_MODE].w]; +- +- memset(buf, 0x00, sizeof(buf)); +- +- /* ESC R, resolution */ +- htole32a(&buf[0], s->val[OPT_RESOLUTION].w); +- htole32a(&buf[4], s->val[OPT_RESOLUTION].w); +- +- /* ESC A, scanning area */ +- htole32a(&buf[8], s->left); +- htole32a(&buf[12], s->top); +- htole32a(&buf[16], s->params.pixels_per_line); +- htole32a(&buf[20], s->params.lines); +- +- /* +- * The byte sequence mode was introduced in B5, +- *for B[34] we need line sequence mode +- */ +- +- /* ESC C, set color */ +- if ((s->hw->cmd->level[0] == 'D' +- || (s->hw->cmd->level[0] == 'B' && s->hw->level >= 5)) +- && mparam->flags == 0x02) { +- buf[24] = 0x13; +- } else { +- buf[24] = mparam->flags | (mparam->dropout_mask +- & dropout_params[s-> +- val[OPT_DROPOUT]. +- w]); +- } +- +- /* ESC D, set data format */ +- mparam = &mode_params[s->val[OPT_MODE].w]; +- buf[25] = mparam->depth; +- +- /* ESC e, control option */ +- if (s->hw->extension) { +- +- char extensionCtrl; +- extensionCtrl = (s->hw->use_extension ? 1 : 0); +- if (s->hw->use_extension && (s->val[OPT_ADF_MODE].w == 1)) +- extensionCtrl = 2; +- +- /* Test for TPU2 +- * Epson Perfection 4990 Command Specifications +- * JZIS-0075 Rev. A, page 31 +- */ +- if (s->hw->use_extension && s->hw->TPU2) +- extensionCtrl = 5; +- +- /* ESC e */ +- buf[26] = extensionCtrl; +- +- /* XXX focus */ +- } +- +- /* ESC g, scanning mode (normal or high speed) */ +- if (s->val[OPT_PREVIEW].w) +- buf[27] = 1; /* High speed */ +- else +- buf[27] = 0; +- +- /* ESC d, block line number */ +- buf[28] = s->lcount; +- +- /* ESC Z, set gamma correction */ +- buf[29] = 0x01; /* default */ +- +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_GAMMA_CORRECTION].cap)) { +- char val; +- if (s->hw->cmd->level[0] == 'D') { +- /* The D1 level has only the two user defined gamma +- * settings. +- */ +- val = gamma_params[s->val[OPT_GAMMA_CORRECTION].w]; +- } else { +- val = gamma_params[s->val[OPT_GAMMA_CORRECTION].w]; +- +- /* +- * If "Default" is selected then determine the actual value +- * to send to the scanner: If bilevel mode, just send the +- * value from the table (0x01), for grayscale or color mode +- * add one and send 0x02. +- */ +- +- if (s->val[OPT_GAMMA_CORRECTION].w == 0) { +- val += mparam->depth == 1 ? 0 : 1; +- } +- } +- +- buf[29] = val; +- } +- +- /* ESC L, set brightness */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_BRIGHTNESS].cap)) +- buf[30] = s->val[OPT_BRIGHTNESS].w; +- +- /* ESC B, set halftoning mode / halftone processing */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_HALFTONE].cap)) +- buf[32] = halftone_params[s->val[OPT_HALFTONE].w]; +- +- /* ESC s, auto area segmentation */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_AAS].cap)) +- buf[34] = s->val[OPT_AAS].w; +- +- /* ESC Q, set sharpness / sharpness control */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_SHARPNESS].cap)) +- buf[35] = s->val[OPT_SHARPNESS].w; +- +- /* ESC K, set data order / mirroring */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_MIRROR].cap)) +- buf[36] = mirror_params[s->val[OPT_MIRROR].w]; +- +- s->invert_image = SANE_FALSE; /* default: do no invert the image */ +- +- /* ESC N, film type */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_FILM_TYPE].cap)) { +- s->invert_image = +- (s->val[OPT_FILM_TYPE].w == FILM_TYPE_NEGATIVE); +- buf[37] = film_params[s->val[OPT_FILM_TYPE].w]; +- } +- +- /* ESC M, color correction */ +- buf[31] = color_params[s->val[OPT_COLOR_CORRECTION].w]; +- +- /* ESC t, threshold */ +- buf[33] = s->val[OPT_THRESHOLD].w; +- +- return esci_set_scanning_parameter(s, buf); +-} +- +-static SANE_Status +-e2_set_scanning_parameters(Epson_Scanner * s) +-{ +- SANE_Status status; +- struct mode_param *mparam = &mode_params[s->val[OPT_MODE].w]; +- unsigned char color_mode; +- +- DBG(1, "%s\n", __func__); +- +- /* +- * There is some undocumented special behavior with the TPU enable/disable. +- * TPU power ESC e status +- * on 0 NAK +- * on 1 ACK +- * off 0 ACK +- * off 1 NAK +- * +- * It makes no sense to scan with TPU powered on and source flatbed, because +- * light will come from both sides. +- */ +- +- if (s->hw->extension) { +- +- int extensionCtrl; +- extensionCtrl = (s->hw->use_extension ? 1 : 0); +- if (s->hw->use_extension && (s->val[OPT_ADF_MODE].w == 1)) +- extensionCtrl = 2; +- +- status = esci_control_extension(s, extensionCtrl); +- if (status != SANE_STATUS_GOOD) { +- DBG(1, "you may have to power %s your TPU\n", +- s->hw->use_extension ? "on" : "off"); +- DBG(1, +- "and you may also have to restart the SANE frontend.\n"); +- return status; +- } +- +- /* XXX use request_extended_status and analyze +- * buffer to set the scan area for +- * ES-9000H and GT-30000 +- */ +- +- /* +- * set the focus position according to the extension used: +- * if the TPU is selected, then focus 2.5mm above the glass, +- * otherwise focus on the glass. Scanners that don't support +- * this feature, will just ignore these calls. +- */ +- +- if (s->hw->focusSupport == SANE_TRUE) { +- if (s->val[OPT_FOCUS].w == 0) { +- DBG(1, "setting focus to glass surface\n"); +- esci_set_focus_position(s, 0x40); +- } else { +- DBG(1, +- "setting focus to 2.5mm above glass\n"); +- esci_set_focus_position(s, 0x59); +- } +- } +- } +- +- /* ESC C, Set color */ +- color_mode = mparam->flags | (mparam->dropout_mask +- & dropout_params[s->val[OPT_DROPOUT]. +- w]); +- +- /* +- * The byte sequence mode was introduced in B5, for B[34] we need line sequence mode +- * XXX Check what to do for the FilmScan 200 +- */ +- if ((s->hw->cmd->level[0] == 'D' +- || (s->hw->cmd->level[0] == 'B' && s->hw->level >= 5)) +- && mparam->flags == 0x02) +- color_mode = 0x13; +- +- status = esci_set_color_mode(s, color_mode); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- /* ESC D, set data format */ +- DBG(1, "%s: setting data format to %d bits\n", __func__, +- mparam->depth); +- status = esci_set_data_format(s, mparam->depth); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- /* ESC B, set halftoning mode */ +- if (s->hw->cmd->set_halftoning +- && SANE_OPTION_IS_ACTIVE(s->opt[OPT_HALFTONE].cap)) { +- status = esci_set_halftoning(s, +- halftone_params[s-> +- val +- [OPT_HALFTONE]. +- w]); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- /* ESC L, set brightness */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_BRIGHTNESS].cap)) { +- status = esci_set_bright(s, s->val[OPT_BRIGHTNESS].w); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_AAS].cap)) { +- status = esci_set_auto_area_segmentation(s, +- s->val[OPT_AAS].w); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- s->invert_image = SANE_FALSE; /* default: to not inverting the image */ +- +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_FILM_TYPE].cap)) { +- s->invert_image = +- (s->val[OPT_FILM_TYPE].w == FILM_TYPE_NEGATIVE); +- status = esci_set_film_type(s, +- film_params[s->val[OPT_FILM_TYPE]. +- w]); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- if (s->hw->cmd->set_gamma +- && SANE_OPTION_IS_ACTIVE(s->opt[OPT_GAMMA_CORRECTION].cap)) { +- int val; +- if (s->hw->cmd->level[0] == 'D') { +- /* +- * The D1 level has only the two user defined gamma +- * settings. +- */ +- val = gamma_params[s->val[OPT_GAMMA_CORRECTION].w]; +- } else { +- val = gamma_params[s->val[OPT_GAMMA_CORRECTION].w]; +- +- /* +- * If "Default" is selected then determine the actual value +- * to send to the scanner: If bilevel mode, just send the +- * value from the table (0x01), for grayscale or color mode +- * add one and send 0x02. +- */ +- +-/* if( s->val[ OPT_GAMMA_CORRECTION].w <= 1) { */ +- if (s->val[OPT_GAMMA_CORRECTION].w == 0) { +- val += mparam->depth == 1 ? 0 : 1; +- } +- } +- +- status = esci_set_gamma(s, val); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- if (s->hw->cmd->set_threshold != 0 +- && SANE_OPTION_IS_ACTIVE(s->opt[OPT_THRESHOLD].cap)) { +- status = esci_set_threshold(s, s->val[OPT_THRESHOLD].w); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- /* XXX ESC Z here */ +- +- /* ESC M, set color correction */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_COLOR_CORRECTION].cap)) { +- status = esci_set_color_correction(s, +- color_params[s-> +- val +- [OPT_COLOR_CORRECTION]. +- w]); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- /* ESC Q, set sharpness */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_SHARPNESS].cap)) { +- +- status = esci_set_sharpness(s, s->val[OPT_SHARPNESS].w); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- /* ESC g, set scanning mode */ +- if (s->val[OPT_PREVIEW].w) +- status = esci_set_speed(s, 1); +- else +- status = esci_set_speed(s, 0); +- +- if (status != SANE_STATUS_GOOD) +- return status; +- +- /* ESC K, set data order */ +- if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_MIRROR].cap)) { +- status = esci_mirror_image(s, mirror_params[s->val[OPT_MIRROR].w]); +- if (status != SANE_STATUS_GOOD) +- return status; +- } +- +- /* ESC R */ +- status = esci_set_resolution(s, s->val[OPT_RESOLUTION].w, +- s->val[OPT_RESOLUTION].w); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- /* ESC H, set zoom */ +- /* not implemented */ +- +- /* ESC A, set scanning area */ +- status = esci_set_scan_area(s, s->left, s->top, +- s->params.pixels_per_line, +- s->params.lines); +- +- if (status != SANE_STATUS_GOOD) +- return status; +- +- /* ESC d, set block line number / set line counter */ +- status = esci_set_lcount(s, s->lcount); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- return SANE_STATUS_GOOD; ++ return SANE_STATUS_INVAL; + } + +-/* +- * This function is part of the SANE API and gets called when the front end +- * requests information aobut the scan configuration (e.g. color depth, mode, +- * bytes and pixels per line, number of lines. This information is returned +- * in the SANE_Parameters structure. +- * +- * Once a scan was started, this routine has to report the correct values, if +- * it is called before the scan is actually started, the values are based on +- * the current settings. +- */ +- + SANE_Status +-sane_get_parameters(SANE_Handle handle, SANE_Parameters * params) ++sane_get_parameters(SANE_Handle handle, SANE_Parameters *params) + { + Epson_Scanner *s = (Epson_Scanner *) handle; + int dpi, max_x, max_y; +@@ -3349,13 +2094,13 @@ + + max_x = max_y = 0; + +- /* XXX check this */ +- s->params.pixels_per_line = +- (SANE_UNFIX(s->val[OPT_BR_X].w - +- s->val[OPT_TL_X].w) / (MM_PER_INCH * dpi)) + 0.5; ++ s->params.pixels_per_line = ++ ((SANE_UNFIX(s->val[OPT_BR_X].w - s->val[OPT_TL_X].w) ++ / MM_PER_INCH) * dpi) + 0.5; ++ + s->params.lines = +- (SANE_UNFIX(s->val[OPT_BR_Y].w - +- s->val[OPT_TL_Y].w) / (MM_PER_INCH * dpi)) + 0.5; ++ ((SANE_UNFIX(s->val[OPT_BR_Y].w - s->val[OPT_TL_Y].w) ++ / MM_PER_INCH) * dpi) + 0.5; + + /* + * Make sure that the number of lines is correct for color shuffling: +@@ -3366,11 +2111,10 @@ + */ + if (s->hw->color_shuffle) { + s->params.lines -= 4 * s->line_distance; +- if (s->params.lines < 0) { ++ if (s->params.lines < 0) + s->params.lines = 0; +- } +- DBG(1, +- "adjusted params.lines for color_shuffle by %d to %d\n", ++ ++ DBG(1, "adjusted params.lines for color_shuffle by %d to %d\n", + 4 * s->line_distance, s->params.lines); + } + +@@ -3417,443 +2161,47 @@ + + s->params.last_frame = SANE_TRUE; + +- if (mode_params[s->val[OPT_MODE].w].color) { +- s->params.format = SANE_FRAME_RGB; +- s->params.bytes_per_line = +- 3 * s->params.pixels_per_line * bytes_per_pixel; +- } else { ++ switch (s->val[OPT_MODE].w) { ++ case MODE_BINARY: ++ case MODE_GRAY: + s->params.format = SANE_FRAME_GRAY; + s->params.bytes_per_line = + s->params.pixels_per_line * s->params.depth / 8; +- } +- +- if (NULL != params) +- *params = s->params; +- +- print_params(s->params); +- +- return SANE_STATUS_GOOD; +-} +- +-static void +-e2_setup_block_mode(Epson_Scanner * s) +-{ +- s->block = SANE_TRUE; +- s->lcount = sanei_scsi_max_request_size / s->params.bytes_per_line; +- +- /* XXX Check if we can do this with other scanners, +- * by bus type +- */ +- DBG(1, "max req size: %d\n", sanei_scsi_max_request_size); +- +- if (s->lcount < 3 && e2_model(s, "GT-X800")) { +- s->lcount = 21; +- DBG(17, +- "%s: set lcount = %i bigger than sanei_scsi_max_request_size\n", +- __func__, s->lcount); +- } +- +- if (s->lcount >= 255) { +- s->lcount = 255; +- } +- +- /* XXX why this? */ +- if (s->hw->TPU && s->hw->use_extension && s->lcount > 32) { +- s->lcount = 32; +- } +- +- /* +- * The D1 series of scanners only allow an even line number +- * for bi-level scanning. If a bit depth of 1 is selected, then +- * make sure the next lower even number is selected. +- */ +- if (s->lcount > 3 && s->lcount % 2) { +- s->lcount -= 1; +- } +- +- DBG(1, "line count is %d\n", s->lcount); +-} +- +- +-static SANE_Status +-e2_init_parameters(Epson_Scanner * s) +-{ +- int dpi, max_y, max_x, bytes_per_pixel; +- struct mode_param *mparam; +- +- memset(&s->params, 0, sizeof(SANE_Parameters)); +- +- max_x = max_y = 0; +- dpi = s->val[OPT_RESOLUTION].w; +- +- mparam = &mode_params[s->val[OPT_MODE].w]; +- +- if (SANE_UNFIX(s->val[OPT_BR_Y].w) == 0 || +- SANE_UNFIX(s->val[OPT_BR_X].w) == 0) +- return SANE_STATUS_INVAL; +- +- s->left = SANE_UNFIX(s->val[OPT_TL_X].w) / MM_PER_INCH * +- s->val[OPT_RESOLUTION].w + 0.5; +- +- s->top = SANE_UNFIX(s->val[OPT_TL_Y].w) / MM_PER_INCH * +- s->val[OPT_RESOLUTION].w + 0.5; +- +- /* XXX check this */ +- s->params.pixels_per_line = +- SANE_UNFIX(s->val[OPT_BR_X].w - +- s->val[OPT_TL_X].w) / MM_PER_INCH * dpi + 0.5; +- s->params.lines = +- SANE_UNFIX(s->val[OPT_BR_Y].w - +- s->val[OPT_TL_Y].w) / MM_PER_INCH * dpi + 0.5; +- +- /* +- * Make sure that the number of lines is correct for color shuffling: +- * The shuffling alghorithm produces 2xline_distance lines at the +- * beginning and the same amount at the end of the scan that are not +- * useable. If s->params.lines gets negative, 0 lines are reported +- * back to the frontend. +- */ +- if (s->hw->color_shuffle) { +- s->params.lines -= 4 * s->line_distance; +- if (s->params.lines < 0) { +- s->params.lines = 0; +- } +- DBG(1, +- "adjusted params.lines for color_shuffle by %d to %d\n", +- 4 * s->line_distance, s->params.lines); +- } +- +- DBG(1, "%s: %p %p tlx %f tly %f brx %f bry %f [mm]\n", +- __func__, (void *) s, (void *) s->val, +- SANE_UNFIX(s->val[OPT_TL_X].w), SANE_UNFIX(s->val[OPT_TL_Y].w), +- SANE_UNFIX(s->val[OPT_BR_X].w), SANE_UNFIX(s->val[OPT_BR_Y].w)); +- +- /* +- * Calculate bytes_per_pixel and bytes_per_line for +- * any color depths. +- * +- * The default color depth is stored in mode_params.depth: +- */ +- +- if (mode_params[s->val[OPT_MODE].w].depth == 1) +- s->params.depth = 1; +- else +- s->params.depth = s->val[OPT_BIT_DEPTH].w; +- +- if (s->params.depth > 8) { +- s->params.depth = 16; /* +- * The frontends can only handle 8 or 16 bits +- * for gray or color - so if it's more than 8, +- * it gets automatically set to 16. This works +- * as long as EPSON does not come out with a +- * scanner that can handle more than 16 bits +- * per color channel. +- */ +- } +- +- /* this works because it can only be set to 1, 8 or 16 */ +- bytes_per_pixel = s->params.depth / 8; +- if (s->params.depth % 8) { /* just in case ... */ +- bytes_per_pixel++; +- } +- +- /* pixels_per_line is rounded to the next 8bit boundary */ +- s->params.pixels_per_line = s->params.pixels_per_line & ~7; +- +- s->params.last_frame = SANE_TRUE; ++ break; + +- if (mode_params[s->val[OPT_MODE].w].color) { ++ case MODE_COLOR: + s->params.format = SANE_FRAME_RGB; + s->params.bytes_per_line = + 3 * s->params.pixels_per_line * bytes_per_pixel; +- } else { +- s->params.format = SANE_FRAME_GRAY; ++ break; ++#ifdef SANE_FRAME_IR ++ case MODE_INFRARED: ++ s->params.format = SANE_FRAME_IR; + s->params.bytes_per_line = + s->params.pixels_per_line * s->params.depth / 8; ++ break; ++#endif + } + +- /* +- * Calculate correction for line_distance in D1 scanner: +- * Start line_distance lines earlier and add line_distance lines at the end +- * +- * Because the actual line_distance is not yet calculated we have to do this +- * first. +- */ +- +- s->hw->color_shuffle = SANE_FALSE; +- s->current_output_line = 0; +- s->lines_written = 0; +- s->color_shuffle_line = 0; +- +- if ((s->hw->optical_res != 0) && (mparam->depth == 8) +- && (mparam->flags != 0)) { +- s->line_distance = +- s->hw->max_line_distance * dpi / s->hw->optical_res; +- if (s->line_distance != 0) { +- s->hw->color_shuffle = SANE_TRUE; +- } else +- s->hw->color_shuffle = SANE_FALSE; +- } +- +- /* +- * Modify the scan area: If the scanner requires color shuffling, then we try to +- * scan more lines to compensate for the lines that will be removed from the scan +- * due to the color shuffling alghorithm. +- * At this time we add two times the line distance to the number of scan lines if +- * this is possible - if not, then we try to calculate the number of additional +- * lines according to the selected scan area. +- */ +- +- if (s->hw->color_shuffle == SANE_TRUE) { +- +- /* start the scan 2 * line_distance earlier */ +- s->top -= 2 * s->line_distance; +- if (s->top < 0) { +- s->top = 0; +- } +- +- /* scan 4*line_distance lines more */ +- s->params.lines += 4 * s->line_distance; +- } +- +- /* +- * If (s->top + s->params.lines) is larger than the max scan area, reset +- * the number of scan lines: +- */ +- if (SANE_UNFIX(s->val[OPT_BR_Y].w) / MM_PER_INCH * dpi < +- (s->params.lines + s->top)) { +- s->params.lines = +- ((int) SANE_UNFIX(s->val[OPT_BR_Y].w) / MM_PER_INCH * +- dpi + 0.5) - s->top; +- } +- +- s->block = SANE_FALSE; +- s->lcount = 1; +- +- /* +- * The set line count commands needs to be sent for certain scanners in +- * color mode. The D1 level requires it, we are however only testing for +- * 'D' and not for the actual numeric level. +- */ +- +- if ((s->hw->cmd->level[0] == 'B') && (s->hw->level >= 5)) +- e2_setup_block_mode(s); +- else if ((s->hw->cmd->level[0] == 'B') && (s->hw->level == 4) +- && (!mode_params[s->val[OPT_MODE].w].color)) +- e2_setup_block_mode(s); +- else if (s->hw->cmd->level[0] == 'D') +- e2_setup_block_mode(s); ++ if (NULL != params) ++ *params = s->params; + + print_params(s->params); + + return SANE_STATUS_GOOD; + } + +-static void +-e2_wait_button(Epson_Scanner * s) +-{ +- DBG(5, "%s\n", __func__); +- +- s->hw->wait_for_button = SANE_TRUE; +- +- while (s->hw->wait_for_button == SANE_TRUE) { +- unsigned char button_status = 0; +- +- if (s->canceling == SANE_TRUE) { +- s->hw->wait_for_button = SANE_FALSE; +- } +- /* get the button status from the scanner */ +- else if (esci_request_push_button_status(s, &button_status) == +- SANE_STATUS_GOOD) { +- if (button_status) +- s->hw->wait_for_button = SANE_FALSE; +- else +- sleep(1); +- } else { +- /* we run into an error condition, just continue */ +- s->hw->wait_for_button = SANE_FALSE; +- } +- } +-} +- +- +-static SANE_Status +-e2_check_warm_up(Epson_Scanner * s, SANE_Bool * wup) +-{ +- SANE_Status status; +- +- DBG(5, "%s\n", __func__); +- +- *wup = SANE_FALSE; +- +- if (s->hw->extended_commands) { +- unsigned char buf[16]; +- +- status = esci_request_scanner_status(s, buf); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- if (buf[0] & FSF_STATUS_MAIN_WU) +- *wup = SANE_TRUE; +- +- } else { +- unsigned char *es; +- +- /* this command is not available on some scanners */ +- if (!s->hw->cmd->request_extended_status) +- return SANE_STATUS_GOOD; +- +- status = esci_request_extended_status(s, &es, NULL); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- if (es[0] & EXT_STATUS_WU) +- *wup = SANE_TRUE; +- +- free(es); +- } +- +- return status; +-} +- +-static SANE_Status +-e2_wait_warm_up(Epson_Scanner * s) +-{ +- SANE_Status status; +- SANE_Bool wup; +- +- DBG(5, "%s\n", __func__); +- +- s->retry_count = 0; +- +- while (1) { +- status = e2_check_warm_up(s, &wup); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- if (wup == SANE_FALSE) +- break; +- +- s->retry_count++; +- +- if (s->retry_count > SANE_EPSON_MAX_RETRIES) { +- DBG(1, "max retry count exceeded (%d)\n", +- s->retry_count); +- return SANE_STATUS_DEVICE_BUSY; +- } +- sleep(5); +- } +- +- return SANE_STATUS_GOOD; +-} +- +-static SANE_Status +-e2_check_adf(Epson_Scanner * s) +-{ +- SANE_Status status; +- +- DBG(5, "%s\n", __func__); +- +- if (s->hw->use_extension == SANE_FALSE) +- return SANE_STATUS_GOOD; +- +- if (s->hw->extended_commands) { +- unsigned char buf[16]; +- +- status = esci_request_scanner_status(s, buf); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- if (buf[1] & FSF_STATUS_ADF_PE) +- return SANE_STATUS_NO_DOCS; +- +- if (buf[1] & FSF_STATUS_ADF_PJ) +- return SANE_STATUS_JAMMED; +- +- } else { +- unsigned char *buf, t; +- +- status = esci_request_extended_status(s, &buf, NULL); +- if (status != SANE_STATUS_GOOD) +- return status;; +- +- t = buf[1]; +- +- free(buf); +- +- if (t & EXT_STATUS_PE) +- return SANE_STATUS_NO_DOCS; +- +- if (t & EXT_STATUS_PJ) +- return SANE_STATUS_JAMMED; +- } +- +- return SANE_STATUS_GOOD; +-} +- +-static SANE_Status +-e2_start_std_scan(Epson_Scanner * s) +-{ +- SANE_Status status; +- unsigned char params[2]; +- +- DBG(5, "%s\n", __func__); +- +- /* ESC g */ +- params[0] = ESC; +- params[1] = s->hw->cmd->start_scanning; +- +- e2_send(s, params, 2, 6 + (s->lcount * s->params.bytes_per_line), +- &status); +- +- return status; +-} +- +-static SANE_Status +-e2_start_ext_scan(Epson_Scanner * s) ++static void e2_load_cct_profile(struct Epson_Scanner *s, unsigned int index) + { +- SANE_Status status; +- unsigned char params[2]; +- unsigned char buf[14]; +- +- DBG(5, "%s\n", __func__); +- +- params[0] = FS; +- params[1] = 'G'; +- +- status = e2_txrx(s, params, 2, buf, 14); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- if (buf[0] != STX) +- return SANE_STATUS_INVAL; +- +- if (buf[1] & 0x80) { +- DBG(1, "%s: fatal error\n", __func__); +- return SANE_STATUS_IO_ERROR; +- } +- +- s->ext_block_len = le32atoh(&buf[2]); +- s->ext_blocks = le32atoh(&buf[6]); +- s->ext_last_len = le32atoh(&buf[10]); +- +- s->ext_counter = 0; +- +- DBG(5, " status : 0x%02x\n", buf[1]); +- DBG(5, " block size : %lu\n", (u_long) le32atoh(&buf[2])); +- DBG(5, " block count : %lu\n", (u_long) le32atoh(&buf[6])); +- DBG(5, " last block size: %lu\n", (u_long) le32atoh(&buf[10])); +- +- if (s->ext_last_len) { +- s->ext_blocks++; +- DBG(1, "adj block count: %d\n", s->ext_blocks); +- } +- +- /* adjust block len if we have only one block to read */ +- if (s->ext_block_len == 0 && s->ext_last_len) +- s->ext_block_len = s->ext_last_len; +- +- return status; ++ s->cct_table[0] = SANE_FIX(s->hw->cct_profile->cct[index][0]); ++ s->cct_table[1] = SANE_FIX(s->hw->cct_profile->cct[index][1]); ++ s->cct_table[2] = SANE_FIX(s->hw->cct_profile->cct[index][2]); ++ s->cct_table[3] = SANE_FIX(s->hw->cct_profile->cct[index][3]); ++ s->cct_table[4] = SANE_FIX(s->hw->cct_profile->cct[index][4]); ++ s->cct_table[5] = SANE_FIX(s->hw->cct_profile->cct[index][5]); ++ s->cct_table[6] = SANE_FIX(s->hw->cct_profile->cct[index][6]); ++ s->cct_table[7] = SANE_FIX(s->hw->cct_profile->cct[index][7]); ++ s->cct_table[8] = SANE_FIX(s->hw->cct_profile->cct[index][8]); + } + + /* +@@ -3880,6 +2228,10 @@ + if (status != SANE_STATUS_GOOD) + return status; + ++ /* enable infrared */ ++ if (s->val[OPT_MODE].w == MODE_INFRARED) ++ esci_enable_infrared(handle); ++ + /* ESC , bay */ + if (SANE_OPTION_IS_ACTIVE(s->opt[OPT_BAY].cap)) { + status = esci_set_bay(s, s->val[OPT_BAY].w); +@@ -3888,9 +2240,9 @@ + } + + /* set scanning parameters */ +- if (dev->extended_commands) { ++ if (dev->extended_commands) + status = e2_set_extended_scanning_parameters(s); +- } else ++ else + status = e2_set_scanning_parameters(s); + + if (status != SANE_STATUS_GOOD) +@@ -3904,9 +2256,26 @@ + return status; + } + ++ ++ if (s->val[OPT_COLOR_CORRECTION].w == 1) { /* Automatic */ ++ ++ if (0) { /* XXX TPU */ ++ ++ /* XXX check this */ ++ if (s->val[OPT_FILM_TYPE].w == 0) ++ e2_load_cct_profile(s, CCTP_COLORPOS); ++ else ++ e2_load_cct_profile(s, CCTP_COLORNEG); ++ ++ } else { ++ e2_load_cct_profile(s, CCTP_REFLECTIVE); ++ } ++ } ++ + /* ESC m, user defined color correction */ +- if (s->val[OPT_COLOR_CORRECTION].w == 1) { +- status = esci_set_color_correction_coefficients(s); ++ if (color_userdefined[s->val[OPT_COLOR_CORRECTION].w]) { ++ status = esci_set_color_correction_coefficients(s, ++ s->cct_table); + if (status != SANE_STATUS_GOOD) + return status; + } +@@ -3919,7 +2288,6 @@ + if (status != SANE_STATUS_GOOD) + return status; + +- + /* + status = sane_get_parameters(handle, NULL); + if (status != SANE_STATUS_GOOD) +@@ -3942,12 +2310,12 @@ + /* set the retry count to 0 */ + s->retry_count = 0; + +- + /* allocate buffers for color shuffling */ + if (dev->color_shuffle == SANE_TRUE) { + int i; + /* initialize the line buffers */ + for (i = 0; i < s->line_distance * 2 + 1; i++) { ++ + if (s->line_buffer[i] != NULL) + free(s->line_buffer[i]); + +@@ -3990,13 +2358,14 @@ + if (dev->extended_commands) { + status = e2_start_ext_scan(s); + +- /* check if the scanner signaled a warming up */ +- if (status == SANE_STATUS_IO_ERROR && s->hw->use_extension) { +- status = e2_wait_warm_up(s); +- if (status == SANE_STATUS_GOOD) +- status = e2_start_ext_scan(s); +- } +- ++ /* sometimes the scanner gives an io error when ++ * it's warming up. ++ */ ++ if (status == SANE_STATUS_IO_ERROR) { ++ status = e2_wait_warm_up(s); ++ if (status == SANE_STATUS_GOOD) ++ status = e2_start_ext_scan(s); ++ } + } else + status = e2_start_std_scan(s); + +@@ -4011,83 +2380,11 @@ + if (dev->connection == SANE_EPSON_NET) { + sanei_epson_net_write(s, 0x2000, NULL, 0, + s->ext_block_len + 1, &status); +- } +- +- return status; +-} +- +-/* XXX this routine is ugly and should be avoided */ +-static SANE_Status +-read_info_block(Epson_Scanner * s, EpsonDataRec * result) +-{ +- SANE_Status status; +- unsigned char params[2]; +- +- retry: +- e2_recv(s, result, s->block ? 6 : 4, &status); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- if (result->code != STX) { +- DBG(1, "error: got %02x, expected STX\n", result->code); +- return SANE_STATUS_INVAL; +- } +- +- /* XXX */ +- if (result->status & STATUS_FER) { +- unsigned char *ext_status; +- +- DBG(1, "fatal error, status = %02x\n", result->status); +- +- if (s->retry_count > SANE_EPSON_MAX_RETRIES) { +- DBG(1, "max retry count exceeded (%d)\n", +- s->retry_count); +- return SANE_STATUS_INVAL; +- } +- +- /* if the scanner is warming up, retry after a few secs */ +- status = esci_request_extended_status(s, &ext_status, NULL); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- if (ext_status[0] & EXT_STATUS_WU) { +- free(ext_status); +- +- sleep(5); /* for the next attempt */ +- +- DBG(1, "retrying ESC G - %d\n", ++(s->retry_count)); +- +- params[0] = ESC; +- params[1] = s->hw->cmd->start_scanning; +- +- e2_send(s, params, 2, 0, &status); +- if (status != SANE_STATUS_GOOD) +- return status; +- +- goto retry; +- } else +- free(ext_status); + } + + return status; + } + +-static void +-e2_scan_finish(Epson_Scanner * s) +-{ +- DBG(5, "%s\n", __func__); +- +- free(s->buf); +- s->buf = NULL; +- +- if (s->hw->ADF && s->hw->use_extension && s->val[OPT_AUTO_EJECT].w) +- if (e2_check_adf(s) == SANE_STATUS_NO_DOCS) +- esci_eject(s); +- +- /* XXX required? */ +- esci_reset(s); +-} +- + static inline int + get_color(int status) + { +@@ -4103,287 +2400,11 @@ + } + } + +-static void +-e2_copy_image_data(Epson_Scanner * s, SANE_Byte * data, SANE_Int max_length, +- SANE_Int * length) +-{ +- if (!s->block && SANE_FRAME_RGB == s->params.format) { +- +- max_length /= 3; +- +- if (max_length > s->end - s->ptr) +- max_length = s->end - s->ptr; +- +- *length = 3 * max_length; +- +- if (s->invert_image == SANE_TRUE) { +- while (max_length-- != 0) { +- /* invert the three values */ +- *data++ = (unsigned char) ~(s->ptr[0]); +- *data++ = +- (unsigned char) ~(s-> +- ptr[s->params. +- pixels_per_line]); +- *data++ = +- (unsigned char) ~(s-> +- ptr[2 * +- s->params. +- pixels_per_line]); +- ++s->ptr; +- } +- } else { +- while (max_length-- != 0) { +- *data++ = s->ptr[0]; +- *data++ = s->ptr[s->params.pixels_per_line]; +- *data++ = +- s->ptr[2 * s->params.pixels_per_line]; +- ++s->ptr; +- } +- } +- } else { +- if (max_length > s->end - s->ptr) +- max_length = s->end - s->ptr; +- +- *length = max_length; +- +- if (1 == s->params.depth) { +- if (s->invert_image == SANE_TRUE) { +- while (max_length-- != 0) +- *data++ = *s->ptr++; +- } else { +- while (max_length-- != 0) +- *data++ = ~*s->ptr++; +- } +- } else { +- +- if (s->invert_image == SANE_TRUE) { +- int i; +- +- for (i = 0; i < max_length; i++) { +- data[i] = +- (unsigned char) ~(s->ptr[i]); +- } +- } else { +- memcpy(data, s->ptr, max_length); +- } +- s->ptr += max_length; +- } +- } +-} +- +-static SANE_Status +-e2_ext_sane_read(SANE_Handle handle) +-{ +- Epson_Scanner *s = (Epson_Scanner *) handle; +- SANE_Status status = SANE_STATUS_GOOD; +- size_t buf_len = 0, read; +- +- /* did we passed everything we read to sane? */ +- if (s->ptr == s->end) { +- +- if (s->eof) +- return SANE_STATUS_EOF; +- +- s->ext_counter++; +- +- /* sane has already got the data, read some more, the final +- * error byte must not be included in buf_len +- */ +- buf_len = s->ext_block_len; +- +- if (s->ext_counter == s->ext_blocks && s->ext_last_len) +- buf_len = s->ext_last_len; +- +- DBG(18, "%s: block %d, size %lu\n", __func__, s->ext_counter, +- (u_long) buf_len); +- +- /* receive image data + error code */ +- read = e2_recv(s, s->buf, buf_len + 1, &status); +- +- DBG(18, "%s: read %lu bytes\n", __func__, (u_long) read); +- +- if (read != buf_len + 1) +- return SANE_STATUS_IO_ERROR; +- +- /* XXX check error code in buf[buf_len] +- if (s->buf[buf_len] & ... +- */ +- +- /* ack every block except the last one */ +- if (s->ext_counter < s->ext_blocks) { +- size_t next_len = s->ext_block_len; +- +- if (s->ext_counter == (s->ext_blocks - 1)) +- next_len = s->ext_last_len; +- +- status = e2_ack_next(s, next_len + 1); +- } else +- s->eof = SANE_TRUE; +- +- s->end = s->buf + buf_len; +- s->ptr = s->buf; +- } +- +- return status; +-} +- +-static SANE_Status +-e2_block_sane_read(SANE_Handle handle) +-{ +- Epson_Scanner *s = (Epson_Scanner *) handle; +- SANE_Status status; +- SANE_Bool reorder = SANE_FALSE; +- SANE_Bool needStrangeReorder = SANE_FALSE; +- +- START_READ: +- DBG(18, "%s: begin\n", __func__); +- +- if (s->ptr == s->end) { +- EpsonDataRec result; +- size_t buf_len; +- +- if (s->eof) { +- if (s->hw->color_shuffle) { +- DBG(1, +- "written %d lines after color shuffle\n", +- s->lines_written); +- DBG(1, "lines requested: %d\n", +- s->params.lines); +- } +- +- return SANE_STATUS_EOF; +- } +- +- status = read_info_block(s, &result); +- if (status != SANE_STATUS_GOOD) { +- return status; +- } +- +- buf_len = result.buf[1] << 8 | result.buf[0]; +- buf_len *= (result.buf[3] << 8 | result.buf[2]); +- +- DBG(18, "%s: buf len = %lu\n", __func__, (u_long) buf_len); +- +- { +- /* do we have to reorder the data ? */ +- if (get_color(result.status) == 0x01) +- reorder = SANE_TRUE; +- +- e2_recv(s, s->buf, buf_len, &status); +- if (status != SANE_STATUS_GOOD) { +- return status; +- } +- } +- +- if (result.status & STATUS_AREA_END) { +- DBG(1, "%s: EOF\n", __func__); +- s->eof = SANE_TRUE; +- } else { +- if (s->canceling) { +- status = e2_cmd_simple(s, S_CAN, 1); +- return SANE_STATUS_CANCELLED; +- } else { +- status = e2_ack(s); +- } +- } +- +- s->end = s->buf + buf_len; +- s->ptr = s->buf; +- +- /* +- * if we have to re-order the color components (GRB->RGB) we +- * are doing this here: +- */ +- +- /* +- * Some scanners (e.g. the Perfection 1640 and GT-2200) seem +- * to have the R and G channels swapped. +- * The GT-8700 is the Asian version of the Perfection 1640. +- * If the scanner name is one of these and the scan mode is +- * RGB then swap the colors. +- */ +- +- needStrangeReorder = +- (strstr(s->hw->model, "GT-2200") || +- ((strstr(s->hw->model, "1640") +- && strstr(s->hw->model, "Perfection")) +- || strstr(s->hw->model, "GT-8700"))) +- && s->params.format == SANE_FRAME_RGB; +- +- /* +- * Certain Perfection 1650 also need this re-ordering of the two +- * color channels. These scanners are identified by the problem +- * with the half vertical scanning area. When we corrected this, +- * we also set the variable s->hw->need_color_reorder +- */ +- if (s->hw->need_color_reorder) +- reorder = SANE_FALSE; /* reordering once is enough */ +- +- if (reorder && s->params.format == SANE_FRAME_RGB) { +- SANE_Byte *ptr; +- +- ptr = s->buf; +- while (ptr < s->end) { +- if (s->params.depth > 8) { +- SANE_Byte tmp; +- +- /* R->G G->R */ +- tmp = ptr[0]; +- ptr[0] = ptr[2]; /* first Byte G */ +- ptr[2] = tmp; /* first Byte R */ +- +- tmp = ptr[1]; +- ptr[1] = ptr[3]; /* second Byte G */ +- ptr[3] = tmp; /* second Byte R */ +- +- ptr += 6; /* go to next pixel */ +- } else { +- /* R->G G->R */ +- SANE_Byte tmp; +- +- tmp = ptr[0]; +- ptr[0] = ptr[1]; /* G */ +- ptr[1] = tmp; /* R */ +- /* B stays the same */ +- ptr += 3; /* go to next pixel */ +- } +- } +- } +- +- /* +- * Do the color_shuffle if everything else is correct - at this time +- * most of the stuff is hardcoded for the Perfection 610 +- */ +- +- if (s->hw->color_shuffle) { +- int new_length = 0; +- +- status = color_shuffle(s, &new_length); +- +- /* +- * If no bytes are returned, check if the scanner is already done, if so, +- * we'll probably just return, but if there is more data to process get +- * the next batch. +- */ +- if (new_length == 0 && s->end != s->ptr) +- goto START_READ; +- +- s->end = s->buf + new_length; +- s->ptr = s->buf; +- } +- +- DBG(18, "%s: begin scan2\n", __func__); +- } +- +- DBG(18, "%s: end\n", __func__); +- +- return SANE_STATUS_GOOD; +-} +- ++/* this moves data from our buffers to SANE */ + + SANE_Status +-sane_read(SANE_Handle handle, SANE_Byte * data, SANE_Int max_length, +- SANE_Int * length) ++sane_read(SANE_Handle handle, SANE_Byte *data, SANE_Int max_length, ++ SANE_Int *length) + { + SANE_Status status; + Epson_Scanner *s = (Epson_Scanner *) handle; +@@ -4395,7 +2416,7 @@ + else + status = e2_block_sane_read(handle); + +- DBG(18, "moving data\n"); ++ DBG(18, "moving data %d %p %p\n", max_length, s->ptr, s->end); + e2_copy_image_data(s, data, max_length, length); + + /* continue reading if appropriate */ +@@ -4407,180 +2428,6 @@ + return status; + } + +- +-static SANE_Status +-color_shuffle(SANE_Handle handle, int *new_length) +-{ +- Epson_Scanner *s = (Epson_Scanner *) handle; +- SANE_Byte *buf = s->buf; +- int length = s->end - s->buf; +- +- if (s->hw->color_shuffle == SANE_TRUE) { +- SANE_Byte *data_ptr; /* ptr to data to process */ +- SANE_Byte *data_end; /* ptr to end of processed data */ +- SANE_Byte *out_data_ptr; /* ptr to memory when writing data */ +- int i; /* loop counter */ +- +- /* +- * It looks like we are dealing with a scanner that has an odd way +- * of dealing with colors... The red and blue scan lines are shifted +- * up or down by a certain number of lines relative to the green line. +- */ +- DBG(5, "%s\n", __func__); +- +- /* +- * Initialize the variables we are going to use for the +- * copying of the data. data_ptr is the pointer to +- * the currently worked on scan line. data_end is the +- * end of the data area as calculated from adding *length +- * to the start of data. +- * out_data_ptr is used when writing out the processed data +- * and always points to the beginning of the next line to +- * write. +- */ +- data_ptr = out_data_ptr = buf; +- data_end = data_ptr + length; +- +- /* +- * The image data is in *buf, we know that the buffer contains s->end - s->buf ( = length) +- * bytes of data. The width of one line is in s->params.bytes_per_line +- * +- * The buffer area is supposed to have a number of full scan +- * lines, let's test if this is the case. +- */ +- +- if (length % s->params.bytes_per_line != 0) { +- DBG(1, "error in buffer size: %d / %d\n", length, +- s->params.bytes_per_line); +- return SANE_STATUS_INVAL; +- } +- +- while (data_ptr < data_end) { +- SANE_Byte *source_ptr, *dest_ptr; +- int loop; +- +- /* copy the green information into the current line */ +- +- source_ptr = data_ptr + 1; +- dest_ptr = s->line_buffer[s->color_shuffle_line] + 1; +- +- for (i = 0; i < s->params.bytes_per_line / 3; i++) { +- *dest_ptr = *source_ptr; +- dest_ptr += 3; +- source_ptr += 3; +- } +- +- /* copy the red information n lines back */ +- +- if (s->color_shuffle_line >= s->line_distance) { +- source_ptr = data_ptr + 2; +- dest_ptr = +- s->line_buffer[s->color_shuffle_line - +- s->line_distance] + 2; +- +-/* while (source_ptr < s->line_buffer[s->color_shuffle_line] + s->params.bytes_per_line) */ +- for (loop = 0; +- loop < s->params.bytes_per_line / 3; +- loop++) { +- *dest_ptr = *source_ptr; +- dest_ptr += 3; +- source_ptr += 3; +- } +- } +- +- /* copy the blue information n lines forward */ +- +- source_ptr = data_ptr; +- dest_ptr = +- s->line_buffer[s->color_shuffle_line + +- s->line_distance]; +- +-/* while (source_ptr < s->line_buffer[s->color_shuffle_line] + s->params.bytes_per_line) */ +- for (loop = 0; loop < s->params.bytes_per_line / 3; +- loop++) { +- *dest_ptr = *source_ptr; +- dest_ptr += 3; +- source_ptr += 3; +- } +- +- data_ptr += s->params.bytes_per_line; +- +- if (s->color_shuffle_line == s->line_distance) { +- /* +- * We just finished the line in line_buffer[0] - write it to the +- * output buffer and continue. +- * +- * The ouput buffer ist still "buf", but because we are +- * only overwriting from the beginning of the memory area +- * we are not interfering with the "still to shuffle" data +- * in the same area. +- */ +- +- /* +- * Strip the first and last n lines and limit to +- */ +- if ((s->current_output_line >= +- s->line_distance) +- && (s->current_output_line < +- s->params.lines + s->line_distance)) { +- memcpy(out_data_ptr, +- s->line_buffer[0], +- s->params.bytes_per_line); +- out_data_ptr += +- s->params.bytes_per_line; +- +- s->lines_written++; +- } +- +- s->current_output_line++; +- +- /* +- * Now remove the 0-entry and move all other +- * lines up by one. There are 2*line_distance + 1 +- * buffers, * therefore the loop has to run from 0 +- * to * 2*line_distance, and because we want to +- * copy every n+1st entry to n the loop runs +- * from - to 2*line_distance-1! +- */ +- +- free(s->line_buffer[0]); +- +- for (i = 0; i < s->line_distance * 2; i++) { +- s->line_buffer[i] = +- s->line_buffer[i + 1]; +- } +- +- /* +- * and create one new buffer at the end +- */ +- +- s->line_buffer[s->line_distance * 2] = +- malloc(s->params.bytes_per_line); +- if (s->line_buffer[s->line_distance * 2] == +- NULL) { +- DBG(1, "out of memory (line %d)\n", +- __LINE__); +- return SANE_STATUS_NO_MEM; +- } +- } else { +- s->color_shuffle_line++; /* increase the buffer number */ +- } +- } +- +- /* +- * At this time we've used up all the new data from the scanner, some of +- * it is still in the line_buffers, but we are ready to return some of it +- * to the front end software. To do so we have to adjust the size of the +- * data area and the *new_length variable. +- */ +- +- *new_length = out_data_ptr - buf; +- } +- +- return SANE_STATUS_GOOD; +- +-} +- + /* + * void sane_cancel(SANE_Handle handle) + * +@@ -4608,79 +2455,27 @@ + if (dummy == NULL) { + DBG(1, "Out of memory\n"); + return; +- } else { +- +- /* there is still data to read from the scanner */ +- s->canceling = SANE_TRUE; +- +- /* XXX check this condition, we used to check +- * for SANE_STATUS_CANCELLED */ +- while (!s->eof && +- (status == SANE_STATUS_GOOD +- || status == SANE_STATUS_DEVICE_BUSY)) { +- /* empty body, the while condition does the processing */ +- status = sane_read(s, dummy, +- s->params.bytes_per_line, +- &len); +- } +- free(dummy); + } +- } +-} +- +-static void +-filter_resolution_list(Epson_Scanner * s) +-{ +- /* re-create the list */ +- +- if (s->val[OPT_LIMIT_RESOLUTION].w == SANE_TRUE) { +- /* copy the short list */ +- +- /* filter out all values that are not 300 or 400 dpi based */ +- int i; +- +- int new_size = 0; +- SANE_Bool is_correct_resolution = SANE_FALSE; +- +- for (i = 0; i < s->hw->res_list_size; i++) { +- SANE_Word res; +- res = s->hw->res_list[i]; +- if ((res < 100) || res == 150 || (0 == (res % 300)) +- || (0 == (res % 400))) { +- /* add the value */ +- new_size++; + +- s->hw->resolution_list[new_size] = +- s->hw->res_list[i]; +- +- /* check for a valid current resolution */ +- if (res == s->val[OPT_RESOLUTION].w) +- is_correct_resolution = SANE_TRUE; +- } +- } +- s->hw->resolution_list[0] = new_size; ++ /* there is still data to read from the scanner */ ++ s->canceling = SANE_TRUE; + +- if (is_correct_resolution == SANE_FALSE) { +- for (i = 1; i <= new_size; i++) { +- if (s->val[OPT_RESOLUTION].w < +- s->hw->resolution_list[i]) { +- s->val[OPT_RESOLUTION].w = +- s->hw->resolution_list[i]; +- break; +- } +- } ++ /* XXX check this condition, we used to check ++ * for SANE_STATUS_CANCELLED */ ++ while (!s->eof && ++ (status == SANE_STATUS_GOOD ++ || status == SANE_STATUS_DEVICE_BUSY)) { ++ /* empty body, the while condition does the processing */ ++ /* XXX ? */ ++ status = sane_read(s, dummy, ++ s->params.bytes_per_line, ++ &len); + } + +- } else { +- /* copy the full list */ +- s->hw->resolution_list[0] = s->hw->res_list_size; +- memcpy(&(s->hw->resolution_list[1]), s->hw->res_list, +- s->hw->res_list_size * sizeof(SANE_Word)); ++ free(dummy); + } + } + +-/**********************************************************************************/ +- + /* + * SANE_Status sane_set_io_mode() + * +@@ -4688,12 +2483,9 @@ + */ + + SANE_Status +-sane_set_io_mode(SANE_Handle handle, SANE_Bool non_blocking) ++sane_set_io_mode(SANE_Handle __sane_unused__ handle, ++ SANE_Bool __sane_unused__ non_blocking) + { +- /* get rid of compiler warning */ +- handle = handle; +- non_blocking = non_blocking; +- + return SANE_STATUS_UNSUPPORTED; + } + +@@ -4704,11 +2496,8 @@ + */ + + SANE_Status +-sane_get_select_fd(SANE_Handle handle, SANE_Int * fd) ++sane_get_select_fd(SANE_Handle __sane_unused__ handle, ++ SANE_Int __sane_unused__ *fd) + { +- /* get rid of compiler warnings */ +- handle = handle; +- fd = fd; +- + return SANE_STATUS_UNSUPPORTED; + } +diff -urNad sane-backends-1.0.20~/backend/epson2.h sane-backends-1.0.20/backend/epson2.h +--- sane-backends-1.0.20~/backend/epson2.h 2010-01-01 13:07:55.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2.h 2010-01-01 13:08:05.202454509 +0100 +@@ -19,15 +19,29 @@ + #define epson2_h + + #undef BACKEND_NAME +-#define BACKEND_NAME epson2 ++#define BACKEND_NAME epson2 + #define DEBUG_NOT_STATIC + + #include ++ ++#ifdef HAVE_STDDEF_H ++#include ++#endif ++ ++#ifdef HAVE_STDLIB_H ++#include ++#endif ++ ++#ifdef NEED_SYS_TYPES_H + #include ++#endif + +-#include +-#include +-#include ++#include /* for memset and memcpy */ ++#include ++ ++#include "sane/sane.h" ++#include "sane/sanei_backend.h" ++#include "sane/sanei_debug.h" + + #ifdef __GNUC__ + #define __func__ __FUNCTION__ +@@ -36,10 +50,10 @@ + /* I cast my vote for C99... :) */ + #endif + +-#define EPSON2_CONFIG_FILE "epson2.conf" ++#define EPSON2_CONFIG_FILE "epson2.conf" + + #ifndef PATH_MAX +-#define PATH_MAX (1024) ++#define PATH_MAX (1024) + #endif + + #ifndef XtNumber +@@ -52,12 +66,6 @@ + #define DEVICE_NAME_LEN (16) /* length of device name in extended status */ + + +-/* some string constants that are used in the config file */ +- +-#define SANE_EPSON_CONFIG_USB "usb" +-#define SANE_EPSON_CONFIG_PIO "pio" +-#define SANE_EPSON_CONFIG_NET "net" +- + /* string constants for GUI elements that are not defined SANE-wide */ + + #define SANE_NAME_GAMMA_CORRECTION "gamma-correction" +@@ -71,14 +79,11 @@ + #define SANE_EPSON_WAIT_FOR_BUTTON_TITLE SANE_I18N("Wait for Button") + #define SANE_EPSON_WAIT_FOR_BUTTON_DESC SANE_I18N("After sending the scan command, wait until the button on the scanner is pressed to actually start the scan process."); + ++/* misc constants */ + + #define LINES_SHUFFLE_MAX 17 /* 2 x 8 lines plus 1 */ +- +-#define SANE_EPSON_MAX_RETRIES 120 /* how often do we retry during warmup ? */ +- +-#ifndef MM_PER_INCH +-#define MM_PER_INCH 25.4 +-#endif ++#define SANE_EPSON_MAX_RETRIES 14 /* warmup max retry */ ++#define CMD_SIZE_EXT_STATUS 42 + + /* NOTE: you can find these codes with "man ascii". */ + #define STX 0x02 +@@ -92,6 +97,8 @@ + #define S_ACK "\006" + #define S_CAN "\030" + ++/* status bits */ ++ + #define STATUS_FER 0x80 /* fatal error */ + #define STATUS_NOT_READY 0x40 /* scanner is in use on another interface */ + #define STATUS_AREA_END 0x20 /* area end */ +@@ -99,8 +106,6 @@ + #define STATUS_EXT_COMMANDS 0x02 /* scanners supports extended commands */ + #define STATUS_RESERVED 0x01 /* this should be always 0 */ + +-#define CMD_SIZE_EXT_STATUS 42 +- + #define EXT_STATUS_FER 0x80 /* fatal error */ + #define EXT_STATUS_FBF 0x40 /* flat bed scanner */ + #define EXT_STATUS_ADFT 0x20 /* page type ADF */ +@@ -166,172 +171,211 @@ + * scanner with SANE get in touch with me and we can work something out - khk + */ + +-#define EPSON_LEVEL_DEFAULT EPSON_LEVEL_B3 ++#define EPSON_LEVEL_DEFAULT EPSON_LEVEL_B3 + +-typedef struct ++struct EpsonCmd + { +- char *level; ++ char *level; + +- unsigned char request_identity; +- unsigned char request_identity2; /* new request identity command for Dx command level */ +- unsigned char request_status; +- unsigned char request_condition; +- unsigned char set_color_mode; +- unsigned char start_scanning; +- unsigned char set_data_format; +- unsigned char set_resolution; +- unsigned char set_zoom; +- unsigned char set_scan_area; +- unsigned char set_bright; +- SANE_Range bright_range; +- unsigned char set_gamma; +- unsigned char set_halftoning; +- unsigned char set_color_correction; +- unsigned char initialize_scanner; +- unsigned char set_speed; /* B4 and later */ +- unsigned char set_lcount; +- unsigned char mirror_image; /* B5 and later */ +- unsigned char set_gamma_table; /* B4 and later */ +- unsigned char set_outline_emphasis; /* B4 and later */ +- unsigned char set_dither; /* B4 and later */ +- unsigned char set_color_correction_coefficients; /* B3 and later */ +- unsigned char request_extended_status; /* get extended status from scanner */ +- unsigned char control_an_extension; /* for extension control */ +- unsigned char eject; /* for extension control */ +- unsigned char feed; +- unsigned char request_push_button_status; +- unsigned char control_auto_area_segmentation; +- unsigned char set_film_type; /* for extension control */ +- unsigned char set_exposure_time; /* F5 only */ +- unsigned char set_bay; /* F5 only */ +- unsigned char set_threshold; +- unsigned char set_focus_position; /* B8 only */ +- unsigned char request_focus_position; /* B8 only */ +- unsigned char request_extended_identity; +- unsigned char request_scanner_status; +-} EpsonCmdRec, *EpsonCmd; ++ unsigned char request_identity; ++ unsigned char request_identity2; /* new request identity level Dx */ ++ unsigned char request_status; ++ unsigned char request_condition; ++ unsigned char set_color_mode; ++ unsigned char start_scanning; ++ unsigned char set_data_format; ++ unsigned char set_resolution; ++ unsigned char set_zoom; ++ unsigned char set_scan_area; ++ unsigned char set_bright; ++ SANE_Range bright_range; ++ unsigned char set_gamma; ++ unsigned char set_halftoning; ++ unsigned char set_color_correction; ++ unsigned char initialize_scanner; ++ unsigned char set_speed; /* B4 and later */ ++ unsigned char set_lcount; ++ unsigned char mirror_image; /* B5 and later */ ++ unsigned char set_gamma_table; /* B4 and later */ ++ unsigned char set_outline_emphasis; /* B4 and later */ ++ unsigned char set_dither; /* B4 and later */ ++ unsigned char set_color_correction_coefficients; /* B3 and later */ ++ unsigned char request_extended_status; /* get extended status from scanner */ ++ unsigned char control_an_extension; /* for extension control */ ++ unsigned char eject; /* for extension control */ ++ unsigned char feed; ++ unsigned char request_push_button_status; ++ unsigned char control_auto_area_segmentation; ++ unsigned char set_film_type; /* for extension control */ ++ unsigned char set_exposure_time; /* F5 only */ ++ unsigned char set_bay; /* F5 only */ ++ unsigned char set_threshold; ++ unsigned char set_focus_position; /* B8 only */ ++ unsigned char request_focus_position; /* B8 only */ ++ unsigned char request_extended_identity; ++ unsigned char request_scanner_status; ++}; + +-enum +-{ OPT_NUM_OPTS = +- 0, OPT_MODE_GROUP, OPT_MODE, OPT_BIT_DEPTH, OPT_HALFTONE, OPT_DROPOUT, +- OPT_BRIGHTNESS, OPT_SHARPNESS, OPT_GAMMA_CORRECTION, OPT_COLOR_CORRECTION, +- OPT_RESOLUTION, OPT_THRESHOLD, OPT_ADVANCED_GROUP, OPT_MIRROR, +- OPT_AAS, OPT_LIMIT_RESOLUTION, /* OPT_GAMMA_VECTOR */ +- OPT_GAMMA_VECTOR_R, OPT_GAMMA_VECTOR_G, OPT_GAMMA_VECTOR_B, +- OPT_WAIT_FOR_BUTTON, OPT_CCT_GROUP, OPT_CCT_1, OPT_CCT_2, OPT_CCT_3, +- OPT_CCT_4, OPT_CCT_5, OPT_CCT_6, OPT_CCT_7, OPT_CCT_8, OPT_CCT_9, +- OPT_PREVIEW_GROUP, OPT_PREVIEW, OPT_GEOMETRY_GROUP, +- OPT_TL_X, OPT_TL_Y, OPT_BR_X, OPT_BR_Y, OPT_EQU_GROUP, +- OPT_SOURCE, OPT_AUTO_EJECT, OPT_FILM_TYPE, OPT_FOCUS, OPT_BAY, +- OPT_EJECT, OPT_ADF_MODE, NUM_OPTIONS ++enum { ++ OPT_NUM_OPTS = 0, ++ OPT_MODE_GROUP, OPT_MODE, OPT_BIT_DEPTH, OPT_HALFTONE, OPT_DROPOUT, ++ OPT_BRIGHTNESS, OPT_SHARPNESS, OPT_GAMMA_CORRECTION, OPT_COLOR_CORRECTION, ++ OPT_RESOLUTION, OPT_THRESHOLD, OPT_ADVANCED_GROUP, OPT_MIRROR, ++ OPT_AAS, OPT_GAMMA_VECTOR_R, OPT_GAMMA_VECTOR_G, OPT_GAMMA_VECTOR_B, ++ OPT_WAIT_FOR_BUTTON, OPT_CCT_GROUP, OPT_CCT_MODE, OPT_CCT_PROFILE, ++ OPT_PREVIEW_GROUP, OPT_PREVIEW, OPT_GEOMETRY_GROUP, ++ OPT_TL_X, OPT_TL_Y, OPT_BR_X, OPT_BR_Y, OPT_EQU_GROUP, ++ OPT_SOURCE, OPT_AUTO_EJECT, OPT_FILM_TYPE, OPT_FOCUS, OPT_BAY, ++ OPT_EJECT, OPT_ADF_MODE, NUM_OPTIONS + }; + + typedef enum +-{ /* hardware connection to the scanner */ +- SANE_EPSON_NODEV, /* default, no HW specified yet */ +- SANE_EPSON_SCSI, /* SCSI interface */ +- SANE_EPSON_PIO, /* parallel interface */ +- SANE_EPSON_USB, /* USB interface */ +- SANE_EPSON_NET /* network interface */ ++{ /* hardware connection to the scanner */ ++ SANE_EPSON_NODEV, /* default, no HW specified yet */ ++ SANE_EPSON_SCSI, /* SCSI interface */ ++ SANE_EPSON_PIO, /* parallel interface */ ++ SANE_EPSON_USB, /* USB interface */ ++ SANE_EPSON_NET /* network interface */ + } Epson_Connection_Type; + ++struct epson_profile ++{ ++ unsigned int model; ++ double cct[4][9]; ++}; ++ ++enum { ++ CCTP_REFLECTIVE = 0, CCTP_COLORNEG, ++ CCTP_MONONEG, CCTP_COLORPOS ++}; ++ ++struct epson_profile_map ++{ ++ char *name; ++ unsigned int id; ++}; ++ ++extern const struct epson_profile epson_cct_profiles[]; ++extern const struct epson_profile_map epson_cct_models[]; ++ ++/* hardware description */ ++ + struct Epson_Device + { +- struct Epson_Device *next; ++ struct Epson_Device *next; + +- char *name; +- char *model; ++ char *name; ++ char *model; + ++ unsigned int model_id; + +- SANE_Device sane; +- SANE_Int level; +- SANE_Range dpi_range; ++ SANE_Device sane; ++ SANE_Int level; ++ SANE_Range dpi_range; + +- SANE_Range *x_range; /* x range w/out extension */ +- SANE_Range *y_range; /* y range w/out extension */ ++ SANE_Range *x_range; /* x range w/out extension */ ++ SANE_Range *y_range; /* y range w/out extension */ + +- SANE_Range fbf_x_range; /* flattbed x range */ +- SANE_Range fbf_y_range; /* flattbed y range */ +- SANE_Range adf_x_range; /* autom. document feeder x range */ +- SANE_Range adf_y_range; /* autom. document feeder y range */ +- SANE_Range tpu_x_range; /* transparency unit x range */ +- SANE_Range tpu_y_range; /* transparency unit y range */ ++ SANE_Range fbf_x_range; /* flattbed x range */ ++ SANE_Range fbf_y_range; /* flattbed y range */ ++ SANE_Range adf_x_range; /* autom. document feeder x range */ ++ SANE_Range adf_y_range; /* autom. document feeder y range */ ++ SANE_Range tpu_x_range; /* transparency unit x range */ ++ SANE_Range tpu_y_range; /* transparency unit y range */ + +- Epson_Connection_Type connection; +- /* hardware interface type */ ++ Epson_Connection_Type connection; + +- SANE_Int *res_list; /* list of resolutions */ +- SANE_Int res_list_size; /* number of entries in this list */ +- SANE_Int last_res; /* last selected resolution */ +- SANE_Int last_res_preview; /* last selected preview resolution */ ++ SANE_Int *res_list; /* list of resolutions */ ++ SANE_Int res_list_size; /* number of entries in this list */ ++ SANE_Int last_res; /* last selected resolution */ ++ SANE_Int last_res_preview; /* last selected preview resolution */ + +- SANE_Word *resolution_list; /* for display purposes we store a second copy */ ++ SANE_Word *resolution_list; /* for display purposes we store a second copy */ + +- SANE_Bool extension; /* extension is installed */ +- SANE_Int use_extension; /* use the installed extension */ +- SANE_Bool TPU; /* TPU is installed */ +- SANE_Bool TPU2; /* TPU2 is installed */ +- SANE_Bool ADF; /* ADF is installed */ +- SANE_Bool duplex; /* does the ADF handle duplex scanning */ +- SANE_Bool focusSupport; /* does this scanner have support for "set focus position" ? */ +- SANE_Bool color_shuffle; /* does this scanner need color shuffling */ +- SANE_Int maxDepth; /* max. color depth */ ++ SANE_Bool extension; /* extension is installed */ ++ SANE_Int use_extension; /* use the installed extension */ ++ SANE_Bool TPU; /* TPU is installed */ ++ SANE_Bool TPU2; /* TPU2 is installed */ ++ SANE_Bool ADF; /* ADF is installed */ ++ SANE_Bool duplex; /* does the ADF handle duplex scanning */ ++ SANE_Bool focusSupport; /* does this scanner have support for "set focus position" ? */ ++ SANE_Bool color_shuffle; /* does this scanner need color shuffling */ + +- SANE_Int optical_res; /* optical resolution */ +- SANE_Int max_line_distance; ++ SANE_Int maxDepth; /* max. color depth */ ++ SANE_Word *depth_list; + +- SANE_Bool need_double_vertical; +- SANE_Bool need_color_reorder; +- SANE_Bool need_reset_on_source_change; ++ SANE_Int optical_res; /* optical resolution */ ++ SANE_Int max_line_distance; + +- SANE_Bool wait_for_button; /* do we have to wait until the scanner button is pressed? */ ++ SANE_Bool need_double_vertical; ++ SANE_Bool need_color_reorder; ++ SANE_Bool need_reset_on_source_change; + +- SANE_Bool extended_commands; ++ SANE_Bool wait_for_button; /* do we have to wait until the scanner button is pressed? */ + +- EpsonCmd cmd; ++ SANE_Bool extended_commands; ++ ++ struct EpsonCmd *cmd; ++ const struct epson_profile *cct_profile; + }; + + typedef struct Epson_Device Epson_Device; + +- ++/* an instance of a scanner */ + + struct Epson_Scanner + { +- struct Epson_Scanner *next; +- int fd; +- Epson_Device *hw; +- SANE_Option_Descriptor opt[NUM_OPTIONS]; +- Option_Value val[NUM_OPTIONS]; +- SANE_Parameters params; +- SANE_Bool block; +- SANE_Bool eof; +- SANE_Byte *buf, *end, *ptr; +- SANE_Bool canceling; +- SANE_Bool invert_image; +- SANE_Bool focusOnGlass; +- SANE_Byte currentFocusPosition; +-/* SANE_Word gamma_table [ 4] [ 256]; */ +- SANE_Word gamma_table[3][256]; +- SANE_Int retry_count; +- SANE_Byte *line_buffer[LINES_SHUFFLE_MAX]; +- /* buffer lines for color shuffling */ +- SANE_Int color_shuffle_line; /* current line number for color shuffling */ +- SANE_Int line_distance; /* current line distance */ +- SANE_Int current_output_line; /* line counter when color shuffling */ +- SANE_Int lines_written; /* debug variable */ +- SANE_Bool option_has_changed; /* did one of the options change it's value? */ +- SANE_Int left, top, lcount; +- unsigned char *netbuf, *netptr; +- size_t netlen; ++ struct Epson_Scanner *next; ++ struct Epson_Device *hw; + ++ int fd; + +- /* extended image data handshaking */ +- SANE_Int ext_block_len; +- SANE_Int ext_last_len; +- SANE_Int ext_blocks; +- SANE_Int ext_counter; ++ SANE_Option_Descriptor opt[NUM_OPTIONS]; ++ Option_Value val[NUM_OPTIONS]; ++ SANE_Parameters params; ++ ++ SANE_Bool block; ++ SANE_Bool eof; ++ SANE_Byte *buf, *end, *ptr; ++ SANE_Bool canceling; ++ SANE_Word gamma_table[3][256]; ++ SANE_Word cct_table[9]; ++ SANE_Int retry_count; ++ ++ /* buffer lines for color shuffling */ ++ SANE_Byte *line_buffer[LINES_SHUFFLE_MAX]; ++ SANE_Int color_shuffle_line; /* current line number for color shuffling */ ++ SANE_Int line_distance; /* current line distance */ ++ SANE_Int current_output_line; /* line counter when color shuffling */ ++ SANE_Int lines_written; /* debug variable */ ++ ++ SANE_Int left, top, lcount; ++ SANE_Bool focusOnGlass; ++ SANE_Byte currentFocusPosition; ++ ++ /* network buffers */ ++ unsigned char *netbuf, *netptr; ++ size_t netlen; ++ ++ /* extended image data handshaking */ ++ SANE_Int ext_block_len; ++ SANE_Int ext_last_len; ++ SANE_Int ext_blocks; ++ SANE_Int ext_counter; + }; + + typedef struct Epson_Scanner Epson_Scanner; + +-#endif /* epson2_h */ ++struct mode_param ++{ ++ int color; ++ int flags; ++ int dropout_mask; ++ int depth; ++}; ++ ++enum { ++ MODE_BINARY, MODE_GRAY, MODE_COLOR, MODE_INFRARED ++}; ++ ++#endif +diff -urNad sane-backends-1.0.20~/backend/epson2_net.c sane-backends-1.0.20/backend/epson2_net.c +--- sane-backends-1.0.20~/backend/epson2_net.c 2010-01-01 13:07:56.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2_net.c 2010-01-01 13:08:05.203454986 +0100 +@@ -11,38 +11,22 @@ + * published by the Free Software Foundation, version 2. + */ + +-#include "../include/sane/config.h" ++#define DEBUG_DECLARE_ONLY + +-#undef BACKEND_NAME +-#define BACKEND_NAME epson2_net ++#include "sane/config.h" + +-#include +-#include +-#include +-#include +-#include ++#include "sane/sane.h" ++#include "sane/saneopts.h" ++#include "sane/sanei_tcp.h" ++#include "sane/sanei_config.h" ++#include "sane/sanei_backend.h" + + #include "epson2.h" + #include "epson2_net.h" + + #include "byteorder.h" + +-#include +- +-#ifdef HAVE_STDDEF_H +-#include +-#endif +- +-#ifdef HAVE_STDLIB_H +-#include +-#endif +- +-#ifdef NEED_SYS_TYPES_H +-#include +-#endif +- +-#include /* for memset and memcpy */ +-#include ++#include "sane/sanei_debug.h" + + int + sanei_epson_net_read_raw(Epson_Scanner *s, unsigned char *buf, size_t wanted, +@@ -52,7 +36,6 @@ + + *status = SANE_STATUS_GOOD; + +- + while (read < wanted) { + size = sanei_tcp_read(s->fd, buf + read, wanted - read); + +@@ -72,12 +55,13 @@ + sanei_epson_net_read(Epson_Scanner *s, unsigned char *buf, size_t wanted, + SANE_Status * status) + { +- size_t size, read = 0; ++ size_t size; ++ ssize_t read = 0; + unsigned char header[12]; + + /* read from buffer, if available */ + if (s->netptr != s->netbuf) { +- DBG(4, "reading %lu from buffer at %p, %lu available\n", ++ DBG(23, "reading %lu from buffer at %p, %lu available\n", + (u_long) wanted, s->netptr, (u_long) s->netlen); + + memcpy(buf, s->netptr, wanted); +@@ -86,7 +70,7 @@ + s->netlen -= wanted; + + if (s->netlen == 0) { +- DBG(4, "%s: freeing %p\n", __func__, s->netbuf); ++ DBG(23, "%s: freeing %p\n", __func__, s->netbuf); + free(s->netbuf); + s->netbuf = s->netptr = NULL; + s->netlen = 0; +@@ -96,22 +80,28 @@ + } + + /* receive net header */ +- sanei_tcp_read(s->fd, header, 12); ++ size = sanei_tcp_read(s->fd, header, 12); ++ if (size != 12) { ++ *status = SANE_STATUS_IO_ERROR; ++ return 0; ++ } + + if (header[0] != 'I' || header[1] != 'S') { + DBG(1, "header mismatch: %02X %02x\n", header[0], header[1]); + *status = SANE_STATUS_IO_ERROR; + return 0; + } ++ + size = be32atoh(&header[6]); + +- DBG(4, "%s: wanted = %lu, available = %lu\n", __FUNCTION__, ++ DBG(23, "%s: wanted = %lu, available = %lu\n", __FUNCTION__, + (u_long) wanted, (u_long) size); + + *status = SANE_STATUS_GOOD; + + if (size == wanted) { +- DBG(4, "%s: full read\n", __func__); ++ ++ DBG(15, "%s: full read\n", __func__); + read = sanei_tcp_read(s->fd, buf, size); + + if (s->netbuf) { +@@ -119,17 +109,28 @@ + s->netbuf = NULL; + s->netlen = 0; + } +- } else if (wanted < size && s->netlen == size) { +- DBG(4, "%s: partial read\n", __func__); + +- sanei_tcp_read(s->fd, s->netbuf, size); ++ if (read < 0) { ++ *status = SANE_STATUS_IO_ERROR; ++ return 0; ++ } ++ ++/* } else if (wanted < size && s->netlen == size) { */ ++ } else { ++ DBG(23, "%s: partial read\n", __func__); ++ ++ read = sanei_tcp_read(s->fd, s->netbuf, size); ++ if (read != size) { ++ *status = SANE_STATUS_IO_ERROR; ++ return 0; ++ } + + s->netlen = size - wanted; + s->netptr += wanted; + read = wanted; + +- DBG(4, "0,4 %02x %02x\n", s->netbuf[0], s->netbuf[4]); +- DBG(4, "storing %lu to buffer at %p, next read at %p, %lu bytes left\n", ++ DBG(23, "0,4 %02x %02x\n", s->netbuf[0], s->netbuf[4]); ++ DBG(23, "storing %lu to buffer at %p, next read at %p, %lu bytes left\n", + (u_long) size, s->netbuf, s->netptr, (u_long) s->netlen); + + memcpy(buf, s->netbuf, wanted); +@@ -155,11 +156,11 @@ + if (reply_len) { + s->netbuf = s->netptr = malloc(reply_len); + s->netlen = reply_len; +- DBG(8, "allocated %lu bytes at %p\n", ++ DBG(24, "allocated %lu bytes at %p\n", + (u_long) reply_len, s->netbuf); + } + +- DBG(2, "%s: cmd = %04x, buf = %p, buf_size = %lu, reply_len = %lu\n", ++ DBG(24, "%s: cmd = %04x, buf = %p, buf_size = %lu, reply_len = %lu\n", + __FUNCTION__, cmd, buf, (u_long) buf_size, (u_long) reply_len); + + memset(h1, 0x00, 12); +@@ -174,7 +175,7 @@ + h1[4] = 0x00; + h1[5] = 0x0C; /* Don't know what's that */ + +- DBG(9, "H1[0]: %02x %02x %02x %02x\n", h1[0], h1[1], h1[2], h1[3]); ++ DBG(24, "H1[0]: %02x %02x %02x %02x\n", h1[0], h1[1], h1[2], h1[3]); + + if((cmd >> 8) == 0x20) { + htobe32a(&h1[6], buf_size + 8); +@@ -182,9 +183,9 @@ + htobe32a(&h2[0], buf_size); + htobe32a(&h2[4], reply_len); + +- DBG(9, "H1[6]: %02x %02x %02x %02x (%lu)\n", h1[6], h1[7], h1[8], h1[9], (u_long) (buf_size + 8)); +- DBG(9, "H2[0]: %02x %02x %02x %02x (%lu)\n", h2[0], h2[1], h2[2], h2[3], (u_long) buf_size); +- DBG(9, "H2[4]: %02x %02x %02x %02x (%lu)\n", h2[4], h2[5], h2[6], h2[7], (u_long) reply_len); ++ DBG(24, "H1[6]: %02x %02x %02x %02x (%lu)\n", h1[6], h1[7], h1[8], h1[9], (u_long) (buf_size + 8)); ++ DBG(24, "H2[0]: %02x %02x %02x %02x (%lu)\n", h2[0], h2[1], h2[2], h2[3], (u_long) buf_size); ++ DBG(24, "H2[4]: %02x %02x %02x %02x (%lu)\n", h2[4], h2[5], h2[6], h2[7], (u_long) reply_len); + } + + if ((cmd >> 8) == 0x20 && (buf_size || reply_len)) { +diff -urNad sane-backends-1.0.20~/backend/epson2_net.h sane-backends-1.0.20/backend/epson2_net.h +--- sane-backends-1.0.20~/backend/epson2_net.h 2010-01-01 13:07:56.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2_net.h 2010-01-01 13:08:05.203454986 +0100 +@@ -2,7 +2,7 @@ + #define _EPSON2_NET_H_ + + #include +-#include ++#include "../include/sane/sane.h" + + extern int sanei_epson_net_read(struct Epson_Scanner *s, unsigned char *buf, size_t buf_size, + SANE_Status *status); +diff -urNad sane-backends-1.0.20~/backend/epson2_scsi.c sane-backends-1.0.20/backend/epson2_scsi.c +--- sane-backends-1.0.20~/backend/epson2_scsi.c 2010-01-01 13:07:56.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2_scsi.c 2010-01-01 13:08:05.203454986 +0100 +@@ -2,8 +2,8 @@ + #define BACKEND_NAME epson2_scsi + + #include "../include/sane/config.h" +-#include +-#include ++#include "../include/sane/sanei_debug.h" ++#include "../include/sane/sanei_scsi.h" + #include "epson2_scsi.h" + + #ifdef HAVE_STDDEF_H +diff -urNad sane-backends-1.0.20~/backend/epson2_scsi.h sane-backends-1.0.20/backend/epson2_scsi.h +--- sane-backends-1.0.20~/backend/epson2_scsi.h 2010-01-01 13:07:56.000000000 +0100 ++++ sane-backends-1.0.20/backend/epson2_scsi.h 2010-01-01 13:08:05.203454986 +0100 +@@ -2,7 +2,7 @@ + #define _EPSON2_SCSI_H_ + + #include +-#include ++#include "../include/sane/sane.h" + + #define TEST_UNIT_READY_COMMAND (0x00) + #define READ_6_COMMAND (0x08) --- sane-backends-1.0.20.orig/debian/patches/07_tools_missing_libcam.dpatch +++ sane-backends-1.0.20/debian/patches/07_tools_missing_libcam.dpatch @@ -0,0 +1,20 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 07_tools_missing_libcam.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Add missing SCSI libraries to sane_find_scanner, restores build +## DP: on kFreeBSD. From upstream via Aurlien JARNO. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/tools/Makefile.in sane-backends-1.0.20/tools/Makefile.in +--- sane-backends-1.0.20~/tools/Makefile.in 2009-04-30 15:41:19.000000000 +0200 ++++ sane-backends-1.0.20/tools/Makefile.in 2009-05-14 12:04:37.038246699 +0200 +@@ -270,7 +270,7 @@ + ../backend/sane_strstatus.c + + sane_find_scanner_LDADD = ../sanei/libsanei.la ../lib/liblib.la \ +- @USB_LIBS@ @IEEE1284_LIBS@ ++ @USB_LIBS@ @IEEE1284_LIBS@ @SCSI_LIBS@ + + gamma4scanimage_SOURCES = gamma4scanimage.c + gamma4scanimage_LDADD = @MATH_LIB@ --- sane-backends-1.0.20.orig/debian/patches/11_udev_147.dpatch +++ sane-backends-1.0.20/debian/patches/11_udev_147.dpatch @@ -0,0 +1,57 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 11_udev_147.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: - remove NAME="%k" from SCSI rules (udev 147 warning) +## DP: - remove support for kernel < 2.6.22 + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/tools/sane-desc.c sane-backends-1.0.20/tools/sane-desc.c +--- sane-backends-1.0.20~/tools/sane-desc.c 2009-11-09 19:57:16.753669257 +0100 ++++ sane-backends-1.0.20/tools/sane-desc.c 2009-11-09 20:44:16.420668429 +0100 +@@ -3428,14 +3428,11 @@ + + print_udev_header (); + printf("ACTION!=\"add\", GOTO=\"libsane_rules_end\"\n" +- "ENV{DEVTYPE}==\"usb_device\", GOTO=\"libsane_create_usb_dev\"\n" ++ "ENV{DEVTYPE}==\"usb_device\", GOTO=\"libsane_usb_rules_begin\"\n" + "SUBSYSTEMS==\"scsi\", GOTO=\"libsane_scsi_rules_begin\"\n" +- "SUBSYSTEM==\"usb_device\", GOTO=\"libsane_usb_rules_begin\"\n" +- "SUBSYSTEM!=\"usb_device\", GOTO=\"libsane_usb_rules_end\"\n" + "\n"); + +- printf("# Kernel >= 2.6.22 jumps here\n" +- "LABEL=\"libsane_create_usb_dev\"\n" ++ printf("LABEL=\"libsane_usb_rules_begin\"\n" + "\n"); + + printf("# For Linux >= 2.6.22 without CONFIG_USB_DEVICE_CLASS=y\n" +@@ -3444,10 +3441,6 @@ + "MODE=\"0664\", OWNER=\"root\", GROUP=\"root\"\n" + "\n"); + +- printf("# Kernel < 2.6.22 jumps here\n" +- "LABEL=\"libsane_usb_rules_begin\"\n" +- "\n"); +- + while (usbid) + { + manufacturer_model_type * name = usbid->name; +@@ -3488,7 +3481,7 @@ + printf ("SUBSYSTEMS!=\"scsi\", GOTO=\"libsane_scsi_rules_end\"\n\n"); + printf ("LABEL=\"libsane_scsi_rules_begin\"\n"); + printf ("# Generic: SCSI device type 6 indicates a scanner\n"); +- printf ("KERNEL==\"sg[0-9]*\", NAME=\"%%k\", ATTRS{type}==\"6\", MODE=\"%s\", GROUP=\"%s\"\n", DEVMODE, DEVGROUP); ++ printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"6\", MODE=\"%s\", GROUP=\"%s\"\n", DEVMODE, DEVGROUP); + printf ("# Some scanners advertise themselves as SCSI device type 3\n"); + + while (scsiid) +@@ -3521,7 +3514,7 @@ + } + } + printf ("\n"); +- printf ("KERNEL==\"sg[0-9]*\", NAME=\"%%k\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", MODE=\"%s\", GROUP=\"%s\"\n", ++ printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", MODE=\"%s\", GROUP=\"%s\"\n", + scsiid->scsi_vendor_id, scsiid->scsi_product_id, DEVMODE, DEVGROUP); + scsiid = scsiid->next; + } --- sane-backends-1.0.20.orig/debian/patches/00list +++ sane-backends-1.0.20/debian/patches/00list @@ -0,0 +1,28 @@ +01_missing_pthreads +02_frontends_libs +03_libsane_deps +04_udev_rules_fix +05_saned_avahi_fds_fix +06_cap_always_settable +07_tools_missing_libcam +08_cardscan_usbids +09_po_update_es_add_gl +10_sanei_usb_update +#11_udev_147 +12_saned_polling_fix +13_saned_aliasing_fix +20_disable_rpath +21_sane-config.in_no_rpath +22_dll_backend_conf +23_unneeded_doc +24_sane-desc.c_debian_mods +30_xerox_samsung_ids +31_genesys_raw_log_fix +32_epson_perfection636 +33_epson2_update +34_genesys_gl841_cal_fix +42_add_epson_cx_6000 +43_scanadf_error_check +44_add_epson_mfp_devs +ubuntu_udev_noperm + --- sane-backends-1.0.20.orig/debian/patches/12_saned_polling_fix.dpatch +++ sane-backends-1.0.20/debian/patches/12_saned_polling_fix.dpatch @@ -0,0 +1,31 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 12_saned_polling_fix.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix saned polling loop for more than 1 fds. +## DP: Upstream commits: +## DP: - ec295e359a584de681681c96657ae0594a1df7c2 +## DP: - 161ca93aa501a97f078f03bbeed0e0eed6fadb0c + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/frontend/saned.c sane-backends-1.0.20/frontend/saned.c +--- sane-backends-1.0.20~/frontend/saned.c 2009-12-24 17:25:02.430074677 +0100 ++++ sane-backends-1.0.20/frontend/saned.c 2009-12-24 17:26:43.122074469 +0100 +@@ -3092,7 +3092,7 @@ + for (i = 0, fdp = fds; i < nfds; i++, fdp++) + { + /* Error on an fd */ +- if (! (fdp->revents & POLLIN)) ++ if (fdp->revents & (POLLERR | POLLHUP | POLLNVAL)) + { + for (i = 0, fdp = fds; i < nfds; i++, fdp++) + close (fdp->fd); +@@ -3106,6 +3106,8 @@ + + break; + } ++ else if (! (fdp->revents & POLLIN)) ++ continue; + + fd = accept (fdp->fd, 0, 0); + if (fd < 0) --- sane-backends-1.0.20.orig/debian/patches/21_sane-config.in_no_rpath.dpatch +++ sane-backends-1.0.20/debian/patches/21_sane-config.in_no_rpath.dpatch @@ -0,0 +1,43 @@ +#!/bin/sh -e +## 02_sane-config.in_no_rpath.dpatch by Julien BLACHE +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Do not output rpath in --ldflags. + +if [ $# -ne 1 ]; then + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +fi + +[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts +patch_opts="${patch_opts:--f --no-backup-if-mismatch}" + +case "$1" in + -patch) patch $patch_opts -p1 < $0;; + -unpatch) patch $patch_opts -p1 -R < $0;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1;; +esac + +exit 0 + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/tools/sane-config.in sane-backends-1.0.20/tools/sane-config.in +--- sane-backends-1.0.20~/tools/sane-config.in 2009-03-05 02:54:33.000000000 +0100 ++++ sane-backends-1.0.20/tools/sane-config.in 2009-05-04 11:01:05.458379795 +0200 +@@ -7,12 +7,12 @@ + PACKAGE="@PACKAGE@" + scriptname="sane-config" + +-LINKER_RPATH="@LINKER_RPATH@" ++LINKER_RPATH="" + + prefix="@prefix@" + exec_prefix="@exec_prefix@" + +-LIBS="@LIBS@ @DL_LIBS@ @LIBV4L_LIBS@ @MATH_LIB@ @TIFF_LIBS@ @JPEG_LIBS@ @GPHOTO2_LIBS@ @SOCKET_LIBS@ @AVAHI_LIBS@ @USB_LIBS@ @SCSI_LIBS@" ++LIBS="@LIBS@" + pkgincludedir="@pkgincludedir@" + pkglibdir="@pkglibdir@" + includedir="@includedir@" --- sane-backends-1.0.20.orig/debian/patches/10_sanei_usb_update.dpatch +++ sane-backends-1.0.20/debian/patches/10_sanei_usb_update.dpatch @@ -0,0 +1,46 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 10_sanei_usb_update.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Favour the interface detected by sanei_usb_init(). Helps with some +## DP: machines, like the Canon MP730. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/sanei/sanei_usb.c sane-backends-1.0.20/sanei/sanei_usb.c +--- sane-backends-1.0.20~/sanei/sanei_usb.c 2009-02-20 19:17:01.000000000 +0100 ++++ sane-backends-1.0.20/sanei/sanei_usb.c 2009-08-29 16:27:52.764209580 +0200 +@@ -1236,11 +1236,18 @@ + /* Loop through all of the alternate settings */ + for (a = 0; a < dev->config[c].interface[i].num_altsetting; a++) + { +- + DBG (5, "sanei_usb_open: configuration nr: %d\n", c); + DBG (5, "sanei_usb_open: interface nr: %d\n", i); + DBG (5, "sanei_usb_open: alt_setting nr: %d\n", a); + ++ /* Start by interfaces found in sanei_usb_init */ ++ if (c == 0 && i != devices[devcount].interface_nr) ++ { ++ DBG (5, "sanei_usb_open: interface %d not detected as " ++ "a scanner by sanei_usb_init, ignoring.\n", i); ++ continue; ++ } ++ + interface = &dev->config[c].interface[i].altsetting[a]; + + /* Now we look for usable endpoints */ +@@ -1546,6 +1553,14 @@ + DBG (5, "sanei_usb_open: interface nr: %d\n", i); + DBG (5, "sanei_usb_open: alt_setting nr: %d\n", a); + ++ /* Start by interfaces found in sanei_usb_init */ ++ if (c == 0 && i != devices[devcount].interface_nr) ++ { ++ DBG (5, "sanei_usb_open: interface %d not detected as " ++ "a scanner by sanei_usb_init, ignoring.\n", i); ++ continue; ++ } ++ + interface = &config->interface[i].altsetting[a]; + + /* Now we look for usable endpoints */ --- sane-backends-1.0.20.orig/debian/patches/02_frontends_libs.dpatch +++ sane-backends-1.0.20/debian/patches/02_frontends_libs.dpatch @@ -0,0 +1,28 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 02_frontends_libs.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Only link frontends against the libraries they need. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/frontend/Makefile.in sane-backends-1.0.20/frontend/Makefile.in +--- sane-backends-1.0.20~/frontend/Makefile.in 2009-04-30 15:41:19.000000000 +0200 ++++ sane-backends-1.0.20/frontend/Makefile.in 2009-05-04 11:53:49.669902772 +0200 +@@ -144,7 +144,7 @@ + LATEX = @LATEX@ + LDFLAGS = @LDFLAGS@ + LIBOBJS = @LIBOBJS@ +-LIBS = @LIBS@ ++LIBS = + LIBTOOL = @LIBTOOL@ + LIBUSB_1_0_CFLAGS = @LIBUSB_1_0_CFLAGS@ + LIBUSB_1_0_LIBS = @LIBUSB_1_0_LIBS@ +@@ -254,7 +254,7 @@ + scanimage_LDADD = ../lib/liblib.la ../lib/libfelib.la ../backend/libsane.la + saned_SOURCES = saned.c + saned_LDADD = ../sanei/libsanei.la ../lib/liblib.la ../lib/libfelib.la \ +- ../backend/libsane.la @SYSLOG_LIBS@ ++ ../backend/libsane.la @SYSLOG_LIBS@ @AVAHI_LIBS@ + + test_SOURCES = test.c + test_LDADD = ../lib/liblib.la ../lib/libfelib.la ../backend/libsane.la --- sane-backends-1.0.20.orig/debian/patches/30_xerox_samsung_ids.dpatch +++ sane-backends-1.0.20/debian/patches/30_xerox_samsung_ids.dpatch @@ -0,0 +1,99 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 30_xerox_samsung_ids.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Add USB IDs for various Samsung-branded MFPs. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/backend/xerox_mfp.conf.in sane-backends-1.0.20/backend/xerox_mfp.conf.in +--- sane-backends-1.0.20~/backend/xerox_mfp.conf.in 2009-04-01 18:26:58.000000000 +0200 ++++ sane-backends-1.0.20/backend/xerox_mfp.conf.in 2009-09-11 19:14:00.944136856 +0200 +@@ -5,3 +5,21 @@ + + #Xerox Phaser 6110MFP + usb 0x0924 0x3d5d ++ ++#Samsung CLX-3170fn ++usb 0x04e8 0x342a ++ ++#Samsung SCX-4200 ++usb 0x04e8 0x341b ++ ++#Samsung SCX4725-FN ++usb 0x04e8 0x341f ++ ++#Samsung SCX-4500 ++usb 0x04e8 0x3426 ++ ++# Samsung SCX-4500W ++usb 0x04e8 0x342b ++ ++# Samsung SCX-4300 ++usb 0x04e8 0x342e +diff -urNad sane-backends-1.0.20~/doc/descriptions/xerox_mfp.desc sane-backends-1.0.20/doc/descriptions/xerox_mfp.desc +--- sane-backends-1.0.20~/doc/descriptions/xerox_mfp.desc 2009-03-17 14:12:42.000000000 +0100 ++++ sane-backends-1.0.20/doc/descriptions/xerox_mfp.desc 2009-09-11 19:13:48.910444718 +0200 +@@ -1,25 +1,22 @@ + :backend "xerox_mfp" +-:version "1.0-9" ++:version "1.0-11" + :manpage "sane-xerox_mfp" +-:comment "Could be compatible with other Samsung manufactured devices" + :devicetype :scanner +-:new :yes + + :mfg "Xerox" + :url "http://www.office.xerox.com/" + +-:model "Phaser 3200MFP" +-:interface "USB" +-:usbid "0x0924" "0x3da4" +-:status :good +-:url "http://www.office.xerox.com/multifunction-printer/multifunction-under-30ppm/phaser-3200mfp/spec-enus.html" +-:comment "All features of device I know of" +- + :model "Phaser 6110MFP" + :interface "USB" + :usbid "0x0924" "0x3d5d" + :status :good + ++:model "Phaser 3200MFP" ++:interface "USB" ++:usbid "0x0924" "0x3da4" ++:status :complete ++:url "http://www.office.xerox.com/multifunction-printer/multifunction-under-30ppm/phaser-3200mfp/spec-enus.html" ++ + :mfg "Dell" + :url "http://www.dell.com/" + +@@ -28,3 +25,30 @@ + :usbid "0x413c" "0x5124" + :status :good + ++:mfg "Samsung" ++:url "http://www.samsung.com" ++ ++:model "SCX-4200" ++:interface "USB" ++:usbid "0x04e8" "0x341b" ++:status :good ++ ++:model "SCX4725-FN" ++:interface "USB" ++:usbid "0x04e8" "0x341f" ++:status :good ++ ++:model "SCX-4500" ++:interface "USB" ++:usbid "0x04e8" "0x3426" ++:status :good ++ ++:model "CLX-3170fn" ++:interface "USB" ++:usbid "0x04e8" "0x342a" ++:status :good ++ ++:model "SCX-4300" ++:interface "USB" ++:usbid "0x04e8" "0x342e" ++:status :good --- sane-backends-1.0.20.orig/debian/patches/06_cap_always_settable.dpatch +++ sane-backends-1.0.20/debian/patches/06_cap_always_settable.dpatch @@ -0,0 +1,19 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 06_cap_always_settable.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Add back SANE_CAP_ALWAYS_SETTABLE which was erroneously removed in +## DP: SANE 1.0.20. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/include/sane/sane.h sane-backends-1.0.20/include/sane/sane.h +--- sane-backends-1.0.20~/include/sane/sane.h 2009-04-23 21:59:23.000000000 +0200 ++++ sane-backends-1.0.20/include/sane/sane.h 2009-05-08 21:02:46.805404666 +0200 +@@ -115,6 +115,7 @@ + #define SANE_CAP_AUTOMATIC (1 << 4) + #define SANE_CAP_INACTIVE (1 << 5) + #define SANE_CAP_ADVANCED (1 << 6) ++#define SANE_CAP_ALWAYS_SETTABLE (1 << 7) + + #define SANE_OPTION_IS_ACTIVE(cap) (((cap) & SANE_CAP_INACTIVE) == 0) + #define SANE_OPTION_IS_SETTABLE(cap) (((cap) & SANE_CAP_SOFT_SELECT) != 0) --- sane-backends-1.0.20.orig/debian/patches/43_scanadf_error_check.dpatch +++ sane-backends-1.0.20/debian/patches/43_scanadf_error_check.dpatch @@ -0,0 +1,31 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 43_scanadf_error_check.dpatch by Daniel T Chen +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Backport of dda02943 from Debian's sane-backends.git +## DP: Alex Belkin , Fri, 22 May 2009 16:29:50 +0400 +## DP: [PATCH] additional error check to (stop scanadf) + fix of it +## DP: LP: #469540 + +@DPATCH@ +diff -urNad sane-backends~/backend/xerox_mfp.c sane-backends/backend/xerox_mfp.c +--- sane-backends~/backend/xerox_mfp.c 2010-02-08 04:09:47.000000000 -0500 ++++ sane-backends/backend/xerox_mfp.c 2010-02-08 14:10:46.000000000 -0500 +@@ -1319,14 +1319,15 @@ + dev->reserved++; + } + +- if (!dev_set_window(dev)) ++ if (!dev_set_window(dev) || ++ (dev->state && dev->state != SANE_STATUS_DEVICE_BUSY)) + return dev_stop(dev); + + if (!dev_cmd_wait(dev, CMD_OBJECT_POSITION)) + return dev_stop(dev); + + if (!dev_cmd(dev, CMD_READ) || +- dev->state != SANE_STATUS_DEVICE_BUSY) ++ (dev->state && dev->state != SANE_STATUS_DEVICE_BUSY)) + return dev_stop(dev); + + dev->scanning = 1; --- sane-backends-1.0.20.orig/debian/patches/08_cardscan_usbids.dpatch +++ sane-backends-1.0.20/debian/patches/08_cardscan_usbids.dpatch @@ -0,0 +1,19 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 08_cardscan_usbids.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix USB IDs for the CardScan 800c. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/doc/descriptions/cardscan.desc sane-backends-1.0.20/doc/descriptions/cardscan.desc +--- sane-backends-1.0.20~/doc/descriptions/cardscan.desc 2008-05-16 04:31:57.000000000 +0200 ++++ sane-backends-1.0.20/doc/descriptions/cardscan.desc 2009-06-26 13:22:48.493047925 +0200 +@@ -23,7 +23,7 @@ + + :model "800c" + :interface "USB" +-:usbid "0x08f0" "0x2110" ++:usbid "0x08f0" "0x0005" + :status :good + :comment "4 inch wide 8bit Gray or 24bit Color simplex card/receipt scanner" + --- sane-backends-1.0.20.orig/debian/patches/31_genesys_raw_log_fix.dpatch +++ sane-backends-1.0.20/debian/patches/31_genesys_raw_log_fix.dpatch @@ -0,0 +1,24 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 31_genesys_raw_log_fix.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Add missing check when logging raw data. + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/backend/genesys.c sane-backends-1.0.20/backend/genesys.c +--- sane-backends-1.0.20~/backend/genesys.c 2009-04-30 15:15:19.000000000 +0200 ++++ sane-backends-1.0.20/backend/genesys.c 2009-09-26 11:41:33.186677244 +0200 +@@ -4246,8 +4246,11 @@ + "genesys_read_ordered_data: nothing more to scan: EOF\n"); + *len = 0; + #ifdef SANE_DEBUG_LOG_RAW_DATA +- fclose (rawfile); +- rawfile = NULL; ++ if (rawfile != NULL) ++ { ++ fclose (rawfile); ++ rawfile = NULL; ++ } + #endif + return SANE_STATUS_EOF; + } --- sane-backends-1.0.20.orig/debian/patches/23_unneeded_doc.dpatch +++ sane-backends-1.0.20/debian/patches/23_unneeded_doc.dpatch @@ -0,0 +1,55 @@ +#!/bin/sh -e +## 04_unneeded_doc.dpatch by Julien BLACHE +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Do not generate some documentation we do not want; do not include +## DP: sane.png in the html documentation, as it is not distributed in the +## DP: source tarball. + +if [ $# -ne 1 ]; then + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1 +fi + +[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts +patch_opts="${patch_opts:--f --no-backup-if-mismatch}" + +case "$1" in + -patch) patch $patch_opts -p1 < $0;; + -unpatch) patch $patch_opts -p1 -R < $0;; + *) + echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" + exit 1;; +esac + +exit 0 + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/Makefile.in sane-backends-1.0.20/Makefile.in +--- sane-backends-1.0.20~/Makefile.in 2009-04-30 15:41:20.000000000 +0200 ++++ sane-backends-1.0.20/Makefile.in 2009-05-04 11:09:46.284360743 +0200 +@@ -246,11 +246,7 @@ + top_srcdir = @top_srcdir@ + SUBDIRS = include lib sanei backend frontend tools doc po + DIST_SUBDIRS = include lib sanei backend frontend tools doc po japi testsuite +-dist_doc_DATA = AUTHORS ChangeLog COPYING LICENSE NEWS PROBLEMS PROJECTS \ +- README README.aix README.beos README.darwin README.djpeg README.freebsd \ +- README.hp-ux README.linux README.netbsd README.openbsd README.os2 \ +- README.solaris README.unixware2 README.unixware7 README.windows \ +- README.zeta ++dist_doc_DATA = README AUTHORS NEWS PROBLEMS PROJECTS + + EXTRA_DIST = ChangeLog-1.0.0 ChangeLog-1.0.1 ChangeLog-1.0.2 \ + ChangeLog-1.0.3 ChangeLog-1.0.4 ChangeLog-1.0.5 ChangeLog-1.0.6 \ +diff -urNad sane-backends-1.0.20~/doc/Makefile.in sane-backends-1.0.20/doc/Makefile.in +--- sane-backends-1.0.20~/doc/Makefile.in 2009-04-30 15:41:18.000000000 +0200 ++++ sane-backends-1.0.20/doc/Makefile.in 2009-05-04 11:05:16.924358740 +0200 +@@ -312,7 +312,7 @@ + MAN2HTML = nroff -man |\ + man2html -compress -topm 6 -botm 6 -nodepage -title $${page} \ + -cgiurl '$$title.$$section.html'|\ +- sed 's,,

,' ++ sed 's,,,' + + beman5dir = $(mandir)/man5 + BEDOCS = canon/canon.changes canon/canon.install2700F.txt \ --- sane-backends-1.0.20.orig/debian/patches/01_missing_pthreads.dpatch +++ sane-backends-1.0.20/debian/patches/01_missing_pthreads.dpatch @@ -0,0 +1,19 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 01_missing_pthreads.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: New build system breaks build when enabling pthreads (--disable-fork-process). + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/backend/Makefile.in sane-backends-1.0.20/backend/Makefile.in +--- sane-backends-1.0.20~/backend/Makefile.in 2009-04-30 15:41:18.000000000 +0200 ++++ sane-backends-1.0.20/backend/Makefile.in 2009-05-04 11:19:21.724357246 +0200 +@@ -1686,7 +1686,7 @@ + lib_LTLIBRARIES = libsane.la + sanelibdir = $(libdir)/sane + sanelib_LTLIBRARIES = $(BACKEND_LIBS_ENABLED) libsane-dll.la +-COMMON_LIBS = ../lib/liblib.la ++COMMON_LIBS = ../lib/liblib.la $(PTHREAD_LIBS) + + # Each backend should define a convenience library that compiles + # all related files within backend directory. General guideline --- sane-backends-1.0.20.orig/debian/patches/44_add_epson_mfp_devs.dpatch +++ sane-backends-1.0.20/debian/patches/44_add_epson_mfp_devs.dpatch @@ -0,0 +1,38 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 44_add_epson_mfp_devs.dpatch by Daniel T Chen +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Based on original patch by roman.yepishev@gmail.com +## DP: Add support for Xerox WorkCentre 3119 Series +## DP: LP: #469540 + +@DPATCH@ +diff -urNad sane-backends~/backend/xerox_mfp.conf.in sane-backends/backend/xerox_mfp.conf.in +--- sane-backends~/backend/xerox_mfp.conf.in 2010-02-08 14:21:02.000000000 -0500 ++++ sane-backends/backend/xerox_mfp.conf.in 2010-02-08 14:22:23.000000000 -0500 +@@ -6,6 +6,9 @@ + #Xerox Phaser 6110MFP + usb 0x0924 0x3d5d + ++#Xerox WorkCentre 3119 Series ++usb 0x0924 0x4265 ++ + #Samsung CLX-3170fn + usb 0x04e8 0x342a + +diff -urNad sane-backends~/doc/descriptions/xerox_mfp.desc sane-backends/doc/descriptions/xerox_mfp.desc +--- sane-backends~/doc/descriptions/xerox_mfp.desc 2010-02-08 14:21:02.000000000 -0500 ++++ sane-backends/doc/descriptions/xerox_mfp.desc 2010-02-08 14:24:26.000000000 -0500 +@@ -17,6 +17,12 @@ + :status :complete + :url "http://www.office.xerox.com/multifunction-printer/multifunction-under-30ppm/phaser-3200mfp/spec-enus.html" + ++:model "WorkCentre 3119 Series" ++:interface "USB" ++:usbid "0x0924" "0x4265" ++:status :good ++:url "http://www.office.xerox.com/multifunction-printer/multifunction-under-30ppm/workcentre-3119/engb.html" ++ + :mfg "Dell" + :url "http://www.dell.com/" + --- sane-backends-1.0.20.orig/debian/patches/34_genesys_gl841_cal_fix.dpatch +++ sane-backends-1.0.20/debian/patches/34_genesys_gl841_cal_fix.dpatch @@ -0,0 +1,32 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 34_genesys_gl841_cal_fix.dpatch by +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fix gl841 calibration routine. +## DP: Upstream commit a0ea955e91837156d2112c0ffd12c8afebe86efa +## DP: Always send registers before trying to acquire a line + +@DPATCH@ +diff -urNad sane-backends-1.0.20~/backend/genesys_gl841.c sane-backends-1.0.20/backend/genesys_gl841.c +--- sane-backends-1.0.20~/backend/genesys_gl841.c 2009-04-19 21:39:21.000000000 +0200 ++++ sane-backends-1.0.20/backend/genesys_gl841.c 2010-01-10 15:19:54.696066702 +0100 +@@ -4948,9 +4948,6 @@ + return status; + } + +- RIE (gl841_bulk_write_register +- (dev, dev->calib_reg, GENESYS_GL841_MAX_REGS)); +- + used_res = dev->current_setup.xres; + num_pixels = dev->current_setup.pixels; + +@@ -4999,6 +4996,9 @@ + + do { + ++ RIE (gl841_bulk_write_register ++ (dev, dev->calib_reg, GENESYS_GL841_MAX_REGS)); ++ + for (j=0; j < channels; j++) { + off[j] = (offh[j]+offl[j])/2; + dev->frontend.offset[j] = off[j]; --- sane-backends-1.0.20.orig/debian/po/fr.po +++ sane-backends-1.0.20/debian/po/fr.po @@ -0,0 +1,128 @@ +# Translation of sane-backends debconf templates to French +# Copyright (C) 2008 Christian Perrier +# This file is distributed under the same license as the sane-backends package. +# +# Christian Perrier , 2008. +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-05-15 22:23+0200\n" +"Last-Translator: Christian Perrier \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Faut-il activer le serveur « saned » ?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"Le serveur « saned », une fois activé, rend disponibles les scanners sur le " +"réseau." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Il existe deux méthodes pour exécuter le serveur :\n" +" - via le superserveur inetd : dans ce mode, le serveur est lancé\n" +" à la demande quand un client se connecte ; \n" +" - en tant que démon autonome, lancé au démarrage du système : dans\n" +" ce mode, le serveur fonctionne en permanence en tâche de fond, en\n" +" attente des connexions des clients." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"En mode autonome, le démon s'annonce sur le réseau et peut alors être " +"automatiquement détecté par les clients SANE sans nécessiter de " +"configuration particulière de ces clients. Il restera nécessaire de " +"configurer le serveur pour qu'il accepte les connexions des clients." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "" +"Si vous choisissez cette option, le serveur sera lancé au démarrage du " +"système." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Faut-il ajouter l'utilisateur « saned » au groupe « scanner » ?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Lorsque le serveur saned est activé, les scanners deviennent accessibles via " +"le réseau. Il est possible d'autoriser ou non l'accès via le réseau aux " +"différents scanners de cette machine, en modifiant les permissions de chacun " +"d'eux." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Veuillez lire le fichier /usr/share/doc/sane-utils/README.Debian pour plus " +"d'informations sur le gestion des permissions pour saned. Par défaut, le " +"démon est exécuté avec les privilèges de l'utilisateur et du groupe « saned »." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Si vous choisissez cette option, tous les scanners deviendront accessibles " +"via le réseau sans restriction." --- sane-backends-1.0.20.orig/debian/po/cs.po +++ sane-backends-1.0.20/debian/po/cs.po @@ -0,0 +1,122 @@ +# Czech translation of sane-backends debconf messages. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the sane-backends package. +# Miroslav Kure , 2008 +# +msgid "" +msgstr "" +"Project-Id-Version: sane-backends\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-05-09 15:17+0200\n" +"Last-Translator: Miroslav Kure \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Povolit saned jako samostatný server?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"Pokud je saned server povolený, zpřístupňuje dostupné scannery přes síť." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Existují dva způsoby, jak spouštět saned:\n" +" - jako službu inetd, kterou startuje superserver inetd. V tomto režimu je " +"saned spuštěn pouze v případě, že se klient snaží připojit k serveru;\n" +" - jako samostatný daemon, spouštěný při zavádění systému. V tomto " +"režimuběží saned celou dobu na pozadí a sám naslouchá příchozím spojením." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"Při spuštění jako samostatný daemon se saned sám nabízí na síti a SANE " +"klienti ho mohou rozpoznat automaticky, bez dalšího nastavování na straně " +"klienta. Stále však budete muset nastavit server, aby přijímal příchozí " +"spojení od klientů." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Chcete-li této vlastnosti využít, odpovězte kladně." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Přidat uživatele saned do skupiny scanner?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Pokud je saned server povolený, zpřístupňuje dostupné scannery přes síť. " +"Nastavením různých přístupových oprávnění ke scannerům připojeným k tomuto " +"počítači můžete řídit, které scannery mají být přístupné přes síť." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Podrobnosti o správě oprávnění pro saned se dočtete v /usr/share/doc/sane-" +"utils/README.Debian. Ve výchozím nastavení se saned spouští pod uživatelem i " +"skupinou saned." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Chcete-li zpřístupnit přes síť všechny scannery bez omezení, tuto možnost " +"povolte." --- sane-backends-1.0.20.orig/debian/po/ru.po +++ sane-backends-1.0.20/debian/po/ru.po @@ -0,0 +1,124 @@ +# translation of sane-backends_1.0.20-11_ru.po to Russian +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Yuri Kozlov , 2008. +# Yuri Kozlov , 2009. +msgid "" +msgstr "" +"Project-Id-Version: sane-backends_1.0.20-11\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2009-12-30 19:10+0300\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Запускать saned как отдельную службу?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "The saned server, when enabled, makes scanners available over the network." +msgstr "Если включена служба saned, то сканеры становятся доступными по сети." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"saned можно запускать двумя способами:\n" +" - как служба inetd с помощью суперсервера inetd. В этом режиме saned\n" +"запускается в момент, когда в inetd поступает клиентский запрос на\n" +"подключение к серверу;\n" +" - в виде самостоятельной службы при включении компьютера. В этом\n" +"режиме saned работает в фоновом режиме и сам принимает клиентские\n" +"подключения." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"При работе в виде самостоятельной службы, saned анонсирует себя в сети и " +"может быть автоматически найден клиентами SANE без выполнения настроек на их " +"стороне. Вам нужно только настроить сервер для приёма запросов от клиентов. " +"Это экспериментальная возможность и требует запущенной службы Avahi." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Ответьте утвердительно, если хотите использовать эту возможность." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Добавить учётную запись saned в группу scanner?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Если включена служба saned, то сканеры становятся доступными через сеть. " +"Назначая различные права на конкретные сканеры, подключённые к компьютеру, " +"вы можете сделать доступными через сеть только нужные." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"В файле /usr/share/doc/sane-utils/README.Debian подробно описано, как " +"управлять правами saned. По умолчанию, saned запускается с правами учётной " +"записи и группы saned." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Ответьте утвердительно, если хотите, чтобы все сканеры были доступны по сети " +"без ограничений." + --- sane-backends-1.0.20.orig/debian/po/POTFILES.in +++ sane-backends-1.0.20/debian/po/POTFILES.in @@ -0,0 +1 @@ +[type: gettext/rfc822deb] sane-utils.templates --- sane-backends-1.0.20.orig/debian/po/vi.po +++ sane-backends-1.0.20/debian/po/vi.po @@ -0,0 +1,124 @@ +# Vietnamese translation for SANE Backends. +# Copyright © 2008 Free Software Foundation, Inc. +# Clytie Siddall , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: sane-backends 1.0.19-7\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-05-10 21:05+0930\n" +"Last-Translator: Clytie Siddall \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: LocFactoryEditor 1.7b3\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Bật saned làm trình phục vụ độc lập không?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "Bật trình phục vụ saned thì làm cho máy quét sẵn sàng trên khắp mạng." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Có hai phương pháp chạy saned:\n" +" • làm dịch vụ inetd, được khởi chạy bởi siêu trình phục vụ inetd.\n" +"\tTrong chế độ này, saned được inetd khởi chạy theo yêu cầu,\n" +"\tkhi ứng dụng khách thử kết nối đến trình phục vụ.\n" +" • làm trình nền độc lập, được khởi chạy khi khởi động hệ thống.\n" +"\tTrong chế độ này, saned chạy một mình về nền,\n" +"\tvà lắng nghe kết nối của ứng dụng khách." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"Khi chạy trong chế độ độc lập, saned tự quảng cáo trên mạng, và có thể được " +"tự động phát hiện bởi các ứng dụng khách SANE, không cần cấu hình riêng bên " +"khách. Bạn vẫn còn cần phải cấu hình trình phục vụ để chấp nhận kết nối từ " +"ứng dụng khách." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Muốn dùng tính năng đó thì hãy bật tùy chọn này." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Thêm người dùng saned vào nhóm scanner không?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Bật trình phục vụ saned thì làm cho máy quét sẵn sàng trên khắp mạng. Bằng " +"cách áp dụng các quyền hạn khác nhau cho những máy quét khác nhau được kết " +"nối đến máy này, bạn có thể điều khiển những máy quét sẽ được công bố qua " +"mạng." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Xem tài liệu Đọc Đi « /usr/share/doc/sane-utils/README.Debian » để tìm chi " +"tiết về quản lý quyền hạn cho saned như thế nào. Mặc định là saned được chạy " +"dưới người dùng và nhóm « saned »." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Bật tùy chọn này để làm cho tất cả các máy quét sẵn sàng qua mạng, vô hạn." --- sane-backends-1.0.20.orig/debian/po/templates.pot +++ sane-backends-1.0.20/debian/po/templates.pot @@ -0,0 +1,91 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" --- sane-backends-1.0.20.orig/debian/po/it.po +++ sane-backends-1.0.20/debian/po/it.po @@ -0,0 +1,124 @@ +# Translation of sane-backends debconf templates to Italian +# This file is distributed under the same license as the sane-backends package. +# Luca Monducci , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: sane-backends 1.0.19\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-12-02 15:35+0100\n" +"Last-Translator: Luca Monducci \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Attivare saned come servizio autonomo?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"Il server saned, quando attivo, rende gli scanner disponibili tramite la " +"rete." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Il server può essere eseguito in due modalità:\n" +" - come servizio di inetd, attivato dal superserver inetd. In questa\n" +" modalità saned è attivato solo quando un client prova a connettersi\n" +" al server;\n" +" - come demone autonomo, attivato all'avvio del sistema. In questa\n" +" modalità saned è sempre attivo e in ascolto per le connessioni dei\n" +" client." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"In modalità autonoma, saned si annuncia da solo sulla rete e può essere " +"rilevato automaticamente dai client SANE senza configurare i client. È " +"comunque necessario configurare il server per accettare le connessioni dai " +"client." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Accettare per utilizzare questa funzione." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Aggiungere l'utente saned al gruppo scanner?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Il server saned, quando attivo, rende gli scanner disponibili tramite la " +"rete. È possibile applicare permessi diversi a ogni scanner collegato alla " +"macchina in modo da controllare quali saranno disponibili tramite la rete." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Per sapere come gestire i permessi per saned, leggere /usr/share/doc/sane-" +"utils/README.Debian. Con la configurazione predefinita, saned viene eseguito " +"con utente e gruppo saned." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Accettare per rendere tutti i propri scanner disponibili sulla rete senza " +"alcuna restrizione." --- sane-backends-1.0.20.orig/debian/po/sv.po +++ sane-backends-1.0.20/debian/po/sv.po @@ -0,0 +1,122 @@ +# translation of sane-backends to swedish +# Copyright (C) 2009 Martin Bagge +# This file is distributed under the same license as the sane-backends package. +# +# Martin Bagge , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: sane-backends_1.0.19-10_sv\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2009-12-29 11:26+0100\n" +"Last-Translator: Martin Bagge \n" +"Language-Team: swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Aktivera saned som ensamstående tjänst?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "När saned är aktiverad så kan man komma åt scanrarna över nätverket." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Det finns två sätt att köra saned:\n" +" - som en inetd-tjänst, startad av superservern inetd. I detta läge\n" +"startas saned när en klient som behöver saned ansluter till servern.\n" +" - som ensamstående tjänst, startad av systemet vid uppstart. I\n" +"detta läge körs saned i bakgrunden hela tiden och lyssnar efter\n" +"anslutningar från klienter." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"När saned körs i ensamstående läge så meddelar saned det till nätverket och " +"kan på så vis automatiskt upptäckas av SANE-klienter utan att det behöver " +"ställas in något på klient-sidan. Du behöver dock fortfarande ställa in " +"tjänsten att ta emot anslutningar från klienterna. Denna funktion är " +"experimentiell och kräver att Avahi-tjänsten körs." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Välj detta alternativet om du vill använda denna funktionen." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Lägg till en saned-användare till scanner-gruppen?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"När saned är aktiverad så kan man komma åt scanrarna över nätverket. Genom " +"att ange olika regler till de olika scanrarna så kan du kontrollera vilka " +"som ska vara tillgängliga över nätverket." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Läs /usr/share/doc/sane-utils/README.Debian för detaljerad information om " +"hur man ställer in reglerna för saned. I standardläget körs saned i en egen " +"användare och grupp 'saned'." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Ange detta alternativ om du vill göra alla dina scanrar tillgängliga över " +"nätverket utan några restriktioner." --- sane-backends-1.0.20.orig/debian/po/pt_BR.po +++ sane-backends-1.0.20/debian/po/pt_BR.po @@ -0,0 +1,128 @@ +# sane-backends Brazilian Portuguese translation +# Copyright (C) 2008 THE sane-backends'S COPYRIGHT HOLDER +# This file is distributed under the same license as the sane-backends package. +# Eder L. Marques (frolic) , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: sane-backends-1.0.19-7\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-05-06 14:46-0300\n" +"Last-Translator: Eder L. Marques (frolic) \n" +"Language-Team: l10n portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"pt_BR utf-8\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Habilitar o saned como um servidor autônomo?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"O servidor saned, quando habilitado, torna os scanners disponíveis através " +"da rede." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Existem duas maneiras de executar o saned:\n" +" - como um serviço inetd, iniciado pelo superservidor inetd. Neste modo,\n" +"o saned é iniciado quando necessário pelo inetd sempre que um cliente tentar " +"conectar ao servidor;\n" +" - como um daemon autônomo, iniciado na inicialização do sistema. Neste " +"modo,\n" +"o saned executa em segundo plano por si só e escuta por conexões de clientes." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"Quando executado no modo autônomo, o saned publica-se na rede e pode ser " +"detectado automaticamente pelos clientes SANE sem nenhuma configuração no " +"lado do cliente. Você continua precisando configurar o servidor para aceitar " +"conexões de seus clientes." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Aceite esta opção se você quer fazer uso desse recurso." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Adicionar o usuário saned ao grupo scanner?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"O servidor saned, quando habilitado, torna os scanners disponíveis através " +"da rede. Ao aplicar diferentes permissões a diferentes scanners conectados a " +"sua máquina, você pode controlar quais estarão disponíveis através da rede." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Leia /usr/share/doc/sane-utils/README.Debian para detalhes sobre como " +"gerenciar permissões para o saned. Por padrão, o saned é executado sob o " +"usuário e grupo saned." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Aceite esta opção se você quer tornar todos os scanners disponíveis através " +"da rede sem restrição." --- sane-backends-1.0.20.orig/debian/po/es.po +++ sane-backends-1.0.20/debian/po/es.po @@ -0,0 +1,143 @@ +# sane-backends translation to spanish +# Copyright (C) 2008 Software in the Public Interest +# This file is distributed under the same license as the sane-backends package. +# Changes: +# - Initial translation +# Ignacio Mondino , 2008 +# Traductores, si no conoce el formato PO, merece la pena leer la +# documentación de gettext, especialmente las secciones dedicadas a este +# formato, por ejemplo ejecutando: +# info -n '(gettext)PO Files' +# info -n '(gettext)Header Entry' +# Equipo de traducción al español, por favor lean antes de traducir +# los siguientes documentos: +# - El proyecto de traducción de Debian al español +# http://www.debian.org/intl/spanish +# especialmente las notas de traducción en +# http://www.debian.org/intl/spanish/notas +# - La guía de traducción de po's de debconf: +# /usr/share/doc/po-debconf/README-trans +# o http://www.debian.org/intl/l10n/po-debconf/README-trans +# +# +msgid "" +msgstr "" +"Project-Id-Version: sane-backends 1.0.19-13\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-09-16 20:32-0300\n" +"Last-Translator: Ignacio Mondino \n" +"Language-Team: Debian Spanish team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "¿Desea activar «saned» como un servidor independiente?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"Se puede acceder a los escáneres a través de la red cuando se activa el " +"servidor «saned»." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Hay dos maneras de ejecutar «saned»;\n" +" - como un servicio «inetd», iniciado por el súper servidor «inetd». En este " +"modo, «saned» se inicia cuando inetd lo necesita cada vez que el cliente " +"intenta conectarse al servidor;\n" +" - como un demonio independiente, lanzado al inicio del sistema. En\n" +"este modo «saned» se ejecuta en segundo plano por sí mismo y escucha " +"conexiones de los clientes." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"En modo independiente, «saned» se anuncia por sí mismo en la red y puede " +"detectarse automáticamente por los clientes SANE sin configuración por parte " +"de los mismos. Aun así, será necesario que configure el servidor para " +"aceptar conexiones de los clientes." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Acepte esta opción si desea utilizar esta característica." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "¿Desea agregar al usuario «saned» al grupo «scanner»?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Se puede acceder a los escáneres a través de la red cuando está activado el " +"servidor «saned». Puede controlar qué dispositivos se ofrecerán de esta forma " +"aplicando distintos permisos a los distintos escáneres conectados a su " +"equipo." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Lea «/usr/share/doc/sane-utils/README.Debian» para obtener detalles sobre " +"como gestionar los permisos para «saned». Por omisión, saned se ejecuta con " +"el usuario y grupo «saned»." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Acepte esta opción si desea que todos los escáneres estén disponibles a " +"través de la red sin restricciones." --- sane-backends-1.0.20.orig/debian/po/gl.po +++ sane-backends-1.0.20/debian/po/gl.po @@ -0,0 +1,124 @@ +# Galician translation of sane-backends's debconf templates +# This file is distributed under the same license as the sane-backends package. +# Jacobo Tarrio , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: sane-backends\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-05-06 22:50+0100\n" +"Last-Translator: Jacobo Tarrio \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "¿Activar saned coma un servidor autónomo?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"O servidor saned, cando está activado, deixa os escáneres dispoñibles pola " +"rede." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Hai dúas maneiras de executar saned:\n" +" - coma un servizo de inetd, iniciado polo superservidor inetd.\n" +" Neste modo, saned iníciase cando sexa necesario cada vez que\n" +" un cliente tente conectarse ao servidor;\n" +" - coma un servizo autónomo, que se inicia ao arrincar o sistema.\n" +" Neste modo, saned execútase en segundo plano e espera\n" +" conexións por parte dos clientes." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"Ao executalo en modo autónomo, saned anúnciase na rede e os clientes SANE " +"pódeno detectar automaticamente sen necesidade de os configurar. Aínda ha " +"ter que configurar o servidor para aceptar conexións dos clientes." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Acepte esta opción se quere empregar esta funcionalidade." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "¿Engadir saned ao grupo do escáner?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"O servidor saned, cando está activado, fai que os escáneres estean " +"dispoñibles pola rede. Aplicando distintos permisos aos diferentes escáneres " +"conectados á máquina, pódense controlar cales han estar dispoñibles pola " +"rede." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Consulte /usr/share/doc/sane-utils/README.Debian para máis detalles sobre " +"como xestionar os permisos de saned. Por defecto, saned execútase co usuario " +"e grupo \"saned\"." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Acepte esta opción se quere que tódolos escáneres estean dispoñibles pola " +"rede sen restricións." --- sane-backends-1.0.20.orig/debian/po/de.po +++ sane-backends-1.0.20/debian/po/de.po @@ -0,0 +1,113 @@ +# Translation of sane-backends debconf templates to German +# Copyright (C) Helge Kreutzmann , 2008, 2009. +# This file is distributed under the same license as the sane-backends package. +# +msgid "" +msgstr "" +"Project-Id-Version: sane-backends 1.0.20-11\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2009-12-27 10:20+0100\n" +"Last-Translator: Helge Kreutzmann \n" +"Language-Team: de \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-15\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Aktiviere Saned als Einzel-Server?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"Der Saned-Server stellt Scanner ber das Netz zu Verfgung, wenn er " +"aktiviert ist." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Es gibt zwei Arten, Saned zu betreiben:\n" +" - als Inetd-Service, gestartet ber den Inetd-Superserver. In diesem Modus\n" +"wird Saned nach Bedarf gestartet, wenn sich ein Client mit dem Server\n" +"verbindet.\n" +" - als Einzel-Server, gestartet beim Systemstart. In diesem Modus luft " +"Saned\n" +" selbst im Hintergrund und wartet auf Anfragen von Clients." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"Im Einzel-Server-Modus macht sich Saned ber das Netz bekannt und kann von " +"SANE-Clients ohne Konfiguration auf der Clientseite automatisch erkannt " +"werden. Sie mssen dennoch den Server konfigurieren, damit er Verbindungen " +"von den Clients akzeptiert. Diese Funktionalitt ist experimentell und " +"bentigt einen laufenden Avahi-Daemon." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "" +"Akzeptieren Sie diese Option, falls Sie diese Funktionalitt nutzen wollen." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Saned-Benutzer zu der Scanner-Gruppe hinzufgen?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Falls er aktiviert wird, stellt der Saned-Server Scanner ber das Netz " +"bereit. Durch Verteilen verschiedener Rechte auf verschiedene Scanner an " +"Ihrer Maschine knnen Sie steuern, welche davon ber Netz bereitgestellt " +"werden." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Lesen Sie /usr/share/doc/sane-utils/README.Debian fr Details ber die " +"Rechteverwaltung fr Saned. Standardmig luft Saned unter dem saned-" +"Benutzer und dessen Gruppe." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Akzeptieren Sie diese Option, falls Sie alle Ihre Scanner ber das Netz ohne " +"Einschrnkungen zur Verfgung stellen wollen." --- sane-backends-1.0.20.orig/debian/po/ja.po +++ sane-backends-1.0.20/debian/po/ja.po @@ -0,0 +1,110 @@ +# Copyright (C) 2008-2009 Julien BLACHE +# as sane-backends Debian package's copyright holder. +# This file is distributed under the same license as the sane-backends package. +# Hideki Yamane (Debian-JP) , 2008-2010. +# +msgid "" +msgstr "" +"Project-Id-Version: sane-backends 1.0.14-9\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2010-01-09 11:21+0200\n" +"Last-Translator: Hideki Yamane (Debian-JP) \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "saned をスタンドアロンなサーバとして有効にしますか?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"有効にした場合、saned サーバはネットワーク越しにスキャナを利用できるようにな" +"ります。" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"saned を実行するには二通りのやり方があります:\n" +" - inetd サービスとして実行し、inetd スーパーサーバから起動する。この場合、" +"saned はクライアントが接続の際に inetd の要請に応じて起動されます。\n" +" - システム起動時にスタンドアロンなデーモンとして実行する。この場合、saned は" +"完全にバックグラウンドで実行されクライアントからの接続を待ちつづけます。" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"スタンドアロンで実行している場合、saned はネットワークに対して存在しているこ" +"とを通知します。そのため、クライアント側では何の設定もせずに SANE クライアン" +"トがサーバを自動的に認識できるようになります。サーバの設定でクライアントから" +"の接続を受け付けられるようにする必要もあります。この機能は実験的なもので、" +"Avahi デーモンが動作していることが必要になります。" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "この機能を使いたい場合はこのオプションを有効にしてください。" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "saned ユーザを scanner グループに追加しますか?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"saned サーバが有効にされた場合、ネットワーク越しにスキャナが利用出来るように" +"なります。マシンに接続されているスキャナごとに異なった設定を適用することで、" +"どれがネットワーク越しに利用できるようにするかをコントロール出来ます。" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"saned の権限の取扱い方については、詳細は /usr/share/doc/sane-utils/README." +"Debian を参照してください。デフォルトでは、saned は saned ユーザと saned グ" +"ループの権限で動作します。" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"特に制限無く全てのスキャナを有効にしたい場合は、このオプションを有効にしてく" +"ださい。" --- sane-backends-1.0.20.orig/debian/po/eu.po +++ sane-backends-1.0.20/debian/po/eu.po @@ -0,0 +1,125 @@ +# translation of sane-backends1.0.19-7-eu.po to Euskara +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Piarres Beobide , 2008. +msgid "" +msgstr "" +"Project-Id-Version: sane-backends1.0.19-7-eu\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-05-06 22:03+0200\n" +"Last-Translator: Piarres Beobide \n" +"Language-Team: Euskara \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Saned bakarkako deabru gisa gaitu?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"Saned zerbitzariak, gaiturik dagoenean, eskanerrak sare biez eskuragarri " +"egiten ditu." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Saned exekutatzeko bi modu ezberdin daude:\n" +" - inetd zerbitzu gisa, inetd superzerbitzariak abiarazia. Modu honetan\n" +"saned behar denean inetd bidez abiaraziko da bezero batek zerbitzarira " +"konektatzen saiatzean;\n" +" - bakarkako deabru gisa, sistema abioan abiarazia. Modu honetan, saned\n" +"atzeko planoan exekutatzen da eta bezero konexioa itxoiten ditu." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"Bakarkako moduan exekutatzen, saned-ek bere burua sarean aurkezten du eta " +"automatikoki atzeman dezakete SANE bezeroek konfigurazio berezirik gabe. Zuk " +"zerbitzaria konfiguratu behar duzu bezeroetatik konexioak onartzeko." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Aukera hau onartu ezaugarri hau erabili nahi baduzu." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Gehitu saned erabiltzailea scanner taldera?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Saned zerbitzariak, gaiturik dagoenean, eskanerrak sarez bide erabilgarri " +"egiten ditu. Zure makinara konektaturik dagoen eskaner bakoitzari baimen " +"ezberdinak ezarriaz, horietariko zein sare bidez erabilgarri izango diren " +"kontrola dezakezu." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Irakurri /usr/share/doc/sane-utils/README.Debian saned-eko baimen " +"kudeaketari buruz xehetasun gehiagorako. Lehenespen bezala saned zerbitzaria " +"saned erabiltzaile eta taldeaz abiaraztren da." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Onartu aukera hau zure eskaner guztiak sare bidez eta mugarik gabe " +"erabilgarri egin bahi badituzu." --- sane-backends-1.0.20.orig/debian/po/fi.po +++ sane-backends-1.0.20/debian/po/fi.po @@ -0,0 +1,101 @@ +msgid "" +msgstr "" +"Project-Id-Version: sane-backends\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2008-05-10 23:01+0200\n" +"Last-Translator: Esko Arajärvi \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-Language: Finnish\n" +"X-Poedit-Country: FINLAND\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#, fuzzy +#| msgid "" +#| "Accept this option if you want to make all your scanners available over " +#| "the network without restriction." +msgid "Accept this option if you want to make use of this feature." +msgstr "" +"Valitse tämä vaihtoehto, jos kaikki skannerit halutaan asettaa käytettäväksi " +"verkon yli ilman rajoituksia." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Lisätäänkö saned-käyttäjä ryhmään scanner?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"Ollessaan käytössä saned-palvelin mahdollistaa skannerien käytön verkon yli. " +"Asettamalla eri oikeuksia järjestelmään kytketyille skannereille voidaan " +"valita mitkä niistä ovat käytettävissä verkon kautta." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Tiedostossa /usr/share/doc/sane-utils/README.Debian on lisätietoja " +"oikeuksien hallinnasta. Oletuksena saned ajetaan käyttäjällä ja ryhmällä " +"saned." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Valitse tämä vaihtoehto, jos kaikki skannerit halutaan asettaa käytettäväksi " +"verkon yli ilman rajoituksia." --- sane-backends-1.0.20.orig/debian/po/pt.po +++ sane-backends-1.0.20/debian/po/pt.po @@ -0,0 +1,124 @@ +# translation of sane-backends debconf to Portuguese +# Copyright (C) 2008 the sane-backends's copyright holder +# This file is distributed under the same license as the sane-backends package. +# +# Américo Monteiro , 2008, 2009. +msgid "" +msgstr "" +"Project-Id-Version: sane-backends 1.0.20-11\n" +"Report-Msgid-Bugs-To: sane-backends@packages.debian.org\n" +"POT-Creation-Date: 2009-12-12 13:14+0100\n" +"PO-Revision-Date: 2009-12-27 21:49+0000\n" +"Last-Translator: Américo Monteiro \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Lokalize 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Enable saned as a standalone server?" +msgstr "Activar o saned como servidor autónomo?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "" +"The saned server, when enabled, makes scanners available over the network." +msgstr "" +"O servidor saned, quando activo, torna os scanners disponíveis na rede. " + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#| msgid "" +#| "There are two ways of running saned:\n" +#| " - as an inetd service, started by the inetd superserver. In this mode,\n" +#| "saned is started as needed by inetd whenever a client tries to connect to " +#| "the server;\n" +#| " - as a standalone daemon, started at system boot. In this mode, saned\n" +#| "runs in the background all by itself and listens for client connections." +msgid "" +"There are two ways of running saned:\n" +" - as an inetd service, started by the inetd superserver. In this mode,\n" +"saned is started on demand when a client connects to the server;\n" +" - as a standalone daemon, started at system boot. In this mode, saned\n" +"runs in the background all by itself and listens for client connections." +msgstr "" +"Existem duas maneiras de correr o saned:\n" +"- como um serviço inetd, iniciado pelo superservidor inetd. Neste modo,\n" +"o saned arranca a pedido quando um cliente se liga ao servidor;\n" +"- como um deamon autónomo, iniciado no arranque do sistema. Neste modo,\n" +"o saned corre autónomo em segundo plano e escuta por ligações de clientes." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +#| msgid "" +#| "When run in standalone mode, saned advertises itself on the network and " +#| "can be detected automatically by the SANE clients with no configuration " +#| "on the client side. You still need to configure the server to accept " +#| "connections from your clients." +msgid "" +"When run in standalone mode, saned advertises itself on the network and can " +"be detected automatically by the SANE clients with no configuration on the " +"client side. You still need to configure the server to accept connections " +"from your clients. This feature is experimental and requires a running Avahi " +"daemon." +msgstr "" +"Quando corre em modo autónomo, o saned anuncia-se a si próprio na rede e " +"pode ser detectado automaticamente pelos clientes do SANE sem nenhuma " +"configuração no lado do cliente. Você ainda precisa de configurar o servidor " +"para aceitar ligações dos seus clientes. Esta funcionalidade é experimental " +"e requer um daemon Avahi em funcionamento." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:1001 +msgid "Accept this option if you want to make use of this feature." +msgstr "Aceite esta opção se deseja usar esta funcionalidade." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "Add saned user to the scanner group?" +msgstr "Adicionar o utilizador saned ao grupo scanner?" + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"The saned server, when enabled, makes scanners available over the network. " +"By applying different permissions to the different scanners connected to " +"your machine, you can control which ones will be made available over the " +"network." +msgstr "" +"O servidor saned, quando activo, torna os scanners disponíveis na rede. Ao " +"aplicar diferentes permissões aos vários scanners ligados à sua máquina, " +"você pode controlar quais deles estarão disponíveis na rede." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Read /usr/share/doc/sane-utils/README.Debian for details on how to manage " +"permissions for saned. By default, saned is run under the saned user and " +"group." +msgstr "" +"Leia /usr/share/doc/sane-utils/README.Debian para detalhes em como gerir " +"permissões para o saned. Por pré-definição, o saned corre sob o utilizador e " +"grupo saned." + +#. Type: boolean +#. Description +#: ../sane-utils.templates:2001 +msgid "" +"Accept this option if you want to make all your scanners available over the " +"network without restriction." +msgstr "" +"Aceite esta opção se deseja tornar todos os seus scanners disponíveis na " +"rede sem restrições." +