diff -Nru sane-backends-1.0.22/AUTHORS sane-backends-1.0.23/AUTHORS --- sane-backends-1.0.22/AUTHORS 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/AUTHORS 2012-07-01 02:00:44.000000000 +0000 @@ -9,7 +9,7 @@ Backends: abaton: David Huggins-Daines - agfafocus: Karl Anders ygard + agfafocus: Karl Anders Øygard apple: Milon Firikis artec: Chris Pinkham artec_eplus48u:Sergey Vlasov, Andreas Nowack, David Stevenson, and @@ -38,7 +38,7 @@ fujitsu: Randolph Bentson, Frederik Ramm, Oliver Schirrmeister (*), m. allan noah (*) gphoto2: Peter Fales (*) - genesys: Henning Geinitz (*), Gerhard Jaeger (*), Stphane Voltz (*), + genesys: Henning Geinitz (*), Gerhard Jaeger (*), Stéphane Voltz (*), Pierre Willenbrock (*) gt68xx: Sergey Vlasov, Andreas Nowack, David Stevenson, and Henning Geinitz (*) @@ -51,11 +51,16 @@ Frank Zago, Henning Geinitz (*) hp5400: Martijn van Oosterhout, Thomas Soumarmon (*) hp5590: Ilia Sotnikov (*) - hpljm1005: Philippe Rtornaz + hpljm1005: Philippe Rétornaz hs2p: Jeremy Johnson ibm: M.F., Henning Geinitz (*) + kodak: m. allan noah (*) + kodakaio: Paul Newall + kvs1025: Tao Zhang, m. allan noah (*) + kvs20xx: unknown, m. allan noah (*) + kvs40xx: unknown, m. allan noah (*) leo: Frank Zago (*) - lexmark: Fred Odendaal, Stphane Voltz (*) + lexmark: Fred Odendaal, Stéphane Voltz (*) ma1509: Henning Geinitz (*) magicolor: Reinhold Kainhofer (based on epson2 backend) matsushita: Frank Zago (*) @@ -69,13 +74,14 @@ nec: Kazuya Fukuda (*) net: Andreas Beck, David Mosberger, Julien Blache (*) niash: Ullrich Sigwanz (*), Bertrik Sikken - p5: Stphane Voltz (*) + p5: Stéphane Voltz (*) pie: Simon Munton (*) pint: Gordon Matzigkeit pixma: Wittawat Yamwong (*) Nicolas Martin (*) Louis Lagendijk (*) Dennis Lou + Rolf Bensch (*) plustek: Gerhard Jaeger (*) plustek_pp: Rick Bronson (former pp driver-code), Gerhard Jaeger (*) pnm: Andreas Beck, Gordon Matzigkeit, David Mosberger, Michael @@ -84,7 +90,7 @@ despeckling filter by Patrick Reynolds, B&W fixes by Andrew Kuchling ricoh: Feico W. Dillema - rts8891: Stphane Voltz (*) + rts8891: Stéphane Voltz (*) s9036: Ingo Schneider sceptre: Frank Zago (*) sharp: Kazuya Fukuda (*) and Abel Deuring (*) @@ -102,7 +108,7 @@ test: Henning Geinitz (*) u12: Gerhard Jaeger (*) umax: Oliver Rauch (*) and Michael K. Johnson - umax_pp: Stphane Voltz (*) + umax_pp: Stéphane Voltz (*) umax1220u: Marcio L. Teixeira, Patrick Lessard v4l: Juergen G. Schimmer, and Henning Geinitz (*) xerox_mfp: Alex Belkin (*) @@ -112,7 +118,7 @@ jscanimage: Jeff Freedman and Guido Muesch saned: Andreas Beck, David Mosberger, Julien Blache (*) scanimage: Andreas Beck, David Mosberger, Gordon Matzigkeit, - m. allan noah (*), Julien Blache (*), Stphane Voltz (*) + m. allan noah (*), Julien Blache (*), Stéphane Voltz (*) tstbackend: Frank Zago (*) Sanei internal code: @@ -189,7 +195,7 @@ Jonathan Bravo Lopez Juergen G. Schimmer Julien Blache -Karl Anders ygard +Karl Anders Øygard Karl Heinz Kremer Karsten Festag Kazuhiro Sasayama @@ -219,6 +225,7 @@ Oliver Schwartz Patrick Lessard Patrick Reynolds +Paul Newall Peter Fales Peter Kirchgessner Petter Reinholdtsen @@ -227,12 +234,13 @@ Reinhold Kainhofer Rene Rebe Roger Wolff +Rolf Bensch Roy Zhou Sebastien Sable Sergey Vlasov Simon Krix Simon Munton -Stphane Voltz +Stéphane Voltz Thomas Soumarmon Tom Martone Tom Wang diff -Nru sane-backends-1.0.22/ChangeLog sane-backends-1.0.23/ChangeLog --- sane-backends-1.0.22/ChangeLog 2011-02-14 01:29:23.000000000 +0000 +++ sane-backends-1.0.23/ChangeLog 2012-08-19 21:04:41.000000000 +0000 @@ -1,536 +1,694 @@ -****** Release of sane-backends 1.0.22. End of code freeze ****** +****** Release of sane-backends 1.0.23. End of code freeze ****** -2011-02-10 m. allan noah - * po/nl.po: updates from Martin Kho - * po/uk.po: updates from Yuri Chornoivan - -2011-02-04 Stphane Voltz - * backend/genesys.c: disable image processing options at 16 bits since - they can't handle it. - -2011-02-02 Stphane Voltz - * backend/genesys.c backend/genesys_low.c backend/genesys_gl843.c: - more asynchronous parking issues - -2011-01-31 Stphane Voltz - * backend/genesys.c backend/genesys_low.[ch]: don't return EOF too - early when applying image processing functions, handle writing of - lineart data, improve asynchronous head parking - -2011-01-31 m. allan noah - * backend/epjitsu.c, doc/descriptions/epjitsu.desc: - - comment changes - - added new models - * backend/fujitsu.c, doc/descriptions/fujitsu.desc, - doc/sane-fujitsu.man: fujitsu backend v106, - - added new models - - dont call mode_select with a page code the scanner does not support +2012-08-18 Rolf Bensch + * po/nl.po: Updated Dutch translation from Martin Kho. -2011-01-28 Mike Kelly - * backends/avision.[ch]: - - Bumped build number to 294. - - Various minor code cleanups. - - Fixed initialization and duplexing for AV220-G - - Added ADF support for HP8200 series scanner (flipping duplexers). - - Return copied values in sane_get_parameters() - - Added paper-length option to prevent double feeds - - Added a Misc option group to hold misc features - -2011-01-26 m. allan noah - * backend/canon_dr.[ch], doc/descriptions/canon_dr.desc, - backend/canon_dr.conf.in, doc/sane-canon_dr.man: - canon_dr backend v37: - - don't center window when using flatbed - - improve request sense error messages - - enable flatbed for all known models - - ad usb ids for DR-6030C, CR-135i & CR-190i - * doc/descriptions/unsupported.desc: moved DR-2020U from canon_dr.desc - -2011-01-20 Stphane Voltz - * backend/genesys_devices.c backend/genesys_gl646.h: tune resolution - list and add internal values matching them - -2011-01-18 m. allan noah - * backend/canon_dr.[ch], doc/desc/canon_dr.desc, doc/sane-canon_dr.man: - canon_dr backend v36: - - initial support for DR-3080 and DR-5060 - - add code to clamp scan width to an arbitrary byte width boundary - - add code to prevent setting of brightness/threshold/contrast - - don't send dropout color command on non-color scanners - - initial support for DR-7090C - - update credits - * po/pl.po: updated translation from Jakub Bogusz - * po/de.po: updated translation from Matthias Mailander - * backend/canon.conf.in: improved detection of scsi scanners - -2011-01-17 Stphane Voltz - * doc/descriptions/genesys.desc: add DSmobile variant - -2011-01-15 Reinhold Kainhofer - * sanei/sanei_usb.c: Add function sanei_usb_set_endpoint to change the - endpoints for usb communications. - * backend/magicolor.c: Add new "magicolor" backend for KONICA MINOLTA - magicolor 1690MF devices - -2011-01-13 Stphane Voltz - * backend/genesys_devices.c backend/genesys_gl124.c backend/genesys_gl124.h - doc/descriptions/genesys.desc: add 2400 dpi mode for LiDE 110 and 210 - -2011-01-12 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl124.c - backend/genesys_gl124.h backend/genesys_low.c backend/genesys_low.h : - prepare 2400 dpi modes for LiDE 210/110, add a wait for head to park - function and use it in sane_start(). - -2011-01-06 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c - backend/genesys_gl847.c: fix lineart issue when yres is higher than - xres and dynamic lineart is enabled, make gl847 wait for head to - park between scans, wait for head ot park in sane_close() - -2011-01-05 Nicolas Martin - * backend/pixma_mp730.c: - pixma: Added patch proposed by Klaus Stengel for Canon imageRunner 1020/1024/1025 support. - -2011-01-04 Nicolas Martin - * backend/pixma_mp150.c, backend/pixma.c, backend/pixma.h - backend/pixma_common.c, backend/pixma_common.h: - pixma: several updates for MP830, MP990, memmove bug fix, and 64 bits image size. - -2011-01-04 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c - backend/genesys_gl124.c: fix 1200 dpi lineart issues for gl124, - reenable low resolutions for lineart for gl124, and geometry fine - tuning for LiDE 110/210 - -2011-01-03 Stphane Voltz - * backends/lexmark_low.c: fix compilation issue due to incorrect - place for a DBG statement. - -2011-01-03 Chris Bagwell - * backends/Makefile.am: Add SOCKET_LIBS to xerox_mfp - for platforms such as solaris since it uses sanei_tcp.k - * doc/sane.tex: removed reference to changelog package - since its not used and not installed by Macports (#312596) - * doc/Makefile.am: put quotes around TEXINPUTS in case - paths have spaces in name. This is so latex can find - html.sty package that is referenced by sane.tex. - -2011-01-01 Chris Bagwell - * */Makefile.in, configure, aclocal.m4: Generate from latest - autoconf (2.63 to 2.66). - * m4/*: Added new libtool helper files. - * ltmain.sh: updated to latest libtool and added back special - sane soname work around. - * po/Makefile.am: Allow "make dist" to work when translations - disabled. - * sanei/Makefile.am: allow "make check" to work on cygwin. - -2010-12-28 Stphane Voltz - * backend/genesys.conf.in backend/genesys_devices.c backend/genesys_gl646.c - backend/genesys_gl847.c backend/genesys_gl847.h: - fix HP2300 warming up problem, add LiDE 700F and 5600F to gl847 - devices, smooth DSmobile 600 moves. - -2010-12-27 Stphane Voltz - * backend/genesys.c backend/genesys.conf.in backend/genesys_devices.c - backend/genesys_gl841.c backend/genesys_low.h - doc/descriptions/genesys.desc doc/descriptions/unsupported.desc - doc/sane-genesys.man: add Plustek OpticBook 3600 support - by Chris Berry and Michael Rickmann - -2010-12-27 Stphane Voltz - * backend/genesys_devices.c backend/genesys_gl124.c backend/genesys.c - doc/descriptions/genesys.desc doc/sane-genesys.man: enable 16 bit gamma - for gl124 scanners, models and credits update. - -2010-12-24 Stphane Voltz - * backend/genesys_devices.c backend/genesys_gl124.c backend/genesys.c - doc/descriptions/genesys.desc: GL847 shading area size fix, GL124 - shading area tuning, descriptions update. - -2010-12-24 Stphane Voltz - * backend/lexmark*.[ch]: applied X74 support patch by Torsten Houwaart - - -2010-12-23 Mike Kelly - * backends/avision.[ch]: - - Bumped build number to 293. - - Removed "regularly tested" from various scanners. - - Fixed USB id for Avision FB2080E. - - Added support for the Avision AV210D2+ scanner. - - Moved device init code to sane_get_devices(). - - Rewrote indirect "adf_mode" code to be more direct. - - Fixed indentation. - - Changed AVISION_FILTER_* defines to use final values. - - Wrap duplicate USB id entries with ifdefs. - - Removed a duplicate entry for Avision AV210C2. - - Print out USB ids as four digit hex numbers. - - Enhanced sane_get_option_descriptor() debug message. - * doc/descriptions/avision.desc: - - (Re)generated from avision.c. - -2010-12-19 Stphane Voltz - * backend/genesys_gl124.h: LiDE 210 GPIO fix - -2010-12-16 Stphane Voltz - * backend/genesys.c backend/genesys.conf.in backend/genesys_devices.c - backend/genesys_gl124.h: - LiDE 210 support (GL124 based) - -2010-12-14 Stphane Voltz - * backend/genesys*.[ch] backend/genesys.conf.in backend/Makefile.am - backend/Makefile.in tools/check-usb-chip.c doc/desc/genesys.desc: - LiDE 110 support (GL124 based) - -2010-12-08 Mike Kelly - * doc/descriptions/avision.desc: - - (Re)generated from avision.c. - * doc/sane-avision.man: - - Added myself as maintainer. - * backends/avision.desc: - - Removed this obsolete file (again). - * backends/avision.c: - - Bumped version to 292. - - Added myself as maintainer. - - Added support for DocuMate262i. - - Added support entries for HP 8300 series. - * backends/avision.conf.in: - - Added myself as maintainer. - -2010-12-06 Julien Blache - * doc/descriptions/espon.desc, doc/descriptions/epson2.desc: add SCSI IDs - for the Perfection 3200 (GT-9800) connected through FireWire. Report - from Colin Kincaid Williams . Update Perfection 2450 - interface list. - -2010-12-02 m. allan noah - * backend/fujitsu.[ch], backend/fujitsu-scsi.h: - Fujitsu backend version 105 - - backup and restore image params around image processing code - - cache software crop/deskew parameters for use on backside of duplex - - fi-6110 does not support bgcolor or prepick - -2010-11-29 Olaf Meeuwissen - * backend/epson2-ops.c: fix list of supported commands for levels D1 - and D2. - -2010-11-24 m. allan noah - * backend/fujitsu.c, backend/fujitsu.conf.in, - doc/descriptions/fujitsu.desc, doc/sane-fujitsu.man: - Fujitsu backend versions 103 and 104 - - remove compiled-in default config file - - initial support for new fi-6xxx machines - - never request more than s->buffer_size from scanner - - silence noisy set_window() calls from init_interlace() - -2010-11-19 Julien Blache - * doc/descriptions-external/epkowa.desc: update for iScan 2.26.1, - from Olaf Meeuwissen . - -2010-11-17 Stphane Voltz - * backend/genesys.c: don't write scan data unless specified by debug - level. - -2010-11-08 Marc Deslauriers - * backend/v4l.c: convert v4l1 BGR data to RGB; v4l1 always returns - BGR for RGB due to a coding error way back. - -2010-11-07 Marc Deslauriers - * backend/v4l.c: loop through the read buffers in the v4l backend so - we don't get stale frames. - -2010-11-06 Stphane Voltz - * frontend/scanimage.c doc/scanimage.man: add -A/--all-options to list - all control options exposed by a backend. - -2010-11-01 Stphane Voltz - * frontend/scanimage.c: don't print readonly device options since - they can't be set on command line - -2010-11-01 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl843.c - backend/genesys_gl843.h backend/genesys_gl847.c: up build number to 41, - rework head parking, - fixed clear-calibration option reading, - make calibration cache expire for non sheetfed gl847 scanners, - tuned KV-SS080 timings to improve image quality, - raised LiDE 100/200 defaukt gamma to 1.7 - -2010-10-31 Julien Blache - * doc/descriptions/hp.desc: add SCSI IDs for ScanJet 4c. - -2010-10-30 Julien Blache - * backend/xerox_mfp.conf.in, doc/descriptions/xerox_mfp.desc: add - Samsung SCX 4824 & 4825FN (Debian #601748). Resync desc file with - config file. - -2010-10-13 Stphane Voltz - * backend/genesys_devices.c backend/genesys_gl843.c - backend/genesys_gl843.h: added 100, 150, 400 and 600 dpi modes for - G4050 and G4010. Added 500 and 400 dpi modes for KV-SS080 - -2010-09-30 Alex Belkin - * Makefile.in backend/Makefile.am backend/Makefile.in backend/xerox_mfp-tcp.c - backend/xerox_mfp-usb.c backend/xerox_mfp.c backend/xerox_mfp.conf.in backend/xerox_mfp.h - doc/Makefile.in doc/descriptions/xerox_mfp.desc doc/sane-xerox_mfp.man frontend/Makefile.in - include/Makefile.in japi/Makefile.in lib/Makefile.in po/Makefile.in sanei/Makefile.in - testsuite/Makefile.in tools/Makefile.in: Added Samsung SCX-4500W scan over network support - for xerox_mfp backend (by Alexander Kuznetsov). autoconf and automake reconfigure - to support new files. - -2010-09-28 Stphane Voltz - * backend/genesys.c backend/genesys.conf.in backend/genesys_devices.c - backend/genesys_gl843.c backend/genesys_gl843.h: add minimal support - (200 and 300 dpi) for HP G4050. Add a device entry for G4010. - -2010-09-18 Reinhold Kainhofer - * include/sane/sanei_config.h sanei/sanei_config.c: Add - function sanei_config_get_paths to obtain all configuration pathes - (from env var SANE_CONFIG_DIR and default paths); fix pointers to - invalid/freed strings when SANE_CONFIG_DIR is set. - * backend/dll.c: When searching for the dll.d/ directory, - also use the SANE_CONFIG_DIR env variable. - -2010-07-12 Julien Blache - * doc/descriptions-external/epkowa.desc: update for iScan 2.26.0, - from Alesh Slovak . - -2010-09-17 Stphane Voltz - * backend/genesys.c backend/genesys_low.h sanei/sanei_magic.c - backend/genesys_devices.c backend/genesys_gl843.c: do asynchronous head - parking for flatbed scanners to save scan time. Fix a couple of - memory overwrites detected by valgrind. Optimize shading data - writing and fine tune scaneara for gl843. - -2010-09-16 Julien Blache - * frontend/saned.c: exit Avahi process on error and when the poll - loop terminates. - -2010-09-13 Stphane Voltz - * doc/descriptions/unsupported.desc: update status of scanners - now supported by the genesys backend. - -2010-09-13 Stphane Voltz - * doc/sane-genesys.man doc/descriptions/genesys.desc - backend/genesys.con.in: update HP3690 status to supported - -2010-09-12 Stphane Voltz - * backend/genesys_conv.c backend/genesys.c doc/sane-genesys.man - sanei/sanei_magic.c backend/genesys.h backend/genesys_low.h - backend/Makefile.in backend/Makefile.am: add software deskep, crop - and despeckle for the genesys backend. +2012-08-17 Chris Bagwell + * backend/kvs40xx*: Fix scan() symbol name that + was still conflicting the epjistu and snapscan backends. + +2012-08-16 Rolf Bensch + * backend/pixma.[ch], backend/pixma_common.[ch], + backend/pixma_imageclass.c, backend/pixma_mp*.c: + Copyright updated. + +2012-08-11 Rolf Bensch + * backend/pixma.c, backend/pixma_mp150.c, backend/pixma_mp810.c: + Lineart fix for generation 1+2 scanners. + +2012-08-09 Paul Newall + * /backend/kodakaio.c: + calling of poll tidied up, may fix problems with repeated scans. + +2012-07-30 Stphane Voltz + * doc/sane-genesys.man backend/genesys_low.h backend/genesys*.c: + rewrite lineart emulation du to bugs exhibited by the use of the + genesys backend through saned. Fixed an option delcartion that led + to saned crash and fixed batch scanning with sheet-fed scanners. + +2012-08-07 Chris Bagwell + * backend/kvs20xx*, backend/kvs40xx*: Fix duplicate symbols + caused by copy&pasting between related backends. This + allows prelinking of backends to work. + * backend/hp5590_low.c: Fix unresolved symbols error by + including byteorder.h header. + * backend/dll.c: Use correct function prototype for prelink + version of DLL backend. Helps some 64-bit compilers. -2010-09-08 Nicolas Martin - * backend/pixma_mp150.c, backend/pixma_mp730.c - doc/descriptions/pixma.desc, doc/sane-pixma.man: - pixma: several updates for MP375R, MP390, MP460 and docs by Gernot Hassenpflug. - -2010-09-07 Nicolas Martin - * backend/pixma_mp750.c: - pixma: fix for 2400 dpi striping on MP760/770/780/790 by Gernot Hassenpflug. - -2010-09-05 Nicolas Martin - * doc/sane-pixma.man: - pixma: man page update for devices as reported by Gernot Hassenpflug. - -2010-09-05 Stphane Voltz - * backend/genesys_gl841.c: end of document detection rework for - sheetfed scanners. - -2010-09-04 Stphane Voltz - * backend/genesys_devices.c backend/genesys.c backend/genesys_gl843.c: - 1200 dpi resolution support for KV-SS080. - -2010-09-01 Stphane Voltz - * backend/genesys_devices.c backend/genesys.c backend/genesys_gl843.c: - support for scan button, faster move to scan area and calibration fine - tuning. +2012-07-31 Rolf Bensch + * doc/descriptions/pixma.desc, doc/sane-pixma.man: + doc updates for all PIXMA scanners + * backend/pixma.h, doc/descriptions/pixma.desc, doc/sane-pixma.man: + - Pixma backend version 0.17.0 + - date updated in Pixma man page + +2012-07-30 m. allan noah + * backend/kvs1025.h: Increase max paper size (Matthew Wild) + * doc/*.man, doc/*.html: Typo fixes (Yuri Chornoivan) + +2012-07-30 Stphane Voltz + * backend/genesys.c backend/genesys_gl843.c backend/genesys_gl646.c: + fix batch scanning for gl646 scanners + +2012-07-29 Paul Newall + * /doc/descriptions/kodakaio.desc: + advent AW10 added. + +2012-07-28 Paul Newall + * /doc/descriptions/kodakaio.desc: + usbids added and version. + +2012-07-28 Rolf Bensch + * doc/descriptions/pixma.desc: scanners resorted by name + * backend/pixma_mp150.c, doc/descriptions/pixma.desc, + doc/sane-pixma.man: new scanners reported by DMoeller + - Canon PIXMA MX410 as untested + - Canon PIXMA MX420 as complete + - Canon PIXMA E500, E600, MX370 Series, MX430 Series, MX710 Series + as untested and experimental + * backend/pixma_mp150.c, doc/descriptions/pixma.desc: capabilities updated + for Canon PIXMA MX510 and MX890 + * backend/pixma_mp150.c, doc/sane-pixma.man: all 2012 untested new devices + marked as experimental + +2012-07-26 Rolf Bensch + * README.linux: + New detailled description for the installation of SANE backend. + +2012-07-24 m. allan noah + * backend/kvs40xx_opt.c: Oops- it is new + * doc/descriptions/kvs40xx.desc: Fix typo (Yuri Chornoivan) + * po/uk.po: Updated (Yuri Chornoivan) + * tools/Makefile.am, tools/Makefile.in, tools/sane-config.in: + sane-config fixes (Ruediger Meier) + +2012-07-15 Ilia Sotnikov + * backend/hp5590.c, backend/hp5590_low.c: + Fix hp5590 backend on big-endian platforms provided by Nhan Ngo Dinh + + +2012-07-13 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl124.c + backend/genesys_gl646.c backend/p5.c backend/p5.h backend/p5_device.h + backend/rts8891.c backend/rts8891.h backend/rts8891_devices.c backend/rts8891_low.c + backend/rts8891_low.h backend/rts88xx_lib.c backend/rts88xx_lib.h + backend/umax_pp.c backend/umax_pp.h backend/umax_pp_low.c + backend/umax_pp_low.h backend/umax_pp_mid.c backend/umax_pp_mid.h + doc/sane-genesys.man sanei/sanei_magic.c : + misc cleanups and doc updates to prepare release + +2012-06-28 Paul Newall + * backend/kodakaio.c backend/kodakaio.conf.in backend/kodakaio.h + doc/sane-kodakaio.man doc/descriptions/kodakaio.desc + configure.in makefile.am dllconf.in doc/makefile.am: Added new backend kodakaio for + kodak ESP nnnn, Cnnn, hero AiOs, detection of cups added to configure + since cups is used for network auto detection. -2010-09-01 Nicolas Martin - * backend/pixma.c, backend/pixma_mp730.c, backend/pixma_mp150.c +2012-06-27 Rolf Bensch + * backend/pixma.[ch], backend/pixma_sane_options.c, doc/descriptions/pixma.desc: - pixma: changes supplied by Gernot Hassenpflug for Lineart support - to some Pixma devices, and desc updates. + - Pixma backend version 0.16.4 + - new scan modes for 48 bit flatbed scanners: + PIXMA_SCAN_MODE_COLOR_48, PIXMA_SCAN_MODE_GRAY_16, + enabled by capability PIXMA_CAP_48BIT + * backend/pixma_mp150.c: unused capability PIXMA_CAP_48BIT removed + * backend/pixma_mp810.c: + - new capability for CS9000F: PIXMA_CAP_48BIT + - functions for scan mode detection improved + - lowest resolution for 48 bit flatbed scan modes is 150 dpi + * po/de.po: German translations for new scan modes + +2012-06-04 Stphane Voltz + * backend/genesys.c backend/genesys.h backend/genesys_low.h + backend/genesys_devices.c backend/genesys_gl124.[ch] : LiDE 110/210 + led calibration improvements, add a 'lamp off during scan' option, + add 2400x4800 mode to LiDE 100, 110 and 210, improve remove/add + scanner detection. + +2012-06-01 Stphane Voltz + * backend/genesys.c backend/genesys_gl841.c: apply led calibration fix + +2012-06-01 Stphane Voltz + * backend/genesys.c: fix get_device to handle scanner plugging and + unplugging + +2012-05-31 Stphane Voltz + * doc/descriptions/genesys.desc doc/sane-genesys.man + doc/descriptions/unsupported.desc: updated Xerox onetouch 2400 status + to supported + +2012-05-30 Stphane Voltz + * backend/genesys.c backend/genesys_gl124.c backend/genesys_gl124.h: + align gl124 code on latest gl847 improvements -2010-08-31 Stphane Voltz - * backend/genesys_devices.c backend/genesys.conf.in backend/genesys.c - backend/genesys_gl843.[ch] backend/Makefile.am backend/Makefile.in: - support for gl843 based scanners, starting with KV-SS080. - disable true gray for LIDE35/50 since it breaks scanning - -2010-08-02 Stphane Voltz - * backend/genesys_devices.c backend/genesys.conf.in: add a device - entry for the Canoscan 5600f. - -2010-07-25 Nicolas Martin - * backend/pixma.c, backend/pixma.h, backend/pixma_common.c, - backend/pixma_imageclass.c: - pixma: changes for future Lineart scan mode support. - some MF8030 settings, but device not yet supported. +2012-05-29 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c + backend/genesys_gl847.h doc/descriptions/genesys.desc: add 4800 dpi + for LiDE 700F + - improve fedd/move to scan area for gl847 based scanners + - remove non working 400 dpi mode + +2012-05-28 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl124.c + backend/genesys_gl847.c backend/genesys_gl847.h backend/genesys_low.h + doc/descriptions/genesys.desc doc/sane-genesys.man: + add support for LiDE 700F up to 2400 dpi + +2012-05-10 m. allan noah + * backend/fujitsu.c: backend v111 + - call send_* and mode_select_* from sane_start + - split read payloads into new debug level + - add paper-protect, staple-detect and df-recovery options + +2012-05-09 m. allan noah + * backend/fujitsu.[ch], backend/fujitsu-scsi.h: backend v110 + - correct max_y_fb for fi-62x0 series + - add must_fully_buffer helper routine + - add hwdeskewcrop option, with fallback to software versions + - add 'actual' param to get_pixelsize for post-scan + - add recent model VPD params + - only set params->lines = -1 when using ald without buffering + - fix bugs in background color when using software deskew + * sanei/sanei_magic.c: Update deskew algo + - allow paper to be +/- 1 inch from top of image + - correct integer overflow + - improve (disabled) debug logs -2010-07-22 Nicolas Martin - * backend/pixma_mp150.c, backend/pixma_imageclass.c, +2012-05-03 Rolf Bensch + * backend/pixma_io_sanei.c, backend/pixma_mp150.c, doc/descriptions/pixma.desc, doc/sane-pixma.man: - pixma: add support for PIXMA MX870. - declared PIXMA MF8030, but not yet working. - -2010-07-14 Julien Blache - * doc/descriptions/epson.desc, doc/descriptions/epson2.desc: add :scsi - keyword for the Perfection 2450 connected through FireWire. Courtesy - of Brian Denheyer . - -2010-07-12 Julien Blache - * doc/descriptions-external/epkowa.desc: update for iScan 2.25.0, - from Alesh Slovak . - -2010-07-09 Julien Blache - * backend/dll.c: allow symlinks under SANE_CONFIG_DIR/dll.d. + Patch for Canon Pixma MP280 from Daniel Beer. + - PIXMA_EOF mapped to PIXMA_ETIMEDOUT. + - Maximum resolution reduced to 600dpi. + - Scanner added to doc files. + +2012-04-23 Rolf Bensch + * AUTHORS: Pixma backend and email addresses updates. + +2012-04-20 Rolf Bensch + * tools/sane-desc.c: tools/udev/libsane.rules supports scanner group + access to any scanner, with and without acl support. + +2012-04-17 Rolf Bensch + * backend/pixma.c, backend/pixma_sane_options.c, po/de.po: + New description for device specific option "source". + +2012-04-17 Rolf Bensch + * backend/pixma.c: select first entries of dynamic dpi list + and dynamic mode list as default values after changing the scan source -2010-07-04 Nicolas Martin +2012-04-04 Rolf Bensch * backend/pixma_mp150.c, doc/descriptions/pixma.desc, doc/sane-pixma.man: - pixma: changes for PIXMA MX350 support, usb and ethernet. - -2010-07-03 Nicolas Martin - * doc/descriptions/pixma.desc, backend/pixma.c: - pixma: fix ImageClass MF6550 description. - fix end of line crop buffer size. - -2010-07-02 Nicolas Martin - * doc/descriptions/pixma.desc, doc/sane-pixma.man: - pixma: update doc to include ImageClass MF6550 support. - -2010-07-02 m. allan noah - * backend/avision.c: patch for AV122-C2 from Ori Koren + New scanners Canon Pixma MX510 and Canon Pixma MX890. Both are untested. -2010-07-01 Nicolas Martin - * backend/pixma_mp150.c, doc/descriptions/pixma.desc, doc/sane-pixma.man: - pixma: thanks to Dan McGee patch, add support for PIXMA MX340. +2012-04-04 Rolf Bensch + * backend/pixma.[ch], backend/pixma_mp810.c, po/de.po: color and grayscale + negatives scan in TPU mode, for CS8800F and CS9000F. -2010-06-23 m. allan noah - * backend/fujitsu.c: Fix compilation bug when jpeg support is enabled. +2012-04-04 Rolf Bensch + * backend/pixma_mp810.c: cropping y and h to scanable area in TPU mode, + for CS8800F and CS9000F. -2010-06-23 Julien Blache - * various: corrected initialization, printing, etc. in many backends +2012-03-29 Stphane Voltz + * backend/genesys_gl124.c backend/genesys_devices.c: use feed earlier + at high resolution. Tune LiDE 110/210 geometry. -2010-06-21 Julien Blache - * tools/sane-desc.c: udev rules: set libsane_matched=yes for SCSI - devices too. Used by udev-acl later on. +2012-03-26 Stphane Voltz + * doc/descriptions/unsupported.desc: removed G4010/G4050, + patch by Martin Michlmayr . -2010-06-21 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c - backend/genesys_low.h: improve scan quality by using double x - resolution internally at low resolution. Scan area geometry fine - tuning. - -2010-06-18 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c: - add 400, 200 and 100 dpi resolution to LiDE 100 and LiDE 200 . Disable - true gray until it really works. +2012-03-25 Mike Kelly + * backends/avision.[ch]: + - Added Xerox Documate 632. + - Added firmware checking for HP5370c scanners. + - Reverted AV610 USB IDs and removed AV_INT_STATUS. + - Fixed warning about printf and size_t. + - Fixed bug using wrong enum in x/y range check. -2010-06-15 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c - backend/genesys_gl847.h: - Canon LiDE 200 support up to 1200 DPI +2012-03-22 Rolf Bensch + * po/de.po: New German translations for pixma backend. -2010-06-15 m. allan noah - * doc/descriptions/xerox_mfp.desc, backend/xerox_mfp.conf.in: - Add Samsung SCX-4600 USB IDs - * backend/kvs20xx.h: use sys/param.h instead of endian.h - -2010-06-10 Stphane Voltz - * backend/genesys.c: - calibration file name double free fix - -2010-06-10 m. allan noah - * backend/niash.c: patch for HP3300 from Yves Jeanrenaud - * po/fr.po: updates from Yann E. MORIN - -2010-06-10 Stphane Voltz - * backend/genesys_devices.c backend/genesys_gl847.c: - LiDE 100 motor settings rework - -2010-06-09 m. allan noah - * backend/kvs20xx*, Makefiles, confs and docs: - - Add new kvs20xx backend from Panasonic, for KV-S202xC and KV-S204xC - -2010-06-09 m. allan noah - * backend/fujitsu.[ch]: backend v100: - - store more Request Sense data in scanner struct - - clear Request Sense data at start of every do_cmd() call - - track per-side ILI and global EOM flags - - set per-side EOF flag if ILI and EOM are set - -2010-06-09 m. allan noah - * backend/Makefile.{am|in}: add genesys_gl847 files - * po/Makefile.{am|in}: add LINGUAS POTFILES to EXTRA_DIST - * Makefile.am: add Changelog-1.0.21 to EXTRA_DIST - -2010-06-08 Nicolas Martin - * backend/pixma_imageclass.c: - pixma: set #1 of modifiations for ImageClass MF65xx series. - -2010-06-07 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c: - LiDE 100 motor fine tuning +2012-03-21 Mike Kelly + * backends/avision.[ch]: + - Added Gray mode support for Kodak i30 and i40. + - Skip post-processing when caching flipping duplex. + - Moved a comment nearer its code. + - Added sane_reload_devices() to sane_init(). + - Corrected the logic to set lines = -1 for ADF mode. + - Fix calculations when flipping back of duplex page. + - Track the number of lines to flip as a negative number. + +2012-03-20 Stphane Voltz + * backend/genesys_*.[ch]: gl841 sheetfed scanners calibration + improvement, fix document end detection when doing dynamic lineart. + Copyrights updates. + +2012-03-19 Gerhard Jaeger + * backend/plustek.c: Fix batch scanning with Plustek backend + Patch submitted and tested by Elias Oltmanns + +2012-03-19 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl843.c: update HP4850 + geometry and fix initial state + +2012-03-06 Rolf Bensch + * backend/pixma_bjnp.c: Replace index() with strchr(). Bug #313563. + +2012-02-29 Rolf Bensch + * backend/pixma.[ch], backend/pixma_common.c, + backend/pixma_sane_options.[ch]: New device specific option + 'threshold-curve'. Can be used to optimize 1 bit B/W lineart scans. + +2012-02-27 Rolf Bensch + * backend/pixma_imageclass.c, doc/descriptions/pixma.desc, + doc/sane-pixma.man: New scanner Canon imageCLASS MF4410 from + Vasiliy Olekhov. + +2012-02-16 Rolf Bensch + * backend/pixma.c, backend/pixma_sane_options.[ch]: + New device specific option 'gamma'. + +2012-02-09 Rolf Bensch + * backend/pixma.[ch], backend/pixma_common.[ch], + backend/pixma_sane_options.[ch], backend/pixma_mp{150,810}.c: + 1 bit B/W lineart for pixma_mp150 and pixma_810 subdrivers. + +2012-02-06 Rolf Bensch + * backend/pixma_mp150, doc/descriptions/pixma.desc, doc/sane-pixma.man: + New scanner Canon PIXMA MX360. + +2012-02-03 Rolf Bensch + * backend/pixma.h: set PIXMA_VERSION_{MAJOR,MINOR,BUILD} to 0.16.3. + +2012-02-03 Rolf Bensch + * backend/scripts/pixma_gen_options.py: script to generate + backend/pixma_sane_options.c and backend/pixma_sane_options.h + from pixma.c. Found in old pixma project archive file + http://home.arcor.de/wittawat/pixma/mp150-0.13.1.tar.bz2. + +2012-01-31 Rolf Bensch + * backend/pixma.[ch], backend/pixma_imageclass.c, backend/pixma_mp[17]50.c, + backend/pixma_mp730.c, backend/pixma_mp810.c: modify dpi_list dependent on + different scanner capabilities for normal (flatbed) and ADF/TPU modes. + +2012-01-23 Rolf Bensch + * backend/pixma_mp150, doc/descriptions/pixma.desc, doc/sane-pixma.man: + New scanner PIXMA MX880 Series. + +2012-01-21 Ruediger Meier + * backend/canon_dr.h, backend/cardscan.h, backend/dll.c, + backend/epjitsu.h, backend/fujitsu.h, backend/gt68xx.c, + backend/kodak.h, backend/microtek2.h, sanei/sanei_access.[hc]: fix and + cleanup portable PATH_SEP and DIR_PATH defines + * sanei/sanei_scsi.c, tools/sane-find-scanner.c, configure.in, + sane/config.h.in: use the right scsi header on win32. + +2012-01-17 Rolf Bensch + * backend/pixma_mp810.c: Flatbed mode supports max. 4800 dpi. + +2012-01-14 m. allan noah + * backend/Makefile.{am,in}, backend/pixma.[ch], + backend/pixma_common.c, backend/pixma_mp[17]50.c, + backend/pixma_mp810.c, backend/pixma_rename.h, + doc/descriptions/pixma.desc, doc/sane-pixma.man: + Updated Pixma backend from Gernot Hassenpflug. -2010-06-03 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c +2012-01-03 Stphane Voltz + * backend/genesys_gl646.c backend/genesys_gl847.c + backend/genesys_gl43.[ch]: fixd scan line number for gl646 CCD + scanners, improved led calbration for gl847 CIS scanners and G4050 XPA + work progress. + +2011-12-30 Alex Belkin + * backend/xerox_mfp.conf.in doc/descriptions/xerox_mfp.desc: usb id + for Samsung SCX-3205W, reported by sane tester. + +2011-12-27 Chris Bagwell + * configure.in, configure, config.h.in, sanei_usb.c, + check-usb-chip.c, sane-find-scanner.c: Add check for + libusb-win32 which is API compatible with libusb-0.1 + but has different header file name to prevent conflicts + with Windows own usb.h. Since libusb-1.0 is scheduled to + support Windows (not a forked version), it will probably + work as-is if user has pkg-config installed under mingw. + +2011-12-20 m. allan noah + * backend/fujitsu*, doc/descriptions/fujitsu.desc: backend v109 + - added some MS and INQ information + - increased default buffer size for later machines in config file + - renamed new fi-6xx0Z models + +2011-12-18 Chris Bagwell + * doc/descriptions-external/epkowa.desc: update for new iScan + 2.28.1 release from Olaf Meeuwissen . + +2011-11-29 Stphane Voltz + * backend/genesys.c backend/genesys_low.h backend/genesys_devices.c + backend/genesys_gl847.c: genesys backend build 67, gl847 led and + shadingcalibration improvements. + +2011-11-21 m. allan noah + * backend/fujitsu.[ch]: backend v107 and v108 + - M3091 does not support scanner_control(adf) + - Correct buffer overflow in read_from_3091duplex() + - sane_read() now always calls read_from_*() + - read_from_*() are callable when there is no data, and read to eof + - sane_read() will keep alternate duplex reads to similar length + - Added debugging statements + - Corrected comments + - Updated Copyright + - merged x/y resolution options + - moved page width/height to start of geometry group + - use mode to pick resolution list v/s range + - improved M3091 resolution choices + +2011-11-20 Chris Bagwell + * epson2-commands.c: Include to resolve u_long. + * epson2.c, magicolor.c, xerox_mfp-tcp.c: Include + and to for anyone using setsockopt(). + * sanei_tcp.h: Include since ssize_t is referenced. + * sanei_usb.c: FreeBSD version checks. All changes in this + batch come from FreeBSD ports patches. Bug #312503. + +2011-11-20 Stphane Voltz + * backend/genesys_*.[ch] doc/descriptions/genesys.desc: build + 66. Add hp N6310 and 4850C devices. Fix gl847 calibration. + GL843 XPA support groundwork. + +2011-11-14 Chris Bagwell + * doc/descriptions-external/epkowa.desc: update for new iScan + release from Olaf Meeuwissen . + +2011-11-10 Chris Bagwell + * include/sane/sanei_thread.h, sanei/sanei_thread.c: + Make SANE_Pid map to pthread_t to be compilable + on platforms where pthread_t is not a integer; + namely mingw. + * configure, configure.in, include/sane/config.h.in, + lib/Makefile.am, lib/Makefile.in, lib/sleep.c: Add + a sleep() replacement function; mostly for mingw. + * backend/epson2-ops.c, backend/epson2.c, umax_pp_low.c: + Revert some broken sleep()->usleep() conversions. + +2011-11-09 Chris Bagwell + * configure, configure.in, acinclude.m4: + Convert enable_dynamic to "auto" behavior. Previous + attempt was resulting in it always defaulting to + "yes" and user had to use --disable-dynamic on + platforms that couldn't support it. + * backend/epson2-ops.c, backend/epson2.c, backend/epson2.h: + minor portability changes to epson2. #ifdef some optional + headers and use usleep() instead of sleep(). Switch to + sanei_udb_set_noblock(). + +2011-11-08 Chris Bagwell + * backend/Makefile.*: Finish preload linking fix. + dll.c was being linked in with convienence library. + If it needs to have two behaviors then we need to + create two libraries. Now preloading is working in + libsane.so again and disabled in libsane-dll.so. + * configure.in, configure, README, */Makefile.*: + Update README to describe use of BACKENDS and + PRELOADABLE_BACKENDS to limit backend compiles. + Also, mark those in configure.in as variables so + they show up in "configure --help". + Add back the useful --disable-dynamic and + --disable-preload that appear to have been removed + at some point but are documented in README. + * README.windows: Update info to include mingw + references. + +2011-11-07 Chris Bagwell + * ltmain.sh: Disable sane's soname libtool hack for + mingw platform so that DLL's will be created for + each backin built; just like on unix platforms. + * backend/Makefile.*: Add missing sanei_magic.lo to + libsane backend. + * sanei/sanei_tcp.c sanei/sanei_udp.c include/sane/sanei_udp.h: + Add WSAStartup()/WSACleanup() calls on mingw to get ws2_32 + working. Make util function to set sockets to nonblocking + and make work in unix and mingw platforms. + +2011-11-06 Chris Bagwell + * INSTALL, Makefile.am, */Makefile.in, compile, config.guess, + config.sub, configure, depcomp, include/sane/config.h.in, + install-sh, ltmain.sh, libtool.m4, ltversion.m4, missing, + mkinstalldirs: Update files using autoconf 2.68 and libtool 2.4. + * configure.in, frontend/scanimage.c, include/sane/sanei_tcp.h, + include/sane/sanei_udp.h, lib/inet_ntop.c, lib/inet_pton.c, + sanei/sanei_tcp.c, sanei/sanei_udp.c, tools/sane-find-scanner.c: + Add check for winsock2. Add ws2_32 library when found. Look + for getuid and getpass since not on mingw. + * lib/sigprocmask.c: Comment out logic on windows for now since + it doesn't work. At least it will compile. + * lib/syslog.c: Add a replacement syslog for at least mingw. + * testsuite/Makefile.*: Use $(EXEEXT) so that scanimage can + be ran on windows. + * backend/Makefile.*, backend/dll.c: Modify dll backend + so that libsane-dll does not reference preloaded backends + symbols since its not linking them in. Only libsane + references preloaded backend symbols and also links them + in now. + +2011-11-05 Chris Bagwell + * lib/vsyslog.c, frontend/scanimage.c, include/sane/sanei_tcp.h + include/sane/sanei_udp.h, lib/inet_ntop.c, lib/inet_pton.c, + sanei/sanie_init_debug.c, sanei/sanei_scsi.c, sanei/sanei_tcp.c, + sanei_udp.c, sanei_usb.c: mingw32 compile fixes. Mostly its + not including header files that windows doesn't have and + add winsock.h as needed. Also, do not use signals windows + doesn't have as well. + +2011-11-02 Stphane Voltz + * backend/genesys_*.[ch] backend/Makefile.am backend/Makefile.in: + genesys_gl841.h creation and genesys backend code cleanup + +2011-11-01 m. allan noah + * backend/canon_dr.[ch]: backend v39 + - DR-2580C pads the backside of duplex scans + +2011-11-01 Stphane Voltz + * backend/genesys_gl124.c backend/genesys_gl646.c + backend/genesys_gl841.c backend/genesys_gl843.c backend/genesys_gl847.c + backend/genesys_low.c backend/genesys_low.h: do include + in a clean way + +2011-10-30 Mattias Ellert + * backend/kvs40xx.h: Use portable endian macro from config.h + * backend/kodak.c: Use more precise path to internal headers + * backend/canon630u.c, backend/genesys_gl124.c, + backend/genesys_gl646.c, backend/genesys_gl841.c, + backend/genesys_gl843.c, backend/genesys_gl847.c, + backend/genesys_low.c, backend/hp3900_rts8822.c, + backend/rts88xx_lib.c, backend/xerox_mfp.c, sanei/sanei_pio.c: + Include for definition of u_long on MacOS X + * po/sv.po: Update Swedish translation + +2011-10-21 Stphane Voltz + * backend/genesys.c backend/genesys.h backend/genesys_devices.c + backend/genesys_gl*.c backend/genesys_gl843.h + backend/genesys_low.[ch], doc/sane.man doc/sane-genesys.man doc/descriptions/genesys.desc: - final bits for full LiDE 100 support + 1200 and 2400 dpi support for G4010/G4050 -2010-05-31 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c: - shading calibration is working and led calibration has been tuned - -2010-05-30 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c - backend/genesys_low.h: Canon LiDE 100 working without shading - calibration which is the final bit to fix +2011-10-19 Alex Belkin + * backend/xerox_mfp.conf.in doc/descriptions/xerox_mfp.desc: usb id + for Samsung CLX 3185, reported by John Dignum. + +2011-10-01 Alex Belkin + * backend/xerox_mfp.conf.in doc/descriptions/xerox_mfp.desc: usb id + for Samsung SCX-4828FN or SCX-4x28 Series, reported by Patrice + Levesque. + +2011-09-16 Nils Philippsen + * doc/sane-hpljm1005.man doc/sane-p5.man: use groff escape sequences in + man pages + * AUTHORS NEWS doc/descriptions.txt doc/*/*.CHANGES + doc/plustek/Plustek-*.txt doc/u12/U12.* + doc/umax/sane-umax-parport-doc.html: encode to UTF-8 + * tools/sane-config.in: use pkg-config + * doc/descriptions/epson2.desc backend/epson_usb.c: add USB id for Epson + Stylus SX125 + +2011-09-07 Stphane Voltz + * backend/genesys_devices.c backend/genesys_low.h + backend/genesys_gl124.c: fix button mapping for LiDE 210 + +2011-08-25 Stphane Voltz + * backend/genesys_gl646.c backend/genesys_low.c backend/genesys_low.h + backend/genesys.c: add a no move during shading calibratiob flag, and + use it for MD5345 + +2011-08-23 Stphane Voltz + * backend/genesys_gl847.c backend/genesys_low.c backend/genesys_low.h + backend/genesys.c backend/genesys_gl124.c backend/genesys_gl843.c: + make sure to use the fatest speed when parking, use lowest sensor dpi + as default resolution + +2011-08-22 Stphane Voltz + * backend/genesys*.[ch]: enable calibration for G4050/G4010 and + minor code refactors + +2011-08-05 Stphane Voltz + * backend/genesys.c backend/genesys_low.c backend/genesys_conv.c: + fixed generic calibration cache for CCD case and when yres is higher + than sensor's maximum one. Fixed lineart data enlarging when yres is + higher than xres. + +2011-07-31 Stphane Voltz + * backend/genesys_gl646.c backend/genesys_gl841.c + backend/genesys_gl843.c backend/genesys_gl847.c backend/genesys_gl124.c + backend/genesys_low.[ch]: is_compatible cache refactor for gl843, + gl847 and gl124 + +2011-07-31 Stphane Voltz + * backend/genesys_gl124.[ch] backend/genesys_gl843.[ch]: + use sanei_genesys_compute_dpihw instead of specific function. + +2011-07-15 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl646.c + backend/genesys_gl847.c: re-tune scan area of MD5345/MD6228. + parking function clean up. + +2011-07-15 Stphane Voltz + * backend/lexmark.c backend/lexmark_low.c: increase tolerance when + detecting the 'home' dot. + +2011-07-07 Stphane Voltz + * backend/genesys.c: fixed incorrect image height for sheetfed + scanners + +2011-07-07 m. allan noah + * po/pt.po: updated translation from cncsolutions.com.br + +2011-07-06 m. allan noah + * backend/canon_dr.[ch]: backend version 38 + - initial support for DR-5020 + - use ppl_mod instead of Bpl_mod, apply to all modes + - invert logic of read_panel tracking + - add ability to disable read_panel() + - automatically disable read/send_panel if unsupported + * doc/descriptions/canon_dr.desc: status of DR-5020 + +2011-07-06 Stphane Voltz + * backend/genesys_low.h backend/genesys_gl847.c backend/genesys.c + backend/genesys_gl124.c backend/genesys_gl843.c backend/genesys_gl646.c + backend/genesys_gl841.c: improve 4800 dpi quality for LiDE 200 by + increasing the number of lines scan for shading + +2011-07-05 Stphane Voltz + * backend/genesys_low.h backend/genesys_gl847.c backend/genesys_devices.c + backend/genesys.c backend/genesys_gl124.c backend/genesys_gl843.c + backend/genesys_gl646.c backend/genesys_gl841.c: make 4800 pdi work + for Lide200. Calibration cache file leak fix. + +2011-06-30 Olaf Meeuwissen + * frontend/scanimage.c: plug a memory leak in batch mode. + +2011-06-24 Julien Blache + * tools/sane-desc.c: add a wildcard rule for Epson SCSI scanners + with a model string beginning with "SCANNER". Idea from Olaf + Meeuwissen. + +2011-06-21 Julien Blache + * doc/descriptions/epson2.desc: added SCSI IDs for the GT-10000+, + reported by Simon Becherer. + +2011-06-16 Alex Belkin + * backend/xerox_mfp.conf.in doc/descriptions/xerox_mfp.desc: usb id + for Samsung CLX-216x Series, tested with CLX-2160, reported by Malte + Starostik + +2011-06-15 Stphane Voltz + * backend/genesys.c backend/genesys_gl847.c: lineart fix + +2011-06-13 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl646.c + backend/genesys_gl646.h doc/descriptions/genesys.desc + doc/sane-genesys.man: add full HP2400 support thanks a patch from + Alexey Osipov + +2011-06-13 Stphane Voltz + * backend/genesys*.[ch] : rework of gl847 to reach 2400 dpi for + LiDE 100 and 4800 dpi for LiDE 200 + +2011-06-10 Stphane Voltz + * backend/lexmark_models.c: fix missing motor initialization + +2011-06-07 Stphane Voltz + * backend/genesys.c backend/genesys.h backend/genesys_conv.c: + add blank page skipping and rotation detection options + +2011-06-06 m. allan noah + * docs/*kvs40xx*, backend/kvs40xx*: New Panasonic KV-S40xx/70xx + backend, originally by Panasonic Russia. + * acinclude.m4, */Makefile.am, configure*: build new kvs40xx backend + * po/POTFILES: add kvs* backends + * po/.gitignore: ignore sane-backends.pot + * include/sane/sanei_magic.h, sanei/sanei_magic.c: + add new blank detection and rotation detection routines + * backend/kvs1025*, backend/Makefile*: add support for sanei_magic + +2011-06-02 Julien Blache + * tools/sane-desc.c: add udev+acl output mode, udev rules using ACLs + for the scanner group instead of making the device root:scanner 0664. + This is designed to help with MFPs and play nice with ConsoleKit. + +2011-04-20 Stphane Voltz + * backend/genesys_low.c backend/genesys_devices.c + backend/genesys.conf.in: add Xerox 2400 onetouch model and improve + big endian handling + +2011-03-19 Julien Blache + * tools/sane-desc.c: move away from using power/level for disabling + USB autosuspend/power management and use power/control if available. + +2011-03-18 Stphane Voltz + * backend/genesys_low.c backend/genesys.c : rewrite big endian fixes + for gl847/gl124 based scanners. Improve calibration cache file handling. + +2011-03-17 Stphane Voltz + * backend/genesys_low.c: big endian fixes for gl847/gl124 based + scanners. Patch by Olaf Zimmermann . + +2011-03-15 Stphane Voltz + * backend/Makefile.in backend/canon_dr.[ch]: fixes to allow full + static build under cygwin + +2011-03-12 Troy Rollo + * backend/hp3500.c: Remove interdependency between contrast and + brightness. + +2011-03-12 Julien Blache + * doc/scanimage.man: batch-start defaults to 1 if not specified, + not 0. Reported by Jakub Wilk . + +2011-03-12 Troy Rollo + * backend/hp3500.c: Add grayscale and line art scanning. Add contrast + and brightness controls which influence the calibration data provided + to the scanner. + +2011-03-06 Ilia Sotnikov + * backend/hp5590.c, backend/hp5590_cmds.{c,h}: in ADF modes the device can + scan up to 14", which is usually bigger than what scanner reports back + during initialization + * backend/hp5590.c, backend/hp5590_cmds.{c,h}, backend/hp5590_low.{c,h}: + fixed detection of HP4500 devices (tested) and HP5550 (untested) - these + devices need no reading USB-in-USB acknowledgement after each command. To + achieve that, proto_flags are passed down to low-level functions. These + flags are taken from device descriptions + * backend/hp5590_low.{c,h}: fixed up get_status command - index should + be 0x00, not 0x20 + * backend/hp5590.c: bump up the backend version + +2011-03-04 Julien Blache + * frontend/saned.c: define PATH_MAX if needed, fixes build on + HURD. Patch from Pino Toscano . -2010-05-24 m. allan noah - * backend/avision.c, doc/descriptions/avision.desc: add Fujitsu fi-5015C +2011-02-16 Julien Blache + * backend/v4l.c, backend/v4l.h: fix build with libv4l 0.8.3+. -2010-05-20 Stphane Voltz - * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c: - make led and shading calibration work for LiDE 100 - -2010-05-16 Chris Bagwell - * README.freebsd: Add suggested hint that configure needs - to be told location of external libraries installed through - Ports. - -2010-05-16 Stphane Voltz - * backend/genesys.[ch] backend/genesys_devices.c - backend/genesys.conf.in backend/genesys_gl847.[ch] - backend/Makefile.in: start of LiDE 100 and LIDE 200 support - -2010-05-16 Stphane Voltz - * sanei/sanei_usb.c include/sane/sanei_usb.h: add a sanei_usb_reset() - function. - -2010-05-15 m. allan noah - * backend/fujitsu.c: backend v99 - - sense_handler(): collect rs_info for any ILI, not just EOM - - do_usb_cmd(): use rs_info whenever set, not just EOF - - read_from_*(): better handling of EOF from lower level functions - - sane_read(): improve duplexing logic - -2010-05-03 Pierre Willenbrock - * Change status of CanoScan LiDE 40 from untested to good - -2010-04-27 m. allan noah - * po/Makefile.in: include POTFILES and LINGUAS in DIST - * doc/releases.txt: more git notes - -2010-04-25 Julien Blache - * tools/sane-backends.pc.in: syntax fixes. - -2010-04-25 m. allan noah - * ChangeLog-1.0.21, Makefile.in: ChangeLog for 1.0.21 release - * configure, configure.in: version 1.0.22git - * doc/descriptions/kodak.desc, doc/descriptions/kvs1025.desc, - doc/descriptions/p5.desc: remove :new tag - * doc/releases.txt: minor updates due to new git hooks +2011-02-13 m. allan noah + * doc/releases.txt: minor updates -Older entries can be found in ChangeLog-1.0.20. +Older entries can be found in ChangeLog-1.0.22. diff -Nru sane-backends-1.0.22/ChangeLog-1.0.22 sane-backends-1.0.23/ChangeLog-1.0.22 --- sane-backends-1.0.22/ChangeLog-1.0.22 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/ChangeLog-1.0.22 2011-06-27 17:40:42.000000000 +0000 @@ -0,0 +1,536 @@ +****** Release of sane-backends 1.0.22. End of code freeze ****** + +2011-02-10 m. allan noah + * po/nl.po: updates from Martin Kho + * po/uk.po: updates from Yuri Chornoivan + +2011-02-04 Stphane Voltz + * backend/genesys.c: disable image processing options at 16 bits since + they can't handle it. + +2011-02-02 Stphane Voltz + * backend/genesys.c backend/genesys_low.c backend/genesys_gl843.c: + more asynchronous parking issues + +2011-01-31 Stphane Voltz + * backend/genesys.c backend/genesys_low.[ch]: don't return EOF too + early when applying image processing functions, handle writing of + lineart data, improve asynchronous head parking + +2011-01-31 m. allan noah + * backend/epjitsu.c, doc/descriptions/epjitsu.desc: + - comment changes + - added new models + * backend/fujitsu.c, doc/descriptions/fujitsu.desc, + doc/sane-fujitsu.man: fujitsu backend v106, + - added new models + - dont call mode_select with a page code the scanner does not support + +2011-01-28 Mike Kelly + * backends/avision.[ch]: + - Bumped build number to 294. + - Various minor code cleanups. + - Fixed initialization and duplexing for AV220-G + - Added ADF support for HP8200 series scanner (flipping duplexers). + - Return copied values in sane_get_parameters() + - Added paper-length option to prevent double feeds + - Added a Misc option group to hold misc features + +2011-01-26 m. allan noah + * backend/canon_dr.[ch], doc/descriptions/canon_dr.desc, + backend/canon_dr.conf.in, doc/sane-canon_dr.man: + canon_dr backend v37: + - don't center window when using flatbed + - improve request sense error messages + - enable flatbed for all known models + - ad usb ids for DR-6030C, CR-135i & CR-190i + * doc/descriptions/unsupported.desc: moved DR-2020U from canon_dr.desc + +2011-01-20 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl646.h: tune resolution + list and add internal values matching them + +2011-01-18 m. allan noah + * backend/canon_dr.[ch], doc/desc/canon_dr.desc, doc/sane-canon_dr.man: + canon_dr backend v36: + - initial support for DR-3080 and DR-5060 + - add code to clamp scan width to an arbitrary byte width boundary + - add code to prevent setting of brightness/threshold/contrast + - don't send dropout color command on non-color scanners + - initial support for DR-7090C + - update credits + * po/pl.po: updated translation from Jakub Bogusz + * po/de.po: updated translation from Matthias Mailander + * backend/canon.conf.in: improved detection of scsi scanners + +2011-01-17 Stphane Voltz + * doc/descriptions/genesys.desc: add DSmobile variant + +2011-01-15 Reinhold Kainhofer + * sanei/sanei_usb.c: Add function sanei_usb_set_endpoint to change the + endpoints for usb communications. + * backend/magicolor.c: Add new "magicolor" backend for KONICA MINOLTA + magicolor 1690MF devices + +2011-01-13 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl124.c backend/genesys_gl124.h + doc/descriptions/genesys.desc: add 2400 dpi mode for LiDE 110 and 210 + +2011-01-12 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl124.c + backend/genesys_gl124.h backend/genesys_low.c backend/genesys_low.h : + prepare 2400 dpi modes for LiDE 210/110, add a wait for head to park + function and use it in sane_start(). + +2011-01-06 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c + backend/genesys_gl847.c: fix lineart issue when yres is higher than + xres and dynamic lineart is enabled, make gl847 wait for head to + park between scans, wait for head ot park in sane_close() + +2011-01-05 Nicolas Martin + * backend/pixma_mp730.c: + pixma: Added patch proposed by Klaus Stengel for Canon imageRunner 1020/1024/1025 support. + +2011-01-04 Nicolas Martin + * backend/pixma_mp150.c, backend/pixma.c, backend/pixma.h + backend/pixma_common.c, backend/pixma_common.h: + pixma: several updates for MP830, MP990, memmove bug fix, and 64 bits image size. + +2011-01-04 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c + backend/genesys_gl124.c: fix 1200 dpi lineart issues for gl124, + reenable low resolutions for lineart for gl124, and geometry fine + tuning for LiDE 110/210 + +2011-01-03 Stphane Voltz + * backends/lexmark_low.c: fix compilation issue due to incorrect + place for a DBG statement. + +2011-01-03 Chris Bagwell + * backends/Makefile.am: Add SOCKET_LIBS to xerox_mfp + for platforms such as solaris since it uses sanei_tcp.k + * doc/sane.tex: removed reference to changelog package + since its not used and not installed by Macports (#312596) + * doc/Makefile.am: put quotes around TEXINPUTS in case + paths have spaces in name. This is so latex can find + html.sty package that is referenced by sane.tex. + +2011-01-01 Chris Bagwell + * */Makefile.in, configure, aclocal.m4: Generate from latest + autoconf (2.63 to 2.66). + * m4/*: Added new libtool helper files. + * ltmain.sh: updated to latest libtool and added back special + sane soname work around. + * po/Makefile.am: Allow "make dist" to work when translations + disabled. + * sanei/Makefile.am: allow "make check" to work on cygwin. + +2010-12-28 Stphane Voltz + * backend/genesys.conf.in backend/genesys_devices.c backend/genesys_gl646.c + backend/genesys_gl847.c backend/genesys_gl847.h: + fix HP2300 warming up problem, add LiDE 700F and 5600F to gl847 + devices, smooth DSmobile 600 moves. + +2010-12-27 Stphane Voltz + * backend/genesys.c backend/genesys.conf.in backend/genesys_devices.c + backend/genesys_gl841.c backend/genesys_low.h + doc/descriptions/genesys.desc doc/descriptions/unsupported.desc + doc/sane-genesys.man: add Plustek OpticBook 3600 support + by Chris Berry and Michael Rickmann + +2010-12-27 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl124.c backend/genesys.c + doc/descriptions/genesys.desc doc/sane-genesys.man: enable 16 bit gamma + for gl124 scanners, models and credits update. + +2010-12-24 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl124.c backend/genesys.c + doc/descriptions/genesys.desc: GL847 shading area size fix, GL124 + shading area tuning, descriptions update. + +2010-12-24 Stphane Voltz + * backend/lexmark*.[ch]: applied X74 support patch by Torsten Houwaart + + +2010-12-23 Mike Kelly + * backends/avision.[ch]: + - Bumped build number to 293. + - Removed "regularly tested" from various scanners. + - Fixed USB id for Avision FB2080E. + - Added support for the Avision AV210D2+ scanner. + - Moved device init code to sane_get_devices(). + - Rewrote indirect "adf_mode" code to be more direct. + - Fixed indentation. + - Changed AVISION_FILTER_* defines to use final values. + - Wrap duplicate USB id entries with ifdefs. + - Removed a duplicate entry for Avision AV210C2. + - Print out USB ids as four digit hex numbers. + - Enhanced sane_get_option_descriptor() debug message. + * doc/descriptions/avision.desc: + - (Re)generated from avision.c. + +2010-12-19 Stphane Voltz + * backend/genesys_gl124.h: LiDE 210 GPIO fix + +2010-12-16 Stphane Voltz + * backend/genesys.c backend/genesys.conf.in backend/genesys_devices.c + backend/genesys_gl124.h: + LiDE 210 support (GL124 based) + +2010-12-14 Stphane Voltz + * backend/genesys*.[ch] backend/genesys.conf.in backend/Makefile.am + backend/Makefile.in tools/check-usb-chip.c doc/desc/genesys.desc: + LiDE 110 support (GL124 based) + +2010-12-08 Mike Kelly + * doc/descriptions/avision.desc: + - (Re)generated from avision.c. + * doc/sane-avision.man: + - Added myself as maintainer. + * backends/avision.desc: + - Removed this obsolete file (again). + * backends/avision.c: + - Bumped version to 292. + - Added myself as maintainer. + - Added support for DocuMate262i. + - Added support entries for HP 8300 series. + * backends/avision.conf.in: + - Added myself as maintainer. + +2010-12-06 Julien Blache + * doc/descriptions/espon.desc, doc/descriptions/epson2.desc: add SCSI IDs + for the Perfection 3200 (GT-9800) connected through FireWire. Report + from Colin Kincaid Williams . Update Perfection 2450 + interface list. + +2010-12-02 m. allan noah + * backend/fujitsu.[ch], backend/fujitsu-scsi.h: + Fujitsu backend version 105 + - backup and restore image params around image processing code + - cache software crop/deskew parameters for use on backside of duplex + - fi-6110 does not support bgcolor or prepick + +2010-11-29 Olaf Meeuwissen + * backend/epson2-ops.c: fix list of supported commands for levels D1 + and D2. + +2010-11-24 m. allan noah + * backend/fujitsu.c, backend/fujitsu.conf.in, + doc/descriptions/fujitsu.desc, doc/sane-fujitsu.man: + Fujitsu backend versions 103 and 104 + - remove compiled-in default config file + - initial support for new fi-6xxx machines + - never request more than s->buffer_size from scanner + - silence noisy set_window() calls from init_interlace() + +2010-11-19 Julien Blache + * doc/descriptions-external/epkowa.desc: update for iScan 2.26.1, + from Olaf Meeuwissen . + +2010-11-17 Stphane Voltz + * backend/genesys.c: don't write scan data unless specified by debug + level. + +2010-11-08 Marc Deslauriers + * backend/v4l.c: convert v4l1 BGR data to RGB; v4l1 always returns + BGR for RGB due to a coding error way back. + +2010-11-07 Marc Deslauriers + * backend/v4l.c: loop through the read buffers in the v4l backend so + we don't get stale frames. + +2010-11-06 Stphane Voltz + * frontend/scanimage.c doc/scanimage.man: add -A/--all-options to list + all control options exposed by a backend. + +2010-11-01 Stphane Voltz + * frontend/scanimage.c: don't print readonly device options since + they can't be set on command line + +2010-11-01 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl843.c + backend/genesys_gl843.h backend/genesys_gl847.c: up build number to 41, + rework head parking, + fixed clear-calibration option reading, + make calibration cache expire for non sheetfed gl847 scanners, + tuned KV-SS080 timings to improve image quality, + raised LiDE 100/200 defaukt gamma to 1.7 + +2010-10-31 Julien Blache + * doc/descriptions/hp.desc: add SCSI IDs for ScanJet 4c. + +2010-10-30 Julien Blache + * backend/xerox_mfp.conf.in, doc/descriptions/xerox_mfp.desc: add + Samsung SCX 4824 & 4825FN (Debian #601748). Resync desc file with + config file. + +2010-10-13 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl843.c + backend/genesys_gl843.h: added 100, 150, 400 and 600 dpi modes for + G4050 and G4010. Added 500 and 400 dpi modes for KV-SS080 + +2010-09-30 Alex Belkin + * Makefile.in backend/Makefile.am backend/Makefile.in backend/xerox_mfp-tcp.c + backend/xerox_mfp-usb.c backend/xerox_mfp.c backend/xerox_mfp.conf.in backend/xerox_mfp.h + doc/Makefile.in doc/descriptions/xerox_mfp.desc doc/sane-xerox_mfp.man frontend/Makefile.in + include/Makefile.in japi/Makefile.in lib/Makefile.in po/Makefile.in sanei/Makefile.in + testsuite/Makefile.in tools/Makefile.in: Added Samsung SCX-4500W scan over network support + for xerox_mfp backend (by Alexander Kuznetsov). autoconf and automake reconfigure + to support new files. + +2010-09-28 Stphane Voltz + * backend/genesys.c backend/genesys.conf.in backend/genesys_devices.c + backend/genesys_gl843.c backend/genesys_gl843.h: add minimal support + (200 and 300 dpi) for HP G4050. Add a device entry for G4010. + +2010-09-18 Reinhold Kainhofer + * include/sane/sanei_config.h sanei/sanei_config.c: Add + function sanei_config_get_paths to obtain all configuration pathes + (from env var SANE_CONFIG_DIR and default paths); fix pointers to + invalid/freed strings when SANE_CONFIG_DIR is set. + * backend/dll.c: When searching for the dll.d/ directory, + also use the SANE_CONFIG_DIR env variable. + +2010-07-12 Julien Blache + * doc/descriptions-external/epkowa.desc: update for iScan 2.26.0, + from Alesh Slovak . + +2010-09-17 Stphane Voltz + * backend/genesys.c backend/genesys_low.h sanei/sanei_magic.c + backend/genesys_devices.c backend/genesys_gl843.c: do asynchronous head + parking for flatbed scanners to save scan time. Fix a couple of + memory overwrites detected by valgrind. Optimize shading data + writing and fine tune scaneara for gl843. + +2010-09-16 Julien Blache + * frontend/saned.c: exit Avahi process on error and when the poll + loop terminates. + +2010-09-13 Stphane Voltz + * doc/descriptions/unsupported.desc: update status of scanners + now supported by the genesys backend. + +2010-09-13 Stphane Voltz + * doc/sane-genesys.man doc/descriptions/genesys.desc + backend/genesys.con.in: update HP3690 status to supported + +2010-09-12 Stphane Voltz + * backend/genesys_conv.c backend/genesys.c doc/sane-genesys.man + sanei/sanei_magic.c backend/genesys.h backend/genesys_low.h + backend/Makefile.in backend/Makefile.am: add software deskep, crop + and despeckle for the genesys backend. + +2010-09-08 Nicolas Martin + * backend/pixma_mp150.c, backend/pixma_mp730.c + doc/descriptions/pixma.desc, doc/sane-pixma.man: + pixma: several updates for MP375R, MP390, MP460 and docs by Gernot Hassenpflug. + +2010-09-07 Nicolas Martin + * backend/pixma_mp750.c: + pixma: fix for 2400 dpi striping on MP760/770/780/790 by Gernot Hassenpflug. + +2010-09-05 Nicolas Martin + * doc/sane-pixma.man: + pixma: man page update for devices as reported by Gernot Hassenpflug. + +2010-09-05 Stphane Voltz + * backend/genesys_gl841.c: end of document detection rework for + sheetfed scanners. + +2010-09-04 Stphane Voltz + * backend/genesys_devices.c backend/genesys.c backend/genesys_gl843.c: + 1200 dpi resolution support for KV-SS080. + +2010-09-01 Stphane Voltz + * backend/genesys_devices.c backend/genesys.c backend/genesys_gl843.c: + support for scan button, faster move to scan area and calibration fine + tuning. + +2010-09-01 Nicolas Martin + * backend/pixma.c, backend/pixma_mp730.c, backend/pixma_mp150.c + doc/descriptions/pixma.desc: + pixma: changes supplied by Gernot Hassenpflug for Lineart support + to some Pixma devices, and desc updates. + +2010-08-31 Stphane Voltz + * backend/genesys_devices.c backend/genesys.conf.in backend/genesys.c + backend/genesys_gl843.[ch] backend/Makefile.am backend/Makefile.in: + support for gl843 based scanners, starting with KV-SS080. + disable true gray for LIDE35/50 since it breaks scanning + +2010-08-02 Stphane Voltz + * backend/genesys_devices.c backend/genesys.conf.in: add a device + entry for the Canoscan 5600f. + +2010-07-25 Nicolas Martin + * backend/pixma.c, backend/pixma.h, backend/pixma_common.c, + backend/pixma_imageclass.c: + pixma: changes for future Lineart scan mode support. + some MF8030 settings, but device not yet supported. + +2010-07-22 Nicolas Martin + * backend/pixma_mp150.c, backend/pixma_imageclass.c, + doc/descriptions/pixma.desc, doc/sane-pixma.man: + pixma: add support for PIXMA MX870. + declared PIXMA MF8030, but not yet working. + +2010-07-14 Julien Blache + * doc/descriptions/epson.desc, doc/descriptions/epson2.desc: add :scsi + keyword for the Perfection 2450 connected through FireWire. Courtesy + of Brian Denheyer . + +2010-07-12 Julien Blache + * doc/descriptions-external/epkowa.desc: update for iScan 2.25.0, + from Alesh Slovak . + +2010-07-09 Julien Blache + * backend/dll.c: allow symlinks under SANE_CONFIG_DIR/dll.d. + +2010-07-04 Nicolas Martin + * backend/pixma_mp150.c, doc/descriptions/pixma.desc, doc/sane-pixma.man: + pixma: changes for PIXMA MX350 support, usb and ethernet. + +2010-07-03 Nicolas Martin + * doc/descriptions/pixma.desc, backend/pixma.c: + pixma: fix ImageClass MF6550 description. + fix end of line crop buffer size. + +2010-07-02 Nicolas Martin + * doc/descriptions/pixma.desc, doc/sane-pixma.man: + pixma: update doc to include ImageClass MF6550 support. + +2010-07-02 m. allan noah + * backend/avision.c: patch for AV122-C2 from Ori Koren + +2010-07-01 Nicolas Martin + * backend/pixma_mp150.c, doc/descriptions/pixma.desc, doc/sane-pixma.man: + pixma: thanks to Dan McGee patch, add support for PIXMA MX340. + +2010-06-23 m. allan noah + * backend/fujitsu.c: Fix compilation bug when jpeg support is enabled. + +2010-06-23 Julien Blache + * various: corrected initialization, printing, etc. in many backends + +2010-06-21 Julien Blache + * tools/sane-desc.c: udev rules: set libsane_matched=yes for SCSI + devices too. Used by udev-acl later on. + +2010-06-21 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c + backend/genesys_low.h: improve scan quality by using double x + resolution internally at low resolution. Scan area geometry fine + tuning. + +2010-06-18 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c: + add 400, 200 and 100 dpi resolution to LiDE 100 and LiDE 200 . Disable + true gray until it really works. + +2010-06-15 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c + backend/genesys_gl847.h: + Canon LiDE 200 support up to 1200 DPI + +2010-06-15 m. allan noah + * doc/descriptions/xerox_mfp.desc, backend/xerox_mfp.conf.in: + Add Samsung SCX-4600 USB IDs + * backend/kvs20xx.h: use sys/param.h instead of endian.h + +2010-06-10 Stphane Voltz + * backend/genesys.c: + calibration file name double free fix + +2010-06-10 m. allan noah + * backend/niash.c: patch for HP3300 from Yves Jeanrenaud + * po/fr.po: updates from Yann E. MORIN + +2010-06-10 Stphane Voltz + * backend/genesys_devices.c backend/genesys_gl847.c: + LiDE 100 motor settings rework + +2010-06-09 m. allan noah + * backend/kvs20xx*, Makefiles, confs and docs: + - Add new kvs20xx backend from Panasonic, for KV-S202xC and KV-S204xC + +2010-06-09 m. allan noah + * backend/fujitsu.[ch]: backend v100: + - store more Request Sense data in scanner struct + - clear Request Sense data at start of every do_cmd() call + - track per-side ILI and global EOM flags + - set per-side EOF flag if ILI and EOM are set + +2010-06-09 m. allan noah + * backend/Makefile.{am|in}: add genesys_gl847 files + * po/Makefile.{am|in}: add LINGUAS POTFILES to EXTRA_DIST + * Makefile.am: add Changelog-1.0.21 to EXTRA_DIST + +2010-06-08 Nicolas Martin + * backend/pixma_imageclass.c: + pixma: set #1 of modifiations for ImageClass MF65xx series. + +2010-06-07 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c: + LiDE 100 motor fine tuning + +2010-06-03 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c + doc/descriptions/genesys.desc: + final bits for full LiDE 100 support + +2010-05-31 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c: + shading calibration is working and led calibration has been tuned + +2010-05-30 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c + backend/genesys_low.h: Canon LiDE 100 working without shading + calibration which is the final bit to fix + +2010-05-24 m. allan noah + * backend/avision.c, doc/descriptions/avision.desc: add Fujitsu fi-5015C + +2010-05-20 Stphane Voltz + * backend/genesys.c backend/genesys_devices.c backend/genesys_gl847.c: + make led and shading calibration work for LiDE 100 + +2010-05-16 Chris Bagwell + * README.freebsd: Add suggested hint that configure needs + to be told location of external libraries installed through + Ports. + +2010-05-16 Stphane Voltz + * backend/genesys.[ch] backend/genesys_devices.c + backend/genesys.conf.in backend/genesys_gl847.[ch] + backend/Makefile.in: start of LiDE 100 and LIDE 200 support + +2010-05-16 Stphane Voltz + * sanei/sanei_usb.c include/sane/sanei_usb.h: add a sanei_usb_reset() + function. + +2010-05-15 m. allan noah + * backend/fujitsu.c: backend v99 + - sense_handler(): collect rs_info for any ILI, not just EOM + - do_usb_cmd(): use rs_info whenever set, not just EOF + - read_from_*(): better handling of EOF from lower level functions + - sane_read(): improve duplexing logic + +2010-05-03 Pierre Willenbrock + * Change status of CanoScan LiDE 40 from untested to good + +2010-04-27 m. allan noah + * po/Makefile.in: include POTFILES and LINGUAS in DIST + * doc/releases.txt: more git notes + +2010-04-25 Julien Blache + * tools/sane-backends.pc.in: syntax fixes. + +2010-04-25 m. allan noah + * ChangeLog-1.0.21, Makefile.in: ChangeLog for 1.0.21 release + * configure, configure.in: version 1.0.22git + * doc/descriptions/kodak.desc, doc/descriptions/kvs1025.desc, + doc/descriptions/p5.desc: remove :new tag + * doc/releases.txt: minor updates due to new git hooks + +Older entries can be found in ChangeLog-1.0.21. diff -Nru sane-backends-1.0.22/INSTALL sane-backends-1.0.23/INSTALL --- sane-backends-1.0.22/INSTALL 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/INSTALL 2011-11-21 20:17:48.000000000 +0000 @@ -2,18 +2,24 @@ ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, -2006, 2007 Free Software Foundation, Inc. +2006, 2007, 2008, 2009 Free Software Foundation, Inc. -This file is free documentation; the Free Software Foundation gives -unlimited permission to copy, distribute and modify it. + Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. This file is offered as-is, +without warranty of any kind. Basic Installation ================== -Briefly, the shell commands `./configure; make; make install' should + Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for -instructions specific to this package. +instructions specific to this package. Some packages provide this +`INSTALL' file but do not implement all of the features documented +below. The lack of an optional feature in a given package is not +necessarily a bug. More recommendations for GNU packages can be found +in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses @@ -42,7 +48,7 @@ you want to change it or regenerate `configure' using a newer version of `autoconf'. -The simplest way to compile this package is: + The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. @@ -53,12 +59,22 @@ 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with - the package. + the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and - documentation. + documentation. When installing into a prefix owned by root, it is + recommended that the package be configured and built as a regular + user, and only the `make install' phase executed with root + privileges. + + 5. Optionally, type `make installcheck' to repeat any self-tests, but + this time using the binaries in their final installed location. + This target does not install anything. Running this target as a + regular user, particularly if the prior `make install' required + root privileges, verifies that the installation completed + correctly. - 5. You can remove the program binaries and object files from the + 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is @@ -67,15 +83,22 @@ all sorts of other programs in order to regenerate files that came with the distribution. - 6. Often, you can also type `make uninstall' to remove the installed - files again. + 7. Often, you can also type `make uninstall' to remove the installed + files again. In practice, not all packages have tested that + uninstallation works correctly, even though it is required by the + GNU Coding Standards. + + 8. Some packages, particularly those that use Automake, provide `make + distcheck', which can by used by developers to test that all other + targets like `make install' and `make uninstall' work correctly. + This target is generally not run by end users. Compilers and Options ===================== -Some systems require unusual options for compilation or linking that the -`configure' script does not know about. Run `./configure --help' for -details on some of the pertinent environment variables. + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here @@ -88,25 +111,41 @@ Compiling For Multiple Architectures ==================================== -You can compile the package for more than one kind of computer at the + You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. +source code in the directory that `configure' is in and in `..'. This +is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. + On MacOS X 10.5 and later systems, you can create libraries and +executables that work on multiple system types--known as "fat" or +"universal" binaries--by specifying multiple `-arch' options to the +compiler but only a single `-arch' option to the preprocessor. Like +this: + + ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ + CPP="gcc -E" CXXCPP="g++ -E" + + This is not guaranteed to produce working output in all cases, you +may have to build one architecture at a time and combine the results +using the `lipo' tool if you have problems. + Installation Names ================== -By default, `make install' installs the package's commands under + By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX'. +`configure' the option `--prefix=PREFIX', where PREFIX must be an +absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you @@ -117,16 +156,47 @@ In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. +you can set and what kinds of files go in them. In general, the +default for these options is expressed in terms of `${prefix}', so that +specifying just `--prefix' will affect all of the other directory +specifications that were not explicitly provided. + + The most portable way to affect installation locations is to pass the +correct locations to `configure'; however, many packages provide one or +both of the following shortcuts of passing variable assignments to the +`make install' command line to change installation locations without +having to reconfigure or recompile. + + The first method involves providing an override variable for each +affected directory. For example, `make install +prefix=/alternate/directory' will choose an alternate location for all +directory configuration variables that were expressed in terms of +`${prefix}'. Any directories that were specified during `configure', +but not in terms of `${prefix}', must each be overridden at install +time for the entire installation to be relocated. The approach of +makefile variable overrides for each directory variable is required by +the GNU Coding Standards, and ideally causes no recompilation. +However, some platforms have known limitations with the semantics of +shared libraries that end up requiring recompilation when using this +method, particularly noticeable in packages that use GNU Libtool. + + The second method involves providing the `DESTDIR' variable. For +example, `make install DESTDIR=/alternate/directory' will prepend +`/alternate/directory' before all installation names. The approach of +`DESTDIR' overrides is not required by the GNU Coding Standards, and +does not work on platforms that have drive letters. On the other hand, +it does better at avoiding recompilation issues, and works well even +when some directory options were not specified in terms of `${prefix}' +at `configure' time. + +Optional Features +================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. -Optional Features -================= - -Some packages pay attention to `--enable-FEATURE' options to + Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The @@ -138,14 +208,53 @@ you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. + Some packages offer the ability to configure how verbose the +execution of `make' will be. For these packages, running `./configure +--enable-silent-rules' sets the default to minimal output, which can be +overridden with `make V=1'; while running `./configure +--disable-silent-rules' sets the default to verbose, which can be +overridden with `make V=0'. + +Particular systems +================== + + On HP-UX, the default C compiler is not ANSI C compatible. If GNU +CC is not installed, it is recommended to use the following options in +order to use an ANSI C compiler: + + ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" + +and if that doesn't work, install pre-built binaries of GCC for HP-UX. + + On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot +parse its `' header file. The option `-nodtk' can be used as +a workaround. If GNU CC is not installed, it is therefore recommended +to try + + ./configure CC="cc" + +and if that doesn't work, try + + ./configure CC="cc -nodtk" + + On Solaris, don't put `/usr/ucb' early in your `PATH'. This +directory contains several dysfunctional programs; working variants of +these programs are available in `/usr/bin'. So, if you need `/usr/ucb' +in your `PATH', put it _after_ `/usr/bin'. + + On Haiku, software installed for all users goes in `/boot/common', +not `/usr/local'. It is recommended to use the following options: + + ./configure --prefix=/boot/common + Specifying the System Type ========================== -There may be some features `configure' cannot figure out automatically, -but needs to determine by the type of machine the package will run on. -Usually, assuming the package is built to be run on the _same_ -architectures, `configure' can figure that out, but if it prints a -message saying it cannot guess the machine type, give it the + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: @@ -153,7 +262,8 @@ where SYSTEM can have one of these forms: - OS KERNEL-OS + OS + KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't @@ -171,9 +281,9 @@ Sharing Defaults ================ -If you want to set default values for `configure' scripts to share, you -can create a site shell script called `config.site' that gives default -values for variables like `CC', `cache_file', and `prefix'. + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. @@ -182,7 +292,7 @@ Defining Variables ================== -Variables not defined in a site shell script can be set in the + Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set @@ -201,11 +311,19 @@ `configure' Invocation ====================== -`configure' recognizes the following options to control how it operates. + `configure' recognizes the following options to control how it +operates. `--help' `-h' - Print a summary of the options to `configure', and exit. + Print a summary of all of the options to `configure', and exit. + +`--help=short' +`--help=recursive' + Print a summary of the options unique to this package's + `configure', and exit. The `short' variant lists options used + only in the top level, while the `recursive' variant lists options + also present in any nested packages. `--version' `-V' @@ -232,6 +350,16 @@ Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. +`--prefix=DIR' + Use DIR as the installation prefix. *note Installation Names:: + for more details, including other options available for fine-tuning + the installation locations. + +`--no-create' +`-n' + Run the configure checks, but stop before creating any output + files. + `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. diff -Nru sane-backends-1.0.22/Makefile.am sane-backends-1.0.23/Makefile.am --- sane-backends-1.0.22/Makefile.am 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/Makefile.am 2011-11-21 20:17:48.000000000 +0000 @@ -17,7 +17,7 @@ ChangeLog-1.0.7 ChangeLog-1.0.8 ChangeLog-1.0.9 ChangeLog-1.0.10 \ ChangeLog-1.0.12 ChangeLog-1.0.13 ChangeLog-1.0.14 ChangeLog-1.0.15 \ ChangeLog-1.0.16 ChangeLog-1.0.17 ChangeLog-1.0.18 ChangeLog-1.0.19 \ - ChangeLog-1.0.20 ChangeLog-1.0.21 \ + ChangeLog-1.0.20 ChangeLog-1.0.21 ChangeLog-1.0.22 \ $(PACKAGE).lsm # diff -Nru sane-backends-1.0.22/Makefile.in sane-backends-1.0.23/Makefile.in --- sane-backends-1.0.22/Makefile.in 2011-01-30 18:50:56.000000000 +0000 +++ sane-backends-1.0.23/Makefile.in 2012-08-15 01:49:39.000000000 +0000 @@ -138,6 +138,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -194,6 +195,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -243,6 +245,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -306,7 +309,7 @@ ChangeLog-1.0.7 ChangeLog-1.0.8 ChangeLog-1.0.9 ChangeLog-1.0.10 \ ChangeLog-1.0.12 ChangeLog-1.0.13 ChangeLog-1.0.14 ChangeLog-1.0.15 \ ChangeLog-1.0.16 ChangeLog-1.0.17 ChangeLog-1.0.18 ChangeLog-1.0.19 \ - ChangeLog-1.0.20 ChangeLog-1.0.21 \ + ChangeLog-1.0.20 ChangeLog-1.0.21 ChangeLog-1.0.22 \ $(PACKAGE).lsm diff -Nru sane-backends-1.0.22/NEWS sane-backends-1.0.23/NEWS --- sane-backends-1.0.22/NEWS 2011-02-14 01:27:21.000000000 +0000 +++ sane-backends-1.0.23/NEWS 2012-08-19 21:03:01.000000000 +0000 @@ -1,4 +1,18 @@ -*-Mode: outline-*- +New with 1.0.23, released 2012-08-19: + +* New backends: kvs40xx (Panasonic KV-S40xx), + kodakaio (Kodak AiO ESP and Hero) +* Significant enhancements to several backends. +* 30 new scanner models supported. +* V4L support improvements. +* Improvements for builds on multiple platforms. +* Improved udev rules. +* Updated software deskew algorithm. +* Documentation updates. +* Bugfixes. + + New with 1.0.22, released 2011-02-13: * New backends: kvs20xx (Panasonic KV-S20xx), @@ -463,7 +477,7 @@ Supports "Scan 300/GS" and may work with "Scan 300/S" but the latter is untested. -* New Agfa Focus backend (by Karl Anders ygard) +* New Agfa Focus backend (by Karl Anders Øygard) Supports: o AGFA Focus GS (6 bit gray scale) (untested) o AGFA Focus Lineart (lineart) (untested) diff -Nru sane-backends-1.0.22/README sane-backends-1.0.23/README --- sane-backends-1.0.22/README 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/README 2011-11-21 20:17:48.000000000 +0000 @@ -45,7 +45,7 @@ configure. On some Linux distributions the header files are part of separate packages (e.g. usb.h in libusb-devel or libusb-dev). These must also be installed. - + - libusb (>=0.1.8): Strongly recommended if you use a USB scanner. Some backends won't work without libusb at all. @@ -87,18 +87,19 @@ Disable dynamic loading of backends (in the dll backend). configure normally turns on dynamic loading when it can find the appropriate header files and libraries - ( and -dl). + ( and -ldl). --enable-static Use static libraries (turned off by default). --enable-preload Preload backends into DLL backend. This is useful for debugging, - when dynamic loading is unavailable, or to reduce runtime linking - overheads. If dynamic loading or shared libraries are unavailable - or disabled, this option is turned on automatically. - - --enable-scsibuffersize=N + when dynamic loading is unavailable, to reduce runtime linking + overheads, or when you only want to distribute a single DLL with + all backends available. If dynamic loading or shared libraries are + unavailable or disabled, this option is turned on automatically. + + --enable-scsibuffersize=N Specify the buffer size of the buffer for SCSI commands. The default value is 131072 bytes (128 kb). This may be changed at runtime by setting the environment variable SANE_SG_BUFFERSIZE to the desired @@ -118,11 +119,23 @@ Means, that some backends will use a lockfile for allowing multiple access to one scanner. This is useful, i.e. one frontend is scanning the button status and another one will scan. The path to the lock - files is define by --localstatedir at the configure step and is + files is define by --localstatedir at the configure step and is $localstatedir/lock/sane. The default group is uucp and can be changed by using --with-group=newgroup. If you do not want any backend to use a lockfile, simply use --disable-locking. +To limit the backends that are compiled, set the variable BACKENDS to +the list of backends to compile. The following will limit compiling +to the epson2 and fujitsu backends: + + ./configure BACKENDS="epson2 fujitsu" + +To limit the backends that are preloaded into the DLL, set the variable +PRELOADABLE_BACKENDS. The following will limit compiling to the epson2 +and fujitsu backends but only preloads the epson2 backend: + + ./configure BACKENDS="epson2 futjisu" PRELOADABLE_BACKENDS="epson2" + In addition to these configuration options, there are some more SANE-specific options and many standard-options. To get a description of available options, invoke configure with option --help. diff -Nru sane-backends-1.0.22/README.linux sane-backends-1.0.23/README.linux --- sane-backends-1.0.22/README.linux 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/README.linux 2012-07-31 01:31:47.000000000 +0000 @@ -162,3 +162,136 @@ #elif defined(__ICC) && defined(HAVE_ASM_IO_H) # include #endif + +Installation +============ + +Get the latest SANE backend from git. + You can download daily git snapshot from here: + + http://www.sane-project.org/snapshots/. + + If you prefer to use git, you can fetch a read-only copy of the git tree with + this command: + + $ git clone git://git.debian.org/sane/sane-backends.git + +You need to install SANE backend on a terminal window from inside sane-backends + source folder. + +If you already are using a self compiled SANE backend and just fetched a new + copy of the git tree or if you patched some source files, there is no need to + follow the installation procedure again. You only need to make and install + libsane: + + $ make && sudo make install + +Read the file README and this file. + +Install missing development packages with your prefered package manager: + libusb-dev + +Search the location where your system installed libsane.so.1. + Each distribution uses different folders for the libraries. + + Here are some examples from 64 bit Ubuntu 10.04. For the installation process + you need to replace /usr/lib with the folder detected on your system. + + $ sudo find / -name libsane.so.1 + /usr/lib/libsane.so.1 + + /usr/lib is the folder we are looking for. + + Be careful on 64 bit systems, if you already installed 32 bit compatibility + libraries, e.g. the package ia32-libs: + + $ sudo find / -name libsane.so.1 + /usr/lib/libsane.so.1 + /usr/lib32/libsane.so.1 + + This response contains 2 folders: (1) /usr/lib32 is the location of the + 32 bit compatibility libraries. (2) /usr/lib is the folder we are looking + for. + + Be careful, if you already compiled and installed new SANE backend: + + $ sudo find / -name libsane.so.1 + /usr/lib/libsane.so.1 + /usr/local/lib/libsane.so.1 + /home/user/src/sane-backends/backend/.libs/libsane.so.1 + + This response contains 3 folders: (1) /usr/local/lib is the location of + installed new SANE backend. (2) /home/user/src/sane-backends/backend/.libs + is the location of compiled new SANE backend in the source tree. + (3) /usr/lib is the folder we are looking for. + +Decide where you want to install new libsane. + You can set symbolic links to new libsane. + I assume that new libsane version 1.0.23 will be installed to + /usr/local/lib and your system installed libsane.so.1 to /usr/lib. + + $ cd /usr/lib + $ sudo ln -sf /usr/local/lib/libsane.so.1.0.23 libsane.so.1 + $ sudo ln -sf /usr/local/lib/sane/libsane.la libsane.la + $ cd - + + Alternatively you can overwrite standard libsane. + Then you need to do some extra configuration for latest SANE backend: + + $ ./configure --libdir="/usr/lib" + +You also can replace the binaries, configuration, manuals, translations, etc. + of your distribution. For more information please read: + + $ ./configure --help + +Configure, make and install latest SANE backend. + + $ ./configure [with your options defined above] + $ make && sudo make install + +Use the scanner with normal user rights. + This only works if udev is installed. Please note that historically not all + of the distributions have used the same format for the udev rules file. + + Copy udev rules file: + + $ sudo cp tools/udev/libsane.rules /etc/udev/rules.d + + Reconnect your scanner to the USB bus to activate the new rules file. + + Your user must be a member of the group scanner. Please use the system tools + to check, if this group exists, if needed create this group and join this + group. After this you must logoff and login again. + +Test your scanner. + First you should check if new libsane is used. + + $ scanimage -V + scanimage (sane-backends) 1.0.23git; backend version 1.0.23 + + This example shows that backend and scanimage are version 1.0.23. + + $ /usr/bin/scanimage -V + scanimage (sane-backends) 1.0.20; backend version 1.0.23 + + This example shows that an old scanimage (1.0.20) uses the backend 1.0.23. + + If you want to use xsane, start xsane and check the used version with + CTRL - i. + + Now you can test if your scanner is recognized with normal user rights. + + $ scanimage -L + + If your scanner isn't recognized here, try this: + + $ sudo scanimage -L + + If this works, your user doesn't have the rights to access the scanner. + + However, please check and redo the installation steps described above. + If this doesn't help, you can ask the mailing list + for further support. + +Have a lot of fun with the latest SANE backend. diff -Nru sane-backends-1.0.22/README.windows sane-backends-1.0.23/README.windows --- sane-backends-1.0.22/README.windows 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/README.windows 2011-11-21 20:17:48.000000000 +0000 @@ -1,13 +1,16 @@ -SANE on Cygwin/Win32 +SANE on Windows Prerequisites ============= -To be able to compile sane-backends, you need to have Cygwin installed, -with at least the following package(s): - - gcc +To be able to compile sane-backends, you need to have either Cygwin +or Mingw compilers and a suitable POSIX compatible environment. -You can get Cygwin at http://sources.redhat.com/cygwin/ +You can get the Cygwin POSIX compatible environment for Windows +Windows and the Cygwin gcc compiler at http://www.cygwin.com + +You can get the MSYS POSIX compatible environment for Windows and the +MinGW gcc compiler at http://www.mingw.org/wiki/MSYS The scanner must be detected by Windows and not be disabled. Check with the hardware manager. @@ -16,44 +19,47 @@ Building ======== -See general README for build basics. The autoconf script (configure) checks -for C++ compilers and misdetects CC (=cc = gcc) a a c++ compiler because of -the case-insensitive filesystem. If that happens, one work-around will be to -install a real C++ compiler. +See general README for build basics. If a given backend fails to +compile, you can use the BACKENDS variable to limit compilation +to backends your interested in: + ./configure BACKENDS=epson2 -Scanning -======== + +Configuring +=========== If you have more than one scanner, you should do the following: - run sane-find-scanner to get the device name of the scanner. The - name is something like h0b0t6l0, meaning hba 0, bus 0, scsi id 6 and - lun 0. + name for scsi devices is something like h0b0t6l0, meaning hba 0, bus 0, + scsi id 6 and lun 0. - edit the config file for the backend - (/usr/local/etc/sane.d/xxxx.conf) and add the scanner device name on + (/path/to/sane/etc/sane.d/xxxx.conf) and add the scanner device name on an empty line. -Run "scanimage > out.pnm" to get a scan. + - Set environment variable SANE_CONFIG_DIR to point to the directory + where the config files are located. -xscanimage and XSane also work. xscanimage compiles and runs out of -the box. XSane 0.92 needs a couple build fixes. +Run "scanimage > out.pnm" to get a scan. +xscanimage ans XSane have been reported to compile and run in the past +under Cygwin. Notes ===== -- Only SCSI and USB (with libusb-win32) scanners may work. No - FireWire/Parallel. The Cygwin libusb port is at - http://sourceforge.net/projects/libusb-win32. +- Only SCSI, USB (with libusb-win32), and network scanners may work. No + FireWire/Parallel. The Cygwin libusb port can be installed + with Cygwin setup.exe or can be compiled manually under cygwin + or mingw using the libusb-win32 port: + http://sourceforge.net/apps/trac/libusb-win32/wiki -- Tested on Windows 2000 only. Should work on Windows NT/XP too; - may or may not work on Windows 95/98/ME. +- Tested on Windows XP, 7, and using Wine on Linux. - Some scanners' backend may not work because of requirement not - supported by Cygwin. + supported by Cygwin or MinGW. -2004/02/07 -Frank Zago. +2011/10/08 diff -Nru sane-backends-1.0.22/acinclude.m4 sane-backends-1.0.23/acinclude.m4 --- sane-backends-1.0.22/acinclude.m4 2011-01-19 02:10:37.000000000 +0000 +++ sane-backends-1.0.23/acinclude.m4 2011-11-21 20:17:48.000000000 +0000 @@ -136,7 +136,9 @@ [ dnl Checks for dll libraries: dl DL_LIBS="" - if test "${enable_dynamic}" != "no"; then + if test "${enable_dynamic}" = "auto"; then + # default to disabled unless library found. + enable_dynamic=no # dlopen AC_CHECK_HEADERS(dlfcn.h, [AC_CHECK_LIB(dl, dlopen, DL_LIBS=-ldl) @@ -640,7 +642,7 @@ fi ;; - mustek_usb2) + mustek_usb2|kvs40xx) if test "${have_pthread}" != "yes"; then echo "*** $be backend requires pthread library - $DISABLE_MSG" backend_supported="no" diff -Nru sane-backends-1.0.22/aclocal.m4 sane-backends-1.0.23/aclocal.m4 --- sane-backends-1.0.22/aclocal.m4 2011-02-13 23:34:53.000000000 +0000 +++ sane-backends-1.0.23/aclocal.m4 2012-08-19 20:44:47.000000000 +0000 @@ -13,8 +13,8 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.66],, -[m4_warning([this file was generated for autoconf 2.66. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, +[m4_warning([this file was generated for autoconf 2.68. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) @@ -516,17 +516,17 @@ # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. -# Generated from ltversion.in. +# @configure_input@ -# serial 3175 ltversion.m4 +# serial 3293 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.2.10]) -m4_define([LT_PACKAGE_REVISION], [1.3175]) +m4_define([LT_PACKAGE_VERSION], [2.4]) +m4_define([LT_PACKAGE_REVISION], [1.3293]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.10' -macro_revision='1.3175' +[macro_version='2.4' +macro_revision='1.3293' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) @@ -658,7 +658,8 @@ # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) -m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) @@ -704,7 +705,8 @@ pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], - [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried @@ -752,9 +754,9 @@ AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then - $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else - $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD @@ -767,7 +769,7 @@ Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. -_PKG_TEXT]) +_PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) @@ -778,7 +780,7 @@ _PKG_TEXT -To get pkg-config, see .]) +To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS diff -Nru sane-backends-1.0.22/backend/Makefile.am sane-backends-1.0.23/backend/Makefile.am --- sane-backends-1.0.22/backend/Makefile.am 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/Makefile.am 2012-07-25 00:02:39.000000000 +0000 @@ -85,7 +85,7 @@ dell1600n_net.conf dmc.conf epjitsu.conf epson2.conf \ epson.conf fujitsu.conf genesys.conf gphoto2.conf \ gt68xx.conf hp3900.conf hp4200.conf hp5400.conf \ - hp.conf hpsj5s.conf hs2p.conf ibm.conf kodak.conf \ + hp.conf hpsj5s.conf hs2p.conf ibm.conf kodak.conf kodakaio.conf\ leo.conf lexmark.conf ma1509.conf magicolor.conf \ matsushita.conf microtek2.conf microtek.conf mustek.conf \ mustek_pp.conf mustek_usb.conf nec.conf net.conf \ @@ -139,7 +139,7 @@ done install-lockpath: - $(mkinstalldirs) -m 775 -g $(LOCKPATH_GROUP) $(DESTDIR)$(locksanedir) + $(mkinstalldirs) -m 775 $(DESTDIR)$(locksanedir) uninstall-hook: rm -rf $(DESTDIR)$(libdir)/sane $(DESTDIR)$(configdir) $(DESTDIR)$(locksanedir) @@ -161,7 +161,7 @@ # form of lib${backend}.la to match what configure will list to # build. # Occasionally, this approach will have name conflicts with external -# libraries that need to be linked in. See libgphoto2_i.la for +# libraries that need to be linked in. See libgphoto2_i.la for # example of working around that issue. be_convenience_libs = libabaton.la libagfafocus.la \ libapple.la libartec.la libartec_eplus48u.la \ @@ -170,13 +170,13 @@ libcanon_pp.la libcardscan.la libcoolscan.la \ libcoolscan2.la libcoolscan3.la libdc25.la \ libdc210.la libdc240.la libdell1600n_net.la \ - libdmc.la libdll.la libepjitsu.la libepson.la \ + libdmc.la libdll.la libdll_preload.la libepjitsu.la libepson.la \ libepson2.la libfujitsu.la libgenesys.la \ libgphoto2_i.la libgt68xx.la libhp.la \ libhp3500.la libhp3900.la libhp4200.la \ libhp5400.la libhp5590.la libhpljm1005.la \ - libhpsj5s.la libhs2p.la libibm.la libkodak.la \ - libkvs1025.la libkvs20xx.la \ + libhpsj5s.la libhs2p.la libibm.la libkodak.la libkodakaio.la\ + libkvs1025.la libkvs20xx.la libkvs40xx.la \ libleo.la liblexmark.la libma1509.la libmagicolor.la \ libmatsushita.la libmicrotek.la libmicrotek2.la \ libmustek.la libmustek_pp.la libmustek_usb.la \ @@ -208,8 +208,9 @@ libsane-gphoto2.la libsane-gt68xx.la libsane-hp.la \ libsane-hp3500.la libsane-hp3900.la libsane-hp4200.la \ libsane-hp5400.la libsane-hp5590.la libsane-hpljm1005.la \ - libsane-hpsj5s.la libsane-hs2p.la libsane-ibm.la libsane-kodak.la \ - libsane-kvs1025.la libsane-kvs20xx.la libsane-leo.la \ + libsane-hpsj5s.la libsane-hs2p.la libsane-ibm.la libsane-kodak.la libsane-kodakaio.la\ + libsane-kvs1025.la libsane-kvs20xx.la libsane-kvs40xx.la \ + libsane-leo.la \ libsane-lexmark.la libsane-ma1509.la libsane-magicolor.la \ libsane-matsushita.la libsane-microtek.la libsane-microtek2.la \ libsane-mustek.la libsane-mustek_pp.la libsane-mustek_usb.la \ @@ -479,7 +480,7 @@ libsane_fujitsu_la_LIBADD = $(COMMON_LIBS) libfujitsu.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_magic.lo $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) EXTRA_DIST += fujitsu.conf.in -libgenesys_la_SOURCES = genesys.c genesys.h genesys_gl646.c genesys_gl646.h genesys_gl841.c genesys_gl843.c genesys_gl843.h genesys_gl847.c genesys_gl847.h genesys_gl124.c genesys_gl124.h genesys_low.c genesys_low.h +libgenesys_la_SOURCES = genesys.c genesys.h genesys_gl646.c genesys_gl646.h genesys_gl841.c genesys_gl841.h genesys_gl843.c genesys_gl843.h genesys_gl847.c genesys_gl847.h genesys_gl124.c genesys_gl124.h genesys_low.c genesys_low.h libgenesys_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=genesys nodist_libsane_genesys_la_SOURCES = genesys-s.c @@ -620,6 +621,15 @@ libsane_kodak_la_LIBADD = $(COMMON_LIBS) libkodak.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_scsi.lo $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) EXTRA_DIST += kodak.conf.in +libkodakaio_la_SOURCES = kodakaio.c kodakaio.h +libkodakaio_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kodakaio + +nodist_libsane_kodakaio_la_SOURCES = kodakaio-s.c +libsane_kodakaio_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kodakaio +libsane_kodakaio_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) +libsane_kodakaio_la_LIBADD = $(COMMON_LIBS) libkodakaio.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_tcp.lo ../sanei/sanei_udp.lo $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB) $(RESMGR_LIBS) +EXTRA_DIST += kodakaio.conf.in + libkvs1025_la_SOURCES = kvs1025.c kvs1025_low.c kvs1025_opt.c kvs1025_usb.c \ kvs1025.h kvs1025_low.h kvs1025_usb.h kvs1025_cmds.h libkvs1025_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs1025 @@ -627,7 +637,7 @@ nodist_libsane_kvs1025_la_SOURCES = kvs1025-s.c libsane_kvs1025_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs1025 libsane_kvs1025_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) -libsane_kvs1025_la_LIBADD = $(COMMON_LIBS) libkvs1025.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(USB_LIBS) $(RESMGR_LIBS) +libsane_kvs1025_la_LIBADD = $(COMMON_LIBS) libkvs1025.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_magic.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS) libkvs20xx_la_SOURCES = kvs20xx.c kvs20xx_cmd.c kvs20xx_opt.c \ kvs20xx_cmd.h kvs20xx.h @@ -638,6 +648,15 @@ libsane_kvs20xx_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) libsane_kvs20xx_la_LIBADD = $(COMMON_LIBS) libkvs20xx.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) +libkvs40xx_la_SOURCES = kvs40xx.c kvs40xx_cmd.c kvs40xx_opt.c \ + kvs40xx.h +libkvs40xx_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs40xx + +nodist_libsane_kvs40xx_la_SOURCES = kvs40xx-s.c +libsane_kvs40xx_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs40xx +libsane_kvs40xx_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) +libsane_kvs40xx_la_LIBADD = $(COMMON_LIBS) libkvs40xx.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo $(SCSI_LIBS) $(USB_LIBS) $(PTHREAD_LIBS) $(RESMGR_LIBS) + libleo_la_SOURCES = leo.c leo.h libleo_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=leo @@ -800,7 +819,7 @@ libsane_pint_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) libsane_pint_la_LIBADD = $(COMMON_LIBS) libpint.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo -libpixma_la_SOURCES = pixma.c pixma.h pixma_io_sanei.c pixma_io.h pixma_common.c pixma_common.h pixma_mp150.c pixma_mp730.c pixma_mp750.c pixma_imageclass.c pixma_bjnp.c pixma_bjnp.h pixma_bjnp_private.h pixma_rename.h +libpixma_la_SOURCES = pixma.c pixma.h pixma_io_sanei.c pixma_io.h pixma_common.c pixma_common.h pixma_mp150.c pixma_mp730.c pixma_mp750.c pixma_mp810.c pixma_imageclass.c pixma_bjnp.c pixma_bjnp.h pixma_bjnp_private.h pixma_rename.h libpixma_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pixma nodist_libsane_pixma_la_SOURCES = pixma-s.c @@ -1064,10 +1083,12 @@ libsane_xerox_mfp_la_LIBADD = $(COMMON_LIBS) libxerox_mfp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_tcp.lo $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(RESMGR_LIBS) EXTRA_DIST += xerox_mfp.conf.in +libdll_preload_la_SOURCES = dll.c +libdll_preload_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll -DENABLE_PRELOAD libdll_la_SOURCES = dll.c +libdll_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll BUILT_SOURCES = dll-preload.h CLEANFILES += dll-preload.h -libdll_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll nodist_libsane_dll_la_SOURCES = dll-s.c libsane_dll_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll @@ -1099,7 +1120,7 @@ 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) $(RESMGR_LIBS) +libsane_la_LIBADD = $(COMMON_LIBS) @PRELOADABLE_BACKENDS_ENABLED@ libdll_preload.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_magic.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) $(RESMGR_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 = $(COMMON_LIBS) @PRELOADABLE_BACKENDS_ENABLED@ libdll_preload.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_magic.lo @SANEI_SANEI_JPEG_LO@ diff -Nru sane-backends-1.0.22/backend/Makefile.in sane-backends-1.0.23/backend/Makefile.in --- sane-backends-1.0.22/backend/Makefile.in 2011-01-30 18:50:55.000000000 +0000 +++ sane-backends-1.0.23/backend/Makefile.in 2012-08-15 01:49:37.000000000 +0000 @@ -134,6 +134,9 @@ libdll_la_LIBADD = am_libdll_la_OBJECTS = libdll_la-dll.lo libdll_la_OBJECTS = $(am_libdll_la_OBJECTS) +libdll_preload_la_LIBADD = +am_libdll_preload_la_OBJECTS = libdll_preload_la-dll.lo +libdll_preload_la_OBJECTS = $(am_libdll_preload_la_OBJECTS) libdmc_la_LIBADD = am_libdmc_la_OBJECTS = libdmc_la-dmc.lo libdmc_la_OBJECTS = $(am_libdmc_la_OBJECTS) @@ -201,6 +204,9 @@ libkodak_la_LIBADD = am_libkodak_la_OBJECTS = libkodak_la-kodak.lo libkodak_la_OBJECTS = $(am_libkodak_la_OBJECTS) +libkodakaio_la_LIBADD = +am_libkodakaio_la_OBJECTS = libkodakaio_la-kodakaio.lo +libkodakaio_la_OBJECTS = $(am_libkodakaio_la_OBJECTS) libkvs1025_la_LIBADD = am_libkvs1025_la_OBJECTS = libkvs1025_la-kvs1025.lo \ libkvs1025_la-kvs1025_low.lo libkvs1025_la-kvs1025_opt.lo \ @@ -210,6 +216,10 @@ am_libkvs20xx_la_OBJECTS = libkvs20xx_la-kvs20xx.lo \ libkvs20xx_la-kvs20xx_cmd.lo libkvs20xx_la-kvs20xx_opt.lo libkvs20xx_la_OBJECTS = $(am_libkvs20xx_la_OBJECTS) +libkvs40xx_la_LIBADD = +am_libkvs40xx_la_OBJECTS = libkvs40xx_la-kvs40xx.lo \ + libkvs40xx_la-kvs40xx_cmd.lo libkvs40xx_la-kvs40xx_opt.lo +libkvs40xx_la_OBJECTS = $(am_libkvs40xx_la_OBJECTS) libleo_la_LIBADD = am_libleo_la_OBJECTS = libleo_la-leo.lo libleo_la_OBJECTS = $(am_libleo_la_OBJECTS) @@ -266,8 +276,8 @@ am_libpixma_la_OBJECTS = libpixma_la-pixma.lo \ libpixma_la-pixma_io_sanei.lo libpixma_la-pixma_common.lo \ libpixma_la-pixma_mp150.lo libpixma_la-pixma_mp730.lo \ - libpixma_la-pixma_mp750.lo libpixma_la-pixma_imageclass.lo \ - libpixma_la-pixma_bjnp.lo + libpixma_la-pixma_mp750.lo libpixma_la-pixma_mp810.lo \ + libpixma_la-pixma_imageclass.lo libpixma_la-pixma_bjnp.lo libpixma_la_OBJECTS = $(am_libpixma_la_OBJECTS) libplustek_la_LIBADD = am_libplustek_la_OBJECTS = libplustek_la-plustek.lo @@ -720,10 +730,24 @@ libsane_kodak_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libsane_kodak_la_LDFLAGS) $(LDFLAGS) -o $@ +libsane_kodakaio_la_DEPENDENCIES = $(COMMON_LIBS) libkodakaio.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_tcp.lo ../sanei/sanei_udp.lo \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +nodist_libsane_kodakaio_la_OBJECTS = \ + libsane_kodakaio_la-kodakaio-s.lo +libsane_kodakaio_la_OBJECTS = $(nodist_libsane_kodakaio_la_OBJECTS) +libsane_kodakaio_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libsane_kodakaio_la_LDFLAGS) $(LDFLAGS) -o $@ libsane_kvs1025_la_DEPENDENCIES = $(COMMON_LIBS) libkvs1025.la \ ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo \ ../sanei/sanei_config.lo sane_strstatus.lo \ - ../sanei/sanei_usb.lo $(am__DEPENDENCIES_1) \ + ../sanei/sanei_usb.lo ../sanei/sanei_magic.lo \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) nodist_libsane_kvs1025_la_OBJECTS = libsane_kvs1025_la-kvs1025-s.lo libsane_kvs1025_la_OBJECTS = $(nodist_libsane_kvs1025_la_OBJECTS) @@ -741,6 +765,17 @@ libsane_kvs20xx_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libsane_kvs20xx_la_LDFLAGS) $(LDFLAGS) -o $@ +libsane_kvs40xx_la_DEPENDENCIES = $(COMMON_LIBS) libkvs40xx.la \ + ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo \ + ../sanei/sanei_config.lo sane_strstatus.lo \ + ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +nodist_libsane_kvs40xx_la_OBJECTS = libsane_kvs40xx_la-kvs40xx-s.lo +libsane_kvs40xx_la_OBJECTS = $(nodist_libsane_kvs40xx_la_OBJECTS) +libsane_kvs40xx_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libsane_kvs40xx_la_LDFLAGS) $(LDFLAGS) -o $@ libsane_leo_la_DEPENDENCIES = $(COMMON_LIBS) libleo.la \ ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo \ ../sanei/sanei_config.lo ../sanei/sanei_config2.lo \ @@ -1303,25 +1338,27 @@ $(libcoolscan2_la_SOURCES) $(libcoolscan3_la_SOURCES) \ $(libdc210_la_SOURCES) $(libdc240_la_SOURCES) \ $(libdc25_la_SOURCES) $(libdell1600n_net_la_SOURCES) \ - $(libdll_la_SOURCES) $(libdmc_la_SOURCES) \ - $(libepjitsu_la_SOURCES) $(libepson_la_SOURCES) \ - $(libepson2_la_SOURCES) $(libfujitsu_la_SOURCES) \ - $(libgenesys_la_SOURCES) $(libgphoto2_i_la_SOURCES) \ - $(libgt68xx_la_SOURCES) $(libhp_la_SOURCES) \ - $(libhp3500_la_SOURCES) $(libhp3900_la_SOURCES) \ - $(libhp4200_la_SOURCES) $(libhp5400_la_SOURCES) \ - $(libhp5590_la_SOURCES) $(libhpljm1005_la_SOURCES) \ - $(libhpsj5s_la_SOURCES) $(libhs2p_la_SOURCES) \ - $(libibm_la_SOURCES) $(libkodak_la_SOURCES) \ + $(libdll_la_SOURCES) $(libdll_preload_la_SOURCES) \ + $(libdmc_la_SOURCES) $(libepjitsu_la_SOURCES) \ + $(libepson_la_SOURCES) $(libepson2_la_SOURCES) \ + $(libfujitsu_la_SOURCES) $(libgenesys_la_SOURCES) \ + $(libgphoto2_i_la_SOURCES) $(libgt68xx_la_SOURCES) \ + $(libhp_la_SOURCES) $(libhp3500_la_SOURCES) \ + $(libhp3900_la_SOURCES) $(libhp4200_la_SOURCES) \ + $(libhp5400_la_SOURCES) $(libhp5590_la_SOURCES) \ + $(libhpljm1005_la_SOURCES) $(libhpsj5s_la_SOURCES) \ + $(libhs2p_la_SOURCES) $(libibm_la_SOURCES) \ + $(libkodak_la_SOURCES) $(libkodakaio_la_SOURCES) \ $(libkvs1025_la_SOURCES) $(libkvs20xx_la_SOURCES) \ - $(libleo_la_SOURCES) $(liblexmark_la_SOURCES) \ - $(libma1509_la_SOURCES) $(libmagicolor_la_SOURCES) \ - $(libmatsushita_la_SOURCES) $(libmicrotek_la_SOURCES) \ - $(libmicrotek2_la_SOURCES) $(libmustek_la_SOURCES) \ - $(libmustek_pp_la_SOURCES) $(libmustek_usb_la_SOURCES) \ - $(libmustek_usb2_la_SOURCES) $(libnec_la_SOURCES) \ - $(libnet_la_SOURCES) $(libniash_la_SOURCES) \ - $(libp5_la_SOURCES) $(libpie_la_SOURCES) $(libpint_la_SOURCES) \ + $(libkvs40xx_la_SOURCES) $(libleo_la_SOURCES) \ + $(liblexmark_la_SOURCES) $(libma1509_la_SOURCES) \ + $(libmagicolor_la_SOURCES) $(libmatsushita_la_SOURCES) \ + $(libmicrotek_la_SOURCES) $(libmicrotek2_la_SOURCES) \ + $(libmustek_la_SOURCES) $(libmustek_pp_la_SOURCES) \ + $(libmustek_usb_la_SOURCES) $(libmustek_usb2_la_SOURCES) \ + $(libnec_la_SOURCES) $(libnet_la_SOURCES) \ + $(libniash_la_SOURCES) $(libp5_la_SOURCES) \ + $(libpie_la_SOURCES) $(libpint_la_SOURCES) \ $(libpixma_la_SOURCES) $(libplustek_la_SOURCES) \ $(libplustek_pp_la_SOURCES) $(libpnm_la_SOURCES) \ $(libqcam_la_SOURCES) $(libricoh_la_SOURCES) \ @@ -1366,8 +1403,10 @@ $(nodist_libsane_hs2p_la_SOURCES) \ $(nodist_libsane_ibm_la_SOURCES) \ $(nodist_libsane_kodak_la_SOURCES) \ + $(nodist_libsane_kodakaio_la_SOURCES) \ $(nodist_libsane_kvs1025_la_SOURCES) \ $(nodist_libsane_kvs20xx_la_SOURCES) \ + $(nodist_libsane_kvs40xx_la_SOURCES) \ $(nodist_libsane_leo_la_SOURCES) \ $(nodist_libsane_lexmark_la_SOURCES) \ $(nodist_libsane_ma1509_la_SOURCES) \ @@ -1432,25 +1471,27 @@ $(libcoolscan2_la_SOURCES) $(libcoolscan3_la_SOURCES) \ $(libdc210_la_SOURCES) $(libdc240_la_SOURCES) \ $(libdc25_la_SOURCES) $(libdell1600n_net_la_SOURCES) \ - $(libdll_la_SOURCES) $(libdmc_la_SOURCES) \ - $(libepjitsu_la_SOURCES) $(libepson_la_SOURCES) \ - $(libepson2_la_SOURCES) $(libfujitsu_la_SOURCES) \ - $(libgenesys_la_SOURCES) $(libgphoto2_i_la_SOURCES) \ - $(libgt68xx_la_SOURCES) $(libhp_la_SOURCES) \ - $(libhp3500_la_SOURCES) $(libhp3900_la_SOURCES) \ - $(libhp4200_la_SOURCES) $(libhp5400_la_SOURCES) \ - $(libhp5590_la_SOURCES) $(libhpljm1005_la_SOURCES) \ - $(libhpsj5s_la_SOURCES) $(libhs2p_la_SOURCES) \ - $(libibm_la_SOURCES) $(libkodak_la_SOURCES) \ + $(libdll_la_SOURCES) $(libdll_preload_la_SOURCES) \ + $(libdmc_la_SOURCES) $(libepjitsu_la_SOURCES) \ + $(libepson_la_SOURCES) $(libepson2_la_SOURCES) \ + $(libfujitsu_la_SOURCES) $(libgenesys_la_SOURCES) \ + $(libgphoto2_i_la_SOURCES) $(libgt68xx_la_SOURCES) \ + $(libhp_la_SOURCES) $(libhp3500_la_SOURCES) \ + $(libhp3900_la_SOURCES) $(libhp4200_la_SOURCES) \ + $(libhp5400_la_SOURCES) $(libhp5590_la_SOURCES) \ + $(libhpljm1005_la_SOURCES) $(libhpsj5s_la_SOURCES) \ + $(libhs2p_la_SOURCES) $(libibm_la_SOURCES) \ + $(libkodak_la_SOURCES) $(libkodakaio_la_SOURCES) \ $(libkvs1025_la_SOURCES) $(libkvs20xx_la_SOURCES) \ - $(libleo_la_SOURCES) $(liblexmark_la_SOURCES) \ - $(libma1509_la_SOURCES) $(libmagicolor_la_SOURCES) \ - $(libmatsushita_la_SOURCES) $(libmicrotek_la_SOURCES) \ - $(libmicrotek2_la_SOURCES) $(libmustek_la_SOURCES) \ - $(libmustek_pp_la_SOURCES) $(libmustek_usb_la_SOURCES) \ - $(libmustek_usb2_la_SOURCES) $(libnec_la_SOURCES) \ - $(libnet_la_SOURCES) $(libniash_la_SOURCES) \ - $(libp5_la_SOURCES) $(libpie_la_SOURCES) $(libpint_la_SOURCES) \ + $(libkvs40xx_la_SOURCES) $(libleo_la_SOURCES) \ + $(liblexmark_la_SOURCES) $(libma1509_la_SOURCES) \ + $(libmagicolor_la_SOURCES) $(libmatsushita_la_SOURCES) \ + $(libmicrotek_la_SOURCES) $(libmicrotek2_la_SOURCES) \ + $(libmustek_la_SOURCES) $(libmustek_pp_la_SOURCES) \ + $(libmustek_usb_la_SOURCES) $(libmustek_usb2_la_SOURCES) \ + $(libnec_la_SOURCES) $(libnet_la_SOURCES) \ + $(libniash_la_SOURCES) $(libp5_la_SOURCES) \ + $(libpie_la_SOURCES) $(libpint_la_SOURCES) \ $(libpixma_la_SOURCES) $(libplustek_la_SOURCES) \ $(libplustek_pp_la_SOURCES) $(libpnm_la_SOURCES) \ $(libqcam_la_SOURCES) $(libricoh_la_SOURCES) \ @@ -1479,6 +1520,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -1537,6 +1579,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -1586,6 +1629,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -1698,17 +1742,17 @@ hp5400_internal.h hp5400_sane.c hp5400_sanei.c hp5400_sanei.h \ hp5400_xfer.h hp5590_cmds.c hp5590_cmds.h hp5590_low.c \ hp5590_low.h hpsj5s.conf.in hs2p.conf.in hs2p-scsi.c \ - hs2p-scsi.h ibm.conf.in ibm-scsi.c kodak.conf.in leo.conf.in \ - lexmark.conf.in lexmark_models.c lexmark_sensors.c \ - ma1509.conf.in magicolor.conf.in matsushita.conf.in \ - microtek.conf.in microtek2.conf.in mustek.conf.in \ - mustek_scsi_pp.c mustek_scsi_pp.h mustek_pp.conf.in \ - mustek_pp_ccd300.c mustek_pp_ccd300.h mustek_pp_cis.c \ - mustek_pp_cis.h mustek_pp_null.c mustek_usb.conf.in \ - mustek_usb_high.c mustek_usb_high.h mustek_usb_low.c \ - mustek_usb_low.h mustek_usb_mid.c mustek_usb_mid.h \ - mustek_usb2_asic.c mustek_usb2_asic.h mustek_usb2_high.c \ - mustek_usb2_high.h mustek_usb2_reflective.c \ + hs2p-scsi.h ibm.conf.in ibm-scsi.c kodak.conf.in \ + kodakaio.conf.in leo.conf.in lexmark.conf.in lexmark_models.c \ + lexmark_sensors.c ma1509.conf.in magicolor.conf.in \ + matsushita.conf.in microtek.conf.in microtek2.conf.in \ + mustek.conf.in mustek_scsi_pp.c mustek_scsi_pp.h \ + mustek_pp.conf.in mustek_pp_ccd300.c mustek_pp_ccd300.h \ + mustek_pp_cis.c mustek_pp_cis.h mustek_pp_null.c \ + mustek_usb.conf.in mustek_usb_high.c mustek_usb_high.h \ + mustek_usb_low.c mustek_usb_low.h mustek_usb_mid.c \ + mustek_usb_mid.h mustek_usb2_asic.c mustek_usb2_asic.h \ + mustek_usb2_high.c mustek_usb2_high.h mustek_usb2_reflective.c \ mustek_usb2_transparent.c nec.conf.in net.conf.in niash_core.c \ niash_core.h niash_xfer.c niash_xfer.h pie.conf.in p5.conf.in \ p5_device.c pixma.conf.in pixma_sane_options.c \ @@ -1754,7 +1798,7 @@ dell1600n_net.conf dmc.conf epjitsu.conf epson2.conf \ epson.conf fujitsu.conf genesys.conf gphoto2.conf \ gt68xx.conf hp3900.conf hp4200.conf hp5400.conf \ - hp.conf hpsj5s.conf hs2p.conf ibm.conf kodak.conf \ + hp.conf hpsj5s.conf hs2p.conf ibm.conf kodak.conf kodakaio.conf\ leo.conf lexmark.conf ma1509.conf magicolor.conf \ matsushita.conf microtek2.conf microtek.conf mustek.conf \ mustek_pp.conf mustek_usb.conf nec.conf net.conf \ @@ -1778,7 +1822,7 @@ # form of lib${backend}.la to match what configure will list to # build. # Occasionally, this approach will have name conflicts with external -# libraries that need to be linked in. See libgphoto2_i.la for +# libraries that need to be linked in. See libgphoto2_i.la for # example of working around that issue. be_convenience_libs = libabaton.la libagfafocus.la \ libapple.la libartec.la libartec_eplus48u.la \ @@ -1787,13 +1831,13 @@ libcanon_pp.la libcardscan.la libcoolscan.la \ libcoolscan2.la libcoolscan3.la libdc25.la \ libdc210.la libdc240.la libdell1600n_net.la \ - libdmc.la libdll.la libepjitsu.la libepson.la \ + libdmc.la libdll.la libdll_preload.la libepjitsu.la libepson.la \ libepson2.la libfujitsu.la libgenesys.la \ libgphoto2_i.la libgt68xx.la libhp.la \ libhp3500.la libhp3900.la libhp4200.la \ libhp5400.la libhp5590.la libhpljm1005.la \ - libhpsj5s.la libhs2p.la libibm.la libkodak.la \ - libkvs1025.la libkvs20xx.la \ + libhpsj5s.la libhs2p.la libibm.la libkodak.la libkodakaio.la\ + libkvs1025.la libkvs20xx.la libkvs40xx.la \ libleo.la liblexmark.la libma1509.la libmagicolor.la \ libmatsushita.la libmicrotek.la libmicrotek2.la \ libmustek.la libmustek_pp.la libmustek_usb.la \ @@ -1826,8 +1870,9 @@ libsane-gphoto2.la libsane-gt68xx.la libsane-hp.la \ libsane-hp3500.la libsane-hp3900.la libsane-hp4200.la \ libsane-hp5400.la libsane-hp5590.la libsane-hpljm1005.la \ - libsane-hpsj5s.la libsane-hs2p.la libsane-ibm.la libsane-kodak.la \ - libsane-kvs1025.la libsane-kvs20xx.la libsane-leo.la \ + libsane-hpsj5s.la libsane-hs2p.la libsane-ibm.la libsane-kodak.la libsane-kodakaio.la\ + libsane-kvs1025.la libsane-kvs20xx.la libsane-kvs40xx.la \ + libsane-leo.la \ libsane-lexmark.la libsane-ma1509.la libsane-magicolor.la \ libsane-matsushita.la libsane-microtek.la libsane-microtek2.la \ libsane-mustek.la libsane-mustek_pp.la libsane-mustek_usb.la \ @@ -2017,7 +2062,7 @@ libsane_fujitsu_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=fujitsu libsane_fujitsu_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) libsane_fujitsu_la_LIBADD = $(COMMON_LIBS) libfujitsu.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_magic.lo $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) -libgenesys_la_SOURCES = genesys.c genesys.h genesys_gl646.c genesys_gl646.h genesys_gl841.c genesys_gl843.c genesys_gl843.h genesys_gl847.c genesys_gl847.h genesys_gl124.c genesys_gl124.h genesys_low.c genesys_low.h +libgenesys_la_SOURCES = genesys.c genesys.h genesys_gl646.c genesys_gl646.h genesys_gl841.c genesys_gl841.h genesys_gl843.c genesys_gl843.h genesys_gl847.c genesys_gl847.h genesys_gl124.c genesys_gl124.h genesys_low.c genesys_low.h libgenesys_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=genesys nodist_libsane_genesys_la_SOURCES = genesys-s.c libsane_genesys_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=genesys @@ -2101,6 +2146,12 @@ libsane_kodak_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kodak libsane_kodak_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) libsane_kodak_la_LIBADD = $(COMMON_LIBS) libkodak.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_scsi.lo $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) +libkodakaio_la_SOURCES = kodakaio.c kodakaio.h +libkodakaio_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kodakaio +nodist_libsane_kodakaio_la_SOURCES = kodakaio-s.c +libsane_kodakaio_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kodakaio +libsane_kodakaio_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) +libsane_kodakaio_la_LIBADD = $(COMMON_LIBS) libkodakaio.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_tcp.lo ../sanei/sanei_udp.lo $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB) $(RESMGR_LIBS) libkvs1025_la_SOURCES = kvs1025.c kvs1025_low.c kvs1025_opt.c kvs1025_usb.c \ kvs1025.h kvs1025_low.h kvs1025_usb.h kvs1025_cmds.h @@ -2108,7 +2159,7 @@ nodist_libsane_kvs1025_la_SOURCES = kvs1025-s.c libsane_kvs1025_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs1025 libsane_kvs1025_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) -libsane_kvs1025_la_LIBADD = $(COMMON_LIBS) libkvs1025.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(USB_LIBS) $(RESMGR_LIBS) +libsane_kvs1025_la_LIBADD = $(COMMON_LIBS) libkvs1025.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_magic.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS) libkvs20xx_la_SOURCES = kvs20xx.c kvs20xx_cmd.c kvs20xx_opt.c \ kvs20xx_cmd.h kvs20xx.h @@ -2117,6 +2168,14 @@ libsane_kvs20xx_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs20xx libsane_kvs20xx_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) libsane_kvs20xx_la_LIBADD = $(COMMON_LIBS) libkvs20xx.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) +libkvs40xx_la_SOURCES = kvs40xx.c kvs40xx_cmd.c kvs40xx_opt.c \ + kvs40xx.h + +libkvs40xx_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs40xx +nodist_libsane_kvs40xx_la_SOURCES = kvs40xx-s.c +libsane_kvs40xx_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs40xx +libsane_kvs40xx_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) +libsane_kvs40xx_la_LIBADD = $(COMMON_LIBS) libkvs40xx.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo $(SCSI_LIBS) $(USB_LIBS) $(PTHREAD_LIBS) $(RESMGR_LIBS) libleo_la_SOURCES = leo.c leo.h libleo_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=leo nodist_libsane_leo_la_SOURCES = leo-s.c @@ -2219,7 +2278,7 @@ libsane_pint_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pint libsane_pint_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) libsane_pint_la_LIBADD = $(COMMON_LIBS) libpint.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo -libpixma_la_SOURCES = pixma.c pixma.h pixma_io_sanei.c pixma_io.h pixma_common.c pixma_common.h pixma_mp150.c pixma_mp730.c pixma_mp750.c pixma_imageclass.c pixma_bjnp.c pixma_bjnp.h pixma_bjnp_private.h pixma_rename.h +libpixma_la_SOURCES = pixma.c pixma.h pixma_io_sanei.c pixma_io.h pixma_common.c pixma_common.h pixma_mp150.c pixma_mp730.c pixma_mp750.c pixma_mp810.c pixma_imageclass.c pixma_bjnp.c pixma_bjnp.h pixma_bjnp_private.h pixma_rename.h libpixma_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pixma nodist_libsane_pixma_la_SOURCES = pixma-s.c libsane_pixma_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pixma @@ -2381,9 +2440,11 @@ libsane_xerox_mfp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=xerox_mfp libsane_xerox_mfp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) libsane_xerox_mfp_la_LIBADD = $(COMMON_LIBS) libxerox_mfp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_tcp.lo $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(RESMGR_LIBS) +libdll_preload_la_SOURCES = dll.c +libdll_preload_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll -DENABLE_PRELOAD libdll_la_SOURCES = dll.c -BUILT_SOURCES = dll-preload.h libdll_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll +BUILT_SOURCES = dll-preload.h nodist_libsane_dll_la_SOURCES = dll-s.c libsane_dll_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll libsane_dll_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) @@ -2411,10 +2472,10 @@ 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) $(RESMGR_LIBS) +libsane_la_LIBADD = $(COMMON_LIBS) @PRELOADABLE_BACKENDS_ENABLED@ libdll_preload.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_magic.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) $(RESMGR_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 = $(COMMON_LIBS) @PRELOADABLE_BACKENDS_ENABLED@ libdll_preload.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_magic.lo @SANEI_SANEI_JPEG_LO@ all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am @@ -2554,6 +2615,8 @@ $(LINK) $(libdell1600n_net_la_OBJECTS) $(libdell1600n_net_la_LIBADD) $(LIBS) libdll.la: $(libdll_la_OBJECTS) $(libdll_la_DEPENDENCIES) $(LINK) $(libdll_la_OBJECTS) $(libdll_la_LIBADD) $(LIBS) +libdll_preload.la: $(libdll_preload_la_OBJECTS) $(libdll_preload_la_DEPENDENCIES) + $(LINK) $(libdll_preload_la_OBJECTS) $(libdll_preload_la_LIBADD) $(LIBS) libdmc.la: $(libdmc_la_OBJECTS) $(libdmc_la_DEPENDENCIES) $(LINK) $(libdmc_la_OBJECTS) $(libdmc_la_LIBADD) $(LIBS) libepjitsu.la: $(libepjitsu_la_OBJECTS) $(libepjitsu_la_DEPENDENCIES) @@ -2592,10 +2655,14 @@ $(LINK) $(libibm_la_OBJECTS) $(libibm_la_LIBADD) $(LIBS) libkodak.la: $(libkodak_la_OBJECTS) $(libkodak_la_DEPENDENCIES) $(LINK) $(libkodak_la_OBJECTS) $(libkodak_la_LIBADD) $(LIBS) +libkodakaio.la: $(libkodakaio_la_OBJECTS) $(libkodakaio_la_DEPENDENCIES) + $(LINK) $(libkodakaio_la_OBJECTS) $(libkodakaio_la_LIBADD) $(LIBS) libkvs1025.la: $(libkvs1025_la_OBJECTS) $(libkvs1025_la_DEPENDENCIES) $(LINK) $(libkvs1025_la_OBJECTS) $(libkvs1025_la_LIBADD) $(LIBS) libkvs20xx.la: $(libkvs20xx_la_OBJECTS) $(libkvs20xx_la_DEPENDENCIES) $(LINK) $(libkvs20xx_la_OBJECTS) $(libkvs20xx_la_LIBADD) $(LIBS) +libkvs40xx.la: $(libkvs40xx_la_OBJECTS) $(libkvs40xx_la_DEPENDENCIES) + $(LINK) $(libkvs40xx_la_OBJECTS) $(libkvs40xx_la_LIBADD) $(LIBS) libleo.la: $(libleo_la_OBJECTS) $(libleo_la_DEPENDENCIES) $(LINK) $(libleo_la_OBJECTS) $(libleo_la_LIBADD) $(LIBS) liblexmark.la: $(liblexmark_la_OBJECTS) $(liblexmark_la_DEPENDENCIES) @@ -2726,10 +2793,14 @@ $(libsane_ibm_la_LINK) $(libsane_ibm_la_OBJECTS) $(libsane_ibm_la_LIBADD) $(LIBS) libsane-kodak.la: $(libsane_kodak_la_OBJECTS) $(libsane_kodak_la_DEPENDENCIES) $(libsane_kodak_la_LINK) $(libsane_kodak_la_OBJECTS) $(libsane_kodak_la_LIBADD) $(LIBS) +libsane-kodakaio.la: $(libsane_kodakaio_la_OBJECTS) $(libsane_kodakaio_la_DEPENDENCIES) + $(libsane_kodakaio_la_LINK) $(libsane_kodakaio_la_OBJECTS) $(libsane_kodakaio_la_LIBADD) $(LIBS) libsane-kvs1025.la: $(libsane_kvs1025_la_OBJECTS) $(libsane_kvs1025_la_DEPENDENCIES) $(libsane_kvs1025_la_LINK) $(libsane_kvs1025_la_OBJECTS) $(libsane_kvs1025_la_LIBADD) $(LIBS) libsane-kvs20xx.la: $(libsane_kvs20xx_la_OBJECTS) $(libsane_kvs20xx_la_DEPENDENCIES) $(libsane_kvs20xx_la_LINK) $(libsane_kvs20xx_la_OBJECTS) $(libsane_kvs20xx_la_LIBADD) $(LIBS) +libsane-kvs40xx.la: $(libsane_kvs40xx_la_OBJECTS) $(libsane_kvs40xx_la_DEPENDENCIES) + $(libsane_kvs40xx_la_LINK) $(libsane_kvs40xx_la_OBJECTS) $(libsane_kvs40xx_la_LIBADD) $(LIBS) libsane-leo.la: $(libsane_leo_la_OBJECTS) $(libsane_leo_la_DEPENDENCIES) $(libsane_leo_la_LINK) $(libsane_leo_la_OBJECTS) $(libsane_leo_la_LIBADD) $(LIBS) libsane-lexmark.la: $(libsane_lexmark_la_OBJECTS) $(libsane_lexmark_la_DEPENDENCIES) @@ -2888,6 +2959,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdc25_la-dc25.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdell1600n_net_la-dell1600n_net.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdll_la-dll.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdll_preload_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@ @@ -2928,6 +3000,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhs2p_la-hs2p.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libibm_la-ibm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkodak_la-kodak.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkodakaio_la-kodakaio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs1025_la-kvs1025.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs1025_la-kvs1025_low.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs1025_la-kvs1025_opt.Plo@am__quote@ @@ -2935,6 +3008,9 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs20xx_la-kvs20xx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs20xx_la-kvs20xx_cmd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs20xx_la-kvs20xx_opt.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs40xx_la-kvs40xx.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs40xx_la-kvs40xx_cmd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libkvs40xx_la-kvs40xx_opt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libleo_la-leo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblexmark_la-lexmark.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/liblexmark_la-lexmark_low.Plo@am__quote@ @@ -2961,6 +3037,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpixma_la-pixma_mp150.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpixma_la-pixma_mp730.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpixma_la-pixma_mp750.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpixma_la-pixma_mp810.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libplustek_la-plustek.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libplustek_pp_la-plustek_pp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libpnm_la-pnm.Plo@am__quote@ @@ -3009,8 +3086,10 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_hs2p_la-hs2p-s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_ibm_la-ibm-s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_kodak_la-kodak-s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_kodakaio_la-kodakaio-s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_kvs1025_la-kvs1025-s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_kvs20xx_la-kvs20xx-s.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_kvs40xx_la-kvs40xx-s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_la-dll-s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_leo_la-leo-s.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libsane_lexmark_la-lexmark-s.Plo@am__quote@ @@ -3262,6 +3341,13 @@ @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) $(libdll_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdll_la-dll.lo `test -f 'dll.c' || echo '$(srcdir)/'`dll.c +libdll_preload_la-dll.lo: dll.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdll_preload_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdll_preload_la-dll.lo -MD -MP -MF $(DEPDIR)/libdll_preload_la-dll.Tpo -c -o libdll_preload_la-dll.lo `test -f 'dll.c' || echo '$(srcdir)/'`dll.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libdll_preload_la-dll.Tpo $(DEPDIR)/libdll_preload_la-dll.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='dll.c' object='libdll_preload_la-dll.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) $(libdll_preload_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libdll_preload_la-dll.lo `test -f 'dll.c' || echo '$(srcdir)/'`dll.c + libdmc_la-dmc.lo: dmc.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libdmc_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libdmc_la-dmc.lo -MD -MP -MF $(DEPDIR)/libdmc_la-dmc.Tpo -c -o libdmc_la-dmc.lo `test -f 'dmc.c' || echo '$(srcdir)/'`dmc.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libdmc_la-dmc.Tpo $(DEPDIR)/libdmc_la-dmc.Plo @@ -3542,6 +3628,13 @@ @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) $(libkodak_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libkodak_la-kodak.lo `test -f 'kodak.c' || echo '$(srcdir)/'`kodak.c +libkodakaio_la-kodakaio.lo: kodakaio.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkodakaio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libkodakaio_la-kodakaio.lo -MD -MP -MF $(DEPDIR)/libkodakaio_la-kodakaio.Tpo -c -o libkodakaio_la-kodakaio.lo `test -f 'kodakaio.c' || echo '$(srcdir)/'`kodakaio.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libkodakaio_la-kodakaio.Tpo $(DEPDIR)/libkodakaio_la-kodakaio.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kodakaio.c' object='libkodakaio_la-kodakaio.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) $(libkodakaio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libkodakaio_la-kodakaio.lo `test -f 'kodakaio.c' || echo '$(srcdir)/'`kodakaio.c + libkvs1025_la-kvs1025.lo: kvs1025.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkvs1025_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libkvs1025_la-kvs1025.lo -MD -MP -MF $(DEPDIR)/libkvs1025_la-kvs1025.Tpo -c -o libkvs1025_la-kvs1025.lo `test -f 'kvs1025.c' || echo '$(srcdir)/'`kvs1025.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libkvs1025_la-kvs1025.Tpo $(DEPDIR)/libkvs1025_la-kvs1025.Plo @@ -3591,6 +3684,27 @@ @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) $(libkvs20xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libkvs20xx_la-kvs20xx_opt.lo `test -f 'kvs20xx_opt.c' || echo '$(srcdir)/'`kvs20xx_opt.c +libkvs40xx_la-kvs40xx.lo: kvs40xx.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkvs40xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libkvs40xx_la-kvs40xx.lo -MD -MP -MF $(DEPDIR)/libkvs40xx_la-kvs40xx.Tpo -c -o libkvs40xx_la-kvs40xx.lo `test -f 'kvs40xx.c' || echo '$(srcdir)/'`kvs40xx.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libkvs40xx_la-kvs40xx.Tpo $(DEPDIR)/libkvs40xx_la-kvs40xx.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kvs40xx.c' object='libkvs40xx_la-kvs40xx.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) $(libkvs40xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libkvs40xx_la-kvs40xx.lo `test -f 'kvs40xx.c' || echo '$(srcdir)/'`kvs40xx.c + +libkvs40xx_la-kvs40xx_cmd.lo: kvs40xx_cmd.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkvs40xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libkvs40xx_la-kvs40xx_cmd.lo -MD -MP -MF $(DEPDIR)/libkvs40xx_la-kvs40xx_cmd.Tpo -c -o libkvs40xx_la-kvs40xx_cmd.lo `test -f 'kvs40xx_cmd.c' || echo '$(srcdir)/'`kvs40xx_cmd.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libkvs40xx_la-kvs40xx_cmd.Tpo $(DEPDIR)/libkvs40xx_la-kvs40xx_cmd.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kvs40xx_cmd.c' object='libkvs40xx_la-kvs40xx_cmd.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) $(libkvs40xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libkvs40xx_la-kvs40xx_cmd.lo `test -f 'kvs40xx_cmd.c' || echo '$(srcdir)/'`kvs40xx_cmd.c + +libkvs40xx_la-kvs40xx_opt.lo: kvs40xx_opt.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libkvs40xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libkvs40xx_la-kvs40xx_opt.lo -MD -MP -MF $(DEPDIR)/libkvs40xx_la-kvs40xx_opt.Tpo -c -o libkvs40xx_la-kvs40xx_opt.lo `test -f 'kvs40xx_opt.c' || echo '$(srcdir)/'`kvs40xx_opt.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libkvs40xx_la-kvs40xx_opt.Tpo $(DEPDIR)/libkvs40xx_la-kvs40xx_opt.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kvs40xx_opt.c' object='libkvs40xx_la-kvs40xx_opt.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) $(libkvs40xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libkvs40xx_la-kvs40xx_opt.lo `test -f 'kvs40xx_opt.c' || echo '$(srcdir)/'`kvs40xx_opt.c + libleo_la-leo.lo: leo.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libleo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libleo_la-leo.lo -MD -MP -MF $(DEPDIR)/libleo_la-leo.Tpo -c -o libleo_la-leo.lo `test -f 'leo.c' || echo '$(srcdir)/'`leo.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libleo_la-leo.Tpo $(DEPDIR)/libleo_la-leo.Plo @@ -3759,6 +3873,13 @@ @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) $(libpixma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libpixma_la-pixma_mp750.lo `test -f 'pixma_mp750.c' || echo '$(srcdir)/'`pixma_mp750.c +libpixma_la-pixma_mp810.lo: pixma_mp810.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpixma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libpixma_la-pixma_mp810.lo -MD -MP -MF $(DEPDIR)/libpixma_la-pixma_mp810.Tpo -c -o libpixma_la-pixma_mp810.lo `test -f 'pixma_mp810.c' || echo '$(srcdir)/'`pixma_mp810.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libpixma_la-pixma_mp810.Tpo $(DEPDIR)/libpixma_la-pixma_mp810.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pixma_mp810.c' object='libpixma_la-pixma_mp810.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) $(libpixma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libpixma_la-pixma_mp810.lo `test -f 'pixma_mp810.c' || echo '$(srcdir)/'`pixma_mp810.c + libpixma_la-pixma_imageclass.lo: pixma_imageclass.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libpixma_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libpixma_la-pixma_imageclass.lo -MD -MP -MF $(DEPDIR)/libpixma_la-pixma_imageclass.Tpo -c -o libpixma_la-pixma_imageclass.lo `test -f 'pixma_imageclass.c' || echo '$(srcdir)/'`pixma_imageclass.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libpixma_la-pixma_imageclass.Tpo $(DEPDIR)/libpixma_la-pixma_imageclass.Plo @@ -4109,6 +4230,13 @@ @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) $(libsane_kodak_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsane_kodak_la-kodak-s.lo `test -f 'kodak-s.c' || echo '$(srcdir)/'`kodak-s.c +libsane_kodakaio_la-kodakaio-s.lo: kodakaio-s.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsane_kodakaio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsane_kodakaio_la-kodakaio-s.lo -MD -MP -MF $(DEPDIR)/libsane_kodakaio_la-kodakaio-s.Tpo -c -o libsane_kodakaio_la-kodakaio-s.lo `test -f 'kodakaio-s.c' || echo '$(srcdir)/'`kodakaio-s.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libsane_kodakaio_la-kodakaio-s.Tpo $(DEPDIR)/libsane_kodakaio_la-kodakaio-s.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kodakaio-s.c' object='libsane_kodakaio_la-kodakaio-s.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) $(libsane_kodakaio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsane_kodakaio_la-kodakaio-s.lo `test -f 'kodakaio-s.c' || echo '$(srcdir)/'`kodakaio-s.c + libsane_kvs1025_la-kvs1025-s.lo: kvs1025-s.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsane_kvs1025_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsane_kvs1025_la-kvs1025-s.lo -MD -MP -MF $(DEPDIR)/libsane_kvs1025_la-kvs1025-s.Tpo -c -o libsane_kvs1025_la-kvs1025-s.lo `test -f 'kvs1025-s.c' || echo '$(srcdir)/'`kvs1025-s.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libsane_kvs1025_la-kvs1025-s.Tpo $(DEPDIR)/libsane_kvs1025_la-kvs1025-s.Plo @@ -4123,6 +4251,13 @@ @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) $(libsane_kvs20xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsane_kvs20xx_la-kvs20xx-s.lo `test -f 'kvs20xx-s.c' || echo '$(srcdir)/'`kvs20xx-s.c +libsane_kvs40xx_la-kvs40xx-s.lo: kvs40xx-s.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsane_kvs40xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsane_kvs40xx_la-kvs40xx-s.lo -MD -MP -MF $(DEPDIR)/libsane_kvs40xx_la-kvs40xx-s.Tpo -c -o libsane_kvs40xx_la-kvs40xx-s.lo `test -f 'kvs40xx-s.c' || echo '$(srcdir)/'`kvs40xx-s.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libsane_kvs40xx_la-kvs40xx-s.Tpo $(DEPDIR)/libsane_kvs40xx_la-kvs40xx-s.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kvs40xx-s.c' object='libsane_kvs40xx_la-kvs40xx-s.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) $(libsane_kvs40xx_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libsane_kvs40xx_la-kvs40xx-s.lo `test -f 'kvs40xx-s.c' || echo '$(srcdir)/'`kvs40xx-s.c + libsane_leo_la-leo-s.lo: leo-s.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsane_leo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libsane_leo_la-leo-s.lo -MD -MP -MF $(DEPDIR)/libsane_leo_la-leo-s.Tpo -c -o libsane_leo_la-leo-s.lo `test -f 'leo-s.c' || echo '$(srcdir)/'`leo-s.c @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libsane_leo_la-leo-s.Tpo $(DEPDIR)/libsane_leo_la-leo-s.Plo @@ -4881,7 +5016,7 @@ done install-lockpath: - $(mkinstalldirs) -m 775 -g $(LOCKPATH_GROUP) $(DESTDIR)$(locksanedir) + $(mkinstalldirs) -m 775 $(DESTDIR)$(locksanedir) uninstall-hook: rm -rf $(DESTDIR)$(libdir)/sane $(DESTDIR)$(configdir) $(DESTDIR)$(locksanedir) diff -Nru sane-backends-1.0.22/backend/avision.c sane-backends-1.0.23/backend/avision.c --- sane-backends-1.0.22/backend/avision.c 2011-01-30 18:49:46.000000000 +0000 +++ sane-backends-1.0.23/backend/avision.c 2012-07-01 02:00:44.000000000 +0000 @@ -137,7 +137,7 @@ #include #define BACKEND_NAME avision -#define BACKEND_BUILD 294 /* avision backend BUILD version */ +#define BACKEND_BUILD 296 /* avision backend BUILD version */ #include "../include/sane/sane.h" #include "../include/sane/sanei.h" @@ -248,7 +248,7 @@ { NULL, NULL, 0x0638, 0x0A23, "Avision", "AV220", - AV_INT_BUTTON,0}, + AV_INT_BUTTON | AV_GRAY_MODES,0}, /* comment="duplex! sheetfed scanner" */ /* status="complete" */ @@ -331,15 +331,16 @@ /* status="untested" */ { NULL, "AV610", - 0x0638, 0x0a19, + 0x0638, 0x0a18, "Avision", "AV610", - AV_GRAY_CALIB_BLUE | AV_ACCEL_TABLE | AV_NO_64BYTE_ALIGN | AV_INT_STATUS | AV_INT_BUTTON,0}, + AV_GRAY_CALIB_BLUE | AV_ACCEL_TABLE | AV_NO_64BYTE_ALIGN | AV_INT_BUTTON, 0}, /* status="good" */ { NULL, NULL, 0x0638, 0x0a18, "Avision", "AV600U Plus", - AV_GRAY_CALIB_BLUE | AV_ACCEL_TABLE | AV_NO_64BYTE_ALIGN | AV_INT_STATUS | AV_INT_BUTTON,0}, + /* If this unit requires the AV_INT_STATUS flag, then we'll need to alter the code to deal with two different devices with the same USB id (AV610 above) */ + AV_GRAY_CALIB_BLUE | AV_ACCEL_TABLE | AV_NO_64BYTE_ALIGN | /* AV_INT_STATUS | */ AV_INT_BUTTON,0}, /* status="good" */ { NULL, NULL, @@ -619,7 +620,7 @@ { "HP", "ScanJet 5370C", 0x03f0, 0x0701, "Hewlett-Packard", "ScanJet 5370C", - AV_MULTI_CALIB_CMD | AV_INT_STATUS,0}, + AV_MULTI_CALIB_CMD | AV_INT_STATUS, AV_FIRMWARE }, /* comment="1 pass, 2400 dpi - some FW revisions have x-axis image scaling problems over 1200 dpi" */ /* status="good" */ @@ -850,13 +851,13 @@ { NULL, NULL, 0x040a, 0x6001, "Kodak", "i30", - AV_INT_BUTTON,0}, + AV_INT_BUTTON | AV_GRAY_MODES,0}, /* status="untested" */ { NULL, NULL, 0x040a, 0x6002, "Kodak", "i40", - AV_INT_BUTTON,0}, + AV_INT_BUTTON | AV_GRAY_MODES,0}, /* status="basic" */ { NULL, NULL, @@ -1056,6 +1057,12 @@ /* status="good" */ { NULL, NULL, + 0x04a7, 0x0476, + "Xerox", "DocuMate232", + AV_INT_BUTTON,0}, + /* status="good" */ + + { NULL, NULL, 0x04a7, 0x044c, "Xerox", "DocuMate262", AV_INT_BUTTON,0}, @@ -2596,7 +2603,7 @@ s->params.pixels_per_line = s->avdimen.hw_pixels_per_line * s->avdimen.xres / s->avdimen.hw_xres; s->params.lines = s->avdimen.hw_lines * s->avdimen.xres / s->avdimen.hw_xres; - if (!is_adf_scan (s)) + if (is_adf_scan (s)) /* we can't know how many lines we'll see with an ADF because that depends on the paper length */ s->params.lines = -1; if (s->c_mode == AV_THRESHOLDED || s->c_mode == AV_DITHERED) @@ -3143,7 +3150,7 @@ set_triple (rcmd.transferlen, size); status = avision_cmd (&s->av_con, &rcmd, sizeof (rcmd), 0, 0, payload, &size); if (status != SANE_STATUS_GOOD || size != (4-n)) { - DBG (1, "adf_reset: read %d failed (%s)\n", (2-n), + DBG (1, "adf_reset: read %lu failed (%s)\n", (2-n), sane_strstatus (status)); return (status); } @@ -4219,7 +4226,7 @@ /* check if x/y ranges are valid :-((( */ { - source_mode mode; + source_mode_dim mode; for (mode = AV_NORMAL_DIM; mode < AV_SOURCE_MODE_DIM_LAST; ++ mode) { @@ -7046,7 +7053,7 @@ unsigned int abslines = absline + useful_bytes / s->avdimen.hw_bytes_per_line; uint8_t* ptr = stripe_data; for ( ; absline < abslines; ++absline) { - fseek (rear_fp, (s->params.lines - absline + 1) * s->avdimen.hw_bytes_per_line, SEEK_SET); + fseek (rear_fp, ((0 - s->params.lines) - absline - 2) * s->avdimen.hw_bytes_per_line, SEEK_SET); fwrite (ptr, s->avdimen.hw_bytes_per_line, 1, rear_fp); useful_bytes -= s->avdimen.hw_bytes_per_line; stripe_fill -= s->avdimen.hw_bytes_per_line; @@ -7054,7 +7061,7 @@ } DBG (9, "reader_process: after page flip: useful_bytes: %d, stripe_fill: %d\n", useful_bytes, stripe_fill); - } + } else { /* * Perform needed data conversions (packing, ...) and/or copy the @@ -7412,6 +7419,7 @@ out_data + useful_bytes - s->avdimen.hw_bytes_per_line, s->avdimen.hw_bytes_per_line); } + } /* save image date in stripe buffer for next next stripe */ stripe_fill -= useful_bytes; @@ -7482,10 +7490,10 @@ sane_strstatus (status)); return status; } - /* we can set anything here without fear because the process will terminate soon and take our changes with it */ } + /* we can set anything here without fear because the process will terminate soon and take our changes with it */ s->page += 1; - s->params.lines = line; + s->params.lines = -line; exit_status = reader_process (s); } /* TODO: @@ -7526,29 +7534,6 @@ attach (dev, AV_USB, 0); return SANE_STATUS_GOOD; } - -SANE_Status -sane_init (SANE_Int* version_code, SANE_Auth_Callback authorize) -{ - authorize = authorize; /* silence gcc */ - - DBG_INIT(); - -#ifdef AVISION_STATIC_DEBUG_LEVEL - DBG_LEVEL = AVISION_STATIC_DEBUG_LEVEL; -#endif - - DBG (3, "sane_init:(Version: %i.%i Build: %i)\n", - SANE_CURRENT_MAJOR, V_MINOR, BACKEND_BUILD); - - /* must come first */ - sanei_thread_init (); - - if (version_code) - *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BACKEND_BUILD); - - return SANE_STATUS_GOOD; -} static SANE_Status sane_reload_devices (void) @@ -7722,6 +7707,31 @@ return SANE_STATUS_GOOD; } +SANE_Status +sane_init (SANE_Int* version_code, SANE_Auth_Callback authorize) +{ + authorize = authorize; /* silence gcc */ + + DBG_INIT(); + +#ifdef AVISION_STATIC_DEBUG_LEVEL + DBG_LEVEL = AVISION_STATIC_DEBUG_LEVEL; +#endif + + DBG (3, "sane_init:(Version: %i.%i Build: %i)\n", + SANE_CURRENT_MAJOR, V_MINOR, BACKEND_BUILD); + + /* must come first */ + sanei_thread_init (); + + if (version_code) + *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BACKEND_BUILD); + + sane_reload_devices (); + + return SANE_STATUS_GOOD; +} + void sane_exit (void) { diff -Nru sane-backends-1.0.22/backend/canon630u.c sane-backends-1.0.23/backend/canon630u.c --- sane-backends-1.0.22/backend/canon630u.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/canon630u.c 2011-11-01 20:09:20.000000000 +0000 @@ -54,6 +54,7 @@ #include #include #include +#include #include "../include/sane/sane.h" #include "../include/sane/sanei.h" diff -Nru sane-backends-1.0.22/backend/canon_dr.c sane-backends-1.0.23/backend/canon_dr.c --- sane-backends-1.0.22/backend/canon_dr.c 2011-01-30 18:49:46.000000000 +0000 +++ sane-backends-1.0.23/backend/canon_dr.c 2012-02-20 14:33:44.000000000 +0000 @@ -266,6 +266,14 @@ - don't center window when using flatbed - improve request sense error messages - enable flatbed for all known models + v38 2011-07-06, MAN + - initial support for DR-5020 + - use ppl_mod instead of Bpl_mod, apply to all modes + - invert logic of read_panel tracking + - add ability to disable read_panel() + - automatically disable read/send_panel if unsupported + v39 2011-11-01, MAN + - DR-2580C pads the backside of duplex scans SANE FLOW DIAGRAM @@ -314,7 +322,7 @@ #include "canon_dr.h" #define DEBUG 1 -#define BUILD 37 +#define BUILD 39 /* values for SANE_DEBUG_CANON_DR env var: - errors 5 @@ -1120,13 +1128,14 @@ s->has_adf = 1; s->has_duplex = 1; s->has_buffer = 1; + s->can_read_panel = 1; s->can_write_panel = 1; s->brightness_steps = 255; s->contrast_steps = 255; s->threshold_steps = 255; - s->Bpl_mod = 1; + s->ppl_mod = 1; s->bg_color = 0xee; /* assume these are same as adf, override below */ @@ -1167,6 +1176,8 @@ s->duplex_interlace = DUPLEX_INTERLACE_FBFB; s->need_ccal = 1; s->need_fcal = 1; + s->duplex_offset = 432; + s->duplex_offset_side = SIDE_BACK; /*lies*/ s->can_halftone=0; @@ -1233,7 +1244,17 @@ s->can_write_panel = 0; s->has_df = 0; s->has_btc = 0; - s->Bpl_mod = 32; + s->ppl_mod = 32; + s->reverse_by_mode[MODE_LINEART] = 0; + s->reverse_by_mode[MODE_HALFTONE] = 0; + } + + else if (strstr (s->model_name,"DR-5020")){ + s->can_read_panel = 0; + s->can_write_panel = 0; + s->has_df = 0; + s->has_btc = 0; + s->ppl_mod = 32; s->reverse_by_mode[MODE_LINEART] = 0; s->reverse_by_mode[MODE_HALFTONE] = 0; } @@ -1253,10 +1274,21 @@ DBG (10, "init_panel: start\n"); - ret = read_panel(s,OPT_COUNTER); + ret = read_panel(s,0); + if(ret){ + DBG (5, "init_panel: disabling read_panel\n"); + s->can_read_panel = 0; + ret = SANE_STATUS_GOOD; + } + s->panel_enable_led = 1; s->panel_counter = 0; ret = send_panel(s); + if(ret){ + DBG (5, "init_panel: disabling send_panel\n"); + s->can_write_panel = 0; + ret = SANE_STATUS_GOOD; + } DBG (10, "init_panel: finish\n"); @@ -2072,6 +2104,8 @@ opt->type = SANE_TYPE_BOOL; opt->unit = SANE_UNIT_NONE; opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + if(!s->can_read_panel) + opt->cap = SANE_CAP_INACTIVE; } if(option==OPT_STOP){ @@ -2081,6 +2115,8 @@ opt->type = SANE_TYPE_BOOL; opt->unit = SANE_UNIT_NONE; opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + if(!s->can_read_panel) + opt->cap = SANE_CAP_INACTIVE; } if(option==OPT_BUTT3){ @@ -2090,6 +2126,8 @@ opt->type = SANE_TYPE_BOOL; opt->unit = SANE_UNIT_NONE; opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + if(!s->can_read_panel) + opt->cap = SANE_CAP_INACTIVE; } if(option==OPT_NEWFILE){ @@ -2099,6 +2137,8 @@ opt->type = SANE_TYPE_BOOL; opt->unit = SANE_UNIT_NONE; opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + if(!s->can_read_panel) + opt->cap = SANE_CAP_INACTIVE; } if(option==OPT_COUNTONLY){ @@ -2108,6 +2148,8 @@ opt->type = SANE_TYPE_BOOL; opt->unit = SANE_UNIT_NONE; opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + if(!s->can_read_panel) + opt->cap = SANE_CAP_INACTIVE; } if(option==OPT_BYPASSMODE){ @@ -2117,6 +2159,8 @@ opt->type = SANE_TYPE_BOOL; opt->unit = SANE_UNIT_NONE; opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; + if(!s->can_read_panel) + opt->cap = SANE_CAP_INACTIVE; } if(option==OPT_COUNTER){ @@ -2131,7 +2175,7 @@ s->counter_range.max=500; s->counter_range.quant=1; - if (s->has_counter) + if (s->can_read_panel && s->has_counter) opt->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED; else opt->cap = SANE_CAP_INACTIVE; @@ -2878,10 +2922,16 @@ unsigned char in[R_PANEL_len]; size_t inLen = R_PANEL_len; - DBG (10, "read_panel: start\n"); + DBG (10, "read_panel: start %d\n", option); - /* only run this if frontend has read previous value */ - if (s->hw_read[option-OPT_START]) { + if(!s->can_read_panel){ + DBG (10, "read_panel: unsupported, finishing\n"); + return ret; + } + + /* only run this if frontend has read previous value + * or if the caller does not want the data stored */ + if (!option || !s->hw_read[option-OPT_START]) { DBG (15, "read_panel: running\n"); @@ -2898,8 +2948,9 @@ ); if (ret == SANE_STATUS_GOOD || ret == SANE_STATUS_EOF) { - /*blast the read flags*/ - memset(s->hw_read,0,sizeof(s->hw_read)); + /*set flags indicating there is data to read*/ + if(option) + memset(s->hw_read,1,sizeof(s->hw_read)); s->panel_start = get_R_PANEL_start(in); s->panel_stop = get_R_PANEL_stop(in); @@ -2913,7 +2964,8 @@ } } - s->hw_read[option-OPT_START] = 1; + if(option) + s->hw_read[option-OPT_START] = 0; DBG (10, "read_panel: finish %d\n",s->panel_counter); @@ -3047,9 +3099,6 @@ else if (s->u.mode == MODE_GRAYSCALE) { s->u.format = SANE_FRAME_GRAY; s->u.bpp = 8; - - /* round down to boundary for some scanners */ - s->u.width -= s->u.width % s->Bpl_mod; } else { s->u.format = SANE_FRAME_GRAY; @@ -3059,6 +3108,9 @@ s->u.width -= s->u.width % 8; } + /* round down to pixel boundary for some scanners */ + s->u.width -= s->u.width % s->ppl_mod; + #ifdef SANE_FRAME_JPEG /* jpeg requires 8x8 squares */ if(s->compress == COMP_JPEG && s->u.mode >= MODE_GRAYSCALE){ @@ -3139,10 +3191,9 @@ if(s->s.mode < MODE_GRAYSCALE){ s->s.width -= s->s.width % 8; } - if(s->s.mode == MODE_GRAYSCALE){ - /* round down to boundary for some scanners */ - s->s.width -= s->s.width % s->Bpl_mod; - } + + /* round down to pixel boundary for some scanners */ + s->s.width -= s->s.width % s->ppl_mod; s->s.valid_width = s->s.width; s->s.valid_Bpl = s->s.valid_width * s->s.bpp / 8; @@ -3188,7 +3239,7 @@ memcpy(&s->i,&s->u,sizeof(struct img_params)); /*dumb scanners pad the top of front page in duplex*/ if(s->i.source == SOURCE_ADF_DUPLEX) - s->i.skip_lines[0] = s->duplex_offset * s->i.dpi_y / 1200; + s->i.skip_lines[s->duplex_offset_side] = s->duplex_offset * s->i.dpi_y / 1200; } DBG (15, "update_params: i params: w:%d h:%d m:%d f:%d b:%d\n", @@ -7261,7 +7312,7 @@ /* Loop thru a getTransitions array, and use a simplified Hough transform * to divide likely edges into a 2-d array of bins. Then weight each * bin based on its angle and offset. Return the 'best' bin. */ -SANE_Status +static SANE_Status getLine (int height, int width, int * buff, int slopes, double minSlope, double maxSlope, int offsets, int minOffset, int maxOffset, diff -Nru sane-backends-1.0.22/backend/canon_dr.h sane-backends-1.0.23/backend/canon_dr.h --- sane-backends-1.0.22/backend/canon_dr.h 2011-01-19 02:31:13.000000000 +0000 +++ sane-backends-1.0.23/backend/canon_dr.h 2012-07-01 02:00:44.000000000 +0000 @@ -153,7 +153,7 @@ int brightness_steps; int threshold_steps; int contrast_steps; - int Bpl_mod; /* modulus of scanline byte width */ + int ppl_mod; /* modulus of scanline width */ /* the scan size in 1/1200th inches, NOT basic_units or sane units */ int min_x; @@ -177,6 +177,7 @@ int has_buffer; int has_df; int has_btc; + int can_read_panel; int can_write_panel; int rgb_format; /* meaning unknown */ int padding; /* meaning unknown */ @@ -193,6 +194,7 @@ int duplex_interlace; /* different models interlace sides differently */ int jpeg_interlace; /* different models interlace jpeg sides differently */ int duplex_offset; /* number of lines of padding added to front (1/1200)*/ + int duplex_offset_side; /* padding added to front or back? */ int sw_lut; /* no hardware brightness/contrast support */ int bg_color; /* needed to fill in after rotation */ @@ -431,14 +433,6 @@ # define PATH_MAX 1024 #endif -#ifndef PATH_SEP -#ifdef HAVE_OS2_H -# define PATH_SEP '\\' -#else -# define PATH_SEP '/' -#endif -#endif - /* ------------------------------------------------------------------------- */ SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize); @@ -560,7 +554,7 @@ SANE_Status rotateOnCenter (struct scanner *s, int side, int centerX, int centerY, double slope); -SANE_Status getLine (int height, int width, int * buff, +static SANE_Status getLine (int height, int width, int * buff, int slopes, double minSlope, double maxSlope, int offsets, int minOffset, int maxOffset, double * finSlope, int * finOffset, int * finDensity); diff -Nru sane-backends-1.0.22/backend/cardscan.h sane-backends-1.0.23/backend/cardscan.h --- sane-backends-1.0.22/backend/cardscan.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/cardscan.h 2012-07-01 02:00:44.000000000 +0000 @@ -133,14 +133,6 @@ # define PATH_MAX 1024 #endif -#ifndef PATH_SEP -#ifdef HAVE_OS2_H -# define PATH_SEP '\\' -#else -# define PATH_SEP '/' -#endif -#endif - /* ------------------------------------------------------------------------- */ SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize); diff -Nru sane-backends-1.0.22/backend/dll.c sane-backends-1.0.23/backend/dll.c --- sane-backends-1.0.22/backend/dll.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/dll.c 2012-08-10 00:33:29.000000000 +0000 @@ -108,11 +108,7 @@ # define PATH_MAX 1024 #endif -#if defined(HAVE_OS2_H) -# define DIR_SEP ";" -#elif defined(__CYGWIN__) -# define DIR_SEP ":" -#elif defined(HAVE_WINDOWS_H) +#if defined(_WIN32) || defined(HAVE_OS2_H) # define DIR_SEP ";" #else # define DIR_SEP ":" @@ -172,19 +168,19 @@ #define BE_ENTRY(be,func) sane_##be##_##func #define PRELOAD_DECL(name) \ - extern void *BE_ENTRY(name,init) (SANE_Int *, SANE_Auth_Callback); \ - extern void *BE_ENTRY(name,exit) (void); \ - extern void *BE_ENTRY(name,get_devices) (const SANE_Device ***, SANE_Bool); \ - extern void *BE_ENTRY(name,open) (SANE_String_Const, SANE_Handle *); \ - extern void *BE_ENTRY(name,close) (SANE_Handle); \ - extern void *BE_ENTRY(name,get_option_descriptor) (SANE_Handle, SANE_Int); \ - extern void *BE_ENTRY(name,control_option) (SANE_Handle, SANE_Int, SANE_Action, void *, SANE_Int *); \ - extern void *BE_ENTRY(name,get_parameters) (SANE_Handle, SANE_Parameters *); \ - extern void *BE_ENTRY(name,start) (SANE_Handle); \ - extern void *BE_ENTRY(name,read) (SANE_Handle, SANE_Byte *, SANE_Int, SANE_Int *); \ - extern void *BE_ENTRY(name,cancel) (SANE_Handle); \ - extern void *BE_ENTRY(name,set_io_mode) (SANE_Handle, SANE_Bool); \ - extern void *BE_ENTRY(name,get_select_fd) (SANE_Handle, SANE_Int *); + extern SANE_Status BE_ENTRY(name,init) (SANE_Int *, SANE_Auth_Callback); \ + extern void BE_ENTRY(name,exit) (void); \ + extern SANE_Status BE_ENTRY(name,get_devices) (const SANE_Device ***, SANE_Bool); \ + extern SANE_Status BE_ENTRY(name,open) (SANE_String_Const, SANE_Handle *); \ + extern void BE_ENTRY(name,close) (SANE_Handle); \ + extern const SANE_Option_Descriptor *BE_ENTRY(name,get_option_descriptor) (SANE_Handle, SANE_Int); \ + extern SANE_Status BE_ENTRY(name,control_option) (SANE_Handle, SANE_Int, SANE_Action, void *, SANE_Int *); \ + extern SANE_Status BE_ENTRY(name,get_parameters) (SANE_Handle, SANE_Parameters *); \ + extern SANE_Status BE_ENTRY(name,start) (SANE_Handle); \ + extern SANE_Status BE_ENTRY(name,read) (SANE_Handle, SANE_Byte *, SANE_Int, SANE_Int *); \ + extern void BE_ENTRY(name,cancel) (SANE_Handle); \ + extern SANE_Status BE_ENTRY(name,set_io_mode) (SANE_Handle, SANE_Bool); \ + extern SANE_Status BE_ENTRY(name,get_select_fd) (SANE_Handle, SANE_Int *); #define PRELOAD_DEFN(name) \ { \ @@ -211,7 +207,13 @@ } #ifndef __BEOS__ +#ifdef ENABLE_PRELOAD #include "dll-preload.h" +#else +static struct backend preloaded_backends[] = { + { 0, 0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }} +}; +#endif #endif struct meta_scanner diff -Nru sane-backends-1.0.22/backend/dll.conf.in sane-backends-1.0.23/backend/dll.conf.in --- sane-backends-1.0.22/backend/dll.conf.in 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/dll.conf.in 2012-07-01 02:00:44.000000000 +0000 @@ -39,6 +39,7 @@ hs2p ibm kodak +kodakaio kvs1025 kvs20xx leo diff -Nru sane-backends-1.0.22/backend/epjitsu.h sane-backends-1.0.23/backend/epjitsu.h --- sane-backends-1.0.22/backend/epjitsu.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/epjitsu.h 2012-07-25 00:02:39.000000000 +0000 @@ -292,14 +292,6 @@ # define PATH_MAX 1024 #endif -#ifndef PATH_SEP -#ifdef HAVE_OS2_H -# define PATH_SEP '\\' -#else -# define PATH_SEP '/' -#endif -#endif - /* ------------------------------------------------------------------------- */ SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize); diff -Nru sane-backends-1.0.22/backend/epson2-commands.c sane-backends-1.0.23/backend/epson2-commands.c --- sane-backends-1.0.22/backend/epson2-commands.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/epson2-commands.c 2011-11-21 20:17:48.000000000 +0000 @@ -21,6 +21,7 @@ #include #include +#include #include "epson2.h" #include "epson2-io.h" diff -Nru sane-backends-1.0.22/backend/epson2-ops.c sane-backends-1.0.23/backend/epson2-ops.c --- sane-backends-1.0.22/backend/epson2-ops.c 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/backend/epson2-ops.c 2012-07-01 02:00:44.000000000 +0000 @@ -20,9 +20,9 @@ #include "sane/config.h" #include /* sleep */ - +#ifdef HAVE_SYS_SELECT_H #include - +#endif #include "byteorder.h" @@ -100,6 +100,7 @@ #define FBF_STR SANE_I18N("Flatbed") #define TPU_STR SANE_I18N("Transparency Unit") +#define TP2_STR SANE_I18N("TPU8x10") #define ADF_STR SANE_I18N("Automatic Document Feeder") /* @@ -228,17 +229,27 @@ } } - /* the device is more capable, integrating resolution list */ - if (dev->dpi_range.max > dev->res_list[dev->res_list_size - 1]) { + /* try to expand the resolution list where appropriate */ + + int last = dev->res_list[dev->res_list_size - 1]; + + DBG(1, "highest available resolution: %d\n", last); + + if (dev->optical_res > last) { + DBG(1, "adding optical resolution (%d)\n", dev->optical_res); + e2_add_resolution(dev, dev->optical_res); + } + + if (dev->dpi_range.max > last && dev->dpi_range.max != dev->optical_res) { - int val = dev->res_list[dev->res_list_size - 1] * 2; + int val = last + last; DBG(1, "integrating resolution list (%d-%d)\n", val, dev->dpi_range.max); while (val <= dev->dpi_range.max) { e2_add_resolution(dev, val); - val *= 2; + val += last; } } @@ -251,14 +262,16 @@ dev->resolution_list = malloc((dev->res_list_size + 1) * sizeof(SANE_Word)); - if (dev->resolution_list == NULL) { + 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; @@ -438,6 +451,27 @@ } void +e2_set_tpu2_area(struct Epson_Scanner *s, int x, int y, int unit) +{ + struct Epson_Device *dev = s->hw; + + dev->tpu2_x_range.min = 0; + dev->tpu2_x_range.max = SANE_FIX(x * MM_PER_INCH / unit); + dev->tpu2_x_range.quant = 0; + + dev->tpu2_y_range.min = 0; + dev->tpu2_y_range.max = SANE_FIX(y * MM_PER_INCH / unit); + dev->tpu2_y_range.quant = 0; + + DBG(5, "%s: %f,%f %f,%f %d [mm]\n", + __func__, + SANE_UNFIX(dev->tpu2_x_range.min), + SANE_UNFIX(dev->tpu2_y_range.min), + SANE_UNFIX(dev->tpu2_x_range.max), + SANE_UNFIX(dev->tpu2_y_range.max), unit); +} + +void e2_add_depth(Epson_Device * dev, SANE_Word depth) { if (depth > dev->maxDepth) @@ -547,10 +581,9 @@ * 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->cmd->request_extended_status && !dev->cmd->request_extended_identity) { + if (dev->cmd->request_extended_status && dev->connection != SANE_EPSON_NET) { unsigned char *es; size_t es_len; @@ -670,19 +703,6 @@ } /* 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]), @@ -692,6 +712,18 @@ dev->TPU = SANE_TRUE; } + /* TPU2 */ + if (e2_model(s, "GT-X800") || e2_model(s, "GT-X900")) { + if (le32atoh(&buf[68]) > 0 ) { + e2_set_tpu2_area(s, + le32atoh(&buf[68]), + le32atoh(&buf[72]), + dev->optical_res); + + *source_list_add++ = TP2_STR; + } + } + *source_list_add = NULL; /* add end marker to source list */ } else { @@ -879,6 +911,16 @@ if (s->hw->use_extension && s->hw->TPU2) extensionCtrl = 5; + if (s->val[OPT_MODE].w == MODE_INFRARED) + /* only infrared in TPU mode (NOT in TPU2 or flatbeth) + * XXX investigate this ... only tested on GT-X800 + */ + + if (extensionCtrl == 1) /* test for TPU */ + extensionCtrl = 3; + else + return SANE_STATUS_UNSUPPORTED; + /* ESC e */ buf[26] = extensionCtrl; @@ -1220,7 +1262,7 @@ DBG(1, "max req size: %d, line count: %d\n", maxreq, s->lcount); /* XXX investigate this */ - if (s->lcount < 3 && e2_model(s, "GT-X800")) { + if (s->lcount < 3 && (e2_model(s, "GT-X800") || e2_model(s, "GT-X900"))) { s->lcount = 21; DBG(17, "%s: set lcount = %i bigger than sanei_scsi_max_request_size\n", diff -Nru sane-backends-1.0.22/backend/epson2.c sane-backends-1.0.23/backend/epson2.c --- sane-backends-1.0.22/backend/epson2.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/epson2.c 2012-07-01 02:00:44.000000000 +0000 @@ -57,6 +57,10 @@ #include #include #include +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif #include "sane/saneopts.h" #include "sane/sanei_scsi.h" @@ -109,6 +113,7 @@ #define FBF_STR SANE_I18N("Flatbed") #define TPU_STR SANE_I18N("Transparency Unit") +#define TPU_STR2 SANE_I18N("TPU8x10") #define ADF_STR SANE_I18N("Automatic Document Feeder") /* @@ -389,8 +394,6 @@ struct timeval to; - long save_flags, flags; - status = sanei_udp_open_broadcast(&fd); if (status != SANE_STATUS_GOOD) return; @@ -405,9 +408,7 @@ FD_ZERO(&rfds); FD_SET(fd, &rfds); - save_flags = flags = fcntl(fd, F_GETFL, 0L); - flags |= O_NONBLOCK; - fcntl(fd, F_SETFL, flags); + sanei_udp_set_nonblock(fd, SANE_TRUE); 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); @@ -417,7 +418,6 @@ attach_one_net(ip); } } - fcntl(fd, F_SETFL, save_flags); DBG(5, "%s, end\n", __func__); @@ -967,7 +967,7 @@ s->val[OPT_MODE].w = 0; /* Binary */ /* disable infrared on unsupported scanners */ - if (!e2_model(s, "GT-X800") && !e2_model(s, "GT-X700")) + if (!e2_model(s, "GT-X800") && !e2_model(s, "GT-X700") && !e2_model(s, "GT-X900")) mode_list[MODE_INFRARED] = NULL; /* bit depth */ @@ -1743,9 +1743,17 @@ DBG(1, "adf activated (%d %d)\n", s->hw->use_extension, s->hw->duplex); - } else if (strcmp(TPU_STR, value) == 0) { - s->hw->x_range = &s->hw->tpu_x_range; - s->hw->y_range = &s->hw->tpu_y_range; + } else if (strcmp(TPU_STR, value) == 0 || strcmp(TPU_STR2, value) == 0) { + if (strcmp(TPU_STR, value) == 0) { + s->hw->x_range = &s->hw->tpu_x_range; + s->hw->y_range = &s->hw->tpu_y_range; + s->hw->TPU2 = SANE_FALSE; + } + if (strcmp(TPU_STR2, value) == 0) { + s->hw->x_range = &s->hw->tpu2_x_range; + s->hw->y_range = &s->hw->tpu2_y_range; + s->hw->TPU2 = SANE_TRUE; + } s->hw->use_extension = SANE_TRUE; /* enable film type option only if the scanner supports it */ diff -Nru sane-backends-1.0.22/backend/epson2.h sane-backends-1.0.23/backend/epson2.h --- sane-backends-1.0.22/backend/epson2.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/epson2.h 2012-07-01 02:00:44.000000000 +0000 @@ -22,7 +22,9 @@ #define BACKEND_NAME epson2 #define DEBUG_NOT_STATIC +#ifdef HAVE_SYS_IOCTL_H #include +#endif #ifdef HAVE_STDDEF_H #include @@ -313,15 +315,17 @@ 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 */ + SANE_Range tpu2_x_range; /* transparency unit 2 x range */ + SANE_Range tpu2_y_range; /* transparency unit 2 y range */ Epson_Connection_Type connection; diff -Nru sane-backends-1.0.22/backend/epson_usb.c sane-backends-1.0.23/backend/epson_usb.c --- sane-backends-1.0.22/backend/epson_usb.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/epson_usb.c 2011-10-19 00:43:00.000000000 +0000 @@ -81,6 +81,7 @@ 0x851, /* Stylus NX410 Series, Stylus SX410 Series, Stylus TX410 Series */ 0x854, /* ME OFFICE 650FN Series, Stylus Office BX310FN Series, Stylus Office TX510FN Series, WorkForce 310 Series */ 0x856, /* PX-502A, Stylus NX510 Series, Stylus SX510W Series, Stylus TX550W Series */ + 0x85c, /* Stylus SX125 */ 0 /* last entry - this is used for devices that are specified in the config file as "usb " */ }; diff -Nru sane-backends-1.0.22/backend/fujitsu-scsi.h sane-backends-1.0.23/backend/fujitsu-scsi.h --- sane-backends-1.0.22/backend/fujitsu-scsi.h 2010-12-07 03:20:01.000000000 +0000 +++ sane-backends-1.0.23/backend/fujitsu-scsi.h 2012-07-01 02:00:44.000000000 +0000 @@ -125,7 +125,7 @@ #define INQUIRY_len 6 #define INQUIRY_std_len 96 -#define INQUIRY_vpd_len 104 +#define INQUIRY_vpd_len 204 /* unlikely maximum value */ #define set_IN_evpd(icb, val) setbitfield(icb + 1, 1, 0, val) #define set_IN_page_code(icb, val) icb[0x02]=val @@ -205,7 +205,9 @@ #define get_IN_endorser_f(in) getbitfield(in+0x20, 1, 0) #define get_IN_mp_stacker(in) getbitfield(in+0x21, 1, 7) -#define get_IN_unused(in) getbitfield(in+0x21, 0x07, 4) +#define get_IN_prepick(in) getbitfield(in+0x21, 1, 6) +#define get_IN_mf_detect(in) getbitfield(in+0x21, 1, 5) +#define get_IN_paperprot(in) getbitfield(in+0x21, 1, 4) #define get_IN_adbits(in) getbitfield(in+0x21, 0x0f, 0) #define get_IN_buffer_bytes(in) getnbyte(in + 0x22, 4) @@ -245,7 +247,10 @@ #define get_IN_has_cmd_subwindow(in) getbitfield(in+0x2b, 1, 0) #define get_IN_has_cmd_endorser(in) getbitfield(in+0x2b, 1, 1) #define get_IN_has_cmd_hw_status(in) getbitfield(in+0x2b, 1, 2) +#define get_IN_has_cmd_hw_status_2(in) getbitfield(in+0x2b, 1, 3) +#define get_IN_has_cmd_hw_status_3(in) getbitfield(in+0x2b, 1, 4) #define get_IN_has_cmd_scanner_ctl(in) getbitfield(in+0x31, 1, 1) +#define get_IN_has_cmd_device_restart(in) getbitfield(in+0x31, 1, 2) #define get_IN_brightness_steps(in) getnbyte(in+0x52, 1) #define get_IN_threshold_steps(in) getnbyte(in+0x53, 1) @@ -270,7 +275,7 @@ #define get_IN_ipc_diffusion(in) getbitfield(in+0x59, 1, 6) #define get_IN_ipc_ipc3(in) getbitfield(in+0x59, 1, 5) #define get_IN_ipc_rotation(in) getbitfield(in+0x59, 1, 4) -#define get_IN_ipc_hybrid_clip_deskew(in) getbitfield(in+0x59, 1, 3) +#define get_IN_ipc_hybrid_crop_deskew(in) getbitfield(in+0x59, 1, 3) #define get_IN_ipc_ipc2_byte67(in) getbitfield(in+0x59, 1, 0) #define get_IN_compression_MH(in) getbitfield(in+0x5a, 1, 7) @@ -324,13 +329,51 @@ #define get_IN_dropout_white(in) getbitfield(in+0x6a, 1, 7) #define get_IN_skew_check(in) getbitfield(in+0x6d, 1, 7) +#define get_IN_new_fd_roll(in) getbitfield(in+0x6d, 1, 6) + +#define get_IN_evpd_len(in) getnbyte(in + 0x6f, 1) + +#define get_IN_paper_count(in) getbitfield(in+0x70, 1, 7) +#define get_IN_paper_number(in) getbitfield(in+0x70, 1, 6) +#define get_IN_ext_send_to(in) getbitfield(in+0x70, 1, 5) +#define get_IN_staple_det(in) getbitfield(in+0x70, 1, 4) +#define get_IN_pause_host(in) getbitfield(in+0x70, 1, 3) +#define get_IN_pause_panel(in) getbitfield(in+0x70, 1, 2) +#define get_IN_pause_conf(in) getbitfield(in+0x70, 1, 1) +#define get_IN_hq_print(in) getbitfield(in+0x70, 1, 0) + +#define get_IN_ext_GHS_len(in) getnbyte(in + 0x71, 1) + +#define get_IN_smbc_func(in) getbitfield(in+0x72, 1, 7) +#define get_IN_imprint_chk_b(in) getbitfield(in+0x72, 1, 6) +#define get_IN_imprint_chk_f(in) getbitfield(in+0x72, 1, 5) +#define get_IN_force_w_bg(in) getbitfield(in+0x72, 1, 4) +#define get_IN_mf_recover_lvl(in) getbitfield(in+0x72, 0x0f, 0) + +#define get_IN_first_read_time(in) getbitfield(in+0x73, 1, 7) +#define get_IN_div_scanning(in) getbitfield(in+0x73, 1, 6) +#define get_IN_start_job(in) getbitfield(in+0x73, 1, 5) +#define get_IN_lifetime_log(in) getbitfield(in+0x73, 1, 4) +#define get_IN_imff_save_rest(in) getbitfield(in+0x73, 1, 3) +#define get_IN_wide_scsi_type(in) getbitfield(in+0x73, 0x07, 0) + +#define get_IN_lut_hybrid_crop(in) getbitfield(in+0x74, 1, 7) +#define get_IN_over_under_amt(in) getbitfield(in+0x74, 1, 6) +#define get_IN_rgb_lut(in) getbitfield(in+0x74, 1, 5) +#define get_IN_num_lut_dl(in) getbitfield(in+0x74, 0x0f, 0) + +/*byte 75 is poorly documented*/ + +#define get_IN_sync_next_feed(in) getbitfield(in+0x76, 0x07, 0) /* some scanners need evpd inquiry data manipulated */ -#define set_IN_page_length(in,val) in[0x04]=val +#define set_IN_page_length(in,val) in[0x04]=val /* ==================================================================== */ /* page codes used by mode_sense and mode_select */ -#define MS_pc_unknown 0x32 /* unknown mode? */ +#define MS_pc_patch 0x2e /* Patch code scanning */ +#define MS_pc_counter 0x2f /* Page number and counter reset */ +#define MS_pc_autocolor 0x32 /* Automatic color detection */ #define MS_pc_prepick 0x33 /* Prepick next adf page */ #define MS_pc_sleep 0x34 /* Sleep mode */ #define MS_pc_duplex 0x35 /* ADF duplex transfer mode */ @@ -382,6 +425,9 @@ #define MSEL_df_diff_10MM 1 #define MSEL_df_diff_15MM 2 #define MSEL_df_diff_20MM 3 +#define set_MSEL_df_paperprot(sb, val) setbitfield(sb + 3, 3, 6, val) +#define set_MSEL_df_stapledet(sb, val) setbitfield(sb + 3, 3, 4, val) +#define set_MSEL_df_recovery(sb, val) setbitfield(sb + 3, 3, 2, val) #define set_MSEL_dropout_front(sb, val) setbitfield(sb + 0x02, 0x0f, 0, val) #define set_MSEL_dropout_back(sb, val) setbitfield(sb + 0x02, 0x0f, 4, val) @@ -397,11 +443,23 @@ #define set_MSEL_prepick(sb, val) setbitfield(sb + 0x02, 0x03, 6, val) /*more automatic stuff with this one...*/ -#define set_MSEL_awd(sb, val) setbitfield(sb + 0x02, 0x01, 7, val) -#define set_MSEL_ald(sb, val) setbitfield(sb + 0x03, 0x01, 7, val) -#define set_MSEL_overscan(sb, val) setbitfield(sb + 0x05, 0x03, 6, val) +#define set_MSEL_awd(sb, val) setbitfield(sb + 0x02, 0x01, 7, val) +#define set_MSEL_w_wfill(sb, val) setbitfield(sb + 0x02, 0x01, 6, val) +#define set_MSEL_req_driv_lut(sb, val) setbitfield(sb + 0x02, 0x01, 1, val) +#define set_MSEL_req_driv_crop(sb, val) setbitfield(sb + 0x02, 0x01, 0, val) + +#define set_MSEL_ald(sb, val) setbitfield(sb + 0x03, 0x01, 7, val) +#define set_MSEL_l_wfill(sb, val) setbitfield(sb + 0x03, 0x01, 6, val) + +#define set_MSEL_deskew(sb, val) setbitfield(sb + 0x04, 0x01, 7, val) + +#define set_MSEL_overscan(sb, val) setbitfield(sb + 0x05, 0x03, 6, val) +#define set_MSEL_overcrop(sb, val) setbitfield(sb + 0x05, 0x01, 5, val) +#define set_MSEL_undercrop(sb, val) setbitfield(sb + 0x05, 0x01, 4, val) + +#define set_MSEL_over_under_amt(sb, val) sb[0x06]=val -/*buffer, prepick, overscan use these*/ +/*buffer, prepick, overscan and df use these*/ #define MSEL_DEFAULT 0 #define MSEL_OFF 2 #define MSEL_ON 3 @@ -505,11 +563,14 @@ #define set_R_window_id(sb, val) sb[0x05] = val #define set_R_xfer_length(sb, val) putnbyte(sb + 0x06, val, 3) -#define R_PSIZE_len 0x18 +#define R_PSIZE_len 0x20 #define get_PSIZE_num_x(in) getnbyte(in + 0x00, 4) #define get_PSIZE_num_y(in) getnbyte(in + 0x04, 4) -#define get_PSIZE_paper_w(in) getnbyte(in + 0x08, 4) -#define get_PSIZE_paper_l(in) getnbyte(in + 0x0C, 4) +#define get_PSIZE_paper_w(in) getnbyte(in + 0x08, 4) +#define get_PSIZE_paper_l(in) getnbyte(in + 0x0C, 4) +#define get_PSIZE_req_driv_crop(in) getbitfield(in + 0x10, 1, 7) +#define get_PSIZE_req_driv_lut(in) getbitfield(in + 0x10, 1, 6) +#define get_PSIZE_req_driv_valid(in) getbitfield(in + 0x10, 1, 0) /* ==================================================================== */ /* SEND */ diff -Nru sane-backends-1.0.22/backend/fujitsu.c sane-backends-1.0.23/backend/fujitsu.c --- sane-backends-1.0.22/backend/fujitsu.c 2011-01-31 13:31:34.000000000 +0000 +++ sane-backends-1.0.23/backend/fujitsu.c 2012-07-01 02:00:44.000000000 +0000 @@ -6,7 +6,7 @@ Copyright (C) 2000 Randolph Bentson Copyright (C) 2001 Frederik Ramm Copyright (C) 2001-2004 Oliver Schirrmeister - Copyright (C) 2003-2010 m. allan noah + Copyright (C) 2003-2011 m. allan noah JPEG output and low memory usage support funded by: Archivista GmbH, www.archivista.ch @@ -483,6 +483,36 @@ - fi-6110 does not support bgcolor or prepick v106 2011-01-30, MAN (SANE 1.0.22) - dont call mode_select with a page code the scanner does not support + v107 2011-11-03, MAN + - M3091 does not support scanner_control(adf) + - Correct buffer overflow in read_from_3091duplex() + - sane_read() now always calls read_from_*() + - read_from_*() are callable when there is no data, and read to eof + - sane_read() will keep alternate duplex reads to similar length + - Added debugging statements + - Corrected comments + - Updated Copyright + v108 2011-11-21, MAN + - merged x/y resolution options + - moved page width/height to start of geometry group + - use mode to pick resolution list v/s range + - improved M3091 resolution choices + v109 2011-12-20, MAN + - added some MS and INQ information + - increased default buffer size for later machines in config file + - renamed new fi-6xx0Z models + v110 2012-05-09, MAN + - correct max_y_fb for fi-62x0 series + - add must_fully_buffer helper routine + - add hwdeskewcrop option, with fallback to software versions + - add 'actual' param to get_pixelsize for post-scan + - add recent model VPD params + - only set params->lines = -1 when using ald without buffering + - fix bugs in background color when using software deskew + v111 2012-05-10, MAN + - call send_* and mode_select_* from sane_start + - split read payloads into new debug level + - add paper-protect, staple-detect and df-recovery options SANE FLOW DIAGRAM @@ -532,7 +562,7 @@ #include "fujitsu.h" #define DEBUG 1 -#define BUILD 106 +#define BUILD 111 /* values for SANE_DEBUG_FUJITSU env var: - errors 5 @@ -540,7 +570,8 @@ - function detail 15 - get/setopt cmds 20 - scsi/usb trace 25 - - scsi/usb detail 30 + - scsi/usb writes 30 + - scsi/usb reads 31 - useless noise 35 */ @@ -1192,11 +1223,11 @@ s->basic_y_res = get_IN_basic_y_res (in); DBG (15, " basic y res: %d dpi\n",s->basic_y_res); - s->step_x_res = get_IN_step_x_res (in); - DBG (15, " step x res: %d dpi\n", s->step_x_res); + s->step_x_res[MODE_LINEART] = get_IN_step_x_res (in); + DBG (15, " step x res: %d dpi\n", s->step_x_res[MODE_LINEART]); - s->step_y_res = get_IN_step_y_res (in); - DBG (15, " step y res: %d dpi\n", s->step_y_res); + s->step_y_res[MODE_LINEART] = get_IN_step_y_res (in); + DBG (15, " step y res: %d dpi\n", s->step_y_res[MODE_LINEART]); s->max_x_res = get_IN_max_x_res (in); DBG (15, " max x res: %d dpi\n", s->max_x_res); @@ -1211,53 +1242,53 @@ DBG (15, " min y res: %d dpi\n", s->min_y_res); /* some scanners list B&W resolutions. */ - s->std_res_60 = get_IN_std_res_60 (in); - DBG (15, " 60 dpi: %d\n", s->std_res_60); + s->std_res[0] = get_IN_std_res_60 (in); + DBG (15, " 60 dpi: %d\n", s->std_res[0]); - s->std_res_75 = get_IN_std_res_75 (in); - DBG (15, " 75 dpi: %d\n", s->std_res_75); + s->std_res[1] = get_IN_std_res_75 (in); + DBG (15, " 75 dpi: %d\n", s->std_res[1]); - s->std_res_100 = get_IN_std_res_100 (in); - DBG (15, " 100 dpi: %d\n", s->std_res_100); + s->std_res[2] = get_IN_std_res_100 (in); + DBG (15, " 100 dpi: %d\n", s->std_res[2]); - s->std_res_120 = get_IN_std_res_120 (in); - DBG (15, " 120 dpi: %d\n", s->std_res_120); + s->std_res[3] = get_IN_std_res_120 (in); + DBG (15, " 120 dpi: %d\n", s->std_res[3]); - s->std_res_150 = get_IN_std_res_150 (in); - DBG (15, " 150 dpi: %d\n", s->std_res_150); + s->std_res[4] = get_IN_std_res_150 (in); + DBG (15, " 150 dpi: %d\n", s->std_res[4]); - s->std_res_160 = get_IN_std_res_160 (in); - DBG (15, " 160 dpi: %d\n", s->std_res_160); + s->std_res[5] = get_IN_std_res_160 (in); + DBG (15, " 160 dpi: %d\n", s->std_res[5]); - s->std_res_180 = get_IN_std_res_180 (in); - DBG (15, " 180 dpi: %d\n", s->std_res_180); + s->std_res[6] = get_IN_std_res_180 (in); + DBG (15, " 180 dpi: %d\n", s->std_res[6]); - s->std_res_200 = get_IN_std_res_200 (in); - DBG (15, " 200 dpi: %d\n", s->std_res_200); + s->std_res[7] = get_IN_std_res_200 (in); + DBG (15, " 200 dpi: %d\n", s->std_res[7]); - s->std_res_240 = get_IN_std_res_240 (in); - DBG (15, " 240 dpi: %d\n", s->std_res_240); + s->std_res[8] = get_IN_std_res_240 (in); + DBG (15, " 240 dpi: %d\n", s->std_res[8]); - s->std_res_300 = get_IN_std_res_300 (in); - DBG (15, " 300 dpi: %d\n", s->std_res_300); + s->std_res[9] = get_IN_std_res_300 (in); + DBG (15, " 300 dpi: %d\n", s->std_res[9]); - s->std_res_320 = get_IN_std_res_320 (in); - DBG (15, " 320 dpi: %d\n", s->std_res_320); + s->std_res[10] = get_IN_std_res_320 (in); + DBG (15, " 320 dpi: %d\n", s->std_res[10]); - s->std_res_400 = get_IN_std_res_400 (in); - DBG (15, " 400 dpi: %d\n", s->std_res_400); + s->std_res[11] = get_IN_std_res_400 (in); + DBG (15, " 400 dpi: %d\n", s->std_res[11]); - s->std_res_480 = get_IN_std_res_480 (in); - DBG (15, " 480 dpi: %d\n", s->std_res_480); + s->std_res[12] = get_IN_std_res_480 (in); + DBG (15, " 480 dpi: %d\n", s->std_res[12]); - s->std_res_600 = get_IN_std_res_600 (in); - DBG (15, " 600 dpi: %d\n", s->std_res_600); + s->std_res[13] = get_IN_std_res_600 (in); + DBG (15, " 600 dpi: %d\n", s->std_res[13]); - s->std_res_800 = get_IN_std_res_800 (in); - DBG (15, " 800 dpi: %d\n", s->std_res_800); + s->std_res[14] = get_IN_std_res_800 (in); + DBG (15, " 800 dpi: %d\n", s->std_res[14]); - s->std_res_1200 = get_IN_std_res_1200 (in); - DBG (15, " 1200 dpi: %d\n", s->std_res_1200); + s->std_res[15] = get_IN_std_res_1200 (in); + DBG (15, " 1200 dpi: %d\n", s->std_res[15]); /* maximum window width and length are reported in basic units.*/ s->max_x_basic = get_IN_window_width(in); @@ -1317,7 +1348,11 @@ DBG (15, " multi-purpose stacker: %d\n", get_IN_mp_stacker(in)); - DBG (15, " unused caps: %d\n", get_IN_unused(in)); + DBG (15, " prepick: %d\n", get_IN_prepick(in)); + DBG (15, " mf detect: %d\n", get_IN_mf_detect(in)); + + s->has_paper_protect = get_IN_paperprot(in); + DBG (15, " paper protection: %d\n", s->has_paper_protect); s->adbits = get_IN_adbits(in); DBG (15, " A/D bits: %d\n",s->adbits); @@ -1325,6 +1360,8 @@ s->buffer_bytes = get_IN_buffer_bytes(in); DBG (15, " buffer bytes: %d\n",s->buffer_bytes); + DBG (15, "Standard commands\n"); + /* std scsi command support byte 26*/ s->has_cmd_msen10 = get_IN_has_cmd_msen10(in); DBG (15, " mode_sense_10 cmd: %d\n", s->has_cmd_msen10); @@ -1409,6 +1446,8 @@ /* vendor added scsi command support */ /* FIXME: there are more of these... */ + DBG (15, "Vendor commands\n"); + s->has_cmd_subwindow = get_IN_has_cmd_subwindow(in); DBG (15, " subwindow cmd: %d\n", s->has_cmd_subwindow); @@ -1418,9 +1457,18 @@ s->has_cmd_hw_status = get_IN_has_cmd_hw_status (in); DBG (15, " hardware status cmd: %d\n", s->has_cmd_hw_status); + s->has_cmd_hw_status_2 = get_IN_has_cmd_hw_status_2 (in); + DBG (15, " hardware status 2 cmd: %d\n", s->has_cmd_hw_status_2); + + s->has_cmd_hw_status_3 = get_IN_has_cmd_hw_status_3 (in); + DBG (15, " hardware status 3 cmd: %d\n", s->has_cmd_hw_status_3); + s->has_cmd_scanner_ctl = get_IN_has_cmd_scanner_ctl(in); DBG (15, " scanner control cmd: %d\n", s->has_cmd_scanner_ctl); + s->has_cmd_device_restart = get_IN_has_cmd_device_restart(in); + DBG (15, " device restart cmd: %d\n", s->has_cmd_device_restart); + /* get threshold, brightness and contrast ranges. */ s->brightness_steps = get_IN_brightness_steps(in); DBG (15, " brightness steps: %d\n", s->brightness_steps); @@ -1482,6 +1530,11 @@ s->has_rotation = get_IN_ipc_rotation (in); DBG (15, " rotation: %d\n", s->has_rotation); + s->has_hybrid_crop_deskew = get_IN_ipc_hybrid_crop_deskew(in); + DBG (15, " hybrid crop deskew: %d\n", s->has_hybrid_crop_deskew); + + DBG (15, " ipc2 byte 67: %d\n", get_IN_ipc_ipc2_byte67(in)); + /* compression modes */ s->has_comp_MH = get_IN_compression_MH (in); DBG (15, " compression MH: %d\n", s->has_comp_MH); @@ -1509,23 +1562,23 @@ DBG (15, " compression JPG3: %d\n", s->has_comp_JPG3); /* FIXME: we dont store these? */ - DBG (15, " back endorser mech: %d\n", get_IN_endorser_b_mech(in)); - DBG (15, " back endorser stamp: %d\n", get_IN_endorser_b_stamp(in)); - DBG (15, " back endorser elec: %d\n", get_IN_endorser_b_elec(in)); - DBG (15, " endorser max id: %d\n", get_IN_endorser_max_id(in)); - - DBG (15, " front endorser mech: %d\n", get_IN_endorser_f_mech(in)); - DBG (15, " front endorser stamp: %d\n", get_IN_endorser_f_stamp(in)); - DBG (15, " front endorser elec: %d\n", get_IN_endorser_f_elec(in)); + DBG (15, " back endorser mech: %d\n", get_IN_endorser_b_mech(in)); + DBG (15, " back endorser stamp: %d\n", get_IN_endorser_b_stamp(in)); + DBG (15, " back endorser elec: %d\n", get_IN_endorser_b_elec(in)); + DBG (15, " endorser max id: %d\n", get_IN_endorser_max_id(in)); + + DBG (15, " front endorser mech: %d\n", get_IN_endorser_f_mech(in)); + DBG (15, " front endorser stamp: %d\n", get_IN_endorser_f_stamp(in)); + DBG (15, " front endorser elec: %d\n", get_IN_endorser_f_elec(in)); s->endorser_type_b = get_IN_endorser_b_type(in); - DBG (15, " back endorser type: %d\n", s->endorser_type_b); + DBG (15, " back endorser type: %d\n", s->endorser_type_b); s->endorser_type_f = get_IN_endorser_f_type(in); - DBG (15, " back endorser type: %d\n", s->endorser_type_f); + DBG (15, " back endorser type: %d\n", s->endorser_type_f); /*not all scanners go this far*/ - if (get_IN_page_length (in) > 0x5f) { + if (get_IN_page_length (in) >= 0x67-5) { DBG (15, " connection type: %d\n", get_IN_connection(in)); DBG (15, " endorser ext: %d\n", get_IN_endorser_type_ext(in)); @@ -1541,8 +1594,62 @@ DBG (15, " vertical overscan: %d\n", s->os_y_basic); } + if (get_IN_page_length (in) >= 0x70-5) { + DBG (15, " default bg adf b: %d\n", get_IN_default_bg_adf_b(in)); + DBG (15, " default bg adf f: %d\n", get_IN_default_bg_adf_f(in)); + DBG (15, " default bg fb: %d\n", get_IN_default_bg_fb(in)); + + DBG (15, " auto color: %d\n", get_IN_auto_color(in)); + DBG (15, " blank skip: %d\n", get_IN_blank_skip(in)); + DBG (15, " multi image: %d\n", get_IN_multi_image(in)); + DBG (15, " f b type indep: %d\n", get_IN_f_b_type_indep(in)); + DBG (15, " f b res indep: %d\n", get_IN_f_b_res_indep(in)); + + DBG (15, " dropout spec: %d\n", get_IN_dropout_spec(in)); + DBG (15, " dropout non: %d\n", get_IN_dropout_non(in)); + DBG (15, " dropout white: %d\n", get_IN_dropout_white(in)); + + DBG (15, " skew check: %d\n", get_IN_skew_check(in)); + DBG (15, " new feed roller: %d\n", get_IN_new_fd_roll(in)); + } + + if (get_IN_page_length (in) > 0x70-5) { + + DBG (15, " paper count: %d\n", get_IN_paper_count(in)); + DBG (15, " paper number: %d\n", get_IN_paper_number(in)); + DBG (15, " ext send to: %d\n", get_IN_ext_send_to(in)); + DBG (15, " staple det: %d\n", get_IN_staple_det(in)); + DBG (15, " pause host: %d\n", get_IN_pause_host(in)); + DBG (15, " pause panel: %d\n", get_IN_pause_panel(in)); + DBG (15, " pause conf: %d\n", get_IN_pause_conf(in)); + DBG (15, " hq print: %d\n", get_IN_hq_print(in)); + + DBG (15, " ext GHS len: %d\n", get_IN_ext_GHS_len(in)); + + DBG (15, " smbc func: %d\n", get_IN_smbc_func(in)); + DBG (15, " imprint chk b: %d\n", get_IN_imprint_chk_b(in)); + DBG (15, " imprint chk f: %d\n", get_IN_imprint_chk_f(in)); + DBG (15, " force w bg: %d\n", get_IN_force_w_bg(in)); + DBG (15, " mf recover lvl: %d\n", get_IN_mf_recover_lvl(in)); + + DBG (15, " first read time: %d\n", get_IN_first_read_time(in)); + DBG (15, " div scanning: %d\n", get_IN_div_scanning(in)); + DBG (15, " start job: %d\n", get_IN_start_job(in)); + DBG (15, " lifetime log: %d\n", get_IN_lifetime_log(in)); + DBG (15, " imff save rest: %d\n", get_IN_imff_save_rest(in)); + DBG (15, " wide scsi type: %d\n", get_IN_wide_scsi_type(in)); + + DBG (15, " lut hybrid crop: %d\n", get_IN_lut_hybrid_crop(in)); + DBG (15, " over under amt: %d\n", get_IN_over_under_amt(in)); + DBG (15, " rgb lut: %d\n", get_IN_rgb_lut(in)); + DBG (15, " num lut dl: %d\n", get_IN_num_lut_dl(in)); + + DBG (15, " sync next feed: %d\n", get_IN_sync_next_feed(in)); + } + ret = SANE_STATUS_GOOD; } + /*FIXME no vendor vpd, set some defaults? */ else{ DBG (5, "init_vpd: Your scanner supports only partial VPD?\n"); @@ -1593,8 +1700,8 @@ set_SCSI_opcode(cmd, MODE_SENSE_code); set_MSEN_xfer_length (cmd, inLen); - DBG (35, "init_ms: 32 unknown)\n"); - set_MSEN_pc(cmd, MS_pc_unknown); + DBG (35, "init_ms: autocolor\n"); + set_MSEN_pc(cmd, MS_pc_autocolor); ret = do_cmd ( s, 1, 0, cmd, cmdLen, @@ -1602,7 +1709,7 @@ in, &inLen ); if(ret == SANE_STATUS_GOOD){ - s->has_MS_unknown=1; + s->has_MS_autocolor=1; } DBG (35, "init_ms: prepick\n"); @@ -1750,7 +1857,7 @@ IF_DBG (DBG_LEVEL = oldDbg;) - DBG (15, " unknown: %d\n", s->has_MS_unknown); + DBG (15, " autocolor: %d\n", s->has_MS_autocolor); DBG (15, " prepick: %d\n", s->has_MS_prepick); DBG (15, " sleep: %d\n", s->has_MS_sleep); DBG (15, " duplex: %d\n", s->has_MS_duplex); @@ -1775,6 +1882,7 @@ static SANE_Status init_model (struct fujitsu *s) { + int i; DBG (10, "init_model: start\n"); @@ -1786,6 +1894,11 @@ s->has_vuid_color = 1; } + for(i=MODE_HALFTONE;i<=MODE_COLOR;i++){ + s->step_x_res[i] = s->step_x_res[MODE_LINEART]; + s->step_y_res[i] = s->step_y_res[MODE_LINEART]; + } + s->reverse_by_mode[MODE_LINEART] = 0; s->reverse_by_mode[MODE_HALFTONE] = 0; s->reverse_by_mode[MODE_GRAYSCALE] = 1; @@ -1853,6 +1966,20 @@ if (strstr (s->model_name, "M3092")) s->has_flatbed = 1; + /*actually does have res range in non-color modes */ + for(i=MODE_LINEART;istep_x_res[i] = 1; + s->step_y_res[i] = 1; + } + + /*but the color mode y list is very limited, only 75, 150, 300 (and 600)*/ + for(i=0;i<16;i++){ + s->std_res[i] = 0; + } + s->std_res[1] = 1; + s->std_res[4] = 1; + s->std_res[9] = 1; + /* weirdness */ s->has_vuid_3091 = 1; s->has_vuid_color = 0; @@ -1962,12 +2089,13 @@ s->ppl_mod_by_mode[MODE_COLOR] = 4; } + /* also includes the 'Z' models */ else if (strstr (s->model_name,"fi-6230") || strstr (s->model_name,"fi-6240")){ /* missing from vpd */ s->max_x_fb = 10488; - s->max_y_fb = 14173; + s->max_y_fb = 14032; /* some scanners can be slightly more? */ } else if (strstr (s->model_name,"S1500") @@ -1977,6 +2105,13 @@ s->has_MS_prepick=0; } + else if (strstr (s->model_name,"fi-6800") + || strstr (s->model_name,"fi-5900")){ /* guessing this scanner too */ + /* missing from vpd */ + s->has_staple_detect=1; /* may not actually work? */ + s->has_df_recovery=1; + } + DBG (10, "init_model: finish\n"); return SANE_STATUS_GOOD; @@ -2323,7 +2458,7 @@ sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) { struct fujitsu *s = handle; - int i; + int i,j; SANE_Option_Descriptor *opt = &s->opt[option]; DBG (20, "sane_get_option_descriptor: %d\n", option); @@ -2395,151 +2530,41 @@ opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; } - /* x resolution */ + /* resolution */ /* some scanners only support fixed res * build a list of possible choices */ - if(option==OPT_X_RES){ - i=0; - if(s->std_res_60 && s->max_x_res >= 60 && s->min_x_res <= 60){ - s->x_res_list[++i] = 60; - } - if(s->std_res_75 && s->max_x_res >= 75 && s->min_x_res <= 75){ - s->x_res_list[++i] = 75; - } - if(s->std_res_100 && s->max_x_res >= 100 && s->min_x_res <= 100){ - s->x_res_list[++i] = 100; - } - if(s->std_res_120 && s->max_x_res >= 120 && s->min_x_res <= 120){ - s->x_res_list[++i] = 120; - } - if(s->std_res_150 && s->max_x_res >= 150 && s->min_x_res <= 150){ - s->x_res_list[++i] = 150; - } - if(s->std_res_160 && s->max_x_res >= 160 && s->min_x_res <= 160){ - s->x_res_list[++i] = 160; - } - if(s->std_res_180 && s->max_x_res >= 180 && s->min_x_res <= 180){ - s->x_res_list[++i] = 180; - } - if(s->std_res_200 && s->max_x_res >= 200 && s->min_x_res <= 200){ - s->x_res_list[++i] = 200; - } - if(s->std_res_240 && s->max_x_res >= 240 && s->min_x_res <= 240){ - s->x_res_list[++i] = 240; - } - if(s->std_res_300 && s->max_x_res >= 300 && s->min_x_res <= 300){ - s->x_res_list[++i] = 300; - } - if(s->std_res_320 && s->max_x_res >= 320 && s->min_x_res <= 320){ - s->x_res_list[++i] = 320; - } - if(s->std_res_400 && s->max_x_res >= 400 && s->min_x_res <= 400){ - s->x_res_list[++i] = 400; - } - if(s->std_res_480 && s->max_x_res >= 480 && s->min_x_res <= 480){ - s->x_res_list[++i] = 480; - } - if(s->std_res_600 && s->max_x_res >= 600 && s->min_x_res <= 600){ - s->x_res_list[++i] = 600; - } - if(s->std_res_800 && s->max_x_res >= 800 && s->min_x_res <= 800){ - s->x_res_list[++i] = 800; - } - if(s->std_res_1200 && s->max_x_res >= 1200 && s->min_x_res <= 1200){ - s->x_res_list[++i] = 1200; - } - s->x_res_list[0] = i; - + if(option==OPT_RES){ opt->name = SANE_NAME_SCAN_RESOLUTION; - opt->title = SANE_TITLE_SCAN_X_RESOLUTION; - opt->desc = SANE_DESC_SCAN_X_RESOLUTION; + opt->title = SANE_TITLE_SCAN_RESOLUTION; + opt->desc = SANE_DESC_SCAN_RESOLUTION; opt->type = SANE_TYPE_INT; opt->unit = SANE_UNIT_DPI; opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; - if(s->step_x_res){ - s->x_res_range.min = s->min_x_res; - s->x_res_range.max = s->max_x_res; - s->x_res_range.quant = s->step_x_res; + if(s->step_x_res[s->mode] && s->step_y_res[s->mode]){ + s->res_range.min = s->min_x_res; + s->res_range.max = s->max_x_res; + s->res_range.quant = s->step_x_res[s->mode]; opt->constraint_type = SANE_CONSTRAINT_RANGE; - opt->constraint.range = &s->x_res_range; + opt->constraint.range = &s->res_range; } else{ - opt->constraint_type = SANE_CONSTRAINT_WORD_LIST; - opt->constraint.word_list = s->x_res_list; - } - } + int reses[] + = {60,75,100,120,150,160,180,200,240,300,320,400,480,600,800,1200}; - /* y resolution */ - if(option==OPT_Y_RES){ - i=0; - if(s->std_res_60 && s->max_y_res >= 60 && s->min_y_res <= 60){ - s->y_res_list[++i] = 60; - } - if(s->std_res_75 && s->max_y_res >= 75 && s->min_y_res <= 75){ - s->y_res_list[++i] = 75; - } - if(s->std_res_100 && s->max_y_res >= 100 && s->min_y_res <= 100){ - s->y_res_list[++i] = 100; - } - if(s->std_res_120 && s->max_y_res >= 120 && s->min_y_res <= 120){ - s->y_res_list[++i] = 120; - } - if(s->std_res_150 && s->max_y_res >= 150 && s->min_y_res <= 150){ - s->y_res_list[++i] = 150; - } - if(s->std_res_160 && s->max_y_res >= 160 && s->min_y_res <= 160){ - s->y_res_list[++i] = 160; - } - if(s->std_res_180 && s->max_y_res >= 180 && s->min_y_res <= 180){ - s->y_res_list[++i] = 180; - } - if(s->std_res_200 && s->max_y_res >= 200 && s->min_y_res <= 200){ - s->y_res_list[++i] = 200; - } - if(s->std_res_240 && s->max_y_res >= 240 && s->min_y_res <= 240){ - s->y_res_list[++i] = 240; - } - if(s->std_res_300 && s->max_y_res >= 300 && s->min_y_res <= 300){ - s->y_res_list[++i] = 300; - } - if(s->std_res_320 && s->max_y_res >= 320 && s->min_y_res <= 320){ - s->y_res_list[++i] = 320; - } - if(s->std_res_400 && s->max_y_res >= 400 && s->min_y_res <= 400){ - s->y_res_list[++i] = 400; - } - if(s->std_res_480 && s->max_y_res >= 480 && s->min_y_res <= 480){ - s->y_res_list[++i] = 480; - } - if(s->std_res_600 && s->max_y_res >= 600 && s->min_y_res <= 600){ - s->y_res_list[++i] = 600; - } - if(s->std_res_800 && s->max_y_res >= 800 && s->min_y_res <= 800){ - s->y_res_list[++i] = 800; - } - if(s->std_res_1200 && s->max_y_res >= 1200 && s->min_y_res <= 1200){ - s->y_res_list[++i] = 1200; - } - s->y_res_list[0] = i; - - opt->name = SANE_NAME_SCAN_Y_RESOLUTION; - opt->title = SANE_TITLE_SCAN_Y_RESOLUTION; - opt->desc = SANE_DESC_SCAN_Y_RESOLUTION; - opt->type = SANE_TYPE_INT; - opt->unit = SANE_UNIT_DPI; - opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; + i=0; + for(j=0;j<16;j++){ + if(s->std_res[j] + && s->max_x_res >= reses[j] && s->min_x_res <= reses[j] + && s->max_y_res >= reses[j] && s->min_y_res <= reses[j] + ){ + s->res_list[++i] = reses[j]; + } + } + s->res_list[0] = i; - if(s->step_y_res){ - s->y_res_range.min = s->min_y_res; - s->y_res_range.max = s->max_y_res; - s->y_res_range.quant = s->step_y_res; - opt->constraint_type = SANE_CONSTRAINT_RANGE; - opt->constraint.range = &s->y_res_range; - } - else{ opt->constraint_type = SANE_CONSTRAINT_WORD_LIST; - opt->constraint.word_list = s->y_res_list; + opt->constraint.word_list = s->res_list; } } @@ -3189,6 +3214,24 @@ opt->constraint_type = SANE_CONSTRAINT_NONE; } + /*automatic width detection */ + if(option==OPT_AWD){ + + opt->name = "awd"; + opt->title = "Auto width detection"; + opt->desc = "Scanner detects paper sides. May reduce scanning speed."; + opt->type = SANE_TYPE_BOOL; + opt->unit = SANE_UNIT_NONE; + opt->constraint_type = SANE_CONSTRAINT_NONE; + + /* this option is useless by itself? */ + if (0 && s->has_MS_auto && s->has_hybrid_crop_deskew){ + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + } + else + opt->cap = SANE_CAP_INACTIVE; + } + /*automatic length detection */ if(option==OPT_ALD){ @@ -3363,6 +3406,66 @@ opt->cap = SANE_CAP_INACTIVE; } + /*df recovery*/ + if(option==OPT_DF_RECOVERY){ + s->df_recovery_list[0] = STRING_DEFAULT; + s->df_recovery_list[1] = STRING_OFF; + s->df_recovery_list[2] = STRING_ON; + s->df_recovery_list[3] = NULL; + + opt->name = "df-recovery"; + opt->title = "DF recovery mode"; + opt->desc = "Request scanner to reverse feed on paper jam"; + opt->type = SANE_TYPE_STRING; + opt->constraint_type = SANE_CONSTRAINT_STRING_LIST; + opt->constraint.string_list = s->df_recovery_list; + opt->size = maxStringSize (opt->constraint.string_list); + if (s->has_MS_df && s->has_df_recovery) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + /*paper protection*/ + if(option==OPT_PAPER_PROTECT){ + s->paper_protect_list[0] = STRING_DEFAULT; + s->paper_protect_list[1] = STRING_OFF; + s->paper_protect_list[2] = STRING_ON; + s->paper_protect_list[3] = NULL; + + opt->name = "paper-protect"; + opt->title = "Paper protection"; + opt->desc = "Request scanner to predict jams in the ADF"; + opt->type = SANE_TYPE_STRING; + opt->constraint_type = SANE_CONSTRAINT_STRING_LIST; + opt->constraint.string_list = s->paper_protect_list; + opt->size = maxStringSize (opt->constraint.string_list); + if (s->has_MS_df && s->has_paper_protect) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + + /*staple detection*/ + if(option==OPT_STAPLE_DETECT){ + s->staple_detect_list[0] = STRING_DEFAULT; + s->staple_detect_list[1] = STRING_OFF; + s->staple_detect_list[2] = STRING_ON; + s->staple_detect_list[3] = NULL; + + opt->name = "staple-detect"; + opt->title = "Staple detection"; + opt->desc = "Request scanner to detect jams in the ADF caused by staples"; + opt->type = SANE_TYPE_STRING; + opt->constraint_type = SANE_CONSTRAINT_STRING_LIST; + opt->constraint.string_list = s->staple_detect_list; + opt->size = maxStringSize (opt->constraint.string_list); + if (s->has_MS_df && s->has_staple_detect) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + /*background color*/ if(option==OPT_BG_COLOR){ s->bg_color_list[0] = STRING_DEFAULT; @@ -3569,11 +3672,23 @@ opt->constraint_type = SANE_CONSTRAINT_NONE; } + /*deskew and crop by hardware*/ + if(option==OPT_HWDESKEWCROP){ + opt->name = "hwdeskewcrop"; + opt->title = "Hardware deskew and crop"; + opt->desc = "Request scanner to rotate and crop pages digitally."; + opt->type = SANE_TYPE_BOOL; + if (s->has_hybrid_crop_deskew) + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + else + opt->cap = SANE_CAP_INACTIVE; + } + /*deskew by software*/ if(option==OPT_SWDESKEW){ opt->name = "swdeskew"; opt->title = "Software deskew"; - opt->desc = "Request driver to rotate skewed pages digitally"; + opt->desc = "Request driver to rotate skewed pages digitally."; opt->type = SANE_TYPE_BOOL; if (1) opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; @@ -3586,7 +3701,7 @@ opt->name = "swdespeck"; opt->title = "Software despeckle diameter"; - opt->desc = "Maximum diameter of lone dots to remove from scan"; + opt->desc = "Maximum diameter of lone dots to remove from scan."; opt->type = SANE_TYPE_INT; opt->unit = SANE_UNIT_NONE; opt->constraint_type = SANE_CONSTRAINT_RANGE; @@ -3606,7 +3721,7 @@ if(option==OPT_SWCROP){ opt->name = "swcrop"; opt->title = "Software crop"; - opt->desc = "Request driver to remove border from pages digitally"; + opt->desc = "Request driver to remove border from pages digitally."; opt->type = SANE_TYPE_BOOL; if (1) opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; @@ -4188,14 +4303,10 @@ } return SANE_STATUS_GOOD; - case OPT_X_RES: + case OPT_RES: *val_p = s->resolution_x; return SANE_STATUS_GOOD; - case OPT_Y_RES: - *val_p = s->resolution_y; - return SANE_STATUS_GOOD; - case OPT_TL_X: *val_p = SCANNER_UNIT_TO_FIXED_MM(s->tl_x); return SANE_STATUS_GOOD; @@ -4346,6 +4457,10 @@ return SANE_STATUS_GOOD; /* Advanced Group */ + case OPT_AWD: + *val_p = s->awd; + return SANE_STATUS_GOOD; + case OPT_ALD: *val_p = s->ald; return SANE_STATUS_GOOD; @@ -4406,6 +4521,48 @@ } return SANE_STATUS_GOOD; + case OPT_DF_RECOVERY: + switch (s->df_recovery) { + case MSEL_DEFAULT: + strcpy (val, STRING_DEFAULT); + break; + case MSEL_ON: + strcpy (val, STRING_ON); + break; + case MSEL_OFF: + strcpy (val, STRING_OFF); + break; + } + return SANE_STATUS_GOOD; + + case OPT_PAPER_PROTECT: + switch (s->paper_protect) { + case MSEL_DEFAULT: + strcpy (val, STRING_DEFAULT); + break; + case MSEL_ON: + strcpy (val, STRING_ON); + break; + case MSEL_OFF: + strcpy (val, STRING_OFF); + break; + } + return SANE_STATUS_GOOD; + + case OPT_STAPLE_DETECT: + switch (s->staple_detect) { + case MSEL_DEFAULT: + strcpy (val, STRING_DEFAULT); + break; + case MSEL_ON: + strcpy (val, STRING_ON); + break; + case MSEL_OFF: + strcpy (val, STRING_OFF); + break; + } + return SANE_STATUS_GOOD; + case OPT_BG_COLOR: switch (s->bg_color) { case COLOR_DEFAULT: @@ -4503,6 +4660,10 @@ *val_p = s->side; return SANE_STATUS_GOOD; + case OPT_HWDESKEWCROP: + *val_p = s->hwdeskewcrop; + return SANE_STATUS_GOOD; + case OPT_SWDESKEW: *val_p = s->swdeskew; return SANE_STATUS_GOOD; @@ -4767,27 +4928,12 @@ *info |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS; return SANE_STATUS_GOOD; - case OPT_X_RES: + case OPT_RES: if (s->resolution_x == val_c) return SANE_STATUS_GOOD; - /* currently the same? move y too */ - if (s->resolution_x == s->resolution_y){ - s->resolution_y = val_c; - /*sanei_constrain_value (s->opt + OPT_Y_RES, (void *) &val_c, 0) == SANE_STATUS_GOOD*/ - } - s->resolution_x = val_c; - - *info |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS; - return SANE_STATUS_GOOD; - - case OPT_Y_RES: - - if (s->resolution_y == val_c) - return SANE_STATUS_GOOD; - s->resolution_y = val_c; *info |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS; @@ -4851,20 +4997,18 @@ s->brightness = val_c; /* send lut if scanner has no hardware brightness */ - if(!s->brightness_steps && s->num_download_gamma && s->adbits){ + if(!s->brightness_steps) return send_lut(s); - } - + return SANE_STATUS_GOOD; case OPT_CONTRAST: s->contrast = val_c; /* send lut if scanner has no hardware contrast */ - if(!s->contrast_steps && s->num_download_gamma && s->adbits){ + if(!s->contrast_steps) return send_lut(s); - } - + return SANE_STATUS_GOOD; case OPT_GAMMA: @@ -4983,6 +5127,11 @@ return SANE_STATUS_GOOD; /* Advanced Group */ + case OPT_AWD: + s->awd = val_c; + *info |= SANE_INFO_RELOAD_OPTIONS; + return mode_select_auto(s); + case OPT_ALD: s->ald = val_c; *info |= SANE_INFO_RELOAD_OPTIONS; @@ -5039,6 +5188,33 @@ s->df_diff = MSEL_df_diff_20MM; return mode_select_df(s); + case OPT_DF_RECOVERY: + if (!strcmp(val, STRING_DEFAULT)) + s->df_recovery = MSEL_DEFAULT; + else if (!strcmp(val, STRING_ON)) + s->df_recovery = MSEL_ON; + else if (!strcmp(val, STRING_OFF)) + s->df_recovery = MSEL_OFF; + return mode_select_df(s); + + case OPT_PAPER_PROTECT: + if (!strcmp(val, STRING_DEFAULT)) + s->paper_protect = MSEL_DEFAULT; + else if (!strcmp(val, STRING_ON)) + s->paper_protect = MSEL_ON; + else if (!strcmp(val, STRING_OFF)) + s->paper_protect = MSEL_OFF; + return mode_select_df(s); + + case OPT_STAPLE_DETECT: + if (!strcmp(val, STRING_DEFAULT)) + s->staple_detect = MSEL_DEFAULT; + else if (!strcmp(val, STRING_ON)) + s->staple_detect = MSEL_ON; + else if (!strcmp(val, STRING_OFF)) + s->staple_detect = MSEL_OFF; + return mode_select_df(s); + case OPT_BG_COLOR: if (!strcmp(val, STRING_DEFAULT)) s->bg_color = COLOR_DEFAULT; @@ -5057,10 +5233,7 @@ s->dropout_color = COLOR_GREEN; else if (!strcmp(val, STRING_BLUE)) s->dropout_color = COLOR_BLUE; - if (s->has_MS_dropout) - return mode_select_dropout(s); - else - return SANE_STATUS_GOOD; + return mode_select_dropout(s); case OPT_BUFF_MODE: if (!strcmp(val, STRING_DEFAULT)) @@ -5078,10 +5251,7 @@ s->prepick = MSEL_ON; else if (!strcmp(val, STRING_OFF)) s->prepick = MSEL_OFF; - if (s->has_MS_prepick) - return mode_select_prepick(s); - else - return SANE_STATUS_GOOD; + return mode_select_prepick(s); case OPT_OVERSCAN: if (!strcmp(val, STRING_DEFAULT)) @@ -5114,6 +5284,10 @@ s->low_mem = val_c; return SANE_STATUS_GOOD; + case OPT_HWDESKEWCROP: + s->hwdeskewcrop = val_c; + return SANE_STATUS_GOOD; + case OPT_SWDESKEW: s->swdeskew = val_c; return SANE_STATUS_GOOD; @@ -5368,6 +5542,11 @@ DBG (10, "send_endorser: start\n"); + if (!s->has_endorser_f && !s->has_endorser_b){ + DBG (10, "send_endorser: unsupported\n"); + return ret; + } + /*build the payload*/ memset(out,0,outLen); @@ -5496,6 +5675,11 @@ DBG (10, "send_lut: start\n"); + if(!s->num_download_gamma || !s->adbits){ + DBG (10, "send_lut: unsupported\n"); + return ret; + } + /* contrast is converted to a slope [0,90] degrees: * first [-127,127] to [0,254] then to [0,1] * then multiply by PI/2 to convert to radians @@ -5609,6 +5793,10 @@ } } + set_MSEL_df_paperprot(page,s->paper_protect); + set_MSEL_df_stapledet(page,s->staple_detect); + set_MSEL_df_recovery(page,s->df_recovery); + ret = do_cmd ( s, 1, 0, cmd, cmdLen, @@ -5828,7 +6016,10 @@ set_MSEL_page_len(page, MSEL_data_min_len-2); set_MSEL_overscan(page, s->overscan); - set_MSEL_ald(page, s->ald); + set_MSEL_ald(page, s->ald || s->hwdeskewcrop); + set_MSEL_awd(page, s->awd || s->hwdeskewcrop); + set_MSEL_req_driv_crop(page, s->hwdeskewcrop && (s->swcrop || s->swdeskew)); + set_MSEL_deskew(page, s->hwdeskewcrop); ret = do_cmd ( s, 1, 0, @@ -5886,7 +6077,9 @@ params->pixels_per_line = s->params.pixels_per_line; params->bytes_per_line = s->params.bytes_per_line; - if(s->ald){ + /* we wont know the end until we get to it */ + if(s->ald && !must_fully_buffer(s)){ + DBG (15, "sane_get_parameters: hand-scanner mode\n"); params->lines = -1; } @@ -6062,7 +6255,7 @@ s->side = SIDE_BACK; } - /* batch start? inititalize struct and scanner */ + /* batch start? initialize struct and scanner */ if(!s->started){ /* load side marker */ @@ -6096,10 +6289,44 @@ /* enable overscan/auto detection */ ret = mode_select_auto(s); - if (ret != SANE_STATUS_GOOD) { - DBG (5, "sane_start: ERROR: cannot mode_select_auto\n"); - return ret; + if (ret != SANE_STATUS_GOOD) + DBG (5, "sane_start: WARNING: cannot mode_select_auto %d\n", ret); + + /* enable double feed detection */ + ret = mode_select_df(s); + if (ret != SANE_STATUS_GOOD) + DBG (5, "sane_start: WARNING: cannot mode_select_df %d\n", ret); + + /* send lut if scanner has no hardware brightness/contrast */ + if (!s->brightness_steps || !s->contrast_steps){ + ret = send_lut(s); + if (ret != SANE_STATUS_GOOD) + DBG (5, "sane_start: WARNING: cannot send_lut %d\n", ret); } + + /* enable background color setting */ + ret = mode_select_bg(s); + if (ret != SANE_STATUS_GOOD) + DBG (5, "sane_start: WARNING: cannot mode_select_bg %d\n", ret); + + /* enable dropout color setting */ + ret = mode_select_dropout(s); + if (ret != SANE_STATUS_GOOD) + DBG (5, "sane_start: WARNING: cannot mode_select_dropout %d\n", ret); + + /* enable buffering setting */ + ret = mode_select_buff(s); + if (ret != SANE_STATUS_GOOD) + DBG (5, "sane_start: WARNING: cannot mode_select_buff %d\n", ret); + + /* enable prepick setting */ + ret = mode_select_prepick(s); + if (ret != SANE_STATUS_GOOD) + DBG (5, "sane_start: WARNING: cannot mode_select_prepick %d\n", ret); + + ret = send_endorser(s); + if (ret != SANE_STATUS_GOOD) + DBG (5, "sane_start: WARNING: cannot send_endorser %d\n", ret); /* set window command */ ret = set_window(s); @@ -6108,8 +6335,8 @@ return ret; } - /* try to read actual scan size from scanner */ - ret = get_pixelsize(s); + /* try to read scan size from scanner */ + ret = get_pixelsize(s,0); if (ret != SANE_STATUS_GOOD) { DBG (5, "sane_start: ERROR: cannot get pixelsize\n"); return ret; @@ -6188,14 +6415,11 @@ /* the front buffer is normally very small, but some scanners or * option combinations can't handle it, so we make a big one */ if( - (s->mode == MODE_COLOR && s->color_interlace == COLOR_INTERLACE_3091) - || (s->swcrop || s->swdeskew || s->swdespeck -#ifdef SANE_FRAME_JPEG - && s->params.format != SANE_FRAME_JPEG -#endif - ) - ) + (s->mode == MODE_COLOR && s->color_interlace == COLOR_INTERLACE_3091) + || must_fully_buffer(s) + ){ s->buff_tot[SIDE_FRONT] = s->bytes_tot[SIDE_FRONT]; + } } else{ s->bytes_tot[SIDE_FRONT] = 0; @@ -6253,11 +6477,7 @@ * tell the user the size of the image. the sane * API has no way to inform the frontend of this, * so we block and buffer. yuck */ - if( (s->swdeskew || s->swdespeck || s->swcrop) -#ifdef SANE_FRAME_JPEG - && s->params.format != SANE_FRAME_JPEG -#endif - ){ + if( must_fully_buffer(s) ){ /* get image */ while(!s->eof_rx[s->side] && !ret){ @@ -6273,11 +6493,18 @@ DBG (5, "sane_start: OK: done buffering\n"); + /* hardware deskew will tell image size after transfer */ + ret = get_pixelsize(s,1); + if (ret != SANE_STATUS_GOOD) { + DBG (5, "sane_start: ERROR: cannot get final pixelsize\n"); + return ret; + } + /* finished buffering, adjust image as required */ - if(s->swdeskew){ + if(s->swdeskew && (!s->hwdeskewcrop || s->req_driv_crop)){ buffer_deskew(s,s->side); } - if(s->swcrop){ + if(s->swcrop && (!s->hwdeskewcrop || s->req_driv_crop)){ buffer_crop(s,s->side); } if(s->swdespeck){ @@ -6383,7 +6610,14 @@ set_SC_function (cmd, function); DBG (15, "scanner_control: function %d\n",function); - + + /* don't really need to ask for adf if that's the only option */ + /* doing so causes the 3091 to complain */ + if(function == SC_function_adf && !s->has_flatbed){ + DBG (10, "scanner_control: adf function not required\n"); + return ret; + } + /* extremely long retry period */ while(tries++ < 120){ @@ -6776,7 +7010,7 @@ /* update our private copy of params with actual data size scanner reports */ static SANE_Status -get_pixelsize(struct fujitsu *s) +get_pixelsize(struct fujitsu *s, int actual) { SANE_Status ret; @@ -6786,7 +7020,7 @@ unsigned char in[R_PSIZE_len]; size_t inLen = R_PSIZE_len; - DBG (10, "get_pixelsize: start\n"); + DBG (10, "get_pixelsize: start %d\n",actual); memset(cmd,0,cmdLen); set_SCSI_opcode(cmd, READ_code); @@ -6807,8 +7041,31 @@ ); if (ret == SANE_STATUS_GOOD){ - s->params.pixels_per_line = get_PSIZE_num_x(in); - s->params.lines = get_PSIZE_num_y(in); + /* when we are called post-scan, the scanner may give + * more accurate data in other fields */ + if(actual && get_PSIZE_paper_w(in)){ + s->params.pixels_per_line = get_PSIZE_paper_w(in); + DBG(5,"get_pixelsize: Actual width\n"); + } + else{ + s->params.pixels_per_line = get_PSIZE_num_x(in); + } + + /* stupid trick. 3091/2 require reading extra lines, + * because they have a gap between R G and B + * we only want to report the shorter value to the frontend */ + if(s->mode == MODE_COLOR && s->color_interlace == COLOR_INTERLACE_3091){ + DBG(5,"get_pixelsize: Ignoring length %d\n",get_PSIZE_num_y(in)); + } + /* when we are called post-scan, the scanner may give + * more accurate data in other fields */ + else if(actual && get_PSIZE_paper_l(in)){ + s->params.lines = get_PSIZE_paper_l(in); + DBG(5,"get_pixelsize: Actual length\n"); + } + else{ + s->params.lines = get_PSIZE_num_y(in); + } /* bytes per line differs by mode */ if (s->mode == MODE_COLOR) { @@ -6821,9 +7078,16 @@ s->params.bytes_per_line = s->params.pixels_per_line / 8; } + /* some scanners can request that the driver clean img */ + if(get_PSIZE_req_driv_valid(in)){ + s->req_driv_crop = get_PSIZE_req_driv_crop(in); + s->req_driv_lut = get_PSIZE_req_driv_lut(in); + DBG(5,"get_pixelsize: scanner requests: crop=%d, lut=%d\n", + s->req_driv_crop,s->req_driv_lut); + } + DBG (15, "get_pixelsize: scan_x=%d, Bpl=%d, scan_y=%d\n", s->params.pixels_per_line, s->params.bytes_per_line, s->params.lines ); - } DBG (10, "get_pixelsize: finish\n"); @@ -7005,70 +7269,66 @@ /* protect this block from sane_cancel */ s->reading = 1; - /* get more data if there is room for at least 2 lines */ - if(s->buff_tot[s->side]-s->buff_rx[s->side] >= s->params.bytes_per_line*2){ - - /* 3091/2 are on crack, get their own duplex reader function */ - if(s->source == SOURCE_ADF_DUPLEX - && s->duplex_interlace == DUPLEX_INTERLACE_3091 - && (!s->eof_rx[SIDE_FRONT] || !s->eof_rx[SIDE_BACK]) - ){ - ret = read_from_3091duplex(s); - if(ret){ - DBG(5,"sane_read: 3091 returning %d\n",ret); - return ret; - } - } /* end 3091 */ + /* ---------------------------------------------- + * try to read some data from scanner into buffer + * these functions are expected not to overrun */ + + /* 3091/2 are on crack, get their own duplex reader function */ + if(s->source == SOURCE_ADF_DUPLEX + && s->duplex_interlace == DUPLEX_INTERLACE_3091 + ){ + ret = read_from_3091duplex(s); + if(ret){ + DBG(5,"sane_read: 3091 returning %d\n",ret); + return ret; + } + } /* end 3091 */ #ifdef SANE_FRAME_JPEG - /* alternating jpeg duplex interlacing */ - else if(s->source == SOURCE_ADF_DUPLEX - && s->params.format == SANE_FRAME_JPEG - && s->jpeg_interlace == JPEG_INTERLACE_ALT - && (!s->eof_rx[SIDE_FRONT] || !s->eof_rx[SIDE_BACK]) - ){ - ret = read_from_JPEGduplex(s); - if(ret){ - DBG(5,"sane_read: jpeg duplex returning %d\n",ret); - return ret; - } - } /* end alt jpeg */ + /* alternating jpeg duplex interlacing */ + else if(s->source == SOURCE_ADF_DUPLEX + && s->params.format == SANE_FRAME_JPEG + && s->jpeg_interlace == JPEG_INTERLACE_ALT + ){ + ret = read_from_JPEGduplex(s); + if(ret){ + DBG(5,"sane_read: jpeg duplex returning %d\n",ret); + return ret; + } + } /* end alt jpeg */ #endif - /* alternating pnm duplex interlacing */ - else if(s->source == SOURCE_ADF_DUPLEX - && s->params.format <= SANE_FRAME_RGB - && s->duplex_interlace == DUPLEX_INTERLACE_ALT - ){ - - /* buffer front side */ - if(!s->eof_rx[SIDE_FRONT]){ - ret = read_from_scanner(s, SIDE_FRONT); - if(ret){ - DBG(5,"sane_read: front returning %d\n",ret); - return ret; - } - } - - /* buffer back side */ - if(!s->eof_rx[SIDE_BACK]){ - ret = read_from_scanner(s, SIDE_BACK); - if(ret){ - DBG(5,"sane_read: back returning %d\n",ret); - return ret; - } - } - } /* end alt pnm */ + /* alternating pnm duplex interlacing */ + else if(s->source == SOURCE_ADF_DUPLEX + && s->params.format <= SANE_FRAME_RGB + && s->duplex_interlace == DUPLEX_INTERLACE_ALT + ){ - /* simplex or non-alternating duplex */ - else if(!s->eof_rx[s->side]){ - ret = read_from_scanner(s, s->side); + /* buffer front side */ + ret = read_from_scanner(s, SIDE_FRONT); + if(ret){ + DBG(5,"sane_read: front returning %d\n",ret); + return ret; + } + + /* buffer back side, but don't get too far ahead of the front! */ + if(s->bytes_rx[SIDE_BACK] < s->bytes_rx[SIDE_FRONT] + s->buffer_size){ + ret = read_from_scanner(s, SIDE_BACK); if(ret){ - DBG(5,"sane_read: side %d returning %d\n",s->side,ret); + DBG(5,"sane_read: back returning %d\n",ret); return ret; } - } /*end simplex*/ - } /*end get more from scanner*/ + } + } /* end alt pnm */ + + /* simplex or non-alternating duplex */ + else{ + ret = read_from_scanner(s, s->side); + if(ret){ + DBG(5,"sane_read: side %d returning %d\n",s->side,ret); + return ret; + } + } /*end simplex*/ /* copy a block from buffer to frontend */ ret = read_from_buffer(s,buf,max_len,len,s->side); @@ -7106,29 +7366,37 @@ size_t inLen = 0; int bytes = s->buffer_size; - int remain = (s->bytes_tot[SIDE_FRONT] - s->bytes_rx[SIDE_FRONT]) - + (s->bytes_tot[SIDE_BACK] - s->bytes_rx[SIDE_BACK]); - int i=0; + int i = 0; DBG (10, "read_from_JPEGduplex: start\n"); - /* figure out the max amount to transfer */ - if(bytes > remain){ - bytes = remain; + if(s->eof_rx[SIDE_FRONT] && s->eof_rx[SIDE_BACK]){ + DBG (10, "read_from_JPEGduplex: already have eofs, done\n"); + return ret; } - if(bytes > s->buffer_size){ - bytes = s->buffer_size; + + /* we don't know if the following read will give us front or back data + * so we only get enough to fill whichever is smaller (and not yet done) */ + if(!s->eof_rx[SIDE_FRONT]){ + int avail = s->buff_tot[SIDE_FRONT] - s->buff_rx[SIDE_FRONT]; + if(bytes > avail) + bytes = avail; + } + if(!s->eof_rx[SIDE_BACK]){ + int avail = s->buff_tot[SIDE_BACK] - s->buff_rx[SIDE_BACK]; + if(bytes > avail) + bytes = avail; } - DBG(15, "read_from_JPEGduplex: fto:%d frx:%d bto:%d brx:%d re:%d pa:%d\n", + DBG(15, "read_from_JPEGduplex: fto:%d frx:%d bto:%d brx:%d pa:%d\n", s->bytes_tot[SIDE_FRONT], s->bytes_rx[SIDE_FRONT], s->bytes_tot[SIDE_BACK], s->bytes_rx[SIDE_BACK], - remain, bytes); + bytes); - /* this should never happen */ + /* this will happen if buffer is not drained yet */ if(bytes < 1){ - DBG(5, "read_from_JPEGduplex: ERROR: no bytes this pass\n"); - return SANE_STATUS_INVAL; + DBG(5, "read_from_JPEGduplex: Warning: no bytes this pass\n"); + return ret; } /* fi-6770A gets mad if you 'read' too soon on usb, see if it is ready */ @@ -7366,37 +7634,54 @@ int side = SIDE_FRONT; int bytes = s->buffer_size; - int remain = (s->bytes_tot[SIDE_FRONT] - s->bytes_rx[SIDE_FRONT]) - + (s->bytes_tot[SIDE_BACK] - s->bytes_rx[SIDE_BACK]); int off = (s->duplex_raster_offset+s->duplex_offset) * s->resolution_y/300; unsigned int i; DBG (10, "read_from_3091duplex: start\n"); - /* figure out the max amount to transfer */ - if(bytes > remain){ - bytes = remain; - } - if(bytes > s->buffer_size){ - bytes = s->buffer_size; + if(s->eof_rx[SIDE_FRONT] && s->eof_rx[SIDE_BACK]){ + DBG (10, "read_from_3091duplex: already have eofs, done\n"); + return ret; } - /* all requests must end on line boundary */ + /* we don't know if the following read will give us front,back or both data + * so we only get enough to fill whichever is smaller (and not yet done) */ + if(!s->eof_rx[SIDE_FRONT]){ + int avail = s->buff_tot[SIDE_FRONT] - s->buff_rx[SIDE_FRONT]; + if(bytes > avail) + bytes = avail; + } + if(!s->eof_rx[SIDE_BACK]){ + int avail = s->buff_tot[SIDE_BACK] - s->buff_rx[SIDE_BACK]; + if(bytes > avail) + bytes = avail; + } + + /* all requests must end on a line boundary */ bytes -= (bytes % s->params.bytes_per_line); - /* this should never happen */ - if(bytes < 1){ - DBG(5, "read_from_3091duplex: ERROR: no bytes this pass\n"); - ret = SANE_STATUS_INVAL; - } + DBG(15, "read_from_3091duplex: front img: to:%d rx:%d tx:%d li:%d\n", + s->bytes_tot[SIDE_FRONT], s->bytes_rx[SIDE_FRONT], + s->bytes_tx[SIDE_FRONT], s->lines_rx[SIDE_FRONT]); - DBG(15, "read_from_3091duplex: to:%d rx:%d li:%d re:%d bu:%d pa:%d of:%d\n", - s->bytes_tot[SIDE_FRONT] + s->bytes_tot[SIDE_BACK], - s->bytes_rx[SIDE_FRONT] + s->bytes_rx[SIDE_BACK], - s->lines_rx[SIDE_FRONT] + s->lines_rx[SIDE_BACK], - remain, s->buffer_size, bytes, off); + DBG(15, "read_from_3091duplex: front buf: to:%d rx:%d tx:%d\n", + s->buff_tot[SIDE_FRONT], s->buff_rx[SIDE_FRONT], + s->buff_tx[SIDE_FRONT]); - if(ret){ + DBG(15, "read_from_3091duplex: back img: to:%d rx:%d tx:%d li:%d\n", + s->bytes_tot[SIDE_BACK], s->bytes_rx[SIDE_BACK], + s->bytes_tx[SIDE_BACK], s->lines_rx[SIDE_BACK]); + + DBG(15, "read_from_3091duplex: back buf: to:%d rx:%d tx:%d\n", + s->buff_tot[SIDE_BACK], s->buff_rx[SIDE_BACK], + s->buff_tx[SIDE_BACK]); + + DBG(15, "read_from_3091duplex: bu:%d pa:%d of:%d\n", + s->buffer_size, bytes, off); + + /* this could happen if the front buffer is not drained fast enough */ + if(bytes < 1){ + DBG(10, "read_from_3091duplex: Warning: no bytes this pass\n"); return ret; } @@ -7491,18 +7776,20 @@ unsigned char * in; size_t inLen = 0; - int bytes = s->buff_tot[side] - s->buff_rx[side]; + int bytes = s->buffer_size; + int avail = s->buff_tot[side] - s->buff_rx[side]; int remain = s->bytes_tot[side] - s->bytes_rx[side]; - DBG (10, "read_from_scanner: start\n"); + DBG (10, "read_from_scanner: start %d\n", side); - /* figure out the max amount to transfer */ - if(bytes > remain){ - bytes = remain; - } - if(bytes > s->buffer_size){ - bytes = s->buffer_size; + if(s->eof_rx[side]){ + DBG (10, "read_from_scanner: already have eof, done\n"); + return ret; } + + /* figure out the max amount to transfer */ + if(bytes > avail) + bytes = avail; /* all requests must end on line boundary */ bytes -= (bytes % s->params.bytes_per_line); @@ -7514,11 +7801,12 @@ bytes -= s->params.bytes_per_line; } - DBG(15, "read_from_scanner: si:%d re:%d bs:%d by:%d\n", - side, remain, s->buffer_size, bytes); + DBG(15, "read_from_scanner: si:%d re:%d bs:%d by:%d av:%d\n", + side, remain, s->buffer_size, bytes, avail); - DBG(15, "read_from_scanner: img to:%d rx:%d tx:%d\n", - s->bytes_tot[side], s->bytes_rx[side], s->bytes_tx[side]); + DBG(15, "read_from_scanner: img to:%d rx:%d tx:%d li:%d\n", + s->bytes_tot[side], s->bytes_rx[side], s->bytes_tx[side], + s->lines_rx[side]); DBG(15, "read_from_scanner: buf to:%d rx:%d tx:%d\n", s->buff_tot[side], s->buff_rx[side], s->buff_tx[side]); @@ -7580,6 +7868,8 @@ inLen = 0; } + DBG(15, "read_from_scanner: read %d bytes\n",inLen); + if(inLen){ if(s->mode==MODE_COLOR && s->color_interlace == COLOR_INTERLACE_3091){ copy_3091 (s, in, inLen, side); @@ -7631,8 +7921,10 @@ /* Data is RR...GG...BB... on each line, * green is back 8 lines from red at 300 dpi * blue is back 4 lines from red at 300 dpi. - * Here, we just get things on correct line, - * interlacing to make RGBRGB comes later. + * + * Here, we get things on correct line, and + * interlace to make RGBRGB. + * * We add the user-supplied offsets before we scale * so that they are independent of scanning resolution. */ @@ -7640,7 +7932,7 @@ boff = (s->color_raster_offset+s->blue_offset) * s->resolution_y/300; /* loop thru all lines in read buffer */ - for(i=0;iparams.bytes_per_line;i+=s->params.bytes_per_line){ + for(i=0;iparams.bytes_per_line){ /* red at start of line */ dest = s->lines_rx[side] * s->params.bytes_per_line; @@ -7685,6 +7977,10 @@ s->eof_rx[side] = 1; } + DBG(15, "copy_3091: si:%d imgrx:%d bufrx:%d li:%d eof:%d\n", + side, s->bytes_rx[side], s->buff_rx[side], s->lines_rx[side], + s->eof_rx[side]); + DBG (10, "copy_3091: finish\n"); return ret; @@ -8395,7 +8691,7 @@ DBG(25, "in: read %lu bytes\n", (unsigned long)*inLen); if(*inLen){ - hexdump(30, "in: <<", inBuff, *inLen); + hexdump(31, "in: <<", inBuff, *inLen); } if(*inLen && *inLen != askLen){ @@ -8540,6 +8836,28 @@ return ret; } +/* certain options require the entire image to + * be collected from the scanner before we can + * tell the user the size of the image. */ +static int +must_fully_buffer(struct fujitsu *s) +{ + if(s->hwdeskewcrop){ + return 1; + } + + if( + (s->swdeskew || s->swdespeck || s->swcrop) +#ifdef SANE_FRAME_JPEG + && s->params.format != SANE_FRAME_JPEG +#endif + ){ + return 1; + } + + return 0; +} + /* s->page_width stores the user setting * for the paper width in adf. sometimes, * we need a value that differs from this @@ -8716,7 +9034,7 @@ &s->deskew_vals[0],&s->deskew_vals[1],&s->deskew_slope); if(s->deskew_stat){ - DBG (5, "buffer_despeck: bad findSkew, bailing\n"); + DBG (5, "buffer_deskew: bad findSkew, bailing\n"); goto cleanup; } } @@ -8727,13 +9045,13 @@ } /* tweak the bg color based on scanner settings */ - if(s->mode == MODE_HALFTONE || s->mode == MODE_GRAYSCALE){ - if(s->bg_color == COLOR_BLACK) + if(s->mode == MODE_HALFTONE || s->mode == MODE_LINEART){ + if(s->bg_color == COLOR_BLACK || s->hwdeskewcrop || s->overscan) bg_color = 0xff; else bg_color = 0; } - else if(s->bg_color == COLOR_BLACK) + else if(s->bg_color == COLOR_BLACK || s->hwdeskewcrop || s->overscan) bg_color = 0; ret = sanei_magic_rotate(&s->params,s->buffers[side], diff -Nru sane-backends-1.0.22/backend/fujitsu.conf.in sane-backends-1.0.23/backend/fujitsu.conf.in --- sane-backends-1.0.22/backend/fujitsu.conf.in 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/fujitsu.conf.in 2011-12-20 14:42:29.000000000 +0000 @@ -3,8 +3,10 @@ # to set data buffer size, in bytes # the value ranges from 4096 - infinity -# but you may have scanning problems with -# a value larger than 65536 (the default) +# but old scanners may have scanning problems +# with a value larger than 65536 (the default) +# NOTE: this option is set to a larger value +# later in this file, for more recent scanners option buffer-size 65536 # To search for all FUJITSU scsi devices @@ -74,6 +76,9 @@ #fi-5530C2 usb 0x04c5 0x114a +# More recent scanners need a larger buffer for maximum speed +option buffer-size 262144 + #fi-6140 usb 0x04c5 0x114d @@ -128,16 +133,16 @@ #fi-6225 usb 0x04c5 0x11ef -#fi-6145 +#fi-6140Z usb 0x04c5 0x11f1 -#fi-6245 +#fi-6240Z usb 0x04c5 0x11f2 -#fi-6135 +#fi-6130Z usb 0x04c5 0x11f3 -#fi-6235 +#fi-6230Z usb 0x04c5 0x11f4 #fi-6110 diff -Nru sane-backends-1.0.22/backend/fujitsu.h sane-backends-1.0.23/backend/fujitsu.h --- sane-backends-1.0.22/backend/fujitsu.h 2010-12-07 03:20:01.000000000 +0000 +++ sane-backends-1.0.23/backend/fujitsu.h 2012-07-01 02:00:44.000000000 +0000 @@ -18,16 +18,15 @@ OPT_STANDARD_GROUP, OPT_SOURCE, /*fb/adf/front/back/duplex*/ OPT_MODE, /*mono/gray/color*/ - OPT_X_RES, /*a range or a list*/ - OPT_Y_RES, /*a range or a list*/ + OPT_RES, /*a range or a list*/ OPT_GEOMETRY_GROUP, + OPT_PAGE_WIDTH, + OPT_PAGE_HEIGHT, OPT_TL_X, OPT_TL_Y, OPT_BR_X, OPT_BR_Y, - OPT_PAGE_WIDTH, - OPT_PAGE_HEIGHT, OPT_ENHANCEMENT_GROUP, OPT_BRIGHTNESS, @@ -62,6 +61,7 @@ OPT_VARIANCE, OPT_ADVANCED_GROUP, + OPT_AWD, OPT_ALD, OPT_COMPRESS, OPT_COMPRESS_ARG, @@ -70,6 +70,9 @@ OPT_DF_THICKNESS, OPT_DF_LENGTH, OPT_DF_DIFF, + OPT_DF_RECOVERY, + OPT_PAPER_PROTECT, + OPT_STAPLE_DETECT, OPT_BG_COLOR, OPT_DROPOUT_COLOR, OPT_BUFF_MODE, @@ -81,6 +84,7 @@ OPT_BLUE_OFFSET, OPT_LOW_MEM, OPT_SIDE, + OPT_HWDESKEWCROP, OPT_SWDESKEW, OPT_SWDESPECK, OPT_SWCROP, @@ -153,29 +157,14 @@ /* members in order found in scsi data... */ int basic_x_res; int basic_y_res; - int step_x_res; - int step_y_res; + int step_x_res[6]; /*one for each mode*/ + int step_y_res[6]; /*one for each mode*/ int max_x_res; int max_y_res; int min_x_res; int min_y_res; - int std_res_200; - int std_res_180; - int std_res_160; - int std_res_150; - int std_res_120; - int std_res_100; - int std_res_75; - int std_res_60; - int std_res_1200; - int std_res_800; - int std_res_600; - int std_res_480; - int std_res_400; - int std_res_320; - int std_res_300; - int std_res_240; + int std_res[16]; /*some scanners only support a few resolutions*/ /* max scan size in pixels comes from scanner in basic res units */ int max_x_basic; @@ -237,7 +226,10 @@ int has_cmd_subwindow; int has_cmd_endorser; int has_cmd_hw_status; + int has_cmd_hw_status_2; + int has_cmd_hw_status_3; int has_cmd_scanner_ctl; + int has_cmd_device_restart; /*FIXME: do we need the vendor window param list? */ @@ -250,6 +242,10 @@ int num_internal_dither; int num_download_dither; + int has_df_recovery; + int has_paper_protect; + int has_staple_detect; + int has_rif; int has_dtc; int has_sdtc; @@ -262,6 +258,7 @@ int has_diffusion; int has_ipc3; int has_rotation; + int has_hybrid_crop_deskew; int has_comp_MH; int has_comp_MR; @@ -284,7 +281,7 @@ /* --------------------------------------------------------------------- */ /* immutable values which are gathered by mode_sense command */ - int has_MS_unknown; + int has_MS_autocolor; int has_MS_prepick; int has_MS_sleep; int has_MS_duplex; @@ -348,10 +345,8 @@ SANE_String_Const mode_list[7]; SANE_String_Const source_list[5]; - SANE_Int x_res_list[17]; - SANE_Int y_res_list[17]; - SANE_Range x_res_range; - SANE_Range y_res_range; + SANE_Int res_list[17]; + SANE_Range res_range; /*geometry group*/ SANE_Range tl_x_range; @@ -382,6 +377,9 @@ SANE_Range compress_arg_range; SANE_String_Const df_action_list[4]; SANE_String_Const df_diff_list[5]; + SANE_String_Const df_recovery_list[4]; + SANE_String_Const paper_protect_list[4]; + SANE_String_Const staple_detect_list[4]; SANE_String_Const bg_color_list[4]; SANE_String_Const do_color_list[5]; SANE_String_Const lamp_color_list[5]; @@ -454,6 +452,7 @@ int variance; /*advanced group*/ + int awd; int ald; int compress; int compress_arg; @@ -462,6 +461,9 @@ int df_thickness; int df_length; int df_diff; + int df_recovery; + int paper_protect; + int staple_detect; int bg_color; int dropout_color; int buff_mode; @@ -473,6 +475,7 @@ int green_offset; int blue_offset; int low_mem; + int hwdeskewcrop; int swdeskew; int swdespeck; int swcrop; @@ -534,6 +537,11 @@ unsigned char * buffers[2]; /* --------------------------------------------------------------------- */ + /*hardware feature bookkeeping*/ + int req_driv_crop; + int req_driv_lut; + + /* --------------------------------------------------------------------- */ /* values used by the software enhancment code (deskew, crop, etc) */ SANE_Status deskew_stat; int deskew_vals[2]; @@ -677,14 +685,6 @@ # define PATH_MAX 1024 #endif -#ifndef PATH_SEP -#ifdef HAVE_OS2_H -# define PATH_SEP '\\' -#else -# define PATH_SEP '/' -#endif -#endif - /* ------------------------------------------------------------------------- */ SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize); @@ -781,6 +781,7 @@ static SANE_Status set_sleep_mode(struct fujitsu *s); +static int must_fully_buffer (struct fujitsu *s); static int get_page_width (struct fujitsu *s); static int get_page_height (struct fujitsu *s); @@ -788,7 +789,7 @@ static SANE_Status send_endorser (struct fujitsu *s); static SANE_Status endorser (struct fujitsu *s); static SANE_Status set_window (struct fujitsu *s); -static SANE_Status get_pixelsize(struct fujitsu *s); +static SANE_Status get_pixelsize(struct fujitsu *s, int actual); static SANE_Status update_params (struct fujitsu *s); static SANE_Status backup_params (struct fujitsu *s); diff -Nru sane-backends-1.0.22/backend/genesys.c sane-backends-1.0.23/backend/genesys.c --- sane-backends-1.0.22/backend/genesys.c 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys.c 2012-08-10 00:33:29.000000000 +0000 @@ -2,7 +2,7 @@ Copyright (C) 2003, 2004 Henning Meier-Geinitz Copyright (C) 2004, 2005 Gerhard Jaeger - Copyright (C) 2004-2011 Stphane Voltz + Copyright (C) 2004-2012 Stphane Voltz Copyright (C) 2005-2009 Pierre Willenbrock Copyright (C) 2006 Laurent Charpentier Copyright (C) 2007 Luke @@ -58,29 +58,12 @@ * SANE backend for Genesys Logic GL646/GL841/GL842/GL843/GL847/GL124 based scanners */ -#include "../include/sane/config.h" - -#define BUILD 63 - -#include -#include -#include -#include -#include - -#include "../include/sane/sane.h" -#include "../include/sane/sanei.h" -#include "../include/sane/saneopts.h" - +#define BUILD 2302 #define BACKEND_NAME genesys -#include "../include/sane/sanei_backend.h" -#include "../include/sane/sanei_usb.h" +#include "genesys.h" #include "../include/sane/sanei_config.h" -#include "../include/_stdint.h" #include "../include/sane/sanei_magic.h" - -#include "genesys.h" #include "genesys_devices.c" static SANE_Int num_devices = 0; @@ -159,7 +142,7 @@ 0 /* quantization */ }; -static const SANE_Range threshold_percentage_range = { +static const SANE_Range percentage_range = { SANE_FIX (0), /* minimum */ SANE_FIX (100), /* maximum */ SANE_FIX (1) /* quantization */ @@ -171,7 +154,6 @@ 1 /* quantization */ }; - void sanei_genesys_init_structs (Genesys_Device * dev) { @@ -207,6 +189,7 @@ } } + /* sanity check */ if (sensor_ok == 0 || motor_ok == 0 || gpo_ok == 0) { DBG (DBG_error0, @@ -214,6 +197,11 @@ dev->model->ccd_type, dev->model->gpo_type, dev->model->motor_type); } + + /* set up initial line distance shift */ + dev->ld_shift_r = dev->model->ld_shift_r; + dev->ld_shift_g = dev->model->ld_shift_g; + dev->ld_shift_b = dev->model->ld_shift_b; } void @@ -221,7 +209,7 @@ { unsigned int i; - DBG (DBG_proc, "sanei_genesys_init_fe: start\n"); + DBGSTART; for (i = 0; i < sizeof (Wolfson) / sizeof (Genesys_Frontend); i++) { if (dev->model->dac_type == Wolfson[i].fe_id) @@ -235,7 +223,7 @@ dev->model->dac_type); DBG (DBG_info, "sanei_genesys_init_fe: dac_type %d set up\n", dev->model->dac_type); - DBG (DBG_proc, "sanei_genesys_init_fe: end\n"); + DBGCOMPLETED; } /* main function for slope creation */ @@ -428,62 +416,6 @@ return sum_time; } -/* Generate slope table for motor movement */ -/* This function translates a call of the old slope creation function to a - call to the new one - */ -static SANE_Int -genesys_create_slope_table4 (Genesys_Device * dev, - uint16_t * slope_table, int steps, - int step_type, int exposure_time, - SANE_Bool same_speed, double yres, - int power_mode) -{ - unsigned int sum_time = 0; - unsigned int vtarget; - unsigned int vend; - unsigned int vstart; - - DBG (DBG_proc, - "sanei_genesys_create_slope_table: %d steps, step_type = %d, " - "exposure_time = %d, same_speed = %d, yres = %.2f, power_mode = %d\n", - steps, step_type, exposure_time, same_speed, yres, power_mode); - - /* final speed */ - vtarget = (exposure_time * yres) / dev->motor.base_ydpi; - - vstart = dev->motor.slopes[power_mode][step_type].maximum_start_speed; - vend = dev->motor.slopes[power_mode][step_type].maximum_speed; - - vtarget >>= step_type; - if (vtarget > 65535) - vtarget = 65535; - - vstart >>= step_type; - if (vstart > 65535) - vstart = 65535; - - vend >>= step_type; - if (vend > 65535) - vend = 65535; - - sum_time = sanei_genesys_generate_slope_table (slope_table, 128, - steps, - vtarget, - vstart, - vend, - dev->motor.slopes[power_mode] - [step_type].minimum_steps << - step_type, - dev->motor.slopes[power_mode] - [step_type].g, NULL, NULL); - - DBG (DBG_proc, - "sanei_genesys_create_slope_table: returns sum_time=%d, completed\n", - sum_time); - - return sum_time; -} /* alternate slope table creation function */ /* the hardcoded values (g and vstart) will go in a motor struct */ @@ -626,11 +558,6 @@ dev = dev; - if (dev->model->flags & GENESYS_FLAG_ALT_SLOPE_CREATE) - return genesys_create_slope_table4 (dev, slope_table, steps, - step_type, exposure_time, - same_speed, yres, power_mode); - if (dev->model->motor_type == MOTOR_5345 || dev->model->motor_type == MOTOR_HP2300 || dev->model->motor_type == MOTOR_HP2400) @@ -985,7 +912,7 @@ if(dev->model->cmd_set->send_shading_data!=NULL) { status=dev->model->cmd_set->send_shading_data(dev, data, size); - DBG (DBG_proc, "genesys_send_offset_and_shading: completed\n"); + DBGCOMPLETED; return status; } @@ -1038,7 +965,7 @@ return status; } - DBG (DBG_proc, "genesys_send_offset_and_shading: completed\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -1093,7 +1020,7 @@ free (shading_data); - DBG (DBG_proc, "sanei_genesys_init_shading_data: completed\n"); + DBGCOMPLETED; return status; } @@ -1412,7 +1339,7 @@ range = size / 50; - if (dev->settings.scan_method == 2) /* transparency mode */ + if (dev->settings.scan_method == SCAN_METHOD_TRANSPARENCY) /* transparency mode */ gain_white_ref = dev->sensor.fau_gain_white_ref * 256; else gain_white_ref = dev->sensor.gain_white_ref * 256; @@ -1557,7 +1484,7 @@ double applied_multi; double gain_white_ref; - if (dev->settings.scan_method == 2) /* Transparency */ + if (dev->settings.scan_method == SCAN_METHOD_TRANSPARENCY) /* Transparency */ gain_white_ref = dev->sensor.fau_gain_white_ref * 256; else gain_white_ref = dev->sensor.gain_white_ref * 256; @@ -1790,7 +1717,7 @@ dev->frontend.gain[0], dev->frontend.gain[1], dev->frontend.gain[2], dev->frontend.offset[0], dev->frontend.offset[1], dev->frontend.offset[2]); - DBG (DBG_proc, "genesys_coarse_calibration: completed\n"); + DBGCOMPLETED; return status; } @@ -1803,10 +1730,11 @@ #endif void genesys_average_data (uint8_t * average_data, - uint8_t * calibration_data, uint16_t lines, - uint16_t pixel_components_per_line) + uint8_t * calibration_data, + uint32_t lines, + uint32_t pixel_components_per_line) { - int x, y; + uint32_t x, y; uint32_t sum; for (x = 0; x < pixel_components_per_line; x++) @@ -1836,11 +1764,13 @@ { SANE_Status status; size_t size; - uint16_t pixels_per_line; + uint32_t pixels_per_line; uint8_t channels; uint8_t *calibration_data; + SANE_Bool motor; + + DBGSTART; - DBG (DBG_proc, "genesys_dark_shading_calibration\n"); /* end pixel - start pixel */ pixels_per_line = dev->calib_pixels; channels = dev->calib_channels; @@ -1858,7 +1788,7 @@ } /* size is size in bytes for scanarea: bytes_per_line * lines */ - size = channels * 2 * pixels_per_line * (dev->model->shading_lines + 1); + size = channels * 2 * pixels_per_line * (dev->calib_lines + 1); calibration_data = malloc (size); if (!calibration_data) @@ -1868,17 +1798,23 @@ return SANE_STATUS_NO_MEM; } + motor=SANE_TRUE; + if (dev->model->flags & GENESYS_FLAG_SHADING_NO_MOVE) + { + motor=SANE_FALSE; + } + /* turn off motor and lamp power for flatbed scanners, but not for sheetfed scanners - * because they have a calibration sheet with a sufficent black strip */ + * because they have a calibration sheet with a sufficient black strip */ if (dev->model->is_sheetfed == SANE_FALSE) { dev->model->cmd_set->set_lamp_power (dev, dev->calib_reg, SANE_FALSE); - dev->model->cmd_set->set_motor_power (dev->calib_reg, SANE_TRUE); + dev->model->cmd_set->set_motor_power (dev->calib_reg, motor); } else { dev->model->cmd_set->set_lamp_power (dev, dev->calib_reg, SANE_TRUE); - dev->model->cmd_set->set_motor_power (dev->calib_reg, SANE_TRUE); + dev->model->cmd_set->set_motor_power (dev->calib_reg, motor); } status = @@ -1889,7 +1825,7 @@ { free (calibration_data); DBG (DBG_error, - "genesys_dark_shading_calibration: Failed to bulk write registers: %s\n", + "genesys_dark_shading_calibration: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -1927,14 +1863,14 @@ } genesys_average_data (dev->dark_average_data, calibration_data, - dev->model->shading_lines, + dev->calib_lines, pixels_per_line * channels); if (DBG_LEVEL >= DBG_data) { sanei_genesys_write_pnm_file ("black_shading.pnm", calibration_data, 16, channels, pixels_per_line, - dev->model->shading_lines); + dev->calib_lines); sanei_genesys_write_pnm_file ("black_average.pnm", dev->dark_average_data, 16, channels, pixels_per_line, 1); @@ -1942,7 +1878,7 @@ free (calibration_data); - DBG (DBG_proc, "genesys_dark_shading_calibration: completed\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -1957,12 +1893,12 @@ static SANE_Status genesys_dummy_dark_shading (Genesys_Device * dev) { - uint16_t pixels_per_line; + uint32_t pixels_per_line; uint8_t channels; - int x, skip, xend; + uint32_t x, skip, xend; int dummy1, dummy2, dummy3; /* dummy black average per channel */ - DBG (DBG_proc, "genesys_dummy_dark_shading \n"); + DBGSTART; pixels_per_line = dev->calib_pixels; channels = dev->calib_channels; @@ -2042,7 +1978,7 @@ } } - DBG (DBG_proc, "genesys_dummy_dark_shading: completed \n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -2052,12 +1988,13 @@ { SANE_Status status; size_t size; - uint16_t pixels_per_line; + uint32_t pixels_per_line; uint8_t *calibration_data; uint8_t channels; + SANE_Bool motor; - DBG (DBG_proc, "genesys_white_shading_calibration (lines = %d)\n", - dev->model->shading_lines); + DBG (DBG_proc, "genesys_white_shading_calibration (lines = %lu)\n", + dev->calib_lines); pixels_per_line = dev->calib_pixels; channels = dev->calib_channels; @@ -2073,7 +2010,7 @@ return SANE_STATUS_NO_MEM; } - size = channels * 2 * pixels_per_line * (dev->model->shading_lines + 1); + size = channels * 2 * pixels_per_line * (dev->calib_lines + 1); calibration_data = malloc (size); if (!calibration_data) @@ -2083,9 +2020,19 @@ return SANE_STATUS_NO_MEM; } + motor=SANE_TRUE; + if (dev->model->flags & GENESYS_FLAG_SHADING_NO_MOVE) + { + motor=SANE_FALSE; + } + /* turn on motor and lamp power */ dev->model->cmd_set->set_lamp_power (dev, dev->calib_reg, SANE_TRUE); - dev->model->cmd_set->set_motor_power (dev->calib_reg, SANE_TRUE); + dev->model->cmd_set->set_motor_power (dev->calib_reg, motor); + if (dev->model->flags & GENESYS_FLAG_SHADING_REPARK) + { + status = dev->model->cmd_set->slow_back_home (dev, SANE_TRUE); + } status = dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg, @@ -2136,10 +2083,10 @@ if (DBG_LEVEL >= DBG_data) sanei_genesys_write_pnm_file ("white_shading.pnm", calibration_data, 16, channels, pixels_per_line, - dev->model->shading_lines); + dev->calib_lines); genesys_average_data (dev->white_average_data, calibration_data, - dev->model->shading_lines, + dev->calib_lines, pixels_per_line * channels); if (DBG_LEVEL >= DBG_data) @@ -2161,8 +2108,13 @@ return status; } } + + if (dev->model->flags & GENESYS_FLAG_SHADING_REPARK) + { + status = dev->model->cmd_set->slow_back_home (dev, SANE_TRUE); + } - DBG (DBG_proc, "genesys_white_shading_calibration: completed\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -2175,17 +2127,18 @@ { SANE_Status status; size_t size; - uint16_t pixels_per_line; + uint32_t pixels_per_line; uint8_t *calibration_data, *average_white, *average_dark; uint8_t channels; unsigned int x; int y; uint32_t dark, white, dark_sum, white_sum, dark_count, white_count, col, dif; + SANE_Bool motor; - DBG (DBG_proc, "genesys_black_white_shading_calibration (lines = %d)\n", - dev->model->shading_lines); + DBG (DBG_proc, "genesys_black_white_shading_calibration (lines = %lu)\n", + dev->calib_lines); pixels_per_line = dev->calib_pixels; channels = dev->calib_channels; @@ -2214,7 +2167,7 @@ return SANE_STATUS_NO_MEM; } - size = channels * 2 * pixels_per_line * dev->model->shading_lines; + size = channels * 2 * pixels_per_line * dev->calib_lines; calibration_data = malloc (size); if (!calibration_data) @@ -2224,9 +2177,15 @@ return SANE_STATUS_NO_MEM; } + motor=SANE_TRUE; + if (dev->model->flags & GENESYS_FLAG_SHADING_NO_MOVE) + { + motor=SANE_FALSE; + } + /* turn on motor and lamp power */ dev->model->cmd_set->set_lamp_power (dev, dev->calib_reg, SANE_TRUE); - dev->model->cmd_set->set_motor_power (dev->calib_reg, SANE_TRUE); + dev->model->cmd_set->set_motor_power (dev->calib_reg, motor); status = dev->model->cmd_set->bulk_write_register (dev, dev->calib_reg, @@ -2275,7 +2234,7 @@ if (DBG_LEVEL >= DBG_data) sanei_genesys_write_pnm_file ("black_white_shading.pnm", calibration_data, 16, channels, pixels_per_line, - dev->model->shading_lines); + dev->calib_lines); average_white = dev->white_average_data; @@ -2286,7 +2245,7 @@ dark = 0xffff; white = 0; - for (y = 0; y < dev->model->shading_lines; y++) + for (y = 0; y < (int)dev->calib_lines; y++) { col = calibration_data[(x + y * pixels_per_line * channels) * 2]; col |= @@ -2310,7 +2269,7 @@ white_count = 0; white_sum = 0; - for (y = 0; y < dev->model->shading_lines; y++) + for (y = 0; y < (int)dev->calib_lines; y++) { col = calibration_data[(x + y * pixels_per_line * channels) * 2]; col |= @@ -2352,7 +2311,7 @@ free (calibration_data); - DBG (DBG_proc, "genesys_dark_white_shading_calibration: completed\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -2512,80 +2471,6 @@ } } } -#ifndef UNIT_TESTING -static -#endif -int -compute_gl843_coefficients (Genesys_Device * dev, - uint8_t ** shading_data, - unsigned int pixels, - unsigned int coeff, - unsigned int target) -{ - uint16_t *buffer = (uint16_t *) * shading_data, *darkptr, *whiteptr; - int size; - unsigned int i, count; - uint16_t val; - - darkptr = (uint16_t *) dev->dark_average_data; - whiteptr = (uint16_t *) dev->white_average_data; - - size = (pixels * 2 * 3 * 256) / 252 * 2 + 512; - DBG (DBG_io, "%s: final shading size=%04x\n", __FUNCTION__, size); - *shading_data = (uint8_t *) malloc (size); - if (*shading_data == NULL) - return 0; - - memset(*shading_data,0,size); - - /* offset */ - buffer = (uint16_t *)*shading_data; - count = 0; - - /* loop over calibration data to build shading coefficients */ - for (i = 0; i < pixels; i++) - { - /* red */ - *buffer = darkptr[3 * i]; - buffer++; - count++; - val = - compute_coefficient (coeff, target, whiteptr[3 * i] - darkptr[3 * i]); - *buffer = val; - buffer++; - count++; - - /* green */ - *buffer = darkptr[3 * i + 1]; - buffer++; - count++; - val = - compute_coefficient (coeff, target, - whiteptr[3 * i + 1] - darkptr[3 * i + 1]); - *buffer = val; - buffer++; - count++; - - /* blue */ - *buffer = darkptr[3 * i + 2]; - buffer++; - count++; - val = - compute_coefficient (coeff, target, - whiteptr[3 * i + 2] - darkptr[3 * i + 2]); - *buffer = val; - buffer++; - count++; - - if ((count % 256) == 252) - { - buffer += 4; - count += 4; - } - } - - return size; -} /** * Computes shading coefficient using formula in data sheet. 16bit data values @@ -2607,7 +2492,7 @@ uint8_t * shading_data, unsigned int pixels_per_line, unsigned int channels, - int cmat[3], + unsigned int cmat[3], int offset, unsigned int coeff, unsigned int target) @@ -2685,14 +2570,14 @@ unsigned int pixels_per_line, unsigned int words_per_color, unsigned int channels, - int cmat[3], + unsigned int cmat[3], unsigned int offset, unsigned int coeff, unsigned int target) { uint8_t *ptr; /* contains 16bit words in little endian */ - unsigned int x, c, i; - unsigned int val, dk, br; + uint32_t x, c, i; + uint32_t val, dk, br; DBG (DBG_io, "compute_planar_coefficients: factor=%d, pixels_per_line=%d, words=0x%X, coeff=0x%04x\n", factor, @@ -2704,8 +2589,7 @@ { /* x2 because of 16 bit values, and x2 since one coeff for dark * and another for white */ - ptr = - shading_data + words_per_color * cmat[c] * 2 + (x + offset) * 4; + ptr = shading_data + words_per_color * cmat[c] * 2 + (x + offset) * 4; dk = 0; br = 0; @@ -2756,7 +2640,7 @@ uint8_t * shading_data, unsigned int pixels_per_line, unsigned int channels, - int cmat[3], + unsigned int cmat[3], int offset, unsigned int coeff, unsigned int target_dark, @@ -2846,17 +2730,17 @@ genesys_send_shading_coefficient (Genesys_Device * dev) { SANE_Status status; - uint16_t pixels_per_line; + uint32_t pixels_per_line; uint8_t *shading_data; /**> contains 16bit words in little endian */ uint8_t channels; int o; unsigned int length; /**> number of shading calibration data words */ unsigned int x, j, i, res, factor; - int cmat[3]; /**> matrix of color channels */ + unsigned int cmat[3]; /**> matrix of color channels */ unsigned int coeff, target_code, val, avgpixels, dk, words_per_color = 0; unsigned int target_dark, target_bright, br; - DBG (DBG_proc, "genesys_send_shading_coefficient\n"); + DBGSTART; pixels_per_line = dev->calib_pixels; @@ -2931,30 +2815,6 @@ cmat[2] = 2; switch (dev->model->ccd_type) { - case CIS_CANONLIDE110: - words_per_color=pixels_per_line*2; - length = words_per_color * 3 * 2; - /* XXX STEF XXX re do it better, words per color is wrong since our dpihw vary */ - free(shading_data); - shading_data = malloc (length); - if (!shading_data) - { - DBG (DBG_error, - "genesys_send_shading_coefficient: failed to allocate memory\n"); - return SANE_STATUS_NO_MEM; - } - memset (shading_data, 0x55, length); - compute_planar_coefficients (dev, - shading_data, - 1, - pixels_per_line, - words_per_color, - channels, - cmat, - 0, - coeff, - 0xdc00); - break; case CCD_XP300: case CCD_ROADWARRIOR: case CCD_DP665: @@ -3050,28 +2910,41 @@ case CCD_KVSS080: case CCD_G4050: target_code = 0xe000; - free(shading_data); - length=compute_gl843_coefficients (dev, - &shading_data, - pixels_per_line, - coeff, - target_code); + o = 0; + compute_coefficients (dev, + shading_data, + pixels_per_line, + 3, + cmat, + o, + coeff, + target_code); break; + case CIS_CANONLIDE700: case CIS_CANONLIDE100: case CIS_CANONLIDE200: - /* we are not using SHDAREA, and AVEENB is disabled */ + case CIS_CANONLIDE110: words_per_color=pixels_per_line*2; length = words_per_color * 3 * 2; - compute_averaged_planar(dev, - shading_data, - pixels_per_line, - words_per_color, - 3, - 4, - coeff, - 0xfa00, - 0x0a00, - SANE_TRUE); + free(shading_data); + shading_data = malloc (length); + if (!shading_data) + { + DBG (DBG_error, + "genesys_send_shading_coefficient: failed to allocate memory\n"); + return SANE_STATUS_NO_MEM; + } + memset (shading_data, 0, length); + compute_planar_coefficients (dev, + shading_data, + 1, + pixels_per_line, + words_per_color, + channels, + cmat, + 0, + coeff, + 0xdc00); break; case CCD_CANONLIDE35: target_bright = 0xfa00; @@ -3267,7 +3140,7 @@ sane_strstatus (status)); free (shading_data); - DBG (DBG_proc, "genesys_send_shading_coefficient: completed\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -3286,7 +3159,7 @@ SANE_Status status; Genesys_Calibration_Cache *cache; - DBG (DBG_proc, "genesys_restore_calibration\n"); + DBGSTART; /* if no cache or no function to evaluate cache entry ther can be no match */ if (!dev->model->cmd_set->is_compatible_calibration @@ -3305,10 +3178,11 @@ if (status == SANE_STATUS_GOOD) { memcpy (&dev->frontend, &cache->frontend, sizeof (dev->frontend)); - /* don't restore the gamma fields */ - memcpy (&dev->sensor, &cache->sensor, - offsetof (Genesys_Sensor, red_gamma)); - + /* we don't restore the gamma fields */ + /* XXX STEF XXX + memcpy (&dev->sensor, &cache->sensor, offsetof (Genesys_Sensor, red_gamma)); + */ + memcpy (dev->sensor.regs_0x10_0x1d, cache->sensor.regs_0x10_0x1d, 6); free (dev->dark_average_data); free (dev->white_average_data); @@ -3364,12 +3238,11 @@ { SANE_Status status = SANE_STATUS_UNSUPPORTED; Genesys_Calibration_Cache *cache = NULL; - uint8_t *tmp; #ifdef HAVE_SYS_TIME_H struct timeval time; #endif - DBG (DBG_proc, "genesys_save_calibration\n"); + DBGSTART; if (!dev->model->cmd_set->is_compatible_calibration) return SANE_STATUS_UNSUPPORTED; @@ -3378,8 +3251,7 @@ { for (cache = dev->calibration_cache; cache; cache = cache->next) { - status = dev->model->cmd_set->is_compatible_calibration (dev, cache, - SANE_TRUE); + status = dev->model->cmd_set->is_compatible_calibration (dev, cache, SANE_TRUE); if (status == SANE_STATUS_UNSUPPORTED) { continue; @@ -3395,64 +3267,48 @@ } } + /* if we found on overridable cache, we reuse it */ if (cache) { - if (dev->average_size > cache->average_size) - { - cache->average_size = dev->average_size; - - tmp = (uint8_t *) realloc (cache->dark_average_data, - cache->average_size); - if (!tmp) - return SANE_STATUS_NO_MEM; - cache->dark_average_data = tmp; - - tmp = (uint8_t *) realloc (cache->white_average_data, - cache->average_size); - if (!tmp) - return SANE_STATUS_NO_MEM; - cache->white_average_data = tmp; - } + free(cache->dark_average_data); + free(cache->white_average_data); } else { - cache = malloc (sizeof (*cache)); + /* create a new cache entry and insert it in the linked list */ + cache = malloc (sizeof (Genesys_Calibration_Cache)); if (!cache) return SANE_STATUS_NO_MEM; - memset (cache, 0, sizeof (*cache)); + memset (cache, 0, sizeof (Genesys_Calibration_Cache)); cache->next = dev->calibration_cache; dev->calibration_cache = cache; + } - cache->average_size = dev->average_size; - - cache->dark_average_data = (uint8_t *) malloc (cache->average_size); - if (!cache->dark_average_data) - return SANE_STATUS_NO_MEM; - cache->white_average_data = (uint8_t *) malloc (cache->average_size); - if (!cache->white_average_data) - return SANE_STATUS_NO_MEM; + cache->average_size = dev->average_size; - memcpy (&cache->used_setup, &dev->current_setup, - sizeof (cache->used_setup)); - } + cache->dark_average_data = (uint8_t *) malloc (cache->average_size); + if (!cache->dark_average_data) + return SANE_STATUS_NO_MEM; + cache->white_average_data = (uint8_t *) malloc (cache->average_size); + if (!cache->white_average_data) + return SANE_STATUS_NO_MEM; + memcpy (&cache->used_setup, &dev->current_setup, sizeof (cache->used_setup)); memcpy (&cache->frontend, &dev->frontend, sizeof (cache->frontend)); memcpy (&cache->sensor, &dev->sensor, sizeof (cache->sensor)); cache->calib_pixels = dev->calib_pixels; cache->calib_channels = dev->calib_channels; - memcpy (cache->dark_average_data, dev->dark_average_data, - cache->average_size); - memcpy (cache->white_average_data, dev->white_average_data, - cache->average_size); + memcpy (cache->dark_average_data, dev->dark_average_data, cache->average_size); + memcpy (cache->white_average_data, dev->white_average_data, cache->average_size); #ifdef HAVE_SYS_TIME_H gettimeofday(&time,NULL); cache->last_calibration = time.tv_sec; #endif - DBG (DBG_proc, "genesys_save_calibration: completed\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -3468,7 +3324,7 @@ genesys_flatbed_calibration (Genesys_Device * dev) { SANE_Status status; - uint16_t pixels_per_line; + uint32_t pixels_per_line; int yres; DBG (DBG_info, "genesys_flatbed_calibration\n"); @@ -3584,8 +3440,8 @@ } } - /* we always use sensor pixel number in case of odd/even sensors */ - if (!(dev->model->flags & GENESYS_FLAG_ODD_EVEN_CIS)) + /* we always use sensor pixel number when the ASIC can't handle multi-segments sensor */ + if (!(dev->model->flags & GENESYS_FLAG_SIS_SENSOR)) { pixels_per_line = (SANE_UNFIX (dev->model->x_size) * dev->settings.xres) / MM_PER_INCH; } @@ -3682,7 +3538,7 @@ SANE_Bool forward = SANE_TRUE; int xres; - DBG (DBG_proc, "genesys_sheetfed_calibration: start\n"); + DBGSTART; if (dev->model->cmd_set->search_strip == NULL) { DBG (DBG_error, @@ -3861,7 +3717,7 @@ * pixel and use it to fill the dark_average * dev->calib_pixels (dev->sensor.sensor_pixels * dev->settings.xres) / dev->sensor.optical_res, - dev->model->shading_lines, + dev->calib_lines, */ } @@ -3894,7 +3750,7 @@ /* resotre settings */ dev->settings.xres = xres; - DBG (DBG_proc, "genesys_sheetfed_calibration: end\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -3994,7 +3850,7 @@ int max_out_val = (1 << out_bits) - 1; unsigned char * lut_p = lut; - DBG (DBG_proc, "load_lut: start\n"); + DBGSTART; /* slope is converted to rise per unit run: * first [-127,127] to [-1,1] @@ -4027,7 +3883,7 @@ lut_p++; } - DBG (DBG_proc, "load_lut: finish\n"); + DBGCOMPLETED; return ret; } @@ -4053,10 +3909,16 @@ int empty, lines = 3; SANE_Status status = SANE_STATUS_IO_ERROR; - DBG (DBG_proc, "genesys_warmup_lamp: start\n"); + DBGSTART; + + /* check if the current chipset implements warmup */ + if(dev->model->cmd_set->init_regs_for_warmup==NULL) + { + DBG (DBG_error, "%s: init_regs_for_warmup not implemented\n", __FUNCTION__); + return status; + } - dev->model->cmd_set->init_regs_for_warmup (dev, dev->reg, &channels, - &total_size); + dev->model->cmd_set->init_regs_for_warmup (dev, dev->reg, &channels, &total_size); first_line = malloc (total_size); if (!first_line) return SANE_STATUS_NO_MEM; @@ -4067,7 +3929,6 @@ do { - DBG (DBG_info, "genesys_warmup_lamp: one more loop\n"); RIE (dev->model->cmd_set->begin_scan (dev, dev->reg, SANE_FALSE)); do @@ -4076,8 +3937,7 @@ } while (empty); - status = - sanei_genesys_read_data_from_scanner (dev, first_line, total_size); + status = sanei_genesys_read_data_from_scanner (dev, first_line, total_size); if (status != SANE_STATUS_GOOD) { RIE (sanei_genesys_read_data_from_scanner @@ -4103,12 +3963,11 @@ /* compute difference between the two scans */ for (pixel = 0; pixel < total_size; pixel++) { + /* 16 bit data */ if (dev->model->cmd_set->get_bitset_bit (dev->reg)) { - first_average += - (first_line[pixel] + first_line[pixel + 1] * 256); - second_average += - (second_line[pixel] + second_line[pixel + 1] * 256); + first_average += (first_line[pixel] + first_line[pixel + 1] * 256); + second_average += (second_line[pixel] + second_line[pixel + 1] * 256); pixel++; } else @@ -4146,9 +4005,8 @@ total_size / (lines * channels), lines); } - DBG (DBG_info, - "genesys_warmup_lamp: average 1 = %.2f %%, average 2 = %.2f %%\n", - first_average, second_average); + DBG (DBG_info, "genesys_warmup_lamp: average 1 = %.2f, average 2 = %.2f\n", first_average, second_average); + /* if delta below 15/255 ~= 5.8%, lamp is considred warm enough */ if (abs (first_average - second_average) < 15 && second_average > 55) break; @@ -4176,19 +4034,22 @@ free (first_line); free (second_line); + + DBGCOMPLETED; + return status; } /* High-level start of scanning */ static SANE_Status -genesys_start_scan (Genesys_Device * dev) +genesys_start_scan (Genesys_Device * dev, SANE_Bool lamp_off) { SANE_Status status; unsigned int steps, expected; SANE_Bool empty; - DBG (DBG_proc, "genesys_start_scan\n"); + DBGSTART; /* since not all scanners are set ot wait for head to park * we check we are not still parking before starting a new scan */ @@ -4215,7 +4076,7 @@ } /* wait for lamp warmup : until a warmup for TRANSPARENCY is designed, skip - * it when scanning from XPA */ + * it when scanning from XPA. */ if (!(dev->model->flags & GENESYS_FLAG_SKIP_WARMUP) && (dev->settings.scan_method == SCAN_METHOD_FLATBED)) { @@ -4368,10 +4229,17 @@ sane_strstatus (status)); return status; } + + /* no lamp during scan */ + if(lamp_off == SANE_TRUE) + { + dev->model->cmd_set->set_lamp_power (dev, dev->reg, SANE_FALSE); + } /* GL124 is using SHDAREA, so we have to wait for scan to be set up before * sending shading data */ - if(dev->model->cmd_set->send_shading_data!=NULL) + if( (dev->model->cmd_set->send_shading_data!=NULL) + && !(dev->model->flags & GENESYS_FLAG_NO_CALIBRATION)) { status = genesys_send_shading_coefficient (dev); if (status != SANE_STATUS_GOOD) @@ -4461,8 +4329,8 @@ } while (steps < 1); } - - DBG (DBG_proc, "genesys_start_scan: completed\n"); + + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -4537,12 +4405,6 @@ #include "genesys_conv.c" -#define SANE_DEBUG_LOG_RAW_DATA 1 - -#ifdef SANE_DEBUG_LOG_RAW_DATA -static FILE *rawfile = NULL; -#endif - static SANE_Status accurate_line_read(Genesys_Device * dev, SANE_Byte *buffer, size_t size) @@ -4560,174 +4422,8 @@ /* done reading */ dev->oe_buffer.avail = size; dev->oe_buffer.pos = 0; -#ifdef SANE_DEBUG_LOG_RAW_DATA - if (rawfile != NULL) - { - fwrite (buffer, size, 1, rawfile); - } -#endif - return status; -} -#if 0 -static SANE_Status accurate_line_read(Genesys_Device * dev, - SANE_Byte *buffer, - size_t size) -{ - SANE_Status status; - unsigned int words; - size_t done, count; - - done = 0; - while (done < size) - { - /* wait for data */ - words = 0; - count = 0; - while (words == 0) - { - status = sanei_genesys_read_valid_words (dev, &words); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "accurate_line_read: failed to read words (%s)\n", - sane_strstatus (status)); - return SANE_STATUS_IO_ERROR; - } - if (words == 0) - { - count++; - /* couldn't read a line in 10s */ - if (count > 1000) - { - DBG (DBG_error, "accurate_line_read: failed while waiting for data \n"); - return SANE_STATUS_IO_ERROR; - } - usleep (10000); - } - } - - /* change to bytes */ - words *= 2; - - /* compute read size */ - if(words>size-done) - words=size-done; - if(words>0xeff0) - words=0xeff0; - status = dev->model->cmd_set->bulk_read_data (dev, 0x45, buffer, words); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "accurate_line_read: failed to read %lu bytes (%s)\n", - (u_long) size, sane_strstatus (status)); - return SANE_STATUS_IO_ERROR; - } - done += words; - } - - /* done reading */ - dev->oe_buffer.avail = dev->oe_buffer.size; - dev->oe_buffer.pos = 0; -#ifdef SANE_DEBUG_LOG_RAW_DATA - if (rawfile != NULL) - { - fwrite (dev->oe_buffer.buffer, dev->oe_buffer.avail, 1, rawfile); - } -#endif return status; } -#endif - -/** @brief fill buffer for odd/even sensors - * This function fills a read buffer with scanned data from a sensor - * which puts odd and even pixels in 2 different data segment. So a complete - * must be read and bytes interleaved to get usable by the other stages - * of the backend - */ -static SANE_Status -genesys_fill_oe_buffer (Genesys_Device * dev, uint8_t *work_buffer_dst, size_t size) -{ - size_t count; - SANE_Status status; - - /* fill buffer if needed */ - if (dev->oe_buffer.avail == 0) - { - status = accurate_line_read(dev,dev->oe_buffer.buffer,dev->oe_buffer.size); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "%s: failed to read %lu bytes (%s)\n", __FUNCTION__, - (u_long) dev->oe_buffer.size, sane_strstatus (status)); - return SANE_STATUS_IO_ERROR; - } - } - - /* copy size bytes of data, copying from a subwindow of each line - * when last line of buffer is exhausted, read another one */ - count = 0; - while (count < size) - { - if(dev->settings.double_xres==SANE_TRUE) - { - /* copy only even pixel */ - work_buffer_dst[count] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - /* update counter and pointer */ - count++; - dev->cur++; - } - else if(dev->settings.depth==8 && dev->settings.double_xres==SANE_FALSE) - { - while (dev->cur < dev->len && count < size) - { - /* copy even pixel */ - work_buffer_dst[count] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - /* copy odd pixel */ - work_buffer_dst[count + 1] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist + dev->oe_buffer.pos]; - /* update counter and pointer */ - count += 2; - dev->cur++; - } - } - else if(dev->settings.depth==16 && dev->settings.double_xres==SANE_FALSE) - { - while (dev->cur < dev->len && count < size) - { - /* copy even pixel */ - work_buffer_dst[count] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - work_buffer_dst[count+1] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos+1]; - /* copy odd pixel */ - work_buffer_dst[count + 2] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist + dev->oe_buffer.pos]; - work_buffer_dst[count + 3] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist + dev->oe_buffer.pos+1]; - /* update counter and pointer */ - count += 4; - dev->cur+=2; - } - } - - /* go to next line if needed */ - if (dev->cur == dev->len) - { - dev->oe_buffer.pos += dev->bpl; - dev->cur = 0; - } - - /* read a new buffer if needed */ - if (dev->oe_buffer.pos >= dev->oe_buffer.avail) - { - status = accurate_line_read(dev,dev->oe_buffer.buffer,dev->oe_buffer.size); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "%s: failed to read %lu bytes (%s)\n", __FUNCTION__, - (u_long) dev->oe_buffer.size, sane_strstatus (status)); - return SANE_STATUS_IO_ERROR; - } - } - } - - return SANE_STATUS_GOOD; -} /** @brief fill buffer while reducing vertical resolution * This function fills a read buffer with scanned data from a sensor @@ -4806,12 +4502,10 @@ { size_t count; SANE_Status status; - uint8_t odd,even,mask; - uint16_t merged; - int depth,i; + int depth,i,n,k; depth = dev->settings.depth; - if (dev->settings.scan_mode == SCAN_MODE_LINEART) + if (dev->settings.scan_mode == SCAN_MODE_LINEART && dev->settings.dynamic_lineart==SANE_FALSE) depth = 1; /* fill buffer if needed */ @@ -4835,158 +4529,67 @@ if(dev->settings.double_xres==SANE_TRUE) { /* copy only even pixel */ - work_buffer_dst[count] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; + work_buffer_dst[count] = dev->oe_buffer.buffer[dev->cur + dev->oe_buffer.pos]; /* update counter and pointer */ count++; dev->cur++; } else { - /* here we must handle the segments to copy data */ - if(dev->segnb==2) - { - if(depth==8) + if(depth==1) { while (dev->cur < dev->len && count < size) - { - /* copy even pixel */ - work_buffer_dst[count] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - /* copy odd pixel */ - work_buffer_dst[count + 1] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist + dev->oe_buffer.pos]; - /* update counter and pointer */ - count += 2; - dev->cur++; - } - } - else if(depth==16) - { - while (dev->cur < dev->len && count < size) - { - /* copy even pixel */ - work_buffer_dst[count] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - work_buffer_dst[count+1] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos+1]; - /* copy odd pixel */ - work_buffer_dst[count + 2] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist + dev->oe_buffer.pos]; - work_buffer_dst[count + 3] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist + dev->oe_buffer.pos+1]; - /* update counter and pointer */ - count += 4; - dev->cur+=2; - } - } else { /* lineart case */ - while (dev->cur < dev->len && count < size) - { - /* get values to merge */ - odd = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - even = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist + dev->oe_buffer.pos]; - - /* interleave bits .... */ - merged=0; - for(i=7;i>=0;i--) + { + for(n=0;nsegnb;n++) { - mask=1<0) + work_buffer_dst[count+n] = 0; + } + /* interleaving is at bit level */ + for(i=0;i<8;i++) + { + k=count+(i*dev->segnb)/8; + for(n=0;nsegnb;n++) { - merged<<=1; + work_buffer_dst[k] = work_buffer_dst[k] << 1; + if((dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist*dev->order[n] + dev->oe_buffer.pos])&(128>>i)) + { + work_buffer_dst[k] |= 1; + } } } - - /* store result */ - work_buffer_dst[count] = merged >> 8; - work_buffer_dst[count+1] = merged & 255; /* update counter and pointer */ - count += 2; + count += dev->segnb; dev->cur++; } } - } - else if(dev->segnb==4) - { if(depth==8) { while (dev->cur < dev->len && count < size) { - work_buffer_dst[count + 0] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - work_buffer_dst[count + 1] = dev->oe_buffer.buffer[dev->cur + dev->skip + 2*dev->dist + dev->oe_buffer.pos]; - work_buffer_dst[count + 2] = dev->oe_buffer.buffer[dev->cur + dev->skip + 1*dev->dist + dev->oe_buffer.pos]; - work_buffer_dst[count + 3] = dev->oe_buffer.buffer[dev->cur + dev->skip + 3*dev->dist + dev->oe_buffer.pos]; + for(n=0;nsegnb;n++) + { + work_buffer_dst[count+n] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist*dev->order[n] + dev->oe_buffer.pos]; + } /* update counter and pointer */ - count += 4; - dev->cur+=1; + count += dev->segnb; + dev->cur++; } } - else if(depth==16) + if(depth==16) { while (dev->cur < dev->len && count < size) - { - work_buffer_dst[count + 0] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - work_buffer_dst[count + 1] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos+1]; - work_buffer_dst[count + 2] = dev->oe_buffer.buffer[dev->cur + dev->skip + 2*dev->dist + dev->oe_buffer.pos]; - work_buffer_dst[count + 3] = dev->oe_buffer.buffer[dev->cur + dev->skip + 2*dev->dist + dev->oe_buffer.pos+1]; - work_buffer_dst[count + 4] = dev->oe_buffer.buffer[dev->cur + dev->skip + 1*dev->dist + dev->oe_buffer.pos]; - work_buffer_dst[count + 5] = dev->oe_buffer.buffer[dev->cur + dev->skip + 1*dev->dist + dev->oe_buffer.pos+1]; - work_buffer_dst[count + 6] = dev->oe_buffer.buffer[dev->cur + dev->skip + 3*dev->dist + dev->oe_buffer.pos]; - work_buffer_dst[count + 7] = dev->oe_buffer.buffer[dev->cur + dev->skip + 3*dev->dist + dev->oe_buffer.pos+1]; - - /* update counter and pointer */ - count += 8; - dev->cur+=2; - } - } else { /* lineart case */ - while (dev->cur < dev->len && count < size) - { - /* get values to merge */ - odd = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->oe_buffer.pos]; - even = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist + dev->oe_buffer.pos]; - - /* interleave bits .... */ - merged=0; - for(i=7;i>=0;i--) + { + for(n=0;nsegnb;n++) { - mask=1<0) - { - merged<<=1; - } + work_buffer_dst[count+n*2] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist*dev->order[n] + dev->oe_buffer.pos]; + work_buffer_dst[count+n*2+1] = dev->oe_buffer.buffer[dev->cur + dev->skip + dev->dist*dev->order[n] + dev->oe_buffer.pos+1]; } - - /* store result */ - work_buffer_dst[count] = merged >> 8; - work_buffer_dst[count+1] = merged & 255; - /* update counter and pointer */ - count += 2; - dev->cur++; + count += dev->segnb*2; + dev->cur+=2; } } - } - else - { - DBG (DBG_error, "%s: %d is an unimplemented segment number ....\n",__FUNCTION__,dev->segnb); - return SANE_STATUS_INVAL; - } } /* go to next line if needed */ @@ -5013,7 +4616,9 @@ return SANE_STATUS_GOOD; } - +/** + * + */ static SANE_Status genesys_fill_read_buffer (Genesys_Device * dev) { @@ -5022,7 +4627,7 @@ SANE_Status status; uint8_t *work_buffer_dst; - DBG (DBG_proc, "genesys_fill_read_buffer: start\n"); + DBGSTART; /* for sheetfed scanner, we must check is document is shorter than * the requested scan */ @@ -5074,12 +4679,7 @@ * * This is also the place where full duplex data will be handled. */ - if (dev->model->flags & GENESYS_FLAG_ODD_EVEN_CIS) - { - /* odd/even processing */ - status = genesys_fill_oe_buffer (dev, work_buffer_dst, size); - } - else if (dev->line_interp>0) + if (dev->line_interp>0) { /* line interpolation */ status = genesys_fill_line_interp_buffer (dev, work_buffer_dst, size); @@ -5092,14 +4692,6 @@ else /* regular case with no extra copy */ { status = dev->model->cmd_set->bulk_read_data (dev, 0x45, work_buffer_dst, size); -#ifdef SANE_DEBUG_LOG_RAW_DATA - if (rawfile != NULL && DBG_LEVEL >= DBG_data) - { - /*TODO: convert big/little endian if depth == 16. - note: xv got this wrong for P5/P6. */ - fwrite (work_buffer_dst, size, 1, rawfile); - } -#endif } if (status != SANE_STATUS_GOOD) { @@ -5116,7 +4708,7 @@ RIE (sanei_genesys_buffer_produce (&(dev->read_buffer), size)); - DBG (DBG_proc, "genesys_fill_read_buffer: end\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -5141,11 +4733,10 @@ unsigned int needs_ccd; unsigned int needs_shrink; unsigned int needs_reverse; - unsigned int needs_gray_lineart; Genesys_Buffer *src_buffer; Genesys_Buffer *dst_buffer; - DBG (DBG_proc, "genesys_read_ordered_data\n"); + DBGSTART; if (dev->read_active != SANE_TRUE) { DBG (DBG_error, "genesys_read_ordered_data: read not active!\n"); @@ -5175,7 +4766,7 @@ dev->current_setup.half_ccd ? "yes" : "no", dev->current_setup.stagger, dev->current_setup.max_shift); -/*prepare conversion*/ + /* prepare conversion */ /* current settings */ channels = dev->current_setup.channels; depth = dev->current_setup.depth; @@ -5199,15 +4790,13 @@ needs_ccd = dev->current_setup.max_shift > 0; needs_shrink = dev->settings.pixels != src_pixels; needs_reverse = depth == 1; - needs_gray_lineart = depth == 8 && dev->settings.scan_mode == 0; DBG (DBG_info, - "genesys_read_ordered_data: using filters:%s%s%s%s%s\n", + "genesys_read_ordered_data: using filters:%s%s%s%s\n", needs_reorder ? " reorder" : "", needs_ccd ? " ccd" : "", needs_shrink ? " shrink" : "", - needs_reverse ? " reverse" : "", - needs_gray_lineart ? " gray_lineart" : ""); + needs_reverse ? " reverse" : ""); DBG (DBG_info, "genesys_read_ordered_data: frontend requested %lu bytes\n", @@ -5222,40 +4811,8 @@ DBG (DBG_proc, "genesys_read_ordered_data: nothing more to scan: EOF\n"); *len = 0; -#ifdef SANE_DEBUG_LOG_RAW_DATA - if (rawfile != NULL) - { - fclose (rawfile); - rawfile = NULL; - } -#endif return SANE_STATUS_EOF; } -#ifdef SANE_DEBUG_LOG_RAW_DATA - if (rawfile == NULL && DBG_LEVEL >= DBG_data) - { - rawfile = fopen ("raw.pnm", "wb"); - if (rawfile != NULL) - { - if (!(dev->model->flags & GENESYS_FLAG_ODD_EVEN_CIS)) - fprintf (rawfile, - "P%c\n%d %d\n%d\n", - dev->current_setup.channels == 1 ? - (dev->current_setup.depth == 1 ? '4' : '5') : '6', - dev->current_setup.pixels, - dev->current_setup.lines, - (1 << dev->current_setup.depth) - 1); - else - { - fprintf (rawfile, - "P5\n%d %d\n%d\n", - (dev->sensor.sensor_pixels*3*dev->settings.xres)/dev->sensor.optical_res, - dev->current_setup.lines, - (1 << dev->current_setup.depth) - 1); - } - } - } -#endif DBG (DBG_info, "genesys_read_ordered_data: %lu lines left by output\n", ((dev->total_bytes_to_read - dev->total_bytes_read) * 8UL) / @@ -5273,13 +4830,13 @@ else { ccd_shift[0] = - ((dev->model->ld_shift_r * dev->settings.yres) / + ((dev->ld_shift_r * dev->settings.yres) / dev->motor.base_ydpi); ccd_shift[1] = - ((dev->model->ld_shift_g * dev->settings.yres) / + ((dev->ld_shift_g * dev->settings.yres) / dev->motor.base_ydpi); ccd_shift[2] = - ((dev->model->ld_shift_b * dev->settings.yres) / + ((dev->ld_shift_b * dev->settings.yres) / dev->motor.base_ydpi); ccd_shift[3] = ccd_shift[0] + dev->current_setup.stagger; @@ -5541,8 +5098,8 @@ /*lines in input*/ dst_lines = (bytes * 8) / (src_pixels * channels * depth); -/*how many lines can be processed here?*/ -/*we are greedy. we work as much as possible*/ + /* how many lines can be processed here? */ + /* we are greedy. we work as much as possible */ bytes = dst_buffer->size - dst_buffer->avail; if (dst_lines > (bytes * 8) / (dev->settings.pixels * channels * depth)) @@ -5558,13 +5115,13 @@ if (dst_lines != 0) { - if (depth == 1) status = genesys_shrink_lines_1 (work_buffer_src, work_buffer_dst, dst_lines, src_pixels, - dev->settings.pixels, channels); + dev->settings.pixels, + channels); else if (depth == 8) status = genesys_shrink_lines_8 (work_buffer_src, work_buffer_dst, @@ -5586,11 +5143,11 @@ return SANE_STATUS_IO_ERROR; } -/*we just consumed this many bytes*/ + /* we just consumed this many bytes*/ bytes = (dst_lines * src_pixels * channels * depth) / 8; RIE (sanei_genesys_buffer_consume (src_buffer, bytes)); -/*we just created this many bytes*/ + /* we just created this many bytes*/ bytes = (dst_lines * dev->settings.pixels * channels * depth) / 8; RIE (sanei_genesys_buffer_produce (dst_buffer, bytes)); @@ -5598,8 +5155,7 @@ src_buffer = dst_buffer; } -/* move data to destination */ - + /* move data to destination */ bytes = src_buffer->avail; if (bytes > *len) bytes = *len; @@ -5617,39 +5173,6 @@ } *len = bytes; } - else if (needs_gray_lineart) - { - if (depth != 8) - { - DBG (DBG_error, "Cannot convert from 16bit to lineart\n"); - return SANE_STATUS_INVAL; - } - /* lines in input to process */ - dst_lines = bytes / (dev->settings.pixels * channels); - if(dst_lines==0) - { - /* padd to at least line length */ - dst_lines=1; - } - bytes = dst_lines * dev->settings.pixels * channels; - - status = genesys_gray_lineart (dev, - work_buffer_src, - destination, - dev->settings.pixels, - dst_lines, - dev->settings.threshold); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "genesys_read_ordered_data: failed to convert bits(%s)\n", - sane_strstatus (status)); - return SANE_STATUS_IO_ERROR; - } - - *len = dst_lines * channels * - (dev->settings.pixels / 8 + ((dev->settings.pixels % 8) ? 1 : 0)); - } else { memcpy (destination, work_buffer_src, bytes); @@ -5657,7 +5180,7 @@ } /* avoid signaling some extra data because we have treated a full block - * on the last block */ + * on the last block */ if (dev->total_bytes_read + *len > dev->total_bytes_to_read) *len = dev->total_bytes_to_read - dev->total_bytes_read; @@ -5665,6 +5188,16 @@ dev->total_bytes_read += *len; RIE (sanei_genesys_buffer_consume (src_buffer, bytes)); + + /* end scan if all needed data have been read */ + if(dev->total_bytes_read >= dev->total_bytes_to_read) + { + dev->model->cmd_set->end_scan (dev, dev->reg, SANE_TRUE); + if (dev->model->is_sheetfed == SANE_TRUE) + { + dev->model->cmd_set->eject_document (dev); + } + } DBG (DBG_proc, "genesys_read_ordered_data: completed, %lu bytes read\n", (u_long) bytes); @@ -5736,32 +5269,28 @@ s->dev->settings.xres = resolution; s->dev->settings.yres = resolution; - /* double x resolution mode */ - s->dev->settings.double_xres = SANE_FALSE; - if ((s->dev->model->flags & GENESYS_FLAG_ODD_EVEN_CIS) - && s->dev->settings.xres <= s->dev->sensor.optical_res / 2 - && s->dev->settings.xres != 400) - { - s->dev->settings.double_xres = SANE_TRUE; - } - s->params.lines = ((br_y - tl_y) * s->dev->settings.yres) / MM_PER_INCH; s->params.pixels_per_line = ((br_x - tl_x) * resolution) / MM_PER_INCH; /* we need an even number of pixels for even/odd handling */ - if (s->dev->model->flags & GENESYS_FLAG_ODD_EVEN_CIS + if (s->dev->model->flags & GENESYS_FLAG_SIS_SENSOR + || s->dev->model->asic_type == GENESYS_GL847 || s->dev->model->asic_type == GENESYS_GL124 || s->dev->model->asic_type == GENESYS_GL843) { - s->params.pixels_per_line = (s->params.pixels_per_line/4)*4; + if (s->dev->settings.xres <= 1200) + s->params.pixels_per_line = (s->params.pixels_per_line/4)*4; + else + s->params.pixels_per_line = (s->params.pixels_per_line/16)*16; } /* corner case for true lineart for sensor with several segments - * or when xres is doubled to mathc yres */ + * or when xres is doubled to match yres */ if (s->dev->settings.xres >= 1200 - && ( s->dev->model->asic_type == GENESYS_GL124 - || s->dev->current_setup.xres < s->dev->current_setup.yres + && ( s->dev->model->asic_type == GENESYS_GL124 + || s->dev->model->asic_type == GENESYS_GL847 + || s->dev->current_setup.xres < s->dev->current_setup.yres ) ) { @@ -5825,20 +5354,38 @@ s->dev->settings.true_gray = 0; /* dynamic lineart */ - s->dev->settings.dynamic_lineart = - s->val[OPT_DISABLE_DYNAMIC_LINEART].w == SANE_FALSE; - - /* threshold curve for dynamic ratserization */ - if(s->dev->settings.dynamic_lineart==SANE_TRUE) - s->dev->settings.threshold_curve=s->val[OPT_THRESHOLD_CURVE].w; - else - s->dev->settings.threshold_curve=0; + s->dev->settings.dynamic_lineart = SANE_FALSE; + s->dev->settings.threshold_curve=0; + if(s->val[OPT_DISABLE_DYNAMIC_LINEART].w ==SANE_FALSE + &&s->dev->settings.scan_mode == SCAN_MODE_LINEART) + { + s->dev->settings.dynamic_lineart = SANE_TRUE; + } + + /* hardware lineart works only when we don't have interleave data + * for GL847 scanners, ie up to 600 DPI, then we have to rely on + * dynamic_lineart */ + if(s->dev->settings.xres > 600 + && s->dev->model->asic_type==GENESYS_GL847 + && s->dev->settings.scan_mode == SCAN_MODE_LINEART) + { + s->dev->settings.dynamic_lineart = SANE_TRUE; + } + + + /* threshold curve for dynamic rasterization */ + s->dev->settings.threshold_curve=s->val[OPT_THRESHOLD_CURVE].w; /* some digital processing requires the whole picture to be buffered */ /* no digital processing takes place when doing preview, or when bit depth is * higher than 8 bits */ - if ((s->val[OPT_SWDESPECK].b || s->val[OPT_SWCROP].b || s->val[OPT_SWDESKEW].b) - && (!s->val[OPT_PREVIEW].b) && (s->val[OPT_BIT_DEPTH].w <= 8)) + if ((s->val[OPT_SWDESPECK].b + || s->val[OPT_SWCROP].b + || s->val[OPT_SWDESKEW].b + || s->val[OPT_SWDEROTATE].b + ||(SANE_UNFIX(s->val[OPT_SWSKIP].w)>0)) + && (!s->val[OPT_PREVIEW].b) + && (s->val[OPT_BIT_DEPTH].w <= 8)) { s->dev->buffer_image=SANE_TRUE; } @@ -5924,17 +5471,13 @@ static SANE_Status init_options (Genesys_Scanner * s) { - SANE_Int option, count; + SANE_Int option, count, min_dpi; SANE_Status status; SANE_Word *dpi_list; Genesys_Model *model = s->dev->model; - SANE_Bool has_ta; SANE_Range *x_range, *y_range; - DBG (DBG_proc, "init_options: start\n"); - - /* no transparency adaptor support yet */ - has_ta = SANE_FALSE; + DBGSTART; memset (s->opt, 0, sizeof (s->opt)); memset (s->val, 0, sizeof (s->val)); @@ -5978,7 +5521,14 @@ s->opt[OPT_SOURCE].size = max_string_size (source_list); s->opt[OPT_SOURCE].constraint.string_list = source_list; s->val[OPT_SOURCE].s = strdup (FLATBED); - DISABLE (OPT_SOURCE); + if (!(model->flags & GENESYS_FLAG_HAS_UTA)) + { + DISABLE (OPT_SOURCE); + } + else + { + ENABLE (OPT_SOURCE); + } /* preview */ s->opt[OPT_PREVIEW].name = SANE_NAME_PREVIEW; @@ -6004,13 +5554,20 @@ DISABLE (OPT_BIT_DEPTH); /* resolution */ - for (count = 0; model->ydpi_values[count] != 0; count++); + min_dpi=200000; + for (count = 0; model->xdpi_values[count] != 0; count++) + { + if(model->xdpi_values[count]xdpi_values[count]; + } + } dpi_list = malloc ((count + 1) * sizeof (SANE_Word)); if (!dpi_list) return SANE_STATUS_NO_MEM; dpi_list[0] = count; - for (count = 0; model->ydpi_values[count] != 0; count++) - dpi_list[count + 1] = model->ydpi_values[count]; + for (count = 0; model->xdpi_values[count] != 0; count++) + dpi_list[count + 1] = model->xdpi_values[count]; s->opt[OPT_RESOLUTION].name = SANE_NAME_SCAN_RESOLUTION; s->opt[OPT_RESOLUTION].title = SANE_TITLE_SCAN_RESOLUTION; s->opt[OPT_RESOLUTION].desc = SANE_DESC_SCAN_RESOLUTION; @@ -6018,7 +5575,7 @@ s->opt[OPT_RESOLUTION].unit = SANE_UNIT_DPI; s->opt[OPT_RESOLUTION].constraint_type = SANE_CONSTRAINT_WORD_LIST; s->opt[OPT_RESOLUTION].constraint.word_list = dpi_list; - s->val[OPT_RESOLUTION].w = 300; + s->val[OPT_RESOLUTION].w = min_dpi; /* "Geometry" group: */ s->opt[OPT_GEOMETRY_GROUP].title = SANE_I18N ("Geometry"); @@ -6163,12 +5720,33 @@ /* crop by software */ s->opt[OPT_SWCROP].name = "swcrop"; - s->opt[OPT_SWCROP].title = "Software crop"; - s->opt[OPT_SWCROP].desc = "Request backend to remove border from pages digitally"; + s->opt[OPT_SWCROP].title = SANE_I18N ("Software crop"); + s->opt[OPT_SWCROP].desc = SANE_I18N ("Request backend to remove border from pages digitally"); s->opt[OPT_SWCROP].type = SANE_TYPE_BOOL; s->opt[OPT_SWCROP].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + s->opt[OPT_SWCROP].unit = SANE_UNIT_NONE; s->val[OPT_SWCROP].b = SANE_FALSE; + /* Software blank page skip */ + s->opt[OPT_SWSKIP].name = "swskip"; + s->opt[OPT_SWSKIP].title = SANE_I18N ("Software blank skip percentage"); + s->opt[OPT_SWSKIP].desc = SANE_I18N("Request driver to discard pages with low numbers of dark pixels"); + s->opt[OPT_SWSKIP].type = SANE_TYPE_FIXED; + s->opt[OPT_SWSKIP].unit = SANE_UNIT_PERCENT; + s->opt[OPT_SWSKIP].constraint_type = SANE_CONSTRAINT_RANGE; + s->opt[OPT_SWSKIP].constraint.range = &(percentage_range); + /* disable by default */ + s->val[OPT_SWSKIP].w = 0; + + /* Software Derotate */ + s->opt[OPT_SWDEROTATE].name = "swderotate"; + s->opt[OPT_SWDEROTATE].title = SANE_I18N ("Software derotate"); + s->opt[OPT_SWDEROTATE].desc = SANE_I18N("Request driver to detect and correct 90 degree image rotation"); + s->opt[OPT_SWDEROTATE].type = SANE_TYPE_BOOL; + s->opt[OPT_SWCROP].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_ADVANCED; + s->opt[OPT_SWDEROTATE].unit = SANE_UNIT_NONE; + s->val[OPT_SWDEROTATE].b = SANE_FALSE; + /* "Extras" group: */ s->opt[OPT_EXTRAS_GROUP].title = SANE_I18N ("Extras"); s->opt[OPT_EXTRAS_GROUP].desc = ""; @@ -6184,7 +5762,7 @@ s->opt[OPT_THRESHOLD].type = SANE_TYPE_FIXED; s->opt[OPT_THRESHOLD].unit = SANE_UNIT_PERCENT; s->opt[OPT_THRESHOLD].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_THRESHOLD].constraint.range = &threshold_percentage_range; + s->opt[OPT_THRESHOLD].constraint.range = &percentage_range; s->val[OPT_THRESHOLD].w = SANE_FIX (50); /* BW threshold curve */ @@ -6207,8 +5785,8 @@ s->opt[OPT_DISABLE_DYNAMIC_LINEART].constraint_type = SANE_CONSTRAINT_NONE; s->val[OPT_DISABLE_DYNAMIC_LINEART].w = SANE_FALSE; - /* not working for GL646 scanners yet, and required for GL847 ones */ - if (s->dev->model->asic_type == GENESYS_GL646 || s->dev->model->asic_type == GENESYS_GL847) + /* not working for GL646 scanners yet */ + if (s->dev->model->asic_type == GENESYS_GL646) { s->opt[OPT_DISABLE_DYNAMIC_LINEART].cap = SANE_CAP_INACTIVE; } @@ -6268,6 +5846,15 @@ s->opt[OPT_LAMP_OFF_TIME].constraint.range = &time_range; s->val[OPT_LAMP_OFF_TIME].w = 15; /* 15 minutes */ + /* turn lamp off during scan */ + s->opt[OPT_LAMP_OFF].name = "lamp-off-scan"; + s->opt[OPT_LAMP_OFF].title = SANE_I18N ("Lamp off during scan"); + s->opt[OPT_LAMP_OFF].desc = SANE_I18N ("The lamp will be turned off during scan. "); + s->opt[OPT_LAMP_OFF].type = SANE_TYPE_BOOL; + s->opt[OPT_LAMP_OFF].unit = SANE_UNIT_NONE; + s->opt[OPT_LAMP_OFF].constraint_type = SANE_CONSTRAINT_NONE; + s->val[OPT_LAMP_OFF].w = SANE_FALSE; + s->opt[OPT_SENSOR_GROUP].name = SANE_NAME_SENSORS; s->opt[OPT_SENSOR_GROUP].title = SANE_TITLE_SENSORS; s->opt[OPT_SENSOR_GROUP].desc = SANE_DESC_SENSORS; @@ -6411,15 +5998,16 @@ s->opt[OPT_CLEAR_CALIBRATION].desc = SANE_I18N ("Clear calibration cache"); s->opt[OPT_CLEAR_CALIBRATION].type = SANE_TYPE_BUTTON; s->opt[OPT_CLEAR_CALIBRATION].unit = SANE_UNIT_NONE; + s->opt[OPT_CLEAR_CALIBRATION].size = 0; + s->opt[OPT_CLEAR_CALIBRATION].constraint_type = SANE_CONSTRAINT_NONE; s->opt[OPT_CLEAR_CALIBRATION].cap = - SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED | - SANE_CAP_AUTOMATIC; + SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT | SANE_CAP_ADVANCED; s->val[OPT_CLEAR_CALIBRATION].b = 0; s->last_val[OPT_CLEAR_CALIBRATION].b = 0; RIE (calc_parameters (s)); - DBG (DBG_proc, "init_options: exit\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -6525,6 +6113,8 @@ return SANE_STATUS_NO_MEM; dev->model = genesys_usb_device_list[i].model; + dev->vendorId = genesys_usb_device_list[i].vendor; + dev->productId = genesys_usb_device_list[i].product; dev->already_initialized = SANE_FALSE; DBG (DBG_info, "attach: found %s flatbed scanner %s at %s\n", @@ -6536,7 +6126,7 @@ if (devp) *devp = dev; sanei_usb_close (dn); - DBG (DBG_proc, "attach: exit\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -6596,7 +6186,7 @@ SANEI_Config config; SANE_Status status; - DBG (DBG_proc, "probe_genesys_devices: start\n"); + DBGSTART; new_dev = 0; new_dev_len = 0; @@ -6617,33 +6207,39 @@ free (new_dev); } - DBG (DBG_proc, "probe_genesys_devices: exit\n"); + DBGCOMPLETED; return status; } -/* this should be changed if one of the substructures of +/** + * This should be changed if one of the substructures of Genesys_Calibration_Cache change, but it must be changed if there are changes that don't change size -- at least for now, as we store most of Genesys_Calibration_Cache as is. */ #define CALIBRATION_VERSION 1 -static void -read_calibration (Genesys_Device * dev) +/** + * reads previously cached calibration data + * from file + */ +SANE_Status +sanei_genesys_read_calibration (Genesys_Device * dev) { FILE *fp; uint8_t vers = 0; uint32_t size = 0; struct Genesys_Calibration_Cache *cache; + SANE_Status status=SANE_STATUS_GOOD; - DBG (DBG_proc, "read_calibration: enter\n"); + DBGSTART; fp = fopen (dev->calib_file, "rb"); if (!fp) { DBG (DBG_info, "Calibration: Cannot open %s\n", dev->calib_file); - DBG (DBG_proc, "read_calibration: exit\n"); - return; + DBGCOMPLETED; + return SANE_STATUS_IO_ERROR; } /* these two checks ensure that most bad things cannot happen */ @@ -6652,8 +6248,8 @@ { DBG (DBG_info, "Calibration: Bad version\n"); fclose (fp); - DBG (DBG_proc, "read_calibration: exit\n"); - return; + DBGCOMPLETED; + return SANE_STATUS_INVAL; } fread (&size, 4, 1, fp); if (size != sizeof (struct Genesys_Calibration_Cache)) @@ -6661,19 +6257,19 @@ DBG (DBG_info, "Calibration: Size of calibration cache struct differs\n"); fclose (fp); - DBG (DBG_proc, "read_calibration: exit\n"); - return; + DBGCOMPLETED; + return SANE_STATUS_INVAL; } - while (!feof (fp)) + while (!feof (fp) && status==SANE_STATUS_GOOD) { - DBG (DBG_info, "read_calibration: reading one record\n"); + DBG (DBG_info, "sanei_genesys_read_calibration: reading one record\n"); cache = (struct Genesys_Calibration_Cache *) malloc (sizeof (*cache)); if (!cache) { DBG (DBG_error, - "read_calibration: could not allocate cache struct\n"); + "sanei_genesys_read_calibration: could not allocate cache struct\n"); break; } @@ -6683,7 +6279,8 @@ if ((x) < 1) \ { \ free(cache); \ - DBG (DBG_warn, "read_calibration: partial calibration record\n"); \ + DBG (DBG_warn, "sanei_genesys_read_calibration: partial calibration record\n"); \ + status=SANE_STATUS_EOF; \ break; \ } \ } while(0) @@ -6692,49 +6289,35 @@ if (fread (&cache->used_setup, sizeof (cache->used_setup), 1, fp) < 1) { /* eof is only detected here */ free (cache); + status=SANE_STATUS_GOOD; break; } - BILT1 (fread - (&cache->last_calibration, sizeof (cache->last_calibration), 1, - fp)); + BILT1 (fread (&cache->last_calibration, sizeof (cache->last_calibration), 1, fp)); BILT1 (fread (&cache->frontend, sizeof (cache->frontend), 1, fp)); /* the gamma (and later) fields are not stored */ - BILT1 (fread - (&cache->sensor, offsetof (Genesys_Sensor, red_gamma), 1, fp)); - BILT1 (fread - (&cache->calib_pixels, sizeof (cache->calib_pixels), 1, fp)); - BILT1 (fread - (&cache->calib_channels, sizeof (cache->calib_channels), 1, fp)); - BILT1 (fread - (&cache->average_size, sizeof (cache->average_size), 1, fp)); - - /* Make sure we don't do bad things if someone feeds us a forged/ - sufficiently corrupted calibration file. - gl843 can do up to 0x5800 pixels. add some slack for the - dummy/blank pixel mess */ - if (cache->average_size > 0x5800 * 2 * 3 * 2 + 0x100) - { - DBG (DBG_error, "read_calibration: bad size of calibration data\n"); - free (cache); - break; - } + BILT1 (fread (&cache->sensor, offsetof (Genesys_Sensor, red_gamma), 1, fp)); + BILT1 (fread (&cache->calib_pixels, sizeof (cache->calib_pixels), 1, fp)); + BILT1 (fread (&cache->calib_channels, sizeof (cache->calib_channels), 1, fp)); + BILT1 (fread (&cache->average_size, sizeof (cache->average_size), 1, fp)); cache->white_average_data = (uint8_t *) malloc (cache->average_size); cache->dark_average_data = (uint8_t *) malloc (cache->average_size); if (!cache->white_average_data || !cache->dark_average_data) { + status=SANE_STATUS_NO_MEM; FREE_IFNOT_NULL (cache->white_average_data); FREE_IFNOT_NULL (cache->dark_average_data); free (cache); DBG (DBG_error, - "read_calibration: could not allocate space for average data\n"); + "sanei_genesys_read_calibration: could not allocate space for average data\n"); break; } if (fread (cache->white_average_data, cache->average_size, 1, fp) < 1) { - DBG (DBG_warn, "read_calibration: partial calibration record\n"); + status=SANE_STATUS_EOF; + DBG (DBG_warn, "sanei_genesys_read_calibration: partial calibration record\n"); free (cache->white_average_data); free (cache->dark_average_data); free (cache); @@ -6742,20 +6325,22 @@ } if (fread (cache->dark_average_data, cache->average_size, 1, fp) < 1) { - DBG (DBG_warn, "read_calibration: partial calibration record\n"); + DBG (DBG_warn, "sanei_genesys_read_calibration: partial calibration record\n"); free (cache->white_average_data); free (cache->dark_average_data); free (cache); + status=SANE_STATUS_EOF; break; } #undef BILT1 - DBG (DBG_info, "read_calibration: adding record to list\n"); + DBG (DBG_info, "sanei_genesys_read_calibration: adding record to list\n"); cache->next = dev->calibration_cache; dev->calibration_cache = cache; } fclose (fp); - DBG (DBG_proc, "read_calibration: exit\n"); + DBGCOMPLETED; + return status; } static void @@ -6765,10 +6350,12 @@ uint8_t vers = 0; uint32_t size = 0; struct Genesys_Calibration_Cache *cache; + + DBGSTART; fp = fopen (dev->calib_file, "wb"); if (!fp) { - DBG (DBG_info, "Calibration: Cannot open %s\n", dev->calib_file); + DBG (DBG_info, "write_calibration: Cannot open %s for writing\n", dev->calib_file); return; } @@ -6780,18 +6367,18 @@ for (cache = dev->calibration_cache; cache; cache = cache->next) { fwrite (&cache->used_setup, sizeof (cache->used_setup), 1, fp); - fwrite (&cache->last_calibration, sizeof (cache->last_calibration), 1, - fp); + fwrite (&cache->last_calibration, sizeof (cache->last_calibration), 1, fp); fwrite (&cache->frontend, sizeof (cache->frontend), 1, fp); /* the gamma (and later) fields are not stored */ fwrite (&cache->sensor, offsetof (Genesys_Sensor, red_gamma), 1, fp); + fwrite (&cache->calib_pixels, sizeof (cache->calib_pixels), 1, fp); fwrite (&cache->calib_channels, sizeof (cache->calib_channels), 1, fp); fwrite (&cache->average_size, sizeof (cache->average_size), 1, fp); fwrite (cache->white_average_data, cache->average_size, 1, fp); fwrite (cache->dark_average_data, cache->average_size, 1, fp); } - + DBGCOMPLETED; fclose (fp); } @@ -6810,6 +6397,7 @@ size_t read_size; /**> size of reads */ int lines; /** number of lines of the scan */ Genesys_Device *dev = s->dev; + SANE_Byte *lineart=NULL; /* compute maximum number of lines for the scan */ if (s->params.lines > 0) @@ -6826,6 +6414,10 @@ /* maximum bytes to read */ maximum = s->params.bytes_per_line * lines; + if(s->dev->settings.dynamic_lineart==SANE_TRUE) + { + maximum *= 8; + } /* initial size of the read buffer */ size = @@ -6888,6 +6480,29 @@ dev->parking = !(s->dev->model->flags & GENESYS_FLAG_MUST_WAIT); } + /* in case of dynamic lineart, we have buffered gray data which + * must be converted to lineart first */ + if(s->dev->settings.dynamic_lineart==SANE_TRUE) + { + total/=8; + lineart=(SANE_Byte *)malloc(total); + if (lineart == NULL) + { + DBG (DBG_error0, + "%s: digital processing requires too much memory.\nConsider disabling it\n", + __FUNCTION__); + return SANE_STATUS_NO_MEM; + } + genesys_gray_lineart (dev, + dev->img_buffer, + lineart, + dev->settings.pixels, + (total*8)/dev->settings.pixels, + dev->settings.threshold); + free(dev->img_buffer); + dev->img_buffer = lineart; + } + /* update counters */ dev->total_bytes_to_read = total; dev->total_bytes_read = 0; @@ -6952,7 +6567,7 @@ /* cold-plug case :detection of allready connected scanners */ status = probe_genesys_devices (); - DBG (DBG_proc, "sane_init: exit\n"); + DBGCOMPLETED; return status; } @@ -6962,7 +6577,7 @@ { Genesys_Device *dev, *next; - DBG (DBG_proc, "sane_exit: start\n"); + DBGSTART; for (dev = first_dev; dev; dev = next) { /* sane_close() free many fields, not much things left to @@ -6977,19 +6592,21 @@ free (devlist); devlist = 0; - DBG (DBG_proc, "sane_exit: exit\n"); + DBGCOMPLETED; } SANE_Status sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only) { - Genesys_Device *dev; - SANE_Int dev_num; + Genesys_Device *dev, *prev; + SANE_Int index; + SANE_Device *sane_device; DBG (DBG_proc, "sane_get_devices: start: local_only = %s\n", local_only == SANE_TRUE ? "true" : "false"); /* hot-plug case :detection of newly connected scanners */ + sanei_usb_init (); probe_genesys_devices (); if (devlist) @@ -6999,25 +6616,70 @@ if (!devlist) return SANE_STATUS_NO_MEM; - dev_num = 0; - for (dev = first_dev; dev_num < num_devices; dev = dev->next) - { - SANE_Device *sane_device; + prev = NULL; + index = 0; + dev = first_dev; + while (dev != NULL) + { + /* check if device removed */ + present = SANE_FALSE; + sanei_usb_find_devices (dev->vendorId, dev->productId, check_present); + if (present) + { + sane_device = malloc (sizeof (*sane_device)); + if (!sane_device) + return SANE_STATUS_NO_MEM; + sane_device->name = dev->file_name; + sane_device->vendor = dev->model->vendor; + sane_device->model = dev->model->model; + sane_device->type = strdup ("flatbed scanner"); + devlist[index] = sane_device; + index++; + prev = dev; + dev = dev->next; + } + else + { + /* remove device from internal list */ + /* case 1 : removed device is first_dev */ + if (prev == NULL) + { + /* test for another dev */ + if (dev->next == NULL) + { + /* empty the whole list */ + free (dev); + first_dev = NULL; + num_devices = 0; + dev = NULL; + } + else + { + /* assign new start */ + first_dev = dev->next; + num_devices--; + free (dev); + dev = dev->next; + } + } + /* case 2 : removed device is not first_dev */ + else + { + /* link previous dev to next dev */ + prev->next = dev->next; + free (dev); + num_devices--; - sane_device = malloc (sizeof (*sane_device)); - if (!sane_device) - return SANE_STATUS_NO_MEM; - sane_device->name = dev->file_name; - sane_device->vendor = dev->model->vendor; - sane_device->model = dev->model->model; - sane_device->type = strdup ("flatbed scanner"); - devlist[dev_num++] = sane_device; + /* next loop */ + dev = prev->next; + } + } } - devlist[dev_num++] = 0; + devlist[index] = 0; *device_list = devlist; - DBG (DBG_proc, "sane_get_devices: exit\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -7102,16 +6764,20 @@ s->dev->lines_buffer.buffer = NULL; s->dev->shrink_buffer.buffer = NULL; s->dev->out_buffer.buffer = NULL; + s->dev->binarize_buffer.buffer = NULL; + s->dev->local_buffer.buffer = NULL; s->dev->parking = SANE_FALSE; s->dev->read_active = SANE_FALSE; s->dev->white_average_data = NULL; s->dev->dark_average_data = NULL; s->dev->calibration_cache = NULL; + s->dev->calib_file = NULL; s->dev->img_buffer = NULL; s->dev->line_interp = 0; s->dev->line_count = 0; s->dev->segnb = 0; s->dev->oe_buffer.buffer=NULL; + s->dev->binary=NULL; /* insert newly opened handle into list of open handles: */ s->next = first_handle; @@ -7140,6 +6806,7 @@ to support multiple scanners of the same model, but to my knowledge, there is no such thing in these scanners. (At least the usb serial is always "0".) + TODO add an storedir option to genesys.conf */ ptr = getenv ("HOME"); @@ -7149,18 +6816,23 @@ } else { +#ifdef HAVE_MKDIR + /* make sure .sane directory exists */ + sprintf (tmp_str, "%s/.sane", ptr); + mkdir(tmp_str,0700); +#endif sprintf (tmp_str, "%s/.sane/%s.cal", ptr, s->dev->model->name); } - + s->dev->calib_file = strdup (tmp_str); DBG (DBG_info, "Calibration filename set to:\n"); DBG (DBG_info, ">%s<\n", s->dev->calib_file); /* now open file, fetch calibration records */ - read_calibration (s->dev); + sanei_genesys_read_calibration (s->dev); - DBG (DBG_proc, "sane_open: exit\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -7170,8 +6842,9 @@ Genesys_Scanner *prev, *s; Genesys_Calibration_Cache *cache, *next_cache; SANE_Status status; + SANE_Range *range; - DBG (DBG_proc, "sane_close: start\n"); + DBGSTART; /* remove handle from list of open handles: */ prev = 0; @@ -7223,6 +6896,8 @@ sanei_genesys_buffer_free (&(s->dev->lines_buffer)); sanei_genesys_buffer_free (&(s->dev->shrink_buffer)); sanei_genesys_buffer_free (&(s->dev->out_buffer)); + sanei_genesys_buffer_free (&(s->dev->binarize_buffer)); + sanei_genesys_buffer_free (&(s->dev->local_buffer)); FREE_IFNOT_NULL (s->dev->white_average_data); FREE_IFNOT_NULL (s->dev->dark_average_data); FREE_IFNOT_NULL (s->dev->calib_file); @@ -7233,19 +6908,22 @@ FREE_IFNOT_NULL (s->dev->sensor.blue_gamma_table); /* for an handful of bytes .. */ - free (s->opt[OPT_RESOLUTION].constraint.word_list); + free ((void *)s->opt[OPT_RESOLUTION].constraint.word_list); free (s->val[OPT_SOURCE].s); free (s->val[OPT_MODE].s); free (s->val[OPT_COLOR_FILTER].s); - FREE_IFNOT_NULL (s->opt[OPT_TL_X].constraint.range); - FREE_IFNOT_NULL (s->opt[OPT_TL_Y].constraint.range); + range=s->opt[OPT_TL_X].constraint.range; + FREE_IFNOT_NULL (range); + range=s->opt[OPT_TL_Y].constraint.range; + FREE_IFNOT_NULL (range); if (prev) prev->next = s->next; else first_handle = s->next; - /* maybe todo: shut down scanner */ + /* LAMP OFF : same register across all the ASICs */ + sanei_genesys_write_register (s->dev, 0x03, 0x00); /* we need this to avoid ASIC getting stuck * in bulk writes */ @@ -7256,7 +6934,7 @@ sanei_usb_close (s->dev->dn); free (s); - DBG (DBG_proc, "sane_close: exit\n"); + DBGCOMPLETED; } const SANE_Option_Descriptor * @@ -7311,12 +6989,14 @@ case OPT_THRESHOLD: case OPT_THRESHOLD_CURVE: case OPT_DISABLE_DYNAMIC_LINEART: - case OPT_CLEAR_CALIBRATION: case OPT_DISABLE_INTERPOLATION: + case OPT_LAMP_OFF: case OPT_LAMP_OFF_TIME: case OPT_SWDESKEW: case OPT_SWCROP: case OPT_SWDESPECK: + case OPT_SWDEROTATE: + case OPT_SWSKIP: case OPT_DESPECK: *(SANE_Word *) val = s->val[option].w; break; @@ -7432,7 +7112,10 @@ case OPT_SWCROP: case OPT_SWDESKEW: case OPT_DESPECK: + case OPT_SWDEROTATE: + case OPT_SWSKIP: case OPT_DISABLE_INTERPOLATION: + case OPT_LAMP_OFF: case OPT_PREVIEW: s->val[option].w = *(SANE_Word *) val; RIE (calc_parameters (s)); @@ -7460,6 +7143,8 @@ DISABLE(OPT_SWDESPECK); DISABLE(OPT_SWCROP); DISABLE(OPT_DESPECK); + DISABLE(OPT_SWDEROTATE); + DISABLE(OPT_SWSKIP); } else { @@ -7467,6 +7152,8 @@ ENABLE(OPT_SWDESPECK); ENABLE(OPT_SWCROP); ENABLE(OPT_DESPECK); + ENABLE(OPT_SWDEROTATE); + ENABLE(OPT_SWSKIP); } RIE (calc_parameters (s)); *myinfo |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS; @@ -7495,8 +7182,8 @@ } /* assign new values */ - free(s->opt[OPT_TL_X].constraint.range); - free(s->opt[OPT_TL_Y].constraint.range); + free((SANE_Range *)s->opt[OPT_TL_X].constraint.range); + free((SANE_Range *)s->opt[OPT_TL_Y].constraint.range); s->opt[OPT_TL_X].constraint.range = x_range; s->val[OPT_TL_X].w = 0; s->opt[OPT_TL_Y].constraint.range = y_range; @@ -7814,7 +7501,7 @@ Genesys_Scanner *s = handle; SANE_Status status; - DBG (DBG_proc, "sane_get_parameters: start\n"); + DBGSTART; /* don't recompute parameters once data reading is active, ie during scan */ if(s->dev->read_active == SANE_FALSE) @@ -7828,16 +7515,17 @@ /* in the case of a sheetfed scanner, when full height is specified * we override the computed line number with -1 to signal that we * don't know the real document height. + * We don't do that doing buffering image for digital processing */ if (s->dev->model->is_sheetfed == SANE_TRUE - && s->dev->read_active == SANE_FALSE + && s->dev->buffer_image == SANE_FALSE && s->val[OPT_BR_Y].w == s->opt[OPT_BR_Y].constraint.range->max) { params->lines = -1; } } - DBG (DBG_proc, "sane_get_parameters: exit\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -7848,7 +7536,7 @@ Genesys_Scanner *s = handle; SANE_Status status=SANE_STATUS_GOOD; - DBG (DBG_proc, "sane_start: start\n"); + DBGSTART; if (s->val[OPT_TL_X].w >= s->val[OPT_BR_X].w) { @@ -7867,10 +7555,19 @@ parameters will be overwritten below, but that's OK. */ RIE (calc_parameters (s)); - RIE (genesys_start_scan (s->dev)); + RIE (genesys_start_scan (s->dev, s->val[OPT_LAMP_OFF].w)); s->scanning = SANE_TRUE; + /* allocate intermediate buffer when doing dynamic lineart */ + if(s->dev->settings.dynamic_lineart==SANE_TRUE) + { + RIE (sanei_genesys_buffer_free (&(s->dev->binarize_buffer))); + RIE (sanei_genesys_buffer_alloc (&(s->dev->binarize_buffer), s->dev->settings.pixels)); + RIE (sanei_genesys_buffer_free (&(s->dev->local_buffer))); + RIE (sanei_genesys_buffer_alloc (&(s->dev->local_buffer), s->dev->binarize_buffer.size * 8)); + } + /* if one of the software enhancement option is selected, * we do the scan internally, process picture then put it an internal * buffer. Since cropping may change scan parameters, we recompute them @@ -7878,6 +7575,24 @@ if (s->dev->buffer_image) { RIE(genesys_buffer_image(s)); + + /* check if we need to skip this page, sheetfed scanners + * can go to next doc while flatbed ones can't */ + if (s->val[OPT_SWSKIP].w && IS_ACTIVE(OPT_SWSKIP)) + { + status = sanei_magic_isBlank(&s->params, + s->dev->img_buffer, + SANE_UNFIX(s->val[OPT_SWSKIP].w)); + if(status == SANE_STATUS_NO_DOCS) + { + if (s->dev->model->is_sheetfed == SANE_TRUE) + { + DBG (DBG_info, "sane_start: blank page, recurse\n"); + return sane_start(handle); + } + return status; + } + } /* deskew image if required */ if(s->val[OPT_SWDESKEW].b == SANE_TRUE) @@ -7896,9 +7611,15 @@ { RIE(genesys_crop(s)); } + + /* de-rotate image if required */ + if(s->val[OPT_SWDEROTATE].b == SANE_TRUE) + { + RIE(genesys_derotate(s)); + } } - DBG (DBG_proc, "sane_start: exit\n"); + DBGCOMPLETED; return status; } @@ -7939,18 +7660,67 @@ } DBG (DBG_proc, "sane_read: start, %d maximum bytes required\n", max_len); + DBG (DBG_io2, "sane_read: bytes_to_read=%lu, total_bytes_read=%lu\n", + (u_long) dev->total_bytes_to_read, (u_long) dev->total_bytes_read); + DBG (DBG_io2, "sane_read: physical bytes to read = %lu\n", (u_long) dev->read_bytes_left); if(dev->total_bytes_read>=dev->total_bytes_to_read) { + DBG (DBG_proc, "sane_read: nothing more to scan: EOF\n"); return SANE_STATUS_EOF; } local_len = max_len; - /* if image hasn't been buffered, read data from scanner */ + /* in case of image processing, all data has been stored in + * buffer_image. So read data from it if it exists, else from scanner */ if(!dev->buffer_image) { - status = genesys_read_ordered_data (dev, buf, &local_len); + /* dynamic lineart is another kind of digital processing that needs + * another layer of buffering on top of genesys_read_ordered_data */ + if(dev->settings.dynamic_lineart==SANE_TRUE) + { + /* if buffer is empty, fill it with genesys_read_ordered_data */ + if(dev->binarize_buffer.avail==0) + { + /* store gray data */ + local_len=dev->local_buffer.size; + status = genesys_read_ordered_data (dev, dev->local_buffer.buffer, &local_len); + + /* binarize data is read successful */ + if(status==SANE_STATUS_GOOD) + { + dev->local_buffer.avail=local_len; + dev->local_buffer.pos=0; + dev->binarize_buffer.avail=local_len/8; + dev->binarize_buffer.pos=0; + genesys_gray_lineart (dev, + dev->local_buffer.buffer, + dev->binarize_buffer.buffer, + dev->settings.pixels, + local_len/dev->settings.pixels, + dev->settings.threshold); + } + + } + + /* return data from lineart buffer if any, up to the available amount */ + local_len = max_len; + if((size_t)max_len>dev->binarize_buffer.avail) + { + local_len=dev->binarize_buffer.avail; + } + if(local_len) + { + memcpy(buf,sanei_genesys_buffer_get_read_pos (&(dev->binarize_buffer)),local_len); + RIE (sanei_genesys_buffer_consume (&(dev->binarize_buffer), local_len)); + } + } + else + { + /* most usual case, direct read of data from scanner */ + status = genesys_read_ordered_data (dev, buf, &local_len); + } } else /* read data from buffer */ { @@ -7963,6 +7733,11 @@ } *len = local_len; + if(local_len>(size_t)max_len) + { + fprintf (stderr, "[genesys] sane_read: returning incorrect length!!\n"); + } + DBG (DBG_proc, "sane_read: %d bytes returned\n", *len); return status; } @@ -7972,7 +7747,14 @@ Genesys_Scanner *s = handle; SANE_Status status = SANE_STATUS_GOOD; - DBG (DBG_proc, "sane_cancel: start\n"); + DBGSTART; + + /* end binary logging if needed */ + if (s->dev->binary!=NULL) + { + fclose(s->dev->binary); + s->dev->binary=NULL; + } s->scanning = SANE_FALSE; s->dev->read_active = SANE_FALSE; @@ -8031,7 +7813,7 @@ return; } - DBG (DBG_proc, "sane_cancel: exit\n"); + DBGCOMPLETED; return; } diff -Nru sane-backends-1.0.22/backend/genesys.conf.in sane-backends-1.0.23/backend/genesys.conf.in --- sane-backends-1.0.22/backend/genesys.conf.in 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys.conf.in 2011-11-21 20:17:48.000000000 +0000 @@ -97,6 +97,9 @@ # Panasonic KV-SS080 usb 0x04da 0x100f +# Hewlett Packard ScanJet 4850C +usb 0x03f0 0x1b05 + # Hewlett Packard ScanJet G4010 usb 0x03f0 0x4505 @@ -105,3 +108,9 @@ # Plustek OpticBook 3600 usb 0x07b3 0x0900 + +# Primax Electronics, Ltd Xerox 2400 Onetouch +usb 0x0461 0x038b + +#Hewlett Packard ScanJet N6310 +usb 0x03f0 0x4705 diff -Nru sane-backends-1.0.22/backend/genesys.h sane-backends-1.0.23/backend/genesys.h --- sane-backends-1.0.22/backend/genesys.h 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys.h 2012-07-01 02:00:44.000000000 +0000 @@ -1,7 +1,7 @@ /* sane - Scanner Access Now Easy. Copyright (C) 2003, 2004 Henning Meier-Geinitz - Copyright (C) 2005-2010 Stephane Voltz + Copyright (C) 2005-2012 Stephane Voltz Copyright (C) 2006 Laurent Charpentier Copyright (C) 2009 Pierre Willenbrock @@ -47,11 +47,6 @@ #ifndef GENESYS_H #define GENESYS_H -/* -#define UNIT_TESTING 1 -*/ -#undef UNIT_TESTING - #include "genesys_low.h" #define FREE_IFNOT_NULL(x) if(x!=NULL) { free(x); x=NULL;} @@ -102,9 +97,12 @@ OPT_SWCROP, OPT_SWDESPECK, OPT_DESPECK, + OPT_SWSKIP, + OPT_SWDEROTATE, OPT_EXTRAS_GROUP, OPT_LAMP_OFF_TIME, + OPT_LAMP_OFF, OPT_THRESHOLD, OPT_THRESHOLD_CURVE, OPT_DISABLE_DYNAMIC_LINEART, diff -Nru sane-backends-1.0.22/backend/genesys_conv.c sane-backends-1.0.23/backend/genesys_conv.c --- sane-backends-1.0.22/backend/genesys_conv.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_conv.c 2012-07-01 02:00:44.000000000 +0000 @@ -1,6 +1,7 @@ /* sane - Scanner Access Now Easy. Copyright (C) 2005, 2006 Pierre Willenbrock + Copyright (C) 2010-2012 Stphane Voltz This file is part of the SANE package. @@ -205,6 +206,11 @@ return SANE_STATUS_GOOD; } +/** @brief shrink or grow scanned data to fit the final scan size + * This function shrinks the scanned data it the required resolution is lower than the hardware one, + * or grows it in case it is the opposite like when motor resolution is higher than + * sensor's one. + */ static SANE_Status genesys_shrink_lines_1 ( uint8_t *src_data, @@ -214,55 +220,102 @@ unsigned int dst_pixels, unsigned int channels) { -/*in search for a correct implementation*/ - unsigned int dst_x, src_x, y, c, cnt; - unsigned int avg[3]; - uint8_t *src = (uint8_t *)src_data; - uint8_t *dst = (uint8_t *)dst_data; - - src_pixels /= 8; - dst_pixels /= 8; - - if (src_pixels > dst_pixels) { -/*take first _byte_*/ - for(y = 0; y < lines; y++) { - cnt = src_pixels / 2; - src_x = 0; - for (dst_x = 0; dst_x < dst_pixels; dst_x++) { - while (cnt < src_pixels && src_x < src_pixels) { - cnt += dst_pixels; - - for (c = 0; c < channels; c++) - avg[c] = *src++; - src_x++; + unsigned int dst_x, src_x, y, c, cnt; + unsigned int avg[3], val; + uint8_t *src = (uint8_t *) src_data; + uint8_t *dst = (uint8_t *) dst_data; + + /* choose between case where me must reduce or grow the scanned data */ + if (src_pixels > dst_pixels) + { + /* shrink data */ + /* TODO action must be taken at bit level, no bytes */ + src_pixels /= 8; + dst_pixels /= 8; + /*take first _byte_ */ + for (y = 0; y < lines; y++) + { + cnt = src_pixels / 2; + src_x = 0; + for (dst_x = 0; dst_x < dst_pixels; dst_x++) + { + while (cnt < src_pixels && src_x < src_pixels) + { + cnt += dst_pixels; + + for (c = 0; c < channels; c++) + avg[c] = *src++; + src_x++; } - cnt -= src_pixels; + cnt -= src_pixels; - for (c = 0; c < channels; c++) - *dst++ = avg[c]; + for (c = 0; c < channels; c++) + *dst++ = avg[c]; } } - } else { -/*interpolate. copy pixels*/ - for(y = 0; y < lines; y++) { - cnt = dst_pixels / 2; - dst_x = 0; - for (src_x = 0; src_x < src_pixels; src_x++) { - for (c = 0; c < channels; c++) + } + else + { + /* common case where y res is double x res */ + for (y = 0; y < lines; y++) + { + if (2 * src_pixels == dst_pixels) + { + /* double and interleave on line */ + for (c = 0; c < src_pixels/8; c++) + { + /* first 4 bits */ + val = 0; + val |= (*src & 0x80) >> 0; /* X___ ____ --> X___ ____ */ + val |= (*src & 0x80) >> 1; /* X___ ____ --> _X__ ____ */ + val |= (*src & 0x40) >> 1; /* _X__ ____ --> __X_ ____ */ + val |= (*src & 0x40) >> 2; /* _X__ ____ --> ___X ____ */ + val |= (*src & 0x20) >> 2; /* __X_ ____ --> ____ X___ */ + val |= (*src & 0x20) >> 3; /* __X_ ____ --> ____ _X__ */ + val |= (*src & 0x10) >> 3; /* ___X ____ --> ____ __X_ */ + val |= (*src & 0x10) >> 4; /* ___X ____ --> ____ ___X */ + *dst = val; + dst++; + + /* last for bits */ + val = 0; + val |= (*src & 0x08) << 4; /* ____ X___ --> X___ ____ */ + val |= (*src & 0x08) << 3; /* ____ X___ --> _X__ ____ */ + val |= (*src & 0x04) << 3; /* ____ _X__ --> __X_ ____ */ + val |= (*src & 0x04) << 2; /* ____ _X__ --> ___X ____ */ + val |= (*src & 0x02) << 2; /* ____ __X_ --> ____ X___ */ + val |= (*src & 0x02) << 1; /* ____ __X_ --> ____ _X__ */ + val |= (*src & 0x01) << 1; /* ____ ___X --> ____ __X_ */ + val |= (*src & 0x01) << 0; /* ____ ___X --> ____ ___X */ + *dst = val; + dst++; + src++; + } + } + else + { + /* TODO: since depth is 1, we must interpolate bit within bytes */ + DBG (DBG_warn, "%s: inaccurate bit expansion!\n", __FUNCTION__); + cnt = dst_pixels / 2; + dst_x = 0; + for (src_x = 0; src_x < src_pixels; src_x++) + { + for (c = 0; c < channels; c++) avg[c] = *src++; - while (cnt < dst_pixels && dst_x < dst_pixels) { - cnt += src_pixels; - - for (c = 0; c < channels; c++) + while (cnt < dst_pixels && dst_x < dst_pixels) + { + cnt += src_pixels; + for (c = 0; c < channels; c++) *dst++ = avg[c]; - dst_x++; + dst_x++; + } + cnt -= dst_pixels; } - cnt -= dst_pixels; } } } - return SANE_STATUS_GOOD; + return SANE_STATUS_GOOD; } @@ -383,5 +436,42 @@ return SANE_STATUS_GOOD; } +/** Look if image needs rotation and apply it + * */ +static SANE_Status +genesys_derotate (Genesys_Scanner * s) +{ + SANE_Status status = SANE_STATUS_GOOD; + int angle = 0; + int resolution = s->val[OPT_RESOLUTION].w; + + DBGSTART; + status = sanei_magic_findTurn (&s->params, + s->dev->img_buffer, + resolution, + resolution, + &angle); + + if (status) + { + DBG (DBG_warn, "%s: failed : %d\n", __FUNCTION__, status); + DBGCOMPLETED; + return SANE_STATUS_GOOD; + } + + /* apply rotation angle found */ + status = sanei_magic_turn (&s->params, s->dev->img_buffer, angle); + if (status) + { + DBG (DBG_warn, "%s: failed : %d\n", __FUNCTION__, status); + DBGCOMPLETED; + return SANE_STATUS_GOOD; + } + /* update counters to new image size */ + s->dev->total_bytes_to_read = s->params.bytes_per_line * s->params.lines; + + DBGCOMPLETED; + return SANE_STATUS_GOOD; +} /* vim: set sw=2 cino=>2se-1sn-1s{s^-1st0(0u0 smarttab expandtab: */ diff -Nru sane-backends-1.0.22/backend/genesys_devices.c sane-backends-1.0.23/backend/genesys_devices.c --- sane-backends-1.0.22/backend/genesys_devices.c 2011-01-21 00:26:47.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_devices.c 2012-07-25 00:08:33.000000000 +0000 @@ -3,7 +3,7 @@ Copyright (C) 2003 Oliver Rauch Copyright (C) 2003-2005 Henning Meier-Geinitz Copyright (C) 2004, 2005 Gerhard Jaeger - Copyright (C) 2004-2010 Stphane Voltz + Copyright (C) 2004-2012 Stphane Voltz Copyright (C) 2005-2009 Pierre Willenbrock Copyright (C) 2007 Luke Copyright (C) 2010 Jack McGill @@ -87,7 +87,8 @@ } , /* 3: MD6228/MD6471 */ {DAC_WOLFSON_HP2400, - {0x00, 0x03, 0x05, 0x02} + /* reg0 reg1 reg2 reg3 */ + {0x00, 0x03, 0x05, 0x02} /* reg3=0x02 for 50-600 dpi, 0x32 (0x12 also works well) at 1200 */ , {0x00, 0x00, 0x00} , {0xb4, 0xb6, 0xbc} , {0x06, 0x09, 0x08} @@ -147,6 +148,14 @@ , {0x32, 0x04, 0x00} , {0x00, 0x00, 0x00} } + , + {DAC_CANONLIDE700, + {0x9d, 0x9e, 0x00, 0x00} + , {0x00, 0x00, 0x00} + , {0x00, 0x3f, 0x00} /* 0x00 0x3f 0x00 : offset/brigthness ? */ + , {0x2f, 0x04, 0x00} + , {0x00, 0x00, 0x00} + } , /* KV-SS080 */ {DAC_KVSS080, {0x00, 0x23, 0x24, 0x0f} @@ -437,16 +446,16 @@ , /* CANONLIDE200 */ {CIS_CANONLIDE200, - 1200, /* optical resolution */ - 87, /* black pixels */ - 16, /* dummy pixels */ - 303, - 10272, + 4800, /* optical resolution */ + 87*4, /* black pixels */ + 16*4, /* dummy pixels */ + 320*8, /* CCD_startx_offset 323 */ + 5136*8, 210, 200, {0x00, 0x00, 0x00, 0x00}, /* reg 0x10 - 0x1d */ - {0x01, 0xc0, 0x01, 0xc0, 0x01, 0x40, /* EXPR/EXPG/EXPB */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* EXPR/EXPG/EXPB */ 0x10, 0x08, 0x00, 0xff, 0x34, 0x00, 0x02, 0x04 }, /* reg 0x52 - 0x5e */ {0x03, 0x07, @@ -460,13 +469,38 @@ 1.7, 1.7, 1.7, NULL, NULL, NULL} , + /* CANONLIDE700 */ + {CIS_CANONLIDE700, + 4800, /* optical resolution */ + 73*8, /* black pixels 73 at 600 dpi */ + 16*8, /* dummy pixels */ + 384*8, /* CCD_startx_offset 384 at 600 dpi */ + 5188*8, /* 8x5570 segments , 5187+1 for rounding */ + 210, + 200, + {0x00, 0x00, 0x00, 0x00}, + /* reg 0x10 - 0x1d */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* EXPR/EXPG/EXPB */ + 0x10, 0x08, 0x00, 0xff, 0x34, 0x00, 0x02, 0x04 }, + /* reg 0x52 - 0x5e */ + {0x07, 0x03, + 0x00, 0x00, 0x00, 0x00, + 0x2a, 0xe1, + 0x55, + 0x00, 0x00, 0x00, + 0x41 + } + , + 1.0, 1.0, 1.0, + NULL, NULL, NULL} + , /* CANONLIDE100 */ {CIS_CANONLIDE100, - 1200, /* optical resolution */ - 87, /* black pixels */ - 16, /* dummy pixels 16 */ - 303, /* 303 */ - 10272, /* 10272 */ + 2400, /* optical resolution */ + 87*4, /* black pixels */ + 16*4, /* dummy pixels 16 */ + 320*4, /* 323 */ + 5136*4, /* 10272 */ 210, 200, {0x00, 0x00, 0x00, 0x00}, @@ -505,21 +539,44 @@ , {CCD_G4050, 4800, - 48, - 28, + 50*8, /* black_pixels */ + 58, /* 31 at 600 dpi dummy_pixels 58 at 1200 */ 152, - 20400, /* 20400 only half part of the sensor is used */ - 210, - 230, + 5360*8, /* 5360 max at 600 dpi */ + 160, + 160, /* 08 09 0a 0b */ {0x00, 0x00, 0x18, 0x69} , /* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */ - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0c, 0x01, 0x2a, 0x30, 0x00, 0x00, 0x08} , + {0x2c, 0x09, 0x22, 0xb8, 0x10, 0xf0, 0x33, 0x0c, 0x00, 0x2a, 0x30, 0x00, 0x00, 0x08} , /* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */ - {0x0e, 0x11, 0x02, 0x05, 0x08, 0x0b, 0x6b, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x6f} , + {0x0b, 0x0e, 0x11, 0x02, 0x05, 0x08, 0x63, 0x00, 0x40, 0x00, 0x00, 0x00, 0x6f} , 1.0, 1.0, 1.0, NULL, NULL, NULL} , + + /* HP N6310 */ + + {CCD_HP_N6310, + 2400, + 96, + 26, + 128, + 42720, + 210, + 230, + /* 08 09 0a 0b */ + {0x00, 0x10, 0x10, 0x0c} , + /* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x0c, 0x02, 0x2a, 0x30, 0x00, 0x00, 0x08} , + /* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */ + {0x0b, 0x0e, 0x11, 0x02, 0x05, 0x08, 0x63, 0x00, 0x40, 0x00, 0x00, 0x06, 0x6f} , + 1.0, 1.0, 1.0, + + NULL, NULL, NULL + } + , + /* CANONLIDE110 */ {CIS_CANONLIDE110, 2400, /* optical resolution */ @@ -661,14 +718,17 @@ GPO_DP685, {0x3f, 0x46}, /* 6c, 6d */ {0xfb, 0x00}, /* 6e, 6f */ - } - , + }, /* CANONLIDE200 */ {GPO_CANONLIDE200, {0xfb, 0x20}, /* 0xfb when idle , 0xf9/0xe9 (1200) when scanning */ {0xff, 0x00}, - } - , + }, + /* CANONLIDE700 */ + {GPO_CANONLIDE700, + {0xdb, 0xff}, + {0xff, 0x80}, + }, {GPO_KVSS080, {0xf5, 0x20}, {0x7e, 0xa1}, @@ -679,12 +739,24 @@ {0xfc, 0x00}, } , + /* HP N6310 */ + {GPO_HP_N6310, + {0xa3, 0x00}, + {0x7f, 0x00}, + } + , /* CANONLIDE110 */ {GPO_CANONLIDE110, {0xfb, 0x20}, {0xff, 0x00}, } , + /* CANONLIDE210 */ + {GPO_CANONLIDE210, + {0xfb, 0x20}, + {0xff, 0x00}, + } + , /* Plustek 3600 */ {GPO_PLUSTEK_3600, {0x02, 0x00}, @@ -768,7 +840,7 @@ }, {MOTOR_HP2400, /* HP 2400c */ 1200, - 2400, + 1200, 1, 1, {{{ @@ -912,7 +984,7 @@ }, {MOTOR_CANONLIDE100, /* Canon LiDE 100 */ 1200, - 4800, + 6400, 2, /* maximum step type count */ 1, /* maximum power modes count */ { /* motor slopes */ @@ -925,7 +997,20 @@ }, {MOTOR_CANONLIDE200, /* Canon LiDE 200 */ 1200, - 4800, + 6400, + 2, + 1, + { /* motor slopes */ + { /* power mode 0 */ + { 3000, 1000, 127, 0.50}, /* full step */ + { 3000, 1500, 127, 0.50}, /* half step */ + { 3*2712, 3*2712, 16, 0.80}, /* quarter step 0.75*2712 */ + }, + }, + }, + {MOTOR_CANONLIDE700, /* Canon LiDE 700 */ + 1200, + 6400, 2, 1, { /* motor slopes */ @@ -951,7 +1036,7 @@ }, {MOTOR_G4050, 2400, - 4800, + 9600, 2, 1, { /* motor slopes */ @@ -1144,6 +1229,61 @@ 100 }; +static Genesys_Model hp4850c_model = { + "hewlett-packard-scanjet-4850c", /* Name */ + "Hewlett Packard", /* Device vendor string */ + "ScanJet 4850C", /* Device model name */ + GENESYS_GL843, + NULL, + + {2400, 1200, 600, 400, 300, 200, 150, 100, 0}, + {2400, 1200, 600, 400, 300, 200, 150, 100, 0}, + {16, 8, 0}, /* possible depths in gray mode */ + {16, 8, 0}, /* possible depths in color mode */ + + SANE_FIX (7.9), /* Start of scan area in mm (x) */ + SANE_FIX (5.9), /* Start of scan area in mm (y) */ + SANE_FIX (219.6), /* Size of scan area in mm (x) */ + SANE_FIX (314.5), /* Size of scan area in mm (y) */ + + SANE_FIX (3.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Size of scan area after paper sensor stops + sensing document in mm */ + SANE_FIX (0.0), /* Amount of feeding needed to eject document + after finishing scanning in mm */ + + 0, 24, 48, /* RGB CCD Line-distance correction in line number */ + /* 0 38 76 OK 1200/2400 */ + /* 0 24 48 OK [100,600] dpi */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + + SANE_FALSE, /* Is this a CIS scanner? */ + SANE_FALSE, /* Is this a sheetfed scanner? */ + CCD_G4050, + DAC_G4050, + GPO_G4050, + MOTOR_G4050, + GENESYS_FLAG_LAZY_INIT | + GENESYS_FLAG_OFFSET_CALIBRATION | + GENESYS_FLAG_STAGGERED_LINE | + GENESYS_FLAG_SKIP_WARMUP | + GENESYS_FLAG_DARK_CALIBRATION | + GENESYS_FLAG_CUSTOM_GAMMA, + GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW, + 100, + 100 +}; + static Genesys_Model hpg4010_model = { "hewlett-packard-scanjet-g4010", /* Name */ "Hewlett Packard", /* Device vendor string */ @@ -1151,14 +1291,14 @@ GENESYS_GL843, NULL, - { 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, /* TODO when settled down, add 800 and 1600 */ - { 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, /* TODO 4800 available */ + { 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, + { 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ - SANE_FIX (6.55), /* Start of scan area in mm (x) */ - SANE_FIX (15.00), /* Start of scan area in mm (y) */ - SANE_FIX (223.0), /* Size of scan area in mm (x) */ + SANE_FIX (8.0), /* Start of scan area in mm (x) */ + SANE_FIX (13.00), /* Start of scan area in mm (y) */ + SANE_FIX (217.9), /* Size of scan area in mm (x) 5148 pixels at 600 dpi*/ SANE_FIX (315.0), /* Size of scan area in mm (y) */ SANE_FIX (3.0), /* Start of white strip in mm (y) */ @@ -1176,7 +1316,9 @@ SANE_FIX (0.0), /* Amount of feeding needed to eject document after finishing scanning in mm */ - 0, 32, 48, /* RGB CCD Line-distance correction in pixel */ + 0, 24, 48, /* RGB CCD Line-distance correction in line number */ + /* 0 38 76 OK 1200/2400 */ + /* 0 24 48 OK [100,600] dpi */ COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ @@ -1186,14 +1328,15 @@ DAC_G4050, GPO_G4050, MOTOR_G4050, - GENESYS_FLAG_NO_CALIBRATION | - GENESYS_FLAG_LAZY_INIT | /* Which flags are needed for this scanner? */ - GENESYS_FLAG_SKIP_WARMUP | + GENESYS_FLAG_LAZY_INIT | GENESYS_FLAG_OFFSET_CALIBRATION | + GENESYS_FLAG_STAGGERED_LINE | + GENESYS_FLAG_SKIP_WARMUP | + GENESYS_FLAG_DARK_CALIBRATION | GENESYS_FLAG_CUSTOM_GAMMA, GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW, - 280, - 400 + 100, + 100 }; static Genesys_Model hpg4050_model = { @@ -1203,32 +1346,34 @@ GENESYS_GL843, NULL, - { 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, /* TODO when settled down, add 800 and 1600 */ - { 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, /* TODO 4800 available */ + { 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, + { 2400, 1200, 600, 400, 300, 200, 150, 100, 0}, {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ - SANE_FIX (6.55), /* Start of scan area in mm (x) */ - SANE_FIX (15.00), /* Start of scan area in mm (y) */ - SANE_FIX (223.0), /* Size of scan area in mm (x) */ + SANE_FIX (8.0), /* Start of scan area in mm (x) */ + SANE_FIX (13.00), /* Start of scan area in mm (y) */ + SANE_FIX (217.9), /* Size of scan area in mm (x) 5148 pixels at 600 dpi*/ SANE_FIX (315.0), /* Size of scan area in mm (y) */ SANE_FIX (3.0), /* Start of white strip in mm (y) */ SANE_FIX (0.0), /* Start of black mark in mm (x) */ - SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ - SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ - SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ - SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + SANE_FIX (8.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (13.00), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (217.9), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (250.0), /* Size of scan area in TA mode in mm (y) */ - SANE_FIX (0.0), /* Start of white strip in TA mode in mm (y) */ + SANE_FIX (40.0), /* Start of white strip in TA mode in mm (y) */ SANE_FIX (0.0), /* Size of scan area after paper sensor stops sensing document in mm */ SANE_FIX (0.0), /* Amount of feeding needed to eject document after finishing scanning in mm */ - 0, 32, 48, /* RGB CCD Line-distance correction in pixel */ + 0, 24, 48, /* RGB CCD Line-distance correction in line number */ + /* 0 38 76 OK 1200/2400 */ + /* 0 24 48 OK [100,600] dpi */ COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ @@ -1238,14 +1383,15 @@ DAC_G4050, GPO_G4050, MOTOR_G4050, - GENESYS_FLAG_NO_CALIBRATION | - GENESYS_FLAG_LAZY_INIT | /* Which flags are needed for this scanner? */ - GENESYS_FLAG_SKIP_WARMUP | + GENESYS_FLAG_LAZY_INIT | GENESYS_FLAG_OFFSET_CALIBRATION | + GENESYS_FLAG_STAGGERED_LINE | + GENESYS_FLAG_SKIP_WARMUP | + GENESYS_FLAG_DARK_CALIBRATION | GENESYS_FLAG_CUSTOM_GAMMA, GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW, - 280, - 400 + 100, + 100 }; @@ -1256,8 +1402,8 @@ GENESYS_GL847, NULL, - {1200, 600, 400, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */ - {1200, 600, 400, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */ + {4800, 2400, 1200, 600, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */ + {4800, 2400, 1200, 600, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */ {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ @@ -1266,7 +1412,7 @@ SANE_FIX (216.07), /* Size of scan area in mm (x) */ SANE_FIX (299.0), /* Size of scan area in mm (y) */ - SANE_FIX (3.0), /* Start of white strip in mm (y) */ + SANE_FIX (1.0), /* Start of white strip in mm (y) */ SANE_FIX (0.0), /* Start of black mark in mm (x) */ SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ @@ -1293,13 +1439,13 @@ MOTOR_CANONLIDE100, /* Which flags are needed for this scanner? */ GENESYS_FLAG_SKIP_WARMUP - | GENESYS_FLAG_ODD_EVEN_CIS - | GENESYS_FLAG_MUST_WAIT - | GENESYS_FLAG_OFFSET_CALIBRATION + | GENESYS_FLAG_SIS_SENSOR | GENESYS_FLAG_DARK_CALIBRATION + | GENESYS_FLAG_SHADING_REPARK + | GENESYS_FLAG_OFFSET_CALIBRATION | GENESYS_FLAG_CUSTOM_GAMMA, GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW, - 60, + 50, 400 }; @@ -1310,14 +1456,14 @@ GENESYS_GL124, NULL, - {2400, 1200, 600, /* 400,*/ 300, 150, 100, 75, 0}, /* possible x-resolutions */ - {2400, 1200, 600, /* 400,*/ 300, 150, 100, 75, 0}, /* possible y-resolutions */ + {4800, 2400, 1200, 600, /* 400,*/ 300, 150, 100, 75, 0}, /* possible x-resolutions */ + {4800, 2400, 1200, 600, /* 400,*/ 300, 150, 100, 75, 0}, /* possible y-resolutions */ {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ - SANE_FIX (3.6), /* Start of scan area in mm (x) */ - SANE_FIX (8.5), /* Start of scan area in mm (y) */ - SANE_FIX (213.80), /* Size of scan area in mm (x) */ + SANE_FIX (2.2), /* Start of scan area in mm (x) */ + SANE_FIX (9.0), /* Start of scan area in mm (y) */ + SANE_FIX (216.70), /* Size of scan area in mm (x) */ SANE_FIX (300.0), /* Size of scan area in mm (y) */ SANE_FIX (1.0), /* Start of white strip in mm (y) */ @@ -1362,14 +1508,14 @@ GENESYS_GL124, NULL, - {/*2400, */ 1200, 600, /* 400,*/ 300, 150, 100, 75, 0}, /* possible x-resolutions */ - {/*2400, */ 1200, 600, /* 400,*/ 300, 150, 100, 75, 0}, /* possible y-resolutions */ + {4800, 2400, 1200, 600, /* 400,*/ 300, 150, 100, 75, 0}, /* possible x-resolutions */ + {4800, 2400, 1200, 600, /* 400,*/ 300, 150, 100, 75, 0}, /* possible y-resolutions */ {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ - SANE_FIX (3.6), /* Start of scan area in mm (x) */ - SANE_FIX (8.5), /* Start of scan area in mm (y) */ - SANE_FIX (213.80), /* Size of scan area in mm (x) */ + SANE_FIX (2.2), /* Start of scan area in mm (x) */ + SANE_FIX (9.0), /* Start of scan area in mm (y) */ + SANE_FIX (216.70), /* Size of scan area in mm (x) */ SANE_FIX (300.0), /* Size of scan area in mm (y) */ SANE_FIX (0.0), /* Start of white strip in mm (y) */ @@ -1395,7 +1541,7 @@ SANE_FALSE, /* Is this a sheetfed scanner? */ CIS_CANONLIDE110, DAC_CANONLIDE110, - GPO_CANONLIDE110, + GPO_CANONLIDE210, MOTOR_CANONLIDE110, GENESYS_FLAG_SKIP_WARMUP | GENESYS_FLAG_OFFSET_CALIBRATION @@ -1449,14 +1595,13 @@ GPO_CANONLIDE200, MOTOR_CANONLIDE200, GENESYS_FLAG_UNTESTED /* not working yet */ - | GENESYS_FLAG_MUST_WAIT | GENESYS_FLAG_SKIP_WARMUP - | GENESYS_FLAG_ODD_EVEN_CIS - | GENESYS_FLAG_OFFSET_CALIBRATION + | GENESYS_FLAG_SIS_SENSOR | GENESYS_FLAG_DARK_CALIBRATION + | GENESYS_FLAG_OFFSET_CALIBRATION | GENESYS_FLAG_CUSTOM_GAMMA, GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW, - 60, + 50, 400 }; @@ -1467,17 +1612,17 @@ GENESYS_GL847, NULL, - {1200, 600, 400, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */ - {1200, 600, 400, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */ + {4800, 2400, 1200, 600, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */ + {4800, 2400, 1200, 600, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */ {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ - SANE_FIX (1.1), /* Start of scan area in mm (x) */ - SANE_FIX (8.3), /* Start of scan area in mm (y) */ + SANE_FIX (3.1), /* Start of scan area in mm (x) */ + SANE_FIX (8.1), /* Start of scan area in mm (y) */ SANE_FIX (216.07), /* Size of scan area in mm (x) */ - SANE_FIX (299.0), /* Size of scan area in mm (y) */ + SANE_FIX (297.0), /* Size of scan area in mm (y) */ - SANE_FIX (3.0), /* Start of white strip in mm (y) */ + SANE_FIX (1.0), /* Start of white strip in mm (y) */ SANE_FIX (0.0), /* Start of black mark in mm (x) */ SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ @@ -1498,19 +1643,18 @@ SANE_TRUE, /* Is this a CIS scanner? */ SANE_FALSE, /* Is this a sheetfed scanner? */ - CIS_CANONLIDE200, - DAC_CANONLIDE200, - GPO_CANONLIDE200, - MOTOR_CANONLIDE200, - GENESYS_FLAG_UNTESTED /* not working yet */ - | GENESYS_FLAG_MUST_WAIT - | GENESYS_FLAG_SKIP_WARMUP - | GENESYS_FLAG_ODD_EVEN_CIS + CIS_CANONLIDE700, + DAC_CANONLIDE700, + GPO_CANONLIDE700, + MOTOR_CANONLIDE700, + GENESYS_FLAG_SKIP_WARMUP + | GENESYS_FLAG_SIS_SENSOR | GENESYS_FLAG_OFFSET_CALIBRATION | GENESYS_FLAG_DARK_CALIBRATION + | GENESYS_FLAG_SHADING_REPARK | GENESYS_FLAG_CUSTOM_GAMMA, GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW, - 60, + 70, 400 }; @@ -1523,8 +1667,8 @@ GENESYS_GL847, NULL, - {1200, 600, 400, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */ - {1200, 600, 400, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */ + {4800, 2400, 1200, 600, 300, 200, 150, 100, 75, 0}, /* possible x-resolutions */ + {4800, 2400, 1200, 600, 300, 200, 150, 100, 75, 0}, /* possible y-resolutions */ {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ @@ -1533,7 +1677,7 @@ SANE_FIX (216.07), /* Size of scan area in mm (x) */ SANE_FIX (299.0), /* Size of scan area in mm (y) */ - SANE_FIX (3.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of white strip in mm (y) */ SANE_FIX (0.0), /* Start of black mark in mm (x) */ SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ @@ -1559,13 +1703,13 @@ GPO_CANONLIDE200, MOTOR_CANONLIDE200, GENESYS_FLAG_SKIP_WARMUP - | GENESYS_FLAG_MUST_WAIT - | GENESYS_FLAG_ODD_EVEN_CIS + | GENESYS_FLAG_SIS_SENSOR | GENESYS_FLAG_OFFSET_CALIBRATION | GENESYS_FLAG_DARK_CALIBRATION + | GENESYS_FLAG_SHADING_REPARK | GENESYS_FLAG_CUSTOM_GAMMA, GENESYS_HAS_SCAN_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_FILE_SW, - 60, + 50, 400 }; @@ -1692,9 +1836,9 @@ {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ - SANE_FIX (3.5), /* Start of scan area in mm (x) */ - SANE_FIX (7.5), /* Start of scan area in mm (y) */ - SANE_FIX (215.9), /* Size of scan area in mm (x) */ + SANE_FIX (6.5), /* Start of scan area in mm (x) */ + SANE_FIX (2.5), /* Start of scan area in mm (y) */ + SANE_FIX (220.0), /* Size of scan area in mm (x) */ SANE_FIX (297.2), /* Size of scan area in mm (y) */ SANE_FIX (0.0), /* Start of white strip in mm (y) */ @@ -1722,10 +1866,8 @@ DAC_WOLFSON_HP2400, GPO_HP2400, MOTOR_HP2400, - GENESYS_FLAG_UNTESTED /* not fully working yet */ - | GENESYS_FLAG_LAZY_INIT + GENESYS_FLAG_LAZY_INIT | GENESYS_FLAG_14BIT_GAMMA - | GENESYS_FLAG_XPA | GENESYS_FLAG_DARK_CALIBRATION | GENESYS_FLAG_OFFSET_CALIBRATION | GENESYS_FLAG_SKIP_WARMUP @@ -1957,9 +2099,9 @@ {16, 8, 0}, /* possible depths in gray mode */ {16, 8, 0}, /* possible depths in color mode */ - SANE_FIX ( 4.00), /* Start of scan area in mm (x) */ + SANE_FIX ( 0.30), /* Start of scan area in mm (x) */ SANE_FIX ( 0.80), /* 2.79 < Start of scan area in mm (y) */ - SANE_FIX (215.9), /* Size of scan area in mm (x) */ + SANE_FIX (220.0), /* Size of scan area in mm (x) */ SANE_FIX (296.4), /* Size of scan area in mm (y) */ SANE_FIX (0.00), /* Start of white strip in mm (y) */ @@ -1993,6 +2135,7 @@ | GENESYS_FLAG_DARK_CALIBRATION | GENESYS_FLAG_OFFSET_CALIBRATION | GENESYS_FLAG_HALF_CCD_MODE + | GENESYS_FLAG_SHADING_NO_MOVE | GENESYS_FLAG_CUSTOM_GAMMA, GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_POWER_SW | GENESYS_HAS_OCR_SW | GENESYS_HAS_SCAN_SW, 40, @@ -2579,6 +2722,62 @@ 200 }; +static Genesys_Model xerox_2400_model = { + "xerox-2400-model", /* Name */ + "Xerox", /* Device vendor string */ + "OneTouch 2400", /* Device model name */ + GENESYS_GL646, + NULL, + + {1200, 600, 400, 300, 200, 150, 100, 75, 50, 0}, /* possible x-resolutions */ + {2400, 1200, 600, 400, 300, 200, 150, 100, 75, 50, 0}, /* possible y-resolutions */ + {16, 8, 0}, /* possible depths in gray mode */ + {16, 8, 0}, /* possible depths in color mode */ + + SANE_FIX ( 4.00), /* Start of scan area in mm (x) */ + SANE_FIX ( 0.80), /* 2.79 < Start of scan area in mm (y) */ + SANE_FIX (215.9), /* Size of scan area in mm (x) */ + SANE_FIX (296.4), /* Size of scan area in mm (y) */ + + SANE_FIX (0.00), /* Start of white strip in mm (y) */ + SANE_FIX (0.00), /* Start of black mark in mm (x) */ + + SANE_FIX (0.00), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.00), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (0.00), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (0.00), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0.00), /* Start of white strip in TA mode in mm (y) */ + + SANE_FIX (0.0), /* Size of scan area after paper sensor stops + sensing document in mm */ + SANE_FIX (0.0), /* Amount of feeding needed to eject document + after finishing scanning in mm */ + + 48, 24, 0, /* RGB CCD Line-distance correction in pixel */ +/* 48, 24, 0, */ + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + + SANE_FALSE, /* Is this a CIS scanner? */ + SANE_FALSE, /* Is this a sheetfed scanner? */ + CCD_5345, + DAC_WOLFSON_5345, + GPO_5345, + MOTOR_5345, + GENESYS_FLAG_14BIT_GAMMA + | GENESYS_FLAG_LAZY_INIT + | GENESYS_FLAG_SEARCH_START + | GENESYS_FLAG_STAGGERED_LINE + | GENESYS_FLAG_DARK_CALIBRATION + | GENESYS_FLAG_OFFSET_CALIBRATION + | GENESYS_FLAG_HALF_CCD_MODE + | GENESYS_FLAG_CUSTOM_GAMMA, + GENESYS_HAS_COPY_SW | GENESYS_HAS_EMAIL_SW | GENESYS_HAS_POWER_SW | GENESYS_HAS_OCR_SW | GENESYS_HAS_SCAN_SW, + 40, + 200 +}; + + static Genesys_Model xerox_travelscanner_model = { "xerox-travelscanner", /* Name */ "Xerox", /* Device vendor string */ @@ -2685,6 +2884,64 @@ 200 }; +static Genesys_Model hpn6310_model = { + "hewlett-packard-scanjet-N6310", /* Name */ + "Hewlett Packard", /* Device vendor string */ + "ScanJet N6310", /* Device model name */ + GENESYS_GL847, + NULL, + + { 2400, 1200, 600, 400, 300, 200, 150, 100, 75, 0}, + { 2400, 1200, 600, 400, 300, 200, 150, 100, 75, 0}, + + {16, 8, 0}, /* possible depths in gray mode */ + {16, 8, 0}, /* possible depths in color mode */ + + SANE_FIX (6), /* Start of scan area in mm (x) */ + SANE_FIX (2), /* Start of scan area in mm (y) */ + SANE_FIX (216), /* Size of scan area in mm (x) 5148 pixels at 600 dpi*/ + SANE_FIX (511), /* Size of scan area in mm (y) */ + + SANE_FIX (3.0), /* Start of white strip in mm (y) */ + SANE_FIX (0.0), /* Start of black mark in mm (x) */ + + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (x) */ + SANE_FIX (0.0), /* Start of scan area in TA mode in mm (y) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (x) */ + SANE_FIX (100.0), /* Size of scan area in TA mode in mm (y) */ + + SANE_FIX (0), /* Start of white strip in TA mode in mm (y) */ + + SANE_FIX (0), /* Size of scan area after paper sensor stops + sensing document in mm */ + SANE_FIX (0), /* Amount of feeding needed to eject document + after finishing scanning in mm */ + + 0, 0, 0, /* RGB CCD Line-distance correction in pixel */ + + COLOR_ORDER_RGB, /* Order of the CCD/CIS colors */ + + SANE_FALSE, /* Is this a CIS scanner? */ + SANE_FALSE, /* Is this a sheetfed scanner? */ + CCD_HP_N6310, + DAC_CANONLIDE200, /*Not defined yet for N6310 */ + GPO_HP_N6310, + MOTOR_CANONLIDE200, /*Not defined yet for N6310 */ + GENESYS_FLAG_UNTESTED /* not fully working yet */ + | GENESYS_FLAG_LAZY_INIT + | GENESYS_FLAG_14BIT_GAMMA + | GENESYS_FLAG_DARK_CALIBRATION + | GENESYS_FLAG_OFFSET_CALIBRATION + | GENESYS_FLAG_CUSTOM_GAMMA + | GENESYS_FLAG_SKIP_WARMUP + | GENESYS_FLAG_NO_CALIBRATION, +/* | GENESYS_FLAG_HALF_CCD_MODE,*/ + + GENESYS_HAS_NO_BUTTONS, + 100, + 100 +}; + static Genesys_USB_Device_Entry genesys_usb_device_list[] = { @@ -2694,6 +2951,7 @@ {0x03f0, 0x1405, &hp3670c_model}, {0x0461, 0x0377, &medion_md5345_model}, {0x04a7, 0x0229, &visioneer_7100_model}, + {0x0461, 0x038b, &xerox_2400_model}, {0x04a7, 0x0426, &visioneer_xp200_model}, {0x0638, 0x0a10, &umax_astra_4500_model}, {0x07b3, 0x0600, &plustek_st12_model}, @@ -2719,8 +2977,10 @@ {0x04a9, 0x1905, &canon_lide_200_model}, {0x04a9, 0x1906, &canon_5600f_model}, {0x04a9, 0x1907, &canon_lide_700f_model}, + {0x03f0, 0x4705, &hpn6310_model}, /* GL843 devices */ {0x04da, 0x100f, &panasonic_kvss080_model}, + {0x03f0, 0x1b05, &hp4850c_model}, {0x03f0, 0x4505, &hpg4010_model}, {0x03f0, 0x4605, &hpg4050_model}, /* GL124 devices */ diff -Nru sane-backends-1.0.22/backend/genesys_gl124.c sane-backends-1.0.23/backend/genesys_gl124.c --- sane-backends-1.0.22/backend/genesys_gl124.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl124.c 2012-08-10 00:33:29.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2010 Stphane Voltz + Copyright (C) 2010-2012 Stphane Voltz This file is part of the SANE package. @@ -42,6 +42,9 @@ If you do not wish that, delete this exception notice. */ +#undef BACKEND_NAME +#define BACKEND_NAME genesys_gl124 + #include "genesys_gl124.h" /**************************************************************************** @@ -371,30 +374,6 @@ return &(motors[idx]); } - -/** @brief returns the lowest possible ydpi for the device - * Parses device entry to find lowest motor dpi. - * @dev device description - * @return lowest motor resolution - */ -/* -static int gl124_get_lowest_ydpi(Genesys_Device *dev) -{ - int min=9600; - int i=0; - - while(dev->model->ydpi_values[i]!=0) - { - if(dev->model->ydpi_values[i]model->ydpi_values[i]; - } - i++; - } - return min; -} -*/ - /** @brief generate slope table * Generate the slope table to use for the scan using a reference slope * table. @@ -468,6 +447,18 @@ return GENESYS_GL124_MAX_REGS; } +static SANE_Status +gl124_homsnr_gpio(Genesys_Device *dev) +{ +uint8_t val; +SANE_Status status=SANE_STATUS_GOOD; + + RIE (sanei_genesys_read_register (dev, REG32, &val)); + val &= ~REG32_GPIO10; + RIE (sanei_genesys_write_register (dev, REG32, val)); + return status; +} + /** @brief set all registers to default values . * This function is called only once at the beginning and * fills register startup values for registers reused across scans. @@ -919,30 +910,6 @@ } -/**@brief compute hardware sensor dpi to use - * compute the sensor hardware dpi based on target resolution. - * A lower dpihw enable faster scans. - * @param dev device used for the scan - * @param xres x resolution of the scan - * @return the hardware dpi to use - */ -static int gl124_compute_dpihw(Genesys_Device *dev, int xres) -{ - switch(dev->model->ccd_type) - { - default: - if(xres<=dev->sensor.optical_res/4) - { - return dev->sensor.optical_res/4; - } - if(xres<=dev->sensor.optical_res/2) - { - return dev->sensor.optical_res/2; - } - return dev->sensor.optical_res; - } -} - /**@brief compute exposure to use * compute the sensor exposure based on target resolution */ @@ -972,10 +939,6 @@ return profile->step_type; } -#define MOTOR_FLAG_AUTO_GO_HOME 1 -#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 2 -#define MOTOR_FLAG_FEED 4 - static SANE_Status gl124_init_motor_regs_scan (Genesys_Device * dev, @@ -1031,7 +994,9 @@ } if ((scan_mode != SCAN_MODE_COLOR) && (yres<300)) { - yres=300; + scan_dummy=dev->line_interp-1; + dev->line_interp=0; + yres=300; } sanei_genesys_set_triple(reg,REG_LINCNT,lincnt); @@ -1103,6 +1068,8 @@ feedl<<=scan_step_type; dist = scan_steps; + if (flags & MOTOR_FLAG_FEED) + dist *=2; if (use_fast_fed) { dist += fast_steps*2; @@ -1113,7 +1080,7 @@ if(distmodel->ccd_type, dpihw); r = sanei_genesys_get_address (regs, 0x18); @@ -1236,21 +1203,18 @@ sanei_genesys_set_triple(regs,REG_CK3MAP,sensor->ck3map); sanei_genesys_set_triple(regs,REG_CK4MAP,sensor->ck4map); + /* order of the sub-segments */ + dev->order=sensor->order; + DBGCOMPLETED; } - - -#define OPTICAL_FLAG_DISABLE_GAMMA 1 -#define OPTICAL_FLAG_DISABLE_SHADING 2 -#define OPTICAL_FLAG_DISABLE_LAMP 4 -#define OPTICAL_FLAG_ENABLE_LEDADD 8 -#define OPTICAL_FLAG_DISABLE_DOUBLE 16 - /** @brief setup optical related registers * start and pixels are expressed in optical sensor resolution coordinate - * space. To handle odd/even case we double the resolution and - * use only first logical half the sensor which maps to effective CCD. + * space. + * @param exposure_time exposure time to use + * @param used_res scanning resolution used, may differ from + * scan's one * @param start logical start pixel coordinate * @param pixels logical number of pixels to use * @return SANE_STATUS_GOOD if OK @@ -1264,7 +1228,9 @@ unsigned int pixels, int channels, int depth, - SANE_Bool half_ccd, int color_filter, int flags) + SANE_Bool half_ccd, + int color_filter, + int flags) { unsigned int words_per_line, segcnt; unsigned int startx, endx, used_pixels, segnb; @@ -1285,7 +1251,7 @@ /* to manage high resolution device while keeping good * low resolution scanning speed, we make hardware dpi vary */ - dpihw=gl124_compute_dpihw(dev, used_res * cksel); + dpihw=sanei_genesys_compute_dpihw(dev, used_res * cksel); factor=dev->sensor.optical_res/dpihw; DBG (DBG_io2, "%s: dpihw=%d (factor=%d)\n", __FUNCTION__, dpihw, factor); @@ -1428,10 +1394,10 @@ dev->bpl = words_per_line; dev->cur = 0; + dev->skip = 0; dev->len = dev->bpl/segnb; dev->dist = dev->bpl/segnb; dev->segnb = segnb; - dev->skip = 0; dev->line_count = 0; if(dpiset>=300) { @@ -1452,12 +1418,11 @@ DBG (DBG_io2, "%s: dev->bpl =%lu\n", __FUNCTION__, (unsigned long)dev->bpl); DBG (DBG_io2, "%s: dev->len =%lu\n", __FUNCTION__, (unsigned long)dev->len); DBG (DBG_io2, "%s: dev->dist =%lu\n", __FUNCTION__, (unsigned long)dev->dist); - DBG (DBG_io2, "%s: dev->skip =%lu\n", __FUNCTION__, (unsigned long)dev->skip); words_per_line *= channels; dev->wpl = words_per_line; - /* allocate buffer for odd/even pixles handling */ + /* allocate buffer for odd/even pixels handling */ if(dev->oe_buffer.buffer!=NULL) { sanei_genesys_buffer_free (&(dev->oe_buffer)); @@ -1495,7 +1460,8 @@ float lines, unsigned int depth, unsigned int channels, - int color_filter, unsigned int flags) + int color_filter, + unsigned int flags) { int used_res; int start, used_pixels; @@ -1549,17 +1515,15 @@ stagger = 0; DBG (DBG_info, "gl124_init_scan_regs : stagger=%d lines\n", stagger); - /** @brief compute used resolution - * the sensor if mapped only to odd pixels. So we double the optical - * resolution and use first half - * */ + /** @brief compute used resolution */ if (flags & SCAN_FLAG_USE_OPTICAL_RES) { used_res = optical_res; } else { - /* resolution is choosen from a fixed list and can be used directly */ + /* resolution is choosen from a fixed list and can be used directly, + * unless we have ydpi higher than sensor's maximum one */ if(xres>optical_res) used_res=optical_res; else @@ -1577,7 +1541,6 @@ start |= 1; /* compute correct pixels number */ - /* pixels */ used_pixels = (pixels * optical_res) / xres; DBG (DBG_info, "%s: used_pixels=%d\n", __FUNCTION__, used_pixels); @@ -1610,12 +1573,10 @@ scan_step_type = gl124_compute_step_type(dev, exposure_time); } - DBG (DBG_info, "gl124_init_scan_regs : exposure_time=%d pixels\n", - exposure_time); - DBG (DBG_info, "gl124_init_scan_regs : scan_step_type=%d\n", - scan_step_type); + DBG (DBG_info, "gl124_init_scan_regs : exposure_time=%d pixels\n", exposure_time); + DBG (DBG_info, "gl124_init_scan_regs : scan_step_type=%d\n", scan_step_type); -/*** optical parameters ***/ + /*** optical parameters ***/ /* in case of dynamic lineart, we use an internal 8 bit gray scan * to generate 1 lineart data */ if ((flags & SCAN_FLAG_DYNAMIC_LINEART) @@ -1646,29 +1607,16 @@ used_pixels, channels, depth, - half_ccd, color_filter, oflags); - + half_ccd, + color_filter, + oflags); if (status != SANE_STATUS_GOOD) return status; -/*** motor parameters ***/ + /*** motor parameters ***/ -/* max_shift */ - /* scanned area must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1 && !(flags & SCAN_FLAG_IGNORE_LINE_DISTANCE)) - { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = (max_shift * yres) / dev->motor.base_ydpi; - } - else - { - max_shift = 0; - } + /* max_shift */ + max_shift=sanei_genesys_compute_max_shift(dev,channels,yres,flags); /* lines to scan */ lincnt = lines + max_shift + stagger; @@ -1748,7 +1696,7 @@ dev->current_setup.max_shift = max_shift + stagger; dev->total_bytes_read = 0; - if (depth == 1 || dev->settings.scan_mode == SCAN_MODE_LINEART) + if (depth == 1) dev->total_bytes_to_read = ((dev->settings.pixels * dev->settings.lines) / 8 + (((dev->settings.pixels * dev->settings.lines) % 8) ? 1 : 0)) * @@ -1890,24 +1838,10 @@ scan_step_type = gl124_compute_step_type(dev, exposure_time); DBG (DBG_info, "%s : exposure_time=%d pixels\n", __FUNCTION__, exposure_time); -/* max_shift */ - /* scanned area must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1) - { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = (max_shift * yres) / dev->motor.base_ydpi; - } - else - { - max_shift = 0; - } + /* max_shift */ + max_shift=sanei_genesys_compute_max_shift(dev,channels,yres,0); - dpihw=gl124_compute_dpihw(dev,used_res); + dpihw=sanei_genesys_compute_dpihw(dev,used_res); sensor=get_sensor_profile(dev->model->ccd_type, dpihw); dev->segnb=sensor->reg98 & 0x0f; @@ -2022,19 +1956,20 @@ return sanei_genesys_write_register (dev, 0x0f, 0x01); } -static SANE_Status +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl124_stop_action (Genesys_Device * dev) { SANE_Status status; uint8_t val40, val; unsigned int loop; - DBG (DBG_proc, "%s\n", __FUNCTION__); + DBGSTART; - /* post scan gpio */ - RIE (sanei_genesys_read_register (dev, REG32, &val)); - val &= 0xf9; - RIE (sanei_genesys_write_register (dev, REG32, val)); + /* post scan gpio : without that HOMSNR is unreliable */ + gl124_homsnr_gpio(dev); status = sanei_genesys_get_status (dev, &val); if (DBG_LEVEL >= DBG_io) @@ -2082,7 +2017,6 @@ { sanei_genesys_print_status (val); } - val40 = 0; status = sanei_genesys_read_hregister (dev, REG100, &val40); if (status != SANE_STATUS_GOOD) { @@ -2213,11 +2147,13 @@ uint8_t val; float resolution; int loop = 0; + int scan_mode; DBG (DBG_proc, "gl124_slow_back_home (wait_until_home = %d)\n", wait_until_home); - dev->scanhead_position_in_steps = 0; + /* post scan gpio : without that HOMSNR is unreliable */ + gl124_homsnr_gpio(dev); /* first read gives HOME_SENSOR true */ status = sanei_genesys_get_status (dev, &val); @@ -2228,6 +2164,10 @@ sane_strstatus (status)); return status; } + if (DBG_LEVEL >= DBG_io) + { + sanei_genesys_print_status (val); + } usleep (100000); /* sleep 100 ms */ /* second is reliable */ @@ -2243,16 +2183,23 @@ { sanei_genesys_print_status (val); } - if (val & HOMESNR) /* is sensor at home? */ + + /* is sensor at home? */ + if (val & HOMESNR) { + DBG (DBG_info, "%s: already at home, completed\n", __FUNCTION__); + dev->scanhead_position_in_steps = 0; DBGCOMPLETED; return SANE_STATUS_GOOD; } memset (local_reg, 0, sizeof (local_reg)); memcpy (local_reg, dev->reg, GENESYS_GL124_MAX_REGS * sizeof (Genesys_Register_Set)); - resolution=MOVE_DPI; + resolution=sanei_genesys_get_lowest_dpi(dev); + /* TODO add scan_mode to the API */ + scan_mode= dev->settings.scan_mode; + dev->settings.scan_mode=SCAN_MODE_LINEART; gl124_init_scan_regs (dev, local_reg, resolution, @@ -2262,15 +2209,12 @@ 100, 100, 8, - 3, - dev->settings.color_filter, + 1, + 0, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | - SCAN_FLAG_FEEDING | SCAN_FLAG_IGNORE_LINE_DISTANCE); - sanei_genesys_set_triple(local_reg,REG_EXPR,0); - sanei_genesys_set_triple(local_reg,REG_EXPG,0); - sanei_genesys_set_triple(local_reg,REG_EXPB,0); + dev->settings.scan_mode=scan_mode; /* clear scan and feed count */ RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT)); @@ -2278,8 +2222,6 @@ /* set up for reverse and no scan */ r = sanei_genesys_get_address (local_reg, REG02); r->value |= REG02_MTRREV; - r = sanei_genesys_get_address (local_reg, REG01); - r->value &= ~REG01_SCAN; RIE (gl124_bulk_write_register (dev, local_reg, GENESYS_GL124_MAX_REGS)); @@ -2295,6 +2237,9 @@ return status; } + /* post scan gpio : without that HOMSNR is unreliable */ + gl124_homsnr_gpio(dev); + if (wait_until_home) { @@ -2312,7 +2257,8 @@ if (val & HOMESNR) /* home sensor */ { DBG (DBG_info, "gl124_slow_back_home: reached home position\n"); - DBG (DBG_proc, "gl124_slow_back_home: finished\n"); + DBGCOMPLETED; + dev->scanhead_position_in_steps = 0; return SANE_STATUS_GOOD; } usleep (100000); /* sleep 100 ms */ @@ -2327,7 +2273,7 @@ } DBG (DBG_info, "gl124_slow_back_home: scanhead is still moving\n"); - DBG (DBG_proc, "gl124_slow_back_home: finished\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -2348,13 +2294,13 @@ uint8_t val; DBGSTART; + DBG (DBG_io, "%s: steps=%d\n", __FUNCTION__, steps); /* prepare local registers */ memset (local_reg, 0, sizeof (local_reg)); memcpy (local_reg, dev->reg, GENESYS_GL124_MAX_REGS * sizeof (Genesys_Register_Set)); - - resolution=MOVE_DPI; + resolution=sanei_genesys_get_lowest_ydpi(dev); gl124_init_scan_regs (dev, local_reg, resolution, @@ -2371,6 +2317,8 @@ SCAN_FLAG_FEEDING | SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE | SCAN_FLAG_IGNORE_LINE_DISTANCE); + + /* set exposure to zero */ sanei_genesys_set_triple(local_reg,REG_EXPR,0); sanei_genesys_set_triple(local_reg,REG_EXPG,0); sanei_genesys_set_triple(local_reg,REG_EXPB,0); @@ -2404,6 +2352,9 @@ status = sanei_genesys_get_status (dev, &val); } while (status == SANE_STATUS_GOOD && !(val & FEEDFSH)); + + /* then stop scanning */ + RIE(gl124_stop_action (dev)); DBGCOMPLETED; return SANE_STATUS_GOOD; @@ -2529,7 +2480,6 @@ SANE_Status status; uint8_t channels; uint8_t cksel; - Genesys_Register_Set *r; DBGSTART; cksel = (dev->calib_reg[reg_0x18].value & REG18_CKSEL) + 1; /* clock speed = 1..4 clocks */ @@ -2563,15 +2513,13 @@ sane_strstatus (status)); return status; } - r = sanei_genesys_get_address (dev->calib_reg, REG02); - r->value &= ~REG02_MTRPWR; + gl124_set_motor_power (dev->calib_reg, SANE_FALSE); DBG (DBG_info, "gl124_init_register_for_coarse_calibration: optical sensor res: %d dpi, actual res: %d\n", dev->sensor.optical_res / cksel, dev->settings.xres); - status = - gl124_bulk_write_register (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS); + status = gl124_bulk_write_register (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -2586,22 +2534,29 @@ /* init registers for shading calibration */ +/* shading calibration is done at dpihw */ static SANE_Status gl124_init_regs_for_shading (Genesys_Device * dev) { SANE_Status status; - int move,resolution; - Genesys_Register_Set *r; + int move, resolution, dpihw, factor; DBGSTART; /* initial calibration reg values */ - memcpy (dev->calib_reg, dev->reg, - GENESYS_GL124_MAX_REGS * sizeof (Genesys_Register_Set)); + memcpy (dev->calib_reg, dev->reg, GENESYS_GL124_MAX_REGS * sizeof (Genesys_Register_Set)); dev->calib_channels = 3; - resolution=gl124_compute_dpihw(dev,dev->settings.xres); - dev->calib_pixels = (dev->sensor.sensor_pixels*resolution)/dev->sensor.optical_res; + dev->calib_lines = dev->model->shading_lines; + dpihw=sanei_genesys_compute_dpihw(dev,dev->settings.xres); + if(dpihw>=2400) + { + dev->calib_lines *= 2; + } + factor=dev->sensor.optical_res/dpihw; + resolution=dpihw; + dev->calib_resolution = resolution; + dev->calib_pixels = dev->sensor.sensor_pixels/factor; /* distance to move to reach white target at high resolution */ move=0; @@ -2619,17 +2574,15 @@ 0, move, dev->calib_pixels, - dev->model->shading_lines, + dev->calib_lines, 16, dev->calib_channels, 0, - 0); - r = sanei_genesys_get_address (dev->calib_reg, REG01); - r->value &= ~REG01_DVDSET; - r = sanei_genesys_get_address (dev->calib_reg, REG02); - r->value &= ~REG02_MTRPWR; - r = sanei_genesys_get_address (dev->calib_reg, REG05); - r->value &= ~REG05_GMMENB; + SCAN_FLAG_DISABLE_SHADING | + SCAN_FLAG_DISABLE_GAMMA | + SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE | + SCAN_FLAG_IGNORE_LINE_DISTANCE); + gl124_set_motor_power (dev->calib_reg, SANE_FALSE); if (status != SANE_STATUS_GOOD) { @@ -2638,10 +2591,9 @@ return status; } - dev->scanhead_position_in_steps += dev->model->shading_lines + move; + dev->scanhead_position_in_steps += dev->calib_lines + move; - status = - gl124_bulk_write_register (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS); + status = gl124_bulk_write_register (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -2739,23 +2691,15 @@ move = (move * move_dpi) / MM_PER_INCH; DBG (DBG_info, "%s: move=%f steps\n", __FUNCTION__, move); - if(channels*dev->settings.yres>=1200 && move>3000) + if(channels*dev->settings.yres>=600 && move>700) { - move -= 180; - status = gl124_feed (dev, move); + status = gl124_feed (dev, move-500); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, "%s: failed to move to scan area\n",__FUNCTION__); return status; } - move=0; - } - else - { - if(channels==1) - { - move-=0; - } + move=500; } DBG (DBG_info, "gl124_init_regs_for_scan: move=%f steps\n", move); @@ -2782,7 +2726,9 @@ dev->settings.pixels, dev->settings.lines, depth, - channels, dev->settings.color_filter, flags); + channels, + dev->settings.color_filter, + flags); if (status != SANE_STATUS_GOOD) return status; @@ -2832,7 +2778,7 @@ /* compute deletion factor */ sanei_genesys_get_double(dev->reg,REG_DPISET,&dpiset); - dpihw=gl124_compute_dpihw(dev,dpiset); + dpihw=sanei_genesys_compute_dpihw(dev,dpiset); factor=dpihw/dpiset; DBG( DBG_io2, "%s: factor=%d\n",__FUNCTION__,factor); @@ -2888,7 +2834,7 @@ break; } - /* next shading coefficients */ + /* next shading coefficient */ ptr+=4; } RIE (sanei_genesys_read_register (dev, 0xd0+i, &val)); @@ -2908,7 +2854,7 @@ return status; } -/** @brief send gmma table to scanner +/** @brief send gamma table to scanner * This function sends generic gamma table (ie ones built with * provided gamma) or the user defined one if provided by * fontend. @@ -3027,29 +2973,26 @@ SANE_Status status = SANE_STATUS_GOOD; int val; int channels, depth; - int avg[3], avga, avge; + int avg[3], top[3], bottom[3]; int turn; char fn[20]; - uint32_t expr, expg, expb; + uint16_t exp[3],target; Sensor_Profile *sensor; - Genesys_Register_Set *r; - - SANE_Bool acceptable = SANE_FALSE; + SANE_Bool acceptable; DBGSTART; /* offset calibration is always done in color mode */ channels = 3; - depth = 16; - used_res=gl124_compute_dpihw(dev,dev->settings.xres); + depth=16; + used_res=sanei_genesys_compute_dpihw(dev,dev->settings.xres); sensor=get_sensor_profile(dev->model->ccd_type, used_res); - num_pixels = - (dev->sensor.sensor_pixels * used_res) / dev->sensor.optical_res; - + num_pixels = (dev->sensor.sensor_pixels*used_res)/dev->sensor.optical_res; + /* initial calibration reg values */ - memcpy (dev->calib_reg, dev->reg, - GENESYS_GL124_MAX_REGS * sizeof (Genesys_Register_Set)); + memcpy (dev->calib_reg, dev->reg, GENESYS_GL124_MAX_REGS * sizeof (Genesys_Register_Set)); + /* set up for the calibration scan */ status = gl124_init_scan_regs (dev, dev->calib_reg, used_res, @@ -3057,158 +3000,120 @@ 0, 0, num_pixels, - 1, - depth, - channels, + 1, + depth, + channels, dev->settings.color_filter, - SCAN_FLAG_CALIBRATION | SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | SCAN_FLAG_SINGLE_LINE | SCAN_FLAG_IGNORE_LINE_DISTANCE); - if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "gl124_led_calibration: failed to setup scan: %s\n", - sane_strstatus (status)); + DBG (DBG_error, "%s: failed to setup scan: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } - RIE (gl124_bulk_write_register - (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS)); - - - total_size = num_pixels * channels * (depth / 8) * 1; /* colors * bytes_per_color * scan lines */ - + total_size = num_pixels * channels * (depth/8) * 1; /* colors * bytes_per_color * scan lines */ line = malloc (total_size); if (!line) return SANE_STATUS_NO_MEM; -/* - we try to get equal bright leds here: + /* initial loop values and boundaries */ + exp[0]=sensor->expr; + exp[1]=sensor->expg; + exp[2]=sensor->expb; + target=dev->sensor.gain_white_ref*256; - loop: - average per color - adjust exposure times - */ + for(i=0;i<3;i++) + { + bottom[i]=exp[i]/2; + top[i]=exp[i]*1.5; + } - /* inital values */ - expr=sensor->expr; - expg=sensor->expg; - expb=sensor->expb; - turn = 0; /* no move during led calibration */ - r = sanei_genesys_get_address (dev->calib_reg, REG02); - r->value &= ~REG02_MTRPWR; + gl124_set_motor_power (dev->calib_reg, SANE_FALSE); do { - sanei_genesys_set_triple(dev->calib_reg,REG_EXPR,expr); - sanei_genesys_set_triple(dev->calib_reg,REG_EXPG,expg); - sanei_genesys_set_triple(dev->calib_reg,REG_EXPB,expb); + /* set up exposure */ + sanei_genesys_set_triple(dev->calib_reg,REG_EXPR,exp[0]); + sanei_genesys_set_triple(dev->calib_reg,REG_EXPG,exp[1]); + sanei_genesys_set_triple(dev->calib_reg,REG_EXPB,exp[2]); - RIE (gl124_bulk_write_register - (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS)); + /* write registers and scan data */ + RIE (gl124_bulk_write_register (dev, dev->calib_reg, GENESYS_GL124_MAX_REGS)); - DBG (DBG_info, "gl124_led_calibration: starting first line reading\n"); + DBG (DBG_info, "gl124_led_calibration: starting line reading\n"); RIE (gl124_begin_scan (dev, dev->calib_reg, SANE_TRUE)); RIE (sanei_genesys_read_data_from_scanner (dev, line, total_size)); + /* stop scanning */ + RIE (gl124_stop_action (dev)); + if (DBG_LEVEL >= DBG_data) { snprintf (fn, 20, "led_%02d.pnm", turn); - sanei_genesys_write_pnm_file (fn, - line, depth, channels, num_pixels, 1); + sanei_genesys_write_pnm_file (fn, line, depth, channels, num_pixels, 1); } - acceptable = SANE_TRUE; - + /* compute average */ for (j = 0; j < channels; j++) { avg[j] = 0; for (i = 0; i < num_pixels; i++) { - val = line[i * 2 + j * 2 * num_pixels + 1] * 256 + + if (dev->model->is_cis) + val = + line[i * 2 + j * 2 * num_pixels + 1] * 256 + line[i * 2 + j * 2 * num_pixels]; + else + val = + line[i * 2 * channels + 2 * j + 1] * 256 + + line[i * 2 * channels + 2 * j]; avg[j] += val; } + avg[j] /= num_pixels; } - avga = (avg[0] + avg[1] + avg[2]) / 3; - DBG (DBG_info, "gl124_led_calibration: average: " - "%d,%d,%d\n", avg[0], avg[1], avg[2]); + DBG (DBG_info, "gl124_led_calibration: average: %d,%d,%d\n", avg[0], avg[1], avg[2]); + /* check if exposure gives average within the boundaries */ acceptable = SANE_TRUE; - - /* averages must be in a %5 range from each other */ - if (avg[0] < avg[1] * 0.95 || avg[1] < avg[0] * 0.95 || - avg[0] < avg[2] * 0.95 || avg[2] < avg[0] * 0.95 || - avg[1] < avg[2] * 0.95 || avg[2] < avg[1] * 0.95) - acceptable = SANE_FALSE; - - if (!acceptable) - { - expr = (expr * avga) / avg[0]; - expg = (expg * avga) / avg[1]; - expb = (expb * avga) / avg[2]; -/* - keep the resulting exposures below this value. - too long exposure drives the ccd into saturation. - we may fix this by relying on the fact that - we get a striped scan without shading, by means of - statistical calculation -*/ - avge = (expr + expg + expb) / 3; - - /* XXX STEF XXX check limits: don't overflow max exposure */ - if (avge > 40000) - { - expr = (expr * 40000) / avge; - expg = (expg * 40000) / avge; - expb = (expb * 40000) / avge; - } - if (avge < 200) - { - expr = (expr * 200) / avge; - expg = (expg * 200) / avge; - expb = (expb * 200) / avge; - } - - } - - RIE (gl124_stop_action (dev)); + for(i=0;i<3;i++) + { + /* we accept +- 2% delta from target */ + if(abs(avg[i]-target)>target/50) + { + exp[i]=(exp[i]*target)/avg[i]; + acceptable = SANE_FALSE; + } + } turn++; - } while (!acceptable && turn < 100); - DBG (DBG_info, "gl124_led_calibration: acceptable exposure: %d,%d,%d\n", - expr, expg, expb); + DBG (DBG_info, "gl124_led_calibration: acceptable exposure: %d,%d,%d\n", exp[0], exp[1], exp[2]); /* set these values as final ones for scan */ - sanei_genesys_set_triple(dev->reg,REG_EXPR,expr); - sanei_genesys_set_triple(dev->reg,REG_EXPG,expg); - sanei_genesys_set_triple(dev->reg,REG_EXPB,expb); - - /* we're hoping that the values are 16bits so we can have them - * persist in cache */ - dev->sensor.regs_0x10_0x1d[0] = (expr >> 8) & 0xff; - dev->sensor.regs_0x10_0x1d[1] = expr & 0xff; - dev->sensor.regs_0x10_0x1d[2] = (expg >> 8) & 0xff; - dev->sensor.regs_0x10_0x1d[3] = expg & 0xff; - dev->sensor.regs_0x10_0x1d[4] = (expb >> 8) & 0xff; - dev->sensor.regs_0x10_0x1d[5] = expb & 0xff; + sanei_genesys_set_triple(dev->reg,REG_EXPR,exp[0]); + sanei_genesys_set_triple(dev->reg,REG_EXPG,exp[1]); + sanei_genesys_set_triple(dev->reg,REG_EXPB,exp[2]); + + /* store in this struct since it is the one used by cache calibration */ + dev->sensor.regs_0x10_0x1d[0] = (exp[0] >> 8) & 0xff; + dev->sensor.regs_0x10_0x1d[1] = exp[0] & 0xff; + dev->sensor.regs_0x10_0x1d[2] = (exp[1] >> 8) & 0xff; + dev->sensor.regs_0x10_0x1d[3] = exp[1] & 0xff; + dev->sensor.regs_0x10_0x1d[4] = (exp[2] >> 8) & 0xff; + dev->sensor.regs_0x10_0x1d[5] = exp[2] & 0xff; /* cleanup before return */ free (line); - - /* repark head */ - gl124_slow_back_home (dev, SANE_TRUE); - + DBGCOMPLETED; return status; } @@ -3254,7 +3159,6 @@ static SANE_Status gl124_offset_calibration (Genesys_Device * dev) { - Genesys_Register_Set *r; SANE_Status status = SANE_STATUS_GOOD; uint8_t *first_line, *second_line, reg0a; unsigned int channels, bpp; @@ -3305,8 +3209,7 @@ sane_strstatus (status)); return status; } - r = sanei_genesys_get_address (dev->calib_reg, REG02); - r->value &= ~REG02_MTRPWR; + gl124_set_motor_power (dev->calib_reg, SANE_FALSE); /* allocate memory for scans */ total_size = pixels * channels * lines * (bpp/8); /* colors * bytes_per_color * scan lines */ @@ -3432,7 +3335,6 @@ float gain[3],coeff; int val, code, lines; int resolution; - Genesys_Register_Set *r; int bpp; DBG (DBG_proc, "gl124_coarse_gain_calibration: dpi = %d\n", dpi); @@ -3462,7 +3364,7 @@ } lines=10; bpp=8; - pixels = (dev->sensor.sensor_pixels * resolution) / dev->sensor.optical_res, + pixels = (dev->sensor.sensor_pixels * resolution) / dev->sensor.optical_res; status = gl124_init_scan_regs (dev, dev->calib_reg, @@ -3479,8 +3381,7 @@ SCAN_FLAG_DISABLE_GAMMA | SCAN_FLAG_SINGLE_LINE | SCAN_FLAG_IGNORE_LINE_DISTANCE); - r = sanei_genesys_get_address (dev->calib_reg, REG02); - r->value &= ~REG02_MTRPWR; + gl124_set_motor_power (dev->calib_reg, SANE_FALSE); if (status != SANE_STATUS_GOOD) { @@ -3586,7 +3487,6 @@ { int num_pixels; SANE_Status status = SANE_STATUS_GOOD; - Genesys_Register_Set *r; DBGSTART; if (dev == NULL || reg == NULL || channels == NULL || total_size == NULL) @@ -3623,77 +3523,13 @@ *total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */ - r = sanei_genesys_get_address (reg, REG02); - r->value &= ~REG02_MTRPWR; + gl124_set_motor_power (reg, SANE_FALSE); RIE (gl124_bulk_write_register (dev, reg, GENESYS_GL124_MAX_REGS)); DBGCOMPLETED; return SANE_STATUS_GOOD; } -static SANE_Status -gl124_is_compatible_calibration (Genesys_Device * dev, - Genesys_Calibration_Cache * cache, - int for_overwrite) -{ -#ifdef HAVE_SYS_TIME_H - struct timeval time; -#endif - int compatible = 1, resolution; - SANE_Status status; - - DBGSTART; - - if (cache == NULL || for_overwrite) - return SANE_STATUS_UNSUPPORTED; - - status = gl124_calculate_current_setup (dev); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl124_is_compatible_calibration: failed to calculate current setup: %s\n", - sane_strstatus (status)); - return status; - } - resolution=gl124_compute_dpihw(dev,dev->settings.xres); - dev->current_setup.scan_method = dev->settings.scan_method; - - DBG (DBG_proc, "gl124_is_compatible_calibration: checking\n"); - - /* a calibration cache is compatible if color mode and x dpi match the user - * requested scan. In the case of CIS scanners, dpi isn't a criteria */ - compatible = (resolution == ((int) gl124_compute_dpihw(dev,cache->used_setup.xres))); - if (dev->current_setup.scan_method != cache->used_setup.scan_method) - { - DBG (DBG_io, - "gl124_is_compatible_calibration: current method=%d, used=%d\n", - dev->current_setup.scan_method, cache->used_setup.scan_method); - compatible = 0; - } - if (!compatible) - { - DBG (DBG_proc, - "gl124_is_compatible_calibration: completed, non compatible cache\n"); - return SANE_STATUS_UNSUPPORTED; - } - - /* a cache entry expires after 60 minutes for non sheetfed scanners */ -#ifdef HAVE_SYS_TIME_H - gettimeofday (&time, NULL); - if ((time.tv_sec - cache->last_calibration > 60 * 60) - && (dev->model->is_sheetfed == SANE_FALSE) - && (dev->settings.scan_method == SCAN_METHOD_FLATBED)) - { - DBG (DBG_proc, - "gl124_is_compatible_calibration: expired entry, non compatible cache\n"); - return SANE_STATUS_UNSUPPORTED; - } -#endif - - DBGCOMPLETED; - return SANE_STATUS_GOOD; -} - /** * set up GPIO/GPOE for idle state WRITE GPIO[17-21]= GPIO19 @@ -4000,7 +3836,7 @@ static SANE_Status gl124_update_hardware_sensors (Genesys_Scanner * s) { - /* do what is needed to get a new set of events, but try to not lose + /* do what is needed to get a new set of events, but try to not loose any of them. */ SANE_Status status = SANE_STATUS_GOOD; @@ -4008,14 +3844,32 @@ RIE (sanei_genesys_read_register (s->dev, REG31, &val)); - if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b) - s->val[OPT_SCAN_SW].b = (val & 0x01) == 0; - if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b) - s->val[OPT_FILE_SW].b = (val & 0x08) == 0; - if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b) - s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0; - if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b) - s->val[OPT_COPY_SW].b = (val & 0x02) == 0; + /* TODO : for the next scanner special case, + * add another per scanner button profile struct to avoid growing + * hard-coded button mapping here. + */ + if(s->dev->model->gpo_type == GPO_CANONLIDE110) + { + if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b) + s->val[OPT_SCAN_SW].b = (val & 0x01) == 0; + if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b) + s->val[OPT_FILE_SW].b = (val & 0x08) == 0; + if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b) + s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0; + if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b) + s->val[OPT_COPY_SW].b = (val & 0x02) == 0; + } + else + { /* LiDE 210 case */ + if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b) + s->val[OPT_SCAN_SW].b = (val & 0x02) == 0; + if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b) + s->val[OPT_COPY_SW].b = (val & 0x04) == 0; + if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b) + s->val[OPT_EMAIL_SW].b = (val & 0x08) == 0; + if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b) + s->val[OPT_FILE_SW].b = (val & 0x10) == 0; + } return status; } @@ -4072,9 +3926,10 @@ NULL, NULL, - gl124_is_compatible_calibration, + sanei_genesys_is_compatible_calibration, NULL, - gl124_send_shading_data + gl124_send_shading_data, + gl124_calculate_current_setup }; SANE_Status diff -Nru sane-backends-1.0.22/backend/genesys_gl124.h sane-backends-1.0.23/backend/genesys_gl124.h --- sane-backends-1.0.22/backend/genesys_gl124.h 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl124.h 2012-07-01 02:00:44.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2010 Stphane Voltz + Copyright (C) 2010-2012 Stphane Voltz This file is part of the SANE package. @@ -40,28 +40,7 @@ whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice. */ -#include "../include/sane/config.h" -#include -#include -#include -#include -#include - -#include "../include/sane/sane.h" -#include "../include/sane/sanei.h" -#include "../include/sane/saneopts.h" - -#ifndef HACK -#undef BACKEND_NAME -#define BACKEND_NAME genesys_gl124 -#endif - -#include "../include/sane/sanei_backend.h" -#include "../include/sane/sanei_config.h" -#include "../include/sane/sanei_usb.h" - -#include "../include/_stdint.h" #include "genesys.h" #define REG01 0x01 @@ -210,6 +189,14 @@ #define REG30 0x30 #define REG31 0x31 #define REG32 0x32 +#define REG32_GPIO16 0x80 +#define REG32_GPIO15 0x40 +#define REG32_GPIO14 0x20 +#define REG32_GPIO13 0x10 +#define REG32_GPIO12 0x08 +#define REG32_GPIO11 0x04 +#define REG32_GPIO10 0x02 +#define REG32_GPIO9 0x01 #define REG33 0x33 #define REG34 0x34 #define REG35 0x35 @@ -272,12 +259,6 @@ #define REG114 0x14 #define REG115 0x15 -#define SCAN_TABLE 0 /* table 1 at 0x4000 */ -#define BACKTRACK_TABLE 1 /* table 2 at 0x4800 */ -#define STOP_TABLE 2 /* table 3 at 0x5000 */ -#define FAST_TABLE 3 /* table 4 at 0x5800 */ -#define HOME_TABLE 4 /* table 5 at 0x6000 */ - #define REG_LINCNT 0x25 #define REG_MAXWD 0x28 #define REG_DPISET 0x2c @@ -306,17 +287,6 @@ #define REG_Z1MOD 0xb2 #define REG_Z2MOD 0xb5 -#define SCAN_FLAG_SINGLE_LINE 0x001 -#define SCAN_FLAG_DISABLE_SHADING 0x002 -#define SCAN_FLAG_DISABLE_GAMMA 0x004 -#define SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE 0x008 -#define SCAN_FLAG_IGNORE_LINE_DISTANCE 0x010 -#define SCAN_FLAG_USE_OPTICAL_RES 0x020 -#define SCAN_FLAG_DISABLE_LAMP 0x040 -#define SCAN_FLAG_DYNAMIC_LINEART 0x080 -#define SCAN_FLAG_CALIBRATION 0x100 -#define SCAN_FLAG_FEEDING 0x200 - /** * writable scanner registers */ enum @@ -540,8 +510,6 @@ #define SETREG(adr,val) {dev->reg[reg_##adr].address=adr;dev->reg[reg_##adr].value=val;} -#define SLOPE_TABLE_SIZE 1024 - typedef struct { uint8_t r31; @@ -612,20 +580,24 @@ int expr; /**> initial red exposure */ int expg; /**> initial green exposure */ int expb; /**> initial blue exposure */ + size_t *order; /**> order of sub-segments */ uint8_t reg18; /**> register 0x18 value */ uint8_t reg20; /**> register 0x20 value */ uint8_t reg61; /**> register 0x61 value */ uint8_t reg98; /**> register 0x98 value */ } Sensor_Profile; +static size_t order_01[]={0,1}; +static size_t order_0213[]={0,2,1,3}; + /** * database of sensor profiles */ static Sensor_Profile sensors[]={ - {CIS_CANONLIDE110, 300, 5359, 0x1e, 0x9f, 0x55, 5168, 154, 101, 388, 574, 393, 0x00, 0x0a, 0x20, 0x21}, - {CIS_CANONLIDE110, 600, 5360, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, 0x00, 0x0a, 0x20, 0x21}, - {CIS_CANONLIDE110, 1200, 10528, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, 0x00, 0x08, 0x20, 0x22}, - {CIS_CANONLIDE110, 2400, 20864, 0x1e, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, 0x00, 0x06, 0x20, 0x24}, + {CIS_CANONLIDE110, 300, 5359, 0x1e, 0x9f, 0x55, 5168, 154, 101, 388, 574, 393, NULL , 0x00, 0x0a, 0x20, 0x21}, + {CIS_CANONLIDE110, 600, 5360, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, NULL , 0x00, 0x0a, 0x20, 0x21}, + {CIS_CANONLIDE110, 1200, 10528, 0x1e, 0x9f, 0x55, 5168, 163, 101, 388, 574, 393, order_01 , 0x00, 0x08, 0x20, 0x22}, + {CIS_CANONLIDE110, 2400, 20864, 0x1e, 0x9f, 0x55, 5168, 163, 4679, 6839, 8401, 6859, order_0213, 0x00, 0x06, 0x20, 0x24}, /* {CIS_CANONLIDE110, 200, 2304, 0x1e, 0x9f, 0x55, 5168, 154, 101, 388, 574, 393, 0x00, 0x0a, 0x20, 0x21}, */ }; @@ -633,25 +605,15 @@ #define MOVE_DPI 200 #define MOVE_EXPOSURE 2304 -/** - * structure for motor database - */ -typedef struct { - int motor_type; /**> motor id */ - int exposure; /**> exposure for the slope table */ - int step_type; /**> default step type for given exposure */ - uint16_t *table; /**> slope table at full step */ -} Motor_Profile; - /* static uint16_t lide110_ok[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343,2343,2343,2051,1961,1901,1852,1809,1775,1745,1717,1692,1671,1650,1630,1613,1597,1580,1565,1549,1536,1524,1512,1500,1488,1478,1467,1458,1446,1437,1429,1420,1411,1403,1395,1386,1378,1372,1364,1358,1350,1345,1337,1331,1324,1318,1313,1307,1302,1294,1289,1284,1278,1273,1268,1263,1260,1255,1250,1245,1240,1236,1231,1227,1222,1219,1214,1211,1206,1201,1198,1194,1191,1186,1183,1179,1176,1173,1168,1166,1161,1158,1155,1151,1148,1146,1143,1139,1136,1133,1130,1128,1124,1121,1118,1116,1113,1110,1108,1105,1101,1099,1096,1093,1091,1088,1086,1083,1081,1078,1076,1073,1071,1068,1067,1065,1062,1060,1058,1055,1053,1051,1048,1047,1045,1042,1040,1038,1035,1034,1032,1030,1027,1026,1024,1022,1020,1019,1016,1014,1012,1011,1009,1006,1005,1003,1001,999,998,996,994,993,991,989,987,985,984,982,980,979,977,976,974,973,971,969,968,966,965,963,962,960,959,957,956,954,952,951,949,948,946,946,944,943,942,940,939,937,936,934,933,931,930,929,928,927,925,924,922,921,920,919,918,916,915,914,912,911,910,909,908,906,905,904,903,902,900,899,898,897,896,895,893,892,892,890,889,888,887,886,885,884,882,881,881,879,878,877,876,875,874,873,872,871,870,869,868,867,864,864, 0}; static uint16_t lide110_max[] = { 62496, 31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,31296,0}; static uint16_t lide110_slow[] = { 62496, 7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,7896,0}; */ -static uint16_t lide110_max[] = { 62496, 31296,0}; -static uint16_t lide110_slow[] = { 62496, 7896,0}; -static uint16_t lide110_alt[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2051, 1432, 1372, 1323, 1280, 1246, 1216, 1188, 1163, 1142, 1121, 1101, 1084, 1068, 1051, 1036, 1020, 1007, 995, 983, 971, 959, 949, 938, 929, 917, 908, 900, 891, 882, 874, 866, 857, 849, 843, 835, 829, 821, 816, 808, 802, 795, 789, 784, 778, 773, 765, 760, 755, 749, 744, 739, 734, 731, 726, 721, 716, 711, 707, 702, 698, 693, 690, 685, 682, 677, 672, 669, 665, 662, 657, 654, 650, 647, 644, 639, 637, 632, 629, 626, 622, 619, 617, 614, 610, 607, 604, 601, 599, 595, 592, 589, 587, 584, 581, 579, 576, 572, 570, 567, 564, 562, 559, 557, 554, 552, 549, 547, 544, 542, 539, 538, 536, 533, 531, 529, 526, 524, 522, 519, 518, 516, 513, 511, 509, 506, 505, 503, 501, 498, 497, 495, 493, 491, 490, 487, 485, 483, 482, 480, 477, 476, 474, 472, 470, 469, 467, 465, 464, 462, 460, 458, 456, 455, 453, 451, 450, 448, 447, 445, 444, 442, 440, 439, 437, 436, 434, 433, 431, 430, 428, 427, 425, 423, 422, 420, 419, 417, 417, 415, 414, 413, 411, 410, 408, 407, 405, 404, 402, 401, 400, 399, 398, 396, 395, 393, 392, 391, 390, 389, 387, 386, 385, 383, 382, 381, 380, 379, 377, 376, 375, 374, 373, 371, 370, 369, 368, 367, 366, 364, 363, 363, 361, 360, 359, 358, 357, 356, 355, 353, 352, 352, 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, 338, 335, 335, 0}; -static uint16_t lide110_ok[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343,2343,2343,2051,1961,1901,1852,1809,1775,1745,1717,1692,1671,1650,1630,1613,1597,1580,1565,1549,1536,1524,1512,1500,1488,1478,1467,1458,1446,1437,1429,1420,1411,1403,1395,1386,1378,1372,1364,1358,1350,1345,1337,1331,1324,1318,1313,1307,1302,1294,1289,1284,1278,1273,1268,1263,1260,1255,1250,1245,1240,1236,1231,1227,1222,1219,1214,1211,1206,1201,1198,1194,1191,1186,1183,1179,1176,1173,1168,1166,1161,1158,1155,1151,1148,1146,1143,1139,1136,1133,1130,1128,1124,1121,1118,1116,1113,1110,1108,1105,1101,1099,1096,1093,1091,1088,1086,1083,1081,1078,1076,1073,1071,1068,1067,1065,1062,1060,1058,1055,1053,1051,1048,1047,1045,1042,1040,1038,1035,1034,1032,1030,1027,1026,1024,1022,1020,1019,1016,1014,1012,1011,1009,1006,1005,1003,1001,999,998,996,994,993,991,989,987,985,984,982,980,979,977,976,974,973,971,969,968,966,965,963,962,960,959,957,956,954,952,951,949,948,946,946,944,943,942,940,939,937,936,934,933,931,930,929,928,927,925,924,922,921,920,919,918,916,915,914,912,911,910,909,908,906,905,904,903,902,900,899,898,897,896,895,893,892,892,890,889,888,887,886,885,884,882,881,881,879,878,877,876,875,874,873,872,871,870,869,868,867,864,864, 0}; +static uint32_t lide110_max[] = { 62496, 31296,0}; +static uint32_t lide110_slow[] = { 62496, 7896,0}; +static uint32_t lide110_alt[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2051, 1432, 1372, 1323, 1280, 1246, 1216, 1188, 1163, 1142, 1121, 1101, 1084, 1068, 1051, 1036, 1020, 1007, 995, 983, 971, 959, 949, 938, 929, 917, 908, 900, 891, 882, 874, 866, 857, 849, 843, 835, 829, 821, 816, 808, 802, 795, 789, 784, 778, 773, 765, 760, 755, 749, 744, 739, 734, 731, 726, 721, 716, 711, 707, 702, 698, 693, 690, 685, 682, 677, 672, 669, 665, 662, 657, 654, 650, 647, 644, 639, 637, 632, 629, 626, 622, 619, 617, 614, 610, 607, 604, 601, 599, 595, 592, 589, 587, 584, 581, 579, 576, 572, 570, 567, 564, 562, 559, 557, 554, 552, 549, 547, 544, 542, 539, 538, 536, 533, 531, 529, 526, 524, 522, 519, 518, 516, 513, 511, 509, 506, 505, 503, 501, 498, 497, 495, 493, 491, 490, 487, 485, 483, 482, 480, 477, 476, 474, 472, 470, 469, 467, 465, 464, 462, 460, 458, 456, 455, 453, 451, 450, 448, 447, 445, 444, 442, 440, 439, 437, 436, 434, 433, 431, 430, 428, 427, 425, 423, 422, 420, 419, 417, 417, 415, 414, 413, 411, 410, 408, 407, 405, 404, 402, 401, 400, 399, 398, 396, 395, 393, 392, 391, 390, 389, 387, 386, 385, 383, 382, 381, 380, 379, 377, 376, 375, 374, 373, 371, 370, 369, 368, 367, 366, 364, 363, 363, 361, 360, 359, 358, 357, 356, 355, 353, 352, 352, 350, 349, 348, 347, 346, 345, 344, 343, 342, 341, 340, 339, 338, 335, 335, 0}; +static uint32_t lide110_ok[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343,2343,2343,2051,1961,1901,1852,1809,1775,1745,1717,1692,1671,1650,1630,1613,1597,1580,1565,1549,1536,1524,1512,1500,1488,1478,1467,1458,1446,1437,1429,1420,1411,1403,1395,1386,1378,1372,1364,1358,1350,1345,1337,1331,1324,1318,1313,1307,1302,1294,1289,1284,1278,1273,1268,1263,1260,1255,1250,1245,1240,1236,1231,1227,1222,1219,1214,1211,1206,1201,1198,1194,1191,1186,1183,1179,1176,1173,1168,1166,1161,1158,1155,1151,1148,1146,1143,1139,1136,1133,1130,1128,1124,1121,1118,1116,1113,1110,1108,1105,1101,1099,1096,1093,1091,1088,1086,1083,1081,1078,1076,1073,1071,1068,1067,1065,1062,1060,1058,1055,1053,1051,1048,1047,1045,1042,1040,1038,1035,1034,1032,1030,1027,1026,1024,1022,1020,1019,1016,1014,1012,1011,1009,1006,1005,1003,1001,999,998,996,994,993,991,989,987,985,984,982,980,979,977,976,974,973,971,969,968,966,965,963,962,960,959,957,956,954,952,951,949,948,946,946,944,943,942,940,939,937,936,934,933,931,930,929,928,927,925,924,922,921,920,919,918,916,915,914,912,911,910,909,908,906,905,904,903,902,900,899,898,897,896,895,893,892,892,890,889,888,887,886,885,884,882,881,881,879,878,877,876,875,874,873,872,871,870,869,868,867,864,864, 0}; /* static uint16_t lide110_x2[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2051, 1948, 1877, 1817, 1764, 1720, 1680, 1643, 1609, 1580, 1550, 1522, 1498, 1474, 1450, 1427, 1405, 1385, 1366, 1348, 1329, 1311, 1295, 1278, 1263, 1246, 1231, 1218, 1204, 1189, 1176, 1163, 1150, 1137, 1126, 1114, 1103, 1091, 1081, 1069, 1059, 1048, 1038, 1029, 1019, 1010, 999, 990, 981, 972, 964, 955, 947, 940, 932, 924, 916, 908, 901, 893, 886, 878, 872, 864, 858, 851, 843, 838, 831, 825, 818, 812, 806, 801, 795, 788, 784, 777, 771, 766, 760, 755, 751, 746, 740, 735, 730, 725, 721, 715, 710, 706, 701, 697, 692, 688, 684, 678, 674, 670, 666, 662, 657, 654, 649, 646, 641, 638, 634, 630, 626, 623, 619, 615, 612, 609, 605, 601, 598, 594, 591, 588, 584, 581, 578, 574, 572, 568, 565, 562, 559, 556, 553, 550, 548, 544, 541, 538, 536, 533, 530, 527, 525, 522, 519, 517, 514, 511, 509, 506, 504, 501, 498, 496, 494, 491, 489, 486, 484, 482, 480, 477, 475, 473, 470, 469, 466, 464, 462, 460, 457, 456, 453, 451, 449, 447, 445, 443, 441, 439, 437, 436, 433, 432, 429, 428, 426, 424, 422, 420, 418, 417, 415, 413, 411, 409, 408, 406, 405, 403, 401, 399, 398, 396, 394, 393, 391, 390, 388, 386, 385, 383, 382, 380, 379, 377, 376, 374, 373, 371, 370, 369, 367, 366, 364, 363, 361, 360, 359, 357, 356, 355, 353, 352, 350, 349, 348, 347, 345, 344, 343, 341, 340, 339, 338, 336, 335, 0}; static uint16_t lide110_new[] = { 62496, 2343, 2343, 2343, 2343, 2343, 2343, 2343,2343, 2051, 1961, 1901, 1852, 1809, 1775, 1745, 1717, 1692, 1671, 1650, 1634, 1544, 1484, 1435, 1392, 1358, 1328, 1300, 1275, 1254, 1233, 1213, 1196, 1180, 1163, 1148, 1132, 1119, 1107, 1095, 1083, 1071, 1061, 1050, 1041, 1029, 1020, 1012, 1003, 994, 986, 978, 969, 961, 955, 947, 941, 933, 928, 920, 914, 907, 901, 896, 890, 885, 877, 872, 867, 861, 856, 851, 846, 843, 838, 833, 828, 823, 819, 814, 810, 805, 802, 797, 794, 789, 784, 781, 777, 774, 769, 766, 762, 759, 756, 751, 749, 744, 741, 738, 734, 731, 729, 726, 722, 719, 716, 713, 711, 707, 704, 701, 699, 696, 693, 691, 688, 684, 682, 679, 676, 674, 671, 669, 666, 664, 661, 659, 656, 654, 651, 650, 648, 645, 643, 641, 638, 636, 634, 631, 630, 628, 625, 623, 621, 618, 617, 615, 613, 610, 609, 607, 605, 603, 602, 599, 597, 595, 594, 592, 589, 588, 586, 584, 582, 581, 579, 577, 576, 574, 572, 570, 568, 567, 565, 563, 562, 560, 559, 557, 556, 554, 552, 551, 549, 548, 546, 545, 543, 542, 540, 539, 537, 535, 534, 532, 531, 529, 529, 527, 526, 525, 523, 522, 520, 519, 517, 516, 514, 513, 512, 511, 510, 508, 507, 505, 504, 503, 502, 501, 499, 498, 497, 495, 494, 493, 492, 491, 489, 488, 487, 486, 485, 483, 482, 481, 480, 479, 478, 476, 475, 475, 473, 472, 471, 470, 469, 468, 467, 465, 464, 464, 462, 461, 460, 459, 458, 457, 456, 455, 454, 453, 452, 451, 450, 447, 447, 0 }; @@ -670,6 +632,7 @@ {MOTOR_CANONLIDE110, 5360, 1, lide110_alt}, {MOTOR_CANONLIDE110, 10528, 1, lide110_slow}, {MOTOR_CANONLIDE110, 20864, 2, lide110_max}, + {0, 0, 0, NULL}, }; /* *INDENT-ON* */ diff -Nru sane-backends-1.0.22/backend/genesys_gl646.c sane-backends-1.0.23/backend/genesys_gl646.c --- sane-backends-1.0.22/backend/genesys_gl646.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl646.c 2012-08-10 00:33:29.000000000 +0000 @@ -3,9 +3,11 @@ Copyright (C) 2003 Oliver Rauch Copyright (C) 2003, 2004 Henning Meier-Geinitz Copyright (C) 2004 Gerhard Jaeger - Copyright (C) 2004-2009 Stphane Voltz + Copyright (C) 2004-2012 Stphane Voltz Copyright (C) 2005-2009 Pierre Willenbrock Copyright (C) 2007 Luke + Copyright (C) 2011 Alexey Osipov for HP2400 description + and tuning This file is part of the SANE package. @@ -46,6 +48,9 @@ If you do not wish that, delete this exception notice. */ +#undef BACKEND_NAME +#define BACKEND_NAME genesys_gl646 + #include "genesys_gl646.h" /** @@ -994,32 +999,38 @@ /* manual CCD/2 clock programming => half_ccd for hp2300 */ regs[reg_0x1d].value = sensor->reg_0x1d; + /* HP2400 1200dpi mode tuning */ + + if (dev->model->ccd_type == CCD_HP2400) + { + /* reset count of dummy lines to zero */ + regs[reg_0x1e].value &= ~REG1E_LINESEL; + if (scan_settings.xres >= 1200) + { + /* there must be one dummy line */ + regs[reg_0x1e].value |= 1 & REG1E_LINESEL; + + /* GPO12 need to be set to zero */ + regs[reg_0x66].value &= ~0x20; + } + else + { + /* set GPO12 back to one */ + regs[reg_0x66].value |= 0x20; + } + } + /* motor steps used */ regs[reg_0x21].value = motor->steps1; regs[reg_0x22].value = motor->fwdbwd; regs[reg_0x23].value = motor->fwdbwd; regs[reg_0x24].value = motor->steps1; - /* we adjust linecnt according to real motor dpi */ - linecnt = (linecnt * motor->ydpi) / scan_settings.yres; - /* scanned area height must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1) - { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = (max_shift * scan_settings.yres) / dev->motor.base_ydpi; + max_shift=sanei_genesys_compute_max_shift(dev,channels,scan_settings.yres,0); - linecnt += max_shift; - } - else - { - max_shift = 0; - } + /* we adjust linecnt according to real motor dpi */ + linecnt = (linecnt * motor->ydpi) / scan_settings.yres + max_shift; /* at QUATER_STEP lines are 'staggered' and need correction */ stagger = 0; @@ -1072,6 +1083,7 @@ if (dev->model->is_cis == SANE_FALSE) wpl *= channels; dev->wpl = wpl; + dev->bpl = wpl; DBG (DBG_info, "gl646_setup_registers: wpl=%d\n", wpl); gl646_set_triple_reg (regs, REG_MAXWD, wpl); @@ -1155,6 +1167,31 @@ break; } break; + case MOTOR_HP2400: + switch (motor->ydpi) + { + case 150: + feedl += 150; + break; + case 300: + feedl += 220; + break; + case 600: + feedl += 260; + break; + case 1200: + feedl += 280; /* 300 */ + break; + case 50: + feedl += 0; + break; + case 100: + feedl += 100; + break; + default: + break; + } + break; /* theorical value */ default: @@ -1264,7 +1301,7 @@ * read_bytes_left is the number of bytes to read from the scanner */ dev->total_bytes_read = 0; - if (depth == 1 || scan_settings.scan_mode == SCAN_MODE_LINEART) + if (depth == 1) dev->total_bytes_to_read = ((scan_settings.pixels * scan_settings.lines) / 8 + (((scan_settings.pixels * scan_settings.lines) % 8) ? 1 : 0)) * @@ -1882,7 +1919,10 @@ i = dev->frontend.reg[3]; if (dpi > dev->sensor.optical_res / 2) { - i = i & 0x1f; + /* fe_reg_0x03 must be 0x12 for 1200 dpi in DAC_WOLFSON_HP3670. + * DAC_WOLFSON_HP2400 in 1200 dpi mode works well with + * fe_reg_0x03 set to 0x32 or 0x12 but not to 0x02 */ + i = 0x12; } status = sanei_genesys_fe_write_data (dev, 0x03, i); if (status != SANE_STATUS_GOOD) @@ -2939,6 +2979,7 @@ Genesys_Settings settings; uint8_t val; int i; + int loop = 0; DBG (DBG_proc, "gl646_slow_back_home: start , wait_until_home = %d\n", wait_until_home); @@ -3010,8 +3051,7 @@ /* setup for a backward scan of 65535 steps, with no actual data reading */ settings.scan_method = SCAN_METHOD_FLATBED; settings.scan_mode = SCAN_MODE_COLOR; - settings.xres = - get_closest_resolution (dev->model->ccd_type, 75, SANE_FALSE); + settings.xres = get_lowest_resolution (dev->model->ccd_type, SANE_FALSE); settings.yres = settings.xres; settings.tl_x = 0; settings.tl_y = 0; @@ -3068,9 +3108,7 @@ /* loop until head parked */ if (wait_until_home) { - int loop = 0; - - while (loop < 3) /* do not wait longer then 30 seconds */ + while (loop < 300) /* do not wait longer then 30 seconds */ { status = sanei_genesys_get_status (dev, &val); if (status != SANE_STATUS_GOOD) @@ -3089,6 +3127,7 @@ return SANE_STATUS_GOOD; } usleep (100000); /* sleep 100 ms */ + ++loop; } /* when we come here then the scanner needed too much time for this, so we better stop the motor */ @@ -3263,7 +3302,8 @@ settings.tl_y = 0; settings.pixels = (dev->sensor.sensor_pixels * settings.xres) / dev->sensor.optical_res; - settings.lines = dev->model->shading_lines * (3 - half_ccd); + dev->calib_lines = dev->model->shading_lines; + settings.lines = dev->calib_lines * (3 - half_ccd); settings.depth = 16; settings.color_filter = dev->settings.color_filter; @@ -3297,12 +3337,11 @@ /* enforce needed LINCNT, getting rid of extra lines for color reordering */ if (dev->model->is_cis == SANE_FALSE) { - gl646_set_triple_reg (dev->reg, REG_LINCNT, dev->model->shading_lines); + gl646_set_triple_reg (dev->reg, REG_LINCNT, dev->calib_lines); } else { - gl646_set_triple_reg (dev->reg, REG_LINCNT, - dev->model->shading_lines * 3); + gl646_set_triple_reg (dev->reg, REG_LINCNT, dev->calib_lines * 3); } /* copy reg to calib_reg */ @@ -3311,7 +3350,7 @@ /* this is an hack to make calibration cache working .... */ /* if we don't do this, cache will be identified at the shading calibration - * dpi which is diferent from calibration one */ + * dpi which is different from calibration one */ dev->current_setup.xres = dev->settings.xres; DBG (DBG_info, "gl646_init_register_for_shading:\n\tdev->settings.xres=%d\n\tdev->settings.yres=%d\n", @@ -4278,7 +4317,7 @@ { uint8_t *line; unsigned int i, j, k, channels, val, maximum, idx; - unsigned int size, count, resolution, pass; + unsigned int count, resolution, pass; SANE_Status status = SANE_STATUS_GOOD; float average[3]; Genesys_Settings settings; @@ -4333,8 +4372,6 @@ settings.threshold = 0; settings.exposure_time = 0; - size = channels * settings.pixels * settings.lines; - /* start gain value */ dev->frontend.gain[0] = 1; dev->frontend.gain[1] = 1; @@ -4463,7 +4500,7 @@ resolution = get_closest_resolution (dev->model->ccd_type, 300, SANE_FALSE); - /* set up for a half width 2 lines color scan without moving */ + /* set up for a half width 2 lines gray scan without moving */ settings.scan_method = SCAN_METHOD_FLATBED; settings.scan_mode = SCAN_MODE_GRAY; settings.xres = resolution; @@ -5516,14 +5553,18 @@ } /* a cache entry expires after 30 minutes for non sheetfed scanners */ + /* this is not taken into account when overwriting cache entries */ #ifdef HAVE_SYS_TIME_H - gettimeofday (&time, NULL); - if ((time.tv_sec - cache->last_calibration > 30 * 60) - && (dev->model->is_sheetfed == SANE_FALSE)) + if(for_overwrite == SANE_FALSE) { - DBG (DBG_proc, - "gl646_is_compatible_calibration: expired entry, non compatible cache\n"); - return SANE_STATUS_UNSUPPORTED; + gettimeofday (&time, NULL); + if ((time.tv_sec - cache->last_calibration > 30 * 60) + && (dev->model->is_sheetfed == SANE_FALSE)) + { + DBG (DBG_proc, + "gl646_is_compatible_calibration: expired entry, non compatible cache\n"); + return SANE_STATUS_UNSUPPORTED; + } } #endif @@ -5756,6 +5797,7 @@ gl646_is_compatible_calibration, gl646_move_to_ta, + NULL, NULL }; diff -Nru sane-backends-1.0.22/backend/genesys_gl646.h sane-backends-1.0.23/backend/genesys_gl646.h --- sane-backends-1.0.22/backend/genesys_gl646.h 2011-01-21 00:26:47.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl646.h 2012-07-01 02:00:44.000000000 +0000 @@ -2,7 +2,7 @@ Copyright (C) 2003-2004 Henning Meier-Geinitz Copyright (C) 2004-2005 Gerhard Jaeger - Copyright (C) 2004-2010 Stphane Voltz + Copyright (C) 2004-2012 Stphane Voltz Copyright (C) 2005-2009 Pierre Willenbrock This file is part of the SANE package. @@ -43,26 +43,7 @@ whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice. */ -#include "../include/sane/config.h" -#include -#include -#include -#include -#include - -#include "../include/sane/sane.h" -#include "../include/sane/sanei.h" -#include "../include/sane/saneopts.h" - -#undef BACKEND_NAME -#define BACKEND_NAME genesys_gl646 - -#include "../include/sane/sanei_backend.h" -#include "../include/sane/sanei_config.h" -#include "../include/sane/sanei_usb.h" - -#include "../include/_stdint.h" #include "genesys.h" /* @@ -470,18 +451,18 @@ {CCD_HP3670,2400, SANE_FALSE, 1200, 12750, 1200, 1, 42, NULL, SANE_FALSE, 0x30, 0x43}, /* HP 2400 master settings */ - {CCD_HP2400, 50, SANE_TRUE , 50, 675, 200, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, + {CCD_HP2400, 50, SANE_TRUE , 50, 7211, 200, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, {CCD_HP2400, 100, SANE_TRUE , 100, 7211, 400, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, {CCD_HP2400, 150, SANE_TRUE , 150, 7211, 600, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, {CCD_HP2400, 300, SANE_TRUE , 300, 8751, 1200, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, - {CCD_HP2400, 600, SANE_TRUE , 1200, 18760, 1200, 2, 42, NULL, SANE_FALSE, 0x3f, 0x02}, - {CCD_HP2400,1200, SANE_TRUE , 1200, 18760, 1200, 1, 42, NULL, SANE_FALSE, 0x3f, 0x02}, - {CCD_HP2400, 50, SANE_FALSE, 50, 675, 200, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, + {CCD_HP2400, 600, SANE_TRUE , 600, 18760, 1200, 2, 42, NULL, SANE_FALSE, 0x31, 0x02}, + {CCD_HP2400,1200, SANE_TRUE , 1200, 21749, 1200, 1, 42, NULL, SANE_FALSE, 0x30, 0x42}, + {CCD_HP2400, 50, SANE_FALSE, 50, 7211, 200, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, {CCD_HP2400, 100, SANE_FALSE, 100, 7211, 400, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, {CCD_HP2400, 150, SANE_FALSE, 150, 7211, 600, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, {CCD_HP2400, 300, SANE_FALSE, 300, 8751, 1200, 4, 42, NULL, SANE_FALSE, 0x3f, 0x02}, - {CCD_HP2400, 600, SANE_FALSE, 1200, 18760, 1200, 2, 42, NULL, SANE_FALSE, 0x3f, 0x02}, - {CCD_HP2400,1200, SANE_FALSE, 1200, 18760, 1200, 1, 42, NULL, SANE_FALSE, 0x3f, 0x02}, + {CCD_HP2400, 600, SANE_FALSE, 600, 18760, 1200, 2, 42, NULL, SANE_FALSE, 0x31, 0x02}, + {CCD_HP2400,1200, SANE_FALSE, 1200, 21749, 1200, 1, 42, NULL, SANE_FALSE, 0x30, 0x42}, /* XP 200 master settings */ {CIS_XP200 , 75, SANE_TRUE , 75, 5700, 75, 1, 42, xp200_color, SANE_FALSE, 0x00, 0x11}, @@ -558,18 +539,18 @@ {MOTOR_HP3670,2400, SANE_TRUE ,2400, HALF_STEP, SANE_FALSE, SANE_TRUE , 0, 3, 15937, 12750, 192, 3399, 337, 0.3, 0.4, 192}, /* HP2400/G2410 motor settings base motor dpi = 600 */ - {MOTOR_HP2400, 50, SANE_TRUE , 50, HALF_STEP, SANE_FALSE, SANE_FALSE, 63, 4, 1382, 800, 192, 4905, 337, 0.30, 0.4, 192}, + {MOTOR_HP2400, 50, SANE_TRUE , 50, FULL_STEP, SANE_FALSE, SANE_TRUE , 63, 120, 8736, 601, 192, 4905, 337, 0.30, 0.4, 192}, {MOTOR_HP2400, 100, SANE_TRUE , 100, HALF_STEP, SANE_FALSE, SANE_TRUE, 63, 120, 8736, 601, 192, 4905, 337, 0.30, 0.4, 192}, - {MOTOR_HP2400, 150, SANE_TRUE , 150, HALF_STEP, SANE_FALSE, SANE_TRUE, 63, 120, 8736, 601, 192, 4905, 337, 0.30, 0.4, 192}, + {MOTOR_HP2400, 150, SANE_TRUE , 150, HALF_STEP, SANE_FALSE, SANE_TRUE , 63, 67, 15902, 902, 192, 4905, 337, 0.30, 0.4, 192}, {MOTOR_HP2400, 300, SANE_TRUE , 300, HALF_STEP, SANE_FALSE, SANE_TRUE , 63, 32, 16703, 2188, 192, 4905, 337, 0.30, 0.4, 192}, {MOTOR_HP2400, 600, SANE_TRUE , 600, FULL_STEP, SANE_FALSE, SANE_TRUE , 63, 3, 18761, 18761, 192, 4905, 627, 0.30, 0.4, 192}, - {MOTOR_HP2400,1200, SANE_TRUE ,1200, HALF_STEP, SANE_FALSE, SANE_TRUE , 63, 3, 18761, 18761, 192, 4905, 627, 0.30, 0.4, 192}, - {MOTOR_HP2400, 50, SANE_FALSE, 50, HALF_STEP, SANE_FALSE, SANE_FALSE, 63, 4, 1382, 800, 192, 4905, 337, 0.30, 0.4, 192}, + {MOTOR_HP2400,1200, SANE_TRUE ,1200, HALF_STEP, SANE_FALSE, SANE_TRUE , 63, 3, 43501, 43501, 192, 4905, 627, 0.30, 0.4, 192}, + {MOTOR_HP2400, 50, SANE_FALSE, 50, FULL_STEP, SANE_FALSE, SANE_TRUE , 63, 120, 8736, 601, 192, 4905, 337, 0.30, 0.4, 192}, {MOTOR_HP2400, 100, SANE_FALSE, 100, HALF_STEP, SANE_FALSE, SANE_TRUE, 63, 120, 8736, 601, 192, 4905, 337, 0.30, 0.4, 192}, - {MOTOR_HP2400, 150, SANE_FALSE, 150, HALF_STEP, SANE_FALSE, SANE_TRUE, 63, 120, 8736, 601, 192, 4905, 337, 0.30, 0.4, 192}, + {MOTOR_HP2400, 150, SANE_FALSE, 150, HALF_STEP, SANE_FALSE, SANE_TRUE , 63, 67, 15902, 902, 192, 4905, 337, 0.30, 0.4, 192}, {MOTOR_HP2400, 300, SANE_FALSE, 300, HALF_STEP, SANE_FALSE, SANE_TRUE , 63, 32, 16703, 2188, 192, 4905, 337, 0.30, 0.4, 192}, {MOTOR_HP2400, 600, SANE_FALSE, 600, FULL_STEP, SANE_FALSE, SANE_TRUE , 63, 3, 18761, 18761, 192, 4905, 337, 0.30, 0.4, 192}, - {MOTOR_HP2400,1200, SANE_FALSE,1200, HALF_STEP, SANE_FALSE, SANE_TRUE , 63, 3, 18761, 18761, 192, 4905, 337, 0.30, 0.4, 192}, + {MOTOR_HP2400,1200, SANE_FALSE,1200, HALF_STEP, SANE_FALSE, SANE_TRUE , 63, 3, 43501, 43501, 192, 4905, 337, 0.30, 0.4, 192}, /* XP 200 motor settings */ {MOTOR_XP200, 75, SANE_TRUE, 75, HALF_STEP, SANE_TRUE , SANE_FALSE, 0, 4, 6000, 2136, 8, 12000, 1200, 0.3, 0.5, 1}, @@ -663,7 +644,7 @@ {CCD_HP2400, 2, {14, 15, 0, 0}, {14, 15, 0, 0}, - {0xbf, 0x08, 0x3f, 0x2a, 0, 0, 0, 0x02}, + {0xbf, 0x08, 0x31, 0x2a, 0, 0, 0, 0x02}, {3, 7, 11, 15, 19, 23, 0x23, 0, 0xc1, 0, 0, 0, 0}, {3, 7, 11, 15, 19, 23, 0x23} }, diff -Nru sane-backends-1.0.22/backend/genesys_gl841.c sane-backends-1.0.23/backend/genesys_gl841.c --- sane-backends-1.0.22/backend/genesys_gl841.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl841.c 2012-08-10 00:33:29.000000000 +0000 @@ -3,7 +3,7 @@ Copyright (C) 2003 Oliver Rauch Copyright (C) 2003, 2004 Henning Meier-Geinitz Copyright (C) 2004 Gerhard Jaeger - Copyright (C) 2004-2010 Stephane Voltz + Copyright (C) 2004-2012 Stphane Voltz Copyright (C) 2005 Philipp Schmid Copyright (C) 2005-2009 Pierre Willenbrock Copyright (C) 2006 Laurent Charpentier @@ -53,329 +53,7 @@ #undef BACKEND_NAME #define BACKEND_NAME genesys_gl841 -#include "../include/sane/config.h" - -#include -#include -#include -#include -#include -#include "../include/_stdint.h" - -#include "../include/sane/sane.h" -#include "../include/sane/sanei.h" -#include "../include/sane/saneopts.h" - -#include "../include/sane/sanei_backend.h" -#include "../include/sane/sanei_config.h" -#include "../include/sane/sanei_usb.h" - -#include "genesys.h" - -/* Individual bits */ -/*adapted to sanei_gl841 - * - *todo: add macros - * - */ -#define REG01_CISSET 0x80 -#define REG01_DOGENB 0x40 -#define REG01_DVDSET 0x20 -#define REG01_M16DRAM 0x08 -#define REG01_DRAMSEL 0x04 -#define REG01_SHDAREA 0x02 -#define REG01_SCAN 0x01 - -#define REG02_NOTHOME 0x80 -#define REG02_ACDCDIS 0x40 -#define REG02_AGOHOME 0x20 -#define REG02_MTRPWR 0x10 -#define REG02_FASTFED 0x08 -#define REG02_MTRREV 0x04 -#define REG02_HOMENEG 0x02 -#define REG02_LONGCURV 0x01 - -#define REG03_LAMPDOG 0x80 -#define REG03_AVEENB 0x40 -#define REG03_XPASEL 0x20 -#define REG03_LAMPPWR 0x10 -#define REG03_LAMPTIM 0x0f - -#define REG04_LINEART 0x80 -#define REG04_BITSET 0x40 -#define REG04_AFEMOD 0x30 -#define REG04_FILTER 0x0c -#define REG04_FESET 0x03 - -#define REG04S_AFEMOD 4 - -#define REG05_DPIHW 0xc0 -#define REG05_DPIHW_600 0x00 -#define REG05_DPIHW_1200 0x40 -#define REG05_DPIHW_2400 0x80 -#define REG05_MTLLAMP 0x30 -#define REG05_GMMENB 0x08 -#define REG05_MTLBASE 0x03 - -#define REG06_SCANMOD 0xe0 -#define REG06S_SCANMOD 5 -#define REG06_PWRBIT 0x10 -#define REG06_GAIN4 0x08 -#define REG06_OPTEST 0x07 - -#define REG07_SRAMSEL 0x08 -#define REG07_FASTDMA 0x04 -#define REG07_DMASEL 0x02 -#define REG07_DMARDWR 0x01 - -#define REG08_DECFLAG 0x40 -#define REG08_GMMFFR 0x20 -#define REG08_GMMFFG 0x10 -#define REG08_GMMFFB 0x08 -#define REG08_GMMZR 0x04 -#define REG08_GMMZG 0x02 -#define REG08_GMMZB 0x01 - -#define REG09_MCNTSET 0xc0 -#define REG09_CLKSET 0x30 -#define REG09_BACKSCAN 0x08 -#define REG09_ENHANCE 0x04 -#define REG09_SHORTTG 0x02 -#define REG09_NWAIT 0x01 - -#define REG09S_MCNTSET 6 -#define REG09S_CLKSET 4 - - -#define REG0A_SRAMBUF 0x01 - -#define REG0D_CLRLNCNT 0x01 - -#define REG16_CTRLHI 0x80 -#define REG16_TOSHIBA 0x40 -#define REG16_TGINV 0x20 -#define REG16_CK1INV 0x10 -#define REG16_CK2INV 0x08 -#define REG16_CTRLINV 0x04 -#define REG16_CKDIS 0x02 -#define REG16_CTRLDIS 0x01 - -#define REG17_TGMODE 0xc0 -#define REG17_TGMODE_NO_DUMMY 0x00 -#define REG17_TGMODE_REF 0x40 -#define REG17_TGMODE_XPA 0x80 -#define REG17_TGW 0x3f -#define REG17S_TGW 0 - -#define REG18_CNSET 0x80 -#define REG18_DCKSEL 0x60 -#define REG18_CKTOGGLE 0x10 -#define REG18_CKDELAY 0x0c -#define REG18_CKSEL 0x03 - -#define REG1A_MANUAL3 0x02 -#define REG1A_MANUAL1 0x01 -#define REG1A_CK4INV 0x08 -#define REG1A_CK3INV 0x04 -#define REG1A_LINECLP 0x02 - -#define REG1C_TGTIME 0x07 - -#define REG1D_CK4LOW 0x80 -#define REG1D_CK3LOW 0x40 -#define REG1D_CK1LOW 0x20 -#define REG1D_TGSHLD 0x1f -#define REG1DS_TGSHLD 0 - - -#define REG1E_WDTIME 0xf0 -#define REG1ES_WDTIME 4 -#define REG1E_LINESEL 0x0f -#define REG1ES_LINESEL 0 - -#define REG40_HISPDFLG 0x04 -#define REG40_MOTMFLG 0x02 -#define REG40_DATAENB 0x01 - -#define REG41_PWRBIT 0x80 -#define REG41_BUFEMPTY 0x40 -#define REG41_FEEDFSH 0x20 -#define REG41_SCANFSH 0x10 -#define REG41_HOMESNR 0x08 -#define REG41_LAMPSTS 0x04 -#define REG41_FEBUSY 0x02 -#define REG41_MOTORENB 0x01 - -#define REG58_VSMP 0xf8 -#define REG58S_VSMP 3 -#define REG58_VSMPW 0x07 -#define REG58S_VSMPW 0 - -#define REG59_BSMP 0xf8 -#define REG59S_BSMP 3 -#define REG59_BSMPW 0x07 -#define REG59S_BSMPW 0 - -#define REG5A_ADCLKINV 0x80 -#define REG5A_RLCSEL 0x40 -#define REG5A_CDSREF 0x30 -#define REG5AS_CDSREF 4 -#define REG5A_RLC 0x0f -#define REG5AS_RLC 0 - -#define REG5E_DECSEL 0xe0 -#define REG5ES_DECSEL 5 -#define REG5E_STOPTIM 0x1f -#define REG5ES_STOPTIM 0 - -#define REG60_ZIMOD 0x1f -#define REG61_Z1MOD 0xff -#define REG62_Z1MOD 0xff - -#define REG63_Z2MOD 0x1f -#define REG64_Z2MOD 0xff -#define REG65_Z2MOD 0xff - -#define REG67_STEPSEL 0xc0 -#define REG67_FULLSTEP 0x00 -#define REG67_HALFSTEP 0x40 -#define REG67_QUATERSTEP 0x80 -#define REG67_MTRPWM 0x3f - -#define REG68_FSTPSEL 0xc0 -#define REG68_FULLSTEP 0x00 -#define REG68_HALFSTEP 0x40 -#define REG68_QUATERSTEP 0x80 -#define REG68_FASTPWM 0x3f - -#define REG6B_MULTFILM 0x80 -#define REG6B_GPOM13 0x40 -#define REG6B_GPOM12 0x20 -#define REG6B_GPOM11 0x10 -#define REG6B_GPO18 0x02 -#define REG6B_GPO17 0x01 - -#define REG6C_GPIOH 0xff -#define REG6C_GPIOL 0xff - -#define REG87_LEDADD 0x04 - -/* we don't need a genesys_sanei_gl841.h yet, declarations aren't numerous enough */ - /* writable registers *//*adapted to sanei_gl841 */ -enum -{ - reg_0x01 = 0, - reg_0x02, - reg_0x03, - reg_0x04, - reg_0x05, - reg_0x06, - reg_0x07, - reg_0x08, - reg_0x09, - reg_0x0a, - - reg_0x10, - reg_0x11, - reg_0x12, - reg_0x13, - reg_0x14, - reg_0x15, - reg_0x16, - reg_0x17, - reg_0x18, - reg_0x19, - reg_0x1a, - reg_0x1b, - reg_0x1c, - reg_0x1d, - reg_0x1e, - reg_0x1f, - reg_0x20, - reg_0x21, - reg_0x22, - reg_0x23, - reg_0x24, - reg_0x25, - reg_0x26, - reg_0x27, - - reg_0x29, - - reg_0x2c, - reg_0x2d, - reg_0x2e, - reg_0x2f, - reg_0x30, - reg_0x31, - reg_0x32, - reg_0x33, - reg_0x34, - reg_0x35, - reg_0x36, - reg_0x37, - reg_0x38, - reg_0x39, - - reg_0x3d, - reg_0x3e, - reg_0x3f, - - reg_0x52, - reg_0x53, - reg_0x54, - reg_0x55, - reg_0x56, - reg_0x57, - reg_0x58, - reg_0x59, - reg_0x5a, - - reg_0x5d, - reg_0x5e, - reg_0x5f, - reg_0x60, - reg_0x61, - reg_0x62, - reg_0x63, - reg_0x64, - reg_0x65, - reg_0x66, - reg_0x67, - reg_0x68, - reg_0x69, - reg_0x6a, - reg_0x6b, - reg_0x6c, - reg_0x6d, - reg_0x6e, - reg_0x6f, - reg_0x70, - reg_0x71, - reg_0x72, - reg_0x73, - reg_0x74, - reg_0x75, - reg_0x76, - reg_0x77, - reg_0x78, - reg_0x79, - reg_0x7a, - reg_0x7b, - reg_0x7c, - reg_0x7d, - reg_0x7e, - reg_0x7f, - reg_0x80, - reg_0x81, - reg_0x82, - reg_0x83, - reg_0x84, - reg_0x85, - reg_0x86, - reg_0x87, - GENESYS_GL841_MAX_REGS -}; +#include "genesys_gl841.h" /**************************************************************************** Low level function @@ -794,324 +472,6 @@ return SANE_FALSE; } -/* - * dumps register set in a human readable format - * todo : finish all register decoding - * - * adapted to sanei_gl841 but not tested at all - */ -static void -sanei_gl841_print_registers (Genesys_Register_Set * reg) -{ - SANE_Int i; - SANE_Byte v; - SANE_Int fastmode = 0; - SANE_Int lperiod; - SANE_Int cpp = 0; - - lperiod = - sanei_genesys_read_reg_from_set (reg, - 0x38) * 256 + - sanei_genesys_read_reg_from_set (reg, 0x39); -#if 0 - fastmode = - (sanei_genesys_read_reg_from_set (reg, 0x01) & REG01_FASTMOD) ? 1 : 0; -#endif - - for (i = 0; i < GENESYS_GL841_MAX_REGS; i++) - { - v = reg[i].value; - DBG (DBG_info, "reg 0x%02x: 0x%02x ", reg[i].address, v); - switch (reg[i].address) - { - case 0x01: - DBG (DBG_info, "%s, %s, %s, %s, %s, %s, %s, ", /*%s", */ - (v & REG01_CISSET) ? "CIS" : "CCD", - (v & REG01_DOGENB) ? "watchdog on" : "watchdog off", - (v & REG01_DVDSET) ? "shading on" : "shading off", - /*(v & REG01_FASTMOD) ? "fastmode on" : "fastmode off", */ - (v & REG01_M16DRAM) ? "data comp on" : "data comp off", - (v & REG01_DRAMSEL) ? "1 MB RAM" : "512 KB RAM", - (v & REG01_SHDAREA) ? "shading=scan area" : - "shading=total line", - (v & REG01_SCAN) ? "enable scan" : "disable scan"); - break; - case 0x02: - DBG (DBG_info, "%s, %s, %s, %s, %s, %s, %s, %s", - (v & REG02_NOTHOME) ? "autohome doesn't work" : - "autohome works", - (v & REG02_ACDCDIS) ? "backtrack off" : "backtrack on", - (v & REG02_AGOHOME) ? "autohome on" : "autohome off", - (v & REG02_MTRPWR) ? "motor on" : "motor off", - (v & REG02_FASTFED) ? "2 tables" : "1 table", - (v & REG02_MTRREV) ? "reverse" : "forward", - (v & REG02_HOMENEG) ? "indicate home sensor falling edge" : - "indicate home sensor rising edge", - (v & REG02_LONGCURV) ? - "deceleration curve fast mode is table 5" : - "deceleration curve fast mode is table 4"); - break; - case 0x03: - DBG (DBG_info, "%s, %s, %s, %s, %s, lamptime: %d pixels", - (v & REG03_LAMPDOG) ? "lamp sleeping mode on" : - "lamp sleefping mode off", - (v & REG03_AVEENB) ? "dpi average" : "dpi deletion", - (v & REG03_XPASEL) ? "TA lamp" : "flatbed lamp", - (v & REG03_LAMPPWR) ? "lamp on" : "lamp off", - "lamp timer on", - v & REG03_LAMPTIM * (fastmode + 1) * 65536 * lperiod); - break; - case 0x04: - DBG (DBG_info, "%s, %s, AFEMOD: %d, %s, %s", - /*(v & REG04_LINEART) ? "lineart on" : "lineart off", */ - "sanei_gl841 manual rev 1.7 is strange here ", - (v & REG04_BITSET) ? "image data 16 bits" : - "image data 8 bits", - ((v & REG04_AFEMOD) >> 4), - ((v & REG04_FILTER) >> 2 == - 0) ? "color filter" : ((v & REG04_FILTER) >> 2 == - 1) ? "red filter" : ((v & - REG04_FILTER) - >> 2 == - 2) ? - "green filter" : "blue filter", - ((v & REG04_FESET) < - 2) ? (((v & REG04_FESET) == 0) ? "ESIC type 1" : - "ESIC type 2") : (((v & REG04_FESET) == - 2) ? "ADI type" : "reserved")); - break; - case 0x05: - DBG (DBG_info, "%s, %s, %s, %s, %s, %s", - ((v & REG05_DPIHW) >> 6) == 0 ? "opt. sensor dpi: 600" : - ((v & REG05_DPIHW) >> 6) == - 1 ? "opt. sensor dpi: 1200 dpi" : ((v & REG05_DPIHW) >> - 6) == - 2 ? "opt. sensor dpi: 2400 dpi" : - "opt. sensor dpi: reserved", - "lamp time out", - ((v & REG05_MTLLAMP) >> 4) < 2 - ? (((v & REG05_MTLLAMP) >> 4) == 0 - ? "1*LAMPTIM" : "2*LAMPTIM") - : ((v & REG05_MTLLAMP) >> 4) == 2 - ? "4*LAMPTIM" : "reserved", - (v & REG05_GMMENB) ? "gamma correction on" : - "gamma correction off", - "pixes number under each system pixel time: ", - (v & REG05_MTLBASE) < 2 - ? ((v & REG05_MTLBASE) == 0 - ? "1" : "2") : (v & REG05_MTLBASE) == 2 ? "3" : "4"); - /* I don't now if this works cause in gl646 the unit of - measurement is clocks/pixel and in sanei_gl841 it is - pixel/system pixel time */ - { - switch (v & REG05_MTLBASE) - { - case 0: - cpp = 1; - break; - case 1: - cpp = 2; - break; - case 2: - cpp = 3; - break; - case 3: - cpp = 4; - break; - } - } - break; - case 0x06: - DBG (DBG_info, "12 clk/pixel normal for scanning, %s, %s, %s, %s", - ((v & REG06_SCANMOD >> 5) > 5) ? - ((v & REG06_SCANMOD >> 5) == 4) ? - " 6 clk/pixel fast mode " - : ((v & REG06_SCANMOD >> 5) == 5) ? - " 15 clk/pixel 16 color" - : " 18 clk/pixel 16 color" - : - ((v & REG06_SCANMOD >> 5) < 2) ? - ((v & REG06_SCANMOD >> 5) == 0) ? - "12 clk/pixel normal for scanning" - : "12 clk/pixel bypass for scanning" - : - " reserved", - (v & REG06_PWRBIT) ? "turn power on" : - "don't turn power on", - (v & REG06_GAIN4) ? "digital shading gain=4 times system" : - "digital shading gain=8 times system", - (v & REG06_OPTEST) == - 0 ? "ASIC test mode: off" : (v & REG06_OPTEST) == 1 ? - "ASIC test mode: simulation, motorgo" : - (v & REG06_OPTEST) == 2 ? - "ASIC test mode: image, pixel count" : - (v & REG06_OPTEST) == 3 ? - "ASIC test mode: image, line count" : - (v & REG06_OPTEST) == 4 ? - "ASIC test mode: simulation, counter + adder" : - (v & REG06_OPTEST) == 5 ? - "ASIC test mode: CCD TG" : "ASIC test mode: reserved"); - break; - case 0x07: - DBG (DBG_info, "%s, %s, %s, %s", - (v & REG07_SRAMSEL) ? "DMA access for SRAM" : - "DMA access for DRAM", - (v & REG07_FASTDMA) ? "2 clocks/access" : - "4 clocks/access", - (v & REG07_DMASEL) ? "DMA access for DRAM" : - "MPU access for DRAM", - (v & REG07_DMARDWR) ? "DMA read DRAM" : "DMA write DRAM"); - break; - case 0x08: - DBG (DBG_info, "%s, %s, %s, %s, %s, %s, %s", - (v & REG08_DECFLAG) ? "gamma table is decrement type" : - "gamma table is increment type", - (v & REG08_GMMFFR) ? - "red channel Gamma table address FFH is special type" - : " ", - (v & REG08_GMMFFG) ? - "green channel Gamma table address FFH is special type" - : " ", - (v & REG08_GMMFFB) ? - "blue channel Gamma table address FFH is special type" - : " ", - (v & REG08_GMMZR) ? - "red channel Gamma table address 00H is special type" - : " ", - (v & REG08_GMMZG) ? - "green channel Gamma table address 0H is special type" - : " ", - (v & REG08_GMMZB) ? - "blue channel Gamma table address 00H is special type" - : " "); - break; - case 0x09: - DBG (DBG_info, "%s, %s, %s, %s, %s, %s", - ((v & REG09_MCNTSET) == 0) ? "pixel count" : - ((v & REG09_MCNTSET) == 1) ? "system clock*2" : - ((v & REG09_MCNTSET) == 2) ? "system clock*3" : - "system clock*4", - ((v & REG09_CLKSET) == 0) ? "24MHz" : - ((v & REG09_CLKSET) == 1) ? "30MHz" : - ((v & REG09_CLKSET) == 2) ? "40MHz" : - "48MHz", - (v & REG09_BACKSCAN) ? - "backward scan function" - : "forward scan function ", - (v & REG09_ENHANCE) ? - "enhance EPP interfgace speed for USB2.0 " - : "select normal EPP interface speed for USB2.0 ", - (v & REG09_SHORTTG) ? - "enable short CCD SH(TG) period for film scanning" - : " ", - (v & REG09_NWAIT) ? - "delay nWait (H_BUSY) one clock" : " "); - break; - case 0x0a: - DBG (DBG_info, "%s", - (v & REG0A_SRAMBUF) ? - "select external SRAM as the image buffer" : - "select external DRAM as the image buffer"); - break; - case 0x0d: - DBG (DBG_info, "scanner command: %s", - (v & REG0D_CLRLNCNT) ? "clear SCANCNT(Reg4b,Reg4c,Reg4d)" : - "don't clear SCANCNT"); - break; - case 0x0e: - DBG (DBG_info, "scanner software reset"); - break; - case 0x0f: - DBG (DBG_info, "start motor move"); - break; - case 0x10: - DBG (DBG_info, "red exposure time hi"); - break; - case 0x11: - DBG (DBG_info, "red exposure time lo (total: 0x%x)", - v + 256 * sanei_genesys_read_reg_from_set (reg, 0x10)); - break; - case 0x12: - DBG (DBG_info, "green exposure time hi"); - break; - case 0x13: - DBG (DBG_info, "green exposure time lo (total: 0x%x)", - v + 256 * sanei_genesys_read_reg_from_set (reg, 0x12)); - break; - case 0x14: - DBG (DBG_info, "blue exposure time hi"); - break; - case 0x15: - DBG (DBG_info, "blue exposure time lo (total: 0x%x)", - v + 256 * sanei_genesys_read_reg_from_set (reg, 0x14)); - break; - case 0x16: - DBG (DBG_info, "%s, %s, %s, %s, %s, %s, %s, %s", - (v & REG16_CTRLHI) ? "CCD CP & RS hi when TG high" : - "CCD CP & RS lo when TG high", - (v & REG16_TOSHIBA) ? "image sensor is TOSHIBA CIS" : - " ", - (v & REG16_TGINV) ? "inverse CCD TG" : "normal CCD TG", - (v & REG16_CK1INV) ? "inverse CCD clock 1" : - "normal CCD clock 1", - (v & REG16_CK2INV) ? "inverse CCD clock 2" : - "normal CCD clock 2", - (v & REG16_CTRLINV) ? "inverse CCD CP & RS" : - "normal CCD CP & RS", - (v & REG16_CKDIS) ? "CCD TG position clock 1/2 signal off" - : "CCD TG position clock 1/2 signal on", - (v & REG16_CTRLDIS) ? "CCD TG position CP & RS signals off" - : "CCD TG position CP & RS signals off"); - break; - case 0x17: - DBG (DBG_info, "%s, CCD TG width: %0x", - ((v & REG17_TGMODE) >> 6) == - 0x00 ? "CCD TG without dummy line" : ((v & REG17_TGMODE) >> - 6) == - 0x01 ? "CCD TG with dummy line" : "CCD TG reserved", - (v & REG17_TGW)); - break; - case 0x18: - DBG (DBG_info, "%s, %d time CCD clock speed for dummy line, %s, " - "delay %d system clocks for CCD clock 1/2, %d time CCD clock speed for capture image", - (v & REG18_CNSET) ? "TG and clock canon CIS style" : - "TG and clock non-canon CIS style", - ((v & REG18_DCKSEL) >> 5) + 1, - (v & REG18_CKTOGGLE) ? - "half cycle per pixel for CCD clock 1/2" : - "one cycle per pixel for CCD clock 1/2", - ((v & REG18_CKDELAY) >> 2), ((v & REG18_CKSEL) + 1)); - - break; - case 0x19: - DBG (DBG_info, "dummy line exposure time (0x%x pixel times)", - v * 256); - break; - case 0x1a: - DBG (DBG_info, "%s, %s, %s, %s, %s", - (v & REG1A_MANUAL3) ? - "CCD clock3,clock4 manual output" - : "CCD clock3,clock4 automatic output", - (v & REG1A_MANUAL1) ? - "CCD clock1,clock2 manual output" - : "CCD clock1,clock2 automatic output", - (v & REG1A_CK4INV) ? - "reverse CCD Clock4" - : " ", - (v & REG1A_CK3INV) ? - "reverse CCD Clock3" - : " ", - (v & REG1A_LINECLP) ? - "CCD line clamping" : "CCD pixel clamping"); - break; - case 0x1b: - DBG (DBG_info, "reserved"); - break; - } - DBG (DBG_info, "\n"); - } -} - /** copy sensor specific settings */ /* *dev : device infos *regs : registers to be set @@ -1828,9 +1188,9 @@ } } } + DBG (DBG_proc, "gl841_set_fe(): frontend reset complete\n"); } - DBG (DBG_proc, "gl841_set_fe(): frontend reset complete\n"); if (set == AFE_POWER_SAVE) { @@ -1941,19 +1301,16 @@ return SANE_STATUS_GOOD; } -#define MOTOR_FLAG_AUTO_GO_HOME 1 -#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 2 - #define MOTOR_ACTION_FEED 1 #define MOTOR_ACTION_GO_HOME 2 #define MOTOR_ACTION_HOME_FREE 3 -/* setup motor for given parameters */ +/** @brief turn off motor + * + */ static SANE_Status -gl841_init_motor_regs_off(Genesys_Device * dev, - Genesys_Register_Set * reg, - unsigned int scan_lines/*lines, scan resolution*/ - ) +gl841_init_motor_regs_off(Genesys_Register_Set * reg, + unsigned int scan_lines) { unsigned int feedl; Genesys_Register_Set * r; @@ -1963,36 +1320,6 @@ feedl = 2; -/* all needed slopes available. we did even decide which mode to use. - what next? - - transfer slopes -SCAN: -flags \ use_fast_fed ! 0 1 -------------------------\-------------------- - 0 ! 0,1,2 0,1,2,3 -MOTOR_FLAG_AUTO_GO_HOME ! 0,1,2,4 0,1,2,3,4 -OFF: none -FEED: 3 -GO_HOME: 3 -HOME_FREE: 3 - - setup registers - * slope specific registers (already done) - * DECSEL for HOME_FREE/GO_HOME/SCAN - * FEEDL - * MTRREV - * MTRPWR - * FASTFED - * STEPSEL - * MTRPWM - * FSTPSEL - * FASTPWM - * HOMENEG - * BWDSTEP - * FWDSTEP - * Z1 - * Z2 - */ - r = sanei_genesys_get_address (reg, 0x3d); r->value = (feedl >> 16) & 0xf; r = sanei_genesys_get_address (reg, 0x3e); @@ -2576,23 +1903,17 @@ return 0; } -#define OPTICAL_FLAG_DISABLE_GAMMA 1 -#define OPTICAL_FLAG_DISABLE_SHADING 2 -#define OPTICAL_FLAG_DISABLE_LAMP 4 -#define OPTICAL_FLAG_ENABLE_LEDADD 8 - static SANE_Status -gl841_init_optical_regs_off(Genesys_Device * dev, - Genesys_Register_Set * reg) +gl841_init_optical_regs_off(Genesys_Register_Set * reg) { Genesys_Register_Set * r; - DBG (DBG_proc, "gl841_init_optical_regs_off : start\n"); + DBGSTART; r = sanei_genesys_get_address (reg, 0x01); r->value &= ~REG01_SCAN; - DBG (DBG_proc, "gl841_init_optical_regs_off : completed. \n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -2805,6 +2126,7 @@ words_per_line *= depth / 8; dev->wpl = words_per_line; + dev->bpl = words_per_line; r = sanei_genesys_get_address (reg, 0x35); r->value = LOBYTE (HIWORD (words_per_line)); @@ -2846,15 +2168,6 @@ return m + d; } -#define SCAN_FLAG_SINGLE_LINE 0x01 -#define SCAN_FLAG_DISABLE_SHADING 0x02 -#define SCAN_FLAG_DISABLE_GAMMA 0x04 -#define SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE 0x08 -#define SCAN_FLAG_IGNORE_LINE_DISTANCE 0x10 -#define SCAN_FLAG_USE_OPTICAL_RES 0x20 -#define SCAN_FLAG_DISABLE_LAMP 0x40 -#define SCAN_FLAG_DYNAMIC_LINEART 0x80 - /* set up registers for an actual scan * * this function sets up the scanner to scan in normal or single line mode @@ -3125,25 +2438,10 @@ /*** motor parameters ***/ -/* max_shift */ /* scanned area must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1 && !(flags & SCAN_FLAG_IGNORE_LINE_DISTANCE)) - { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = - (max_shift * yres) / dev->motor.base_ydpi; - } - else - { - max_shift = 0; - } + max_shift=sanei_genesys_compute_max_shift(dev,channels,yres,flags); -/* lincnt */ + /* lincnt */ lincnt = lines + max_shift + stagger; /* move */ @@ -3166,10 +2464,7 @@ DBG (DBG_info, "gl841_init_scan_regs: move=%d steps\n", move);*/ if (flags & SCAN_FLAG_SINGLE_LINE) - status = gl841_init_motor_regs_off(dev, - reg, - dev->model->is_cis?lincnt*channels:lincnt - ); + status = gl841_init_motor_regs_off(reg, dev->model->is_cis?lincnt*channels:lincnt); else status = gl841_init_motor_regs_scan(dev, reg, @@ -3254,7 +2549,7 @@ */ dev->total_bytes_read = 0; - if (depth == 1 || dev->settings.scan_mode == SCAN_MODE_LINEART) + if (depth == 1) dev->total_bytes_to_read = ((dev->settings.pixels * dev->settings.lines) / 8 + (((dev->settings.pixels * dev->settings.lines)%8)?1:0) @@ -3503,25 +2798,10 @@ DBG (DBG_info, "gl841_calculate_current_setup : exposure_time=%d pixels\n", exposure_time); -/* max_shift */ /* scanned area must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1) - { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = - (max_shift * yres) / dev->motor.base_ydpi; - } - else - { - max_shift = 0; - } + max_shift=sanei_genesys_compute_max_shift(dev,channels,yres,0); -/* lincnt */ + /* lincnt */ lincnt = lines + max_shift + stagger; dev->current_setup.pixels = (used_pixels * used_res)/optical_res; @@ -3786,7 +3066,7 @@ sizeof (local_reg)/sizeof (local_reg[0])); if (status != SANE_STATUS_GOOD) DBG (DBG_error, - "gl841_set_powersaving: Failed to bulk write registers: %s\n", + "gl841_set_powersaving: failed to bulk write registers: %s\n", sane_strstatus (status)); DBG (DBG_proc, "gl841_set_powersaving: completed\n"); @@ -3815,7 +3095,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "%s: Failed to read home sensor: %s\n",__FUNCTION__, + "%s: failed to read home sensor: %s\n",__FUNCTION__, sane_strstatus (status)); DBG (DBG_proc, "%s: completed\n", __FUNCTION__); @@ -3836,15 +3116,14 @@ memcpy (local_reg, dev->reg, (GENESYS_GL841_MAX_REGS+1) * sizeof (Genesys_Register_Set)); - gl841_init_optical_regs_off(dev,local_reg); + gl841_init_optical_regs_off(local_reg); - gl841_init_motor_regs_off(dev,local_reg,0); - status = - gl841_bulk_write_register (dev, local_reg, GENESYS_GL841_MAX_REGS); + gl841_init_motor_regs_off(local_reg,0); + status = gl841_bulk_write_register (dev, local_reg, GENESYS_GL841_MAX_REGS); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "%s: Failed to bulk write registers: %s\n", __FUNCTION__, + "%s: failed to bulk write registers: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } @@ -3861,7 +3140,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "%s: Failed to read home sensor: %s\n",__FUNCTION__, + "%s: failed to read home sensor: %s\n",__FUNCTION__, sane_strstatus (status)); DBG (DBG_proc, "%s: completed\n", __FUNCTION__); @@ -3896,14 +3175,12 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_get_paper_sensor: Failed to read gpio: %s\n", + "gl841_get_paper_sensor: failed to read gpio: %s\n", sane_strstatus (status)); return status; } *paper_loaded = (val & 0x1) == 0; return SANE_STATUS_GOOD; - - return SANE_STATUS_INVAL; } static SANE_Status @@ -3934,7 +3211,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_eject_document: Failed to read status register: %s\n", + "gl841_eject_document: failed to read status register: %s\n", sane_strstatus (status)); return status; } @@ -3950,7 +3227,7 @@ memcpy (local_reg, dev->reg, (GENESYS_GL841_MAX_REGS+1) * sizeof (Genesys_Register_Set)); - gl841_init_optical_regs_off(dev,local_reg); + gl841_init_optical_regs_off(local_reg); gl841_init_motor_regs(dev,local_reg, 65536,MOTOR_ACTION_FEED,0); @@ -3960,7 +3237,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_eject_document: Failed to bulk write registers: %s\n", + "gl841_eject_document: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -3969,7 +3246,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_eject_document: Failed to start motor: %s\n", + "gl841_eject_document: failed to start motor: %s\n", sane_strstatus (status)); gl841_stop_action (dev); /* send original registers */ @@ -4023,7 +3300,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_eject_document: Failed to read feed steps: %s\n", + "gl841_eject_document: failed to read feed steps: %s\n", sane_strstatus (status)); return status; } @@ -4038,7 +3315,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_eject_document: Failed to read feed steps: %s\n", + "gl841_eject_document: failed to read feed steps: %s\n", sane_strstatus (status)); return status; } @@ -4059,7 +3336,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_eject_document: Failed to stop motor: %s\n", + "gl841_eject_document: failed to stop motor: %s\n", sane_strstatus (status)); return status; } @@ -4165,6 +3442,7 @@ /* the current scancnt is also the final one, so we use it to * compute total bytes to read. We also add the line count to eject document */ total_bytes_to_read=(scancnt+postcnt)*dev->wpl; + DBG (DBG_io, "%s: old total_bytes_to_read=%u\n",__FUNCTION__,dev->total_bytes_to_read); DBG (DBG_io, "%s: new total_bytes_to_read=%u\n",__FUNCTION__,total_bytes_to_read); @@ -4219,7 +3497,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_begin_scan: Failed to bulk write registers: %s\n", + "gl841_begin_scan: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -4232,7 +3510,7 @@ /* Send the stop scan command */ static SANE_Status -gl841_end_scan (Genesys_Device * dev, Genesys_Register_Set * reg, +gl841_end_scan (Genesys_Device * dev, Genesys_Register_Set __sane_unused__ * reg, SANE_Bool check_stop) { SANE_Status status; @@ -4249,7 +3527,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_end_scan: Failed to stop: %s\n", + "gl841_end_scan: failed to stop: %s\n", sane_strstatus (status)); return status; } @@ -4277,7 +3555,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_feed: Failed to stop action: %s\n", + "gl841_feed: failed to stop action: %s\n", sane_strstatus (status)); return status; } @@ -4286,7 +3564,7 @@ memcpy (local_reg, dev->reg, (GENESYS_GL841_MAX_REGS+1) * sizeof (Genesys_Register_Set)); - gl841_init_optical_regs_off(dev,local_reg); + gl841_init_optical_regs_off(local_reg); gl841_init_motor_regs(dev,local_reg, steps,MOTOR_ACTION_FEED,0); @@ -4297,7 +3575,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_feed: Failed to bulk write registers: %s\n", + "gl841_feed: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -4306,7 +3584,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_feed: Failed to start motor: %s\n", + "gl841_feed: failed to start motor: %s\n", sane_strstatus (status)); gl841_stop_action (dev); /* send original registers */ @@ -4322,7 +3600,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_feed: Failed to read home sensor: %s\n", + "gl841_feed: failed to read home sensor: %s\n", sane_strstatus (status)); return status; } @@ -4369,7 +3647,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_slow_back_home: Failed to read home sensor: %s\n", + "gl841_slow_back_home: failed to read home sensor: %s\n", sane_strstatus (status)); return status; } @@ -4395,7 +3673,7 @@ memcpy (local_reg, dev->reg, (GENESYS_GL841_MAX_REGS+1) * sizeof (Genesys_Register_Set)); - gl841_init_optical_regs_off(dev,local_reg); + gl841_init_optical_regs_off(local_reg); gl841_init_motor_regs(dev,local_reg, 65536,MOTOR_ACTION_GO_HOME,0); @@ -4405,7 +3683,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_slow_back_home: Failed to bulk write registers: %s\n", + "gl841_slow_back_home: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -4414,7 +3692,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_slow_back_home: Failed to start motor: %s\n", + "gl841_slow_back_home: failed to start motor: %s\n", sane_strstatus (status)); gl841_stop_action (dev); /* send original registers */ @@ -4432,7 +3710,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_slow_back_home: Failed to read home sensor: %s\n", + "gl841_slow_back_home: failed to read home sensor: %s\n", sane_strstatus (status)); return status; } @@ -4621,7 +3899,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_init_register_for_coarse_calibration: Failed to setup scan: %s\n", + "gl841_init_register_for_coarse_calibration: failed to setup scan: %s\n", sane_strstatus (status)); return status; } @@ -4635,7 +3913,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_init_register_for_coarse_calibration: Failed to bulk write registers: %s\n", + "gl841_init_register_for_coarse_calibration: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -4658,8 +3936,7 @@ SANE_Status status; SANE_Int ydpi; - DBG (DBG_proc, "gl841_init_regs_for_shading: lines = %d\n", - dev->model->shading_lines); + DBG (DBG_proc, "gl841_init_regs_for_shading: lines = %d\n", dev->calib_lines); ydpi = dev->motor.base_ydpi; if (dev->motor.motor_id == MOTOR_PLUSTEK_3600) /* TODO PLUSTEK_3600: 1200dpi not yet working, produces dark bar */ @@ -4668,6 +3945,7 @@ } dev->calib_channels = 3; + dev->calib_lines = dev->model->shading_lines; status = gl841_init_scan_regs (dev, dev->calib_reg, dev->settings.xres, @@ -4675,7 +3953,7 @@ 0, 0, (dev->sensor.sensor_pixels * dev->settings.xres) / dev->sensor.optical_res, - dev->model->shading_lines, + dev->calib_lines, 16, dev->calib_channels, dev->settings.color_filter, @@ -4692,19 +3970,19 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_init_registers_for_shading: Failed to setup scan: %s\n", + "gl841_init_registers_for_shading: failed to setup scan: %s\n", sane_strstatus (status)); return status; } - dev->scanhead_position_in_steps += dev->model->shading_lines; + dev->scanhead_position_in_steps += dev->calib_lines; status = gl841_bulk_write_register (dev, dev->calib_reg, GENESYS_GL841_MAX_REGS); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_init_registers_for_shading: Failed to bulk write registers: %s\n", + "gl841_init_registers_for_shading: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -4951,6 +4229,10 @@ SANE_Bool acceptable = SANE_FALSE; + /* these 2 boundaries should be per sensor */ + uint16_t min_exposure=500; + uint16_t max_exposure; + DBG (DBG_proc, "gl841_led_calibration\n"); @@ -4961,7 +4243,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_led_calibration: Failed to feed: %s\n", + "gl841_led_calibration: failed to feed: %s\n", sane_strstatus (status)); return status; } @@ -4991,7 +4273,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_led_calibration: Failed to setup scan: %s\n", + "gl841_led_calibration: failed to setup scan: %s\n", sane_strstatus (status)); return status; } @@ -5020,6 +4302,9 @@ expb = (dev->sensor.regs_0x10_0x1d[4] << 8) | dev->sensor.regs_0x10_0x1d[5]; turn = 0; + /* max exposure is set to ~2 time initial average + * exposure, or 2 time last calibration exposure */ + max_exposure=((expr+expg+expb)/3)*2; do { @@ -5099,15 +4384,15 @@ */ avge = (expr + expg + expb) / 3; - if (avge > 2000) { - expr = (expr * 2000) / avge; - expg = (expg * 2000) / avge; - expb = (expb * 2000) / avge; + if (avge > max_exposure) { + expr = (expr * max_exposure) / avge; + expg = (expg * max_exposure) / avge; + expb = (expb * max_exposure) / avge; } - if (avge < 500) { - expr = (expr * 500) / avge; - expg = (expg * 500) / avge; - expb = (expb * 500) / avge; + if (avge < min_exposure) { + expr = (expr * min_exposure) / avge; + expg = (expg * min_exposure) / avge; + expb = (expb * min_exposure) / avge; } } @@ -5212,7 +4497,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_offset_calibration: Failed to setup scan: %s\n", + "gl841_offset_calibration: failed to setup scan: %s\n", sane_strstatus (status)); return status; } @@ -5278,7 +4563,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_offset_calibration: Failed to setup frontend: %s\n", + "gl841_offset_calibration: failed to setup frontend: %s\n", sane_strstatus (status)); return status; } @@ -5399,7 +4684,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_offset_calibration: Failed to setup frontend: %s\n", + "gl841_offset_calibration: failed to setup frontend: %s\n", sane_strstatus (status)); return status; } @@ -5600,7 +4885,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_coarse_gain_calibration: Failed to feed: %s\n", + "gl841_coarse_gain_calibration: failed to feed: %s\n", sane_strstatus (status)); return status; } @@ -5630,7 +4915,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_coarse_calibration: Failed to setup scan: %s\n", + "gl841_coarse_calibration: failed to setup scan: %s\n", sane_strstatus (status)); return status; } @@ -5710,7 +4995,6 @@ DBG (DBG_error0, "**** ****\n"); DBG (DBG_error0, "**********************************************\n"); DBG (DBG_error0, "**********************************************\n"); - #ifdef SANE_STATUS_HW_LOCKED return SANE_STATUS_HW_LOCKED; #else @@ -5789,7 +5073,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_init_regs_for_warmup: Failed to setup scan: %s\n", + "gl841_init_regs_for_warmup: failed to setup scan: %s\n", sane_strstatus (status)); return status; } @@ -5822,7 +5106,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_repark_head: Failed to feed: %s\n", + "gl841_repark_head: failed to feed: %s\n", sane_strstatus (status)); return status; } @@ -5839,8 +5123,11 @@ int for_overwrite) { SANE_Status status; +#ifdef HAVE_SYS_TIME_H + struct timeval time; +#endif - DBG (DBG_proc, "gl841_is_compatible_calibration\n"); + DBGSTART; /* calibration cache not working yet for this model */ if (dev->model->ccd_type == CCD_PLUSTEK_3600) @@ -5863,8 +5150,22 @@ if (dev->current_setup.half_ccd != cache->used_setup.half_ccd) return SANE_STATUS_UNSUPPORTED; - DBG (DBG_proc, "gl841_is_compatible_calibration: completed\n"); - + /* a cache entry expires after 30 minutes for non sheetfed scanners */ + /* this is not taken into account when overwriting cache entries */ +#ifdef HAVE_SYS_TIME_H + if(for_overwrite == SANE_FALSE) + { + gettimeofday (&time, NULL); + if ((time.tv_sec - cache->last_calibration > 30 * 60) + && (dev->model->is_sheetfed == SANE_FALSE)) + { + DBG (DBG_proc, "%s: expired entry, non compatible cache\n",__FUNCTION__); + return SANE_STATUS_UNSUPPORTED; + } + } +#endif + + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -5917,7 +5218,6 @@ RIE (sanei_gl841_asic_test (dev)); } - /* Set analog frontend */ RIE (gl841_set_fe (dev, AFE_INIT)); @@ -6108,19 +5408,30 @@ size_t size; uint8_t *data; int steps, depth, dpi; - unsigned int pass, count, found, x, y; + unsigned int pass, count, found, x, y, length; char title[80]; Genesys_Register_Set *r; + uint8_t white_level=90; /**< default white level to detect white dots */ + uint8_t black_level=60; /**< default black level to detect black dots */ DBG (DBG_proc, "gl841_search_strip %s %s\n", black ? "black" : "white", forward ? "forward" : "reverse"); + /* use maximum gain when doing forward white strip detection + * since we don't have calibrated the sensor yet */ + if(!black && forward) + { + dev->frontend.gain[0] = 0xff; + dev->frontend.gain[1] = 0xff; + dev->frontend.gain[2] = 0xff; + } + gl841_set_fe (dev, AFE_SET); status = gl841_stop_action (dev); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_search_strip: Failed to stop: %s\n", + "gl841_search_strip: failed to stop: %s\n", sane_strstatus (status)); return status; } @@ -6133,10 +5444,11 @@ dpi = dev->model->xdpi_values[x]; } channels = 1; - /* 10 MM */ - lines = (10 * dpi) / MM_PER_INCH; + /* shading calibation is done with dev->motor.base_ydpi */ lines = (dev->model->shading_lines * dpi) / dev->motor.base_ydpi; + lines = (10*dpi)/MM_PER_INCH; + depth = 8; pixels = (dev->sensor.sensor_pixels * dpi) / dev->sensor.optical_res; size = pixels * channels * lines * (depth / 8); @@ -6146,6 +5458,10 @@ DBG (DBG_error, "gl841_search_strip: failed to allocate memory\n"); return SANE_STATUS_NO_MEM; } + + /* 20 cm max length for calibration sheet */ + length = ((200 * dpi) / MM_PER_INCH)/lines; + dev->scanhead_position_in_steps = 0; memcpy (local_reg, dev->reg, @@ -6166,7 +5482,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_search_strip: Failed to setup for scan: %s\n", + "gl841_search_strip: failed to setup for scan: %s\n", sane_strstatus (status)); return status; } @@ -6183,7 +5499,7 @@ if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_search_strip: Failed to bulk write registers: %s\n", + "gl841_search_strip: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -6233,14 +5549,14 @@ /* loop until strip is found or maximum pass number done */ found = 0; - while (pass < 20 && !found) + while (pass < length && !found) { status = gl841_bulk_write_register (dev, local_reg, GENESYS_GL841_MAX_REGS); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl841_search_strip: Failed to bulk write registers: %s\n", + "gl841_search_strip: failed to bulk write registers: %s\n", sane_strstatus (status)); return status; } @@ -6301,12 +5617,12 @@ for (x = 0; x < pixels; x++) { /* when searching for black, detect white pixels */ - if (black && data[y * pixels + x] > 90) + if (black && data[y * pixels + x] > white_level) { count++; } /* when searching for white, detect black pixels */ - if (!black && data[y * pixels + x] < 60) + if (!black && data[y * pixels + x] < black_level) { count++; } @@ -6340,12 +5656,12 @@ for (x = 0; x < pixels; x++) { /* when searching for black, detect white pixels */ - if (black && data[y * pixels + x] > 90) + if (black && data[y * pixels + x] > white_level) { count++; } /* when searching for white, detect black pixels */ - if (!black && data[y * pixels + x] < 60) + if (!black && data[y * pixels + x] < black_level) { count++; } @@ -6441,7 +5757,8 @@ gl841_is_compatible_calibration, NULL, - NULL + NULL, + gl841_calculate_current_setup }; SANE_Status diff -Nru sane-backends-1.0.22/backend/genesys_gl841.h sane-backends-1.0.23/backend/genesys_gl841.h --- sane-backends-1.0.22/backend/genesys_gl841.h 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl841.h 2012-07-01 02:00:44.000000000 +0000 @@ -0,0 +1,342 @@ +/* sane - Scanner Access Now Easy. + + Copyright (C) 2011-2012 Stphane Voltz + + 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; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + As a special exception, the authors of SANE give permission for + additional uses of the libraries contained in this release of SANE. + + The exception is that, if you link a SANE library with other files + to produce an executable, this does not by itself cause the + resulting executable to be covered by the GNU General Public + License. Your use of that executable is in no way restricted on + account of linking the SANE library code into it. + + This exception does not, however, invalidate any other reasons why + the executable file might be covered by the GNU General Public + License. + + If you submit changes to SANE to the maintainers to be included in + a subsequent release, you agree by submitting the changes that + those changes may be distributed with this exception intact. + + If you write modifications of your own for SANE, it is your choice + whether to permit this exception to apply to your modifications. + If you do not wish that, delete this exception notice. +*/ + +#include "genesys.h" + +/* Individual bits */ +#define REG01_CISSET 0x80 +#define REG01_DOGENB 0x40 +#define REG01_DVDSET 0x20 +#define REG01_M16DRAM 0x08 +#define REG01_DRAMSEL 0x04 +#define REG01_SHDAREA 0x02 +#define REG01_SCAN 0x01 + +#define REG02_NOTHOME 0x80 +#define REG02_ACDCDIS 0x40 +#define REG02_AGOHOME 0x20 +#define REG02_MTRPWR 0x10 +#define REG02_FASTFED 0x08 +#define REG02_MTRREV 0x04 +#define REG02_HOMENEG 0x02 +#define REG02_LONGCURV 0x01 + +#define REG03_LAMPDOG 0x80 +#define REG03_AVEENB 0x40 +#define REG03_XPASEL 0x20 +#define REG03_LAMPPWR 0x10 +#define REG03_LAMPTIM 0x0f + +#define REG04_LINEART 0x80 +#define REG04_BITSET 0x40 +#define REG04_AFEMOD 0x30 +#define REG04_FILTER 0x0c +#define REG04_FESET 0x03 + +#define REG04S_AFEMOD 4 + +#define REG05_DPIHW 0xc0 +#define REG05_DPIHW_600 0x00 +#define REG05_DPIHW_1200 0x40 +#define REG05_DPIHW_2400 0x80 +#define REG05_MTLLAMP 0x30 +#define REG05_GMMENB 0x08 +#define REG05_MTLBASE 0x03 + +#define REG06_SCANMOD 0xe0 +#define REG06S_SCANMOD 5 +#define REG06_PWRBIT 0x10 +#define REG06_GAIN4 0x08 +#define REG06_OPTEST 0x07 + +#define REG07_SRAMSEL 0x08 +#define REG07_FASTDMA 0x04 +#define REG07_DMASEL 0x02 +#define REG07_DMARDWR 0x01 + +#define REG08_DECFLAG 0x40 +#define REG08_GMMFFR 0x20 +#define REG08_GMMFFG 0x10 +#define REG08_GMMFFB 0x08 +#define REG08_GMMZR 0x04 +#define REG08_GMMZG 0x02 +#define REG08_GMMZB 0x01 + +#define REG09_MCNTSET 0xc0 +#define REG09_CLKSET 0x30 +#define REG09_BACKSCAN 0x08 +#define REG09_ENHANCE 0x04 +#define REG09_SHORTTG 0x02 +#define REG09_NWAIT 0x01 + +#define REG09S_MCNTSET 6 +#define REG09S_CLKSET 4 + + +#define REG0A_SRAMBUF 0x01 + +#define REG0D_CLRLNCNT 0x01 + +#define REG16_CTRLHI 0x80 +#define REG16_TOSHIBA 0x40 +#define REG16_TGINV 0x20 +#define REG16_CK1INV 0x10 +#define REG16_CK2INV 0x08 +#define REG16_CTRLINV 0x04 +#define REG16_CKDIS 0x02 +#define REG16_CTRLDIS 0x01 + +#define REG17_TGMODE 0xc0 +#define REG17_TGMODE_NO_DUMMY 0x00 +#define REG17_TGMODE_REF 0x40 +#define REG17_TGMODE_XPA 0x80 +#define REG17_TGW 0x3f +#define REG17S_TGW 0 + +#define REG18_CNSET 0x80 +#define REG18_DCKSEL 0x60 +#define REG18_CKTOGGLE 0x10 +#define REG18_CKDELAY 0x0c +#define REG18_CKSEL 0x03 + +#define REG1A_MANUAL3 0x02 +#define REG1A_MANUAL1 0x01 +#define REG1A_CK4INV 0x08 +#define REG1A_CK3INV 0x04 +#define REG1A_LINECLP 0x02 + +#define REG1C_TGTIME 0x07 + +#define REG1D_CK4LOW 0x80 +#define REG1D_CK3LOW 0x40 +#define REG1D_CK1LOW 0x20 +#define REG1D_TGSHLD 0x1f +#define REG1DS_TGSHLD 0 + + +#define REG1E_WDTIME 0xf0 +#define REG1ES_WDTIME 4 +#define REG1E_LINESEL 0x0f +#define REG1ES_LINESEL 0 + +#define REG40_HISPDFLG 0x04 +#define REG40_MOTMFLG 0x02 +#define REG40_DATAENB 0x01 + +#define REG41_PWRBIT 0x80 +#define REG41_BUFEMPTY 0x40 +#define REG41_FEEDFSH 0x20 +#define REG41_SCANFSH 0x10 +#define REG41_HOMESNR 0x08 +#define REG41_LAMPSTS 0x04 +#define REG41_FEBUSY 0x02 +#define REG41_MOTORENB 0x01 + +#define REG58_VSMP 0xf8 +#define REG58S_VSMP 3 +#define REG58_VSMPW 0x07 +#define REG58S_VSMPW 0 + +#define REG59_BSMP 0xf8 +#define REG59S_BSMP 3 +#define REG59_BSMPW 0x07 +#define REG59S_BSMPW 0 + +#define REG5A_ADCLKINV 0x80 +#define REG5A_RLCSEL 0x40 +#define REG5A_CDSREF 0x30 +#define REG5AS_CDSREF 4 +#define REG5A_RLC 0x0f +#define REG5AS_RLC 0 + +#define REG5E_DECSEL 0xe0 +#define REG5ES_DECSEL 5 +#define REG5E_STOPTIM 0x1f +#define REG5ES_STOPTIM 0 + +#define REG60_ZIMOD 0x1f +#define REG61_Z1MOD 0xff +#define REG62_Z1MOD 0xff + +#define REG63_Z2MOD 0x1f +#define REG64_Z2MOD 0xff +#define REG65_Z2MOD 0xff + +#define REG67_STEPSEL 0xc0 +#define REG67_FULLSTEP 0x00 +#define REG67_HALFSTEP 0x40 +#define REG67_QUATERSTEP 0x80 +#define REG67_MTRPWM 0x3f + +#define REG68_FSTPSEL 0xc0 +#define REG68_FULLSTEP 0x00 +#define REG68_HALFSTEP 0x40 +#define REG68_QUATERSTEP 0x80 +#define REG68_FASTPWM 0x3f + +#define REG6B_MULTFILM 0x80 +#define REG6B_GPOM13 0x40 +#define REG6B_GPOM12 0x20 +#define REG6B_GPOM11 0x10 +#define REG6B_GPO18 0x02 +#define REG6B_GPO17 0x01 + +#define REG6C_GPIOH 0xff +#define REG6C_GPIOL 0xff + +#define REG87_LEDADD 0x04 + +enum +{ + reg_0x01 = 0, + reg_0x02, + reg_0x03, + reg_0x04, + reg_0x05, + reg_0x06, + reg_0x07, + reg_0x08, + reg_0x09, + reg_0x0a, + + reg_0x10, + reg_0x11, + reg_0x12, + reg_0x13, + reg_0x14, + reg_0x15, + reg_0x16, + reg_0x17, + reg_0x18, + reg_0x19, + reg_0x1a, + reg_0x1b, + reg_0x1c, + reg_0x1d, + reg_0x1e, + reg_0x1f, + reg_0x20, + reg_0x21, + reg_0x22, + reg_0x23, + reg_0x24, + reg_0x25, + reg_0x26, + reg_0x27, + + reg_0x29, + + reg_0x2c, + reg_0x2d, + reg_0x2e, + reg_0x2f, + reg_0x30, + reg_0x31, + reg_0x32, + reg_0x33, + reg_0x34, + reg_0x35, + reg_0x36, + reg_0x37, + reg_0x38, + reg_0x39, + + reg_0x3d, + reg_0x3e, + reg_0x3f, + + reg_0x52, + reg_0x53, + reg_0x54, + reg_0x55, + reg_0x56, + reg_0x57, + reg_0x58, + reg_0x59, + reg_0x5a, + + reg_0x5d, + reg_0x5e, + reg_0x5f, + reg_0x60, + reg_0x61, + reg_0x62, + reg_0x63, + reg_0x64, + reg_0x65, + reg_0x66, + reg_0x67, + reg_0x68, + reg_0x69, + reg_0x6a, + reg_0x6b, + reg_0x6c, + reg_0x6d, + reg_0x6e, + reg_0x6f, + reg_0x70, + reg_0x71, + reg_0x72, + reg_0x73, + reg_0x74, + reg_0x75, + reg_0x76, + reg_0x77, + reg_0x78, + reg_0x79, + reg_0x7a, + reg_0x7b, + reg_0x7c, + reg_0x7d, + reg_0x7e, + reg_0x7f, + reg_0x80, + reg_0x81, + reg_0x82, + reg_0x83, + reg_0x84, + reg_0x85, + reg_0x86, + reg_0x87, + GENESYS_GL841_MAX_REGS +}; diff -Nru sane-backends-1.0.22/backend/genesys_gl843.c sane-backends-1.0.23/backend/genesys_gl843.c --- sane-backends-1.0.22/backend/genesys_gl843.c 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl843.c 2012-08-10 00:33:29.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2010 Stphane Voltz + Copyright (C) 2010-2012 Stphane Voltz This file is part of the SANE package. @@ -42,36 +42,15 @@ If you do not wish that, delete this exception notice. */ +#undef BACKEND_NAME +#define BACKEND_NAME genesys_gl843 + #include "genesys_gl843.h" /**************************************************************************** Low level function ****************************************************************************/ -/** - * decodes and prints content of status (0x41) register - * @param val value read from reg41 - */ -#ifndef UNIT_TESTING -static -#endif - void -print_status (uint8_t val) -{ - char msg[80]; - - sprintf (msg, "%s%s%s%s%s%s%s%s", - val & REG41_PWRBIT ? "PWRBIT " : "", - val & REG41_BUFEMPTY ? "BUFEMPTY " : "", - val & REG41_FEEDFSH ? "FEEDFSH " : "", - val & REG41_SCANFSH ? "SCANFSH " : "", - val & REG41_HOMESNR ? "HOMESNR " : "", - val & REG41_LAMPSTS ? "LAMPSTS " : "", - val & REG41_FEBUSY ? "FEBUSY " : "", - val & REG41_MOTORENB ? "MOTORENB" : ""); - DBG (DBG_info, "status=%s\n", msg); -} - /* ------------------------------------------------------------------------ */ /* Read and write RAM, registers and AFE */ /* ------------------------------------------------------------------------ */ @@ -97,7 +76,8 @@ return status; } -/* Write bulk data (e.g. gamma) */ +/** + * Write bulk data (e.g. gamma or shading data) */ static SANE_Status gl843_bulk_write_data (Genesys_Device * dev, uint8_t addr, uint8_t * data, size_t len) @@ -120,10 +100,12 @@ return status; } - /* TODO check with G4050 that we shouldn't loop at all */ while (len) { - size = len; + if(len>65472) + size=65472; + else + size = len; outdata[0] = BULK_OUT; outdata[1] = BULK_RAM; @@ -156,7 +138,7 @@ } DBG (DBG_io2, - "gl843_bulk_write_data: gamma wrote %lu bytes, %lu remaining\n", + "gl843_bulk_write_data: wrote %lu bytes, %lu remaining\n", (u_long) size, (u_long) (len - size)); len -= size; @@ -460,31 +442,42 @@ return SANE_FALSE; } -/** @get motor profile +/** @get sensor profile * search for the database of motor profiles and get the best one. Each - * profile is at full step and at a reference exposure. Use KV-SS080 table - * by default. - * @param motor_type motor id - * @param exposure exposure time - * @return a pointer to a Motor_Profile struct + * profile is at a specific dpihw. Use first entry of table by default. + * @param sensor_type sensor id + * @param dpi hardware dpi for the scan + * @param flags to select between XPA, XPA+IR or regular scan from OPTICAL_FLAGS_* + * @return a pointer to a Sensor_Profile struct */ -static Motor_Profile *get_motor_profile(int motor_type, int exposure) +static Sensor_Profile *get_sensor_profile(int sensor_type, int dpi, int flags) { - unsigned int i; + unsigned int i, count; int idx; + Sensor_Profile *sp; + if(flags & OPTICAL_FLAG_USE_XPA) + { + sp=xpa_sensors; + count=sizeof(xpa_sensors)/sizeof(Sensor_Profile); + } + else + { + sp=sensors; + count=sizeof(sensors)/sizeof(Sensor_Profile); + } i=0; idx=-1; - while(i=exposure - && motors[i].exposure=dpi + && sp[i].dpimodel->ydpi_values[i]!=0) { - if(dev->model->ydpi_values[i]model->ydpi_values[i]; - } - i++; + DBG (DBG_warn,"%s: using default sensor profile\n",__FUNCTION__); + idx=0; } - return min; -} -static int gl843_slope_table(uint16_t *slope, - int *steps, - int dpi, - int exposure, - int base_dpi, - int step_type, - int factor, - int motor_type) -{ -int sum, i; -uint16_t target,current; -Motor_Profile *profile; - - /* required speed */ - target=((exposure * dpi) / base_dpi)>>step_type; - - /* fill result with target speed */ - for(i=0;i<256*factor;i++) - slope[i]=target; - - profile=get_motor_profile(motor_type,exposure); - - /* use profile to build table */ - sum=0; - i=0; - current=profile->table[0]>>step_type; - while(i<(256*factor) && current>target) - { - slope[i]=current; - sum+=slope[i]; - i++; - current=profile->table[i]>>step_type; - } - - /* align size on step time factor */ - while(i%factor!=0) - { - sum+=slope[i]; - i++; - } - - /* return used steps and acceleration sum */ - *steps=i; - return sum; -} - + return &(sp[idx]); +} /** copy sensor specific settings */ static void -gl843_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi) +gl843_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi,int flags) { Genesys_Register_Set *r; - int i; + Sensor_Profile *sensor; + int i,dpihw; DBGSTART; + dpihw=sanei_genesys_compute_dpihw(dev,dpi); + sensor=get_sensor_profile(dev->model->ccd_type, dpihw, flags); + for (i = 0x06; i < 0x0e; i++) { r = sanei_genesys_get_address (regs, 0x10 + i); if (r) - r->value = dev->sensor.regs_0x10_0x1d[i]; - } - - /* TODO we need to create another data struct - * for CKxMAP and CKSEL */ - /* G4050/G4010 sensor */ - if (dev->model->ccd_type == CCD_G4050) - { - if(dpi<=300) - { - sanei_genesys_write_register (dev, 0x74, 0x00); - sanei_genesys_write_register (dev, 0x75, 0x1c); - sanei_genesys_write_register (dev, 0x76, 0x7f); - } - else if(dpi<=600) - { - sanei_genesys_write_register (dev, 0x74, 0x00); - sanei_genesys_write_register (dev, 0x75, 0x01); - sanei_genesys_write_register (dev, 0x76, 0xff); - } - else /* 800 to 2400 case */ - { - sanei_genesys_write_register (dev, 0x5a, 0x40); - sanei_genesys_write_register (dev, 0x74, 0x0f); - sanei_genesys_write_register (dev, 0x75, 0xff); - sanei_genesys_write_register (dev, 0x76, 0xff); - sanei_genesys_write_register (dev, 0x77, 0x00); - sanei_genesys_write_register (dev, 0x78, 0x01); - sanei_genesys_write_register (dev, 0x7a, 0x00); - sanei_genesys_write_register (dev, 0x7b, 0x01); - sanei_genesys_write_register (dev, 0x7d, 0x90); - sanei_genesys_write_register (dev, 0x80, 0x05); - sanei_genesys_write_register (dev, 0x9e, 0xc0); - } + r->value = sensor->regs_0x10_0x1d[i]; } - for (i = 0; i < 9; i++) { r = sanei_genesys_get_address (regs, 0x52 + i); if (r) - r->value = dev->sensor.regs_0x52_0x5e[i]; + r->value = sensor->regs_0x52_0x5e[i]; + } + + /* specific registers */ + r = sanei_genesys_get_address (regs, 0x0c); + if (r) + { + r->value = sensor->reg0c; + } + r = sanei_genesys_get_address (regs, 0x70); + if (r) + { + r->value = sensor->reg70; + } + r = sanei_genesys_get_address (regs, 0x71); + if (r) + { + r->value = sensor->reg71; + } + r = sanei_genesys_get_address (regs, 0x7d); + if (r) + { + r->value = 0x90; + } + r = sanei_genesys_get_address (regs, 0x9e); + if (r) + { + r->value = sensor->reg9e; + } + /* undocumented register */ + r = sanei_genesys_get_address (regs, 0xaa); + if (r) + { + r->value = sensor->regaa; } - DBG (DBG_proc, "gl843_setup_sensor: completed \n"); + /* CKxMAP */ + sanei_genesys_set_triple(regs,REG_CK1MAP,sensor->ck1map); + sanei_genesys_set_triple(regs,REG_CK3MAP,sensor->ck3map); + sanei_genesys_set_triple(regs,REG_CK4MAP,sensor->ck4map); + + DBGCOMPLETED; } @@ -741,6 +676,18 @@ SETREG (0x71, 0x03); SETREG (0x72, 0x04); SETREG (0x73, 0x05); + + /* CKxMAP */ + SETREG (0x74, 0x00); + SETREG (0x75, 0x00); + SETREG (0x76, 0x3c); + SETREG (0x77, 0x00); + SETREG (0x78, 0x00); + SETREG (0x79, 0x9f); + SETREG (0x7a, 0x00); + SETREG (0x7b, 0x00); + SETREG (0x7c, 0x55); + SETREG (0x7d, 0x00); SETREG (0x7f, 0x00); SETREG (0x80, 0x00); @@ -753,25 +700,38 @@ SETREG (0x87, 0x00); SETREG (0x9d, 0x04); SETREG (0x94, 0xff); + SETREG (0x9e, 0x00); SETREG (0xab, 0x50); + + /* so many time burnt for this register ....*/ + SETREG (0xaa, 0x00); /* G4050 values */ if ((strcmp (dev->model->name, "hewlett-packard-scanjet-g4050") == 0) + || (strcmp (dev->model->name, "hewlett-packard-scanjet-4850c") == 0) || (strcmp (dev->model->name, "hewlett-packard-scanjet-g4010") == 0)) { SETREG (0x03, 0x1d); SETREG (0x05, 0x08); SETREG (0x06, 0xd0); /* SCANMOD=110, PWRBIT and no GAIN4 */ + SETREG (0x06, 0xd8); /* SCANMOD=110, PWRBIT and GAIN4 */ SETREG (0x0a, 0x18); SETREG (0x0b, 0x69); - SETREG (0x5e, 0x6f); + + /* CIS exposure is used for XPA lamp movement */ + SETREG (0x10, 0x2c); + SETREG (0x11, 0x09); + SETREG (0x12, 0x22); + SETREG (0x13, 0xb8); + SETREG (0x14, 0x10); + SETREG (0x15, 0xf0); + SETREG (0x6b, 0xf4); SETREG (0x70, 0x00); SETREG (0x71, 0x02); SETREG (0x72, 0x00); SETREG (0x73, 0x00); - SETREG (0x7d, 0x90); SETREG (0x80, 0x50); SETREG (0x9d, 0x08); @@ -782,7 +742,6 @@ SETREG (0x99, 0x30); SETREG (0x9a, 0x01); SETREG (0x9b, 0x80); - SETREG (0xac, 0x00); } @@ -952,18 +911,11 @@ return SANE_STATUS_GOOD; } -#define MOTOR_FLAG_AUTO_GO_HOME 1 -#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 2 - -#define MOTOR_ACTION_FEED 1 -#define MOTOR_ACTION_GO_HOME 2 -#define MOTOR_ACTION_HOME_FREE 3 - static SANE_Status gl843_init_motor_regs_scan (Genesys_Device * dev, Genesys_Register_Set * reg, - unsigned int scan_exposure_time, + unsigned int exposure, float scan_yres, int scan_step_type, unsigned int scan_lines, @@ -973,24 +925,22 @@ unsigned int flags) { SANE_Status status; - int use_fast_fed; + int use_fast_fed, coeff; unsigned int fast_time; unsigned int slow_time; unsigned int lincnt; uint16_t scan_table[1024]; uint16_t fast_table[1024]; - int scan_steps,fast_steps; + int scan_steps,fast_steps, fast_step_type; unsigned int feedl,factor,dist; Genesys_Register_Set *r; uint32_t z1, z2; DBGSTART; - DBG (DBG_info, "gl843_init_motor_regs_scan : scan_exposure_time=%d, " + DBG (DBG_info, "gl843_init_motor_regs_scan : exposure=%d, " "scan_yres=%g, scan_step_type=%d, scan_lines=%d, scan_dummy=%d, " "feed_steps=%d, scan_power_mode=%d, flags=%x\n", - scan_exposure_time, - scan_yres, - scan_step_type, + exposure, scan_yres, scan_step_type, scan_lines, scan_dummy, feed_steps, scan_power_mode, flags); /* get step multiplier */ @@ -998,16 +948,11 @@ use_fast_fed = 0; - if(scan_yres>=300 && feed_steps>900) + if((scan_yres>=300 && feed_steps>900) || (flags & MOTOR_FLAG_FEED)) use_fast_fed=1; - lincnt=scan_lines; - r = sanei_genesys_get_address (reg, 0x25); - r->value = (lincnt >> 16) & 0xf; - r = sanei_genesys_get_address (reg, 0x26); - r->value = (lincnt >> 8) & 0xff; - r = sanei_genesys_get_address (reg, 0x27); - r->value = lincnt & 0xff; + lincnt=scan_lines; + sanei_genesys_set_triple(reg,REG_LINCNT,lincnt); DBG (DBG_io, "%s: lincnt=%d\n", __FUNCTION__, lincnt); /* compute register 02 value */ @@ -1020,49 +965,63 @@ else r->value &= ~REG02_FASTFED; + /* in case of automatic go home, move until home sensor */ if (flags & MOTOR_FLAG_AUTO_GO_HOME) - r->value |= REG02_AGOHOME; + r->value |= REG02_AGOHOME | REG02_NOTHOME; - if (flags & MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE) + /* disable backtracking */ + if ((flags & MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE) + ||(scan_yres>=2400) + ||(scan_yres>=dev->sensor.optical_res)) r->value |= REG02_ACDCDIS; /* scan and backtracking slope table */ - slow_time=gl843_slope_table(scan_table, - &scan_steps, - scan_yres, - scan_exposure_time, - dev->motor.base_ydpi, - scan_step_type, - factor, - dev->model->motor_type); - RIE(gl843_send_slope_table (dev, SCAN_TABLE, scan_table, scan_steps)); - RIE(gl843_send_slope_table (dev, BACKTRACK_TABLE, scan_table, scan_steps)); - - r = sanei_genesys_get_address (reg, 0x21); - r->value = scan_steps/factor; - - r = sanei_genesys_get_address (reg, 0x24); - r->value = scan_steps/factor; + slow_time=sanei_genesys_slope_table(scan_table, + &scan_steps, + scan_yres, + exposure, + dev->motor.base_ydpi, + scan_step_type, + factor, + dev->model->motor_type, + gl843_motors); + RIE(gl843_send_slope_table (dev, SCAN_TABLE, scan_table, scan_steps*factor)); + RIE(gl843_send_slope_table (dev, BACKTRACK_TABLE, scan_table, scan_steps*factor)); + + /* STEPNO */ + r = sanei_genesys_get_address (reg, REG_STEPNO); + r->value = scan_steps; + + /* FSHDEC */ + r = sanei_genesys_get_address (reg, REG_FSHDEC); + r->value = scan_steps; /* fast table */ - fast_time=gl843_slope_table(fast_table, - &fast_steps, - gl843_get_lowest_ydpi(dev), - scan_exposure_time, - dev->motor.base_ydpi, - scan_step_type, - factor, - dev->model->motor_type); - RIE(gl843_send_slope_table (dev, STOP_TABLE, fast_table, fast_steps)); - RIE(gl843_send_slope_table (dev, FAST_TABLE, fast_table, fast_steps)); - - r = sanei_genesys_get_address (reg, 0x69); - r->value = fast_steps / factor; - /* better stop time */ - r->value = 1; - - r = sanei_genesys_get_address (reg, REG6A); - r->value = fast_steps / factor; + fast_step_type=0; + if(scan_step_type<=fast_step_type) + { + fast_step_type=scan_step_type; + } + fast_time=sanei_genesys_slope_table(fast_table, + &fast_steps, + sanei_genesys_get_lowest_ydpi(dev), + exposure, + dev->motor.base_ydpi, + fast_step_type, + factor, + dev->model->motor_type, + gl843_motors); + RIE(gl843_send_slope_table (dev, STOP_TABLE, fast_table, fast_steps*factor)); + RIE(gl843_send_slope_table (dev, FAST_TABLE, fast_table, fast_steps*factor)); + RIE(gl843_send_slope_table (dev, HOME_TABLE, fast_table, fast_steps*factor)); + + /* FASTNO */ + r = sanei_genesys_get_address (reg, REG_FASTNO); + r->value = fast_steps; + + /* FMOVNO */ + r = sanei_genesys_get_address (reg, REG_FMOVNO); + r->value = fast_steps; /* substract acceleration distance from feedl */ feedl=feed_steps; @@ -1075,45 +1034,36 @@ } DBG (DBG_io2, "%s: acceleration distance=%d\n", __FUNCTION__, dist); - /* get sure when don't insane value */ + /* get sure when don't insane value : XXX STEF XXX in this case we should + * fall back to single table move */ if(distvalue = (feedl >> 16) & 0xf; - r = sanei_genesys_get_address (reg, 0x3e); - r->value = (feedl >> 8) & 0xff; - r = sanei_genesys_get_address (reg, 0x3f); - r->value = feedl & 0xff; + sanei_genesys_set_triple(reg,REG_FEEDL,feedl); DBG (DBG_io, "%s: feedl=%d\n", __FUNCTION__, feedl); /* doesn't seem to matter that much */ sanei_genesys_calculate_zmode2 (use_fast_fed, - scan_exposure_time, + exposure, scan_table, scan_steps, feedl, scan_steps, &z1, &z2); + if(scan_yres>600) + { + z1=0; + z2=0; + } + sanei_genesys_set_triple(reg,REG_Z1MOD,z1); DBG (DBG_info, "gl843_init_motor_regs_scan: z1 = %d\n", z1); - r = sanei_genesys_get_address (reg, REG60); - r->value = ((z1 >> 16) & REG60_Z1MOD); - r = sanei_genesys_get_address (reg, REG61); - r->value = ((z1 >> 8) & REG61_Z1MOD); - r = sanei_genesys_get_address (reg, REG62); - r->value = (z1 & REG62_Z1MOD); + sanei_genesys_set_triple(reg,REG_Z2MOD,z2); DBG (DBG_info, "gl843_init_motor_regs_scan: z2 = %d\n", z2); - r = sanei_genesys_get_address (reg, REG63); - r->value = ((z2 >> 16) & REG63_Z2MOD); - r = sanei_genesys_get_address (reg, REG64); - r->value = ((z2 >> 8) & REG64_Z2MOD); - r = sanei_genesys_get_address (reg, REG65); - r->value = (z2 & REG65_Z2MOD); r = sanei_genesys_get_address (reg, REG1E); r->value &= 0xf0; /* 0 dummy lines */ @@ -1126,177 +1076,137 @@ r->value = 0x3f | (scan_step_type << REG68S_FSTPSEL); /* steps for STOP table */ - r = sanei_genesys_get_address (reg, 0x5f); - r->value = 1; + r = sanei_genesys_get_address (reg, REG_FMOVDEC); + r->value = fast_steps; - /* Vref */ + /* Vref XXX STEF XXX : optical divider or step type ? */ r = sanei_genesys_get_address (reg, 0x80); - r->value = 0x05; /* kv 75,150,300 dpi */ - - DBGCOMPLETED; - return SANE_STATUS_GOOD; -} - -#if 0 -static int -gl843_get_dpihw (Genesys_Device * dev) -{ - Genesys_Register_Set *r; - r = sanei_genesys_get_address (dev->reg, REG05); - if ((r->value & REG05_DPIHW) == REG05_DPIHW_600) - return 600; - if ((r->value & REG05_DPIHW) == REG05_DPIHW_1200) - return 1200; - if ((r->value & REG05_DPIHW) == REG05_DPIHW_2400) - return 2400; - if ((r->value & REG05_DPIHW) == REG05_DPIHW_4800) - return 4800; - return 0; -} -#endif - -/**@brief compute hardware sensor dpi to use - * compute the sensor hardware dpi based on target resolution - */ -static int gl843_compute_dpihw(Genesys_Device *dev, int xres) -{ - switch(dev->model->ccd_type) + r->value = 0x50; + coeff=dev->sensor.optical_res/sanei_genesys_compute_dpihw(dev, scan_yres); + if (dev->model->motor_type == MOTOR_KVSS080) { - case CCD_G4050: - if(xres<=300) + if(coeff>=1) { - return 600; + r->value |= 0x05; } - if(xres<=600) - { - return 1200; - } - if(xres<=1200) - { - return 2400; - } - return dev->sensor.optical_res; - case CCD_KVSS080: - default: - return dev->sensor.optical_res; } + else { + switch(coeff) + { + case 4: + r->value |= 0x0a; + break; + case 2: + r->value |= 0x0f; + break; + case 1: + r->value |= 0x0f; + break; + } + } + + + DBGCOMPLETED; + return SANE_STATUS_GOOD; } + /**@brief compute exposure to use * compute the sensor exposure based on target resolution */ -static int gl843_compute_exposure(Genesys_Device *dev, int xres) +static int gl843_compute_exposure(Genesys_Device *dev, int xres, int flags) { - switch(dev->model->ccd_type) - { - case CCD_G4050: - if(xres<=600) - { - return 8016; - } - return 56064 /* 21376 */; - case CCD_KVSS080: - default: - return 8000; - } -} + Sensor_Profile *sensor; -/**@brief compute motor step type to use - * compute the step type (full, half, quarter, ...) to use based - * on target resolution - * @param dev device description - * @param yres motor resolution - * @return 0 for full step - * 1 for half step - * 2 for quarter step - * 3 for eighth step - */ -static int gl843_compute_step_type(Genesys_Device *dev, int yres) -{ - switch(dev->model->motor_type) - { - case MOTOR_G4050: - if(yres<=1200) - { - return 1; - } - return 2; - case MOTOR_KVSS080: - default: - return 1; - } + sensor=get_sensor_profile(dev->model->ccd_type, xres, flags); + return sensor->exposure; } -#define OPTICAL_FLAG_DISABLE_GAMMA 1 -#define OPTICAL_FLAG_DISABLE_SHADING 2 -#define OPTICAL_FLAG_DISABLE_LAMP 4 -#define OPTICAL_FLAG_ENABLE_LEDADD 8 - /** @brief setup optical related registers * start and pixels are expressed in optical sensor resolution coordinate - * space. To handle odd/even case we double the resolution and - * use only first logival half the sensor whic maps to effective CCD. + * space. + * @param exposure exposure time to use + * @param used_res scanning resolution used, may differ from + * scan's one * @param start logical start pixel coordinate * @param pixels logical number of pixels to use + * @param flags to drive specific settings such no calibration, XPA use ... * @return SANE_STATUS_GOOD if OK */ static SANE_Status gl843_init_optical_regs_scan (Genesys_Device * dev, Genesys_Register_Set * reg, - unsigned int exposure_time, + unsigned int exposure, int used_res, unsigned int start, unsigned int pixels, int channels, int depth, - SANE_Bool half_ccd, int color_filter, int flags) + SANE_Bool half_ccd, + int color_filter, + int flags) { unsigned int words_per_line; unsigned int startx, endx, used_pixels; - unsigned int dpiset, cksel,dpihw, factor; - unsigned int i, bytes; + unsigned int dpiset, dpihw, factor; + unsigned int bytes; + unsigned int tgtime; /**> exposure time multiplier */ + unsigned int cksel; /**> clock per system pixel time in capturing image */ Genesys_Register_Set *r; SANE_Status status; - DBG (DBG_proc, "gl843_init_optical_regs_scan : exposure_time=%d, " + DBG (DBG_proc, "gl843_init_optical_regs_scan : exposure=%d, " "used_res=%d, start=%d, pixels=%d, channels=%d, depth=%d, " "half_ccd=%d, flags=%x\n", - exposure_time, + exposure, used_res, start, pixels, channels, depth, half_ccd, flags); - /* sensor parameters */ - gl843_setup_sensor (dev, reg, used_res); + /* tgtime */ + tgtime=1; + if (dev->model->ccd_type == CCD_G4050 && used_res>2400) + { + tgtime=2; + } + DBG (DBG_io2, "%s: tgtime=%d\n", __FUNCTION__, tgtime); /* to manage high resolution device while keeping good * low resolution scanning speed, we make hardware dpi vary */ - dpihw=gl843_compute_dpihw(dev, used_res); + dpihw=sanei_genesys_compute_dpihw(dev, used_res); factor=dev->sensor.optical_res/dpihw; DBG (DBG_io2, "%s: dpihw=%d (factor=%d)\n", __FUNCTION__, dpihw, factor); + /* sensor parameters */ + gl843_setup_sensor (dev, reg, dpihw, flags); + + /* resolution is divided according to CKSEL which is known once sensor is set up */ r = sanei_genesys_get_address (reg, REG18); cksel= (r->value & REG18_CKSEL)+1; - DBG (DBG_io2, "%s: cksel=%d\n", __FUNCTION__, cksel); dpiset = used_res * cksel; /* start and end coordinate in optical dpi coordinates */ - startx = start/cksel + dev->sensor.dummy_pixel; + startx = (start + dev->sensor.dummy_pixel * tgtime)/cksel; + used_pixels=pixels/cksel; endx = startx + used_pixels; - /* factor correction when used dpihw is not native one */ - if(factor>1) + /* pixel coordinate factor correction when used dpihw is not maximal one */ + startx/=factor; + endx/=factor; + used_pixels=endx-startx; + + /* in case of stagger we have to start at an odd coordinate */ + if ((flags & OPTICAL_FLAG_STAGGER) + &&((startx & 1)==0)) { - startx/=factor; - endx/=factor; - used_pixels=endx-startx; + startx++; + endx++; } status = gl843_set_fe (dev, AFE_SET); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "gl843_init_optical_regs_scan: failed to set frontend: %s\n", + DBG (DBG_error, "%s: failed to set frontend: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } @@ -1304,8 +1214,7 @@ /* enable shading */ r = sanei_genesys_get_address (reg, REG01); r->value &= ~REG01_SCAN; - if ((flags & OPTICAL_FLAG_DISABLE_SHADING) || - (dev->model->flags & GENESYS_FLAG_NO_CALIBRATION)) + if ((flags & OPTICAL_FLAG_DISABLE_SHADING) || (dev->model->flags & GENESYS_FLAG_NO_CALIBRATION)) { r->value &= ~REG01_DVDSET; } @@ -1313,6 +1222,14 @@ { r->value |= REG01_DVDSET; } + if(dpihw>600) + { + r->value |= REG01_SHDAREA; + } + else + { + r->value &= ~REG01_SHDAREA; + } r = sanei_genesys_get_address (reg, REG03); r->value &= ~REG03_AVEENB; @@ -1321,20 +1238,17 @@ else r->value |= REG03_LAMPPWR; - /* exposure times */ - for (i = 0; i < 6; i++) + /* select XPA */ + r->value &= ~REG03_XPASEL; + if (flags & OPTICAL_FLAG_USE_XPA) { - r = sanei_genesys_get_address (reg, 0x10 + i); - if (flags & OPTICAL_FLAG_DISABLE_LAMP) - r->value = 0x01; /* 0x0101 is as off as possible */ - else - r->value = dev->sensor.regs_0x10_0x1d[i]; + r->value |= REG03_XPASEL; } /* BW threshold */ - r = sanei_genesys_get_address (reg, 0x2e); + r = sanei_genesys_get_address (reg, REG2E); r->value = dev->settings.threshold; - r = sanei_genesys_get_address (reg, 0x2f); + r = sanei_genesys_get_address (reg, REG2F); r->value = dev->settings.threshold; /* monochrome / color scan */ @@ -1400,20 +1314,11 @@ else r->value |= REG05_GMMENB; - r = sanei_genesys_get_address (reg, 0x2c); - r->value = HIBYTE (dpiset); - r = sanei_genesys_get_address (reg, 0x2d); - r->value = LOBYTE (dpiset); + sanei_genesys_set_double(reg,REG_DPISET,dpiset); DBG (DBG_io2, "%s: dpiset used=%d\n", __FUNCTION__, dpiset); - r = sanei_genesys_get_address (reg, 0x30); - r->value = HIBYTE (startx); - r = sanei_genesys_get_address (reg, 0x31); - r->value = LOBYTE (startx); - r = sanei_genesys_get_address (reg, 0x32); - r->value = HIBYTE (endx); - r = sanei_genesys_get_address (reg, 0x33); - r->value = LOBYTE (endx); + sanei_genesys_set_double(reg,REG_STRPIXEL,startx/tgtime); + sanei_genesys_set_double(reg,REG_ENDPIXEL,endx/tgtime); /* words(16bit) before gamma, conversion to 8 bit or lineart */ words_per_line = (used_pixels * dpiset) / dpihw; @@ -1427,62 +1332,33 @@ words_per_line *= bytes; } + dev->wpl = words_per_line; dev->bpl = words_per_line; DBG (DBG_io2, "%s: used_pixels=%d\n", __FUNCTION__, used_pixels); DBG (DBG_io2, "%s: pixels =%d\n", __FUNCTION__, pixels); DBG (DBG_io2, "%s: depth =%d\n", __FUNCTION__, depth); - DBG (DBG_io2, "%s: dev->bpl =%lu\n", __FUNCTION__, - (unsigned long) dev->bpl); + DBG (DBG_io2, "%s: dev->bpl =%lu\n", __FUNCTION__, (unsigned long) dev->bpl); + DBG (DBG_io2, "%s: dev->len =%lu\n", __FUNCTION__, (unsigned long)dev->len); + DBG (DBG_io2, "%s: dev->dist =%lu\n", __FUNCTION__, (unsigned long)dev->dist); words_per_line *= channels; - dev->wpl = words_per_line; /* MAXWD is expressed in 2 words unit */ /* nousedspace = (mem_bank_range * 1024 / 256 -1 ) * 4; */ - r = sanei_genesys_get_address (reg, 0x35); - r->value = LOBYTE (HIWORD (words_per_line >> 2)); - r = sanei_genesys_get_address (reg, 0x36); - r->value = HIBYTE (LOWORD (words_per_line >> 2)); - r = sanei_genesys_get_address (reg, 0x37); - r->value = LOBYTE (LOWORD (words_per_line >> 2)); + sanei_genesys_set_triple(reg,REG_MAXWD,(words_per_line)>>1); DBG (DBG_io2, "%s: words_per_line used=%d\n", __FUNCTION__, words_per_line); - r = sanei_genesys_get_address (reg, 0x38); - r->value = HIBYTE (exposure_time); - r = sanei_genesys_get_address (reg, 0x39); - r->value = LOBYTE (exposure_time); - DBG (DBG_io2, "%s: exposure_time used=%d\n", __FUNCTION__, exposure_time); + sanei_genesys_set_double(reg,REG_LPERIOD,exposure/tgtime); + DBG (DBG_io2, "%s: exposure used=%d\n", __FUNCTION__, exposure/tgtime); - r = sanei_genesys_get_address (reg, 0x34); - r->value = dev->sensor.dummy_pixel; + r = sanei_genesys_get_address (reg, REG_DUMMY); + r->value = dev->sensor.dummy_pixel * tgtime; - DBG (DBG_proc, "gl843_init_optical_regs_scan : completed. \n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } - -static int -gl843_get_led_exposure (Genesys_Device * dev) -{ - int d, r, g, b, m; - if (!dev->model->is_cis) - return 0; - d = dev->reg[reg_0x19].value; - r = dev->sensor.regs_0x10_0x1d[1] | (dev->sensor.regs_0x10_0x1d[0] << 8); - g = dev->sensor.regs_0x10_0x1d[3] | (dev->sensor.regs_0x10_0x1d[2] << 8); - b = dev->sensor.regs_0x10_0x1d[5] | (dev->sensor.regs_0x10_0x1d[4] << 8); - - m = r; - if (m < g) - m = g; - if (m < b) - m = b; - - return m + d; -} - - /* set up registers for an actual scan * * this function sets up the scanner to scan in normal or single line mode @@ -1501,15 +1377,17 @@ float lines, unsigned int depth, unsigned int channels, - int color_filter, unsigned int flags) + int scan_mode, + int color_filter, + unsigned int flags) { int used_res; int start, used_pixels; int bytes_per_line; int move; - unsigned int lincnt; - unsigned int oflags; /**> optical flags */ - int exposure_time; + unsigned int lincnt; /**> line count to scan */ + unsigned int oflags, mflags; /**> optical and motor flags */ + int exposure; int stagger; int slope_dpi = 0; @@ -1533,36 +1411,7 @@ "Flags : %x\n\n", xres, yres, lines, pixels, startx, starty, depth, channels, flags); -/* -results: - -for scanner: -half_ccd -start -end -dpiset -exposure_time -dummy -z1 -z2 - -for ordered_read: - dev->words_per_line - dev->read_factor - dev->requested_buffer_size - dev->read_buffer_size - dev->read_pos - dev->read_bytes_in_buffer - dev->read_bytes_left - dev->max_shift - dev->stagger - -independent of our calculated values: - dev->total_bytes_read - dev->bytes_to_read - */ -/* half_ccd */ /* we have 2 domains for ccd: xres below or above half ccd max dpi */ if (dev->sensor.optical_res < 2 * xres || !(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE)) @@ -1579,24 +1428,42 @@ if (half_ccd) optical_res /= 2; - /* stagger */ - if ((!half_ccd) && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) - stagger = (4 * yres) / dev->motor.base_ydpi; - else - stagger = 0; - DBG (DBG_info, "gl843_init_scan_regs : stagger=%d lines\n", stagger); + /* stagger starting at 2400, and not applied for calibration */ + stagger = 0; + if ( (yres>1200) + && ((flags & SCAN_FLAG_IGNORE_LINE_DISTANCE)==0) + && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) + { + stagger = (4 * yres) / dev->motor.base_ydpi; + } + DBG (DBG_info, "%s : stagger=%d lines\n", __FUNCTION__, stagger); + + /* we enable true gray for cis scanners only, and just when doing + * scan since color calibration is OK for this mode + */ + oflags = 0; + if (flags & SCAN_FLAG_DISABLE_SHADING) + oflags |= OPTICAL_FLAG_DISABLE_SHADING; + if (flags & SCAN_FLAG_DISABLE_GAMMA) + oflags |= OPTICAL_FLAG_DISABLE_GAMMA; + if (flags & SCAN_FLAG_DISABLE_LAMP) + oflags |= OPTICAL_FLAG_DISABLE_LAMP; + if (flags & SCAN_FLAG_CALIBRATION) + oflags |= OPTICAL_FLAG_DISABLE_DOUBLE; + if(stagger) + oflags |= OPTICAL_FLAG_STAGGER; + if (flags & SCAN_FLAG_USE_XPA) + oflags |= OPTICAL_FLAG_USE_XPA; - /** @brief compute used resolution - * the sensor if mapped only to odd pixels. So we double the optical - * resolution and use first half - * */ + /** @brief compute used resolution */ if (flags & SCAN_FLAG_USE_OPTICAL_RES) { used_res = optical_res; } else { - /* resolution is choosen from a fixed list and can be used directly */ + /* resolution is choosen from a fixed list and can be used directly + * unless we have ydpi higher than sensor's maximum one */ if(xres>optical_res) used_res=optical_res; else @@ -1607,14 +1474,9 @@ /* pixels are allways given at full optical resolution */ /* use detected left margin and fixed value */ /* start */ - /* add x coordinates */ start = startx; - - if (stagger > 0) - start |= 1; - + /* compute correct pixels number */ - /* pixels */ used_pixels = (pixels * optical_res) / xres; DBG (DBG_info, "%s: used_pixels=%d\n", __FUNCTION__, used_pixels); @@ -1627,6 +1489,7 @@ used_pixels++; dummy = 0; + /* dummy = 1; XXX STEF XXX */ /* slope_dpi */ /* cis color scan is effectively a gray scan with 3 gray lines per color line and a FILTER of 0 */ @@ -1634,71 +1497,72 @@ slope_dpi = yres * channels; else slope_dpi = yres; + slope_dpi = slope_dpi * (1 + dummy); /* scan_step_type */ - scan_step_type = gl843_compute_step_type(dev, slope_dpi); - exposure_time = gl843_compute_exposure (dev, used_res); + if(flags & SCAN_FLAG_FEEDING) + { + exposure=gl843_compute_exposure (dev, sanei_genesys_get_lowest_ydpi(dev), oflags); + scan_step_type=sanei_genesys_compute_step_type (gl843_motors, dev->model->motor_type, exposure); + } + else + { + exposure = gl843_compute_exposure (dev, used_res, oflags); + scan_step_type = sanei_genesys_compute_step_type(gl843_motors, dev->model->motor_type, exposure); + } - DBG (DBG_info, "gl843_init_scan_regs : exposure_time=%d pixels\n", - exposure_time); - DBG (DBG_info, "gl843_init_scan_regs : scan_step_type=%d\n", - scan_step_type); + DBG (DBG_info, "%s : exposure=%d pixels\n", __FUNCTION__, exposure); + DBG (DBG_info, "%s : scan_step_type=%d\n", __FUNCTION__, scan_step_type); -/*** optical parameters ***/ + /*** optical parameters ***/ /* in case of dynamic lineart, we use an internal 8 bit gray scan * to generate 1 lineart data */ - if ((flags & SCAN_FLAG_DYNAMIC_LINEART) - && (dev->settings.scan_mode == SCAN_MODE_LINEART)) + if ((flags & SCAN_FLAG_DYNAMIC_LINEART) && (scan_mode == SCAN_MODE_LINEART)) { depth = 8; } + /* no 16 bit gamma for this ASIC */ if (depth == 16) - flags |= SCAN_FLAG_DISABLE_GAMMA; - - /* we enable true gray for cis scanners only, and just when doing - * scan since color calibration is OK for this mode - */ - oflags = 0; - if (flags & SCAN_FLAG_DISABLE_SHADING) - oflags |= OPTICAL_FLAG_DISABLE_SHADING; - if (flags & SCAN_FLAG_DISABLE_GAMMA) - oflags |= OPTICAL_FLAG_DISABLE_GAMMA; - if (flags & SCAN_FLAG_DISABLE_LAMP) - oflags |= OPTICAL_FLAG_DISABLE_LAMP; + { + flags |= SCAN_FLAG_DISABLE_GAMMA; + oflags |= OPTICAL_FLAG_DISABLE_GAMMA; + } /* now _LOGICAL_ optical values used are known, setup registers */ status = gl843_init_optical_regs_scan (dev, reg, - exposure_time, + exposure, used_res, start, used_pixels, channels, depth, - half_ccd, color_filter, oflags); - + half_ccd, + color_filter, + oflags); if (status != SANE_STATUS_GOOD) return status; -/*** motor parameters ***/ + /*** motor parameters ***/ -/* max_shift */ - /* scanned area must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1 && !(flags & SCAN_FLAG_IGNORE_LINE_DISTANCE)) + /* it seems base_dpi of the G4050 motor is changed above 600 dpi*/ + if (dev->model->motor_type == MOTOR_G4050 && yres>600) { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = (max_shift * yres) / dev->motor.base_ydpi; + dev->ld_shift_r = (dev->model->ld_shift_r*3800)/dev->motor.base_ydpi; + dev->ld_shift_g = (dev->model->ld_shift_g*3800)/dev->motor.base_ydpi; + dev->ld_shift_b = (dev->model->ld_shift_b*3800)/dev->motor.base_ydpi; } else { - max_shift = 0; + dev->ld_shift_r = dev->model->ld_shift_r; + dev->ld_shift_g = dev->model->ld_shift_g; + dev->ld_shift_b = dev->model->ld_shift_b; } + /* max_shift */ + /* scanned area must be enlarged by max color shift needed */ + max_shift=sanei_genesys_compute_max_shift(dev,channels,yres,flags); + /* lines to scan */ lincnt = lines + max_shift + stagger; @@ -1706,16 +1570,25 @@ move = starty; DBG (DBG_info, "gl843_init_scan_regs: move=%d steps\n", move); - status = gl843_init_motor_regs_scan (dev, - reg, - exposure_time, - slope_dpi, - scan_step_type, - dev->model->is_cis ? lincnt * channels : lincnt, - dummy, - move, - scan_power_mode, - (flags & SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE) ? MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE : 0); + + mflags=0; + if(flags & SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE) + mflags|=MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE; + if(flags & SCAN_FLAG_FEEDING) + mflags|=MOTOR_FLAG_FEED; + if (flags & SCAN_FLAG_USE_XPA) + mflags |= MOTOR_FLAG_USE_XPA; + + status = gl843_init_motor_regs_scan (dev, + reg, + exposure, + slope_dpi, + scan_step_type, + dev->model->is_cis ? lincnt * channels : lincnt, + dummy, + move, + scan_power_mode, + mflags); if (status != SANE_STATUS_GOOD) return status; @@ -1763,7 +1636,7 @@ dev->current_setup.lines = lincnt; dev->current_setup.depth = depth; dev->current_setup.channels = channels; - dev->current_setup.exposure_time = exposure_time; + dev->current_setup.exposure_time = exposure; dev->current_setup.xres = used_res; dev->current_setup.yres = yres; dev->current_setup.half_ccd = half_ccd; @@ -1771,7 +1644,7 @@ dev->current_setup.max_shift = max_shift + stagger; dev->total_bytes_read = 0; - if (depth == 1 || dev->settings.scan_mode == SCAN_MODE_LINEART) + if (depth == 1) dev->total_bytes_to_read = ((dev->settings.pixels * dev->settings.lines) / 8 + (((dev->settings.pixels * dev->settings.lines) % 8) ? 1 : 0)) * @@ -1804,17 +1677,17 @@ int used_res; int used_pixels; unsigned int lincnt; - int exposure_time; + int exposure; int stagger; int slope_dpi = 0; int dummy = 0; int scan_step_type = 1; - int scan_power_mode = 0; int max_shift; SANE_Bool half_ccd; /* false: full CCD res is used, true, half max CCD res is used */ int optical_res; + int oflags; DBG (DBG_info, "gl843_calculate_current_setup settings:\n" @@ -1828,14 +1701,14 @@ dev->settings.tl_x, dev->settings.tl_y, dev->settings.scan_mode); /* channels */ - if (dev->settings.scan_mode == 4) /* single pass color */ + if (dev->settings.scan_mode == SCAN_MODE_COLOR) /* single pass color */ channels = 3; else channels = 1; /* depth */ depth = dev->settings.depth; - if (dev->settings.scan_mode == 0) + if (dev->settings.scan_mode == SCAN_MODE_LINEART) depth = 1; /* start */ @@ -1843,6 +1716,12 @@ start += dev->settings.tl_x; start = (start * dev->sensor.optical_res) / MM_PER_INCH; + /* optical flags */ + oflags=0; + if(dev->settings.scan_method==SCAN_METHOD_TRANSPARENCY) + { + oflags=OPTICAL_FLAG_USE_XPA; + } xres = dev->settings.xres; yres = dev->settings.yres; @@ -1908,35 +1787,30 @@ else slope_dpi = yres; - /* scan_step_type */ - scan_step_type = gl843_compute_step_type(dev, yres); - - exposure_time = sanei_genesys_exposure_time2 (dev, - slope_dpi, - scan_step_type, - start + used_pixels + 258, - gl843_get_led_exposure (dev), - scan_power_mode); + /* exposure */ + exposure = gl843_compute_exposure (dev, used_res, oflags); - DBG (DBG_info, "%s : exposure_time=%d pixels\n", __FUNCTION__, exposure_time); + /* scan_step_type */ + scan_step_type = sanei_genesys_compute_step_type(gl843_motors, dev->model->motor_type, exposure); + DBG (DBG_info, "%s : exposure=%d pixels\n", __FUNCTION__, exposure); -/* max_shift */ - /* scanned area must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1) + /* it seems base_dpi of the G4050 motor is changed above 600 dpi*/ + if (dev->model->motor_type == MOTOR_G4050 && yres>600) { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = (max_shift * yres) / dev->motor.base_ydpi; + dev->ld_shift_r = (dev->model->ld_shift_r*3800)/dev->motor.base_ydpi; + dev->ld_shift_g = (dev->model->ld_shift_g*3800)/dev->motor.base_ydpi; + dev->ld_shift_b = (dev->model->ld_shift_b*3800)/dev->motor.base_ydpi; } else { - max_shift = 0; + dev->ld_shift_r = dev->model->ld_shift_r; + dev->ld_shift_g = dev->model->ld_shift_g; + dev->ld_shift_b = dev->model->ld_shift_b; } + /* scanned area must be enlarged by max color shift needed */ + max_shift=sanei_genesys_compute_max_shift(dev,channels,yres,0); + /* lincnt */ lincnt = lines + max_shift + stagger; @@ -1945,7 +1819,7 @@ dev->current_setup.lines = lincnt; dev->current_setup.depth = depth; dev->current_setup.channels = channels; - dev->current_setup.exposure_time = exposure_time; + dev->current_setup.exposure_time = exposure; dev->current_setup.xres = used_res; dev->current_setup.yres = yres; dev->current_setup.half_ccd = half_ccd; @@ -1984,30 +1858,26 @@ { Genesys_Register_Set *r; int i; + uint8_t val; + val = sanei_genesys_read_reg_from_set (regs, REG03); if (set) { - sanei_genesys_set_reg_from_set (regs, 0x03, - sanei_genesys_read_reg_from_set (regs, - 0x03) - | REG03_LAMPPWR); - + val |= REG03_LAMPPWR; + sanei_genesys_set_reg_from_set (regs, REG03, val); for (i = 0; i < 6; i++) { - r = sanei_genesys_get_address (dev->calib_reg, 0x10 + i); + r = sanei_genesys_get_address (regs, 0x10 + i); r->value = dev->sensor.regs_0x10_0x1d[i]; } } else { - sanei_genesys_set_reg_from_set (regs, 0x03, - sanei_genesys_read_reg_from_set (regs, - 0x03) - & ~REG03_LAMPPWR); - + val &= ~REG03_LAMPPWR; + sanei_genesys_set_reg_from_set (regs, REG03, val); for (i = 0; i < 6; i++) { - r = sanei_genesys_get_address (dev->calib_reg, 0x10 + i); + r = sanei_genesys_get_address (regs, 0x10 + i); r->value = 0x00; } } @@ -2077,7 +1947,7 @@ status = sanei_genesys_get_status (dev, &val); if (DBG_LEVEL >= DBG_io) { - print_status (val); + sanei_genesys_print_status (val); } val40 = 0; @@ -2106,8 +1976,7 @@ status = sanei_genesys_write_register (dev, REG01, val); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "end_scan: failed to write register 01: %s\n", + DBG (DBG_error, "%s: failed to write register 01: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } @@ -2119,7 +1988,7 @@ status = sanei_genesys_get_status (dev, &val); if (DBG_LEVEL >= DBG_io) { - print_status (val); + sanei_genesys_print_status (val); } val40 = 0; status = sanei_genesys_read_register (dev, 0x40, &val40); @@ -2326,21 +2195,132 @@ return SANE_STATUS_GOOD; } +/** @brief disable XPA slider motor + * toggle gpios to switch disble XPA slider motor + * @param dev device to set up + */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl843_xpa_motor_off(Genesys_Device *dev) +{ + uint8_t val; + SANE_Status status=SANE_STATUS_GOOD; + + DBGSTART; + + /* unset GPOADF */ + RIE (sanei_genesys_read_register (dev, REG6B, &val)); + val &= ~REG6B_GPOADF; + RIE (sanei_genesys_write_register (dev, REG6B, val)); + + RIE (sanei_genesys_read_register (dev, REGA8, &val)); + val |= REGA8_GPO27; + RIE (sanei_genesys_write_register (dev, REGA8, val)); + + RIE (sanei_genesys_read_register (dev, REGA9, &val)); + val &= ~REGA9_GPO31; + RIE (sanei_genesys_write_register (dev, REGA9, val)); + + DBGCOMPLETED; + return status; +} + + +/** @brief enable XPA slider motor + * toggle gpios to switch enable XPA slider motor + * @param dev device to set up + */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl843_xpa_motor_on(Genesys_Device *dev) +{ + uint8_t val; + SANE_Status status=SANE_STATUS_GOOD; + + DBGSTART; + + /* set MULTFILM et GPOADF */ + RIE (sanei_genesys_read_register (dev, REG6B, &val)); + val |=REG6B_MULTFILM|REG6B_GPOADF; + RIE (sanei_genesys_write_register (dev, REG6B, val)); + + RIE (sanei_genesys_read_register (dev, REG6C, &val)); + val &= ~REG6C_GPIO15; + RIE (sanei_genesys_write_register (dev, REG6C, val)); + + /* Motor power ? No move at all without this one */ + RIE (sanei_genesys_read_register (dev, REGA6, &val)); + val |= REGA6_GPIO20; + RIE (sanei_genesys_write_register(dev,REGA6,val)); + + RIE (sanei_genesys_read_register (dev, REGA8, &val)); + val &= ~REGA8_GPO27; + RIE (sanei_genesys_write_register (dev, REGA8, val)); + + RIE (sanei_genesys_read_register (dev, REGA9, &val)); + val |= REGA9_GPO32|REGA9_GPO31; + RIE (sanei_genesys_write_register (dev, REGA9, val)); + + DBGCOMPLETED; + return status; +} + + +/** @brief light XPA lamp + * toggle gpios to switch off regular lamp and light on the + * XPA light + * @param dev device to set up + */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl843_xpa_lamp_on(Genesys_Device *dev) +{ + uint8_t val; + SANE_Status status=SANE_STATUS_GOOD; + + DBGSTART; + + /* REGA6 */ + RIE(sanei_genesys_read_register(dev, REGA6, &val)); + + /* cut regular lamp power */ + val &= ~(REGA6_GPIO24|REGA6_GPIO23); + + /* set XPA lamp power */ + val |= REGA6_GPIO22 | REGA6_GPIO21 | REGA6_GPIO19; + + RIE(sanei_genesys_write_register(dev, REGA6, val)); + + RIE(sanei_genesys_read_register(dev, REGA7, &val)); + val|=REGA7_GPOE24; /* lamp 1 off GPOE 24 */ + val|=REGA7_GPOE23; /* lamp 2 off GPOE 23 */ + val|=REGA7_GPOE22; /* full XPA lamp power */ + RIE(sanei_genesys_write_register(dev, REGA7, val)); + + DBGCOMPLETED; + return status; +} + /* Send the low-level scan command */ -/* todo : is this that useful ? */ #ifndef UNIT_TESTING static #endif - SANE_Status +SANE_Status gl843_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg, SANE_Bool start_motor) { SANE_Status status; - uint8_t val; + uint8_t val,r03; + uint16_t dpiset, dpihw; DBGSTART; - if (reg == NULL) - return SANE_STATUS_INVAL; + + /* get back the target dpihw */ + sanei_genesys_get_double (reg, REG_DPISET, &dpiset); + dpihw = sanei_genesys_compute_dpihw (dev, dpiset); /* set up GPIO for scan */ /* KV case */ @@ -2349,20 +2329,46 @@ RIE (sanei_genesys_write_register (dev, REGA9, 0x00)); RIE (sanei_genesys_write_register (dev, REGA6, 0xf6)); /* blinking led */ - RIE(sanei_genesys_write_register(dev,0x7e,0x04)); + RIE (sanei_genesys_write_register (dev, 0x7e, 0x04)); } if (dev->model->gpo_type == GPO_G4050) { - RIE (sanei_genesys_write_register (dev, REGA6, 0x44)); RIE (sanei_genesys_write_register (dev, REGA7, 0xfe)); RIE (sanei_genesys_write_register (dev, REGA8, 0x3e)); RIE (sanei_genesys_write_register (dev, REGA9, 0x06)); + switch (dpihw) + { + case 1200: + case 2400: + case 4800: + RIE (sanei_genesys_write_register (dev, REG6C, 0x60)); + RIE (sanei_genesys_write_register (dev, REGA6, 0x46)); + break; + default: /* 600 dpi case */ + RIE (sanei_genesys_write_register (dev, REG6C, 0x20)); + RIE (sanei_genesys_write_register (dev, REGA6, 0x44)); + } + + /* turn on XPA lamp if XPA is selected and lamp power on*/ + r03 = sanei_genesys_read_reg_from_set (reg, REG03); + if ((r03 & REG03_XPASEL) && (r03 & REG03_LAMPPWR)) + { + RIE(gl843_xpa_lamp_on(dev)); + } + + /* enable XPA lamp motor */ + if (r03 & REG03_XPASEL) + { + RIE(gl843_xpa_motor_on(dev)); + } + /* blinking led */ - RIE(sanei_genesys_write_register(dev,0x7e,0x01)); + RIE (sanei_genesys_write_register (dev, REG7E, 0x01)); } /* clear scan and feed count */ - RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT)); + RIE (sanei_genesys_write_register + (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT)); /* enable scan and motor */ RIE (sanei_genesys_read_register (dev, REG01, &val)); @@ -2392,6 +2398,7 @@ SANE_Bool check_stop) { SANE_Status status; + uint8_t val; DBG (DBG_proc, "gl843_end_scan (check_stop = %d)\n", check_stop); if (reg == NULL) @@ -2400,6 +2407,21 @@ /* post scan gpio */ RIE(sanei_genesys_write_register(dev,0x7e,0x00)); + /* turn off XPA lamp if XPA is selected and lamp power on*/ + val = sanei_genesys_read_reg_from_set (reg, REG03); + if (val & (REG03_XPASEL|REG03_LAMPPWR)) + { + sanei_genesys_read_register (dev, REGA6, &val); + + /* switch on regular lamp */ + val |= 0x40; + + /* no XPA lamp power (2 bits for level: __11 ____) */ + val &= ~0x30; + + RIE (sanei_genesys_write_register (dev, REGA6, val)); + } + if (dev->model->is_sheetfed == SANE_TRUE) { status = SANE_STATUS_GOOD; @@ -2420,6 +2442,86 @@ return status; } +/** @brief park XPA lamp + * park the XPA lamp if needed + */ +static SANE_Status gl843_park_xpa_lamp (Genesys_Device * dev) +{ + Genesys_Register_Set local_reg[GENESYS_GL843_MAX_REGS]; + SANE_Status status; + Genesys_Register_Set *r; + uint8_t val; + int loop = 0; + + DBGSTART; + + /* copy scan settings */ + memset (local_reg, 0, sizeof (local_reg)); + memcpy (local_reg, dev->reg, GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set)); + + /* set a huge feedl and reverse direction */ + sanei_genesys_set_triple(local_reg,REG_FEEDL,0xbdcd); + + /* clear scan and feed count */ + RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT)); + + /* set up for reverse and no scan */ + r = sanei_genesys_get_address (local_reg, REG02); + r->value |= REG02_MTRREV; + r = sanei_genesys_get_address (local_reg, REG01); + r->value &= ~REG01_SCAN; + + /* write to scanner and start action */ + RIE (gl843_bulk_write_register (dev, local_reg, GENESYS_GL843_MAX_REGS)); + RIE (gl843_xpa_motor_on(dev)); + status = gl843_start_action (dev); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, "%s: failed to start motor: %s\n",__FUNCTION__, sane_strstatus (status)); + gl843_stop_action (dev); + /* restore original registers */ + gl843_bulk_write_register (dev, dev->reg, GENESYS_GL843_MAX_REGS); + return status; + } + + while (loop < 600) /* do not wait longer then 60 seconds */ + { + status = sanei_genesys_get_status (dev, &val); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, + "%s: failed to read home sensor: %s\n",__FUNCTION__, + sane_strstatus (status)); + return status; + } + if (DBG_LEVEL >= DBG_io2) + { + sanei_genesys_print_status (val); + } + + if (val & REG41_HOMESNR) /* home sensor */ + { + DBG (DBG_info, "%s: reached home position\n",__FUNCTION__); + DBG (DBG_proc, "%s: finished\n",__FUNCTION__); + + /* clear GPOADF to avoid reparking again */ + sanei_genesys_read_register (dev, REG6B, &val); + val &= ~REG6B_GPOADF; + sanei_genesys_write_register (dev, REG6B, val); + + /* disable XPA slider motor */ + gl843_xpa_motor_off(dev); + return SANE_STATUS_GOOD; + } + usleep (100000); /* sleep 100 ms */ + ++loop; + } + + /* we are not parked here.... should we fail ? */ + DBG (DBG_info, "%s: XPA lamp is not parked\n", __FUNCTION__); + DBGCOMPLETED; + return SANE_STATUS_GOOD; +} /** @brief Moves the slider to the home (top) position slowly * */ @@ -2438,9 +2540,30 @@ DBG (DBG_proc, "gl843_slow_back_home (wait_until_home = %d)\n", wait_until_home); - usleep (100000); /* sleep 100 ms */ + if (dev->model->gpo_type == GPO_G4050) + { + /* test if we need to park XPA lamp, we check GPOADF */ + RIE (sanei_genesys_read_register (dev, REG6B, &val)); + if(val & REG6B_GPOADF) + { + RIE(gl843_park_xpa_lamp(dev)); + } + } + + /* regular slow back home */ dev->scanhead_position_in_steps = 0; + + /* first read gives HOME_SENSOR true */ + status = sanei_genesys_get_status (dev, &val); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, "%s: failed to read home sensor: %s\n", __FUNCTION__, sane_strstatus (status)); + return status; + } + usleep (100000); /* sleep 100 ms */ + + /* second is reliable */ status = sanei_genesys_get_status (dev, &val); if (status != SANE_STATUS_GOOD) { @@ -2451,44 +2574,34 @@ } if (DBG_LEVEL >= DBG_io) { - print_status (val); + sanei_genesys_print_status (val); } - if (val & REG41_HOMESNR) /* is sensor at home? */ + if (val & HOMESNR) /* is sensor at home? */ { - DBG (DBG_info, "gl843_slow_back_home: already at home, completed\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } memset (local_reg, 0, sizeof (local_reg)); - - memcpy (local_reg, dev->reg, - GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set)); - resolution=gl843_get_lowest_ydpi(dev); + memcpy (local_reg, dev->reg, GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set)); + resolution=sanei_genesys_get_lowest_ydpi(dev); gl843_init_scan_regs (dev, local_reg, resolution, resolution, 100, - 100, + 40000, 100, 100, 8, - 3, + 1, + SCAN_MODE_LINEART, dev->settings.color_filter, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | + SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE | SCAN_FLAG_IGNORE_LINE_DISTANCE); - gl843_init_motor_regs_scan (dev, - local_reg, - gl843_compute_exposure (dev, resolution), - resolution, - gl843_compute_step_type(dev, resolution), - 1, - 1, - 30000, /* feed steps */ - 0, - 0); /* clear scan and feed count */ RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT)); @@ -2526,6 +2639,10 @@ sane_strstatus (status)); return status; } + if (DBG_LEVEL >= DBG_io2) + { + sanei_genesys_print_status (val); + } if (val & REG41_HOMESNR) /* home sensor */ { @@ -2544,8 +2661,8 @@ return SANE_STATUS_IO_ERROR; } - DBG (DBG_info, "gl843_slow_back_home: scanhead is still moving\n"); - DBG (DBG_proc, "gl843_slow_back_home: finished\n"); + DBG (DBG_info, "%s: scanhead is still moving\n", __FUNCTION__); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -2572,8 +2689,18 @@ /* sets for a 200 lines * 600 pixels */ /* normal scan with no shading */ - status = gl843_init_scan_regs (dev, local_reg, dpi, dpi, 0, 0, /*we should give a small offset here~60 steps */ - 600, dev->model->search_lines, 8, 1, 1, /*green */ + status = gl843_init_scan_regs (dev, + local_reg, + dpi, + dpi, + 0, + 0, /*we should give a small offset here~60 steps */ + 600, + dev->model->search_lines, + 8, + 1, + SCAN_MODE_GRAY, + 1, /*green */ SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | SCAN_FLAG_IGNORE_LINE_DISTANCE | @@ -2668,7 +2795,6 @@ SANE_Status status; uint8_t channels; uint8_t cksel; - Genesys_Register_Set *r; DBGSTART; cksel = (dev->calib_reg[reg_0x18].value & REG18_CKSEL) + 1; /* clock speed = 1..4 clocks */ @@ -2685,10 +2811,12 @@ dev->settings.yres, 0, 0, + /* XXX STEF XXX dpi instead of pixels !*/ dev->sensor.optical_res / cksel, 20, 16, channels, + dev->settings.scan_mode, dev->settings.color_filter, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | @@ -2701,15 +2829,13 @@ sane_strstatus (status)); return status; } - r = sanei_genesys_get_address (dev->calib_reg, REG02); - r->value &= ~REG02_MTRPWR; + gl843_set_motor_power (dev->calib_reg, SANE_FALSE); DBG (DBG_info, "gl843_init_register_for_coarse_calibration: optical sensor res: %d dpi, actual res: %d\n", dev->sensor.optical_res / cksel, dev->settings.xres); - status = - gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS); + status = gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -2722,23 +2848,102 @@ return SANE_STATUS_GOOD; } +/** @brief moves the slider to steps at motor base dpi + * @param dev device to work on + * @param steps number of steps to move + * */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status +gl843_feed (Genesys_Device * dev, unsigned int steps) +{ + Genesys_Register_Set local_reg[GENESYS_GL843_MAX_REGS]; + SANE_Status status; + Genesys_Register_Set *r; + float resolution; + uint8_t val; + + DBGSTART; + + /* prepare local registers */ + memset (local_reg, 0, sizeof (local_reg)); + memcpy (local_reg, dev->reg, GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set)); + + resolution=sanei_genesys_get_lowest_ydpi(dev); + gl843_init_scan_regs (dev, + local_reg, + resolution, + resolution, + 0, + steps, + 100, + 3, + 8, + 3, + SCAN_MODE_COLOR, + 0, + SCAN_FLAG_DISABLE_SHADING | + SCAN_FLAG_DISABLE_GAMMA | + SCAN_FLAG_FEEDING | + SCAN_FLAG_IGNORE_LINE_DISTANCE); + + /* clear scan and feed count */ + RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT)); + RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRMCNT)); + + /* set up for no scan */ + r = sanei_genesys_get_address (local_reg, REG01); + r->value &= ~REG01_SCAN; + + /* send registers */ + RIE (gl843_bulk_write_register (dev, local_reg, GENESYS_GL843_MAX_REGS)); + + status = gl843_start_action (dev); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, "%s: failed to start motor: %s\n", __FUNCTION__, sane_strstatus (status)); + gl843_stop_action (dev); + + /* restore original registers */ + gl843_bulk_write_register (dev, dev->reg, GENESYS_GL843_MAX_REGS); + return status; + } + + /* wait until feed count reaches the required value, but do not + * exceed 30s */ + do + { + status = sanei_genesys_get_status (dev, &val); + } + while (status == SANE_STATUS_GOOD && !(val & FEEDFSH)); + + DBGCOMPLETED; + return SANE_STATUS_GOOD; +} + /* init registers for shading calibration */ +/* shading calibration is done at dpihw */ static SANE_Status gl843_init_regs_for_shading (Genesys_Device * dev) { SANE_Status status; - int move,resolution; + int move, resolution, dpihw, factor; + uint16_t strpixel; DBGSTART; /* initial calibration reg values */ - memcpy (dev->calib_reg, dev->reg, - GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set)); + memcpy (dev->calib_reg, dev->reg, GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set)); dev->calib_channels = 3; - dev->calib_pixels = dev->sensor.sensor_pixels; - resolution=gl843_compute_dpihw(dev,dev->settings.xres); + dev->calib_lines = dev->model->shading_lines; + dpihw=sanei_genesys_compute_dpihw(dev,dev->settings.xres); + factor=dev->sensor.optical_res/dpihw; + resolution=dpihw; + dev->calib_resolution = resolution; + dev->calib_pixels = dev->sensor.sensor_pixels/factor; /* distance to move to reach white target */ move = SANE_UNFIX (dev->model->y_offset_calib); @@ -2751,9 +2956,10 @@ 0, move, dev->calib_pixels, - dev->model->shading_lines, + dev->calib_lines, 16, dev->calib_channels, + dev->settings.scan_mode, dev->settings.color_filter, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | @@ -2768,10 +2974,11 @@ return status; } - dev->scanhead_position_in_steps += dev->model->shading_lines + move; + dev->scanhead_position_in_steps += dev->calib_lines + move; + sanei_genesys_get_double(dev->calib_reg,REG_STRPIXEL,&strpixel); + DBG (DBG_info, "%s: STRPIXEL=%d\n", __FUNCTION__, strpixel); - status = - gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS); + status = gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -2853,7 +3060,10 @@ dev->settings.pixels, dev->settings.lines, depth, - channels, dev->settings.color_filter, flags); + channels, + dev->settings.scan_mode, + dev->settings.color_filter, + flags); if (status != SANE_STATUS_GOOD) return status; @@ -3001,6 +3211,7 @@ 1, depth, channels, + SCAN_MODE_COLOR, dev->settings.color_filter, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | @@ -3151,18 +3362,19 @@ } + /** - * average dark pixels of a 8 bits scan + * average dark pixels of a 8 bits scan of a given channel */ static int -dark_average (uint8_t * data, unsigned int pixels, unsigned int lines, - unsigned int channels, unsigned int black) +dark_average_channel (uint8_t * data, unsigned int pixels, unsigned int lines, + unsigned int channels, unsigned int black, int channel) { - unsigned int i, j, k, average, count; + unsigned int i, j, k, count; unsigned int avg[3]; uint8_t val; - /* computes average value on black margin */ + /* computes average values on black margin */ for (k = 0; k < channels; k++) { avg[k] = 0; @@ -3171,47 +3383,53 @@ { for (j = 0; j < black; j++) { - val = data[i * channels * pixels + j + k]; + val = data[i * channels * pixels + j*channels + k]; avg[k] += val; count++; } } if (count) avg[k] /= count; - DBG (DBG_info, "dark_average: avg[%d] = %d\n", k, avg[k]); + DBG (DBG_info, "%s: avg[%d] = %d\n", __FUNCTION__, k, avg[k]); } - average = 0; - for (i = 0; i < channels; i++) - average += avg[i]; - average /= channels; - DBG (DBG_info, "dark_average: average = %d\n", average); - return average; + DBG (DBG_info, "%s: average = %d\n", __FUNCTION__, avg[channel]); + return avg[channel]; } - +/** @brief calibrate AFE offset + * Iterate doing scans at target dpi until AFE offset if correct. One + * color line is scanned at a time. Scanning head doesn't move. + * @param dev device to calibrate + */ static SANE_Status gl843_offset_calibration (Genesys_Device * dev) { - Genesys_Register_Set *r; SANE_Status status = SANE_STATUS_GOOD; uint8_t *first_line, *second_line; unsigned int channels, bpp; char title[32]; - int pass = 0, avg, total_size; - int topavg, bottomavg, resolution, lines; - int top, bottom, black_pixels, pixels; + int pass, total_size, i, resolution, lines; + int topavg[3], bottomavg[3], avg[3]; + int top[3], bottom[3], black_pixels, pixels, factor, dpihw; DBGSTART; /* offset calibration is always done in color mode */ channels = 3; - resolution=dev->sensor.optical_res; - dev->calib_pixels = dev->sensor.sensor_pixels; - lines=1; - bpp=8; - pixels= (dev->sensor.sensor_pixels*resolution) / dev->sensor.optical_res; - black_pixels = (dev->sensor.black_pixels * resolution) / dev->sensor.optical_res; - DBG (DBG_io2, "gl843_offset_calibration: black_pixels=%d\n", black_pixels); + lines = 8; + bpp = 8; + + /* compute divider factor to compute final pixels number */ + dpihw = sanei_genesys_compute_dpihw (dev, dev->settings.xres); + factor = dev->sensor.optical_res / dpihw; + resolution = dpihw; + pixels = dev->sensor.sensor_pixels / factor; + black_pixels = dev->sensor.black_pixels / factor; + DBG (DBG_io, "gl843_offset_calibration: dpihw =%d\n", dpihw); + DBG (DBG_io, "gl843_offset_calibration: factor =%d\n", factor); + DBG (DBG_io, "gl843_offset_calibration: resolution =%d\n", resolution); + DBG (DBG_io, "gl843_offset_calibration: pixels =%d\n", pixels); + DBG (DBG_io, "gl843_offset_calibration: black_pixels=%d\n", black_pixels); status = gl843_init_scan_regs (dev, dev->calib_reg, @@ -3223,23 +3441,22 @@ lines, bpp, channels, - dev->settings.color_filter, + SCAN_MODE_COLOR, + 0, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | SCAN_FLAG_SINGLE_LINE | SCAN_FLAG_IGNORE_LINE_DISTANCE); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "gl843_offset_calibration: failed to setup scan: %s\n", + DBG (DBG_error, "gl843_offset_calibration: failed to setup scan: %s\n", sane_strstatus (status)); return status; } - r = sanei_genesys_get_address (dev->calib_reg, REG02); - r->value &= ~REG02_MTRPWR; + gl843_set_motor_power (dev->calib_reg, SANE_FALSE); /* allocate memory for scans */ - total_size = pixels * channels * lines * (bpp/8); /* colors * bytes_per_color * scan lines */ + total_size = pixels * channels * lines * (bpp / 8); /* colors * bytes_per_color * scan lines */ first_line = malloc (total_size); if (!first_line) @@ -3252,57 +3469,75 @@ return SANE_STATUS_NO_MEM; } - /* init gain */ - dev->frontend.gain[0] = 0; - dev->frontend.gain[1] = 0; - dev->frontend.gain[2] = 0; - - /* scan with no move */ - bottom = 10; - dev->frontend.offset[0] = bottom; - dev->frontend.offset[1] = bottom; - dev->frontend.offset[2] = bottom; + /* init gain and offset */ + for (i = 0; i < 3; i++) + { + bottom[i] = 10; + dev->frontend.offset[i] = bottom[i]; + dev->frontend.gain[i] = 0; + } + RIE (gl843_set_fe (dev, AFE_SET)); - RIE (gl843_set_fe(dev, AFE_SET)); + /* scan with obttom AFE settings */ RIE (gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS)); DBG (DBG_info, "gl843_offset_calibration: starting first line reading\n"); RIE (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE)); RIE (sanei_genesys_read_data_from_scanner (dev, first_line, total_size)); if (DBG_LEVEL >= DBG_data) - { - snprintf(title,20,"offset%03d.pnm",bottom); - sanei_genesys_write_pnm_file (title, first_line, bpp, channels, pixels, lines); - } - - bottomavg = dark_average (first_line, pixels, lines, channels, black_pixels); - DBG (DBG_io2, "gl843_offset_calibration: bottom avg=%d\n", bottomavg); + { + for (i = 0; i < 3; i++) + { + snprintf (title, 20, "offset_%d_%03d.pnm", i, bottom[i]); + sanei_genesys_write_pnm_file (title, first_line, bpp, channels, pixels, lines); + } + } + + for (i = 0; i < 3; i++) + { + bottomavg[i] = dark_average_channel (first_line, pixels, lines, channels, black_pixels, i); + DBG (DBG_io2, "gl843_offset_calibration: bottom avg %d=%d\n", i, bottomavg[i]); + } /* now top value */ - top = 255; - dev->frontend.offset[0] = top; - dev->frontend.offset[1] = top; - dev->frontend.offset[2] = top; - RIE (gl843_set_fe(dev, AFE_SET)); + for (i = 0; i < 3; i++) + { + top[i] = 255; + dev->frontend.offset[i] = top[i]; + } + RIE (gl843_set_fe (dev, AFE_SET)); + + /* scan with top AFE values */ RIE (gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS)); DBG (DBG_info, "gl843_offset_calibration: starting second line reading\n"); RIE (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE)); RIE (sanei_genesys_read_data_from_scanner (dev, second_line, total_size)); - - topavg = dark_average (second_line, pixels, lines, channels, black_pixels); - DBG (DBG_io2, "gl843_offset_calibration: top avg=%d\n", topavg); + + for (i = 0; i < 3; i++) + { + topavg[i] = dark_average_channel (second_line, pixels, lines, channels, black_pixels, i); + DBG (DBG_io2, "gl843_offset_calibration: top avg %d=%d\n", i, topavg[i]); + } + + pass = 0; /* loop until acceptable level */ - while ((pass < 32) && (top - bottom > 1)) + while ((pass < 32) + && ((top[0] - bottom[0] > 1) + || (top[1] - bottom[1] > 1) || (top[2] - bottom[2] > 1))) { pass++; /* settings for new scan */ - dev->frontend.offset[0] = (top + bottom) / 2; - dev->frontend.offset[1] = (top + bottom) / 2; - dev->frontend.offset[2] = (top + bottom) / 2; + for (i = 0; i < 3; i++) + { + if (top[i] - bottom[i] > 1) + { + dev->frontend.offset[i] = (top[i] + bottom[i]) / 2; + } + } + RIE (gl843_set_fe (dev, AFE_SET)); /* scan with no move */ - RIE(gl843_set_fe(dev, AFE_SET)); RIE (gl843_bulk_write_register (dev, dev->calib_reg, GENESYS_GL843_MAX_REGS)); DBG (DBG_info, "gl843_offset_calibration: starting second line reading\n"); RIE (gl843_begin_scan (dev, dev->calib_reg, SANE_TRUE)); @@ -3310,27 +3545,38 @@ if (DBG_LEVEL >= DBG_data) { - sprintf (title, "offset%03d.pnm", dev->frontend.offset[1]); - sanei_genesys_write_pnm_file (title, second_line, bpp, channels, pixels, lines); + for (i = 0; i < 3; i++) + { + sprintf (title, "offset_%d_%03d.pnm", i, dev->frontend.offset[i]); + sanei_genesys_write_pnm_file (title, second_line, bpp, channels, pixels, lines); + } } - avg = dark_average (second_line, pixels, lines, channels, black_pixels); - DBG (DBG_info, "gl843_offset_calibration: avg=%d offset=%d\n", avg, - dev->frontend.offset[1]); - - /* compute new boundaries */ - if (topavg == avg) + for (i = 0; i < 3; i++) { - topavg = avg; - top = dev->frontend.offset[1]; + avg[i] = dark_average_channel (second_line, pixels, lines, channels, black_pixels, i); + DBG (DBG_info, "gl843_offset_calibration: avg[%d]=%d offset=%d\n", i, avg[i], dev->frontend.offset[i]); } - else + + /* compute new boundaries */ + for (i = 0; i < 3; i++) { - bottomavg = avg; - bottom = dev->frontend.offset[1]; + if (topavg[i] >= avg[i]) + { + topavg[i] = avg[i]; + top[i] = dev->frontend.offset[i]; + } + else + { + bottomavg[i] = avg[i]; + bottom[i] = dev->frontend.offset[i]; + } } } - DBG (DBG_info, "gl843_offset_calibration: offset=(%d,%d,%d)\n", dev->frontend.offset[0], dev->frontend.offset[1], dev->frontend.offset[2]); + DBG (DBG_info, "gl843_offset_calibration: offset=(%d,%d,%d)\n", + dev->frontend.offset[0], + dev->frontend.offset[1], + dev->frontend.offset[2]); /* cleanup before return */ free (first_line); @@ -3353,7 +3599,7 @@ static SANE_Status gl843_coarse_gain_calibration (Genesys_Device * dev, int dpi) { - int pixels; + int pixels, factor, dpihw; int total_size; uint8_t *line; int i, j, channels; @@ -3362,28 +3608,35 @@ float gain[3],coeff; int val, code, lines; int resolution; - Genesys_Register_Set *r; int bpp; DBG (DBG_proc, "gl843_coarse_gain_calibration: dpi = %d\n", dpi); + dpihw=sanei_genesys_compute_dpihw(dev, dpi); + factor=dev->sensor.optical_res/dpihw; /* coarse gain calibration is always done in color mode */ channels = 3; + /* follow CKSEL */ - if(dev->settings.xressensor.optical_res) + if (dev->model->ccd_type == CCD_KVSS080) { - coeff=0.9; - resolution=dev->sensor.optical_res/2; - resolution=dev->sensor.optical_res; + if(dev->settings.xressensor.optical_res) + { + coeff=0.9; + } + else + { + coeff=1.0; + } } else { - resolution=dev->sensor.optical_res; coeff=1.0; } + resolution=dpihw; lines=10; bpp=8; - pixels = (dev->sensor.sensor_pixels * resolution) / dev->sensor.optical_res, + pixels = dev->sensor.sensor_pixels / factor; status = gl843_init_scan_regs (dev, dev->calib_reg, @@ -3395,13 +3648,13 @@ lines, bpp, channels, + SCAN_MODE_COLOR, dev->settings.color_filter, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | SCAN_FLAG_SINGLE_LINE | SCAN_FLAG_IGNORE_LINE_DISTANCE); - r = sanei_genesys_get_address (dev->calib_reg, REG02); - r->value &= ~REG02_MTRPWR; + gl843_set_motor_power (dev->calib_reg, SANE_FALSE); if (status != SANE_STATUS_GOOD) { @@ -3507,25 +3760,34 @@ { int num_pixels; SANE_Status status = SANE_STATUS_GOOD; - Genesys_Register_Set *r; + int dpihw; + int resolution; + int factor; DBGSTART; if (dev == NULL || reg == NULL || channels == NULL || total_size == NULL) return SANE_STATUS_INVAL; - + + /* setup scan */ *channels=3; + resolution=600; + dpihw=sanei_genesys_compute_dpihw(dev, resolution); + factor=dev->sensor.optical_res/dpihw; + num_pixels=dev->sensor.sensor_pixels/(factor*2); + *total_size = num_pixels * 3 * 1; memcpy (reg, dev->reg, (GENESYS_GL843_MAX_REGS + 1) * sizeof (Genesys_Register_Set)); status = gl843_init_scan_regs (dev, reg, - dev->sensor.optical_res, - dev->motor.base_ydpi, - dev->sensor.sensor_pixels/4, + resolution, + resolution, + num_pixels/2, 0, - dev->sensor.sensor_pixels/2, + num_pixels, 1, 8, *channels, + SCAN_MODE_COLOR, dev->settings.color_filter, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | @@ -3534,94 +3796,17 @@ if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "gl843_init_regs_for_warmup: failed to setup scan: %s\n", - sane_strstatus (status)); + DBG (DBG_error, "%s: failed to setup scan: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } - num_pixels = dev->current_setup.pixels; - - *total_size = num_pixels * 3 * 1; /* colors * bytes_per_color * scan lines */ - - r = sanei_genesys_get_address (reg, REG02); - r->value &= ~REG02_MTRPWR; + gl843_set_motor_power (reg, SANE_FALSE); RIE (gl843_bulk_write_register (dev, reg, GENESYS_GL843_MAX_REGS)); DBGCOMPLETED; return SANE_STATUS_GOOD; } -static SANE_Status -gl843_is_compatible_calibration (Genesys_Device * dev, - Genesys_Calibration_Cache * cache, - int for_overwrite) -{ -#ifdef HAVE_SYS_TIME_H - struct timeval time; -#endif - int compatible = 1, resolution; - SANE_Status status; - - DBGSTART; - - if (cache == NULL || for_overwrite) - return SANE_STATUS_UNSUPPORTED; - - status = gl843_calculate_current_setup (dev); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl843_is_compatible_calibration: failed to calculate current setup: %s\n", - sane_strstatus (status)); - return status; - } - resolution=gl843_compute_dpihw(dev,dev->settings.xres); - dev->current_setup.scan_method = dev->settings.scan_method; - - DBG (DBG_proc, "gl843_is_compatible_calibration: checking\n"); - - /* a calibration cache is compatible if color mode and x dpi match the user - * requested scan. In the case of CIS scanners, dpi isn't a criteria */ - if (dev->model->is_cis == SANE_FALSE) - { - compatible = (resolution == ((int) cache->used_setup.xres)); - } - else - { - compatible = (dev->current_setup.channels == cache->used_setup.channels); - } - if (dev->current_setup.scan_method != cache->used_setup.scan_method) - { - DBG (DBG_io, - "gl843_is_compatible_calibration: current method=%d, used=%d\n", - dev->current_setup.scan_method, cache->used_setup.scan_method); - compatible = 0; - } - if (!compatible) - { - DBG (DBG_proc, - "gl843_is_compatible_calibration: completed, non compatible cache\n"); - return SANE_STATUS_UNSUPPORTED; - } - - /* a cache entry expires after 30 minutes for non CIS scanners */ -#ifdef HAVE_SYS_TIME_H - gettimeofday (&time, NULL); - if ((time.tv_sec - cache->last_calibration > 30 * 60) - && (dev->model->is_cis == SANE_FALSE) - && (dev->settings.scan_method == SCAN_METHOD_FLATBED)) - { - DBG (DBG_proc, - "gl843_is_compatible_calibration: expired entry, non compatible cache\n"); - return SANE_STATUS_UNSUPPORTED; - } -#endif - - DBGCOMPLETED; - return SANE_STATUS_GOOD; -} - /** * set up GPIO/GPOE for idle state WRITE GPIO[17-21]= GPIO19 @@ -3642,6 +3827,7 @@ RIE (sanei_genesys_write_register (dev, REG6C, dev->gpo.value[0])); RIE (sanei_genesys_write_register (dev, REG6D, dev->gpo.value[1])); if ((strcmp (dev->model->name, "hewlett-packard-scanjet-g4010") == 0) + || (strcmp (dev->model->name, "hewlett-packard-scanjet-4850c") == 0) || (strcmp (dev->model->name, "hewlett-packard-scanjet-g4050") == 0)) { i = 0; @@ -3650,10 +3836,10 @@ { i = 1; } - RIE (sanei_genesys_write_register (dev, 0xa6, gpios[i].ra6)); - RIE (sanei_genesys_write_register (dev, 0xa7, gpios[i].ra7)); - RIE (sanei_genesys_write_register (dev, 0xa8, gpios[i].ra8)); - RIE (sanei_genesys_write_register (dev, 0xa9, gpios[i].ra9)); + RIE (sanei_genesys_write_register (dev, REGA6, gpios[i].ra6)); + RIE (sanei_genesys_write_register (dev, REGA7, gpios[i].ra7)); + RIE (sanei_genesys_write_register (dev, REGA8, gpios[i].ra8)); + RIE (sanei_genesys_write_register (dev, REGA9, gpios[i].ra9)); DBGCOMPLETED; return status; @@ -3700,34 +3886,6 @@ /* URB 14 control 0x40 0x0c 0x8c 0x10 len 1 wrote 0xb4 */ RIE (write_end_access (dev, 0x10, 0xb4)); - /* set up clock once for all TODO use sensor type for these sensor related registers */ - if (strncmp (dev->model->name, "hewlett-packard-scanjet-g40", 27) == 0) - { - /* CK1MAP */ - RIE (sanei_genesys_write_register (dev, 0x74, 0x00)); - RIE (sanei_genesys_write_register (dev, 0x75, 0x1c)); - RIE (sanei_genesys_write_register (dev, 0x76, 0x7f)); - /* CK3MAP */ - RIE (sanei_genesys_write_register (dev, 0x77, 0x03)); - RIE (sanei_genesys_write_register (dev, 0x78, 0xff)); - RIE (sanei_genesys_write_register (dev, 0x79, 0xff)); - } - else - { - /* CK1MAP */ - RIE (sanei_genesys_write_register (dev, 0x74, 0x00)); - RIE (sanei_genesys_write_register (dev, 0x75, 0x00)); - RIE (sanei_genesys_write_register (dev, 0x76, 0x00)); - /* CK3MAP */ - RIE (sanei_genesys_write_register (dev, 0x77, 0x00)); - RIE (sanei_genesys_write_register (dev, 0x78, 0xff)); - RIE (sanei_genesys_write_register (dev, 0x79, 0xff)); - } - /* CK4MAP */ - RIE (sanei_genesys_write_register (dev, 0x7a, 0x03)); - RIE (sanei_genesys_write_register (dev, 0x7b, 0xff)); - RIE (sanei_genesys_write_register (dev, 0x7c, 0xff)); - /* CLKSET */ val = (dev->reg[reg_0x0b].value & ~REG0B_CLKSET) | REG0B_48MHZ; RIE (sanei_genesys_write_register (dev, REG0B, val)); @@ -3820,6 +3978,10 @@ /* set up hardware and registers */ RIE (gl843_cold_boot (dev)); + /* move head away from park position */ + gl843_feed (dev, 300); + usleep (100000); + /* now hardware part is OK, set up device struct */ FREE_IFNOT_NULL (dev->white_average_data); FREE_IFNOT_NULL (dev->dark_average_data); @@ -3829,8 +3991,7 @@ dev->settings.color_filter = 0; - memcpy (dev->calib_reg, dev->reg, - GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set)); + memcpy (dev->calib_reg, dev->reg, GENESYS_GL843_MAX_REGS * sizeof (Genesys_Register_Set)); /* Set analog frontend */ RIE (gl843_set_fe (dev, AFE_INIT)); @@ -3846,8 +4007,7 @@ "gl843_init: could not allocate memory for gamma table\n"); return SANE_STATUS_NO_MEM; } - sanei_genesys_create_gamma_table (dev->sensor.red_gamma_table, size, - 65535, 65535, dev->sensor.red_gamma); + sanei_genesys_create_gamma_table (dev->sensor.red_gamma_table, size, 65535, 65535, dev->sensor.red_gamma); } if (dev->sensor.green_gamma_table == NULL) { @@ -3858,9 +4018,7 @@ "gl843_init: could not allocate memory for gamma table\n"); return SANE_STATUS_NO_MEM; } - sanei_genesys_create_gamma_table (dev->sensor.green_gamma_table, size, - 65535, 65535, - dev->sensor.green_gamma); + sanei_genesys_create_gamma_table (dev->sensor.green_gamma_table, size, 65535, 65535, dev->sensor.green_gamma); } if (dev->sensor.blue_gamma_table == NULL) { @@ -3871,8 +4029,7 @@ "gl843_init: could not allocate memory for gamma table\n"); return SANE_STATUS_NO_MEM; } - sanei_genesys_create_gamma_table (dev->sensor.blue_gamma_table, size, - 65535, 65535, dev->sensor.blue_gamma); + sanei_genesys_create_gamma_table (dev->sensor.blue_gamma_table, size, 65535, 65535, dev->sensor.blue_gamma); } dev->oe_buffer.buffer = NULL; @@ -3919,6 +4076,34 @@ return status; } +#ifndef UNIT_TESTING +static +#endif +/** @brief move sensor to transparency adaptor + * Move sensor to the calibration of the transparency adapator (XPA). + * @param dev device to use + */ +SANE_Status gl843_move_to_ta (Genesys_Device * dev) +{ + SANE_Status status = SANE_STATUS_GOOD; + float resolution; + unsigned int feed; + + DBGSTART; + + resolution=sanei_genesys_get_lowest_ydpi(dev); + feed = 16*(SANE_UNFIX (dev->model->y_offset_calib_ta) * resolution) / MM_PER_INCH; + status = gl843_feed (dev, feed); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, "%s: failed to move to XPA calibration area\n", __FUNCTION__); + return status; + } + + DBGCOMPLETED; + return status; +} + /** @brief search for a full width black or white strip. * This function searches for a black or white stripe across the scanning area. @@ -3956,13 +4141,9 @@ } /* set up for a gray scan at lowest dpi */ - dpi = 9600; - for (x = 0; x < MAX_RESOLUTIONS; x++) - { - if (dev->model->xdpi_values[x] > 0 && dev->model->xdpi_values[x] < dpi) - dpi = dev->model->xdpi_values[x]; - } + dpi = sanei_genesys_get_lowest_dpi(dev); channels = 1; + /* 10 MM */ lines = (10 * dpi) / MM_PER_INCH; /* shading calibation is done with dev->motor.base_ydpi */ @@ -3991,6 +4172,7 @@ lines, depth, channels, + SCAN_MODE_GRAY, 0, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA); @@ -4219,6 +4401,108 @@ return status; } +/** + * Send shading calibration data. The buffer is considered to always hold values + * for all the channels. + */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status +gl843_send_shading_data (Genesys_Device * dev, uint8_t * data, int size) +{ + SANE_Status status; + uint32_t final_size, length, i; + uint8_t *final_data; + uint8_t *buffer; + int count,offset; + unsigned int tgtime; + unsigned int cksel; + Genesys_Register_Set *r; + uint16_t dpiset, strpixel, endpixel, startx, factor; + + DBGSTART; + + offset=0; + length=size; + r = sanei_genesys_get_address (dev->reg, REG01); + if(r->value & REG01_SHDAREA) + { + /* recompute STRPIXEL used shading calibration so we can + * compute offset within data for SHDAREA case */ + r = sanei_genesys_get_address (dev->reg, REG18); + cksel= (r->value & REG18_CKSEL)+1; + sanei_genesys_get_double(dev->reg,REG_DPISET,&strpixel); + tgtime=1; + sanei_genesys_get_double(dev->reg,REG_DPISET,&dpiset); + factor=dev->sensor.optical_res/sanei_genesys_compute_dpihw(dev,dpiset); + if (dev->model->ccd_type == CCD_G4050 && dpiset>2400) + { + tgtime=2; + } + + /* start coordinate in optical dpi coordinates */ + startx = ((dev->sensor.dummy_pixel * tgtime)/cksel)/factor; + + /* current scan coordinates */ + sanei_genesys_get_double(dev->reg,REG_STRPIXEL,&strpixel); + sanei_genesys_get_double(dev->reg,REG_ENDPIXEL,&endpixel); + strpixel*=tgtime; + endpixel*=tgtime; + + /* 16 bit words, 2 words per color, 3 color channels */ + offset=(strpixel-startx)*2*2*3; + length=(endpixel-strpixel)*2*2*3; + DBG (DBG_info, "%s: STRPIXEL=%d, ENDPIXEL=%d, startx=%d\n", __FUNCTION__, strpixel, endpixel, startx); + } + + /* compute and allocate size for final data */ + final_size = ((length+251) / 252) * 256; + DBG (DBG_io, "%s: final shading size=%04x (length=%d)\n", __FUNCTION__, final_size, length); + final_data = (uint8_t *) malloc (final_size); + if(final_data==NULL) + { + DBG (DBG_error, "%s: failed to allocate memory for shading data\n", __FUNCTION__); + return SANE_STATUS_NO_MEM; + } + memset(final_data,0x00,final_size); + + /* copy regular shading data to the expected layout */ + buffer = final_data; + count = 0; + + /* loop over calibration data */ + for (i = 0; i < length; i++) + { + buffer[count] = data[offset+i]; + count++; + if ((count % (256*2)) == (252*2)) + { + count += 4*2; + } + } + + /* send data */ + status = sanei_genesys_set_buffer_address (dev, 0); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, "%s: failed to set buffer address: %s\n", __FUNCTION__, sane_strstatus (status)); + free(final_data); + return status; + } + + status = dev->model->cmd_set->bulk_write_data (dev, 0x3c, final_data, count); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, "%s: failed to send shading table: %s\n", __FUNCTION__, sane_strstatus (status)); + } + + free(final_data); + DBGCOMPLETED; + return status; +} + + /** the gl843 command set */ static Genesys_Command_Set gl843_cmd_set = { "gl843-generic", /* the name of this set */ @@ -4270,9 +4554,10 @@ gl843_eject_document, gl843_search_strip, - gl843_is_compatible_calibration, - NULL, - NULL /* gl843_send_shading_data */ + sanei_genesys_is_compatible_calibration, + gl843_move_to_ta, + gl843_send_shading_data, + gl843_calculate_current_setup }; SANE_Status diff -Nru sane-backends-1.0.22/backend/genesys_gl843.h sane-backends-1.0.23/backend/genesys_gl843.h --- sane-backends-1.0.22/backend/genesys_gl843.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl843.h 2012-07-01 02:00:44.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2010 Stphane Voltz + Copyright (C) 2010-2012 Stphane Voltz This file is part of the SANE package. @@ -40,30 +40,38 @@ whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice. */ -#include "../include/sane/config.h" -#include -#include -#include -#include -#include - -#include "../include/sane/sane.h" -#include "../include/sane/sanei.h" -#include "../include/sane/saneopts.h" - -#ifndef HACK -#undef BACKEND_NAME -#define BACKEND_NAME genesys_gl843 -#endif - -#include "../include/sane/sanei_backend.h" -#include "../include/sane/sanei_config.h" -#include "../include/sane/sanei_usb.h" - -#include "../include/_stdint.h" #include "genesys.h" +#ifdef UNIT_TESTING +SANE_Status gl843_send_slope_table (Genesys_Device * dev, int table_nr, uint16_t * slope_table, int steps); +SANE_Status gl843_init_scan_regs (Genesys_Device * dev, + Genesys_Register_Set * reg, + float xres, /*dpi */ + float yres, /*dpi */ + float startx, /*optical_res, from dummy_pixel+1 */ + float starty, /*base_ydpi, from home! */ + float pixels, + float lines, + unsigned int depth, + unsigned int channels, + int scan_mode, + int color_filter, + unsigned int flags); +SANE_Status gl843_start_action (Genesys_Device * dev); +SANE_Status gl843_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg, SANE_Bool start_motor); +SANE_Status gl843_end_scan (Genesys_Device * dev, Genesys_Register_Set * reg, SANE_Bool check_stop); +SANE_Status gl843_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home); +SANE_Status gl843_feed (Genesys_Device * dev, unsigned int steps); +SANE_Status gl843_init (Genesys_Device * dev); +SANE_Status gl843_send_shading_data (Genesys_Device * dev, uint8_t * data, int size); +SANE_Status gl843_bulk_write_register (Genesys_Device * dev, Genesys_Register_Set * reg, size_t elems); +SANE_Status gl843_xpa_lamp_on (Genesys_Device * dev); +SANE_Status gl843_xpa_motor_on (Genesys_Device * dev); +SANE_Status gl843_xpa_motor_off (Genesys_Device * dev); +SANE_Status gl843_move_to_ta (Genesys_Device * dev); +#endif + #define DBGSTART DBG (DBG_proc, "%s start\n", __FUNCTION__); #define DBGCOMPLETED DBG (DBG_proc, "%s completed\n", __FUNCTION__); @@ -165,6 +173,10 @@ #define REG0F 0x0f +#define REG_EXPR 0x10 +#define REG_EXPG 0x12 +#define REG_EXPB 0x14 + #define REG16_CTRLHI 0x80 #define REG16_TOSHIBA 0x40 #define REG16_TGINV 0x20 @@ -188,6 +200,8 @@ #define REG18_CKDELAY 0x0c #define REG18_CKSEL 0x03 +#define REG_EXPDMY 0x19 + #define REG1A_TGLSW2 0x80 #define REG1A_TGLSW1 0x40 #define REG1A_MANUAL3 0x02 @@ -196,6 +210,7 @@ #define REG1A_CK3INV 0x04 #define REG1A_LINECLP 0x02 +#define REG1C 0x1c #define REG1C_TGTIME 0x07 #define REG1D_CK4LOW 0x80 @@ -212,10 +227,25 @@ #define REG1ES_LINESEL 0 #define REG21 0x21 +#define REG_STEPNO 0x21 +#define REG_FWDSTEP 0x22 +#define REG_BWDSTEP 0x23 +#define REG_FASTNO 0x24 +#define REG_LINCNT 0x25 #define REG29 0x29 #define REG2A 0x2a #define REG2B 0x2b +#define REG_DPISET 0x2c +#define REG2E 0x2e +#define REG2F 0x2f + +#define REG_STRPIXEL 0x30 +#define REG_ENDPIXEL 0x32 +#define REG_DUMMY 0x34 +#define REG_MAXWD 0x35 +#define REG_LPERIOD 0x38 +#define REG_FEEDL 0x3d #define REG40 0x40 #define REG40_DOCSNR 0x80 @@ -259,7 +289,7 @@ #define REG5E_STOPTIM 0x1f #define REG5ES_STOPTIM 0 -#define REG5F 0x5f +#define REG_FMOVDEC 0x5f #define REG60 0x60 #define REG60_Z1MOD 0x1f @@ -293,16 +323,18 @@ #define REG68_EIGHTHSTEP 0x60 #define REG68_16THSTEP 0x80 -#define REG69 0x69 -#define REG6A 0x6a +#define REG_FSHDEC 0x69 +#define REG_FMOVNO 0x6a #define REG6B 0x6b #define REG6B_MULTFILM 0x80 #define REG6B_GPOM13 0x40 #define REG6B_GPOM12 0x20 #define REG6B_GPOM11 0x10 -#define REG6B_GPO18 0x02 -#define REG6B_GPO17 0x01 +#define REG6B_GPOCK4 0x08 +#define REG6B_GPOCP 0x04 +#define REG6B_GPOLEDB 0x02 +#define REG6B_GPOADF 0x01 #define REG6C 0x6c #define REG6C_GPIO16 0x80 @@ -316,19 +348,56 @@ #define REG6C_GPIOH 0xff #define REG6C_GPIOL 0xff +#define REG_Z1MOD 0x60 +#define REG_Z2MOD 0x63 + #define REG6D 0x6d #define REG6E 0x6e #define REG6F 0x6f +#define REG_CK1MAP 0x74 +#define REG_CK3MAP 0x77 +#define REG_CK4MAP 0x7a + +#define REG7E 0x7e + #define REG9D 0x9d #define REG9DS_STEPTIM 2 #define REG87_LEDADD 0x04 #define REGA6 0xa6 +#define REGA6_GPIO24 0x80 +#define REGA6_GPIO23 0x40 +#define REGA6_GPIO22 0x20 +#define REGA6_GPIO21 0x10 +#define REGA6_GPIO20 0x08 +#define REGA6_GPIO19 0x04 +#define REGA6_GPIO18 0x02 +#define REGA6_GPIO17 0x01 #define REGA7 0xa7 +#define REGA7_GPOE24 0x80 +#define REGA7_GPOE23 0x40 +#define REGA7_GPOE22 0x20 +#define REGA7_GPOE21 0x10 +#define REGA7_GPOE20 0x08 +#define REGA7_GPOE19 0x04 +#define REGA7_GPOE18 0x02 +#define REGA7_GPOE17 0x01 #define REGA8 0xa8 +#define REGA8_GPOE27 0x20 +#define REGA8_GPOE26 0x10 +#define REGA8_GPOE25 0x08 +#define REGA8_GPO27 0x04 +#define REGA8_GPO26 0x02 +#define REGA8_GPO25 0x01 #define REGA9 0xa9 +#define REGA9_GPO33 0x20 +#define REGA9_GPO32 0x10 +#define REGA9_GPO31 0x08 +#define REGA9_GPO30 0x04 +#define REGA9_GPO29 0x02 +#define REGA9_GPO28 0x01 #define SCAN_TABLE 0 /* table 1 at 0x4000 */ #define BACKTRACK_TABLE 1 /* table 2 at 0x4800 */ @@ -476,12 +545,14 @@ reg_0x9b, reg_0x9c, reg_0x9d, + reg_0x9e, reg_0xa0, reg_0xa1, reg_0xa2, reg_0xa3, reg_0xa4, reg_0xa5, + reg_0xaa, reg_0xab, reg_0xac, reg_0xad, @@ -511,28 +582,89 @@ } }; -/** - * structure for motor database +/** @brief structure for sensor settings + * this structure describes the sensor settings to use for a given + * exposure. */ typedef struct { - int motor_type; /**> motor id */ - int exposure; /**> exposure for the slope table */ - uint16_t *table; /**> slope table at full step */ -} Motor_Profile; + int sensor_type; /**> sensor id */ + int dpi; /**> maximum dpi for which data are valid */ + int exposure; /**> exposure */ + int ck1map; /**> CK1MAP */ + int ck3map; /**> CK2MAP */ + int ck4map; /**> CK3MAP */ + int segcnt; /**> SEGCNT */ + int tg0cnt; /**> TG0CNT */ + int expdummy; /**> exposure dummy */ + int expr; /**> initial red exposure */ + int expg; /**> initial green exposure */ + int expb; /**> initial blue exposure */ + uint8_t reg0c; /**> register 0x0c value */ + uint8_t reg70; /**> register 0x70 value */ + uint8_t reg71; /**> register 0x71 value */ + uint8_t reg9e; /**> register 0x9e value */ + uint8_t regaa; /**> either undocumented or mapping to somewhere else */ + uint8_t regs_0x10_0x1d[14]; + uint8_t regs_0x52_0x5e[13]; +} Sensor_Profile; + +/** + * database of sensor profiles + */ +static Sensor_Profile xpa_sensors[]={ + {CCD_G4050 , 600, 15624, 0x001c7f, 0x03ffff, 0x03ffff, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0x00, 0x02, 0x00, 0x00, + {0x2c, 0x09, 0x22, 0xb8, 0x10, 0xf0, 0x33, 0x4c, 0x01, 0x2a, 0x30, 0x00, 0x00, 0x08} , + {0x0e, 0x11, 0x02, 0x05, 0x08, 0x0b, 0x6b, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x6f}, + }, +}; +static Sensor_Profile sensors[]={ + /* 0c 70 71 9e aa*/ + {CCD_KVSS080, 600, 8000, 0x000000, 0x00ffff, 0x03ffff, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0x01, 0x03, 0x00, 0x00, + /* 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d */ + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x1c, 0x00, 0x2a, 0x2c, 0x00, 0x20, 0x04} , + /* 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e */ + {0x0c, 0x0f, 0x00, 0x03, 0x06, 0x09, 0x6b, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x23}, + }, + + {CCD_G4050 , 600, 8016, 0x0001ff, 0x03ffff, 0x03ffff, 5168, 0, 0x2a, 0, 0, 0, 0x00, 0x00, 0x02, 0x00, 0x00, + {0x2c, 0x09, 0x22, 0xb8, 0x10, 0xf0, 0x33, 0x0c, 0x00, 0x2a, 0x30, 0x00, 0x00, 0x08} , + {0x0b, 0x0e, 0x11, 0x02, 0x05, 0x08, 0x63, 0x00, 0x40, 0x00, 0x00, 0x00, 0x63}, + }, + + {CCD_G4050 , 1200, 56064, 0x0fffff, 0x0001ff, 0x0001ff, 5168, 0, 0x2a, 0, 0, 0, 0x20, 0x08, 0x0c, 0xc0, 0x05, + {0x2c, 0x09, 0x22, 0xb8, 0x10, 0xf0, 0x3b, 0x0c, 0x10, 0x2a, 0x38, 0x10, 0x00, 0x08} , + {0x02, 0x05, 0x08, 0x0b, 0x0e, 0x11, 0x1b, 0x00, 0x40, 0x00, 0x00, 0x00, 0x63}, + }, + + {CCD_G4050 , 2400, 56064, 0x0fffff, 0x000000, 0x000000, 5168, 0, 0x2a, 0, 0, 0, 0x20, 0x08, 0x0a, 0xc0, 0x05, + {0x2c, 0x09, 0x22, 0xb8, 0x10, 0xf0, 0x3b, 0x0c, 0x10, 0x2a, 0x38, 0x10, 0xc0, 0x08} , + {0x02, 0x05, 0x08, 0x0b, 0x0e, 0x11, 0x1b, 0x00, 0x40, 0x00, 0x00, 0x00, 0x63}, + }, + + {CCD_G4050 , 4800, 42752, 0x0fffff, 0x000000, 0x000000, 5168, 0, 0x2a, 0, 0, 0, 0x21, 0x08, 0x0a, 0xc0, 0x07, + {0x2c, 0x09, 0x22, 0xb8, 0x10, 0xf0, 0x3b, 0x0c, 0x10, 0x2a, 0x38, 0x10, 0xc1, 0x08} , + {0x02, 0x05, 0x08, 0x0b, 0x0e, 0x11, 0x1b, 0x00, 0x40, 0x00, 0x00, 0x00, 0x63}, + }, +}; -static uint16_t kvss080[]={44444, 34188, 32520, 29630, 26666, 24242, 22222, 19048, 16666, 15686, 14814, 14034, 12402, 11110, 8888, 7618, 6666, 5926, 5228, 4678, 4172, 3682, 3336, 3074, 2866, 2702, 2566, 2450, 2352, 2266, 2188, 2118, 2056, 2002, 1950, 1904, 1860, 1820, 1784, 1748, 1716, 1684, 1656, 1628, 1600, 1576, 1552, 1528, 1506, 1486, 1466, 1446, 1428, 1410, 1394, 1376, 1360, 1346, 1330, 1316, 1302, 1288, 1276, 1264, 1250, 1238, 1228, 1216, 1206, 1194, 1184, 1174, 1164, 1154, 1146, 1136, 1128, 1120, 1110, 1102, 1094, 1088, 1080, 1072, 1064, 1058, 1050, 1044, 1038, 1030, 1024, 1018, 1012, 1006, 1000, 994, 988, 984, 978, 972, 968, 962, 958, 952, 948, 942, 938, 934, 928, 924, 920, 916, 912, 908, 904, 900, 896, 892, 888, 884, 882, 878, 874, 870, 868, 864, 860, 858, 854, 850, 848, 844, 842, 838, 836, 832, 830, 826, 824, 822, 820, 816, 814, 812, 808, 806, 804, 802, 800, 796, 794, 792, 790, 788, 786, 784, 782, 778, 776, 774, 772, 770, 768, 766, 764, 762, 760, 758, 756, 754, 752, 750, 750, 748, 746, 744, 742, 740, 738, 736, 734, 734, 732, 730, 728, 726, 724, 724, 722, 720, 718, 716, 716, 714, 712, 710, 710, 708, 706, 704, 704, 702, 700, 698, 698, 696, 694, 694, 692, 690, 690, 688, 686, 686, 684, 682, 682, 680, 678, 678, 676, 674, 674, 672, 672, 670, 668, 668, 666, 666, 664, 662, 662, 660, 660, 658, 656, 656, 654, 654, 652, 652, 650, 650, 648, 646, 646, 644, 644, 642, 642, 640, 640, 638, 638, 636, 636, 636, 634, 634, 632, 632, 630, 630, 628, 628, 626, 626, 624, 624, 624, 622, 622, 620, 620, 618, 618, 618, 616, 616, 614, 614, 612, 612, 612, 610, 610, 608, 608, 608, 606, 606, 606, 604, 604, 602, 602, 602, 600, 600, 600, 598, 598, 596, 596, 596, 594, 594, 594, 592, 592, 592, 590, 590, 590, 588, 588, 588, 586, 586, 586, 584, 584, 584, 582, 582, 582, 590, 590, 590, 588, 588, 588, 586, 586, 586, 584, 584, 584, 582, 582, 582, 580, 580, 580, 578, 578, 578, 576, 576, 576, 576, 574, 574, 574, 572, 572, 572, 570, 570, 570, 568, 568, 568, 568, 566, 566, 566, 564, 564, 564, 562, 562, 562, 562, 560, 560, 560, 558, 558, 558, 558, 556, 556, 556, 554, 554, 554, 552, 552, 552, 552, 550, 550, 550, 548, 548, 548, 548, 546, 546, 546, 546, 544, 544, 544, 542, 542, 542, 542, 540, 540, 540, 538, 538, 538, 538, 536, 536, 536, 536, 534, 534, 534, 534, 532, 532, 532, 530, 530, 530, 530, 528, 528, 528, 528, 526, 526, 526, 526, 524, 524, 524, 524, 522, 522, 522, 522, 520, 520, 520, 520, 518, 518, 518, 516, 516, 516, 516, 514, 514, 514, 514, 514, 512, 512, 512, 512, 510, 510, 510, 510, 508, 508, 508, 508, 506, 506, 506, 506, 504, 504, 504, 504, 502, 502, 502, 502, 500, 500, 500, 500, 0}; -static uint16_t g4050[]={7842,5898,4384,4258,4152,4052,3956,3864,3786,3714,3632,3564,3498,3444,3384,3324,3276,3228,3174,3128,3086,3044,3002,2968,2930,2892,2860,2824,2794,2760,2732,2704,2676,2650,2618,2594,2568,2548,2524,2500,2478,2454,2436,2414,2392,2376,2354,2338,2318,2302,2282,2266,2252,2232,2218,2202,2188,2174,2160,2142,2128,2116,2102,2088,2076,2062,2054,2040,2028,2020,2014,2008,2004,2002,2002,2002,1946,1882,1826,1770,1716,1662,1612,1568,1526,1488,1454,1422,1390,1362,1336,1310,1288,1264,1242,1222,1204,1184,1166,1150,1134,1118,1104,1090,1076,1064,1050,1038,1026,1016,1004,994,984,972,964,954,944,936,928,920,910,902,896,888,880,874,866,860,854,848,840,834,828,822,816,812,806,800,796,790,784,780,776,770,766,760,756,752,748,744,740,736,732,728,724,720,716,712,708,704,702,698,694,690,688,684,682,678,674,672,668,666,662,660,656,654,650,648,646,644,640,638,636,632,630,628,624,622,620,618,616,614,610,608,606,604,602,600,598,596,594,592,590,588,586,584,582,580,578,576,574,572,570,568,566,564,564,562,560,558,556,554,552,552,550,548,546,546,544,542,540,538,538,536,534,532,532,530,528,528,526,524,522,522,520,518,518,516,514,514,512,512,510,508,508,506,504,504,502,502,500,498,498,496,496,494,494,492,490,490,488,488,486,486,484,484,482,480,480,478,478,476,476,474,474,472,472,470,470,468,468,468,466,466,464,464,462,462,460,460,458,458,456,456,456,454,454,452,452,450,450,450,448,448,446,446,444,444,444,442,442,440,440,440,438,438,438,436,436,434,434,434,432,432,432,430,430,428,428,428,426,426,426,424,424,424,422,422,422,420,420,420,418,418,418,416,416,416,414,414,414,412,412,412,410,410,410,408,408,408,406,406,406,404,404,404,404,402,402,402,400,400,400,400,398,398,398,396,396,396,396,394,394,394,392,392,392,392,390,390,390,388,388,388,388,386,386,386,386,384,384,384,384,382,382,382,382,380,380,380,380,378,378,378,378,376,376,376,376,376,374,374,374,374,374,372,372,372,372,372,370,370,370,370,370,368,368,368,368,368,366,366,366,366,366,364,364,364,364,364,364,362,362,362,362,362,360,360,360,360,360,360,358,358,358,358,358,358,356,356,356,356,356,356,354,354,354,354,354,352,352,352,352,352,352,350,350,350,350,350,350,350,348,348,348,348,348,348,346,346,346,346,346,346,344,344,344,344,344,344,344,342,342,342,342,342,342,340,340,340,340,340,340,340,338,338,338,338,338,338,338,336,336,336,336,336,336,336,334,334,334,334,334,334,334,332,332,332,332,332,332,332,332,330,330,330,330,330,330,330,328,328,328,328,328,328,328,328,326,326,326,326,326,326,326,324,324,324,324,324,324,324,324,322,322,322,322,322,322,322,322,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320, 0}; +static uint32_t kvss080[]={44444, 34188, 32520, 29630, 26666, 24242, 22222, 19048, 16666, 15686, 14814, 14034, 12402, 11110, 8888, 7618, 6666, 5926, 5228, 4678, 4172, 3682, 3336, 3074, 2866, 2702, 2566, 2450, 2352, 2266, 2188, 2118, 2056, 2002, 1950, 1904, 1860, 1820, 1784, 1748, 1716, 1684, 1656, 1628, 1600, 1576, 1552, 1528, 1506, 1486, 1466, 1446, 1428, 1410, 1394, 1376, 1360, 1346, 1330, 1316, 1302, 1288, 1276, 1264, 1250, 1238, 1228, 1216, 1206, 1194, 1184, 1174, 1164, 1154, 1146, 1136, 1128, 1120, 1110, 1102, 1094, 1088, 1080, 1072, 1064, 1058, 1050, 1044, 1038, 1030, 1024, 1018, 1012, 1006, 1000, 994, 988, 984, 978, 972, 968, 962, 958, 952, 948, 942, 938, 934, 928, 924, 920, 916, 912, 908, 904, 900, 896, 892, 888, 884, 882, 878, 874, 870, 868, 864, 860, 858, 854, 850, 848, 844, 842, 838, 836, 832, 830, 826, 824, 822, 820, 816, 814, 812, 808, 806, 804, 802, 800, 796, 794, 792, 790, 788, 786, 784, 782, 778, 776, 774, 772, 770, 768, 766, 764, 762, 760, 758, 756, 754, 752, 750, 750, 748, 746, 744, 742, 740, 738, 736, 734, 734, 732, 730, 728, 726, 724, 724, 722, 720, 718, 716, 716, 714, 712, 710, 710, 708, 706, 704, 704, 702, 700, 698, 698, 696, 694, 694, 692, 690, 690, 688, 686, 686, 684, 682, 682, 680, 678, 678, 676, 674, 674, 672, 672, 670, 668, 668, 666, 666, 664, 662, 662, 660, 660, 658, 656, 656, 654, 654, 652, 652, 650, 650, 648, 646, 646, 644, 644, 642, 642, 640, 640, 638, 638, 636, 636, 636, 634, 634, 632, 632, 630, 630, 628, 628, 626, 626, 624, 624, 624, 622, 622, 620, 620, 618, 618, 618, 616, 616, 614, 614, 612, 612, 612, 610, 610, 608, 608, 608, 606, 606, 606, 604, 604, 602, 602, 602, 600, 600, 600, 598, 598, 596, 596, 596, 594, 594, 594, 592, 592, 592, 590, 590, 590, 588, 588, 588, 586, 586, 586, 584, 584, 584, 582, 582, 582, 590, 590, 590, 588, 588, 588, 586, 586, 586, 584, 584, 584, 582, 582, 582, 580, 580, 580, 578, 578, 578, 576, 576, 576, 576, 574, 574, 574, 572, 572, 572, 570, 570, 570, 568, 568, 568, 568, 566, 566, 566, 564, 564, 564, 562, 562, 562, 562, 560, 560, 560, 558, 558, 558, 558, 556, 556, 556, 554, 554, 554, 552, 552, 552, 552, 550, 550, 550, 548, 548, 548, 548, 546, 546, 546, 546, 544, 544, 544, 542, 542, 542, 542, 540, 540, 540, 538, 538, 538, 538, 536, 536, 536, 536, 534, 534, 534, 534, 532, 532, 532, 530, 530, 530, 530, 528, 528, 528, 528, 526, 526, 526, 526, 524, 524, 524, 524, 522, 522, 522, 522, 520, 520, 520, 520, 518, 518, 518, 516, 516, 516, 516, 514, 514, 514, 514, 514, 512, 512, 512, 512, 510, 510, 510, 510, 508, 508, 508, 508, 506, 506, 506, 506, 504, 504, 504, 504, 502, 502, 502, 502, 500, 500, 500, 500, 0}; +static uint32_t g4050_fast[]={7842,5898,4384,4258,4152,4052,3956,3864,3786,3714,3632,3564,3498,3444,3384,3324,3276,3228,3174,3128,3086,3044,3002,2968,2930,2892,2860,2824,2794,2760,2732,2704,2676,2650,2618,2594,2568,2548,2524,2500,2478,2454,2436,2414,2392,2376,2354,2338,2318,2302,2282,2266,2252,2232,2218,2202,2188,2174,2160,2142,2128,2116,2102,2088,2076,2062,2054,2040,2028,2020,2014,2008,2004,2002,2002,2002,1946,1882,1826,1770,1716,1662,1612,1568,1526,1488,1454,1422,1390,1362,1336,1310,1288,1264,1242,1222,1204,1184,1166,1150,1134,1118,1104,1090,1076,1064,1050,1038,1026,1016,1004,994,984,972,964,954,944,936,928,920,910,902,896,888,880,874,866,860,854,848,840,834,828,822,816,812,806,800,796,790,784,780,776,770,766,760,756,752,748,744,740,736,732,728,724,720,716,712,708,704,702,698,694,690,688,684,682,678,674,672,668,666,662,660,656,654,650,648,646,644,640,638,636,632,630,628,624,622,620,618,616,614,610,608,606,604,602,600,598,596,594,592,590,588,586,584,582,580,578,576,574,572,570,568,566,564,564,562,560,558,556,554,552,552,550,548,546,546,544,542,540,538,538,536,534,532,532,530,528,528,526,524,522,522,520,518,518,516,514,514,512,512,510,508,508,506,504,504,502,502,500,498,498,496,496,494,494,492,490,490,488,488,486,486,484,484,482,480,480,478,478,476,476,474,474,472,472,470,470,468,468,468,466,466,464,464,462,462,460,460,458,458,456,456,456,454,454,452,452,450,450,450,448,448,446,446,444,444,444,442,442,440,440,440,438,438,438,436,436,434,434,434,432,432,432,430,430,428,428,428,426,426,426,424,424,424,422,422,422,420,420,420,418,418,418,416,416,416,414,414,414,412,412,412,410,410,410,408,408,408,406,406,406,404,404,404,404,402,402,402,400,400,400,400,398,398,398,396,396,396,396,394,394,394,392,392,392,392,390,390,390,388,388,388,388,386,386,386,386,384,384,384,384,382,382,382,382,380,380,380,380,378,378,378,378,376,376,376,376,376,374,374,374,374,374,372,372,372,372,372,370,370,370,370,370,368,368,368,368,368,366,366,366,366,366,364,364,364,364,364,364,362,362,362,362,362,360,360,360,360,360,360,358,358,358,358,358,358,356,356,356,356,356,356,354,354,354,354,354,352,352,352,352,352,352,350,350,350,350,350,350,350,348,348,348,348,348,348,346,346,346,346,346,346,344,344,344,344,344,344,344,342,342,342,342,342,342,340,340,340,340,340,340,340,338,338,338,338,338,338,338,336,336,336,336,336,336,336,334,334,334,334,334,334,334,332,332,332,332,332,332,332,332,330,330,330,330,330,330,330,328,328,328,328,328,328,328,328,326,326,326,326,326,326,326,324,324,324,324,324,324,324,324,322,322,322,322,322,322,322,322,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320, 0}; +static uint32_t g4050_high[]={28032,28032,28032,28032,28032,28032,28032,28032, 27668,27024,26479,25975,25402,24926,24465,24087,23667,23248,22912,22576,22198,21877,21583,21289,20996,20758,20492,20226,20002,19751,19541,19303,19107,18911,18715,18534,18310,18142,17960,17820,17652,17485,17331,17163,17037,16883,16729,16617,16463,16352,16212,16100,15960,15848,15750,15610,15512,15400,15302,15204,15107,14981,14883,14799,14701,14603,14519,14421,14365,14267,14183,14127,14085,14043,14016,14002,14002,14002,13610,13162,12771,12379,12001,11624,11274,10966,10672,10407,10169,9945,9721,9525,9344,9162,9008,8840,8686,8546,8420,8280,8155,8043,7931,7819,7721,7623,7525,7441,7343,7259,7175,7105,7021,6952,6882,6798,6742,6672,6602,6546,6490,6434,6364,6308,6266,6210,6154,6112,6056,6014,5972,5930,5874,5833,5791,5749,5707,5679,5637,5595,5567,5525,5483,5455,5427,5385,5357,5315,5287,5259,5231,5203,5175,5147,5119,5091,5063,5035,5007,4979,4951,4923,4909,4881,4853,4825,4811,4783,4769,4741,4713,4699,4672,4658,4630,4616,4588,4574,4546,4532,4518,4504,4476,4462,4448,4420,4406,4392,4364,4350,4336,4322,4308,4294,4266,4252,4238,4224,4210,4196,4182,4168,4154,4140,4126,4112,4098,4084,4070,4056,4042,4028,4014,4000,3986,3972,3958,3944,3944,3930,3916,3902,3888,3874,3860,3860,3846,3832,3818,3818,3804,3790,3776,3762,3762,3748,3734,3720,3720,3706,3692,3692,3678,3664,3650,3650,3636,3622,3622,3608,3594,3594,3580,3580,3566,3552,3552,3538,3524,3524,3510,3510,3497,3483,3483,3469,3469,3455,3455,3441,3427,3427,3413,3413,3399,3399,3385,3385,3371,3357,3357,3343,3343,3329,3329,3315,3315,3301,3301,3287,3287,3273,3273,3273,3259,3259,3245,3245,3231,3231,3217,3217,3203,3203,3189,3189,3189,3175,3175,3161,3161,3147,3147,3147,3133,3133,3119,3119,3105,3105,3105,3091,3091,3077,3077,3077,3063,3063,3063,3049,3049,3035,3035,3035,3021,3021,3021,3007,3007,2993,2993,2993,2979,2979,2979,2965,2965,2965,2951,2951,2951,2937,2937,2937,2923,2923,2923,2909,2909,2909,2895,2895,2895,2881,2881,2881,2867,2867,2867,2853,2853,2853,2839,2839,2839,2825,2825,2825,2825,2811,2811,2811,2797,2797,2797,2797,2783,2783,2783,2769,2769,2769,2769,2755,2755,2755,2741,2741,2741,2741,2727,2727,2727,2713,2713,2713,2713,2699,2699,2699,2699,2685,2685,2685,2685,2671,2671,2671,2671,2657,2657,2657,2657,2643,2643,2643,2643,2629,2629,2629,2629,2629,2615,2615,2615,2615,2615,2601,2601,2601,2601,2601,2587,2587,2587,2587,2587,2573,2573,2573,2573,2573,2559,2559,2559,2559,2559,2545,2545,2545,2545,2545,2545,2531,2531,2531,2531,2531,2517,2517,2517,2517,2517,2517,2503,2503,2503,2503,2503,2503,2489,2489,2489,2489,2489,2489,2475,2475,2475,2475,2475,2461,2461,2461,2461,2461,2461,2447,2447,2447,2447,2447,2447,2447,2433,2433,2433,2433,2433,2433,2419,2419,2419,2419,2419,2419,2405,2405,2405,2405,2405,2405,2405,2391,2391,2391,2391,2391,2391,2377,2377,2377,2377,2377,2377,2377,2363,2363,2363,2363,2363,2363,2363,2349,2349,2349,2349,2349,2349,2349,2336,2336,2336,2336,2336,2336,2336,2322,2322,2322,2322,2322,2322,2322,2322,2308,2308,2308,2308,2308,2308,2308,2294,2294,2294,2294,2294,2294,2294,2294,2280,2280,2280,2280,2280,2280,2280,2266,2266,2266,2266,2266,2266,2266,2266,2252,2252,2252,2252,2252,2252,2252,2252,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238,2238, 0}; +static uint32_t g4050_max[]={42752,42752,42752,42752,42752,42752,42752,42752, 41824,31456,23381,22709,22144,21610,21098,20608,20192,19808,19370,19008,18656,18368,18048,17728,17472,17216,16928,16682,16458,16234,16010,15829,15626,15424,15253,15061,14901,14720,14570,14421,14272,14133,13962,13834,13696,13589,13461,13333,13216,13088,12992,12874,12757,12672,12554,12469,12362,12277,12170,12085,12010,11904,11829,11744,11669,11594,11520,11424,11349,11285,11210,11136,11072,10997,10954,10880,10816,10773,10741,10709,10688,10677,10677,10677,10378,10037,9738,9440,9152,8864,8597,8362,8138,7936,7754,7584,7413,7264,7125,6986,6869,6741,6624,6517,6421,6314,6218,6133,6048,5962,5888,5813,5738,5674,5600,5536,5472,5418,5354,5301,5248,5184,5141,5088,5034,4992,4949,4906,4853,4810,4778,4736,4693,4661,4618,4586,4554,4522,4480,4448,4416,4384,4352,4330,4298,4266,4245,4213,4181,4160,4138,4106,4085,4053,4032,4010,3989,3968,3946,3925,3904,3882,3861,3840,3818,3797,3776,3754,3744,3722,3701,3680,3669,3648,3637,3616,3594,3584,3562,3552,3530,3520,3498,3488,3466,3456,3445,3434,3413,3402,3392,3370,3360,3349,3328,3317,3306,3296,3285,3274,3253,3242,3232,3221,3210,3200,3189,3178,3168,3157,3146,3136,3125,3114,3104,3093,3082,3072,3061,3050,3040,3029,3018,3008,3008,2997,2986,2976,2965,2954,2944,2944,2933,2922,2912,2912,2901,2890,2880,2869,2869,2858,2848,2837,2837,2826,2816,2816,2805,2794,2784,2784,2773,2762,2762,2752,2741,2741,2730,2730,2720,2709,2709,2698,2688,2688,2677,2677,2666,2656,2656,2645,2645,2634,2634,2624,2613,2613,2602,2602,2592,2592,2581,2581,2570,2560,2560,2549,2549,2538,2538,2528,2528,2517,2517,2506,2506,2496,2496,2496,2485,2485,2474,2474,2464,2464,2453,2453,2442,2442,2432,2432,2432,2421,2421,2410,2410,2400,2400,2400,2389,2389,2378,2378,2368,2368,2368,2357,2357,2346,2346,2346,2336,2336,2336,2325,2325,2314,2314,2314,2304,2304,2304,2293,2293,2282,2282,2282,2272,2272,2272,2261,2261,2261,2250,2250,2250,2240,2240,2240,2229,2229,2229,2218,2218,2218,2208,2208,2208,2197,2197,2197,2186,2186,2186,2176,2176,2176,2165,2165,2165,2154,2154,2154,2154,2144,2144,2144,2133,2133,2133,2133,2122,2122,2122,2112,2112,2112,2112,2101,2101,2101,2090,2090,2090,2090,2080,2080,2080,2069,2069,2069,2069,2058,2058,2058,2058,2048,2048,2048,2048,2037,2037,2037,2037,2026,2026,2026,2026,2016,2016,2016,2016,2005,2005,2005,2005,2005,1994,1994,1994,1994,1994,1984,1984,1984,1984,1984,1973,1973,1973,1973,1973,1962,1962,1962,1962,1962,1952,1952,1952,1952,1952,1941,1941,1941,1941,1941,1941,1930,1930,1930,1930,1930,1920,1920,1920,1920,1920,1920,1909,1909,1909,1909,1909,1909,1898,1898,1898,1898,1898,1898,1888,1888,1888,1888,1888,1877,1877,1877,1877,1877,1877,1866,1866,1866,1866,1866,1866,1866,1856,1856,1856,1856,1856,1856,1845,1845,1845,1845,1845,1845,1834,1834,1834,1834,1834,1834,1834,1824,1824,1824,1824,1824,1824,1813,1813,1813,1813,1813,1813,1813,1802,1802,1802,1802,1802,1802,1802,1792,1792,1792,1792,1792,1792,1792,1781,1781,1781,1781,1781,1781,1781,1770,1770,1770,1770,1770,1770,1770,1770,1760,1760,1760,1760,1760,1760,1760,1749,1749,1749,1749,1749,1749,1749,1749,1738,1738,1738,1738,1738,1738,1738,1728,1728,1728,1728,1728,1728,1728,1728,1717,1717,1717,1717,1717,1717,1717,1717,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,1706,0}; +static uint32_t g4050_xpa[]={9422,5978,4736,4028,3560,3220,2914,2756,2588,2448,2328,2224,2132,2052,1978,1914,1854,1800,1752,1706,1664,1626,1588,1554,1522,1492,1464,1438,1412,1388,1366,1344,1324,1304,1284,1268,1250,1232,1218,1202,1188,1172,1160,1146,1134,1120,1110,1098,1086,1076,1066,1056,1046,1036,1026,1018,1008,1000,992,984,976,968,960,952,946,938,932,924,918,912,906,898,892,888,882,876,870,864,860,854,848,844,838,834,828,824,820,814,810,806,802,798,794,790,786,782,778,774,770,766,762,758,754,752,748,744,740,738,734,730,728,724,722,718,716,712,710,706,704,700,698,696,692,690,686,684,682,678,676,674,672,668,666,664,662,660,656,654,652,650,648,646,644,642,638,636,634,632,630,628,626,624,622,620,618,616,614,612,612,610,608,606,604,602,600,598,596,594,594,592,590,588,586,584,584,582,580,578,576,576,574,572,570,570,568,566,564,564,562,560,560,558,556,554,554,552,550,550,548,546,546,544,542,542,540,540,538,536,536,534,532,532,530,530,528,526,526,524,524,522,522,520,518,518,516,516,514,514,512,512,510,508,508,506,506,504,504,502,502,500,500,498,498,496,496,494,494,492,492,492,490,490,488,488,486,486,484,484,482,482,480,480,480,478,478,476,476,474,474,474,472,472,470,470,468,468,468,466,466,464,464,464,462,462,462,460,460,458,458,458,456,456,454,454,454,452,452,452,450,450,450,448,448,446,446,446,444,444,444,442,442,442,440,440,440,438,438,438,436,436,436,434,434,434,432,432,432,430,430,430,430,428,428,428,426,426,426,424,424,424,424,422,422,422,420,420,420,418,418,418,418,416,416,416,414,414,414,414,412,412,412,412,410,410,410,408,408,408,408,406,406,406,406,404,404,404,404,402,402,402,402,400,400,400,400,398,398,398,398,396,396,396,396,394,394,394,394,392,392,392,392,392,390,390,390,390,388,388,388,388,386,386,386,386,386,384,384,384,384,384,382,382,382,382,380,380,380,380,380,378,378,378,378,378,376,376,376,376,376,374,374,374,374,374,372,372,372,372,372,370,370,370,370,370,368,368,368,368,368,366,366,366,366,366,364,364,364,364,364,364,362,362,362,362,362,360,360,360,360,360,360,358,358,358,358,358,358,356,356,356,356,356,354,354,354,354,354,354,352,352,352,352,352,352,350,350,350,350,350,350,350,348,348,348,348,348,348,346,346,346,346,346,346,344,344,344,344,344,344,344,342,342,342,342,342,342,340,340,340,340,340,340,340,338,338,338,338,338,338,338,336,336,336,336,336,336,336,334,334,334,334,334,334,334,332,332,332,332,332,332,332,330,330,330,330,330,330,330,330,328,328,328,328,328,328,328,326,326,326,326,326,326,326,326,324,324,324,324,324,324,324,324,322,322,322,322,322,322,322,322,320,320,320,320,320,320,320,320,318,318,318,318,318,318,318,318,318,316,316,316,316,316,316,316,316,314,314,314,314,314,314,314,314,314,312,312,312,312,312,312,312,312,312,310,310,310,310,310,310,310,310,310,308,308,308,308,308,308,308,308,308,306,306,306,306,306,306,306,306,306,306,304,304,304,304,304,304,304,304,304,302,302,302,302,302,302,302,302,302,302,300,300,300,300,300,300,300,300,300,300,298,298,298,298,298,298,298,298,298,298,298,296,296,296,296,296,296,296,296,296,296,294,294,294,294,294,294,294,294,294,294,294,292,292,292,292,292,292,292,292,292,292,292,290,290,290,290,290,290,290,290,290,290,290,288,288,288,288,288,288,288,288,288,288,288,288,286,286,286,286,286,286,286,286,286,286,286,286,284,284,284,284,284,284,284,284,284,284,284,284,282,282,282,282,282,282,282,282,282,282,282,282,280,280,280,280,280,280,280,280,280,280,280,280,280,278,278,278,278,278,278,278,278,278,278,278,278,278,276,276,276,276,276,276,276,276,276,276,276,276,276,274,274,274,274,274,274,274,274,274,274,274,274,274,274,272,272,272,272,272,272,272,272,272,272,272,272,272,272,270,270,270,270,270,270,270,270,270,270,270,270,270,270,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,0}; /** * database of motor profiles */ /* *INDENT-OFF* */ -static Motor_Profile motors[]={ - {MOTOR_KVSS080, 8000, kvss080}, - {MOTOR_G4050, 8016, g4050}, - {MOTOR_G4050, 21376, g4050}, - {MOTOR_G4050, 56064, g4050}, +static Motor_Profile gl843_motors[]={ + {MOTOR_KVSS080, 8000, 1, kvss080}, + {MOTOR_G4050, 8016, 1, g4050_fast}, + {MOTOR_G4050, 15624, 1, g4050_xpa}, + {MOTOR_G4050, 42752, 2, g4050_max}, + {MOTOR_G4050, 56064, 1, g4050_high}, + {0, 0, 0, NULL}, }; /* *INDENT-ON* */ diff -Nru sane-backends-1.0.22/backend/genesys_gl847.c sane-backends-1.0.23/backend/genesys_gl847.c --- sane-backends-1.0.22/backend/genesys_gl847.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl847.c 2012-08-10 00:33:29.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2010 Stphane Voltz + Copyright (C) 2010-2012 Stphane Voltz This file is part of the SANE package. @@ -42,33 +42,15 @@ If you do not wish that, delete this exception notice. */ +#undef BACKEND_NAME +#define BACKEND_NAME genesys_gl847 + #include "genesys_gl847.h" /**************************************************************************** Low level function ****************************************************************************/ -/** - * decodes and prints content of status (0x41) register - * @param val value read from reg41 - */ -static void -print_status (uint8_t val) -{ - char msg[80]; - - sprintf (msg, "%s%s%s%s%s%s%s%s", - val & REG41_PWRBIT ? "PWRBIT " : "", - val & REG41_BUFEMPTY ? "BUFEMPTY " : "", - val & REG41_FEEDFSH ? "FEEDFSH " : "", - val & REG41_SCANFSH ? "SCANFSH " : "", - val & REG41_HOMESNR ? "HOMESNR " : "", - val & REG41_LAMPSTS ? "LAMPSTS " : "", - val & REG41_FEBUSY ? "FEBUSY " : "", - val & REG41_MOTORENB ? "MOTORENB" : ""); - DBG (DBG_info, "status=%s\n", msg); -} - /* ------------------------------------------------------------------------ */ /* Read and write RAM, registers and AFE */ /* ------------------------------------------------------------------------ */ @@ -110,7 +92,7 @@ * parts if not multple of 512. First read is rounded to a multiple of 512 bytes, last read fetches the * remainder. Read addr is always 0x10000000 with the memory layout setup. * @param dev device to read data from - * @param addr address within ASIC emory space + * @param addr address within ASIC memory space, unused but kept for API * @param data pointer where to store the read data * @param len size to read */ @@ -121,13 +103,15 @@ SANE_Status status; size_t size, target, read, done; uint8_t outdata[8]; + uint8_t *buffer; - DBG (DBG_io, "gl847_bulk_read_data: requesting %lu bytes\n", (u_long) len); + DBG (DBG_io, "gl847_bulk_read_data: requesting %lu bytes at addr=0x%02x\n", (u_long) len, addr); if (len == 0) return SANE_STATUS_GOOD; target = len; + buffer = data; /* loop until computed data size is read */ while (target) @@ -175,7 +159,7 @@ DBG (DBG_io2, "gl847_bulk_read_data: trying to read %lu bytes of data\n", (u_long) read); - status = sanei_usb_read_bulk (dev->dn, data, &read); + status = sanei_usb_read_bulk (dev->dn, buffer, &read); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -183,16 +167,17 @@ sane_strstatus (status)); return status; } + done=read; + DBG (DBG_io2, "gl847_bulk_read_data: %lu bytes of data read\n", (u_long) done); /* read less than 512 bytes remainder */ if (read < size) { - done=read; read = size - read; DBG (DBG_io2, "gl847_bulk_read_data: trying to read %lu bytes of data\n", (u_long) read); - status = sanei_usb_read_bulk (dev->dn, data+done, &read); + status = sanei_usb_read_bulk (dev->dn, buffer+done, &read); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -200,13 +185,20 @@ sane_strstatus (status)); return status; } + done=read; + DBG (DBG_io2, "gl847_bulk_read_data: %lu bytes of data read\n", (u_long) done); } DBG (DBG_io2, "%s: read %lu bytes, %lu remaining\n", __FUNCTION__, (u_long) size, (u_long) (target - size)); target -= size; - data += size; + buffer += size; + } + + if (DBG_LEVEL >= DBG_data && dev->binary!=NULL) + { + fwrite(data, len, 1, dev->binary); } DBGCOMPLETED; @@ -289,16 +281,100 @@ return SANE_FALSE; } +/** + * compute the step multiplier used + */ +static int +gl847_get_step_multiplier (Genesys_Register_Set * regs) +{ + Genesys_Register_Set *r = NULL; + int value = 1; + + r = sanei_genesys_get_address (regs, 0x9d); + if (r != NULL) + { + value = (r->value & 0x0f)>>1; + value = 1 << value; + } + DBG (DBG_io, "%s: step multiplier is %d\n", __FUNCTION__, value); + return value; +} + +/** @get sensor profile + * search for the database of motor profiles and get the best one. Each + * profile is at a specific dpihw. Use LiDE 110 table by default. + * @param sensor_type sensor id + * @param dpi hardware dpi for the scan + * @return a pointer to a Sensor_Profile struct + */ +static Sensor_Profile *get_sensor_profile(int sensor_type, int dpi) +{ + unsigned int i; + int idx; + + i=0; + idx=-1; + while(i=dpi + && sensors[i].dpimodel->ccd_type, xres); + return sensor->exposure; +} + /** @brief sensor specific settings */ static void -gl847_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs) +gl847_setup_sensor (Genesys_Device * dev, Genesys_Register_Set * regs, int dpi) { Genesys_Register_Set *r; - int i; + Sensor_Profile *sensor; + int dpihw, i; + uint16_t exp; DBGSTART; + dpihw=sanei_genesys_compute_dpihw(dev,dpi); for (i = 0x06; i < 0x0e; i++) { @@ -314,6 +390,44 @@ r->value = dev->sensor.regs_0x52_0x5e[i]; } + /* set EXPDUMMY and CKxMAP */ + dpihw=sanei_genesys_compute_dpihw(dev,dpi); + sensor=get_sensor_profile(dev->model->ccd_type, dpihw); + + sanei_genesys_set_reg_from_set(regs,REG_EXPDMY,(uint8_t)((sensor->expdummy) & 0xff)); + + /* if no calibration has been done, set default values for exposures */ + exp=dev->sensor.regs_0x10_0x1d[0]*256+dev->sensor.regs_0x10_0x1d[1]; + if(exp==0) + { + exp=sensor->expr; + } + sanei_genesys_set_double(regs,REG_EXPR,exp); + + exp=dev->sensor.regs_0x10_0x1d[2]*256+dev->sensor.regs_0x10_0x1d[3]; + if(exp==0) + { + exp=sensor->expg; + } + sanei_genesys_set_double(regs,REG_EXPG,exp); + + exp=dev->sensor.regs_0x10_0x1d[4]*256+dev->sensor.regs_0x10_0x1d[5]; + if(exp==0) + { + exp=sensor->expb; + } + sanei_genesys_set_double(regs,REG_EXPB,exp); + + sanei_genesys_set_triple(regs,REG_CK1MAP,sensor->ck1map); + sanei_genesys_set_triple(regs,REG_CK3MAP,sensor->ck3map); + sanei_genesys_set_triple(regs,REG_CK4MAP,sensor->ck4map); + + /* order of the sub-segments */ + dev->order=sensor->order; + + r = sanei_genesys_get_address (regs, 0x17); + r->value = sensor->r17; + DBGCOMPLETED; } @@ -335,7 +449,15 @@ static void gl847_init_registers (Genesys_Device * dev) { + int lide700=0; + uint8_t val; + DBGSTART; + /* 700F class needs some different initial settings */ + if (strcmp (dev->model->name, "canon-lide-700f") == 0) + { + lide700 = 1; + } memset (dev->reg, 0, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); @@ -351,17 +473,22 @@ SETREG (0x0a, 0x00); SETREG (0x0b, 0x01); SETREG (0x0c, 0x02); - /* SETREG (0x0d, REG0D_CLRMCNT); */ + + /* LED exposures */ SETREG (0x10, 0x00); SETREG (0x11, 0x00); SETREG (0x12, 0x00); SETREG (0x13, 0x00); SETREG (0x14, 0x00); SETREG (0x15, 0x00); + SETREG (0x16, 0x10); SETREG (0x17, 0x08); SETREG (0x18, 0x00); + + /* EXPDMY */ SETREG (0x19, 0x50); + SETREG (0x1a, 0x34); SETREG (0x1b, 0x00); SETREG (0x1c, 0x02); @@ -414,19 +541,28 @@ SETREG (0x68, 0x80); SETREG (0x69, 0x20); SETREG (0x6a, 0x20); + + /* CK1MAP */ SETREG (0x74, 0x00); SETREG (0x75, 0x00); SETREG (0x76, 0x3c); + + /* CK3MAP */ + SETREG (0x77, 0x00); + SETREG (0x78, 0x00); + SETREG (0x79, 0x9f); + + /* CK4MAP */ SETREG (0x7a, 0x00); SETREG (0x7b, 0x00); SETREG (0x7c, 0x55); + SETREG (0x7d, 0x00); + /* NOTE: autoconf is a non working option */ SETREG (0x87, 0x02); SETREG (0x9d, 0x06); - SETREG (0x9d, 0x00); /* 1x multiplier instead of 8x */ SETREG (0xa2, 0x0f); - SETREG (0xa6, 0x04); SETREG (0xbd, 0x18); SETREG (0xfe, 0x08); @@ -439,6 +575,20 @@ SETREG (0xc9, 0x00); SETREG (0xca, 0x00); + /* LiDE 700 fixups */ + if(lide700) + { + SETREG (0x5f, 0x04); + SETREG (0x7d, 0x80); + + /* we write to these registers only once */ + val=0; + sanei_genesys_write_register (dev, REG7E, val); + sanei_genesys_write_register (dev, REG9E, val); + sanei_genesys_write_register (dev, REG9F, val); + sanei_genesys_write_register (dev, REGAB, val); + } + /* fine tune upon device description */ dev->reg[reg_0x05].value &= ~REG05_DPIHW; switch (dev->sensor.optical_res) @@ -470,7 +620,7 @@ * @param table_nr index of the slope table in ASIC memory * Must be in the [0-4] range. * @param slope_table pointer to 16 bit values array of the slope table - * @param steps number of elemnts in the slope table + * @param steps number of elements in the slope table */ static SANE_Status gl847_send_slope_table (Genesys_Device * dev, int table_nr, @@ -532,8 +682,18 @@ SANE_Status status = SANE_STATUS_GOOD; int i; uint16_t val; + uint8_t val8; + + DBGSTART; + + /* wait for FE to be ready */ + status = sanei_genesys_get_status (dev, &val8); + while (val8 & REG41_FEBUSY); + { + usleep (10000); + status = sanei_genesys_get_status (dev, &val8); + }; - DBG (DBG_proc, "gl847_set_ad_fe(): start\n"); if (set == AFE_INIT) { DBG (DBG_proc, "gl847_set_ad_fe(): setting DAC %u\n", @@ -595,8 +755,28 @@ } } - DBG (DBG_proc, "gl847_set_ad_fe(): end\n"); + DBGCOMPLETED; + return status; +} + +static SANE_Status +gl847_homsnr_gpio(Genesys_Device *dev) +{ +uint8_t val; +SANE_Status status=SANE_STATUS_GOOD; + if (dev->model->gpo_type == GPO_CANONLIDE700) + { + RIE (sanei_genesys_read_register (dev, REG6C, &val)); + val &= ~REG6C_GPIO10; + RIE (sanei_genesys_write_register (dev, REG6C, val)); + } + else + { + RIE (sanei_genesys_read_register (dev, REG6C, &val)); + val |= REG6C_GPIO10; + RIE (sanei_genesys_write_register (dev, REG6C, val)); + } return status; } @@ -619,7 +799,7 @@ return gl847_set_ad_fe (dev, set); } - /* for now ther is no support for wolfson fe */ + /* for now there is no support yet for wolfson fe */ DBG (DBG_proc, "gl847_set_fe(): unsupported frontend type %d\n", dev->reg[reg_0x04].value & REG04_FESET); @@ -627,20 +807,11 @@ return SANE_STATUS_UNSUPPORTED; } -#define MOTOR_FLAG_AUTO_GO_HOME 1 -#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 2 - -#define MOTOR_ACTION_FEED 1 -#define MOTOR_ACTION_GO_HOME 2 -#define MOTOR_ACTION_HOME_FREE 3 - /** @brief setup motor for off mode * */ static SANE_Status -gl847_init_motor_regs_off (Genesys_Device * dev, - Genesys_Register_Set * reg, - unsigned int scan_lines) +gl847_init_motor_regs_off (Genesys_Register_Set * reg, unsigned int scan_lines) { unsigned int feedl; Genesys_Register_Set *r; @@ -649,35 +820,6 @@ feedl = 2; -/* all needed slopes available. we did even decide which mode to use. - what next? - - transfer slopes -SCAN: -flags \ use_fast_fed ! 0 1 -------------------------\-------------------- - 0 ! 0,1,2 0,1,2,3 -MOTOR_FLAG_AUTO_GO_HOME ! 0,1,2,4 0,1,2,3,4 -OFF: none -FEED: 3 -GO_HOME: 3 -HOME_FREE: 3 - - setup registers - * slope specific registers (already done) - * DECSEL for HOME_FREE/GO_HOME/SCAN - * FEEDL - * MTRREV - * MTRPWR - * FASTFED - * STEPSEL - * MTRPWM - * FSTPSEL - * FASTPWM - * HOMENEG - * BWDSTEP - * FWDSTEP - * Z1 - * Z2 - */ r = sanei_genesys_get_address (reg, 0x3d); r->value = (feedl >> 16) & 0xf; r = sanei_genesys_get_address (reg, 0x3e); @@ -728,250 +870,39 @@ r = sanei_genesys_get_address (reg, 0x5f); r->value = 1; - - DBGCOMPLETED; - return SANE_STATUS_GOOD; -} - -static SANE_Status -gl847_init_motor_regs (Genesys_Device * dev, Genesys_Register_Set * reg, unsigned int feed_steps, /*1/base_ydpi */ -/*maybe float for half/quarter step resolution?*/ - unsigned int action, unsigned int flags) -{ - SANE_Status status; - unsigned int fast_exposure; - int use_fast_fed = 0; - uint16_t fast_slope_table[256]; - uint8_t val; - unsigned int fast_slope_time; - unsigned int fast_slope_steps = 32; - unsigned int feedl; - Genesys_Register_Set *r; -/*number of scan lines to add in a scan_lines line*/ - - DBG (DBG_proc, - "gl847_init_motor_regs : feed_steps=%d, action=%d, flags=%x\n", - feed_steps, action, flags); - - if (action == MOTOR_ACTION_FEED || action == MOTOR_ACTION_GO_HOME || action == MOTOR_ACTION_HOME_FREE) - { - /* FEED and GO_HOME can use fastest slopes available */ - fast_slope_steps = 256; - fast_exposure = sanei_genesys_exposure_time2 (dev, - dev->motor.base_ydpi / 4, - 0, /*step_type */ - 0, /*last used pixel */ - 0, - 0); - - DBG (DBG_info, "gl847_init_motor_regs : fast_exposure=%d pixels\n", - fast_exposure); - } - -/* HOME_FREE must be able to stop in one step, so do not try to get faster */ - /* XXX STEF XXX - if (action == MOTOR_ACTION_HOME_FREE) - { - fast_slope_steps = 256; - fast_exposure = dev->motor.slopes[0][0].maximum_start_speed; - } - */ - - fast_slope_time = sanei_genesys_create_slope_table3 (dev, - fast_slope_table, - 256, - fast_slope_steps, - 0, - fast_exposure, - dev->motor.base_ydpi / 4, - &fast_slope_steps, - &fast_exposure, - 0); - - feedl = feed_steps - fast_slope_steps * 2; - use_fast_fed = 1; - -/* all needed slopes available. we did even decide which mode to use. - what next? - - transfer slopes -SCAN: -flags \ use_fast_fed ! 0 1 -------------------------\-------------------- - 0 ! 0,1,2 0,1,2,3 -MOTOR_FLAG_AUTO_GO_HOME ! 0,1,2,4 0,1,2,3,4 -OFF: none -FEED: 3 -GO_HOME: 3 -HOME_FREE: 3 - - setup registers - * slope specific registers (already done) - * DECSEL for HOME_FREE/GO_HOME/SCAN - * FEEDL - * MTRREV - * MTRPWR - * FASTFED - * STEPSEL - * MTRPWM - * FSTPSEL - * FASTPWM - * HOMENEG - * BWDSTEP - * FWDSTEP - * Z1 - * Z2 - */ - - r = sanei_genesys_get_address (reg, 0x3d); - r->value = (feedl >> 16) & 0xf; - r = sanei_genesys_get_address (reg, 0x3e); - r->value = (feedl >> 8) & 0xff; - r = sanei_genesys_get_address (reg, 0x3f); - r->value = feedl & 0xff; - DBG (DBG_io ,"%s: feedl=%d\n",__FUNCTION__,feedl); - - r = sanei_genesys_get_address (reg, 0x25); - r->value = 0; - r = sanei_genesys_get_address (reg, 0x26); - r->value = 0; - r = sanei_genesys_get_address (reg, 0x27); - r->value = 0; - - /* set REG 02 */ - r = sanei_genesys_get_address (reg, REG02); - r->value &= ~REG02_LONGCURV; - r->value &= ~REG02_HOMENEG; - r->value &= ~REG02_AGOHOME; - r->value &= ~REG02_ACDCDIS; - - if (flags & MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE) - r->value |= REG02_ACDCDIS; - - r->value |= REG02_MTRPWR; - - if (action == MOTOR_ACTION_GO_HOME) - r->value |= (REG02_MTRREV | REG02_NOTHOME); - else - r->value &= ~(REG02_MTRREV | REG02_HOMENEG); - - if (use_fast_fed) - r->value |= REG02_FASTFED; - else - r->value &= ~REG02_FASTFED; - - if (flags & MOTOR_FLAG_AUTO_GO_HOME) - r->value |= REG02_AGOHOME; - - /* reset gpio pin */ - RIE (sanei_genesys_read_register (dev, REG6C, &val)); - val |= REG6C_GPIO13; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - RIE (sanei_genesys_read_register (dev, REG6C, &val)); - val |= REG6C_GPIO12; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - - status = gl847_send_slope_table (dev, 0, fast_slope_table, 256); - status = gl847_send_slope_table (dev, 1, fast_slope_table, 256); - status = gl847_send_slope_table (dev, 2, fast_slope_table, 256); - status = gl847_send_slope_table (dev, 3, fast_slope_table, 256); - status = gl847_send_slope_table (dev, 4, fast_slope_table, 256); - - if (status != SANE_STATUS_GOOD) - return status; - - r = sanei_genesys_get_address (reg, REG67); - r->value = REG67_MTRPWM; - - r = sanei_genesys_get_address (reg, REG68); - r->value = REG68_FASTPWM; - - r = sanei_genesys_get_address (reg, 0x21); - r->value = 1; - - r = sanei_genesys_get_address (reg, 0x24); - r->value = 1; - - r = sanei_genesys_get_address (reg, REG60); - r->value = 0 << REG60S_STEPSEL; - - r = sanei_genesys_get_address (reg, REG63); - r->value = 0 << REG63S_FSTPSEL; - - r = sanei_genesys_get_address (reg, 0x69); - r->value = 1; - - r = sanei_genesys_get_address (reg, 0x6a); - r->value = fast_slope_steps; - - r = sanei_genesys_get_address (reg, 0x5f); - r->value = fast_slope_steps; - DBGCOMPLETED; return SANE_STATUS_GOOD; } /** @brief set up motor related register for scan - * the following registers are modified: - * 0x02 - * - - transfer slopes -SCAN: -flags \ use_fast_fed ! 0 1 -------------------------\-------------------- - 0 ! 0,1,2 0,1,2,3 -MOTOR_FLAG_AUTO_GO_HOME ! 0,1,2,4 0,1,2,3,4 -OFF: none -FEED: 3 -GO_HOME: 3 -HOME_FREE: 3 - - setup registers - * slope specific registers (already done) - * DECSEL for HOME_FREE/GO_HOME/SCAN - * FEEDL - * MTRREV - * MTRPWR - * FASTFED - * STEPSEL - * MTRPWM - * FSTPSEL - * FASTPWM - * HOMENEG - * BWDSTEP - * FWDSTEP - * Z1 - * Z2 - */ + */ static SANE_Status gl847_init_motor_regs_scan (Genesys_Device * dev, Genesys_Register_Set * reg, - unsigned int scan_exposure_time, /*pixel */ - float scan_yres, /*dpi, motor resolution */ - int scan_step_type, /*0: full, 1: half, 2: quarter */ - unsigned int scan_lines, /*lines, scan resolution */ + unsigned int scan_exposure_time, + float scan_yres, + int scan_step_type, + unsigned int scan_lines, unsigned int scan_dummy, -/*number of scan lines to add in a scan_lines line*/ - unsigned int feed_steps, /*1/base_ydpi */ -/*maybe float for half/quarter step resolution?*/ - int scan_power_mode, unsigned int flags) + unsigned int feed_steps, + int scan_power_mode, + unsigned int flags) { SANE_Status status; - unsigned int fast_exposure; - int use_fast_fed = 0; + int use_fast_fed; unsigned int fast_time; unsigned int slow_time; - uint16_t slow_slope_table[256]; - uint16_t fast_slope_table[256]; - uint16_t back_slope_table[256]; - unsigned int slow_slope_time; - unsigned int fast_slope_time; - unsigned int back_slope_time; - unsigned int slow_slope_steps = 0; - unsigned int fast_slope_steps = 32; - unsigned int back_slope_steps = 0; - unsigned int feedl; + unsigned int fast_dpi; + uint16_t scan_table[SLOPE_TABLE_SIZE]; + uint16_t fast_table[SLOPE_TABLE_SIZE]; + int scan_steps, fast_steps, factor; + unsigned int feedl, dist; Genesys_Register_Set *r; - unsigned int min_restep = 0x20; uint32_t z1, z2; + unsigned int min_restep = 0x20; uint8_t val, effective; + int fast_step_type; + unsigned int ccdlmt,tgtime; DBGSTART; DBG (DBG_proc, "gl847_init_motor_regs_scan : scan_exposure_time=%d, " @@ -982,137 +913,25 @@ scan_step_type, scan_lines, scan_dummy, feed_steps, scan_power_mode, flags); - fast_exposure = - sanei_genesys_exposure_time2 (dev, dev->motor.base_ydpi / 4, - 0, 0, 0, scan_power_mode); - - DBG (DBG_info, "gl847_init_motor_regs_scan : fast_exposure=%d pixels\n", - fast_exposure); - -/* - we calculate both tables for SCAN. the fast slope step count depends on - how many steps we need for slow acceleration and how much steps we are - allowed to use. - */ - slow_slope_time = sanei_genesys_create_slope_table3 (dev, - slow_slope_table, - 256, - 256, - scan_step_type, - scan_exposure_time, - scan_yres, - &slow_slope_steps, - NULL, scan_power_mode); - - back_slope_time = sanei_genesys_create_slope_table3 (dev, - back_slope_table, - 256, - 256, - scan_step_type, - scan_exposure_time, - scan_yres, - &back_slope_steps, - NULL, scan_power_mode); - - if (feed_steps < (slow_slope_steps >> scan_step_type)) - { - /*TODO: what should we do here?? go back to exposure calculation? */ - feed_steps = slow_slope_steps >> scan_step_type; - } - - if (feed_steps > fast_slope_steps * 2 - - (slow_slope_steps >> scan_step_type)) - fast_slope_steps = 256; - else - { - /* we need to shorten fast_slope_steps here. */ - fast_slope_steps = (feed_steps - (slow_slope_steps >> scan_step_type)) / 2; - } - if(fast_slope_steps>256) - fast_slope_steps=256; + /* get step multiplier */ + factor = gl847_get_step_multiplier (reg); - DBG (DBG_info, - "gl847_init_motor_regs_scan: Maximum allowed slope steps for fast slope: %d\n", - fast_slope_steps); - - fast_slope_time = sanei_genesys_create_slope_table3 (dev, - fast_slope_table, - 256, - fast_slope_steps, - 0, - fast_exposure, - dev->motor.base_ydpi / 4, - &fast_slope_steps, - &fast_exposure, - scan_power_mode); - - if (feed_steps < - fast_slope_steps * 2 + (slow_slope_steps >> scan_step_type)) - { - use_fast_fed = 0; - DBG (DBG_info, - "gl847_init_motor_regs_scan: feed too short, slow move forced.\n"); - } - else + use_fast_fed=0; + /* no fast fed since feed works well */ + if(dev->settings.yres==4444 && feed_steps>100 + && ((flags & MOTOR_FLAG_FEED)==0)) { -/* for deciding whether we should use fast mode we need to check how long we - need for (fast)accelerating, moving, decelerating, (TODO: stopping?) - (slow)accelerating again versus (slow)accelerating and moving. we need - fast and slow tables here. -*/ -/*NOTE: scan_exposure_time is per scan_yres*/ -/*NOTE: fast_exposure is per base_ydpi/4*/ -/*we use full steps as base unit here*/ - fast_time = - fast_exposure / 4 * - (feed_steps - fast_slope_steps * 2 - - (slow_slope_steps >> scan_step_type)) - + fast_slope_time * 2 + slow_slope_time; - slow_time = - (scan_exposure_time * scan_yres) / dev->motor.base_ydpi * - (feed_steps - (slow_slope_steps >> scan_step_type)) + slow_slope_time; - - DBG (DBG_info, "gl847_init_motor_regs_scan: Time for slow move: %d\n", - slow_time); - DBG (DBG_info, "gl847_init_motor_regs_scan: Time for fast move: %d\n", - fast_time); - - use_fast_fed = fast_time < slow_time; + use_fast_fed=1; } - - DBG (DBG_info, "gl847_init_motor_regs_scan: decided to use %s mode\n", - use_fast_fed ? "fast feed" : "slow feed"); - - if (use_fast_fed) - feedl = feed_steps - fast_slope_steps * 2 - - (slow_slope_steps >> scan_step_type); - else if ((feed_steps << scan_step_type) < slow_slope_steps) - feedl = 0; - else - feedl = (feed_steps << scan_step_type) - slow_slope_steps; - + DBG (DBG_io, "%s: use_fast_fed=%d\n", __FUNCTION__, use_fast_fed); -/* all needed slopes available. we did even decide which mode to use. - what next? */ - r = sanei_genesys_get_address (reg, 0x3d); - r->value = (feedl >> 16) & 0xf; - r = sanei_genesys_get_address (reg, 0x3e); - r->value = (feedl >> 8) & 0xff; - r = sanei_genesys_get_address (reg, 0x3f); - r->value = feedl & 0xff; - DBG (DBG_io ,"%s: feedl=%d\n",__FUNCTION__,feedl); - - r = sanei_genesys_get_address (reg, 0x25); - r->value = (scan_lines >> 16) & 0xf; - r = sanei_genesys_get_address (reg, 0x26); - r->value = (scan_lines >> 8) & 0xff; - r = sanei_genesys_get_address (reg, 0x27); - r->value = scan_lines & 0xff; + sanei_genesys_set_triple(reg, REG_LINCNT, scan_lines); + DBG (DBG_io, "%s: lincnt=%d\n", __FUNCTION__, scan_lines); /* compute register 02 value */ r = sanei_genesys_get_address (reg, REG02); r->value = 0x00; - r->value |= REG02_NOTHOME | REG02_MTRPWR; + r->value |= REG02_MTRPWR; if (use_fast_fed) r->value |= REG02_FASTFED; @@ -1120,18 +939,104 @@ r->value &= ~REG02_FASTFED; if (flags & MOTOR_FLAG_AUTO_GO_HOME) - r->value |= REG02_AGOHOME; + r->value |= REG02_AGOHOME | REG02_NOTHOME; + + if ((flags & MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE) + ||(scan_yres>=dev->sensor.optical_res)) + { + r->value |= REG02_ACDCDIS; + } + + /* scan and backtracking slope table */ + slow_time=sanei_genesys_slope_table(scan_table, + &scan_steps, + scan_yres, + scan_exposure_time, + dev->motor.base_ydpi, + scan_step_type, + factor, + dev->model->motor_type, + gl847_motors); + RIE(gl847_send_slope_table (dev, SCAN_TABLE, scan_table, scan_steps*factor)); + RIE(gl847_send_slope_table (dev, BACKTRACK_TABLE, scan_table, scan_steps*factor)); + + /* fast table */ + fast_dpi=sanei_genesys_get_lowest_ydpi(dev); + fast_step_type=scan_step_type; + if(scan_step_type>=2) + { + fast_step_type=2; + } + + fast_time=sanei_genesys_slope_table(fast_table, + &fast_steps, + fast_dpi, + scan_exposure_time, + dev->motor.base_ydpi, + fast_step_type, + factor, + dev->model->motor_type, + gl847_motors); + + /* manual override of high start value */ + fast_table[0]=fast_table[1]; + + RIE(gl847_send_slope_table (dev, STOP_TABLE, fast_table, fast_steps*factor)); + RIE(gl847_send_slope_table (dev, FAST_TABLE, fast_table, fast_steps*factor)); + RIE(gl847_send_slope_table (dev, HOME_TABLE, fast_table, fast_steps*factor)); + + /* correct move distance by acceleration and deceleration amounts */ + feedl=feed_steps; + if (use_fast_fed) + { + feedl<<=fast_step_type; + dist=(scan_steps+2*fast_steps)*factor; + /* TODO read and decode REGAB */ + r = sanei_genesys_get_address (reg, 0x5e); + dist += (r->value & 31); + /* FEDCNT */ + r = sanei_genesys_get_address (reg, REG_FEDCNT); + dist += r->value; + } + else + { + feedl<<=scan_step_type; + dist=scan_steps*factor; + if (flags & MOTOR_FLAG_FEED) + dist *=2; + } + DBG (DBG_io2, "%s: scan steps=%d\n", __FUNCTION__, scan_steps); + DBG (DBG_io2, "%s: acceleration distance=%d\n", __FUNCTION__, dist); + + /* check for overflow */ + if(distvalue & REG0C_CCDLMT)+1; - if (flags & MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE) - r->value |= REG02_ACDCDIS; + r = sanei_genesys_get_address (reg, REG1C); + tgtime=1<<(r->value & REG1C_TGTIME); - /* hi res motor speed */ + /* hi res motor speed GPIO */ RIE (sanei_genesys_read_register (dev, REG6C, &effective)); /* if quarter step, bipolar Vref2 */ if (scan_step_type > 1) { - val = effective & ~REG6C_GPIO13; + if (scan_step_type < 3) + { + val = effective & ~REG6C_GPIO13; + } + else + { + val = effective | REG6C_GPIO13; + } } else { @@ -1144,98 +1049,28 @@ val = effective | REG6C_GPIO10; RIE (sanei_genesys_write_register (dev, REG6C, val)); - status = gl847_send_slope_table (dev, 0, slow_slope_table, 256); - - if (status != SANE_STATUS_GOOD) - return status; - - status = gl847_send_slope_table (dev, 1, back_slope_table, 256); - - if (status != SANE_STATUS_GOOD) - return status; - - status = gl847_send_slope_table (dev, 2, slow_slope_table, 256); - - if (status != SANE_STATUS_GOOD) - return status; - - if (use_fast_fed) - { - status = gl847_send_slope_table (dev, 3, fast_slope_table, 256); - - if (status != SANE_STATUS_GOOD) - return status; - } - - if (flags & MOTOR_FLAG_AUTO_GO_HOME) - { - status = gl847_send_slope_table (dev, 4, fast_slope_table, 256); - - if (status != SANE_STATUS_GOOD) - return status; - } - - -/* now reg 0x21 and 0x24 are available, we can calculate reg 0x22 and 0x23, - reg 0x60-0x62 and reg 0x63-0x65 - rule: - 2*STEPNO+FWDSTEP=2*FASTNO+BWDSTEP -*/ -/* steps of table 0*/ - if (min_restep < slow_slope_steps * 2 + 2) - min_restep = slow_slope_steps * 2 + 2; -/* steps of table 1*/ - if (min_restep < back_slope_steps * 2 + 2) - min_restep = back_slope_steps * 2 + 2; -/* steps of table 0*/ - r = sanei_genesys_get_address (reg, 0x22); - r->value = min_restep - slow_slope_steps * 2; - -/* steps of table 1*/ - r = sanei_genesys_get_address (reg, 0x23); - r->value = min_restep - back_slope_steps * 2; - - -/* - for z1/z2: - in documentation mentioned variables a-d: - a = time needed for acceleration, table 1 - b = time needed for reg 0x1f... wouldn't that be reg0x1f*exposure_time? - c = time needed for acceleration, table 1 - d = time needed for reg 0x22... wouldn't that be reg0x22*exposure_time? - z1 = (c+d-1) % exposure_time - z2 = (a+b-1) % exposure_time -*/ -/* i don't see any effect of this. i can only guess that this will enhance - sub-pixel accuracy - z1 = (slope_0_time-1) % exposure_time; - z2 = (slope_0_time-1) % exposure_time; -*/ - - sanei_genesys_calculate_zmode2 (use_fast_fed, - scan_exposure_time, - slow_slope_table, - slow_slope_steps, - feedl, - back_slope_steps, - &z1, - &z2); + min_restep=scan_steps/2-1; + if (min_restep < 1) + min_restep = 1; + r = sanei_genesys_get_address (reg, REG_FWDSTEP); + r->value = min_restep; + r = sanei_genesys_get_address (reg, REG_BWDSTEP); + r->value = min_restep; + + sanei_genesys_calculate_zmode2(use_fast_fed, + scan_exposure_time*ccdlmt*tgtime, + scan_table, + scan_steps*factor, + feedl, + min_restep*factor, + &z1, + &z2); DBG (DBG_info, "gl847_init_motor_regs_scan: z1 = %d\n", z1); - r = sanei_genesys_get_address (reg, REG60); - r->value = ((z1 >> 16) & REG60_Z1MOD) | (scan_step_type << REG60S_STEPSEL); - r = sanei_genesys_get_address (reg, REG61); - r->value = ((z1 >> 8) & REG61_Z1MOD); - r = sanei_genesys_get_address (reg, REG62); - r->value = (z1 & REG62_Z1MOD); + sanei_genesys_set_triple(reg, REG60, z1 | (scan_step_type << (16+REG60S_STEPSEL))); DBG (DBG_info, "gl847_init_motor_regs_scan: z2 = %d\n", z2); - r = sanei_genesys_get_address (reg, REG63); - r->value = ((z2 >> 16) & REG63_Z2MOD) | (scan_step_type << REG63S_FSTPSEL); - r = sanei_genesys_get_address (reg, REG64); - r->value = ((z2 >> 8) & REG64_Z2MOD); - r = sanei_genesys_get_address (reg, REG65); - r->value = (z2 & REG65_Z2MOD); + sanei_genesys_set_triple(reg, REG63, z2 | (scan_step_type << (16+REG63S_FSTPSEL))); r = sanei_genesys_get_address (reg, 0x1e); r->value &= 0xf0; /* 0 dummy lines */ @@ -1247,53 +1082,31 @@ r = sanei_genesys_get_address (reg, REG68); r->value = REG68_FASTPWM; - r = sanei_genesys_get_address (reg, 0x21); - r->value = slow_slope_steps; - - r = sanei_genesys_get_address (reg, 0x24); - r->value = back_slope_steps; + r = sanei_genesys_get_address (reg, REG_STEPNO); + r->value = scan_steps; - r = sanei_genesys_get_address (reg, 0x69); - r->value = slow_slope_steps; + r = sanei_genesys_get_address (reg, REG_FASTNO); + r->value = scan_steps; - r = sanei_genesys_get_address (reg, 0x6a); - r->value = fast_slope_steps; + r = sanei_genesys_get_address (reg, REG_FSHDEC); + r->value = scan_steps; - r = sanei_genesys_get_address (reg, 0x5f); - r->value = fast_slope_steps; + r = sanei_genesys_get_address (reg, REG_FMOVNO); + r->value = fast_steps; + r = sanei_genesys_get_address (reg, REG_FMOVDEC); + r->value = fast_steps; DBGCOMPLETED; return SANE_STATUS_GOOD; } -static int -gl847_get_dpihw (Genesys_Device * dev) -{ - Genesys_Register_Set *r; - r = sanei_genesys_get_address (dev->reg, REG05); - if ((r->value & REG05_DPIHW) == REG05_DPIHW_600) - return 600; - if ((r->value & REG05_DPIHW) == REG05_DPIHW_1200) - return 1200; - if ((r->value & REG05_DPIHW) == REG05_DPIHW_2400) - return 2400; - if ((r->value & REG05_DPIHW) == REG05_DPIHW_4800) - return 4800; - return 0; -} - -#define OPTICAL_FLAG_DISABLE_GAMMA 1 -#define OPTICAL_FLAG_DISABLE_SHADING 2 -#define OPTICAL_FLAG_DISABLE_LAMP 4 -#define OPTICAL_FLAG_ENABLE_LEDADD 8 - static SANE_Status -gl847_init_optical_regs_off (Genesys_Device * dev, Genesys_Register_Set * reg) +gl847_init_optical_regs_off (Genesys_Register_Set * reg) { Genesys_Register_Set *r; - DBG (DBG_proc, "gl847_init_optical_regs_off : start\n"); + DBGSTART; r = sanei_genesys_get_address (reg, REG01); r->value &= ~REG01_SCAN; @@ -1332,47 +1145,70 @@ SANE_Bool half_ccd, int color_filter, int flags) { unsigned int words_per_line; - unsigned int startx,endx, used_pixels,max_pixels; - unsigned int dpiset; - unsigned int i,bytes; + unsigned int startx, endx, used_pixels; + unsigned int dpiset, dpihw,segnb,cksel,factor; + unsigned int bytes; Genesys_Register_Set *r; SANE_Status status; - int double_xres; + Sensor_Profile *sensor; DBG (DBG_proc, "gl847_init_optical_regs_scan : exposure_time=%d, " "used_res=%d, start=%d, pixels=%d, channels=%d, depth=%d, " - "half_ccd=%d, flags=%x\n", - exposure_time, + "half_ccd=%d, flags=%x\n", exposure_time, used_res, start, pixels, channels, depth, half_ccd, flags); - /* during calibration , we don't want double xres */ - if(dev->settings.double_xres==SANE_TRUE && used_ressensor.optical_res) - { - double_xres=SANE_TRUE; - } - else - { - double_xres=SANE_FALSE; - } + /* resolution is divided according to CKSEL */ + r = sanei_genesys_get_address (reg, REG18); + cksel= (r->value & REG18_CKSEL)+1; + DBG (DBG_io2, "%s: cksel=%d\n", __FUNCTION__, cksel); + + /* to manage high resolution device while keeping good + * low resolution scanning speed, we make hardware dpi vary */ + dpihw=sanei_genesys_compute_dpihw(dev, used_res * cksel); + factor=dev->sensor.optical_res/dpihw; + DBG (DBG_io2, "%s: dpihw=%d (factor=%d)\n", __FUNCTION__, dpihw, factor); + + /* sensor parameters */ + sensor=get_sensor_profile(dev->model->ccd_type, dpihw); + gl847_setup_sensor (dev, reg, dpihw); + dpiset = used_res * cksel; + + /* start and end coordinate in optical dpi coordinates */ + startx = start/cksel+dev->sensor.CCD_start_xoffset; + used_pixels=pixels/cksel; + + /* end of sensor window */ + endx = startx + used_pixels; - startx = dev->sensor.dummy_pixel + 1 + dev->sensor.CCD_start_xoffset; - if(double_xres==SANE_TRUE) + /* sensors are built from 600 dpi segments for LiDE 100/200 + * and 1200 dpi for the 700F */ + if (dev->model->flags & GENESYS_FLAG_SIS_SENSOR) { - max_pixels = dev->sensor.sensor_pixels/2; + segnb=dpihw/600; } else { - max_pixels = dev->sensor.sensor_pixels; - } - if(pixelslen=endx-startx; + dev->dist=0; + dev->skip=0; + + /* in cas of multi-segments sensor, we have to add the witdh + * of the sensor crossed by the scan area */ + if (dev->model->flags & GENESYS_FLAG_SIS_SENSOR && segnb>1) { - used_pixels = pixels; + dev->dist = sensor->segcnt; } - endx = startx + used_pixels; + + /* use a segcnt rounded to next even number */ + endx += ((dev->dist+1)&0xfffe)*(segnb-1); + used_pixels=endx-startx; status = gl847_set_fe (dev, AFE_SET); if (status != SANE_STATUS_GOOD) @@ -1383,14 +1219,6 @@ return status; } - /* adjust used_res for chosen dpihw */ - used_res = used_res * gl847_get_dpihw (dev) / dev->sensor.optical_res; - if(double_xres==SANE_TRUE) - { - used_res *=2; - } - dpiset = used_res; - /* enable shading */ r = sanei_genesys_get_address (reg, REG01); r->value &= ~REG01_SCAN; @@ -1407,24 +1235,12 @@ r = sanei_genesys_get_address (reg, REG03); r->value &= ~REG03_AVEENB; + if (flags & OPTICAL_FLAG_DISABLE_LAMP) r->value &= ~REG03_LAMPPWR; else r->value |= REG03_LAMPPWR; - /* exposure times */ - for (i = 0; i < 6; i++) - { - r = sanei_genesys_get_address (reg, 0x10 + i); - if (flags & OPTICAL_FLAG_DISABLE_LAMP) - r->value = 0x01; /* 0x0101 is as off as possible */ - else - r->value = dev->sensor.regs_0x10_0x1d[i]; - } - - r = sanei_genesys_get_address (reg, 0x19); - r->value = 0x50; - /* BW threshold */ r = sanei_genesys_get_address (reg, 0x2e); r->value = dev->settings.threshold; @@ -1467,6 +1283,33 @@ else r->value |= 0x10; /* mono */ + /* register 05 */ + r = sanei_genesys_get_address (reg, REG05); + + /* set up dpihw */ + r->value &= ~REG05_DPIHW; + switch(dpihw) + { + case 600: + r->value |= REG05_DPIHW_600; + break; + case 1200: + r->value |= REG05_DPIHW_1200; + break; + case 2400: + r->value |= REG05_DPIHW_2400; + break; + case 4800: + r->value |= REG05_DPIHW_4800; + break; + } + + /* enable gamma tables */ + if (flags & OPTICAL_FLAG_DISABLE_GAMMA) + r->value &= ~REG05_GMMENB; + else + r->value |= REG05_GMMENB; + /* CIS scanners can do true gray by setting LEDADD */ /* we set up LEDADD only when asked */ if (dev->model->is_cis == SANE_TRUE) @@ -1477,7 +1320,7 @@ { r->value |= REG87_LEDADD; } - /* RGB wrighting + /* RGB weighting r = sanei_genesys_get_address (reg, 0x01); r->value &= ~REG01_TRUEGRAY; if (channels == 1 && (flags & OPTICAL_FLAG_ENABLE_LEDADD)) @@ -1486,52 +1329,34 @@ }*/ } - /* enable gamma tables */ - r = sanei_genesys_get_address (reg, REG05); - if (flags & OPTICAL_FLAG_DISABLE_GAMMA) - r->value &= ~REG05_GMMENB; - else - r->value |= REG05_GMMENB; - - /* sensor parameters */ - gl847_setup_sensor (dev, dev->reg); - - r = sanei_genesys_get_address (reg, 0x2c); - r->value = HIBYTE (dpiset); - r = sanei_genesys_get_address (reg, 0x2d); - r->value = LOBYTE (dpiset); - DBG (DBG_io2, "%s: dpiset used=%d\n", __FUNCTION__, dpiset); - - r = sanei_genesys_get_address (reg, 0x30); - r->value = HIBYTE (startx); - r = sanei_genesys_get_address (reg, 0x31); - r->value = LOBYTE (startx); - r = sanei_genesys_get_address (reg, 0x32); - r->value = HIBYTE (endx); - r = sanei_genesys_get_address (reg, 0x33); - r->value = LOBYTE (endx); - /* words(16bit) before gamma, conversion to 8 bit or lineart*/ - words_per_line = (used_pixels * dpiset) / gl847_get_dpihw (dev); + words_per_line = (used_pixels * dpiset) / dpihw; bytes=depth/8; if (depth == 1) { - words_per_line = (words_per_line >> 3) + ((words_per_line & 7) ? 1 : 0); + words_per_line = (words_per_line+7)/8 ; + dev->len = (dev->len >> 3) + ((dev->len & 7) ? 1 : 0); + dev->dist = (dev->dist >> 3) + ((dev->dist & 7) ? 1 : 0); } else { words_per_line *= bytes; + dev->dist *= bytes; + dev->len *= bytes; } dev->bpl = words_per_line; dev->cur=0; - dev->len=((pixels*dpiset)/gl847_get_dpihw (dev))/2*bytes; - dev->dist=dev->bpl/2; - dev->skip=((start*dpiset)/gl847_get_dpihw (dev))/2*bytes; - if(dev->skip>=dev->dist && double_xres==SANE_FALSE) - { - dev->skip-=dev->dist; - } + dev->segnb=segnb; + dev->line_interp = 0; + + sanei_genesys_set_double(reg,REG_DPISET,dpiset); + DBG (DBG_io2, "%s: dpiset used=%d\n", __FUNCTION__, dpiset); + + sanei_genesys_set_double(reg,REG_STRPIXEL,startx); + sanei_genesys_set_double(reg,REG_ENDPIXEL,endx); + DBG (DBG_io2, "%s: startx=%d\n", __FUNCTION__, startx); + DBG (DBG_io2, "%s: endx =%d\n", __FUNCTION__, endx); DBG (DBG_io2, "%s: used_pixels=%d\n", __FUNCTION__, used_pixels); DBG (DBG_io2, "%s: pixels =%d\n", __FUNCTION__, pixels); @@ -1539,7 +1364,7 @@ DBG (DBG_io2, "%s: dev->bpl =%lu\n", __FUNCTION__, (unsigned long)dev->bpl); DBG (DBG_io2, "%s: dev->len =%lu\n", __FUNCTION__, (unsigned long)dev->len); DBG (DBG_io2, "%s: dev->dist =%lu\n", __FUNCTION__, (unsigned long)dev->dist); - DBG (DBG_io2, "%s: dev->skip =%lu\n", __FUNCTION__, (unsigned long)dev->skip); + DBG (DBG_io2, "%s: dev->segnb =%lu\n", __FUNCTION__, (unsigned long)dev->segnb); words_per_line *= channels; dev->wpl = words_per_line; @@ -1550,20 +1375,11 @@ } RIE (sanei_genesys_buffer_alloc (&(dev->oe_buffer), dev->wpl)); - /* MAXWD is expressed in 4 words unit */ - r = sanei_genesys_get_address (reg, 0x35); - r->value = LOBYTE (HIWORD (words_per_line >> 2)); - r = sanei_genesys_get_address (reg, 0x36); - r->value = HIBYTE (LOWORD (words_per_line >> 2)); - r = sanei_genesys_get_address (reg, 0x37); - r->value = LOBYTE (LOWORD (words_per_line >> 2)); + sanei_genesys_set_triple(reg, REG_MAXWD, (words_per_line >> 2)); DBG (DBG_io2, "%s: words_per_line used=%d\n", __FUNCTION__, words_per_line); - r = sanei_genesys_get_address (reg, 0x38); - r->value = HIBYTE (exposure_time); - r = sanei_genesys_get_address (reg, 0x39); - r->value = LOBYTE (exposure_time); + sanei_genesys_set_double(reg, REG_LPERIOD, exposure_time); DBG (DBG_io2, "%s: exposure_time used=%d\n", __FUNCTION__, exposure_time); r = sanei_genesys_get_address (reg, 0x34); @@ -1573,27 +1389,6 @@ return SANE_STATUS_GOOD; } - -static int -gl847_get_led_exposure (Genesys_Device * dev) -{ - int d, r, g, b, m; - if (!dev->model->is_cis) - return 0; - d = dev->reg[reg_0x19].value; - r = dev->sensor.regs_0x10_0x1d[1] | (dev->sensor.regs_0x10_0x1d[0] << 8); - g = dev->sensor.regs_0x10_0x1d[3] | (dev->sensor.regs_0x10_0x1d[2] << 8); - b = dev->sensor.regs_0x10_0x1d[5] | (dev->sensor.regs_0x10_0x1d[4] << 8); - - m = r; - if (m < g) - m = g; - if (m < b) - m = b; - - return m + d; -} - /* set up registers for an actual scan * * this function sets up the scanner to scan in normal or single line mode @@ -1612,7 +1407,8 @@ float lines, unsigned int depth, unsigned int channels, - int color_filter, unsigned int flags) + int color_filter, + unsigned int flags) { int used_res; int start, used_pixels; @@ -1620,12 +1416,11 @@ int move; unsigned int lincnt; unsigned int oflags; /**> optical flags */ - int exposure_time, exposure_time2, led_exposure; - int i; + unsigned int mflags; /**> motor flags */ + int exposure_time; int stagger; int slope_dpi = 0; - int pixels_exposure; int dummy = 0; int scan_step_type = 1; int scan_power_mode = 0; @@ -1646,37 +1441,7 @@ "Flags : %x\n\n", xres, yres, lines, pixels, startx, starty, depth, channels, flags); -/* -results: - -for scanner: -half_ccd -start -end -dpiset -exposure_time -dummy -z1 -z2 - -for ordered_read: - dev->words_per_line - dev->read_factor - dev->requested_buffer_size - dev->read_buffer_size - dev->read_pos - dev->read_bytes_in_buffer - dev->read_bytes_left - dev->max_shift - dev->stagger - -independent of our calculated values: - dev->total_bytes_read - dev->bytes_to_read - */ - -/* half_ccd */ - /* we have 2 domains for ccd: xres below or above half ccd max dpi */ + /* we may have 2 domains for ccd: xres below or above half ccd max dpi */ if (dev->sensor.optical_res < 2 * xres || !(dev->model->flags & GENESYS_FLAG_HALF_CCD_MODE)) { @@ -1687,14 +1452,12 @@ half_ccd = SANE_TRUE; } -/* optical_res */ - + /* optical_res */ optical_res = dev->sensor.optical_res; if (half_ccd) optical_res /= 2; -/* stagger */ - + /* stagger */ if ((!half_ccd) && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) stagger = (4 * yres) / dev->motor.base_ydpi; else @@ -1702,7 +1465,6 @@ DBG (DBG_info, "gl847_init_scan_regs : stagger=%d lines\n", stagger); /* used_res */ - i = optical_res / xres; if (flags & SCAN_FLAG_USE_OPTICAL_RES) { used_res = optical_res; @@ -1743,56 +1505,11 @@ slope_dpi = slope_dpi * (1 + dummy); - /* scan_step_type */ - switch((int)yres) - { - case 75: - case 100: - case 150: - scan_step_type = 0; - break; - case 200: - case 300: - scan_step_type = 1; - break; - default: - scan_step_type = 2; - } - - /* exposure_time , CCD case not handled */ - led_exposure = gl847_get_led_exposure (dev); - - pixels_exposure=dev->sensor.sensor_pixels+572; - if(xressensor.optical_res) - pixels_exposure=(pixels_exposure*xres)/dev->sensor.optical_res-32; - else - pixels_exposure=0; + exposure_time = gl847_compute_exposure (dev, used_res); + scan_step_type = sanei_genesys_compute_step_type(gl847_motors, dev->model->motor_type, exposure_time); - exposure_time = sanei_genesys_exposure_time2 (dev, - slope_dpi, - scan_step_type, - pixels_exposure, - led_exposure, - scan_power_mode); - - while (scan_power_mode + 1 < dev->motor.power_mode_count) - { - exposure_time2 = sanei_genesys_exposure_time2 (dev, - slope_dpi, - scan_step_type, - pixels_exposure, - led_exposure, - scan_power_mode + 1); - if (exposure_time < exposure_time2) - break; - exposure_time = exposure_time2; - scan_power_mode++; - } - - DBG (DBG_info, "gl847_init_scan_regs : exposure_time=%d pixels\n", - exposure_time); - DBG (DBG_info, "gl847_init_scan_regs : scan_step_type=%d\n", - scan_step_type); + DBG (DBG_info, "gl847_init_scan_regs : exposure_time=%d pixels\n", exposure_time); + DBG (DBG_info, "gl847_init_scan_regs : scan_step_type=%d\n", scan_step_type); /*** optical parameters ***/ /* in case of dynamic lineart, we use an internal 8 bit gray scan @@ -1835,49 +1552,22 @@ /*** motor parameters ***/ -/* max_shift */ - /* scanned area must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1 && !(flags & SCAN_FLAG_IGNORE_LINE_DISTANCE)) - { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = (max_shift * yres) / dev->motor.base_ydpi; - } - else - { - max_shift = 0; - } + /* max_shift */ + max_shift=sanei_genesys_compute_max_shift(dev,channels,yres,flags); -/* lincnt */ + /* lincnt */ lincnt = lines + max_shift + stagger; /* add tl_y to base movement */ move = starty; DBG (DBG_info, "gl847_init_scan_regs: move=%d steps\n", move); - /* subtract current head position */ - /* XXX STEF XXX - move -= dev->scanhead_position_in_steps; - DBG (DBG_info, "gl847_init_scan_regs: move=%d steps\n", move); - - if (move < 0) - move = 0; */ + mflags=0; + if(flags & SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE) + mflags |= MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE; + if(flags & SCAN_FLAG_FEEDING) + mflags |= MOTOR_FLAG_FEED; - /* round it */ -/* the move is not affected by dummy -- pierre */ -/* move = ((move + dummy) / (dummy + 1)) * (dummy + 1); - DBG (DBG_info, "gl847_init_scan_regs: move=%d steps\n", move);*/ - - if (flags & SCAN_FLAG_SINGLE_LINE) - status = gl847_init_motor_regs_off (dev, - reg, - dev->model->is_cis ? lincnt * - channels : lincnt); - else status = gl847_init_motor_regs_scan (dev, reg, exposure_time, @@ -1886,11 +1576,7 @@ dev->model->is_cis ? lincnt * channels : lincnt, dummy, move, scan_power_mode, - (flags & - SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE) - ? - MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE - : 0); + mflags); if (status != SANE_STATUS_GOOD) return status; @@ -1904,9 +1590,11 @@ requested_buffer_size = 8 * bytes_per_line; /* we must use a round number of bytes_per_line */ + /* XXX STEF XXX if (requested_buffer_size > BULKIN_MAXSIZE) requested_buffer_size = (BULKIN_MAXSIZE / bytes_per_line) * bytes_per_line; + */ read_buffer_size = 2 * requested_buffer_size + @@ -1963,7 +1651,7 @@ */ dev->total_bytes_read = 0; - if (depth == 1 || dev->settings.scan_mode == SCAN_MODE_LINEART) + if (depth == 1) dev->total_bytes_to_read = ((dev->settings.pixels * dev->settings.lines) / 8 + (((dev->settings.pixels * dev->settings.lines) % 8) ? 1 : 0)) * @@ -1992,21 +1680,16 @@ float startx; /*optical_res, from dummy_pixel+1 */ float pixels; float lines; - int color_filter; int used_res; int used_pixels; unsigned int lincnt; - int exposure_time, exposure_time2, led_exposure; - int i; + int exposure_time; int stagger; int slope_dpi = 0; int dummy = 0; - int scan_step_type = 1; - int scan_power_mode = 0; int max_shift; - int pixels_exposure; SANE_Bool half_ccd; /* false: full CCD res is used, true, half max CCD res is used */ int optical_res; @@ -2043,8 +1726,6 @@ startx = start; /*optical_res, from dummy_pixel+1 */ pixels = dev->settings.pixels; lines = dev->settings.lines; - color_filter = dev->settings.color_filter; - DBG (DBG_info, "gl847_calculate_current_setup settings:\n" @@ -2067,47 +1748,17 @@ half_ccd = SANE_TRUE; } -/* optical_res */ - + /* optical_res */ optical_res = dev->sensor.optical_res; - if (half_ccd) - optical_res /= 2; - -/* stagger */ - if ((!half_ccd) && (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE)) + /* stagger */ + if (dev->model->flags & GENESYS_FLAG_STAGGERED_LINE) stagger = (4 * yres) / dev->motor.base_ydpi; else stagger = 0; DBG (DBG_info, "gl847_calculate_current_setup: stagger=%d lines\n", stagger); -/* used_res */ - i = optical_res / xres; - -#if 0 -/* gl847 supports 1/1 1/2 1/3 1/4 1/5 1/6 1/8 1/10 1/12 1/15 averaging */ - if (i < 2) /* optical_res >= xres > optical_res/2 */ - used_res = optical_res; - else if (i < 3) /* optical_res/2 >= xres > optical_res/3 */ - used_res = optical_res / 2; - else if (i < 4) /* optical_res/3 >= xres > optical_res/4 */ - used_res = optical_res / 3; - else if (i < 5) /* optical_res/4 >= xres > optical_res/5 */ - used_res = optical_res / 4; - else if (i < 6) /* optical_res/5 >= xres > optical_res/6 */ - used_res = optical_res / 5; - else if (i < 8) /* optical_res/6 >= xres > optical_res/8 */ - used_res = optical_res / 6; - else if (i < 10) /* optical_res/8 >= xres > optical_res/10 */ - used_res = optical_res / 8; - else if (i < 12) /* optical_res/10 >= xres > optical_res/12 */ - used_res = optical_res / 10; - else if (i < 15) /* optical_res/12 >= xres > optical_res/15 */ - used_res = optical_res / 12; - else - used_res = optical_res / 15; -#endif /* resolution is choosen from a fixed list */ used_res = xres; @@ -2117,36 +1768,10 @@ /* compute correct pixels number */ used_pixels = (pixels * optical_res) / used_res; - -/* dummy */ - /* dummy lines: may not be usefull, for instance 250 dpi works with 0 or 1 - dummy line. Maybe the dummy line adds correctness since the motor runs - slower (higher dpi) - */ -/* for cis this creates better aligned color lines: -dummy \ scanned lines - 0: R G B R ... - 1: R G B - R ... - 2: R G B - - R ... - 3: R G B - - - R ... - 4: R G B - - - - R ... - 5: R G B - - - - - R ... - 6: R G B - - - - - - R ... - 7: R G B - - - - - - - R ... - 8: R G B - - - - - - - - R ... - 9: R G B - - - - - - - - - R ... - 10: R G B - - - - - - - - - - R ... - 11: R G B - - - - - - - - - - - R ... - 12: R G B - - - - - - - - - - - - R ... - 13: R G B - - - - - - - - - - - - - R ... - 14: R G B - - - - - - - - - - - - - - R ... - 15: R G B - - - - - - - - - - - - - - - R ... - -- pierre - */ dummy = 3-channels; -/* slope_dpi */ -/* cis color scan is effectively a gray scan with 3 gray lines per color + /* slope_dpi */ + /* cis color scan is effectively a gray scan with 3 gray lines per color line and a FILTER of 0 */ if (dev->model->is_cis) slope_dpi = yres * channels; @@ -2155,74 +1780,13 @@ slope_dpi = slope_dpi * (1 + dummy); - /* scan_step_type */ - switch((int)yres) - { - case 75: - case 100: - case 150: - scan_step_type = 0; - break; - case 200: - case 300: - scan_step_type = 1; - break; - default: - scan_step_type = 2; - } - - led_exposure = gl847_get_led_exposure (dev); - - pixels_exposure=dev->sensor.sensor_pixels+572; - if(xressensor.optical_res) - pixels_exposure=(pixels_exposure*xres)/dev->sensor.optical_res-32; - else - pixels_exposure=0; - -/* exposure_time */ - exposure_time = sanei_genesys_exposure_time2 (dev, - slope_dpi, - scan_step_type, - pixels_exposure, - led_exposure, - scan_power_mode); - - while (scan_power_mode + 1 < dev->motor.power_mode_count) - { - exposure_time2 = sanei_genesys_exposure_time2 (dev, - slope_dpi, - scan_step_type, - pixels_exposure, - led_exposure, - scan_power_mode + 1); - if (exposure_time < exposure_time2) - break; - exposure_time = exposure_time2; - scan_power_mode++; - } - - DBG (DBG_info, - "gl847_calculate_current_setup : exposure_time=%d pixels\n", - exposure_time); + exposure_time = gl847_compute_exposure (dev, used_res); + DBG (DBG_info, "%s : exposure_time=%d pixels\n", __FUNCTION__, exposure_time); -/* max_shift */ - /* scanned area must be enlarged by max color shift needed */ - /* all values are assumed >= 0 */ - if (channels > 1) - { - max_shift = dev->model->ld_shift_r; - if (dev->model->ld_shift_b > max_shift) - max_shift = dev->model->ld_shift_b; - if (dev->model->ld_shift_g > max_shift) - max_shift = dev->model->ld_shift_g; - max_shift = (max_shift * yres) / dev->motor.base_ydpi; - } - else - { - max_shift = 0; - } + /* max_shift */ + max_shift=sanei_genesys_compute_max_shift(dev,channels,yres,0); -/* lincnt */ + /* lincnt */ lincnt = lines + max_shift + stagger; dev->current_setup.pixels = (used_pixels * used_res) / optical_res; @@ -2263,41 +1827,20 @@ } static void -gl847_set_lamp_power (Genesys_Device * dev, +gl847_set_lamp_power (Genesys_Device __sane_unused__ * dev, Genesys_Register_Set * regs, SANE_Bool set) { - Genesys_Register_Set *r; - int i; - if (set) { - sanei_genesys_set_reg_from_set (regs, 0x03, - sanei_genesys_read_reg_from_set (regs, - 0x03) + sanei_genesys_set_reg_from_set (regs, REG03, + sanei_genesys_read_reg_from_set (regs, REG03) | REG03_LAMPPWR); - - for (i = 0; i < 6; i++) - { - r = sanei_genesys_get_address (dev->calib_reg, 0x10+i); - r->value = dev->sensor.regs_0x10_0x1d[i]; - } - r = sanei_genesys_get_address (regs, 0x19); - r->value = 0x50; } else { - sanei_genesys_set_reg_from_set (regs, 0x03, - sanei_genesys_read_reg_from_set (regs, - 0x03) + sanei_genesys_set_reg_from_set (regs, REG03, + sanei_genesys_read_reg_from_set (regs, REG03) & ~REG03_LAMPPWR); - - for (i = 0; i < 6; i++) - { - r = sanei_genesys_get_address (dev->calib_reg, 0x10+i); - r->value = 0x00; - } - r = sanei_genesys_get_address (regs, 0x19); - r->value = 0xff; } } @@ -2330,23 +1873,21 @@ return sanei_genesys_write_register (dev, 0x0f, 0x01); } -static SANE_Status +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl847_stop_action (Genesys_Device * dev) { - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; SANE_Status status; uint8_t val40, val; unsigned int loop; - DBG (DBG_proc, "%s\n", __FUNCTION__); + DBGSTART; - status = sanei_genesys_get_status (dev, &val); - if (DBG_LEVEL >= DBG_io) - { - print_status (val); - } + /* post scan gpio : without that HOMSNR is unreliable */ + gl847_homsnr_gpio(dev); - val40 = 0; status = sanei_genesys_read_register (dev, REG40, &val40); if (status != SANE_STATUS_GOOD) { @@ -2365,25 +1906,19 @@ return SANE_STATUS_GOOD; } - memset (local_reg, 0, sizeof (local_reg)); - - memcpy (local_reg, dev->reg, - GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); - - gl847_init_optical_regs_off (dev, local_reg); - - gl847_init_motor_regs_off (dev, local_reg, 0); - status = gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS); + /* ends scan */ + val = sanei_genesys_read_reg_from_set (dev->reg, REG01); + val &= ~REG01_SCAN; + sanei_genesys_set_reg_from_set (dev->reg, REG01, val); + status = sanei_genesys_write_register (dev, REG01, val); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, "%s: failed to bulk write registers: %s\n", - __FUNCTION__, sane_strstatus (status)); + DBG (DBG_error, + "%s: failed to write register 01: %s\n", __FUNCTION__, + sane_strstatus (status)); return status; } - - /* looks like writing the right registers to zero is enough to get the chip - out of scan mode into command mode, actually triggering(writing to - register 0x0f) seems to be unnecessary */ + usleep (100 * 1000); loop = 10; while (loop > 0) @@ -2391,9 +1926,8 @@ status = sanei_genesys_get_status (dev, &val); if (DBG_LEVEL >= DBG_io) { - print_status (val); + sanei_genesys_print_status (val); } - val40 = 0; status = sanei_genesys_read_register (dev, 0x40, &val40); if (status != SANE_STATUS_GOOD) { @@ -2420,616 +1954,179 @@ return SANE_STATUS_IO_ERROR; } -static SANE_Status -gl847_get_paper_sensor (Genesys_Device * dev, SANE_Bool * paper_loaded) +/* Send the low-level scan command */ +#ifndef UNIT_TESTING +static +#endif + SANE_Status +gl847_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg, + SANE_Bool start_motor) { SANE_Status status; uint8_t val; + Genesys_Register_Set *r; - status = sanei_genesys_read_register (dev, REG6D, &val); - if (status != SANE_STATUS_GOOD) + DBGSTART; + + /* clear GPIO 10 */ + if (dev->model->gpo_type != GPO_CANONLIDE700) { - DBG (DBG_error, - "gl847_get_paper_sensor: failed to read gpio: %s\n", - sane_strstatus (status)); - return status; + RIE (sanei_genesys_read_register (dev, REG6C, &val)); + val &= ~REG6C_GPIO10; + RIE (sanei_genesys_write_register (dev, REG6C, val)); + } + + val = REG0D_CLRLNCNT; + RIE (sanei_genesys_write_register (dev, REG0D, val)); + val = REG0D_CLRMCNT; + RIE (sanei_genesys_write_register (dev, REG0D, val)); + + RIE (sanei_genesys_read_register (dev, REG01, &val)); + val |= REG01_SCAN; + RIE (sanei_genesys_write_register (dev, REG01, val)); + r = sanei_genesys_get_address (reg, REG01); + r->value = val; + + if (start_motor) + { + RIE (sanei_genesys_write_register (dev, REG0F, 1)); + } + else + { + RIE (sanei_genesys_write_register (dev, REG0F, 0)); } - *paper_loaded = (val & 0x1) == 0; - return SANE_STATUS_GOOD; - return SANE_STATUS_INVAL; + DBGCOMPLETED; + + return status; } -static SANE_Status -gl847_eject_document (Genesys_Device * dev) + +/* Send the stop scan command */ +#ifndef UNIT_TESTING +static +#endif + SANE_Status +gl847_end_scan (Genesys_Device * dev, Genesys_Register_Set * reg, + SANE_Bool check_stop) { - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; SANE_Status status; - uint8_t val; - SANE_Bool paper_loaded; - unsigned int init_steps; - float feed_mm; - int loop; - DBG (DBG_proc, "gl847_eject_document\n"); + DBG (DBG_proc, "gl847_end_scan (check_stop = %d)\n", check_stop); + if (reg == NULL) + return SANE_STATUS_INVAL; - if (!dev->model->is_sheetfed == SANE_TRUE) + if (dev->model->is_sheetfed == SANE_TRUE) { - DBG (DBG_proc, - "gl847_eject_document: there is no \"eject sheet\"-concept for non sheet fed\n"); - DBG (DBG_proc, "gl847_eject_document: finished\n"); - return SANE_STATUS_GOOD; + status = SANE_STATUS_GOOD; + } + else /* flat bed scanners */ + { + status = gl847_stop_action (dev); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, + "gl847_end_scan: Failed to stop: %s\n", + sane_strstatus (status)); + return status; + } } + DBGCOMPLETED; + return status; +} - memset (local_reg, 0, sizeof (local_reg)); - val = 0; +/* Moves the slider to the home (top) postion slowly */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status +gl847_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home) +{ + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; + SANE_Status status; + Genesys_Register_Set *r; + float resolution; + uint8_t val; + int loop = 0; + int scan_mode; + + DBG (DBG_proc, "gl847_slow_back_home (wait_until_home = %d)\n", + wait_until_home); + /* post scan gpio : without that HOMSNR is unreliable */ + gl847_homsnr_gpio(dev); + + /* first read gives HOME_SENSOR true */ status = sanei_genesys_get_status (dev, &val); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl847_eject_document: Failed to read status register: %s\n", + "gl847_slow_back_home: failed to read home sensor: %s\n", sane_strstatus (status)); return status; } + if (DBG_LEVEL >= DBG_io) + { + sanei_genesys_print_status (val); + } + usleep (100000); /* sleep 100 ms */ - status = gl847_stop_action (dev); + /* second is reliable */ + status = sanei_genesys_get_status (dev, &val); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, - "gl847_eject_document: failed to stop motor: %s\n", + "gl847_slow_back_home: failed to read home sensor: %s\n", sane_strstatus (status)); - return SANE_STATUS_IO_ERROR; - } - - memcpy (local_reg, dev->reg, - GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); - - gl847_init_optical_regs_off (dev, local_reg); - - gl847_init_motor_regs (dev, local_reg, 65536, MOTOR_ACTION_FEED, 0); - - status = gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_eject_document: failed to bulk write registers: %s\n", - sane_strstatus (status)); - return status; - } - - status = gl847_start_action (dev); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_eject_document: failed to start motor: %s\n", - sane_strstatus (status)); - gl847_stop_action (dev); - /* send original registers */ - gl847_bulk_write_register (dev, dev->reg, GENESYS_GL847_MAX_REGS); - return status; - } - - RIE (gl847_get_paper_sensor (dev, &paper_loaded)); - if (paper_loaded) - { - DBG (DBG_info, "gl847_eject_document: paper still loaded\n"); - /* force document TRUE, because it is definitely present */ - dev->document = SANE_TRUE; - dev->scanhead_position_in_steps = 0; - - loop = 300; - while (loop > 0) /* do not wait longer then 30 seconds */ - { - - RIE (gl847_get_paper_sensor (dev, &paper_loaded)); - - if (!paper_loaded) - { - DBG (DBG_info, "gl847_eject_document: reached home position\n"); - DBG (DBG_proc, "gl847_eject_document: finished\n"); - break; - } - usleep (100000); /* sleep 100 ms */ - --loop; - } - - if (loop == 0) - { - /* when we come here then the scanner needed too much time for this, so we better stop the motor */ - gl847_stop_action (dev); - DBG (DBG_error, - "gl847_eject_document: timeout while waiting for scanhead to go home\n"); - return SANE_STATUS_IO_ERROR; - } - } - - feed_mm = SANE_UNFIX (dev->model->eject_feed); - if (dev->document) - { - feed_mm += SANE_UNFIX (dev->model->post_scan); - } - - status = sanei_genesys_read_feed_steps (dev, &init_steps); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_eject_document: Failed to read feed steps: %s\n", - sane_strstatus (status)); - return status; - } - - /* now feed for extra steps */ - loop = 0; - while (loop < 300) /* do not wait longer then 30 seconds */ - { - unsigned int steps; - - status = sanei_genesys_read_feed_steps (dev, &steps); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_eject_document: Failed to read feed steps: %s\n", - sane_strstatus (status)); - return status; - } - - DBG (DBG_info, "gl847_eject_document: init_steps: %d, steps: %d\n", - init_steps, steps); - - if (steps > init_steps + (feed_mm * dev->motor.base_ydpi) / MM_PER_INCH) - { - break; - } - - usleep (100000); /* sleep 100 ms */ - ++loop; - } - - status = gl847_stop_action (dev); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_eject_document: Failed to stop motor: %s\n", - sane_strstatus (status)); - return status; - } - - dev->document = SANE_FALSE; - - DBG (DBG_proc, "gl847_eject_document: finished\n"); - return SANE_STATUS_GOOD; -} - - -static SANE_Status -gl847_load_document (Genesys_Device * dev) -{ - SANE_Status status; - SANE_Bool paper_loaded; - int loop = 300; - DBG (DBG_proc, "gl847_load_document\n"); - while (loop > 0) /* do not wait longer then 30 seconds */ - { - - RIE (gl847_get_paper_sensor (dev, &paper_loaded)); - - if (paper_loaded) - { - DBG (DBG_info, "gl847_load_document: document inserted\n"); - - /* when loading OK, document is here */ - dev->document = SANE_TRUE; - - usleep (1000000); /* give user 1000ms to place document correctly */ - break; - } - usleep (100000); /* sleep 100 ms */ - --loop; - } - - if (loop == 0) - { - /* when we come here then the user needed to much time for this */ - DBG (DBG_error, - "gl847_load_document: timeout while waiting for document\n"); - return SANE_STATUS_IO_ERROR; - } - - DBG (DBG_proc, "gl847_load_document: finished\n"); - return SANE_STATUS_GOOD; -} - -/** - * detects end of document and adjust current scan - * to take it into account - * used by sheetfed scanners - */ -static SANE_Status -gl847_detect_document_end (Genesys_Device * dev) -{ - SANE_Status status = SANE_STATUS_GOOD; - SANE_Bool paper_loaded; - unsigned int scancnt = 0; - int flines, channels, depth, bytes_remain, sublines, - bytes_to_flush, lines, sub_bytes, tmp, read_bytes_left; - DBG (DBG_proc, "%s: begin\n", __FUNCTION__); - - RIE (gl847_get_paper_sensor (dev, &paper_loaded)); - - /* sheetfed scanner uses home sensor as paper present */ - if ((dev->document == SANE_TRUE) && !paper_loaded) - { - DBG (DBG_info, "%s: no more document\n", __FUNCTION__); - dev->document = SANE_FALSE; - - channels = dev->current_setup.channels; - depth = dev->current_setup.depth; - read_bytes_left = (int) dev->read_bytes_left; - DBG (DBG_io, "gl847_detect_document_end: read_bytes_left=%d\n", - read_bytes_left); - - /* get lines read */ - status = sanei_genesys_read_scancnt (dev, &scancnt); - if (status != SANE_STATUS_GOOD) - { - flines = 0; - } - else - { - /* compute number of line read */ - tmp = (int) dev->total_bytes_read; - if (depth == 1 || dev->settings.scan_mode == SCAN_MODE_LINEART) - flines = tmp * 8 / dev->settings.pixels / channels; - else - flines = tmp / (depth / 8) / dev->settings.pixels / channels; - - /* number of scanned lines, but no read yet */ - flines = scancnt - flines; - - DBG (DBG_io, - "gl847_detect_document_end: %d scanned but not read lines\n", - flines); - } - - /* adjust number of bytes to read - * we need to read the final bytes which are word per line * number of last lines - * to have doc leaving feeder */ - lines = - (SANE_UNFIX (dev->model->post_scan) * dev->current_setup.yres) / - MM_PER_INCH + flines; - DBG (DBG_io, "gl847_detect_document_end: adding %d line to flush\n", - lines); - - /* number of bytes to read from scanner to get document out of it after - * end of document dectected by hardware sensor */ - bytes_to_flush = lines * dev->wpl; - - /* if we are already close to end of scan, flushing isn't needed */ - if (bytes_to_flush < read_bytes_left) - { - /* we take all these step to work around an overflow on some plateforms */ - tmp = (int) dev->total_bytes_read; - DBG (DBG_io, "gl847_detect_document_end: tmp=%d\n", tmp); - bytes_remain = (int) dev->total_bytes_to_read; - DBG (DBG_io, "gl847_detect_document_end: bytes_remain=%d\n", - bytes_remain); - bytes_remain = bytes_remain - tmp; - DBG (DBG_io, "gl847_detect_document_end: bytes_remain=%d\n", - bytes_remain); - - /* remaining lines to read by frontend for the current scan */ - if (depth == 1 || dev->settings.scan_mode == SCAN_MODE_LINEART) - { - flines = bytes_remain * 8 / dev->settings.pixels / channels; - } - else - flines = bytes_remain / (depth / 8) - / dev->settings.pixels / channels; - DBG (DBG_io, "gl847_detect_document_end: flines=%d\n", flines); - - if (flines > lines) - { - /* change the value controlling communication with the frontend : - * total bytes to read is current value plus the number of remaining lines - * multiplied by bytes per line */ - sublines = flines - lines; - - if (depth == 1 || dev->settings.scan_mode == SCAN_MODE_LINEART) - sub_bytes = - ((dev->settings.pixels * sublines) / 8 + - (((dev->settings.pixels * sublines) % 8) ? 1 : 0)) * - channels; - else - sub_bytes = - dev->settings.pixels * sublines * channels * (depth / 8); - - dev->total_bytes_to_read -= sub_bytes; - - /* then adjust the physical bytes to read */ - if (read_bytes_left > sub_bytes) - { - dev->read_bytes_left -= sub_bytes; - } - else - { - dev->total_bytes_to_read = dev->total_bytes_read; - dev->read_bytes_left = 0; - } - - DBG (DBG_io, "gl847_detect_document_end: sublines=%d\n", - sublines); - DBG (DBG_io, "gl847_detect_document_end: subbytes=%d\n", - sub_bytes); - DBG (DBG_io, - "gl847_detect_document_end: total_bytes_to_read=%lu\n", - (unsigned long)dev->total_bytes_to_read); - DBG (DBG_io, - "gl847_detect_document_end: read_bytes_left=%d\n", - read_bytes_left); - } - } - else - { - DBG (DBG_io, "gl847_detect_document_end: no flushing needed\n"); - } - } - - DBG (DBG_proc, "%s: finished\n", __FUNCTION__); - return SANE_STATUS_GOOD; -} - -/* Send the low-level scan command */ -/* todo : is this that useful ? */ -#ifndef UNIT_TESTING -static -#endif - SANE_Status -gl847_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg, - SANE_Bool start_motor) -{ - SANE_Status status; - uint8_t val; - - DBGSTART; - - /* clear GPIO 10 */ - RIE (sanei_genesys_read_register (dev, REG6C, &val)); - val &= ~REG6C_GPIO10; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - - val = REG0D_CLRLNCNT; - RIE (sanei_genesys_write_register (dev, REG0D, val)); - val = REG0D_CLRMCNT; - RIE (sanei_genesys_write_register (dev, REG0D, val)); - - RIE (sanei_genesys_read_register (dev, REG01, &val)); - val |= REG01_SCAN; - RIE (sanei_genesys_write_register (dev, REG01, val)); - - if (start_motor) - { - RIE (sanei_genesys_write_register (dev, REG0F, 1)); - } - else - { - RIE (sanei_genesys_write_register (dev, REG0F, 0)); - } - - DBGCOMPLETED; - - return status; -} - - -/* Send the stop scan command */ -#ifndef UNIT_TESTING -static -#endif - SANE_Status -gl847_end_scan (Genesys_Device * dev, Genesys_Register_Set * reg, - SANE_Bool check_stop) -{ - SANE_Status status; - - DBG (DBG_proc, "gl847_end_scan (check_stop = %d)\n", check_stop); - if (reg == NULL) - return SANE_STATUS_INVAL; - - if (dev->model->is_sheetfed == SANE_TRUE) - { - status = SANE_STATUS_GOOD; - } - else /* flat bed scanners */ - { - status = gl847_stop_action (dev); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_end_scan: Failed to stop: %s\n", - sane_strstatus (status)); - return status; - } - } - - DBGCOMPLETED; - return status; -} - -/* Moves the slider to steps */ -static SANE_Status -gl847_feed (Genesys_Device * dev, int steps) -{ - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; - SANE_Status status; - uint8_t val; - int loop; - - DBG (DBG_proc, "gl847_feed (steps = %d)\n", steps); - - status = gl847_stop_action (dev); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_feed: failed to stop action: %s\n", - sane_strstatus (status)); - return status; - } - - memset (local_reg, 0, sizeof (local_reg)); - - memcpy (local_reg, dev->reg, - GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); - - gl847_init_optical_regs_off (dev, local_reg); - - gl847_init_motor_regs (dev, local_reg, steps, MOTOR_ACTION_FEED, 0); - - status = gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_feed: failed to bulk write registers: %s\n", - sane_strstatus (status)); - return status; - } - - status = gl847_start_action (dev); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_feed: failed to start motor: %s\n", - sane_strstatus (status)); - gl847_stop_action (dev); - /* send original registers */ - gl847_bulk_write_register (dev, dev->reg, GENESYS_GL847_MAX_REGS); - return status; - } - - loop = 0; - while (loop < 300) /* do not wait longer then 30 seconds */ - { - status = sanei_genesys_get_status (dev, &val); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_feed: failed to read home sensor: %s\n", - sane_strstatus (status)); - return status; - } - - if (!(val & REG41_MOTORENB)) /* motor enabled */ - { - DBG (DBG_proc, "gl847_feed: finished\n"); - dev->scanhead_position_in_steps += steps; - return SANE_STATUS_GOOD; - } - usleep (100000); /* sleep 100 ms */ - ++loop; - } - - /* when we come here then the scanner needed too much time for this, so we better stop the motor */ - gl847_stop_action (dev); - - DBG (DBG_error, - "gl847_feed: timeout while feeding\n"); - return SANE_STATUS_IO_ERROR; -} - -/* Moves the slider to the home (top) postion slowly */ -static SANE_Status -gl847_slow_back_home (Genesys_Device * dev, SANE_Bool wait_until_home) -{ - Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; - SANE_Status status; - uint8_t val; - - DBG (DBG_proc, "gl847_slow_back_home (wait_until_home = %d)\n", - wait_until_home); - - if (dev->model->is_sheetfed == SANE_TRUE) - { - DBG (DBG_proc, - "gl847_slow_back_home: there is no \"home\"-concept for sheet fed\n"); - DBG (DBG_proc, "gl847_slow_back_home: finished\n"); - return SANE_STATUS_GOOD; - } - - memset (local_reg, 0, sizeof (local_reg)); - - /* reset gpio pin */ - RIE (sanei_genesys_read_register (dev, REG6C, &val)); - val = dev->gpo.value[0]; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - - /* first read gives HOME_SENSOR true */ - status = sanei_genesys_get_status (dev, &val); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_slow_back_home: failed to read home sensor: %s\n", - sane_strstatus (status)); - return status; - } - if (DBG_LEVEL >= DBG_io) - { - print_status (val); - } - usleep (100000); /* sleep 100 ms */ - - /* second is reliable */ - status = sanei_genesys_get_status (dev, &val); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_slow_back_home: failed to read home sensor: %s\n", - sane_strstatus (status)); - return status; + return status; } if (DBG_LEVEL >= DBG_io) { - print_status (val); + sanei_genesys_print_status (val); } - dev->scanhead_position_in_steps = 0; - - if (val & REG41_HOMESNR) /* is sensor at home? */ + /* is sensor at home? */ + if (val & HOMESNR) { - DBG (DBG_info, "gl847_slow_back_home: already at home, completed\n"); + DBG (DBG_info, "%s: already at home, completed\n", __FUNCTION__); dev->scanhead_position_in_steps = 0; DBGCOMPLETED; return SANE_STATUS_GOOD; } - /* if motor is on, stop current action */ - if (val & REG41_MOTORENB) - { - status = gl847_stop_action (dev); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_slow_back_home: failed to stop motor: %s\n", - sane_strstatus (status)); - return SANE_STATUS_IO_ERROR; - } - } - - memcpy (local_reg, dev->reg, - GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); - - gl847_init_optical_regs_off (dev, local_reg); + memset (local_reg, 0, sizeof (local_reg)); + memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); + + resolution=sanei_genesys_get_lowest_ydpi(dev); + + /* TODO add scan_mode to the API */ + scan_mode= dev->settings.scan_mode; + dev->settings.scan_mode=SCAN_MODE_LINEART; + gl847_init_scan_regs (dev, + local_reg, + resolution, + resolution, + 100, + 30000, + 100, + 100, + 8, + 1, + 0, + SCAN_FLAG_DISABLE_SHADING | + SCAN_FLAG_DISABLE_GAMMA | + SCAN_FLAG_IGNORE_LINE_DISTANCE); + dev->settings.scan_mode=scan_mode; - gl847_init_motor_regs (dev, local_reg, 65536, MOTOR_ACTION_GO_HOME, 0); + /* clear scan and feed count */ + RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT | REG0D_CLRMCNT)); + + /* set up for reverse */ + r = sanei_genesys_get_address (local_reg, REG02); + r->value |= REG02_MTRREV; - status = gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_slow_back_home: failed to bulk write registers: %s\n", - sane_strstatus (status)); - return status; - } + RIE (gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS)); status = gl847_start_action (dev); if (status != SANE_STATUS_GOOD) @@ -3043,10 +2140,11 @@ return status; } + /* post scan gpio : without that HOMSNR is unreliable */ + gl847_homsnr_gpio(dev); + if (wait_until_home) { - int loop = 0; - while (loop < 300) /* do not wait longer then 30 seconds */ { status = sanei_genesys_get_status (dev, &val); @@ -3058,10 +2156,12 @@ return status; } - if (val & REG41_HOMESNR) /* home sensor */ + if (val & HOMESNR) /* home sensor */ { DBG (DBG_info, "gl847_slow_back_home: reached home position\n"); - DBG (DBG_proc, "gl847_slow_back_home: finished\n"); + gl847_stop_action (dev); + dev->scanhead_position_in_steps = 0; + DBGCOMPLETED; return SANE_STATUS_GOOD; } usleep (100000); /* sleep 100 ms */ @@ -3076,7 +2176,7 @@ } DBG (DBG_info, "gl847_slow_back_home: scanhead is still moving\n"); - DBG (DBG_proc, "gl847_slow_back_home: finished\n"); + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -3107,8 +2207,7 @@ 600, dev->model->search_lines, 8, 1, 1, /*green */ SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | - SCAN_FLAG_IGNORE_LINE_DISTANCE | - SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE); + SCAN_FLAG_IGNORE_LINE_DISTANCE); /* send to scanner */ status = gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS); @@ -3254,62 +2353,150 @@ return SANE_STATUS_GOOD; } +/** @brief moves the slider to steps at motor base dpi + * @param dev device to work on + * @param steps number of steps to move in base_dpi line count + * */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status +gl847_feed (Genesys_Device * dev, unsigned int steps) +{ + Genesys_Register_Set local_reg[GENESYS_GL847_MAX_REGS]; + SANE_Status status; + Genesys_Register_Set *r; + float resolution; + uint8_t val; + + DBGSTART; + DBG (DBG_io, "%s: steps=%d\n", __FUNCTION__, steps); + + /* prepare local registers */ + memset (local_reg, 0, sizeof (local_reg)); + memcpy (local_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); + + resolution=sanei_genesys_get_lowest_ydpi(dev); + gl847_init_scan_regs (dev, + local_reg, + resolution, + resolution, + 0, + steps, + 100, + 3, + 8, + 3, + dev->settings.color_filter, + SCAN_FLAG_DISABLE_SHADING | + SCAN_FLAG_DISABLE_GAMMA | + SCAN_FLAG_FEEDING | + SCAN_FLAG_IGNORE_LINE_DISTANCE); + + /* set exposure to zero */ + sanei_genesys_set_triple(local_reg,REG_EXPR,0); + sanei_genesys_set_triple(local_reg,REG_EXPG,0); + sanei_genesys_set_triple(local_reg,REG_EXPB,0); + + /* clear scan and feed count */ + RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRLNCNT)); + RIE (sanei_genesys_write_register (dev, REG0D, REG0D_CLRMCNT)); + + /* set up for no scan */ + r = sanei_genesys_get_address (local_reg, REG01); + r->value &= ~REG01_SCAN; + + /* send registers */ + RIE (gl847_bulk_write_register (dev, local_reg, GENESYS_GL847_MAX_REGS)); + + status = gl847_start_action (dev); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, "%s: failed to start motor: %s\n", __FUNCTION__, sane_strstatus (status)); + gl847_stop_action (dev); + + /* restore original registers */ + gl847_bulk_write_register (dev, dev->reg, GENESYS_GL847_MAX_REGS); + return status; + } + + /* wait until feed count reaches the required value, but do not + * exceed 30s */ + do + { + status = sanei_genesys_get_status (dev, &val); + } + while (status == SANE_STATUS_GOOD && !(val & FEEDFSH)); + + /* then stop scanning */ + RIE(gl847_stop_action (dev)); + + DBGCOMPLETED; + return SANE_STATUS_GOOD; +} + /* init registers for shading calibration */ static SANE_Status gl847_init_regs_for_shading (Genesys_Device * dev) { SANE_Status status; + float move; - DBG (DBG_proc, "gl847_init_regs_for_shading: lines = %d\n", - dev->model->shading_lines); - + DBGSTART; dev->calib_channels = 3; /* initial calibration reg values */ - memcpy (dev->calib_reg, dev->reg, - GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); + memcpy (dev->calib_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); - dev->calib_pixels = dev->sensor.sensor_pixels; + dev->calib_resolution = sanei_genesys_compute_dpihw(dev,dev->settings.xres); + dev->calib_lines = dev->model->shading_lines; + if(dev->calib_resolution==4800) + dev->calib_lines *= 2; + dev->calib_pixels = (dev->sensor.sensor_pixels*dev->calib_resolution)/dev->sensor.optical_res; + DBG (DBG_io, "%s: calib_lines = %d\n", __FUNCTION__, dev->calib_lines); + DBG (DBG_io, "%s: calib_pixels = %d\n", __FUNCTION__, dev->calib_pixels); + + /* this is aworkaround insufficent distance for slope + * motor acceleration TODO special motor slope for shading */ + move=1; + if(dev->calib_resolution<1200) + { + move=40; + } status = gl847_init_scan_regs (dev, dev->calib_reg, - dev->sensor.optical_res, - dev->motor.base_ydpi, - 0, + dev->calib_resolution, + dev->calib_resolution, 0, + move, dev->calib_pixels, - dev->model->shading_lines, + dev->calib_lines, 16, dev->calib_channels, dev->settings.color_filter, SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE | - SCAN_FLAG_IGNORE_LINE_DISTANCE | - SCAN_FLAG_USE_OPTICAL_RES); - + SCAN_FLAG_IGNORE_LINE_DISTANCE); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "gl847_init_registers_for_shading: Failed to setup scan: %s\n", - sane_strstatus (status)); + DBG (DBG_error, "%s: failed to setup scan: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } - - dev->scanhead_position_in_steps += dev->model->shading_lines; - - status = - gl847_bulk_write_register (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS); + + status = gl847_bulk_write_register (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "gl847_init_registers_for_shading: Failed to bulk write registers: %s\n", - sane_strstatus (status)); + DBG (DBG_error, "%s: failed to bulk write registers: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } + /* we use GENESYS_FLAG_SHADING_REPARK */ + dev->scanhead_position_in_steps = 0; + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -3325,7 +2512,6 @@ float move; int move_dpi; float start; - uint8_t val; SANE_Status status; @@ -3335,8 +2521,6 @@ dev->settings.yres, dev->settings.lines, dev->settings.pixels, dev->settings.tl_x, dev->settings.tl_y, dev->settings.scan_mode); - gl847_slow_back_home (dev, 1); - /* channels */ if (dev->settings.scan_mode == SCAN_MODE_COLOR) /* single pass color */ channels = 3; @@ -3373,25 +2557,27 @@ move = SANE_UNFIX (dev->model->y_offset); move += dev->settings.tl_y; move = (move * move_dpi) / MM_PER_INCH; - DBG (DBG_info, "gl847_init_regs_for_scan: move=%f steps\n", move); + move -= dev->scanhead_position_in_steps; + DBG (DBG_info, "%s: move=%f steps\n",__FUNCTION__, move); - /* at high res we do fast move to scan area */ - if(dev->settings.xres>150) + /* fast move to scan area */ + /* we don't move fast the whole distance since it would involve + * computing acceleration/deceleration distance for scan + * resolution. So leave a remainder for it so scan makes the final + * move tuning */ + if(channels*dev->settings.yres>=600 && move>700) { - status = gl847_feed (dev, move); + status = gl847_feed (dev, move-500); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, "%s: failed to move to scan area\n",__FUNCTION__); return status; } - move=0; + move=500; } - /* clear scancnt and fedcnt */ - val = REG0D_CLRLNCNT; - RIE (sanei_genesys_write_register (dev, REG0D, val)); - val = REG0D_CLRMCNT; - RIE (sanei_genesys_write_register (dev, REG0D, val)); + DBG (DBG_info, "gl124_init_regs_for_scan: move=%f steps\n", move); + DBG (DBG_info, "%s: move=%f steps\n", __FUNCTION__, move); /* start */ start = SANE_UNFIX (dev->model->x_offset); @@ -3401,7 +2587,14 @@ flags = 0; /* emulated lineart from gray data is required for now */ - flags |= SCAN_FLAG_DYNAMIC_LINEART; + if(dev->settings.scan_mode == SCAN_MODE_LINEART + && dev->settings.dynamic_lineart) + { + flags |= SCAN_FLAG_DYNAMIC_LINEART; + } + + /* backtracking isn't handled well, so don't enable it */ + flags |= SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE; status = gl847_init_scan_regs (dev, dev->reg, @@ -3418,7 +2611,7 @@ if (status != SANE_STATUS_GOOD) return status; - + DBGCOMPLETED; return SANE_STATUS_GOOD; } @@ -3533,8 +2726,11 @@ gl847_send_shading_data (Genesys_Device * dev, uint8_t * data, int size) { SANE_Status status = SANE_STATUS_GOOD; - uint32_t addr, length; - uint8_t val; + uint32_t addr, length, i, x, factor, pixels; + uint32_t dpiset, dpihw, strpixel, endpixel; + uint16_t tempo; + uint32_t lines, channels; + uint8_t val,*buffer,*ptr,*src; DBGSTART; DBG( DBG_io2, "%s: writing %d bytes of shading data\n",__FUNCTION__,size); @@ -3546,54 +2742,93 @@ write(0x10068000,0x00000dd8) */ length = (uint32_t) (size / 3); - DBG( DBG_io2, "%s: using chunks of %d (0x%04x) bytes\n",__FUNCTION__,length,length); + sanei_genesys_get_double(dev->reg,REG_STRPIXEL,&tempo); + strpixel=tempo; + sanei_genesys_get_double(dev->reg,REG_ENDPIXEL,&tempo); + endpixel=tempo; + + /* compute deletion factor */ + sanei_genesys_get_double(dev->reg,REG_DPISET,&tempo); + dpiset=tempo; + DBG( DBG_io2, "%s: STRPIXEL=%d, ENDPIXEL=%d, PIXELS=%d, DPISET=%d\n",__FUNCTION__,strpixel,endpixel,endpixel-strpixel,dpiset); + dpihw=sanei_genesys_compute_dpihw(dev,dpiset); + factor=dpihw/dpiset; + DBG( DBG_io2, "%s: factor=%d\n",__FUNCTION__,factor); + + if(DBG_LEVEL>=DBG_data) + { + dev->binary=fopen("binary.pnm","wb"); + sanei_genesys_get_triple(dev->reg, REG_LINCNT, &lines); + channels=dev->current_setup.channels; + if(dev->binary!=NULL) + { + fprintf(dev->binary,"P5\n%d %d\n%d\n",(endpixel-strpixel)/factor*channels,lines/channels,255); + } + } + + pixels=endpixel-strpixel; + + /* since we're using SHDAREA, substract startx coordinate from shading */ + strpixel-=((dev->sensor.CCD_start_xoffset*600)/dev->sensor.optical_res); + + /* turn pixel value into bytes 2x16 bits words */ + strpixel*=2*2; + endpixel*=2*2; + pixels*=2*2; + + /* allocate temporary buffer */ + buffer=(uint8_t *)malloc(pixels); + memset(buffer,0,pixels); + DBG( DBG_io2, "%s: using chunks of %d (0x%04x) bytes\n",__FUNCTION__,pixels,pixels); /* base addr of data has been written in reg D0-D4 in 4K word, so AHB address * is 8192*reg value */ - /* write actual red data */ - RIE (sanei_genesys_read_register (dev, 0xd0, &val)); - addr = val * 8192 + 0x10000000; - status = sanei_genesys_write_ahb (dev->dn, addr, length, data); - if (status != SANE_STATUS_GOOD) + /* write actual color channel data */ + for(i=0;i<3;i++) { - DBG (DBG_error, "gl847_send_shading_data; write to AHB failed (%s)\n", - sane_strstatus (status)); - return status; - } + /* build up actual shading data by copying the part from the full width one + * to the one corresponding to SHDAREA */ + ptr=buffer; - /* write actual green data */ - RIE (sanei_genesys_read_register (dev, 0xd1, &val)); - addr = val * 8192 + 0x10000000; - status = sanei_genesys_write_ahb (dev->dn, addr, length, data + length); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, "gl847_send_shading_data; write to AHB failed (%s)\n", - sane_strstatus (status)); - return status; - } + /* iterate on both sensor segment */ + for(x=0;xdn, addr, length, data + 2 * length); - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, "gl847_send_shading_data; write to AHB failed (%s)\n", - sane_strstatus (status)); - return status; + /* coefficient copy */ + ptr[0]=src[0]; + ptr[1]=src[1]; + ptr[2]=src[2]; + ptr[3]=src[3]; + + /* next shading coefficient */ + ptr+=4; + } + + RIE (sanei_genesys_read_register (dev, 0xd0+i, &val)); + addr = val * 8192 + 0x10000000; + status = sanei_genesys_write_ahb (dev->dn, addr, pixels, buffer); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, "gl847_send_shading_data; write to AHB failed (%s)\n", + sane_strstatus (status)); + return status; + } } + free(buffer); DBGCOMPLETED; return status; } -/* this function does the led calibration by scanning one line of the calibration - area below scanner's top on white strip. - --needs working coarse/gain -*/ +/** @brief calibrates led exposure + * Calibrate exposure by scanning a white area until the used exposure gives + * data white enough. + * @param dev device to calibrate + */ static SANE_Status gl847_led_calibration (Genesys_Device * dev) { @@ -3605,30 +2840,39 @@ SANE_Status status = SANE_STATUS_GOOD; int val; int channels, depth; - int avg[3], avga, avge; + int avg[3], top[3], bottom[3]; int turn; char fn[20]; - uint16_t expr, expg, expb; - Genesys_Register_Set *r; + uint16_t exp[3]; + Sensor_Profile *sensor; + float move; + SANE_Bool acceptable; - SANE_Bool acceptable = SANE_FALSE; + DBGSTART; - DBG (DBG_proc, "gl847_led_calibration\n"); + move = SANE_UNFIX (dev->model->y_offset_calib); + move = (move * (dev->motor.base_ydpi/4)) / MM_PER_INCH; + if(move>20) + { + RIE(gl847_feed (dev, move)); + } + DBG (DBG_io, "%s: move=%f steps\n", __FUNCTION__, move); /* offset calibration is always done in color mode */ channels = 3; depth=16; - used_res = dev->sensor.optical_res; + used_res=sanei_genesys_compute_dpihw(dev,dev->settings.xres); + sensor=get_sensor_profile(dev->model->ccd_type, used_res); num_pixels = (dev->sensor.sensor_pixels*used_res)/dev->sensor.optical_res; /* initial calibration reg values */ - memcpy (dev->calib_reg, dev->reg, - GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); + memcpy (dev->calib_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); + /* set up for the calibration scan */ status = gl847_init_scan_regs (dev, dev->calib_reg, used_res, - dev->motor.base_ydpi, + used_res, 0, 0, num_pixels, @@ -3639,73 +2883,59 @@ SCAN_FLAG_DISABLE_SHADING | SCAN_FLAG_DISABLE_GAMMA | SCAN_FLAG_SINGLE_LINE | - SCAN_FLAG_IGNORE_LINE_DISTANCE | - SCAN_FLAG_USE_OPTICAL_RES); - + SCAN_FLAG_IGNORE_LINE_DISTANCE); if (status != SANE_STATUS_GOOD) { - DBG (DBG_error, - "gl847_led_calibration: failed to setup scan: %s\n", - sane_strstatus (status)); + DBG (DBG_error, "%s: failed to setup scan: %s\n", __FUNCTION__, sane_strstatus (status)); return status; } - RIE (gl847_bulk_write_register - (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS)); - - total_size = num_pixels * channels * (depth/8) * 1; /* colors * bytes_per_color * scan lines */ - line = malloc (total_size); if (!line) return SANE_STATUS_NO_MEM; -/* - we try to get equal bright leds here: - - loop: - average per color - adjust exposure times - */ - - expr = (dev->sensor.regs_0x10_0x1d[0] << 8) | dev->sensor.regs_0x10_0x1d[1]; - expg = (dev->sensor.regs_0x10_0x1d[2] << 8) | dev->sensor.regs_0x10_0x1d[3]; - expb = (dev->sensor.regs_0x10_0x1d[4] << 8) | dev->sensor.regs_0x10_0x1d[5]; + /* initial loop values and boundaries */ + exp[0]=sensor->expr; + exp[1]=sensor->expg; + exp[2]=sensor->expb; + + bottom[0]=29000; + bottom[1]=29000; + bottom[2]=29000; + + top[0]=41000; + top[1]=51000; + top[2]=51000; turn = 0; + /* no move during led calibration */ + gl847_set_motor_power (dev->calib_reg, SANE_FALSE); do { + /* set up exposure */ + sanei_genesys_set_double(dev->calib_reg,REG_EXPR,exp[0]); + sanei_genesys_set_double(dev->calib_reg,REG_EXPG,exp[1]); + sanei_genesys_set_double(dev->calib_reg,REG_EXPB,exp[2]); - dev->sensor.regs_0x10_0x1d[0] = (expr >> 8) & 0xff; - dev->sensor.regs_0x10_0x1d[1] = expr & 0xff; - dev->sensor.regs_0x10_0x1d[2] = (expg >> 8) & 0xff; - dev->sensor.regs_0x10_0x1d[3] = expg & 0xff; - dev->sensor.regs_0x10_0x1d[4] = (expb >> 8) & 0xff; - dev->sensor.regs_0x10_0x1d[5] = expb & 0xff; + /* write registers and scan data */ + RIE (gl847_bulk_write_register (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS)); - for (i = 0; i < 6; i++) - { - r = sanei_genesys_get_address (dev->calib_reg, 0x10+i); - r->value = dev->sensor.regs_0x10_0x1d[i]; - } - - RIE (gl847_bulk_write_register - (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS)); - - DBG (DBG_info, "gl847_led_calibration: starting first line reading\n"); + DBG (DBG_info, "gl847_led_calibration: starting line reading\n"); RIE (gl847_begin_scan (dev, dev->calib_reg, SANE_TRUE)); RIE (sanei_genesys_read_data_from_scanner (dev, line, total_size)); + /* stop scanning */ + RIE (gl847_stop_action (dev)); + if (DBG_LEVEL >= DBG_data) { snprintf (fn, 20, "led_%02d.pnm", turn); - sanei_genesys_write_pnm_file (fn, - line, depth, channels, num_pixels, 1); + sanei_genesys_write_pnm_file (fn, line, depth, channels, num_pixels, 1); } - acceptable = SANE_TRUE; - + /* compute average */ for (j = 0; j < channels; j++) { avg[j] = 0; @@ -3725,152 +2955,54 @@ avg[j] /= num_pixels; } - DBG (DBG_info, "gl847_led_calibration: average: " - "%d,%d,%d\n", avg[0], avg[1], avg[2]); + DBG (DBG_info, "gl847_led_calibration: average: %d,%d,%d\n", avg[0], avg[1], avg[2]); + /* check if exposure gives average within the boundaries */ acceptable = SANE_TRUE; - - if (avg[0] < avg[1] * 0.95 || avg[1] < avg[0] * 0.95 || - avg[0] < avg[2] * 0.95 || avg[2] < avg[0] * 0.95 || - avg[1] < avg[2] * 0.95 || avg[2] < avg[1] * 0.95) - acceptable = SANE_FALSE; - - if (!acceptable) - { - avga = (avg[0] + avg[1] + avg[2]) / 3; - expr = (expr * avga) / avg[0]; - expg = (expg * avga) / avg[1]; - expb = (expb * avga) / avg[2]; -/* - keep the resulting exposures below this value. - too long exposure drives the ccd into saturation. - we may fix this by relying on the fact that - we get a striped scan without shading, by means of - statistical calculation -*/ - avge = (expr + expg + expb) / 3; - - /* don't overflow max exposure */ - if (avge > 3000) - { - expr = (expr * 2000) / avge; - expg = (expg * 2000) / avge; - expb = (expb * 2000) / avge; - } - if (avge < 50) - { - expr = (expr * 50) / avge; - expg = (expg * 50) / avge; - expb = (expb * 50) / avge; - } - - } - - RIE (gl847_stop_action (dev)); + for(i=0;i<3;i++) + { + if(avg[i]top[i]) + { + exp[i]=(exp[i]*top[i])/avg[i]; + acceptable = SANE_FALSE; + } + } turn++; - } while (!acceptable && turn < 100); - DBG (DBG_info, "gl847_led_calibration: acceptable exposure: %d,%d,%d\n", - expr, expg, expb); + DBG (DBG_info, "gl847_led_calibration: acceptable exposure: %d,%d,%d\n", exp[0], exp[1], exp[2]); + + /* set these values as final ones for scan */ + sanei_genesys_set_double(dev->reg,REG_EXPR,exp[0]); + sanei_genesys_set_double(dev->reg,REG_EXPG,exp[1]); + sanei_genesys_set_double(dev->reg,REG_EXPB,exp[2]); + + /* store in this struct since it is the one used by cache calibration */ + dev->sensor.regs_0x10_0x1d[0] = (exp[0] >> 8) & 0xff; + dev->sensor.regs_0x10_0x1d[1] = exp[0] & 0xff; + dev->sensor.regs_0x10_0x1d[2] = (exp[1] >> 8) & 0xff; + dev->sensor.regs_0x10_0x1d[3] = exp[1] & 0xff; + dev->sensor.regs_0x10_0x1d[4] = (exp[2] >> 8) & 0xff; + dev->sensor.regs_0x10_0x1d[5] = exp[2] & 0xff; /* cleanup before return */ free (line); - - gl847_slow_back_home (dev, SANE_TRUE); - - DBGCOMPLETED; - return status; -} - -/* this function does the offset calibration by scanning one line of the calibration - area below scanner's top. There is a black margin and the remaining is white. - sanei_genesys_search_start() must have been called so that the offsets and margins - are allready known. - -this function expects the slider to be where? -*/ -static SANE_Status -gl847_offset_calibration (Genesys_Device * dev) -{ - DBG (DBG_proc, "%s: not implemented \n", __FUNCTION__); - return SANE_STATUS_GOOD; -} - - -/* alternative coarse gain calibration - this on uses the settings from offset_calibration and - uses only one scanline - */ -/* - with offset and coarse calibration we only want to get our input range into - a reasonable shape. the fine calibration of the upper and lower bounds will - be done with shading. - */ -static SANE_Status -gl847_coarse_gain_calibration (Genesys_Device * dev, int dpi) -{ - DBG (DBG_proc, "%s: not implemented \n", __FUNCTION__); - return SANE_STATUS_GOOD; -} - -/* - * wait for lamp warmup by scanning the same line until difference - * between 2 scans is below a threshold - */ -static SANE_Status -gl847_init_regs_for_warmup (Genesys_Device * dev, - Genesys_Register_Set * local_reg, - int *channels, int *total_size) -{ - DBG (DBG_proc, "%s: not implemented \n", __FUNCTION__); - return SANE_STATUS_GOOD; -} - -static SANE_Status -gl847_is_compatible_calibration (Genesys_Device * dev, - Genesys_Calibration_Cache * cache, - int for_overwrite) -{ -#ifdef HAVE_SYS_TIME_H - struct timeval time; -#endif - SANE_Status status; - - DBG (DBG_proc, "gl847_is_compatible_calibration\n"); - - status = gl847_calculate_current_setup (dev); - - if (status != SANE_STATUS_GOOD) - { - DBG (DBG_error, - "gl847_is_compatible_calibration: failed to calculate current setup: %s\n", - sane_strstatus (status)); - return status; - } - - DBG (DBG_proc, "gl847_is_compatible_calibration: checking\n"); - - if (dev->current_setup.half_ccd != cache->used_setup.half_ccd) - return SANE_STATUS_UNSUPPORTED; - - /* a cache entry expires after 60 minutes for non sheetfed scanners */ -#ifdef HAVE_SYS_TIME_H - gettimeofday (&time, NULL); - if ((time.tv_sec - cache->last_calibration > 60 * 60) - && (dev->model->is_sheetfed == SANE_FALSE) - && (dev->settings.scan_method == SCAN_METHOD_FLATBED)) + + /* go back home */ + if(move>20) { - DBG (DBG_proc, - "gl847_is_compatible_calibration: expired entry, non compatible cache\n"); - return SANE_STATUS_UNSUPPORTED; + RIE (gl847_slow_back_home (dev, SANE_TRUE)); } -#endif - + DBGCOMPLETED; - return SANE_STATUS_GOOD; + return status; } /** @@ -3880,83 +3012,35 @@ gl847_init_gpio (Genesys_Device * dev) { SANE_Status status = SANE_STATUS_GOOD; - uint8_t val, effective; - - DBG (DBG_proc, "gl847_init_gpio: start\n"); + int idx=0; - RIE (sanei_genesys_write_register (dev, 0x6e, dev->gpo.enable[0])); - RIE (sanei_genesys_write_register (dev, 0x6f, dev->gpo.enable[1])); - RIE (sanei_genesys_write_register (dev, 0xa7, 0x04)); - RIE (sanei_genesys_write_register (dev, 0xa8, 0x00)); - RIE (sanei_genesys_write_register (dev, 0xa9, 0x00)); + DBGSTART; - /* toggle needed bits one after all */ - /* TODO define a function for bit toggling */ - RIE (sanei_genesys_read_register (dev, REG6C, &effective)); - val = effective | 0x80; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - RIE (sanei_genesys_read_register (dev, REG6C, &effective)); - if (effective != val) + /* search GPIO profile */ + while(gpios[idx].sensor_id!=0 && dev->model->gpo_type!=gpios[idx].sensor_id) { - DBG (DBG_warn, - "gl847_init_gpio: effective!=needed (0x%02x!=0x%02x) \n", - effective, val); + idx++; } - - val = effective | 0x40; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - RIE (sanei_genesys_read_register (dev, REG6C, &effective)); - if (effective != val) + if(gpios[idx].sensor_id==0) { - DBG (DBG_warn, - "gl847_init_gpio: effective!=needed (0x%02x!=0x%02x) \n", - effective, val); + DBG (DBG_error, "%s: failed to find GPIO profile for sensor_id=%d\n", __FUNCTION__, dev->model->ccd_type); + return SANE_STATUS_INVAL; } - val = effective | 0x20; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - - /* seems useless : memory or clock related ? */ - RIE (sanei_genesys_read_register (dev, REG0B, &effective)); - RIE (sanei_genesys_write_register (dev, REG0B, effective)); - - RIE (sanei_genesys_read_register (dev, REG6C, &effective)); - if (effective != val) - { - DBG (DBG_warn, - "gl847_init_gpio: effective!=needed (0x%02x!=0x%02x) \n", - effective, val); - } - - /* not done yet for LiDE 100 - val = effective | 0x08; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - RIE (sanei_genesys_read_register (dev, REG6C, &effective)); - if (effective != val) - { - DBG (DBG_warn, "gl847_init_gpio: effective!=needed (0x%02x!=0x%02x) \n", - effective, val); - } */ - - val = effective | 0x02; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - RIE (sanei_genesys_read_register (dev, REG6C, &effective)); - if (effective != val) - { - DBG (DBG_warn, - "gl847_init_gpio: effective!=needed (0x%02x!=0x%02x) \n", - effective, val); - } + RIE (sanei_genesys_write_register (dev, REGA7, gpios[idx].ra7)); + RIE (sanei_genesys_write_register (dev, REGA6, gpios[idx].ra6)); + + RIE (sanei_genesys_write_register (dev, REG6E, gpios[idx].r6e)); + RIE (sanei_genesys_write_register (dev, REG6C, 0x00)); + + RIE (sanei_genesys_write_register (dev, REG6B, gpios[idx].r6b)); + RIE (sanei_genesys_write_register (dev, REG6C, gpios[idx].r6c)); + RIE (sanei_genesys_write_register (dev, REG6D, gpios[idx].r6d)); + RIE (sanei_genesys_write_register (dev, REG6E, gpios[idx].r6e)); + RIE (sanei_genesys_write_register (dev, REG6F, gpios[idx].r6f)); - val = effective | 0x01; - RIE (sanei_genesys_write_register (dev, REG6C, val)); - RIE (sanei_genesys_read_register (dev, REG6C, &effective)); - if (effective != val) - { - DBG (DBG_warn, - "gl847_init_gpio: effective!=needed (0x%02x!=0x%02x) \n", - effective, val); - } + RIE (sanei_genesys_write_register (dev, REGA8, gpios[idx].ra8)); + RIE (sanei_genesys_write_register (dev, REGA9, gpios[idx].ra9)); DBGCOMPLETED; return status; @@ -3970,6 +3054,7 @@ { SANE_Status status = SANE_STATUS_GOOD; int idx = 0; + uint8_t val; DBG (DBG_proc, "gl847_init_memory_layout\n"); @@ -3992,6 +3077,14 @@ idx = 3; } + /* CLKSET nd DRAMSEL */ + val = layouts[idx].dramsel; + RIE (sanei_genesys_write_register (dev, REG0B, val)); + dev->reg[reg_0x0b].value = val; + + /* prevent further writings by bulk write register */ + dev->reg[reg_0x0b].address = 0x00; + /* setup base address for shading data. */ /* values must be multiplied by 8192=0x4000 to give address on AHB */ /* R-Channel shading bank0 address setting for CIS */ @@ -4007,18 +3100,18 @@ /* size for each buffer is 0x16d*1k word */ sanei_genesys_write_register (dev, 0xe0, layouts[idx].re0); sanei_genesys_write_register (dev, 0xe1, layouts[idx].re1); -/* R-Channel ODD image buffer end-address 0x0291->0x148800 => size=0xB6800*/ + /* R-Channel ODD image buffer end-address 0x0291->0x148800 => size=0xB6800*/ sanei_genesys_write_register (dev, 0xe2, layouts[idx].re2); sanei_genesys_write_register (dev, 0xe3, layouts[idx].re3); /* R-Channel EVEN image buffer 0x0292 */ sanei_genesys_write_register (dev, 0xe4, layouts[idx].re4); sanei_genesys_write_register (dev, 0xe5, layouts[idx].re5); -/* R-Channel EVEN image buffer end-address 0x03ff*/ + /* R-Channel EVEN image buffer end-address 0x03ff*/ sanei_genesys_write_register (dev, 0xe6, layouts[idx].re6); sanei_genesys_write_register (dev, 0xe7, layouts[idx].re7); -/* same for green, since CIS, same addresses */ + /* same for green, since CIS, same addresses */ sanei_genesys_write_register (dev, 0xe8, layouts[idx].re0); sanei_genesys_write_register (dev, 0xe9, layouts[idx].re1); sanei_genesys_write_register (dev, 0xea, layouts[idx].re2); @@ -4046,39 +3139,31 @@ * initialize ASIC from power on condition */ static SANE_Status -gl847_cold_boot (Genesys_Device * dev) +gl847_boot (Genesys_Device * dev, SANE_Bool cold) { SANE_Status status; uint8_t val; DBGSTART; - RIE (sanei_genesys_write_register (dev, 0x0e, 0x01)); - RIE (sanei_genesys_write_register (dev, 0x0e, 0x00)); + /* reset ASIC ifcold boot */ + if(cold) + { + RIE (sanei_genesys_write_register (dev, 0x0e, 0x01)); + RIE (sanei_genesys_write_register (dev, 0x0e, 0x00)); + } /* test CHKVER */ RIE (sanei_genesys_read_register (dev, REG40, &val)); if (val & REG40_CHKVER) { RIE (sanei_genesys_read_register (dev, 0x00, &val)); - DBG (DBG_info, "gl847_cold_boot: reported version for genesys chip is 0x%02x\n", val); + DBG (DBG_info, "%s: reported version for genesys chip is 0x%02x\n", __FUNCTION__, val); } - /* setup GPIO */ - sanei_genesys_read_register (dev, REGA6, &val); - sanei_genesys_write_register (dev, REGA6, val | 0x04); - sanei_genesys_write_register (dev, REGA7, 0x0f); - sanei_genesys_write_register (dev, REGA9, 0x00); - /* Set default values for registers */ gl847_init_registers (dev); - RIE (sanei_genesys_write_register (dev, REG6B, 0x02)); - RIE (sanei_genesys_write_register (dev, REG6C, 0x00)); - RIE (sanei_genesys_write_register (dev, REG6D, 0x20)); - RIE (sanei_genesys_write_register (dev, REG6E, 0x7e)); - RIE (sanei_genesys_write_register (dev, REG6F, 0x21)); - /* Write initial registers */ RIE (gl847_bulk_write_register (dev, dev->reg, GENESYS_GL847_MAX_REGS)); @@ -4088,26 +3173,6 @@ RIE (sanei_genesys_write_register (dev, REG0B, val)); dev->reg[reg_0x0b].value = val; - /* read back GPIO TODO usefull ? */ - sanei_genesys_read_register (dev, REGA6, &val); - if (val != 0x04) - { - DBG (DBG_warn, "gl847_cold_boot: GPIO is 0x%02d instead of 0x04\n", val); - } - - /* set up clock once for all */ - RIE (sanei_genesys_write_register (dev, 0x77, 0x00)); - RIE (sanei_genesys_write_register (dev, 0x78, 0x00)); - RIE (sanei_genesys_write_register (dev, 0x79, 0x9f)); - - /* CLKSET */ - val = (dev->reg[reg_0x0b].value & ~REG0B_CLKSET) | REG0B_30MHZ; - RIE (sanei_genesys_write_register (dev, REG0B, val)); - dev->reg[reg_0x0b].value = val; - - /* prevent further writings by bulk write register */ - dev->reg[reg_0x0b].address = 0x00; - /* CIS_LINE */ SETREG (0x08, REG08_CIS_LINE); RIE (sanei_genesys_write_register (dev, 0x08, dev->reg[reg_0x08].value)); @@ -4116,9 +3181,6 @@ RIE (sanei_genesys_write_0x8c (dev, 0x10, 0x0b)); RIE (sanei_genesys_write_0x8c (dev, 0x13, 0x0e)); - sanei_genesys_write_register (dev, REGA7, 0x04); - sanei_genesys_write_register (dev, REGA9, 0x00); - /* setup gpio */ RIE (gl847_init_gpio (dev)); @@ -4132,60 +3194,6 @@ return SANE_STATUS_GOOD; } -/** @brief dummy scan at 150 to warm scanner - * - * */ -static SANE_Status -gl847_warm_scan (Genesys_Device * dev) -{ - SANE_Status status; - size_t size; - uint8_t *line; - float pixels; - int dpi = 300; - - DBGSTART; - - pixels = (dev->sensor.sensor_pixels * dpi) / dev->sensor.optical_res; - status = gl847_init_scan_regs (dev, - dev->reg, - dpi, - dpi, - 0, - 90, - pixels, - 1, - 16, - 3, - 0, - SCAN_FLAG_DISABLE_SHADING | - SCAN_FLAG_DISABLE_GAMMA | - SCAN_FLAG_IGNORE_LINE_DISTANCE | - SCAN_FLAG_USE_OPTICAL_RES); - - RIE (gl847_bulk_write_register - (dev, dev->reg, GENESYS_GL847_MAX_REGS)); - - /* colors * bytes_per_color * scan lines */ - size = ((int) pixels) * 3 * 2 * 1; - - line = malloc (size); - if (!line) - return SANE_STATUS_NO_MEM; - - DBG (DBG_info, "%s: starting dummy data reading\n", __FUNCTION__); - - RIE (gl847_begin_scan (dev, dev->reg, SANE_TRUE)); - sanei_genesys_read_data_from_scanner (dev, line, size); - RIE (gl847_end_scan (dev, dev->reg, SANE_TRUE)); - - free (line); - RIE (gl847_slow_back_home (dev, SANE_TRUE)); - - DBGCOMPLETED; - return SANE_STATUS_GOOD; -} - /* * * initialize backend and ASIC : registers, motor tables, and gamma tables * then ensure scanner's head is at home @@ -4230,7 +3238,13 @@ } /* set up hardware and registers */ - RIE (gl847_cold_boot (dev)); + RIE (gl847_boot (dev, cold)); + + /* set analog frontend */ + RIE (gl847_set_fe (dev, AFE_INIT)); + + /* move head away from park position */ + /* XXX STEF XXX gl847_feed (dev, 300); */ /* now hardware part is OK, set up device struct */ FREE_IFNOT_NULL (dev->white_average_data); @@ -4244,9 +3258,6 @@ memcpy (dev->calib_reg, dev->reg, GENESYS_GL847_MAX_REGS * sizeof (Genesys_Register_Set)); - /* Set analog frontend */ - RIE (gl847_set_fe (dev, AFE_INIT)); - /* init gamma tables */ size = 256; if (dev->sensor.red_gamma_table == NULL) @@ -4292,8 +3303,6 @@ /* Move home if needed */ RIE (gl847_slow_back_home (dev, SANE_TRUE)); - RIE (gl847_warm_scan (dev)); - dev->scanhead_position_in_steps = 0; /* Set powersaving (default = 15 minutes) */ RIE (gl847_set_powersaving (dev, 15)); @@ -4310,17 +3319,31 @@ */ SANE_Status status = SANE_STATUS_GOOD; uint8_t val; - + uint8_t scan, file, email, copy; + switch(s->dev->model->gpo_type) + { + case GPO_CANONLIDE700: + scan=0x04; + file=0x02; + email=0x01; + copy=0x08; + break; + default: + scan=0x01; + file=0x02; + email=0x04; + copy=0x08; + } RIE (sanei_genesys_read_register (s->dev, REG6D, &val)); if (s->val[OPT_SCAN_SW].b == s->last_val[OPT_SCAN_SW].b) - s->val[OPT_SCAN_SW].b = (val & 0x01) == 0; + s->val[OPT_SCAN_SW].b = (val & scan) == 0; if (s->val[OPT_FILE_SW].b == s->last_val[OPT_FILE_SW].b) - s->val[OPT_FILE_SW].b = (val & 0x02) == 0; + s->val[OPT_FILE_SW].b = (val & file) == 0; if (s->val[OPT_EMAIL_SW].b == s->last_val[OPT_EMAIL_SW].b) - s->val[OPT_EMAIL_SW].b = (val & 0x04) == 0; + s->val[OPT_EMAIL_SW].b = (val & email) == 0; if (s->val[OPT_COPY_SW].b == s->last_val[OPT_COPY_SW].b) - s->val[OPT_COPY_SW].b = (val & 0x08) == 0; + s->val[OPT_COPY_SW].b = (val & copy) == 0; return status; } @@ -4624,12 +3647,360 @@ return status; } +/** + * average dark pixels of a 8 bits scan + */ +static int +dark_average (uint8_t * data, unsigned int pixels, unsigned int lines, + unsigned int channels, unsigned int black) +{ + unsigned int i, j, k, average, count; + unsigned int avg[3]; + uint8_t val; + + /* computes average value on black margin */ + for (k = 0; k < channels; k++) + { + avg[k] = 0; + count = 0; + for (i = 0; i < lines; i++) + { + for (j = 0; j < black; j++) + { + val = data[i * channels * pixels + j + k]; + avg[k] += val; + count++; + } + } + if (count) + avg[k] /= count; + DBG (DBG_info, "dark_average: avg[%d] = %d\n", k, avg[k]); + } + average = 0; + for (i = 0; i < channels; i++) + average += avg[i]; + average /= channels; + DBG (DBG_info, "dark_average: average = %d\n", average); + return average; +} + +static SANE_Status +gl847_offset_calibration (Genesys_Device * dev) +{ + SANE_Status status = SANE_STATUS_GOOD; + uint8_t *first_line, *second_line, reg04; + unsigned int channels, bpp; + char title[32]; + int pass = 0, avg, total_size; + int topavg, bottomavg, resolution, lines; + int top, bottom, black_pixels, pixels; + + DBGSTART; + + /* no gain nor offset for AKM AFE */ + RIE (sanei_genesys_read_register (dev, REG04, ®04)); + if ((reg04 & REG04_FESET) == 0x02) + { + DBGCOMPLETED; + return status; + } + + /* offset calibration is always done in color mode */ + channels = 3; + resolution=dev->sensor.optical_res; + dev->calib_pixels = dev->sensor.sensor_pixels; + lines=1; + bpp=8; + pixels= (dev->sensor.sensor_pixels*resolution) / dev->sensor.optical_res; + black_pixels = (dev->sensor.black_pixels * resolution) / dev->sensor.optical_res; + DBG (DBG_io2, "gl847_offset_calibration: black_pixels=%d\n", black_pixels); + + status = gl847_init_scan_regs (dev, + dev->calib_reg, + resolution, + resolution, + 0, + 0, + pixels, + lines, + bpp, + channels, + dev->settings.color_filter, + SCAN_FLAG_DISABLE_SHADING | + SCAN_FLAG_DISABLE_GAMMA | + SCAN_FLAG_SINGLE_LINE | + SCAN_FLAG_IGNORE_LINE_DISTANCE); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, + "gl847_offset_calibration: failed to setup scan: %s\n", + sane_strstatus (status)); + return status; + } + gl847_set_motor_power (dev->calib_reg, SANE_FALSE); + + /* allocate memory for scans */ + total_size = pixels * channels * lines * (bpp/8); /* colors * bytes_per_color * scan lines */ + + first_line = malloc (total_size); + if (!first_line) + return SANE_STATUS_NO_MEM; + + second_line = malloc (total_size); + if (!second_line) + { + free (first_line); + return SANE_STATUS_NO_MEM; + } + + /* init gain */ + dev->frontend.gain[0] = 0; + dev->frontend.gain[1] = 0; + dev->frontend.gain[2] = 0; + + /* scan with no move */ + bottom = 10; + dev->frontend.offset[0] = bottom; + dev->frontend.offset[1] = bottom; + dev->frontend.offset[2] = bottom; + + RIE (gl847_set_fe(dev, AFE_SET)); + RIE (gl847_bulk_write_register (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS)); + DBG (DBG_info, "gl847_offset_calibration: starting first line reading\n"); + RIE (gl847_begin_scan (dev, dev->calib_reg, SANE_TRUE)); + RIE (sanei_genesys_read_data_from_scanner (dev, first_line, total_size)); + if (DBG_LEVEL >= DBG_data) + { + snprintf(title,20,"offset%03d.pnm",bottom); + sanei_genesys_write_pnm_file (title, first_line, bpp, channels, pixels, lines); + } + + bottomavg = dark_average (first_line, pixels, lines, channels, black_pixels); + DBG (DBG_io2, "gl847_offset_calibration: bottom avg=%d\n", bottomavg); + + /* now top value */ + top = 255; + dev->frontend.offset[0] = top; + dev->frontend.offset[1] = top; + dev->frontend.offset[2] = top; + RIE (gl847_set_fe(dev, AFE_SET)); + RIE (gl847_bulk_write_register (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS)); + DBG (DBG_info, "gl847_offset_calibration: starting second line reading\n"); + RIE (gl847_begin_scan (dev, dev->calib_reg, SANE_TRUE)); + RIE (sanei_genesys_read_data_from_scanner (dev, second_line, total_size)); + + topavg = dark_average (second_line, pixels, lines, channels, black_pixels); + DBG (DBG_io2, "gl847_offset_calibration: top avg=%d\n", topavg); + + /* loop until acceptable level */ + while ((pass < 32) && (top - bottom > 1)) + { + pass++; + + /* settings for new scan */ + dev->frontend.offset[0] = (top + bottom) / 2; + dev->frontend.offset[1] = (top + bottom) / 2; + dev->frontend.offset[2] = (top + bottom) / 2; + + /* scan with no move */ + RIE(gl847_set_fe(dev, AFE_SET)); + RIE (gl847_bulk_write_register (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS)); + DBG (DBG_info, "gl847_offset_calibration: starting second line reading\n"); + RIE (gl847_begin_scan (dev, dev->calib_reg, SANE_TRUE)); + RIE (sanei_genesys_read_data_from_scanner (dev, second_line, total_size)); + + if (DBG_LEVEL >= DBG_data) + { + sprintf (title, "offset%03d.pnm", dev->frontend.offset[1]); + sanei_genesys_write_pnm_file (title, second_line, bpp, channels, pixels, lines); + } + + avg = dark_average (second_line, pixels, lines, channels, black_pixels); + DBG (DBG_info, "gl847_offset_calibration: avg=%d offset=%d\n", avg, + dev->frontend.offset[1]); + + /* compute new boundaries */ + if (topavg == avg) + { + topavg = avg; + top = dev->frontend.offset[1]; + } + else + { + bottomavg = avg; + bottom = dev->frontend.offset[1]; + } + } + DBG (DBG_info, "gl847_offset_calibration: offset=(%d,%d,%d)\n", dev->frontend.offset[0], dev->frontend.offset[1], dev->frontend.offset[2]); + + /* cleanup before return */ + free (first_line); + free (second_line); + + DBGCOMPLETED; + return SANE_STATUS_GOOD; +} + +static SANE_Status +gl847_coarse_gain_calibration (Genesys_Device * dev, int dpi) +{ + int pixels; + int total_size; + uint8_t *line, reg04; + int i, j, channels; + SANE_Status status = SANE_STATUS_GOOD; + int max[3]; + float gain[3],coeff; + int val, code, lines; + int resolution; + int bpp; + + DBG (DBG_proc, "gl847_coarse_gain_calibration: dpi = %d\n", dpi); + + /* no gain nor offset for AKM AFE */ + RIE (sanei_genesys_read_register (dev, REG04, ®04)); + if ((reg04 & REG04_FESET) == 0x02) + { + DBGCOMPLETED; + return status; + } + + /* coarse gain calibration is always done in color mode */ + channels = 3; + + /* follow CKSEL */ + if(dev->settings.xressensor.optical_res) + { + coeff=0.9; + resolution=dev->sensor.optical_res/2; + resolution=dev->sensor.optical_res; + } + else + { + resolution=dev->sensor.optical_res; + coeff=1.0; + } + lines=10; + bpp=8; + pixels = (dev->sensor.sensor_pixels * resolution) / dev->sensor.optical_res; + + status = gl847_init_scan_regs (dev, + dev->calib_reg, + resolution, + resolution, + 0, + 0, + pixels, + lines, + bpp, + channels, + dev->settings.color_filter, + SCAN_FLAG_DISABLE_SHADING | + SCAN_FLAG_DISABLE_GAMMA | + SCAN_FLAG_SINGLE_LINE | + SCAN_FLAG_IGNORE_LINE_DISTANCE); + gl847_set_motor_power (dev->calib_reg, SANE_FALSE); + + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, + "gl847_coarse_calibration: failed to setup scan: %s\n", + sane_strstatus (status)); + return status; + } + + RIE (gl847_bulk_write_register + (dev, dev->calib_reg, GENESYS_GL847_MAX_REGS)); + + total_size = pixels * channels * (16/bpp) * lines; + + line = malloc (total_size); + if (!line) + return SANE_STATUS_NO_MEM; + + RIE (gl847_set_fe(dev, AFE_SET)); + RIE (gl847_begin_scan (dev, dev->calib_reg, SANE_TRUE)); + RIE (sanei_genesys_read_data_from_scanner (dev, line, total_size)); + + if (DBG_LEVEL >= DBG_data) + sanei_genesys_write_pnm_file ("coarse.pnm", line, bpp, channels, pixels, lines); + + /* average value on each channel */ + for (j = 0; j < channels; j++) + { + max[j] = 0; + for (i = pixels/4; i < (pixels*3/4); i++) + { + if(bpp==16) + { + if (dev->model->is_cis) + val = + line[i * 2 + j * 2 * pixels + 1] * 256 + + line[i * 2 + j * 2 * pixels]; + else + val = + line[i * 2 * channels + 2 * j + 1] * 256 + + line[i * 2 * channels + 2 * j]; + } + else + { + if (dev->model->is_cis) + val = line[i + j * pixels]; + else + val = line[i * channels + j]; + } + + max[j] += val; + } + max[j] = max[j] / (pixels/2); + + gain[j] = ((float) dev->sensor.gain_white_ref*coeff) / max[j]; + + /* turn logical gain value into gain code, checking for overflow */ + code = 283 - 208 / gain[j]; + if (code > 255) + code = 255; + else if (code < 0) + code = 0; + dev->frontend.gain[j] = code; + + DBG (DBG_proc, + "gl847_coarse_gain_calibration: channel %d, max=%d, gain = %f, setting:%d\n", + j, max[j], gain[j], dev->frontend.gain[j]); + } + + if (dev->model->is_cis) + { + if (dev->frontend.gain[0] > dev->frontend.gain[1]) + dev->frontend.gain[0] = dev->frontend.gain[1]; + if (dev->frontend.gain[0] > dev->frontend.gain[2]) + dev->frontend.gain[0] = dev->frontend.gain[2]; + dev->frontend.gain[2] = dev->frontend.gain[1] = dev->frontend.gain[0]; + } + + if (channels == 1) + { + dev->frontend.gain[0] = dev->frontend.gain[1]; + dev->frontend.gain[2] = dev->frontend.gain[1]; + } + + free (line); + + RIE (gl847_stop_action (dev)); + + gl847_slow_back_home (dev, SANE_TRUE); + + DBGCOMPLETED; + return SANE_STATUS_GOOD; +} + + /** the gl847 command set */ static Genesys_Command_Set gl847_cmd_set = { "gl847-generic", /* the name of this set */ gl847_init, - gl847_init_regs_for_warmup, + NULL, /*gl847_init_regs_for_warmup*/ gl847_init_regs_for_coarse_calibration, gl847_init_regs_for_shading, gl847_init_regs_for_scan, @@ -4670,14 +4041,15 @@ gl847_update_hardware_sensors, - gl847_load_document, - gl847_detect_document_end, - gl847_eject_document, + NULL, /* no known gl847 sheetfed scanner */ + NULL, /* no known gl847 sheetfed scanner */ + NULL, /* no known gl847 sheetfed scanner */ gl847_search_strip, - gl847_is_compatible_calibration, + sanei_genesys_is_compatible_calibration, NULL, - gl847_send_shading_data + gl847_send_shading_data, + gl847_calculate_current_setup }; SANE_Status diff -Nru sane-backends-1.0.22/backend/genesys_gl847.h sane-backends-1.0.23/backend/genesys_gl847.h --- sane-backends-1.0.22/backend/genesys_gl847.h 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_gl847.h 2012-07-01 02:00:44.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2010 Stphane Voltz + Copyright (C) 2010-2012 Stphane Voltz This file is part of the SANE package. @@ -40,31 +40,9 @@ whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice. */ -#include "../include/sane/config.h" -#include -#include -#include -#include -#include - -#include "../include/sane/sane.h" -#include "../include/sane/sanei.h" -#include "../include/sane/saneopts.h" - -#undef BACKEND_NAME -#define BACKEND_NAME genesys_gl847 - -#include "../include/sane/sanei_backend.h" -#include "../include/sane/sanei_config.h" -#include "../include/sane/sanei_usb.h" - -#include "../include/_stdint.h" #include "genesys.h" -#define DBGSTART DBG (DBG_proc, "%s start\n", __FUNCTION__); -#define DBGCOMPLETED DBG (DBG_proc, "%s completed\n", __FUNCTION__); - #define REG01 0x01 #define REG01_CISSET 0x80 #define REG01_DOGENB 0x40 @@ -152,6 +130,9 @@ #define REG0B_48MHZ 0x60 #define REG0B_60MHZ 0x80 +#define REG0C 0x0c +#define REG0C_CCDLMT 0x0f + #define REG0D 0x0d #define REG0D_FULLSTP 0x10 #define REG0D_SEND 0x80 @@ -177,6 +158,7 @@ #define REG17_TGW 0x3f #define REG17S_TGW 0 +#define REG18 0x18 #define REG18_CNSET 0x80 #define REG18_DCKSEL 0x60 #define REG18_CKTOGGLE 0x10 @@ -191,6 +173,7 @@ #define REG1A_CK3INV 0x04 #define REG1A_LINECLP 0x02 +#define REG1C 0x1c #define REG1C_TGTIME 0x07 #define REG1D_CK4LOW 0x80 @@ -205,6 +188,9 @@ #define REG1E_LINESEL 0x0f #define REG1ES_LINESEL 0 +#define REG_FEDCNT 0x1f + +#define REG24 0x1c #define REG40 0x40 #define REG40_CHKVER 0x10 #define REG40_HISPDFLG 0x04 @@ -299,21 +285,40 @@ #define REG6D 0x6d #define REG6E 0x6e #define REG6F 0x6f +#define REG7E 0x7e #define REG87_LEDADD 0x04 +#define REG9E 0x9e +#define REG9F 0x9f + #define REGA6 0xa6 #define REGA7 0xa7 +#define REGA8 0xa8 #define REGA9 0xa9 +#define REGAB 0xab -#define SCAN_FLAG_SINGLE_LINE 0x01 -#define SCAN_FLAG_DISABLE_SHADING 0x02 -#define SCAN_FLAG_DISABLE_GAMMA 0x04 -#define SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE 0x08 -#define SCAN_FLAG_IGNORE_LINE_DISTANCE 0x10 -#define SCAN_FLAG_USE_OPTICAL_RES 0x20 -#define SCAN_FLAG_DISABLE_LAMP 0x40 -#define SCAN_FLAG_DYNAMIC_LINEART 0x80 +#define REG_EXPR 0x10 +#define REG_EXPG 0x12 +#define REG_EXPB 0x14 +#define REG_EXPDMY 0x19 +#define REG_STEPNO 0x21 +#define REG_FWDSTEP 0x22 +#define REG_BWDSTEP 0x23 +#define REG_FASTNO 0x24 +#define REG_DPISET 0x2c +#define REG_STRPIXEL 0x30 +#define REG_ENDPIXEL 0x32 +#define REG_LINCNT 0x25 +#define REG_MAXWD 0x35 +#define REG_LPERIOD 0x38 +#define REG_FEEDL 0x3d +#define REG_FMOVDEC 0x5f +#define REG_FSHDEC 0x69 +#define REG_FMOVNO 0x6a +#define REG_CK1MAP 0x74 +#define REG_CK3MAP 0x77 +#define REG_CK4MAP 0x7a /** * writable scanner registers */ @@ -465,8 +470,84 @@ #define SETREG(adr,val) {dev->reg[reg_##adr].address=adr;dev->reg[reg_##adr].value=val;} +/** + * Write to many GL847 registers at once + * Note: sequential call to write register, no effective + * bulk write implemented. + * @param dev device to write to + * @param reg pointer to an array of registers + * @param elems size of the array + */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl847_bulk_write_register (Genesys_Device * dev, Genesys_Register_Set * reg, size_t elems); + +/** set up registers for an actual scan + * + * this function sets up the scanner to scan in normal or single line mode + */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl847_init_scan_regs (Genesys_Device * dev, + Genesys_Register_Set * reg, + float xres, /*dpi */ + float yres, /*dpi */ + float startx, /*optical_res, from dummy_pixel+1 */ + float starty, /*base_ydpi, from home! */ + float pixels, + float lines, + unsigned int depth, + unsigned int channels, + int color_filter, + unsigned int flags); + +/* Send the low-level scan command */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl847_begin_scan (Genesys_Device * dev, Genesys_Register_Set * reg, SANE_Bool start_motor); + +/* Send the stop scan command */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status gl847_end_scan (Genesys_Device * dev, Genesys_Register_Set * reg, SANE_Bool check_stop); + +/** @brief moves the slider to steps at motor base dpi + * @param dev device to work on + * @param steps number of steps to move + * */ +#ifndef UNIT_TESTING +static +#endif +SANE_Status +gl847_feed (Genesys_Device * dev, unsigned int steps); + typedef struct { + uint8_t sensor_id; + uint8_t r6b; + uint8_t r6c; + uint8_t r6d; + uint8_t r6e; + uint8_t r6f; + uint8_t ra6; + uint8_t ra7; + uint8_t ra8; + uint8_t ra9; +} Gpio_Profile; + +static Gpio_Profile gpios[]={ + { GPO_CANONLIDE200, 0x02, 0xf9, 0x20, 0xff, 0x00, 0x04, 0x04, 0x00, 0x00}, + { GPO_CANONLIDE700, 0x06, 0xdb, 0xff, 0xff, 0x80, 0x15, 0x07, 0x20, 0x10}, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +}; + +typedef struct +{ + uint8_t dramsel; uint8_t rd0; uint8_t rd1; uint8_t rd2; @@ -483,22 +564,134 @@ static Memory_layout layouts[]={ /* LIDE 100 */ { + 0x29, 0x0a, 0x15, 0x20, 0x00, 0xac, 0x02, 0x55, 0x02, 0x56, 0x03, 0xff }, /* LIDE 200 */ { + 0x29, 0x0a, 0x1f, 0x34, 0x01, 0x24, 0x02, 0x91, 0x02, 0x92, 0x03, 0xff }, /* 5600F */ { + 0x29, 0x0a, 0x1f, 0x34, 0x01, 0x24, 0x02, 0x91, 0x02, 0x92, 0x03, 0xff }, /* LIDE 700F */ { - 0x0a, 0x1f, 0x34, - 0x01, 0x24, 0x02, 0x91, 0x02, 0x92, 0x03, 0xff + 0x2a, + 0x0a, 0x33, 0x5c, + 0x02, 0x14, 0x09, 0x09, 0x09, 0x0a, 0x0f, 0xff } }; + +/** @brief structure for sensor settings + * this structure describes the sensor settings to use for a given + * exposure. + */ +typedef struct { + int sensor_type; /**> sensor id */ + int dpi; /**> maximum dpi for which data are valid */ + int exposure; /**> exposure */ + int ck1map; /**> CK1MAP */ + int ck3map; /**> CK3MAP */ + int ck4map; /**> CK4MAP */ + int segcnt; /**> SEGCNT */ + int expdummy; /**> exposure dummy */ + int expr; /**> initial red exposure */ + int expg; /**> initial green exposure */ + int expb; /**> initial blue exposure */ + size_t *order; /**> order of sub-segments */ + uint8_t r17; /**> TG width */ +} Sensor_Profile; + +/* *INDENT-OFF* */ + +static size_t order_01[]={0,1}; +static size_t order_0213[]={0,2,1,3}; +static size_t order_0246[]={0,2,4,6,1,3,5,7}; + +static size_t new_order[]={0,1,2,3}; +static size_t order_0145[]={0,1,4,5,2,3,6,7}; + +/** + * database of sensor profiles + */ +static Sensor_Profile sensors[]={ + {CIS_CANONLIDE100, 200, 2848, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a}, + {CIS_CANONLIDE100, 300, 1424, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a}, + {CIS_CANONLIDE100, 600, 1432, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a}, + {CIS_CANONLIDE100, 1200, 2712, 60, 159, 85, 5136, 255, 746, 478, 353, order_01 , 0x08}, + {CIS_CANONLIDE100, 2400, 5280, 60, 159, 85, 5136, 255, 1417, 909, 643, order_0213, 0x06}, + /* + {CIS_CANONLIDE200, 150, 2848, 240, 636, 340, 5144, 0, 255, 637, 637, 637}, + {CIS_CANONLIDE200, 300, 1424, 240, 636, 340, 5144, 0, 255, 637, 637, 637}, + */ + {CIS_CANONLIDE200, 200, 2848, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a}, + {CIS_CANONLIDE200, 300, 1424, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a}, + {CIS_CANONLIDE200, 600, 1432, 60, 159, 85, 5136, 255, 410, 275, 203, NULL , 0x0a}, + {CIS_CANONLIDE200, 1200, 2712, 60, 159, 85, 5136, 255, 746, 478, 353, order_01 , 0x08}, + {CIS_CANONLIDE200, 2400, 5280, 60, 159, 85, 5136, 255, 1417, 909, 643, order_0213, 0x06}, + {CIS_CANONLIDE200, 4800, 10416, 60, 159, 85, 5136, 255, 2692, 1728, 1221, order_0246, 0x04}, + + /* LiDE 700F */ + {CIS_CANONLIDE700, 150, 2848, 135, 249, 85, 5187, 255, 465, 310, 239, NULL , 0x0c}, + {CIS_CANONLIDE700, 300, 1424, 135, 249, 85, 5187, 255, 465, 310, 239, NULL , 0x0c}, + {CIS_CANONLIDE700, 600, 1504, 135, 249, 85, 5187, 255, 465, 310, 239, NULL , 0x0c}, + {CIS_CANONLIDE700, 1200, 2696, 135, 249, 85, 5187, 255, 1464, 844, 555, order_01 , 0x0a}, + {CIS_CANONLIDE700, 2400, 10576, 135, 249, 85, 5187, 255, 2798, 1558, 972, new_order , 0x08}, + {CIS_CANONLIDE700, 4800, 10576, 135, 249, 85, 5187, 255, 2798, 1558, 972, order_0145, 0x06}, +}; +/* *INDENT-ON* */ + +/* base motor sopes in full step unit */ +/* target=((exposure * dpi) / base_dpi)>>step_type; */ +static uint32_t lide200_base[] = { 46876, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2343, 2336, 2329, 2322, 2314, 2307, 2300,2292,2285,2278,2271,2263,2256,2249,2241,2234,2227,2219,2212,2205,2198,2190,2183,2176,2168,2161,2154,2146,2139,2132,2125,2117,2110,2103,2095,2088,2081,2073,2066,2059,2052,2044,2037,2030,2022,2015,2008,2001,1993,1986,1979,1971,1964,1957,1949,1942,1935,1928,1920,1913,1906,1898,1891,1884,1876,1869,1862,1855,1847,1840,1833,1825,1818,1811,1803,1796,1789,1782,1774,1767,1760,1752,1745,1738,1731,1723,1716,1709,1701,1694,1687,1679,1672,1665,1658,1650,1643,1636,1628,1621,1614,1606,1599,1592,1585,1577,1570,1563,1555,1548,1541,1533,1526,1519,1512,1504,1497,1490,1482,1475,1468,1461,1453,1446,1439,1431,1424,1417,1409,1402,1395,1388,1380,1373,1366,1358,1351,1344,1336,1329,1322,1315,1307,1300,1293,1285,1278,1271,1263,1256,1249,1242,1234,1227,1220,1212,1205,1198,1191,1183,1176,1169,1161,1154,1147,1139,1132,1125,1118,1110,1103,1096,1088,1081,1074,1066,1059,1052,1045,1037,1030,1023,1015,1008,1001,993,986,979,972,964,957,950,942,935,928,921,913,906,899,891,884,877,869,862,855,848,840,833,826,818,811,804,796,789,782,775,767,760,753,745,738,731,723,716,709,702,694,687,680,672,665,658,651,643,636,629,621,614,607,599,592,585,578,570,563,556,534,534, 0}; +static uint32_t lide200_medium[] = { 46876, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136, 8136,2343, 2336, 2329, 2322, 2314, 2307, 2300,2292,2285,2278,2271,2263,2256,2249,2241,2234,2227,2219,2212,2205,2198,2190,2183,2176,2168,2161,2154,2146,2139,2132,2125,2117,2110,2103,2095,2088,2081,2073,2066,2059,2052,2044,2037,2030,2022,2015,2008,2001,1993,1986,1979,1971,1964,1957,1949,1942,1935,1928,1920,1913,1906,1898,1891,1884,1876,1869,1862,1855,1847,1840,1833,1825,1818,1811,1803,1796,1789,1782,1774,1767,1760,1752,1745,1738,1731,1723,1716,1709,1701,1694,1687,1679,1672,1665,1658,1650,1643,1636,1628,1621,1614,1606,1599,1592,1585,1577,1570,1563,1555,1548,1541,1533,1526,1519,1512,1504,1497,1490,1482,1475,1468,1461,1453,1446,1439,1431,1424,1417,1409,1402,1395,1388,1380,1373,1366,1358,1351,1344,1336,1329,1322,1315,1307,1300,1293,1285,1278,1271,1263,1256,1249,1242,1234,1227,1220,1212,1205,1198,1191,1183,1176,1169,1161,1154,1147,1139,1132,1125,1118,1110,1103,1096,1088,1081,1074,1066,1059,1052,1045,1037,1030,1023,1015,1008,1001,993,986,979,972,964,957,950,942,935,928,921,913,906,899,891,884,877,869,862,855,848,840,833,826,818,811,804,796,789,782,775,767,760,753,745,738,731,723,716,709,702,694,687,680,672,665,658,651,643,636,629,621,614,607,599,592,585,578,570,563,556,534,534, 0}; +static uint32_t lide200_high[] = { 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 31680, 2219,2212,2205,2198,2190,2183,2176,2168,2161,2154,2146,2139,2132,2125,2117,2110,2103,2095,2088,2081,2073,2066,2059,2052,2044,2037,2030,2022,2015,2008,2001,1993,1986,1979,1971,1964,1957,1949,1942,1935,1928,1920,1913,1906,1898,1891,1884,1876,1869,1862,1855,1847,1840,1833,1825,1818,1811,1803,1796,1789,1782,1774,1767,1760,1752,1745,1738,1731,1723,1716,1709,1701,1694,1687,1679,1672,1665,1658,1650,1643,1636,1628,1621,1614,1606,1599,1592,1585,1577,1570,1563,1555,1548,1541,1533,1526,1519,1512,1504,1497,1490,1482,1475,1468,1461,1453,1446,1439,1431,1424,1417,1409,1402,1395,1388,1380,1373,1366,1358,1351,1344,1336,1329,1322,1315,1307,1300,1293,1285,1278,1271,1263,1256,1249,1242,1234,1227,1220,1212,1205,1198,1191,1183,1176,1169,1161,1154,1147,1139,1132,1125,1118,1110,1103,1096,1088,1081,1074,1066,1059,1052,1045,1037,1030,1023,1015,1008,1001,993,986,979,972,964,957,950,942,935,928,921,913,906,899,891,884,877,869,862,855,848,840,833,826,818,811,804,796,789,782,775,767,760,753,745,738,731,723,716,709,702,694,687,680,672,665,658,651,643,636,629,621,614,607,599,592,585,578,570,563,556,534,534, 0}; +static uint32_t lide700_medium[] = { 46876,2342,2342,2342,2342,2342,2342,2342,2342,2302,2286,2274,2266,2258,2252,2244,2240,2234,2228,2224,2218,2216,2210,2208,2202,2200,2194,2192,2190,2186,2182,2180,2176,2174,2172,2170,2166,2162,2160,2156,2154,2152,2150,2150,2146,2144,2142,2140,2136,2134,2132,2130,2130,2128,2124,2122,2120,2120,2118,2116,2112,2112,2110,2108,2106,2106,2104,2102,2102,2098,2096,2094,2094,2092,2090,2090,2086,2084,2084,2082,2082,2080,2078,2078,2076,2074,2074,2070,2070,2068,2066,2066,2064,2064,2062,2062,2060,2058,2058,2054,2054,2052,2052,2050,2050,2048,2048,2046,2046,2044,2042,2042,2040,2040,2038,2038,2034,2034,2032,2032,2030,2030,2028,2028,2026,2026,2022,2022}; +static uint32_t lide700_high[] = { 46876,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864,15864}; +/* 5190 trop + * 5186 pas assez + */ +/* +static uint32_t lide200_max[] = { 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 124992, 2219,2212,2205,2198,2190,2183,2176,2168,2161,2154,2146,2139,2132,2125,2117,2110,2103,2095,2088,2081,2073,2066,2059,2052,2044,2037,2030,2022,2015,2008,2001,1993,1986,1979,1971,1964,1957,1949,1942,1935,1928,1920,1913,1906,1898,1891,1884,1876,1869,1862,1855,1847,1840,1833,1825,1818,1811,1803,1796,1789,1782,1774,1767,1760,1752,1745,1738,1731,1723,1716,1709,1701,1694,1687,1679,1672,1665,1658,1650,1643,1636,1628,1621,1614,1606,1599,1592,1585,1577,1570,1563,1555,1548,1541,1533,1526,1519,1512,1504,1497,1490,1482,1475,1468,1461,1453,1446,1439,1431,1424,1417,1409,1402,1395,1388,1380,1373,1366,1358,1351,1344,1336,1329,1322,1315,1307,1300,1293,1285,1278,1271,1263,1256,1249,1242,1234,1227,1220,1212,1205,1198,1191,1183,1176,1169,1161,1154,1147,1139,1132,1125,1118,1110,1103,1096,1088,1081,1074,1066,1059,1052,1045,1037,1030,1023,1015,1008,1001,993,986,979,972,964,957,950,942,935,928,921,913,906,899,891,884,877,869,862,855,848,840,833,826,818,811,804,796,789,782,775,767,760,753,745,738,731,723,716,709,702,694,687,680,672,665,658,651,643,636,629,621,614,607,599,592,585,578,570,563,556,534,534, 0}; +*/ + +/** + * database of motor profiles + */ + +/* *INDENT-OFF* */ +static Motor_Profile gl847_motors[]={ + /* LiDE 100 */ + {MOTOR_CANONLIDE100, 2848, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE100, 1424, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE100, 1432, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE100, 2712, QUARTER_STEP, lide200_medium}, + {MOTOR_CANONLIDE100, 5280, EIGHTH_STEP , lide200_high}, + + /* LiDE 200 */ + {MOTOR_CANONLIDE200, 2848, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE200, 1424, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE200, 1432, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE200, 2712, QUARTER_STEP, lide200_medium}, + {MOTOR_CANONLIDE200, 5280, EIGHTH_STEP , lide200_high}, + {MOTOR_CANONLIDE200, 10416, EIGHTH_STEP , lide200_high}, + + /* LiDE 700F */ + {MOTOR_CANONLIDE700, 2848, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE700, 1424, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE700, 1504, HALF_STEP , lide200_base}, + {MOTOR_CANONLIDE700, 2696, HALF_STEP , lide700_medium}, /* 2696 , 2838 */ + {MOTOR_CANONLIDE700, 10576, EIGHTH_STEP, lide700_high}, + + /* end of database entry */ + {0, 0, 0, NULL}, +}; +/* *INDENT-ON* */ + +/* vim: set sw=2 cino=>2se-1sn-1s{s^-1st0(0u0 smarttab expandtab: */ diff -Nru sane-backends-1.0.22/backend/genesys_low.c sane-backends-1.0.23/backend/genesys_low.c --- sane-backends-1.0.22/backend/genesys_low.c 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_low.c 2012-07-01 02:00:44.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2010-2011 Stphane Voltz + Copyright (C) 2010-2012 Stphane Voltz This file is part of the SANE package. @@ -41,28 +41,9 @@ whether to permit this exception to apply to your modifications. If you do not wish that, delete this exception notice. */ -#include "../include/sane/config.h" - -#include -#include -#include -#include -#include - -#include "../include/sane/sane.h" -#include "../include/sane/sanei.h" -#include "../include/sane/saneopts.h" - -#ifndef HACK #undef BACKEND_NAME #define BACKEND_NAME genesys_low -#endif - -#include "../include/sane/sanei_backend.h" -#include "../include/sane/sanei_config.h" -#include "../include/sane/sanei_usb.h" -#include "../include/_stdint.h" #include "genesys_low.h" /* ------------------------------------------------------------------------ */ @@ -250,11 +231,11 @@ sanei_genesys_read_hregister (Genesys_Device * dev, uint8_t reg, uint8_t * val) { SANE_Status status; - uint16_t value; + SANE_Byte value[2]; status = sanei_usb_control_msg (dev->dn, REQUEST_TYPE_IN, REQUEST_BUFFER, - 0x100 | VALUE_GET_REGISTER, 0x22+(reg<<8), 2, (SANE_Byte *)&value); + 0x100 | VALUE_GET_REGISTER, 0x22+(reg<<8), 2, value); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -262,11 +243,11 @@ reg, sane_strstatus (status)); return status; } - *val=value & 0xff; - DBG( DBG_io2, "sanei_genesys_read_hregister(0x%02x)=0x%02x\n",reg,value & 0xff); + *val=value[0]; + DBG( DBG_io2, "sanei_genesys_read_hregister(0x%02x)=0x%02x\n",reg,*val); /* check usb link status */ - if((value & 0xff00) != 0x5500) + if((value[1] & 0xff) != 0x55) { DBG (DBG_error,"sanei_genesys_read_hregister: invalid read, scanner unplugged ?\n"); status=SANE_STATUS_IO_ERROR; @@ -372,11 +353,11 @@ sanei_genesys_read_gl847_register (Genesys_Device * dev, uint8_t reg, uint8_t * val) { SANE_Status status; - uint16_t value; + SANE_Byte value[2]; status = sanei_usb_control_msg (dev->dn, REQUEST_TYPE_IN, REQUEST_BUFFER, - VALUE_GET_REGISTER, 0x22+(reg<<8), 2, (SANE_Byte *)&value); + VALUE_GET_REGISTER, 0x22+(reg<<8), 2, value); if (status != SANE_STATUS_GOOD) { DBG (DBG_error, @@ -384,11 +365,11 @@ reg, sane_strstatus (status)); return status; } - *val=value & 0xff; - DBG( DBG_io2, "sanei_genesys_read_gl847_register(0x%02x)=0x%02x\n",reg,value & 0xff); + *val=value[0]; + DBG( DBG_io2, "sanei_genesys_read_gl847_register(0x%02x)=0x%02x\n",reg,*val); /* check usb link status */ - if((value & 0xff00) != 0x5500) + if((value[1] & 0xff) != 0x55) { DBG (DBG_error,"sanei_genesys_read_gl847_register: invalid read, scanner unplugged ?\n"); status=SANE_STATUS_IO_ERROR; @@ -940,7 +921,7 @@ time_count++; } } - while ((time_count < 2500) && (words == 0)); + while ((time_count < 2500*2) && (words == 0)); if (words == 0) /* timeout, buffer does not get filled */ { @@ -1009,7 +990,7 @@ sanei_genesys_write_ahb (SANE_Int dn, uint32_t addr, uint32_t size, uint8_t * data) { uint8_t outdata[8]; - size_t written; + size_t written,blksize; SANE_Status status = SANE_STATUS_GOOD; int i; char msg[60]="AHB="; @@ -1045,14 +1026,28 @@ } /* write actual data */ - written = size; - status = sanei_usb_write_bulk (dn, data, &written); - if (status != SANE_STATUS_GOOD) + written = 0; + do { - DBG (DBG_error, "sanei_genesys_write_ahb: failed while writing bulk data: %s\n", - sane_strstatus (status)); - return status; + if (size - written > BULKOUT_MAXSIZE) + { + blksize = BULKOUT_MAXSIZE; + } + else + { + blksize = size - written; + } + status = sanei_usb_write_bulk (dn, data + written, &blksize); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, + "sanei_genesys_write_ahb: failed while writing bulk data: %s\n", + sane_strstatus (status)); + return status; + } + written += blksize; } + while (written < size); return status; } @@ -1069,7 +1064,7 @@ DBGSTART; - /* clearthe parking status whatever the outcome of the function */ + /* clear the parking status whatever the outcome of the function */ dev->parking=SANE_FALSE; /* read initial status, if head isn't at home and motor is on @@ -1108,6 +1103,10 @@ sane_strstatus (status)); return status; } + if (DBG_LEVEL >= DBG_io2) + { + sanei_genesys_print_status (val); + } ++loop; } while (loop < 300 && !(val & HOMESNR) && status == SANE_STATUS_GOOD); @@ -1116,4 +1115,366 @@ return status; } +/**@brief compute hardware sensor dpi to use + * compute the sensor hardware dpi based on target resolution. + * A lower dpihw enable faster scans. + * @param dev device used for the scan + * @param xres x resolution of the scan + * @return the hardware dpi to use + */ +int sanei_genesys_compute_dpihw(Genesys_Device *dev, int xres) +{ + /* can't be below 600 dpi */ + if (xres <= 600) + { + return 600; + } + if (xres <= dev->sensor.optical_res / 4) + { + return dev->sensor.optical_res / 4; + } + if (xres <= dev->sensor.optical_res / 2) + { + return dev->sensor.optical_res / 2; + } + return dev->sensor.optical_res; +} + +/** @get motor profile + * search for the database of motor profiles and get the best one. Each + * profile is at full step and at a reference exposure. Use first entry + * by default. + * @param motors motor profile database + * @param motor_type motor id + * @param exposure exposure time + * @return a pointer to a Motor_Profile struct + */ +Motor_Profile *sanei_genesys_get_motor_profile(Motor_Profile *motors, int motor_type, int exposure) +{ + unsigned int i; + int idx; + + i=0; + idx=-1; + while(motors[i].exposure!=0) + { + /* exact match */ + if(motors[i].motor_type==motor_type && motors[i].exposure==exposure) + { + return &(motors[i]); + } + + /* closest match */ + if(motors[i].motor_type==motor_type) + { + /* if profile exposure is higher than the required one, + * the entry is a candidate for the closest match */ + if(motors[i].exposure>=exposure) + { + if(idx<0) + { + /* no match found yet */ + idx=i; + } + else + { + /* test for better match */ + if(motors[i].exposurestep_type; +} + +/** @brief generate slope table + * Generate the slope table to use for the scan using a reference slope + * table. + * @param slope pointer to the slope table to fill + * @param steps pointer to return used step number + * @param dpi desired motor resolution + * @param exposure exposure used + * @param base_dpi base resolution of the motor + * @param step_type step type used for scan + * @param factor shrink factor for the slope + * @param motor_type motor id + * @param motors motor profile database + */ +int sanei_genesys_slope_table(uint16_t *slope, + int *steps, + int dpi, + int exposure, + int base_dpi, + int step_type, + int factor, + int motor_type, + Motor_Profile *motors) +{ +int sum, i; +uint16_t target,current; +Motor_Profile *profile; + + /* required speed */ + target=((exposure * dpi) / base_dpi)>>step_type; + DBG (DBG_io2, "%s: target=%d\n", __FUNCTION__, target); + + /* fill result with target speed */ + for(i=0;itable[0]; + + /* loop on profile copying and apply step type */ + while(profile->table[i]!=0 && current>=target) + { + slope[i]=current; + sum+=slope[i]; + i++; + current=profile->table[i]>>step_type; + } + + /* range checking */ + if(profile->table[i]==0 && DBG_LEVEL >= DBG_warn && current>target) + { + DBG (DBG_warn,"%s: short slope table, failed to reach %d. target too low ?\n",__FUNCTION__,target); + } + if(i<3 && DBG_LEVEL >= DBG_warn) + { + DBG (DBG_warn,"%s: short slope table, failed to reach %d. target too high ?\n",__FUNCTION__,target); + } + + /* align on factor */ + while(i%factor!=0) + { + slope[i+1]=slope[i]; + sum+=slope[i]; + i++; + } + + /* ensure minimal slope size */ + while(i<2*factor) + { + slope[i+1]=slope[i]; + sum+=slope[i]; + i++; + } + + /* return used steps and acceleration sum */ + *steps=i/factor; + return sum; +} + +/** @brief returns the lowest possible ydpi for the device + * Parses device entry to find lowest motor dpi. + * @param dev device description + * @return lowest motor resolution + */ +int sanei_genesys_get_lowest_ydpi(Genesys_Device *dev) +{ + int min=20000; + int i=0; + + while(dev->model->ydpi_values[i]!=0) + { + if(dev->model->ydpi_values[i]model->ydpi_values[i]; + } + i++; + } + return min; +} + +/** @brief returns the lowest possible dpi for the device + * Parses device entry to find lowest motor or sensor dpi. + * @param dev device description + * @return lowest motor resolution + */ +int sanei_genesys_get_lowest_dpi(Genesys_Device *dev) +{ + int min=20000; + int i=0; + + while(dev->model->ydpi_values[i]!=0) + { + if(dev->model->ydpi_values[i]model->ydpi_values[i]; + } + i++; + } + i=0; + while(dev->model->xdpi_values[i]!=0) + { + if(dev->model->xdpi_values[i]model->xdpi_values[i]; + } + i++; + } + return min; +} + +/** @brief check is a cache entry may be used + * Compares current settings with the cache entry and return + * SANE_TRUE if they are compatible. + */ +SANE_Status +sanei_genesys_is_compatible_calibration (Genesys_Device * dev, + Genesys_Calibration_Cache * cache, + int for_overwrite) +{ +#ifdef HAVE_SYS_TIME_H + struct timeval time; +#endif + int compatible = 1, resolution; + SANE_Status status; + + DBGSTART; + + if(dev->model->cmd_set->calculate_current_setup==NULL) + { + DBG (DBG_proc, + "sanei_genesys_is_compatible_calibration: no calculate_setup, non compatible cache\n"); + return SANE_STATUS_UNSUPPORTED; + } + + status = dev->model->cmd_set->calculate_current_setup (dev); + if (status != SANE_STATUS_GOOD) + { + DBG (DBG_error, + "sanei_genesys_is_compatible_calibration: failed to calculate current setup: %s\n", + sane_strstatus (status)); + return status; + } + dev->current_setup.scan_method = dev->settings.scan_method; + + DBG (DBG_proc, "sanei_genesys_is_compatible_calibration: checking\n"); + + /* a calibration cache is compatible if color mode and x dpi match the user + * requested scan. In the case of CIS scanners, dpi isn't a criteria */ + if (dev->model->is_cis == SANE_FALSE) + { + resolution = dev->settings.xres; + if(resolution>dev->sensor.optical_res) + { + resolution=dev->sensor.optical_res; + } + compatible = (resolution == ((int) cache->used_setup.xres)); + } + else + { + resolution=sanei_genesys_compute_dpihw(dev,dev->settings.xres); + compatible = (resolution == ((int) sanei_genesys_compute_dpihw(dev,cache->used_setup.xres))); + } + if (dev->current_setup.scan_method != cache->used_setup.scan_method) + { + DBG (DBG_io, + "sanei_genesys_is_compatible_calibration: current method=%d, used=%d\n", + dev->current_setup.scan_method, cache->used_setup.scan_method); + compatible = 0; + } + if (!compatible) + { + DBG (DBG_proc, + "sanei_genesys_is_compatible_calibration: completed, non compatible cache\n"); + return SANE_STATUS_UNSUPPORTED; + } + + /* a cache entry expires after 60 minutes for non sheetfed scanners */ + /* this is not taken into account when overwriting cache entries */ +#ifdef HAVE_SYS_TIME_H + if(for_overwrite == SANE_FALSE) + { + gettimeofday (&time, NULL); + if ((time.tv_sec - cache->last_calibration > 60 * 60) + && (dev->model->is_sheetfed == SANE_FALSE) + && (dev->settings.scan_method == SCAN_METHOD_FLATBED)) + { + DBG (DBG_proc, + "sanei_genesys_is_compatible_calibration: expired entry, non compatible cache\n"); + return SANE_STATUS_UNSUPPORTED; + } + } +#endif + + DBGCOMPLETED; + return SANE_STATUS_GOOD; +} + + +/** @brief compute maximum line distance shift + * compute maximum line distance shift for the motor and sensor + * combination. Line distance shift is the distance between different + * color component of CCD sensors. Since these components aren't at + * the same physical place, they scan diffrent lines. Software must + * take this into account to accurately mix color data. + * @param dev device session to compute max_shift for + * @param channels number of color channels for the scan + * @param yres motor resolution used for the scan + * @param flags scan flags + * @return 0 or line distance shift + */ +int sanei_genesys_compute_max_shift(Genesys_Device *dev, + int channels, + int yres, + int flags) +{ + int max_shift; + + max_shift=0; + if (channels > 1 && !(flags & SCAN_FLAG_IGNORE_LINE_DISTANCE)) + { + max_shift = dev->ld_shift_r; + if (dev->ld_shift_b > max_shift) + max_shift = dev->ld_shift_b; + if (dev->ld_shift_g > max_shift) + max_shift = dev->ld_shift_g; + max_shift = (max_shift * yres) / dev->motor.base_ydpi; + } + return max_shift; +} + + + /* vim: set sw=2 cino=>2se-1sn-1s{s^-1st0(0u0 smarttab expandtab: */ diff -Nru sane-backends-1.0.22/backend/genesys_low.h sane-backends-1.0.23/backend/genesys_low.h --- sane-backends-1.0.22/backend/genesys_low.h 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/backend/genesys_low.h 2012-08-10 00:33:29.000000000 +0000 @@ -3,7 +3,7 @@ Copyright (C) 2003 Oliver Rauch Copyright (C) 2003, 2004 Henning Meier-Geinitz Copyright (C) 2004, 2005 Gerhard Jaeger - Copyright (C) 2004-2010 Stphane Voltz + Copyright (C) 2004-2012 Stphane Voltz Copyright (C) 2005-2009 Pierre Willenbrock Copyright (C) 2006 Laurent Charpentier Parts of the structs have been taken from the gt68xx backend by @@ -51,11 +51,35 @@ #ifndef GENESYS_LOW_H #define GENESYS_LOW_H + +#include "../include/sane/config.h" + +#include +#include +#include +#include +#include +#include #include #ifdef HAVE_SYS_TIME_H #include #endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_MKDIR +#include +#include +#endif + #include "../include/sane/sane.h" +#include "../include/sane/sanei.h" +#include "../include/sane/saneopts.h" + +#include "../include/sane/sanei_backend.h" +#include "../include/sane/sanei_usb.h" + +#include "../include/_stdint.h" #define DBG_error0 0 /* errors/warnings printed even with devuglevel 0 */ #define DBG_error 1 /* fatal errors */ @@ -81,7 +105,11 @@ #define GENESYS_FLAG_LAZY_INIT (1 << 2) /**> skip extensive ASIC test at init */ #define GENESYS_FLAG_XPA (1 << 3) #define GENESYS_FLAG_SKIP_WARMUP (1 << 4) /**> skip genesys_warmup() */ -#define GENESYS_FLAG_OFFSET_CALIBRATION (1 << 5) /**> do offset calibration */ +/** @brief offset calibration flag + * signals that the scanner does offset calibration. In this case off_calibration() and + * coarse_gain_calibration() functions must be implemented + */ +#define GENESYS_FLAG_OFFSET_CALIBRATION (1 << 5) #define GENESYS_FLAG_SEARCH_START (1 << 6) /**> do start search before scanning */ #define GENESYS_FLAG_REPARK (1 << 7) /**> repark head (and check for lock) by moving without scanning */ @@ -91,13 +119,15 @@ #define GENESYS_FLAG_MUST_WAIT (1 << 10) /**> tells wether the scanner must wait for the head when parking */ -#define GENESYS_FLAG_ALT_SLOPE_CREATE (1 << 11) /**> use alternative slope creation function */ +#define GENESYS_FLAG_HAS_UTA (1 << 11) /**> scanner has a transparency adapter */ #define GENESYS_FLAG_DARK_WHITE_CALIBRATION (1 << 12) /**> yet another calibration method. does white and dark shading in one run, depending on a black and a white strip*/ #define GENESYS_FLAG_CUSTOM_GAMMA (1 << 13) /**> allow custom gamma tables */ #define GENESYS_FLAG_NO_CALIBRATION (1 << 14) /**> allow scanners to use skip the calibration, needed for sheetfed scanners */ #define GENESYS_FLAG_HALF_CCD_MODE (1 << 15) /**> scanner has setting for half ccd mode */ -#define GENESYS_FLAG_ODD_EVEN_CIS (1 << 16) /**> scan odd and even pixels come in separated lines */ +#define GENESYS_FLAG_SIS_SENSOR (1 << 16) /**> handling of multi-segments sensors in software */ +#define GENESYS_FLAG_SHADING_NO_MOVE (1 << 17) /**> scanner doesn't move sensor during shading calibration */ +#define GENESYS_FLAG_SHADING_REPARK (1 << 18) /**> repark head between shading scans */ #define GENESYS_HAS_NO_BUTTONS 0 /**> scanner has no supported button */ #define GENESYS_HAS_SCAN_SW (1 << 0) /**> scanner has SCAN button */ @@ -269,6 +299,7 @@ #define DAC_G4050 13 #define DAC_CANONLIDE110 14 #define DAC_PLUSTEK_3600 15 +#define DAC_CANONLIDE700 16 #define CCD_UMAX 0 #define CCD_ST12 1 /* SONY ILX548: 5340 Pixel ??? */ @@ -291,6 +322,8 @@ #define CCD_G4050 18 #define CIS_CANONLIDE110 19 #define CCD_PLUSTEK_3600 20 +#define CCD_HP_N6310 21 +#define CIS_CANONLIDE700 22 #define GPO_UMAX 0 #define GPO_ST12 1 @@ -309,6 +342,9 @@ #define GPO_G4050 14 #define GPO_CANONLIDE110 15 #define GPO_PLUSTEK_3600 16 +#define GPO_CANONLIDE210 17 +#define GPO_HP_N6310 18 +#define GPO_CANONLIDE700 19 #define MOTOR_UMAX 0 #define MOTOR_5345 1 @@ -328,6 +364,7 @@ #define MOTOR_G4050 16 #define MOTOR_CANONLIDE110 17 #define MOTOR_PLUSTEK_3600 18 +#define MOTOR_CANONLIDE700 19 /* Forward typedefs */ @@ -453,8 +490,17 @@ */ SANE_Status (*send_shading_data) (Genesys_Device * dev, uint8_t * data, int size); + /** + * calculate current scan setup + */ + SANE_Status (*calculate_current_setup) (Genesys_Device * dev); + } Genesys_Command_Set; +/** @brief structure to describe a scanner model + * This structure describes a model. It is composed of information on the + * sensor, the motor, scanner geometry and flags to drive operation. + */ typedef struct Genesys_Model { SANE_String_Const name; @@ -601,9 +647,16 @@ struct Genesys_Calibration_Cache *next; }; +/** + * Describes the current device status for the backend + * session. This should be more accurately called + * Genesys_Session . + */ struct Genesys_Device { SANE_Int dn; + SANE_Word vendorId; /**< USB vendor identifier */ + SANE_Word productId; /**< USB product identifier */ SANE_Bool usb_mode; SANE_String file_name; SANE_String calib_file; @@ -622,8 +675,10 @@ time_t init_date; size_t average_size; - size_t calib_pixels; + size_t calib_pixels; /**> number of pixels used during shading calibration */ + size_t calib_lines; /**> number of lines used during shading calibration */ size_t calib_channels; + size_t calib_resolution; uint8_t *white_average_data; uint8_t *dark_average_data; uint16_t dark[3]; @@ -641,12 +696,14 @@ Genesys_Buffer lines_buffer; Genesys_Buffer shrink_buffer; Genesys_Buffer out_buffer; + Genesys_Buffer binarize_buffer; /**> buffer for digital lineart from gray data */ + Genesys_Buffer local_buffer; /**> local buffer for gray data during dynamix lineart */ - size_t read_bytes_left; /* bytes to read from scanner */ + size_t read_bytes_left; /**> bytes to read from scanner */ - size_t total_bytes_read; /* total bytes read sent to frontend */ - size_t total_bytes_to_read; /* total bytes read to be sent to frontend */ - size_t wpl; /* asic's word per line */ + size_t total_bytes_read; /**> total bytes read sent to frontend */ + size_t total_bytes_to_read; /**> total bytes read to be sent to frontend */ + size_t wpl; /**> asic's word per line */ Genesys_Current_Setup current_setup; /* contains the real used values */ @@ -657,19 +714,25 @@ struct Genesys_Device *next; + SANE_Int ld_shift_r; /**> used red line-distance shift*/ + SANE_Int ld_shift_g; /**> used green line-distance shift*/ + SANE_Int ld_shift_b; /**> used blue line-distance shift*/ int segnb; /**> number of segments composing the sensor */ int line_interp; /**> number of lines used in line interpolation */ int line_count; /**> number of scan lines used during scan */ size_t bpl; /**> bytes per full scan widthline */ - size_t skip; /**> bytes to skip from start of line to get first required pixel */ size_t dist; /**> bytes distance between an odd and an even pixel */ size_t len; /**> number of even pixels */ size_t cur; /**> current pixel position within sub window */ + size_t skip; /**> number of bytes to skip at start of line */ + size_t *order; /**> array describing the order of the sub-segments of the sensor */ Genesys_Buffer oe_buffer; /**> buffer to handle even/odd data */ SANE_Bool buffer_image; /**> when true the scanned picture is first buffered * to allow software image enhancements */ SANE_Byte *img_buffer; /**> image buffer where the scanned picture is stored */ + + FILE *binary; /**> binary logger file */ }; typedef struct Genesys_USB_Device_Entry @@ -679,6 +742,54 @@ Genesys_Model *model; /**< Scanner model information */ } Genesys_USB_Device_Entry; +/** + * structure for motor database + */ +typedef struct { + int motor_type; /**> motor id */ + int exposure; /**> exposure for the slope table */ + int step_type; /**> default step type for given exposure */ + uint32_t *table; /**> 0 terminated slope table at full step */ +} Motor_Profile; + +#define FULL_STEP 0 +#define HALF_STEP 1 +#define QUARTER_STEP 2 +#define EIGHTH_STEP 3 + +#define SLOPE_TABLE_SIZE 1024 + +#define SCAN_TABLE 0 /* table 1 at 0x4000 for gl124 */ +#define BACKTRACK_TABLE 1 /* table 2 at 0x4800 for gl124 */ +#define STOP_TABLE 2 /* table 3 at 0x5000 for gl124 */ +#define FAST_TABLE 3 /* table 4 at 0x5800 for gl124 */ +#define HOME_TABLE 4 /* table 5 at 0x6000 for gl124 */ + +#define SCAN_FLAG_SINGLE_LINE 0x001 +#define SCAN_FLAG_DISABLE_SHADING 0x002 +#define SCAN_FLAG_DISABLE_GAMMA 0x004 +#define SCAN_FLAG_DISABLE_BUFFER_FULL_MOVE 0x008 +#define SCAN_FLAG_IGNORE_LINE_DISTANCE 0x010 +#define SCAN_FLAG_USE_OPTICAL_RES 0x020 +#define SCAN_FLAG_DISABLE_LAMP 0x040 +#define SCAN_FLAG_DYNAMIC_LINEART 0x080 +#define SCAN_FLAG_CALIBRATION 0x100 +#define SCAN_FLAG_FEEDING 0x200 +#define SCAN_FLAG_USE_XPA 0x400 + +#define MOTOR_FLAG_AUTO_GO_HOME 0x01 +#define MOTOR_FLAG_DISABLE_BUFFER_FULL_MOVE 0x02 +#define MOTOR_FLAG_FEED 0x04 +#define MOTOR_FLAG_USE_XPA 0x08 + +#define OPTICAL_FLAG_DISABLE_GAMMA 0x01 +#define OPTICAL_FLAG_DISABLE_SHADING 0x02 +#define OPTICAL_FLAG_DISABLE_LAMP 0x04 +#define OPTICAL_FLAG_ENABLE_LEDADD 0x08 +#define OPTICAL_FLAG_DISABLE_DOUBLE 0x10 +#define OPTICAL_FLAG_STAGGER 0x20 +#define OPTICAL_FLAG_USE_XPA 0x40 + /*--------------------------------------------------------------------------*/ /* common functions needed by low level specific functions */ /*--------------------------------------------------------------------------*/ @@ -855,6 +966,65 @@ extern SANE_Status sanei_genesys_wait_for_home(Genesys_Device *dev); +extern +int sanei_genesys_compute_dpihw(Genesys_Device *dev, int xres); + +extern +Motor_Profile *sanei_genesys_get_motor_profile(Motor_Profile *motors, int motor_type, int exposure); + +extern +int sanei_genesys_compute_step_type(Motor_Profile *motors, int motor_type, int exposure); + +extern +int sanei_genesys_slope_table(uint16_t *slope, int *steps, int dpi, int exposure, int base_dpi, int step_type, int factor, int motor_type, Motor_Profile *motors); + +/** @brief find lowest motor resolution for the device. + * Parses the resolution list for motor and + * returns the lowest value. + * @param device for which to find the lowest motor resolution + * @return the lowest available motor resolution for the device + */ +extern +int sanei_genesys_get_lowest_ydpi(Genesys_Device *dev); + +/** @brief find lowest resolution for the device. + * Parses the resolution list for motor and sensor and + * returns the lowest value. + * @param device for which to find the lowest resolution + * @return the lowest available resolution for the device + */ +extern +int sanei_genesys_get_lowest_dpi(Genesys_Device *dev); + +/** + * reads previously cached calibration data + * from file + */ +extern SANE_Status +sanei_genesys_read_calibration (Genesys_Device * dev); + +extern SANE_Status +sanei_genesys_is_compatible_calibration (Genesys_Device * dev, + Genesys_Calibration_Cache * cache, + int for_overwrite); + +/** @brief compute maximum line distance shift + * compute maximum line distance shift for the motor and sensor + * combination. Line distance shift is the distance between different + * color component of CCD sensors. Since these components aren't at + * the same physical place, they scan diffrent lines. Software must + * take this into account to accurately mix color data. + * @param dev device session to compute max_shift for + * @param channels number of color channels for the scan + * @param yres motor resolution used for the scan + * @param flags scan flags + * @return 0 or line distance shift + */ +int sanei_genesys_compute_max_shift(Genesys_Device *dev, + int channels, + int yres, + int flags); + /*---------------------------------------------------------------------------*/ /* ASIC specific functions declarations */ /*---------------------------------------------------------------------------*/ diff -Nru sane-backends-1.0.22/backend/gt68xx.c sane-backends-1.0.23/backend/gt68xx.c --- sane-backends-1.0.22/backend/gt68xx.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/gt68xx.c 2012-07-01 02:00:44.000000000 +0000 @@ -934,7 +934,7 @@ return SANE_STATUS_GOOD; } -#if defined(HAVE_OS2_H) +#if defined(_WIN32) || defined(HAVE_OS2_H) # define PATH_SEP "\\" #else # define PATH_SEP "/" diff -Nru sane-backends-1.0.22/backend/hp3500.c sane-backends-1.0.23/backend/hp3500.c --- sane-backends-1.0.22/backend/hp3500.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/hp3500.c 2011-06-27 17:41:11.000000000 +0000 @@ -143,6 +143,8 @@ OPT_BR_Y, OPT_MODE_GROUP, OPT_MODE, + OPT_BRIGHTNESS, + OPT_CONTRAST, NUM_OPTIONS }; @@ -184,6 +186,9 @@ int scan_width_pixels; int scan_height_pixels; + int brightness; + int contrast; + SANE_Option_Descriptor opt[NUM_OPTIONS]; SANE_Device sane; }; @@ -209,6 +214,11 @@ { 0, SANE_FIX (215.9), SANE_FIX (MM_PER_INCH / 1200) }; static const SANE_Range range_y = { 0, SANE_FIX (298.7), SANE_FIX (MM_PER_INCH / 1200) }; +static const SANE_Range range_brightness = + { 0, 255, 0 }; +static const SANE_Range range_contrast = + { 0, 255, 0 }; + #define HP3500_COLOR_SCAN 0 #define HP3500_GRAY_SCAN 1 @@ -370,6 +380,8 @@ scanner->request_mm.right = SCANNER_UNIT_TO_FIXED_MM (10200); scanner->request_mm.bottom = SCANNER_UNIT_TO_FIXED_MM (14100); scanner->mode = 0; + scanner->brightness = 128; + scanner->contrast = 64; calculateDerivedValues (scanner); return SANE_STATUS_GOOD; @@ -519,6 +531,14 @@ case OPT_MODE: strcpy ((SANE_Char *) val, scan_mode_list[scanner->mode]); return SANE_STATUS_GOOD; + + case OPT_CONTRAST: + *(SANE_Word *) val = scanner->contrast; + return SANE_STATUS_GOOD; + + case OPT_BRIGHTNESS: + *(SANE_Word *) val = scanner->brightness; + return SANE_STATUS_GOOD; } } else if (action == SANE_ACTION_SET_VALUE) @@ -621,6 +641,14 @@ } /* Impossible */ return SANE_STATUS_INVAL; + + case OPT_BRIGHTNESS: + scanner->brightness = *(SANE_Word *) val; + return SANE_STATUS_GOOD; + + case OPT_CONTRAST: + scanner->contrast = *(SANE_Word *) val; + return SANE_STATUS_GOOD; } /* switch */ } /* else */ return SANE_STATUS_INVAL; @@ -1020,12 +1048,9 @@ if (!scan_mode_list[0]) { scan_mode_list[HP3500_COLOR_SCAN] = SANE_VALUE_SCAN_MODE_COLOR; - scan_mode_list[1] = 0; -#if 0 scan_mode_list[HP3500_GRAY_SCAN] = SANE_VALUE_SCAN_MODE_GRAY; scan_mode_list[HP3500_LINEART_SCAN] = SANE_VALUE_SCAN_MODE_LINEART; scan_mode_list[HP3500_TOTAL_SCANS] = 0; -#endif } opt = scanner->opt + OPT_MODE_GROUP; @@ -1043,6 +1068,24 @@ opt->constraint.string_list = scan_mode_list; opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; + opt = scanner->opt + OPT_BRIGHTNESS; + opt->name = SANE_NAME_BRIGHTNESS; + opt->title = SANE_TITLE_BRIGHTNESS; + opt->desc = SANE_DESC_BRIGHTNESS; + opt->type = SANE_TYPE_INT; + opt->constraint_type = SANE_CONSTRAINT_RANGE; + opt->constraint.range = &range_brightness; + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; + + opt = scanner->opt + OPT_CONTRAST; + opt->name = SANE_NAME_CONTRAST; + opt->title = SANE_TITLE_CONTRAST; + opt->desc = SANE_DESC_CONTRAST; + opt->type = SANE_TYPE_INT; + opt->constraint_type = SANE_CONSTRAINT_RANGE; + opt->constraint.range = &range_contrast; + opt->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; + return SANE_STATUS_GOOD; } @@ -2570,22 +2613,22 @@ detailed_calibration_data const *detailed_calib_data) { unsigned rowbytes = 0; + unsigned output_rowbytes = 0; unsigned channels = 0; unsigned total_rows = 0; unsigned bytesperchannel; - char *row_buffer; - char *output_buffer; + unsigned char *row_buffer; + unsigned char *output_buffer; unsigned buffered_rows; int rows_to_begin; int rowbuffer_bytes; int n; unsigned rownow = 0; unsigned bytenow = 0; - char *channel_data[3][2]; + unsigned char *channel_data[3][2]; unsigned i; unsigned j; int result = 0; - int calib_channel_start = 0; unsigned rows_supplied = 0; calib_info = calib_info; /* Kill warning */ @@ -2593,25 +2636,21 @@ return -1; rt_start_moving (); + channels = 3; + rowbytes = width * 3; + bytesperchannel = width; switch (colour) { case HP3500_GRAY_SCAN: - channels = 1; - rowbytes = width; - bytesperchannel = rowbytes; - calib_channel_start = 1; + output_rowbytes = width; break; case HP3500_COLOR_SCAN: - channels = 3; - rowbytes = width * 3; - bytesperchannel = width; + output_rowbytes = rowbytes; break; case HP3500_LINEART_SCAN: - channels = 1; - rowbytes = (width + 7) / 8; - bytesperchannel = rowbytes; + output_rowbytes = (width + 7) / 8; break; } @@ -2619,8 +2658,8 @@ red_green_offset + green_blue_offset + intra_channel_offset + 1; rows_to_begin = buffered_rows; rowbuffer_bytes = buffered_rows * rowbytes; - row_buffer = (char *) malloc (rowbuffer_bytes); - output_buffer = (char *) malloc (rowbytes); + row_buffer = (unsigned char *) malloc (rowbuffer_bytes); + output_buffer = (unsigned char *) malloc (rowbytes); for (i = j = 0; i < channels; ++i) { @@ -2643,7 +2682,7 @@ n = 0; if (n > 0) { - char buffer[0xffc0]; + unsigned char buffer[0xffc0]; if (n > 0xffc0) n = 0xffc0; @@ -2651,7 +2690,7 @@ --n; if (rt_get_data (n, buffer) >= 0) { - char *bufnow = buffer; + unsigned char *bufnow = buffer; while (n) { @@ -2660,32 +2699,17 @@ if (numcopy > n) numcopy = n; - if (colour == HP3500_LINEART_SCAN) - { - while (numcopy--) - { - /* For line art we need to invert all the bits to - * get the right answer for SANE - */ - row_buffer[rownow * rowbytes + bytenow++] = - ~*bufnow++; - --n; - } - } - else - { - memcpy (row_buffer + rownow * rowbytes + bytenow, - bufnow, numcopy); - bytenow += numcopy; - bufnow += numcopy; - n -= numcopy; - } + memcpy (row_buffer + rownow * rowbytes + bytenow, + bufnow, numcopy); + bytenow += numcopy; + bufnow += numcopy; + n -= numcopy; if (bytenow == rowbytes) { if (!rows_to_begin || !--rows_to_begin) { - char *outnow = output_buffer; + unsigned char *outnow = output_buffer; for (i = 0; i < (merged_channels ? rowbytes : width); @@ -2716,9 +2740,42 @@ } } - if (rows_supplied++ < height - && - !((*cbfunc) (params, rowbytes, output_buffer))) + if (colour == HP3500_GRAY_SCAN || colour == HP3500_LINEART_SCAN) + { + unsigned char const *in_now = output_buffer; + int bit = 7; + + outnow = output_buffer; + for (i = 0; i < width; ++i) + { + + if (colour == HP3500_GRAY_SCAN) + { + *outnow++ = ((unsigned) in_now[0] * 2989 + + (unsigned) in_now[1] * 5870 + + (unsigned) in_now[2] * 1140) / 10000; + } + else + { + if (bit == 7) + *outnow = ((in_now[1] < 0x80) ? 0x80 : 0); + else if (in_now[1] < 0x80) + *outnow |= (1 << bit); + if (bit == 0) + { + ++outnow; + bit = 7; + } + else + { + --bit; + } + } + in_now += 3; + } + } + if (rows_supplied++ < height && + !((*cbfunc) (params, output_rowbytes, output_buffer))) break; for (i = 0; i < channels; ++i) @@ -2860,7 +2917,7 @@ if (red_calib_offset >= 0 && green_calib_offset >= 0 && blue_calib_offset >= 0 && - (yresolution < 400 || colour != HP3500_COLOR_SCAN)) + yresolution < 400) { rt_set_calibration_addresses (regs, red_calib_offset, green_calib_offset, blue_calib_offset, @@ -2875,13 +2932,10 @@ regs[0x40] &= 0xc0; } - rt_set_channel (regs, - (colour == - HP3500_COLOR_SCAN) ? RT_CHANNEL_ALL : RT_CHANNEL_GREEN); - rt_set_single_channel_scanning (regs, - (colour == HP3500_LINEART_SCAN) ? 1 : 0); - rt_set_merge_channels (regs, colour == HP3500_COLOR_SCAN); - rt_set_colour_mode (regs, colour == HP3500_COLOR_SCAN); + rt_set_channel (regs, RT_CHANNEL_ALL); + rt_set_single_channel_scanning (regs, 0); + rt_set_merge_channels (regs, 1); + rt_set_colour_mode (regs, 1); rt_set_motor_movement_clock_multiplier (regs, resparms[jres]. @@ -2899,8 +2953,6 @@ regs[0xc3] = (regs[0xc3] & 0xf8) | resparms[jres].reg_c3_value; regs[0xc6] = (regs[0xc6] & 0xf8) | resparms[jres].reg_c6_value; scan_frequency = resparms[jres].scan_frequency; -/* if (colour == HP3500_LINEART_SCAN) - scan_frequency *= 3;*/ rt_set_scan_frequency (regs, scan_frequency); rt_set_cph0s (regs, resparms[ires].cph0s); if (resparms[ires].d3_bit_3_value) @@ -2916,11 +2968,8 @@ rt_set_total_distance (regs, scan_frequency * (y + h + - ((colour == - HP3500_COLOR_SCAN) ? (resparms[jres]. - red_green_offset + - resparms[jres]. - green_blue_offset) : 0) + + resparms[jres].red_green_offset + + resparms[jres].green_blue_offset + resparms[jres].intra_channel_offset) - 1); rt_set_scanline_start (regs, @@ -3037,7 +3086,11 @@ unsigned w, unsigned h, unsigned resolution, - unsigned colour, rts8801_callback cbfunc, void *param) + unsigned colour, + unsigned brightness, + unsigned contrast, + rts8801_callback cbfunc, + void *param) { unsigned char calib_info[9]; unsigned char calibbuf[2400]; @@ -3218,29 +3271,26 @@ DBG (20, "Gain factors calculated\n"); - if (colour != HP3500_LINEART_SCAN) - { - /* Stage 2 calibration */ + /* Stage 2 calibration */ - DBG (10, "Calibrating (stage 2)\n"); + DBG (10, "Calibrating (stage 2)\n"); - detail_buffer = - (unsigned char *) malloc (w * 3 * detailed_calibration_rows); + detail_buffer = + (unsigned char *) malloc (w * 3 * detailed_calibration_rows); - dcd.buffers[0] = detail_buffer; - dcd.buffers[1] = (detail_buffer + w * detailed_calibration_rows); - dcd.buffers[2] = (dcd.buffers[1] + w * detailed_calibration_rows); - dcd.pixelsperrow = w; - dcd.pixelnow = dcd.channelnow = dcd.firstrowdone = 0; + dcd.buffers[0] = detail_buffer; + dcd.buffers[1] = (detail_buffer + w * detailed_calibration_rows); + dcd.buffers[2] = (dcd.buffers[1] + w * detailed_calibration_rows); + dcd.pixelsperrow = w; + dcd.pixelnow = dcd.channelnow = dcd.firstrowdone = 0; + + DBG (10, "Performing detailed calibration scan\n"); + rts8801_fullscan (x, iCalibY, w, detailed_calibration_rows + 1, + resolution, resolution, HP3500_COLOR_SCAN, + (rts8801_callback) accumfunc, &dcd, calib_info, + RTS8801_F_SUPPRESS_MOVEMENT, -1, -1, -1, -1, 0); - DBG (10, "Performing detailed calibration scan\n"); - rts8801_fullscan (x, iCalibY, w, detailed_calibration_rows + 1, - resolution, resolution, HP3500_COLOR_SCAN, - (rts8801_callback) accumfunc, &dcd, calib_info, - RTS8801_F_SUPPRESS_MOVEMENT, -1, -1, -1, -1, 0); - - DBG (10, "Detailed calibration scan completed\n"); - } + DBG (10, "Detailed calibration scan completed\n"); /* And now for the detailed calibration */ resolution_index = find_resolution_index (resolution); @@ -3296,9 +3346,10 @@ double denom1 = calcmedian (dcd.buffers[i], j, w, detailed_calibration_rows); double f = 0xff / (denom1 - 2 * g); + double contrast_adjust = (double) (contrast + 1) / 64; - multnow = f * 64; - offnow = 4 * g; + multnow = f * 64 * contrast_adjust; + offnow = 4 * g + 128 - brightness; } if (multnow < 0) multnow = 0; @@ -3313,7 +3364,7 @@ { /*multnow = j * resolution_divisor + k; */ pDetailedCalib[idx++] = offnow; /* Subtract this value from the result */ - pDetailedCalib[idx++] = multnow; /* The multiply by this value divided by 0x40 */ + pDetailedCalib[idx++] = multnow; /* Then multiply by this value divided by 0x40 */ } } } @@ -3446,8 +3497,8 @@ scanner->actres_pixels.top + 599 * scanner->resolution / 1200, scanner->actres_pixels.right - scanner->actres_pixels.left, scanner->actres_pixels.bottom - scanner->actres_pixels.top, - scanner->resolution, scanner->mode, (rts8801_callback) writefunc, - &winfo) >= 0) + scanner->resolution, scanner->mode, scanner->brightness, + scanner->contrast, (rts8801_callback) writefunc, &winfo) >= 0) status = SANE_STATUS_GOOD; status = SANE_STATUS_IO_ERROR; close (scanner->pipe_w); diff -Nru sane-backends-1.0.22/backend/hp3900_rts8822.c sane-backends-1.0.23/backend/hp3900_rts8822.c --- sane-backends-1.0.22/backend/hp3900_rts8822.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/hp3900_rts8822.c 2011-11-01 20:09:20.000000000 +0000 @@ -68,6 +68,7 @@ #include /* truncf() */ #include /* tolower() */ #include /* usleep() */ +#include #include "hp3900_types.c" #include "hp3900_debug.c" diff -Nru sane-backends-1.0.22/backend/hp5590.c sane-backends-1.0.23/backend/hp5590.c --- sane-backends-1.0.22/backend/hp5590.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/hp5590.c 2012-07-25 00:08:33.000000000 +0000 @@ -73,7 +73,7 @@ } /* #define HAS_WORKING_COLOR_48 */ -#define BUILD 5 +#define BUILD 7 #define USB_TIMEOUT 30 * 1000 static SANE_Word @@ -129,7 +129,7 @@ struct hp5590_scanner { struct scanner_info *info; - struct scanner_state *state; + enum proto_flags proto_flags; SANE_Device sane; SANE_Int dn; float br_x, br_y, tl_x, tl_y; @@ -222,38 +222,46 @@ attach_usb_device (SANE_String_Const devname, enum hp_scanner_types hp_scanner_type) { - struct scanner_info *info; - struct hp5590_scanner *scanner, *ptr; - unsigned int max_count, count; - SANE_Int dn; - SANE_Status ret; + struct scanner_info *info; + struct hp5590_scanner *scanner, *ptr; + unsigned int max_count, count; + SANE_Int dn; + SANE_Status ret; + const struct hp5590_model *hp5590_model; DBG (DBG_proc, "%s: Opening USB device\n", __FUNCTION__); if (sanei_usb_open (devname, &dn) != SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; DBG (DBG_proc, "%s: USB device opened\n", __FUNCTION__); - if (hp5590_init_scanner (dn, &info, hp_scanner_type) != 0) + ret = hp5590_model_def (hp_scanner_type, &hp5590_model); + if (ret != SANE_STATUS_GOOD) + return ret; + + if (hp5590_init_scanner (dn, hp5590_model->proto_flags, + &info, hp_scanner_type) != 0) return SANE_STATUS_IO_ERROR; DBG (1, "%s: found HP%s scanner at '%s'\n", __FUNCTION__, info->model, devname); DBG (DBG_verbose, "%s: Reading max scan count\n", __FUNCTION__); - if (hp5590_read_max_scan_count (dn, &max_count) != 0) + if (hp5590_read_max_scan_count (dn, hp5590_model->proto_flags, + &max_count) != 0) return SANE_STATUS_IO_ERROR; DBG (DBG_verbose, "%s: Max Scanning count %u\n", __FUNCTION__, max_count); DBG (DBG_verbose, "%s: Reading scan count\n", __FUNCTION__); - if (hp5590_read_scan_count (dn, &count) != 0) + if (hp5590_read_scan_count (dn, hp5590_model->proto_flags, + &count) != 0) return SANE_STATUS_IO_ERROR; DBG (DBG_verbose, "%s: Scanning count %u\n", __FUNCTION__, count); - ret = hp5590_read_part_number (dn); + ret = hp5590_read_part_number (dn, hp5590_model->proto_flags); if (ret != SANE_STATUS_GOOD) return ret; - ret = hp5590_stop_scan (dn); + ret = hp5590_stop_scan (dn, hp5590_model->proto_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -267,6 +275,7 @@ scanner->sane.type = info->kind; scanner->sane.name = devname; scanner->dn = dn; + scanner->proto_flags = hp5590_model->proto_flags; scanner->info = info; scanner->bulk_read_state = NULL; scanner->opts = NULL; @@ -840,20 +849,23 @@ scanner->br_x = scanner->info->max_size_x; scanner->br_y = scanner->info->max_size_y; } + /* In ADF modes the device can scan up to ADF_MAX_Y_INCHES, which is usually + * bigger than what scanner reports back during initialization + */ if (strcmp ((char *) value, (char *) SANE_VALUE_SCAN_SOURCE_ADF) == 0) { scanner->source = SOURCE_ADF; range_x.max = SANE_FIX(scanner->info->max_size_x * 25.4); - range_y.max = SANE_FIX(scanner->info->max_size_y * 25.4); + range_y.max = SANE_FIX(ADF_MAX_Y_INCHES * 25.4); scanner->br_x = scanner->info->max_size_x; - scanner->br_y = scanner->info->max_size_y; + scanner->br_y = ADF_MAX_Y_INCHES * 25.4; } if (strcmp ((char *) value, (char *) SANE_VALUE_SCAN_SOURCE_ADF_DUPLEX) == 0) { scanner->source = SOURCE_ADF_DUPLEX; range_x.max = SANE_FIX(scanner->info->max_size_x * 25.4); - range_y.max = SANE_FIX(scanner->info->max_size_y * 25.4 * 2); - scanner->br_y = scanner->info->max_size_y * 2; + range_y.max = SANE_FIX(ADF_MAX_Y_INCHES * 25.4 * 2); + scanner->br_y = ADF_MAX_Y_INCHES * 25.4 * 2; scanner->br_x = scanner->info->max_size_x; } if (strcmp ((char *) value, (char *) SANE_VALUE_SCAN_SOURCE_TMA_SLIDES) == 0) @@ -981,7 +993,7 @@ { DBG (DBG_verbose, "%s: Scanner is scanning, check if more data is available\n", __FUNCTION__); - ret = hp5590_is_data_available (scanner->dn); + ret = hp5590_is_data_available (scanner->dn, scanner->proto_flags); if (ret == SANE_STATUS_GOOD) { DBG (DBG_verbose, "%s: More data is available\n", __FUNCTION__); @@ -1000,7 +1012,9 @@ enum button_status status; for (;;) { - ret = hp5590_read_buttons (scanner->dn, &status); + ret = hp5590_read_buttons (scanner->dn, + scanner->proto_flags, + &status); if (ret != SANE_STATUS_GOOD) return ret; @@ -1014,31 +1028,35 @@ } DBG (DBG_verbose, "Init scanner\n"); - ret = hp5590_init_scanner (scanner->dn, NULL, SCANNER_NONE); + ret = hp5590_init_scanner (scanner->dn, scanner->proto_flags, + NULL, SCANNER_NONE); if (ret != SANE_STATUS_GOOD) return ret; - ret = hp5590_power_status (scanner->dn); + ret = hp5590_power_status (scanner->dn, scanner->proto_flags); if (ret != SANE_STATUS_GOOD) return ret; DBG (DBG_verbose, "Wakeup\n"); - ret = hp5590_select_source_and_wakeup (scanner->dn, scanner->source, - scanner->extend_lamp_timeout); + ret = hp5590_select_source_and_wakeup (scanner->dn, scanner->proto_flags, + scanner->source, + scanner->extend_lamp_timeout); if (ret != SANE_STATUS_GOOD) return ret; - ret = hp5590_set_scan_params (scanner->dn, scanner->info, - scanner->tl_x * scanner->dpi, - scanner->tl_y * scanner->dpi, - (scanner->br_x - scanner->tl_x) * scanner->dpi, - (scanner->br_y - scanner->tl_y) * scanner->dpi, - scanner->dpi, - scanner->depth, scanner->preview ? MODE_PREVIEW : MODE_NORMAL, - scanner->source); + ret = hp5590_set_scan_params (scanner->dn, + scanner->proto_flags, + scanner->info, + scanner->tl_x * scanner->dpi, + scanner->tl_y * scanner->dpi, + (scanner->br_x - scanner->tl_x) * scanner->dpi, + (scanner->br_y - scanner->tl_y) * scanner->dpi, + scanner->dpi, + scanner->depth, scanner->preview ? MODE_PREVIEW : MODE_NORMAL, + scanner->source); if (ret != SANE_STATUS_GOOD) { - hp5590_reset_scan_head (scanner->dn); + hp5590_reset_scan_head (scanner->dn, scanner->proto_flags); return ret; } @@ -1047,7 +1065,7 @@ &scanner->image_size); if (ret != SANE_STATUS_GOOD) { - hp5590_reset_scan_head (scanner->dn); + hp5590_reset_scan_head (scanner->dn, scanner->proto_flags); return ret; } @@ -1063,7 +1081,7 @@ DBG (DBG_err, "Color 24/48 bits: image size doesn't lined up on number of colors (3) " "(image size: %u, bytes per line %u)\n", scanner->image_size, bytes_per_line); - hp5590_reset_scan_head (scanner->dn); + hp5590_reset_scan_head (scanner->dn, scanner->proto_flags); return SANE_STATUS_INVAL; } DBG (1, "Color 24/48 bits: image size is correctly aligned on number of colors " @@ -1077,7 +1095,7 @@ DBG (DBG_err, "Color 24/48 bits: image size doesn't lined up on bytes per line " "(image size: %u, bytes per line %u)\n", scanner->image_size, bytes_per_line); - hp5590_reset_scan_head (scanner->dn); + hp5590_reset_scan_head (scanner->dn, scanner->proto_flags); return SANE_STATUS_INVAL; } DBG (1, "Color 24/48 bits: image size correctly aligned on bytes per line " @@ -1088,25 +1106,25 @@ DBG (DBG_verbose, "Final image size: %u\n", scanner->image_size); DBG (DBG_verbose, "Reverse calibration maps\n"); - ret = hp5590_send_reverse_calibration_map (scanner->dn); + ret = hp5590_send_reverse_calibration_map (scanner->dn, scanner->proto_flags); if (ret != SANE_STATUS_GOOD) { - hp5590_reset_scan_head (scanner->dn); + hp5590_reset_scan_head (scanner->dn, scanner->proto_flags); return ret; } DBG (DBG_verbose, "Forward calibration maps\n"); - ret = hp5590_send_forward_calibration_maps (scanner->dn); + ret = hp5590_send_forward_calibration_maps (scanner->dn, scanner->proto_flags); if (ret != SANE_STATUS_GOOD) { - hp5590_reset_scan_head (scanner->dn); + hp5590_reset_scan_head (scanner->dn, scanner->proto_flags); return ret; } scanner->scanning = SANE_TRUE; DBG (DBG_verbose, "Starting scan\n"); - ret = hp5590_start_scan (scanner->dn); + ret = hp5590_start_scan (scanner->dn, scanner->proto_flags); /* Check for paper jam */ if ( ret == SANE_STATUS_DEVICE_BUSY && ( scanner->source == SOURCE_ADF @@ -1115,7 +1133,7 @@ if (ret != SANE_STATUS_GOOD) { - hp5590_reset_scan_head (scanner->dn); + hp5590_reset_scan_head (scanner->dn, scanner->proto_flags); return ret; } @@ -1251,7 +1269,7 @@ *length = 0; DBG (DBG_verbose, "Setting scan count\n"); - ret = hp5590_inc_scan_count (scanner->dn); + ret = hp5590_inc_scan_count (scanner->dn, scanner->proto_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -1292,7 +1310,8 @@ max_length, *length); } - ret = hp5590_read (scanner->dn, data, *length, scanner->bulk_read_state); + ret = hp5590_read (scanner->dn, scanner->proto_flags, + data, *length, scanner->bulk_read_state); if (ret != SANE_STATUS_GOOD) { scanner->scanning = SANE_FALSE; @@ -1331,7 +1350,7 @@ hp5590_low_free_bulk_read_state (&scanner->bulk_read_state); - ret = hp5590_stop_scan (scanner->dn); + ret = hp5590_stop_scan (scanner->dn, scanner->proto_flags); if (ret != SANE_STATUS_GOOD) return; } diff -Nru sane-backends-1.0.22/backend/hp5590_cmds.c sane-backends-1.0.23/backend/hp5590_cmds.c --- sane-backends-1.0.22/backend/hp5590_cmds.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/hp5590_cmds.c 2011-06-27 17:41:10.000000000 +0000 @@ -59,37 +59,33 @@ #include "hp5590_low.h" #include "hp5590_cmds.h" -struct hp5590_model -{ - enum hp_scanner_types scanner_type; - unsigned int usb_vendor_id; - unsigned int usb_product_id; - const char *vendor_id; - const char *model; - const char *kind; -}; - static const struct hp5590_model hp5590_models[] = { { SCANNER_HP4570, 0x03f0, 0x1305, "SILITEKIElwood", - "4570C/5500C", "Workgroup scanner" + "4570C/5500C", "Workgroup scanner", + PF_NONE }, { SCANNER_HP5550, 0x03f0, 0x1205, "SILITEKIPenguin", - "4500C/5550C", "Workgroup scanner" + "4500C/5550C", "Workgroup scanner", + PF_NO_USB_IN_USB_ACK /* These devices need no + * acknowledgement after USB-in-USB + * commands */ }, { SCANNER_HP5590, 0x03f0, 0x1705, "SILITEKIPenguin", - "5590", "Workgroup scanner" + "5590", "Workgroup scanner", + PF_NONE }, { SCANNER_HP7650, 0x03f0, 0x1805, "SILITEKIArnold", - "7650", "Document scanner" + "7650", "Document scanner", + PF_NONE } }; @@ -428,31 +424,50 @@ /******************************************************************************/ static SANE_Status -hp5590_vendor_product_id (enum hp_scanner_types scanner_type, - SANE_Word * vendor_id, - SANE_Word * product_id) +hp5590_model_def (enum hp_scanner_types scanner_type, + const struct hp5590_model ** model) { unsigned int i; - - hp5590_cmds_assert (vendor_id != NULL); - hp5590_cmds_assert (product_id != NULL); + + hp5590_cmds_assert (model != NULL); for (i = 0; i < sizeof (hp5590_models) / sizeof (struct hp5590_model); i++) { if (hp5590_models[i].scanner_type == scanner_type) { - *vendor_id = hp5590_models[i].usb_vendor_id; - *product_id = hp5590_models[i].usb_product_id; + *model = &hp5590_models[i]; return SANE_STATUS_GOOD; } } - + return SANE_STATUS_INVAL; } /******************************************************************************/ static SANE_Status +hp5590_vendor_product_id (enum hp_scanner_types scanner_type, + SANE_Word * vendor_id, + SANE_Word * product_id) +{ + const struct hp5590_model *model; + SANE_Status ret; + + hp5590_cmds_assert (vendor_id != NULL); + hp5590_cmds_assert (product_id != NULL); + + ret = hp5590_model_def (scanner_type, &model); + if (ret != SANE_STATUS_GOOD) + return ret; + *vendor_id = model->usb_vendor_id; + *product_id = model->usb_product_id; + + return SANE_STATUS_GOOD; +} + +/******************************************************************************/ +static SANE_Status hp5590_init_scanner (SANE_Int dn, + enum proto_flags proto_flags, struct scanner_info ** info, enum hp_scanner_types scanner_type) { @@ -473,7 +488,9 @@ hp5590_cmds_assert (sizeof (init_resp) == 50); /* Init scanner */ - ret = hp5590_cmd (dn, CMD_IN | CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_IN | CMD_VERIFY, CMD_INIT, (unsigned char *) &init_resp, sizeof (init_resp), CORE_NONE); @@ -572,7 +589,7 @@ } } - ret = hp5590_get_status (dn); + ret = hp5590_get_status (dn, proto_flags); if (ret != SANE_STATUS_GOOD) { DBG (DBG_err, "%s: scanner reports non-zero status: %s\n", @@ -587,6 +604,7 @@ /******************************************************************************/ static SANE_Status hp5590_read_eeprom (SANE_Int dn, + enum proto_flags proto_flags, unsigned int addr, unsigned char *data, unsigned int size) { @@ -599,7 +617,9 @@ DBG (DBG_proc, "%s\n", __FUNCTION__); DBG (DBG_proc, "Reading EEPROM: addr %04x, size %u\n", addr, size); - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_EEPROM_ADDR, (unsigned char *) &eeprom_addr, sizeof (eeprom_addr), CORE_NONE); @@ -607,6 +627,7 @@ return ret; ret = hp5590_cmd (dn, + proto_flags, CMD_IN | CMD_VERIFY, CMD_EEPROM_READ, data, size, CORE_NONE); if (ret != SANE_STATUS_GOOD) @@ -618,6 +639,7 @@ /******************************************************************************/ static SANE_Status hp5590_write_eeprom (SANE_Int dn, + enum proto_flags proto_flags, unsigned int addr, unsigned char *data, unsigned int size) { @@ -630,7 +652,9 @@ DBG (DBG_proc, "%s\n", __FUNCTION__); DBG (DBG_proc, "Writing EEPROM: addr %04x, size: %u\n", addr, size); - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_EEPROM_ADDR, (unsigned char *) &eeprom_addr, sizeof (eeprom_addr), CORE_NONE); @@ -638,6 +662,7 @@ return ret; ret = hp5590_cmd (dn, + proto_flags, CMD_VERIFY, CMD_EEPROM_WRITE, data, size, CORE_DATA); if (ret != SANE_STATUS_GOOD) @@ -648,7 +673,9 @@ /******************************************************************************/ static SANE_Status -hp5590_read_scan_count (SANE_Int dn, unsigned int *count) +hp5590_read_scan_count (SANE_Int dn, + enum proto_flags proto_flags, + unsigned int *count) { uint32_t scan_count; SANE_Status ret; @@ -659,7 +686,9 @@ DBG (DBG_proc, "%s\n", __FUNCTION__); DBG (DBG_proc, "Reading scan count\n"); - ret = hp5590_read_eeprom (dn, 0x00, + ret = hp5590_read_eeprom (dn, + proto_flags, + 0x00, (unsigned char *) &scan_count, sizeof (scan_count)); @@ -676,7 +705,8 @@ /******************************************************************************/ static SANE_Status -hp5590_inc_scan_count (SANE_Int dn) +hp5590_inc_scan_count (SANE_Int dn, + enum proto_flags proto_flags) { uint32_t scan_count; unsigned int count; @@ -686,20 +716,22 @@ DBG (DBG_proc, "%s\n", __FUNCTION__); hp5590_cmds_assert (sizeof (scan_count) == 4); - ret = hp5590_read_scan_count (dn, &count); + ret = hp5590_read_scan_count (dn, proto_flags, &count); if (ret != SANE_STATUS_GOOD) return ret; scan_count = ++count; - ret = hp5590_write_eeprom (dn, 0x00, + ret = hp5590_write_eeprom (dn, + proto_flags, + 0x00, (unsigned char *) &scan_count, sizeof (scan_count)); if (ret != SANE_STATUS_GOOD) return ret; /* Verify its setting */ - ret = hp5590_read_scan_count (dn, &new_count); + ret = hp5590_read_scan_count (dn, proto_flags, &new_count); if (ret != SANE_STATUS_GOOD) return ret; @@ -714,7 +746,9 @@ /******************************************************************************/ static SANE_Status -hp5590_read_max_scan_count (SANE_Int dn, unsigned int *max_count) +hp5590_read_max_scan_count (SANE_Int dn, + enum proto_flags proto_flags, + unsigned int *max_count) { uint8_t max_scan_count[3]; SANE_Status ret; @@ -726,6 +760,7 @@ DBG (DBG_proc, "Reading max scan count\n"); ret = hp5590_read_eeprom (dn, + proto_flags, 0x10, (unsigned char *) max_scan_count, sizeof (max_scan_count)); @@ -770,14 +805,17 @@ /******************************************************************************/ static __sane_unused__ SANE_Status -hp5590_read_eeprom_all_cmd (SANE_Int dn) +hp5590_read_eeprom_all_cmd (SANE_Int dn, + enum proto_flags proto_flags) { uint8_t eeprom[255]; SANE_Status ret; DBG (DBG_proc, "%s\n", __FUNCTION__); - ret = hp5590_read_eeprom (dn, 0x00, + ret = hp5590_read_eeprom (dn, + proto_flags, + 0x00, (unsigned char *) eeprom, sizeof (eeprom)); if (ret != SANE_STATUS_GOOD) @@ -790,7 +828,8 @@ /******************************************************************************/ static SANE_Status -hp5590_read_part_number (SANE_Int dn) +hp5590_read_part_number (SANE_Int dn, + enum proto_flags proto_flags) { unsigned int part_number_len = PART_NUMBER_LEN; unsigned char part_number[PART_NUMBER_LEN + 1]; @@ -800,6 +839,7 @@ memset (part_number, 0, sizeof (part_number)); ret = hp5590_read_eeprom (dn, + proto_flags, 0x1a, part_number, part_number_len); if (ret != SANE_STATUS_GOOD) @@ -812,7 +852,8 @@ /******************************************************************************/ static SANE_Status -hp5590_is_data_available (SANE_Int dn) +hp5590_is_data_available (SANE_Int dn, + enum proto_flags proto_flags) { uint8_t data_status; SANE_Status ret; @@ -823,7 +864,9 @@ hp5590_cmds_assert (sizeof (data_status) == 1); data_available = SANE_FALSE; - ret = hp5590_cmd (dn, CMD_IN | CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_IN | CMD_VERIFY, CMD_DATA_STATUS, (unsigned char *) &data_status, sizeof (data_status), CORE_DATA); @@ -844,7 +887,8 @@ /******************************************************************************/ static SANE_Status -hp5590_stop_scan (SANE_Int dn) +hp5590_stop_scan (SANE_Int dn, + enum proto_flags proto_flags) { uint8_t reg_011b = 0x40; SANE_Status ret; @@ -853,7 +897,9 @@ hp5590_cmds_assert (sizeof (reg_011b) == 1); - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_STOP_SCAN, (unsigned char *) ®_011b, sizeof (reg_011b), CORE_NONE); @@ -867,7 +913,9 @@ /******************************************************************************/ static SANE_Status -hp5590_turnon_lamp (SANE_Int dn, enum hp5590_lamp_state state) +hp5590_turnon_lamp (SANE_Int dn, + enum proto_flags proto_flags, + enum hp5590_lamp_state state) { struct lamp_state lamp_state; SANE_Status ret; @@ -912,7 +960,9 @@ DBG (DBG_cmds, "%s: setting long turnoff time\n", __FUNCTION__); } - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_CONTROL_LAMP, (unsigned char *) &lamp_state, sizeof (lamp_state), CORE_DATA); @@ -921,7 +971,7 @@ if (state == LAMP_STATE_TURNON) { - ret = hp5590_init_scanner (dn, NULL, SCANNER_NONE); + ret = hp5590_init_scanner (dn, proto_flags, NULL, SCANNER_NONE); if (ret != SANE_STATUS_GOOD) return ret; } @@ -931,7 +981,8 @@ /******************************************************************************/ static SANE_Status -hp5590_power_status (SANE_Int dn) +hp5590_power_status (SANE_Int dn, + enum proto_flags proto_flags) { struct power_resp power_resp; SANE_Status ret; @@ -940,7 +991,9 @@ hp5590_cmds_assert (sizeof (power_resp) == 3); - ret = hp5590_cmd (dn, CMD_IN | CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_IN | CMD_VERIFY, CMD_POWER_STATUS, (unsigned char *) &power_resp, sizeof (power_resp), CORE_NONE); @@ -953,7 +1006,7 @@ if (!(power_resp.flags & POWER_FLAG_ON)) { DBG (DBG_cmds, "Turning lamp on\n"); - ret = hp5590_turnon_lamp (dn, LAMP_STATE_TURNON); + ret = hp5590_turnon_lamp (dn, proto_flags, LAMP_STATE_TURNON); if (ret != SANE_STATUS_GOOD) return ret; } @@ -963,7 +1016,9 @@ /******************************************************************************/ static SANE_Status -hp5590_read_error_code (SANE_Int dn, unsigned int *adf_flags) +hp5590_read_error_code (SANE_Int dn, + enum proto_flags proto_flags, + unsigned int *adf_flags) { struct reg_03 reg_03; SANE_Status ret; @@ -975,7 +1030,9 @@ memset (®_03, 0, sizeof (reg_03)); *adf_flags = 0; - ret = hp5590_cmd (dn, CMD_IN, + ret = hp5590_cmd (dn, + proto_flags, + CMD_IN, CMD_MISC_STATUS, (unsigned char *) ®_03, sizeof (reg_03), CORE_NONE); @@ -994,19 +1051,20 @@ /******************************************************************************/ static SANE_Status -hp5590_reset_scan_head (SANE_Int dn) +hp5590_reset_scan_head (SANE_Int dn, + enum proto_flags proto_flags) { SANE_Status ret; DBG (DBG_proc, "%s\n", __FUNCTION__); - ret = hp5590_turnon_lamp (dn, LAMP_STATE_TURNOFF); + ret = hp5590_turnon_lamp (dn, proto_flags, LAMP_STATE_TURNOFF); if (ret != SANE_STATUS_GOOD) return ret; usleep (100 * 1000); - ret = hp5590_turnon_lamp (dn, LAMP_STATE_TURNON); + ret = hp5590_turnon_lamp (dn, proto_flags, LAMP_STATE_TURNON); if (ret != SANE_STATUS_GOOD) return ret; @@ -1016,6 +1074,7 @@ /******************************************************************************/ static SANE_Status hp5590_select_source_and_wakeup (SANE_Int dn, + enum proto_flags proto_flags, enum scan_sources source, SANE_Bool extend_lamp_timeout) { @@ -1029,13 +1088,14 @@ if (source == SOURCE_TMA_SLIDES || source == SOURCE_TMA_NEGATIVES) { - ret = hp5590_turnon_lamp (dn, LAMP_STATE_TURNOFF); + ret = hp5590_turnon_lamp (dn, proto_flags, LAMP_STATE_TURNOFF); if (ret != SANE_STATUS_GOOD) return ret; } else { ret = hp5590_turnon_lamp (dn, + proto_flags, extend_lamp_timeout == SANE_TRUE ? LAMP_STATE_SET_TURNOFF_TIME_LONG : LAMP_STATE_SET_TURNOFF_TIME); @@ -1068,7 +1128,9 @@ DBG (DBG_cmds, "Scan source: %u\n", reg_d6); - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_SELECT_SOURCE, (unsigned char *) ®_d6, sizeof (reg_d6), CORE_NONE); @@ -1076,7 +1138,7 @@ if (ret != SANE_STATUS_GOOD && ret != SANE_STATUS_DEVICE_BUSY) return ret; - ret = hp5590_read_error_code (dn, &adf_flags); + ret = hp5590_read_error_code (dn, proto_flags, &adf_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -1091,7 +1153,8 @@ /******************************************************************************/ static SANE_Status -hp5590_lock_unlock_scanner (SANE_Int dn) +hp5590_lock_unlock_scanner (SANE_Int dn, + enum proto_flags proto_flags) { uint8_t reg_00 = 0x01; SANE_Status ret; @@ -1103,7 +1166,9 @@ for (waiting = 0; waiting < WAKEUP_TIMEOUT; waiting++, sleep (1)) { - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_LOCK_UNLOCK, (unsigned char *) ®_00, sizeof (reg_00), CORE_NONE); @@ -1114,7 +1179,7 @@ return ret; DBG (DBG_cmds, "Waiting for scanner...\n"); - ret = hp5590_read_error_code (dn, &adf_flags); + ret = hp5590_read_error_code (dn, proto_flags, &adf_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -1134,6 +1199,7 @@ /******************************************************************************/ static SANE_Status hp5590_set_base_dpi (SANE_Int dn, + enum proto_flags proto_flags, struct scanner_info *scanner_info, unsigned int base_dpi) { @@ -1159,7 +1225,9 @@ _base_dpi = htons (base_dpi); - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_SET_BASE_DPI, (unsigned char *) &_base_dpi, sizeof (_base_dpi), CORE_DATA); @@ -1171,7 +1239,9 @@ /******************************************************************************/ static SANE_Status -hp5590_set_color_map (SANE_Int dn, unsigned int base_dpi) +hp5590_set_color_map (SANE_Int dn, + enum proto_flags proto_flags, + unsigned int base_dpi) { struct color_map color_map; SANE_Status ret; @@ -1206,7 +1276,9 @@ color_map.color3[5] = 0x02; } - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_SET_COLOR_MAP, (unsigned char *) &color_map, sizeof (color_map), CORE_DATA); @@ -1369,7 +1441,9 @@ /******************************************************************************/ static SANE_Status -hp5590_set_scan_area (SANE_Int dn, struct scanner_info *scanner_info, +hp5590_set_scan_area (SANE_Int dn, + enum proto_flags proto_flags, + struct scanner_info *scanner_info, unsigned int top_x, unsigned int top_y, unsigned int width, unsigned int height, unsigned int dpi, enum color_depths color_depth, @@ -1479,6 +1553,11 @@ max_pixels_x_current_dpi = (float) (TMA_MAX_X_INCHES * dpi); max_pixels_y_current_dpi = (float) (TMA_MAX_Y_INCHES * dpi); } + /* In ADF mode the device can scan up to ADF_MAX_Y_INCHES, which is usually + * bigger than what scanner reports back during initialization + */ + if ( scan_source == SOURCE_ADF ) + max_pixels_y_current_dpi = (float) (ADF_MAX_Y_INCHES * dpi); /* Allow two times of max pixels for ADF Duplex mode */ if (scan_source == SOURCE_ADF_DUPLEX) @@ -1529,7 +1608,9 @@ scan_params.line_width = htons (scanner_line_width); DBG (DBG_cmds, "Line width: %u\n", scanner_line_width); - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_SET_SCAN_PARAMS, (unsigned char *) &scan_params, sizeof (scan_params), CORE_DATA); @@ -1541,7 +1622,8 @@ /******************************************************************************/ static SANE_Status -hp5590_read_image_params (SANE_Int dn) +hp5590_read_image_params (SANE_Int dn, + enum proto_flags proto_flags) { struct image_params image_params; SANE_Status ret; @@ -1552,7 +1634,9 @@ memset (&image_params, 0, sizeof (image_params)); - ret = hp5590_cmd (dn, CMD_IN | CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_IN | CMD_VERIFY, CMD_GET_IMAGE_PARAMS, (unsigned char *) &image_params, sizeof (image_params), CORE_NONE); @@ -1580,7 +1664,9 @@ /******************************************************************************/ static SANE_Status -hp5590_set_scan_params (SANE_Int dn, struct scanner_info * scanner_info, +hp5590_set_scan_params (SANE_Int dn, + enum proto_flags proto_flags, + struct scanner_info * scanner_info, unsigned int top_x, unsigned int top_y, unsigned int width, unsigned int height, unsigned int dpi, enum color_depths color_depth, @@ -1596,7 +1682,7 @@ hp5590_cmds_assert (dpi != 0); /* Lock scanner */ - ret = hp5590_lock_unlock_scanner (dn); + ret = hp5590_lock_unlock_scanner (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -1605,49 +1691,51 @@ if (ret != SANE_STATUS_GOOD) { /* Unlock scanner */ - hp5590_lock_unlock_scanner (dn); + hp5590_lock_unlock_scanner (dn, proto_flags); return ret; } DBG (DBG_cmds, "Set base DPI: %u\n", base_dpi); - ret = hp5590_set_base_dpi (dn, scanner_info, base_dpi); + ret = hp5590_set_base_dpi (dn, proto_flags, scanner_info, base_dpi); if (ret != SANE_STATUS_GOOD) { /* Unlock scanner */ - hp5590_lock_unlock_scanner (dn); + hp5590_lock_unlock_scanner (dn, proto_flags); return ret; } /* Set color map */ - ret = hp5590_set_color_map (dn, base_dpi); + ret = hp5590_set_color_map (dn, proto_flags, base_dpi); if (ret != SANE_STATUS_GOOD) { /* Unlock scanner */ - hp5590_lock_unlock_scanner (dn); + hp5590_lock_unlock_scanner (dn, proto_flags); return ret; } - ret = hp5590_set_scan_area (dn, scanner_info, + ret = hp5590_set_scan_area (dn, + proto_flags, + scanner_info, top_x, top_y, width, height, dpi, color_depth, scan_mode, scan_source); if (ret != SANE_STATUS_GOOD) { /* Unlock scanner */ - hp5590_lock_unlock_scanner (dn); + hp5590_lock_unlock_scanner (dn, proto_flags); return ret; } - ret = hp5590_read_image_params (dn); + ret = hp5590_read_image_params (dn, proto_flags); if (ret != SANE_STATUS_GOOD) { /* Unlock scanner */ - hp5590_lock_unlock_scanner (dn); + hp5590_lock_unlock_scanner (dn, proto_flags); return ret; } /* Unlock scanner */ - ret = hp5590_lock_unlock_scanner (dn); + ret = hp5590_lock_unlock_scanner (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -1656,7 +1744,8 @@ /******************************************************************************/ static SANE_Status -hp5590_send_reverse_calibration_map (SANE_Int dn) +hp5590_send_reverse_calibration_map (SANE_Int dn, + enum proto_flags proto_flags) { unsigned int reverse_map_size = REVERSE_MAP_LEN; uint16_t reverse_map[REVERSE_MAP_LEN]; @@ -1694,7 +1783,9 @@ DBG (DBG_proc, "Done preparing reverse calibration map\n"); - ret = hp5590_bulk_write (dn, 0x2b, + ret = hp5590_bulk_write (dn, + proto_flags, + 0x2b, (unsigned char *) reverse_map, reverse_map_size * sizeof (uint16_t)); if (ret != SANE_STATUS_GOOD) @@ -1705,7 +1796,8 @@ /******************************************************************************/ static SANE_Status -hp5590_send_forward_calibration_maps (SANE_Int dn) +hp5590_send_forward_calibration_maps (SANE_Int dn, + enum proto_flags proto_flags) { unsigned int forward_map_size = FORWARD_MAP_LEN; uint16_t forward_map[FORWARD_MAP_LEN]; @@ -1724,19 +1816,25 @@ } DBG (DBG_proc, "Done preparing forward calibration map\n"); - ret = hp5590_bulk_write (dn, 0x012a, + ret = hp5590_bulk_write (dn, + proto_flags, + 0x012a, (unsigned char *) forward_map, forward_map_size * sizeof (uint16_t)); if (ret != SANE_STATUS_GOOD) return ret; - ret = hp5590_bulk_write (dn, 0x022a, + ret = hp5590_bulk_write (dn, + proto_flags, + 0x022a, (unsigned char *) forward_map, forward_map_size * sizeof (uint16_t)); if (ret != SANE_STATUS_GOOD) return ret; - ret = hp5590_bulk_write (dn, 0x032a, + ret = hp5590_bulk_write (dn, + proto_flags, + 0x032a, (unsigned char *) forward_map, forward_map_size * sizeof (uint16_t)); if (ret != SANE_STATUS_GOOD) @@ -1747,7 +1845,9 @@ /******************************************************************************/ static SANE_Status -hp5590_read (SANE_Int dn, unsigned char *bytes, unsigned int size, +hp5590_read (SANE_Int dn, + enum proto_flags proto_flags, + unsigned char *bytes, unsigned int size, void *state) { SANE_Status ret; @@ -1757,7 +1857,7 @@ hp5590_cmds_assert (bytes != NULL); hp5590_cmds_assert (state != NULL); - ret = hp5590_bulk_read (dn, bytes, size, state); + ret = hp5590_bulk_read (dn, proto_flags, bytes, size, state); if (ret != SANE_STATUS_GOOD) return ret; @@ -1766,7 +1866,8 @@ /******************************************************************************/ static SANE_Status -hp5590_start_scan (SANE_Int dn) +hp5590_start_scan (SANE_Int dn, + enum proto_flags proto_flags) { uint8_t reg_051b = 0x40; SANE_Status ret; @@ -1775,7 +1876,9 @@ hp5590_cmds_assert (sizeof (reg_051b) == 1); - ret = hp5590_cmd (dn, CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_VERIFY, CMD_START_SCAN, (unsigned char *) ®_051b, sizeof (reg_051b), CORE_NONE); @@ -1787,7 +1890,9 @@ /******************************************************************************/ static SANE_Status -hp5590_read_buttons (SANE_Int dn, enum button_status * status) +hp5590_read_buttons (SANE_Int dn, + enum proto_flags proto_flags, + enum button_status * status) { uint16_t button_status; SANE_Status ret; @@ -1797,7 +1902,9 @@ hp5590_cmds_assert (status != NULL); hp5590_cmds_assert (sizeof (button_status) == 2); - ret = hp5590_cmd (dn, CMD_IN | CMD_VERIFY, + ret = hp5590_cmd (dn, + proto_flags, + CMD_IN | CMD_VERIFY, CMD_BUTTON_STATUS, (unsigned char *) &button_status, sizeof (button_status), CORE_NONE); diff -Nru sane-backends-1.0.22/backend/hp5590_cmds.h sane-backends-1.0.23/backend/hp5590_cmds.h --- sane-backends-1.0.22/backend/hp5590_cmds.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/hp5590_cmds.h 2011-06-27 17:41:06.000000000 +0000 @@ -51,6 +51,8 @@ #define TMA_MAX_X_INCHES 1.69 #define TMA_MAX_Y_INCHES 6 +#define ADF_MAX_Y_INCHES 14 + enum hp_scanner_types { SCANNER_NONE = 0, @@ -107,6 +109,17 @@ LAMP_STATE_SET_TURNOFF_TIME_LONG }; +struct hp5590_model +{ + enum hp_scanner_types scanner_type; + unsigned int usb_vendor_id; + unsigned int usb_product_id; + const char *vendor_id; + const char *model; + const char *kind; + enum proto_flags proto_flags; +}; + #define FEATURE_NONE 0 #define FEATURE_ADF 1 << 0 #define FEATURE_TMA 1 << 1 @@ -128,22 +141,31 @@ unsigned int normal_motor_param; }; +static SANE_Status hp5590_model_def (enum hp_scanner_types scanner_type, + const struct hp5590_model ** model); static SANE_Status hp5590_vendor_product_id (enum hp_scanner_types scanner_type, SANE_Word * vendor_id, SANE_Word * product_id); static SANE_Status hp5590_init_scanner (SANE_Int dn, + enum proto_flags proto_flags, struct scanner_info **info, enum hp_scanner_types scanner_type); -static SANE_Status hp5590_power_status (SANE_Int dn); +static SANE_Status hp5590_power_status (SANE_Int dn, + enum proto_flags proto_flags); static SANE_Status hp5590_read_max_scan_count (SANE_Int dn, + enum proto_flags proto_flags, unsigned int *max_count); static SANE_Status hp5590_select_source_and_wakeup (SANE_Int dn, + enum proto_flags proto_flags, enum scan_sources source, SANE_Bool extend_lamp_timeout); -static SANE_Status hp5590_stop_scan (SANE_Int dn); +static SANE_Status hp5590_stop_scan (SANE_Int dn, + enum proto_flags proto_flags); static SANE_Status hp5590_read_scan_count (SANE_Int dn, + enum proto_flags proto_flags, unsigned int *count); static SANE_Status hp5590_set_scan_params (SANE_Int dn, + enum proto_flags proto_flags, struct scanner_info *scanner_info, unsigned int top_x, unsigned int top_y, unsigned int width, unsigned int height, @@ -151,21 +173,30 @@ enum color_depths color_depth, enum scan_modes scan_mode, enum scan_sources scan_source); -static SANE_Status hp5590_send_forward_calibration_maps (SANE_Int dn); -static SANE_Status hp5590_send_reverse_calibration_map (SANE_Int dn); -static SANE_Status hp5590_inc_scan_count (SANE_Int dn); -static SANE_Status hp5590_start_scan (SANE_Int dn); +static SANE_Status hp5590_send_forward_calibration_maps (SANE_Int dn, + enum proto_flags proto_flags); +static SANE_Status hp5590_send_reverse_calibration_map (SANE_Int dn, + enum proto_flags proto_flags); +static SANE_Status hp5590_inc_scan_count (SANE_Int dn, + enum proto_flags proto_flags); +static SANE_Status hp5590_start_scan (SANE_Int dn, + enum proto_flags proto_flags); static SANE_Status hp5590_read (SANE_Int dn, + enum proto_flags proto_flags, unsigned char *bytes, unsigned int size, void *state); static SANE_Status hp5590_read_buttons (SANE_Int dn, + enum proto_flags proto_flags, enum button_status *status); -static SANE_Status hp5590_read_part_number (SANE_Int dn); +static SANE_Status hp5590_read_part_number (SANE_Int dn, + enum proto_flags proto_flags); static SANE_Status hp5590_calc_pixel_bits (unsigned int dpi, enum color_depths color_depth, unsigned int *pixel_bits); -static SANE_Status hp5590_is_data_available (SANE_Int dn); -static SANE_Status hp5590_reset_scan_head (SANE_Int dn); +static SANE_Status hp5590_is_data_available (SANE_Int dn, + enum proto_flags proto_flags); +static SANE_Status hp5590_reset_scan_head (SANE_Int dn, + enum proto_flags proto_flags); #endif /* HP5590_H */ /* vim: sw=2 ts=8 */ diff -Nru sane-backends-1.0.22/backend/hp5590_low.c sane-backends-1.0.23/backend/hp5590_low.c --- sane-backends-1.0.22/backend/hp5590_low.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/hp5590_low.c 2012-08-10 00:33:29.000000000 +0000 @@ -51,6 +51,8 @@ # include #endif /* HAVE_NETINET_IN_H */ +#include "byteorder.h" + #include "../include/sane/sanei_debug.h" #include "../include/sane/sanei_usb.h" #include "../include/_stdint.h" @@ -82,7 +84,7 @@ uint8_t bRequest; uint8_t bEndpoint; uint16_t unknown; - uint16_t wLength; + uint16_t wLength; /* MSB first */ uint8_t pad; } __attribute__ ((packed)); @@ -90,9 +92,9 @@ struct usb_in_usb_ctrl_setup { uint8_t bRequestType; uint8_t bRequest; - uint16_t wValue; - uint16_t wIndex; - uint16_t wLength; + uint16_t wValue; /* MSB first */ + uint16_t wIndex; /* MSB first */ + uint16_t wLength; /* LSB first */ } __attribute__ ((packed)); /* CORE status flag - ready or not */ @@ -131,11 +133,16 @@ * SANE_STATUS_DEVICE_BUSY - otherwise */ static SANE_Status -hp5590_get_ack (SANE_Int dn) +hp5590_get_ack (SANE_Int dn, + enum proto_flags proto_flags) { uint8_t status; SANE_Status ret; + /* Bypass reading acknowledge if the device doesn't need it */ + if (proto_flags & PF_NO_USB_IN_USB_ACK) + return SANE_STATUS_GOOD; + DBG (DBG_proc, "%s\n", __FUNCTION__); /* Check if USB-in-USB operation was accepted */ @@ -173,7 +180,8 @@ * SANE_STATUS_DEVICE_BUSY - otherwise */ static SANE_Status -hp5590_get_status (SANE_Int dn) +hp5590_get_status (SANE_Int dn, + __sane_unused__ enum proto_flags proto_flags) { uint8_t status; SANE_Status ret; @@ -181,7 +189,7 @@ DBG (DBG_proc, "%s\n", __FUNCTION__); ret = sanei_usb_control_msg (dn, USB_DIR_IN | USB_TYPE_VENDOR, - 0x0c, 0x8e, 0x20, + 0x0c, 0x8e, 0x00, sizeof (status), &status); if (ret != SANE_STATUS_GOOD) { @@ -222,6 +230,7 @@ */ static SANE_Status hp5590_control_msg (SANE_Int dn, + enum proto_flags proto_flags, int requesttype, int request, int value, int index, unsigned char *bytes, int size, int core_flags) @@ -248,7 +257,7 @@ ctrl.bRequest = request; ctrl.wValue = htons (value); ctrl.wIndex = htons (index); - ctrl.wLength = size; + ctrl.wLength = htole16 (size); DBG (DBG_usb, "%s: USB-in-USB: sending control msg\n", __FUNCTION__); /* Send USB-in-USB control message */ @@ -262,9 +271,8 @@ return ret; } - DBG (DBG_usb, "%s: USB-in-USB: checking acknowledge for control message\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking acknowledge for control message */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -304,9 +312,8 @@ return -1; } - DBG (DBG_usb, "%s: USB-in-USB: checking if confirmation was acknowledged\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking if confirmation was acknowledged */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; } @@ -320,7 +327,7 @@ ctrl.bRequest = request; ctrl.wValue = htons (value); ctrl.wIndex = htons (index); - ctrl.wLength = size; + ctrl.wLength = htole16 (size); DBG (DBG_usb, "%s: USB-in-USB: sending control msg\n", __FUNCTION__); /* Send USB-in-USB control message */ @@ -334,9 +341,8 @@ return ret; } - DBG (DBG_usb, "%s: USB-in-USB: checking acknowledge for control message\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking acknowledge for control message */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -363,9 +369,8 @@ /* CORE data is acknowledged packet by packet */ if (core_flags & CORE_DATA) { - DBG (DBG_usb, "%s: USB-in-USB: checking if data was accepted\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking if data was accepted */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; } @@ -377,9 +382,8 @@ /* Normal (non-CORE) data is acknowledged after its full transmission */ if (!(core_flags & CORE_DATA)) { - DBG (3, "%s: USB-in-USB: checking if data was accepted\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking if data was accepted */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; } @@ -429,10 +433,8 @@ return ret; } - /* Check acknowledge for bulk flags transmission */ - DBG (DBG_usb, "%s: USB-in-USB: checking confirmation for bulk flags\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking confirmation for bulk flags */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; } @@ -455,7 +457,9 @@ * all other SANE_Status values - otherwise */ static SANE_Status -hp5590_verify_last_cmd (SANE_Int dn, unsigned int cmd) +hp5590_verify_last_cmd (SANE_Int dn, + enum proto_flags proto_flags, + unsigned int cmd) { uint16_t verify_cmd; unsigned int last_cmd; @@ -466,13 +470,17 @@ __FUNCTION__); /* Read last command along with CORE status */ - ret = hp5590_control_msg (dn, USB_DIR_IN, + ret = hp5590_control_msg (dn, + proto_flags, + USB_DIR_IN, 0x04, 0xc5, 0x00, (unsigned char *) &verify_cmd, sizeof (verify_cmd), CORE_NONE); if (ret != SANE_STATUS_GOOD) return ret; + verify_cmd = le16toh (verify_cmd); /* Response is LSB first */ + /* Last command - minor byte */ last_cmd = verify_cmd & 0xff; /* CORE status - major byte */ @@ -518,7 +526,9 @@ * all other SANE_Status values - otherwise */ static SANE_Status -hp5590_cmd (SANE_Int dn, unsigned int flags, +hp5590_cmd (SANE_Int dn, + enum proto_flags proto_flags, + unsigned int flags, unsigned int cmd, unsigned char *data, unsigned int size, unsigned int core_flags) { @@ -527,6 +537,7 @@ DBG (3, "%s: USB-in-USB: command : %04x\n", __FUNCTION__, cmd); ret = hp5590_control_msg (dn, + proto_flags, flags & CMD_IN ? USB_DIR_IN : USB_DIR_OUT, 0x04, cmd, 0x00, data, size, core_flags); if (ret != SANE_STATUS_GOOD) @@ -536,7 +547,7 @@ /* Verify last command if requested */ if (flags & CMD_VERIFY) { - ret = hp5590_verify_last_cmd (dn, cmd); + ret = hp5590_verify_last_cmd (dn, proto_flags, cmd); } return ret; @@ -632,7 +643,9 @@ * state - pointer to initialized bulk read state structure */ static SANE_Status -hp5590_bulk_read (SANE_Int dn, unsigned char *bytes, unsigned int size, +hp5590_bulk_read (SANE_Int dn, + enum proto_flags proto_flags, + unsigned char *bytes, unsigned int size, void *state) { struct usb_in_usb_bulk_setup ctrl; @@ -712,10 +725,8 @@ return ret; } - /* Check acknowledge for bulk flags just sent */ - DBG (DBG_usb, "%s: USB-in-USB: checking confirmation for bulk flags\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking confirmation for bulk flags\n" */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -739,10 +750,8 @@ return ret; } - /* Check acknowledge for bulk read request */ - DBG (DBG_usb, "%s: USB-in-USB: checking if control msg was accepted\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking if control msg was accepted */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; } @@ -864,7 +873,9 @@ * all other SANE_Status value - otherwise */ static SANE_Status -hp5590_bulk_write (SANE_Int dn, int cmd, unsigned char *bytes, +hp5590_bulk_write (SANE_Int dn, + enum proto_flags proto_flags, + int cmd, unsigned char *bytes, unsigned int size) { struct usb_in_usb_bulk_setup ctrl; @@ -888,7 +899,9 @@ /* Send bulk write request */ DBG (3, "%s: USB-in-USB: total %u pages (each of %u bytes)\n", __FUNCTION__, bulk_size.size, BULK_WRITE_PAGE_SIZE); - ret = hp5590_control_msg (dn, USB_DIR_OUT, + ret = hp5590_control_msg (dn, + proto_flags, + USB_DIR_OUT, 0x04, cmd, 0, (unsigned char *) &bulk_size, sizeof (bulk_size), CORE_DATA | CORE_BULK_OUT); @@ -921,10 +934,8 @@ if (ret != SANE_STATUS_GOOD) return ret; - /* Check acknowledge for bulk write request */ - DBG (DBG_usb, "%s: USB-in-USB: checking if command was accepted\n", - __FUNCTION__); - ret = hp5590_get_ack (dn); + /* USB-in-USB: checking if command was accepted */ + ret = hp5590_get_ack (dn, proto_flags); if (ret != SANE_STATUS_GOOD) return ret; @@ -948,7 +959,7 @@ } /* Verify bulk command */ - return hp5590_verify_last_cmd (dn, cmd); + return hp5590_verify_last_cmd (dn, proto_flags, cmd); } /* vim: sw=2 ts=8 */ diff -Nru sane-backends-1.0.22/backend/hp5590_low.h sane-backends-1.0.23/backend/hp5590_low.h --- sane-backends-1.0.22/backend/hp5590_low.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/hp5590_low.h 2011-06-27 17:40:49.000000000 +0000 @@ -47,6 +47,12 @@ #include "../include/sane/sane.h" +enum proto_flags { + PF_NONE = 0, + PF_NO_USB_IN_USB_ACK = 1 << 0 /* Getting acknowledge after USB-in-USB command + * will be skipped */ +}; + /* Flags for hp5590_cmd() */ #define CMD_IN 1 << 0 /* Indicates IN direction, otherwise - OUT */ #define CMD_VERIFY 1 << 1 /* Requests last command verification */ @@ -61,16 +67,21 @@ * transfer */ static SANE_Status hp5590_cmd (SANE_Int dn, + enum proto_flags proto_flags, unsigned int flags, unsigned int cmd, unsigned char *data, unsigned int size, unsigned int core_flags); static SANE_Status hp5590_bulk_read (SANE_Int dn, + enum proto_flags proto_flags, unsigned char *bytes, unsigned int size, void *state); -static SANE_Status hp5590_bulk_write (SANE_Int dn, int cmd, +static SANE_Status hp5590_bulk_write (SANE_Int dn, + enum proto_flags proto_flags, + int cmd, unsigned char *bytes, unsigned int size); -static SANE_Status hp5590_get_status (SANE_Int dn); +static SANE_Status hp5590_get_status (SANE_Int dn, + enum proto_flags proto_flags); static SANE_Status hp5590_low_init_bulk_read_state (void **state); static SANE_Status hp5590_low_free_bulk_read_state (void **state); #endif /* HP5590_LOW_H */ diff -Nru sane-backends-1.0.22/backend/kodak.c sane-backends-1.0.23/backend/kodak.c --- sane-backends-1.0.22/backend/kodak.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kodak.c 2011-11-01 20:09:20.000000000 +0000 @@ -110,10 +110,10 @@ # include /* NeXTStep/OpenStep */ #endif -#include "sane/sanei_backend.h" -#include "sane/sanei_scsi.h" -#include "sane/saneopts.h" -#include "sane/sanei_config.h" +#include "../include/sane/sanei_backend.h" +#include "../include/sane/sanei_scsi.h" +#include "../include/sane/saneopts.h" +#include "../include/sane/sanei_config.h" #include "kodak-cmd.h" #include "kodak.h" diff -Nru sane-backends-1.0.22/backend/kodak.h sane-backends-1.0.23/backend/kodak.h --- sane-backends-1.0.22/backend/kodak.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kodak.h 2012-07-01 02:00:44.000000000 +0000 @@ -198,14 +198,6 @@ # define PATH_MAX 1024 #endif -#ifndef PATH_SEP -#ifdef HAVE_OS2_H -# define PATH_SEP '\\' -#else -# define PATH_SEP '/' -#endif -#endif - /* ------------------------------------------------------------------------- */ SANE_Status sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize); diff -Nru sane-backends-1.0.22/backend/kodakaio.c sane-backends-1.0.23/backend/kodakaio.c --- sane-backends-1.0.22/backend/kodakaio.c 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/kodakaio.c 2012-08-10 00:33:29.000000000 +0000 @@ -0,0 +1,3189 @@ +/* + * kodakaio.c - SANE library for Kodak ESP Aio scanners. + * + * Copyright (C) 2011-2012 Paul Newall + * + * Based on the Magicolor sane backend: + * Based on the epson2 sane backend: + * Based on Kazuhiro Sasayama previous + * work on epson.[ch] file from the SANE package. + * Please see those files for additional copyrights. + * Author: Paul Newall + * + * + * 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. + */ + +/* convenient lines to paste +export SANE_DEBUG_KODAKAIO=40 +./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --disable-latex BACKENDS=kodakaio +*/ + +/* SANE-FLOW-DIAGRAM Kodakaio commands in [] brackets + + - sane_init() : initialize backend, attach scanners(devicename,0) + . - sane_get_devices() : query list of scanner-devices + . - sane_open() : open a particular scanner-device and attach_scanner(devicename,&dev) + . . - sane_set_io_mode : set blocking-mode + . . - sane_get_select_fd : get scanner-fd + . . - sane_get_option_descriptor() : get option informations + . . - sane_control_option() : change option values + . . + . . - sane_start() : start image aquisition [V,L,F,S,C,D,O,Z] first time or after cancel. [(F),E,G] every time + . . - sane_get_parameters() : returns actual scan-parameters + . . - sane_read() : read image-data (from pipe) + . . - sane_cancel() : cancel operation, kill reader_process [(F), U] + + . - sane_close() : close opened scanner-device, do_cancel, free buffer and handle [ + - sane_exit() : terminate use of backend, free devicename and device-struture +*/ +/* FUNCTION-TREE + sane_init + sane_start + print_params + sane_open + device_detect + sane_get_devices + init_options + sane_control_option + getvalue + setvalue + search_string_list + change_source + activateOption + deactivateOption + sane_get_parameters + print_params + sane_read + k_read + cmd_read_data + k_recv + cmp_array + sane_exit + free_devices + cmd_start_scan + print_status + k_send + kodakaio_txrxack + k_recv + kodakaio_net_read + dump_hex_buffer_dense + k_send + sanei_kodakaio_net_write_raw + dump_hex_buffer_dense + open_scanner + sanei_kodakaio_net_open + close_scanner + sanei_kodakaio_net_close + detect_usb + kodakaio_getNumberOfUSBProductIds + attach_one_config - (Passed to sanei_configure_attach) + kodakaio_getNumberOfUSBProductIds + kodak_network_discovery + attach_one_net + ProcessDevice + extract_from_id + probably_supported + attach_one_net + attach_one_net + attach + device_detect + attach_one_usb - (passed to sanei_usb_find_devices) + attach + device_detect + k_lock_scanner + kodakaio_txrx + k_send + k_recv + kodakaio_txrxack + k_send + k_recv + cmd_set_color_curve + kodakaio_expect_ack + k_recv + cmd_cancel_scan + kodakaio_txrxack + cmd_set_scanning_parameters + kodakaio_txrxack + device_detect + k_dev_init +*/ + + +#define KODAKAIO_VERSION 02 +#define KODAKAIO_REVISION 4 +#define KODAKAIO_BUILD 3 + +/* for usb (but also used for net). I don't know if this size will always work */ +/* #define MAX_BLOCK_SIZE 32768 */ +#define MAX_BLOCK_SIZE 65536 +#define SCANNER_READ_TIMEOUT 15 + + +/* debugging levels: +In terminal use: export SANE_DEBUG_KODAKAIO=40 to set the level to 40 or whatever +level you want. +Then you can scan with scanimage and see debug info + +use these defines to promote certain functions that you are interested in +define low values to make detail of a section appear when DBG level is low +define a high value eg 99 to get normal behaviour. */ +#define DBG_READ 99 + +/* +normal levels. This system is a plan rather than a reality + * + * 127 recv buffer + * 125 send buffer + * 35 fine-grained status and progress + * 30 sane_read + * 25 setvalue, getvalue, control_option + * 20 low-level (I/O) mc_* functions + * 15 mid-level functions + * 10 high-level functions + * 7 open/close/attach + * 6 print_params + * 5 basic functions + * 3 status info and progress + * 2 sane api + * 1 errors & warnings + */ + +#include "sane/config.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if HAVE_CUPS +/* used for auto detecting network printers */ +#include +#endif + +#include "../include/sane/saneopts.h" +#include "../include/sane/sanei_usb.h" +#include "../include/sane/sanei_tcp.h" +#include "../include/sane/sanei_udp.h" +#include "../include/sane/sanei_config.h" +#include "../include/sane/sanei_backend.h" + +#include "kodakaio.h" + +/* vendor and product ids that are allowed */ +#define SANE_KODAKAIO_VENDOR_ID (0x040a) + +#define min(x,y) (((x)<(y))?(x):(y)) + +/* I think these timeouts are defaults, overridden by any timeouts in the kodakaio.conf file */ +static int K_SNMP_Timeout = 2500; +static int K_Scan_Data_Timeout = 40000; +static int K_Request_Timeout = 5000; + +/* This file is used to store directly the raster returned by the scanner for debugging +If RawScanPath has no length it will not be created */ +FILE *RawScan = NULL; +/* example: unsigned char RawScanPath[] = "TestRawScan.pgm"; */ +char RawScanPath[] = "/tmp/TestRawScan.pgm"; /* empty path means no raw scan file is made */ + + + +/**************************************************************************** + * Devices supported by this backend + ****************************************************************************/ + +/* kodak command strings */ +static unsigned char KodakEsp_V[] = {0x1b,'S','V',0,0,0,0,0}; /* version?? */ +static unsigned char KodakEsp_v[] = {0x1b,'s','v',0,0,0,0,0}; /* reply to version?? */ +static unsigned char KodakEsp_Lock[] = {0x1b,'S','L',0,0,0,0,0}; /* Locks scanner */ +static unsigned char KodakEsp_UnLock[] = {0x1b,'S','U',0,0,0,0,0}; /* Unlocks scanner */ +static unsigned char KodakEsp_Ack[] = {0x1b,'S','S',0,0,0,0,0}; /* Acknowledge for all commands */ +/* the bytes after esc S S 0 may indicate status*/ +static unsigned char KodakEsp_F[] = {0x1b,'S','F',0,0,0,0,0}; /* Purpose not known? colour balance?*/ +static unsigned char KodakEsp_Comp[] = {0x1b,'S','C',3,8,3,0,0}; /* 3,8,3,1,0 does compression. */ +/* The compression method is unknown */ +/* static unsigned char KodakEsp_E[] = {0x1b,'S','E',1,0,0,0,0}; NET Purpose not known */ +/* the extra 1 below could be despeckle option? maybe only for Hero 9.1 but no errors with ESP5250 */ +static unsigned char KodakEsp_E[] = {0x1b,'S','E',1,1,0,0,0}; +static unsigned char KodakEsp_Go[] = {0x1b,'S','G',0,0,0,0,0}; /* Starts the scan */ +/* Other commands are: D (resolution), O (top left), Z (bottom right), R, G, B (curves) */ + +/* What is the relationship between these and the ranges in cap? */ +static SANE_Int kodakaio_resolution_list[] = {75, 150, 300, 600, 1200}; +static SANE_Int kodakaio_depth_list[] = {1,8}; /* The first value is the number of following entries */ + +/* strings to try and match the model ';' separator*/ +static unsigned char SupportedMatchString[] = "KODAK ESP;KODAK HERO;KODAK OFFICE HERO;ADVENT WiFi AIO;"; + +static struct KodakaioCap kodakaio_cap[] = { +/* usbid,commandtype, modelname, USBoutEP, USBinEP, + opticalres, {dpi range}, pointer to res list, res list size + max depth, pointer to depth list, + flatbed x range, flatbed y range, + adf present, adf duplex, + adf x range, adf y range + +The following are not used but may be in future +commandtype, max depth, pointer to depth list +*/ + +/* list of cap data the first scanner is the default +*/ + /* KODAK AIO DEFAULT, */ + { + 0x9999, "esp", "KODAK AIO DEFAULT", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP 5100, */ + { + 0x4025, "esp", "KODAK ESP 5100 AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP 5300, */ + { + 0x4026, "esp", "KODAK ESP 5300 AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP 5500, */ + { + 0x4027, "esp", "KODAK ESP 5500 AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP 5000, */ + { + 0x4028, "esp", "KODAK ESP 5000 Series AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP 3300, */ + { + 0x4031, "esp", "KODAK ESP 3300 Series AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP5, */ + { + 0x4032, "esp", "KODAK ESP 5 AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP7, */ + { + 0x403E, "esp", "KODAK ESP 7 AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP9, */ + { + 0x403F, "esp", "KODAK ESP 9 AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP5210 or 5250, */ + { + 0x4041, "esp", "KODAK ESP 5200 Series AiO", + -1, 0x82, /* USBoutEP, USBinEP (-1 means find one) */ + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP3200 , */ + { + 0x4043, "esp", "KODAK ESP 3200 Series AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP4100 , */ + { + 0x4053, "esp", "KODAK ESP Office 4100 Series AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP6100 , */ + { + 0x4054, "esp", "KODAK ESP Office 6100 Series AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_TRUE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP7200 , */ + { + 0x4056, "esp", "KODAK ESP 7200 Series AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP C110 , */ + { + 0x4057, "esp", "KODAK ESP C110 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP C115 , */ + { + 0x4058, "esp", "KODAK ESP C115 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP 2150 , */ + { + 0x4059, "esp", "KODAK ESP Office 2150 Series", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_TRUE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP C310 , */ + { + 0x405D, "esp", "KODAK ESP C310 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP C315 , */ + { + 0x405E, "esp", "KODAK ESP C315 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* ADVENT AW10, */ + { + 0x4060, "esp", "ADVENT WiFi AIO AW10", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, {from, to, 0} 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_TRUE, SANE_FALSE, /* ADF, duplex. */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK HERO 6.1, */ + { + 0x4062, "esp", "KODAK OFFICE HERO 6.1 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, {from, to, 0} 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_TRUE, SANE_FALSE, /* ADF, duplex. */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK HERO 7.1, */ + { + 0x4063, "esp", "KODAK HERO 7.1 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, {from, to, 0} 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_TRUE, /* ADF, duplex. */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK HERO 5.1, */ + { + 0x4064, "esp", "KODAK HERO 5.1 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, {from, to, 0} 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_TRUE, /* ADF, duplex.*/ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP9200 , */ + { + 0x4065, "esp", "KODAK ESP 9200 Series AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_TRUE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK ESP2170 , */ + { + 0x4066, "esp", "KODAK ESP Office 2170 Series", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_FALSE, /* ADF, duplex */ + {0, SANE_FIX(100), 0}, {0, SANE_FIX(100), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK HERO 9.1, */ + { + 0x4067, "esp", "KODAK HERO 9.1 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, {from, to, 0} 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_TRUE, SANE_FALSE, /* ADF, duplex. */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* KODAK HERO 3.1, */ + { + 0x406D, "esp", "KODAK HERO 3.1 AiO", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, {from, to, 0} 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_TRUE, /* ADF, duplex. Disabled because there's no code to work it yet*/ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + }, + /* spare use for specified usbid */ + { + 0, "esp", "specified", + -1, 0x82, + 600, {75, 600, 0}, kodakaio_resolution_list, 4, /* 600 dpi max, {from, to, 0} 4 resolutions */ + 8, kodakaio_depth_list, /* color depth max 8, list above */ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(11.7 * MM_PER_INCH), 0}, /* FBF x/y ranges */ + SANE_FALSE, SANE_TRUE, /* ADF, duplex. Disabled because there's no code to work it yet*/ + {0, SANE_FIX(8.5 * MM_PER_INCH), 0}, {0, SANE_FIX(14 * MM_PER_INCH), 0} /* ADF x/y ranges (TODO!) */ + } +}; + +/**************************************************************************** + * General configuration parameter definitions + ****************************************************************************/ + + +/* + * Definition of the mode_param struct, that is used to + * specify the valid parameters for the different scan modes. + * + * The depth variable gets updated when the bit depth is modified. + */ + +static struct mode_param mode_params[] = { +/* {0x00, 1, 1}, // Lineart, 1 color, 1 bit Not used*/ + {0x02, 1, 8}, /* Grayscale, 1 color, 8 bit */ + {0x03, 3, 24} /* Color, 3 colors, 24 bit */ +}; + +static SANE_String_Const mode_list[] = { +/* SANE_VALUE_SCAN_MODE_LINEART, */ + SANE_VALUE_SCAN_MODE_GRAY, + SANE_VALUE_SCAN_MODE_COLOR, + NULL +}; + +static const SANE_String_Const adf_mode_list[] = { + SANE_I18N("Simplex"), + SANE_I18N("Duplex"), + NULL +}; + +/* Define the different scan sources */ + +#define FBF_STR SANE_I18N("Flatbed") +#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. Here space is reserved for 3 entries + NULL ? + */ + +static SANE_String_Const source_list[] = { + FBF_STR, + NULL, + NULL, + NULL +}; + +/* prototypes */ +static SANE_Status attach_one_usb(SANE_String_Const devname); +static SANE_Status attach_one_net(SANE_String_Const devname, unsigned int device); +void kodakaio_com_str(unsigned char *buf, char *fmt_buf); +int cmparray (unsigned char *array1, unsigned char *array2, size_t len); +int extract_from_id(char *device_id, const char *token, const char term_char, char *result, size_t result_size); +int probably_supported(char *model); +static struct KodakaioCap *get_device_from_identification (char *ident); + +/* Some utility functions */ + +static size_t +max_string_size(const SANE_String_Const strings[]) +{ +/* returns the length of the longest string in an array of strings */ + size_t size, max_size = 0; + int i; + + for (i = 0; strings[i]; i++) { + size = strlen(strings[i]) + 1; + if (size > max_size) + max_size = size; + } + return max_size; +} + + +static void +print_params(const SANE_Parameters params) +{ + DBG(6, "formats: binary=?, grey=%d, colour=%d\n",SANE_FRAME_GRAY, SANE_FRAME_RGB ); + 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 +print_status(KodakAio_Scanner *s,int level) +{ + DBG(level, "print_status with level %d\n", level); + DBG(level, "s->bytes_unread = %d\n", s->bytes_unread); +/* + DBG(level, "params.last_frame = %d\n", params.last_frame); + DBG(level, "params.bytes_per_line = %d\n", params.bytes_per_line); + DBG(level, "params.pixels_per_line = %d\n", params.pixels_per_line); + DBG(level, "params.lines = %d\n", params.lines); + DBG(level, "params.depth = %d\n", params.depth); +*/ +} + +/**************************************************************************** + * Low-level Network communication functions + ****************************************************************************/ + +/* We don't have a packet wrapper, which holds packet size etc., so we + don't have to use a *read_raw and a *_read function... */ +static int +kodakaio_net_read(struct KodakAio_Scanner *s, unsigned char *buf, size_t wanted, + SANE_Status * status) +{ + size_t size, read = 0; + struct pollfd fds[1]; + int pollreply; + + *status = SANE_STATUS_GOOD; + + /* poll for data-to-be-read (using K_Request_Timeout) */ + fds[0].fd = s->fd; + fds[0].events = POLLIN; + fds[0].revents = 0; + if (pollreply = poll (fds, 1, K_Request_Timeout) <= 0) { + if (pollreply ==0) + DBG(1, "poll timeout\n"); + else + DBG(1, "poll error\n"); + *status = SANE_STATUS_IO_ERROR; + return read; + } + else if(fds[0].revents & POLLIN) { + while (read < wanted) { + size = sanei_tcp_read(s->fd, buf + read, wanted - read); + + if (size == 0) + break; + + read += size; + } + + if (read < wanted) + *status = SANE_STATUS_IO_ERROR; + DBG(32, "net read %d bytes:%x,%x,%x,%x,%x,%x,%x,%x\n",read,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7]); + return read; + } + else + DBG(1, "Unknown problem with poll\n"); +} + +/* kodak does not pad commands like magicolor, so there's only a write_raw function */ +static int +sanei_kodakaio_net_write_raw(struct KodakAio_Scanner *s, + const unsigned char *buf, size_t buf_size, + SANE_Status *status) +{ + DBG(32, "net write:%x,%x,%x,%x,%x,%x,%x,%x\n",buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7]); + + sanei_tcp_write(s->fd, buf, buf_size); + /* TODO: Check whether sending failed... */ + + *status = SANE_STATUS_GOOD; + return buf_size; +} + +static SANE_Status +sanei_kodakaio_net_open(struct KodakAio_Scanner *s) +{ + struct timeval tv; + + tv.tv_sec = 5; + tv.tv_usec = 0; + + DBG(1, "%s\n", __func__); + + setsockopt(s->fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(tv)); + return SANE_STATUS_GOOD; +} + +static SANE_Status +sanei_kodakaio_net_close(struct KodakAio_Scanner *s) +{ + NOT_USED(s); + /* Does nothing - maybe should close the socket ? */ + return SANE_STATUS_GOOD; +} + + +/**************************************************************************** + * Low-level USB communication functions + ****************************************************************************/ + +static int +kodakaio_getNumberOfUSBProductIds (void) +{ + return sizeof (kodakaio_cap) / sizeof (struct KodakaioCap); +} + +/**************************************************************************** + * low-level communication commands + ****************************************************************************/ + +static void dump_hex_buffer_dense (int level, const unsigned char *buf, size_t buf_size) +{ + size_t k; + char msg[1024], fmt_buf[1024]; + memset (&msg[0], 0x00, 1024); + memset (&fmt_buf[0], 0x00, 1024); + for (k = 0; k < min(buf_size, 80); k++) { + if (k % 16 == 0) { + if (k>0) { + DBG (level, "%s\n", msg); + memset (&msg[0], 0x00, 1024); + } + sprintf (fmt_buf, " 0x%04lx ", (unsigned long)k); + strcat (msg, fmt_buf); + } + if (k % 8 == 0) { + strcat (msg, " "); + } + sprintf (fmt_buf, " %02x" , buf[k]); + strcat (msg, fmt_buf); + } + if (msg[0] != 0 ) { + DBG (level, "%s\n", msg); + } +} + +/* changing params to char seems to cause a stack problem */ +void kodakaio_com_str(unsigned char *buf, char *fmt_buf) +{ +/* returns a printable string version of the first 8 bytes assuming they are a kodakaio command*/ + if(buf[0] == 0x1b) { + sprintf (fmt_buf, "esc %c %c %02x %02x %02x %02x %02x", + buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); + } + else { + sprintf (fmt_buf, "%02x %02x %02x %02x %02x %02x %02x %02x", + buf[0],buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]); + } +} + +static int +k_send(KodakAio_Scanner * s, void *buf, size_t buf_size, SANE_Status * status) +{ + char fmt_buf[25]; + + kodakaio_com_str(buf, fmt_buf); + DBG(15, "%s: size = %lu :%s\n", __func__, (u_long) buf_size, fmt_buf); + + if (DBG_LEVEL >= 125) { + const unsigned char *s = buf; + DBG(125, "complete buffer:\n"); + dump_hex_buffer_dense (125, s, buf_size); + } + + if (s->hw->connection == SANE_KODAKAIO_NET) { + return sanei_kodakaio_net_write_raw(s, buf, buf_size, status); + } else if (s->hw->connection == SANE_KODAKAIO_USB) { + size_t n; + n = buf_size; + *status = sanei_usb_write_bulk(s->fd, buf, &n); + DBG(50, "USB: wrote %lu bytes, status: %s\n", (unsigned long)n, sane_strstatus(*status)); + return n; + } + + *status = SANE_STATUS_INVAL; + return 0; +} + +static ssize_t +k_recv(KodakAio_Scanner * s, void *buf, ssize_t buf_size, + SANE_Status * status) +{ +/* requests and receives data this function makes the split between USB and NET +this function called by a number of others + +In USB mode, this function will wait until data is available for a maximum of SCANNER_READ_TIMEOUT seconds. +*/ + ssize_t n = 0; + char fmt_buf[25]; + time_t time_start; + time_t time_now; + struct timespec usb_delay, usb_rem; + usb_delay.tv_sec = 0; + usb_delay.tv_nsec = 300000000; + + if (s->hw->connection == SANE_KODAKAIO_NET) { + + time(&time_start); + DBG(min(15,DBG_READ), "[%ld] %s: net req size = %ld, buf = %p\n", (long) time_start, __func__, (long) buf_size, buf); + n = kodakaio_net_read(s, buf, buf_size, status); + + } else if (s->hw->connection == SANE_KODAKAIO_USB) { + /* Start the clock for USB timeout */ + time(&time_start); + + /* Loop until we have data */ + while (n == 0) { + n = buf_size; + /* Make sure that the last read triggers the EOF on the device end. May not be needed? + if (buf_size < MAX_BLOCK_SIZE) + n++; + */ + DBG(min(15,DBG_READ), "[%ld] %s: usb req size = %ld, buf = %p\n", (long) time_start, __func__, (long) n, buf); + *status = sanei_usb_read_bulk(s->fd, (SANE_Byte *) buf, (size_t *) & n); + + if(*status != SANE_STATUS_GOOD) { + + DBG(min(15,DBG_READ), "sanei_usb_read_bulk gave %s\n", sane_strstatus(*status)); + + if (*status == SANE_STATUS_EOF) { + /* If the we have EOF status, wait for more data */ + time(&time_now); + if (difftime(time_now, time_start) < SCANNER_READ_TIMEOUT) { + nanosleep(&usb_delay, &usb_rem); + } + else { + /* Timeout */ + return n; + } + } + else { + /* If we've encountered another type of error, return */ + return n; + } + } + } + } + + if (n == 8) { + kodakaio_com_str(buf, fmt_buf); + DBG(min(15,DBG_READ), "%s: size = %ld, got %s\n", __func__, (long int)n, fmt_buf); + } + /* dump buffer if appropriate */ + if (DBG_LEVEL >= 127 && n > 0) { + const unsigned char* b=buf; + dump_hex_buffer_dense (125, b, buf_size); + } + return n; +} + + +static SANE_Status +kodakaio_expect_ack(KodakAio_Scanner *s, unsigned char *rxbuf) +/* gets 8 byte reply, checks reply is an Ack and returns appropriate status */ +{ + SANE_Status status; + + k_recv(s, rxbuf, 8, &status); + if (status != SANE_STATUS_GOOD) { + DBG(1, "%s: rx err, %s\n", __func__, sane_strstatus(status)); + return status; + } + /* strncmp ignores diffent possible responses like escSS00000 and escSS02000 */ + if (strncmp((char *)KodakEsp_Ack,(char *)rxbuf,4)!=0) { + DBG (32, "No Ack received, Expected 0x%2x %2x %2x %2x... but got 0x%2x %2x %2x %2x...\n", + KodakEsp_Ack[0], KodakEsp_Ack[1], KodakEsp_Ack[2], KodakEsp_Ack[3],rxbuf[0], rxbuf[1], rxbuf[2], rxbuf[3]); + return SANE_STATUS_IO_ERROR; + } + + return status; +} + +static SANE_Status +kodakaio_txrx(KodakAio_Scanner *s, unsigned char *txbuf, unsigned char *rxbuf) +/* Sends 8 byte data to scanner and returns reply and appropriate status. */ +{ + SANE_Status status; + + k_send(s, txbuf, 8, &status); + if (status != SANE_STATUS_GOOD) { + DBG(1, "%s: tx err, %s\n", __func__, sane_strstatus(status)); + return status; + } + k_recv(s, rxbuf, 8, &status); + if (status != SANE_STATUS_GOOD) { + DBG(1, "%s: rx err, %s\n", __func__, sane_strstatus(status)); + return status; + } + return status; +} + +static SANE_Status +kodakaio_txrxack(KodakAio_Scanner *s, unsigned char *txbuf, unsigned char *rxbuf) +/* +Sends 8 byte data to scanner, gets 8 byte reply, checks reply is an Ack +and returns appropriate status +*/ +{ + SANE_Status status; + + k_send(s, txbuf, 8, &status); + if (status != SANE_STATUS_GOOD) { + DBG(1, "%s: tx err, %s\n", __func__, sane_strstatus(status)); + return status; + } + + k_recv(s, rxbuf, 8, &status); + if (status != SANE_STATUS_GOOD) { + DBG(1, "%s: rx err, %s\n", __func__, sane_strstatus(status)); + return status; + } + /* strncmp ignores different possible responses like escSS00000 and escSS02000 */ + if (strncmp((char *)KodakEsp_Ack,(char *)rxbuf,4)==0) { + if (rxbuf[4] == 0x01 && s->adf_loaded == SANE_FALSE) { + s->adf_loaded = SANE_TRUE; + DBG(5, "%s: Docs in ADF\n", __func__); + } + else if (rxbuf[4] != 0x01 && s->adf_loaded == SANE_TRUE) { + s->adf_loaded = SANE_FALSE; + DBG(5, "%s: ADF is empty\n", __func__); + } + } + else { + DBG (32, "No Ack received, Expected 0x%2x %2x %2x %2x... but got 0x%2x %2x %2x %2x...\n", + KodakEsp_Ack[0], KodakEsp_Ack[1], KodakEsp_Ack[2], KodakEsp_Ack[3],rxbuf[0], rxbuf[1], rxbuf[2], rxbuf[3]); + return SANE_STATUS_IO_ERROR; + } + + return status; +} + +/**************************************************************************** + * high-level communication commands + ****************************************************************************/ + +/* Start scan command */ +static SANE_Status +cmd_start_scan (SANE_Handle handle, size_t expect_total) +/* expect_total is the expected total no of bytes just for info */ +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + SANE_Status status = SANE_STATUS_GOOD; + unsigned char reply[8]; +/*send the start command here */ +/*adf added 20/2/12 */ + if (strcmp(source_list[s->val[OPT_SOURCE].w], ADF_STR) == 0) { /* adf */ + if (! s->adf_loaded) return SANE_STATUS_CANCELLED; /* was SANE_STATUS_NO_DOCS; */ + if (kodakaio_txrxack(s, KodakEsp_F, reply)!= SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; + } +/* moved from set params 20/2/12 */ + if (kodakaio_txrxack(s, KodakEsp_E, reply)!= SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; + + print_status(s, 5); + DBG(32, "at 942 starting the scan, expected total bytes %d\n",expect_total); + k_send(s, KodakEsp_Go, 8, &status); + + if (status != SANE_STATUS_GOOD) + DBG(8, "%s: Data NOT successfully sent\n", __func__); + else { + DBG(8, "%s: Data successfully sent\n", __func__); + s->scanning = SANE_TRUE; + } + return status; +} + +/* TODO: Do we have a command to CANCEL??? */ +static SANE_Status +cmd_cancel_scan (SANE_Handle handle) +{ +/* Changed to unlock here 20/2/12 */ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + unsigned char reply[8]; +/* adf added 20/2/12 */ + if (strcmp(source_list[s->val[OPT_SOURCE].w], ADF_STR) == 0) { /* adf */ + if (kodakaio_txrxack(s, KodakEsp_F, reply)!= SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; + if (kodakaio_txrxack(s, KodakEsp_UnLock, reply)!= SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; + DBG(2, "%s unlocking the scanner with adf F U\n", __func__); + } + else { + if (kodakaio_txrxack(s, KodakEsp_UnLock, reply)!= SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; + DBG(2, "%s unlocking the scanner U\n", __func__); + } + s->scanning = SANE_FALSE; + return SANE_STATUS_GOOD; +} + +static SANE_Status +cmd_get_scanning_parameters(SANE_Handle handle, + SANE_Frame *format, SANE_Int *depth, + SANE_Int *data_pixels, SANE_Int *pixels_per_line, + SANE_Int *lines) +{ +/* data_pixels is per line. +Old mc cmd read this stuff from the scanner. I don't think kodak can do that */ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + SANE_Status status = SANE_STATUS_GOOD; + /*unsigned char *txbuf, rxbuf[8]; + size_t buflen;*/ + NOT_USED (format); + NOT_USED (depth); + + DBG(8, "%s\n", __func__); + /* Calculate returned values */ + *lines = s->params.lines; + *pixels_per_line = s->params.pixels_per_line; + *data_pixels = s->params.pixels_per_line; + + DBG (8, "%s: data_pixels = 0x%x (%u), lines = 0x%x (%u), " + "pixels_per_line = 0x%x (%u)\n", __func__, + *data_pixels, *data_pixels, + *lines, *lines, + *pixels_per_line, *pixels_per_line); + + return status; +} + +static SANE_Status +cmd_set_color_curve(SANE_Handle handle, unsigned char col) +{ +/* sends the color curve data for one color*/ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + SANE_Status status = SANE_STATUS_GOOD; + unsigned char tx_col[8]; + unsigned char rx[8]; + unsigned char tx_curve[256]; + unsigned char i; + DBG(32, "%s: start\n", __func__); + tx_col[0]=0x1b; tx_col[1]='S'; tx_col[2]='K'; tx_col[3]=col; tx_col[4]=0; tx_col[5]=0; tx_col[6]=0; tx_col[7]=0; +/* linear curve now but could send tailor made curves in future */ + for(i=0;i<255;++i) tx_curve[i]=i; + k_send(s, tx_col, 8, &status); + if (status != SANE_STATUS_GOOD) { + DBG(32, "%s: tx err, %s\n", __func__, "curve command"); + return status; + } + k_send(s, tx_curve, 256, &status); + if (status != SANE_STATUS_GOOD) { + DBG(32, "%s: tx err, %s\n", __func__, "curve data"); + return status; + } + if (kodakaio_expect_ack(s, rx) != SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; + DBG(10, "%s: sent curve OK, \n", __func__); + return status; +} + +/* Set scanning parameters command low level */ +static SANE_Status +cmd_set_scanning_parameters(SANE_Handle handle, + int resolution, + int tl_x, int tl_y, int width, int height, unsigned char source) + +/* NB. here int tl_x, int tl_y, int width, int height are in DPI units, not optres units! */ +/* sends params to scanner, but should we store them too? */ +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + SANE_Status status = SANE_STATUS_GOOD; + unsigned char tx_S[8]; + unsigned char tx_dpi[8]; + unsigned char tx_topleft[8]; + unsigned char tx_widthheight[8]; + unsigned char bufread[8]; + int i; + +/*don't know the purpose of F yet. windows USB repeated 4 x why? does it affect the colour balance?*/ + DBG(8, "%s\n", __func__); + for(i=0;i<4;++i) { + kodakaio_txrxack(s, KodakEsp_F, bufread); + sleep(1); + } +/* kodakaio_txrxack(s, KodakEsp_F, bufread); for net, just once */ + +/* Source? bed /ADF */ + tx_S[0]=0x1b; tx_S[1]='S'; tx_S[2]='S'; tx_S[3]=source; tx_S[4]=0; tx_S[5]=0; tx_S[6]=0; tx_S[7]=0; + kodakaio_txrxack(s, tx_S, bufread); + +/* Compression */ + kodakaio_txrxack(s, KodakEsp_Comp, bufread); + +/* DPI resolution */ + tx_dpi[0]=0x1b; + tx_dpi[1]='S'; + tx_dpi[2]='D'; + tx_dpi[3]=resolution & 0xff; + tx_dpi[4]=(resolution >> 8) & 0xff; + tx_dpi[5]=resolution & 0xff; + tx_dpi[6]=(resolution >> 8) & 0xff; + tx_dpi[7]=0; + kodakaio_txrxack(s, tx_dpi, bufread); + +/* colour curves don't seem to be sent for usb preview +but it seems to do no harm to send them */ + cmd_set_color_curve(s, 'R'); + cmd_set_color_curve(s, 'G'); + cmd_set_color_curve(s, 'B'); + + +/* Origin top left s->tl_x and s->tl_y are in optres units +this command needs actual DPI units*/ + DBG(8, "%s: left (DPI)=%d, top (DPI)=%d\n", __func__, tl_x , tl_y); + + tx_topleft[0]=0x1b; + tx_topleft[1]='S'; + tx_topleft[2]='O'; + tx_topleft[3]=(tl_x) & 0xff; + tx_topleft[4]=((tl_x) >> 8) & 0xff; + tx_topleft[5]=(tl_y) & 0xff; + tx_topleft[6]=((tl_y) >> 8) & 0xff; + tx_topleft[7]=0; + kodakaio_txrxack(s, tx_topleft, bufread); + +/* Z width height note the s->width and s->height are in optres units +this command needs actual DPI units*/ + tx_widthheight[0]=0x1b; + tx_widthheight[1]='S'; + tx_widthheight[2]='Z'; + tx_widthheight[3]=(width) & 0xff; + tx_widthheight[4]=((width) >> 8) & 0xff; + tx_widthheight[5]=(height) & 0xff; + tx_widthheight[6]=((height) >> 8) & 0xff; + tx_widthheight[7]=0; + kodakaio_txrxack(s, tx_widthheight, bufread); + + if (status != SANE_STATUS_GOOD) + DBG(1, "%s: Data NOT successfully sent\n", __func__); + else + DBG(8, "%s: Data successfully sent\n", __func__); + return status; +} + +int +cmparray (unsigned char *array1, unsigned char *array2, size_t len) +{ +/* compares len bytes of the arrays returns 0 if they match +returns the first missmatch position if they don't match */ +unsigned int i; + for(i=0; i5 seconds to initialize. Is this needed for kodak?*/ + K_Request_Timeout = K_Scan_Data_Timeout; + sanei_usb_set_timeout (K_Scan_Data_Timeout); + bytecount = k_recv(s, buf, *len, &status); + *len = bytecount; + s->bytes_unread -= bytecount; + + /* try activating this 22/2/12 + only compare 4 bytes because we sometimes get escSS02.. or escSS00.. */ + if (cmparray(buf,KodakEsp_Ack,4) == 0) status = SANE_STATUS_EOF; + + K_Request_Timeout = oldtimeout; + sanei_usb_set_timeout (oldtimeout); + + if (status == SANE_STATUS_GOOD) + DBG(min(8,DBG_READ), "%s: Image data successfully read %ld bytes, %ld bytes unread\n", __func__, (long) bytecount, (long) s->bytes_unread); + else if (status == SANE_STATUS_EOF) + DBG(min(8,DBG_READ), "%s: Image data read ended %ld bytes, %ld bytes unread\n", __func__, (long) bytecount, (long) s->bytes_unread); + else + DBG(min(8,DBG_READ), "%s: Image data read failed or ended %ld bytes, %ld bytes unread\n", __func__, (long) bytecount, (long) s->bytes_unread); + + return status; +} + + + +/**************************************************************************** + * kodakaio backend high-level operations + ****************************************************************************/ + +static void +k_dev_init(Kodak_Device *dev, const char *devname, int conntype) +{ + DBG(5, "%s for %s\n", __func__,devname); + + dev->name = NULL; + dev->model = NULL; + dev->connection = conntype; + dev->sane.name = devname; + dev->sane.model = NULL; + dev->sane.type = "flatbed scanner"; + dev->sane.vendor = "Kodak"; + dev->cap = &kodakaio_cap[CAP_DEFAULT]; +} + + +static SANE_Status +k_set_model(KodakAio_Scanner * s, const char *model, size_t len) +{ + unsigned char *buf; + unsigned char *p; + struct Kodak_Device *dev = s->hw; + + if (len<1) return SANE_STATUS_INVAL; /* to handle missing model */ + + 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; +} + +static void +k_set_device (SANE_Handle handle, SANE_Word device) +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + Kodak_Device *dev = s->hw; + int n; + + DBG(1, "%s: 0x%x\n", __func__, device); + + for (n = 0; n < NELEMS (kodakaio_cap); n++) { + if (kodakaio_cap[n].id == device) + break; + } + if (n < NELEMS(kodakaio_cap)) { + dev->cap = &kodakaio_cap[n]; + } else { + dev->cap = &kodakaio_cap[CAP_DEFAULT]; + DBG(1, " unknown device 0x%x, using default %s\n", + device, dev->cap->model); + } + k_set_model (s, dev->cap->model, strlen (dev->cap->model)); + +} + +static SANE_Status +k_discover_capabilities(KodakAio_Scanner *s) +{ + SANE_Status status = SANE_STATUS_GOOD; + Kodak_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; + /* TODO: How can I check for existence of an ADF??? */ + if (dev->cap->ADF == SANE_TRUE) { + *source_list_add++ = ADF_STR; + DBG(5, "%s: added adf to list\n", __func__); + } + + /* TODO: Is there any capability that we can extract from the + * device by some scanner command? So far, it looks like + * the device does not support any reporting. + */ + + dev->x_range = &dev->cap->fbf_x_range; + dev->y_range = &dev->cap->fbf_y_range; + + DBG(5, " x-range: %f %f\n", SANE_UNFIX(dev->x_range->min), SANE_UNFIX(dev->x_range->max)); + DBG(5, " y-range: %f %f\n", SANE_UNFIX(dev->y_range->min), SANE_UNFIX(dev->y_range->max)); + + DBG(5, "End of %s, status:%s\n", __func__, sane_strstatus(status)); + *source_list_add = NULL; /* add end marker to source list */ + return status; +} + +static SANE_Status +k_setup_block_mode (KodakAio_Scanner *s) +{ +/* works for USB and for net */ + s->block_len = MAX_BLOCK_SIZE; + s->bytes_unread = s->data_len; + s->counter = 0; + s->bytes_read_in_line = 0; + if (s->line_buffer) + free(s->line_buffer); + s->line_buffer = malloc(s->scan_bytes_per_line); + if (s->line_buffer == NULL) { + DBG(1, "out of memory (line %d)\n", __LINE__); + return SANE_STATUS_NO_MEM; + } + + DBG (10, " %s: Setup block mode - scan_bytes_per_line=%d, pixels_per_line=%d, depth=%d, data_len=%x, block_len=%x, blocks=%d, last_len=%x\n", + __func__, s->scan_bytes_per_line, s->params.pixels_per_line, s->params.depth, s->data_len, s->block_len, s->blocks, s->last_len); + return SANE_STATUS_GOOD; +} + +/* Call the commands to set scanning parameters +In the Kodak Aio the parameters are: +(x1b,"S","F",0,0,0,0,0) +(x1b,"S","S",1,0,0,0,0) +#It looks like the 4th param of the C command is compression 1=compress, 0=no compression +#1st (or 3rd) param could be channels, 2nd could be bits per channel +(x1b,"S","C",3,8,3,0,0) #3,8,3,1,0) was what the kodak software used +(x1b,"S","D",LowByte(Res),HighByte(Res),LowByte(Res),HighByte(Res),0) #resolution in DPI +SendColour(tcpCliSock,"R") +SendColour(tcpCliSock,"G") +SendColour(tcpCliSock,"B") +(x1b,"S","O",LowByte(x0*Res),HighByte(x0*Res),LowByte(y0*Res),HighByte(y0*Res),0) #top left in pixels +(x1b,"S","Z",LowByte(x1*Res),HighByte(x1*Res),LowByte(y1*Res),HighByte(y1*Res),0) #bot right in pixels +(x1b,"S","E",1,0,0,0,0) + +*/ +static SANE_Status +k_lock_scanner (KodakAio_Scanner * s) +{ + SANE_Status status; + int i; + unsigned char reply[8]; + + if(kodakaio_txrx(s, KodakEsp_V, reply)!= SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; + + /* handle surplus Acks in queue due to any previous errors */ + for (i=0;i<4 && strncmp((char *) reply, (char *) KodakEsp_v, 3)!=0;++i) { + k_recv(s, reply, 8, &status); + if (status != SANE_STATUS_GOOD){ + DBG(1, "%s: rx err, %s\n", __func__, sane_strstatus(status)); + return status; + } + } + + DBG(2, "%s locking the scanner V L\n", __func__); + if (kodakaio_txrxack(s, KodakEsp_Lock, reply)!= SANE_STATUS_GOOD) return SANE_STATUS_IO_ERROR; + return SANE_STATUS_GOOD; +} + +static SANE_Status +k_set_scanning_parameters(KodakAio_Scanner * s) +{ + SANE_Status status; + unsigned char rs, source; + SANE_Int scan_pixels_per_line = 0; + int dpi, optres; + + dpi = s->val[OPT_RESOLUTION].w; + optres = s->hw->cap->optical_res; + + /* Find the resolution in the res list and assign the index (rs) */ + for (rs=0; rs < s->hw->cap->res_list_size; rs++ ) { + if ( dpi == s->hw->cap->res_list[rs] ) + break; + } + + /* ADF used? */ + if (strcmp(source_list[s->val[OPT_SOURCE].w], ADF_STR) == 0) { + source = 0x00; + } else { + source = 0x01; + } + + + /* TODO: Any way to set PREVIEW??? */ + + /* Remaining bytes unused */ + status = cmd_set_scanning_parameters(s, dpi, + s->left * dpi / optres, s->top * dpi / optres, /* top/left start (dpi units)*/ + s->params.pixels_per_line, s->params.lines, /* extent was s->width, s->height*/ + source); /* source */ + + if (status != SANE_STATUS_GOOD) + DBG (1, "%s: Command cmd_set_scanning_parameters failed, %s\n", + __func__, sane_strstatus(status)); + + /* Now query the scanner for the current image parameters */ + status = cmd_get_scanning_parameters (s, + &s->params.format, &s->params.depth, + &scan_pixels_per_line, + &s->params.pixels_per_line, &s->params.lines); + if (status != SANE_STATUS_GOOD) { + DBG (1, "%s: Command cmd_get_scanning_parameters failed, %s\n", + __func__, sane_strstatus(status)); + return status; + } + + /* Calculate how many bytes are really used per line */ + s->params.bytes_per_line = ceil (s->params.pixels_per_line * s->params.depth / 8.0); + if (s->val[OPT_MODE].w == MODE_COLOR) + s->params.bytes_per_line *= 3; + + /* Calculate how many bytes per line will be returned by the scanner. + magicolor needed this because it uses padding. Scan bytes per line != image bytes per line + * The values needed for this are returned by get_scanning_parameters */ + s->scan_bytes_per_line = ceil (scan_pixels_per_line * s->params.depth / 8.0); +/* magicolor had optional color. kodak always scans in colour */ + s->scan_bytes_per_line *= 3; + s->data_len = s->params.lines * s->scan_bytes_per_line; + +/* k_setup_block_mode at the start of each page for adf to work */ + status = k_setup_block_mode (s); + if (status != SANE_STATUS_GOOD) + DBG (1, "%s: Command k_setup_block_mode failed, %s\n", + __func__, sane_strstatus(status)); + + DBG (18, "%s: bytes_read_in_line: %d\n", __func__, s->bytes_read_in_line); + return status; +} + +static SANE_Status +k_check_adf(KodakAio_Scanner * s) +{ +/* 20/2/12 detect paper in the adf? acknowledge esc S S 00 01.. ?*/ + + if (! s->adf_loaded) { + DBG(5, "%s: NO DOCS\n", __func__); + return SANE_STATUS_NO_DOCS; + } + else { + + /* TODO: Check for jam in ADF */ + DBG(5, "%s: DOCS IN ADF\n", __func__); + return SANE_STATUS_GOOD; + } +} + +static SANE_Status +k_scan_finish(KodakAio_Scanner * s) +{ + SANE_Status status = SANE_STATUS_GOOD; + DBG(5, "%s\n", __func__); + + /* If we have not yet read all data, cancel the scan */ + if (s->buf && !s->eof) + status = cmd_cancel_scan (s); + + if (s->line_buffer) + free (s->line_buffer); + s->line_buffer = NULL; + free(s->buf); + s->buf = s->end = s->ptr = NULL; + + return status; +} + + +static void +mc_copy_image_data(KodakAio_Scanner * s, SANE_Byte * data, SANE_Int max_length, + SANE_Int * length) +/* copies the read data from s->line_buffer to the position in data pointer to by s->ptr +uncompressed data is RRRR...GGGG...BBBB per line */ +{ + /* int rc; */ + + DBG (min(18,DBG_READ), "%s: bytes_read in line: %d\n", __func__, s->bytes_read_in_line); + SANE_Int bytes_available; +/* scan_pixels_per_line = s->scan_bytes_per_line/3; */ + *length = 0; + + while ((max_length >= s->params.bytes_per_line) && (s->ptr < s->end)) { + SANE_Int bytes_to_copy = s->scan_bytes_per_line - s->bytes_read_in_line; + /* First, fill the line buffer for the current line: */ + bytes_available = (s->end - s->ptr); + /* Don't copy more than we have buffer and available */ + if (bytes_to_copy > bytes_available) + bytes_to_copy = bytes_available; + + if (bytes_to_copy > 0) { + memcpy (s->line_buffer + s->bytes_read_in_line, s->ptr, bytes_to_copy); + s->ptr += bytes_to_copy; + s->bytes_read_in_line += bytes_to_copy; + } + + /* We have filled as much as possible of the current line + * with data from the scanner. If we have a complete line, + * copy it over. + line points to the current byte in the input s->line_buffer + data points to the output buffer*/ + if ((s->bytes_read_in_line >= s->scan_bytes_per_line) && + (s->params.bytes_per_line <= max_length)) + { + SANE_Int i; + SANE_Byte *line = s->line_buffer; + *length += s->params.bytes_per_line; + + for (i=0; i< s->params.pixels_per_line; ++i) { + + if (s->val[OPT_MODE].w == MODE_COLOR){ + /*interlace */ + *data++ = 255-line[0]; /* red */ + *data++ = 255-line[s->params.pixels_per_line]; /* green */ + *data++ = 255-line[2 * s->params.pixels_per_line]; /* blue */ + /*line++;*/ + } + + else { /* grey */ + /*Average*/ + *data++ = (255-line[0] + +255-line[s->params.pixels_per_line] + +255-line[2 * s->params.pixels_per_line]) + / 3; + /*line++;*/ + } + + line++; + } +/*debug file The same for color or grey because the scan is colour */ + if (RawScan != NULL) { + for (i=0; i< s->scan_bytes_per_line; ++i) fputc(s->line_buffer[i],RawScan); + } + max_length -= s->params.bytes_per_line; + s->bytes_read_in_line -= s->scan_bytes_per_line; + } + } +} + + +static void +k_copy_image_data(KodakAio_Scanner * s, SANE_Byte * data, SANE_Int max_length, + SANE_Int * length) +/* copies the read data from s->line_buffer to the position in data pointer to by s->ptr +uncompressed data is RRRR...GGGG...BBBB per line */ +{ + + DBG (min(18,DBG_READ), "%s: bytes_read in line: %d\n", __func__, s->bytes_read_in_line); + SANE_Int bytes_available; +/* scan_pixels_per_line = s->scan_bytes_per_line/3; */ + *length = 0; + + while ((max_length >= s->params.bytes_per_line) && (s->ptr < s->end)) { + SANE_Int bytes_to_copy = s->scan_bytes_per_line - s->bytes_read_in_line; + /* First, fill the line buffer for the current line: */ + bytes_available = (s->end - s->ptr); + /* Don't copy more than we have buffer and available */ + if (bytes_to_copy > bytes_available) + bytes_to_copy = bytes_available; + + if (bytes_to_copy > 0) { + memcpy (s->line_buffer + s->bytes_read_in_line, s->ptr, bytes_to_copy); + s->ptr += bytes_to_copy; + s->bytes_read_in_line += bytes_to_copy; + } + + /* We have filled as much as possible of the current line + * with data from the scanner. If we have a complete line, + * copy it over. + line points to the current byte in the input s->line_buffer + data points to the output buffer*/ + if ((s->bytes_read_in_line >= s->scan_bytes_per_line) && + (s->params.bytes_per_line <= max_length)) + { + SANE_Int i; + SANE_Byte *line = s->line_buffer; + *length += s->params.bytes_per_line; + + for (i=0; i< s->params.pixels_per_line; ++i) { + + if (s->val[OPT_MODE].w == MODE_COLOR){ + /*interlace */ + *data++ = 255-line[0]; /*red */ + *data++ = 255-line[s->params.pixels_per_line]; /*green */ + *data++ = 255-line[2 * s->params.pixels_per_line]; /*blue */ + + } + + else { /* grey */ + /*Average*/ + *data++ = (255-line[0] + +255-line[s->params.pixels_per_line] + +255-line[2 * s->params.pixels_per_line]) + / 3; + } + line++; + } +/*debug file The same for color or grey because the scan is colour */ + if (RawScan != NULL) { + for (i=0; i< s->scan_bytes_per_line; ++i) fputc(s->line_buffer[i],RawScan); + } + max_length -= s->params.bytes_per_line; + s->bytes_read_in_line -= s->scan_bytes_per_line; + } + } +} + +static SANE_Status +k_init_parametersta(KodakAio_Scanner * s) +{ + int dpi, optres; + /* struct mode_param *mparam; */ + + DBG(5, "%s\n", __func__); + + memset(&s->params, 0, sizeof(SANE_Parameters)); + + dpi = s->val[OPT_RESOLUTION].w; + optres = s->hw->cap->optical_res; + + /* mparam = &mode_params[s->val[OPT_MODE].w];does this get used? */ + + if (SANE_UNFIX(s->val[OPT_BR_Y].w) == 0 || + SANE_UNFIX(s->val[OPT_BR_X].w) == 0) + return SANE_STATUS_INVAL; + + /* TODO: Use OPT_RESOLUTION or fixed 600dpi for left/top/width/height? */ + s->left = ((SANE_UNFIX(s->val[OPT_TL_X].w) / MM_PER_INCH) * optres) + 0.5; + + s->top = ((SANE_UNFIX(s->val[OPT_TL_Y].w) / MM_PER_INCH) * optres) + 0.5; + + /* width in pixels */ + s->width = + ((SANE_UNFIX(s->val[OPT_BR_X].w - + s->val[OPT_TL_X].w) / MM_PER_INCH) * optres) + 0.5; + + s->height = + ((SANE_UNFIX(s->val[OPT_BR_Y].w - + s->val[OPT_TL_Y].w) / MM_PER_INCH) * optres) + 0.5; + DBG(8, "%s: s->width = %d, s->height = %d optres units\n", + __func__, s->width, s->height); + + s->params.pixels_per_line = s->width * dpi / optres + 0.5; + s->params.lines = s->height * dpi / optres + 0.5; + + + DBG(8, "%s: resolution = %d, preview = %d\n", + __func__, dpi, s->val[OPT_PREVIEW].w); + + DBG(8, "%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)); + + /* + * 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 { + DBG(10, "%s: setting depth = s->val[OPT_BIT_DEPTH].w = %d\n", __func__,s->val[OPT_BIT_DEPTH].w); + s->params.depth = s->val[OPT_BIT_DEPTH].w; + } + s->params.last_frame = SANE_TRUE; + s->params.bytes_per_line = 3 * ceil (s->params.depth * s->params.pixels_per_line / 8.0); + +/* kodak only scans in color and conversion to grey is done in the driver + s->params.format = SANE_FRAME_RGB; */ + DBG(10, "%s: s->val[OPT_MODE].w = %d (color is %d)\n", __func__,s->val[OPT_MODE].w, MODE_COLOR); + if (s->val[OPT_MODE].w == MODE_COLOR) s->params.format = SANE_FRAME_RGB; + else s->params.format = SANE_FRAME_GRAY; + + DBG(8, "%s: format=%d, bytes_per_line=%d, lines=%d\n", __func__, s->params.format, s->params.bytes_per_line, s->params.lines); + return (s->params.lines > 0) ? SANE_STATUS_GOOD : SANE_STATUS_INVAL; +} + +static SANE_Status +k_start_scan(KodakAio_Scanner * s) +{ + SANE_Status status; + + status = cmd_start_scan (s, s->data_len); + if (status != SANE_STATUS_GOOD ) { + DBG (1, "%s: starting the scan failed (%s)\n", __func__, sane_strstatus(status)); + } + return status; +} + + + +static SANE_Status +k_read(struct KodakAio_Scanner *s) +{ +/* monitors progress of blocks and calls cmd_read_data to get each block +you don't know how many blocks there will be in advance because their size is determined by the scanner*/ + SANE_Status status = SANE_STATUS_GOOD; + size_t buf_len = 0; + + /* did we passed everything we read to sane? */ + if (s->ptr == s->end) { + + if (s->eof) + return SANE_STATUS_EOF; + + s->counter++; +/* buf_len = s->block_len; + this is incorrect we should count bytes not blocks + if (s->counter == s->blocks && s->last_len) + buf_len = s->last_len; */ + if (s->bytes_unread >= s->block_len) + buf_len = s->block_len; + else + buf_len = s->bytes_unread; + + DBG(min(18,DBG_READ), "%s: block %d, size %lu\n", __func__, + s->counter, (unsigned long) buf_len); + + /* receive image data + error code */ + status = cmd_read_data (s, s->buf, &buf_len); + if (status != SANE_STATUS_GOOD && status != SANE_STATUS_EOF) { /* was just GOOD 20/2/12 */ + DBG (1, "%s: Receiving image data failed (%s)\n", + __func__, sane_strstatus(status)); + cmd_cancel_scan(s); + return status; + } + + DBG(min(18,DBG_READ), "%s: successfully read %lu bytes\n", __func__, (unsigned long) buf_len); + + if (s->bytes_unread > 0) { + if (s->canceling) { + cmd_cancel_scan(s); + return SANE_STATUS_CANCELLED; + } + } else + s->eof = SANE_TRUE; + + s->end = s->buf + buf_len; + s->ptr = s->buf; + } + else { + DBG(min(18,DBG_READ), "%s: data left in buffer\n", __func__); + } + return status; +} + +/**************************************************************************** + * SANE API implementation (high-level functions) + ****************************************************************************/ + +static struct KodakaioCap * +get_device_from_identification (char *ident) +{ + int n; + for (n = 0; n < NELEMS (kodakaio_cap); n++) { + + if (strcmp (kodakaio_cap[n].model, ident)==0) { + DBG(50, "matched <%s> & <%s>\n", kodakaio_cap[n].model, ident); + return &kodakaio_cap[n]; + } + else { + DBG(60, "not <%s> & <%s>\n", kodakaio_cap[n].model, ident); + } + } + return NULL; +} + + +/* + * close_scanner() + * + * Close the open scanner. Depending on the connection method, a different + * close function is called. + */ +static void +close_scanner(KodakAio_Scanner *s) +{ + DBG(7, "%s: fd = %d\n", __func__, s->fd); + + if (s->fd == -1) + return; + + k_scan_finish(s); + if (s->hw->connection == SANE_KODAKAIO_NET) { + sanei_kodakaio_net_close(s); + sanei_tcp_close(s->fd); + } else if (s->hw->connection == SANE_KODAKAIO_USB) { + sanei_usb_close(s->fd); + } + + s->fd = -1; +} + +static SANE_Bool +split_scanner_name (const char *name, char * IP, unsigned int *model) +{ + const char *device = name; + const char *qm; + *model = 0; + /* cut off leading net: */ + if (strncmp(device, "net:", 4) == 0) + device = &device[4]; + + qm = strchr(device, '?'); + if (qm != NULL) { + size_t len = qm-device; + strncpy (IP, device, len); + IP[len] = '\0'; + qm++; + if (strncmp(qm, "model=", 6) == 0) { + qm += 6; + if (!sscanf(qm, "0x%x", model)) + sscanf(qm, "%x", model); + } + } else { + strcpy (IP, device); + } + return SANE_TRUE; +} + +/* + * open_scanner() + * + * Open the scanner device. Depending on the connection method, + * different open functions are called. + */ + +static SANE_Status +open_scanner(KodakAio_Scanner *s) +{ + SANE_Status status = 0; + + DBG(7, "%s: %s\n", __func__, s->hw->sane.name); + + if (s->fd != -1) { + DBG(7, "scanner is already open: fd = %d\n", s->fd); + return SANE_STATUS_GOOD; /* no need to open the scanner */ + } + + if (s->hw->connection == SANE_KODAKAIO_NET) { + /* device name has the form net:ipaddr?model=... */ + char IP[1024]; + unsigned int model = 0; + if (!split_scanner_name (s->hw->sane.name, IP, &model)) + return SANE_STATUS_INVAL; + DBG(7, "split_scanner_name OK model=0x%x\n",model); +/* normal with IP */ + status = sanei_tcp_open(IP, 9101, &s->fd); /* (host,port,file pointer) */ + + if (status != SANE_STATUS_GOOD ) DBG(1, "Is network scanner switched on?\n"); + + if (model>0) + k_set_device (s, model); + if (status == SANE_STATUS_GOOD) { + status = sanei_kodakaio_net_open (s); + } +else DBG(7, "status was not good at 1829\n"); + + + } else if (s->hw->connection == SANE_KODAKAIO_USB) { + DBG(7, "trying to open usb\n"); + status = sanei_usb_open(s->hw->sane.name, &s->fd); + if (s->hw->cap->out_ep>0) + sanei_usb_set_endpoint (s->fd, + USB_DIR_OUT | USB_ENDPOINT_TYPE_BULK, s->hw->cap->out_ep); + if (s->hw->cap->in_ep>0) + sanei_usb_set_endpoint (s->fd, + USB_DIR_IN | USB_ENDPOINT_TYPE_BULK, s->hw->cap->in_ep); + } + + 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) + DBG(1, "%s open failed: %s\n", s->hw->sane.name, + sane_strstatus(status)); + else + DBG(3, "scanner opened\n"); +/* add check here of usb properties? */ +/*sanei_usb_get_descriptor( SANE_Int dn, struct sanei_usb_dev_descriptor *desc );*/ + + + return status; +} + +static SANE_Status +detect_usb(struct KodakAio_Scanner *s) +{ + SANE_Status status; + SANE_Word vendor, product; + int i, numIds; + SANE_Bool is_valid; + + /* 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. + */ + + status = sanei_usb_get_vendor_product(s->fd, &vendor, &product); + if (status != SANE_STATUS_GOOD) { + DBG(1, "the device cannot be verified - will continue\n"); + return SANE_STATUS_GOOD; + } + + /* check the vendor ID to see if we are dealing with a kodak device */ + if (vendor != SANE_KODAKAIO_VENDOR_ID) { + /* this is not a supported vendor ID */ + DBG(1, "not a Kodak Aio device at %s (vendor id=0x%x)\n", + s->hw->sane.name, vendor); + return SANE_STATUS_INVAL; + } + + numIds = kodakaio_getNumberOfUSBProductIds(); + is_valid = SANE_FALSE; + i = 0; + + /* check all known product IDs to verify that we know + * about the device */ + while (i != numIds && !is_valid) { + /* if (product == kodakaio_usb_product_ids[i]) */ + if (product == kodakaio_cap[i].id) + is_valid = SANE_TRUE; + i++; + } + + if (is_valid == SANE_FALSE) { + DBG(1, "the device at %s is not a supported (product id=0x%x)\n", + s->hw->sane.name, product); + return SANE_STATUS_INVAL; + } + + DBG(2, "found valid Kodak Aio scanner: 0x%x/0x%x (vendorID/productID)\n", + vendor, product); + k_set_device(s, product); /* added 21/12/11 to try and get a name for the device */ + + return SANE_STATUS_GOOD; +} + +/* + * used by attach* and sane_get_devices + * a ptr to a single-linked list of Kodak_Device structs + * a ptr to a null term array of ptrs to SANE_Device structs + */ +static int num_devices; /* number of scanners attached to backend */ +static Kodak_Device *first_dev; /* first scanner in list */ +static const SANE_Device **devlist = NULL; + +static struct KodakAio_Scanner * +scanner_create(struct Kodak_Device *dev, SANE_Status *status) +{ + struct KodakAio_Scanner *s; + + s = malloc(sizeof(struct KodakAio_Scanner)); + if (s == NULL) { + *status = SANE_STATUS_NO_MEM; + return NULL; + } + + memset(s, 0x00, sizeof(struct KodakAio_Scanner)); + + s->fd = -1; + s->hw = dev; + + return s; +} + +static struct KodakAio_Scanner * +device_detect(const char *name, int type, SANE_Status *status) +{ + struct KodakAio_Scanner *s; + struct Kodak_Device *dev; + + /* try to find the device in our list */ + for (dev = first_dev; dev; dev = dev->next) { + if (strcmp(dev->sane.name, name) == 0) { + dev->missing = 0; + DBG (10, "%s: Device %s already attached!\n", __func__, + name); + return scanner_create(dev, status); + } + } + + if (type == SANE_KODAKAIO_NODEV) { + *status = SANE_STATUS_INVAL; + return NULL; + } + + /* alloc and clear our device structure */ + dev = malloc(sizeof(*dev)); + if (!dev) { + *status = SANE_STATUS_NO_MEM; + return NULL; + } + memset(dev, 0x00, sizeof(struct Kodak_Device)); + + s = scanner_create(dev, status); + if (s == NULL) + return NULL; + + k_dev_init(dev, name, type); + + *status = open_scanner(s); + if (*status != SANE_STATUS_GOOD) { + free(s); + free(dev); + return NULL; + } + + /* from now on, close_scanner() must be called */ + + /* USB requires special care */ + if (dev->connection == SANE_KODAKAIO_USB) { + *status = detect_usb(s); + } + + if (*status != SANE_STATUS_GOOD) + goto close; + + /* set name and model (if not already set) */ + if (dev->model == NULL) + k_set_model(s, "generic", 7); + + dev->name = strdup(name); + dev->sane.name = dev->name; + + /* do we need to discover capabilities here? */ + *status = k_discover_capabilities(s); + if (*status != SANE_STATUS_GOOD) + goto close; + + if (source_list[0] == NULL || dev->cap->dpi_range.min == 0) { + DBG(1, "something is wrong in the discovery process, aborting.\n"); + *status = SANE_STATUS_IO_ERROR; + goto close; + } + + /* add this scanner to the device list */ + num_devices++; + dev->missing = 0; + dev->next = first_dev; + first_dev = dev; + + return s; + + close: + close_scanner(s); + free(dev); + free(s); + return NULL; +} + + +/* Use the cups autodetection system to detect devices */ + +/* extract_from_id copies the the string following the token (eg "MDL:") in device_id and terminated by term_char as a null terminated string in result +returns 0 if OK, 1 if not OK */ +int +extract_from_id(char *device_id, const char *token, const char term_char, char *result, size_t result_size) +{ + char *start, *end, *limit; + limit = device_id + strlen(device_id); + /* find position of token in device_id */ + start = strstr(device_id, token); + if (start == NULL) { + return 1; + } + else { + DBG(1,"found %s \n", start); + } + start += strlen(token); + + for(end = start;end < limit && *end != term_char;++end); + if (end >= limit) { + DBG(1,"did not find ;\n"); + return 1; + } + if (end >= start + result_size) { + DBG(1,"size %d >= result_size %d ;\n", end-start, result_size); + return 1; + } + /* copy string to result */ + memcpy(result, start, end-start); + result[end-start]=0; + return 0; +} + +int +probably_supported(char *model) +{ +/* returns zero if the model matches the possible match strings */ + unsigned char *ThisToken; + char token[512]; + int i; + /* extract tokens from the match string */ + ThisToken = SupportedMatchString; + i=0; + while (*ThisToken != 0) + { + if (*ThisToken == ';' || i == sizeof(token)) + { + token[i] = 0; + if (strstr(model, token) != NULL) { + return 0; + } + i=0; + } + else + { + token[i]=*ThisToken; + ++i; + } + ++ThisToken; + } + DBG(1,"probably not a supported device\n"); + return 1; +} + +#if HAVE_CUPS +/* ProcessDevice is called by cupsGetDevices to process each discovered device in turn */ +void +ProcessDevice(const char *device_class, const char *device_id, const char *device_info, const char *device_make_and_model, const char *device_uri, const char *device_location, void *user_data) +{ + NOT_USED(device_class); + NOT_USED(device_info); + NOT_USED(device_make_and_model); + NOT_USED(device_location); + NOT_USED(user_data); + + char *resolved; /*, *start; */ + char device_model[512], ip_addr[512], uribuffer[512]; + struct KodakaioCap *cap; + + DBG(10,"device_id = <%s>\n", device_id); + +/* extract the model string from the device_id */ + if(extract_from_id(device_id, "MDL:", ';', device_model, sizeof(device_model)) != 0) { + DBG(1,"could not find %s in %s\n", "MDL:", device_id); + return; + } +/* check if it is a model likely to be supported: "KODAK ESP" or "KODAK HERO" */ + + DBG(1,"look up model <%s>\n", device_model); +/* check the model against the cap data to see if this is a recognised device */ + if (probably_supported(device_model) != 0) { + return; + } + cap = get_device_from_identification(device_model); + if (cap == NULL) { + return; + } + DBG(2, "%s: Found autodiscovered device: %s (type 0x%x)\n", __func__, cap->model, cap->id); + +/* DBG(1, "using cupsBackendDeviceURI\n"); + resolved = cupsBackendDeviceURI(&device_uri); produces output on stderr */ + +/* lower level attempt +_httpResolveURI is in http-support.c http-private.h +options = _HTTP_RESOLVE_STDERR causes the std err output +options |= _HTTP_RESOLVE_FQDN ? not sure if or when required +options = 0 seems to work */ + DBG(5, "using _httpResolveURI\n"); + resolved = _httpResolveURI(device_uri, uribuffer, sizeof(uribuffer), 0, NULL, NULL); + + /* extract the IP address */ + if(extract_from_id(resolved, "socket://", ':', ip_addr, sizeof(ip_addr)) != 0) { + DBG(1,"could not find %s in %s\n", "socket://", resolved); + return; + } + else { + DBG(1,"attach %s\n", resolved); + attach_one_net (ip_addr, cap->id); + } +} + + +static int +kodak_network_discovery(const char*host) +/* If host = NULL do autodiscovery. If host != NULL try to verify the model +First version only does autodiscovery */ +{ + NOT_USED(host); + void * Dummy; + ipp_status_t reply; + + reply = cupsGetDevices(CUPS_HTTP_DEFAULT, CUPS_TIMEOUT_DEFAULT, + "dnssd", CUPS_EXCLUDE_NONE, ProcessDevice, Dummy); + if(reply != IPP_OK) printf("Failed cupsGetDevices\n"); + + return 0; +} +#endif + +static SANE_Status +attach(const char *name, int type) +{ + SANE_Status status; + KodakAio_Scanner *s; + + DBG(7, "%s: devname = %s, type = %d\n", __func__, name, type); + + s = device_detect(name, type, &status); + if(s == NULL) + return status; + + close_scanner(s); + free(s); + return status; +} + +SANE_Status +attach_one_usb(const char *dev) +{ + DBG(7, "%s: dev = %s\n", __func__, dev); + return attach(dev, SANE_KODAKAIO_USB); +} + +static SANE_Status +attach_one_net(const char *dev, unsigned int model) +{ + char name[1024]; + + DBG(7, "%s: dev = %s\n", __func__, dev); + if (model > 0) { + snprintf(name, 1024, "net:%s?model=0x%x", dev, model); + } else { + snprintf(name, 1024, "net:%s", dev); + } + + return attach(name, SANE_KODAKAIO_NET); +} + +static SANE_Status +attach_one_config(SANEI_Config __sane_unused__ *config, const char *line) +{ + int vendor, product, timeout; + + int len = strlen(line); + + 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 */ + + int numIds = kodakaio_getNumberOfUSBProductIds(); + + if (vendor != SANE_KODAKAIO_VENDOR_ID) { + DBG(7, "Wrong vendor: numIds = %d, vendor = %d\n", numIds, vendor); + return SANE_STATUS_INVAL; /* this is not a Kodak device */ + } + /* kodakaio_usb_product_ids[numIds - 1] = product; */ + kodakaio_cap[numIds - 1].id = product; + + sanei_usb_attach_matching_devices(line, attach_one_usb); + + } else if (strncmp(line, "usb", 3) == 0 && len == 3) { + int i, numIds; + /* auto detect ? */ + numIds = kodakaio_getNumberOfUSBProductIds(); + + for (i = 0; i < numIds; i++) { +/* sanei_usb_find_devices(SANE_KODAKAIO_VENDOR_ID, + kodakaio_usb_product_ids[i], attach_one_usb); */ + sanei_usb_find_devices(SANE_KODAKAIO_VENDOR_ID, + kodakaio_cap[i].id, attach_one_usb); + } + + } else if (strncmp(line, "net", 3) == 0) { + + /* remove the "net" sub string */ + const char *name = sanei_config_skip_whitespace(line + 3); + char IP[1024]; + unsigned int model = 0; + + if (strncmp(name, "autodiscovery", 13) == 0) { +#if HAVE_CUPS + DBG (30, "%s: Initiating network autodiscovery via CUPS\n", __func__); + kodak_network_discovery(NULL); +#endif + } else if (sscanf(name, "%s %x", IP, &model) == 2) { + DBG(30, "%s: Using network device on IP %s, forcing model 0x%x\n", __func__, IP, model); + attach_one_net(IP, model); + } else { + DBG(1, "%s: Autodetecting device model is \n only possible if it's a cups device, using default model\n", __func__); + attach_one_net(name, 0); + } + + } else if (sscanf(line, "snmp-timeout %i\n", &timeout)) { + /* Timeout for SNMP network discovery */ + DBG(50, "%s: SNMP timeout set to %d\n", __func__, timeout); + K_SNMP_Timeout = timeout; + + } else if (sscanf(line, "scan-data-timeout %i\n", &timeout)) { + /* Timeout for scan data requests */ + DBG(50, "%s: Scan data timeout set to %d\n", __func__, timeout); + K_Scan_Data_Timeout = timeout; + + } else if (sscanf(line, "request-timeout %i\n", &timeout)) { + /* Timeout for all other read requests */ + DBG(50, "%s: Request timeout set to %d\n", __func__, timeout); + K_Request_Timeout = timeout; + + } else { + /* TODO: Warning about unparsable line! */ + } + + return SANE_STATUS_GOOD; +} + +static void +free_devices(void) +{ + Kodak_Device *dev, *next; + + DBG(5, "%s\n", __func__); + + for (dev = first_dev; dev; dev = next) { + next = dev->next; + free(dev->name); + free(dev->model); + free(dev); + } + + if (devlist) + free(devlist); + devlist = NULL; + first_dev = NULL; +} + +SANE_Status +sane_init(SANE_Int *version_code, SANE_Auth_Callback __sane_unused__ authorize) +{ + DBG_INIT(); + DBG(1, "========================================== \n"); + DBG(2, "%s: " PACKAGE " " VERSION "\n", __func__); + + DBG(1, "kodakaio backend, version %i.%i.%i\n", + KODAKAIO_VERSION, KODAKAIO_REVISION, KODAKAIO_BUILD); + DBG(2, "%s: called\n", __func__); + if (version_code != NULL) + *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, + KODAKAIO_BUILD); + sanei_usb_init(); + +#if HAVE_CUPS + DBG(1, "cups detected\n"); +#endif + 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) +{ + Kodak_Device *dev, *s, *prev=0; + int i; + + DBG(2, "%s: called\n", __func__); + + sanei_usb_init(); + + /* mark all existing scanners as missing, attach_one will remove mark */ + for (s = first_dev; s; s = s->next) { + s->missing = 1; + } + + /* Read the config, mark each device as found, possibly add new devs */ + sanei_configure_attach(KODAKAIO_CONFIG_FILE, NULL, + attach_one_config); + + /*delete missing scanners from list*/ + for (s = first_dev; s;) { + if (s->missing) { + DBG (5, "%s: missing scanner %s\n", __func__, s->name); + + /*splice s out of list by changing pointer in prev to next*/ + if (prev) { + prev->next = s->next; + free (s); + s = prev->next; + num_devices--; + } else { + /*remove s from head of list */ + first_dev = s->next; + free(s); + s = first_dev; + prev=NULL; + num_devices--; + } + } else { + prev = s; + s = prev->next; + } + } + + DBG (15, "%s: found %d scanner(s)\n", __func__, num_devices); + for (s = first_dev; s; s=s->next) { + DBG (15, "%s: found scanner %s\n", __func__, s->name); + } + + if (devlist) + free (devlist); + + devlist = malloc((num_devices + 1) * sizeof(devlist[0])); + if (!devlist) { + DBG(1, "out of memory (line %d)\n", __LINE__); + return SANE_STATUS_NO_MEM; + } + + DBG(5, "%s - results:\n", __func__); + + for (i = 0, dev = first_dev; i < num_devices && dev; dev = dev->next, i++) { + DBG(5, " %d (%d): %s\n", i, dev->connection, dev->model); + devlist[i] = &dev->sane; + } + + devlist[i] = NULL; + + if(device_list){ + *device_list = devlist; + } + + return SANE_STATUS_GOOD; +} + +static SANE_Status +init_options(KodakAio_Scanner *s) +{ + int i; + SANE_Word *res_list; + DBG(5, "%s: called\n", __func__); + + 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; + } + + s->opt[OPT_NUM_OPTS].title = SANE_TITLE_NUM_OPTIONS; + s->opt[OPT_NUM_OPTS].desc = SANE_DESC_NUM_OPTIONS; + s->opt[OPT_NUM_OPTS].type = SANE_TYPE_INT; + s->opt[OPT_NUM_OPTS].cap = SANE_CAP_SOFT_DETECT; + s->val[OPT_NUM_OPTS].w = NUM_OPTIONS; + + /* "Scan Mode" group: */ + + s->opt[OPT_MODE_GROUP].name = SANE_NAME_STANDARD; + s->opt[OPT_MODE_GROUP].title = SANE_TITLE_STANDARD; + s->opt[OPT_MODE_GROUP].desc = SANE_DESC_STANDARD; + s->opt[OPT_MODE_GROUP].type = SANE_TYPE_GROUP; + s->opt[OPT_MODE_GROUP].cap = 0; + + /* scan mode */ + s->opt[OPT_MODE].name = SANE_NAME_SCAN_MODE; + s->opt[OPT_MODE].title = SANE_TITLE_SCAN_MODE; + s->opt[OPT_MODE].desc = SANE_DESC_SCAN_MODE; + s->opt[OPT_MODE].type = SANE_TYPE_STRING; + s->opt[OPT_MODE].size = max_string_size(mode_list); + s->opt[OPT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST; + s->opt[OPT_MODE].constraint.string_list = mode_list; + s->val[OPT_MODE].w = 0; /* Binary */ + DBG(7, "%s: mode_list has first entry %s\n", __func__, mode_list[0]); + + /* bit depth */ + s->opt[OPT_BIT_DEPTH].name = SANE_NAME_BIT_DEPTH; + s->opt[OPT_BIT_DEPTH].title = SANE_TITLE_BIT_DEPTH; + s->opt[OPT_BIT_DEPTH].desc = SANE_DESC_BIT_DEPTH; + 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 = s->hw->cap->depth_list; + s->opt[OPT_BIT_DEPTH].cap |= SANE_CAP_INACTIVE; + s->val[OPT_BIT_DEPTH].w = s->hw->cap->depth_list[1]; /* the first "real" element is the default */ + + DBG(7, "%s: depth list has depth_list[0] = %d entries\n", __func__, s->hw->cap->depth_list[0]); + if (s->hw->cap->depth_list[0] == 1) { /* only one element in the list -> hide the option */ + s->opt[OPT_BIT_DEPTH].cap |= SANE_CAP_INACTIVE; + DBG(7, "%s: Only one depth in list so inactive option\n", __func__); + } + + + /* brightness + s->opt[OPT_BRIGHTNESS].name = SANE_NAME_BRIGHTNESS; + s->opt[OPT_BRIGHTNESS].title = SANE_TITLE_BRIGHTNESS; + s->opt[OPT_BRIGHTNESS].desc = SANE_DESC_BRIGHTNESS; + s->opt[OPT_BRIGHTNESS].type = SANE_TYPE_INT; + s->opt[OPT_BRIGHTNESS].unit = SANE_UNIT_NONE; + s->opt[OPT_BRIGHTNESS].constraint_type = SANE_CONSTRAINT_RANGE; + s->opt[OPT_BRIGHTNESS].constraint.range = &s->hw->cap->brightness; + s->val[OPT_BRIGHTNESS].w = 5; Normal */ + + /* resolution */ + s->opt[OPT_RESOLUTION].name = SANE_NAME_SCAN_RESOLUTION; + s->opt[OPT_RESOLUTION].title = SANE_TITLE_SCAN_RESOLUTION; + s->opt[OPT_RESOLUTION].desc = SANE_DESC_SCAN_RESOLUTION; + s->opt[OPT_RESOLUTION].type = SANE_TYPE_INT; + s->opt[OPT_RESOLUTION].unit = SANE_UNIT_DPI; + s->opt[OPT_RESOLUTION].constraint_type = SANE_CONSTRAINT_WORD_LIST; + res_list = malloc((s->hw->cap->res_list_size + 1) * sizeof(SANE_Word)); + if (res_list == NULL) { + return SANE_STATUS_NO_MEM; + } + *(res_list) = s->hw->cap->res_list_size; + memcpy(&(res_list[1]), s->hw->cap->res_list, s->hw->cap->res_list_size * sizeof(SANE_Word)); + s->opt[OPT_RESOLUTION].constraint.word_list = res_list; + s->val[OPT_RESOLUTION].w = s->hw->cap->dpi_range.min; + + + /* preview */ + s->opt[OPT_PREVIEW].name = SANE_NAME_PREVIEW; + s->opt[OPT_PREVIEW].title = SANE_TITLE_PREVIEW; + s->opt[OPT_PREVIEW].desc = SANE_DESC_PREVIEW; + s->opt[OPT_PREVIEW].type = SANE_TYPE_BOOL; + s->val[OPT_PREVIEW].w = SANE_FALSE; + + for(i=0;source_list[i]!=NULL;++i) + DBG(18, "source_list: %s\n",source_list[i]); + + /* source */ + s->opt[OPT_SOURCE].name = SANE_NAME_SCAN_SOURCE; + s->opt[OPT_SOURCE].title = SANE_TITLE_SCAN_SOURCE; + s->opt[OPT_SOURCE].desc = SANE_DESC_SCAN_SOURCE; + s->opt[OPT_SOURCE].type = SANE_TYPE_STRING; + s->opt[OPT_SOURCE].size = max_string_size(source_list); + s->opt[OPT_SOURCE].constraint_type = SANE_CONSTRAINT_STRING_LIST; + s->opt[OPT_SOURCE].constraint.string_list = source_list; + s->val[OPT_SOURCE].w = 0; /* always use Flatbed as default */ + + if ((!s->hw->cap->ADF)) + DBG(18, "device with no adf detected\n"); + +/* s->opt[OPT_SOURCE].cap |= SANE_CAP_INACTIVE; */ + +/* TODO make source inactive if no adf, like for bit depth */ + + s->opt[OPT_ADF_MODE].name = "adf-mode"; + s->opt[OPT_ADF_MODE].title = SANE_I18N("ADF Mode"); + s->opt[OPT_ADF_MODE].desc = + SANE_I18N("Selects the ADF mode (simplex/duplex)"); + s->opt[OPT_ADF_MODE].type = SANE_TYPE_STRING; + s->opt[OPT_ADF_MODE].size = max_string_size(adf_mode_list); + s->opt[OPT_ADF_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST; + s->opt[OPT_ADF_MODE].constraint.string_list = adf_mode_list; + s->val[OPT_ADF_MODE].w = 0; /* simplex */ + if ((!s->hw->cap->ADF) || (s->hw->cap->adf_duplex == SANE_FALSE)) + s->opt[OPT_ADF_MODE].cap |= SANE_CAP_INACTIVE; + + + /* "Geometry" group: */ + s->opt[OPT_GEOMETRY_GROUP].name = SANE_NAME_GEOMETRY; + s->opt[OPT_GEOMETRY_GROUP].title = SANE_TITLE_GEOMETRY; + s->opt[OPT_GEOMETRY_GROUP].desc = SANE_DESC_GEOMETRY; + s->opt[OPT_GEOMETRY_GROUP].type = SANE_TYPE_GROUP; + s->opt[OPT_GEOMETRY_GROUP].cap = SANE_CAP_ADVANCED; + + /* top-left x */ + s->opt[OPT_TL_X].name = SANE_NAME_SCAN_TL_X; + s->opt[OPT_TL_X].title = SANE_TITLE_SCAN_TL_X; + s->opt[OPT_TL_X].desc = SANE_DESC_SCAN_TL_X; + s->opt[OPT_TL_X].type = SANE_TYPE_FIXED; + s->opt[OPT_TL_X].unit = SANE_UNIT_MM; + s->opt[OPT_TL_X].constraint_type = SANE_CONSTRAINT_RANGE; + s->opt[OPT_TL_X].constraint.range = s->hw->x_range; + s->val[OPT_TL_X].w = 0; + + /* top-left y */ + s->opt[OPT_TL_Y].name = SANE_NAME_SCAN_TL_Y; + s->opt[OPT_TL_Y].title = SANE_TITLE_SCAN_TL_Y; + s->opt[OPT_TL_Y].desc = SANE_DESC_SCAN_TL_Y; + s->opt[OPT_TL_Y].type = SANE_TYPE_FIXED; + s->opt[OPT_TL_Y].unit = SANE_UNIT_MM; + s->opt[OPT_TL_Y].constraint_type = SANE_CONSTRAINT_RANGE; + s->opt[OPT_TL_Y].constraint.range = s->hw->y_range; + s->val[OPT_TL_Y].w = 0; + + /* bottom-right x */ + s->opt[OPT_BR_X].name = SANE_NAME_SCAN_BR_X; + s->opt[OPT_BR_X].title = SANE_TITLE_SCAN_BR_X; + s->opt[OPT_BR_X].desc = SANE_DESC_SCAN_BR_X; + s->opt[OPT_BR_X].type = SANE_TYPE_FIXED; + s->opt[OPT_BR_X].unit = SANE_UNIT_MM; + s->opt[OPT_BR_X].constraint_type = SANE_CONSTRAINT_RANGE; + s->opt[OPT_BR_X].constraint.range = s->hw->x_range; + s->val[OPT_BR_X].w = s->hw->x_range->max; + + /* bottom-right y */ + s->opt[OPT_BR_Y].name = SANE_NAME_SCAN_BR_Y; + s->opt[OPT_BR_Y].title = SANE_TITLE_SCAN_BR_Y; + s->opt[OPT_BR_Y].desc = SANE_DESC_SCAN_BR_Y; + s->opt[OPT_BR_Y].type = SANE_TYPE_FIXED; + s->opt[OPT_BR_Y].unit = SANE_UNIT_MM; + s->opt[OPT_BR_Y].constraint_type = SANE_CONSTRAINT_RANGE; + s->opt[OPT_BR_Y].constraint.range = s->hw->y_range; + s->val[OPT_BR_Y].w = s->hw->y_range->max; + + return SANE_STATUS_GOOD; +} + +SANE_Status +sane_open(SANE_String_Const name, SANE_Handle *handle) +{ + SANE_Status status; + KodakAio_Scanner *s = NULL; + + int l = strlen(name); + + DBG(2, "%s: name = %s\n", __func__, name); + + /* probe if empty device name provided */ + if (l == 0) { + + status = sane_get_devices(NULL,0); + if (status != SANE_STATUS_GOOD) { + return status; + } + + 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_KODAKAIO_NET, &status); + if (s == NULL) + return status; + } else if (strncmp(name, "libusb:", 7) == 0) { + s = device_detect(name, SANE_KODAKAIO_USB, &status); + if (s == NULL) + return status; + } else { + + /* as a last resort, check for a match + * in the device list. This should handle platforms without libusb. + */ + if (first_dev == NULL) { + status = sane_get_devices(NULL,0); + if (status != SANE_STATUS_GOOD) { + return status; + } + } + + s = device_detect(name, SANE_KODAKAIO_NODEV, &status); + if (s == NULL) { + DBG(1, "invalid device name: %s\n", name); + return SANE_STATUS_INVAL; + } + } + } + + + /* s is always valid here */ + + DBG(10, "handle obtained\n"); + status = k_discover_capabilities(s); /* added 27/12/11 to fix source list problem +maybe we should only be rebuilding the source list here? */ + if (status != SANE_STATUS_GOOD) + return status; + + init_options(s); + + *handle = (SANE_Handle) s; + + status = open_scanner(s); + if (status != SANE_STATUS_GOOD) { + free(s); + return status; + } + + return status; +} + +void +sane_close(SANE_Handle handle) +{ + KodakAio_Scanner *s; + + /* + * XXX Test if there is still data pending from + * the scanner. If so, then do a cancel + */ + + s = (KodakAio_Scanner *) handle; + DBG(2, "%s: called\n", __func__); + + if (s->fd != -1) + close_scanner(s); + if(RawScan != NULL) + fclose(RawScan); + RawScan = NULL; + free(s); +} + +const SANE_Option_Descriptor * +sane_get_option_descriptor(SANE_Handle handle, SANE_Int option) +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + + if (option < 0 || option >= NUM_OPTIONS) + return NULL; + + return s->opt + option; +} + +static const SANE_String_Const * +search_string_list(const SANE_String_Const *list, SANE_String value) +{ + while (*list != NULL && strcmp(value, *list) != 0) + list++; + + return ((*list == NULL) ? NULL : list); +} + +/* + Activate, deactivate an option. Subroutines so we can add + debugging info if we want. The change flag is set to TRUE + if we changed an option. If we did not change an option, + then the value of the changed flag is not modified. +*/ + +static void +activateOption(KodakAio_Scanner *s, SANE_Int option, SANE_Bool *change) +{ + if (!SANE_OPTION_IS_ACTIVE(s->opt[option].cap)) { + s->opt[option].cap &= ~SANE_CAP_INACTIVE; + *change = SANE_TRUE; + } +} + +static void +deactivateOption(KodakAio_Scanner *s, SANE_Int option, SANE_Bool *change) +{ + if (SANE_OPTION_IS_ACTIVE(s->opt[option].cap)) { + s->opt[option].cap |= SANE_CAP_INACTIVE; + *change = SANE_TRUE; + } +} + +static SANE_Status +getvalue(SANE_Handle handle, SANE_Int option, void *value) +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + 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_NUM_OPTS: + case OPT_BIT_DEPTH: +/* case OPT_BRIGHTNESS: */ + case OPT_RESOLUTION: + case OPT_PREVIEW: + case OPT_TL_X: + case OPT_TL_Y: + case OPT_BR_X: + case OPT_BR_Y: + *((SANE_Word *) value) = sval->w; + break; + + case OPT_MODE: + case OPT_SOURCE: + case OPT_ADF_MODE: + strcpy((char *) value, sopt->constraint.string_list[sval->w]); + break; + + default: + return SANE_STATUS_INVAL; + } + + return SANE_STATUS_GOOD; +} + + +/* + * Handles setting the source (flatbed, or auto document feeder (ADF)). + * + */ + +static void +change_source(KodakAio_Scanner *s, SANE_Int optindex, char *value) +{ + int force_max = SANE_FALSE; + SANE_Bool dummy; + + DBG(5, "%s: optindex = %d, source = '%s'\n", __func__, optindex, + value); + + if (s->val[OPT_SOURCE].w == optindex) + return; + + s->val[OPT_SOURCE].w = optindex; + + if (s->val[OPT_TL_X].w == s->hw->x_range->min + && s->val[OPT_TL_Y].w == s->hw->y_range->min + && s->val[OPT_BR_X].w == s->hw->x_range->max + && s->val[OPT_BR_Y].w == s->hw->y_range->max) { + force_max = SANE_TRUE; + } + + if (strcmp(ADF_STR, value) == 0) { + s->hw->x_range = &s->hw->cap->adf_x_range; + s->hw->y_range = &s->hw->cap->adf_y_range; + if (s->hw->cap->adf_duplex) { + activateOption(s, OPT_ADF_MODE, &dummy); + } else { + deactivateOption(s, OPT_ADF_MODE, &dummy); + s->val[OPT_ADF_MODE].w = 0; + } + + DBG(5, "adf activated (%d)\n",s->hw->cap->adf_duplex); + + } else { + /* ADF not active */ + s->hw->x_range = &s->hw->cap->fbf_x_range; + s->hw->y_range = &s->hw->cap->fbf_y_range; + + deactivateOption(s, OPT_ADF_MODE, &dummy); + } + + s->opt[OPT_BR_X].constraint.range = s->hw->x_range; + s->opt[OPT_BR_Y].constraint.range = s->hw->y_range; + + if (s->val[OPT_TL_X].w < s->hw->x_range->min || force_max) + s->val[OPT_TL_X].w = s->hw->x_range->min; + + if (s->val[OPT_TL_Y].w < s->hw->y_range->min || force_max) + s->val[OPT_TL_Y].w = s->hw->y_range->min; + + if (s->val[OPT_BR_X].w > s->hw->x_range->max || force_max) + s->val[OPT_BR_X].w = s->hw->x_range->max; + + if (s->val[OPT_BR_Y].w > s->hw->y_range->max || force_max) + s->val[OPT_BR_Y].w = s->hw->y_range->max; + +} + +static SANE_Status +setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + SANE_Option_Descriptor *sopt = &(s->opt[option]); + Option_Value *sval = &(s->val[option]); + + SANE_Status status; + const SANE_String_Const *optval = NULL; + int optindex = 0; + SANE_Bool reload = SANE_FALSE; + + DBG(17, "%s: option = %d, value = %p, as word: %d\n", __func__, option, value, *(SANE_Word *) value); + + status = sanei_constrain_value(sopt, value, info); + if (status != SANE_STATUS_GOOD) + return status; + + if (info && value && (*info & SANE_INFO_INEXACT) + && sopt->type == SANE_TYPE_INT) + DBG(17, "%s: constrained val = %d\n", __func__, + *(SANE_Word *) value); + + 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; + } + + switch (option) { + + case OPT_MODE: + { + sval->w = optindex; + /* if binary, then disable the bit depth selection */ + if (optindex == 0) { + s->opt[OPT_BIT_DEPTH].cap |= SANE_CAP_INACTIVE; + } else { + if (s->hw->cap->depth_list[0] == 1) + s->opt[OPT_BIT_DEPTH].cap |= + SANE_CAP_INACTIVE; + else { + s->opt[OPT_BIT_DEPTH].cap &= + ~SANE_CAP_INACTIVE; + s->val[OPT_BIT_DEPTH].w = + mode_params[optindex].depth; + } + } + reload = SANE_TRUE; + break; + } + + case OPT_BIT_DEPTH: + sval->w = *((SANE_Word *) value); + mode_params[s->val[OPT_MODE].w].depth = sval->w; + reload = SANE_TRUE; + break; + + case OPT_RESOLUTION: + sval->w = *((SANE_Word *) value); + DBG(17, "setting resolution to %d\n", sval->w); + reload = SANE_TRUE; + break; + + case OPT_BR_X: + case OPT_BR_Y: + sval->w = *((SANE_Word *) value); + if (SANE_UNFIX(sval->w) == 0) { + DBG(17, "invalid br-x or br-y\n"); + return SANE_STATUS_INVAL; + } + /* passthru */ + case OPT_TL_X: + case OPT_TL_Y: + sval->w = *((SANE_Word *) value); + DBG(17, "setting size to %f\n", SANE_UNFIX(sval->w)); + if (NULL != info) + *info |= SANE_INFO_RELOAD_PARAMS; + break; + + case OPT_SOURCE: + change_source(s, optindex, (char *) value); + reload = SANE_TRUE; + break; + + case OPT_ADF_MODE: + sval->w = optindex; /* Simple lists */ + break; + +/* case OPT_BRIGHTNESS: */ + case OPT_PREVIEW: /* needed? */ + sval->w = *((SANE_Word *) value); + break; + + default: + return SANE_STATUS_INVAL; + } + + if (reload && info != NULL) + *info |= SANE_INFO_RELOAD_OPTIONS | SANE_INFO_RELOAD_PARAMS; + + DBG(17, "%s: end\n", __func__); + + return SANE_STATUS_GOOD; +} + +SANE_Status +sane_control_option(SANE_Handle handle, SANE_Int option, SANE_Action action, + 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; + + if (info != NULL) + *info = 0; + + switch (action) { + case SANE_ACTION_GET_VALUE: + return getvalue(handle, option, value); + + case SANE_ACTION_SET_VALUE: + return setvalue(handle, option, value, info); + + default: + return SANE_STATUS_INVAL; + } + + return SANE_STATUS_INVAL; +} + +SANE_Status +sane_get_parameters(SANE_Handle handle, SANE_Parameters *params) +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + + DBG(2, "%s: called\n", __func__); + + if (params == NULL) + DBG(1, "%s: params is NULL\n", __func__); + + /* + * If sane_start was already called, then just retrieve the parameters + * from the scanner data structure + */ + + if (!s->eof && s->ptr != NULL) { + DBG(5, "scan in progress, returning saved params structure\n"); + } else { + /* otherwise initialize the params structure and gather the data */ + k_init_parametersta(s); + } + + if (params != NULL) + *params = s->params; + + print_params(s->params); + + return SANE_STATUS_GOOD; +} + +/* + * This function is part of the SANE API and gets called from the front end to + * start the scan process. + */ + +SANE_Status +sane_start(SANE_Handle handle) +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + SANE_Status status; + + DBG(2, "%s: called\n", __func__); + if(! s->scanning) { + /* calc scanning parameters */ + status = k_init_parametersta(s); + if (status != SANE_STATUS_GOOD) + return status; + + /* print_params(s->params); */ + + /* set scanning parameters; also query the current image + * parameters from the sanner and save + * them to s->params +Only set scanning params the first time, or after a cancel +try change 22/2/12 take lock scanner out of k_set_scanning_parameters */ + k_lock_scanner(s); + } + + status = k_set_scanning_parameters(s); + if (status != SANE_STATUS_GOOD) + return status; + + print_params(s->params); + /* if we scan from ADF, check if it is loaded */ + if (strcmp(source_list[s->val[OPT_SOURCE].w], ADF_STR) == 0) { + status = k_check_adf(s); + if (status != SANE_STATUS_GOOD) { + status = SANE_STATUS_CANCELLED; + DBG(1, "%s: returning %s\n", __func__, sane_strstatus(status)); + return status; + } +/* returning SANE_STATUS_NO_DOCS seems not to cause simple-scan to end the adf scan */ + } + + /* prepare buffer here so that a memory allocation failure + * will leave the scanner in a sane state. + */ + s->buf = realloc(s->buf, s->block_len); + if (s->buf == NULL) + return SANE_STATUS_NO_MEM; + + s->eof = SANE_FALSE; + s->ptr = s->end = s->buf; + s->canceling = SANE_FALSE; + + if (strlen(RawScanPath) > 0) + RawScan = fopen(RawScanPath, "wb");/* open the debug file if it has a name */ + if(RawScan) fprintf(RawScan, "P5\n%d %d\n%d\n",s->scan_bytes_per_line, s->params.lines, 255); + + /* start scanning */ + DBG(2, "%s: scanning...\n", __func__); + + status = k_start_scan(s); + + if (status != SANE_STATUS_GOOD) { + DBG(1, "%s: start failed: %s\n", __func__, + sane_strstatus(status)); + + return status; + } + + return status; +} + +/* 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_Status status; + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + + if (s->buf == NULL || s->canceling) + return SANE_STATUS_CANCELLED; + + *length = 0; + DBG(18, "sane-read, bytes unread %d\n",s->bytes_unread); + + status = k_read(s); /* switched back to mc_read to test had no effect xxxx */ + + if (status == SANE_STATUS_CANCELLED) { + k_scan_finish(s); + return status; + } + +/* DBG(18, "moving data %p %p, max %d (= %d lines)\n", + s->ptr, s->end, + max_length, max_length / s->params.bytes_per_line); +*/ + k_copy_image_data(s, data, max_length, length); /* was k not mc test had no effect xxxx */ + + DBG(18, "%d lines read, status: %s\n", + *length / s->params.bytes_per_line, sane_strstatus(status)); + + /* continue reading if appropriate */ + if (status == SANE_STATUS_GOOD) + return status; + +/* not sure if we want to finish (unlock scanner) here or in sane_close */ + /* k_scan_finish(s); */ + return status; +} + +/* + * void sane_cancel(SANE_Handle handle) + * + * Set the cancel flag to true. The next time the backend requests data + * from the scanner the CAN message will be sent. + */ + +void +sane_cancel(SANE_Handle handle) +{ + KodakAio_Scanner *s = (KodakAio_Scanner *) handle; + DBG(2, "%s: called\n", __func__); + +/* used to set cancelling flag to tell sane_read to cancel +changed 20/2/12 + s->canceling = SANE_TRUE; +*/ + cmd_cancel_scan(s); +} + +/* + * SANE_Status sane_set_io_mode() + * + * not supported - for asynchronous I/O + */ + +SANE_Status +sane_set_io_mode(SANE_Handle __sane_unused__ handle, + SANE_Bool __sane_unused__ non_blocking) +{ + return SANE_STATUS_UNSUPPORTED; +} + +/* + * SANE_Status sane_get_select_fd() + * + * not supported - for asynchronous I/O + */ + +SANE_Status +sane_get_select_fd(SANE_Handle __sane_unused__ handle, + SANE_Int __sane_unused__ *fd) +{ + return SANE_STATUS_UNSUPPORTED; +} diff -Nru sane-backends-1.0.22/backend/kodakaio.conf.in sane-backends-1.0.23/backend/kodakaio.conf.in --- sane-backends-1.0.22/backend/kodakaio.conf.in 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/kodakaio.conf.in 2012-07-01 02:00:44.000000000 +0000 @@ -0,0 +1,80 @@ +### kodakaio.conf +### +### here are some examples for how to configure the kodakaio backend + +### Timeout settings: SNMP autodetection, Scan data read requests and other +### read requests. All values are given in milliseconds, +### i.e. 1000 is 1 second. + +# SNMP auto-detection waits 1.5 seconds +snmp-timeout 1500 + +# wait 15 seconds for scan data (scans may take several seconds to initialize, +# so we need to wait longer) +scan-data-timeout 7000 + +# Wait 5 seconds for all other data requests +request-timeout 5000 + + +### Network: Format is "net IP_ADDRESS [USB_ID]" or "net autodiscovery" +### if USB_ID is left out, SNMP is used to detect the device type +### Currently autodiscovery seems to not work +### So always use "net IP_ADDRESS [USB_ID]" as shown below +### You can find the printer's IP address on its control panel +### There is a list of USB_IDs at the end of this file + +net autodiscovery + +### The following is a kodak HERO 9.1 with explicit IP-Address +#net 10.0.0.5 0x4067 + +# kodak ESP5250 is usb 0x040a 0x4041 +#net 192.168.1.4 0x4041 +# kodak HERO 9.1 is usb 0x040a 0x4067 +#net 192.168.1.17 0x4067 + +### USB: format is "usb" for automatic (libusb) discovery, based on USB IDs, +### or "usb to force the use of a particular +### device (the backend has some additional checks and will not use +### non-kodak devices, though) + +usb + +### For libusb support for unknown scanners use the following command +### usb +### e.g.: + +# kodak ESP5250 is usb 0x040a 0x4041 +#usb 0x040a 0x4041 +# kodak HERO 9.1 is usb 0x040a 0x4067 +#usb 0x040a 0x4067 + +### List of USB device IDs +# 0x4059, /* kodak ESP 2150 */ +# 0x4066, /* kodak ESP 2170 */ +# 0x4043, /* kodak ESP 3200 */ +# 0x4031, /* kodak ESP 3300 */ +# 0x4053, /* kodak ESP 4100 */ +# 0x4028, /* kodak ESP 5000 */ +# 0x4025, /* kodak ESP 5100 */ +# 0x4041, /* kodak ESP 5200 */ +# 0x4026, /* kodak ESP 5300 */ +# 0x4027, /* kodak ESP 5500 */ +# 0x4054, /* kodak ESP 6100 */ +# 0x4056, /* kodak ESP 7200 */ +# 0x4065, /* kodak ESP 9200 */ +# 0x4032, /* kodak ESP 5 */ +# 0x403E, /* kodak ESP 7 */ +# 0x403F, /* kodak ESP 9 */ +# 0x4057, /* kodak ESP C110 */ +# 0x4058, /* kodak ESP C115 */ +# 0x405D, /* kodak ESP C310 */ +# 0x405E, /* kodak ESP C315 */ +# 0x4060, /* ADVENT WiFi AIO AW10 */ +# 0x406D, /* kodak Hero 3.1 */ +# 0x4064, /* kodak Hero 5.1 */ +# 0x4062, /* kodak Office Hero 6.1 */ +# 0x4063, /* kodak Hero 7.1 */ +# 0x4067, /* kodak Hero 9.1 */ + diff -Nru sane-backends-1.0.22/backend/kodakaio.h sane-backends-1.0.23/backend/kodakaio.h --- sane-backends-1.0.22/backend/kodakaio.h 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/kodakaio.h 2012-07-01 02:00:44.000000000 +0000 @@ -0,0 +1,192 @@ +/* + * kodakaio.c - SANE library for Kodak ESP Aio scanners. + * + * Copyright (C) 2011-2012 Paul Newall + * + * Based on the Magicolor sane backend: + * Based on the epson2 sane backend: + * Based on Kazuhiro Sasayama previous + * work on epson.[ch] file from the SANE package. + * Please see those files for additional copyrights. + * Author: Paul Newall + * + * + * 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. + */ + +#ifndef kodakaio_h +#define kodakaio_h + +#undef BACKEND_NAME +#define BACKEND_NAME kodakaio +#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/sane/sane.h" +#include "../include/sane/sanei_debug.h" +#include "../include/sane/sanei_backend.h" + +#ifdef __GNUC__ +#define __func__ __FUNCTION__ +#else +#define __func__ "(undef)" +#endif + +/* Silence the compiler for unused arguments */ +#define NOT_USED(x) ( (void)(x) ) + +#define KODAKAIO_CONFIG_FILE "kodakaio.conf" + +#define NUM_OF_HEX_ELEMENTS (16) /* number of hex numbers per line for data dump */ +#define DEVICE_NAME_LEN (16) /* length of device name in extended status */ + +#define CAP_DEFAULT 0 + +/* Structure holding the device capabilities */ +struct KodakaioCap +{ + SANE_Word id; + const char *cmds; /* may be used for different command sets in future */ + const char *model; + SANE_Int out_ep, in_ep; /* USB bulk out/in endpoints */ + + SANE_Int optical_res; /* optical resolution */ + SANE_Range dpi_range; /* max/min resolutions */ + + SANE_Int *res_list; /* list of resolutions */ + SANE_Int res_list_size; /* number of entries in this list */ + + SANE_Int maxDepth; /* max. color depth */ + SANE_Word *depth_list; /* list of color depths */ + + /* SANE_Range brightness; brightness range */ + + SANE_Range fbf_x_range; /* flattbed x range */ + SANE_Range fbf_y_range; /* flattbed y range */ + + SANE_Bool ADF; /* ADF is installed */ + SANE_Bool adf_duplex; /* does the ADF handle duplex scanning */ + SANE_Range adf_x_range; /* autom. document feeder x range */ + SANE_Range adf_y_range; /* autom. document feeder y range */ +}; + +/* +Options:OPT_BRIGHTNESS, used to be after BIT_DEPTH +*/ +enum { + OPT_NUM_OPTS = 0, + OPT_MODE_GROUP, + OPT_MODE, + OPT_BIT_DEPTH, + OPT_RESOLUTION, + OPT_PREVIEW, + OPT_SOURCE, + OPT_ADF_MODE, + OPT_GEOMETRY_GROUP, + OPT_TL_X, + OPT_TL_Y, + OPT_BR_X, + OPT_BR_Y, + NUM_OPTIONS +}; + +typedef enum +{ /* hardware connection to the scanner */ + SANE_KODAKAIO_NODEV, /* default, no HW specified yet */ + SANE_KODAKAIO_USB, /* USB interface */ + SANE_KODAKAIO_NET /* network interface */ +} Kodakaio_Connection_Type; + + +/* Structure holding the hardware description */ + +struct Kodak_Device +{ + struct Kodak_Device *next; + int missing; + + char *name; + char *model; + + SANE_Device sane; + + SANE_Range *x_range; /* x range w/out extension */ + SANE_Range *y_range; /* y range w/out extension */ + + Kodakaio_Connection_Type connection; + + struct KodakaioCap *cap; +}; + +typedef struct Kodak_Device Kodak_Device; + +/* Structure holding an instance of a scanner (i.e. scanner has been opened) */ +struct KodakAio_Scanner +{ + struct KodakAio_Scanner *next; + struct Kodak_Device *hw; + + int fd; + + SANE_Option_Descriptor opt[NUM_OPTIONS]; + Option_Value val[NUM_OPTIONS]; + SANE_Parameters params; + + SANE_Bool eof; + SANE_Byte *buf, *end, *ptr; + SANE_Bool canceling; + SANE_Bool scanning; /* scan in progress */ + SANE_Bool adf_loaded; /* paper in adf */ + + SANE_Int left, top; /* in optres units? */ + SANE_Int width, height; /* in optres units? */ + + /* image block data */ + SANE_Int data_len; + SANE_Int block_len; + SANE_Int last_len; /* to be phased out */ + SANE_Int blocks; /* to be phased out */ + SANE_Int counter; + SANE_Int bytes_unread; /* to track when to stop */ + + /* store how many bytes of the current pixel line we have already + * read in previous read attempts. Since each line will be padded + * to multiples of 512 bytes, this is needed to know which bytes + * to ignore */ + SANE_Int bytes_read_in_line; + SANE_Byte *line_buffer; + /* How many bytes are scanned per line */ + SANE_Int scan_bytes_per_line; +}; + +typedef struct KodakAio_Scanner KodakAio_Scanner; + +struct mode_param +{ + int flags; + int colors; + int depth; +}; + +enum { + MODE_GRAY, MODE_COLOR +}; + +#endif diff -Nru sane-backends-1.0.22/backend/kvs1025.c sane-backends-1.0.23/backend/kvs1025.c --- sane-backends-1.0.22/backend/kvs1025.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs1025.c 2011-07-06 20:17:25.000000000 +0000 @@ -1,6 +1,6 @@ /* Copyright (C) 2008, Panasonic Russia Ltd. - Copyright (C) 2010, m. allan noah + Copyright (C) 2010-2011, m. allan noah */ /* sane - Scanner Access Now Easy. Panasonic KV-S1020C / KV-S1025C USB scanners. @@ -282,11 +282,11 @@ { if (dev->current_side == SIDE_FRONT) { + /* back image data already read, so just return */ dev->current_side = SIDE_BACK; - /* return; image data already read */ - DBG (DBG_proc, "sane_start: exit\n"); - - return SANE_STATUS_GOOD; + DBG (DBG_proc, "sane_start: duplex back\n"); + status = SANE_STATUS_GOOD; + goto cleanup; } else { @@ -326,6 +326,48 @@ if (status) return status; } + + /* software based enhancement functions from sanei_magic */ + /* these will modify the image, and adjust the params */ + /* at this point, we are only looking at the front image */ + /* of simplex or duplex data, back side has already exited */ + /* so, we do both sides now, if required */ + if (dev->val[OPT_SWDESKEW].w){ + buffer_deskew(dev,SIDE_FRONT); + } + if (dev->val[OPT_SWCROP].w){ + buffer_crop(dev,SIDE_FRONT); + } + if (dev->val[OPT_SWDESPECK].w){ + buffer_despeck(dev,SIDE_FRONT); + } + if (dev->val[OPT_SWDEROTATE].w || dev->val[OPT_ROTATE].w){ + buffer_rotate(dev,SIDE_FRONT); + } + + if (IS_DUPLEX (dev)){ + if (dev->val[OPT_SWDESKEW].w){ + buffer_deskew(dev,SIDE_BACK); + } + if (dev->val[OPT_SWCROP].w){ + buffer_crop(dev,SIDE_BACK); + } + if (dev->val[OPT_SWDESPECK].w){ + buffer_despeck(dev,SIDE_BACK); + } + if (dev->val[OPT_SWDEROTATE].w || dev->val[OPT_ROTATE].w){ + buffer_rotate(dev,SIDE_BACK); + } + } + + cleanup: + + /* check if we need to skip this page */ + if (dev->val[OPT_SWSKIP].w && buffer_isblank(dev,dev->current_side)){ + DBG (DBG_proc, "sane_start: blank page, recurse\n"); + return sane_start(handle); + } + DBG (DBG_proc, "sane_start: exit\n"); return status; } diff -Nru sane-backends-1.0.22/backend/kvs1025.h sane-backends-1.0.23/backend/kvs1025.h --- sane-backends-1.0.22/backend/kvs1025.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs1025.h 2012-07-31 01:35:23.000000000 +0000 @@ -16,11 +16,11 @@ #define BACKEND_NAME kvs1025 /* Build version */ -#define V_BUILD 3 +#define V_BUILD 5 -/* Paper range supported -- MAX A4 */ -#define KV_MAX_X_RANGE 210 -#define KV_MAX_Y_RANGE 297 +/* Paper range supported -- MAX scanner limits */ +#define KV_MAX_X_RANGE 216 +#define KV_MAX_Y_RANGE 2540 /* Round ULX, ULY, Width and Height to 16 Pixels */ #define KV_PIXEL_ROUND 19200 diff -Nru sane-backends-1.0.22/backend/kvs1025_low.c sane-backends-1.0.23/backend/kvs1025_low.c --- sane-backends-1.0.22/backend/kvs1025_low.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs1025_low.c 2011-07-06 20:17:25.000000000 +0000 @@ -27,6 +27,7 @@ #include "../include/sane/sanei_backend.h" #include "../include/sane/sanei_config.h" #include "../include/lassert.h" +#include "../include/sane/sanei_magic.h" #include "kvs1025.h" #include "kvs1025_low.h" @@ -966,3 +967,212 @@ return status; } + +/* Look in image for likely upper and left paper edges, then rotate + * image so that upper left corner of paper is upper left of image. + * FIXME: should we do this before we binarize instead of after? */ +SANE_Status +buffer_deskew(PKV_DEV s, int side) +{ + SANE_Status ret = SANE_STATUS_GOOD; + int bg_color = 0xd6; + int side_index = (side == SIDE_FRONT)?0:1; + int resolution = s->val[OPT_RESOLUTION].w; + + DBG (10, "buffer_deskew: start\n"); + + /*only find skew on first image from a page, or if first image had error */ + if(side == SIDE_FRONT || s->deskew_stat){ + + s->deskew_stat = sanei_magic_findSkew( + &s->params[side_index],s->img_buffers[side_index], + resolution,resolution, + &s->deskew_vals[0],&s->deskew_vals[1],&s->deskew_slope); + + if(s->deskew_stat){ + DBG (5, "buffer_despeck: bad findSkew, bailing\n"); + goto cleanup; + } + } + /* backside images can use a 'flipped' version of frontside data */ + else{ + s->deskew_slope *= -1; + s->deskew_vals[0] + = s->params[side_index].pixels_per_line - s->deskew_vals[0]; + } + + ret = sanei_magic_rotate(&s->params[side_index],s->img_buffers[side_index], + s->deskew_vals[0],s->deskew_vals[1],s->deskew_slope,bg_color); + + if(ret){ + DBG(5,"buffer_deskew: rotate error: %d",ret); + ret = SANE_STATUS_GOOD; + goto cleanup; + } + + cleanup: + DBG (10, "buffer_deskew: finish\n"); + return ret; +} + +/* Look in image for likely left/right/bottom paper edges, then crop image. + * Does not attempt to rotate the image, that should be done first. + * FIXME: should we do this before we binarize instead of after? */ +SANE_Status +buffer_crop(PKV_DEV s, int side) +{ + SANE_Status ret = SANE_STATUS_GOOD; + int side_index = (side == SIDE_FRONT)?0:1; + int resolution = s->val[OPT_RESOLUTION].w; + + DBG (10, "buffer_crop: start\n"); + + /*only find edges on first image from a page, or if first image had error */ + if(side == SIDE_FRONT || s->crop_stat){ + + s->crop_stat = sanei_magic_findEdges( + &s->params[side_index],s->img_buffers[side_index], + resolution,resolution, + &s->crop_vals[0],&s->crop_vals[1],&s->crop_vals[2],&s->crop_vals[3]); + + if(s->crop_stat){ + DBG (5, "buffer_crop: bad edges, bailing\n"); + goto cleanup; + } + + DBG (15, "buffer_crop: t:%d b:%d l:%d r:%d\n", + s->crop_vals[0],s->crop_vals[1],s->crop_vals[2],s->crop_vals[3]); + + /* we dont listen to the 'top' value, since the top is not padded */ + /*s->crop_vals[0] = 0;*/ + } + /* backside images can use a 'flipped' version of frontside data */ + else{ + int left = s->crop_vals[2]; + int right = s->crop_vals[3]; + + s->crop_vals[2] = s->params[side_index].pixels_per_line - right; + s->crop_vals[3] = s->params[side_index].pixels_per_line - left; + } + + /* now crop the image */ + ret = sanei_magic_crop(&s->params[side_index],s->img_buffers[side_index], + s->crop_vals[0],s->crop_vals[1],s->crop_vals[2],s->crop_vals[3]); + + if(ret){ + DBG (5, "buffer_crop: bad crop, bailing\n"); + ret = SANE_STATUS_GOOD; + goto cleanup; + } + + /* update image size counter to new, smaller size */ + s->img_size[side_index] + = s->params[side_index].lines * s->params[side_index].bytes_per_line; + + cleanup: + DBG (10, "buffer_crop: finish\n"); + return ret; +} + +/* Look in image for disconnected 'spots' of the requested size. + * Replace the spots with the average color of the surrounding pixels. + * FIXME: should we do this before we binarize instead of after? */ +SANE_Status +buffer_despeck(PKV_DEV s, int side) +{ + SANE_Status ret = SANE_STATUS_GOOD; + int side_index = (side == SIDE_FRONT)?0:1; + + DBG (10, "buffer_despeck: start\n"); + + ret = sanei_magic_despeck( + &s->params[side_index],s->img_buffers[side_index],s->val[OPT_SWDESPECK].w + ); + if(ret){ + DBG (5, "buffer_despeck: bad despeck, bailing\n"); + ret = SANE_STATUS_GOOD; + goto cleanup; + } + + cleanup: + DBG (10, "buffer_despeck: finish\n"); + return ret; +} + +/* Look if image has too few dark pixels. + * FIXME: should we do this before we binarize instead of after? */ +int +buffer_isblank(PKV_DEV s, int side) +{ + SANE_Status ret = SANE_STATUS_GOOD; + int side_index = (side == SIDE_FRONT)?0:1; + int status = 0; + + DBG (10, "buffer_isblank: start\n"); + + ret = sanei_magic_isBlank( + &s->params[side_index],s->img_buffers[side_index], + SANE_UNFIX(s->val[OPT_SWSKIP].w) + ); + + if(ret == SANE_STATUS_NO_DOCS){ + DBG (5, "buffer_isblank: blank!\n"); + status = 1; + } + else if(ret){ + DBG (5, "buffer_isblank: error %d\n",ret); + } + + DBG (10, "buffer_isblank: finished\n"); + return status; +} + +/* Look if image needs rotation + * FIXME: should we do this before we binarize instead of after? */ +SANE_Status +buffer_rotate(PKV_DEV s, int side) +{ + SANE_Status ret = SANE_STATUS_GOOD; + int angle = 0; + int side_index = (side == SIDE_FRONT)?0:1; + int resolution = s->val[OPT_RESOLUTION].w; + + DBG (10, "buffer_rotate: start\n"); + + if(s->val[OPT_SWDEROTATE].w){ + ret = sanei_magic_findTurn( + &s->params[side_index],s->img_buffers[side_index], + resolution,resolution,&angle); + + if(ret){ + DBG (5, "buffer_rotate: error %d\n",ret); + ret = SANE_STATUS_GOOD; + goto cleanup; + } + } + + angle += s->val[OPT_ROTATE].w; + + /*90 or 270 degree rotations are reversed on back side*/ + if(side == SIDE_BACK && s->val[OPT_ROTATE].w % 180){ + angle += 180; + } + + ret = sanei_magic_turn( + &s->params[side_index],s->img_buffers[side_index], + angle); + + if(ret){ + DBG (5, "buffer_rotate: error %d\n",ret); + ret = SANE_STATUS_GOOD; + goto cleanup; + } + + /* update image size counter to new, smaller size */ + s->img_size[side_index] + = s->params[side_index].lines * s->params[side_index].bytes_per_line; + + cleanup: + DBG (10, "buffer_rotate: finished\n"); + return ret; +} diff -Nru sane-backends-1.0.22/backend/kvs1025_low.h sane-backends-1.0.23/backend/kvs1025_low.h --- sane-backends-1.0.22/backend/kvs1025_low.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs1025_low.h 2011-07-06 20:17:25.000000000 +0000 @@ -130,6 +130,14 @@ OPT_INVERSE, /* Inverse image */ OPT_MIRROR, /* Mirror image */ OPT_JPEG, /* JPEG Compression */ + OPT_ROTATE, /* Rotate image */ + + OPT_SWDESKEW, /* Software deskew */ + OPT_SWDESPECK, /* Software despeckle */ + OPT_SWDEROTATE, /* Software detect/correct 90 deg. rotation */ + OPT_SWCROP, /* Software autocrop */ + OPT_SWSKIP, /* Software blank page skip */ + /* must come last: */ OPT_NUM_OPTIONS } KV_OPTION; @@ -180,8 +188,17 @@ int current_page; /* the current page number, 0 is page 1 */ int current_side; /* the current side */ int bytes_to_read[2]; /* bytes to read */ - /* Support info */ + /* --------------------------------------------------------------------- */ + /* values used by the software enhancment code (deskew, crop, etc) */ + SANE_Status deskew_stat; + int deskew_vals[2]; + double deskew_slope; + + SANE_Status crop_stat; + int crop_vals[4]; + + /* Support info */ KV_SUPPORT_INFO support_info; SANE_Range x_range, y_range; @@ -264,4 +281,10 @@ SANE_Status ReadImageDataDuplex (PKV_DEV dev, int page); SANE_Status ReadImageData (PKV_DEV dev, int page); +SANE_Status buffer_deskew (PKV_DEV dev, int side); +SANE_Status buffer_crop (PKV_DEV dev, int side); +SANE_Status buffer_despeck (PKV_DEV dev, int side); +int buffer_isblank (PKV_DEV dev, int side); +SANE_Status buffer_rotate(PKV_DEV dev, int side); + #endif /* #ifndef __KVS1025_LOW_H */ diff -Nru sane-backends-1.0.22/backend/kvs1025_opt.c sane-backends-1.0.23/backend/kvs1025_opt.c --- sane-backends-1.0.22/backend/kvs1025_opt.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs1025_opt.c 2011-07-06 20:17:25.000000000 +0000 @@ -255,6 +255,12 @@ static SANE_Range go_jpeg_compression_range = { 0, 0x64, 0 }; +static SANE_Range go_rotate_range = { 0, 270, 90 }; + +static SANE_Range go_swdespeck_range = { 0, 9, 1 }; + +static SANE_Range go_swskip_range = { SANE_FIX(0), SANE_FIX(100), 1 }; + static const char *go_option_name[] = { "OPT_NUM_OPTS", @@ -294,9 +300,15 @@ "OPT_LAMP", /* Lamp -- color drop out */ "OPT_INVERSE", /* Inverse image */ "OPT_MIRROR", /* Mirror image */ - "OPT_JPEG", /* */ - "OPT_SEPARATION_SHEET", /* Detect Separation Sheet */ - "OPT_CONTROL_SHEET", /* Detect Control Sheet */ + "OPT_JPEG", /* JPEG Compression */ + "OPT_ROTATE", /* Rotate image */ + + "OPT_SWDESKEW", /* Software deskew */ + "OPT_SWDESPECK", /* Software despeckle */ + "OPT_SWDEROTATE", /* Software detect/correct 90 deg. rotation */ + "OPT_SWCROP", /* Software autocrop */ + "OPT_SWSKIP", /* Software blank page skip */ + /* must come last: */ "OPT_NUM_OPTIONS" }; @@ -843,6 +855,67 @@ dev->opt[OPT_JPEG].constraint.range = &(go_jpeg_compression_range); dev->val[OPT_JPEG].w = 0; + /* Image Rotation */ + dev->opt[OPT_ROTATE].name = "rotate"; + dev->opt[OPT_ROTATE].title = SANE_I18N ("Rotate image clockwise"); + dev->opt[OPT_ROTATE].desc = + SANE_I18N("Request driver to rotate pages by a fixed amount"); + dev->opt[OPT_ROTATE].type = SANE_TYPE_INT; + dev->opt[OPT_ROTATE].unit = SANE_UNIT_NONE; + dev->opt[OPT_ROTATE].size = sizeof (SANE_Int); + dev->opt[OPT_ROTATE].constraint_type = SANE_CONSTRAINT_RANGE; + dev->opt[OPT_ROTATE].constraint.range = &(go_rotate_range); + dev->val[OPT_ROTATE].w = 0; + + /* Software Deskew */ + dev->opt[OPT_SWDESKEW].name = "swdeskew"; + dev->opt[OPT_SWDESKEW].title = SANE_I18N ("Software deskew"); + dev->opt[OPT_SWDESKEW].desc = + SANE_I18N("Request driver to rotate skewed pages digitally"); + dev->opt[OPT_SWDESKEW].type = SANE_TYPE_BOOL; + dev->opt[OPT_SWDESKEW].unit = SANE_UNIT_NONE; + dev->val[OPT_SWDESKEW].w = SANE_FALSE; + + /* Software Despeckle */ + dev->opt[OPT_SWDESPECK].name = "swdespeck"; + dev->opt[OPT_SWDESPECK].title = SANE_I18N ("Software despeckle diameter"); + dev->opt[OPT_SWDESPECK].desc = + SANE_I18N("Maximum diameter of lone dots to remove from scan"); + dev->opt[OPT_SWDESPECK].type = SANE_TYPE_INT; + dev->opt[OPT_SWDESPECK].unit = SANE_UNIT_NONE; + dev->opt[OPT_SWDESPECK].size = sizeof (SANE_Int); + dev->opt[OPT_SWDESPECK].constraint_type = SANE_CONSTRAINT_RANGE; + dev->opt[OPT_SWDESPECK].constraint.range = &(go_swdespeck_range); + dev->val[OPT_SWDESPECK].w = 0; + + /* Software Derotate */ + dev->opt[OPT_SWDEROTATE].name = "swderotate"; + dev->opt[OPT_SWDEROTATE].title = SANE_I18N ("Software derotate"); + dev->opt[OPT_SWDEROTATE].desc = + SANE_I18N("Request driver to detect and correct 90 degree image rotation"); + dev->opt[OPT_SWDEROTATE].type = SANE_TYPE_BOOL; + dev->opt[OPT_SWDEROTATE].unit = SANE_UNIT_NONE; + dev->val[OPT_SWDEROTATE].w = SANE_FALSE; + + /* Software Autocrop*/ + dev->opt[OPT_SWCROP].name = "swcrop"; + dev->opt[OPT_SWCROP].title = SANE_I18N ("Software automatic cropping"); + dev->opt[OPT_SWCROP].desc = + SANE_I18N("Request driver to remove border from pages digitally"); + dev->opt[OPT_SWCROP].type = SANE_TYPE_BOOL; + dev->opt[OPT_SWCROP].unit = SANE_UNIT_NONE; + dev->val[OPT_SWCROP].w = SANE_FALSE; + + /* Software blank page skip */ + dev->opt[OPT_SWSKIP].name = "swskip"; + dev->opt[OPT_SWSKIP].title = SANE_I18N ("Software blank skip percentage"); + dev->opt[OPT_SWSKIP].desc + = SANE_I18N("Request driver to discard pages with low numbers of dark pixels"); + dev->opt[OPT_SWSKIP].type = SANE_TYPE_FIXED; + dev->opt[OPT_SWSKIP].unit = SANE_UNIT_PERCENT; + dev->opt[OPT_SWSKIP].constraint_type = SANE_CONSTRAINT_RANGE; + dev->opt[OPT_SWSKIP].constraint.range = &(go_swskip_range); + /* Lastly, set the default scan mode. This might change some * values previously set here. */ sane_control_option (dev, OPT_PAPER_SIZE, SANE_ACTION_SET_VALUE, @@ -918,6 +991,12 @@ case OPT_MIRROR: case OPT_FEED_TIMEOUT: case OPT_JPEG: + case OPT_ROTATE: + case OPT_SWDESKEW: + case OPT_SWDESPECK: + case OPT_SWDEROTATE: + case OPT_SWCROP: + case OPT_SWSKIP: case OPT_FIT_TO_PAGE: *(SANE_Word *) val = dev->val[option].w; DBG (DBG_error, "opt value = %d\n", *(SANE_Word *) val); @@ -1083,6 +1162,12 @@ case OPT_MIRROR: case OPT_AUTOMATIC_SEPARATION: case OPT_JPEG: + case OPT_ROTATE: + case OPT_SWDESKEW: + case OPT_SWDESPECK: + case OPT_SWDEROTATE: + case OPT_SWCROP: + case OPT_SWSKIP: case OPT_FIT_TO_PAGE: dev->val[option].w = *(SANE_Word *) val; return SANE_STATUS_GOOD; diff -Nru sane-backends-1.0.22/backend/kvs1025_usb.c sane-backends-1.0.23/backend/kvs1025_usb.c --- sane-backends-1.0.22/backend/kvs1025_usb.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs1025_usb.c 2011-07-06 20:17:25.000000000 +0000 @@ -77,7 +77,10 @@ strcpy (dev->scsi_type_str, "ADF Scanner"); strcpy (dev->scsi_vendor, "Panasonic"); strcpy (dev->scsi_product, - product == (int) KV_S1025C ? "KV-S1025C" : "KV-S1020C"); + product == (int) KV_S1020C ? "KV-S1020C" : + product == (int) KV_S1025C ? "KV-S1025C" : + product == (int) KV_S1045C ? "KV-S1045C" : + "KV-S10xxC"); strcpy (dev->scsi_version, "1.00"); /* Set SANE_Device */ diff -Nru sane-backends-1.0.22/backend/kvs20xx.c sane-backends-1.0.23/backend/kvs20xx.c --- sane-backends-1.0.22/backend/kvs20xx.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs20xx.c 2012-08-10 00:33:29.000000000 +0000 @@ -24,9 +24,6 @@ #include "kvs20xx.h" #include "kvs20xx_cmd.h" -/* private functions */ -SANE_Status attach (SANE_String_Const devname); - struct known_device { const SANE_Int id; @@ -98,7 +95,7 @@ } } -SANE_Status +static SANE_Status attach (SANE_String_Const devname) { int i = 0; @@ -192,7 +189,7 @@ return st; if (st) { - st = sanei_scsi_open (devname, &h, sense_handler, NULL); + st = sanei_scsi_open (devname, &h, kvs20xx_sense_handler, NULL); if (st) { return st; @@ -220,17 +217,17 @@ s->file = h; s->bus = bus; s->id = id; - init_options (s); + kvs20xx_init_options (s); *handle = s; for (i = 0; i < 3; i++) { - st = test_unit_ready (s); + st = kvs20xx_test_unit_ready (s); if (st) { if (s->bus == SCSI) { sanei_scsi_close (s->file); - st = sanei_scsi_open (devname, &h, sense_handler, NULL); + st = sanei_scsi_open (devname, &h, kvs20xx_sense_handler, NULL); if (st) return st; } @@ -256,7 +253,7 @@ if (i == 3) return SANE_STATUS_DEVICE_BUSY; - st = set_timeout (s, s->val[FEED_TIMEOUT].w); + st = kvs20xx_set_timeout (s, s->val[FEED_TIMEOUT].w); if (st) { sane_close (s); @@ -309,11 +306,11 @@ SANE_Status st; int i; if (!strcmp ("off", s->val[MANUALFEED].s)) - return document_exist (s); + return kvs20xx_document_exist (s); for (i = 0; i < s->val[FEED_TIMEOUT].w; i++) { - st = document_exist (s); + st = kvs20xx_document_exist (s); if (st != SANE_STATUS_NO_DOCS) return st; sleep (1); @@ -332,7 +329,7 @@ if (!s->scanning) { unsigned dummy_length; - st = test_unit_ready (s); + st = kvs20xx_test_unit_ready (s); if (st) return st; @@ -340,23 +337,23 @@ if (st) return st; - st = reset_window (s); + st = kvs20xx_reset_window (s); if (st) return st; - st = set_window (s, SIDE_FRONT); + st = kvs20xx_set_window (s, SIDE_FRONT); if (st) return st; if (duplex) { - st = set_window (s, SIDE_BACK); + st = kvs20xx_set_window (s, SIDE_BACK); if (st) return st; } - st = scan (s); + st = kvs20xx_scan (s); if (st) return st; - st = read_picture_element (s, SIDE_FRONT, &s->params); + st = kvs20xx_read_picture_element (s, SIDE_FRONT, &s->params); if (st) return st; if (duplex) @@ -401,25 +398,26 @@ s->read = 0; s->dummy_size = s->saved_dummy_size; s->side = SIDE_FRONT; - st = document_exist (s); + st = kvs20xx_document_exist (s); if (st) return st; for (mx = s->side_size * 2; !st; mx -= read, side ^= SIDE_BACK) - st = read_image_data (s, s->page, side, - &s->data[s->side_size * 2 - mx], mx, &read); + st = kvs20xx_read_image_data (s, s->page, side, + &s->data[s->side_size * 2 - mx], mx, + &read); } else { unsigned read, mx; s->read = 0; - st = document_exist (s); + st = kvs20xx_document_exist (s); if (st) return st; DBG (DBG_INFO, "start: %d\n", s->page); for (mx = s->side_size; !st; mx -= read) - st = read_image_data (s, s->page, SIDE_FRONT, - &s->data[s->side_size - mx], mx, &read); + st = kvs20xx_read_image_data (s, s->page, SIDE_FRONT, + &s->data[s->side_size - mx], mx, &read); } if (st && st != SANE_STATUS_EOF) { diff -Nru sane-backends-1.0.22/backend/kvs20xx.h sane-backends-1.0.23/backend/kvs20xx.h --- sane-backends-1.0.22/backend/kvs20xx.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs20xx.h 2012-08-10 00:33:29.000000000 +0000 @@ -153,8 +153,8 @@ u8 stop_mode; } __attribute__((__packed__)); -void init_options (struct scanner *); -void init_window (struct scanner *s, struct window *wnd, int wnd_id); +void kvs20xx_init_options (struct scanner *); +void kvs20xx_init_window (struct scanner *s, struct window *wnd, int wnd_id); static inline u16 swap_bytes16 (u16 x) diff -Nru sane-backends-1.0.22/backend/kvs20xx_cmd.c sane-backends-1.0.23/backend/kvs20xx_cmd.c --- sane-backends-1.0.22/backend/kvs20xx_cmd.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs20xx_cmd.c 2012-08-10 00:33:29.000000000 +0000 @@ -21,7 +21,7 @@ #include "kvs20xx.h" #include "kvs20xx_cmd.h" -SANE_Status +static SANE_Status usb_send_command (struct scanner *s, struct cmd *c, struct response *r, void *buf) { @@ -81,8 +81,8 @@ } SANE_Status -sense_handler (int __sane_unused__ fd, - u_char * sense_buffer, void __sane_unused__ * arg) +kvs20xx_sense_handler (int __sane_unused__ fd, + u_char * sense_buffer, void __sane_unused__ * arg) { unsigned i; SANE_Status st = SANE_STATUS_GOOD; @@ -105,7 +105,7 @@ return st; } -SANE_Status +static SANE_Status send_command (struct scanner * s, struct cmd * c) { SANE_Status st = SANE_STATUS_GOOD; @@ -131,7 +131,7 @@ st = usb_send_command (s, &c2, &r, b); if (st) return st; - st = sense_handler (0, b + sizeof (struct bulk_header), NULL); + st = kvs20xx_sense_handler (0, b + sizeof (struct bulk_header), NULL); } } else @@ -158,7 +158,7 @@ } SANE_Status -test_unit_ready (struct scanner * s) +kvs20xx_test_unit_ready (struct scanner * s) { struct cmd c = { {0}, @@ -175,7 +175,7 @@ } SANE_Status -set_timeout (struct scanner * s, int timeout) +kvs20xx_set_timeout (struct scanner * s, int timeout) { u16 t = cpu2be16 ((u16) timeout); struct cmd c = { @@ -199,7 +199,7 @@ } SANE_Status -set_window (struct scanner * s, int wnd_id) +kvs20xx_set_window (struct scanner * s, int wnd_id) { struct window wnd; struct cmd c = { @@ -215,13 +215,13 @@ c.data = &wnd; c.data_size = sizeof (wnd); - init_window (s, &wnd, wnd_id); + kvs20xx_init_window (s, &wnd, wnd_id); return send_command (s, &c); } SANE_Status -reset_window (struct scanner * s) +kvs20xx_reset_window (struct scanner * s) { struct cmd c = { {0}, @@ -236,7 +236,7 @@ } SANE_Status -scan (struct scanner * s) +kvs20xx_scan (struct scanner * s) { struct cmd c = { {0}, @@ -250,7 +250,7 @@ } SANE_Status -document_exist (struct scanner * s) +kvs20xx_document_exist (struct scanner * s) { SANE_Status status; struct cmd c = { @@ -275,7 +275,8 @@ } SANE_Status -read_picture_element (struct scanner * s, unsigned side, SANE_Parameters * p) +kvs20xx_read_picture_element (struct scanner * s, unsigned side, + SANE_Parameters * p) { SANE_Status status; struct cmd c = { @@ -300,7 +301,7 @@ return SANE_STATUS_GOOD; } -SANE_Status +static SANE_Status get_buffer_status (struct scanner * s, unsigned *data_avalible) { SANE_Status status; @@ -324,8 +325,8 @@ } SANE_Status -read_image_data (struct scanner * s, unsigned page, - unsigned side, void *buf, unsigned max_size, unsigned *size) +kvs20xx_read_image_data (struct scanner * s, unsigned page, unsigned side, + void *buf, unsigned max_size, unsigned *size) { SANE_Status status; struct cmd c = { @@ -348,7 +349,7 @@ return status; *size = c.data_size; - DBG (DBG_INFO, "read_image_data: read %d, status %d\n", *size, status); + DBG (DBG_INFO, "kvs20xx_read_image_data: read %d, status %d\n", *size, status); memcpy (buf, c.data, *size); return status; } diff -Nru sane-backends-1.0.22/backend/kvs20xx_cmd.h sane-backends-1.0.23/backend/kvs20xx_cmd.h --- sane-backends-1.0.22/backend/kvs20xx_cmd.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs20xx_cmd.h 2012-08-10 00:33:29.000000000 +0000 @@ -111,21 +111,18 @@ { 3, 0x80, 9, SANE_STATUS_JAMMED},}; -SANE_Status usb_send_command (struct scanner *s, struct cmd *c, - struct response *r, void *buf); -SANE_Status send_command (struct scanner * s, struct cmd * c); -SANE_Status test_unit_ready (struct scanner *s); -SANE_Status set_timeout (struct scanner *s, int timeout); -SANE_Status set_window (struct scanner *s, int wnd_id); -SANE_Status reset_window (struct scanner *s); -SANE_Status read_picture_element (struct scanner *s, unsigned side, - SANE_Parameters * p); -SANE_Status read_image_data (struct scanner *s, unsigned page, unsigned side, - void *buf, unsigned max_size, unsigned *size); -SANE_Status document_exist (struct scanner *s); -SANE_Status get_buffer_status (struct scanner *s, unsigned *data_avalible); -SANE_Status scan (struct scanner *s); +SANE_Status kvs20xx_scan (struct scanner *s); +SANE_Status kvs20xx_test_unit_ready (struct scanner *s); +SANE_Status kvs20xx_set_timeout (struct scanner *s, int timeout); +SANE_Status kvs20xx_set_window (struct scanner *s, int wnd_id); +SANE_Status kvs20xx_reset_window (struct scanner *s); +SANE_Status kvs20xx_read_picture_element (struct scanner *s, unsigned side, + SANE_Parameters * p); +SANE_Status kvs20xx_read_image_data (struct scanner *s, unsigned page, + unsigned side, void *buf, + unsigned max_size, unsigned *size); +SANE_Status kvs20xx_document_exist (struct scanner *s); SANE_Status get_adjust_data (struct scanner *s, unsigned *dummy_length); -SANE_Status sense_handler (int fd, u_char * sense_buffer, void *arg); +SANE_Status kvs20xx_sense_handler (int fd, u_char * sense_buffer, void *arg); #endif /*__KVS20XX_CMD_H*/ diff -Nru sane-backends-1.0.22/backend/kvs20xx_opt.c sane-backends-1.0.23/backend/kvs20xx_opt.c --- sane-backends-1.0.22/backend/kvs20xx_opt.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs20xx_opt.c 2012-08-10 00:33:29.000000000 +0000 @@ -142,7 +142,7 @@ /* Reset the options for that scanner. */ void -init_options (struct scanner *s) +kvs20xx_init_options (struct scanner *s) { int i; SANE_Option_Descriptor *o; @@ -590,7 +590,7 @@ case FEED_TIMEOUT: s->val[option].w = *(SANE_Word *) val; - return set_timeout (s, s->val[option].w); + return kvs20xx_set_timeout (s, s->val[option].w); /* String mode */ case IMAGE_EMPHASIS: @@ -679,7 +679,7 @@ } void -init_window (struct scanner *s, struct window *wnd, int wnd_id) +kvs20xx_init_window (struct scanner *s, struct window *wnd, int wnd_id) { int paper = str_index (paper_list, s->val[PAPER_SIZE].s); memset (wnd, 0, sizeof (struct window)); diff -Nru sane-backends-1.0.22/backend/kvs40xx.c sane-backends-1.0.23/backend/kvs40xx.c --- sane-backends-1.0.22/backend/kvs40xx.c 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs40xx.c 2012-08-19 20:27:18.000000000 +0000 @@ -0,0 +1,748 @@ +/* + Copyright (C) 2009, Panasonic Russia Ltd. + Copyright (C) 2010,2011, m. allan noah +*/ +/* + Panasonic KV-S40xx USB-SCSI scanner driver. +*/ + +#include "../include/sane/config.h" + +#include /*isspace*/ +#include /*tan*/ + +#include +#include +#include +#define DEBUG_NOT_STATIC +#include "../include/sane/sanei_backend.h" +#include "../include/sane/sane.h" +#include "../include/sane/saneopts.h" +#include "../include/sane/sanei.h" +#include "../include/sane/sanei_config.h" +#include "../include/sane/sanei_usb.h" +#include "../include/sane/sanei_scsi.h" +#include "lassert.h" + +#include "kvs40xx.h" + +#include "sane/sanei_debug.h" + +#define DATA_TAIL 0x200 + +struct known_device +{ + const SANE_Int id; + const SANE_Device scanner; +}; + +static const struct known_device known_devices[] = { + { + KV_S4085C, + { + "MATSHITA", + "KV-S4085C", + "High Speed Color ADF Scanner", + "scanner" + }, + }, + { + KV_S4065C, + { + "MATSHITA", + "KV-S4065C", + "High Speed Color ADF Scanner", + "scanner" + }, + }, + { + KV_S7075C, + { + "MATSHITA", + "KV-S7075C", + "High Speed Color ADF Scanner", + "scanner" + }, + }, +}; + +static inline SANE_Status buf_init(struct buf *b, SANE_Int sz) +{ + const int num = sz / BUF_SIZE + 1; + b->buf = (u8 **) realloc(b->buf, num * sizeof(u8 *)); + if (!b->buf) + return SANE_STATUS_NO_MEM; + memset(b->buf, 0, num * sizeof(void *)); + b->size = b->head = b->tail = 0; + b->sem = 0; + b->st = SANE_STATUS_GOOD; + pthread_cond_init(&b->cond, NULL); + pthread_mutex_init(&b->mu, NULL); + return SANE_STATUS_GOOD; +} + +static inline void buf_deinit(struct buf *b) +{ + int i; + if (!b->buf) + return; + for (i = b->head; i < b->tail; i++) + if (b->buf[i]) + free(b->buf[i]); + free(b->buf); + b->buf = NULL; + b->head = b->tail = 0; +} + +static inline SANE_Status new_buf(struct buf *b, u8 ** p) +{ + b->buf[b->tail] = (u8 *) malloc(BUF_SIZE); + if (!b->buf[b->tail]) + return SANE_STATUS_NO_MEM; + *p = b->buf[b->tail]; + ++b->tail; + return SANE_STATUS_GOOD; +} + +static inline SANE_Status buf_get_err(struct buf *b) +{ + return b->size ? SANE_STATUS_GOOD : b->st; +} + +static inline void buf_set_st(struct buf *b, SANE_Status st) +{ + pthread_mutex_lock(&b->mu); + b->st = st; + if (buf_get_err(b)) + pthread_cond_signal(&b->cond); + pthread_mutex_unlock(&b->mu); +} + +static inline void buf_cancel(struct buf *b) +{ + buf_set_st(b, SANE_STATUS_CANCELLED); +} + +static inline void push_buf(struct buf *b, SANE_Int sz) +{ + pthread_mutex_lock(&b->mu); + b->sem++; + b->size += sz; + pthread_cond_signal(&b->cond); + pthread_mutex_unlock(&b->mu); +} + +static inline u8 *get_buf(struct buf *b, SANE_Int * sz) +{ + SANE_Status err = buf_get_err(b); + if (err) + return NULL; + + pthread_mutex_lock(&b->mu); + while (!b->sem && !buf_get_err(b)) + pthread_cond_wait(&b->cond, &b->mu); + b->sem--; + err = buf_get_err(b); + if (!err) { + *sz = b->size < BUF_SIZE ? b->size : BUF_SIZE; + b->size -= *sz; + } + pthread_mutex_unlock(&b->mu); + return err ? NULL : b->buf[b->head]; +} + +static inline void pop_buf(struct buf *b) +{ + free(b->buf[b->head]); + b->buf[b->head] = NULL; + ++b->head; +} + +SANE_Status +sane_init (SANE_Int __sane_unused__ * version_code, + SANE_Auth_Callback __sane_unused__ authorize) +{ + DBG_INIT (); + DBG (DBG_INFO, "This is panasonic kvs40xx driver\n"); + + *version_code = SANE_VERSION_CODE (V_MAJOR, V_MINOR, 1); + + /* Initialize USB */ + sanei_usb_init (); + + return SANE_STATUS_GOOD; +} + +/* + * List of available devices, allocated by sane_get_devices, released + * by sane_exit() + */ +static SANE_Device **devlist = NULL; +static unsigned curr_scan_dev = 0; + +void +sane_exit (void) +{ + if (devlist) + { + int i; + for (i = 0; devlist[i]; i++) + { + free ((void *) devlist[i]); + } + free ((void *) devlist); + devlist = NULL; + } +} + +SANE_Status +attach (SANE_String_Const devname); + +SANE_Status +attach (SANE_String_Const devname) +{ + int i = 0; + if (devlist) + { + for (; devlist[i]; i++); + devlist = realloc (devlist, sizeof (SANE_Device *) * (i + 1)); + if (!devlist) + return SANE_STATUS_NO_MEM; + } + else + { + devlist = malloc (sizeof (SANE_Device *) * 2); + if (!devlist) + return SANE_STATUS_NO_MEM; + } + devlist[i] = malloc (sizeof (SANE_Device)); + if (!devlist[i]) + return SANE_STATUS_NO_MEM; + memcpy (devlist[i], &known_devices[curr_scan_dev].scanner, + sizeof (SANE_Device)); + devlist[i]->name = strdup (devname); + /* terminate device list with NULL entry: */ + devlist[i + 1] = 0; + DBG (DBG_INFO, "%s device attached\n", devname); + return SANE_STATUS_GOOD; +} + +/* Get device list */ +SANE_Status +sane_get_devices (const SANE_Device *** device_list, + SANE_Bool __sane_unused__ local_only) +{ + if (devlist) + { + int i; + for (i = 0; devlist[i]; i++) + { + free ((void *) devlist[i]); + } + free ((void *) devlist); + devlist = NULL; + } + + for (curr_scan_dev = 0; + curr_scan_dev < + sizeof (known_devices) / sizeof (known_devices[0]); curr_scan_dev++) + { + sanei_usb_find_devices (PANASONIC_ID, + known_devices[curr_scan_dev].id, attach); + } + + for (curr_scan_dev = 0; + curr_scan_dev < + sizeof (known_devices) / sizeof (known_devices[0]); curr_scan_dev++) + { + sanei_scsi_find_devices (known_devices[curr_scan_dev]. + scanner.vendor, + known_devices[curr_scan_dev]. + scanner.model, NULL, -1, -1, -1, -1, attach); + } + if(device_list) + *device_list = (const SANE_Device **) devlist; + return SANE_STATUS_GOOD; +} + +/* Open device, return the device handle */ +SANE_Status +sane_open (SANE_String_Const devname, SANE_Handle * handle) +{ + unsigned i, j, id = 0; + struct scanner *s; + SANE_Int h, bus; + SANE_Status st = SANE_STATUS_GOOD; + if (!devlist) + { + st = sane_get_devices (NULL, 0); + if (st) + return st; + } + for (i = 0; devlist[i]; i++) + { + if (!strcmp (devlist[i]->name, devname)) + break; + } + if (!devlist[i]) + return SANE_STATUS_INVAL; + for (j = 0; j < sizeof (known_devices) / sizeof (known_devices[0]); j++) + { + if (!strcmp (devlist[i]->model, known_devices[j].scanner.model)) + { + id = known_devices[j].id; + break; + } + } + + st = sanei_usb_open (devname, &h); + + if (st == SANE_STATUS_ACCESS_DENIED) + return st; + if (st) + { + st = sanei_scsi_open (devname, &h, kvs40xx_sense_handler, NULL); + if (st) + { + return st; + } + bus = SCSI; + } + else + { + bus = USB; + st = sanei_usb_claim_interface (h, 0); + if (st) + { + sanei_usb_close (h); + return st; + } + } + + s = malloc (sizeof (struct scanner)); + if (!s) + return SANE_STATUS_NO_MEM; + memset (s, 0, sizeof (struct scanner)); + s->buffer = malloc (MAX_READ_DATA_SIZE + BULK_HEADER_SIZE); + if (!s->buffer) + return SANE_STATUS_NO_MEM; + + s->file = h; + s->bus = bus; + s->id = id; + strcpy (s->name, devname); + *handle = s; + for (i = 0; i < 3; i++) + { + st = kvs40xx_test_unit_ready (s); + if (st) + { + if (s->bus == SCSI) + { + sanei_scsi_close (s->file); + st = sanei_scsi_open (devname, &h, kvs40xx_sense_handler, NULL); + if (st) + return st; + } + else + { + sanei_usb_release_interface (s->file, 0); + sanei_usb_close (s->file); + st = sanei_usb_open (devname, &h); + if (st) + return st; + st = sanei_usb_claim_interface (h, 0); + if (st) + { + sanei_usb_close (h); + return st; + } + } + s->file = h; + } + else + break; + } + if (i == 3) + return SANE_STATUS_DEVICE_BUSY; + + if (id == KV_S4085C || id == KV_S4065C) + { + char str[16]; + st = inquiry (s, str); + if (st) + goto err; + if (id == KV_S4085C) + s->id = !strcmp (str, "KV-S4085CL") ? KV_S4085CL : KV_S4085CW; + else + s->id = !strcmp (str, "KV-S4065CL") ? KV_S4065CL : KV_S4065CW; + } + kvs40xx_init_options (s); + st = kvs40xx_set_timeout (s, s->val[FEED_TIMEOUT].w); + if (st) + goto err; + + return SANE_STATUS_GOOD; +err: + sane_close (s); + return st; +} + +/* Close device */ +void +sane_close (SANE_Handle handle) +{ + struct scanner *s = (struct scanner *) handle; + unsigned i; + hopper_down (s); + if (s->bus == USB) + { + sanei_usb_release_interface (s->file, 0); + sanei_usb_close (s->file); + } + else + sanei_scsi_close (s->file); + + for (i = 1; i < NUM_OPTIONS; i++) + { + if (s->opt[i].type == SANE_TYPE_STRING && s->val[i].s) + free (s->val[i].s); + } + + for (i = 0; i < sizeof (s->buf) / sizeof (s->buf[0]); i++) + buf_deinit (&s->buf[i]); + + free (s->buffer); + free (s); + +} + +/* Get option descriptor */ +const SANE_Option_Descriptor * +sane_get_option_descriptor (SANE_Handle handle, SANE_Int option) +{ + struct scanner *s = handle; + + if ((unsigned) option >= NUM_OPTIONS || option < 0) + return NULL; + return s->opt + option; +} + +static SANE_Status +wait_document (struct scanner *s) +{ + SANE_Status st; + int i; + if (!strcmp ("fb", s->val[SOURCE].s)) + return SANE_STATUS_GOOD; + if (!strcmp ("off", s->val[MANUALFEED].s)) + return kvs40xx_document_exist (s); + + for (i = 0; i < s->val[FEED_TIMEOUT].w; i++) + { + st = kvs40xx_document_exist (s); + if (st != SANE_STATUS_NO_DOCS) + return st; + sleep (1); + } + return SANE_STATUS_NO_DOCS; +} + +static SANE_Status read_image_duplex(SANE_Handle handle) +{ + struct scanner *s = (struct scanner *) handle; + SANE_Status st = SANE_STATUS_GOOD; + unsigned read, side; + int i; + struct side { + unsigned mx, eof; + u8 *p; + struct buf *buf; + } a[2], *b; + + for (i = 0; i < 2; i++) { + a[i].mx = BUF_SIZE; + a[i].eof = 0; + a[i].buf = &s->buf[i]; + st = new_buf(&s->buf[i], &a[i].p); + if (st) + goto err; + } + for (b = &a[0], side = SIDE_FRONT; (!a[0].eof || !a[1].eof);) { + pthread_testcancel(); + if (b->mx == 0) { + push_buf(b->buf, BUF_SIZE); + st = new_buf(b->buf, &b->p); + if (st) + goto err; + b->mx = BUF_SIZE; + } + + st = kvs40xx_read_image_data(s, s->page, side, + b->p + BUF_SIZE - b->mx, b->mx, + &read); + b->mx -= read; + if (st) { + if (st != INCORRECT_LENGTH + && st != SANE_STATUS_EOF) + goto err; + + if (st == SANE_STATUS_EOF) { + b->eof = 1; + push_buf(b->buf, BUF_SIZE - b->mx); + } + side ^= SIDE_BACK; + b = &a[side == SIDE_FRONT ? 0 : 1]; + } + } + + err: + for (i = 0; i < 2; i++) + buf_set_st(&s->buf[i], st); + return st; +} + +static SANE_Status read_image_simplex(SANE_Handle handle) +{ + struct scanner *s = (struct scanner *) handle; + SANE_Status st = SANE_STATUS_GOOD; + + for (; (!st || st == INCORRECT_LENGTH);) { + unsigned read, mx; + unsigned char *p = NULL; + st = new_buf(&s->buf[0], &p); + for (read = 0, mx = BUF_SIZE; mx && + (!st || st == INCORRECT_LENGTH); mx -= read) { + pthread_testcancel(); + st = kvs40xx_read_image_data(s, s->page, SIDE_FRONT, + p + BUF_SIZE - mx, mx, + &read); + } + push_buf(&s->buf[0], BUF_SIZE - mx); + } + buf_set_st(&s->buf[0], st); + return st; +} + +static SANE_Status read_data(struct scanner *s) +{ + SANE_Status st; + int duplex = s->val[DUPLEX].w; + s->read = 0; + s->side = SIDE_FRONT; + + st = duplex ? read_image_duplex(s) : read_image_simplex(s); + if (st && (st != SANE_STATUS_EOF)) + goto err; + + st = kvs40xx_read_picture_element(s, SIDE_FRONT, &s->params); + if (st) + goto err; + if (!s->params.lines) { + st = SANE_STATUS_INVAL; + goto err; + } + + sane_get_parameters(s, NULL); + + s->page++; + return SANE_STATUS_GOOD; + err: + s->scanning = 0; + return st; +} + +/* Start scanning */ +SANE_Status +sane_start (SANE_Handle handle) +{ + struct scanner *s = (struct scanner *) handle; + SANE_Status st = SANE_STATUS_GOOD; + int duplex = s->val[DUPLEX].w, i; + unsigned data_avalible; + int start = 0; + + if (s->thread) + { + pthread_join (s->thread, NULL); + s->thread = 0; + } + if (!s->scanning) + { + st = kvs40xx_test_unit_ready (s); + if (st) + return st; + + st = wait_document (s); + if (st) + return st; + + st = kvs40xx_reset_window (s); + if (st) + return st; + st = kvs40xx_set_window (s, SIDE_FRONT); + + if (st) + return st; + + if (duplex) + { + st = kvs40xx_set_window (s, SIDE_BACK); + if (st) + return st; + } + + st = kvs40xx_scan (s); + if (st) + return st; + + if (s->val[CROP].b || s->val[LENGTHCTL].b || s->val[LONG_PAPER].b) + { + unsigned w, h, res = s->val[RESOLUTION].w; + SANE_Parameters *p = &s->params; + w = 297; /*A3 */ + h = 420; + p->pixels_per_line = w * res / 25.4 + .5; + p->lines = h * res / 25.4 + .5; + } + else + { + st = kvs40xx_read_picture_element (s, SIDE_FRONT, &s->params); + if (st) + return st; + } + + start = 1; + s->scanning = 1; + s->page = 0; + s->read = 0; + s->side = SIDE_FRONT; + sane_get_parameters (s, NULL); + } + + if (duplex && s->side == SIDE_FRONT && !start) + { + s->side = SIDE_BACK; + s->read = 0; + return SANE_STATUS_GOOD; + } + do { + st = get_buffer_status(s, &data_avalible); + if (st) + goto err; + + } while (!data_avalible); + + for (i = 0; i < (duplex ? 2 : 1); i++) + { + st = buf_init (&s->buf[i], s->side_size); + if (st) + goto err; + } + + if (pthread_create (&s->thread, NULL, (void *(*)(void *)) read_data, s)) + { + st = SANE_STATUS_IO_ERROR; + goto err; + } + + if (s->val[CROP].b || s->val[LENGTHCTL].b || s->val[LONG_PAPER].b) + { + pthread_join (s->thread, NULL); + s->thread = 0; + } + + return SANE_STATUS_GOOD; +err: + s->scanning = 0; + return st; +} + +SANE_Status +sane_read(SANE_Handle handle, SANE_Byte * buf, + SANE_Int max_len, SANE_Int * len) +{ + struct scanner *s = (struct scanner *) handle; + int duplex = s->val[DUPLEX].w; + struct buf *b = s->side == SIDE_FRONT ? &s->buf[0] : &s->buf[1]; + SANE_Status err = buf_get_err(b); + SANE_Int inbuf = 0; + *len = 0; + + if (!s->scanning) + return SANE_STATUS_EOF; + if (err) + goto out; + + if (s->read) { + *len = + max_len < + (SANE_Int) s->read ? max_len : (SANE_Int) s->read; + memcpy(buf, s->data + BUF_SIZE - s->read, *len); + s->read -= *len; + + if (!s->read) + pop_buf(b); + goto out; + } + + s->data = get_buf(b, &inbuf); + if (!s->data) + goto out; + + *len = max_len < inbuf ? max_len : inbuf; + if (*len > BUF_SIZE) + *len = BUF_SIZE; + memcpy(buf, s->data, *len); + s->read = inbuf > BUF_SIZE ? BUF_SIZE - *len : inbuf - *len; + + if (!s->read) + pop_buf(b); + out: + err = *len ? SANE_STATUS_GOOD : buf_get_err(b); + if (err == SANE_STATUS_EOF) { + if (strcmp(s->val[FEEDER_MODE].s, SANE_I18N("continuous"))) { + if (!duplex || s->side == SIDE_BACK) + s->scanning = 0; + } + buf_deinit(b); + } else if (err) { + unsigned i; + for (i = 0; i < sizeof(s->buf) / sizeof(s->buf[0]); i++) + buf_deinit(&s->buf[i]); + } + return err; +} + +void +sane_cancel (SANE_Handle handle) +{ + unsigned i; + struct scanner *s = (struct scanner *) handle; + if (s->scanning && !strcmp (s->val[FEEDER_MODE].s, SANE_I18N ("continuous"))) + { + stop_adf (s); + } + if (s->thread) + { + pthread_cancel (s->thread); + pthread_join (s->thread, NULL); + s->thread = 0; + } + for (i = 0; i < sizeof (s->buf) / sizeof (s->buf[0]); i++) + buf_deinit (&s->buf[i]); + s->scanning = 0; +} + +SANE_Status +sane_set_io_mode (SANE_Handle __sane_unused__ h, SANE_Bool __sane_unused__ m) +{ + return SANE_STATUS_UNSUPPORTED; +} + +SANE_Status +sane_get_select_fd (SANE_Handle __sane_unused__ h, + SANE_Int __sane_unused__ * fd) +{ + return SANE_STATUS_UNSUPPORTED; +} diff -Nru sane-backends-1.0.22/backend/kvs40xx.h sane-backends-1.0.23/backend/kvs40xx.h --- sane-backends-1.0.22/backend/kvs40xx.h 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs40xx.h 2012-08-19 20:27:18.000000000 +0000 @@ -0,0 +1,275 @@ +#ifndef __KVS40XX_H +#define __KVS40XX_H + +/* + Copyright (C) 2009, Panasonic Russia Ltd. +*/ +/* + Panasonic KV-S40xx USB-SCSI scanner driver. +*/ + +#include "../include/sane/config.h" +#include + +#undef BACKEND_NAME +#define BACKEND_NAME kvs40xx + +#define DBG_ERR 1 +#define DBG_WARN 2 +#define DBG_MSG 3 +#define DBG_INFO 4 +#define DBG_DBG 5 + +#define PANASONIC_ID 0x04da +#define KV_S4085C 0x100c +#define KV_S4065C 0x100d +#define KV_S7075C 0x100e + +#define KV_S4085CL (KV_S4085C|0x10000) +#define KV_S4085CW (KV_S4085C|0x20000) +#define KV_S4065CL (KV_S4065C|0x10000) +#define KV_S4065CW (KV_S4065C|0x20000) + +#define USB 1 +#define SCSI 2 +#define BULK_HEADER_SIZE 12 +#define MAX_READ_DATA_SIZE (0x10000-0x100) +#define BUF_SIZE MAX_READ_DATA_SIZE + +#define INCORRECT_LENGTH 0xfafafafa + +typedef unsigned char u8; +typedef unsigned u32; +typedef unsigned short u16; + +#define SIDE_FRONT 0x00 +#define SIDE_BACK 0x80 + +/* options */ +typedef enum +{ + NUM_OPTS = 0, + + /* General options */ + MODE_GROUP, + MODE, /* scanner modes */ + RESOLUTION, /* X and Y resolution */ + SOURCE, + + DUPLEX, /* Duplex mode */ + FEEDER_MODE, /* Feeder mode, fixed to Continous */ + LENGTHCTL, /* Length control mode */ + LONG_PAPER, + MANUALFEED, /* Manual feed mode */ + FEED_TIMEOUT, /* Feed timeout */ + DBLFEED, /* Double feed detection mode */ + DFEED_SENCE, + DFSTOP, + DFEED_L, + DFEED_C, + DFEED_R, + STAPELED_DOC, /* Detect stapled document */ + FIT_TO_PAGE, /* Scanner shrinks image to fit scanned page */ + + /* Geometry group */ + GEOMETRY_GROUP, + PAPER_SIZE, /* Paper size */ + LANDSCAPE, /* true if landscape */ + TL_X, /* upper left X */ + TL_Y, /* upper left Y */ + BR_X, /* bottom right X */ + BR_Y, /* bottom right Y */ + + ADVANCED_GROUP, + BRIGHTNESS, /* Brightness */ + CONTRAST, /* Contrast */ + THRESHOLD, /* Binary threshold */ + AUTOMATIC_THRESHOLD, + WHITE_LEVEL, + NOISE_REDUCTION, + INVERSE, /* Monochrome reversing */ + IMAGE_EMPHASIS, /* Image emphasis */ + GAMMA_CORRECTION, /* Gamma correction */ + LAMP, /* Lamp -- color drop out */ + RED_CHROMA, + BLUE_CHROMA, + HALFTONE_PATTERN, /* Halftone pattern */ + COMPRESSION, /* JPEG Compression */ + COMPRESSION_PAR, /* Compression parameter */ + DESKEW, + STOP_SKEW, + CROP, + MIRROR, + BTMPOS, + TOPPOS, + + /* must come last: */ + NUM_OPTIONS +} KV_OPTION; + + +struct buf +{ + u8 **buf; + volatile int head; + volatile int tail; + volatile unsigned size; + volatile int sem; + volatile SANE_Status st; + pthread_mutex_t mu; + pthread_cond_t cond; +}; + +struct scanner +{ + char name[128]; + unsigned id; + volatile int scanning; + int page; + int side; + int bus; + SANE_Int file; + SANE_Option_Descriptor opt[NUM_OPTIONS]; + Option_Value val[NUM_OPTIONS]; + SANE_Parameters params; + u8 *buffer; + struct buf buf[2]; + u8 *data; + unsigned side_size; + unsigned read; + pthread_t thread; +}; + +struct window +{ + u8 reserved[6]; + u8 window_descriptor_block_length[2]; + + u8 window_identifier; + u8 reserved2; + u8 x_resolution[2]; + u8 y_resolution[2]; + u8 upper_left_x[4]; + u8 upper_left_y[4]; + u8 width[4]; + u8 length[4]; + u8 brightness; + u8 threshold; + u8 contrast; + u8 image_composition; + u8 bit_per_pixel; + u8 halftone_pattern[2]; + u8 rif_padding; /*RIF*/ + u8 bit_ordering[2]; + u8 compression_type; + u8 compression_argument; + u8 reserved4[6]; + + u8 vendor_unique_identifier; + u8 nobuf_fstspeed_dfstop; + u8 mirror_image; + u8 image_emphasis; + u8 gamma_correction; + u8 mcd_lamp_dfeed_sens; + u8 reserved5; /*rmoir*/ + u8 document_size; + u8 document_width[4]; + u8 document_length[4]; + u8 ahead_deskew_dfeed_scan_area_fspeed_rshad; + u8 continuous_scanning_pages; + u8 automatic_threshold_mode; + u8 automatic_separation_mode; + u8 standard_white_level_mode; + u8 b_wnr_noise_reduction; + u8 mfeed_toppos_btmpos_dsepa_hsepa_dcont_rstkr; + u8 stop_mode; + u8 red_chroma; + u8 blue_chroma; +}; + +struct support_info +{ + /*TODO: */ + unsigned char data[32]; +}; + +void kvs40xx_init_options (struct scanner *); +SANE_Status kvs40xx_test_unit_ready (struct scanner *s); +SANE_Status kvs40xx_set_timeout (struct scanner *s, int timeout); +void kvs40xx_init_window (struct scanner *s, struct window *wnd, int wnd_id); +SANE_Status kvs40xx_set_window (struct scanner *s, int wnd_id); +SANE_Status kvs40xx_reset_window (struct scanner *s); +SANE_Status kvs40xx_read_picture_element (struct scanner *s, unsigned side, + SANE_Parameters * p); +SANE_Status read_support_info (struct scanner *s, struct support_info *inf); +SANE_Status kvs40xx_read_image_data (struct scanner *s, unsigned page, + unsigned side, void *buf, + unsigned max_size, unsigned *size); +SANE_Status kvs40xx_document_exist (struct scanner *s); +SANE_Status get_buffer_status (struct scanner *s, unsigned *data_avalible); +SANE_Status kvs40xx_scan (struct scanner *s); +SANE_Status kvs40xx_sense_handler (int fd, u_char * sense_buffer, void *arg); +SANE_Status stop_adf (struct scanner *s); +SANE_Status hopper_down (struct scanner *s); +SANE_Status inquiry (struct scanner *s, char *id); + +static inline u16 +swap_bytes16 (u16 x) +{ + return x << 8 | x >> 8; +} +static inline u32 +swap_bytes32 (u32 x) +{ + return x << 24 | x >> 24 | + (x & (u32) 0x0000ff00UL) << 8 | (x & (u32) 0x00ff0000UL) >> 8; +} + +#if WORDS_BIGENDIAN +static inline void +set24 (u8 * p, u32 x) +{ + p[2] = x >> 16; + p[1] = x >> 8; + p[0] = x >> 0; +} + +#define cpu2be16(x) (x) +#define cpu2be32(x) (x) +#define cpu2le16(x) swap_bytes16(x) +#define cpu2le32(x) swap_bytes32(x) +#define le2cpu16(x) swap_bytes16(x) +#define le2cpu32(x) swap_bytes32(x) +#define be2cpu16(x) (x) +#define be2cpu32(x) (x) +#define BIT_ORDERING 0 +#elif __BYTE_ORDER == __LITTLE_ENDIAN +static inline void +set24 (u8 * p, u32 x) +{ + p[0] = x >> 16; + p[1] = x >> 8; + p[2] = x >> 0; +} + +#define cpu2le16(x) (x) +#define cpu2le32(x) (x) +#define cpu2be16(x) swap_bytes16(x) +#define cpu2be32(x) swap_bytes32(x) +#define le2cpu16(x) (x) +#define le2cpu32(x) (x) +#define be2cpu16(x) swap_bytes16(x) +#define be2cpu32(x) swap_bytes32(x) +#define BIT_ORDERING 1 +#else +#error __BYTE_ORDER not defined +#endif + + +static inline u32 +get24 (u8 * p) +{ + u32 x = (((u32) p[0]) << 16) | (((u32) p[1]) << 8) | (((u32) p[0]) << 0); + return x; +} +#endif /*__KVS40XX_H*/ diff -Nru sane-backends-1.0.22/backend/kvs40xx_cmd.c sane-backends-1.0.23/backend/kvs40xx_cmd.c --- sane-backends-1.0.22/backend/kvs40xx_cmd.c 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs40xx_cmd.c 2012-08-19 20:27:18.000000000 +0000 @@ -0,0 +1,601 @@ +/* + Copyright (C) 2009, Panasonic Russia Ltd. + Copyright (C) 2010,2011, m. allan noah +*/ +/* + Panasonic KV-S40xx USB-SCSI scanner driver. +*/ +#include "../include/sane/config.h" +#include + +#define DEBUG_DECLARE_ONLY +#define BACKEND_NAME kvs40xx + +#include "../include/sane/sanei_backend.h" +#include "../include/sane/saneopts.h" +#include "../include/sane/sanei.h" +#include "../include/sane/sanei_usb.h" +#include "../include/sane/sanei_scsi.h" +#include "../include/sane/sanei_config.h" + +#include "kvs40xx.h" + +#include "../include/sane/sanei_debug.h" + +#define COMMAND_BLOCK 1 +#define DATA_BLOCK 2 +#define RESPONSE_BLOCK 3 + +#define COMMAND_CODE 0x9000 +#define DATA_CODE 0xb000 +#define RESPONSE_CODE 0xa000 +#define STATUS_SIZE 4 + +struct bulk_header +{ + u32 length; + u16 type; + u16 code; + u32 transaction_id; +}; + +#define TEST_UNIT_READY 0x00 +#define INQUIRY 0x12 +#define SET_WINDOW 0x24 +#define SCAN 0x1B +#define SEND_10 0x2A +#define READ_10 0x28 +#define REQUEST_SENSE 0x03 +#define GET_BUFFER_STATUS 0x34 +#define SET_TIMEOUT 0xE1 +#define GET_ADJUST_DATA 0xE0 +#define HOPPER_DOWN 0xE1 +#define STOP_ADF 0xE1 + + + +#define SUPPORT_INFO 0x93 + + +#define GOOD 0 +#define CHECK_CONDITION 2 + +typedef enum +{ + CMD_NONE = 0, + CMD_IN = 0x81, /* scanner to pc */ + CMD_OUT = 0x02 /* pc to scanner */ +} CMD_DIRECTION; /* equals to endpoint address */ + +#define RESPONSE_SIZE 0x12 +#define MAX_CMD_SIZE 12 +struct cmd +{ + unsigned char cmd[MAX_CMD_SIZE]; + int cmd_size; + void *data; + int data_size; + int dir; +}; +struct response +{ + int status; + unsigned char data[RESPONSE_SIZE]; +}; + +static SANE_Status +usb_send_command (struct scanner *s, struct cmd *c, struct response *r, + void *buf) +{ + SANE_Status st; + struct bulk_header *h = (struct bulk_header *) buf; + u8 resp[sizeof (*h) + STATUS_SIZE]; + size_t sz = sizeof (*h) + MAX_CMD_SIZE; + memset (h, 0, sz); + h->length = cpu2be32 (sz); + h->type = cpu2be16 (COMMAND_BLOCK); + h->code = cpu2be16 (COMMAND_CODE); + memcpy (h + 1, c->cmd, c->cmd_size); + + st = sanei_usb_write_bulk (s->file, (const SANE_Byte *) h, &sz); + if (st) + return st; + + if (sz != sizeof (*h) + MAX_CMD_SIZE) + return SANE_STATUS_IO_ERROR; + + if (c->dir == CMD_IN) + { + unsigned l; + sz = sizeof (*h) + c->data_size; + c->data_size = 0; + st = sanei_usb_read_bulk (s->file, (SANE_Byte *) h, &sz); + for (l = sz; !st && l != be2cpu32 (h->length); l += sz) + { + DBG (DBG_WARN, "usb wrong read (%d instead %d)\n", + c->data_size, be2cpu32 (h->length)); + sz = be2cpu32 (h->length) - l; + st = sanei_usb_read_bulk (s->file, ((SANE_Byte *) h) + l, &sz); + + } + + c->data = h + 1; + + if (st) + { + st = sanei_usb_release_interface (s->file, 0); + if (st) + return st; + st = sanei_usb_claim_interface (s->file, 0); + + if (st) + return st; + + r->status = CHECK_CONDITION; + return SANE_STATUS_GOOD; + } + + c->data_size = sz - sizeof (*h); + + + } + else if (c->dir == CMD_OUT) + { + sz = sizeof (*h) + c->data_size; + memset (h, 0, sizeof (*h)); + h->length = cpu2be32 (sizeof (*h) + c->data_size); + h->type = cpu2be16 (DATA_BLOCK); + h->code = cpu2be16 (DATA_CODE); + memcpy (h + 1, c->data, c->data_size); + st = sanei_usb_write_bulk (s->file, (const SANE_Byte *) h, &sz); + if (st) + return st; + } + sz = sizeof (resp); + st = sanei_usb_read_bulk (s->file, resp, &sz); + if (st || sz != sizeof (resp)) + return SANE_STATUS_IO_ERROR; + + r->status = be2cpu32 (*((u32 *) (resp + sizeof (*h)))); + return st; +} + +#define END_OF_MEDIUM (1<<6) +#define INCORRECT_LENGTH_INDICATOR (1<<5) +static const struct +{ + unsigned sense, asc, ascq; + SANE_Status st; +} s_errors[] = +{ + { + 2, 0, 0, SANE_STATUS_DEVICE_BUSY}, + { + 2, 4, 1, SANE_STATUS_DEVICE_BUSY}, + { + 2, 4, 0x80, SANE_STATUS_COVER_OPEN}, + { + 2, 4, 0x81, SANE_STATUS_COVER_OPEN}, + { + 2, 4, 0x82, SANE_STATUS_COVER_OPEN}, + { + 2, 4, 0x83, SANE_STATUS_COVER_OPEN}, + { + 2, 4, 0x84, SANE_STATUS_COVER_OPEN}, + { + 2, 0x80, 1, SANE_STATUS_CANCELLED}, + { + 2, 0x80, 2, SANE_STATUS_CANCELLED}, + { + 3, 0x3a, 0, SANE_STATUS_NO_DOCS}, + { + 3, 0x80, 1, SANE_STATUS_JAMMED}, + { + 3, 0x80, 2, SANE_STATUS_JAMMED}, + { + 3, 0x80, 3, SANE_STATUS_JAMMED}, + { + 3, 0x80, 4, SANE_STATUS_JAMMED}, + { + 3, 0x80, 5, SANE_STATUS_JAMMED}, + { + 3, 0x80, 6, SANE_STATUS_JAMMED}, + { + 3, 0x80, 7, SANE_STATUS_JAMMED}, + { + 3, 0x80, 8, SANE_STATUS_JAMMED}, + { + 3, 0x80, 9, SANE_STATUS_JAMMED}, + { + 3, 0x80, 0xa, SANE_STATUS_JAMMED}, + { + 3, 0x80, 0xb, SANE_STATUS_JAMMED}, + { + 3, 0x80, 0xc, SANE_STATUS_JAMMED}, + { + 3, 0x80, 0xd, SANE_STATUS_JAMMED}, + { + 3, 0x80, 0xe, SANE_STATUS_JAMMED}, + { + 3, 0x80, 0xf, SANE_STATUS_JAMMED}, + { + 3, 0x80, 0x10, SANE_STATUS_JAMMED}, + { + 3, 0x80, 0x11, SANE_STATUS_JAMMED}, + { + 5, 0x1a, 0x0, SANE_STATUS_INVAL}, + { + 5, 0x20, 0x0, SANE_STATUS_INVAL}, + { + 5, 0x24, 0x0, SANE_STATUS_INVAL}, + { + 5, 0x25, 0x0, SANE_STATUS_INVAL}, + { + 5, 0x26, 0x0, SANE_STATUS_INVAL}, + { + 5, 0x2c, 0x01, SANE_STATUS_INVAL}, + { + 5, 0x2c, 0x02, SANE_STATUS_INVAL}, + { + 5, 0x2c, 0x80, SANE_STATUS_INVAL}, + { + 5, 0x2c, 0x81, SANE_STATUS_INVAL}, + { + 5, 0x2c, 0x82, SANE_STATUS_INVAL}, + { +5, 0x2c, 0x83, SANE_STATUS_INVAL},}; + +SANE_Status +kvs40xx_sense_handler (int __sane_unused__ fd, + u_char * sense_buffer, void __sane_unused__ * arg) +{ + unsigned i; + SANE_Status st = SANE_STATUS_GOOD; + if (sense_buffer[2] & 0xf) + { /*error */ + for (i = 0; i < sizeof (s_errors) / sizeof (s_errors[0]); i++) + { + if ((sense_buffer[2] & 0xf) == s_errors[i].sense + && sense_buffer[12] == s_errors[i].asc + && sense_buffer[13] == s_errors[i].ascq) + { + st = s_errors[i].st; + break; + } + } + if (i == sizeof (s_errors) / sizeof (s_errors[0])) + st = SANE_STATUS_IO_ERROR; + } + else + { + if (sense_buffer[2] & END_OF_MEDIUM) + st = SANE_STATUS_EOF; + else if (sense_buffer[2] & INCORRECT_LENGTH_INDICATOR) + st = INCORRECT_LENGTH; + } + + DBG (DBG_ERR, + "send_command: CHECK_CONDITION: sence:0x%x ASC:0x%x ASCQ:0x%x\n", + sense_buffer[2], sense_buffer[12], sense_buffer[13]); + + return st; +} + +static SANE_Status +send_command (struct scanner * s, struct cmd * c) +{ + SANE_Status st = SANE_STATUS_GOOD; + if (s->bus == USB) + { + struct response r; + memset (&r, 0, sizeof (r)); + st = usb_send_command (s, c, &r, s->buffer); + if (st) + return st; + if (r.status) + { + u8 b[sizeof (struct bulk_header) + RESPONSE_SIZE]; + struct cmd c2 = { + {0}, 6, + NULL, RESPONSE_SIZE, + CMD_IN + }; + c2.cmd[0] = REQUEST_SENSE; + c2.cmd[4] = RESPONSE_SIZE; + + st = usb_send_command (s, &c2, &r, b); + if (st) + return st; + st = kvs40xx_sense_handler (0, b + sizeof (struct bulk_header), NULL); + } + } + else + { + if (c->dir == CMD_OUT) + { + memcpy (s->buffer, c->cmd, c->cmd_size); + memcpy (s->buffer + c->cmd_size, c->data, c->data_size); + st = sanei_scsi_cmd (s->file, s->buffer, + c->cmd_size + c->data_size, NULL, NULL); + } + else if (c->dir == CMD_IN) + { + c->data = s->buffer; + st = sanei_scsi_cmd (s->file, c->cmd, c->cmd_size, + c->data, (size_t *) & c->data_size); + } + else + { + st = sanei_scsi_cmd (s->file, c->cmd, c->cmd_size, NULL, NULL); + } + } + return st; +} + +SANE_Status +kvs40xx_test_unit_ready (struct scanner * s) +{ + struct cmd c = { + {0}, 6, + NULL, 0, + CMD_NONE + }; + c.cmd[0] = TEST_UNIT_READY; + if (send_command (s, &c)) + return SANE_STATUS_DEVICE_BUSY; + + return SANE_STATUS_GOOD; +} + +SANE_Status +kvs40xx_set_timeout (struct scanner * s, int timeout) +{ + u16 t = cpu2be16 ((u16) timeout); + struct cmd c = { + {0}, 10, + NULL, 0, + CMD_OUT + }; + c.data = &t; + c.data_size = sizeof (t); + c.cmd[0] = SET_TIMEOUT; + c.cmd[2] = 0x8d; + *((u16 *) (c.cmd + 7)) = cpu2be16 (sizeof (t)); + if (s->bus == USB) + sanei_usb_set_timeout (timeout * 1000); + + return send_command (s, &c); +} + +SANE_Status +kvs40xx_set_window (struct scanner * s, int wnd_id) +{ + struct window wnd; + struct cmd c = { + {0}, 10, + NULL, 0, + CMD_OUT + }; + c.data = &wnd; + c.data_size = sizeof (wnd); + c.cmd[0] = SET_WINDOW; + *((u16 *) (c.cmd + 7)) = cpu2be16 (sizeof (wnd)); + kvs40xx_init_window (s, &wnd, wnd_id); + + return send_command (s, &c); +} + +SANE_Status +kvs40xx_reset_window (struct scanner * s) +{ + struct cmd c = { + {0}, 10, + NULL, 0, + CMD_NONE + }; + c.cmd[0] = SET_WINDOW; + + return send_command (s, &c); +} + +SANE_Status +kvs40xx_scan (struct scanner * s) +{ + struct cmd c = { + {0}, 6, + NULL, 0, + CMD_NONE + }; + c.cmd[0] = SCAN; + return send_command (s, &c); +} + +SANE_Status +hopper_down (struct scanner * s) +{ + struct cmd c = { + {0}, 10, + NULL, 0, + CMD_NONE + }; + c.cmd[0] = HOPPER_DOWN; + c.cmd[2] = 5; + + if (s->id == KV_S7075C) + return SANE_STATUS_GOOD; + return send_command (s, &c); +} + +SANE_Status +stop_adf (struct scanner * s) +{ + struct cmd c = { + {0}, 10, + NULL, 0, + CMD_NONE + }; + c.cmd[0] = STOP_ADF; + c.cmd[2] = 0x8b; + return send_command (s, &c); +} + +SANE_Status +kvs40xx_document_exist (struct scanner * s) +{ + SANE_Status status; + struct cmd c = { + {0}, 10, + NULL, 6, + CMD_IN + }; + u8 *d; + c.cmd[0] = READ_10; + c.cmd[2] = 0x81; + set24 (c.cmd + 6, c.data_size); + status = send_command (s, &c); + if (status) + return status; + d = c.data; + if (d[0] & 0x20) + return SANE_STATUS_GOOD; + + return SANE_STATUS_NO_DOCS; +} + +SANE_Status +kvs40xx_read_picture_element (struct scanner * s, unsigned side, + SANE_Parameters * p) +{ + SANE_Status status; + struct cmd c = { + {0}, 10, + NULL, 16, + CMD_IN + }; + u32 *data; + c.cmd[0] = READ_10; + c.cmd[2] = 0x80; + c.cmd[5] = side; + set24 (c.cmd + 6, c.data_size); + + status = send_command (s, &c); + if (status) + return status; + data = (u32 *) c.data; + p->pixels_per_line = be2cpu32 (data[0]); + p->lines = be2cpu32 (data[1]); + + return SANE_STATUS_GOOD; +} + +SANE_Status +get_buffer_status (struct scanner * s, unsigned *data_avalible) +{ + SANE_Status status; + struct cmd c = { + {0}, 10, + NULL, 12, + CMD_IN + }; + c.cmd[0] = GET_BUFFER_STATUS; + c.cmd[7] = 12; + + status = send_command (s, &c); + if (status) + return status; + *data_avalible = get24 ((unsigned char *)c.data + 9); + return SANE_STATUS_GOOD; +} + +SANE_Status +kvs40xx_read_image_data (struct scanner * s, unsigned page, unsigned side, + void *buf, unsigned max_size, unsigned *size) +{ + SANE_Status status; + struct cmd c = { + {0}, 10, + NULL, 0, + CMD_IN + }; + c.data_size = max_size < MAX_READ_DATA_SIZE ? max_size : MAX_READ_DATA_SIZE; + c.cmd[0] = READ_10; + c.cmd[4] = page; + c.cmd[5] = side; + + set24 (c.cmd + 6, c.data_size); + *size = 0; + status = send_command (s, &c); + + if (status && status != SANE_STATUS_EOF && status != INCORRECT_LENGTH) + return status; + + *size = c.data_size; + memcpy (buf, c.data, *size); + return status; +} + +static SANE_Status +get_adjust_data (struct scanner * s, unsigned *dummy_length) +{ + SANE_Status status; + struct cmd c = { + {0}, 10, + NULL, 40, + CMD_IN + }; + u16 *data; + + c.cmd[0] = GET_ADJUST_DATA; + c.cmd[2] = 0x9b; + c.cmd[8] = 40; + status = send_command (s, &c); + if (status) + return status; + data = (u16 *) c.data; + *dummy_length = be2cpu16 (data[0]); + return SANE_STATUS_GOOD; +} + +SANE_Status +read_support_info (struct scanner * s, struct support_info * inf) +{ + SANE_Status st; + struct cmd c = { + {0}, 10, + NULL, sizeof (*inf), + CMD_IN + }; + + c.cmd[0] = READ_10; + c.cmd[2] = SUPPORT_INFO; + set24 (c.cmd + 6, c.data_size); + + st = send_command (s, &c); + if (st) + return st; + memcpy (inf, c.data, sizeof (*inf)); + return SANE_STATUS_GOOD; +} + +SANE_Status +inquiry (struct scanner * s, char *id) +{ + int i; + SANE_Status st; + struct cmd c = { + {0}, 5, + NULL, 0x60, + CMD_IN + }; + + c.cmd[0] = INQUIRY; + c.cmd[4] = c.data_size; + + st = send_command (s, &c); + if (st) + return st; + memcpy (id, (unsigned char *)c.data + 16, 16); + for (i = 0; i < 15 && id[i] != ' '; i++); + id[i] = 0; + return SANE_STATUS_GOOD; +} diff -Nru sane-backends-1.0.22/backend/kvs40xx_opt.c sane-backends-1.0.23/backend/kvs40xx_opt.c --- sane-backends-1.0.22/backend/kvs40xx_opt.c 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/kvs40xx_opt.c 2012-08-10 00:33:29.000000000 +0000 @@ -0,0 +1,1414 @@ +/* + Copyright (C) 2009, Panasonic Russia Ltd. + Copyright (C) 2010,2011, m. allan noah +*/ +/* + Panasonic KV-S40xx USB-SCSI scanner driver. +*/ + +#include "../include/sane/config.h" + +#include +#define DEBUG_DECLARE_ONLY +#define BACKEND_NAME kvs40xx + +#include "../include/sane/sanei_backend.h" +#include "../include/sane/saneopts.h" +#include "../include/sane/sanei.h" +#include "../include/sane/sanei_config.h" +#include "lassert.h" + +#include "kvs40xx.h" + +#include "../include/sane/sanei_debug.h" + + +static inline unsigned +mm2scanner_units (unsigned mm) +{ + return (mm * 12000 / 254.0 + .5); +} +static inline unsigned +scanner_units2mm (unsigned u) +{ + return (u * 254.0 / 12000 + .5); +} +struct restriction +{ + unsigned ux, uy, ux_pix, uy_pix; +}; + +static struct restriction flatbad = { 14064, 20400, 7031, 63999 }; +static struct restriction cw = { 14268, 128000, 7133, 63999 }; +static struct restriction cl = { 10724, 128000, 5361, 63999 }; + +static inline int +check_area (struct scanner *s, unsigned ux, + unsigned uy, unsigned bx, unsigned by) +{ + int fb = !strcmp (s->val[SOURCE].s, SANE_I18N ("fb")); + struct restriction *r = fb ? &flatbad + : (s->id == KV_S4085CL || s->id == KV_S4065CL) ? &cl : &cw; + unsigned res = s->val[RESOLUTION].w; + unsigned w = bx - ux; + unsigned h = by - uy; + unsigned c1 = mm2scanner_units (ux + w); + unsigned c2 = mm2scanner_units (uy + h); + int c = c1 <= r->ux && c1 >= 16 && c2 >= 1 && c2 <= r->uy ? 0 : -1; + if (c) + return c; + if (mm2scanner_units (ux) > r->ux) + return -1; + if (res * mm2scanner_units (ux) / 1200 > r->ux_pix) + return -1; + + if (res * mm2scanner_units (uy) / 1200 > r->uy_pix) + return -1; + return 0; +} + +static size_t +max_string_size (const SANE_String_Const strings[]) +{ + size_t size, max_size = 0; + SANE_Int i; + + for (i = 0; strings[i]; ++i) + { + size = strlen (strings[i]) + 1; + if (size > max_size) + max_size = size; + } + return max_size; +} + +static SANE_String_Const mode_list[] = { + SANE_VALUE_SCAN_MODE_LINEART, + SANE_VALUE_SCAN_MODE_GRAY, + SANE_VALUE_SCAN_MODE_COLOR, + NULL +}; +static const unsigned mode_val[] = { 0, 2, 5 }; +static const unsigned bps_val[] = { 1, 8, 24 }; + +static const SANE_Range resolutions_range = { + 100,600,1 +}; + +/* List of feeder modes */ +static SANE_String_Const feeder_mode_list[] = { + SANE_I18N ("single"), + SANE_I18N ("continuous"), + NULL +}; + +/* List of scan sources */ +static SANE_String_Const source_list[] = { + SANE_I18N ("adf"), + SANE_I18N ("fb"), + NULL +}; + +/* List of manual feed mode */ +static SANE_String_Const manual_feed_list[] = { + SANE_I18N ("off"), + SANE_I18N ("wait_doc"), + SANE_I18N ("wait_doc_hopper_up"), + SANE_I18N ("wait_key"), + NULL +}; + +/* List of paper sizes */ +static SANE_String_Const paper_list[] = { + SANE_I18N ("user_def"), + SANE_I18N ("business_card"), + SANE_I18N ("Check"), + SANE_I18N ("A3"), + SANE_I18N ("A4"), + SANE_I18N ("A5"), + SANE_I18N ("A6"), + SANE_I18N ("Letter"), + SANE_I18N ("Double letter 11x17 in"), + SANE_I18N ("B4"), + SANE_I18N ("B5"), + SANE_I18N ("B6"), + SANE_I18N ("Legal"), + NULL +}; + +static SANE_String_Const paper_list_woA3[] = { + SANE_I18N ("user_def"), + SANE_I18N ("business_card"), + SANE_I18N ("Check"), + /*SANE_I18N ("A3"), */ + SANE_I18N ("A4"), + SANE_I18N ("A5"), + SANE_I18N ("A6"), + SANE_I18N ("Letter"), + /*SANE_I18N ("Double letter 11x17 in"), */ + /*SANE_I18N ("B4"), */ + SANE_I18N ("B5"), + SANE_I18N ("B6"), + SANE_I18N ("Legal"), + NULL +}; + +static const unsigned paper_val[] = { 0, 1, 2, 3, 4, 5, 6, 7, + 9, 12, 13, 14, 15 +}; + +struct paper_size +{ + int width; + int height; +}; +static const struct paper_size paper_sizes[] = { + {210, 297}, /* User defined, default=A4 */ + {54, 90}, /* Business card */ + {80, 170}, /* Check (China business) */ + {297, 420}, /* A3 */ + {210, 297}, /* A4 */ + {148, 210}, /* A5 */ + {105, 148}, /* A6 */ + {215, 280}, /* US Letter 8.5 x 11 in */ + {280, 432}, /* Double Letter 11 x 17 in */ + {250, 353}, /* B4 */ + {176, 250}, /* B5 */ + {125, 176}, /* B6 */ + {215, 355} /* US Legal */ +}; + +#define MIN_WIDTH 48 +#define MIN_LENGTH 70 +#define MAX_WIDTH 297 +#define MAX_LENGTH 432 + +#define MAX_WIDTH_A4 227 +#define MAX_LENGTH_A4 432 + +static SANE_Range tl_x_range = { 0, MAX_WIDTH - MIN_WIDTH, 0 }; +static SANE_Range tl_y_range = { 0, MAX_LENGTH - MIN_LENGTH, 0 }; +static SANE_Range br_x_range = { MIN_WIDTH, MAX_WIDTH, 0 }; +static SANE_Range br_y_range = { MIN_LENGTH, MAX_LENGTH, 0 }; + +static SANE_Range tl_x_range_A4 = { 0, MAX_WIDTH_A4 - MIN_WIDTH, 0 }; +static SANE_Range tl_y_range_A4 = { 0, MAX_LENGTH_A4 - MIN_LENGTH, 0 }; +static SANE_Range br_x_range_A4 = { MIN_WIDTH, MAX_WIDTH_A4, 0 }; +static SANE_Range br_y_range_A4 = { MIN_LENGTH, MAX_LENGTH_A4, 0 }; + +static SANE_Range byte_value_range = { 0, 255, 0 }; +static SANE_Range compression_value_range = { 1, 0x64, 0 }; + +/* List of image emphasis options, 5 steps */ +static SANE_String_Const image_emphasis_list[] = { + SANE_I18N ("none"), + SANE_I18N ("low"), + SANE_I18N ("medium"), + SANE_I18N ("high"), + SANE_I18N ("smooth"), + NULL +}; + +/* List of gamma */ +static SANE_String_Const gamma_list[] = { + SANE_I18N ("normal"), + SANE_I18N ("crt"), + NULL +}; +static unsigned gamma_val[] = { 0, 1 }; + +/* List of lamp color dropout */ +static SANE_String_Const lamp_list[] = { + SANE_I18N ("normal"), + SANE_I18N ("red"), + SANE_I18N ("green"), + SANE_I18N ("blue"), + NULL +}; +static SANE_String_Const dfeed_sence_list[] = { + SANE_I18N ("Normal"), + SANE_I18N ("High sensivity"), + SANE_I18N ("Low sensivity"), + NULL +}; + +/* Lists of supported halftone. They are only valid with + * for the Black&White mode. */ +static SANE_String_Const halftone_pattern[] = { + SANE_I18N ("bayer_64"), + SANE_I18N ("bayer_16"), + SANE_I18N ("halftone_32"), + SANE_I18N ("halftone_64"), + SANE_I18N ("err_diffusion"), + NULL +}; + +/* Stapled document */ +static SANE_String_Const stapeled_list[] = { + SANE_I18N ("No detection"), + SANE_I18N ("Normal mode"), + SANE_I18N ("Enhanced mode"), + NULL +}; + + +/* List of automatic threshold options */ +static SANE_String_Const automatic_threshold_list[] = { + SANE_I18N ("normal"), + SANE_I18N ("light"), + SANE_I18N ("dark"), + NULL +}; +static const int automatic_threshold_val[] = { + 0, + 0x11, + 0x1f +}; + +/* List of white level base. */ +static SANE_String_Const white_level_list[] = { + SANE_I18N ("From scanner"), + SANE_I18N ("From paper"), + SANE_I18N ("Automatic"), + NULL +}; +static const int white_level_val[] = { + 0x00, + 0x80, + 0x81 +}; + +/* List of noise reduction options. */ +static SANE_String_Const noise_reduction_list[] = { + SANE_I18N ("default"), + "1x1", + "2x2", + "3x3", + "4x4", + "5x5", + NULL +}; + +/* Reset the options for that scanner. */ +void +kvs40xx_init_options (struct scanner *s) +{ + int i; + SANE_Option_Descriptor *o; + /* Pre-initialize the options. */ + memset (s->opt, 0, sizeof (s->opt)); + memset (s->val, 0, sizeof (s->val)); + + 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; + } + + /* Number of options. */ + o = &s->opt[NUM_OPTS]; + o->name = ""; + o->title = SANE_TITLE_NUM_OPTIONS; + o->desc = SANE_DESC_NUM_OPTIONS; + o->type = SANE_TYPE_INT; + o->cap = SANE_CAP_SOFT_DETECT; + s->val[NUM_OPTS].w = NUM_OPTIONS; + + /* Mode group */ + o = &s->opt[MODE_GROUP]; + o->title = SANE_I18N ("Scan Mode"); + o->desc = ""; /* not valid for a group */ + o->type = SANE_TYPE_GROUP; + o->cap = 0; + o->size = 0; + o->constraint_type = SANE_CONSTRAINT_NONE; + + /* Scanner supported modes */ + o = &s->opt[MODE]; + o->name = SANE_NAME_SCAN_MODE; + o->title = SANE_TITLE_SCAN_MODE; + o->desc = SANE_DESC_SCAN_MODE; + o->type = SANE_TYPE_STRING; + o->size = max_string_size (mode_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = mode_list; + s->val[MODE].s = malloc (o->size); + strcpy (s->val[MODE].s, mode_list[2]); + + /* X and Y resolution */ + o = &s->opt[RESOLUTION]; + o->name = SANE_NAME_SCAN_RESOLUTION; + o->title = SANE_TITLE_SCAN_RESOLUTION; + o->desc = SANE_DESC_SCAN_RESOLUTION; + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_DPI; + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = &resolutions_range; + s->val[RESOLUTION].w = 100; + + /* Duplex */ + o = &s->opt[DUPLEX]; + o->name = "duplex"; + o->title = SANE_I18N ("Duplex"); + o->desc = SANE_I18N ("Enable Duplex (Dual-Sided) Scanning"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[DUPLEX].w = SANE_FALSE; + + /*FIXME + if (!s->support_info.support_duplex) + o->cap |= SANE_CAP_INACTIVE; + */ + + /* Feeder mode */ + o = &s->opt[FEEDER_MODE]; + o->name = "feeder-mode"; + o->title = SANE_I18N ("Feeder mode"); + o->desc = SANE_I18N ("Sets the feeding mode"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (feeder_mode_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = feeder_mode_list; + s->val[FEEDER_MODE].s = malloc (o->size); + strcpy (s->val[FEEDER_MODE].s, feeder_mode_list[0]); + + /* Scan source */ + o = &s->opt[SOURCE]; + o->name = SANE_NAME_SCAN_SOURCE; + o->title = SANE_TITLE_SCAN_SOURCE; + o->desc = SANE_DESC_SCAN_SOURCE; + o->type = SANE_TYPE_STRING; + o->size = max_string_size (source_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = source_list; + s->val[SOURCE].s = malloc (o->size); + strcpy (s->val[SOURCE].s, source_list[0]); + if (s->id != KV_S7075C) + o->cap |= SANE_CAP_INACTIVE; + + /* Length control */ + o = &s->opt[LENGTHCTL]; + o->name = "length-control"; + o->title = SANE_I18N ("Length control mode"); + o->desc = + SANE_I18N + ("Length Control Mode is a mode that the scanner reads up to the shorter length of actual" + " paper or logical document length."); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[LENGTHCTL].w = SANE_FALSE; + + o = &s->opt[LONG_PAPER]; + o->name = "long-paper"; + o->title = SANE_I18N ("Long paper mode"); + o->desc = SANE_I18N ("Long Paper Mode is a mode that the scanner " + "reads the image after it divides long paper " + "by the length which is set in Document Size option."); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[LONG_PAPER].w = SANE_FALSE; + o->cap |= SANE_CAP_INACTIVE; + + /* Manual feed */ + o = &s->opt[MANUALFEED]; + o->name = "manual-feed"; + o->title = SANE_I18N ("Manual feed mode"); + o->desc = SANE_I18N ("Sets the manual feed mode"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (manual_feed_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = manual_feed_list; + s->val[MANUALFEED].s = malloc (o->size); + strcpy (s->val[MANUALFEED].s, manual_feed_list[0]); + + /*Manual feed timeout */ + o = &s->opt[FEED_TIMEOUT]; + o->name = "feed-timeout"; + o->title = SANE_I18N ("Manual feed timeout"); + o->desc = SANE_I18N ("Sets the manual feed timeout in seconds"); + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_NONE; + o->size = sizeof (SANE_Int); + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = &(byte_value_range); + o->cap |= SANE_CAP_INACTIVE; + s->val[FEED_TIMEOUT].w = 30; + + /* Double feed */ + o = &s->opt[DBLFEED]; + o->name = "dfeed"; + o->title = SANE_I18N ("Double feed detection"); + o->desc = SANE_I18N ("Enable/Disable double feed detection"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[DBLFEED].w = SANE_FALSE; + + o = &s->opt[DFEED_SENCE]; + o->name = "dfeed-sense"; + o->title = SANE_I18N ("Double feed detector sensitivity"); + o->desc = SANE_I18N ("Set the double feed detector sensitivity"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (dfeed_sence_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = dfeed_sence_list; + s->val[DFEED_SENCE].s = malloc (o->size); + strcpy (s->val[DFEED_SENCE].s, dfeed_sence_list[0]); + o->cap |= SANE_CAP_INACTIVE; + + o = &s->opt[DFSTOP]; + o->name = "dfstop"; + o->title = SANE_I18N ("Do not stop after double feed detection"); + o->desc = SANE_I18N ("Do not stop after double feed detection"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[DFSTOP].w = SANE_FALSE; + o->cap |= SANE_CAP_INACTIVE; + + o = &s->opt[DFEED_L]; + o->name = "dfeed_l"; + o->title = SANE_I18N ("Ignore left double feed sensor"); + o->desc = SANE_I18N ("Ignore left double feed sensor"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[DFEED_L].w = SANE_FALSE; + o->cap |= SANE_CAP_INACTIVE; + + o = &s->opt[DFEED_C]; + o->name = "dfeed_c"; + o->title = SANE_I18N ("Ignore center double feed sensor"); + o->desc = SANE_I18N ("Ignore center double feed sensor"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[DFEED_C].w = SANE_FALSE; + o->cap |= SANE_CAP_INACTIVE; + + o = &s->opt[DFEED_R]; + o->name = "dfeed_r"; + o->title = SANE_I18N ("Ignore right double feed sensor"); + o->desc = SANE_I18N ("Ignore right double feed sensor"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[DFEED_R].w = SANE_FALSE; + o->cap |= SANE_CAP_INACTIVE; + + /* Fit to page */ + o = &s->opt[FIT_TO_PAGE]; + o->name = SANE_I18N ("fit-to-page"); + o->title = SANE_I18N ("Fit to page"); + o->desc = SANE_I18N ("Scanner shrinks image to fit scanned page"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[FIT_TO_PAGE].w = SANE_FALSE; + + /* Geometry group */ + o = &s->opt[GEOMETRY_GROUP]; + o->title = SANE_I18N ("Geometry"); + o->desc = ""; /* not valid for a group */ + o->type = SANE_TYPE_GROUP; + o->cap = 0; + o->size = 0; + o->constraint_type = SANE_CONSTRAINT_NONE; + + /* Paper sizes list */ + o = &s->opt[PAPER_SIZE]; + o->name = "paper-size"; + o->title = SANE_I18N ("Paper size"); + o->desc = SANE_I18N ("Physical size of the paper in the ADF"); + o->type = SANE_TYPE_STRING; + o->constraint.string_list = + s->id == KV_S4085CL || s->id == KV_S4065CL ? paper_list_woA3 : paper_list; + + + o->size = max_string_size (o->constraint.string_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + s->val[PAPER_SIZE].s = malloc (o->size); + strcpy (s->val[PAPER_SIZE].s, SANE_I18N ("A4")); + + /* Landscape */ + o = &s->opt[LANDSCAPE]; + o->name = "landscape"; + o->title = SANE_I18N ("Landscape"); + o->desc = + SANE_I18N ("Set paper position : " + "true for landscape, false for portrait"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[LANDSCAPE].w = SANE_FALSE; + + /* Upper left X */ + o = &s->opt[TL_X]; + o->name = SANE_NAME_SCAN_TL_X; + o->title = SANE_TITLE_SCAN_TL_X; + o->desc = SANE_DESC_SCAN_TL_X; + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_MM; + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = + (s->id == KV_S4085CL || s->id == KV_S4065CL) + ? &tl_x_range_A4 : &tl_x_range; + o->cap |= SANE_CAP_INACTIVE; + s->val[TL_X].w = 0; + + /* Upper left Y */ + o = &s->opt[TL_Y]; + o->name = SANE_NAME_SCAN_TL_Y; + o->title = SANE_TITLE_SCAN_TL_Y; + o->desc = SANE_DESC_SCAN_TL_Y; + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_MM; + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = + (s->id == KV_S4085CL || s->id == KV_S4065CL) + ? &tl_y_range_A4 : &tl_y_range; + o->cap |= SANE_CAP_INACTIVE; + s->val[TL_Y].w = 0; + + /* Bottom-right x */ + o = &s->opt[BR_X]; + o->name = SANE_NAME_SCAN_BR_X; + o->title = SANE_TITLE_SCAN_BR_X; + o->desc = SANE_DESC_SCAN_BR_X; + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_MM; + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = + (s->id == KV_S4085CL || s->id == KV_S4065CL) + ? &br_x_range_A4 : &br_x_range; + o->cap |= SANE_CAP_INACTIVE; + s->val[BR_X].w = 210; + + /* Bottom-right y */ + o = &s->opt[BR_Y]; + o->name = SANE_NAME_SCAN_BR_Y; + o->title = SANE_TITLE_SCAN_BR_Y; + o->desc = SANE_DESC_SCAN_BR_Y; + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_MM; + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = + (s->id == KV_S4085CL || s->id == KV_S4065CL) + ? &br_y_range_A4 : &br_y_range; + o->cap |= SANE_CAP_INACTIVE; + s->val[BR_Y].w = 297; + + /* Enhancement group */ + o = &s->opt[ADVANCED_GROUP]; + o->title = SANE_I18N ("Advanced"); + o->desc = ""; /* not valid for a group */ + o->type = SANE_TYPE_GROUP; + o->cap = SANE_CAP_ADVANCED; + o->size = 0; + o->constraint_type = SANE_CONSTRAINT_NONE; + + /* Brightness */ + o = &s->opt[BRIGHTNESS]; + o->name = SANE_NAME_BRIGHTNESS; + o->title = SANE_TITLE_BRIGHTNESS; + o->desc = SANE_DESC_BRIGHTNESS; + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_NONE; + o->size = sizeof (SANE_Int); + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = &(byte_value_range); + s->val[BRIGHTNESS].w = 128; + + /* Contrast */ + o = &s->opt[CONTRAST]; + o->name = SANE_NAME_CONTRAST; + o->title = SANE_TITLE_CONTRAST; + o->desc = SANE_DESC_CONTRAST; + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_NONE; + o->size = sizeof (SANE_Int); + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = &(byte_value_range); + s->val[CONTRAST].w = 128; + + /* threshold */ + o = &s->opt[THRESHOLD]; + o->name = SANE_NAME_THRESHOLD; + o->title = SANE_TITLE_THRESHOLD; + o->desc = SANE_DESC_THRESHOLD; + o->type = SANE_TYPE_INT; + o->size = sizeof (SANE_Int); + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = &(byte_value_range); + s->val[THRESHOLD].w = 128; + o->cap |= SANE_CAP_INACTIVE; + + o = &s->opt[AUTOMATIC_THRESHOLD]; + o->name = "athreshold"; + o->title = SANE_I18N ("Automatic threshold mode"); + o->desc = SANE_I18N ("Sets the automatic threshold mode"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (automatic_threshold_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = automatic_threshold_list; + s->val[AUTOMATIC_THRESHOLD].s = malloc (o->size); + strcpy (s->val[AUTOMATIC_THRESHOLD].s, automatic_threshold_list[0]); + o->cap |= SANE_CAP_INACTIVE; + + /* Image emphasis */ + o = &s->opt[IMAGE_EMPHASIS]; + o->name = "image-emphasis"; + o->title = SANE_I18N ("Image emphasis"); + o->desc = SANE_I18N ("Sets the image emphasis"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (image_emphasis_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = image_emphasis_list; + s->val[IMAGE_EMPHASIS].s = malloc (o->size); + strcpy (s->val[IMAGE_EMPHASIS].s, image_emphasis_list[0]);; + o->cap |= SANE_CAP_INACTIVE; + + /* Gamma */ + o = &s->opt[GAMMA_CORRECTION]; + o->name = "gamma-cor"; + o->title = SANE_I18N ("Gamma correction"); + o->desc = SANE_I18N ("Gamma correction"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (gamma_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = gamma_list; + s->val[GAMMA_CORRECTION].s = malloc (o->size); + strcpy (s->val[GAMMA_CORRECTION].s, gamma_list[0]); + o->cap |= SANE_CAP_INACTIVE; + + /* Lamp color dropout */ + o = &s->opt[LAMP]; + o->name = "lamp-color"; + o->title = SANE_I18N ("Lamp color"); + o->desc = SANE_I18N ("Sets the lamp color (color dropout)"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (lamp_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = lamp_list; + s->val[LAMP].s = malloc (o->size); + strcpy (s->val[LAMP].s, lamp_list[0]); + + /* Inverse image */ + o = &s->opt[INVERSE]; + o->name = "inverse"; + o->title = SANE_I18N ("Inverse Image"); + o->desc = SANE_I18N ("Inverse image in B/W mode"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + o->cap |= SANE_CAP_INACTIVE; + + /* Halftone pattern */ + o = &s->opt[HALFTONE_PATTERN]; + o->name = SANE_NAME_HALFTONE_PATTERN; + o->title = SANE_TITLE_HALFTONE_PATTERN; + o->desc = SANE_DESC_HALFTONE_PATTERN; + o->type = SANE_TYPE_STRING; + o->size = max_string_size (halftone_pattern); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = halftone_pattern; + s->val[HALFTONE_PATTERN].s = malloc (o->size); + strcpy (s->val[HALFTONE_PATTERN].s, halftone_pattern[0]); + o->cap |= SANE_CAP_INACTIVE; + + /* JPEG Compression */ + o = &s->opt[COMPRESSION]; + o->name = "jpeg"; + o->title = SANE_I18N ("JPEG compression"); + o->desc = + SANE_I18N + ("JPEG compression (yours application must be able to uncompress)"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + + /* Compression parameter */ + o = &s->opt[COMPRESSION_PAR]; + o->name = "comp_arg"; + o->title = "Compression Argument"; + o->desc = "Compression Argument (Q parameter for JPEG)"; + o->type = SANE_TYPE_INT; + o->size = sizeof (SANE_Int); + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = &(compression_value_range); + s->val[COMPRESSION_PAR].w = 0x4b; + o->cap |= SANE_CAP_INACTIVE; + + /* Stapled document */ + o = &s->opt[STAPELED_DOC]; + o->name = "stapeled_doc"; + o->title = SANE_I18N ("Detect stapled document"); + o->desc = SANE_I18N ("Detect stapled document"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (stapeled_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = stapeled_list; + s->val[STAPELED_DOC].s = malloc (o->size); + strcpy (s->val[STAPELED_DOC].s, stapeled_list[0]); + if (s->id == KV_S7075C) + o->cap |= SANE_CAP_INACTIVE; + + /* White level base */ + o = &s->opt[WHITE_LEVEL]; + o->name = SANE_NAME_WHITE_LEVEL; + o->title = SANE_TITLE_WHITE_LEVEL; + o->desc = SANE_DESC_WHITE_LEVEL; + o->type = SANE_TYPE_STRING; + o->size = max_string_size (white_level_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = white_level_list; + s->val[WHITE_LEVEL].s = malloc (o->size); + strcpy (s->val[WHITE_LEVEL].s, white_level_list[0]); + o->cap |= SANE_CAP_INACTIVE; + + /* Noise reduction */ + o = &s->opt[NOISE_REDUCTION]; + o->name = "noise-reduction"; + o->title = SANE_I18N ("Noise reduction"); + o->desc = SANE_I18N ("Reduce the isolated dot noise"); + o->type = SANE_TYPE_STRING; + o->size = max_string_size (noise_reduction_list); + o->constraint_type = SANE_CONSTRAINT_STRING_LIST; + o->constraint.string_list = noise_reduction_list; + s->val[NOISE_REDUCTION].s = malloc (o->size); + strcpy (s->val[NOISE_REDUCTION].s, noise_reduction_list[0]); + o->cap |= SANE_CAP_INACTIVE; + + o = &s->opt[RED_CHROMA]; + o->name = "red-chroma"; + o->title = SANE_I18N ("chroma of red"); + o->desc = SANE_I18N ("Set chroma of red"); + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_NONE; + o->size = sizeof (SANE_Int); + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = &(byte_value_range); + s->val[RED_CHROMA].w = 0; + + o = &s->opt[BLUE_CHROMA]; + o->name = "blue chroma"; + o->title = SANE_I18N ("chroma of blue"); + o->desc = SANE_I18N ("Set chroma of blue"); + o->type = SANE_TYPE_INT; + o->unit = SANE_UNIT_NONE; + o->size = sizeof (SANE_Int); + o->constraint_type = SANE_CONSTRAINT_RANGE; + o->constraint.range = &(byte_value_range); + s->val[BLUE_CHROMA].w = 0; + + o = &s->opt[DESKEW]; + o->name = "deskew"; + o->title = SANE_I18N ("Skew adjustment"); + o->desc = SANE_I18N ("Skew adjustment"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[DESKEW].w = SANE_FALSE; + if (s->id != KV_S4085CL && s->id != KV_S4085CW) + o->cap |= SANE_CAP_INACTIVE; + + o = &s->opt[STOP_SKEW]; + o->name = "stop-skew"; + o->title = SANE_I18N ("Stop scanner when a paper have been skewed"); + o->desc = SANE_I18N ("Scanner will be stop when a paper have been skewed"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[STOP_SKEW].w = SANE_FALSE; + + o = &s->opt[CROP]; + o->name = "crop"; + o->title = SANE_I18N ("Crop actual image area"); + o->desc = SANE_I18N ("Scanner automatically detect image area and crop it"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[CROP].w = SANE_FALSE; + if (s->id != KV_S4085CL && s->id != KV_S4085CW) + o->cap |= SANE_CAP_INACTIVE; + + o = &s->opt[MIRROR]; + o->name = "mirror"; + o->title = SANE_I18N ("Mirror image"); + o->desc = SANE_I18N ("It is right and left reversing"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[MIRROR].w = SANE_FALSE; + + o = &s->opt[TOPPOS]; + o->name = "toppos"; + o->title = SANE_I18N ("Addition of space in top position"); + o->desc = SANE_I18N ("Addition of space in top position"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[TOPPOS].w = SANE_FALSE; + + o = &s->opt[BTMPOS]; + o->name = "btmpos"; + o->title = SANE_I18N ("Addition of space in bottom position"); + o->desc = SANE_I18N ("Addition of space in bottom position"); + o->type = SANE_TYPE_BOOL; + o->unit = SANE_UNIT_NONE; + s->val[BTMPOS].w = SANE_FALSE; +} + + +/* Lookup a string list from one array and return its index. */ +static int +str_index (const SANE_String_Const * list, SANE_String_Const name) +{ + int index; + index = 0; + while (list[index]) + { + if (!strcmp (list[index], name)) + return (index); + index++; + } + return (-1); /* not found */ +} + +/* Control option */ +SANE_Status +sane_control_option (SANE_Handle handle, SANE_Int option, + SANE_Action action, void *val, SANE_Int * info) +{ + int i; + SANE_Status status; + SANE_Word cap; + struct scanner *s = (struct scanner *) handle; + + if (info) + *info = 0; + + if (option < 0 || option >= NUM_OPTIONS) + return SANE_STATUS_UNSUPPORTED; + + cap = s->opt[option].cap; + if (!SANE_OPTION_IS_ACTIVE (cap)) + return SANE_STATUS_UNSUPPORTED; + + if (action == SANE_ACTION_GET_VALUE) + { + if (s->opt[option].type == SANE_TYPE_STRING) + { + DBG (DBG_INFO, + "sane_control_option: reading opt[%d] = %s\n", + option, s->val[option].s); + strcpy (val, s->val[option].s); + } + else + { + *(SANE_Word *) val = s->val[option].w; + DBG (DBG_INFO, + "sane_control_option: reading opt[%d] = %d\n", + option, s->val[option].w); + } + return SANE_STATUS_GOOD; + + } + else if (action == SANE_ACTION_SET_VALUE) + { + if (!SANE_OPTION_IS_SETTABLE (cap)) + return SANE_STATUS_INVAL; + + status = sanei_constrain_value (s->opt + option, val, info); + if (status != SANE_STATUS_GOOD) + return status; + + if (s->opt[option].type == SANE_TYPE_STRING) + { + if (!strcmp (val, s->val[option].s)) + return SANE_STATUS_GOOD; + DBG (DBG_INFO, + "sane_control_option: writing opt[%d] = %s\n", + option, (SANE_String_Const) val); + } + else + { + if (*(SANE_Word *) val == s->val[option].w) + return SANE_STATUS_GOOD; + DBG (DBG_INFO, + "sane_control_option: writing opt[%d] = %d\n", + option, *(SANE_Word *) val); + } + + switch (option) + { + /* Side-effect options */ + case RESOLUTION: + s->val[option].w = *(SANE_Word *) val; + if (info) + *info |= SANE_INFO_RELOAD_PARAMS; + return SANE_STATUS_GOOD; + + case TL_Y: + if ((*(SANE_Word *) val) + MIN_LENGTH <= + s->val[BR_Y].w && + !check_area (s, s->val[TL_X].w, *(SANE_Word *) val, + s->val[BR_X].w, s->val[BR_Y].w)) + { + s->val[option].w = *(SANE_Word *) val; + if (info) + *info |= SANE_INFO_RELOAD_PARAMS; + } + else if (info) + *info |= SANE_INFO_INEXACT | + SANE_INFO_RELOAD_OPTIONS | SANE_INFO_RELOAD_PARAMS; + return SANE_STATUS_GOOD; + case BR_Y: + if ((*(SANE_Word *) val) >= + s->val[TL_Y].w + MIN_LENGTH + && !check_area (s, s->val[TL_X].w, s->val[TL_Y].w, + s->val[BR_X].w, *(SANE_Word *) val)) + { + s->val[option].w = *(SANE_Word *) val; + if (info) + *info |= SANE_INFO_RELOAD_PARAMS; + } + else if (info) + *info |= SANE_INFO_INEXACT | + SANE_INFO_RELOAD_OPTIONS | SANE_INFO_RELOAD_PARAMS; + return SANE_STATUS_GOOD; + + case TL_X: + if ((*(SANE_Word *) val) + MIN_WIDTH <= + s->val[BR_X].w && + !check_area (s, *(SANE_Word *) val, s->val[TL_Y].w, + s->val[BR_X].w, s->val[BR_Y].w)) + { + s->val[option].w = *(SANE_Word *) val; + if (info) + *info |= SANE_INFO_RELOAD_PARAMS; + } + else if (info) + *info |= SANE_INFO_INEXACT | + SANE_INFO_RELOAD_OPTIONS | SANE_INFO_RELOAD_PARAMS; + return SANE_STATUS_GOOD; + + case BR_X: + if (*(SANE_Word *) val >= + s->val[TL_X].w + MIN_WIDTH + && !check_area (s, s->val[TL_X].w, s->val[TL_Y].w, + *(SANE_Word *) val, s->val[BR_Y].w)) + { + s->val[option].w = *(SANE_Word *) val; + if (info) + *info |= SANE_INFO_RELOAD_PARAMS; + } + else if (info) + *info |= SANE_INFO_INEXACT | + SANE_INFO_RELOAD_OPTIONS | SANE_INFO_RELOAD_PARAMS; + return SANE_STATUS_GOOD; + + case LANDSCAPE: + s->val[option].w = *(SANE_Word *) val; + if (info) + *info |= SANE_INFO_RELOAD_PARAMS; + return SANE_STATUS_GOOD; + + /* Side-effect free options */ + case CONTRAST: + case BRIGHTNESS: + case DUPLEX: + case LENGTHCTL: + case LONG_PAPER: + case FIT_TO_PAGE: + case THRESHOLD: + case INVERSE: + case COMPRESSION_PAR: + case DFSTOP: + case DFEED_L: + case DFEED_C: + case DFEED_R: + case STOP_SKEW: + case DESKEW: + case MIRROR: + case CROP: + case TOPPOS: + case BTMPOS: + case RED_CHROMA: + case BLUE_CHROMA: + s->val[option].w = *(SANE_Word *) val; + return SANE_STATUS_GOOD; + + case FEED_TIMEOUT: + s->val[option].w = *(SANE_Word *) val; + return kvs40xx_set_timeout (s, s->val[option].w); + + /* String mode */ + case IMAGE_EMPHASIS: + case GAMMA_CORRECTION: + case LAMP: + case HALFTONE_PATTERN: + case DFEED_SENCE: + case AUTOMATIC_THRESHOLD: + case WHITE_LEVEL: + case NOISE_REDUCTION: + strcpy (s->val[option].s, val); + return SANE_STATUS_GOOD; + + case SOURCE: + strcpy (s->val[option].s, val); + if (strcmp (s->val[option].s, SANE_I18N ("adf"))) + { + strcpy (s->val[FEEDER_MODE].s, feeder_mode_list[0]); + strcpy (s->val[MANUALFEED].s, manual_feed_list[0]); + s->val[DUPLEX].w = SANE_FALSE; + s->val[DBLFEED].w = SANE_FALSE; + s->val[BTMPOS].w = SANE_FALSE; + s->val[TOPPOS].w = SANE_FALSE; + s->val[STOP_SKEW].w = SANE_FALSE; + s->val[LENGTHCTL].w = SANE_FALSE; + s->val[LONG_PAPER].w = SANE_FALSE; + s->opt[FEEDER_MODE].cap |= SANE_CAP_INACTIVE; + s->opt[MANUALFEED].cap |= SANE_CAP_INACTIVE; + s->opt[DUPLEX].cap |= SANE_CAP_INACTIVE; + s->opt[DBLFEED].cap |= SANE_CAP_INACTIVE; + s->opt[BTMPOS].cap |= SANE_CAP_INACTIVE; + s->opt[TOPPOS].cap |= SANE_CAP_INACTIVE; + s->opt[STOP_SKEW].cap |= SANE_CAP_INACTIVE; + s->opt[LENGTHCTL].cap |= SANE_CAP_INACTIVE; + s->opt[LONG_PAPER].cap |= SANE_CAP_INACTIVE; + } + else + { + s->opt[FEEDER_MODE].cap &= ~SANE_CAP_INACTIVE; + s->opt[MANUALFEED].cap &= ~SANE_CAP_INACTIVE; + s->opt[DUPLEX].cap &= ~SANE_CAP_INACTIVE; + s->opt[DBLFEED].cap &= ~SANE_CAP_INACTIVE; + s->opt[BTMPOS].cap &= ~SANE_CAP_INACTIVE; + s->opt[TOPPOS].cap &= ~SANE_CAP_INACTIVE; + s->opt[STOP_SKEW].cap &= ~SANE_CAP_INACTIVE; + s->opt[LENGTHCTL].cap &= ~SANE_CAP_INACTIVE; + s->opt[LONG_PAPER].cap &= ~SANE_CAP_INACTIVE; + } + if (info) + *info |= SANE_INFO_RELOAD_OPTIONS; + + return SANE_STATUS_GOOD; + + case FEEDER_MODE: + strcpy (s->val[option].s, val); + if (strcmp (s->val[option].s, SANE_I18N ("continuous"))) + { + s->opt[LONG_PAPER].cap |= SANE_CAP_INACTIVE; + } + else + { + s->opt[LONG_PAPER].cap &= ~SANE_CAP_INACTIVE; + } + if (info) + *info |= SANE_INFO_RELOAD_OPTIONS; + + return SANE_STATUS_GOOD; + + case MODE: + strcpy (s->val[option].s, val); + if (!strcmp (s->val[option].s, SANE_VALUE_SCAN_MODE_LINEART)) + { + s->opt[GAMMA_CORRECTION].cap |= SANE_CAP_INACTIVE; + s->opt[COMPRESSION].cap |= SANE_CAP_INACTIVE; + s->opt[COMPRESSION_PAR].cap |= SANE_CAP_INACTIVE; + s->opt[THRESHOLD].cap &= ~SANE_CAP_INACTIVE; + s->opt[HALFTONE_PATTERN].cap &= ~SANE_CAP_INACTIVE; + + s->opt[AUTOMATIC_THRESHOLD].cap &= ~SANE_CAP_INACTIVE; + s->opt[WHITE_LEVEL].cap &= ~SANE_CAP_INACTIVE; + s->opt[NOISE_REDUCTION].cap &= ~SANE_CAP_INACTIVE; + s->opt[INVERSE].cap &= ~SANE_CAP_INACTIVE; + s->opt[RED_CHROMA].cap |= SANE_CAP_INACTIVE; + s->opt[BLUE_CHROMA].cap |= SANE_CAP_INACTIVE; + } + else + { + s->opt[COMPRESSION].cap &= ~SANE_CAP_INACTIVE; + s->opt[COMPRESSION_PAR].cap &= ~SANE_CAP_INACTIVE; + + s->opt[THRESHOLD].cap |= SANE_CAP_INACTIVE; + s->opt[INVERSE].cap |= SANE_CAP_INACTIVE; + s->opt[HALFTONE_PATTERN].cap |= SANE_CAP_INACTIVE; + + s->opt[AUTOMATIC_THRESHOLD].cap |= SANE_CAP_INACTIVE; + s->opt[WHITE_LEVEL].cap |= SANE_CAP_INACTIVE; + s->opt[NOISE_REDUCTION].cap |= SANE_CAP_INACTIVE; + s->opt[RED_CHROMA].cap &= ~SANE_CAP_INACTIVE; + s->opt[BLUE_CHROMA].cap &= ~SANE_CAP_INACTIVE; + } + + if (!strcmp (s->val[option].s, SANE_VALUE_SCAN_MODE_GRAY)) + { + s->opt[INVERSE].cap &= ~SANE_CAP_INACTIVE; + + s->opt[GAMMA_CORRECTION].cap &= ~SANE_CAP_INACTIVE; + } + else + { + s->opt[GAMMA_CORRECTION].cap |= SANE_CAP_INACTIVE; + } + + if (info) + *info |= SANE_INFO_RELOAD_OPTIONS | SANE_INFO_RELOAD_PARAMS; + + return SANE_STATUS_GOOD; + + case MANUALFEED: + strcpy (s->val[option].s, val); + if (strcmp (s->val[option].s, manual_feed_list[0]) == 0) /* off */ + s->opt[FEED_TIMEOUT].cap |= SANE_CAP_INACTIVE; + else + s->opt[FEED_TIMEOUT].cap &= ~SANE_CAP_INACTIVE; + if (info) + *info |= SANE_INFO_RELOAD_OPTIONS; + + return SANE_STATUS_GOOD; + + case STAPELED_DOC: + strcpy (s->val[option].s, val); + if (strcmp (s->val[option].s, stapeled_list[0]) == 0) + { + s->opt[DBLFEED].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFSTOP].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_L].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_C].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_C].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_R].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_SENCE].cap &= ~SANE_CAP_INACTIVE; + } + else + { + s->opt[DBLFEED].cap |= SANE_CAP_INACTIVE; + s->opt[DFSTOP].cap |= SANE_CAP_INACTIVE; + s->opt[DFEED_L].cap |= SANE_CAP_INACTIVE; + s->opt[DFEED_C].cap |= SANE_CAP_INACTIVE; + s->opt[DFEED_R].cap |= SANE_CAP_INACTIVE; + s->opt[DFEED_SENCE].cap |= SANE_CAP_INACTIVE; + } + if (info) + *info |= SANE_INFO_RELOAD_OPTIONS; + + return SANE_STATUS_GOOD; + + case DBLFEED: + s->val[option].w = *(SANE_Word *) val; + if (!s->val[option].b) + { + s->opt[DFSTOP].cap |= SANE_CAP_INACTIVE; + s->opt[DFEED_L].cap |= SANE_CAP_INACTIVE; + s->opt[DFEED_C].cap |= SANE_CAP_INACTIVE; + s->opt[DFEED_R].cap |= SANE_CAP_INACTIVE; + s->opt[DFEED_SENCE].cap |= SANE_CAP_INACTIVE; + } + else + { + s->opt[DFSTOP].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_L].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_C].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_C].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_R].cap &= ~SANE_CAP_INACTIVE; + s->opt[DFEED_SENCE].cap &= ~SANE_CAP_INACTIVE; + } + if (info) + *info |= SANE_INFO_RELOAD_OPTIONS; + + return SANE_STATUS_GOOD; + + case PAPER_SIZE: + strcpy (s->val[option].s, val); + i = str_index (paper_list, s->val[option].s); + if (i == 0) + { /*user def */ + s->opt[TL_X].cap &= + s->opt[TL_Y].cap &= + s->opt[BR_X].cap &= s->opt[BR_Y].cap &= ~SANE_CAP_INACTIVE; + s->opt[LANDSCAPE].cap |= SANE_CAP_INACTIVE; + s->val[LANDSCAPE].w = 0; + } + else + { + s->opt[TL_X].cap |= + s->opt[TL_Y].cap |= + s->opt[BR_X].cap |= s->opt[BR_Y].cap |= SANE_CAP_INACTIVE; + if ( /*i == 4 || */ i == 5 || i == 6 /*XXX*/ + || i == 10 || i == 11) + { /*A4, A5, A6, B5, B6 */ + if ((s->id == KV_S4085CL || s->id == KV_S4065CL) + && i == 4 && i == 10) + { /*A4, B5 */ + s->opt[LANDSCAPE].cap |= SANE_CAP_INACTIVE; + s->val[LANDSCAPE].w = 0; + } + else + s->opt[LANDSCAPE].cap &= ~SANE_CAP_INACTIVE; + } + else + { + s->opt[LANDSCAPE].cap |= SANE_CAP_INACTIVE; + s->val[LANDSCAPE].w = 0; + } + } + if (info) + *info |= SANE_INFO_RELOAD_OPTIONS | SANE_INFO_RELOAD_PARAMS; + + return SANE_STATUS_GOOD; + + case COMPRESSION: + s->val[option].w = *(SANE_Word *) val; + if (!s->val[option].b) + { + s->opt[COMPRESSION_PAR].cap |= SANE_CAP_INACTIVE; + } + else + { + s->opt[COMPRESSION_PAR].cap &= ~SANE_CAP_INACTIVE; + } + if (info) + *info |= SANE_INFO_RELOAD_OPTIONS; + + return SANE_STATUS_GOOD; + } + } + + + return SANE_STATUS_UNSUPPORTED; +} + +void +kvs40xx_init_window (struct scanner *s, struct window *wnd, int wnd_id) +{ + int paper = str_index (paper_list, s->val[PAPER_SIZE].s), i; + memset (wnd, 0, sizeof (struct window)); + *(u16 *) wnd->window_descriptor_block_length = cpu2be16 (66); + + wnd->window_identifier = wnd_id; + *(u16 *) wnd->x_resolution = cpu2be16 (s->val[RESOLUTION].w); + *(u16 *) wnd->y_resolution = cpu2be16 (s->val[RESOLUTION].w); + if (!paper) + { + *(u32 *) wnd->upper_left_x = + cpu2be32 (mm2scanner_units (s->val[TL_X].w)); + *(u32 *) wnd->upper_left_y = + cpu2be32 (mm2scanner_units (s->val[TL_Y].w)); + *(u32 *) wnd->document_width = + cpu2be32 (mm2scanner_units (s->val[BR_X].w)); + *(u32 *) wnd->width = + cpu2be32 (mm2scanner_units (s->val[BR_X].w - s->val[TL_X].w)); + *(u32 *) wnd->document_length = cpu2be32 (mm2scanner_units + (s->val[BR_Y].w)); + *(u32 *) wnd->length = + cpu2be32 (mm2scanner_units (s->val[BR_Y].w - s->val[TL_Y].w)); + } + else + { + u32 w = cpu2be32 (mm2scanner_units (paper_sizes[paper].width)); + u32 h = cpu2be32 (mm2scanner_units (paper_sizes[paper].height)); + *(u32 *) wnd->upper_left_x = cpu2be32 (mm2scanner_units (0)); + *(u32 *) wnd->upper_left_y = cpu2be32 (mm2scanner_units (0)); + if (!s->val[LANDSCAPE].b) + { + *(u32 *) wnd->document_width = *(u32 *) wnd->width = w; + *(u32 *) wnd->document_length = *(u32 *) wnd->length = h; + } + else + { + *(u32 *) wnd->document_width = *(u32 *) wnd->width = h; + *(u32 *) wnd->document_length = *(u32 *) wnd->length = w; + } + } + wnd->brightness = s->val[BRIGHTNESS].w; + wnd->threshold = s->val[THRESHOLD].w; + wnd->contrast = s->val[CONTRAST].w; + wnd->image_composition = mode_val[str_index (mode_list, s->val[MODE].s)]; + wnd->bit_per_pixel = bps_val[str_index (mode_list, s->val[MODE].s)]; + + *(u16 *) wnd->halftone_pattern = + cpu2be16 (str_index (halftone_pattern, s->val[HALFTONE_PATTERN].s)); + + wnd->rif_padding = s->val[INVERSE].b << 7; + *(u16 *) wnd->bit_ordering = cpu2be16 (BIT_ORDERING); + wnd->compression_type = s->val[COMPRESSION].b ? 0x81 : 0; + wnd->compression_argument = s->val[COMPRESSION_PAR].w; + + wnd->vendor_unique_identifier = 0; + wnd->nobuf_fstspeed_dfstop = str_index (source_list, + s->val[SOURCE].s) << 7 | + str_index (stapeled_list, + s->val[STAPELED_DOC].s) << 5 | + s->val[STOP_SKEW].b << 4 | s->val[CROP].b << 3 | s->val[DFSTOP].b << 0; + + wnd->mirror_image = s->val[MIRROR].b << 7 | + s->val[DFEED_L].b << 2 | s->val[DFEED_C].b << 1 | s->val[DFEED_R].b << 0; + wnd->image_emphasis = str_index (image_emphasis_list, + s->val[IMAGE_EMPHASIS].s); + wnd->gamma_correction = gamma_val[str_index (gamma_list, + s->val[GAMMA_CORRECTION].s)]; + wnd->mcd_lamp_dfeed_sens = + str_index (lamp_list, s->val[LAMP].s) << 4 | + str_index (dfeed_sence_list, s->val[DFEED_SENCE].s); + + wnd->document_size = (paper != 0) << 7 + | s->val[LENGTHCTL].b << 6 + | s->val[LONG_PAPER].b << 5 | s->val[LANDSCAPE].b << 4 | paper_val[paper]; + + wnd->ahead_deskew_dfeed_scan_area_fspeed_rshad = + (s->val[DESKEW].b || s->val[CROP].b ? 2 : 0) << 5 | /*XXX*/ + s->val[DBLFEED].b << 4 | s->val[FIT_TO_PAGE].b << 2; + wnd->continuous_scanning_pages = + str_index (feeder_mode_list, s->val[FEEDER_MODE].s) ? 0xff : 0; + wnd->automatic_threshold_mode = automatic_threshold_val + [str_index (automatic_threshold_list, s->val[AUTOMATIC_THRESHOLD].s)]; + wnd->automatic_separation_mode = 0; /*Does not supported */ + wnd->standard_white_level_mode = + white_level_val[str_index (white_level_list, s->val[WHITE_LEVEL].s)]; + wnd->b_wnr_noise_reduction = + str_index (noise_reduction_list, s->val[NOISE_REDUCTION].s); + + i = str_index (manual_feed_list, s->val[MANUALFEED].s); + wnd->mfeed_toppos_btmpos_dsepa_hsepa_dcont_rstkr = i << 6 | + s->val[TOPPOS].b << 5 | s->val[BTMPOS].b << 4; + wnd->stop_mode = 1; + wnd->red_chroma = s->val[RED_CHROMA].w; + wnd->blue_chroma = s->val[BLUE_CHROMA].w; +} + +/* Get scan parameters */ +SANE_Status +sane_get_parameters (SANE_Handle handle, SANE_Parameters * params) +{ + struct scanner *s = (struct scanner *) handle; + SANE_Parameters *p = &s->params; + + if (!s->scanning) + { + unsigned w, h, res = s->val[RESOLUTION].w; + unsigned i = str_index (paper_list, + s->val[PAPER_SIZE].s); + if (i) + { + if (s->val[LANDSCAPE].b) + { + w = paper_sizes[i].height; + h = paper_sizes[i].width; + } + else + { + w = paper_sizes[i].width; + h = paper_sizes[i].height; + } + } + else + { + w = s->val[BR_X].w - s->val[TL_X].w; + h = s->val[BR_Y].w - s->val[TL_Y].w; + } + p->pixels_per_line = w * res / 25.4 + .5; + p->lines = h * res / 25.4 + .5; + } + + p->format = !strcmp (s->val[MODE].s, + SANE_VALUE_SCAN_MODE_COLOR) ? SANE_FRAME_RGB : + SANE_FRAME_GRAY; + p->last_frame = SANE_TRUE; + p->depth = bps_val[str_index (mode_list, s->val[MODE].s)]; + p->bytes_per_line = p->depth * p->pixels_per_line / 8; + if (p->depth > 8) + p->depth = 8; + if (params) + memcpy (params, p, sizeof (SANE_Parameters)); + s->side_size = p->bytes_per_line * p->lines; + + return SANE_STATUS_GOOD; +} diff -Nru sane-backends-1.0.22/backend/lexmark.c sane-backends-1.0.23/backend/lexmark.c --- sane-backends-1.0.22/backend/lexmark.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/lexmark.c 2011-08-02 23:51:48.000000000 +0000 @@ -2,7 +2,7 @@ (C) 2003-2004 Lexmark International, Inc. (Original Source code) (C) 2005 Fred Odendaal - (C) 2006-2010 Stphane Voltz + (C) 2006-2011 Stphane Voltz (C) 2010 "Torsten Houwaart" X74 support This file is part of the SANE package. @@ -48,7 +48,7 @@ #include "lexmark.h" #define LEXMARK_CONFIG_FILE "lexmark.conf" -#define BUILD 30 +#define BUILD 32 #define MAX_OPTION_STRING_SIZE 255 static Lexmark_Device *first_lexmark_device = 0; diff -Nru sane-backends-1.0.22/backend/lexmark_low.c sane-backends-1.0.23/backend/lexmark_low.c --- sane-backends-1.0.22/backend/lexmark_low.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/lexmark_low.c 2011-08-02 23:51:48.000000000 +0000 @@ -1,7 +1,7 @@ /* lexmark-low.c: scanner-interface file for low Lexmark scanners. (C) 2005 Fred Odendaal - (C) 2006-2010 Stphane Voltz + (C) 2006-2011 Stphane Voltz (C) 2010 "Torsten Houwaart" X74 support This file is part of the SANE package. @@ -62,7 +62,7 @@ } region_type; -#define HomeTolerance 30 +#define HomeTolerance 32 #define LOBYTE(x) ((uint8_t)((x) & 0xFF)) diff -Nru sane-backends-1.0.22/backend/lexmark_models.c sane-backends-1.0.23/backend/lexmark_models.c --- sane-backends-1.0.22/backend/lexmark_models.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/lexmark_models.c 2011-07-06 20:17:25.000000000 +0000 @@ -50,6 +50,7 @@ "Lexmark X1100", /* name */ "Lexmark", /* vendor */ "X1100/rev. B2", /* model */ + X1100_MOTOR, /* X1100 series has 2 sensors */ X1100_B2_SENSOR, 1235, /* first x-coordinate of Home Point */ diff -Nru sane-backends-1.0.22/backend/magicolor.c sane-backends-1.0.23/backend/magicolor.c --- sane-backends-1.0.22/backend/magicolor.c 2011-01-30 18:49:46.000000000 +0000 +++ sane-backends-1.0.23/backend/magicolor.c 2011-11-21 20:17:48.000000000 +0000 @@ -52,6 +52,10 @@ #include #include #include +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif #if HAVE_LIBSNMP @@ -1783,11 +1787,26 @@ } #if HAVE_LIBSNMP + +/* Keep a linked list of already observed IP addresses */ +/* typedef struct snmp_ip SNMP_IP; */ +typedef struct snmp_ip { + char ip_addr[1024]; + struct snmp_ip*next; +} snmp_ip; + +typedef struct { + int nr; + snmp_ip*handled; + snmp_ip*detected; +} snmp_discovery_data; + + /** Handle one SNMP response (whether received sync or async) and if describes * a magicolor device, attach it. Returns the number of attached devices (0 * or 1) */ static int -mc_network_discovery_handle (struct snmp_pdu *pdu) +mc_network_discovery_handle (struct snmp_pdu *pdu, snmp_discovery_data *magic) { netsnmp_variable_list *varlist = pdu->variables, *vp; oid anOID[MAX_OID_LEN]; @@ -1800,6 +1819,7 @@ netsnmp_indexed_addr_pair *responder = (netsnmp_indexed_addr_pair *) pdu->transport_data; struct sockaddr_in *remote = NULL; struct MagicolorCap *cap; + snmp_ip *ip = NULL; DBG(5, "%s: Handling SNMP response \n", __func__); @@ -1816,6 +1836,21 @@ } snprintf(ip_addr, sizeof(ip_addr), "%s", inet_ntoa(remote->sin_addr)); DBG(35, "%s: IP Address of responder is %s\n", __func__, ip_addr); + if (magic) + ip = magic->handled; + while (ip) { + if (strcmp (ip->ip_addr, ip_addr) == 0) { + DBG (5, "%s: Already handled device %s, skipping\n", __func__, ip_addr); + return 0; + } + ip = ip->next; + } + if (magic) { + snmp_ip *new_handled = malloc(sizeof(snmp_ip)); + strcpy (&new_handled->ip_addr[0], ip_addr); + new_handled->next = magic->handled; + magic->handled = new_handled; + } /* System Object ID (Unique OID identifying model) * This determines whether we really have a magicolor device */ @@ -1861,6 +1896,12 @@ if (cap) { DBG(1, "%s: Found autodiscovered device: %s (type 0x%x)\n", __func__, cap->model, cap->id); attach_one_net (ip_addr, cap->id); + if (magic) { + snmp_ip *new_detected = malloc(sizeof(snmp_ip)); + strcpy (&new_detected->ip_addr[0], ip_addr); + new_detected->next = magic->detected; + magic->detected = new_detected; + } return 1; } return 0; @@ -1875,13 +1916,13 @@ DBG(5, "%s: Received broadcast response \n", __func__); if (operation == NETSNMP_CALLBACK_OP_RECEIVED_MESSAGE) { - int nr = mc_network_discovery_handle (pdu); - int *m = (int*)magic; - *m += nr; + snmp_discovery_data *m = (snmp_discovery_data*)magic; + int nr = mc_network_discovery_handle (pdu, m); + m->nr += nr; DBG(5, "%s: Added %d discovered host(s) for SNMP response.\n", __func__, nr); } - return 1; + return 0; } #endif @@ -1896,8 +1937,10 @@ netsnmp_pdu *pdu; oid anOID[MAX_OID_LEN]; size_t anOID_len = MAX_OID_LEN; - int nr = 0; /* Nr of added hosts */ - + snmp_discovery_data magic; + magic.nr = 0; + magic.handled = 0; + magic.detected = 0; DBG(1, "%s: running network discovery \n", __func__); @@ -1915,7 +1958,7 @@ session.peername = "255.255.255.255"; session.flags |= SNMP_FLAGS_UDP_BROADCAST; session.callback = mc_network_discovery_cb; - session.callback_magic = &nr; + session.callback_magic = &magic; } ss = snmp_open (&session); /* establish the session */ @@ -1958,7 +2001,7 @@ netsnmp_pdu *response = 0; int status = snmp_synch_response(ss, pdu, &response); if (status == STAT_SUCCESS && response->errstat == SNMP_ERR_NOERROR) { - nr = mc_network_discovery_handle (response); + magic.nr = mc_network_discovery_handle (response, &magic); } if (response) snmp_free_pdu(response); @@ -1997,13 +2040,24 @@ else snmp_timeout(); gettimeofday(&nowtime, NULL); } + /* Clean up the data in magic */ + while (magic.handled) { + snmp_ip *tmp = magic.handled->next; + free (magic.handled); + magic.handled = tmp; + } + while (magic.detected) { + snmp_ip *tmp = magic.detected->next; + free (magic.detected); + magic.detected = tmp; + } } /* Clean up */ snmp_close(ss); SOCK_CLEANUP; - DBG (5, "%s: Discovered %d host(s)\n", __func__, nr); - return nr; + DBG (5, "%s: Discovered %d host(s)\n", __func__, magic.nr); + return magic.nr; #else DBG (1, "%s: net-snmp library not enabled, auto-detecting network scanners not supported.\n", __func__); diff -Nru sane-backends-1.0.22/backend/microtek2.h sane-backends-1.0.23/backend/microtek2.h --- sane-backends-1.0.22/backend/microtek2.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/microtek2.h 2012-07-01 02:00:44.000000000 +0000 @@ -64,7 +64,7 @@ #ifdef HAVE_AUTHORIZATION #ifndef PATH_SEP -#if defined(HAVE_OS2_H) +#if defined(_WIN32) || defined(HAVE_OS2_H) # define PATH_SEP "\\" #else # define PATH_SEP "/" diff -Nru sane-backends-1.0.22/backend/p5.c sane-backends-1.0.23/backend/p5.c --- sane-backends-1.0.22/backend/p5.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/p5.c 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2009 Stphane Voltz + Copyright (C) 2009-12 Stphane Voltz This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -54,7 +54,7 @@ /** * the build number allow to know which version of the backend is running. */ -#define BUILD 1 +#define BUILD 2301 #include "p5.h" diff -Nru sane-backends-1.0.22/backend/p5.h sane-backends-1.0.23/backend/p5.h --- sane-backends-1.0.22/backend/p5.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/p5.h 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2009 stef.dev@free.fr + Copyright (C) 2009-2012 stef.dev@free.fr This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as diff -Nru sane-backends-1.0.22/backend/p5_device.h sane-backends-1.0.23/backend/p5_device.h --- sane-backends-1.0.22/backend/p5_device.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/p5_device.h 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2009 stef.dev@free.fr + Copyright (C) 2009-2012 stef.dev@free.fr This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as diff -Nru sane-backends-1.0.22/backend/pixma.c sane-backends-1.0.23/backend/pixma.c --- sane-backends-1.0.22/backend/pixma.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma.c 2012-08-19 20:27:18.000000000 +0000 @@ -2,6 +2,7 @@ Copyright (C) 2007-2008 Nicolas Martin, Copyright (C) 2006-2007 Wittawat Yamwong + Copyright (C) 2011-2012 Rolf Bensch This file is part of the SANE package. @@ -84,8 +85,10 @@ #define OVAL(opt) OPT_IN_CTX[opt].val #define AUTO_GAMMA 2.2 -#include "pixma_sane_options.h" /* generated by gen_options.py */ - +/* pixma_sane_options.h generated by + * scripts/pixma_gen_options.py h < pixma.c > pixma_sane_options.h + * *and* formatted */ +#include "pixma_sane_options.h" typedef struct pixma_sane_t { @@ -102,7 +105,8 @@ option_descriptor_t opt[opt_last]; SANE_Range xrange, yrange; SANE_Word dpi_list[9]; /* up to 9600 dpi */ - SANE_String_Const mode_list[4]; + SANE_String_Const mode_list[6]; + pixma_scan_mode_t mode_map[6]; uint8_t gamma_table[4096]; SANE_String_Const source_list[4]; pixma_paper_source_t source_map[4]; @@ -324,6 +328,119 @@ } } +/* create dynamic mode_list + * ss: scanner device + * tpu = 0: flatbed or ADF mode + * 1 bit lineart, 8 bit grayscale and 24 bit color scans + * tpu = 1: TPU mode + * 16 bit grayscale and 48 bit color scans */ +static void +create_mode_list (pixma_sane_t * ss, SANE_Bool tpu) +{ + const pixma_config_t *cfg; + int i; + + cfg = pixma_get_config (ss->s); + + /* setup available mode. */ + i = 0; + ss->mode_list[i] = SANE_VALUE_SCAN_MODE_COLOR; + ss->mode_map[i] = PIXMA_SCAN_MODE_COLOR; + i++; + if (cfg->cap & PIXMA_CAP_GRAY) + { + ss->mode_list[i] = SANE_VALUE_SCAN_MODE_GRAY; + ss->mode_map[i] = PIXMA_SCAN_MODE_GRAY; + i++; + } + if (tpu && cfg->cap & PIXMA_CAP_NEGATIVE) + { + ss->mode_list[i] = SANE_I18N ("Negative color"); + ss->mode_map[i] = PIXMA_SCAN_MODE_NEGATIVE_COLOR; + i++; + if (cfg->cap & PIXMA_CAP_GRAY) + { + ss->mode_list[i] = SANE_I18N ("Negative gray"); + ss->mode_map[i] = PIXMA_SCAN_MODE_NEGATIVE_GRAY; + i++; + } + } + if (!tpu && cfg->cap & PIXMA_CAP_48BIT) + { + ss->mode_list[i] = SANE_I18N ("48 bits color"); + ss->mode_map[i] = PIXMA_SCAN_MODE_COLOR_48; + i++; + if (cfg->cap & PIXMA_CAP_GRAY) + { + ss->mode_list[i] = SANE_I18N ("16 bits gray"); + ss->mode_map[i] = PIXMA_SCAN_MODE_GRAY_16; + i++; + } + } + if (!tpu && cfg->cap & PIXMA_CAP_LINEART) + { + ss->mode_list[i] = SANE_VALUE_SCAN_MODE_LINEART; + ss->mode_map[i] = PIXMA_SCAN_MODE_LINEART; + i++; + } + /* terminate mode_list and mode_map */ + ss->mode_list[i] = 0; + ss->mode_map[i] = 0; +} + +/* create dynamic dpi_list + * ss: scanner device + * ext = 0: min = 75 dpi; max = cfg->xdpi + * ext = 1: use settings for ADF/TPU + * overrides hires + * cfg->ext_min_dpi and cfg->ext_max_dpi not set: min = 75 dpi; max = cfg->xdpi + * only cfg->ext_min_dpi set: min = cfg->ext_min_dpi; max = cfg->xdpi + * only cfg->ext_max_dpi set: min = 75 dpi; max = cfg->ext_max_dpi + * both cfg->ext_min_dpi and cfg->ext_max_dpi set: min = cfg->ext_min_dpi; cfg->ext_max_dpi + * hires = 0: normal usage + * hires = 1: min = 150 dpi; max = use calculation from ext */ +static void +create_dpi_list (pixma_sane_t * ss, SANE_Bool ext, SANE_Bool hires) +{ + const pixma_config_t *cfg; + int i, j; + int min_dpi; + + cfg = pixma_get_config (ss->s); + + /* set j for min. dpi + * 75 dpi: j = 0 + * 150 dpi: j = 1 \ + * 300 dpi: j = 2 |--> from cfg->ext_min_dpi for ADF/TPU + * ... / + * */ + j = (hires ? 1 : 0); + if (ext && cfg->ext_min_dpi) + { + j = -1; + min_dpi = cfg->ext_min_dpi / 75; + do + { + j++; + min_dpi >>= 1; + } + while (min_dpi > 0); + } + + /* create dpi_list + * use j for min. dpi + * max. dpi is cfg->xdpi or cfg->ext_max_dpi for ADF/TPU */ + i = 0; + do + { + i++; j++; + ss->dpi_list[i] = 75 * (1 << (j - 1)); /* 75 x 2^(j-1) */ + } + while ((unsigned) ss->dpi_list[i] != ((ext && cfg->ext_max_dpi) ? cfg->ext_max_dpi + : cfg->xdpi)); + ss->dpi_list[0] = i; +} + static void select_value_from_list (pixma_sane_t * ss, SANE_Int n, void *v, SANE_Int * info) @@ -480,6 +597,11 @@ SANE_Action a, void *v, SANE_Int * info) { int result, i; + const pixma_config_t *cfg; + + cfg = pixma_get_config (ss->s); + + /* PDBG (pixma_dbg (4, "*control_option***** n = %u, a = %u\n", n, a)); */ result = SANE_STATUS_UNSUPPORTED; switch (n) @@ -546,6 +668,83 @@ *info |= SANE_INFO_RELOAD_OPTIONS; } break; + case opt_gamma: + if (a == SANE_ACTION_SET_VALUE || a == SANE_ACTION_SET_AUTO) + { + /* PDBG (pixma_dbg (4, "*control_option***** gamma = %f *\n", + SANE_UNFIX (OVAL (opt_gamma).w))); */ + pixma_fill_gamma_table (SANE_UNFIX (OVAL (opt_gamma).w), + ss->gamma_table, sizeof (ss->gamma_table)); + } + break; + case opt_mode: + if (cfg->cap & (PIXMA_CAP_LINEART) + && (a == SANE_ACTION_SET_VALUE || a == SANE_ACTION_SET_AUTO)) + { /* new mode selected: Color, Gray, ... */ + /* PDBG (pixma_dbg (4, "*control_option***** mode = %u *\n", + ss->mode_map[OVAL (opt_mode).w])); */ + if (ss->source_map[OVAL (opt_source).w] != PIXMA_SOURCE_TPU) + { /* ADF or flatbed*/ + /* recreate dynamic dpi_list */ + create_dpi_list (ss, SANE_FALSE, + (ss->mode_map[OVAL (opt_mode).w] == PIXMA_SCAN_MODE_COLOR_48 + || ss->mode_map[OVAL (opt_mode).w] == PIXMA_SCAN_MODE_GRAY_16)); + } + if (ss->mode_map[OVAL (opt_mode).w] == PIXMA_SCAN_MODE_LINEART) + { /* lineart */ + enable_option (ss, opt_threshold, SANE_TRUE); + enable_option (ss, opt_threshold_curve, SANE_TRUE); + } + else + { /* all other modes */ + enable_option (ss, opt_threshold, SANE_FALSE); + enable_option (ss, opt_threshold_curve, SANE_FALSE); + } + *info |= SANE_INFO_RELOAD_OPTIONS; + } + break; + case opt_source: + if (cfg->cap & (PIXMA_CAP_ADF|PIXMA_CAP_ADFDUP|PIXMA_CAP_TPU) + && (a == SANE_ACTION_SET_VALUE || a == SANE_ACTION_SET_AUTO)) + { /* new source selected: flatbed, ADF, TPU, ... */ + /* recreate dynamic lists */ + if (ss->source_map[OVAL (opt_source).w] == PIXMA_SOURCE_TPU) + { /* TPU mode */ + create_mode_list (ss, SANE_TRUE); + create_dpi_list (ss, SANE_TRUE, SANE_FALSE); + } + else if (ss->source_map[OVAL (opt_source).w] == PIXMA_SOURCE_ADF + || ss->source_map[OVAL (opt_source).w] == PIXMA_SOURCE_ADFDUP) + { /* ADF mode */ + create_mode_list (ss, SANE_FALSE); + create_dpi_list (ss, SANE_TRUE, SANE_FALSE); + } + else + { /* flatbed mode */ + create_mode_list (ss, SANE_FALSE); + create_dpi_list (ss, SANE_FALSE, + (ss->mode_map[OVAL (opt_mode).w] == PIXMA_SCAN_MODE_COLOR_48 + || ss->mode_map[OVAL (opt_mode).w] == PIXMA_SCAN_MODE_GRAY_16)); + } + if (ss->mode_map[OVAL (opt_mode).w] == PIXMA_SCAN_MODE_LINEART) + { /* lineart */ + enable_option (ss, opt_threshold, SANE_TRUE); + enable_option (ss, opt_threshold_curve, SANE_TRUE); + } + else + { /* all other modes */ + enable_option (ss, opt_threshold, SANE_FALSE); + enable_option (ss, opt_threshold_curve, SANE_FALSE); + } + /* to avoid fatal errors, + * select first entry of dynamic dpi_list + * and first entry of dynamic mode_list + * identifiers are unknown here */ + OVAL (opt_resolution).w = ss->dpi_list[1]; + OVAL (opt_mode).w = ss->mode_map[0]; + *info |= SANE_INFO_RELOAD_OPTIONS; + } + break; } return result; @@ -556,7 +755,7 @@ print_scan_param (int level, const pixma_scan_param_t * sp) { pixma_dbg (level, "Scan parameters\n"); - pixma_dbg (level, " line_size=%u image_size=%"PRIu64" channels=%u depth=%u\n", + pixma_dbg (level, " line_size=%"PRIu64" image_size=%"PRIu64" channels=%u depth=%u\n", sp->line_size, sp->image_size, sp->channels, sp->depth); pixma_dbg (level, " dpi=%ux%u offset=(%u,%u) dimension=%ux%u\n", sp->xdpi, sp->ydpi, sp->x, sp->y, sp->w, sp->h); @@ -603,10 +802,14 @@ sp->w = 1; if (sp->h == 0) sp->h = 1; + sp->tpu_offset_added = 0; sp->gamma_table = (OVAL (opt_custom_gamma).b) ? ss->gamma_table : NULL; sp->source = ss->source_map[OVAL (opt_source).w]; + sp->mode = ss->mode_map[OVAL (opt_mode).w]; sp->adf_pageid = ss->page_count; + sp->threshold = 2.55 * OVAL (opt_threshold).w; + sp->threshold_curve = OVAL (opt_threshold_curve).w; error = pixma_check_scan_param (ss->s, sp); if (error < 0) @@ -635,29 +838,13 @@ ss->yrange.quant = SANE_FIX (0); /* setup dpi up to the value supported by the scanner. */ - i = 0; - do - { - i++; - ss->dpi_list[i] = 75 * (1 << (i - 1)); /* 75 x 2^(i-1) */ - } - while ((unsigned) ss->dpi_list[i] != cfg->xdpi); - ss->dpi_list[0] = i; + create_dpi_list (ss, SANE_FALSE, SANE_FALSE); /* mode_list and source_list were already NULL-terminated, * because the whole pixma_sane_t was cleared during allocation. */ /* setup available mode. */ - ss->mode_list[0] = SANE_VALUE_SCAN_MODE_COLOR; - if (cfg->cap & PIXMA_CAP_GRAY) - { - ss->mode_list[1] = SANE_VALUE_SCAN_MODE_GRAY; - } - - if (cfg->cap & PIXMA_CAP_LINEART) - { - ss->mode_list[2] = SANE_VALUE_SCAN_MODE_LINEART; - } + create_mode_list (ss, SANE_FALSE); /* setup paper source */ i = 0; @@ -688,6 +875,7 @@ /* Enable options that are available only in some scanners. */ if (cfg->cap & PIXMA_CAP_GAMMA_TABLE) { + enable_option (ss, opt_gamma, SANE_TRUE); enable_option (ss, opt_custom_gamma, SANE_TRUE); sane_control_option (ss, opt_custom_gamma, SANE_ACTION_SET_AUTO, NULL, NULL); @@ -1326,7 +1514,9 @@ return ss->last_read_status; status = SANE_STATUS_GOOD; - if ((ss->sp.line_size - ss->output_line_size) == 0) + /* CCD scanners use software lineart + * the scanner must scan 24 bit color or 8 bit grayscale for one bit lineart */ + if ((ss->sp.line_size - ((ss->sp.software_lineart == 1) ? (ss->output_line_size * 8) : ss->output_line_size)) == 0) { status = read_image (ss, buf, maxlen, &sum); } @@ -1334,6 +1524,7 @@ { /* FIXME: Because there is no frontend that can cope with padding at the end of line, we've to remove it here in the backend! */ + PDBG (pixma_dbg (1, "*sane_read***** Warning: padding may cause incomplete scan results\n")); sum = 0; while (sum < maxlen) { @@ -1445,9 +1636,9 @@ cap soft_select soft_detect automatic info reload_params -type string mode[10] - default Color +type string mode[30] constraint @string_list = ss->mode_list + default @s = SANE_I18N(ss->mode_list[0]) title @SANE_TITLE_SCAN_MODE desc @SANE_DESC_SCAN_MODE cap soft_select soft_detect automatic @@ -1456,7 +1647,7 @@ type string source[30] constraint @string_list = ss->source_list title @SANE_TITLE_SCAN_SOURCE - desc @SANE_DESC_SCAN_SOURCE + desc Selects the scan source (such as a document-feeder). Set source before mode and resolution. Resets mode and resolution to auto values. default Flatbed cap soft_select soft_detect @@ -1482,6 +1673,13 @@ desc @SANE_DESC_GAMMA_VECTOR cap soft_select soft_detect automatic inactive +type fixed gamma + default AUTO_GAMMA + constraint (0.3,5,0) + title Gamma function exponent + desc Changes intensity of midtones + cap soft_select soft_detect automatic inactive + rem ------------------------------------------- type group title Geometry @@ -1541,6 +1739,28 @@ cap soft_select soft_detect advanced rem ------------------------------------------- +type group + title Extras + +type int threshold + unit PERCENT + default 50 + constraint (0,100,1) + title @SANE_TITLE_THRESHOLD + desc @SANE_DESC_THRESHOLD + cap soft_select soft_detect automatic inactive + +type int threshold-curve + constraint (0,127,1) + title Threshold curve + desc Dynamic threshold curve, from light to dark, normally 50-65 + cap soft_select soft_detect automatic inactive + +rem ------------------------------------------- END SANE_Option_Descriptor */ -#include "pixma_sane_options.c" /* generated by gen_options.py */ + +/* pixma_sane_options.c generated by + * scripts/pixma_gen_options.py < pixma.c > pixma_sane_options.c + * *and* formatted */ +#include "pixma_sane_options.c" diff -Nru sane-backends-1.0.22/backend/pixma.h sane-backends-1.0.23/backend/pixma.h --- sane-backends-1.0.22/backend/pixma.h 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma.h 2012-08-19 20:27:18.000000000 +0000 @@ -2,6 +2,7 @@ Copyright (C) 2007-2008 Nicolas Martin, Copyright (C) 2006-2007 Wittawat Yamwong + Copyright (C) 2011-2012 Rolf Bensch This file is part of the SANE package. @@ -112,8 +113,8 @@ /** \name Version of the driver */ /**@{*/ #define PIXMA_VERSION_MAJOR 0 -#define PIXMA_VERSION_MINOR 16 -#define PIXMA_VERSION_BUILD 2 +#define PIXMA_VERSION_MINOR 17 +#define PIXMA_VERSION_BUILD 0 /**@}*/ /** \name Error codes */ @@ -147,6 +148,7 @@ #define PIXMA_CAP_CIS (0) #define PIXMA_CAP_CCD (1 << 8) #define PIXMA_CAP_LINEART (1 << 9) +#define PIXMA_CAP_NEGATIVE (1 << 10) #define PIXMA_CAP_EXPERIMENT (1 << 31) /**@}*/ @@ -198,6 +200,22 @@ PIXMA_SOURCE_ADFDUP /* duplex */ } pixma_paper_source_t; +/** Scan modes */ +typedef enum pixma_scan_mode_t +{ + /* standard scan modes */ + PIXMA_SCAN_MODE_COLOR, + PIXMA_SCAN_MODE_GRAY, + /* TPU scan modes for negatives */ + PIXMA_SCAN_MODE_NEGATIVE_COLOR, + PIXMA_SCAN_MODE_NEGATIVE_GRAY, + /* extended scan modes for 48 bit flatbed scanners */ + PIXMA_SCAN_MODE_COLOR_48, + PIXMA_SCAN_MODE_GRAY_16, + /* 1 bit lineart scan mode */ + PIXMA_SCAN_MODE_LINEART +} pixma_scan_mode_t; + typedef enum pixma_hardware_status_t { PIXMA_HARDWARE_OK, @@ -244,17 +262,22 @@ /** Size in bytes of one image line (row). * line_size >= depth / 8 * channels * w
* This field will be set by pixma_check_scan_param(). */ - unsigned line_size; - + uint64_t line_size; + /** Size in bytes of the whole image. * image_size = line_size * h
* This field will be set by pixma_check_scan_param(). */ uint64_t image_size; - /** Channels per pixel. 1 = grayscale, 3 = color */ + /** Channels per pixel. 1 = grayscale and lineart, 3 = color */ unsigned channels; - /** Bits per channels. 0 = default. Currently not used. */ + /** Bits per channels. + * 1 = 1 bit B/W lineart (flatbed) + * 8 = 8 bit grayscale, + * 24 bit color (both flatbed) + * 16 = 16 bit grayscale (TPU, flatbed not implemeted), + * 48 bit color (TPU, flatbed not implemented) */ unsigned depth; /*@{ */ @@ -272,6 +295,25 @@ unsigned x, y, w, h, xs, wx; /*@} */ + /** Flag indicating whether the offset correction for TPU scans + * was already performed (to avoid repeated corrections). + * Currently only used in pixma_mp810.c sub-driver */ + unsigned tpu_offset_added; + + /** Flag indicating whether a software-lineart scan is in progress + * 0 = other scan + * 1 = software-lineart scan */ + unsigned software_lineart; + + /** Threshold for software-lineart scans */ + unsigned threshold; + + /** lineart threshold curve for dynamic rasterization */ + unsigned threshold_curve; + + /* look up table used in dynamic rasterization */ + unsigned char lineart_lut[256]; + /** Gamma table. 4096 entries, 12 bit => 8 bit. If \c NULL, default gamma * specified by subdriver will be used. */ const uint8_t *gamma_table; @@ -279,6 +321,9 @@ /** \see #pixma_paper_source_t */ pixma_paper_source_t source; + /** \see #pixma_scan_mode_t */ + pixma_scan_mode_t mode; + /** The current page # in the same ADF scan session, 0 in non ADF */ unsigned adf_pageid; }; @@ -296,6 +341,10 @@ const pixma_scan_ops_t *ops; /**< Subdriver ops */ unsigned xdpi; /**< Maximum horizontal resolution[DPI] */ unsigned ydpi; /**< Maximum vertical resolution[DPI] */ + unsigned ext_min_dpi; /**< Maximum horizontal resolution[DPI] for tpu/adf + * only needed if ADF/TPU has another min. dpi value than 75 dpi */ + unsigned ext_max_dpi; /**< Maximum vertical resolution[DPI] for tpu/adf + * only needed if ADF/TPU has another max. dpi value than xdpi */ unsigned width; /**< Maximum width of scannable area in pixels at 75DPI */ unsigned height; /**< Maximum height of scannable area in pixels at 75DPI */ unsigned cap; /**< Capability bitfield \see PIXMA_CAP_* */ diff -Nru sane-backends-1.0.22/backend/pixma_bjnp.c sane-backends-1.0.23/backend/pixma_bjnp.c --- sane-backends-1.0.22/backend/pixma_bjnp.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_bjnp.c 2012-07-01 02:00:44.000000000 +0000 @@ -196,7 +196,7 @@ { /* this is a hostname, not an ip-address, so remove domain part of the name */ - if ((dot = index (short_hostname, '.')) != NULL) + if ((dot = strchr (short_hostname, '.')) != NULL) *dot = '\0'; } return short_hostname; diff -Nru sane-backends-1.0.22/backend/pixma_common.c sane-backends-1.0.23/backend/pixma_common.c --- sane-backends-1.0.22/backend/pixma_common.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_common.c 2012-08-19 20:27:18.000000000 +0000 @@ -2,6 +2,7 @@ Copyright (C) 2007-2008 Nicolas Martin, Copyright (C) 2006-2007 Wittawat Yamwong + Copyright (C) 2011-2012 Rolf Bensch This file is part of the SANE package. @@ -66,12 +67,14 @@ extern const pixma_config_t pixma_mp150_devices[]; extern const pixma_config_t pixma_mp750_devices[]; extern const pixma_config_t pixma_mp730_devices[]; +extern const pixma_config_t pixma_mp810_devices[]; extern const pixma_config_t pixma_iclass_devices[]; static const pixma_config_t *const pixma_devices[] = { pixma_mp150_devices, pixma_mp750_devices, pixma_mp730_devices, + pixma_mp810_devices, pixma_iclass_devices, NULL }; @@ -302,6 +305,234 @@ *usec = tv.tv_usec; } +/* convert 24/48 bit RGB to 8/16 bit grayscale + * + * Formular: g = (R + G + B) / 3 + * + * sptr: source color scale buffer + * gptr: destination gray scale buffer + * c == 3: 24 bit RGB -> 8 bit gray + * c == 6: 48 bit RGB -> 16 bit gray + */ +uint8_t * +pixma_rgb_to_gray (uint8_t * gptr, uint8_t * sptr, unsigned w, unsigned c) +{ + unsigned i, j, g; + + /* PDBG (pixma_dbg (4, "*pixma_rgb_to_gray*****\n")); */ + + for (i = 0; i < w; i++) + { + for (j = 0, g = 0; j < 3; j++) + { + g += *sptr++; + if (c == 6) g += (*sptr++ << 8); /* 48 bit RGB: high byte */ + } + + g /= 3; /* 8 or 16 bit gray */ + *gptr++ = g; + if (c == 6) *gptr++ = (g >> 8); /* 16 bit gray: high byte */ + } + return gptr; +} + +/** + * This code was taken from the genesys backend + * uses threshold and threshold_curve to control software binarization + * @param sp device set up for the scan + * @param dst pointer where to store result + * @param src pointer to raw data + * @param width width of the processed line + * @param c 1 for 1-channel single-byte data, + * 3 for 3-channel single-byte data, + * 6 for double-byte data + * */ +uint8_t * +pixma_binarize_line(pixma_scan_param_t * sp, uint8_t * dst, uint8_t * src, unsigned width, unsigned c) +{ + unsigned j, x, windowX, sum = 0; + unsigned threshold; + unsigned offset, addCol; + int dropCol, offsetX; + unsigned char mask; + uint8_t min, max; + + /* PDBG (pixma_dbg (4, "*pixma_binarize_line***** src = %u, dst = %u, width = %u, c = %u, threshold = %u, thershold_curve = %u *****\n", + src, dst, width, c, sp->threshold, sp->threshold_curve)); */ + + /* 16 bit grayscale not supported */ + if (c == 6) + { + PDBG (pixma_dbg (1, "*pixma_binarize_line***** Error: 16 bit grayscale not supported\n")); + return dst; + } + + /* first, color convert to grayscale */ + if (c != 1) + pixma_rgb_to_gray(dst, src, width, c); + + /* second, normalize line */ + min = 255; + max = 0; + for (x = 0; x < width; x++) + { + if (src[x] > max) + { + max = src[x]; + } + if (src[x] < min) + { + min = src[x]; + } + } + + /* safeguard against dark or white areas */ + if(min>80) + min=0; + if(max<80) + max=255; + for (x = 0; x < width; x++) + { + src[x] = ((src[x] - min) * 255) / (max - min); + } + + /* third, create sliding window, prefill the sliding sum */ + /* ~1mm works best, but the window needs to have odd # of pixels */ + windowX = (6 * sp->xdpi) / 150; + if (!(windowX % 2)) + windowX++; + + /* to avoid conflicts with *dst start with offset */ + offsetX = 1 + (windowX / 2) / 8; + for (j = offsetX; j <= windowX; j++) + sum += src[j]; + /* PDBG (pixma_dbg (4, " *pixma_binarize_line***** windowX = %u, startX = %u, sum = %u\n", + windowX, startX, sum)); */ + + /* fourth, walk the input buffer, output bits */ + for (j = 0; j < width; j++) + { + /* output image location */ + offset = j % 8; + mask = 0x80 >> offset; + threshold = sp->threshold; + + /* move sum/update threshold only if there is a curve */ + if (sp->threshold_curve) + { + addCol = j + windowX / 2; + dropCol = addCol - windowX; + + if (dropCol >= offsetX && addCol < width) + { + sum += src[addCol]; + sum -= (sum < src[dropCol] ? sum : src[dropCol]); /* no negative sum */ + } + threshold = sp->lineart_lut[sum / windowX]; + /* PDBG (pixma_dbg (4, " *pixma_binarize_line***** addCol = %u, dropCol = %d, sum = %u, windowX = %u, lut-element = %d, threshold = %u\n", + addCol, dropCol, sum, windowX, sum/windowX, threshold)); */ + } + + /* lookup threshold */ + if (src[j] > threshold) + *dst &= ~mask; /* white */ + else + *dst |= mask; /* black */ + + if (offset == 7) + dst++; + } + + /* PDBG (pixma_dbg (4, " *pixma_binarize_line***** ready: src = %u, dst = %u *****\n", src, dst)); */ + + return dst; +} + +/** + This code was taken from the genesys backend + Function to build a lookup table (LUT), often + used by scanners to implement brightness/contrast/gamma + or by backends to speed binarization/thresholding + + offset and slope inputs are -127 to +127 + + slope rotates line around central input/output val, + 0 makes horizontal line + + pos zero neg + . x . . x + . x . . x + out . x .xxxxxxxxxxx . x + . x . . x + ....x....... ............ .......x.... + in in in + + offset moves line vertically, and clamps to output range + 0 keeps the line crossing the center of the table + + high low + . xxxxxxxx . + . x . + out x . x + . . x + ............ xxxxxxxx.... + in in + + out_min/max provide bounds on output values, + useful when building thresholding lut. + 0 and 255 are good defaults otherwise. + * */ +static SANE_Status +load_lut (unsigned char * lut, + int in_bits, int out_bits, + int out_min, int out_max, + int slope, int offset) +{ + int i, j; + double shift, rise; + int max_in_val = (1 << in_bits) - 1; + int max_out_val = (1 << out_bits) - 1; + unsigned char * lut_p = lut; + + /* PDBG (pixma_dbg (4, "*load_lut***** start %d %d *****\n", slope, offset)); */ + + /* slope is converted to rise per unit run: + * first [-127,127] to [-1,1] + * then multiply by PI/2 to convert to radians + * then take the tangent (T.O.A) + * then multiply by the normal linear slope + * because the table may not be square, i.e. 1024x256*/ + rise = tan((double)slope/127 * M_PI/2) * max_out_val / max_in_val; + + /* line must stay vertically centered, so figure + * out vertical offset at central input value */ + shift = (double)max_out_val/2 - (rise*max_in_val/2); + + /* convert the user offset setting to scale of output + * first [-127,127] to [-1,1] + * then to [-max_out_val/2,max_out_val/2]*/ + shift += (double)offset / 127 * max_out_val / 2; + + for(i=0;i<=max_in_val;i++){ + j = rise*i + shift; + + if(jout_max){ + j=out_max; + } + + *lut_p=j; + lut_p++; + } + + /* PDBG (pixma_dbg (4, "*load_lut***** finish *****\n")); */ + /* PDBG (pixma_hexdump (4, lut, max_in_val+1)); */ + + return SANE_STATUS_GOOD; +} + int pixma_map_status_errno (unsigned status) { @@ -378,7 +609,7 @@ { /* Write timeout is too low? */ PDBG (pixma_dbg - (1, "ERROR:incomplete write, %u out of %u written\n", + (1, "ERROR: incomplete write, %u out of %u written\n", (unsigned) error, cmdlen)); error = PIXMA_ETIMEDOUT; } @@ -403,7 +634,7 @@ while (error == PIXMA_ETIMEDOUT && --tmo != 0); if (error < 0) { - PDBG (pixma_dbg (1, "WARNING:Error in response phase. cmd:%02x%02x\n", + PDBG (pixma_dbg (1, "WARNING: Error in response phase. cmd:%02x%02x\n", ((const uint8_t *) cmd)[0], ((const uint8_t *) cmd)[1])); PDBG (pixma_dbg (1," If the scanner hangs, reset it and/or unplug the " @@ -544,7 +775,7 @@ { if (s->scanning) { - PDBG (pixma_dbg (3, "pixma_close():scanning in progress, call" + PDBG (pixma_dbg (3, "pixma_close(): scanning in progress, call" " finish_scan()\n")); s->ops->finish_scan (s); } @@ -564,14 +795,21 @@ if (error < 0) return error; + if (sp->mode == PIXMA_SCAN_MODE_LINEART) + { + load_lut(sp->lineart_lut, 8, 8, 50, 205, + sp->threshold_curve, sp->threshold-127); + } + #ifndef NDEBUG pixma_dbg (3, "\n"); pixma_dbg (3, "pixma_scan(): start\n"); - pixma_dbg (3, " line_size=%u image_size=%"PRIu64" channels=%u depth=%u\n", + pixma_dbg (3, " line_size=%"PRIu64" image_size=%"PRIu64" channels=%u depth=%u\n", sp->line_size, sp->image_size, sp->channels, sp->depth); pixma_dbg (3, " dpi=%ux%u offset=(%u,%u) dimension=%ux%u\n", sp->xdpi, sp->ydpi, sp->x, sp->y, sp->w, sp->h); pixma_dbg (3, " gamma_table=%p source=%d\n", sp->gamma_table, sp->source); + pixma_dbg (3, " threshold=%d threshold_curve=%d\n", sp->threshold, sp->threshold_curve); #endif s->param = sp; @@ -601,7 +839,7 @@ { if (s->cur_image_size < s->param->image_size) { - int n = s->param->image_size - s->cur_image_size; + long n = s->param->image_size - s->cur_image_size; if (n > (end - ptr)) n = end - ptr; memset (ptr, value, n); @@ -638,7 +876,7 @@ else { PDBG (pixma_dbg - (3, "pixma_read_image():completed (underrun detected)\n")); + (3, "pixma_read_image(): completed (underrun detected)\n")); s->scanning = 0; } return ib.wptr - (uint8_t *) buf; @@ -659,10 +897,10 @@ { pixma_dbg (1, "WARNING:image size mismatches\n"); pixma_dbg (1, - " %"PRIu64" expected (%d lines) but %"PRIu64" received (%d lines)\n", + " %"PRIu64" expected (%d lines) but %"PRIu64" received (%"PRIu64" lines)\n", s->param->image_size, s->param->h, s->cur_image_size, - (int) s->cur_image_size / s->param->line_size); + s->cur_image_size / s->param->line_size); if ((s->cur_image_size % s->param->line_size) != 0) { pixma_dbg (1, @@ -682,6 +920,7 @@ break; } s->cur_image_size += result; + PASSERT (s->cur_image_size <= s->param->image_size); } if (ib.rptr) @@ -700,7 +939,7 @@ s->scanning = 0; if (result == PIXMA_ECANCELED) { - PDBG (pixma_dbg (3, "pixma_read_image():cancelled by %sware\n", + PDBG (pixma_dbg (3, "pixma_read_image(): cancelled by %sware\n", (s->cancel) ? "soft" : "hard")); } else @@ -757,18 +996,26 @@ int pixma_check_scan_param (pixma_t * s, pixma_scan_param_t * sp) { + unsigned cfg_xdpi; + if (!(sp->channels == 3 || (sp->channels == 1 && (s->cfg->cap & PIXMA_CAP_GRAY) != 0))) return PIXMA_EINVAL; - if (pixma_check_dpi (sp->xdpi, s->cfg->xdpi) < 0 || + /* flatbed: use s->cfg->xdpi + * TPU/ADF: use s->cfg->ext_max_dpi, if configured with dpi value */ + cfg_xdpi = ((sp->source == PIXMA_SOURCE_FLATBED + || s->cfg->ext_max_dpi == 0) ? s->cfg->xdpi + : s->cfg->ext_max_dpi); + + if (pixma_check_dpi (sp->xdpi, cfg_xdpi) < 0 || pixma_check_dpi (sp->ydpi, s->cfg->ydpi) < 0) return PIXMA_EINVAL; /* xdpi must be equal to ydpi except that xdpi = max_xdpi and ydpi = max_ydpi. */ if (!(sp->xdpi == sp->ydpi || - (sp->xdpi == s->cfg->xdpi && sp->ydpi == s->cfg->ydpi))) + (sp->xdpi == cfg_xdpi && sp->ydpi == s->cfg->ydpi))) return PIXMA_EINVAL; if (s->ops->check_param (s, sp) < 0) @@ -832,6 +1079,10 @@ if (sp->line_size == 0) sp->line_size = sp->depth / 8 * sp->channels * sp->w; sp->image_size = sp->line_size * sp->h; + + /* image_size for software lineart is counted in bits */ + if (sp->software_lineart == 1) + sp->image_size /= 8; return 0; } diff -Nru sane-backends-1.0.22/backend/pixma_common.h sane-backends-1.0.23/backend/pixma_common.h --- sane-backends-1.0.22/backend/pixma_common.h 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_common.h 2012-08-19 20:27:18.000000000 +0000 @@ -1,6 +1,7 @@ /* SANE - Scanner Access Now Easy. Copyright (C) 2006-2007 Wittawat Yamwong + Copyright (C) 2011-2012 Rolf Bensch This file is part of the SANE package. @@ -188,6 +189,8 @@ int pixma_check_dpi (unsigned dpi, unsigned max); void pixma_sleep (unsigned long usec); void pixma_get_time (time_t * sec, uint32_t * usec); +uint8_t * pixma_rgb_to_gray (uint8_t * gptr, uint8_t * sptr, unsigned w, unsigned c); +uint8_t * pixma_binarize_line(pixma_scan_param_t *, uint8_t * dst, uint8_t * src, unsigned width, unsigned c); /**@}*/ /** \name Command related functions */ diff -Nru sane-backends-1.0.22/backend/pixma_imageclass.c sane-backends-1.0.23/backend/pixma_imageclass.c --- sane-backends-1.0.22/backend/pixma_imageclass.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_imageclass.c 2012-08-19 20:27:18.000000000 +0000 @@ -2,6 +2,7 @@ Copyright (C) 2007-2009 Nicolas Martin, Copyright (C) 2008 Dennis Lou, dlou 99 at yahoo dot com + Copyright (C) 2011-2012 Rolf Bensch This file is part of the SANE package. @@ -77,6 +78,7 @@ #define MF4320_PID 0x26ee #define MF3200_PID 0x2684 #define MF6500_PID 0x2686 +#define MF4410_PID 0x2737 /* the following are all untested */ #define MF5630_PID 0x264e #define MF5650_PID 0x264f @@ -99,7 +101,8 @@ cmd_scan_param = 0xde20, cmd_status = 0xf320, cmd_abort_session = 0xef20, - cmd_read_image = 0xd420, + cmd_read_image = 0xd420, + cmd_read_image2 = 0xd460, /* New multifunctionals, such as MF4410 */ cmd_error_info = 0xff20, cmd_activate = 0xcf60 @@ -264,10 +267,11 @@ const int hlen = 2 + 6; memset (mf->cb.buf, 0, 11); - pixma_set_be16 (cmd_read_image, mf->cb.buf); + pixma_set_be16 ((s->cfg->pid == MF4410_PID ? cmd_read_image2 : cmd_read_image), mf->cb.buf); mf->cb.buf[8] = flag; mf->cb.buf[10] = 0x06; - expected_len = (s->cfg->pid == MF4600_PID || + expected_len = (s->cfg->pid == MF4410_PID || + s->cfg->pid == MF4600_PID || s->cfg->pid == MF6500_PID || s->cfg->pid == MF8030_PID) ? 512 : hlen; mf->cb.reslen = pixma_cmd_transaction (s, mf->cb.buf, 11, mf->cb.buf, expected_len); @@ -277,7 +281,8 @@ *size = pixma_get_be16 (mf->cb.buf + 6); /* 16bit size */ error = 0; - if (s->cfg->pid == MF4600_PID || + if (s->cfg->pid == MF4410_PID || + s->cfg->pid == MF4600_PID || s->cfg->pid == MF6500_PID || s->cfg->pid == MF8030_PID) { /* 32bit size */ @@ -299,7 +304,8 @@ int error; unsigned maxchunksize, chunksize, count = 0; - maxchunksize = MAX_CHUNK_SIZE * ((s->cfg->pid == MF4600_PID || + maxchunksize = MAX_CHUNK_SIZE * ((s->cfg->pid == MF4410_PID || + s->cfg->pid == MF4600_PID || s->cfg->pid == MF6500_PID || s->cfg->pid == MF8030_PID) ? 4 : 1); while (size) @@ -595,6 +601,7 @@ if (n != 0) { if (s->param->channels != 1 && + s->cfg->pid != MF4410_PID && s->cfg->pid != MF4600_PID && s->cfg->pid != MF6500_PID && s->cfg->pid != MF8030_PID) @@ -643,7 +650,7 @@ query_status (s); activate (s, 0); query_status (s); - if (mf->last_block == 0x28) + if (mf->last_block == 0x28 || (s->cfg->pid==MF4410_PID && mf->last_block==0x38)) { abort_session (s); } @@ -696,6 +703,7 @@ 1, /* iface */ \ &pixma_iclass_ops, /* ops */ \ dpi, dpi, /* xdpi, ydpi */ \ + 0, 0, /* ext_min_dpi & ext_max_dpi not used in this subdriver */ \ w, h, /* width, height */ \ PIXMA_CAP_GRAY|PIXMA_CAP_EVENTS|cap \ } @@ -709,6 +717,7 @@ DEV ("Canon imageCLASS MF4010", "MF4010", MF4010_PID, 600, 640, 877, 0), DEV ("Canon imageCLASS MF3240", "MF3240", MF3200_PID, 600, 640, 877, 0), DEV ("Canon imageClass MF6500", "MF6500", MF6500_PID, 600, 640, 877, PIXMA_CAP_ADF), + DEV ("Canon imageCLASS MF4410", "MF4410", MF4410_PID, 600, 640, 877, 0), /* FIXME: the following capabilities all need updating/verifying */ DEV ("Canon imageCLASS MF5630", "MF5630", MF5630_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon laserBase MF5650", "MF5650", MF5650_PID, 600, 640, 877, PIXMA_CAP_ADF), diff -Nru sane-backends-1.0.22/backend/pixma_io_sanei.c sane-backends-1.0.23/backend/pixma_io_sanei.c --- sane-backends-1.0.22/backend/pixma_io_sanei.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_io_sanei.c 2012-07-01 02:00:44.000000000 +0000 @@ -567,7 +567,8 @@ #endif error = map_error (sanei_usb_read_int (io->dev, buf, &count)); } - if (error == PIXMA_EIO) + if (error == PIXMA_EIO + || (io->interface == INT_USB && error == PIXMA_EOF)) error = PIXMA_ETIMEDOUT; /* FIXME: SANE doesn't have ETIMEDOUT!! */ if (error == 0) error = count; diff -Nru sane-backends-1.0.22/backend/pixma_mp150.c sane-backends-1.0.23/backend/pixma_mp150.c --- sane-backends-1.0.22/backend/pixma_mp150.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_mp150.c 2012-08-19 20:27:18.000000000 +0000 @@ -2,6 +2,7 @@ Copyright (C) 2007-2009 Nicolas Martin, Copyright (C) 2006-2007 Wittawat Yamwong + Copyright (C) 2011-2012 Rolf Bensch This file is part of the SANE package. @@ -111,8 +112,6 @@ #define MP510_PID 0x1717 #define MP600_PID 0x1718 #define MP600R_PID 0x1719 -#define MP810_PID 0x171a -#define MP960_PID 0x171b #define MP140_PID 0x172b @@ -124,17 +123,12 @@ #define MP470_PID 0x1723 #define MP520_PID 0x1724 #define MP610_PID 0x1725 -#define MP970_PID 0x1726 #define MX300_PID 0x1727 #define MX310_PID 0x1728 #define MX700_PID 0x1729 #define MX850_PID 0x172c -/* Flatbed scanner CCD (2007) */ -#define CS8800F_PID 0x1901 - /* PIXMA 2008 vintage */ -#define MP980_PID 0x172d #define MP630_PID 0x172e #define MP620_PID 0x172f #define MP540_PID 0x1730 @@ -155,13 +149,43 @@ #define MP550_PID 0x173d #define MP560_PID 0x173e #define MP640_PID 0x173f -#define MP990_PID 0x1740 /* PIXMA 2010 vintage */ #define MX340_PID 0x1741 #define MX350_PID 0x1742 #define MX870_PID 0x1743 +/* 2010 new devices (untested) */ +#define MP280_PID 0x1746 +#define MP495_PID 0x1747 +#define MG5100_PID 0x1748 +#define MG5200_PID 0x1749 +#define MG6100_PID 0x174a + +/* PIXMA 2011 vintage */ +#define MX360_PID 0x174d +#define MX410_PID 0x174e +#define MX420_PID 0x174f +#define MX880_PID 0x1750 + +/* 2011 new devices (untested) */ +#define MG2100_PID 0x1751 +#define MG3100_PID 0x1752 +#define MG4100_PID 0x1753 +#define MG5300_PID 0x1754 +#define MG6200_PID 0x1755 +#define MP493_PID 0x1757 +#define E500_PID 0x1758 + +/* 2012 new devices (untested) */ +#define MX370_PID 0x1759 +#define MX430_PID 0x175B +#define MX510_PID 0x175C +#define MX710_PID 0x175D +#define MX890_PID 0x175E +#define E600_PID 0x175A + + /* Generation 4 XML messages that encapsulates the Pixma protocol messages */ #define XML_START_1 \ "\ @@ -557,15 +581,22 @@ static int is_ccd_grayscale (pixma_t * s) { - return (has_ccd_sensor (s) && (s->param->channels == 1)); + return (has_ccd_sensor (s) && (s->param->channels == 1) && !s->param->software_lineart); +} + +static int +is_ccd_lineart (pixma_t * s) +{ + return (has_ccd_sensor (s) && s->param->software_lineart); } -/* CCD sensors don't have a Grayscale mode, but use color mode instead */ +/* CCD sensors don't have neither a Grayscale mode nor a Lineart mode, + * but use color mode instead */ static unsigned get_cis_ccd_line_size (pixma_t * s) { - return (s->param->wx ? s->param->line_size / s->param->w * s->param->wx - : s->param->line_size) * ((is_ccd_grayscale (s)) ? 3 : 1); + return ((s->param->wx ? s->param->line_size / s->param->w * s->param->wx + : s->param->line_size) * ((is_ccd_grayscale (s) || is_ccd_lineart (s)) ? 3 : 1)); } static unsigned @@ -577,28 +608,25 @@ mp->stripe_shift = 0; switch (s->cfg->pid) { - case MP970_PID: /* MP970 at 4800 dpi */ - case CS8800F_PID: /* CanoScan 8800F at 4800 dpi */ - if (s->param->xdpi == 4800) - { - if (is_scanning_from_tpu(s)) - mp->stripe_shift = 6; - else - mp->stripe_shift = 3; - } - break; - case MP800_PID: case MP800R_PID: - case MP960_PID: if (s->param->xdpi == 2400) - mp->stripe_shift = 6; + { + if (is_scanning_from_tpu(s)) + mp->stripe_shift = 6; + else + mp->stripe_shift = 3; + } break; case MP830_PID: - case MP810_PID: if (s->param->xdpi == 2400) - mp->stripe_shift = 3; + { + if (is_scanning_from_tpu(s)) + mp->stripe_shift = 6; + else + mp->stripe_shift = 3; + } break; default: /* Default, and all CIS devices */ @@ -610,25 +638,6 @@ { switch (s->cfg->pid) { - case MP970_PID: - case CS8800F_PID: /* CanoScan 8800F */ - mp->color_shift = s->param->ydpi / 50; - mp->shift[1] = mp->color_shift * get_cis_ccd_line_size (s); - mp->shift[0] = 0; - mp->shift[2] = 2 * mp->shift[1]; - break; - - case MP980_PID: - case MP990_PID: - if (s->param->ydpi > 150) - { - mp->color_shift = s->param->ydpi / 75; - mp->shift[1] = mp->color_shift * get_cis_ccd_line_size (s); - mp->shift[0] = 0; - mp->shift[2] = 2 * mp->shift[1]; - } - break; - case MP800_PID: case MP800R_PID: case MP830_PID: @@ -650,14 +659,6 @@ } break; - case MP810_PID: - case MP960_PID: - mp->color_shift = s->param->ydpi / 50; - mp->shift[1] = mp->color_shift * get_cis_ccd_line_size (s); - mp->shift[0] = 2 * mp->shift[1]; - mp->shift[2] = 0; - break; - default: break; } @@ -674,8 +675,16 @@ unsigned h = MIN (s->param->h + calc_shifting (s), s->cfg->height * s->param->ydpi / 75); + /* TPU scan does not support lineart */ + if (is_scanning_from_tpu (s) && is_ccd_lineart (s)) + { + return PIXMA_ENOTSUP; + } + if (mp->generation <= 2) { + /*PDBG (pixma_dbg (4, "*send_scan_param gen. 1-2 ***** Setting: xdpi=%hi ydpi=%hi x=%i y=%i w=%i ***** \n", + s->param->xdpi,s->param->ydpi,(s->param->x)-(s->param->xs),s->param->y,raw_width));*/ data = pixma_newcmd (&mp->cb, cmd_scan_param, 0x30, 0); pixma_set_be16 (s->param->xdpi | 0x8000, data + 0x04); pixma_set_be16 (s->param->ydpi | 0x8000, data + 0x06); @@ -685,8 +694,9 @@ pixma_set_be32 (s->param->y, data + 0x0c); pixma_set_be32 (raw_width, data + 0x10); pixma_set_be32 (h, data + 0x14); - data[0x18] = ((s->param->channels != 1) || is_ccd_grayscale (s)) ? 0x08 : 0x04; - data[0x19] = s->param->depth * ((is_ccd_grayscale (s)) ? 3 : s->param->channels); /* bits per pixel */ + data[0x18] = ((s->param->channels != 1) || is_ccd_grayscale (s) || is_ccd_lineart (s)) ? 0x08 : 0x04; + data[0x19] = ((s->param->software_lineart) ? 8 : s->param->depth) + * ((is_ccd_grayscale (s) || is_ccd_lineart (s)) ? 3 : s->param->channels); /* bits per pixel */ data[0x1a] = (is_scanning_from_tpu (s) ? 1 : 0); data[0x20] = 0xff; data[0x23] = 0x81; @@ -702,7 +712,7 @@ { data[0x00] = 0x04; data[0x01] = 0x02; - data[0x1e] = 0x02; /* NB: CanoScan 8800F: 0x02->negatives, 0x01->positives, paper->0x00 */ + data[0x1e] = 0x02; } data[0x02] = 0x01; if (is_scanning_from_adfdup (s)) @@ -713,19 +723,20 @@ data[0x05] = 0x01; /* This one also seen at 0. Don't know yet what's used for */ pixma_set_be16 (s->param->xdpi | 0x8000, data + 0x08); pixma_set_be16 (s->param->ydpi | 0x8000, data + 0x0a); - /*PDBG (pixma_dbg (4, "*send_scan_param***** Setting: xdpi=%hi ydpi=%hi x=%i y=%i w=%i ***** \n", + /*PDBG (pixma_dbg (4, "*send_scan_param gen. 3+ ***** Setting: xdpi=%hi ydpi=%hi x=%i y=%i w=%i ***** \n", s->param->xdpi,s->param->ydpi,(s->param->x)-(s->param->xs),s->param->y,raw_width));*/ pixma_set_be32 (s->param->x - s->param->xs, data + 0x0c); pixma_set_be32 (s->param->y, data + 0x10); pixma_set_be32 (raw_width, data + 0x14); pixma_set_be32 (h, data + 0x18); - data[0x1c] = ((s->param->channels != 1) || is_ccd_grayscale (s)) ? 0x08 : 0x04; + data[0x1c] = ((s->param->channels != 1) || is_ccd_grayscale (s) || is_ccd_lineart (s)) ? 0x08 : 0x04; #ifdef DEBUG_TPU_48 data[0x1d] = 24; #else - data[0x1d] = (is_scanning_from_tpu (s)) ? 48 : - s->param->depth * ((is_ccd_grayscale (s)) ? 3 : s->param->channels); /* bits per pixel */ + data[0x1d] = (is_scanning_from_tpu (s)) ? 48 + : (((s->param->software_lineart) ? 8 : s->param->depth) + * ((is_ccd_grayscale (s) || is_ccd_lineart (s)) ? 3 : s->param->channels)); /* bits per pixel */ #endif data[0x1f] = 0x01; @@ -733,9 +744,6 @@ data[0x21] = 0x81; data[0x23] = 0x02; data[0x24] = 0x01; - if (s->cfg->pid == CS8800F_PID) /* CS8800F addition */ - data[0x25] = (is_scanning_from_tpu (s)) ? 0x00 : 0x01; /* 0x01 normally, 0x00 for TPU color management*/ - data[0x30] = 0x01; } return pixma_exec (s, &mp->cb); @@ -962,7 +970,7 @@ sr = colshft[0]; sg = colshft[1]; sb = colshft[2]; for (i = 0; i < w; i++) { - /* stripes shift for MP970 at 4800 dpi, MP800, MP800R, MP810 at 2400 dpi */ + /* stripes shift for MP800, MP800R at 2400 dpi */ st = (i % 2 == 0) ? strshft : 0; *sptr++ = *(dptr++ + sr + st); @@ -975,26 +983,6 @@ return dptr; } -static uint8_t * -rgb_to_gray (uint8_t * gptr, uint8_t * sptr, unsigned w, unsigned c) -{ - unsigned i, j, g; - - for (i = 0; i < w; i++) - { - for (j = 0, g = 0; j < 3; j++) - { - g += *sptr++; - if (c == 6) g += (*sptr++ << 8); - } - - g /= 3; - *gptr++ = g; - if (c == 6) *gptr++ = (g >> 8); - } - return gptr; -} - static void reorder_pixels (uint8_t * linebuf, uint8_t * sptr, unsigned c, unsigned n, unsigned m, unsigned w, unsigned line_size) @@ -1008,20 +996,6 @@ memcpy (sptr, linebuf, line_size); } -static void -mp970_reorder_pixels (uint8_t * linebuf, uint8_t * sptr, unsigned c, - unsigned w, unsigned line_size) -{ - unsigned i, i8; - - for (i = 0; i < w; i++) - { - i8 = i % 8; - memcpy (linebuf + c * (i + i8 - ((i8 > 3) ? 7 : 0)), sptr + c * i, c); - } - memcpy (sptr, linebuf, line_size); -} - #ifndef TPU_48 static unsigned pack_48_24_bpc (uint8_t * sptr, unsigned n) @@ -1055,7 +1029,8 @@ unsigned c, lines, i, line_size, n, m, cw, cx; uint8_t *sptr, *dptr, *gptr, *cptr; - c = ((is_ccd_grayscale (s)) ? 3 : s->param->channels) * s->param->depth / 8; + c = ((is_ccd_grayscale (s) || is_ccd_lineart (s)) ? 3 : s->param->channels) + * ((s->param->software_lineart) ? 8 : s->param->depth) / 8; cw = c * s->param->w; cx = c * s->param->xs; @@ -1064,11 +1039,6 @@ else /* FIXME: maybe need different values for CIS and CCD sensors */ n = s->param->xdpi / 2400; - /* Some exceptions to global rules here */ - if (s->cfg->pid == MP970_PID || - s->cfg->pid == MP990_PID || - s->cfg->pid == CS8800F_PID) - n = MIN (n, 4); if (s->cfg->pid == MP600_PID || s->cfg->pid == MP600R_PID) n = s->param->xdpi / 1200; @@ -1079,7 +1049,7 @@ lines = (mp->data_left_ofs - mp->imgbuf) / line_size; /*PDBG (pixma_dbg (4, "*post_process_image_data***** lines = %i > 2 * mp->color_shift + mp->stripe_shift = %i ***** \n", - lines, 2 * mp->color_shift + mp->stripe_shift));*/ + lines, 2 * mp->color_shift + mp->stripe_shift));*/ if (lines > 2 * mp->color_shift + mp->stripe_shift) { lines -= 2 * mp->color_shift + mp->stripe_shift; @@ -1094,21 +1064,19 @@ mp->shift, mp->stripe_shift); /* special image format for *most* devices at high dpi. - * MP220 is a gen3 exception */ - if (s->cfg->pid != MP220_PID && n > 0) + * MP220 and MX360 are exceptions */ + if (s->cfg->pid != MP220_PID && s->cfg->pid != MX360_PID && n > 0) reorder_pixels (mp->linebuf, sptr, c, n, m, s->param->wx, line_size); - /* MP970 and CS8800F specific reordering for 4800 dpi */ - if ((s->cfg->pid == MP970_PID || s->cfg->pid == CS8800F_PID) - && s->param->xdpi == 4800) - mp970_reorder_pixels (mp->linebuf, sptr, c, s->param->wx, line_size); - /* Crop line to selected borders */ memmove(cptr, sptr + cx, cw); + /* Color / Gray to Lineart convert */ + if (s->param->software_lineart) + cptr = gptr = pixma_binarize_line (s->param, gptr, cptr, s->param->w, c); /* Color to Grayscale convert for CCD sensor */ - if (is_ccd_grayscale (s)) - cptr = gptr = rgb_to_gray (gptr, cptr, s->param->w, c); + else if (is_ccd_grayscale (s)) + cptr = gptr = pixma_rgb_to_gray (gptr, cptr, s->param->w, c); else cptr += cw; } @@ -1159,25 +1127,16 @@ if (s->cfg->pid == MP140_PID) mp->generation = 2; - if (s->cfg->pid == CS8800F_PID) - mp->generation = 3; - /* TPU info data setup */ mp->tpu_datalen = 0; if (mp->generation < 4) { - /* Canoscan 8800F ignores commands if not initialized */ - if (s->cfg->pid == CS8800F_PID) - abort_session (s); - else - { - query_status (s); - handle_interrupt (s, 200); - if (mp->generation == 3 && has_ccd_sensor (s)) - send_cmd_start_calibrate_ccd_3 (s); - } - } + query_status (s); + handle_interrupt (s, 200); + if (mp->generation == 3 && has_ccd_sensor (s)) + send_cmd_start_calibrate_ccd_3 (s); + } return 0; } @@ -1196,15 +1155,42 @@ mp150_check_param (pixma_t * s, pixma_scan_param_t * sp) { mp150_t *mp = (mp150_t *) s->subdriver; - uint8_t fixed_offset = 35; /* TPU offset for CanoScan 8800F, or other CCD at 300dpi. */ + unsigned w_max; + + /* PDBG (pixma_dbg (4, "*mp150_check_param***** Initially: channels=%u, depth=%u, x=%u, y=%u, w=%u, h=%u, xs=%u, wx=%u *****\n", + sp->channels, sp->depth, sp->x, sp->y, sp->w, sp->h, sp->xs, sp->wx)); */ - sp->depth = 8; /* MP150 only supports 8 bit per channel. */ + /* MP150 only supports 8 bit per channel in color and grayscale mode */ + if (sp->depth != 1) + { + sp->software_lineart = 0; + sp->depth = 8; #ifdef TPU_48 #ifndef DEBUG_TPU_48 - if (sp->source == PIXMA_SOURCE_TPU) + if (sp->source == PIXMA_SOURCE_TPU) #endif - sp->depth = 16; /* TPU in 16 bits mode */ + sp->depth = 16; /* TPU in 16 bits mode */ #endif + } + else + { + /* software lineart */ + sp->software_lineart = 1; + sp->depth = 1; + sp->channels = 1; + } + + /* for software lineart w must be a multiple of 8 */ + if (sp->software_lineart == 1 && sp->w % 8) + { + sp->w += 8 - (sp->w % 8); + + /* do not exceed the scanner capability */ + w_max = s->cfg->width * s->cfg->xdpi / 75; + w_max -= w_max % 8; + if (sp->w > w_max) + sp->w = w_max; + } if (mp->generation >= 2) { @@ -1216,7 +1202,7 @@ sp->xs = 0; /*PDBG (pixma_dbg (4, "*mp150_check_param***** Selected origin, origin shift: %i, %i *****\n", sp->x, sp->xs));*/ sp->wx = calc_raw_width (mp, sp); - sp->line_size = sp->w * sp->channels * (sp->depth / 8); /* bytes per line per color after cropping */ + sp->line_size = sp->w * sp->channels * (((sp->software_lineart) ? 8 : sp->depth) / 8); /* bytes per line per color after cropping */ /*PDBG (pixma_dbg (4, "*mp150_check_param***** Final scan width and line-size: %i, %i *****\n", sp->wx, sp->line_size));*/ /* Some exceptions here for particular devices */ @@ -1224,10 +1210,12 @@ if (( s->cfg->pid == MX850_PID || s->cfg->pid == MX860_PID || s->cfg->pid == MX870_PID || + s->cfg->pid == MX880_PID || s->cfg->pid == MX320_PID || s->cfg->pid == MX330_PID || s->cfg->pid == MX340_PID || s->cfg->pid == MX350_PID || + s->cfg->pid == MX360_PID || s->cfg->pid == MX7600_PID ) && sp->source == PIXMA_SOURCE_FLATBED) @@ -1236,15 +1224,6 @@ if (sp->source == PIXMA_SOURCE_TPU) { uint8_t k; - /* CanoScan 8800F and others adding an offset depending on resolution */ - if (s->cfg->pid == CS8800F_PID) - { - /* deal with overlap of calibration area as well */ - if ( (sp->y) < (fixed_offset*(sp->xdpi)/300) ) - sp->y = (fixed_offset*(sp->xdpi)/300) - ((fixed_offset*(sp->xdpi)/300)-(sp->y)); - else - sp->y += (fixed_offset*(sp->xdpi)/300); - } /* TPU mode: lowest res is 150 or 300 dpi */ if (mp->generation >= 3) @@ -1278,6 +1257,8 @@ sp->ydpi = sp->xdpi; } + /*PDBG (pixma_dbg (4, "*mp150_check_param***** Finally: channels=%u, depth=%u, x=%u, y=%u, w=%u, h=%u, xs=%u, wx=%u *****\n", + sp->channels, sp->depth, sp->x, sp->y, sp->w, sp->h, sp->xs, sp->wx));*/ return 0; } @@ -1559,99 +1540,116 @@ mp150_get_status }; -#define DEVICE(name, model, pid, dpi, w, h, cap) { \ +#define DEVICE(name, model, pid, dpi, ext_min_dpi, ext_max_dpi, w, h, cap) { \ name, /* name */ \ model, /* model */ \ CANON_VID, pid, /* vid pid */ \ 0, /* iface */ \ &pixma_mp150_ops, /* ops */ \ dpi, 2*(dpi), /* xdpi, ydpi */ \ + ext_min_dpi, ext_max_dpi, /* ext_min_dpi, ext_max_dpi */ \ w, h, /* width, height */ \ - PIXMA_CAP_EASY_RGB|PIXMA_CAP_GRAY| \ + PIXMA_CAP_EASY_RGB| \ + PIXMA_CAP_GRAY| /* CIS with native grayscale and CCD with software grayscale */ \ + PIXMA_CAP_LINEART| /* all scanners with software lineart */ \ PIXMA_CAP_GAMMA_TABLE|PIXMA_CAP_EVENTS|cap \ } -#define END_OF_DEVICE_LIST DEVICE(NULL, NULL, 0, 0, 0, 0, 0) +#define END_OF_DEVICE_LIST DEVICE(NULL, NULL, 0, 0, 0, 0, 0, 0, 0) const pixma_config_t pixma_mp150_devices[] = { /* Generation 1: CIS */ - DEVICE ("Canon PIXMA MP150", "MP150", MP150_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP170", "MP170", MP170_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP450", "MP450", MP450_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP500", "MP500", MP500_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP530", "MP530", MP530_PID, 1200, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MP150", "MP150", MP150_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP170", "MP170", MP170_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP450", "MP450", MP450_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP500", "MP500", MP500_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP530", "MP530", MP530_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), /* Generation 1: CCD */ - DEVICE ("Canon PIXMA MP800", "MP800", MP800_PID, 2400, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU | PIXMA_CAP_48BIT), - DEVICE ("Canon PIXMA MP800R", "MP800R", MP800R_PID, 2400, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU | PIXMA_CAP_48BIT), - DEVICE ("Canon PIXMA MP830", "MP830", MP830_PID, 2400, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_ADFDUP | PIXMA_CAP_48BIT), + DEVICE ("Canon PIXMA MP800", "MP800", MP800_PID, 2400, 150, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + DEVICE ("Canon PIXMA MP800R", "MP800R", MP800R_PID, 2400, 150, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + DEVICE ("Canon PIXMA MP830", "MP830", MP830_PID, 2400, 150, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_ADFDUP), /* Generation 2: CIS */ - DEVICE ("Canon PIXMA MP140", "MP140", MP140_PID, 600, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP160", "MP160", MP160_PID, 600, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP180", "MP180", MP180_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP460", "MP460", MP460_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP510", "MP510", MP510_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP600", "MP600", MP600_PID, 2400, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP600R", "MP600R", MP600R_PID, 2400, 638, 877, PIXMA_CAP_CIS), - - /* Generation 2: CCD */ - DEVICE ("Canon PIXMA MP810", "MP810", MP810_PID, 4800, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), - DEVICE ("Canon PIXMA MP960", "MP960", MP960_PID, 4800, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + DEVICE ("Canon PIXMA MP140", "MP140", MP140_PID, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP160", "MP160", MP160_PID, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP180", "MP180", MP180_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP460", "MP460", MP460_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP510", "MP510", MP510_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP600", "MP600", MP600_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP600R", "MP600R", MP600R_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), /* Generation 3: CIS */ - DEVICE ("Canon PIXMA MP210", "MP210", MP210_PID, 600, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP220", "MP220", MP220_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP470", "MP470", MP470_PID, 2400, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP520", "MP520", MP520_PID, 2400, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP610", "MP610", MP610_PID, 4800, 638, 877, PIXMA_CAP_CIS), - - DEVICE ("Canon PIXMA MX300", "MX300", MX300_PID, 600, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MX310", "MX310", MX310_PID, 1200, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), - DEVICE ("Canon PIXMA MX700", "MX700", MX700_PID, 2400, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), - DEVICE ("Canon PIXMA MX850", "MX850", MX850_PID, 2400, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), - DEVICE ("Canon PIXMA MX7600", "MX7600", MX7600_PID, 4800, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), - - /* Generation 3 CCD not managed as Generation 2 */ - DEVICE ("Canon Pixma MP970", "MP970", MP970_PID, 4800, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), - - /* Flatbed scanner CCD (2007) */ - DEVICE ("Canoscan 8800F", "8800F", CS8800F_PID, 4800, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), - - /* PIXMA 2008 vintage CCD and CIS */ - DEVICE ("Canon MP980 series", "MP980", MP980_PID, 4800, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), - - DEVICE ("Canon PIXMA MP630", "MP630", MP630_PID, 4800, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP620", "MP620", MP620_PID, 2400, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP540", "MP540", MP540_PID, 2400, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP480", "MP480", MP480_PID, 2400, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP240", "MP240", MP240_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP260", "MP260", MP260_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP190", "MP190", MP190_PID, 600, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP210", "MP210", MP210_PID, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP220", "MP220", MP220_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP470", "MP470", MP470_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP520", "MP520", MP520_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP610", "MP610", MP610_PID, 4800, 0, 0, 638, 877, PIXMA_CAP_CIS), + + DEVICE ("Canon PIXMA MX300", "MX300", MX300_PID, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MX310", "MX310", MX310_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX700", "MX700", MX700_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX850", "MX850", MX850_PID, 2400, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), + DEVICE ("Canon PIXMA MX7600", "MX7600", MX7600_PID, 4800, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), + + DEVICE ("Canon PIXMA MP630", "MP630", MP630_PID, 4800, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP620", "MP620", MP620_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP540", "MP540", MP540_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP480", "MP480", MP480_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP240", "MP240", MP240_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP260", "MP260", MP260_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP190", "MP190", MP190_PID, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), /* PIXMA 2009 vintage */ - DEVICE ("Canon PIXMA MX320", "MX320", MX320_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), - DEVICE ("Canon PIXMA MX330", "MX330", MX330_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), - DEVICE ("Canon PIXMA MX860", "MX860", MX860_PID, 2400, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), + DEVICE ("Canon PIXMA MX320", "MX320", MX320_PID, 1200, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX330", "MX330", MX330_PID, 1200, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX860", "MX860", MX860_PID, 2400, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), /* width and height adjusted to flatbed size 21.8 x 30.2 cm^2 respective * Not sure if anything's going wrong here, leaving as is - DEVICE ("Canon PIXMA MX860", "MX860", MX860_PID, 2400, 638, 880, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP),*/ + DEVICE ("Canon PIXMA MX860", "MX860", MX860_PID, 2400, 0, 0, 638, 880, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP),*/ /* PIXMA 2010 vintage */ - DEVICE ("Canon PIXMA MX340", "MX340", MX340_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), - DEVICE ("Canon PIXMA MX350", "MX350", MX350_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), - DEVICE ("Canon PIXMA MX870", "MX870", MX870_PID, 2400, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), + DEVICE ("Canon PIXMA MX340", "MX340", MX340_PID, 1200, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX350", "MX350", MX350_PID, 1200, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX870", "MX870", MX870_PID, 2400, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), + + /* PIXMA 2011 vintage */ + DEVICE ("Canon PIXMA MX360", "MX360", MX360_PID, 1200, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX410", "MX410", MX410_PID, 1200, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX420", "MX420", MX420_PID, 1200, 0, 0, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX880 Series", "MX880", MX880_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), /* Generation 4: CIS */ - DEVICE ("Canon PIXMA MP640", "MP640", MP640_PID, 4800, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP560", "MP560", MP560_PID, 2400, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP550", "MP550", MP550_PID, 2400, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP490", "MP490", MP490_PID, 1200, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP250", "MP250", MP250_PID, 600, 638, 877, PIXMA_CAP_CIS), - DEVICE ("Canon PIXMA MP270", "MP270", MP270_PID, 1200, 638, 877, PIXMA_CAP_CIS), - - /* Generation 4 CCD */ - DEVICE ("Canon MP990 series", "MP990", MP990_PID, 4800, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + DEVICE ("Canon PIXMA MP640", "MP640", MP640_PID, 4800, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP560", "MP560", MP560_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP550", "MP550", MP550_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP490", "MP490", MP490_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP250", "MP250", MP250_PID, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP270", "MP270", MP270_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + + /* Latest devices (2010) Generation 4 CIS/CCD */ + DEVICE ("Canon PIXMA MP280", "MP280", MP280_PID, 600, 0, 0, 638, 877, PIXMA_CAP_CIS), /* TODO: 1200dpi doesn't work yet */ + DEVICE ("Canon PIXMA MP495", "MP495", MP495_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MG5100", "MG5100", MG5100_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MG5200", "MG5200", MG5200_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MG6100", "MG6200", MG6100_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + + /* Latest devices (2011) Generation 4 CIS/CCD */ + DEVICE ("Canon PIXMA MG2100", "MG2100", MG2100_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MG3100", "MG3100", MG3100_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MG4100", "MG4100", MG4100_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MG5300", "MG5300", MG5300_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MG6200", "MG6200", MG6200_PID, 4800, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA MP493", "MP493", MP493_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS), + DEVICE ("Canon PIXMA E500", "E500", E500_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_EXPERIMENT), + + /* Latest devices (2012) Generation 4 CIS */ + DEVICE ("Canon PIXMA MX370 Series", "MX370", MX370_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF | PIXMA_CAP_EXPERIMENT), + DEVICE ("Canon PIXMA MX430 Series", "MX430", MX430_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF | PIXMA_CAP_EXPERIMENT), + DEVICE ("Canon PIXMA MX510 Series", "MX510", MX510_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF | PIXMA_CAP_EXPERIMENT), + DEVICE ("Canon PIXMA MX710 Series", "MX710", MX710_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP | PIXMA_CAP_EXPERIMENT), + DEVICE ("Canon PIXMA MX890 Series", "MX890", MX890_PID, 2400, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP | PIXMA_CAP_EXPERIMENT), + DEVICE ("Canon PIXMA E600 Series", "E600", E600_PID, 1200, 0, 0, 638, 877, PIXMA_CAP_CIS | PIXMA_CAP_ADF | PIXMA_CAP_EXPERIMENT), END_OF_DEVICE_LIST }; diff -Nru sane-backends-1.0.22/backend/pixma_mp730.c sane-backends-1.0.23/backend/pixma_mp730.c --- sane-backends-1.0.22/backend/pixma_mp730.c 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_mp730.c 2012-08-19 20:27:18.000000000 +0000 @@ -2,6 +2,7 @@ Copyright (C) 2007-2008 Nicolas Martin, Copyright (C) 2006-2007 Wittawat Yamwong + Copyright (C) 2011-2012 Rolf Bensch This file is part of the SANE package. @@ -792,6 +793,7 @@ mp730_get_status }; +/* TODO: implement ext_min_dpi & ext_max_dpi for grayscale & lineart */ #define DEVICE(name, model, pid, dpi, w, h, cap) { \ name, /* name */ \ model, /* model */ \ @@ -799,6 +801,7 @@ 1, /* iface */ \ &pixma_mp730_ops, /* ops */ \ dpi, dpi, /* xdpi, ydpi */ \ + 0, 0, /* ext_min_dpi & ext_max_dpi not used in this subdriver */ \ w, h, /* width, height */ \ PIXMA_CAP_GRAY|PIXMA_CAP_EVENTS|cap \ } diff -Nru sane-backends-1.0.22/backend/pixma_mp750.c sane-backends-1.0.23/backend/pixma_mp750.c --- sane-backends-1.0.22/backend/pixma_mp750.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_mp750.c 2012-08-19 20:27:18.000000000 +0000 @@ -1,6 +1,7 @@ /* SANE - Scanner Access Now Easy. Copyright (C) 2006-2007 Wittawat Yamwong + Copyright (C) 2011-2012 Rolf Bensch This file is part of the SANE package. @@ -107,6 +108,10 @@ uint8_t current_status[12]; uint8_t *buf, *rawimg, *img; + /* make new buffer for rgb_to_gray to act on */ + uint8_t *imgcol; + unsigned line_size; /* need in 2 functions */ + unsigned rawimg_left, imgbuf_len, last_block_size, imgbuf_ofs; int shifted_bytes; int stripe_shift; /* for 2400dpi */ @@ -209,6 +214,26 @@ } static int +has_ccd_sensor (pixma_t * s) +{ + return ((s->cfg->cap & PIXMA_CAP_CCD) != 0); +} + +static int +is_ccd_grayscale (pixma_t * s) +{ + return (has_ccd_sensor (s) && (s->param->channels == 1)); +} + +/* CCD sensors don't have a Grayscale mode, but use color mode instead */ +static unsigned +get_cis_ccd_line_size (pixma_t * s) +{ + return (s->param->wx ? s->param->line_size / s->param->w * s->param->wx + : s->param->line_size) * ((is_ccd_grayscale (s)) ? 3 : 1); +} + +static int send_scan_param (pixma_t * s) { mp750_t *mp = (mp750_t *) s->subdriver; @@ -222,7 +247,8 @@ pixma_set_be32 (mp->raw_width, data + 0x10); pixma_set_be32 (mp->raw_height, data + 0x14); data[0x18] = 8; /* 8 = color, 4 = grayscale(?) */ - data[0x19] = s->param->channels * s->param->depth; + /* GH: No, there is no grayscale for CCD devices, Windows shows same */ + data[0x19] = s->param->depth * ((is_ccd_grayscale (s)) ? 3 : s->param->channels); /* bits per pixel */ data[0x20] = 0xff; data[0x23] = 0x81; data[0x26] = 0x02; @@ -302,7 +328,7 @@ if ((error = pixma_read (s->io, &temp, 0)) < 0) { PDBG (pixma_dbg - (1, "WARNING:reading zero-length packet failed %d\n", error)); + (1, "WARNING: reading zero-length packet failed %d\n", error)); } } return count; @@ -351,7 +377,7 @@ return error; if (error != 16) { - PDBG (pixma_dbg (1, "WARNING:unexpected interrupt packet length %d\n", + PDBG (pixma_dbg (1, "WARNING: unexpected interrupt packet length %d\n", error)); return PIXMA_EPROTO; } @@ -409,8 +435,8 @@ static void shift_rgb (const uint8_t * src, unsigned pixels, - int sr, int sg, int sb, int stripe_shift, - int line_size, uint8_t * dst) + int sr, int sg, int sb, int stripe_shift, + int line_size, uint8_t * dst) { unsigned st; @@ -423,6 +449,29 @@ } } +static uint8_t * +rgb_to_gray (uint8_t * gptr, const uint8_t * cptr, unsigned pixels, unsigned c) +{ + unsigned i, j, g; + + /* gptr: destination gray scale buffer */ + /* cptr: source color scale buffer */ + /* c: 3 for 3-channel single-byte data, 6 for double-byte data */ + + for (i=0; i < pixels; i++) + { + for (j = 0, g = 0; j < 3; j++) + { + g += *cptr++; + if (c == 6) g += (*cptr++ << 8); + } + g /= 3; + *gptr++ = g; + if (c == 6) *gptr++ = (g >> 8); + } + return gptr; +} + static int calc_component_shifting (pixma_t * s) { @@ -494,7 +543,6 @@ } } - static int mp750_open (pixma_t * s) { @@ -553,11 +601,18 @@ UNUSED (s); sp->depth = 8; /* FIXME: Does MP750 supports other depth? */ - if (sp->channels == 1) - raw_width = ALIGN_SUP (sp->w, 12); - else + + /* GH: my implementation */ + /* if ((sp->channels == 3) || (is_ccd_grayscale (s))) raw_width = ALIGN_SUP (sp->w, 4); - sp->line_size = raw_width * sp->channels; + else + raw_width = ALIGN_SUP (sp->w, 12);*/ + + /* the above code gives segmentation fault?!? why... it seems to work in the mp750_scan function */ + raw_width = ALIGN_SUP (sp->w, 4); + + /*sp->line_size = raw_width * sp->channels;*/ + sp->line_size = raw_width * sp->channels * (sp->depth / 8); /* no cropping? */ return 0; } @@ -569,6 +624,10 @@ uint8_t *buf; unsigned size, dpi, spare; + dpi = s->param->ydpi; + /* add a stripe shift for 2400dpi */ + mp->stripe_shift = (dpi == 2400) ? 4 : 0; + if (mp->state != state_idle) return PIXMA_EBUSY; @@ -577,15 +636,17 @@ { } - if (s->param->channels == 1) + /* if (s->param->channels == 1) mp->raw_width = ALIGN_SUP (s->param->w, 12); else - mp->raw_width = ALIGN_SUP (s->param->w, 4); + mp->raw_width = ALIGN_SUP (s->param->w, 4);*/ - dpi = s->param->ydpi; - - /* add a stripe shift for 2400dpi */ - mp->stripe_shift = (dpi == 2400) ? 4 : 0; + /* change to use CCD grayscale mode --- why does this give segmentation error at runtime in mp750_check_param? */ + if ((s->param->channels == 3) || (is_ccd_grayscale (s))) + mp->raw_width = ALIGN_SUP (s->param->w, 4); + else + mp->raw_width = ALIGN_SUP (s->param->w, 12); + /* not sure about MP750, but there is no need for aligning at 12 for the MP760/770, MP780/790 since always use CCD color mode */ /* modify for stripe shift */ spare = 2 * calc_component_shifting (s) + 2 * mp->stripe_shift; /* FIXME: or maybe (2*... + 1)? */ @@ -593,13 +654,18 @@ PDBG (pixma_dbg (3, "raw_width=%u raw_height=%u dpi=%u\n", mp->raw_width, mp->raw_height, dpi)); - size = 8 + 2 * IMAGE_BLOCK_SIZE + spare * s->param->line_size; + /* PDBG (pixma_dbg (4, "line_size=%"PRIu64"\n",s->param->line_size)); */ + + mp->line_size = get_cis_ccd_line_size (s); /* scanner hardware line_size multiplied by 3 for CCD grayscale */ + + size = 8 + 2 * IMAGE_BLOCK_SIZE + spare * mp->line_size; buf = (uint8_t *) malloc (size); if (!buf) return PIXMA_ENOMEM; mp->buf = buf; mp->rawimg = buf; - mp->imgbuf_ofs = spare * s->param->line_size; + mp->imgbuf_ofs = spare * mp->line_size; + mp->imgcol = mp->rawimg + IMAGE_BLOCK_SIZE + 8; /* added to make rgb->gray */ mp->img = mp->rawimg + IMAGE_BLOCK_SIZE + 8; mp->imgbuf_len = IMAGE_BLOCK_SIZE + mp->imgbuf_ofs; mp->rawimg_left = 0; @@ -623,6 +689,7 @@ return 0; } + static int mp750_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib) { @@ -631,6 +698,9 @@ uint8_t info; unsigned block_size, bytes_received, n; int shift[3], base_shift; + int c; + + c = ((is_ccd_grayscale (s)) ? 3 : s->param->channels) * s->param->depth / 8; /* single-byte or double-byte data */ if (mp->state == state_warmup) { @@ -652,14 +722,14 @@ } if (tmo < 0) { - PDBG (pixma_dbg (1, "WARNING:Timed out waiting for calibration\n")); + PDBG (pixma_dbg (1, "WARNING: Timed out waiting for calibration\n")); return PIXMA_ETIMEDOUT; } pixma_sleep (100000); query_status (s); if (is_warming_up (s) || !is_calibrated (s)) { - PDBG (pixma_dbg (1, "WARNING:Wrong status: wup=%d cal=%d\n", + PDBG (pixma_dbg (1, "WARNING: Wrong status: wup=%d cal=%d\n", is_warming_up (s), is_calibrated (s))); return PIXMA_EPROTO; } @@ -670,7 +740,7 @@ } /* TODO: Move to other place, values are constant. */ - base_shift = calc_component_shifting (s) * s->param->line_size; + base_shift = calc_component_shifting (s) * mp->line_size; if (s->param->source == PIXMA_SOURCE_ADF) { shift[0] = 0; @@ -754,23 +824,46 @@ /* TODO: simplify! */ mp->rawimg_left += bytes_received; n = mp->rawimg_left / 3; - /* n = number of pixels in the buffer */ - shift_rgb (mp->rawimg, n, shift[0], shift[1], shift[2], - mp->stripe_shift, s->param->line_size, - mp->img + mp->imgbuf_ofs); + /* n = number of pixels in the buffer? */ + + /* Color to Grayscale converion for CCD sensor */ + if (is_ccd_grayscale (s)) { + shift_rgb (mp->rawimg, n, shift[0], shift[1], shift[2], mp->stripe_shift, mp->line_size, + mp->imgcol + mp->imgbuf_ofs); + /* dst: img, src: imgcol */ + rgb_to_gray (mp->img, mp->imgcol, n, c); /* cropping occurs later? */ + PDBG (pixma_dbg (4, "*fill_buffer: did grayscale conversion \n")); + } + /* Color image processing */ + else { + shift_rgb (mp->rawimg, n, shift[0], shift[1], shift[2], mp->stripe_shift, mp->line_size, + mp->img + mp->imgbuf_ofs); + PDBG (pixma_dbg (4, "*fill_buffer: no grayscale conversion---keep color \n")); + } + + /* entering remaining unprocessed bytes after last complete pixel into mp->rawimg buffer -- no influence on mp->img */ n *= 3; mp->shifted_bytes += n; mp->rawimg_left -= n; /* rawimg_left = 0, 1 or 2 bytes left in the buffer. */ mp->last_block_size = n; memcpy (mp->rawimg, mp->rawimg + n, mp->rawimg_left); + } while (mp->shifted_bytes <= 0); - if ((unsigned) mp->shifted_bytes < mp->last_block_size) - ib->rptr = mp->img + mp->last_block_size - mp->shifted_bytes; + if ((unsigned) mp->shifted_bytes < mp->last_block_size) + { + if (is_ccd_grayscale (s)) + ib->rptr = mp->img + mp->last_block_size/3 - mp->shifted_bytes/3; /* testing---works OK */ + else + ib->rptr = mp->img + mp->last_block_size - mp->shifted_bytes; + } else ib->rptr = mp->img; - ib->rend = mp->img + mp->last_block_size; + if (is_ccd_grayscale (s)) + ib->rend = mp->img + mp->last_block_size/3; /* testing---works OK */ + else + ib->rend = mp->img + mp->last_block_size; return ib->rend - ib->rptr; } @@ -855,20 +948,21 @@ mp750_get_status }; -#define DEVICE(name, model, pid, dpi, cap) { \ +#define DEVICE(name, model, pid, dpi, cap) { \ name, /* name */ \ model, /* model */ \ 0x04a9, pid, /* vid pid */ \ 0, /* iface */ \ &pixma_mp750_ops, /* ops */ \ dpi, 2*(dpi), /* xdpi, ydpi */ \ + 0, 0, /* ext_min_dpi & ext_max_dpi not used in this subdriver */ \ 637, 877, /* width, height */ \ - PIXMA_CAP_EVENTS|cap \ + PIXMA_CAP_GRAY|PIXMA_CAP_EVENTS|cap \ } const pixma_config_t pixma_mp750_devices[] = { - DEVICE ("Canon PIXMA MP750", "MP750", MP750_PID, 2400, PIXMA_CAP_ADF), - DEVICE ("Canon PIXMA MP760", "MP760", MP760_PID, 2400, PIXMA_CAP_TPU), - DEVICE ("Canon PIXMA MP780", "MP780", MP780_PID, 2400, PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MP750", "MP750", MP750_PID, 2400, PIXMA_CAP_CCD | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MP760/770", "MP760/770", MP760_PID, 2400, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + DEVICE ("Canon PIXMA MP780/790", "MP780/790", MP780_PID, 2400, PIXMA_CAP_CCD | PIXMA_CAP_ADF), DEVICE (NULL, NULL, 0, 0, 0) }; diff -Nru sane-backends-1.0.22/backend/pixma_mp810.c sane-backends-1.0.23/backend/pixma_mp810.c --- sane-backends-1.0.22/backend/pixma_mp810.c 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_mp810.c 2012-08-19 20:27:18.000000000 +0000 @@ -0,0 +1,2205 @@ +/* SANE - Scanner Access Now Easy. + + Copyright (C) 2007-2009 Nicolas Martin, + Copyright (C) 2006-2007 Wittawat Yamwong + Copyright (C) 2011-2012 Rolf Bensch + + 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; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + As a special exception, the authors of SANE give permission for + additional uses of the libraries contained in this release of SANE. + + The exception is that, if you link a SANE library with other files + to produce an executable, this does not by itself cause the + resulting executable to be covered by the GNU General Public + License. Your use of that executable is in no way restricted on + account of linking the SANE library code into it. + + This exception does not, however, invalidate any other reasons why + the executable file might be covered by the GNU General Public + License. + + If you submit changes to SANE to the maintainers to be included in + a subsequent release, you agree by submitting the changes that + those changes may be distributed with this exception intact. + + If you write modifications of your own for SANE, it is your choice + whether to permit this exception to apply to your modifications. + If you do not wish that, delete this exception notice. + */ +/* test cases + 1. short USB packet (must be no -ETIMEDOUT) + 2. cancel using button on the printer (look for abort command) + 3. start scan while busy (status 0x1414) + 4. cancel using ctrl-c (must send abort command) + */ + +#define TPU_48 /* uncomment to activate TPU scan at 48 bits */ +/*#define DEBUG_TPU_48*/ /* uncomment to debug 48 bits TPU on a non TPU device */ +/*#define DEBUG_TPU_24*/ /* uncomment to debug 24 bits TPU on a non TPU device */ + +#include "../include/sane/config.h" + +#include +#include +#include +#include /* localtime(C90) */ + +#include "pixma_rename.h" +#include "pixma_common.h" +#include "pixma_io.h" + +/* Some macro code to enhance readability */ +#define RET_IF_ERR(x) do { \ + if ((error = (x)) < 0) \ + return error; \ + } while(0) + +#define WAIT_INTERRUPT(x) do { \ + error = handle_interrupt (s, x); \ + if (s->cancel) \ + return PIXMA_ECANCELED; \ + if (error != PIXMA_ECANCELED && error < 0) \ + return error; \ + } while(0) + +#ifdef __GNUC__ +# define UNUSED(v) (void) v +#else +# define UNUSED(v) +#endif + +/* Size of the command buffer should be multiple of wMaxPacketLength and + greater than 4096+24. + 4096 = size of gamma table. 24 = header + checksum */ +#define IMAGE_BLOCK_SIZE (512*1024) +#define CMDBUF_SIZE (4096 + 24) +#define DEFAULT_GAMMA 2.0 /***** Gamma different from 1.0 is potentially impacting color profile generation *****/ +#define UNKNOWN_PID 0xffff + + +#define CANON_VID 0x04a9 + +/* Generation 2 */ +#define MP810_PID 0x171a +#define MP960_PID 0x171b + +/* Generation 3 */ +/* PIXMA 2007 vintage */ +#define MP970_PID 0x1726 + +/* Flatbed scanner CCD (2007) */ +#define CS8800F_PID 0x1901 + +/* PIXMA 2008 vintage */ +#define MP980_PID 0x172d + +/* Generation 4 */ +#define MP990_PID 0x1740 + +/* Flatbed scanner CCD (2010) */ +#define CS9000F_PID 0x1908 + +/* 2010 new device (untested) */ +#define MG8100_PID 0x174b /* CCD */ + +/* 2011 new device (untested) */ +#define MG8200_PID 0x1756 /* CCD */ + +/* Generation 4 XML messages that encapsulates the Pixma protocol messages */ +#define XML_START_1 \ +"\ +\ +StartJob\ +00000001\ +1" + +#define XML_START_2 \ +"\ +\ +VendorCmd\ +00000001\ +ModeShift1\ +" + +#define XML_END \ +"\ +\ +EndJob\ +00000001\ +" + +#define XML_OK "OK" + +enum mp810_state_t +{ + state_idle, + state_warmup, + state_scanning, + state_transfering, + state_finished +}; + +enum mp810_cmd_t +{ + cmd_start_session = 0xdb20, + cmd_select_source = 0xdd20, + cmd_gamma = 0xee20, + cmd_scan_param = 0xde20, + cmd_status = 0xf320, + cmd_abort_session = 0xef20, + cmd_time = 0xeb80, + cmd_read_image = 0xd420, + cmd_error_info = 0xff20, + + cmd_start_calibrate_ccd_3 = 0xd520, + cmd_end_calibrate_ccd_3 = 0xd720, + cmd_scan_param_3 = 0xd820, + cmd_scan_start_3 = 0xd920, + cmd_status_3 = 0xda20, + cmd_get_tpu_info_3 = 0xf520, + cmd_set_tpu_info_3 = 0xea20, + + cmd_e920 = 0xe920 /* seen in MP800 */ +}; + +typedef struct mp810_t +{ + enum mp810_state_t state; + pixma_cmdbuf_t cb; + uint8_t *imgbuf; + uint8_t current_status[16]; + unsigned last_block; + uint8_t generation; + /* for Generation 3 and CCD shift */ + uint8_t *linebuf; + uint8_t *data_left_ofs; + unsigned data_left_len; + int shift[3]; + unsigned color_shift; + unsigned stripe_shift; + unsigned stripe_shift2; /* added for MP810, MP960 at 4800dpi & 9000F at 9600dpi */ + unsigned jumplines; /* added for MP810, MP960 at 4800dpi & 9000F at 9600dpi */ + uint8_t tpu_datalen; + uint8_t tpu_data[0x40]; +} mp810_t; + +/* + STAT: 0x0606 = ok, + 0x1515 = failed (PIXMA_ECANCELED), + 0x1414 = busy (PIXMA_EBUSY) + + Transaction scheme + 1. command_header/data | result_header + 2. command_header | result_header/data + 3. command_header | result_header/image_data + + - data has checksum in the last byte. + - image_data has no checksum. + - data and image_data begins in the same USB packet as + command_header or result_header. + + command format #1: + u16be cmd + u8[6] 0 + u8[4] 0 + u32be PLEN parameter length + u8[PLEN-1] parameter + u8 parameter check sum + result: + u16be STAT + u8 0 + u8 0 or 0x21 if STAT == 0x1414 + u8[4] 0 + + command format #2: + u16be cmd + u8[6] 0 + u8[4] 0 + u32be RLEN result length + result: + u16be STAT + u8[6] 0 + u8[RLEN-1] result + u8 result check sum + + command format #3: (only used by read_image_block) + u16be 0xd420 + u8[6] 0 + u8[4] 0 + u32be max. block size + 8 + result: + u16be STAT + u8[6] 0 + u8 block info bitfield: 0x8 = end of scan, 0x10 = no more paper, 0x20 = no more data + u8[3] 0 + u32be ILEN image data size + u8[ILEN] image data + */ + +static void mp810_finish_scan (pixma_t * s); + +static int +is_scanning_from_adf (pixma_t * s) +{ + return (s->param->source == PIXMA_SOURCE_ADF + || s->param->source == PIXMA_SOURCE_ADFDUP); +} + +static int +is_scanning_from_adfdup (pixma_t * s) +{ + return (s->param->source == PIXMA_SOURCE_ADFDUP); +} + +static int +is_scanning_from_tpu (pixma_t * s) +{ + return (s->param->source == PIXMA_SOURCE_TPU); +} + +static int +send_xml_dialog (pixma_t * s, const char * xml_message) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + int datalen; + + datalen = pixma_cmd_transaction (s, xml_message, strlen (xml_message), + mp->cb.buf, 1024); + if (datalen < 0) + return datalen; + + mp->cb.buf[datalen] = 0; + + PDBG (pixma_dbg (10, "XML message sent to scanner:\n%s\n", xml_message)); + PDBG (pixma_dbg (10, "XML response back from scanner:\n%s\n", mp->cb.buf)); + + return (strcasestr ((const char *) mp->cb.buf, XML_OK) != NULL); +} + +static void +new_cmd_tpu_msg (pixma_t *s, pixma_cmdbuf_t * cb, uint16_t cmd) +{ + pixma_newcmd (cb, cmd, 0, 0); + cb->buf[3] = (is_scanning_from_tpu (s)) ? 0x01 : 0x00; +} + +static int +start_session (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + + new_cmd_tpu_msg (s, &mp->cb, cmd_start_session); + return pixma_exec (s, &mp->cb); +} + +static int +start_scan_3 (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + + new_cmd_tpu_msg (s, &mp->cb, cmd_scan_start_3); + return pixma_exec (s, &mp->cb); +} + +static int +send_cmd_start_calibrate_ccd_3 (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + + pixma_newcmd (&mp->cb, cmd_start_calibrate_ccd_3, 0, 0); + mp->cb.buf[3] = 0x01; + return pixma_exec (s, &mp->cb); +} + +static int +is_calibrated (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + if (mp->generation >= 3) + { + return ((mp->current_status[0] & 0x01) == 1); + } + if (mp->generation == 1) + { + return (mp->current_status[8] == 1); + } + else + { + return (mp->current_status[9] == 1); + } +} + +static int +has_paper (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + + if (is_scanning_from_adfdup (s)) + return (mp->current_status[1] == 0 || mp->current_status[2] == 0); + else + return (mp->current_status[1] == 0); +} + +static void +drain_bulk_in (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + while (pixma_read (s->io, mp->imgbuf, IMAGE_BLOCK_SIZE) >= 0); +} + +static int +abort_session (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + return pixma_exec_short_cmd (s, &mp->cb, cmd_abort_session); +} + +static int +send_cmd_e920 (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + return pixma_exec_short_cmd (s, &mp->cb, cmd_e920); +} + +static int +select_source (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + uint8_t *data; + + data = pixma_newcmd (&mp->cb, cmd_select_source, 12, 0); + data[5] = ((mp->generation == 2) ? 1 : 0); + switch (s->param->source) + { + case PIXMA_SOURCE_FLATBED: + data[0] = 1; + data[1] = 1; + break; + + case PIXMA_SOURCE_ADF: + data[0] = 2; + data[5] = 1; + data[6] = 1; + break; + + case PIXMA_SOURCE_ADFDUP: + data[0] = 2; + data[5] = 3; + data[6] = 3; + break; + + case PIXMA_SOURCE_TPU: + data[0] = 4; + data[1] = 2; + break; + } + return pixma_exec (s, &mp->cb); +} + +static int +send_get_tpu_info_3 (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + uint8_t *data; + int error; + + data = pixma_newcmd (&mp->cb, cmd_get_tpu_info_3, 0, 0x34); + RET_IF_ERR (pixma_exec (s, &mp->cb)); + memcpy (mp->tpu_data, data, 0x34); + return error; +} + +static int +send_set_tpu_info (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + uint8_t *data; + + if (mp->tpu_datalen == 0) + return 0; + data = pixma_newcmd (&mp->cb, cmd_set_tpu_info_3, 0x34, 0); + memcpy (data, mp->tpu_data, 0x34); + return pixma_exec (s, &mp->cb); +} + +static int +send_gamma_table (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + const uint8_t *lut = s->param->gamma_table; + uint8_t *data; + + if (mp->generation == 1) + { + data = pixma_newcmd (&mp->cb, cmd_gamma, 4096 + 8, 0); + data[0] = (s->param->channels == 3) ? 0x10 : 0x01; + pixma_set_be16 (0x1004, data + 2); + if (lut) + memcpy (data + 4, lut, 4096); + else + pixma_fill_gamma_table (DEFAULT_GAMMA, data + 4, 4096); + } + else + { + /* FIXME: Gamma table for 2nd generation: 1024 * uint16_le */ + data = pixma_newcmd (&mp->cb, cmd_gamma, 2048 + 8, 0); + data[0] = 0x10; + pixma_set_be16 (0x0804, data + 2); + if (lut) + { + int i; + for (i = 0; i < 1024; i++) + { + int j = (i << 2) + (i >> 8); + data[4 + 2 * i + 0] = lut[j]; + data[4 + 2 * i + 1] = lut[j]; + } + } + else + { + int i; + pixma_fill_gamma_table (DEFAULT_GAMMA, data + 4, 2048); + for (i = 0; i < 1024; i++) + { + int j = (i << 1) + (i >> 9); + data[4 + 2 * i + 0] = data[4 + j]; + data[4 + 2 * i + 1] = data[4 + j]; + } + } + } + return pixma_exec (s, &mp->cb); +} + +static unsigned +calc_raw_width (const mp810_t * mp, const pixma_scan_param_t * param) +{ + unsigned raw_width; + /* NOTE: Actually, we can send arbitary width to MP810. Lines returned + are always padded to multiple of 4 or 12 pixels. Is this valid for + other models, too? */ + if (mp->generation >= 2) + { + raw_width = ALIGN_SUP (param->w + param->xs, 32); + /* PDBG (pixma_dbg (4, "*calc_raw_width***** width %u extended by %u and rounded to %u *****\n", param->w, param->xs, raw_width)); */ + } + else if (param->channels == 1) + { + raw_width = ALIGN_SUP (param->w + param->xs, 12); + } + else + { + raw_width = ALIGN_SUP (param->w + param->xs, 4); + } + return raw_width; +} + +static int +has_ccd_sensor (pixma_t * s) +{ + return ((s->cfg->cap & PIXMA_CAP_CCD) != 0); +} + +static int +is_color (pixma_t * s) +{ + return (s->param->mode == PIXMA_SCAN_MODE_COLOR); +} + +static int +is_color_48 (pixma_t * s) +{ + return (s->param->mode == PIXMA_SCAN_MODE_COLOR_48); +} + +static int +is_color_negative (pixma_t * s) +{ + return (s->param->mode == PIXMA_SCAN_MODE_NEGATIVE_COLOR); +} + +static int +is_color_all (pixma_t * s) +{ + return (is_color (s) || is_color_48 (s) || is_color_negative (s)); +} + +static int +is_gray (pixma_t * s) +{ + return (s->param->mode == PIXMA_SCAN_MODE_GRAY); +} + +static int +is_gray_16 (pixma_t * s) +{ + return (s->param->mode == PIXMA_SCAN_MODE_GRAY_16); +} + +static int +is_gray_negative (pixma_t * s) +{ + return (s->param->mode == PIXMA_SCAN_MODE_NEGATIVE_GRAY); +} + +static int +is_gray_all (pixma_t * s) +{ + return (is_gray (s) || is_gray_16 (s) || is_gray_negative (s)); +} + +static int +is_lineart (pixma_t * s) +{ + return (s->param->mode == PIXMA_SCAN_MODE_LINEART); +} + +/* CCD sensors don't have neither a Grayscale mode nor a Lineart mode, + * but use color mode instead */ +static unsigned +get_cis_ccd_line_size (pixma_t * s) +{ + return ((s->param->wx ? s->param->line_size / s->param->w * s->param->wx + : s->param->line_size) * ((is_gray_all (s) || is_lineart (s)) ? 3 : 1)); +} + +static unsigned +calc_shifting (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + + /* If stripes shift needed (CCD devices), how many pixels shift */ + mp->stripe_shift = 0; + mp->stripe_shift2 = 0; + mp->jumplines = 0; + + switch (s->cfg->pid) + { + case MP970_PID: /* MP970 at 4800 dpi */ + case CS8800F_PID: /* CanoScan 8800F at 4800 dpi */ + if (s->param->xdpi == 4800) + { + if (is_scanning_from_tpu(s)) + mp->stripe_shift = 6; + else + mp->stripe_shift = 3; + } + break; + + case CS9000F_PID: /* CanoScan 9000F at 4800 dpi */ + if (s->param->xdpi == 4800) + { + if (is_scanning_from_tpu(s)) + mp->stripe_shift = 6; /* should work for CS9000F same as manual */ + else + mp->stripe_shift = 3; + } + if (s->param->xdpi == 9600) + { + if (is_scanning_from_tpu(s)) + { + /* need to double up for TPU */ + mp->stripe_shift = 6; /* for 1st set of 4 images */ + /* unfortunately there are 2 stripe shifts */ + mp->stripe_shift2 = 6; /* for 2nd set of 4 images */ + mp->jumplines=32; /* try 33 or 34 */ + } + /* there is no 9600dpi support in flatbed mode */ + } + break; + + case MP960_PID: + if (s->param->xdpi == 2400) + { + if (is_scanning_from_tpu(s)) + mp->stripe_shift = 6; + else + mp->stripe_shift = 3; + } + if (s->param->xdpi == 4800) + { + if (is_scanning_from_tpu(s)) + { + mp->stripe_shift = 6; + mp->stripe_shift2 = 6; + } + else + { + mp->stripe_shift = 3; + mp->stripe_shift2 = 3; + } + mp->jumplines=33; /* better than 32 or 34 : applies to flatbed & TPU */ + } + break; + + case MP810_PID: + if (s->param->xdpi == 2400) + { + if (is_scanning_from_tpu(s)) + mp->stripe_shift = 6; + else + mp->stripe_shift = 3; + } + if (s->param->xdpi == 4800) + { + if (is_scanning_from_tpu(s)) { + mp->stripe_shift = 6; + mp->stripe_shift2 = 6; + } + else { + mp->stripe_shift = 3; + mp->stripe_shift2 = 3; + } + mp->jumplines=33; /* better than 32 or 34 : applies to flatbed & TPU */ + } + break; + + default: /* Default, and all CIS devices */ + break; + } + /* If color plane shift (CCD devices), how many pixels shift */ + mp->color_shift = mp->shift[0] = mp->shift[1] = mp->shift[2] = 0; + if (s->param->ydpi > 75) + { + switch (s->cfg->pid) + { + case MP970_PID: + case CS8800F_PID: /* CanoScan 8800F */ + mp->color_shift = s->param->ydpi / 50; + mp->shift[1] = mp->color_shift * get_cis_ccd_line_size (s); + mp->shift[0] = 0; + mp->shift[2] = 2 * mp->shift[1]; + break; + + case CS9000F_PID: /* CanoScan 9000F */ + mp->color_shift = s->param->ydpi / 30; + mp->shift[1] = mp->color_shift * get_cis_ccd_line_size (s); + mp->shift[0] = 0; + mp->shift[2] = 2 * mp->shift[1]; + break; + + case MP980_PID: + case MP990_PID: + if (s->param->ydpi > 150) + { + mp->color_shift = s->param->ydpi / 75; + mp->shift[1] = mp->color_shift * get_cis_ccd_line_size (s); + mp->shift[0] = 0; + mp->shift[2] = 2 * mp->shift[1]; + } + break; + + case MP810_PID: + case MP960_PID: + mp->color_shift = s->param->ydpi / 50; + if (is_scanning_from_tpu (s)) + mp->color_shift = s->param->ydpi / 50; + mp->shift[1] = mp->color_shift * get_cis_ccd_line_size (s); + mp->shift[0] = 2 * mp->shift[1]; + mp->shift[2] = 0; + break; + + default: + break; + } + } + /* special settings for 16 bit flatbed mode @ 75 dpi + * minimum of 150 dpi is used yet */ + /* else if (!is_scanning_from_tpu (s)) + { + switch (s->cfg->pid) + { + case CS9000F_PID: + if (is_color_48 (s) || is_gray_16 (s)) + { + mp->color_shift = 5; + mp->shift[1] = 0; + mp->shift[0] = 0; + mp->shift[2] = 0; + } + break; + } + } */ + /* PDBG (pixma_dbg (4, "*calc_shifing***** color_shift = %u, stripe_shift = %u, jumplines = %u *****\n", + mp->color_shift, mp->stripe_shift, mp->jumplines)); */ + return (2 * mp->color_shift + mp->stripe_shift + mp->jumplines ); /* note impact of stripe shift2 later if needed! */ +} + +static int +send_scan_param (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + uint8_t *data; + unsigned raw_width = calc_raw_width (mp, s->param); + unsigned h, h1, h2, shifting; + + /* TPU scan does not support lineart */ + if (is_scanning_from_tpu (s) && is_lineart (s)) + { + return PIXMA_ENOTSUP; + } + + shifting = calc_shifting (s); + h1 = s->param->h + shifting; /* add lines for color shifting */ + /* PDBG (pixma_dbg (4, "* send_scan_param: height calc (choose lesser) 1 %u \n", h1 )); */ + if (mp->generation >= 4) /* use most global condition */ + { + /* tested for MP960, 9000F */ + /* add lines for color shifting */ + /* otherwise you cannot scan all lines defined for flatbed mode */ + /* this shouldn't affect TPU mode */ + h2 = s->cfg->height * s->param->ydpi / 75 + shifting; + /* PDBG (pixma_dbg (4, "* send_scan_param: height calc (choose lesser) 2 %u = %u max. lines for scanner + %u lines for color shifting \n", h2, s->cfg->height * s->param->ydpi / 75, shifting )); */ + } + else + { + /* TODO: Check for other scanners. */ + h2 = s->cfg->height * s->param->ydpi / 75; /* this might be causing problems for generation 1 devices */ + /* PDBG (pixma_dbg (4, "* send_scan_param: height calc (choose lesser) 2 %u \n", h2 )); */ + } + h = MIN (h1, h2); + + if (mp->generation <= 2) + { + data = pixma_newcmd (&mp->cb, cmd_scan_param, 0x30, 0); + pixma_set_be16 (s->param->xdpi | 0x8000, data + 0x04); + pixma_set_be16 (s->param->ydpi | 0x8000, data + 0x06); + pixma_set_be32 (s->param->x, data + 0x08); + if (mp->generation == 2) + pixma_set_be32 (s->param->x - s->param->xs, data + 0x08); + pixma_set_be32 (s->param->y, data + 0x0c); + pixma_set_be32 (raw_width, data + 0x10); + pixma_set_be32 (h, data + 0x14); + data[0x18] = ((s->param->channels != 1) || is_gray_all (s) || is_lineart (s)) ? 0x08 : 0x04; + data[0x19] = ((s->param->software_lineart) ? 8 : s->param->depth) + * ((is_gray_all (s) || is_lineart (s)) ? 3 : s->param->channels); /* bits per pixel */ + data[0x1a] = (is_scanning_from_tpu (s) ? 1 : 0); + data[0x20] = 0xff; + data[0x23] = 0x81; + data[0x26] = 0x02; + data[0x27] = 0x01; + } + else + { + data = pixma_newcmd (&mp->cb, cmd_scan_param_3, 0x38, 0); + data[0x00] = (is_scanning_from_adf (s)) ? 0x02 : 0x01; + data[0x01] = 0x01; + if (is_scanning_from_tpu (s)) + { + data[0x00] = 0x04; + data[0x01] = 0x02; + } + data[0x02] = 0x01; + if (is_scanning_from_adfdup (s)) + { + data[0x02] = 0x03; + data[0x03] = 0x03; + } + data[0x05] = 0x01; /* This one also seen at 0. Don't know yet what's used for */ + /* the scanner controls the scan */ + /* no software control needed */ + pixma_set_be16 (s->param->xdpi | 0x8000, data + 0x08); + pixma_set_be16 (s->param->ydpi | 0x8000, data + 0x0a); + /*PDBG (pixma_dbg (4, "*send_scan_param***** Setting: xdpi=%hi ydpi=%hi x=%u y=%u w=%u h=%u ***** \n", + s->param->xdpi,s->param->ydpi,(s->param->x)-(s->param->xs),s->param->y,raw_width,h));*/ + pixma_set_be32 (s->param->x - s->param->xs, data + 0x0c); + pixma_set_be32 (s->param->y, data + 0x10); + pixma_set_be32 (raw_width, data + 0x14); + pixma_set_be32 (h, data + 0x18); + data[0x1c] = ((s->param->channels != 1) || is_gray_all (s) || is_lineart (s)) ? 0x08 : 0x04; + +#ifdef DEBUG_TPU_48 + data[0x1d] = 24; +#else + data[0x1d] = (is_scanning_from_tpu (s)) ? 48 + : (((s->param->software_lineart) ? 8 : s->param->depth) + * ((is_gray_all (s) || is_lineart (s)) ? 3 : s->param->channels)); /* bits per pixel */ +#endif + + data[0x1f] = 0x01; /* for 9000F this appears to be 0x00, not sure if that is because of positives */ + + if (s->cfg->pid == CS9000F_PID) + { + data[0x1f] = 0x00; + } + + data[0x20] = 0xff; + data[0x21] = 0x81; + data[0x23] = 0x02; + data[0x24] = 0x01; + + /* CS8800F & CS9000F addition */ + if (s->cfg->pid == CS8800F_PID || s->cfg->pid == CS9000F_PID) + { + if (is_scanning_from_tpu (s)) + { /* TPU */ + /* 0x02->negatives, 0x01->positives, paper->0x00 + * no paper in TPU mode */ + if (s->param->mode == PIXMA_SCAN_MODE_NEGATIVE_COLOR + || s->param->mode == PIXMA_SCAN_MODE_NEGATIVE_GRAY) + { + PDBG (pixma_dbg (4, "*send_scan_param***** TPU scan negatives *****\n")); + data[0x1e] = 0x02; + } + else + { + PDBG (pixma_dbg (4, "*send_scan_param***** TPU scan positives *****\n")); + data[0x1e] = 0x01; + } + /* CS8800F: 0x00 for TPU color management */ + if (s->cfg->pid == CS8800F_PID) + data[0x25] = 0x00; + /* CS9000F: 0x01 for TPU */ + if (s->cfg->pid == CS9000F_PID) + data[0x25] = 0x01; + } + else + { /* flatbed and ADF */ + /* paper->0x00 */ + data[0x1e] = 0x00; + /* CS8800F: 0x01 normally */ + if (s->cfg->pid == CS8800F_PID) + data[0x25] = 0x01; + /* CS9000F: 0x00 normally */ + if (s->cfg->pid == CS9000F_PID) + data[0x25] = 0x00; + } + } + + data[0x30] = 0x01; + } + return pixma_exec (s, &mp->cb); +} + +static int +query_status_3 (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + uint8_t *data; + int error, status_len; + + status_len = 8; + data = pixma_newcmd (&mp->cb, cmd_status_3, 0, status_len); + RET_IF_ERR (pixma_exec (s, &mp->cb)); + memcpy (mp->current_status, data, status_len); + return error; +} + +static int +query_status (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + uint8_t *data; + int error, status_len; + + status_len = (mp->generation == 1) ? 12 : 16; + data = pixma_newcmd (&mp->cb, cmd_status, 0, status_len); + RET_IF_ERR (pixma_exec (s, &mp->cb)); + memcpy (mp->current_status, data, status_len); + PDBG (pixma_dbg (3, "Current status: paper=%u cal=%u lamp=%u busy=%u\n", + data[1], data[8], data[7], data[9])); + return error; +} + +static int +send_time (pixma_t * s) +{ + /* Why does a scanner need a time? */ + time_t now; + struct tm *t; + uint8_t *data; + mp810_t *mp = (mp810_t *) s->subdriver; + + data = pixma_newcmd (&mp->cb, cmd_time, 20, 0); + pixma_get_time (&now, NULL); + t = localtime (&now); + snprintf ((char *) data, 16, + "%02d/%02d/%02d %02d:%02d", + t->tm_year % 100, t->tm_mon + 1, t->tm_mday, + t->tm_hour, t->tm_min); + PDBG (pixma_dbg (3, "Sending time: '%s'\n", (char *) data)); + return pixma_exec (s, &mp->cb); +} + +/* TODO: Simplify this function. Read the whole data packet in one shot. */ +static int +read_image_block (pixma_t * s, uint8_t * header, uint8_t * data) +{ + uint8_t cmd[16]; + mp810_t *mp = (mp810_t *) s->subdriver; + const int hlen = 8 + 8; + int error, datalen; + + memset (cmd, 0, sizeof (cmd)); + /* PDBG (pixma_dbg (4, "* read_image_block: last_block\n", mp->last_block)); */ + pixma_set_be16 (cmd_read_image, cmd); + if ((mp->last_block & 0x20) == 0) + pixma_set_be32 ((IMAGE_BLOCK_SIZE / 65536) * 65536 + 8, cmd + 0xc); + else + pixma_set_be32 (32 + 8, cmd + 0xc); + + mp->state = state_transfering; + mp->cb.reslen = + pixma_cmd_transaction (s, cmd, sizeof (cmd), mp->cb.buf, 512); /* read 1st 512 bytes of image block */ + datalen = mp->cb.reslen; + if (datalen < 0) + return datalen; + + memcpy (header, mp->cb.buf, hlen); + /* PDBG (pixma_dbg (4, "* read_image_block: datalen %i\n", datalen)); */ + /* PDBG (pixma_dbg (4, "* read_image_block: hlen %i\n", hlen)); */ + if (datalen >= hlen) + { + datalen -= hlen; + memcpy (data, mp->cb.buf + hlen, datalen); + data += datalen; + if (mp->cb.reslen == 512) + { /* read the rest of the image block */ + error = pixma_read (s->io, data, IMAGE_BLOCK_SIZE - 512 + hlen); + RET_IF_ERR (error); + datalen += error; + } + } + + mp->state = state_scanning; + mp->cb.expected_reslen = 0; + RET_IF_ERR (pixma_check_result (&mp->cb)); + if (mp->cb.reslen < hlen) + return PIXMA_EPROTO; + return datalen; +} + +static int +read_error_info (pixma_t * s, void *buf, unsigned size) +{ + unsigned len = 16; + mp810_t *mp = (mp810_t *) s->subdriver; + uint8_t *data; + int error; + + data = pixma_newcmd (&mp->cb, cmd_error_info, 0, len); + RET_IF_ERR (pixma_exec (s, &mp->cb)); + if (buf && len < size) + { + size = len; + /* NOTE: I've absolutely no idea what the returned data mean. */ + memcpy (buf, data, size); + error = len; + } + return error; +} + +/* +handle_interrupt() waits until it receives an interrupt packet or times out. +It calls send_time() and query_status() if necessary. Therefore, make sure +that handle_interrupt() is only called from a safe context for send_time() +and query_status(). + + Returns: + 0 timed out + 1 an interrupt packet received + PIXMA_ECANCELED interrupted by signal + <0 error +*/ +static int +handle_interrupt (pixma_t * s, int timeout) +{ + uint8_t buf[16]; + int len; + + len = pixma_wait_interrupt (s->io, buf, sizeof (buf), timeout); + if (len == PIXMA_ETIMEDOUT) + return 0; + if (len < 0) + return len; + if (len != 16) + { + PDBG (pixma_dbg + (1, "WARNING:unexpected interrupt packet length %d\n", len)); + return PIXMA_EPROTO; + } + + /* More than one event can be reported at the same time. */ + if (buf[3] & 1) + send_time (s); + if (buf[9] & 2) + query_status (s); + if (buf[0] & 2) + s->events = PIXMA_EV_BUTTON2 | buf[1]; /* b/w scan */ + if (buf[0] & 1) + s->events = PIXMA_EV_BUTTON1 | buf[1]; /* color scan */ + return 1; +} + +static int +init_ccd_lamp_3 (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + uint8_t *data; + int error, status_len, tmo; + + status_len = 8; + RET_IF_ERR (query_status (s)); + RET_IF_ERR (query_status (s)); + RET_IF_ERR (send_cmd_start_calibrate_ccd_3 (s)); + RET_IF_ERR (query_status (s)); + tmo = 20; /* like Windows driver, CCD lamp adjustment */ + while (--tmo >= 0) + { + data = pixma_newcmd (&mp->cb, cmd_end_calibrate_ccd_3, 0, status_len); + RET_IF_ERR (pixma_exec (s, &mp->cb)); + memcpy (mp->current_status, data, status_len); + PDBG (pixma_dbg (3, "Lamp status: %u , timeout in: %u\n", data[0], tmo)); + if (mp->current_status[0] == 3 || !is_scanning_from_tpu (s)) + break; + WAIT_INTERRUPT (1000); + } + return error; +} + +static int +wait_until_ready (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + int error, tmo = 60; + + RET_IF_ERR ((mp->generation >= 3) ? query_status_3 (s) + : query_status (s)); + while (!is_calibrated (s)) + { + WAIT_INTERRUPT (1000); + if (mp->generation >= 3) + RET_IF_ERR (query_status_3 (s)); + if (--tmo == 0) + { + PDBG (pixma_dbg (1, "WARNING: Timed out in wait_until_ready()\n")); + PDBG (query_status (s)); + return PIXMA_ETIMEDOUT; + } + } + return 0; +} + +/* the RGB images are shifted by # of lines */ +/* the R image is shifted by colshift[0] */ +/* the G image is shifted by colshift[1] */ +/* the B image is shifted by colshift[2] */ +/* usually one of the RGB images must not be shifted */ +/* which one depends on the scanner */ +/* some scanners have an additional stripe shift */ +/* e.g. colshift[0]=0, colshift[1]=1, colshift[2]=2 */ +/* R image is OK: RGBRGBRGB... */ +/* ^^ ^^ ^^ */ +/* || || || */ +/* shift G image: RG|RG|RG|... */ +/* | | | */ +/* shift B image: RGBRGBRGB... */ +/* this doesn't affect the G and B images */ +/* G image will become the R image in the next run */ +/* B image will become the G image in the next run */ +/* the next line will become the B image in the next run */ +static uint8_t * +shift_colors (uint8_t * dptr, uint8_t * sptr, + unsigned w, unsigned dpi, unsigned pid, unsigned c, + int * colshft, unsigned strshft) +{ + unsigned i, sr, sg, sb, st; + UNUSED(dpi); + UNUSED(pid); + sr = colshft[0]; sg = colshft[1]; sb = colshft[2]; + + for (i = 0; i < w; i++) + { + /* stripes shift for MP970 at 4800 dpi, MP810 at 2400 dpi */ + st = (i % 2 == 0) ? strshft : 0; + + *sptr++ = *(dptr++ + sr + st); + if (c == 6) *sptr++ = *(dptr++ + sr + st); + *sptr++ = *(dptr++ + sg + st); + if (c == 6) *sptr++ = *(dptr++ + sg + st); + *sptr++ = *(dptr++ + sb + st); + if (c == 6) *sptr++ = *(dptr++ + sb + st); + } + + return dptr; +} + + +static uint8_t * +shift_colorsCS9000 (uint8_t * dptr, uint8_t * sptr, + unsigned w, unsigned dpi, unsigned pid, unsigned c, + int * colshft, unsigned strshft, unsigned strshft2, unsigned jump) + +{ + unsigned i, sr, sg, sb, st, st2; + UNUSED(dpi); + UNUSED(pid); + sr = colshft[0]; sg = colshft[1]; sb = colshft[2]; + + for (i = 0; i < w; i++) + { + if (i<(w/2)) + { + /* stripes shift for 1st 4 images for Canoscan 9000F at 9600dpi */ + st = (i % 2 == 0) ? strshft : 0; + *sptr++ = *(dptr++ + sr + st); + if (c == 6) *sptr++ = *(dptr++ + sr + st); + *sptr++ = *(dptr++ + sg + st); + if (c == 6) *sptr++ = *(dptr++ + sg + st); + *sptr++ = *(dptr++ + sb + st); + if (c == 6) *sptr++ = *(dptr++ + sb + st); + } + if (i>=(w/2)) + { + /* stripes shift for 2nd 4 images for Canoscan 9000F at 9600dpi */ + st2 = (i % 2 == 0) ? strshft2 : 0; + *sptr++ = *(dptr++ + sr + jump + st2); + if (c == 6) *sptr++ = *(dptr++ + sr + jump + st2); + *sptr++ = *(dptr++ + sg + jump + st2); + if (c == 6) *sptr++ = *(dptr++ + sg + jump + st2); + *sptr++ = *(dptr++ + sb + jump + st2); + if (c == 6) *sptr++ = *(dptr++ + sb + jump + st2); + } + } + return dptr; +} + +static uint8_t * +shift_colorsCS9000_4800 (uint8_t * dptr, uint8_t * sptr, + unsigned w, unsigned dpi, unsigned pid, unsigned c, + int * colshft, unsigned strshft, unsigned strshft2, unsigned jump) + +{ + unsigned i, sr, sg, sb, st2; + UNUSED(dpi); + UNUSED(pid); + UNUSED(strshft); + sr = colshft[0]; sg = colshft[1]; sb = colshft[2]; + + for (i = 0; i < w; i++) + { + /* stripes shift for 2nd 4 images + * for Canoscan 9000F with 16 bit flatbed scans at 4800dpi */ + st2 = (i % 2 == 0) ? strshft2 : 0; + *sptr++ = *(dptr++ + sr + jump + st2); + if (c == 6) *sptr++ = *(dptr++ + sr + jump + st2); + *sptr++ = *(dptr++ + sg + jump + st2); + if (c == 6) *sptr++ = *(dptr++ + sg + jump + st2); + *sptr++ = *(dptr++ + sb + jump + st2); + if (c == 6) *sptr++ = *(dptr++ + sb + jump + st2); + } + return dptr; +} + +/* under some conditions some scanners have sub images in one line */ +/* e.g. doubled image, line size = 8 */ +/* line before reordering: px1 px3 px5 px7 px2 px4 px6 px8 */ +/* line after reordering: px1 px2 px3 px4 px5 px6 px7 px8 */ +static void +reorder_pixels (uint8_t * linebuf, uint8_t * sptr, unsigned c, unsigned n, + unsigned m, unsigned w, unsigned line_size) +{ + unsigned i; + + for (i = 0; i < w; i++) + { /* process complete line */ + memcpy (linebuf + c * (n * (i % m) + i / m), sptr + c * i, c); + } + memcpy (sptr, linebuf, line_size); +} + +/* special reorder matrix for mp960 */ +static void +mp960_reorder_pixels (uint8_t * linebuf, uint8_t * sptr, unsigned c, unsigned n, + unsigned m, unsigned w, unsigned line_size) +{ + unsigned i,i2; + + /* try and copy 2 px at once */ + for (i = 0; i < w; i++) + { /* process complete line */ + i2 = i % 2; + if (i 3) ? 7 : 0)), sptr + c * i, c); + } + memcpy (sptr, linebuf, line_size); +} + +/* special reorder matrix for CS9000F */ +static void +cs9000f_initial_reorder_pixels (uint8_t * linebuf, uint8_t * sptr, unsigned c, unsigned n, + unsigned m, unsigned w, unsigned line_size) +{ + unsigned i,i2; + + /* try and copy 2 px at once */ + for (i = 0; i < w; i++) + { /* process complete line */ + i2 = i % 2; + if (i=w/8 && i=w/4 && i<3*w/8) { + if (i2 == 0) + memcpy (linebuf + c * (n * ((i) % m) + ((i) / m) +2), sptr + c * i, c); + else + memcpy (linebuf + c * (n * ((i-1) % m) + 1 + ((i) / m) +2), sptr + c * i, c); + } + else if (i>=3*w/8 && i=w/2 && i<5*w/8) { + if (i2 == 0) + memcpy (linebuf + c * (n * ((i) % m) + ((i) / m) +4), sptr + c * i, c); + else + memcpy (linebuf + c * (n * ((i-1) % m) + 1 + ((i) / m) +4), sptr + c * i, c); + } + else if (i>=5*w/8 && i<3*w/4) { + if (i2 == 0) + memcpy (linebuf + c * (n * ((i) % m) + ((i) / m) +5), sptr + c * i, c); + else + memcpy (linebuf + c * (n * ((i-1) % m) + 1 + ((i) / m) +5), sptr + c * i, c); + } + else if (i>=3*w/4 && i<7*w/8) { + if (i2 == 0) + memcpy (linebuf + c * (n * ((i) % m) + ((i) / m) +6), sptr + c * i, c); + else + memcpy (linebuf + c * (n * ((i-1) % m) + 1 + ((i) / m) +6), sptr + c * i, c); + } + else { + if (i2 == 0) + memcpy (linebuf + c * (n * ((i) % m) + ((i) / m) + 7), sptr + c * i, c); + else + memcpy (linebuf + c * (n * ((i-1) % m) + 1 + ((i) / m) + 7), sptr + c * i, c); + } + } + + memcpy (sptr, linebuf, line_size); +} + +/* CS9000F 9600dpi reorder: actually 4800dpi since each pixel is doubled */ +/* need to rearrange each sequence of 16 pairs of pixels as follows: */ +/* start px : 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 */ +/* before : p1a p1b p1c p1d p2a p2b p2c p2d p3a p3b p3c p3d p4a p4b p4c p4d */ +/* after : p1a p3a p1b p3b p1c p3c p1d p3d p2a p4a p2b p4b p2c p4c p2d p4d */ +/* start px : 0 16 2 18 4 20 6 22 8 24 10 26 12 28 14 30 */ +/* change : * * * * * * * * * * * * * * */ +/* no change: * * */ +/* so the 1st and the 3rd set are interleaved, followed by the 2nd and 4th sets interleaved */ +static void +cs9000f_second_reorder_pixels (uint8_t * linebuf, uint8_t * sptr, unsigned c, + unsigned w, unsigned line_size) +{ + unsigned i,i8; + static const int shifts[8] = { 2, 4, 6, 8, -8, -6, -4, -2 }; + + for (i = 0; i < w; i+= 2) + { /* process complete line */ + i8 = (i >> 1) & 0x7; + /* Copy 2 pixels at once */ + memcpy(linebuf + c * (i + shifts[i8]), sptr + c * i, c*2); + } + + memcpy (sptr, linebuf, line_size); +} + +#ifndef TPU_48 +static unsigned +pack_48_24_bpc (uint8_t * sptr, unsigned n) +{ + unsigned i; + uint8_t *cptr, lsb; + static uint8_t offset = 0; + + cptr = sptr; + if (n % 2 != 0) + PDBG (pixma_dbg (3, "WARNING: misaligned image.\n")); + for (i = 0; i < n; i += 2) + { + /* offset = 1 + (offset % 3); */ + lsb = *sptr++; + *cptr++ = ((*sptr++) << offset) | lsb >> (8 - offset); + } + return (n / 2); +} +#endif + +/* This function deals both with PIXMA CCD sensors producing shifted color + * planes images, Grayscale CCD scan and Generation >= 3 high dpi images. + * Each complete line in mp->imgbuf is processed for shifting CCD sensor + * color planes, reordering pixels above 600 dpi for Generation >= 3, and + * converting to Grayscale for CCD sensors. */ +static unsigned +post_process_image_data (pixma_t * s, pixma_imagebuf_t * ib) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + unsigned c, lines, i, line_size, n, m, cw, cx, reducelines; + uint8_t *sptr, *dptr, *gptr, *cptr; + unsigned color_shift, stripe_shift, stripe_shift2, jumplines /*, height*/; + int test; + + /* For testers: */ + /* set this to 1 in order to get unprocessed images next to one another at 9600dpi */ + /* other resolutions should not be affected */ + /* set this to 2 if you want to see the same with jumplines=0 */ + test=0; + jumplines=0; + + c = ((is_gray_all (s) || is_lineart (s)) ? 3 : s->param->channels) + * ((s->param->software_lineart) ? 8 : s->param->depth) / 8; + cw = c * s->param->w; + cx = c * s->param->xs; + + /* PDBG (pixma_dbg (4, "*post_process_image_data***** c = %u, cw = %u, cx = %u *****\n", c, cw, cx)); */ + + if (mp->generation >= 3) + n = s->param->xdpi / 600; + else /* FIXME: maybe need different values for CIS and CCD sensors */ + n = s->param->xdpi / 2400; + + /* Some exceptions to global rules here */ + if (s->cfg->pid == MP970_PID || + s->cfg->pid == MP990_PID || + s->cfg->pid == CS8800F_PID || + s->cfg->pid == CS9000F_PID) + n = MIN (n, 4); + if (s->cfg->pid == MP970_PID || + s->cfg->pid == MP990_PID) + n = 1; /* always only one image */ + + /* exception for 9600dpi on Canoscan 9000F */ + if ((s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600)) + { + n = 8; + if (test>0) + n=1; /* test if 8 images are next to one another */ + } + + /* test if 2 images are next to one another */ + if ((s->cfg->pid == MP960_PID) && (s->param->xdpi == 4800) && (test>0)) + { + n = 1; + } + + m = (n > 0) ? s->param->wx / n : 1; + + sptr = dptr = gptr = cptr = mp->imgbuf; + line_size = get_cis_ccd_line_size (s); + /* PDBG (pixma_dbg (4, "*post_process_image_data***** ----- Set n=%u, m=%u, line_size=%u ----- ***** \n", n, m, line_size)); */ + /* PDBG (pixma_dbg (4, "*post_process_image_data***** ----- spr=dpr=%u, linebuf=%u ----- ***** \n", sptr, mp->linebuf)); */ + + lines = (mp->data_left_ofs - mp->imgbuf) / line_size; + /* PDBG (pixma_dbg (4, "*post_process_image_data***** lines = %i > 2 * mp->color_shift + mp->stripe_shift = %i ***** \n", + lines, 2 * mp->color_shift + mp->stripe_shift)); */ + /* PDBG (pixma_dbg (4, "*post_process_image_data***** mp->color_shift = %u, mp->stripe_shift = %u, , mp->stripe_shift2 = %u ***** \n", + mp->color_shift, mp->stripe_shift, mp->stripe_shift2)); */ + + color_shift = mp->color_shift; + stripe_shift = mp->stripe_shift; + stripe_shift2 = mp->stripe_shift2; + jumplines=mp->jumplines; + + /* height not needed here! */ + /* removed to avoid confusion */ + /* height = MIN (s->param->h + calc_shifting (s), + s->cfg->height * s->param->ydpi / 75); */ + + /* have to test if rounding down is OK or not -- currently 0.5 lines is rounded down */ + /*note stripe shifts doubled already in definitions */ + if ((s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600) && (test>0)) + { + /* using test==2 you can check in GIMP the required offset, and + use the below line (uncommented) and replace XXX with that + number, and then compile again with test set to 1. */ + + jumplines=32; + if (test==2) + jumplines=0; + } + + /* mp960 test */ + if ((s->cfg->pid == MP960_PID) && (s->param->xdpi == 4800) && (test>0)) + { + jumplines=32; + if (test==2) + jumplines=0; + } + + reducelines = ((2 * mp->color_shift + mp->stripe_shift) + jumplines); + /* PDBG (pixma_dbg (4, "*post_process_image_data: lines %u, reducelines %u \n", lines, reducelines)); */ + if (lines > reducelines) + { /* (line - reducelines) of image lines can be converted */ + lines -= reducelines; + + for (i = 0; i < lines; i++, sptr += line_size) + { /* convert only full image lines */ + /* Color plane and stripes shift needed by e.g. CCD */ + /* PDBG (pixma_dbg (4, "*post_process_image_data***** Processing with c=%u, n=%u, m=%u, w=%i, line_size=%u ***** \n", + c, n, m, s->param->wx, line_size)); */ + if (c >= 3) + { + if ( ((s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600)) || ((s->cfg->pid == MP960_PID) && (s->param->xdpi == 4800)) || ((s->cfg->pid == MP810_PID) && (s->param->xdpi == 4800)) ) { + dptr = shift_colorsCS9000 (dptr, sptr, + s->param->wx, s->param->xdpi, s->cfg->pid, c, + mp->shift, mp->stripe_shift, mp->stripe_shift2, jumplines*line_size); + } + + else if ((s->cfg->pid == CS9000F_PID) /* 9000F: 16 bit flatbed scan at 4800dpi */ + && ((s->param->mode == PIXMA_SCAN_MODE_COLOR_48) || (s->param->mode == PIXMA_SCAN_MODE_GRAY_16)) + && (s->param->xdpi == 4800) + && (s->param->source == PIXMA_SOURCE_FLATBED)) + dptr = shift_colorsCS9000_4800 (dptr, sptr, + s->param->wx, s->param->xdpi, s->cfg->pid, c, + mp->shift, mp->stripe_shift, mp->stripe_shift2, jumplines*line_size); + + else /* all except 9000F at 9600dpi */ + dptr = shift_colors (dptr, sptr, + s->param->wx, s->param->xdpi, s->cfg->pid, c, + mp->shift, mp->stripe_shift); + } + + /*PDBG (pixma_dbg (4, "*post_process_image_data***** test = %i *****\n", test)); */ + + /*--comment out all between this line and the one below for 9000F tests at 9600dpi or MP960 at 4800dpi ------*/ + /* if ( 0 ) */ + if ( (((s->cfg->pid != CS9000F_PID) || (s->param->xdpi < 9600)) && ((s->cfg->pid != MP960_PID) || (s->param->xdpi < 4800)) && ((s->cfg->pid != MP810_PID) || (s->param->xdpi < 4800)) ) || (test==0)) + { + /* PDBG (pixma_dbg (4, "*post_process_image_data***** MUST GET HERE WHEN TEST == 0 *****\n")); */ + + if (!( (s->cfg->pid == MP810_PID) && (s->param->xdpi == 4800) ) && !( (s->cfg->pid == MP960_PID) && (s->param->xdpi == 4800) ) && !( (s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600) ) ) { /* for both flatbed & TPU */ + /* PDBG (pixma_dbg (4, "*post_process_image_data***** reordering pixels normal n = %i *****\n", n)); */ + reorder_pixels (mp->linebuf, sptr, c, n, m, s->param->wx, line_size); + } + + if ( (s->cfg->pid == CS9000F_PID) && (s->param->xdpi == 9600) ) { + /* PDBG (pixma_dbg (4, "*post_process_image_data***** cs900f_initial_reorder_pixels n = %i *****\n", n)); */ + /* this combines pixels from 8 images 2px at a time from left to right: 1122334455667788... */ + cs9000f_initial_reorder_pixels (mp->linebuf, sptr, c, n, m, s->param->wx, line_size); + /* final interleaving */ + cs9000f_second_reorder_pixels (mp->linebuf, sptr, c, s->param->wx, line_size); + } + + /* comment: special image format for MP960 in flatbed mode + at 4800dpi. It is actually 2400dpi, with each pixel + doubled. The TPU mode has proper pixel ordering */ + if ( ( ((s->cfg->pid == MP960_PID) || (s->cfg->pid == MP810_PID)) && (s->param->xdpi == 4800) ) && (n > 0)) { + /* for both flatbed & TPU */ + /* PDBG (pixma_dbg (4, "*post_process_image_data***** flatbed mp960_reordering pixels n = %i *****\n", n)); */ + mp960_reorder_pixels (mp->linebuf, sptr, c, n, m, s->param->wx, line_size); + } + + /* comment: MP970, CS8800F, CS9000F specific reordering for 4800 dpi */ + if ((s->cfg->pid == MP970_PID || s->cfg->pid == CS8800F_PID || s->cfg->pid == CS9000F_PID) + && (s->param->xdpi == 4800)) { + /*PDBG (pixma_dbg (4, "*post_process_image_data***** mp970_reordering pixels n = %i *****\n", n)); */ + mp970_reorder_pixels (mp->linebuf, sptr, c, s->param->wx, line_size); + } + + } + /*-------------------------------------------------------*/ + + /* PDBG (pixma_dbg (4, "*post_process_image_data: sptr=%u, dptr=%u \n", sptr, dptr)); */ + + /* Crop line to selected borders */ + memmove(cptr, sptr + cx, cw); + /* PDBG (pixma_dbg (4, "*post_process_image_data***** crop line: cx=%u, cw=%u ***** \n", cx, cw)); */ + + /* Color to Lineart convert for CCD sensor */ + if (is_lineart (s)) + cptr = gptr = pixma_binarize_line (s->param, gptr, cptr, s->param->w, c); + /* Color to Grayscale convert for CCD sensor */ + else if (is_gray_all (s)) + cptr = gptr = pixma_rgb_to_gray (gptr, cptr, s->param->w, c); + else + cptr += cw; + } + /* PDBG (pixma_dbg (4, "*post_process_image_data: sptr=%u, dptr=%u \n", sptr, dptr)); */ + } + ib->rptr = mp->imgbuf; + ib->rend = cptr; + return mp->data_left_ofs - sptr; /* # of non processed bytes */ + /* contains shift color data for new lines */ + /* and already received data for the next line */ +} + +static int +mp810_open (pixma_t * s) +{ + mp810_t *mp; + uint8_t *buf; + + mp = (mp810_t *) calloc (1, sizeof (*mp)); + if (!mp) + return PIXMA_ENOMEM; + + buf = (uint8_t *) malloc (CMDBUF_SIZE + IMAGE_BLOCK_SIZE); + if (!buf) + { + free (mp); + return PIXMA_ENOMEM; + } + + s->subdriver = mp; + mp->state = state_idle; + + mp->cb.buf = buf; + mp->cb.size = CMDBUF_SIZE; + mp->cb.res_header_len = 8; + mp->cb.cmd_header_len = 16; + mp->cb.cmd_len_field_ofs = 14; + + mp->imgbuf = buf + CMDBUF_SIZE; + + /* General rules for setting Pixma protocol generation # */ + mp->generation = (s->cfg->pid >= MP810_PID) ? 2 : 1; /* no generation 1 devices anyway, but keep similar to pixma_mp150.c file */ + + if (s->cfg->pid >= MP970_PID) + mp->generation = 3; + + if (s->cfg->pid >= MP990_PID) + mp->generation = 4; + + /* And exceptions to be added here */ + if (s->cfg->pid == CS8800F_PID) + mp->generation = 3; + + if (s->cfg->pid == CS9000F_PID) + mp->generation = 4; + + /* TPU info data setup */ + mp->tpu_datalen = 0; + + if (mp->generation < 4) + { + /* Canoscan 8800F ignores commands if not initialized */ + if (s->cfg->pid == CS8800F_PID) + abort_session (s); + else + { + query_status (s); + handle_interrupt (s, 200); + if (mp->generation == 3 && has_ccd_sensor (s)) + send_cmd_start_calibrate_ccd_3 (s); + } + } + return 0; +} + +static void +mp810_close (pixma_t * s) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + + mp810_finish_scan (s); + free (mp->cb.buf); + free (mp); + s->subdriver = NULL; +} + +static int +mp810_check_param (pixma_t * s, pixma_scan_param_t * sp) +{ + mp810_t *mp = (mp810_t *) s->subdriver; + unsigned w_max; + + /* PDBG (pixma_dbg (4, "*mp810_check_param***** Initially: channels=%u, depth=%u, x=%u, y=%u, w=%u, h=%u, xs=%u, wx=%u *****\n", + sp->channels, sp->depth, sp->x, sp->y, sp->w, sp->h, sp->xs, sp->wx)); */ + + sp->channels = 3; + sp->software_lineart = 0; + switch (sp->mode) + { + /* standard scan modes + * 8 bit per channel in color and grayscale mode + * 16 bit per channel with TPU */ + case PIXMA_SCAN_MODE_GRAY: + case PIXMA_SCAN_MODE_NEGATIVE_GRAY: + sp->channels = 1; + case PIXMA_SCAN_MODE_COLOR: + case PIXMA_SCAN_MODE_NEGATIVE_COLOR: + sp->depth = 8; +#ifdef TPU_48 +#ifndef DEBUG_TPU_48 + if (sp->source == PIXMA_SOURCE_TPU) +#endif + sp->depth = 16; /* TPU in 16 bits mode */ +#endif + break; + /* extended scan modes for 48 bit flatbed scanners + * 16 bit per channel in color and grayscale mode */ + case PIXMA_SCAN_MODE_GRAY_16: + sp->channels = 1; + sp->depth = 16; + break; + case PIXMA_SCAN_MODE_COLOR_48: + sp->channels = 3; + sp->depth = 16; + break; + /* software lineart + * 1 bit per channel */ + case PIXMA_SCAN_MODE_LINEART: + sp->software_lineart = 1; + sp->channels = 1; + sp->depth = 1; + break; + } + + /* for software lineart w must be a multiple of 8 + * I don't know why is_lineart(s) doesn't work here */ + if (sp->software_lineart == 1 && sp->w % 8) + { + sp->w += 8 - (sp->w % 8); + + /* do not exceed the scanner capability */ + w_max = s->cfg->width * s->cfg->xdpi / 75; + w_max -= w_max % 8; + if (sp->w > w_max) + sp->w = w_max; + } + + if (sp->source == PIXMA_SOURCE_TPU && !sp->tpu_offset_added) + { + unsigned fixed_offset_y; /* TPU offsets for CanoScan 8800F, or other CCD at 300dpi. */ + unsigned max_y; /* max TPU height for CS9000F at 75 dpi */ + + /* CanoScan 8800F and others adding an offset depending on resolution */ + /* CS9000F and others maximum TPU height */ + switch (s->cfg->pid) + { + case CS8800F_PID: + fixed_offset_y = 140; + max_y = MIN (740, s->cfg->height); + break; + case CS9000F_PID: + fixed_offset_y = 146; + max_y = MIN (740, s->cfg->height); + break; + default: + fixed_offset_y = 0; + max_y = s->cfg->height; + break; + } + + /* cropping y and h to scanable area */ + max_y *= (sp->ydpi) / 75; + sp->y = MIN(sp->y, max_y); + sp->h = MIN(sp->h, max_y - sp->y); + /* PDBG (pixma_dbg (4, "*mp810_check_param***** Cropping: y=%u, h=%u *****\n", + sp->y, sp->h)); */ + if (!sp->h) + return SANE_STATUS_INVAL; /* no lines */ + + /* Convert the offsets from 300dpi to actual resolution */ + fixed_offset_y = fixed_offset_y*(sp->xdpi)/300; + + /* In TPU mode, the CS9000F appears to always subtract 146 from the + vertical starting position, but clamps its at 0. Therefore vertical + offsets 0 through 146 (@300 dpi) get all mapped onto the same + physical starting position: line 0. Then, starting from 147, the + offsets get mapped onto successive physical lines: + y line + 0 -> 0 + 1 -> 0 + 2 -> 0 + ... + 146 -> 0 + 147 -> 1 + 148 -> 2 + ... + Since a preview scan is typically made starting from y = 0, but + partial image scans usually start at y >> 147, this results in a + discontinuity in the y to line mapping, resulting in wrong offsets. + To prevent this, we must always add (at least) 146 to the y + offset before it is sent to the scanner. The scanner will then + map y = 0 (146) to the first line, y = 1 (147) to the second line, + and so on. Any distance that is then measured on the preview scan, + can be translated without any discontinuity. + + However, there is one complication: during a preview scan, which + normally covers the whole scan area of the scanner, we should _not_ + add the offset because it will result in a reduced number of lines + being returned (the scan height is clamped in + pixma_check_scan_param()). Since the frontend has no way of telling + that the scan area has been reduced, it would derive an incorrect + effective scan resolution, and any position calculations based on + this would therefore be inaccurate. + + To prevent this, we don't add the offset in case y = 0, which is + typically the case during a preview scan (the scanner effectively + adds the offset for us, see above). In that way we keep the + linearity and we don't affect the scan area during previews. + */ + + if (sp->y > 0) + sp->y += fixed_offset_y; + + /* Prevent repeated corrections as check_param may be called multiple times */ + sp->tpu_offset_added = 1; + } + + if (mp->generation >= 2) + { + /* mod 32 and expansion of the X scan limits */ + /* PDBG (pixma_dbg (4, "*mp810_check_param***** (gen>=2) xs=mod32 ----- Initially: x=%u, y=%u, w=%u, h=%u *****\n", sp->x, sp->y, sp->w, sp->h)); */ + sp->xs = (sp->x) % 32; + } + else + { + sp->xs = 0; + /* PDBG (pixma_dbg (4, "*mp810_check_param***** (else) xs=0 Selected origin, origin shift: %u, %u *****\n", sp->x, sp->xs)); */ + } + sp->wx = calc_raw_width (mp, sp); + sp->line_size = sp->w * sp->channels * (((sp->software_lineart) ? 8 : sp->depth) / 8); /* bytes per line per color after cropping */ + /* PDBG (pixma_dbg (4, "*mp810_check_param***** (else) Final scan width and line-size: %u, %"PRIu64" *****\n", sp->wx, sp->line_size)); */ + + if (sp->source == PIXMA_SOURCE_FLATBED) + { + /* flatbed mode: highest res is 4800 dpi */ + uint8_t k = sp->xdpi / MIN (sp->xdpi, 4800); + sp->x /= k; + sp->xs /= k; + sp->y /= k; + sp->w /= k; + sp->wx /= k; + sp->h /= k; + sp->xdpi /= k; + sp->ydpi = sp->xdpi; + } + + /* TPU mode and 16 bit flatbed scans + * TODO: either the frontend (xsane) cannot handle 48 bit flatbed scans @ 75 dpi (prescan) + * or there is a bug in this subdriver */ + if (sp->source == PIXMA_SOURCE_TPU + || sp->mode == PIXMA_SCAN_MODE_COLOR_48 || sp->mode == PIXMA_SCAN_MODE_GRAY_16) + { + uint8_t k; + + /* lowest res is 150 or 300 dpi */ + /* MP810, MP960 appear to have a 200dpi mode for low-res scans, not 150 dpi */ + if (sp->source == PIXMA_SOURCE_TPU + && ((mp->generation >= 3) || (s->cfg->pid == MP810_PID) || (s->cfg->pid == MP960_PID))) + k = MAX (sp->xdpi, 300) / sp->xdpi; + else + k = MAX (sp->xdpi, 150) / sp->xdpi; + sp->x *= k; + sp->xs *= k; + sp->y *= k; + sp->w *= k; + sp->wx *= k; + sp->h *= k; + sp->xdpi *= k; + sp->ydpi = sp->xdpi; + } + + if (sp->source == PIXMA_SOURCE_ADF || sp->source == PIXMA_SOURCE_ADFDUP) + { + uint8_t k = 1; + + /* ADF/ADF duplex mode: max scan res is 600 dpi, at least for generation 4 */ + if (mp->generation >= 4) + k = sp->xdpi / MIN (sp->xdpi, 600); + sp->x /= k; + sp->xs /= k; + sp->y /= k; + sp->w /= k; + sp->wx /= k; + sp->h /= k; + sp->xdpi /= k; + sp->ydpi = sp->xdpi; + } + + /* PDBG (pixma_dbg (4, "*mp810_check_param***** Finally: channels=%u, depth=%u, x=%u, y=%u, w=%u, h=%u, xs=%u, wx=%u *****\n", + sp->channels, sp->depth, sp->x, sp->y, sp->w, sp->h, sp->xs, sp->wx)); */ + + return 0; +} + +static int +mp810_scan (pixma_t * s) +{ + int error = 0, tmo, i; + mp810_t *mp = (mp810_t *) s->subdriver; + + if (mp->state != state_idle) + return PIXMA_EBUSY; + + /* Generation 4: send XML dialog */ + if (mp->generation == 4 && s->param->adf_pageid == 0) + { + if (!send_xml_dialog (s, XML_START_1)) + return PIXMA_EPROTO; + if (!send_xml_dialog (s, XML_START_2)) + return PIXMA_EPROTO; + } + + /* clear interrupt packets buffer */ + while (handle_interrupt (s, 0) > 0) + { + } + + /* FIXME: Duplex ADF: check paper status only before odd pages (1,3,5,...). */ + if (is_scanning_from_adf (s)) + { + if ((error = query_status (s)) < 0) + return error; + tmo = 10; + while (!has_paper (s) && --tmo >= 0) + { + WAIT_INTERRUPT (1000); + PDBG (pixma_dbg + (2, "No paper in ADF. Timed out in %d sec.\n", tmo)); + } + if (!has_paper (s)) + return PIXMA_ENO_PAPER; + } + + if (has_ccd_sensor (s) && (mp->generation <= 2)) + { + error = send_cmd_e920 (s); + switch (error) + { + case PIXMA_ECANCELED: + case PIXMA_EBUSY: + PDBG (pixma_dbg (2, "cmd e920 or d520 returned %s\n", + pixma_strerror (error))); + /* fall through */ + case 0: + query_status (s); + break; + default: + PDBG (pixma_dbg (1, "WARNING: cmd e920 or d520 failed %s\n", + pixma_strerror (error))); + return error; + } + tmo = 3; /* like Windows driver, CCD calibration ? */ + while (--tmo >= 0) + { + WAIT_INTERRUPT (1000); + PDBG (pixma_dbg (2, "CCD Calibration ends in %d sec.\n", tmo)); + } + /* pixma_sleep(2000000); */ + } + + tmo = 10; + if (s->param->adf_pageid == 0 || mp->generation <= 2) + { + error = start_session (s); + while (error == PIXMA_EBUSY && --tmo >= 0) + { + if (s->cancel) + { + error = PIXMA_ECANCELED; + break; + } + PDBG (pixma_dbg + (2, "Scanner is busy. Timed out in %d sec.\n", tmo + 1)); + pixma_sleep (1000000); + error = start_session (s); + } + if (error == PIXMA_EBUSY || error == PIXMA_ETIMEDOUT) + { + /* The scanner maybe hangs. We try to empty output buffer of the + * scanner and issue the cancel command. */ + PDBG (pixma_dbg (2, "Scanner hangs? Sending abort_session command.\n")); + drain_bulk_in (s); + abort_session (s); + pixma_sleep (500000); + error = start_session (s); + } + if ((error >= 0) || (mp->generation >= 3)) + mp->state = state_warmup; + if ((error >= 0) && (mp->generation <= 2)) + error = select_source (s); + if ((error >= 0) && (mp->generation >= 3) && has_ccd_sensor (s)) + error = init_ccd_lamp_3 (s); + if ((error >= 0) && !is_scanning_from_tpu (s)) + { + /* FIXME: 48 bit flatbed scans don't need gamma tables + * the code below doesn't run */ + /*if (is_color_48 (s) || is_gray_16 (s)) + error = 0; + else*/ + for (i = (mp->generation >= 3) ? 3 : 1 ; i > 0 && error >= 0; i--) + error = send_gamma_table (s); + } + else if (error >= 0) /* in TPU mode, for gen 1, 2, and 3 */ + error = send_set_tpu_info (s); + } + else /* ADF pageid != 0 and gen3 or above */ + pixma_sleep (1000000); + + if ((error >= 0) || (mp->generation >= 3)) + mp->state = state_warmup; + if (error >= 0) + error = send_scan_param (s); + if ((error >= 0) && (mp->generation >= 3)) + error = start_scan_3 (s); + if (error < 0) + { + mp->last_block = 0x38; /* Force abort session if ADF scan */ + mp810_finish_scan (s); + return error; + } + return 0; +} + +static int +mp810_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib) +{ + int error; + mp810_t *mp = (mp810_t *) s->subdriver; + unsigned block_size, bytes_received, proc_buf_size, line_size; + uint8_t header[16]; + + if (mp->state == state_warmup) + { /* prepare read image data */ + /* PDBG (pixma_dbg (4, "**mp810_fill_buffer***** warmup *****\n")); */ + + RET_IF_ERR (wait_until_ready (s)); + pixma_sleep (1000000); /* No need to sleep, actually, but Window's driver + * sleep 1.5 sec. */ + mp->state = state_scanning; + mp->last_block = 0; + + line_size = get_cis_ccd_line_size (s); + proc_buf_size = (2 * calc_shifting (s) + 2) * line_size; + mp->cb.buf = realloc (mp->cb.buf, + CMDBUF_SIZE + IMAGE_BLOCK_SIZE + proc_buf_size); + if (!mp->cb.buf) + return PIXMA_ENOMEM; + mp->linebuf = mp->cb.buf + CMDBUF_SIZE; + mp->imgbuf = mp->data_left_ofs = mp->linebuf + line_size; + mp->data_left_len = 0; + } + + do + { /* read complete image data from the scanner */ + if (s->cancel) + return PIXMA_ECANCELED; + if ((mp->last_block & 0x28) == 0x28) + { /* end of image */ + mp->state = state_finished; + /* PDBG (pixma_dbg (4, "**mp810_fill_buffer***** end of image *****\n")); */ + return 0; + } + /* PDBG (pixma_dbg (4, "*mp810_fill_buffer***** moving %u bytes into buffer *****\n", mp->data_left_len)); */ + memmove (mp->imgbuf, mp->data_left_ofs, mp->data_left_len); + error = read_image_block (s, header, mp->imgbuf + mp->data_left_len); + if (error < 0) + { + if (error == PIXMA_ECANCELED) + { + /* NOTE: I see this in traffic logs but I don't know its meaning. */ + read_error_info (s, NULL, 0); + } + return error; + } + + bytes_received = error; + /*PDBG (pixma_dbg (4, "*mp810_fill_buffer***** %u bytes received by read_image_block *****\n", bytes_received));*/ + block_size = pixma_get_be32 (header + 12); + mp->last_block = header[8] & 0x38; + if ((header[8] & ~0x38) != 0) + { + PDBG (pixma_dbg (1, "WARNING: Unexpected result header\n")); + PDBG (pixma_hexdump (1, header, 16)); + } + PASSERT (bytes_received == block_size); + + if (block_size == 0) + { /* no image data at this moment. */ + pixma_sleep (10000); + } + /* For TPU at 48 bits/pixel to output at 24 bits/pixel */ +#ifndef DEBUG_TPU_48 +#ifndef TPU_48 + PDBG (pixma_dbg (1, "WARNING: 9000F using 24 instead of 48 bit processing \n")); +#ifndef DEBUG_TPU_24 + if (is_scanning_from_tpu (s)) +#endif + bytes_received = pack_48_24_bpc (mp->imgbuf + mp->data_left_len, bytes_received); +#endif +#endif + /* Post-process the image data */ + mp->data_left_ofs = mp->imgbuf + mp->data_left_len + bytes_received; + mp->data_left_len = post_process_image_data (s, ib); + mp->data_left_ofs -= mp->data_left_len; + /* PDBG (pixma_dbg (4, "* mp810_fill_buffer: data_left_len %u \n", mp->data_left_len)); */ + /* PDBG (pixma_dbg (4, "* mp810_fill_buffer: data_left_ofs %u \n", mp->data_left_ofs)); */ + } + while (ib->rend == ib->rptr); + + return ib->rend - ib->rptr; +} + +static void +mp810_finish_scan (pixma_t * s) +{ + int error; + mp810_t *mp = (mp810_t *) s->subdriver; + + switch (mp->state) + { + case state_transfering: + drain_bulk_in (s); + /* fall through */ + case state_scanning: + case state_warmup: + case state_finished: + /* Send the get TPU info message */ + if (is_scanning_from_tpu (s) && mp->tpu_datalen == 0) + send_get_tpu_info_3 (s); + /* FIXME: to process several pages ADF scan, must not send + * abort_session and start_session between pages (last_block=0x28) */ + if (mp->generation <= 2 || !is_scanning_from_adf (s) || mp->last_block == 0x38) + { + error = abort_session (s); /* FIXME: it probably doesn't work in duplex mode! */ + if (error < 0) + PDBG (pixma_dbg (1, "WARNING:abort_session() failed %d\n", error)); + + /* Generation 4: send XML end of scan dialog */ + if (mp->generation == 4) + { + if (!send_xml_dialog (s, XML_END)) + PDBG (pixma_dbg (1, "WARNING:XML_END dialog failed \n")); + } + } + mp->state = state_idle; + /* fall through */ + case state_idle: + break; + } +} + +static void +mp810_wait_event (pixma_t * s, int timeout) +{ + /* FIXME: timeout is not correct. See usbGetCompleteUrbNoIntr() for + * instance. */ + while (s->events == 0 && handle_interrupt (s, timeout) > 0) + { + } +} + +static int +mp810_get_status (pixma_t * s, pixma_device_status_t * status) +{ + int error; + + RET_IF_ERR (query_status (s)); + status->hardware = PIXMA_HARDWARE_OK; + status->adf = (has_paper (s)) ? PIXMA_ADF_OK : PIXMA_ADF_NO_PAPER; + status->cal = + (is_calibrated (s)) ? PIXMA_CALIBRATION_OK : PIXMA_CALIBRATION_OFF; + return 0; +} + +static const pixma_scan_ops_t pixma_mp810_ops = { + mp810_open, + mp810_close, + mp810_scan, + mp810_fill_buffer, + mp810_finish_scan, + mp810_wait_event, + mp810_check_param, + mp810_get_status +}; + +#define DEVICE(name, model, pid, dpi, ext_min_dpi, ext_max_dpi, w, h, cap) { \ + name, /* name */ \ + model, /* model */ \ + CANON_VID, pid, /* vid pid */ \ + 0, /* iface */ \ + &pixma_mp810_ops, /* ops */ \ + dpi, 2*(dpi), /* xdpi, ydpi */ \ + ext_min_dpi, ext_max_dpi, /* ext_min_dpi, ext_max_dpi */ \ + w, h, /* width, height */ \ + PIXMA_CAP_EASY_RGB| \ + PIXMA_CAP_GRAY| /* all scanners with software grayscale */ \ + PIXMA_CAP_LINEART| /* all scanners with software lineart */ \ + PIXMA_CAP_GAMMA_TABLE|PIXMA_CAP_EVENTS|cap \ +} + +#define END_OF_DEVICE_LIST DEVICE(NULL, NULL, 0, 0, 0, 0, 0, 0, 0) + +const pixma_config_t pixma_mp810_devices[] = { + /* Generation 2: CCD */ + DEVICE ("Canon PIXMA MP810", "MP810", MP810_PID, 4800, 300, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + DEVICE ("Canon PIXMA MP960", "MP960", MP960_PID, 4800, 300, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + + /* Generation 3 CCD not managed as Generation 2 */ + DEVICE ("Canon Pixma MP970", "MP970", MP970_PID, 4800, 300, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + + /* Flatbed scanner CCD (2007) */ + DEVICE ("Canoscan 8800F", "8800F", CS8800F_PID, 4800, 300, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU | PIXMA_CAP_NEGATIVE), + + /* PIXMA 2008 vintage CCD */ + DEVICE ("Canon MP980 series", "MP980", MP980_PID, 4800, 300, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + + /* Generation 4 CCD */ + DEVICE ("Canon MP990 series", "MP990", MP990_PID, 4800, 300, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + + /* Flatbed scanner (2010) */ + DEVICE ("Canoscan 9000F", "9000F", CS9000F_PID, 4800, 300, 9600, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU | PIXMA_CAP_NEGATIVE | PIXMA_CAP_48BIT), + + /* Latest devices (2010) Generation 4 CCD untested */ + DEVICE ("Canon PIXMA MG8100", "MG8100", MG8100_PID, 4800, 300, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + + /* Latest devices (2011) Generation 4 CCD untested */ + DEVICE ("Canon PIXMA MG8200", "MG8200", MG8200_PID, 4800, 300, 0, 638, 877, PIXMA_CAP_CCD | PIXMA_CAP_TPU), + + END_OF_DEVICE_LIST +}; diff -Nru sane-backends-1.0.22/backend/pixma_rename.h sane-backends-1.0.23/backend/pixma_rename.h --- sane-backends-1.0.22/backend/pixma_rename.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_rename.h 2012-07-01 02:00:44.000000000 +0000 @@ -81,6 +81,7 @@ #define pixma_mp150_devices sanei_pixma_mp150_devices #define pixma_mp730_devices sanei_pixma_mp730_devices #define pixma_mp750_devices sanei_pixma_mp750_devices +#define pixma_mp810_devices sanei_pixma_mp810_devices #define pixma_iclass_devices sanei_pixma_iclass_devices #define pixma_newcmd sanei_pixma_newcmd #define pixma_open sanei_pixma_open diff -Nru sane-backends-1.0.22/backend/pixma_sane_options.c sane-backends-1.0.23/backend/pixma_sane_options.c --- sane-backends-1.0.22/backend/pixma_sane_options.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_sane_options.c 2012-07-01 02:00:44.000000000 +0000 @@ -1,6 +1,9 @@ /* Automatically generated from pixma_sane.c */ static const SANE_Range constraint_gamma_table = { 0, 255, 0 }; - +static const SANE_Range constraint_gamma = { SANE_FIX (0.3), SANE_FIX (5), + SANE_FIX (0) }; +static const SANE_Range constraint_threshold = { 0, 100, 1 }; +static const SANE_Range constraint_threshold_curve = { 0, 127, 1 }; static int find_string_in_list (SANE_String_Const str, const SANE_String_Const * list) @@ -62,19 +65,19 @@ sod->desc = SANE_DESC_SCAN_MODE; sod->name = "mode"; sod->unit = SANE_UNIT_NONE; - sod->size = 11; + sod->size = 31; sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_AUTOMATIC; sod->constraint_type = SANE_CONSTRAINT_STRING_LIST; sod->constraint.string_list = ss->mode_list; OPT_IN_CTX[opt_mode].info = SANE_INFO_RELOAD_PARAMS; - opt->def.s = SANE_VALUE_SCAN_MODE_COLOR; + opt->def.s = SANE_I18N (ss->mode_list[0]); opt->val.w = find_string_in_list (opt->def.s, sod->constraint.string_list); opt = &(OPT_IN_CTX[opt_source]); sod = &opt->sod; sod->type = SANE_TYPE_STRING; sod->title = SANE_TITLE_SCAN_SOURCE; - sod->desc = SANE_DESC_SCAN_SOURCE; + sod->desc = SANE_I18N ("Selects the scan source (such as a document-feeder). Set source before mode and resolution. Resets mode and resolution to auto values."); sod->name = "source"; sod->unit = SANE_UNIT_NONE; sod->size = 31; @@ -89,9 +92,7 @@ sod = &opt->sod; sod->type = SANE_TYPE_BOOL; sod->title = SANE_I18N ("Button-controlled scan"); - sod->desc = - SANE_I18N - ("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."); + sod->desc = SANE_I18N ("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."); sod->name = "button-controlled"; sod->unit = SANE_UNIT_NONE; sod->size = sizeof (SANE_Word); @@ -115,9 +116,8 @@ sod->name = "custom-gamma"; sod->unit = SANE_UNIT_NONE; sod->size = sizeof (SANE_Word); - sod->cap = - SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_AUTOMATIC | - SANE_CAP_INACTIVE; + sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_AUTOMATIC + | SANE_CAP_INACTIVE; sod->constraint_type = SANE_CONSTRAINT_NONE; OPT_IN_CTX[opt_custom_gamma].info = 0; opt->def.w = SANE_TRUE; @@ -131,13 +131,28 @@ sod->name = "gamma-table"; sod->unit = SANE_UNIT_NONE; sod->size = 4096 * sizeof (SANE_Word); - sod->cap = - SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_AUTOMATIC | - SANE_CAP_INACTIVE; + sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_AUTOMATIC + | SANE_CAP_INACTIVE; sod->constraint_type = SANE_CONSTRAINT_RANGE; sod->constraint.range = &constraint_gamma_table; OPT_IN_CTX[opt_gamma_table].info = 0; + opt = &(OPT_IN_CTX[opt_gamma]); + sod = &opt->sod; + sod->type = SANE_TYPE_FIXED; + sod->title = SANE_I18N ("Gamma function exponent"); + sod->desc = SANE_I18N ("Changes intensity of midtones"); + sod->name = "gamma"; + sod->unit = SANE_UNIT_NONE; + sod->size = 1 * sizeof (SANE_Word); + sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_AUTOMATIC + | SANE_CAP_INACTIVE; + sod->constraint_type = SANE_CONSTRAINT_RANGE; + sod->constraint.range = &constraint_gamma; + OPT_IN_CTX[opt_gamma].info = 0; + opt->def.w = SANE_FIX (AUTO_GAMMA); + opt->val.w = SANE_FIX (AUTO_GAMMA); + opt = &(OPT_IN_CTX[opt__group_3]); sod = &opt->sod; sod->type = SANE_TYPE_GROUP; @@ -250,6 +265,43 @@ opt->def.w = 0; opt->val.w = 0; + opt = &(OPT_IN_CTX[opt__group_5]); + sod = &opt->sod; + sod->type = SANE_TYPE_GROUP; + sod->title = SANE_I18N ("Extras"); + sod->desc = sod->title; + + opt = &(OPT_IN_CTX[opt_threshold]); + sod = &opt->sod; + sod->type = SANE_TYPE_INT; + sod->title = SANE_TITLE_THRESHOLD; + sod->desc = SANE_DESC_THRESHOLD; + sod->name = "threshold"; + sod->unit = SANE_UNIT_PERCENT; + sod->size = 1 * sizeof (SANE_Word); + sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_AUTOMATIC + | SANE_CAP_INACTIVE; + sod->constraint_type = SANE_CONSTRAINT_RANGE; + sod->constraint.range = &constraint_threshold; + OPT_IN_CTX[opt_threshold].info = 0; + opt->def.w = 50; + opt->val.w = 50; + + opt = &(OPT_IN_CTX[opt_threshold_curve]); + sod = &opt->sod; + sod->type = SANE_TYPE_INT; + sod->title = SANE_I18N ("Threshold curve"); + sod->desc = SANE_I18N ("Dynamic threshold curve, from light to dark, normally 50-65"); + sod->name = "threshold-curve"; + sod->unit = SANE_UNIT_NONE; + sod->size = 1 * sizeof (SANE_Word); + sod->cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT | SANE_CAP_AUTOMATIC + | SANE_CAP_INACTIVE; + sod->constraint_type = SANE_CONSTRAINT_RANGE; + sod->constraint.range = &constraint_threshold_curve; + OPT_IN_CTX[opt_threshold_curve].info = 0; + return 0; } + diff -Nru sane-backends-1.0.22/backend/pixma_sane_options.h sane-backends-1.0.23/backend/pixma_sane_options.h --- sane-backends-1.0.22/backend/pixma_sane_options.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/pixma_sane_options.h 2012-07-01 02:00:44.000000000 +0000 @@ -21,6 +21,7 @@ opt__group_2, opt_custom_gamma, opt_gamma_table, + opt_gamma, opt__group_3, opt_tl_x, opt_tl_y, @@ -30,6 +31,9 @@ opt_button_update, opt_button_1, opt_button_2, + opt__group_5, + opt_threshold, + opt_threshold_curve, opt_last } option_t; diff -Nru sane-backends-1.0.22/backend/plustek.c sane-backends-1.0.23/backend/plustek.c --- sane-backends-1.0.22/backend/plustek.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/plustek.c 2012-07-01 02:00:44.000000000 +0000 @@ -83,6 +83,7 @@ * - 0.51 - added fine calibration caching * - removed #define _PLUSTEK_USB * - 0.52 - added skipDarkStrip and OPT_LOFF4DARK to frontend options + * - fixed batch scanning *. *
* This file is part of the SANE package. @@ -158,7 +159,7 @@ #include "../include/sane/sanei.h" #include "../include/sane/saneopts.h" -#define BACKEND_VERSION "0.52-9" +#define BACKEND_VERSION "0.52-10" #define BACKEND_NAME plustek #include "../include/sane/sanei_access.h" @@ -2706,6 +2707,7 @@ (unsigned long)(s->params.lines * s->params.bytes_per_line)) { sanei_thread_waitpid( s->reader_pid, 0 ); s->reader_pid = -1; + s->scanning = SANE_FALSE; drvclose( s->hw ); return close_pipe(s); } @@ -2734,6 +2736,7 @@ return s->exit_code; } s->reader_pid = -1; + s->scanning = SANE_FALSE; return close_pipe(s); } return SANE_STATUS_GOOD; diff -Nru sane-backends-1.0.22/backend/rts8891.c sane-backends-1.0.23/backend/rts8891.c --- sane-backends-1.0.22/backend/rts8891.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/rts8891.c 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2007-2009 stef.dev@free.fr + Copyright (C) 2007-2012 stef.dev@free.fr This file is part of the SANE package. @@ -118,7 +118,7 @@ /* #define FAST_INIT 1 */ -#define BUILD 31 +#define BUILD 2301 #define MOVE_DPI 100 diff -Nru sane-backends-1.0.22/backend/rts8891.h sane-backends-1.0.23/backend/rts8891.h --- sane-backends-1.0.22/backend/rts8891.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/rts8891.h 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2007-2009 stef.dev@free.fr + Copyright (C) 2007-2012 stef.dev@free.fr This file is part of the SANE package. diff -Nru sane-backends-1.0.22/backend/rts8891_devices.c sane-backends-1.0.23/backend/rts8891_devices.c --- sane-backends-1.0.22/backend/rts8891_devices.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/rts8891_devices.c 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2007-2009 stef.dev@free.fr + Copyright (C) 2007-2012 stef.dev@free.fr This file is part of the SANE package. diff -Nru sane-backends-1.0.22/backend/rts8891_low.c sane-backends-1.0.23/backend/rts8891_low.c --- sane-backends-1.0.22/backend/rts8891_low.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/rts8891_low.c 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2007-2009 stef.dev@free.fr + Copyright (C) 2007-2012 stef.dev@free.fr This file is part of the SANE package. diff -Nru sane-backends-1.0.22/backend/rts8891_low.h sane-backends-1.0.23/backend/rts8891_low.h --- sane-backends-1.0.22/backend/rts8891_low.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/rts8891_low.h 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2007-2009 stef.dev@free.fr + Copyright (C) 2007-2012 stef.dev@free.fr This file is part of the SANE package. diff -Nru sane-backends-1.0.22/backend/rts88xx_lib.c sane-backends-1.0.23/backend/rts88xx_lib.c --- sane-backends-1.0.22/backend/rts88xx_lib.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/rts88xx_lib.c 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2007-2009 stef.dev@free.fr + Copyright (C) 2007-2012 stef.dev@free.fr This file is part of the SANE package. @@ -54,6 +54,7 @@ #include #include +#include #include "../include/_stdint.h" diff -Nru sane-backends-1.0.22/backend/rts88xx_lib.h sane-backends-1.0.23/backend/rts88xx_lib.h --- sane-backends-1.0.22/backend/rts88xx_lib.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/rts88xx_lib.h 2012-07-25 00:08:33.000000000 +0000 @@ -1,6 +1,6 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2007-2009 stef.dev@free.fr + Copyright (C) 2007-2012 stef.dev@free.fr This file is part of the SANE package. diff -Nru sane-backends-1.0.22/backend/saned.conf.in sane-backends-1.0.23/backend/saned.conf.in --- sane-backends-1.0.22/backend/saned.conf.in 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/saned.conf.in 2011-10-19 00:43:00.000000000 +0000 @@ -22,8 +22,8 @@ #scan-client.somedomain.firm #192.168.0.1 #192.168.0.1/29 -#[2001:7a8:185e::42:12] -#[2001:7a8:185e::42:12]/64 +#[2001:db8:185e::42:12] +#[2001:db8:185e::42:12]/64 # NOTE: /etc/inetd.conf (or /etc/xinetd.conf) and # /etc/services must also be properly configured to start diff -Nru sane-backends-1.0.22/backend/umax_pp.c sane-backends-1.0.23/backend/umax_pp.c --- sane-backends-1.0.22/backend/umax_pp.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/umax_pp.c 2012-07-25 00:08:33.000000000 +0000 @@ -1,5 +1,5 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2001-2008 Stphane Voltz + Copyright (C) 2001-2012 Stphane Voltz This file is part of the SANE package. This program is free software; you can redistribute it and/or @@ -107,8 +107,8 @@ * see Changelog */ -#define UMAX_PP_BUILD 700 -#define UMAX_PP_STATE "testing" +#define UMAX_PP_BUILD 2301 +#define UMAX_PP_STATE "release" static int num_devices = 0; static Umax_PP_Descriptor *devlist = NULL; diff -Nru sane-backends-1.0.22/backend/umax_pp.h sane-backends-1.0.23/backend/umax_pp.h --- sane-backends-1.0.22/backend/umax_pp.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/umax_pp.h 2012-07-25 00:08:33.000000000 +0000 @@ -1,5 +1,5 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2001-2008 Stphane Voltz + Copyright (C) 2001-2012 Stphane Voltz This file is part of the SANE package. This program is free software; you can redistribute it and/or diff -Nru sane-backends-1.0.22/backend/umax_pp_low.c sane-backends-1.0.23/backend/umax_pp_low.c --- sane-backends-1.0.22/backend/umax_pp_low.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/umax_pp_low.c 2012-07-25 00:08:34.000000000 +0000 @@ -1,5 +1,5 @@ /** - Copyright (C) 2001-2008 Stphane Voltz + Copyright (C) 2001-2012 Stphane Voltz This file is part of the SANE package. This program is free software; you can redistribute it and/or diff -Nru sane-backends-1.0.22/backend/umax_pp_low.h sane-backends-1.0.23/backend/umax_pp_low.h --- sane-backends-1.0.22/backend/umax_pp_low.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/umax_pp_low.h 2012-07-25 00:08:34.000000000 +0000 @@ -1,5 +1,5 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2001-2008 Stphane Voltz + Copyright (C) 2001-2012 Stphane Voltz This file is part of the SANE package. This program is free software; you can redistribute it and/or diff -Nru sane-backends-1.0.22/backend/umax_pp_mid.c sane-backends-1.0.23/backend/umax_pp_mid.c --- sane-backends-1.0.22/backend/umax_pp_mid.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/umax_pp_mid.c 2012-07-25 00:08:34.000000000 +0000 @@ -1,5 +1,5 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2001-2008 Stphane Voltz + Copyright (C) 2001-2012 Stphane Voltz This file is part of the SANE package. This program is free software; you can redistribute it and/or diff -Nru sane-backends-1.0.22/backend/umax_pp_mid.h sane-backends-1.0.23/backend/umax_pp_mid.h --- sane-backends-1.0.22/backend/umax_pp_mid.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/umax_pp_mid.h 2012-07-25 00:08:34.000000000 +0000 @@ -1,5 +1,5 @@ /* sane - Scanner Access Now Easy. - Copyright (C) 2001-2008 Stphane Voltz + Copyright (C) 2001-2012 Stphane Voltz This file is part of the SANE package. This program is free software; you can redistribute it and/or diff -Nru sane-backends-1.0.22/backend/v4l.c sane-backends-1.0.23/backend/v4l.c --- sane-backends-1.0.22/backend/v4l.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/v4l.c 2011-06-27 17:40:48.000000000 +0000 @@ -84,9 +84,8 @@ #include "../include/sane/sanei_config.h" #define V4L_CONFIG_FILE "v4l.conf" -#include "v4l.h" - #include +#include "v4l.h" static const SANE_Device **devlist = NULL; static int num_devices; diff -Nru sane-backends-1.0.22/backend/v4l.h sane-backends-1.0.23/backend/v4l.h --- sane-backends-1.0.22/backend/v4l.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/v4l.h 2011-06-27 17:41:07.000000000 +0000 @@ -29,6 +29,7 @@ #ifndef v4l_h #define v4l_h +#ifndef __LINUX_VIDEODEV_H /* Kernel interface */ /* Only the stuff we need. For more features, more defines are needed */ @@ -165,7 +166,7 @@ /* end of kernel interface */ - +#endif /* !__LINUX_VIDEODEV_H */ #include <../include/sane/sane.h> diff -Nru sane-backends-1.0.22/backend/xerox_mfp-tcp.c sane-backends-1.0.23/backend/xerox_mfp-tcp.c --- sane-backends-1.0.22/backend/xerox_mfp-tcp.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/xerox_mfp-tcp.c 2011-11-21 20:17:48.000000000 +0000 @@ -27,6 +27,10 @@ #include #include #include +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif #include "sane/saneopts.h" #include "sane/sanei_scsi.h" diff -Nru sane-backends-1.0.22/backend/xerox_mfp.c sane-backends-1.0.23/backend/xerox_mfp.c --- sane-backends-1.0.22/backend/xerox_mfp.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/xerox_mfp.c 2012-07-01 02:00:44.000000000 +0000 @@ -22,6 +22,7 @@ #include #include #include +#include #include "../include/sane/sane.h" #include "../include/sane/sanei.h" #include "../include/sane/saneopts.h" @@ -31,16 +32,16 @@ #include "../include/sane/sanei_backend.h" #include "xerox_mfp.h" -#define BACKEND_BUILD 12 +#define BACKEND_BUILD 13 #define XEROX_CONFIG_FILE "xerox_mfp.conf" static const SANE_Device **devlist = NULL; /* sane_get_devices array */ static struct device *devices_head = NULL; /* sane_get_devices list */ -transport available_transports[] = { +enum { TRANSPORT_USB, TRANSPORT_TCP, TRANSPORTS_MAX }; +transport available_transports[TRANSPORTS_MAX] = { { "usb", usb_dev_request, usb_dev_open, usb_dev_close, usb_configure_device }, { "tcp", tcp_dev_request, tcp_dev_open, tcp_dev_close, tcp_configure_device }, - { 0 } }; static int resolv_state(int state) @@ -824,7 +825,13 @@ devices_head = NULL; } -/* SANE API ignores return code of this callback */ +static transport *tr_from_devname(SANE_String_Const devname) +{ + if (strncmp("tcp", devname, 3) == 0) + return &available_transports[TRANSPORT_TCP]; + return &available_transports[TRANSPORT_USB]; +} + static SANE_Status list_one_device (SANE_String_Const devname) { @@ -839,12 +846,7 @@ return SANE_STATUS_GOOD; } - for (tr = available_transports; tr->ttype; tr++) { - if (!strncmp (devname, tr->ttype, strlen(tr->ttype))) - break; - } - if (!tr->ttype) - return SANE_STATUS_INVAL; + tr = tr_from_devname(devname); dev = calloc (1, sizeof (struct device)); if (dev == NULL) @@ -878,13 +880,7 @@ static SANE_Status list_conf_devices (UNUSED (SANEI_Config * config), const char *devname) { - transport *tr; - - for (tr = available_transports; tr->ttype; tr++) { - if (!strncmp (devname, tr->ttype, strlen(tr->ttype))) - return tr->configure_device(devname, list_one_device); - } - return SANE_STATUS_INVAL; + return tr_from_devname(devname)->configure_device(devname, list_one_device); } SANE_Status diff -Nru sane-backends-1.0.22/backend/xerox_mfp.conf.in sane-backends-1.0.23/backend/xerox_mfp.conf.in --- sane-backends-1.0.22/backend/xerox_mfp.conf.in 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/backend/xerox_mfp.conf.in 2012-07-01 02:00:44.000000000 +0000 @@ -18,6 +18,9 @@ #Samsung SCX4725-FN usb 0x04e8 0x341f +#Samsung CLX-216x Series +usb 0x04e8 0x3425 + #Samsung SCX-4500 usb 0x04e8 0x3426 @@ -27,18 +30,30 @@ # Samsung SCX-4824 usb 0x04e8 0x342c +# Samsung SCX-4828FN or SCX-4x28 Series +usb 0x04e8 0x342d + # Samsung SCX-4300 usb 0x04e8 0x342e # Samsung SCX-4600 usb 0x04e8 0x3433 +# Samsung CLX 3185 +usb 0x04e8 0x343d + +# Samsung SCX-3205W +usb 0x04e8 0x3441 + #Xerox WorkCentre 3119 Series usb 0x0924 0x4265 #Samsung SCX-4623 usb 0x04e8 0x3434 +#Samsung SCX-4623FW +usb 0x04e8 0x3440 + # Samsung SCX-4825FN usb 0x04e8 0x343c diff -Nru sane-backends-1.0.22/compile sane-backends-1.0.23/compile --- sane-backends-1.0.22/compile 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/compile 2011-11-21 20:17:48.000000000 +0000 @@ -1,9 +1,10 @@ #! /bin/sh # Wrapper for compilers which do not understand `-c -o'. -scriptversion=2005-05-14.22 +scriptversion=2009-10-06.20; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009 Free Software +# Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -17,8 +18,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -103,13 +103,13 @@ fi # Name of file we expect compiler to create. -cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. -# Note: use `[/.-]' here to ensure that we don't use the same name +# Note: use `[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. -lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break @@ -124,9 +124,9 @@ ret=$? if test -f "$cofile"; then - mv "$cofile" "$ofile" + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then - mv "${cofile}bj" "$ofile" + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" @@ -138,5 +138,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff -Nru sane-backends-1.0.22/config.guess sane-backends-1.0.23/config.guess --- sane-backends-1.0.22/config.guess 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/config.guess 2012-08-19 20:29:39.000000000 +0000 @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -# Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. -timestamp='2009-04-27' +timestamp='2012-08-14' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -17,9 +17,7 @@ # General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -27,16 +25,16 @@ # the same distribution terms that you use for the rest of that program. -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` @@ -56,8 +54,9 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -144,7 +143,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or - # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward @@ -170,7 +169,7 @@ arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -180,7 +179,7 @@ fi ;; *) - os=netbsd + os=netbsd ;; esac # The OS release @@ -201,6 +200,10 @@ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} @@ -223,7 +226,7 @@ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on @@ -269,7 +272,10 @@ # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - exit ;; + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead @@ -295,7 +301,7 @@ echo s390-ibm-zvmoe exit ;; *:OS400:*:*) - echo powerpc-ibm-os400 + echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} @@ -333,6 +339,9 @@ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" @@ -391,23 +400,23 @@ # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} - exit ;; + exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) - echo m68k-atari-mint${UNAME_RELEASE} + echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) - echo m68k-milan-mint${UNAME_RELEASE} - exit ;; + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) - echo m68k-hades-mint${UNAME_RELEASE} - exit ;; + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) - echo m68k-unknown-mint${UNAME_RELEASE} - exit ;; + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; @@ -477,8 +486,8 @@ echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) - # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ @@ -491,7 +500,7 @@ else echo i586-dg-dgux${UNAME_RELEASE} fi - exit ;; + exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; @@ -548,7 +557,7 @@ echo rs6000-ibm-aix3.2 fi exit ;; - *:AIX:*:[456]) + *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 @@ -591,52 +600,52 @@ 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` - case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 - 532) # CPU_PA_RISC2_0 - case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 - esac ;; - esac + esac ;; + esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); - #define _HPUX_SOURCE - #include - #include - - int main () - { - #if defined(_SC_KERNEL_BITS) - long bits = sysconf(_SC_KERNEL_BITS); - #endif - long cpu = sysconf (_SC_CPU_VERSION); - - switch (cpu) - { - case CPU_PA_RISC1_0: puts ("hppa1.0"); break; - case CPU_PA_RISC1_1: puts ("hppa1.1"); break; - case CPU_PA_RISC2_0: - #if defined(_SC_KERNEL_BITS) - switch (bits) - { - case 64: puts ("hppa2.0w"); break; - case 32: puts ("hppa2.0n"); break; - default: puts ("hppa2.0"); break; - } break; - #else /* !defined(_SC_KERNEL_BITS) */ - puts ("hppa2.0"); break; - #endif - default: puts ("hppa1.0"); break; - } - exit (0); - } + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa @@ -656,7 +665,7 @@ # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + grep -q __LP64__ then HP_ARCH="hppa2.0w" else @@ -727,22 +736,22 @@ exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd - exit ;; + exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi - exit ;; + exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd - exit ;; + exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd - exit ;; + exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd - exit ;; + exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; @@ -766,14 +775,14 @@ exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` - echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" - exit ;; + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` - echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} @@ -785,34 +794,39 @@ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) - case ${UNAME_MACHINE} in - pc98) - echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; + i*:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; i*:windows32*:*) - # uname -m includes "-pc" on this system. - echo ${UNAME_MACHINE}-mingw32 + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - *:Interix*:[3456]*) - case ${UNAME_MACHINE} in + *:Interix*:*) + case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd | genuineintel) + authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) @@ -822,6 +836,9 @@ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -851,6 +868,27 @@ i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ @@ -858,20 +896,40 @@ then echo ${UNAME_MACHINE}-unknown-linux-gnu else - echo ${UNAME_MACHINE}-unknown-linux-gnueabi + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabihf + fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) - echo cris-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) - echo crisv32-axis-linux-gnu + echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) - echo frv-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu @@ -882,78 +940,34 @@ m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - mips:Linux:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips - #undef mipsel + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips64 - #undef mips64el - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) - echo or32-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in @@ -962,14 +976,17 @@ *) echo hppa-unknown-linux-gnu ;; esac exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu @@ -977,75 +994,18 @@ sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) - echo x86_64-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu + echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both @@ -1053,11 +1013,11 @@ echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) - # Unixware is an offshoot of SVR4, but it has its own version - # number series starting with 2... - # I am not positive that other SVR4 systems won't match this, + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. - # Use sysv4.2uw... so that sysv4* matches it. + # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) @@ -1074,7 +1034,7 @@ i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1089,7 +1049,7 @@ fi exit ;; i*86:*:5:[678]*) - # UnixWare 7.x, OpenUNIX and OpenServer 6. + # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; @@ -1117,13 +1077,13 @@ exit ;; pc:*:*:*) # Left here for compatibility: - # uname -m prints for DJGPP always 'pc', but it prints nothing about - # the processor, so we play safe by assuming i586. + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp - exit ;; + exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; @@ -1158,8 +1118,8 @@ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) - /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ - && { echo i486-ncr-sysv4; exit; } ;; + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ @@ -1182,7 +1142,7 @@ rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1202,10 +1162,10 @@ echo ns32k-sni-sysv fi exit ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says - echo i586-unisys-sysv4 - exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm @@ -1231,11 +1191,11 @@ exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then - echo mips-nec-sysv${UNAME_RELEASE} + echo mips-nec-sysv${UNAME_RELEASE} else - echo mips-unknown-sysv${UNAME_RELEASE} + echo mips-unknown-sysv${UNAME_RELEASE} fi - exit ;; + exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; @@ -1248,6 +1208,9 @@ BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; @@ -1275,6 +1238,16 @@ *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} @@ -1290,7 +1263,10 @@ *:QNX:*:4*) echo i386-pc-qnx exit ;; - NSE-?:NONSTOP_KERNEL:*:*) + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) @@ -1335,13 +1311,13 @@ echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) - echo mips-sei-seiux${UNAME_RELEASE} + echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; @@ -1359,11 +1335,11 @@ i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; esac -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - eval $set_cc_for_build cat >$dummy.c < printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 - "4" + "4" #else - "" + "" #endif - ); exit (0); + ); exit (0); #endif #endif diff -Nru sane-backends-1.0.22/config.sub sane-backends-1.0.23/config.sub --- sane-backends-1.0.22/config.sub 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/config.sub 2012-08-19 20:29:52.000000000 +0000 @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 -# Free Software Foundation, Inc. +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, +# 2011, 2012 Free Software Foundation, Inc. -timestamp='2009-04-17' +timestamp='2012-08-18' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -21,9 +21,7 @@ # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -32,13 +30,16 @@ # Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -72,8 +73,9 @@ version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 +Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -120,13 +122,18 @@ # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ - uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] @@ -149,10 +156,13 @@ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -167,10 +177,10 @@ os=-chorusos basic_machine=$1 ;; - -chorusrdb) - os=-chorusrdb + -chorusrdb) + os=-chorusrdb basic_machine=$1 - ;; + ;; -hiux*) os=-hiuxwe2 ;; @@ -215,6 +225,12 @@ -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; -lynx*) os=-lynxos ;; @@ -239,17 +255,22 @@ # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ + | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ + | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ + | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ @@ -275,27 +296,39 @@ | moxie \ | mt \ | msp430 \ + | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ + | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ + | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ - | spu | strongarm \ - | tahoe | thumb | tic4x | tic80 | tron \ - | v850 | v850e \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ - | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) - # Motorola 68HC11/12. + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; @@ -305,6 +338,21 @@ basic_machine=mt-unknown ;; + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. @@ -319,25 +367,29 @@ # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ + | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | be32-* | be64-* \ | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ + | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ @@ -359,24 +411,29 @@ | mmix-* \ | mt-* \ | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ - | romp-* | rs6000-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ - | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ | tron-* \ - | v850-* | v850e-* | vax-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ | we32k-* \ - | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) @@ -401,7 +458,7 @@ basic_machine=a29k-amd os=-udi ;; - abacus) + abacus) basic_machine=abacus-unknown ;; adobe68k) @@ -467,11 +524,24 @@ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; c90) basic_machine=c90-cray os=-unicos ;; - cegcc) + cegcc) basic_machine=arm-unknown os=-cegcc ;; @@ -503,7 +573,7 @@ basic_machine=craynv-cray os=-unicosmp ;; - cr16) + cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; @@ -661,7 +731,6 @@ i370-ibm* | ibm*) basic_machine=i370-ibm ;; -# I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 @@ -719,6 +788,13 @@ basic_machine=ns32k-utek os=-sysv ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; mingw32) basic_machine=i386-pc os=-mingw32 @@ -755,10 +831,18 @@ ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; + msys) + basic_machine=i386-pc + os=-msys + ;; mvs) basic_machine=i370-ibm os=-mvs ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 @@ -823,6 +907,12 @@ np1) basic_machine=np1-gould ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; nsr-tandem) basic_machine=nsr-tandem ;; @@ -905,9 +995,10 @@ ;; power) basic_machine=power-ibm ;; - ppc) basic_machine=powerpc-unknown + ppc | ppcbe) basic_machine=powerpc-unknown ;; - ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown @@ -1001,6 +1092,9 @@ basic_machine=i860-stratus os=-sysv4 ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; sun2) basic_machine=m68000-sun ;; @@ -1057,20 +1151,8 @@ basic_machine=t90-cray os=-unicos ;; - tic54x | c54x*) - basic_machine=tic54x-unknown - os=-coff - ;; - tic55x | c55x*) - basic_machine=tic55x-unknown - os=-coff - ;; - tic6x | c6x*) - basic_machine=tic6x-unknown - os=-coff - ;; tile*) - basic_machine=tile-unknown + basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) @@ -1140,6 +1222,9 @@ xps | xps100) basic_machine=xps100-honeywell ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; ymp) basic_machine=ymp-cray os=-unicos @@ -1237,9 +1322,12 @@ if [ x"$os" != x"" ] then case $os in - # First match some system type aliases - # that might get confused with valid system types. + # First match some system type aliases + # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; @@ -1260,22 +1348,23 @@ # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -kopensolaris* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ - | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ @@ -1283,7 +1372,7 @@ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1322,7 +1411,7 @@ -opened*) os=-openedition ;; - -os400*) + -os400*) os=-os400 ;; -wince*) @@ -1371,7 +1460,7 @@ -sinix*) os=-sysv4 ;; - -tpf*) + -tpf*) os=-tpf ;; -triton*) @@ -1416,6 +1505,8 @@ -dicos*) os=-dicos ;; + -nacl*) + ;; -none) ;; *) @@ -1438,10 +1529,10 @@ # system, and we'll never get to this point. case $basic_machine in - score-*) + score-*) os=-elf ;; - spu-*) + spu-*) os=-elf ;; *-acorn) @@ -1453,8 +1544,20 @@ arm*-semi) os=-aout ;; - c4x-* | tic4x-*) - os=-coff + c4x-* | tic4x-*) + os=-coff + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff ;; # This must come before the *-dec entry. pdp10-*) @@ -1474,14 +1577,11 @@ ;; m68000-sun) os=-sunos3 - # This also exists in the configure program, but was not the - # default. - # os=-sunos4 ;; m68*-cisco) os=-aout ;; - mep-*) + mep-*) os=-elf ;; mips*-cisco) @@ -1508,7 +1608,7 @@ *-ibm) os=-aix ;; - *-knuth) + *-knuth) os=-mmixware ;; *-wec) @@ -1613,7 +1713,7 @@ -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) diff -Nru sane-backends-1.0.22/configure sane-backends-1.0.23/configure --- sane-backends-1.0.22/configure 2011-02-14 01:27:52.000000000 +0000 +++ sane-backends-1.0.23/configure 2012-08-19 20:45:11.000000000 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.66 for sane-backends 1.0.22. +# Generated by GNU Autoconf 2.68 for sane-backends 1.0.23. # # Report bugs to . # @@ -91,6 +91,7 @@ IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. +as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -224,11 +225,18 @@ # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. + # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL - exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} + case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; + esac + exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : @@ -562,8 +570,8 @@ # Identity of this package. PACKAGE_NAME='sane-backends' PACKAGE_TARNAME='sane-backends' -PACKAGE_VERSION='1.0.22' -PACKAGE_STRING='sane-backends 1.0.22' +PACKAGE_VERSION='1.0.23' +PACKAGE_STRING='sane-backends 1.0.23' PACKAGE_BUGREPORT='sane-devel@lists.alioth.debian.org' PACKAGE_URL='' @@ -620,6 +628,7 @@ SANEI_SANEI_JPEG_LO HAVE_JPEG_FALSE HAVE_JPEG_TRUE +BACKENDS COMPILE_SANED_FALSE COMPILE_SANED_TRUE configdir @@ -629,7 +638,9 @@ LIPO NMEDIT DSYMUTIL +MANIFEST_TOOL RANLIB +ac_ct_AR AR LN_S NM @@ -788,6 +799,7 @@ enable_dependency_tracking enable_warnings enable_rpath +enable_dynamic enable_pthread enable_locking with_group @@ -799,11 +811,13 @@ enable_scsibuffersize enable_scsi_directio enable_ipv6 +enable_preload enable_static enable_shared with_pic enable_fast_install with_gnu_ld +with_sysroot enable_libtool_lock with_lockdir enable_local_backends @@ -829,7 +843,9 @@ AVAHI_CFLAGS AVAHI_LIBS LIBUSB_1_0_CFLAGS -LIBUSB_1_0_LIBS' +LIBUSB_1_0_LIBS +BACKENDS +PRELOADABLE_BACKENDS' # Initialize some variables set by options. @@ -892,8 +908,9 @@ fi case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -1233,7 +1250,7 @@ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac @@ -1371,7 +1388,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sane-backends 1.0.22 to adapt to many kinds of systems. +\`configure' configures sane-backends 1.0.23 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1441,7 +1458,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sane-backends 1.0.22:";; + short | recursive ) echo "Configuration of sane-backends 1.0.23:";; esac cat <<\_ACEOF @@ -1455,6 +1472,7 @@ --enable-dependency-tracking do not reject slow dependency extractors --enable-warnings turn on tons of compiler warnings (GCC only) --enable-rpath use runtime library search path [default=yes] + --disable-dynamic Disable dynamic loading of backends --enable-pthread use pthread instead of fork (default=yes for MacOS X/MINGW, no for everything else) --enable-locking activate device locking (default=yes, but only used @@ -1468,6 +1486,7 @@ --enable-scsi-directio enable SCSI direct IO (Linux only, dangerous, see README.linux) --disable-ipv6 disable IPv6 support + --disable-preload Disable preloading of backends --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] @@ -1494,6 +1513,8 @@ --with-pic try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-sysroot=DIR Search for dependent libraries within DIR + (or the compiler's sysroot if not specified). --with-lockdir=DIR set SANE lockdir [localstatedir/lock/sane] Some influential environment variables: @@ -1520,6 +1541,9 @@ C compiler flags for LIBUSB_1_0, overriding pkg-config LIBUSB_1_0_LIBS linker flags for LIBUSB_1_0, overriding pkg-config + BACKENDS list of backends to compile + PRELOADABLE_BACKENDS + list of backends to preload into single DLL Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1587,8 +1611,8 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sane-backends configure 1.0.22 -generated by GNU Autoconf 2.66 +sane-backends configure 1.0.23 +generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation @@ -1634,7 +1658,7 @@ ac_retval=1 fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile @@ -1660,7 +1684,7 @@ mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { + test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : @@ -1671,7 +1695,7 @@ ac_retval=1 fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp @@ -1684,10 +1708,10 @@ ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : + if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 @@ -1723,7 +1747,7 @@ else ac_header_preproc=no fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } @@ -1754,7 +1778,7 @@ esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" @@ -1763,7 +1787,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel @@ -1804,7 +1828,7 @@ ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run @@ -1818,7 +1842,7 @@ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -1836,7 +1860,7 @@ eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile @@ -1881,7 +1905,7 @@ # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link @@ -1895,7 +1919,7 @@ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" @@ -1936,7 +1960,7 @@ eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type @@ -2113,7 +2137,7 @@ rm -f conftest.val fi - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_compute_int @@ -2126,7 +2150,7 @@ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : +if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -2181,15 +2205,15 @@ eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } - eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sane-backends $as_me 1.0.22, which was -generated by GNU Autoconf 2.66. Invocation command line was +It was created by sane-backends $as_me 1.0.23, which was +generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ @@ -2541,7 +2565,7 @@ V_MAJOR=1 V_MINOR=0 -V_REV=22 +V_REV=23 is_release=yes @@ -2594,7 +2618,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then : +if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2771,7 +2795,7 @@ set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : +if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then @@ -2811,7 +2835,7 @@ set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then @@ -2864,7 +2888,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then - if test "${ac_cv_path_mkdir+set}" = set; then : + if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -2915,7 +2939,7 @@ set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AWK+set}" = set; then : +if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then @@ -2955,7 +2979,7 @@ $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -3013,7 +3037,7 @@ # Define the identity of the package. PACKAGE='sane-backends' - VERSION='1.0.22' + VERSION='1.0.23' cat >>confdefs.h <<_ACEOF @@ -3081,7 +3105,7 @@ PACKAGE=sane-backends -VERSION=1.0.22 +VERSION=1.0.23 NUMBER_VERSION=${V_MAJOR}.${V_MINOR}.${V_REV} cat >>confdefs.h <<_ACEOF @@ -3120,7 +3144,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : +if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias @@ -3154,7 +3178,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : +if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then @@ -3209,7 +3233,7 @@ set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3249,7 +3273,7 @@ set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3302,7 +3326,7 @@ set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3342,7 +3366,7 @@ set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3401,7 +3425,7 @@ set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_CC+set}" = set; then : +if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then @@ -3445,7 +3469,7 @@ set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : +if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then @@ -3728,7 +3752,7 @@ ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } -if test "${ac_cv_objext+set}" = set; then : +if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -3779,7 +3803,7 @@ ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if test "${ac_cv_c_compiler_gnu+set}" = set; then : +if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -3816,7 +3840,7 @@ ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } -if test "${ac_cv_prog_cc_g+set}" = set; then : +if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag @@ -3894,7 +3918,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if test "${ac_cv_prog_cc_c89+set}" = set; then : +if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no @@ -4055,7 +4079,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : +if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then @@ -4187,7 +4211,7 @@ fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\"" = set; then : +if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4309,7 +4333,7 @@ $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -4348,7 +4372,7 @@ CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then : + if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded @@ -4378,7 +4402,7 @@ # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -4394,11 +4418,11 @@ ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi @@ -4437,7 +4461,7 @@ # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -4453,11 +4477,11 @@ ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else @@ -4477,7 +4501,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if test "${ac_cv_path_GREP+set}" = set; then : +if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then @@ -4540,7 +4564,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } -if test "${ac_cv_path_EGREP+set}" = set; then : +if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 @@ -4608,7 +4632,7 @@ if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } -if test "${ac_cv_prog_gcc_traditional+set}" = set; then : +if ${ac_cv_prog_gcc_traditional+:} false; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" @@ -4651,7 +4675,7 @@ set dummy sane-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_SANE_CONFIG_PATH+set}" = set; then : +if ${ac_cv_path_SANE_CONFIG_PATH+:} false; then : $as_echo_n "(cached) " >&6 else case $SANE_CONFIG_PATH in @@ -4692,7 +4716,7 @@ set dummy msgfmt$EXEEXT; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MSGFMT+set}" = set; then : +if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in @@ -4733,7 +4757,7 @@ set dummy xgettext$EXEEXT; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_XGETTEXT+set}" = set; then : +if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in @@ -4774,7 +4798,7 @@ set dummy msgmerge$EXEEXT; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MSGMERGE+set}" = set; then : +if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in @@ -4815,7 +4839,7 @@ set dummy latex$EXEEXT; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LATEX+set}" = set; then : +if ${ac_cv_path_LATEX+:} false; then : $as_echo_n "(cached) " >&6 else case $LATEX in @@ -4856,7 +4880,7 @@ set dummy dvips$EXEEXT; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DVIPS+set}" = set; then : +if ${ac_cv_path_DVIPS+:} false; then : $as_echo_n "(cached) " >&6 else case $DVIPS in @@ -4897,7 +4921,7 @@ set dummy makeindex$EXEEXT; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_MAKEINDEX+set}" = set; then : +if ${ac_cv_path_MAKEINDEX+:} false; then : $as_echo_n "(cached) " >&6 else case $MAKEINDEX in @@ -4947,13 +4971,14 @@ + if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : +if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in @@ -4996,7 +5021,7 @@ set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in @@ -5194,7 +5219,7 @@ $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$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 : +if ${my_cv_LINKER_RPATH+:} false; then : $as_echo_n "(cached) " >&6 else my_cv_LINKER_RPATH= @@ -5221,7 +5246,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : +if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5350,7 +5375,7 @@ ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" -if test "x$ac_cv_header_minix_config_h" = x""yes; then : +if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= @@ -5372,7 +5397,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } -if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : +if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5414,7 +5439,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } -if test "${ac_cv_search_strerror+set}" = set; then : +if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS @@ -5448,11 +5473,11 @@ fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext - if test "${ac_cv_search_strerror+set}" = set; then : + if ${ac_cv_search_strerror+:} false; then : break fi done -if test "${ac_cv_search_strerror+set}" = set; then : +if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no @@ -5496,7 +5521,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : +if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown @@ -6234,7 +6259,7 @@ ac_stdint_h=`echo include/_stdint.h` # try to shortcircuit - if the default include path of the compiler # can find a "stdint.h" header then we assume that all compilers can. -if test "${ac_cv_header_stdint_t+set}" = set; then : +if ${ac_cv_header_stdint_t+:} false; then : $as_echo_n "(cached) " >&6 else @@ -6309,7 +6334,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uintptr_t" >&5 $as_echo_n "checking for stdint uintptr_t... " >&6; } -if test "${ac_cv_header_stdint_x+set}" = set; then : +if ${ac_cv_header_stdint_x+:} false; then : $as_echo_n "(cached) " >&6 else @@ -6322,7 +6347,7 @@ unset ac_cv_type_uint64_t ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "#include <$i> " -if test "x$ac_cv_type_uintptr_t" = x""yes; then : +if test "x$ac_cv_type_uintptr_t" = xyes; then : ac_cv_header_stdint_x=$i else continue @@ -6330,7 +6355,7 @@ ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> " -if test "x$ac_cv_type_uint64_t" = x""yes; then : +if test "x$ac_cv_type_uint64_t" = xyes; then : and64="/uint64_t" else and64="" @@ -6351,7 +6376,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint uint32_t" >&5 $as_echo_n "checking for stdint uint32_t... " >&6; } -if test "${ac_cv_header_stdint_o+set}" = set; then : +if ${ac_cv_header_stdint_o+:} false; then : $as_echo_n "(cached) " >&6 else @@ -6364,7 +6389,7 @@ unset ac_cv_type_uint64_t ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "#include <$i> " -if test "x$ac_cv_type_uint32_t" = x""yes; then : +if test "x$ac_cv_type_uint32_t" = xyes; then : ac_cv_header_stdint_o=$i else continue @@ -6372,7 +6397,7 @@ ac_fn_c_check_type "$LINENO" "uint64_t" "ac_cv_type_uint64_t" "#include<$i> " -if test "x$ac_cv_type_uint64_t" = x""yes; then : +if test "x$ac_cv_type_uint64_t" = xyes; then : and64="/uint64_t" else and64="" @@ -6396,7 +6421,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint u_int32_t" >&5 $as_echo_n "checking for stdint u_int32_t... " >&6; } -if test "${ac_cv_header_stdint_u+set}" = set; then : +if ${ac_cv_header_stdint_u+:} false; then : $as_echo_n "(cached) " >&6 else @@ -6408,7 +6433,7 @@ unset ac_cv_type_u_int64_t ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "#include <$i> " -if test "x$ac_cv_type_u_int32_t" = x""yes; then : +if test "x$ac_cv_type_u_int32_t" = xyes; then : ac_cv_header_stdint_u=$i else continue @@ -6416,7 +6441,7 @@ ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "#include<$i> " -if test "x$ac_cv_type_u_int64_t" = x""yes; then : +if test "x$ac_cv_type_u_int64_t" = xyes; then : and64="/u_int64_t" else and64="" @@ -6447,7 +6472,7 @@ # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char" >&5 $as_echo_n "checking size of char... " >&6; } -if test "${ac_cv_sizeof_char+set}" = set; then : +if ${ac_cv_sizeof_char+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char))" "ac_cv_sizeof_char" "$ac_includes_default"; then : @@ -6480,7 +6505,7 @@ # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 $as_echo_n "checking size of short... " >&6; } -if test "${ac_cv_sizeof_short+set}" = set; then : +if ${ac_cv_sizeof_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : @@ -6513,7 +6538,7 @@ # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 $as_echo_n "checking size of int... " >&6; } -if test "${ac_cv_sizeof_int+set}" = set; then : +if ${ac_cv_sizeof_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : @@ -6546,7 +6571,7 @@ # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 $as_echo_n "checking size of long... " >&6; } -if test "${ac_cv_sizeof_long+set}" = set; then : +if ${ac_cv_sizeof_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : @@ -6579,7 +6604,7 @@ # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void*" >&5 $as_echo_n "checking size of void*... " >&6; } -if test "${ac_cv_sizeof_voidp+set}" = set; then : +if ${ac_cv_sizeof_voidp+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void*))" "ac_cv_sizeof_voidp" "$ac_includes_default"; then : @@ -6658,19 +6683,19 @@ unset ac_cv_type_int_fast32_t ac_fn_c_check_type "$LINENO" "int_least32_t" "ac_cv_type_int_least32_t" "#include <$ac_cv_header_stdint> " -if test "x$ac_cv_type_int_least32_t" = x""yes; then : +if test "x$ac_cv_type_int_least32_t" = xyes; then : fi ac_fn_c_check_type "$LINENO" "int_fast32_t" "ac_cv_type_int_fast32_t" "#include<$ac_cv_header_stdint> " -if test "x$ac_cv_type_int_fast32_t" = x""yes; then : +if test "x$ac_cv_type_int_fast32_t" = xyes; then : fi ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "#include <$ac_cv_header_stdint> " -if test "x$ac_cv_type_intmax_t" = x""yes; then : +if test "x$ac_cv_type_intmax_t" = xyes; then : fi @@ -6691,20 +6716,29 @@ +# Check whether --enable-dynamic was given. +if test "${enable_dynamic+set}" = set; then : + enableval=$enable_dynamic; enable_dynamic=$enableval +else + enable_dynamic=auto +fi + DL_LIBS="" - if test "${enable_dynamic}" != "no"; then + if test "${enable_dynamic}" = "auto"; then + # default to disabled unless library found. + enable_dynamic=no # dlopen for ac_header in dlfcn.h do : ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : +if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : +if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -6738,7 +6772,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : DL_LIBS=-ldl fi @@ -6747,7 +6781,7 @@ for ac_func in dlopen do : ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : +if test "x$ac_cv_func_dlopen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLOPEN 1 _ACEOF @@ -6765,13 +6799,13 @@ for ac_header in dl.h do : ac_fn_c_check_header_mongrel "$LINENO" "dl.h" "ac_cv_header_dl_h" "$ac_includes_default" -if test "x$ac_cv_header_dl_h" = x""yes; then : +if test "x$ac_cv_header_dl_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DL_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : +if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -6805,7 +6839,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : DL_LIBS=-ldld fi @@ -6814,7 +6848,7 @@ for ac_func in shl_load do : ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : +if test "x$ac_cv_func_shl_load" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SHL_LOAD 1 _ACEOF @@ -6833,14 +6867,14 @@ for ac_header in mach-o/dyld.h do : ac_fn_c_check_header_mongrel "$LINENO" "mach-o/dyld.h" "ac_cv_header_mach_o_dyld_h" "$ac_includes_default" -if test "x$ac_cv_header_mach_o_dyld_h" = x""yes; then : +if test "x$ac_cv_header_mach_o_dyld_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MACH_O_DYLD_H 1 _ACEOF for ac_func in NSLinkModule do : ac_fn_c_check_func "$LINENO" "NSLinkModule" "ac_cv_func_NSLinkModule" -if test "x$ac_cv_func_NSLinkModule" = x""yes; then : +if test "x$ac_cv_func_NSLinkModule" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NSLINKMODULE 1 _ACEOF @@ -6865,7 +6899,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 $as_echo_n "checking for sqrt in -lm... " >&6; } -if test "${ac_cv_lib_m_sqrt+set}" = set; then : +if ${ac_cv_lib_m_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -6899,7 +6933,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 $as_echo "$ac_cv_lib_m_sqrt" >&6; } -if test "x$ac_cv_lib_m_sqrt" = x""yes; then : +if test "x$ac_cv_lib_m_sqrt" = xyes; then : MATH_LIB="-lm" fi @@ -6908,7 +6942,7 @@ os2*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sylog in -lsyslog" >&5 $as_echo_n "checking for sylog in -lsyslog... " >&6; } -if test "${ac_cv_lib_syslog_sylog+set}" = set; then : +if ${ac_cv_lib_syslog_sylog+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -6942,7 +6976,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_syslog_sylog" >&5 $as_echo "$ac_cv_lib_syslog_sylog" >&6; } -if test "x$ac_cv_lib_syslog_sylog" = x""yes; then : +if test "x$ac_cv_lib_syslog_sylog" = xyes; then : SYSLOG_LIBS="-lsyslog" fi @@ -6950,7 +6984,7 @@ beos*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for syslog in -lbe" >&5 $as_echo_n "checking for syslog in -lbe... " >&6; } -if test "${ac_cv_lib_be_syslog+set}" = set; then : +if ${ac_cv_lib_be_syslog+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -6984,7 +7018,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_be_syslog" >&5 $as_echo "$ac_cv_lib_be_syslog" >&6; } -if test "x$ac_cv_lib_be_syslog" = x""yes; then : +if test "x$ac_cv_lib_be_syslog" = xyes; then : SYSLOG_LIBS="-lbe" fi @@ -6995,7 +7029,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_start_decompress in -ljpeg" >&5 $as_echo_n "checking for jpeg_start_decompress in -ljpeg... " >&6; } -if test "${ac_cv_lib_jpeg_jpeg_start_decompress+set}" = set; then : +if ${ac_cv_lib_jpeg_jpeg_start_decompress+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -7029,10 +7063,10 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_jpeg_start_decompress" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_start_decompress" >&6; } -if test "x$ac_cv_lib_jpeg_jpeg_start_decompress" = x""yes; then : +if test "x$ac_cv_lib_jpeg_jpeg_start_decompress" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "jconfig.h" "ac_cv_header_jconfig_h" "$ac_includes_default" -if test "x$ac_cv_header_jconfig_h" = x""yes; then : +if test "x$ac_cv_header_jconfig_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeglib - version >= 61 (6a)" >&5 $as_echo_n "checking for jpeglib - version >= 61 (6a)... " >&6; } @@ -7073,7 +7107,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIFFFdOpen in -ltiff" >&5 $as_echo_n "checking for TIFFFdOpen in -ltiff... " >&6; } -if test "${ac_cv_lib_tiff_TIFFFdOpen+set}" = set; then : +if ${ac_cv_lib_tiff_TIFFFdOpen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -7107,10 +7141,10 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tiff_TIFFFdOpen" >&5 $as_echo "$ac_cv_lib_tiff_TIFFFdOpen" >&6; } -if test "x$ac_cv_lib_tiff_TIFFFdOpen" = x""yes; then : +if test "x$ac_cv_lib_tiff_TIFFFdOpen" = xyes; then : ac_fn_c_check_header_mongrel "$LINENO" "tiffio.h" "ac_cv_header_tiffio_h" "$ac_includes_default" -if test "x$ac_cv_header_tiffio_h" = x""yes; then : +if test "x$ac_cv_header_tiffio_h" = xyes; then : sane_cv_use_libtiff="yes"; TIFF_LIBS="-ltiff" fi @@ -7122,11 +7156,11 @@ ac_fn_c_check_header_mongrel "$LINENO" "ieee1284.h" "ac_cv_header_ieee1284_h" "$ac_includes_default" -if test "x$ac_cv_header_ieee1284_h" = x""yes; then : +if test "x$ac_cv_header_ieee1284_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libieee1284 >= 0.1.5" >&5 $as_echo_n "checking for libieee1284 >= 0.1.5... " >&6; } -if test "${sane_cv_use_libieee1284+set}" = set; then : +if ${sane_cv_use_libieee1284+:} false; then : $as_echo_n "(cached) " >&6 else @@ -7197,14 +7231,14 @@ for ac_header in pthread.h do : ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" -if test "x$ac_cv_header_pthread_h" = x""yes; then : +if test "x$ac_cv_header_pthread_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTHREAD_H 1 _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in -lpthread" >&5 $as_echo_n "checking for pthread_create in -lpthread... " >&6; } -if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then : +if ${ac_cv_lib_pthread_pthread_create+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -7238,7 +7272,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_create" >&5 $as_echo "$ac_cv_lib_pthread_pthread_create" >&6; } -if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then : +if test "x$ac_cv_lib_pthread_pthread_create" = xyes; then : PTHREAD_LIBS="-lpthread" fi @@ -7372,7 +7406,7 @@ set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_HAVE_GPHOTO2+set}" = set; then : +if ${ac_cv_prog_HAVE_GPHOTO2+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$HAVE_GPHOTO2"; then @@ -7412,7 +7446,7 @@ set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_HAVE_GPHOTO2+set}" = set; then : +if ${ac_cv_prog_ac_ct_HAVE_GPHOTO2+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_HAVE_GPHOTO2"; then @@ -7474,7 +7508,7 @@ for ac_func in gp_camera_init do : ac_fn_c_check_func "$LINENO" "gp_camera_init" "ac_cv_func_gp_camera_init" -if test "x$ac_cv_func_gp_camera_init" = x""yes; then : +if test "x$ac_cv_func_gp_camera_init" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GP_CAMERA_INIT 1 _ACEOF @@ -7488,7 +7522,7 @@ for ac_func in gp_port_info_get_path do : ac_fn_c_check_func "$LINENO" "gp_port_info_get_path" "ac_cv_func_gp_port_info_get_path" -if test "x$ac_cv_func_gp_port_info_get_path" = x""yes; then : +if test "x$ac_cv_func_gp_port_info_get_path" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GP_PORT_INFO_GET_PATH 1 _ACEOF @@ -7546,6 +7580,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBV4L_CFLAGS=`$PKG_CONFIG --cflags "libv4l1" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi @@ -7562,6 +7597,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBV4L_LIBS=`$PKG_CONFIG --libs "libv4l1" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi @@ -7581,9 +7617,9 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBV4L_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libv4l1" 2>&1` + LIBV4L_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libv4l1" 2>&1` else - LIBV4L_PKG_ERRORS=`$PKG_CONFIG --print-errors "libv4l1" 2>&1` + LIBV4L_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libv4l1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBV4L_PKG_ERRORS" >&5 @@ -7627,6 +7663,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVAHI_CFLAGS=`$PKG_CONFIG --cflags " avahi-client >= 0.6.24 " 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi @@ -7643,6 +7680,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_AVAHI_LIBS=`$PKG_CONFIG --libs " avahi-client >= 0.6.24 " 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi @@ -7662,9 +7700,9 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - AVAHI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors " avahi-client >= 0.6.24 " 2>&1` + AVAHI_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " avahi-client >= 0.6.24 " 2>&1` else - AVAHI_PKG_ERRORS=`$PKG_CONFIG --print-errors " avahi-client >= 0.6.24 " 2>&1` + AVAHI_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " avahi-client >= 0.6.24 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$AVAHI_PKG_ERRORS" >&5 @@ -7687,7 +7725,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sane_init in -lsane" >&5 $as_echo_n "checking for sane_init in -lsane... " >&6; } -if test "${ac_cv_lib_sane_sane_init+set}" = set; then : +if ${ac_cv_lib_sane_sane_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -7721,7 +7759,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sane_sane_init" >&5 $as_echo "$ac_cv_lib_sane_sane_init" >&6; } -if test "x$ac_cv_lib_sane_sane_init" = x""yes; then : +if test "x$ac_cv_lib_sane_sane_init" = xyes; then : LIBSANE_EXISTS="yes" fi @@ -7742,7 +7780,7 @@ set dummy net-snmp-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_SNMP_CONFIG_PATH+set}" = set; then : +if ${ac_cv_path_SNMP_CONFIG_PATH+:} false; then : $as_echo_n "(cached) " >&6 else case $SNMP_CONFIG_PATH in @@ -7781,7 +7819,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for snmp_timeout in -lnetsnmp" >&5 $as_echo_n "checking for snmp_timeout in -lnetsnmp... " >&6; } -if test "${ac_cv_lib_netsnmp_snmp_timeout+set}" = set; then : +if ${ac_cv_lib_netsnmp_snmp_timeout+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -7815,7 +7853,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_netsnmp_snmp_timeout" >&5 $as_echo "$ac_cv_lib_netsnmp_snmp_timeout" >&6; } -if test "x$ac_cv_lib_netsnmp_snmp_timeout" = x""yes; then : +if test "x$ac_cv_lib_netsnmp_snmp_timeout" = xyes; then : LIBSNMP_EXISTS="yes" fi @@ -7861,7 +7899,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } -if test "${ac_cv_header_stdc+set}" = set; then : +if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -7993,7 +8031,7 @@ do : ac_fn_c_check_header_compile "$LINENO" "asm/io.h" "ac_cv_header_asm_io_h" "#include " -if test "x$ac_cv_header_asm_io_h" = x""yes; then : +if test "x$ac_cv_header_asm_io_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ASM_IO_H 1 _ACEOF @@ -8026,12 +8064,25 @@ fi +for ac_header in winsock2.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" +if test "x$ac_cv_header_winsock2_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_WINSOCK2_H 1 +_ACEOF + SOCKET_LIB="-lws2_32" +fi + +done + + ac_fn_c_check_header_mongrel "$LINENO" "resmgr.h" "ac_cv_header_resmgr_h" "$ac_includes_default" -if test "x$ac_cv_header_resmgr_h" = x""yes; then : +if test "x$ac_cv_header_resmgr_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rsm_open_device in -lresmgr" >&5 $as_echo_n "checking for rsm_open_device in -lresmgr... " >&6; } -if test "${ac_cv_lib_resmgr_rsm_open_device+set}" = set; then : +if ${ac_cv_lib_resmgr_rsm_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -8065,7 +8116,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resmgr_rsm_open_device" >&5 $as_echo "$ac_cv_lib_resmgr_rsm_open_device" >&6; } -if test "x$ac_cv_lib_resmgr_rsm_open_device" = x""yes; then : +if test "x$ac_cv_lib_resmgr_rsm_open_device" = xyes; then : $as_echo "#define HAVE_RESMGR 1" >>confdefs.h @@ -8083,7 +8134,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } -if test "${ac_cv_type_signal+set}" = set; then : +if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8115,7 +8166,7 @@ ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" -if test "x$ac_cv_type_size_t" = x""yes; then : +if test "x$ac_cv_type_size_t" = xyes; then : else @@ -8126,7 +8177,7 @@ fi ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" -if test "x$ac_cv_type_pid_t" = x""yes; then : +if test "x$ac_cv_type_pid_t" = xyes; then : else @@ -8137,7 +8188,7 @@ fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" -if test "x$ac_cv_type_ssize_t" = x""yes; then : +if test "x$ac_cv_type_ssize_t" = xyes; then : else @@ -8149,7 +8200,7 @@ ac_fn_c_check_type "$LINENO" "u_char" "ac_cv_type_u_char" "$ac_includes_default" -if test "x$ac_cv_type_u_char" = x""yes; then : +if test "x$ac_cv_type_u_char" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_U_CHAR 1 @@ -8158,7 +8209,7 @@ fi ac_fn_c_check_type "$LINENO" "u_short" "ac_cv_type_u_short" "$ac_includes_default" -if test "x$ac_cv_type_u_short" = x""yes; then : +if test "x$ac_cv_type_u_short" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_U_SHORT 1 @@ -8167,7 +8218,7 @@ fi ac_fn_c_check_type "$LINENO" "u_int" "ac_cv_type_u_int" "$ac_includes_default" -if test "x$ac_cv_type_u_int" = x""yes; then : +if test "x$ac_cv_type_u_int" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_U_INT 1 @@ -8176,7 +8227,7 @@ fi ac_fn_c_check_type "$LINENO" "u_long" "ac_cv_type_u_long" "$ac_includes_default" -if test "x$ac_cv_type_u_long" = x""yes; then : +if test "x$ac_cv_type_u_long" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_U_LONG 1 @@ -8317,7 +8368,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 $as_echo_n "checking whether byte ordering is bigendian... " >&6; } -if test "${ac_cv_c_bigendian+set}" = set; then : +if ${ac_cv_c_bigendian+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_bigendian=unknown @@ -8541,7 +8592,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } -if test "${ac_cv_c_const+set}" = set; then : +if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8621,7 +8672,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } -if test "${ac_cv_c_inline+set}" = set; then : +if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no @@ -8664,12 +8715,12 @@ ac_fn_c_check_func "$LINENO" "gethostbyaddr" "ac_cv_func_gethostbyaddr" -if test "x$ac_cv_func_gethostbyaddr" = x""yes; then : +if test "x$ac_cv_func_gethostbyaddr" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyaddr in -lbind" >&5 $as_echo_n "checking for gethostbyaddr in -lbind... " >&6; } -if test "${ac_cv_lib_bind_gethostbyaddr+set}" = set; then : +if ${ac_cv_lib_bind_gethostbyaddr+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -8703,19 +8754,19 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bind_gethostbyaddr" >&5 $as_echo "$ac_cv_lib_bind_gethostbyaddr" >&6; } -if test "x$ac_cv_lib_bind_gethostbyaddr" = x""yes; then : +if test "x$ac_cv_lib_bind_gethostbyaddr" = xyes; then : BIND_LIB="-lbind" fi fi ac_fn_c_check_func "$LINENO" "gethostbyaddr" "ac_cv_func_gethostbyaddr" -if test "x$ac_cv_func_gethostbyaddr" = x""yes; then : +if test "x$ac_cv_func_gethostbyaddr" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyaddr in -lnsl" >&5 $as_echo_n "checking for gethostbyaddr in -lnsl... " >&6; } -if test "${ac_cv_lib_nsl_gethostbyaddr+set}" = set; then : +if ${ac_cv_lib_nsl_gethostbyaddr+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -8749,19 +8800,19 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyaddr" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyaddr" >&6; } -if test "x$ac_cv_lib_nsl_gethostbyaddr" = x""yes; then : +if test "x$ac_cv_lib_nsl_gethostbyaddr" = xyes; then : NSL_LIB="-lnsl" fi fi ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket" -if test "x$ac_cv_func_socket" = x""yes; then : - SOCKET_LIBS= +if test "x$ac_cv_func_socket" = xyes; then : + else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 $as_echo_n "checking for socket in -lsocket... " >&6; } -if test "${ac_cv_lib_socket_socket+set}" = set; then : +if ${ac_cv_lib_socket_socket+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -8795,19 +8846,19 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 $as_echo "$ac_cv_lib_socket_socket" >&6; } -if test "x$ac_cv_lib_socket_socket" = x""yes; then : +if test "x$ac_cv_lib_socket_socket" = xyes; then : SOCKET_LIB="-lsocket" fi fi ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton" -if test "x$ac_cv_func_inet_aton" = x""yes; then : +if test "x$ac_cv_func_inet_aton" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inet_aton in -lresolv" >&5 $as_echo_n "checking for inet_aton in -lresolv... " >&6; } -if test "${ac_cv_lib_resolv_inet_aton+set}" = set; then : +if ${ac_cv_lib_resolv_inet_aton+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -8841,7 +8892,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_inet_aton" >&5 $as_echo "$ac_cv_lib_resolv_inet_aton" >&6; } -if test "x$ac_cv_lib_resolv_inet_aton" = x""yes; then : +if test "x$ac_cv_lib_resolv_inet_aton" = xyes; then : RESOLV_LIB="-lresolv" fi @@ -8866,7 +8917,7 @@ done ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" -if test "x$ac_cv_func_inet_ntop" = x""yes; then : +if test "x$ac_cv_func_inet_ntop" = xyes; then : $as_echo "#define HAVE_INET_NTOP 1" >>confdefs.h else @@ -8879,7 +8930,7 @@ fi ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" -if test "x$ac_cv_func_inet_pton" = x""yes; then : +if test "x$ac_cv_func_inet_pton" = xyes; then : $as_echo "#define HAVE_INET_PTON 1" >>confdefs.h else @@ -8903,7 +8954,7 @@ # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } -if test "${ac_cv_working_alloca_h+set}" = set; then : +if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8936,7 +8987,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } -if test "${ac_cv_func_alloca_works+set}" = set; then : +if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8955,7 +9006,7 @@ #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); +void *alloca (size_t); # endif # endif # endif @@ -8999,7 +9050,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } -if test "${ac_cv_os_cray+set}" = set; then : +if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -9040,7 +9091,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } -if test "${ac_cv_c_stack_direction+set}" = set; then : +if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : @@ -9115,7 +9166,7 @@ for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" -if test "x$ac_cv_func_getpagesize" = x""yes; then : +if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF @@ -9125,7 +9176,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } -if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then : +if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : @@ -9292,7 +9343,7 @@ for ac_func in atexit ioperm i386_set_ioperm \ mkdir strftime strstr strtod \ cfmakeraw tcsendbreak strcasecmp strncasecmp _portaccess \ - getaddrinfo getnameinfo poll setitimer iopl + getaddrinfo getnameinfo poll setitimer iopl getuid getpass do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" @@ -9305,7 +9356,7 @@ done ac_fn_c_check_func "$LINENO" "getenv" "ac_cv_func_getenv" -if test "x$ac_cv_func_getenv" = x""yes; then : +if test "x$ac_cv_func_getenv" = xyes; then : $as_echo "#define HAVE_GETENV 1" >>confdefs.h else @@ -9318,7 +9369,7 @@ fi ac_fn_c_check_func "$LINENO" "isfdtype" "ac_cv_func_isfdtype" -if test "x$ac_cv_func_isfdtype" = x""yes; then : +if test "x$ac_cv_func_isfdtype" = xyes; then : $as_echo "#define HAVE_ISFDTYPE 1" >>confdefs.h else @@ -9331,7 +9382,7 @@ fi ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" -if test "x$ac_cv_func_sigprocmask" = x""yes; then : +if test "x$ac_cv_func_sigprocmask" = xyes; then : $as_echo "#define HAVE_SIGPROCMASK 1" >>confdefs.h else @@ -9344,7 +9395,7 @@ fi ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" -if test "x$ac_cv_func_snprintf" = x""yes; then : +if test "x$ac_cv_func_snprintf" = xyes; then : $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h else @@ -9357,7 +9408,7 @@ fi ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" -if test "x$ac_cv_func_strcasestr" = x""yes; then : +if test "x$ac_cv_func_strcasestr" = xyes; then : $as_echo "#define HAVE_STRCASESTR 1" >>confdefs.h else @@ -9370,7 +9421,7 @@ fi ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" -if test "x$ac_cv_func_strdup" = x""yes; then : +if test "x$ac_cv_func_strdup" = xyes; then : $as_echo "#define HAVE_STRDUP 1" >>confdefs.h else @@ -9383,7 +9434,7 @@ fi ac_fn_c_check_func "$LINENO" "strndup" "ac_cv_func_strndup" -if test "x$ac_cv_func_strndup" = x""yes; then : +if test "x$ac_cv_func_strndup" = xyes; then : $as_echo "#define HAVE_STRNDUP 1" >>confdefs.h else @@ -9396,7 +9447,7 @@ fi ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep" -if test "x$ac_cv_func_strsep" = x""yes; then : +if test "x$ac_cv_func_strsep" = xyes; then : $as_echo "#define HAVE_STRSEP 1" >>confdefs.h else @@ -9409,7 +9460,7 @@ fi ac_fn_c_check_func "$LINENO" "usleep" "ac_cv_func_usleep" -if test "x$ac_cv_func_usleep" = x""yes; then : +if test "x$ac_cv_func_usleep" = xyes; then : $as_echo "#define HAVE_USLEEP 1" >>confdefs.h else @@ -9421,8 +9472,34 @@ fi +ac_fn_c_check_func "$LINENO" "sleep" "ac_cv_func_sleep" +if test "x$ac_cv_func_sleep" = xyes; then : + $as_echo "#define HAVE_SLEEP 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" sleep.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS sleep.$ac_objext" + ;; +esac + +fi + +ac_fn_c_check_func "$LINENO" "syslog" "ac_cv_func_syslog" +if test "x$ac_cv_func_syslog" = xyes; then : + $as_echo "#define HAVE_SYSLOG 1" >>confdefs.h + +else + case " $LIBOBJS " in + *" syslog.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS syslog.$ac_objext" + ;; +esac + +fi + ac_fn_c_check_func "$LINENO" "vsyslog" "ac_cv_func_vsyslog" -if test "x$ac_cv_func_vsyslog" = x""yes; then : +if test "x$ac_cv_func_vsyslog" = xyes; then : $as_echo "#define HAVE_VSYSLOG 1" >>confdefs.h else @@ -9453,7 +9530,7 @@ for ac_func in getopt_long do : ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" -if test "x$ac_cv_func_getopt_long" = x""yes; then : +if test "x$ac_cv_func_getopt_long" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETOPT_LONG 1 _ACEOF @@ -9469,6 +9546,20 @@ fi +nl added by PN 3/2/12 to detect cups +$as_echo "checking for cups" +if test -e /usr/include/cups/cups.h ; then + +$as_echo "#define HAVE_CUPS 1" >>confdefs.h + + with_cups="yes" + LIBS="-lcups $LIBS" +else + $as_echo "cups.h not found, you may want to install a cups development package" + $as_echo "in order to autodetect network scanners in kodakaio." + with_cups="no" +fi + # Check whether --enable-libusb_1_0 was given. if test "${enable_libusb_1_0+set}" = set; then : @@ -9492,7 +9583,7 @@ for ac_header in be/drivers/USB_scanner.h do : ac_fn_c_check_header_mongrel "$LINENO" "be/drivers/USB_scanner.h" "ac_cv_header_be_drivers_USB_scanner_h" "$ac_includes_default" -if test "x$ac_cv_header_be_drivers_USB_scanner_h" = x""yes; then : +if test "x$ac_cv_header_be_drivers_USB_scanner_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BE_DRIVERS_USB_SCANNER_H 1 _ACEOF @@ -9509,10 +9600,10 @@ #include " -if test "x$ac_cv_header_usbcalls_h" = x""yes; then : +if test "x$ac_cv_header_usbcalls_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UsbQueryNumberDevices in -lusbcall" >&5 $as_echo_n "checking for UsbQueryNumberDevices in -lusbcall... " >&6; } -if test "${ac_cv_lib_usbcall_UsbQueryNumberDevices+set}" = set; then : +if ${ac_cv_lib_usbcall_UsbQueryNumberDevices+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -9546,7 +9637,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_usbcall_UsbQueryNumberDevices" >&5 $as_echo "$ac_cv_lib_usbcall_UsbQueryNumberDevices" >&6; } -if test "x$ac_cv_lib_usbcall_UsbQueryNumberDevices" = x""yes; then : +if test "x$ac_cv_lib_usbcall_UsbQueryNumberDevices" = xyes; then : USB_LIBS="$USB_LIBS -lusbcall" HAVE_USB=yes fi @@ -9573,6 +9664,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBUSB_1_0_CFLAGS=`$PKG_CONFIG --cflags " libusb-1.0 >= 1.0.0 " 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi @@ -9589,6 +9681,7 @@ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBUSB_1_0_LIBS=`$PKG_CONFIG --libs " libusb-1.0 >= 1.0.0 " 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi @@ -9608,9 +9701,9 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - LIBUSB_1_0_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors " libusb-1.0 >= 1.0.0 " 2>&1` + LIBUSB_1_0_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs " libusb-1.0 >= 1.0.0 " 2>&1` else - LIBUSB_1_0_PKG_ERRORS=`$PKG_CONFIG --print-errors " libusb-1.0 >= 1.0.0 " 2>&1` + LIBUSB_1_0_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs " libusb-1.0 >= 1.0.0 " 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBUSB_1_0_PKG_ERRORS" >&5 @@ -9636,10 +9729,10 @@ if test "$have_libusb_1_0" = "no"; then ac_fn_c_check_header_mongrel "$LINENO" "usb.h" "ac_cv_header_usb_h" "$ac_includes_default" -if test "x$ac_cv_header_usb_h" = x""yes; then : +if test "x$ac_cv_header_usb_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for usb_interrupt_read in -lusb" >&5 $as_echo_n "checking for usb_interrupt_read in -lusb... " >&6; } -if test "${ac_cv_lib_usb_usb_interrupt_read+set}" = set; then : +if ${ac_cv_lib_usb_usb_interrupt_read+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -9673,7 +9766,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_usb_usb_interrupt_read" >&5 $as_echo "$ac_cv_lib_usb_usb_interrupt_read" >&6; } -if test "x$ac_cv_lib_usb_usb_interrupt_read" = x""yes; then : +if test "x$ac_cv_lib_usb_usb_interrupt_read" = xyes; then : USB_LIBS="$USB_LIBS -lusb" HAVE_USB=yes fi @@ -9681,6 +9774,58 @@ fi + for ac_header in lusb0_usb.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "lusb0_usb.h" "ac_cv_header_lusb0_usb_h" "$ac_includes_default" +if test "x$ac_cv_header_lusb0_usb_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LUSB0_USB_H 1 +_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for usb_interrupt_read in -lusb" >&5 +$as_echo_n "checking for usb_interrupt_read in -lusb... " >&6; } +if ${ac_cv_lib_usb_usb_interrupt_read+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lusb $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char usb_interrupt_read (); +int +main () +{ +return usb_interrupt_read (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_usb_usb_interrupt_read=yes +else + ac_cv_lib_usb_usb_interrupt_read=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_usb_usb_interrupt_read" >&5 +$as_echo "$ac_cv_lib_usb_usb_interrupt_read" >&6; } +if test "x$ac_cv_lib_usb_usb_interrupt_read" = xyes; then : + USB_LIBS="$USB_LIBS -lusb" + HAVE_USB=yes +fi + +fi + +done + fi ;; esac @@ -9734,7 +9879,7 @@ do : ac_fn_c_check_header_compile "$LINENO" "io/cam/cam.h" "ac_cv_header_io_cam_cam_h" "#include " -if test "x$ac_cv_header_io_cam_cam_h" = x""yes; then : +if test "x$ac_cv_header_io_cam_cam_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_IO_CAM_CAM_H 1 _ACEOF @@ -9743,6 +9888,20 @@ done +for ac_header in ntddscsi.h ddk/ntddscsi.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#include +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + if test "$ac_cv_header_sys_scsiio_h" = "yes" \ -a "$ac_cv_header_scsi_h" = "yes"; then @@ -9775,7 +9934,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for scsireq_enter in -lscsi" >&5 $as_echo_n "checking for scsireq_enter in -lscsi... " >&6; } -if test "${ac_cv_lib_scsi_scsireq_enter+set}" = set; then : +if ${ac_cv_lib_scsi_scsireq_enter+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -9809,14 +9968,14 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_scsi_scsireq_enter" >&5 $as_echo "$ac_cv_lib_scsi_scsireq_enter" >&6; } -if test "x$ac_cv_lib_scsi_scsireq_enter" = x""yes; then : +if test "x$ac_cv_lib_scsi_scsireq_enter" = xyes; then : SCSI_LIBS="-lscsi" fi # FreeBSD needs this { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cam_open_device in -lcam" >&5 $as_echo_n "checking for cam_open_device in -lcam... " >&6; } -if test "${ac_cv_lib_cam_cam_open_device+set}" = set; then : +if ${ac_cv_lib_cam_cam_open_device+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -9850,7 +10009,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cam_cam_open_device" >&5 $as_echo "$ac_cv_lib_cam_cam_open_device" >&6; } -if test "x$ac_cv_lib_cam_cam_open_device" = x""yes; then : +if test "x$ac_cv_lib_cam_cam_open_device" = xyes; then : SCSI_LIBS="-lcam" fi # FreeBSD 3+ needs this @@ -9858,7 +10017,7 @@ for ac_func in scsireq_enter do : ac_fn_c_check_func "$LINENO" "scsireq_enter" "ac_cv_func_scsireq_enter" -if test "x$ac_cv_func_scsireq_enter" = x""yes; then : +if test "x$ac_cv_func_scsireq_enter" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SCSIREQ_ENTER 1 _ACEOF @@ -10100,6 +10259,14 @@ ipv6="no" fi +# Check whether --enable-preload was given. +if test "${enable_preload+set}" = set; then : + enableval=$enable_preload; enable_preload=$enableval +else + enable_preload=auto +fi + + enable_win32_dll=yes case $host in @@ -10109,7 +10276,7 @@ set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AS+set}" = set; then : +if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then @@ -10149,7 +10316,7 @@ set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : +if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then @@ -10201,7 +10368,7 @@ set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DLLTOOL+set}" = set; then : +if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then @@ -10241,7 +10408,7 @@ set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then @@ -10293,7 +10460,7 @@ set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then @@ -10333,7 +10500,7 @@ set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then @@ -10442,8 +10609,8 @@ -macro_version='2.2.10' -macro_revision='1.3175' +macro_version='2.4' +macro_revision='1.3293' @@ -10483,7 +10650,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. -if test "X`print -r -- -n 2>/dev/null`" = X-n && \ +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -10530,7 +10697,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } -if test "${ac_cv_path_SED+set}" = set; then : +if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ @@ -10612,7 +10779,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } -if test "${ac_cv_path_FGREP+set}" = set; then : +if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 @@ -10743,7 +10910,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi -if test "${lt_cv_path_LD+set}" = set; then : +if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then @@ -10783,7 +10950,7 @@ test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if test "${lt_cv_prog_gnu_ld+set}" = set; then : +if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. @@ -10810,7 +10977,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if test "${lt_cv_path_NM+set}" = set; then : +if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then @@ -10873,7 +11040,7 @@ set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DUMPBIN+set}" = set; then : +if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then @@ -10917,7 +11084,7 @@ set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : +if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then @@ -10989,7 +11156,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } -if test "${lt_cv_nm_interface+set}" = set; then : +if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" @@ -11024,7 +11191,7 @@ # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } -if test "${lt_cv_sys_max_cmd_len+set}" = set; then : +if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 @@ -11169,8 +11336,8 @@ # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes @@ -11219,9 +11386,83 @@ +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 +$as_echo_n "checking how to convert $build file names to $host format... " >&6; } +if ${lt_cv_to_host_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac + ;; + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac + ;; + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac + +fi + +to_host_file_cmd=$lt_cv_to_host_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 +$as_echo "$lt_cv_to_host_file_cmd" >&6; } + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 +$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } +if ${lt_cv_to_tool_file_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + #assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac + +fi + +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 +$as_echo "$lt_cv_to_tool_file_cmd" >&6; } + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } -if test "${lt_cv_ld_reload_flag+set}" = set; then : +if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' @@ -11235,6 +11476,11 @@ esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' @@ -11257,7 +11503,7 @@ set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then @@ -11297,7 +11543,7 @@ set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then @@ -11353,7 +11599,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } -if test "${lt_cv_deplibs_check_method+set}" = set; then : +if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' @@ -11555,6 +11801,21 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` + fi + ;; + esac +fi + file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -11570,16 +11831,26 @@ + + + + + + + + + + if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. -set dummy ${ac_tool_prefix}ar; ac_word=$2 + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_AR+set}" = set; then : +if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -11588,7 +11859,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_AR="${ac_tool_prefix}ar" + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -11598,10 +11869,10 @@ fi fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } @@ -11609,17 +11880,17 @@ fi -if test -z "$ac_cv_prog_AR"; then - ac_ct_AR=$AR - # Extract the first word of "ar", so it can be a program name with args. -set dummy ar; ac_word=$2 +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : +if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -11628,7 +11899,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_AR="ar" + ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -11638,17 +11909,17 @@ fi fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_AR" = x; then - AR="false" + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) @@ -11656,19 +11927,52 @@ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - AR=$ac_ct_AR + DLLTOOL=$ac_ct_DLLTOOL fi else - AR="$ac_cv_prog_AR" + DLLTOOL="$ac_cv_prog_DLLTOOL" fi -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru +test -z "$DLLTOOL" && DLLTOOL=dlltool + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 +$as_echo_n "checking how to associate runtime and link libraries... " >&6; } +if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 +$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + @@ -11676,15 +11980,17 @@ if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 + for ac_prog in ar + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_STRIP+set}" = set; then : +if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -11693,7 +11999,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -11703,28 +12009,32 @@ fi fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 -$as_echo "$STRIP" >&6; } +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + test -n "$AR" && break + done fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 +if test -z "$AR"; then + ac_ct_AR=$AR + for ac_prog in ar +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : +if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH @@ -11733,7 +12043,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_ac_ct_STRIP="strip" + ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -11743,19 +12053,184 @@ fi fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 -$as_echo "$ac_ct_STRIP" >&6; } +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - if test "x$ac_ct_STRIP" = x; then - STRIP=":" - else - case $cross_compiling:$ac_tool_warned in + + test -n "$ac_ct_AR" && break +done + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +fi + +: ${AR=ar} +: ${AR_FLAGS=cru} + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 +$as_echo_n "checking for archiver @FILE support... " >&6; } +if ${lt_cv_ar_at_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ar_at_file=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 + (eval $lt_ar_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 +$as_echo "$lt_cv_ar_at_file" >&6; } + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} @@ -11779,7 +12254,7 @@ set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_RANLIB+set}" = set; then : +if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then @@ -11819,7 +12294,7 @@ set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then @@ -11948,7 +12423,7 @@ # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : +if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else @@ -12009,8 +12484,8 @@ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -12046,6 +12521,7 @@ else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -12087,6 +12563,18 @@ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + #ifdef __cplusplus extern "C" { #endif @@ -12098,7 +12586,7 @@ cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ -const struct { +LT_DLSYM_CONST struct { const char *name; void *address; } @@ -12124,8 +12612,8 @@ _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 @@ -12135,8 +12623,8 @@ test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi @@ -12173,6 +12661,17 @@ $as_echo "ok" >&6; } fi +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + + + + + @@ -12194,6 +12693,44 @@ + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 +$as_echo_n "checking for sysroot... " >&6; } + +# Check whether --with-sysroot was given. +if test "${with_sysroot+set}" = set; then : + withval=$with_sysroot; +else + with_sysroot=no +fi + + +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 +$as_echo "${with_sysroot}" >&6; } + as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 + ;; +esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 +$as_echo "${lt_sysroot:-no}" >&6; } + + + + + # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; @@ -12319,7 +12856,7 @@ CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if test "${lt_cv_cc_needs_belf+set}" = set; then : +if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c @@ -12387,6 +12924,123 @@ need_locks="$enable_libtool_lock" +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. +set dummy ${ac_tool_prefix}mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MANIFEST_TOOL"; then + ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL +if test -n "$MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 +$as_echo "$MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_MANIFEST_TOOL"; then + ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL + # Extract the first word of "mt", so it can be a program name with args. +set dummy mt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_MANIFEST_TOOL"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL +if test -n "$ac_ct_MANIFEST_TOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 +$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_MANIFEST_TOOL" = x; then + MANIFEST_TOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL + fi +else + MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" +fi + +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 +$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } +if ${lt_cv_path_mainfest_tool+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&5 + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 +$as_echo "$lt_cv_path_mainfest_tool" >&6; } +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi + + + + + case $host_os in rhapsody* | darwin*) @@ -12395,7 +13049,7 @@ set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : +if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then @@ -12435,7 +13089,7 @@ set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : +if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then @@ -12487,7 +13141,7 @@ set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_NMEDIT+set}" = set; then : +if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then @@ -12527,7 +13181,7 @@ set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : +if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then @@ -12579,7 +13233,7 @@ set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_LIPO+set}" = set; then : +if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then @@ -12619,7 +13273,7 @@ set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : +if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then @@ -12671,7 +13325,7 @@ set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL+set}" = set; then : +if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then @@ -12711,7 +13365,7 @@ set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : +if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then @@ -12763,7 +13417,7 @@ set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_OTOOL64+set}" = set; then : +if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then @@ -12803,7 +13457,7 @@ set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : +if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then @@ -12878,7 +13532,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } -if test "${lt_cv_apple_cc_single_mod+set}" = set; then : +if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no @@ -12907,7 +13561,7 @@ $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : +if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no @@ -12939,7 +13593,7 @@ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } -if test "${lt_cv_ld_force_load+set}" = set; then : +if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no @@ -13008,7 +13662,7 @@ do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " -if test "x$ac_cv_header_dlfcn_h" = x""yes; then : +if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF @@ -13163,7 +13817,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } -if test "${lt_cv_objdir+set}" = set; then : +if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null @@ -13241,7 +13895,7 @@ if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : +if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in @@ -13307,7 +13961,7 @@ if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : +if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in @@ -13449,7 +14103,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : +if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no @@ -13502,8 +14156,6 @@ lt_prog_compiler_pic= lt_prog_compiler_static= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' @@ -13668,6 +14320,12 @@ lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; + nagfor*) + # NAG Fortran compiler + lt_prog_compiler_wl='-Wl,-Wl,,' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -13787,13 +14445,17 @@ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 -$as_echo "$lt_prog_compiler_pic" >&6; } - - - - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } +if ${lt_cv_prog_compiler_pic+:} false; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic=$lt_prog_compiler_pic +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 +$as_echo "$lt_cv_prog_compiler_pic" >&6; } +lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. @@ -13801,7 +14463,7 @@ if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : +if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no @@ -13854,13 +14516,18 @@ + + + + + # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if test "${lt_cv_prog_compiler_static_works+set}" = set; then : +if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no @@ -13903,7 +14570,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : +if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no @@ -13958,7 +14625,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if test "${lt_cv_prog_compiler_c_o+set}" = set; then : +if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no @@ -14204,7 +14871,8 @@ allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -14252,7 +14920,7 @@ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then - tmp_addflag= + tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler @@ -14322,8 +14990,8 @@ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; @@ -14341,8 +15009,8 @@ _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi @@ -14388,8 +15056,8 @@ *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi @@ -14519,7 +15187,13 @@ allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -14532,22 +15206,29 @@ _ACEOF if ac_fn_c_try_link "$LINENO"; then : -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" @@ -14559,7 +15240,13 @@ else # Determine the default libpath from the value encoded in an # empty executable. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + if ${lt_cv_aix_libpath_+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -14572,22 +15259,29 @@ _ACEOF if ac_fn_c_try_link "$LINENO"; then : -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi + lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }' + lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + if test -z "$lt_cv_aix_libpath_"; then + lt_cv_aix_libpath_="/usr/lib:/lib" + fi + +fi + + aix_libpath=$lt_cv_aix_libpath_ +fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, @@ -14632,20 +15326,63 @@ # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes=yes + case $cc_basename in + cl*) + # Native MSVC + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + always_export_symbols=yes + file_list_spec='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, )='true' + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + old_postinstall_cmds='chmod 644 $oldlib' + postlink_cmds='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + enable_shared_with_static_runtimes=yes + ;; + esac ;; darwin* | rhapsody*) @@ -14710,7 +15447,7 @@ # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) - archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no @@ -14718,7 +15455,7 @@ hpux9*) if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi @@ -14734,7 +15471,7 @@ hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi @@ -14758,10 +15495,10 @@ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else @@ -14778,7 +15515,7 @@ # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } -if test "${lt_cv_prog_compiler__b+set}" = set; then : +if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no @@ -14840,23 +15577,36 @@ irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + # This should be the same for all languages, so no per-tag cache variable. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 +$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } +if ${lt_cv_irix_exported_symbol+:} false; then : + $as_echo_n "(cached) " >&6 +else + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -int foo(void) {} +int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - + lt_cv_irix_exported_symbol=yes +else + lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" + LDFLAGS="$save_LDFLAGS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 +$as_echo "$lt_cv_irix_exported_symbol" >&6; } + if test "$lt_cv_irix_exported_symbol" = yes; then + archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' @@ -14941,7 +15691,7 @@ osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' @@ -14960,9 +15710,9 @@ no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' - archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) @@ -15150,7 +15900,7 @@ # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if test "${lt_cv_archive_cmds_need_lc+set}" = set; then : +if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* @@ -15538,8 +16288,9 @@ need_version=no need_lib_prefix=no - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + case $GCC,$cc_basename in + yes,*) + # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ @@ -15572,13 +16323,71 @@ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' ;; *) + # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' ;; esac - dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; @@ -15792,7 +16601,7 @@ shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH - if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then : + if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no @@ -16216,7 +17025,7 @@ # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : +if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -16250,7 +17059,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -16264,12 +17073,12 @@ *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = x""yes; then : +if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } -if test "${ac_cv_lib_dld_shl_load+set}" = set; then : +if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -16303,16 +17112,16 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : +if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = x""yes; then : +if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } -if test "${ac_cv_lib_dl_dlopen+set}" = set; then : +if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -16346,12 +17155,12 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } -if test "${ac_cv_lib_svld_dlopen+set}" = set; then : +if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -16385,12 +17194,12 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : +if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } -if test "${ac_cv_lib_dld_dld_link+set}" = set; then : +if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -16424,7 +17233,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : +if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi @@ -16465,7 +17274,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self+set}" = set; then : +if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : @@ -16518,10 +17327,10 @@ /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); +int fnord () __attribute__((visibility("default"))); #endif -void fnord () { int i=42; } +int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); @@ -16571,7 +17380,7 @@ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if test "${lt_cv_dlopen_self_static+set}" = set; then : +if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : @@ -16624,10 +17433,10 @@ /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); +int fnord () __attribute__((visibility("default"))); #endif -void fnord () { int i=42; } +int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); @@ -16870,8 +17679,8 @@ coolscan coolscan2 coolscan3 dc25 dc210 dc240 \ dell1600n_net dmc epjitsu epson epson2 fujitsu genesys \ gphoto2 gt68xx hp hp3500 hp3900 hp4200 hp5400 \ - hp5590 hpsj5s hpljm1005 hs2p ibm kodak kvs1025 kvs20xx \ - leo lexmark ma1509 magicolor \ + hp5590 hpsj5s hpljm1005 hs2p ibm kodak kodakaio kvs1025 kvs20xx \ + kvs40xx leo lexmark ma1509 magicolor \ matsushita microtek microtek2 mustek mustek_pp \ mustek_usb mustek_usb2 nec net niash pie pint \ pixma plustek plustek_pp qcam ricoh rts8891 s9036 \ @@ -16884,6 +17693,7 @@ # are in automatic mode then remove backend from list instead. user_selected_backends="yes" + if eval "test x$enable_local_backends = xno"; then BACKENDS="net" else @@ -16982,7 +17792,7 @@ fi ;; - mustek_usb2) + mustek_usb2|kvs40xx) if test "${have_pthread}" != "yes"; then echo "*** $be backend requires pthread library - $DISABLE_MSG" backend_supported="no" @@ -17031,10 +17841,13 @@ done -if test "${enable_shared}" = "no"; then - enable_preload=yes + +if test "${enable_preload}" = "auto"; then + if test "${enable_shared}" = "no" || test "${enable_dynamic}" != "yes"; then + enable_preload=yes + fi fi -if test "${enable_dynamic}" != yes || test "${enable_preload}" = "yes"; then +if test "${enable_preload}" = "yes"; then echo "preloading backends into DLL" # If user specifies backends manually then cause configure @@ -17049,7 +17862,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: Manually selected preloadable backends: ${PRELOADABLE_BACKENDS}" >&5 $as_echo "$as_me: Manually selected preloadable backends: ${PRELOADABLE_BACKENDS}" >&6;} else - PRELOADABLE_BACKENDS="$ALL_BACKENDS" + PRELOADABLE_BACKENDS="$BACKENDS" user_selected_backends="no" fi fi @@ -17143,7 +17956,7 @@ fi ;; - mustek_usb2) + mustek_usb2|kvs40xx) if test "${have_pthread}" != "yes"; then echo "*** $be backend requires pthread library - $DISABLE_MSG" backend_supported="no" @@ -17328,10 +18141,21 @@ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then - test "x$cache_file" != "x/dev/null" && + if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} - cat confcache >$cache_file + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} @@ -17405,7 +18229,7 @@ Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi -: ${CONFIG_STATUS=./config.status} +: "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" @@ -17506,6 +18330,7 @@ IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. +as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -17812,8 +18637,8 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sane-backends $as_me 1.0.22, which was -generated by GNU Autoconf 2.66. Invocation command line was +This file was extended by sane-backends $as_me 1.0.23, which was +generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -17878,8 +18703,8 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -sane-backends config.status 1.0.22 -configured by $0, generated by GNU Autoconf 2.66, +sane-backends config.status 1.0.23 +configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. @@ -17900,11 +18725,16 @@ while test $# != 0 do case $1 in - --*=*) + --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; *) ac_option=$1 ac_optarg=$2 @@ -17926,6 +18756,7 @@ $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; @@ -18050,12 +18881,18 @@ lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' +lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' +lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' +file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' +want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' +sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' +archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' @@ -18070,14 +18907,17 @@ lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' +nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' +lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' +MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' @@ -18110,12 +18950,12 @@ hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -fix_srcfile_path='`$ECHO "$fix_srcfile_path" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' +postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' @@ -18172,8 +19012,12 @@ reload_flag \ deplibs_check_method \ file_magic_cmd \ +file_magic_glob \ +want_nocaseglob \ +sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ +archiver_list_spec \ STRIP \ RANLIB \ CC \ @@ -18183,12 +19027,14 @@ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_wl \ lt_prog_compiler_pic \ +lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ +MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ @@ -18204,7 +19050,6 @@ hardcode_libdir_flag_spec \ hardcode_libdir_flag_spec_ld \ hardcode_libdir_separator \ -fix_srcfile_path \ exclude_expsyms \ include_expsyms \ file_list_spec \ @@ -18240,6 +19085,7 @@ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ +postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ @@ -18325,9 +19171,10 @@ # after its creation but before its name has been assigned to `$tmp'. $debug || { - tmp= + tmp= ac_tmp= trap 'exit_status=$? - { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } @@ -18335,12 +19182,13 @@ { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -n "$tmp" && test -d "$tmp" + test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. @@ -18362,7 +19210,7 @@ ac_cs_awk_cr=$ac_cr fi -echo 'BEGIN {' >"$tmp/subs1.awk" && +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF @@ -18390,7 +19238,7 @@ rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h @@ -18438,7 +19286,7 @@ rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK -cat >>"\$tmp/subs1.awk" <<_ACAWK && +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" @@ -18470,7 +19318,7 @@ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat -fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF @@ -18504,7 +19352,7 @@ # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then -cat >"$tmp/defines.awk" <<\_ACAWK || +cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF @@ -18516,8 +19364,8 @@ # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do - ac_t=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_t"; then + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 @@ -18637,7 +19485,7 @@ for ac_f do case $ac_f in - -) ac_f="$tmp/stdin";; + -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. @@ -18672,7 +19520,7 @@ esac case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ + *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; @@ -18809,21 +19657,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} - rm -f "$tmp/stdin" + rm -f "$ac_tmp/stdin" case $ac_file in - -) cat "$tmp/out" && rm -f "$tmp/out";; - *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; @@ -18834,20 +19683,20 @@ if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" - } >"$tmp/config.h" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" - mv "$tmp/config.h" "$ac_file" \ + mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. @@ -19586,16 +20435,36 @@ # turn newlines into spaces. NL2SP=$lt_lt_NL2SP +# convert \$build file names to \$host format. +to_host_file_cmd=$lt_cv_to_host_file_cmd + +# convert \$build files to toolchain format. +to_tool_file_cmd=$lt_cv_to_tool_file_cmd + # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method -# Command to use when deplibs_check_method == "file_magic". +# Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd +# How to find potential files when deplibs_check_method = "file_magic". +file_magic_glob=$lt_file_magic_glob + +# Find potential files using nocaseglob when deplibs_check_method = "file_magic". +want_nocaseglob=$lt_want_nocaseglob + +# Command to associate shared and link libraries. +sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd + # The archiver. AR=$lt_AR + +# Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS +# How to feed a file listing to the archiver. +archiver_list_spec=$lt_archiver_list_spec + # A symbol stripping program. STRIP=$lt_STRIP @@ -19625,6 +20494,12 @@ # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix +# Specify filename containing input files for \$NM. +nm_file_list_spec=$lt_nm_file_list_spec + +# The root where to search for dependent libraries,and in which our libraries should be installed. +lt_sysroot=$lt_sysroot + # The name of the directory that contains temporary libtool files. objdir=$objdir @@ -19634,6 +20509,9 @@ # Must we lock files when doing compilation? need_locks=$lt_need_locks +# Manifest tool. +MANIFEST_TOOL=$lt_MANIFEST_TOOL + # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL @@ -19748,12 +20626,12 @@ # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static @@ -19840,9 +20718,6 @@ # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path=$lt_fix_srcfile_path - # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols @@ -19858,6 +20733,9 @@ # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds +# Commands necessary for finishing linking programs. +postlink_cmds=$lt_postlink_cmds + # Specify filename containing input files. file_list_spec=$lt_file_list_spec @@ -19890,210 +20768,169 @@ # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $* )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} - -# sed scripts: -my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[^=]*=//' - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$@"` -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` -} - -_LT_EOF -esac - -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1+=\$2" -} -_LT_EOF - ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$1=\$$1\$2" -} - -_LT_EOF - ;; - esac + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + if test x"$xsi_shell" = xyes; then + sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ +func_dirname ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_basename ()$/,/^} # func_basename /c\ +func_basename ()\ +{\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ +func_dirname_and_basename ()\ +{\ +\ case ${1} in\ +\ */*) func_dirname_result="${1%/*}${2}" ;;\ +\ * ) func_dirname_result="${3}" ;;\ +\ esac\ +\ func_basename_result="${1##*/}"\ +} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ +func_stripname ()\ +{\ +\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ +\ # positional parameters, so assign one to ordinary parameter first.\ +\ func_stripname_result=${3}\ +\ func_stripname_result=${func_stripname_result#"${1}"}\ +\ func_stripname_result=${func_stripname_result%"${2}"}\ +} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ +func_split_long_opt ()\ +{\ +\ func_split_long_opt_name=${1%%=*}\ +\ func_split_long_opt_arg=${1#*=}\ +} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ +func_split_short_opt ()\ +{\ +\ func_split_short_opt_arg=${1#??}\ +\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ +} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ +func_lo2o ()\ +{\ +\ case ${1} in\ +\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ +\ *) func_lo2o_result=${1} ;;\ +\ esac\ +} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_xform ()$/,/^} # func_xform /c\ +func_xform ()\ +{\ + func_xform_result=${1%.*}.lo\ +} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_arith ()$/,/^} # func_arith /c\ +func_arith ()\ +{\ + func_arith_result=$(( $* ))\ +} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_len ()$/,/^} # func_len /c\ +func_len ()\ +{\ + func_len_result=${#1}\ +} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + +fi + +if test x"$lt_shell_append" = xyes; then + sed -e '/^func_append ()$/,/^} # func_append /c\ +func_append ()\ +{\ + eval "${1}+=\\${2}"\ +} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ +func_append_quoted ()\ +{\ +\ func_quote_for_eval "${2}"\ +\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ +} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: + + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi + +if test x"$_lt_function_replace_fail" = x":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 +$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} +fi - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - mv -f "$cfgfile" "$ofile" || + mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" @@ -20164,6 +21001,7 @@ echo "IPv6 support: `eval eval echo ${ipv6}`" echo "Avahi support: `eval eval echo ${enable_avahi}`" echo "SNMP support: `eval eval echo ${with_snmp}`" +echo "CUPS support: `eval eval echo ${with_cups}`" echo "-> The following backends will be built:" for backend in ${BACKENDS} ; do echo $ECHO_N "${backend} " diff -Nru sane-backends-1.0.22/configure.in sane-backends-1.0.23/configure.in --- sane-backends-1.0.22/configure.in 2011-02-13 23:27:15.000000000 +0000 +++ sane-backends-1.0.23/configure.in 2012-08-19 20:31:34.000000000 +0000 @@ -3,10 +3,10 @@ dnl *********************************************************************** dnl When preparing a release, increase the numeric and string version numbers, dnl remove the "cvs" suffix, and set is_release=yes -AC_INIT([sane-backends],[1.0.22],[sane-devel@lists.alioth.debian.org]) +AC_INIT([sane-backends],[1.0.23],[sane-devel@lists.alioth.debian.org]) V_MAJOR=1 V_MINOR=0 -V_REV=22 +V_REV=23 is_release=yes dnl *********************************************************************** @@ -103,6 +103,10 @@ dnl *********************************************************************** dnl Checks for libraries dnl *********************************************************************** +AC_ARG_ENABLE(dynamic, + AC_HELP_STRING([--disable-dynamic], + [Disable dynamic loading of backends]), + [enable_dynamic=$enableval], [enable_dynamic=auto]) SANE_CHECK_DLL_LIB dnl Checks for Backend libraries. AC_CHECK_LIB(m, sqrt, MATH_LIB="-lm") @@ -200,6 +204,8 @@ SANE_CHECK_MISSING_HEADERS +AC_CHECK_HEADERS(winsock2.h, SOCKET_LIB="-lws2_32") + AC_CHECK_HEADER(resmgr.h,[ AC_CHECK_LIB( resmgr, @@ -271,7 +277,7 @@ dnl for functions we use. AC_CHECK_FUNC(gethostbyaddr,, [AC_CHECK_LIB(bind, gethostbyaddr, BIND_LIB="-lbind")]) AC_CHECK_FUNC(gethostbyaddr,, [AC_CHECK_LIB(nsl, gethostbyaddr, NSL_LIB="-lnsl")]) -AC_CHECK_FUNC(socket, [SOCKET_LIBS=], [AC_CHECK_LIB(socket, socket, SOCKET_LIB="-lsocket")]) +AC_CHECK_FUNC(socket,, [AC_CHECK_LIB(socket, socket, SOCKET_LIB="-lsocket")]) AC_CHECK_FUNC(inet_aton,, [AC_CHECK_LIB(resolv, inet_aton, RESOLV_LIB="-lresolv")]) dnl Group related network libraries together so they can always be linked @@ -298,9 +304,9 @@ AC_CHECK_FUNCS(atexit ioperm i386_set_ioperm \ mkdir strftime strstr strtod \ cfmakeraw tcsendbreak strcasecmp strncasecmp _portaccess \ - getaddrinfo getnameinfo poll setitimer iopl ) + getaddrinfo getnameinfo poll setitimer iopl getuid getpass) AC_REPLACE_FUNCS(getenv isfdtype sigprocmask snprintf \ - strcasestr strdup strndup strsep usleep vsyslog) + strcasestr strdup strndup strsep usleep sleep syslog vsyslog) SANE_PROTOTYPES @@ -320,6 +326,18 @@ AC_DEFINE(HAVE_DEV_URANDOM, 1, [Is /dev/urandom available?]) fi +nl added by PN 3/2/12 to detect cups +$as_echo "checking for cups" +if test -e /usr/include/cups/cups.h ; then + AC_DEFINE(HAVE_CUPS, 1, [Is /usr/include/cups/cups.h available?]) + with_cups="yes" + LIBS="-lcups $LIBS" +else + $as_echo "cups.h not found, you may want to install a cups development package" + $as_echo "in order to autodetect network scanners in kodakaio." + with_cups="no" +fi + dnl *********** dnl USB Support dnl *********** @@ -365,9 +383,13 @@ dnl Fallback to the old libusb dnl libusb >= 0.1.8 is required, as we need usb_interrupt_read() AC_CHECK_HEADER(usb.h, - AC_CHECK_LIB(usb, usb_interrupt_read, + AC_CHECK_LIB(usb, usb_interrupt_read, [USB_LIBS="$USB_LIBS -lusb" HAVE_USB=yes])) + AC_CHECK_HEADERS(lusb0_usb.h, + AC_CHECK_LIB(usb, usb_interrupt_read, + [USB_LIBS="$USB_LIBS -lusb" + HAVE_USB=yes])) fi ;; esac @@ -411,6 +433,7 @@ sys/scsi/targets/scgio.h apollo/scsi.h sys/sdi_comm.h \ sys/passthrudef.h) AC_CHECK_HEADERS([io/cam/cam.h],,,[#include ]) +AC_CHECK_HEADERS([ntddscsi.h ddk/ntddscsi.h],,,[#include ]) dnl FreeBSD < 3 if test "$ac_cv_header_sys_scsiio_h" = "yes" \ @@ -506,6 +529,11 @@ dnl *********************************************************************** dnl initialize libtool dnl *********************************************************************** +AC_ARG_ENABLE(preload, + AC_HELP_STRING([--disable-preload], + [Disable preloading of backends]), + [enable_preload=$enableval], [enable_preload=auto]) + AC_LIBTOOL_WIN32_DLL AC_DISABLE_STATIC AC_PROG_LIBTOOL @@ -555,8 +583,8 @@ coolscan coolscan2 coolscan3 dc25 dc210 dc240 \ dell1600n_net dmc epjitsu epson epson2 fujitsu genesys \ gphoto2 gt68xx hp hp3500 hp3900 hp4200 hp5400 \ - hp5590 hpsj5s hpljm1005 hs2p ibm kodak kvs1025 kvs20xx \ - leo lexmark ma1509 magicolor \ + hp5590 hpsj5s hpljm1005 hs2p ibm kodak kodakaio kvs1025 kvs20xx \ + kvs40xx leo lexmark ma1509 magicolor \ matsushita microtek microtek2 mustek mustek_pp \ mustek_usb mustek_usb2 nec net niash pie pint \ pixma plustek plustek_pp qcam ricoh rts8891 s9036 \ @@ -569,6 +597,7 @@ # are in automatic mode then remove backend from list instead. user_selected_backends="yes" +AC_ARG_VAR(BACKENDS, [list of backends to compile]) if eval "test x$enable_local_backends = xno"; then BACKENDS="net" else @@ -605,10 +634,13 @@ done AC_SUBST(BACKEND_LIBS_ENABLED) -if test "${enable_shared}" = "no"; then - enable_preload=yes +AC_ARG_VAR(PRELOADABLE_BACKENDS, [list of backends to preload into single DLL]) +if test "${enable_preload}" = "auto"; then + if test "${enable_shared}" = "no" || test "${enable_dynamic}" != "yes"; then + enable_preload=yes + fi fi -if test "${enable_dynamic}" != yes || test "${enable_preload}" = "yes"; then +if test "${enable_preload}" = "yes"; then echo "preloading backends into DLL" # If user specifies backends manually then cause configure @@ -622,7 +654,7 @@ if test "${PRELOADABLE_BACKENDS}" != "" ; then AC_MSG_NOTICE([Manually selected preloadable backends: ${PRELOADABLE_BACKENDS}]) else - PRELOADABLE_BACKENDS="$ALL_BACKENDS" + PRELOADABLE_BACKENDS="$BACKENDS" user_selected_backends="no" fi fi @@ -751,6 +783,7 @@ echo "IPv6 support: `eval eval echo ${ipv6}`" echo "Avahi support: `eval eval echo ${enable_avahi}`" echo "SNMP support: `eval eval echo ${with_snmp}`" +echo "CUPS support: `eval eval echo ${with_cups}`" echo "-> The following backends will be built:" for backend in ${BACKENDS} ; do echo $ECHO_N "${backend} " diff -Nru sane-backends-1.0.22/debian/changelog sane-backends-1.0.23/debian/changelog --- sane-backends-1.0.22/debian/changelog 2011-12-05 04:27:14.000000000 +0000 +++ sane-backends-1.0.23/debian/changelog 2012-11-06 10:46:50.000000000 +0000 @@ -1,3 +1,38 @@ +sane-backends (1.0.23-0ubuntu1~ppa1~precise) precise; urgency=low + + * Backport to precise + + -- Nathan Rennie-Waldock Tue, 06 Nov 2012 10:45:41 +0000 + +sane-backends (1.0.23-0ubuntu1) quantal; urgency=low + + * New upstream bugfix release (LP: #1044544) + * debian/control: + - Use standards-version 3.9.3 + * debian/patches/fix_v4l_build.patch: + * debian/patches/hurd_path_max_fix.patch: + * debian/patches/sane-desc_udev+acl.patch: + * debian/patches/scanimage_man_batch_start.patch: + * debian/patches/udev_usb_suspend.patch: + * debian/patches/xerox_mfp_add_scx_4623fw.patch: + * debian/patches/xerox_mfp_fix_usb_devices.patch: + - Applied upstream + + -- Robert Ancell Thu, 20 Sep 2012 11:16:44 +1200 + +sane-backends (1.0.22-7ubuntu3) quantal; urgency=low + + * debian/control, debian/rules: Switch to libusb 1.0. (LP: #918774) + + -- Whoopie Mon, 10 Sep 2012 09:40:11 +0200 + +sane-backends (1.0.22-7ubuntu2) quantal; urgency=low + + * debian/control: + - Build-Depend on libtiff5-dev + + -- Michael Terry Mon, 09 Jul 2012 17:30:38 -0400 + sane-backends (1.0.22-7ubuntu1) precise; urgency=low * Merge from Debian testing, remaining changes: diff -Nru sane-backends-1.0.22/debian/control sane-backends-1.0.23/debian/control --- sane-backends-1.0.22/debian/control 2011-12-05 04:22:04.000000000 +0000 +++ sane-backends-1.0.23/debian/control 2012-11-06 10:22:54.000000000 +0000 @@ -3,8 +3,8 @@ Priority: optional Maintainer: Ubuntu Developers XSBC-Original-Maintainer: Julien BLACHE -Standards-Version: 3.9.2 -Build-Depends: debhelper (>= 8.1.3), po-debconf, libv4l-dev [linux-any], libgphoto2-2-dev, libltdl3-dev, libjpeg-dev, libtiff4-dev, libusb-dev (>= 2:0.1.10a-9) [!hurd-i386], libieee1284-3-dev (>= 0.2.10-5) [!hurd-i386], libcam-dev [kfreebsd-any], libavahi-client-dev (>= 0.6.4), gettext, texlive, texlive-latex-extra, autotools-dev, pkg-config, chrpath, xutils-dev +Standards-Version: 3.9.3 +Build-Depends: debhelper (>= 8.1.3), po-debconf, libv4l-dev [linux-any], libgphoto2-2-dev, libltdl3-dev, libjpeg-dev, libtiff4-dev, libusb-1.0-0-dev [!hurd-i386], libieee1284-3-dev (>= 0.2.10-5) [!hurd-i386], libcam-dev [kfreebsd-any], libavahi-client-dev (>= 0.6.4), gettext, texlive, texlive-latex-extra, autotools-dev, pkg-config, chrpath, xutils-dev Homepage: http://www.sane-project.org Vcs-Bzr: https://code.launchpad.net/~ubuntu-desktop/sane-backends/ubuntu @@ -77,7 +77,7 @@ Package: libsane-dev Section: libdevel Architecture: any -Depends: libsane (= ${binary:Version}), libjpeg-dev, libtiff4-dev, libusb-dev (>= 1:0.1.6a-1) [!hurd-i386], libieee1284-3-dev (>= 0.2.10-5) [!hurd-i386], libcam-dev [kfreebsd-any], libgphoto2-2-dev, libv4l-dev [linux-any], libavahi-client-dev, pkg-config, ${misc:Depends} +Depends: libsane (= ${binary:Version}), libjpeg-dev, libtiff5-dev, libusb-1.0-0-dev [!hurd-i386], libieee1284-3-dev (>= 0.2.10-5) [!hurd-i386], libcam-dev [kfreebsd-any], libgphoto2-2-dev, libv4l-dev [linux-any], libavahi-client-dev, pkg-config, ${misc:Depends} Suggests: libsane-extras-dev (>= 1.0.22.1) Replaces: libsane-extras-dev (<< 1.0.18.14) Description: API development library for scanners [development files] diff -Nru sane-backends-1.0.22/debian/patches/disable_rpath.patch sane-backends-1.0.23/debian/patches/disable_rpath.patch --- sane-backends-1.0.22/debian/patches/disable_rpath.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/disable_rpath.patch 2012-09-20 00:04:40.000000000 +0000 @@ -4,10 +4,10 @@ on the updated configure script. Author: Julien BLACHE -Index: sane-backends-1.0.22/configure.in +Index: sane-backends-1.0.23/configure.in =================================================================== ---- sane-backends-1.0.22.orig/configure.in 2011-02-14 00:27:15.000000000 +0100 -+++ sane-backends-1.0.22/configure.in 2011-02-14 19:00:45.985016022 +0100 +--- sane-backends-1.0.23.orig/configure.in 2012-09-20 11:39:57.070370637 +1200 ++++ sane-backends-1.0.23/configure.in 2012-09-20 11:40:52.030368732 +1200 @@ -86,7 +86,7 @@ AC_SUBST(INCLUDES) SANE_SET_CFLAGS([$is_release]) @@ -17,19 +17,188 @@ dnl *********************************************************************** dnl Checks for unix variants -Index: sane-backends-1.0.22/configure +Index: sane-backends-1.0.23/configure =================================================================== ---- sane-backends-1.0.22.orig/configure 2011-02-14 19:01:35.245016002 +0100 -+++ sane-backends-1.0.22/configure 2011-02-14 19:01:32.517016000 +0100 -@@ -1,6 +1,6 @@ +--- sane-backends-1.0.23.orig/configure 2012-09-20 11:39:57.070370637 +1200 ++++ sane-backends-1.0.23/configure 2012-09-20 11:41:19.994367764 +1200 +@@ -1,13 +1,11 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.66 for sane-backends 1.0.22. -+# Generated by GNU Autoconf 2.67 for sane-backends 1.0.22. +-# Generated by GNU Autoconf 2.68 for sane-backends 1.0.23. ++# Generated by GNU Autoconf 2.69 for sane-backends 1.0.23. # # Report bugs to . # -@@ -670,7 +670,6 @@ + # +-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +-# Foundation, Inc. ++# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. + # + # + # This configure script is free software; the Free Software Foundation +@@ -136,6 +134,31 @@ + # CDPATH. + (unset CDPATH) >/dev/null 2>&1 && unset CDPATH + ++# Use a proper internal environment variable to ensure we don't fall ++ # into an infinite loop, continuously re-executing ourselves. ++ if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then ++ _as_can_reexec=no; export _as_can_reexec; ++ # We cannot yet assume a decent shell, so we have to provide a ++# neutralization value for shells without unset; and this also ++# works around shells that cannot unset nonexistent variables. ++# Preserve -v and -x to the replacement shell. ++BASH_ENV=/dev/null ++ENV=/dev/null ++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV ++case $- in # (((( ++ *v*x* | *x*v* ) as_opts=-vx ;; ++ *v* ) as_opts=-v ;; ++ *x* ) as_opts=-x ;; ++ * ) as_opts= ;; ++esac ++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} ++# Admittedly, this is quite paranoid, since all the known shells bail ++# out after a failed `exec'. ++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 ++as_fn_exit 255 ++ fi ++ # We don't want this to propagate to other subprocesses. ++ { _as_can_reexec=; unset _as_can_reexec;} + if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh +@@ -169,7 +192,8 @@ + else + exitcode=1; echo positional parameters were not saved. + fi +-test x\$exitcode = x0 || exit 1" ++test x\$exitcode = x0 || exit 1 ++test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && +@@ -222,21 +246,25 @@ + + + if test "x$CONFIG_SHELL" != x; then : +- # We cannot yet assume a decent shell, so we have to provide a +- # neutralization value for shells without unset; and this also +- # works around shells that cannot unset nonexistent variables. +- # Preserve -v and -x to the replacement shell. +- BASH_ENV=/dev/null +- ENV=/dev/null +- (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +- export CONFIG_SHELL +- case $- in # (((( +- *v*x* | *x*v* ) as_opts=-vx ;; +- *v* ) as_opts=-v ;; +- *x* ) as_opts=-x ;; +- * ) as_opts= ;; +- esac +- exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} ++ export CONFIG_SHELL ++ # We cannot yet assume a decent shell, so we have to provide a ++# neutralization value for shells without unset; and this also ++# works around shells that cannot unset nonexistent variables. ++# Preserve -v and -x to the replacement shell. ++BASH_ENV=/dev/null ++ENV=/dev/null ++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV ++case $- in # (((( ++ *v*x* | *x*v* ) as_opts=-vx ;; ++ *v* ) as_opts=-v ;; ++ *x* ) as_opts=-x ;; ++ * ) as_opts= ;; ++esac ++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} ++# Admittedly, this is quite paranoid, since all the known shells bail ++# out after a failed `exec'. ++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 ++exit 255 + fi + + if test x$as_have_required = xno; then : +@@ -339,6 +367,14 @@ + + + } # as_fn_mkdir_p ++ ++# as_fn_executable_p FILE ++# ----------------------- ++# Test if FILE is an executable regular file. ++as_fn_executable_p () ++{ ++ test -f "$1" && test -x "$1" ++} # as_fn_executable_p + # as_fn_append VAR VALUE + # ---------------------- + # Append the text in VALUE to the end of the definition contained in VAR. Take +@@ -460,6 +496,10 @@ + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + ++ # If we had to re-execute with $CONFIG_SHELL, we're ensured to have ++ # already done that, so ensure we don't try to do so again and fall ++ # in an infinite loop. This has already happened in practice. ++ _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). +@@ -494,16 +534,16 @@ + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. +- # In both cases, we have to default to `cp -p'. ++ # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + fi + else +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + fi + rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file + rmdir conf$$.dir 2>/dev/null +@@ -515,28 +555,8 @@ + as_mkdir_p=false + fi + +-if test -x / >/dev/null 2>&1; then +- as_test_x='test -x' +-else +- if ls -dL / >/dev/null 2>&1; then +- as_ls_L_option=L +- else +- as_ls_L_option= +- fi +- as_test_x=' +- eval sh -c '\'' +- if test -d "$1"; then +- test -d "$1/."; +- else +- case $1 in #( +- -*)set "./$1";; +- esac; +- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( +- ???[sx]*):;;*)false;;esac;fi +- '\'' sh +- ' +-fi +-as_executable_p=$as_test_x ++as_test_x='test -x' ++as_executable_p=as_fn_executable_p + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -681,7 +701,6 @@ DYNAMIC_FLAG DL_LIBS effective_target @@ -37,211 +206,320 @@ STRICT_LDFLAGS INCLUDES CROSS_COMPILING_FALSE -@@ -787,7 +786,6 @@ +@@ -798,7 +817,6 @@ with_docdir enable_dependency_tracking enable_warnings -enable_rpath + enable_dynamic enable_pthread enable_locking - with_group -@@ -892,8 +890,9 @@ +@@ -1301,8 +1319,6 @@ + if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe +- $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. +- If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes fi - - case $ac_option in -- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; -- *) ac_optarg=yes ;; -+ *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; -+ *=) ac_optarg= ;; -+ *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. -@@ -1454,7 +1453,6 @@ +@@ -1471,7 +1487,6 @@ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --enable-warnings turn on tons of compiler warnings (GCC only) - --enable-rpath use runtime library search path [default=yes] + --disable-dynamic Disable dynamic loading of backends --enable-pthread use pthread instead of fork (default=yes for MacOS X/MINGW, no for everything else) - --enable-locking activate device locking (default=yes, but only used -@@ -1588,7 +1586,7 @@ +@@ -1612,9 +1627,9 @@ if $ac_init_version; then cat <<\_ACEOF - sane-backends configure 1.0.22 --generated by GNU Autoconf 2.66 -+generated by GNU Autoconf 2.67 + sane-backends configure 1.0.23 +-generated by GNU Autoconf 2.68 ++generated by GNU Autoconf 2.69 - Copyright (C) 2010 Free Software Foundation, Inc. +-Copyright (C) 2010 Free Software Foundation, Inc. ++Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation -@@ -1660,7 +1658,7 @@ - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 -- test $ac_status = 0; } >/dev/null && { -+ test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + gives unlimited permission to copy, distribute and modify it. + _ACEOF +@@ -1891,7 +1906,7 @@ test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || +- $as_test_x conftest$ac_exeext ++ test -x conftest$ac_exeext }; then : -@@ -1723,7 +1721,7 @@ + ac_retval=0 else - ac_header_preproc=no - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 - $as_echo "$ac_header_preproc" >&6; } - -@@ -2189,7 +2187,7 @@ +@@ -1981,7 +1996,8 @@ + main () + { + static int test_array [1 - 2 * !(($2) >= 0)]; +-test_array [0] = 0 ++test_array [0] = 0; ++return test_array [0]; + + ; + return 0; +@@ -1997,7 +2013,8 @@ + main () + { + static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +-test_array [0] = 0 ++test_array [0] = 0; ++return test_array [0]; + + ; + return 0; +@@ -2023,7 +2040,8 @@ + main () + { + static int test_array [1 - 2 * !(($2) < 0)]; +-test_array [0] = 0 ++test_array [0] = 0; ++return test_array [0]; + + ; + return 0; +@@ -2039,7 +2057,8 @@ + main () + { + static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +-test_array [0] = 0 ++test_array [0] = 0; ++return test_array [0]; + + ; + return 0; +@@ -2073,7 +2092,8 @@ + main () + { + static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +-test_array [0] = 0 ++test_array [0] = 0; ++return test_array [0]; + + ; + return 0; +@@ -2213,7 +2233,7 @@ running configure, to aid debugging if configure makes a mistake. - It was created by sane-backends $as_me 1.0.22, which was --generated by GNU Autoconf 2.66. Invocation command line was -+generated by GNU Autoconf 2.67. Invocation command line was + It was created by sane-backends $as_me 1.0.23, which was +-generated by GNU Autoconf 2.68. Invocation command line was ++generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ -@@ -2447,7 +2445,7 @@ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error $? "failed to load site script $ac_site_file --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - fi - done - -@@ -2681,11 +2679,11 @@ - ' - case `pwd` in - *[\\\"\#\$\&\'\`$am_lf]*) -- as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; -+ as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; - esac - case $srcdir in - *[\\\"\#\$\&\'\`$am_lf\ \ ]*) -- as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; -+ as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; - esac - - # Do `set' in a subshell so we don't clobber the current shell's -@@ -3136,7 +3134,7 @@ - $as_echo "$ac_cv_build" >&6; } - case $ac_cv_build in - *-*-*) ;; --*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; - esac - build=$ac_cv_build - ac_save_IFS=$IFS; IFS='-' -@@ -3169,7 +3167,7 @@ - $as_echo "$ac_cv_host" >&6; } - case $ac_cv_host in - *-*-*) ;; --*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; - esac - host=$ac_cv_host - ac_save_IFS=$IFS; IFS='-' -@@ -3500,7 +3498,7 @@ - test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error $? "no acceptable C compiler found in \$PATH --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - - # Provide some information about the compiler. - $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -@@ -3615,7 +3613,7 @@ - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error 77 "C compiler cannot create executables --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 - $as_echo "yes" >&6; } -@@ -3658,7 +3656,7 @@ - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error $? "cannot compute suffix of executables: cannot compile and link --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - fi - rm -f conftest conftest$ac_cv_exeext - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -@@ -3717,7 +3715,7 @@ - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error $? "cannot run C compiled programs. - If you meant to cross compile, use \`--host'. --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - fi - fi - fi -@@ -3769,7 +3767,7 @@ - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error $? "cannot compute suffix of object files: cannot compile --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext - fi -@@ -4378,7 +4376,7 @@ - # Broken: fails on valid input. - continue - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -@@ -4394,11 +4392,11 @@ - ac_preproc_ok=: - break - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.i conftest.err conftest.$ac_ext - if $ac_preproc_ok; then : - break - fi -@@ -4437,7 +4435,7 @@ - # Broken: fails on valid input. - continue - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. -@@ -4453,18 +4451,18 @@ - ac_preproc_ok=: - break - fi --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.err conftest.i conftest.$ac_ext - - done - # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext -+rm -f conftest.i conftest.err conftest.$ac_ext - if $ac_preproc_ok; then : - - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error $? "C preprocessor \"$CPP\" fails sanity check --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - fi - - ac_ext=c -@@ -5180,44 +5178,6 @@ +@@ -2638,7 +2658,7 @@ + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. +@@ -2807,7 +2827,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -2847,7 +2867,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -2898,7 +2918,7 @@ + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do +- { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue ++ as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ +@@ -2951,7 +2971,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3245,7 +3265,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3285,7 +3305,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3338,7 +3358,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3379,7 +3399,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue +@@ -3437,7 +3457,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3481,7 +3501,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -3927,8 +3947,7 @@ + /* end confdefs.h. */ + #include + #include +-#include +-#include ++struct stat; + /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ + struct buf { int x; }; + FILE * (*rcsopen) (struct buf *, struct stat *, int); +@@ -4515,7 +4534,7 @@ + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" +- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue ++ as_fn_executable_p "$ac_path_GREP" || continue + # Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP + case `"$ac_path_GREP" --version 2>&1` in +@@ -4581,7 +4600,7 @@ + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" +- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue ++ as_fn_executable_p "$ac_path_EGREP" || continue + # Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP + case `"$ac_path_EGREP" --version 2>&1` in +@@ -4689,7 +4708,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SANE_CONFIG_PATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -4730,7 +4749,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -4771,7 +4790,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -4812,7 +4831,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -4853,7 +4872,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LATEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -4894,7 +4913,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_DVIPS="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -4935,7 +4954,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -4992,7 +5011,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -5035,7 +5054,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -5205,44 +5224,6 @@ ;; esac @@ -259,7 +537,7 @@ -$as_echo "yes" >&6; } - { $as_echo "$as_me:${as_lineno-$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 : +-if ${my_cv_LINKER_RPATH+:} false; then : - $as_echo_n "(cached) " >&6 -else - my_cv_LINKER_RPATH= @@ -286,70 +564,407 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } -@@ -5715,7 +5675,7 @@ - ;; #( - *) - as_fn_error $? "unknown endianness -- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; -+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - - -@@ -6457,7 +6417,7 @@ - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error 77 "cannot compute sizeof (char) --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_char=0 - fi -@@ -6490,7 +6450,7 @@ - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error 77 "cannot compute sizeof (short) --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_short=0 - fi -@@ -6523,7 +6483,7 @@ - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error 77 "cannot compute sizeof (int) --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_int=0 - fi -@@ -6556,7 +6516,7 @@ - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error 77 "cannot compute sizeof (long) --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_long=0 - fi -@@ -6589,7 +6549,7 @@ - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 - $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - as_fn_error 77 "cannot compute sizeof (void*) --See \`config.log' for more details" "$LINENO" 5; } -+See \`config.log' for more details" "$LINENO" 5 ; } - else - ac_cv_sizeof_voidp=0 - fi -@@ -8536,7 +8496,7 @@ - ;; #( - *) - as_fn_error $? "unknown endianness -- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; -+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 -@@ -15457,7 +15417,7 @@ +@@ -5403,8 +5384,8 @@ + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + +-# define __EXTENSIONS__ 1 +- $ac_includes_default ++# define __EXTENSIONS__ 1 ++ $ac_includes_default + int + main () + { +@@ -7418,7 +7399,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_HAVE_GPHOTO2="${ac_tool_prefix}pkg-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -7458,7 +7439,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_HAVE_GPHOTO2="pkg-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -7794,7 +7775,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SNMP_CONFIG_PATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -8601,11 +8582,11 @@ + int + main () + { +-/* FIXME: Include the comments suggested by Paul. */ ++ + #ifndef __cplusplus +- /* Ultrix mips cc rejects this. */ ++ /* Ultrix mips cc rejects this sort of thing. */ + typedef int charset[2]; +- const charset cs; ++ const charset cs = { 0, 0 }; + /* SunOS 4.1.1 cc rejects this. */ + char const *const *pcpcc; + char **ppc; +@@ -8622,8 +8603,9 @@ + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; +- { /* SCO 3.2v4 cc rejects this. */ +- char *t; ++ { /* SCO 3.2v4 cc rejects this sort of thing. */ ++ char tx; ++ char *t = &tx; + char const *s = 0 ? (char *) 0 : (char const *) 0; + + *t++ = 0; +@@ -8639,10 +8621,10 @@ + iptr p = 0; + ++p; + } +- { /* AIX XL C 1.02.0.0 rejects this saying ++ { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying + "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ +- struct s { int j; const int *ap[3]; }; +- struct s *b; b->j = 5; ++ struct s { int j; const int *ap[3]; } bx; ++ struct s *b = &bx; b->j = 5; + } + { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +@@ -9101,23 +9083,20 @@ + /* end confdefs.h. */ + $ac_includes_default + int +-find_stack_direction () ++find_stack_direction (int *addr, int depth) + { +- static char *addr = 0; +- auto char dummy; +- if (addr == 0) +- { +- addr = &dummy; +- return find_stack_direction (); +- } +- else +- return (&dummy > addr) ? 1 : -1; ++ int dir, dummy = 0; ++ if (! addr) ++ addr = &dummy; ++ *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; ++ dir = depth ? find_stack_direction (addr, depth - 1) : 0; ++ return dir + dummy; + } + + int +-main () ++main (int argc, char **argv) + { +- return find_stack_direction () < 0; ++ return find_stack_direction (0, argc + !argv + 20) < 0; + } + _ACEOF + if ac_fn_c_try_run "$LINENO"; then : +@@ -10288,7 +10267,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -10328,7 +10307,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -10380,7 +10359,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -10420,7 +10399,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -10472,7 +10451,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -10512,7 +10491,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -10717,7 +10696,7 @@ + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" +- { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue ++ as_fn_executable_p "$ac_path_SED" || continue + # Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED + case `"$ac_path_SED" --version 2>&1` in +@@ -10796,7 +10775,7 @@ + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" +- { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue ++ as_fn_executable_p "$ac_path_FGREP" || continue + # Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP + case `"$ac_path_FGREP" --version 2>&1` in +@@ -11052,7 +11031,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -11096,7 +11075,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -11515,7 +11494,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -11555,7 +11534,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -11858,7 +11837,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -11898,7 +11877,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -11998,7 +11977,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -12042,7 +12021,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -12167,7 +12146,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -12207,7 +12186,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -12266,7 +12245,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -12306,7 +12285,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -12941,7 +12920,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -12981,7 +12960,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13061,7 +13040,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13101,7 +13080,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13153,7 +13132,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13193,7 +13172,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13245,7 +13224,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13285,7 +13264,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13337,7 +13316,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13377,7 +13356,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13429,7 +13408,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -13469,7 +13448,7 @@ + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do +- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ++ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 +@@ -16207,7 +16186,7 @@ version_type=linux need_lib_prefix=no need_version=no @@ -358,7 +973,7 @@ 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}' -@@ -15641,16 +15601,16 @@ +@@ -16450,16 +16429,16 @@ ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes @@ -378,7 +993,7 @@ ;; esac ;; -@@ -15662,7 +15622,7 @@ +@@ -16471,7 +16450,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 @@ -387,7 +1002,7 @@ ;; haiku*) -@@ -15675,7 +15635,7 @@ +@@ -16484,7 +16463,7 @@ shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' @@ -396,7 +1011,7 @@ ;; hpux9* | hpux10* | hpux11*) -@@ -15687,7 +15647,7 @@ +@@ -16496,7 +16475,7 @@ case $host_cpu in ia64*) shrext_cmds='.so' @@ -405,7 +1020,7 @@ dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. -@@ -15702,7 +15662,7 @@ +@@ -16511,7 +16490,7 @@ ;; hppa*64*) shrext_cmds='.sl' @@ -414,7 +1029,7 @@ 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. -@@ -15735,7 +15695,7 @@ +@@ -16544,7 +16523,7 @@ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -423,7 +1038,7 @@ ;; irix5* | irix6* | nonstopux*) -@@ -15772,7 +15732,7 @@ +@@ -16581,7 +16560,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}" @@ -432,7 +1047,7 @@ ;; # No shared lib support for Linux oldld, aout, or coff. -@@ -15828,7 +15788,7 @@ +@@ -16637,7 +16616,7 @@ # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. @@ -441,7 +1056,7 @@ # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" -@@ -15864,7 +15824,7 @@ +@@ -16673,7 +16652,7 @@ fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes @@ -450,7 +1065,7 @@ ;; newsos6) -@@ -15882,7 +15842,7 @@ +@@ -16691,7 +16670,7 @@ soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -459,7 +1074,7 @@ dynamic_linker='ldqnx.so' ;; -@@ -15944,7 +15904,7 @@ +@@ -16753,7 +16732,7 @@ soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes @@ -468,7 +1083,7 @@ # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; -@@ -16001,7 +15961,7 @@ +@@ -16810,7 +16789,7 @@ soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes @@ -477,7 +1092,7 @@ if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else -@@ -16023,7 +15983,7 @@ +@@ -16832,7 +16811,7 @@ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no @@ -486,51 +1101,98 @@ ;; uts4*) -@@ -17813,7 +17773,7 @@ +@@ -18526,16 +18505,16 @@ + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. +- # In both cases, we have to default to `cp -p'. ++ # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + fi + else +- as_ln_s='cp -p' ++ as_ln_s='cp -pR' + fi + rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file + rmdir conf$$.dir 2>/dev/null +@@ -18595,28 +18574,16 @@ + as_mkdir_p=false + fi + +-if test -x / >/dev/null 2>&1; then +- as_test_x='test -x' +-else +- if ls -dL / >/dev/null 2>&1; then +- as_ls_L_option=L +- else +- as_ls_L_option= +- fi +- as_test_x=' +- eval sh -c '\'' +- if test -d "$1"; then +- test -d "$1/."; +- else +- case $1 in #( +- -*)set "./$1";; +- esac; +- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( +- ???[sx]*):;;*)false;;esac;fi +- '\'' sh +- ' +-fi +-as_executable_p=$as_test_x ++ ++# as_fn_executable_p FILE ++# ----------------------- ++# Test if FILE is an executable regular file. ++as_fn_executable_p () ++{ ++ test -f "$1" && test -x "$1" ++} # as_fn_executable_p ++as_test_x='test -x' ++as_executable_p=as_fn_executable_p + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" +@@ -18638,7 +18605,7 @@ # values after options handling. ac_log=" - This file was extended by sane-backends $as_me 1.0.22, which was --generated by GNU Autoconf 2.66. Invocation command line was -+generated by GNU Autoconf 2.67. Invocation command line was + This file was extended by sane-backends $as_me 1.0.23, which was +-generated by GNU Autoconf 2.68. Invocation command line was ++generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS -@@ -17879,7 +17839,7 @@ +@@ -18704,10 +18671,10 @@ ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ - sane-backends config.status 1.0.22 --configured by $0, generated by GNU Autoconf 2.66, -+configured by $0, generated by GNU Autoconf 2.67, + sane-backends config.status 1.0.23 +-configured by $0, generated by GNU Autoconf 2.68, ++configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" - Copyright (C) 2010 Free Software Foundation, Inc. -@@ -17900,11 +17860,16 @@ - while test $# != 0 - do - case $1 in -- --*=*) -+ --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; -+ --*=) -+ ac_option=`expr "X$1" : 'X\([^=]*\)='` -+ ac_optarg= -+ ac_shift=: -+ ;; - *) - ac_option=$1 - ac_optarg=$2 -@@ -17926,6 +17891,7 @@ - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; -+ '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; -@@ -18132,7 +18098,7 @@ +-Copyright (C) 2010 Free Software Foundation, Inc. ++Copyright (C) 2012 Free Software Foundation, Inc. + This config.status script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it." + +@@ -18798,7 +18765,7 @@ + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + if \$ac_cs_recheck; then +- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion ++ set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' +@@ -18972,7 +18939,7 @@ postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' @@ -539,43 +1201,7 @@ sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -@@ -18302,7 +18268,7 @@ - "tools/sane-config") CONFIG_FILES="$CONFIG_FILES tools/sane-config" ;; - "tools/sane-backends.pc") CONFIG_FILES="$CONFIG_FILES tools/sane-backends.pc" ;; - -- *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; -+ *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; - esac - done - -@@ -18618,7 +18584,7 @@ - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; -- :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; -+ :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac -@@ -18646,7 +18612,7 @@ - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || -- as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; -+ as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" -@@ -18673,7 +18639,7 @@ - - case $ac_tag in - *:-:* | *:-) cat >"$tmp/stdin" \ -- || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; -+ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac -@@ -19707,7 +19673,7 @@ +@@ -20585,7 +20552,7 @@ finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. diff -Nru sane-backends-1.0.22/debian/patches/dll_backend_conf.patch sane-backends-1.0.23/debian/patches/dll_backend_conf.patch --- sane-backends-1.0.22/debian/patches/dll_backend_conf.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/dll_backend_conf.patch 2012-09-20 00:04:40.000000000 +0000 @@ -5,10 +5,10 @@ Also remove the pint backend as it's not available on our platforms. Author: Julien BLACHE -Index: sane-backends-1.0.22/backend/dll.conf.in +Index: sane-backends-1.0.23/backend/dll.conf.in =================================================================== ---- sane-backends-1.0.22.orig/backend/dll.conf.in 2011-01-16 02:01:28.000000000 +0100 -+++ sane-backends-1.0.22/backend/dll.conf.in 2011-02-14 19:02:42.925016002 +0100 +--- sane-backends-1.0.23.orig/backend/dll.conf.in 2012-07-01 14:00:44.000000000 +1200 ++++ sane-backends-1.0.23/backend/dll.conf.in 2012-09-20 11:38:38.630373355 +1200 @@ -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 @@ -23,7 +23,7 @@ net abaton agfafocus -@@ -56,7 +64,6 @@ +@@ -57,7 +65,6 @@ niash #p5 pie diff -Nru sane-backends-1.0.22/debian/patches/fix_v4l_build.patch sane-backends-1.0.23/debian/patches/fix_v4l_build.patch --- sane-backends-1.0.22/debian/patches/fix_v4l_build.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/fix_v4l_build.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,42 +0,0 @@ -commit c5ca46c2d1be78c651afb843cc834cf2b5b24953 -Author: Julien BLACHE -Date: Wed Feb 16 19:37:43 2011 +0100 - - Fix v4l build with libv4l 0.8.3+ - -Index: sane-backends-1.0.22/backend/v4l.c -=================================================================== ---- sane-backends-1.0.22.orig/backend/v4l.c 2011-02-16 19:20:51.193016002 +0100 -+++ sane-backends-1.0.22/backend/v4l.c 2011-02-16 19:21:00.497016002 +0100 -@@ -84,9 +84,8 @@ - #include "../include/sane/sanei_config.h" - #define V4L_CONFIG_FILE "v4l.conf" - --#include "v4l.h" -- - #include -+#include "v4l.h" - - static const SANE_Device **devlist = NULL; - static int num_devices; -Index: sane-backends-1.0.22/backend/v4l.h -=================================================================== ---- sane-backends-1.0.22.orig/backend/v4l.h 2011-02-16 19:20:07.537016001 +0100 -+++ sane-backends-1.0.22/backend/v4l.h 2011-02-16 19:20:41.889016001 +0100 -@@ -29,6 +29,7 @@ - #ifndef v4l_h - #define v4l_h - -+#ifndef __LINUX_VIDEODEV_H - /* Kernel interface */ - /* Only the stuff we need. For more features, more defines are needed */ - -@@ -165,7 +166,7 @@ - - - /* end of kernel interface */ -- -+#endif /* !__LINUX_VIDEODEV_H */ - - #include <../include/sane/sane.h> - diff -Nru sane-backends-1.0.22/debian/patches/frontends_libs.patch sane-backends-1.0.23/debian/patches/frontends_libs.patch --- sane-backends-1.0.22/debian/patches/frontends_libs.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/frontends_libs.patch 2012-09-20 00:04:40.000000000 +0000 @@ -3,11 +3,11 @@ libraries. Author: Julien BLACHE -Index: sane-backends-1.0.22/frontend/Makefile.in +Index: sane-backends-1.0.23/frontend/Makefile.in =================================================================== ---- sane-backends-1.0.22.orig/frontend/Makefile.in 2011-01-30 19:50:55.000000000 +0100 -+++ sane-backends-1.0.22/frontend/Makefile.in 2011-02-14 18:58:17.485016000 +0100 -@@ -142,7 +142,7 @@ +--- sane-backends-1.0.23.orig/frontend/Makefile.in 2012-09-20 11:26:11.426399225 +1200 ++++ sane-backends-1.0.23/frontend/Makefile.in 2012-09-20 11:26:28.442398635 +1200 +@@ -143,7 +143,7 @@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ @@ -16,12 +16,12 @@ LIBTOOL = @LIBTOOL@ LIBUSB_1_0_CFLAGS = @LIBUSB_1_0_CFLAGS@ LIBUSB_1_0_LIBS = @LIBUSB_1_0_LIBS@ -@@ -260,7 +260,7 @@ - scanimage_LDADD = ../lib/liblib.la ../lib/libfelib.la ../backend/libsane.la +@@ -265,7 +265,7 @@ + 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@ + saned_LDADD = ../backend/libsane.la ../sanei/libsanei.la ../lib/liblib.la \ +- ../lib/libfelib.la @SYSLOG_LIBS@ ++ ../lib/libfelib.la @SYSLOG_LIBS@ @AVAHI_LIBS@ test_SOURCES = test.c test_LDADD = ../lib/liblib.la ../lib/libfelib.la ../backend/libsane.la diff -Nru sane-backends-1.0.22/debian/patches/hurd_path_max_fix.patch sane-backends-1.0.23/debian/patches/hurd_path_max_fix.patch --- sane-backends-1.0.22/debian/patches/hurd_path_max_fix.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/hurd_path_max_fix.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -commit 56e39a90800611214385675aec0aa6539618dc28 -Author: Pino Toscano -Date: Fri Mar 4 18:18:35 2011 +0100 - - Define PATH_MAX if needed - -diff --git a/frontend/saned.c b/frontend/saned.c -index c6695be..252b51e 100644 ---- a/frontend/saned.c -+++ b/frontend/saned.c -@@ -209,6 +209,10 @@ static AvahiEntryGroup *avahi_group = NULL; - # define MAXHOSTNAMELEN 120 - #endif - -+#ifndef PATH_MAX -+# define PATH_MAX 1024 -+#endif -+ - struct saned_child { - pid_t pid; - struct saned_child *next; diff -Nru sane-backends-1.0.22/debian/patches/libsane_deps.patch sane-backends-1.0.23/debian/patches/libsane_deps.patch --- sane-backends-1.0.22/debian/patches/libsane_deps.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/libsane_deps.patch 2012-09-20 00:04:40.000000000 +0000 @@ -3,20 +3,20 @@ (aka dll backend). Author: Julien BLACHE -Index: sane-backends-1.0.22/backend/Makefile.in +Index: sane-backends-1.0.23/backend/Makefile.in =================================================================== ---- sane-backends-1.0.22.orig/backend/Makefile.in 2011-01-30 19:50:55.000000000 +0100 -+++ sane-backends-1.0.22/backend/Makefile.in 2011-02-14 18:58:26.341016002 +0100 -@@ -2411,10 +2411,10 @@ +--- sane-backends-1.0.23.orig/backend/Makefile.in 2012-09-20 11:28:11.678395061 +1200 ++++ sane-backends-1.0.23/backend/Makefile.in 2012-09-20 11:30:49.186389607 +1200 +@@ -2472,10 +2472,10 @@ 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) $(RESMGR_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) +-libsane_la_LIBADD = $(COMMON_LIBS) @PRELOADABLE_BACKENDS_ENABLED@ libdll_preload.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_magic.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) $(RESMGR_LIBS) ++libsane_la_LIBADD = $(COMMON_LIBS) libdll_preload.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 +-libsane_la_DEPENDENCIES = $(COMMON_LIBS) @PRELOADABLE_BACKENDS_ENABLED@ libdll_preload.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_magic.lo @SANEI_SANEI_JPEG_LO@ ++libsane_la_DEPENDENCIES = libdll_preload.la sane_strstatus.lo ../sanei/sanei_init_debug.lo ../sanei/sanei_config.lo all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am diff -Nru sane-backends-1.0.22/debian/patches/multiarch_dll_search_path.patch sane-backends-1.0.23/debian/patches/multiarch_dll_search_path.patch --- sane-backends-1.0.22/debian/patches/multiarch_dll_search_path.patch 2011-12-05 01:05:09.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/multiarch_dll_search_path.patch 2012-09-20 00:04:40.000000000 +0000 @@ -3,11 +3,11 @@ but keep /usr/lib/sane as a fallback for now. Author: Julien BLACHE -Index: sane-backends-1.0.22/backend/dll.c +Index: sane-backends-1.0.23/backend/dll.c =================================================================== ---- sane-backends-1.0.22.orig/backend/dll.c 2011-06-13 15:35:40.743153154 +0200 -+++ sane-backends-1.0.22/backend/dll.c 2011-06-13 16:39:05.213837175 +0200 -@@ -428,7 +428,7 @@ +--- sane-backends-1.0.23.orig/backend/dll.c 2012-08-10 12:33:29.000000000 +1200 ++++ sane-backends-1.0.23/backend/dll.c 2012-09-20 11:35:03.742380791 +1200 +@@ -430,7 +430,7 @@ if (path) { @@ -16,7 +16,7 @@ src = malloc (src_len); if (!src) { -@@ -436,12 +436,11 @@ +@@ -438,12 +438,11 @@ return SANE_STATUS_NO_MEM; } orig_src = src; @@ -31,11 +31,11 @@ if (!src) { DBG (1, "load: strdup failed: %s\n", strerror (errno)); -Index: sane-backends-1.0.22/backend/Makefile.in +Index: sane-backends-1.0.23/backend/Makefile.in =================================================================== ---- sane-backends-1.0.22.orig/backend/Makefile.in 2011-06-13 16:39:27.185757336 +0200 -+++ sane-backends-1.0.22/backend/Makefile.in 2011-06-13 16:40:25.145547849 +0200 -@@ -1636,7 +1636,7 @@ +--- sane-backends-1.0.23.orig/backend/Makefile.in 2012-09-20 11:34:57.922380997 +1200 ++++ sane-backends-1.0.23/backend/Makefile.in 2012-09-20 11:35:03.746380793 +1200 +@@ -1680,7 +1680,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ diff -Nru sane-backends-1.0.22/debian/patches/multiarch_manpages_libdir.patch sane-backends-1.0.23/debian/patches/multiarch_manpages_libdir.patch --- sane-backends-1.0.22/debian/patches/multiarch_manpages_libdir.patch 2011-12-05 01:05:09.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/multiarch_manpages_libdir.patch 2012-09-20 00:04:40.000000000 +0000 @@ -3,11 +3,11 @@ a generic /usr/lib/arch_triplet/sane path instead. Author: Julien BLACHE -Index: sane-backends-1.0.22/doc/Makefile.in +Index: sane-backends-1.0.23/doc/Makefile.in =================================================================== ---- sane-backends-1.0.22.orig/doc/Makefile.in 2011-06-13 15:32:13.059822473 +0200 -+++ sane-backends-1.0.22/doc/Makefile.in 2011-06-13 15:32:40.479734324 +0200 -@@ -804,7 +804,7 @@ +--- sane-backends-1.0.23.orig/doc/Makefile.in 2012-08-15 13:49:38.000000000 +1200 ++++ sane-backends-1.0.23/doc/Makefile.in 2012-09-20 11:35:05.226380742 +1200 +@@ -809,7 +809,7 @@ @sed -e 's|@DATADIR@|$(datadir)|g' \ -e 's|@CONFIGDIR@|$(configdir)|g' \ -e 's|@DOCDIR@|$(docdir)|g' \ diff -Nru sane-backends-1.0.22/debian/patches/sane-config_and_pkg-config_fixes.patch sane-backends-1.0.23/debian/patches/sane-config_and_pkg-config_fixes.patch --- sane-backends-1.0.22/debian/patches/sane-config_and_pkg-config_fixes.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/sane-config_and_pkg-config_fixes.patch 2012-09-20 00:04:40.000000000 +0000 @@ -19,24 +19,3 @@ Name: SANE Backends Description: Backends for SANE, the universal scanner interface -Index: sane-backends-1.0.22/tools/sane-config.in -=================================================================== ---- sane-backends-1.0.22.orig/tools/sane-config.in 2010-12-02 00:49:58.000000000 +0100 -+++ sane-backends-1.0.22/tools/sane-config.in 2011-02-14 19:02:36.205016002 +0100 -@@ -7,13 +7,13 @@ - PACKAGE="@PACKAGE@" - scriptname="sane-config" - --LINKER_RPATH="@LINKER_RPATH@" -+LINKER_RPATH="" - - prefix="@prefix@" - exec_prefix="@exec_prefix@" - --LDFLAGS="@LDFLAGS@ @GPHOTO2_LDFLAGS@" --LIBS="@LIBS@ @DL_LIBS@ @LIBV4L_LIBS@ @MATH_LIB@ @TIFF_LIBS@ @JPEG_LIBS@ @GPHOTO2_LIBS@ @SOCKET_LIBS@ @AVAHI_LIBS@ @USB_LIBS@ @SCSI_LIBS@ @RESMGR_LIBS@" -+LDFLAGS="@LDFLAGS@" -+LIBS="@LIBS@" - pkgincludedir="@pkgincludedir@" - pkglibdir="@pkglibdir@" - includedir="@includedir@" diff -Nru sane-backends-1.0.22/debian/patches/sane-desc.c_debian_mods.patch sane-backends-1.0.23/debian/patches/sane-desc.c_debian_mods.patch --- sane-backends-1.0.22/debian/patches/sane-desc.c_debian_mods.patch 2011-12-05 01:05:09.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/sane-desc.c_debian_mods.patch 2012-09-20 00:04:40.000000000 +0000 @@ -5,10 +5,10 @@ this breaks multiarch. Author: Julien BLACHE -Index: sane-backends-1.0.22/tools/sane-desc.c +Index: sane-backends-1.0.23/tools/sane-desc.c =================================================================== ---- sane-backends-1.0.22.orig/tools/sane-desc.c 2011-06-13 15:35:40.875152727 +0200 -+++ sane-backends-1.0.22/tools/sane-desc.c 2011-11-21 15:51:25.135951802 +0100 +--- sane-backends-1.0.23.orig/tools/sane-desc.c 2012-07-01 14:00:44.000000000 +1200 ++++ sane-backends-1.0.23/tools/sane-desc.c 2012-09-20 11:35:00.198380918 +1200 @@ -46,7 +46,7 @@ #define SANE_DESC_VERSION "3.5" @@ -18,7 +18,7 @@ #define COLOR_MINIMAL "\"#B00000\"" #define COLOR_BASIC "\"#FF9000\"" #define COLOR_GOOD "\"#90B000\"" -@@ -2496,8 +2496,8 @@ +@@ -2502,8 +2502,8 @@ printf ("
\n"); } if (be->manpage) @@ -29,7 +29,7 @@ if (be->comment) printf ("Comment: %s
\n", be->comment); -@@ -2731,9 +2731,9 @@ +@@ -2737,9 +2737,9 @@ printf ("\n"); if (model_record->be->manpage) @@ -42,7 +42,7 @@ else printf ("?\n"); -@@ -2758,8 +2758,8 @@ +@@ -2764,8 +2764,8 @@ printf ("\n" "\n" @@ -53,7 +53,7 @@ printf ("

%s

\n", title); printf ("\n" "
\n"); printf ("%s\n", intro); -@@ -3436,8 +3436,8 @@ +@@ -3442,8 +3442,8 @@ { time_t current_time = time (0); printf ("# This file was automatically created based on description files (*.desc)\n" diff -Nru sane-backends-1.0.22/debian/patches/sane-desc_udev+acl.patch sane-backends-1.0.23/debian/patches/sane-desc_udev+acl.patch --- sane-backends-1.0.22/debian/patches/sane-desc_udev+acl.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/sane-desc_udev+acl.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,98 +0,0 @@ -Index: sane-backends-1.0.22/tools/sane-desc.c -=================================================================== ---- sane-backends-1.0.22.orig/tools/sane-desc.c 2011-02-14 19:18:11.461016000 +0100 -+++ sane-backends-1.0.22/tools/sane-desc.c 2011-02-16 20:41:20.641016001 +0100 -@@ -80,6 +80,7 @@ - output_mode_usermap, - output_mode_db, - output_mode_udev, -+ output_mode_udevacl, - output_mode_plist, - output_mode_hal, - output_mode_halnew -@@ -316,7 +317,7 @@ - "(multiple directories can be concatenated by \":\")\n"); - printf (" -m|--mode mode " - "Output mode (ascii, html-backends-split, html-mfgs,\n" -- " xml, statistics, usermap, db, udev, plist, hal, hal-new)\n"); -+ " xml, statistics, usermap, db, udev, udev+acl, plist, hal, hal-new)\n"); - printf (" -t|--title \"title\" The title used for HTML pages\n"); - printf (" -i|--intro \"intro\" A short description of the " - "contents of the page\n"); -@@ -413,6 +414,11 @@ - DBG_INFO ("Output mode: %s\n", optarg); - mode = output_mode_udev; - } -+ else if (strcmp (optarg, "udev+acl") == 0) -+ { -+ DBG_INFO ("Output mode: %s\n", optarg); -+ mode = output_mode_udevacl; -+ } - else if (strcmp (optarg, "plist") == 0) - { - DBG_INFO ("Output mode: %s\n", optarg); -@@ -3525,8 +3531,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); -+ -+ if (mode == output_mode_udevacl) -+ printf ("ATTRS{idVendor}==\"%s\", ATTRS{idProduct}==\"%s\", ENV{libsane_matched}=\"yes\"\n", -+ usbid->usb_vendor_id + 2, usbid->usb_product_id + 2); -+ else -+ 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; - } - -@@ -3538,7 +3550,13 @@ - 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]*\", ATTRS{type}==\"6\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", DEVMODE, DEVGROUP); -+ -+ if (mode == output_mode_udevacl) -+ printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"6\", ENV{libsane_matched}=\"yes\"\n"); -+ else -+ printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"6\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", DEVMODE, DEVGROUP); -+ -+ - printf ("# Some scanners advertise themselves as SCSI device type 3\n"); - - while (scsiid) -@@ -3571,13 +3589,21 @@ - } - } - printf ("\n"); -- printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", -+ -+ if (mode == output_mode_udevacl) -+ printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", ENV{libsane_matched}=\"yes\"\n", -+ scsiid->scsi_vendor_id, scsiid->scsi_product_id); -+ else -+ printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\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_scsi_rules_end\"\n"); -+ -+ if (mode == output_mode_udevacl) -+ printf("\nENV{libsane_matched}==\"yes\", RUN+=\"/bin/setfacl -m g:%s:rw $env{DEVNAME}\"\n", DEVGROUP); - -- printf ("LABEL=\"libsane_rules_end\"\n"); -+ printf ("\nLABEL=\"libsane_rules_end\"\n"); - } - - static void -@@ -3769,6 +3795,7 @@ - print_db (); - break; - case output_mode_udev: -+ case output_mode_udevacl: - print_udev (); - break; - case output_mode_plist: diff -Nru sane-backends-1.0.22/debian/patches/scanimage_man_batch_start.patch sane-backends-1.0.23/debian/patches/scanimage_man_batch_start.patch --- sane-backends-1.0.22/debian/patches/scanimage_man_batch_start.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/scanimage_man_batch_start.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -commit 22c7800b8dccfeb9090729e43f4bd40e3149b468 -Author: Julien BLACHE -Date: Sat Mar 12 11:44:15 2011 +0100 - - batch-start defaults to 1, not 0 - -diff --git a/doc/scanimage.man b/doc/scanimage.man -index 121a1a5..0012f6e 100644 ---- a/doc/scanimage.man -+++ b/doc/scanimage.man -@@ -171,7 +171,7 @@ is given as a printf style string with one integer parameter. - .B \-\-batch\-start - .I start - selects the page number to start naming files with. If this option is not --given, the counter will start at 0. -+given, the counter will start at 1. - .B \-\-batch\-count - .I count - specifies the number of pages to attempt to scan. If not given, diff -Nru sane-backends-1.0.22/debian/patches/series sane-backends-1.0.23/debian/patches/series --- sane-backends-1.0.22/debian/patches/series 2011-12-05 01:05:09.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/series 2012-09-20 00:04:40.000000000 +0000 @@ -8,17 +8,6 @@ multiarch_dll_search_path.patch multiarch_manpages_libdir.patch -# New features -sane-desc_udev+acl.patch -udev_usb_suspend.patch - -# Fixes below this line -fix_v4l_build.patch -xerox_mfp_fix_usb_devices.patch -xerox_mfp_add_scx_4623fw.patch -hurd_path_max_fix.patch -scanimage_man_batch_start.patch - # from Ubuntu disable_v4l.patch fix_avahi_error_paths.patch diff -Nru sane-backends-1.0.22/debian/patches/udev_usb_suspend.patch sane-backends-1.0.23/debian/patches/udev_usb_suspend.patch --- sane-backends-1.0.22/debian/patches/udev_usb_suspend.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/udev_usb_suspend.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,18 +0,0 @@ -Description: Use power/control instead of power/level if available - Move away from the deprecated power/level interface if the newer - power/control interface is available. -Author: Julien BLACHE - -Index: sane-backends-1.0.22/tools/sane-desc.c -=================================================================== ---- sane-backends-1.0.22.orig/tools/sane-desc.c 2011-03-12 11:08:48.417016018 +0100 -+++ sane-backends-1.0.22/tools/sane-desc.c 2011-03-12 11:13:36.125015583 +0100 -@@ -3543,7 +3543,7 @@ - } - - 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("ENV{libsane_matched}==\"yes\", RUN+=\"/bin/sh -c 'if test -e /sys/$env{DEVPATH}/power/control; then echo on > /sys/$env{DEVPATH}/power/control; elif test -e /sys/$env{DEVPATH}/power/level; then echo on > /sys/$env{DEVPATH}/power/level; fi'\"\n"); - - printf ("\nLABEL=\"libsane_usb_rules_end\"\n\n"); - diff -Nru sane-backends-1.0.22/debian/patches/unneeded_doc.patch sane-backends-1.0.23/debian/patches/unneeded_doc.patch --- sane-backends-1.0.22/debian/patches/unneeded_doc.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/unneeded_doc.patch 2012-09-20 00:04:40.000000000 +0000 @@ -4,11 +4,11 @@ source tarball. Author: Julien BLACHE -Index: sane-backends-1.0.22/Makefile.in +Index: sane-backends-1.0.23/Makefile.in =================================================================== ---- sane-backends-1.0.22.orig/Makefile.in 2011-01-30 19:50:56.000000000 +0100 -+++ sane-backends-1.0.22/Makefile.in 2011-02-14 19:02:55.957016001 +0100 -@@ -295,11 +295,7 @@ +--- sane-backends-1.0.23.orig/Makefile.in 2012-08-15 13:49:39.000000000 +1200 ++++ sane-backends-1.0.23/Makefile.in 2012-09-20 11:38:41.750373243 +1200 +@@ -298,11 +298,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 @@ -21,12 +21,12 @@ 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 \ -Index: sane-backends-1.0.22/doc/Makefile.in +Index: sane-backends-1.0.23/doc/Makefile.in =================================================================== ---- sane-backends-1.0.22.orig/doc/Makefile.in 2011-01-30 19:50:55.000000000 +0100 -+++ sane-backends-1.0.22/doc/Makefile.in 2011-02-14 19:02:55.957016001 +0100 -@@ -333,7 +333,7 @@ - MAN2HTML = nroff -man |\ +--- sane-backends-1.0.23.orig/doc/Makefile.in 2012-08-15 13:49:38.000000000 +1200 ++++ sane-backends-1.0.23/doc/Makefile.in 2012-09-20 11:38:41.750373243 +1200 +@@ -337,7 +337,7 @@ + MAN2HTML = nroff -c -man |\ man2html -compress -topm 6 -botm 6 -nodepage -title $${page} \ -cgiurl '$$title.$$section.html'|\ - sed 's,,

,' diff -Nru sane-backends-1.0.22/debian/patches/xerox_mfp_add_scx_4623fw.patch sane-backends-1.0.23/debian/patches/xerox_mfp_add_scx_4623fw.patch --- sane-backends-1.0.22/debian/patches/xerox_mfp_add_scx_4623fw.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/xerox_mfp_add_scx_4623fw.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,36 +0,0 @@ -commit 90f15838eab8946a039394e0abaa70de25b5348c -Author: Alex Belkin -Date: Tue Mar 8 18:01:25 2011 +0300 - - usb ids for Samsung SCX-4623FW - -diff --git a/backend/xerox_mfp.conf.in b/backend/xerox_mfp.conf.in -index ffc4c4c..2a28004 100644 ---- a/backend/xerox_mfp.conf.in -+++ b/backend/xerox_mfp.conf.in -@@ -39,6 +39,9 @@ usb 0x0924 0x4265 - #Samsung SCX-4623 - usb 0x04e8 0x3434 - -+#Samsung SCX-4623FW -+usb 0x04e8 0x3440 -+ - # Samsung SCX-4825FN - usb 0x04e8 0x343c - -diff --git a/doc/descriptions/xerox_mfp.desc b/doc/descriptions/xerox_mfp.desc -index 9eee9ac..91d9be3 100644 ---- a/doc/descriptions/xerox_mfp.desc -+++ b/doc/descriptions/xerox_mfp.desc -@@ -93,6 +93,11 @@ - :usbid "0x04e8" "0x3434" - :status :good - -+:model "SCX-4623FW" -+:interface "USB" -+:usbid "0x04e8" "0x3440" -+:status :good -+ - :model "SCX-4825FN" - :interface "USB" - :usbid "0x04e8" "0x343c" diff -Nru sane-backends-1.0.22/debian/patches/xerox_mfp_fix_usb_devices.patch sane-backends-1.0.23/debian/patches/xerox_mfp_fix_usb_devices.patch --- sane-backends-1.0.22/debian/patches/xerox_mfp_fix_usb_devices.patch 2011-12-04 23:07:18.000000000 +0000 +++ sane-backends-1.0.23/debian/patches/xerox_mfp_fix_usb_devices.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,67 +0,0 @@ -commit 5ea227caeacd504b64eef301e83fa63e0a25b3f7 -Author: Alex Belkin -Date: Tue Mar 8 17:57:19 2011 +0300 - - keep usb device by default (correct for bug introduced by tcp sub-backend - -diff --git a/backend/xerox_mfp.c b/backend/xerox_mfp.c -index e08b50f..d4672a7 100644 ---- a/backend/xerox_mfp.c -+++ b/backend/xerox_mfp.c -@@ -37,10 +37,10 @@ - static const SANE_Device **devlist = NULL; /* sane_get_devices array */ - static struct device *devices_head = NULL; /* sane_get_devices list */ - --transport available_transports[] = { -+enum { TRANSPORT_USB, TRANSPORT_TCP, TRANSPORTS_MAX }; -+transport available_transports[TRANSPORTS_MAX] = { - { "usb", usb_dev_request, usb_dev_open, usb_dev_close, usb_configure_device }, - { "tcp", tcp_dev_request, tcp_dev_open, tcp_dev_close, tcp_configure_device }, -- { 0 } - }; - - static int resolv_state(int state) -@@ -824,7 +824,13 @@ free_devices (void) - devices_head = NULL; - } - --/* SANE API ignores return code of this callback */ -+static transport *tr_from_devname(SANE_String_Const devname) -+{ -+ if (strncmp("tcp", devname, 3) == 0) -+ return &available_transports[TRANSPORT_TCP]; -+ return &available_transports[TRANSPORT_USB]; -+} -+ - static SANE_Status - list_one_device (SANE_String_Const devname) - { -@@ -839,12 +845,7 @@ list_one_device (SANE_String_Const devname) - return SANE_STATUS_GOOD; - } - -- for (tr = available_transports; tr->ttype; tr++) { -- if (!strncmp (devname, tr->ttype, strlen(tr->ttype))) -- break; -- } -- if (!tr->ttype) -- return SANE_STATUS_INVAL; -+ tr = tr_from_devname(devname); - - dev = calloc (1, sizeof (struct device)); - if (dev == NULL) -@@ -878,13 +879,7 @@ list_one_device (SANE_String_Const devname) - static SANE_Status - list_conf_devices (UNUSED (SANEI_Config * config), const char *devname) - { -- transport *tr; -- -- for (tr = available_transports; tr->ttype; tr++) { -- if (!strncmp (devname, tr->ttype, strlen(tr->ttype))) -- return tr->configure_device(devname, list_one_device); -- } -- return SANE_STATUS_INVAL; -+ return tr_from_devname(devname)->configure_device(devname, list_one_device); - } - - SANE_Status diff -Nru sane-backends-1.0.22/debian/rules sane-backends-1.0.23/debian/rules --- sane-backends-1.0.22/debian/rules 2011-12-05 04:02:54.000000000 +0000 +++ sane-backends-1.0.23/debian/rules 2012-09-20 00:04:40.000000000 +0000 @@ -55,7 +55,8 @@ --enable-pthread \ --with-gphoto2 \ --enable-translations \ - --enable-avahi + --enable-avahi \ + --enable-libusb_1_0 # generate POT file for translators (cd po && make sane-backends.pot) diff -Nru sane-backends-1.0.22/depcomp sane-backends-1.0.23/depcomp --- sane-backends-1.0.22/depcomp 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/depcomp 2011-11-21 20:17:48.000000000 +0000 @@ -1,10 +1,10 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2007-03-29.01 +scriptversion=2009-04-28.21; # UTC -# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software -# Foundation, Inc. +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, Inc. # 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 @@ -17,9 +17,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -87,6 +85,15 @@ depmode=dashmstdout fi +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what @@ -192,14 +199,14 @@ ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' -' ' ' >> $depfile - echo >> $depfile +' ' ' >> "$depfile" + echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ - >> $depfile + >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile @@ -328,7 +335,12 @@ if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. - sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi @@ -404,7 +416,7 @@ # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift @@ -455,32 +467,39 @@ "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift - cleared=no - for arg in "$@"; do + cleared=no eat=no + for arg + do case $cleared in no) set ""; shift cleared=yes ;; esac + if test $eat = yes; then + eat=no + continue + fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done - obj_suffix="`echo $object | sed 's/^.*\././'`" + obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" @@ -500,7 +519,7 @@ # Remove the call to Libtool. if test "$libtool" = yes; then - while test $1 != '--mode=compile'; do + while test "X$1" != 'X--mode=compile'; do shift done shift @@ -538,13 +557,27 @@ msvisualcpp) # Important note: in order to support this mode, a compiler *must* - # always write the preprocessed file to stdout, regardless of -o, - # because we must use -o when running libtool. + # always write the preprocessed file to stdout. "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + IFS=" " for arg do case "$arg" in + -o) + shift + ;; + $object) + shift + ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift @@ -557,16 +590,23 @@ ;; esac done - "$@" -E | - sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" - . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + none) exec "$@" ;; @@ -585,5 +625,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff -Nru sane-backends-1.0.22/doc/Makefile.am sane-backends-1.0.23/doc/Makefile.am --- sane-backends-1.0.22/doc/Makefile.am 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/doc/Makefile.am 2012-07-01 02:00:44.000000000 +0000 @@ -22,7 +22,7 @@ sane-hp.5 sane-gphoto2.5 sane-leo.5 sane-lexmark.5 \ sane-matsushita.5 sane-microtek.5 sane-microtek2.5 sane-mustek.5 \ sane-nec.5 sane-net.5 sane-pie.5 sane-pint.5 sane-pnm.5 \ - sane-umax.5 sane-qcam.5 sane-scsi.5 sane-artec.5 sane-kodak.5 \ + sane-umax.5 sane-qcam.5 sane-scsi.5 sane-artec.5 sane-kodak.5 sane-kodakaio.5 \ sane-fujitsu.5 sane-sharp.5 sane-s9036.5 sane-tamarack.5 \ sane-ricoh.5 sane-avision.5 sane-plustek.5 sane-st400.5 \ sane-mustek_pp.5 sane-dc210.5 sane-v4l.5 sane-snapscan.5 \ @@ -37,7 +37,7 @@ sane-hp5590.5 sane-hpljm1005.5 sane-cardscan.5 sane-hp3900.5 \ sane-epjitsu.5 sane-hs2p.5 sane-canon_dr.5 sane-xerox_mfp.5 \ sane-rts8891.5 sane-coolscan3.5 sane-kvs1025.5 sane-kvs20xx.5 \ - sane-p5.5 sane-magicolor.5 + sane-kvs40xx.5 sane-p5.5 sane-magicolor.5 EXTRA_DIST += sane-abaton.man sane-agfafocus.man sane-apple.man sane-as6e.man \ sane-dll.man sane-dc25.man sane-dmc.man sane-epson.man \ @@ -46,7 +46,7 @@ sane-microtek2.man sane-mustek.man sane-nec.man sane-net.man \ sane-pie.man sane-pint.man sane-pnm.man sane-umax.man \ sane-qcam.man sane-scsi.man sane-artec.man sane-fujitsu.man \ - sane-sharp.man sane-s9036.man sane-tamarack.man sane-kodak.man \ + sane-sharp.man sane-s9036.man sane-tamarack.man sane-kodak.man sane-kodakaio.man\ sane-ricoh.man sane-avision.man sane-plustek.man sane-st400.man \ sane-mustek_pp.man sane-dc210.man sane-v4l.man sane-snapscan.man \ sane-canon.man sane-coolscan.man sane-bh.man sane-dc240.man \ @@ -61,8 +61,8 @@ sane-pixma.man sane-stv680.man sane-hp5590.man sane-hpljm1005.man \ sane-cardscan.man sane-hp3900.man sane-epjitsu.man sane-hs2p.man \ sane-canon_dr.man sane-xerox_mfp.man sane-rts8891.man \ - sane-coolscan3.man sane-kvs1025.man sane-kvs20xx.man sane-p5.man \ - sane-magicolor.man + sane-coolscan3.man sane-kvs1025.man sane-kvs20xx.man sane-kvs40xx.man \ + sane-p5.man sane-magicolor.man man7_MANS = sane.7 EXTRA_DIST += sane.man @@ -98,7 +98,7 @@ DVIPS = @DVIPS@ MAKEINDEX = @MAKEINDEX@ DLH = TEXINPUTS="$(srcdir):$$TEXINPUTS" dlh -MAN2HTML= nroff -man |\ +MAN2HTML= nroff -c -man |\ man2html -compress -topm 6 -botm 6 -nodepage -title $${page} \ -cgiurl '$$title.$$section.html'|\ sed 's,,

,' @@ -174,7 +174,8 @@ descriptions/hp3900.desc descriptions/hp4200.desc descriptions/hp5400.desc \ descriptions/hp5590.desc descriptions/hp.desc descriptions/hpljm1005.desc \ descriptions/hpsj5s.desc descriptions/hs2p.desc descriptions/ibm.desc \ - descriptions/kodak.desc descriptions/kvs1025.desc descriptions/kvs20xx.desc \ + descriptions/kodak.desc descriptions/kodakaio.desc descriptions/kvs1025.desc \ + descriptions/kvs20xx.desc descriptions/kvs40xx.desc \ descriptions/leo.desc descriptions/lexmark.desc descriptions/ma1509.desc \ descriptions/magicolor.desc \ descriptions/matsushita.desc descriptions/microtek2.desc \ diff -Nru sane-backends-1.0.22/doc/Makefile.in sane-backends-1.0.23/doc/Makefile.in --- sane-backends-1.0.22/doc/Makefile.in 2011-01-30 18:50:55.000000000 +0000 +++ sane-backends-1.0.23/doc/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -92,6 +92,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ @@ -157,6 +158,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -206,6 +208,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -266,24 +269,25 @@ sane-mustek.man sane-nec.man sane-net.man sane-pie.man \ sane-pint.man sane-pnm.man sane-umax.man sane-qcam.man \ sane-scsi.man sane-artec.man sane-fujitsu.man sane-sharp.man \ - sane-s9036.man sane-tamarack.man sane-kodak.man sane-ricoh.man \ - sane-avision.man sane-plustek.man sane-st400.man \ - sane-mustek_pp.man sane-dc210.man sane-v4l.man \ - sane-snapscan.man sane-canon.man sane-coolscan.man sane-bh.man \ - sane-dc240.man sane-umax_pp.man sane-umax1220u.man \ - sane-sm3600.man sane-usb.man sane-mustek_usb.man \ - sane-sceptre.man sane-canon_pp.man sane-canon630u.man \ - sane-teco1.man sane-teco2.man sane-teco3.man sane-test.man \ - sane-sp15c.man sane-coolscan2.man sane-hpsj5s.man \ - sane-gt68xx.man sane-artec_eplus48u.man sane-ma1509.man \ - sane-ibm.man sane-hp5400.man sane-plustek_pp.man sane-u12.man \ - sane-niash.man sane-sm3840.man sane-genesys.man \ - sane-hp4200.man sane-mustek_usb2.man sane-hp3500.man \ - sane-pixma.man sane-stv680.man sane-hp5590.man \ - sane-hpljm1005.man sane-cardscan.man sane-hp3900.man \ - sane-epjitsu.man sane-hs2p.man sane-canon_dr.man \ - sane-xerox_mfp.man sane-rts8891.man sane-coolscan3.man \ - sane-kvs1025.man sane-kvs20xx.man sane-p5.man \ + sane-s9036.man sane-tamarack.man sane-kodak.man \ + sane-kodakaio.man sane-ricoh.man sane-avision.man \ + sane-plustek.man sane-st400.man sane-mustek_pp.man \ + sane-dc210.man sane-v4l.man sane-snapscan.man sane-canon.man \ + sane-coolscan.man sane-bh.man sane-dc240.man sane-umax_pp.man \ + sane-umax1220u.man sane-sm3600.man sane-usb.man \ + sane-mustek_usb.man sane-sceptre.man sane-canon_pp.man \ + sane-canon630u.man sane-teco1.man sane-teco2.man \ + sane-teco3.man sane-test.man sane-sp15c.man sane-coolscan2.man \ + sane-hpsj5s.man sane-gt68xx.man sane-artec_eplus48u.man \ + sane-ma1509.man sane-ibm.man sane-hp5400.man \ + sane-plustek_pp.man sane-u12.man sane-niash.man \ + sane-sm3840.man sane-genesys.man sane-hp4200.man \ + sane-mustek_usb2.man sane-hp3500.man sane-pixma.man \ + sane-stv680.man sane-hp5590.man sane-hpljm1005.man \ + sane-cardscan.man sane-hp3900.man sane-epjitsu.man \ + sane-hs2p.man sane-canon_dr.man sane-xerox_mfp.man \ + sane-rts8891.man sane-coolscan3.man sane-kvs1025.man \ + sane-kvs20xx.man sane-kvs40xx.man sane-p5.man \ sane-magicolor.man sane.man saned.man descriptions.txt \ releases.txt sane-logo2.jpg sane-logo.png sane.png sane.tex \ net.tex html.sty $(DESC_FILES) descriptions/template.desc. \ @@ -300,7 +304,7 @@ sane-hp.5 sane-gphoto2.5 sane-leo.5 sane-lexmark.5 \ sane-matsushita.5 sane-microtek.5 sane-microtek2.5 sane-mustek.5 \ sane-nec.5 sane-net.5 sane-pie.5 sane-pint.5 sane-pnm.5 \ - sane-umax.5 sane-qcam.5 sane-scsi.5 sane-artec.5 sane-kodak.5 \ + sane-umax.5 sane-qcam.5 sane-scsi.5 sane-artec.5 sane-kodak.5 sane-kodakaio.5 \ sane-fujitsu.5 sane-sharp.5 sane-s9036.5 sane-tamarack.5 \ sane-ricoh.5 sane-avision.5 sane-plustek.5 sane-st400.5 \ sane-mustek_pp.5 sane-dc210.5 sane-v4l.5 sane-snapscan.5 \ @@ -315,7 +319,7 @@ sane-hp5590.5 sane-hpljm1005.5 sane-cardscan.5 sane-hp3900.5 \ sane-epjitsu.5 sane-hs2p.5 sane-canon_dr.5 sane-xerox_mfp.5 \ sane-rts8891.5 sane-coolscan3.5 sane-kvs1025.5 sane-kvs20xx.5 \ - sane-p5.5 sane-magicolor.5 + sane-kvs40xx.5 sane-p5.5 sane-magicolor.5 man7_MANS = sane.7 man8_MANS = saned.8 @@ -330,7 +334,7 @@ dist_doc_DATA = backend-writing.txt nobase_dist_doc_DATA = $(BEDOCS) DLH = TEXINPUTS="$(srcdir):$$TEXINPUTS" dlh -MAN2HTML = nroff -man |\ +MAN2HTML = nroff -c -man |\ man2html -compress -topm 6 -botm 6 -nodepage -title $${page} \ -cgiurl '$$title.$$section.html'|\ sed 's,,

,' @@ -380,7 +384,8 @@ descriptions/hp3900.desc descriptions/hp4200.desc descriptions/hp5400.desc \ descriptions/hp5590.desc descriptions/hp.desc descriptions/hpljm1005.desc \ descriptions/hpsj5s.desc descriptions/hs2p.desc descriptions/ibm.desc \ - descriptions/kodak.desc descriptions/kvs1025.desc descriptions/kvs20xx.desc \ + descriptions/kodak.desc descriptions/kodakaio.desc descriptions/kvs1025.desc \ + descriptions/kvs20xx.desc descriptions/kvs40xx.desc \ descriptions/leo.desc descriptions/lexmark.desc descriptions/ma1509.desc \ descriptions/magicolor.desc \ descriptions/matsushita.desc descriptions/microtek2.desc \ diff -Nru sane-backends-1.0.22/doc/descriptions/avision.desc sane-backends-1.0.23/doc/descriptions/avision.desc --- sane-backends-1.0.22/doc/descriptions/avision.desc 2011-01-30 18:49:46.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/avision.desc 2012-07-01 02:00:44.000000000 +0000 @@ -14,7 +14,7 @@ :backend "avision" ; version of backend -:version "Build: 294" +:version "Build: 296" ;status: alpha, beta, stable, new ;:status :stable @@ -163,7 +163,7 @@ :model "AV610" :interface "USB" -:usbid "0x0638" "0x0a19" +:usbid "0x0638" "0x0a18" :status :good :model "AV600U Plus" @@ -753,6 +753,11 @@ :usbid "0x04a7" "0x048c" :status :good +:model "DocuMate232" +:interface "USB" +:usbid "0x04a7" "0x0476" +:status :good + :model "DocuMate262" :interface "USB" :usbid "0x04a7" "0x044c" diff -Nru sane-backends-1.0.22/doc/descriptions/canon_dr.desc sane-backends-1.0.23/doc/descriptions/canon_dr.desc --- sane-backends-1.0.22/doc/descriptions/canon_dr.desc 2011-01-30 18:49:46.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/canon_dr.desc 2011-07-07 14:28:17.000000000 +0000 @@ -11,9 +11,9 @@ :backend "canon_dr" ; name of backend :url "http://www.thebility.com/canon/" -:version "37" ; version of backend +:version "38" ; version of backend :manpage "sane-canon_dr" ; name of manpage (if it exists) -:comment "Backend updated for SANE release 1.0.21, see sane-canon_dr manpage" +:comment "Backend updated for SANE release 1.0.23, see sane-canon_dr manpage" :devicetype :scanner ; start of a list of devices.... ; other types: :stillcam, :vidcam, ; :meta, :api @@ -174,8 +174,8 @@ :model "DR-5020" :interface "SCSI" -:status :untested -:comment "Please test!" +:status :good +:comment "LineArt, Duplex working, cannot read buttons or screen?" :model "DR-5060F" :interface "SCSI" diff -Nru sane-backends-1.0.22/doc/descriptions/epjitsu.desc sane-backends-1.0.23/doc/descriptions/epjitsu.desc --- sane-backends-1.0.22/doc/descriptions/epjitsu.desc 2011-01-31 13:31:34.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/epjitsu.desc 2012-07-25 00:02:39.000000000 +0000 @@ -42,9 +42,9 @@ :model "ScanSnap S1100" :interface "USB" -:status :untested -;:usbid "0x04c5" "0x11ed" -:comment "Testers needed!" +:status :unsupported +:usbid "0x04c5" "0x1200" +:comment "Beta version of backend source available, which works well, but breaks support for other epjitsu scanners. See http://ubuntuforums.org/showthread.php?t=1678335" :model "ScanSnap S1300" :interface "USB" diff -Nru sane-backends-1.0.22/doc/descriptions/epson2.desc sane-backends-1.0.23/doc/descriptions/epson2.desc --- sane-backends-1.0.22/doc/descriptions/epson2.desc 2010-12-07 03:20:01.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/epson2.desc 2011-10-19 00:43:00.000000000 +0000 @@ -490,6 +490,7 @@ :model "GT-10000+" ; command spec :interface "SCSI" +:scsi "EPSON" "SCANNER GT-10000" "processor" :status :good :comment "IEEE1394 untested
overseas version of the ES-6000H" @@ -1874,6 +1875,12 @@ :status :good :comment "all-in-one
overseas version of the PX-402A" +:model "Stylus SX125" +:interface "USB" +:usbid "0x04b8" "0x085c" +:status :untested +:comment "all-in-one" + :model "Stylus SX200" :interface "USB" :usbid "0x04b8" "0x0849" diff -Nru sane-backends-1.0.22/doc/descriptions/fujitsu.desc sane-backends-1.0.23/doc/descriptions/fujitsu.desc --- sane-backends-1.0.22/doc/descriptions/fujitsu.desc 2011-01-31 13:31:34.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/fujitsu.desc 2012-07-01 19:26:28.000000000 +0000 @@ -12,9 +12,9 @@ :backend "fujitsu" ; name of backend :url "http://www.thebility.com/fujitsu/" -:version "106" ; version of backend +:version "111" ; version of backend :manpage "sane-fujitsu" ; name of manpage (if it exists) -:comment "Backend updated for SANE release 1.0.22, see sane-fujitsu manpage" +:comment "Backend updated for SANE release 1.0.23, see sane-fujitsu manpage" :devicetype :scanner ; start of a list of devices.... ; other types: :stillcam, :vidcam, ; :meta, :api @@ -61,6 +61,12 @@ :status :complete :comment "small, recent, discontinued, usb 2.0" +:model "fi-5110C" +:interface "USB" +:status :complete +:usbid "0x04c5" "0x1097" +:comment "small, recent, discontinued" + :model "fi-5110EOX/2" :interface "USB" :status :complete @@ -125,72 +131,47 @@ :usbid "0x04c5" "0x116f" :comment "small, recent, discontinued" -;================================================== -; CURRENT MODELS, SMALL -:model "fi-5110C" -:interface "USB" -:status :complete -:usbid "0x04c5" "0x1097" -:comment "small, current" - -:model "fi-6010N" -:interface "Ethernet" -:status :untested -:comment "small, current, integrated touchscreen and keyboard" - -:model "fi-6110" -:interface "USB" -:status :complete -:usbid "0x04c5" "0x11fc" -:comment "small, current" - :model "fi-6130" :interface "USB" :status :complete :usbid "0x04c5" "0x114f" -:comment "small, current" +:comment "small, recent, discontinued" :model "fi-6230" :interface "USB" :status :complete :usbid "0x04c5" "0x1150" -:comment "small, current" - -:model "fi-6125" -:interface "USB" -:status :untested -:usbid "0x04c5" "0x11ee" -:comment "small, unreleased" +:comment "small, recent, discontinued" -:model "fi-6225" -:interface "USB" +;================================================== +; CURRENT MODELS, SMALL +:model "ScanSnap N1800" +:interface "Ethernet" :status :untested -:usbid "0x04c5" "0x11ef" -:comment "small, unreleased" +:comment "small, current, integrated touchscreen and keyboard" -:model "fi-6145" -:interface "USB" +:model "ScanSnap fi-6010N" +:interface "Ethernet" :status :untested -:usbid "0x04c5" "0x11f1" -:comment "small, unreleased" +:comment "small, current, integrated touchscreen and keyboard" -:model "fi-6245" +:model "fi-6110" :interface "USB" -:status :untested -:usbid "0x04c5" "0x11f2" -:comment "small, unreleased" +:status :complete +:usbid "0x04c5" "0x11fc" +:comment "small, current" -:model "fi-6135" +:model "fi-6130Z" :interface "USB" -:status :untested +:status :complete :usbid "0x04c5" "0x11f3" -:comment "small, unreleased" +:comment "small, current" -:model "fi-6235" +:model "fi-6230Z" :interface "USB" -:status :untested +:status :complete :usbid "0x04c5" "0x11f4" -:comment "small, unreleased" +:comment "small, current" :model "ScanSnap S1500" :interface "USB" @@ -263,6 +244,12 @@ ;================================================== ; DISCONTINUED NEWER MODELS, MEDIUM +:model "fi-4340C" +:interface "SCSI USB" +:usbid "0x04c5" "0x10cf" +:status :complete +:comment "medium, current" + :model "fi-4530C" :interface "SCSI USB" :status :complete @@ -285,13 +272,20 @@ :usbid "0x04c5" "0x10e2" :comment "medium, recent, discontinued" -;================================================== -; CURRENT MODELS, MEDIUM -:model "fi-4340C" +:model "fi-6140" :interface "SCSI USB" -:usbid "0x04c5" "0x10cf" :status :complete -:comment "medium, current" +:usbid "0x04c5" "0x114d" +:comment "medium, recent, discontinued" + +:model "fi-6240" +:interface "SCSI USB" +:status :complete +:usbid "0x04c5" "0x114e" +:comment "medium, recent, discontinued" + +;================================================== +; CURRENT MODELS, MEDIUM :model "fi-5530C2" :interface "SCSI USB" @@ -299,17 +293,17 @@ :usbid "0x04c5" "0x114a" :comment "medium, current" -:model "fi-6140" +:model "fi-6140Z" :interface "SCSI USB" -:status :good -:usbid "0x04c5" "0x114d" -:comment "medium, current, Autocrop and Autodeskew not supported" +:status :complete +:usbid "0x04c5" "0x11f1" +:comment "medium, current" -:model "fi-6240" +:model "fi-6240Z" :interface "SCSI USB" -:status :good -:usbid "0x04c5" "0x114e" -:comment "medium, current, Autocrop and Autodeskew not supported" +:status :complete +:usbid "0x04c5" "0x11f2" +:comment "medium, current" ;================================================== ; DISCONTINUED OLDER MODELS, BIG @@ -387,6 +381,12 @@ :status :complete :comment "big, recent, discontinued" +:model "fi-5900C" +:interface "SCSI USB" +:usbid "0x04c5" "0x10e7" +:status :good +:comment "big, recent, discontinued. Independent ultrasonic control and multistream unsupported" + :model "fi-6750S" :interface "USB" :status :untested @@ -395,17 +395,11 @@ ;================================================== ; CURRENT MODELS, BIG -:model "fi-5900C" -:interface "SCSI USB" -:usbid "0x04c5" "0x10e7" -:status :good -:comment "big, current, independent ultrasonic control and multistream unsupported" - :model "fi-5950C" :interface "SCSI USB" -;:usbid "0x04c5" "0x10e7" +:usbid "0x04c5" "0x1213" :status :untested -:comment "Faster version of fi-5900?" +:comment "big, current. Faster version of fi-5900?" :model "fi-6670" :interface "SCSI USB" @@ -435,22 +429,10 @@ :interface "SCSI USB" :status :untested :usbid "0x04c5" "0x119d" -:comment "big, current" +:comment "big, current. Independent ultrasonic control and multistream unsupported" :model "fi-6800-CGA" :interface "SCSI USB" :status :untested :usbid "0x04c5" "0x119e" -:comment "big, current. VRS CGA board unsupported" - -:model "fi-6900" -:interface "SCSI USB" -:status :untested -:usbid "0x04c5" "0x119f" -:comment "big, unreleased, similar to fi-5900?" - -:model "fi-6900-CGA" -:interface "SCSI USB" -:status :untested -:usbid "0x04c5" "0x11a0" -:comment "big, unreleased, similar to fi-5900? VRS CGA board unsupported" +:comment "big, current. VRS CGA board unsupported, Independent ultrasonic control and multistream unsupported" diff -Nru sane-backends-1.0.22/doc/descriptions/genesys.desc sane-backends-1.0.23/doc/descriptions/genesys.desc --- sane-backends-1.0.22/doc/descriptions/genesys.desc 2011-01-19 02:31:13.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/genesys.desc 2012-07-01 02:00:44.000000000 +0000 @@ -55,7 +55,7 @@ :model "ScanJet 2400C" :interface "USB" :usbid "0x03f0" "0x0a01" -:status :untested +:status :complete :comment "1200x1200 dpi max" :model "ScanJet G2410" @@ -74,19 +74,31 @@ :interface "USB" :usbid "0x03f0" "0x1405" :status :complete -:comment "1200x1200 dpi max, same as HP3670C" +:comment "1200x1200 dpi max, same as HP 3670C" + +:model "ScanJet 4850C" +:interface "USB" +:usbid "0x03f0" "0x1b05" +:status :untested +:comment "resolution from 100 to 2400 supported, UTA not supported yet" :model "ScanJet G4010" :interface "USB" :usbid "0x03f0" "0x4505" -:status :basic -:comment "resolution from 100 to 600 supported, 1200 and 2400 remain to be added" +:status :good +:comment "resolution from 100 to 2400 supported, UTA not supported yet" :model "ScanJet G4050" :interface "USB" :usbid "0x03f0" "0x4605" :status :basic -:comment "resolution from 100 to 600 supported, 1200 and 2400 remain to be added" +:comment "resolution from 100 to 2400 supported, UTA not supported yet" + +:model "ScanJet N6310" +:interface "USB" +:usbid "0x03f0" "0x4705" +:status :untested +:comment "Not completed yet to capture the images" ; ----------------------------------------------------------------------------- @@ -119,6 +131,7 @@ :interface "USB" :usbid "0x04a9" "0x1904" :status :complete +:comment "GL847 based, resolution from 75 to 2400 dpi" :model "CanoScan LiDE 110" :interface "USB" @@ -130,6 +143,7 @@ :interface "USB" :usbid "0x04a9" "0x1905" :status :complete +:comment "GL847 based, resolution from 75 to 4800 dpi" :model "CanoScan LiDE 210" :interface "USB" @@ -146,8 +160,8 @@ :model "CanoScan 700F" :interface "USB" :usbid "0x04a9" "0x1907" -:status :unsupported -:comment "GL847 based, to be added to the genesys backend" +:status :good +:comment "GL847 based, resolution from 75 to 4800 dpi" ; ----------------------------------------------------------------------------- @@ -243,6 +257,7 @@ :comment "All resolution and mode supported, calibration is available, front- and backside side-by-side, with backside mirrored horizontally." :mfg "Xerox" +:url "http://www.xerox.com/" :model "Travel Scanner 100" :interface "USB" @@ -250,6 +265,13 @@ :status :good :comment "All resolution and mode supported, calibration is available" +:model "2400 Onetouch" +:interface "USB" +:usbid "0x0461" "0x038b" +:status :complete +:comment "GL646 based, resolution from 75 to 2400 dpi" + + ; ----------------------------------------------------------------------------- :mfg "Panasonic" diff -Nru sane-backends-1.0.22/doc/descriptions/kodak.desc sane-backends-1.0.23/doc/descriptions/kodak.desc --- sane-backends-1.0.22/doc/descriptions/kodak.desc 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/kodak.desc 2011-11-21 20:17:48.000000000 +0000 @@ -154,22 +154,22 @@ :comment "Please test!" :model "i810 Scanner" -:interface "IEEE-1394" +:interface "SCSI" :status :untested :comment "Please test!" :model "i820 Scanner" -:interface "IEEE-1394" +:interface "SCSI" :status :untested :comment "Please test!" :model "i830 Scanner" -:interface "IEEE-1394" +:interface "SCSI" :status :untested :comment "Please test!" :model "i840 Scanner" -:interface "IEEE-1394" +:interface "SCSI" :status :untested :comment "Please test!" diff -Nru sane-backends-1.0.22/doc/descriptions/kodakaio.desc sane-backends-1.0.23/doc/descriptions/kodakaio.desc --- sane-backends-1.0.22/doc/descriptions/kodakaio.desc 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/kodakaio.desc 2012-07-31 01:31:47.000000000 +0000 @@ -0,0 +1,180 @@ +:backend "kodakaio" +:url "http://sourceforge.net/projects/cupsdriverkodak/" +:version "2.4.2" +:manpage "sane-kodakaio.man" +:comment "Backend for Kodak AiO ESP and Hero printers. Also possibly Advent AWL10" +:devicetype :scanner +:new :yes + +:mfg "Kodak" +:url "http://www.kodak.com/" + +;====================================== +; ESP series + +:model "ESP 2150" +:interface "USB" +:usbid "0x040a" "0x4059" +:status :untested +:comment "Please test!" + +:model "ESP 2170" +:interface "USB" +:usbid "0x040a" "0x4066" +:status :untested +:comment "Please test!" + +:model "ESP 3200" +:interface "USB" +:usbid "0x040a" "0x4043" +:status :untested +:comment "Please test!" + +:model "ESP 3300" +:interface "USB" +:usbid "0x040a" "0x4031" +:status :untested +:comment "Please test!" + +:model "ESP 4100" +:interface "USB" +:usbid "0x040a" "0x4053" +:status :untested +:comment "Please test!" + +:model "ESP 5000" +:interface "USB" +:usbid "0x040a" "0x4028" +:status :untested +:comment "Please test!" + +:model "ESP 5100" +:interface "USB" +:usbid "0x040a" "0x4025" +:status :untested +:comment "Please test!" + +:model "ESP 5200" +:interface "USB Ethernet" +:usbid "0x040a" "0x4041" +:status :basic +:comment "USB good, Network good" + +:model "ESP 5300" +:interface "USB" +:usbid "0x040a" "0x4026" +:status :untested +:comment "Please test!" + +:model "ESP 5500" +:interface "USB" +:usbid "0x040a" "0x4027" +:status :untested +:comment "Please test!" + +:model "ESP 6100" +:interface "USB" +:usbid "0x040a" "0x4054" +:status :untested +:comment "Please test!" + +:model "ESP 7200" +:interface "USB" +:usbid "0x040a" "0x4056" +:status :untested +:comment "Please test!" + +:model "ESP 9200" +:interface "USB" +:usbid "0x040a" "0x4065" +:status :untested +:comment "Please test!" + +:model "ESP 5" +:interface "USB" +:usbid "0x040a" "0x4032" +:status :untested +:comment "Please test!" + +:model "ESP 7" +:interface "USB" +:usbid "0x040a" "0x403e" +:status :untested +:comment "Please test!" + +:model "ESP 9" +:interface "USB" +:usbid "0x040a" "0x403f" +:status :untested +:comment "Please test!" + +:model "ESP C110" +:interface "USB" +:usbid "0x040a" "0x4057" +:status :untested +:comment "Please test!" + +:model "ESP C115" +:interface "USB" +:usbid "0x040a" "0x4058" +:status :untested +:comment "Please test!" + +:model "ESP C310" +:interface "USB" +:usbid "0x040a" "0x405d" +:status :untested +:comment "Please test!" + +:model "ESP C315" +:interface "USB" +:usbid "0x040a" "0x405e" +:status :untested +:comment "Please test!" + +;====================================== +; Hero series + +:model "Hero 3.1" +:interface "USB" +:usbid "0x040a" "0x406d" +:status :untested +:comment "Please test!" + +:model "Hero 5.1" +:interface "USB" +:usbid "0x040a" "0x4064" +:status :untested +:comment "Please test!" + +:model "Hero Office 6.1" +:interface "USB" +:usbid "0x040a" "0x4062" +:status :untested +:comment "Please test!" + +:model "Hero 7.1" +:interface "USB" +:usbid "0x040a" "0x4063" +:status :untested +:comment "Please test!" + +:model "Hero 9.1" +:interface "USB Ethernet" +:usbid "0x040a" "0x4067" +:status :basic +:comment "USB good, Network good" + +;=================================== + +:mfg "Advent" +:url "http://www.adventcomputers.co.uk" + +:model "AW10" +:interface "USB" +:usbid "0x040a" "0x4060" +:status :untested +:comment "Please test!" + + + diff -Nru sane-backends-1.0.22/doc/descriptions/kvs1025.desc sane-backends-1.0.23/doc/descriptions/kvs1025.desc --- sane-backends-1.0.22/doc/descriptions/kvs1025.desc 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/kvs1025.desc 2012-07-25 00:02:39.000000000 +0000 @@ -10,7 +10,7 @@ ; :backend "kvs1025" ; name of backend -:version "3" ; version of backend +:version "unmaintained" ; version of backend :manpage "sane-kvs1025" ; name of manpage (if it exists) :comment "New backend for SANE release 1.0.21, see sane-kvs1025 manpage" :devicetype :scanner ; start of a list of devices.... diff -Nru sane-backends-1.0.22/doc/descriptions/kvs20xx.desc sane-backends-1.0.23/doc/descriptions/kvs20xx.desc --- sane-backends-1.0.22/doc/descriptions/kvs20xx.desc 2011-02-13 23:11:48.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/kvs20xx.desc 2012-07-25 00:02:39.000000000 +0000 @@ -10,8 +10,7 @@ ; :backend "kvs20xx" ; name of backend -:version "2" ; version of backend -:new :yes +:version "unmaintained" ; version of backend :manpage "sane-kvs20xx" ; name of manpage (if it exists) :comment "New backend for SANE release 1.0.22, see sane-kvs20xx manpage" :devicetype :scanner ; start of a list of devices.... diff -Nru sane-backends-1.0.22/doc/descriptions/kvs40xx.desc sane-backends-1.0.23/doc/descriptions/kvs40xx.desc --- sane-backends-1.0.22/doc/descriptions/kvs40xx.desc 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/kvs40xx.desc 2012-07-25 00:14:13.000000000 +0000 @@ -0,0 +1,36 @@ +; +; SANE Backend specification file +; +; It's basically emacs-lisp --- so ";" indicates comment to end of line. +; All syntactic elements are keyword tokens, followed by a string or +; keyword argument, as specified. +; +; ":backend" *must* be specified. +; All other information is optional (but what good is the file without it?). +; + +:backend "kvs40xx" ; name of backend +:version "unmaintained" ; version of backend +:manpage "sane-kvs40xx" ; name of manpage (if it exists) +:comment "New backend for SANE release 1.0.23, see sane-kvs40xx manpage" +:devicetype :scanner ; start of a list of devices.... +:new :yes + +:mfg "Panasonic" ; name a manufacturer +:url "http://www.panasonic.com/" + +:model "KV-S4065C" +:interface "USB" +:usbid "0x04da" "0x100d" +:status :untested + +:model "KV-S4085C" +:interface "USB" +:usbid "0x04da" "0x100c" +:status :untested + +:model "KV-S7075C" +:interface "USB" +:usbid "0x04da" "0x100e" +:status :untested + diff -Nru sane-backends-1.0.22/doc/descriptions/magicolor.desc sane-backends-1.0.23/doc/descriptions/magicolor.desc --- sane-backends-1.0.22/doc/descriptions/magicolor.desc 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/magicolor.desc 2011-06-27 17:40:23.000000000 +0000 @@ -7,7 +7,6 @@ :backend "magicolor" :version "1.0.0" -:new :yes :manpage "sane-magicolor" :url "http://wiki.kainhofer.com/hardware/magicolor_scan" diff -Nru sane-backends-1.0.22/doc/descriptions/pixma.desc sane-backends-1.0.23/doc/descriptions/pixma.desc --- sane-backends-1.0.22/doc/descriptions/pixma.desc 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/pixma.desc 2012-08-10 00:33:29.000000000 +0000 @@ -11,7 +11,7 @@ ; See doc/descriptions.txt for details. :backend "pixma" ; name of backend -:version "0.16.1" ; version of backend (or "unmaintained") +:version "0.17.0" ; version of backend (or "unmaintained") :manpage "sane-pixma" ; name of manpage (if it exists) :url "http://home.arcor.de/wittawat/pixma/" ; 0.13.1 backend's web page :url "http://mp610.blogspot.com/" ; the pixma backend blog @@ -24,6 +24,78 @@ :mfg "Canon" ; name a manufacturer :url "http://www.canon.com/" +:model "PIXMA E500" +:interface "USB" +:usbid "0x04a9" "0x1758" +:status :untested +:comment "Testers needed!" + +:model "PIXMA E600" +:interface "USB" +:usbid "0x04a9" "0x175a" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG2100 Series" +:interface "USB" +:usbid "0x04a9" "0x1751" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG3100 Series" +:interface "USB" +:usbid "0x04a9" "0x1752" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG4100 Series" +:interface "USB" +:usbid "0x04a9" "0x1753" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG5100 Series" +:interface "USB" +:usbid "0x04a9" "0x1748" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG5200 Series" +:interface "USB" +:usbid "0x04a9" "0x1749" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG5300 Series" +:interface "USB" +:usbid "0x04a9" "0x1754" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG6100 Series" +:interface "USB" +:usbid "0x04a9" "0x174a" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG6200 Series" +:interface "USB" +:usbid "0x04a9" "0x1755" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG8100 Series" +:interface "USB" +:usbid "0x04a9" "0x174b" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MG8200 Series" +:interface "USB" +:usbid "0x04a9" "0x1756" +:status :untested +:comment "Testers needed!" + :model "PIXMA MP140" :interface "USB" :usbid "0x04a9" "0x172b" @@ -51,6 +123,12 @@ :usbid "0x04a9" "0x1715" :status :basic +:model "PIXMA MP190" +:interface "USB" +:usbid "0x04a9" "0x1734" +:status :complete +:comment "All resolutions supported (up to 600DPI)" + :model "PIXMA MP210" :interface "USB" :usbid "0x04a9" "0x1721" @@ -63,6 +141,60 @@ :status :complete :comment "All resolutions supported (up to 1200DPI)." +:model "PIXMA MP240" +:interface "USB" +:usbid "0x04a9" "0x1732" +:status :complete +:comment "All resolutions supported (up to 1200DPI)" + +:model "PIXMA MP250" +:interface "USB" +:usbid "0x04a9" "0x173a" +:status :complete +:comment "All resolutions supported (up to 600DPI)" + +:model "PIXMA MP260" +:interface "USB" +:usbid "0x04a9" "0x1733" +:status :complete +:comment "All resolutions supported (up to 1200DPI)" + +:model "PIXMA MP270" +:interface "USB" +:usbid "0x04a9" "0x173b" +:status :complete +:comment "All resolutions supported (up to 1200DPI)" + +:model "PIXMA MP280" +:interface "USB" +:usbid "0x04a9" "0x1746" +:status :good +:comment "All resolutions supported (up to 600DPI)." + +:model "PIXMA MP360" +:interface "USB" +:usbid "0x04a9" "0x263c" +:status :complete +:comment "All resolutions supported (up to 1200DPI)." + +:model "PIXMA MP370" +:interface "USB" +:usbid "0x04a9" "0x263d" +:status :complete +:comment "All resolutions supported (up to 1200DPI)." + +:model "PIXMA MP375R" +:interface "USB" +:usbid "0x04a9" "0x263f" +:status :untested +:comment "Same protocol as Pixma MP360/370/390? Testers needed!" + +:model "PIXMA MP390" +:interface "USB" +:usbid "0x04a9" "0x263e" +:status :complete +:comment "All resolutions supported (up to 1200DPI)." + :model "PIXMA MP450" :interface "USB" :usbid "0x04a9" "0x170b" @@ -81,6 +213,30 @@ :status :complete :comment "All resolutions supported (up to 2400DPI)." +:model "PIXMA MP480" +:interface "USB" +:usbid "0x04a9" "0x1731" +:status :complete +:comment "All resolutions supported (up to 2400DPI)" + +:model "PIXMA MP490" +:interface "USB" +:usbid "0x04a9" "0x173c" +:status :complete +:comment "All resolutions supported (up to 1200DPI)" + +:model "PIXMA MP493" +:interface "USB" +:usbid "0x04a9" "0x1757" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MP495" +:interface "USB" +:usbid "0x04a9" "0x1747" +:status :untested +:comment "Same protocol as Pixma MP280? Testers needed!" + :model "PIXMA MP500" :interface "USB" :usbid "0x04a9" "0x170c" @@ -103,6 +259,24 @@ :usbid "0x04a9" "0x1712" :status :good +:model "PIXMA MP540" +:interface "USB" +:usbid "0x04a9" "0x1730" +:status :complete +:comment "All resolutions supported (up to 2400DPI)" + +:model "PIXMA MP550" +:interface "USB" +:usbid "0x04a9" "0x173d" +:status :complete +:comment "All resolutions supported (up to 2400DPI)" + +:model "PIXMA MP560" +:interface "USB" +:usbid "0x04a9" "0x173e" +:status :complete +:comment "All resolutions supported (up to 2400DPI)" + :model "PIXMA MP600" :interface "USB" :usbid "0x04a9" "0x1718" @@ -121,6 +295,48 @@ :status :complete :comment "All resolutions supported (up to 4800DPI)" +:model "PIXMA MP620" +:interface "USB Ethernet" +:usbid "0x04a9" "0x172f" +:status :complete +:comment "All resolutions supported (up to 2400DPI)" + +:model "PIXMA MP630" +:interface "USB" +:usbid "0x04a9" "0x172e" +:status :complete +:comment "All resolutions supported (up to 4800DPI)" + +:model "PIXMA MP640" +:interface "USB Ethernet" +:usbid "0x04a9" "0x173f" +:status :complete +:comment "All resolutions supported (up to 4800DPI)" + +:model "PIXMA MP700" +:interface "USB" +:usbid "0x04a9" "0x2630" +:status :complete +:comment "All resolutions supported (flatbed color up to 1200DPI, grayscale up to 600DPI)." + +:model "PIXMA MP710" +:interface "USB" +:usbid "0x04a9" "0x264d" +:status :complete +:comment "All resolutions supported (up to 1200DPI)" + +:model "PIXMA MP730" +:interface "USB" +:usbid "0x04a9" "0x262f" +:status :good +:comment "Flatbed color up to 1200DPI, grayscale up to 600DPI. ADF scan to be confirmed." + +:model "PIXMA MP740" +:interface "USB" +:usbid "0x04a9" "0x264c" +:status :untested +:comment "Same protocol as Pixma MP710? Testers needed!" + :model "PIXMA MP750" :interface "USB" :usbid "0x04a9" "0x1706" @@ -133,29 +349,41 @@ :status :minimal :comment "No grayscale. The scanner sometimes hangs!" +:model "PIXMA MP770" +:interface "USB" +:usbid "0x04a9" "0x1708" +:status :minimal +:comment "No grayscale. The scanner sometimes hangs!" + :model "PIXMA MP780" :interface "USB" :usbid "0x04a9" "0x1707" :status :minimal :comment "No grayscale. The scanner sometimes hangs!" +:model "PIXMA MP790" +:interface "USB" +:usbid "0x04a9" "0x1707" +:status :minimal +:comment "No grayscale. The scanner sometimes hangs!" + :model "PIXMA MP800" :interface "USB" :usbid "0x04a9" "0x170d" -:status :good -:comment "All resolutions supported up to 2400DPI. TPU scan up to 1200DPI." +:status :complete +:comment "All resolutions supported up to 2400DPI. Full TPU support up to 2400DPI." :model "PIXMA MP800R" :interface "USB" :usbid "0x04a9" "0x170e" -:status :good -:comment "All resolutions supported up to 2400DPI. TPU scan up to 1200DPI." +:status :complete +:comment "All resolutions supported up to 2400DPI. Full TPU support up to 2400DPI." :model "PIXMA MP810" :interface "USB" :usbid "0x04a9" "0x171a" -:status :good -:comment "All resolutions supported up to 2400DPI. Vertical stripes at 4800DPI. USB Snoops needed for TPU film scan." +:status :complete +:comment "All resolutions supported up to 4800DPI. Full TPU support (negative and slides) up to 4800DPI." :model "PIXMA MP830" :interface "USB" @@ -166,7 +394,8 @@ :model "PIXMA MP960" :interface "USB" :usbid "0x04a9" "0x171b" -:status :minimal +:status :complete +:comment "All resolutions supported up to 4800DPI. Full TPU support (negative and slides) up to 4800DPI." :model "PIXMA MP970" :interface "USB Ethernet" @@ -174,53 +403,17 @@ :status :complete :comment "All resolutions supported (up to 4800DPI). Full TPU support (negative and slides) at 24 or 48 bits." -:model "PIXMA MP360" -:interface "USB" -:usbid "0x04a9" "0x263c" -:status :complete -:comment "All resolutions supported (up to 1200DPI)." - -:model "PIXMA MP370" -:interface "USB" -:usbid "0x04a9" "0x263d" -:status :complete -:comment "All resolutions supported (up to 1200DPI)." - -:model "PIXMA MP375R" -:interface "USB" -:usbid "0x04a9" "0x263f" -:status :untested -:comment "Same protocol as Pixma MP360/370/390? Testers needed!" - -:model "PIXMA MP390" -:interface "USB" -:usbid "0x04a9" "0x263e" -:status :complete -:comment "All resolutions supported (up to 1200DPI)." - -:model "PIXMA MP700" -:interface "USB" -:usbid "0x04a9" "0x2630" +:model "PIXMA MP980" +:interface "USB Ethernet" +:usbid "0x04a9" "0x172d" :status :complete -:comment "All resolutions supported (flatbed color up to 1200DPI, grayscale up to 600DPI)." +:comment "Working fine at all resolutions." -:model "PIXMA MP710" -:interface "USB" -:usbid "0x04a9" "0x264d" +:model "PIXMA MP990" +:interface "USB Ethernet" +:usbid "0x04a9" "0x1740" :status :complete -:comment "All resolutions supported (up to 1200DPI)" - -:model "PIXMA MP740" -:interface "USB" -:usbid "0x04a9" "0x264c" -:status :untested -:comment "Same protocol as Pixma MP710? Testers needed!" - -:model "PIXMA MP730" -:interface "USB" -:usbid "0x04a9" "0x262f" -:status :good -:comment "Flatbed color up to 1200DPI, grayscale up to 600DPI. ADF scan to be confirmed." +:comment "Working fine at all resolutions." :model "PIXMA MX300" :interface "USB" @@ -258,12 +451,54 @@ :status :complete :comment "Flatbed and ADF scan. All resolutions supported (up to 1200DPI)" +:model "PIXMA MX360" +:interface "USB" +:usbid "0x04a9" "0x174d" +:status :complete +:comment "Flatbed and ADF scan. All resolutions supported (up to 1200DPI). ADF empty buggy." + +:model "PIXMA MX370 Series" +:interface "USB" +:usbid "0x04a9" "0x1759" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MX410" +:interface "USB Ethernet" +:usbid "0x04a9" "0x174e" +:status :untested +:comment "Same protocol as Pixma MX420? Testers needed!" + +:model "PIXMA MX420" +:interface "USB Ethernet" +:usbid "0x04a9" "0x174f" +:status :complete +:comment "Flatbed and ADF scan. All resolutions supported (up to 1200DPI). ADF empty buggy." + +:model "PIXMA MX430 Series" +:interface "USB Ethernet" +:usbid "0x04a9" "0x175b" +:status :untested +:comment "Testers needed!" + +:model "PIXMA MX510 Series" +:interface "USB Ethernet" +:usbid "0x04a9" "0x175c" +:status :untested +:comment "Testers needed!" + :model "PIXMA MX700" :interface "USB Ethernet" :usbid "0x04a9" "0x1729" :status :complete :comment "Flatbed and ADF scan. All resolutions supported (up to 2400DPI)" +:model "PIXMA MX710 Series" +:interface "USB Ethernet" +:usbid "0x04a9" "0x175d" +:status :untested +:comment "Testers needed!" + :model "PIXMA MX850" :interface "USB Ethernet" :usbid "0x04a9" "0x172c" @@ -282,101 +517,35 @@ :status :complete :comment "All resolutions supported (up to 2400DPI). Flatbed, ADF simplex and Duplex supported, ADF empty buggy." -:model "PIXMA MX7600" +:model "PIXMA MX880 Series" :interface "USB Ethernet" -:usbid "0x04a9" "0x171c" +:usbid "0x04a9" "0x1750" :status :complete -:comment "Flatbed and ADF scan. All resolutions supported (up to 4800DPI)" +:comment "All resolutions supported (up to 2400DPI). Flatbed, ADF simplex and Duplex supported, ADF empty buggy." -:model "PIXMA MP980" +:model "PIXMA MX882" :interface "USB Ethernet" -:usbid "0x04a9" "0x172d" +:usbid "0x04a9" "0x1750" :status :complete -:comment "Working fine at all resolutions." +:comment "All resolutions supported (up to 2400DPI). Flatbed, ADF simplex and Duplex supported, ADF empty buggy." -:model "PIXMA MP990" +:model "PIXMA MX885" :interface "USB Ethernet" -:usbid "0x04a9" "0x1740" +:usbid "0x04a9" "0x1750" :status :complete -:comment "Working fine at all resolutions." +:comment "All resolutions supported (up to 2400DPI). Flatbed, ADF simplex and Duplex supported, ADF empty buggy." -:model "PIXMA MP640" +:model "PIXMA MX890 Series" :interface "USB Ethernet" -:usbid "0x04a9" "0x173f" -:status :complete -:comment "All resolutions supported (up to 4800DPI)" - -:model "PIXMA MP630" -:interface "USB" -:usbid "0x04a9" "0x172e" -:status :complete -:comment "All resolutions supported (up to 4800DPI)" +:usbid "0x04a9" "0x175e" +:status :untested +:comment "Testers needed!" -:model "PIXMA MP620" +:model "PIXMA MX7600" :interface "USB Ethernet" -:usbid "0x04a9" "0x172f" -:status :complete -:comment "All resolutions supported (up to 2400DPI)" - -:model "PIXMA MP560" -:interface "USB" -:usbid "0x04a9" "0x173e" -:status :complete -:comment "All resolutions supported (up to 2400DPI)" - -:model "PIXMA MP550" -:interface "USB" -:usbid "0x04a9" "0x173d" -:status :complete -:comment "All resolutions supported (up to 2400DPI)" - -:model "PIXMA MP540" -:interface "USB" -:usbid "0x04a9" "0x1730" -:status :complete -:comment "All resolutions supported (up to 2400DPI)" - -:model "PIXMA MP490" -:interface "USB" -:usbid "0x04a9" "0x173c" -:status :complete -:comment "All resolutions supported (up to 1200DPI)" - -:model "PIXMA MP480" -:interface "USB" -:usbid "0x04a9" "0x1731" -:status :complete -:comment "All resolutions supported (up to 2400DPI)" - -:model "PIXMA MP250" -:interface "USB" -:usbid "0x04a9" "0x173a" -:status :complete -:comment "All resolutions supported (up to 600DPI)" - -:model "PIXMA MP270" -:interface "USB" -:usbid "0x04a9" "0x173b" -:status :complete -:comment "All resolutions supported (up to 1200DPI)" - -:model "PIXMA MP240" -:interface "USB" -:usbid "0x04a9" "0x1732" -:status :complete -:comment "All resolutions supported (up to 1200DPI)" - -:model "PIXMA MP260" -:interface "USB" -:usbid "0x04a9" "0x1733" -:status :complete -:comment "All resolutions supported (up to 1200DPI)" - -:model "PIXMA MP190" -:interface "USB" -:usbid "0x04a9" "0x1734" +:usbid "0x04a9" "0x171c" :status :complete -:comment "All resolutions supported (up to 600DPI)" +:comment "Flatbed and ADF scan. All resolutions supported (up to 4800DPI)" :model "imageCLASS D480" :interface "USB" @@ -384,42 +553,6 @@ :status :complete :comment "All resolutions supported (up to 600DPI). Flatbed, ADF simplex and Duplex supported." -:model "imageCLASS MF5630" -:interface "USB" -:usbid "0x04a9" "0x264e" -:status :untested -:comment "Testers needed!" - -:model "laserBase MF5650" -:interface "USB" -:usbid "0x04a9" "0x264f" -:status :untested -:comment "Testers needed!" - -:model "imageCLASS MF8170c" -:interface "USB" -:usbid "0x04a9" "0x2659" -:status :untested -:comment "Testers needed!" - -:model "imageCLASS MF5730" -:interface "USB" -:usbid "0x04a9" "0x265d" -:status :untested -:comment "Testers needed!" - -:model "imageCLASS MF5750" -:interface "USB" -:usbid "0x04a9" "0x265e" -:status :untested -:comment "Testers needed!" - -:model "imageCLASS MF5770" -:interface "USB" -:usbid "0x04a9" "0x265f" -:status :complete -:comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI)." - :model "imageCLASS MF3110" :interface "USB" :usbid "0x04a9" "0x2660" @@ -504,20 +637,92 @@ :status :good :comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI). Network not supported" +:model "imageCLASS MF4410" +:interface "USB" +:usbid "0x04a9" "0x2737" +:status :complete +:comment "All resolutions supported (up to 600DPI)" + +:model "imageCLASS MF4660" +:interface "USB" +:usbid "0x04a9" "0x26b0" +:status :complete +:comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI)" + :model "imageCLASS MF4690" :interface "USB" :usbid "0x04a9" "0x26b0" :status :complete :comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI)" +:model "imageCLASS MF5630" +:interface "USB" +:usbid "0x04a9" "0x264e" +:status :untested +:comment "Testers needed!" + +:model "laserBase MF5650" +:interface "USB" +:usbid "0x04a9" "0x264f" +:status :untested +:comment "Testers needed!" + +:model "imageCLASS MF5730" +:interface "USB" +:usbid "0x04a9" "0x265d" +:status :untested +:comment "Testers needed!" + +:model "imageCLASS MF5750" +:interface "USB" +:usbid "0x04a9" "0x265e" +:status :untested +:comment "Testers needed!" + +:model "imageCLASS MF5770" +:interface "USB" +:usbid "0x04a9" "0x265f" +:status :complete +:comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI)." + :model "imageCLASS MF6500 series" :interface "USB" :usbid "0x04a9" "0x2686" :status :complete :comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI)" +:model "imageCLASS MF6550" +:interface "USB" +:usbid "0x04a9" "0x2686" +:status :complete +:comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI)" + +:model "imageCLASS MF8030" +:interface "USB" +:usbid "0x04a9" "0x2707" +:status :untested +:comment "Testers needed!" + +:model "imageCLASS MF8170c" +:interface "USB" +:usbid "0x04a9" "0x2659" +:status :untested +:comment "Testers needed!" + +:model "imageRUNNER 1020/1024/1025" +:interface "USB" +:usbid "0x04a9" "0x26e6" +:status :untested +:comment "Testers needed!" + :model "CanoScan 8800F" :interface "USB" :usbid "0x04a9" "0x1901" :status :complete :comment "Flatbed scan. TPU for negatives and slides. All resolutions supported (up to 4800DPI)." + +:model "CanoScan 9000F" +:interface "USB" +:usbid "0x04a9" "0x1908" +:status :complete +:comment "Full flatbed support up to 4800DPI (Note: flatbed does not have 9600DPI capability). Full TPU support (negatives and slides) up to 9600DPI." diff -Nru sane-backends-1.0.22/doc/descriptions/umax.desc sane-backends-1.0.23/doc/descriptions/umax.desc --- sane-backends-1.0.22/doc/descriptions/umax.desc 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/umax.desc 2012-07-31 01:38:34.000000000 +0000 @@ -110,12 +110,12 @@ :model "Astra 6400" :interface "IEEE-1394" :status :unsupported -:comment "will propably work one day" +:comment "will probably work one day" :model "Astra 6450" :interface "IEEE-1394" :status :unsupported -:comment "will propably work one day" +:comment "will probably work one day" :model "Astra MX3" :interface "SCSI" @@ -175,7 +175,7 @@ :model "PowerLook 1100" :interface "IEEE-1394" :status :unsupported -:comment "will propably work one day" +:comment "will probably work one day" :model "PowerLook 2000" :interface "SCSI" diff -Nru sane-backends-1.0.22/doc/descriptions/unsupported.desc sane-backends-1.0.23/doc/descriptions/unsupported.desc --- sane-backends-1.0.22/doc/descriptions/unsupported.desc 2011-01-30 18:49:46.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/unsupported.desc 2012-07-01 02:00:44.000000000 +0000 @@ -863,20 +863,6 @@ :comment "Probably not supported. See link for details." :status :unsupported -:model "ScanJet G4010" -:url "/unsupported/hp-g4000.html" -:interface "USB" -:usbid "0x03f0" "0x4505" -:comment "Probably not supported. See link for details." -:status :unsupported - -:model "ScanJet G4050" -:url "/unsupported/hp-g4050.html" -:interface "USB" -:usbid "0x03f0" "0x4605" -:comment "gl843 scanner, support is currently being work on in the genesys backend" -:status :unsupported - ;******************************************************************************************** :mfg "IBM" @@ -2666,16 +2652,6 @@ ;******************************************************************************************** -:mfg "Xerox" -:url "http://www.xerox.com/" - -:model "2400 Onetouch" -:url "/unsupported/xerox-2400-onetouch.html" -:interface "USB" -:usbid "0x0461" "0x038b" -:status :unsupported -:comment "Probably GL646_HP based, maybe can be added to genesys backend" - :model "4800 One Touch" :url "/unsupported/xerox-4800-onetouch.html" :interface "USB" diff -Nru sane-backends-1.0.22/doc/descriptions/xerox_mfp.desc sane-backends-1.0.23/doc/descriptions/xerox_mfp.desc --- sane-backends-1.0.22/doc/descriptions/xerox_mfp.desc 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions/xerox_mfp.desc 2012-07-01 02:00:44.000000000 +0000 @@ -58,6 +58,11 @@ :usbid "0x04e8" "0x341f" :status :good +:model "CLX-2160" +:interface "USB" +:usbid "0x04e8" "0x3425" +:status :good + :model "SCX-4500" :interface "USB" :usbid "0x04e8" "0x3426" @@ -78,6 +83,11 @@ :usbid "0x04e8" "0x342c" :status :good +:model "SCX-4828FN (4x28 Series)" +:interface "USB" +:usbid "0x04e8" "0x342d" +:status :good + :model "SCX-4300" :interface "USB" :usbid "0x04e8" "0x342e" @@ -88,11 +98,26 @@ :usbid "0x04e8" "0x3433" :status :good +:model "CLX-3185" +:interface "USB" +:usbid "0x04e8" "0x343d" +:status :good + :model "SCX-4623" :interface "USB" :usbid "0x04e8" "0x3434" :status :good +:model "SCX-4623FW" +:interface "USB" +:usbid "0x04e8" "0x3440" +:status :good + +:model "SCX-3205W" +:interface "USB Ethernet" +:usbid "0x04e8" "0x3441" +:status :good + :model "SCX-4825FN" :interface "USB" :usbid "0x04e8" "0x343c" diff -Nru sane-backends-1.0.22/doc/descriptions-external/epkowa.desc sane-backends-1.0.23/doc/descriptions-external/epkowa.desc --- sane-backends-1.0.22/doc/descriptions-external/epkowa.desc 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions-external/epkowa.desc 2011-12-20 14:42:01.000000000 +0000 @@ -1,5 +1,5 @@ ;;; epkowa.desc -*- emacs-lisp -*- (eh, sort of) -;;; Copyright (C) 2004--2009 Olaf Meeuwissen +;;; Copyright (C) 2004--2011 Olaf Meeuwissen ;;; ;;; This file is part of the "Image Scan!" documentation. ;;; @@ -20,10 +20,11 @@ ;;; 59 Temple Place, Suite 330 ;;; Boston, MA 02111-1307 USA -;;; This list of devices was compiled from the following sources: +;;; This list of devices has been compiled using the following sources: ;;; +;;; * iscan-data-$version (see :version field below) ;;; * iscan-2.24.0/NEWS -;;; * iscan-2.24.0/backend/usb +;;; * iscan-2.24.0/backend/usb (since moved to iscan-data) ;;; * sane-backends/backend/epson_usb.c (CVS 1.18) ;;; * sane-backends/doc/descriptions/epson.desc (CVS 1.26) ;;; * http://www.freecolormanagement.com/sane/supported.html @@ -33,15 +34,14 @@ ;;; * http://www.i-love-epson.co.jp/ ;;; * messages on the sane-devel and LinuxPrinting.org epson-list ;;; mailing lists - +;;; +;;; Some of the above sources may have moved or may no longer exist. ;; Backend data. ;; :backend "epkowa" -:version "iscan 2.26.1/iscan-data 1.5.0" -:url "http://www.avasys.jp/english/linux_e/" - -;:comment "Based on the epson backend of sane-backends-1.0.15." +:version "iscan 2.28.1/iscan-data 1.13.0" +:url "http://avasys.jp/eng/linux_driver/" ;; Device and manufacturer information. @@ -64,6 +64,9 @@ ; JP = http://www.i-love-epson.co.jp/ (in Japanese) ; ; All command specs were downloaded from www.epsondevelopers.com. +; +; Note that the above location may have moved, may no longer exist +; or no longer provide (unfettered) access to the specifications. ; For the :comment sections I have tried to stick to the following ; ordering @@ -112,6 +115,12 @@ :status :complete :comment "network interface not supported
business all-in-one" +:model "AcuLaser MX21DNF" +:interface "USB" +:usbid "0x04b8" "0x0866" +:status :complete +:comment "network interface not supported
business all-in-one" + :model "Artisan 700" :interface "USB" :usbid "0x04b8" "0x0846" @@ -130,6 +139,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-803A" +:model "Artisan 730 Series" +:interface "USB" +:usbid "0x04b8" "0x087b" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-804A" + :model "Artisan 800" :interface "USB" :usbid "0x04b8" "0x0844" @@ -148,6 +163,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-903A" +:model "Artisan 837" +:interface "USB" +:usbid "0x04b8" "0x0879" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-904F" + :model "CC-500L" ; product spec (JP) :interface "USB" :usbid "0x04b8" "0x010d" @@ -190,6 +211,18 @@ :status :complete :comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "EP-704A" +:interface "USB" +:usbid "0x04b8" "0x0878" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "EP-774A" +:interface "USB" +:usbid "0x04b8" "0x0893" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "EP-801A" :interface "USB" :usbid "0x04b8" "0x0846" @@ -214,6 +247,24 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "EP-804A" +:interface "USB" +:usbid "0x04b8" "0x087b" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "EP-804AR" +:interface "USB" +:usbid "0x04b8" "0x087b" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "EP-804AW" +:interface "USB" +:usbid "0x04b8" "0x087b" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "EP-901A" :interface "USB" :usbid "0x04b8" "0x0844" @@ -244,6 +295,18 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "EP-904A" +:interface "USB" +:usbid "0x04b8" "0x0879" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "EP-904F" +:interface "USB" +:usbid "0x04b8" "0x0879" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "ES-300C" :interface "SCSI parallel" :status :good @@ -593,16 +656,16 @@ :status :complete :model "GT-9700F" ; product spec (JP) -:interface "USB" +:interface "USB IEEE1394" :usbid "0x04b8" "0x0112" +:scsi "EPSON" "GT-9700" "processor" :status :complete -:comment "IEEE1394 untested" :model "GT-9800F" ; product spec (JP) -:interface "USB" +:interface "USB IEEE1394" :usbid "0x04b8" "0x011c" +:scsi "EPSON" "GT-9800" "processor" :status :complete -:comment "IEEE1394 untested" :model "GT-10000" :interface "SCSI" @@ -720,6 +783,13 @@ :comment "requires DFSG non-free esci-interpreter-gt-s80
overseas version of the ES-D200" :url "http://www.avasys.jp/lx-bin2/linux_e/scan/DL1.do" +:model "GT-S55" +:interface "USB" +:usbid "0x04b8" "0x0143" +:status :good +:comment "requires DFSG non-free esci-interpreter-gt-s80" +:url "http://www.avasys.jp/lx-bin2/linux_e/scan/DL1.do" + :model "GT-S80" :interface "USB" :usbid "0x04b8" "0x0136" @@ -727,6 +797,13 @@ :comment "requires DFSG non-free esci-interpreter-gt-s80
overseas version of the ES-D400" :url "http://www.avasys.jp/lx-bin2/linux_e/scan/DL1.do" +:model "GT-S85" +:interface "USB" +:usbid "0x04b8" "0x0144" +:status :good +:comment "requires DFSG non-free esci-interpreter-gt-s80" +:url "http://www.avasys.jp/lx-bin2/linux_e/scan/DL1.do" + :model "GT-S600" :interface "USB" :usbid "0x04b8" "0x012d" @@ -793,6 +870,24 @@ :status :good :comment "IEEE1394 untested" +:model "K200 Series" +:interface "USB" +:usbid "0x04b8" "0x0871" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "K300 Series" +:interface "USB" +:usbid "0x04b8" "0x0872" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "L200 Series" +:interface "USB" +:usbid "0x04b8" "0x0873" +:status :complete +:comment "all-in-one" + :model "LP-7900CS" :status :untested :comment "business all-in-one; scanner is a ES-7000H" @@ -893,6 +988,12 @@ :status :complete :comment "all-in-one" +:model "ME 340 Series" +:interface "USB" +:usbid "0x04b8" "0x0883" +:status :complete +:comment "all-in-one" + :model "ME OFFICE 510" :interface "USB" :usbid "0x04b8" "0x084f" @@ -905,6 +1006,12 @@ :status :complete :comment "all-in-one" +:model "ME OFFICE 535" +:interface "USB" +:usbid "0x04b8" "0x0881" +:status :complete +:comment "all-in-one
overseas version of the PX-404A" + :model "ME OFFICE 560W Series" :interface "USB" :usbid "0x04b8" "0x0864" @@ -941,6 +1048,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-503A" +:model "ME OFFICE 940FW Series" +:interface "USB" +:usbid "0x04b8" "0x0890" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "ME OFFICE 960FWD Series" :interface "USB" :usbid "0x04b8" "0x085d" @@ -1037,6 +1150,18 @@ :status :good :comment "all-in-one
PM-A970 with network interface" +:model "PX-1600F" +:interface "USB" +:usbid "0x04b8" "0x0869" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "PX-1700F" +:interface "USB" +:usbid "0x04b8" "0x087c" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "PX-401A" :interface "USB" :usbid "0x04b8" "0x0841" @@ -1049,6 +1174,24 @@ :status :good :comment "all-in-one" +:model "PX-403A" +:interface "USB" +:usbid "0x04b8" "0x087f" +:status :complete +:comment "all-in-one" + +:model "PX-404A" +:interface "USB" +:usbid "0x04b8" "0x0881" +:status :complete +:comment "all-in-one" + +:model "PX-434A" +:interface "USB" +:usbid "0x04b8" "0x0880" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "PX-501A" :interface "USB" :usbid "0x04b8" "0x084a" @@ -1079,6 +1222,18 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "PX-603F" +:interface "USB" +:usbid "0x04b8" "0x085d" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "PX-673F" +:interface "USB" +:usbid "0x04b8" "0x086a" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "PX-A550" ; product spec (JP) :interface "USB" :usbid "0x04b8" "0x080e" @@ -1115,6 +1270,12 @@ :status :good :comment "all-in-one" +:model "PX-B750F" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "PX-FA700" :interface "USB" :usbid "0x04b8" "0x083a" @@ -1267,10 +1428,11 @@ :comment "overseas version of the GT-9300UF" :model "Perfection 2450 PHOTO" ; command spec -:interface "USB" +:interface "USB IEEE1394" :usbid "0x04b8" "0x0112" +:scsi "EPSON" "GT-9700" "processor" :status :complete -:comment "IEEE1394 untested
overseas version of the GT-9700F" +:comment "overseas version of the GT-9700F" :model "Perfection 2480 PHOTO" :interface "USB" @@ -1294,10 +1456,11 @@ :url "http://www.avasys.jp/lx-bin2/linux_e/scan/DL1.do" :model "Perfection 3200 PHOTO" ; command spec -:interface "USB" +:interface "USB IEEE1394" :usbid "0x04b8" "0x011c" +:scsi "EPSON" "GT-9800" "processor" :status :complete -:comment "IEEE1394 untested
overseas version of the GT-9800F" +:comment "overseas version of the GT-9800F" :model "Perfection 3490 PHOTO" :interface "USB" @@ -1802,6 +1965,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "Stylus Office BX305FW Plus" +:interface "USB" +:usbid "0x04b8" "0x0870" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus Office BX310FN Series" :interface "USB" :usbid "0x04b8" "0x0854" @@ -1814,6 +1983,18 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "Stylus Office BX535WD" +:interface "USB" +:usbid "0x04b8" "0x0891" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package" + +:model "Stylus Office BX630FW Series" +:interface "USB" +:usbid "0x04b8" "0x0890" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus Office BX525WD" :interface "USB" :usbid "0x04b8" "0x085e" @@ -1838,6 +2019,24 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "Stylus Office BX635FWD" +:interface "USB" +:usbid "0x04b8" "0x088f" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "Stylus Office BX925FWD" +:interface "USB" +:usbid "0x04b8" "0x086a" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-673F" + +:model "Stylus Office BX935FWD" +:interface "USB" +:usbid "0x04b8" "0x0892" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus Office TX300F" :interface "USB" :usbid "0x04b8" "0x0848" @@ -1910,6 +2109,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-803A" +:model "Stylus Photo PX730WD Series" +:interface "USB" +:usbid "0x04b8" "0x087b" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-804A" + :model "Stylus Photo PX800FW" :interface "USB" :usbid "0x04b8" "0x0844" @@ -1928,6 +2133,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-903A" +:model "Stylus Photo PX830FWD Series" +:interface "USB" +:usbid "0x04b8" "0x0879" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-904F" + :model "Stylus Photo RX420" :interface "USB" :usbid "0x04b8" "0x080f" @@ -2078,12 +2289,24 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-802A" +:model "Stylus Photo TX720WD Series" +:interface "USB" +:usbid "0x04b8" "0x0861" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-803A" + :model "Stylus Photo TX800FW" :interface "USB" :usbid "0x04b8" "0x0844" :status :good :comment "network interface not supported
all-in-one
overseas version of the EP-901A" +:model "Stylus Photo TX820FWD Series" +:interface "USB" +:usbid "0x04b8" "0x0860" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the EP-903A" + :model "Stylus NX100" :interface "USB" :usbid "0x04b8" "0x0841" @@ -2108,6 +2331,12 @@ :status :complete :comment "all-in-one" +:model "Stylus NX130 Series" +:interface "USB" +:usbid "0x04b8" "0x0883" +:status :complete +:comment "all-in-one" + :model "Stylus NX200" :interface "USB" :usbid "0x04b8" "0x0849" @@ -2126,12 +2355,24 @@ :status :complete :comment "all-in-one" +:model "Stylus NX230 Series" +:interface "USB" +:usbid "0x04b8" "0x0885" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus NX300 Series" :interface "USB" :usbid "0x04b8" "0x0848" :status :good :comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "Stylus NX330 Series" +:interface "USB" +:usbid "0x04b8" "0x0880" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus NX400" :interface "USB" :usbid "0x04b8" "0x084a" @@ -2150,6 +2391,12 @@ :status :complete :comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "Stylus NX430W Series" +:interface "USB" +:usbid "0x04b8" "0x0884" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus NX510 Series" :interface "USB" :usbid "0x04b8" "0x0856" @@ -2162,6 +2409,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-503A" +:model "Stylus NX635" +:interface "USB" +:usbid "0x04b8" "0x0891" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package" + :model "Stylus SX100" :interface "USB" :usbid "0x04b8" "0x0841" @@ -2180,6 +2433,12 @@ :status :complete :comment "all-in-one" +:model "Stylus SX130 Series" +:interface "USB" +:usbid "0x04b8" "0x0883" +:status :complete +:comment "all-in-one" + :model "Stylus SX200" :interface "USB" :usbid "0x04b8" "0x0849" @@ -2204,6 +2463,12 @@ :status :complete :comment "all-in-one" +:model "Stylus SX235W" +:interface "USB" +:usbid "0x04b8" "0x0885" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus SX400" :interface "USB" :usbid "0x04b8" "0x084a" @@ -2228,6 +2493,18 @@ :status :complete :comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "Stylus SX430W Series" +:interface "USB" +:usbid "0x04b8" "0x0880" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "Stylus SX440W Series" +:interface "USB" +:usbid "0x04b8" "0x0884" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus SX510W Series" :interface "USB" :usbid "0x04b8" "0x0856" @@ -2240,6 +2517,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-503A" +:model "Stylus SX535WD" +:interface "USB" +:usbid "0x04b8" "0x0891" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package" + :model "Stylus SX600FW" :interface "USB" :usbid "0x04b8" "0x0847" @@ -2288,6 +2571,12 @@ :status :complete :comment "all-in-one" +:model "Stylus TX130 Series" +:interface "USB" +:usbid "0x04b8" "0x0883" +:status :complete +:comment "all-in-one" + :model "Stylus TX200" :interface "USB" :usbid "0x04b8" "0x0849" @@ -2318,6 +2607,18 @@ :status :complete :comment "all-in-one" +:model "Stylus TX230W Series" +:interface "USB" +:usbid "0x04b8" "0x0885" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "Stylus TX235" +:interface "USB" +:usbid "0x04b8" "0x0881" +:status :complete +:comment "all-in-one
overseas version of the PX-404A" + :model "Stylus TX400" :interface "USB" :usbid "0x04b8" "0x084a" @@ -2336,6 +2637,18 @@ :status :complete :comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "Stylus TX430W Series" +:interface "USB" +:usbid "0x04b8" "0x0880" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "Stylus TX435W" +:interface "USB" +:usbid "0x04b8" "0x0884" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "Stylus TX550W Series" :interface "USB" :usbid "0x04b8" "0x0856" @@ -2348,6 +2661,54 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-503A" +:model "WP-4511" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-B750F" + +:model "WP-4515" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "WP-4521" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-B750F" + +:model "WP-4525" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-B750F" + +:model "WP-4530" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-B750F" + +:model "WP-4535" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "WP-4540" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-B750F" + +:model "WP-4545" +:interface "USB" +:usbid "0x04b8" "0x087d" +:status :complete +:comment "network interface option supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "WorkForce 310 Series" :interface "USB" :usbid "0x04b8" "0x0854" @@ -2360,6 +2721,12 @@ :status :complete :comment "network interface (option) supported via DFSG non-free iscan-network-nt package
some models in the series have a built-in network interface
all-in-one" +:model "WorkForce 435" +:interface "USB" +:usbid "0x04b8" "0x0870" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "WorkForce 500" :interface "USB" :usbid "0x04b8" "0x084c" @@ -2372,6 +2739,12 @@ :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" +:model "WorkForce 545" +:interface "USB" +:usbid "0x04b8" "0x0890" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + :model "WorkForce 600" :interface "USB" :usbid "0x04b8" "0x0847" @@ -2395,3 +2768,27 @@ :usbid "0x04b8" "0x085d" :status :complete :comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "WorkForce 645" +:interface "USB" +:usbid "0x04b8" "0x088f" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "WorkForce 840 Series" +:interface "USB" +:usbid "0x04b8" "0x086a" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one
overseas version of the PX-673F" + +:model "WorkForce 845" +:interface "USB" +:usbid "0x04b8" "0x0892" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" + +:model "WorkForce K301" +:interface "USB" +:usbid "0x04b8" "0x0872" +:status :complete +:comment "network interface supported via DFSG non-free iscan-network-nt package
all-in-one" diff -Nru sane-backends-1.0.22/doc/descriptions-external/kodak-twain.desc sane-backends-1.0.23/doc/descriptions-external/kodak-twain.desc --- sane-backends-1.0.22/doc/descriptions-external/kodak-twain.desc 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions-external/kodak-twain.desc 2011-10-26 16:07:20.000000000 +0000 @@ -1,7 +1,7 @@ :backend "kodak-twain" ; name of backend :version "unknown" ; version of backend (or "unmaintained") :url "http://www.kodak.com/go/scanonlinux" ; -:comment "External backend made by kodak. Seems to be a wrapper around proprietary 32bit TWAIN stack, for certain versions of Linux." +:comment "External backend developed by Kodak. Provides full access to the supported Kodak scanners by providing a SANE interface to the proprietary Kodak 32bit TWAIN stack. Several Linux distributions are supported." :devicetype :scanner ; start of a list of devices.... :mfg "Kodak" ; name a manufacturer @@ -10,35 +10,78 @@ :model "i1210" :status :untested :interface "USB" +:usbid "0x040a" "0x600a" :comment "No report yet." :model "i1220" :status :untested :interface "USB" +:usbid "0x040a" "0x600b" :comment "No report yet." :model "i1310" :status :untested :interface "USB" +:usbid "0x040a" "0x600c" :comment "No report yet." :model "i1320" :status :untested :interface "USB" +:usbid "0x040a" "0x600d" :comment "Reported to work on Fedora 12." +:model "i1405" +:status :untested +:interface "USB" +:usbid "0x040a" "0x601a" +:comment "No report yet." + :model "i1410" :status :untested :interface "USB" +:usbid "0x040a" "0x600e" :comment "No report yet." :model "i1420" :status :untested :interface "USB" +:usbid "0x040a" "0x600f" :comment "No report yet." :model "i1440" :status :untested :interface "USB" +:usbid "0x040a" "0x6010" +:comment "No report yet." + +:model "i2400" +:status :untested +:interface "USB" +:usbid "0x040a" "0x601c" +:comment "No report yet." + +:model "i2600" +:status :untested +:interface "USB" +:usbid "0x040a" "0x601d" +:comment "No report yet." + +:model "i2800" +:status :untested +:interface "USB" +:usbid "0x040a" "0x601e" :comment "No report yet." +:model "i1000 A3 accessory" +:status :untested +:interface "USB" +:usbid "0x040a" "0x6012" +:comment "Flatbed attachment for use with Kodak ADF scanner. Requires 12V power over usb cable. No report yet." + +:model "i1000 A4 accessory" +:status :untested +:interface "USB" +:usbid "0x040a" "0x6011" +:comment "Flatbed attachment for use with Kodak ADF scanner. Requires 12V power over usb cable. No report yet." + diff -Nru sane-backends-1.0.22/doc/descriptions.txt sane-backends-1.0.23/doc/descriptions.txt --- sane-backends-1.0.22/doc/descriptions.txt 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/descriptions.txt 2011-10-19 00:43:00.000000000 +0000 @@ -84,7 +84,7 @@ `:usbid' defines the USB vendor and product ids of the device. It has two arguments which must be lower case hexadecimal (4 digits). The first one is the -USB vendor id, the second one the USB product id. The keyword refers to the +USB vendor id, the second one the USB product id. The keyword refers to the previous `:model', is optional, and applicable for devices with :interface "USB" only, and should be used only once per model. The special parameter "ignore" can be used if no vendor or product ids are given intentionally, e.g. for a group of diff -Nru sane-backends-1.0.22/doc/gt68xx/gt68xx.CHANGES sane-backends-1.0.23/doc/gt68xx/gt68xx.CHANGES --- sane-backends-1.0.22/doc/gt68xx/gt68xx.CHANGES 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/gt68xx/gt68xx.CHANGES 2011-10-19 00:43:00.000000000 +0000 @@ -256,7 +256,7 @@ * Added Genius Colorpage Vivid4 to .conf file. Changed status to good. Added to man page. * Fixed black mark for Mustek BearPaw 2448 TA Plus. This one and the Mustek A3 - fixes are from Jakub Dvo?k . + fixes are from Jakub Dvořák . * Status of BearPaw 2448 TA/CS Plus is "basic" now. V 1.0-58 (2004-04-04) diff -Nru sane-backends-1.0.22/doc/mustek/mustek.CHANGES sane-backends-1.0.23/doc/mustek/mustek.CHANGES --- sane-backends-1.0.22/doc/mustek/mustek.CHANGES 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/mustek/mustek.CHANGES 2011-10-19 00:43:00.000000000 +0000 @@ -763,7 +763,7 @@ 2000-06-04 * changed (again) Paragon 12000 SP linedistance handling, now 1.02 uses normal LD corrections, all other use none. We'll see, if this works. - Thanks to Reinhard Gnzel who helped to debug this. + Thanks to Reinhard Günzel who helped to debug this. * fixed some long lines (>80 chars) 2000-06-03 diff -Nru sane-backends-1.0.22/doc/plustek/Plustek-PARPORT-TODO.txt sane-backends-1.0.23/doc/plustek/Plustek-PARPORT-TODO.txt --- sane-backends-1.0.22/doc/plustek/Plustek-PARPORT-TODO.txt 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/plustek/Plustek-PARPORT-TODO.txt 2011-10-19 00:43:00.000000000 +0000 @@ -1,4 +1,4 @@ -Plustek-PARPORT-TODO.txt (2003-29-10) Gerhard Jger +Plustek-PARPORT-TODO.txt (2003-29-10) Gerhard Jäger ======================================================================== TODO (in general): diff -Nru sane-backends-1.0.22/doc/plustek/Plustek-PARPORT.txt sane-backends-1.0.23/doc/plustek/Plustek-PARPORT.txt --- sane-backends-1.0.22/doc/plustek/Plustek-PARPORT.txt 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/plustek/Plustek-PARPORT.txt 2011-10-19 00:43:00.000000000 +0000 @@ -1,4 +1,4 @@ -Plustek-PARPRORT.txt (2004-03-28) Gerhard Jger +Plustek-PARPRORT.txt (2004-03-28) Gerhard Jäger ==================================================================== diff -Nru sane-backends-1.0.22/doc/plustek/Plustek-USB.txt sane-backends-1.0.23/doc/plustek/Plustek-USB.txt --- sane-backends-1.0.22/doc/plustek/Plustek-USB.txt 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/plustek/Plustek-USB.txt 2011-10-19 00:43:00.000000000 +0000 @@ -1,4 +1,4 @@ -Plustek-USB.txt (2005-08-08) Gerhard Jger +Plustek-USB.txt (2005-08-08) Gerhard Jäger =============================================================== NOTE: diff -Nru sane-backends-1.0.22/doc/releases.txt sane-backends-1.0.23/doc/releases.txt --- sane-backends-1.0.22/doc/releases.txt 2011-02-13 23:26:54.000000000 +0000 +++ sane-backends-1.0.23/doc/releases.txt 2011-06-27 17:40:25.000000000 +0000 @@ -52,24 +52,25 @@ * checkout the sane/website.git module and: * copy sane-backends.html to sane-backends-"old-version".html * update sane-supported-devices.html with link to above "old" file -* rebuild sane-backends.html and sane-mfgs.html (see doc/Makefile) +* rebuild sane-backends.html and sane-mfgs.html (make -C doc html-pages) * use man2html from http://hydra.nac.uci.edu/indiv/ehood/man2html.html - to rebuild html man pages (see doc/Makefile) (no other version works) + to rebuild html man pages (make -C doc html-man) (no other version works) * add md5 sum to sane-md5sum.txt * check and update platforms page (sane-support.html) * add announcement to index.html * git commit -a && git push * check that website was updated automatically. if not, see: /org/alioth.debian.org/chroot/home/groups/sane/bin/update-htdocs.sh -* rebuild descriptions.db (see doc/Makefile) -* scp descriptions.db to alioth: +* rebuild descriptions.db (make -C doc descriptions.db) +* scp doc/descriptions.db to alioth: /org/alioth.debian.org/chroot/home/groups/sane/search/release * write announcements sane-devel, maybe others (e.g. freshmeat), include the md5 hash After the release: -* move ChangeLog to ChangeLog-"version" and start a new ChangeLog +* move ChangeLog to ChangeLog-"version" +* start a new ChangeLog * add ChangeLog-"version" to EXTRA_DIST in Makefile.in * configure.in: bump textual version & add 'git' suffix * configure.in: bump V_REV diff -Nru sane-backends-1.0.22/doc/sane-agfafocus.man sane-backends-1.0.23/doc/sane-agfafocus.man --- sane-backends-1.0.22/doc/sane-agfafocus.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-agfafocus.man 2012-07-31 01:38:34.000000000 +0000 @@ -117,8 +117,8 @@ 2 print sense 3 print warnings 4 print scanner-inquiry - 5 print informations - 6 print less important informations + 5 print information + 6 print less important information 7 print called procedures 8 print reader_process messages 10 print called sane\-init-routines diff -Nru sane-backends-1.0.22/doc/sane-artec.man sane-backends-1.0.23/doc/sane-artec.man --- sane-backends-1.0.22/doc/sane-artec.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-artec.man 2012-07-31 01:38:34.000000000 +0000 @@ -138,8 +138,8 @@ 2 print sense 3 print warnings 4 print scanner-inquiry - 5 print informations - 6 print less important informations + 5 print information + 6 print less important information 7 print major called procedures 8 print all called procedures 9 print procedure info/data messages diff -Nru sane-backends-1.0.22/doc/sane-avision.man sane-backends-1.0.23/doc/sane-avision.man --- sane-backends-1.0.22/doc/sane-avision.man 2011-01-30 18:49:46.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-avision.man 2012-07-31 01:38:34.000000000 +0000 @@ -7,7 +7,7 @@ .SH ABOUT THIS FILE -This file is a short descripton for the avision-backend shipped with SANE. +This file is a short description for the avision-backend shipped with SANE. .SH DESCRIPTION The @@ -149,7 +149,7 @@ If the library was compiled with debug support enabled, this environment variable controls the debug level for this backend. Higher debug levels increase the verbosity of the output. The debug -level 7 is the author's prefered value to debug backend problems. +level 7 is the author's preferred value to debug backend problems. Example: export SANE_DEBUG_AVISION=7 diff -Nru sane-backends-1.0.22/doc/sane-canon_dr.man sane-backends-1.0.23/doc/sane-canon_dr.man --- sane-backends-1.0.22/doc/sane-canon_dr.man 2011-01-30 18:49:46.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-canon_dr.man 2012-07-31 01:38:34.000000000 +0000 @@ -67,7 +67,7 @@ Additionally, several 'software' options are exposed by the backend. These are reimplementations of features provided natively by larger scanners, but running on the host computer. This enables smaller machines to have similar -capabilites. Please note that these features are somewhat simplistic, and +capabilities. Please note that these features are somewhat simplistic, and may not perform as well as the native implementations. Note also that these features all require that the driver cache the entire image in memory. This will almost certainly result in a reduction of scanning speed. diff -Nru sane-backends-1.0.22/doc/sane-epjitsu.man sane-backends-1.0.23/doc/sane-epjitsu.man --- sane-backends-1.0.22/doc/sane-epjitsu.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-epjitsu.man 2012-07-01 02:00:44.000000000 +0000 @@ -88,6 +88,9 @@ .br .br fi\-60F hardware grayscale mode is not used. +.br +.br +The S1100 is not currently supported, but a patch is available. .RE .SH CREDITS diff -Nru sane-backends-1.0.22/doc/sane-epson2.man sane-backends-1.0.23/doc/sane-epson2.man --- sane-backends-1.0.22/doc/sane-epson2.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-epson2.man 2012-07-31 01:38:34.000000000 +0000 @@ -261,7 +261,7 @@ The .I \-\-adf-mode -option selecst the ADF mode (simplex/duplex). +option select the ADF mode (simplex/duplex). .SH CONFIGURATION FILE The configuration file @CONFIGDIR@/epson2.conf specifies the device(s) that the diff -Nru sane-backends-1.0.22/doc/sane-fujitsu.man sane-backends-1.0.23/doc/sane-fujitsu.man --- sane-backends-1.0.22/doc/sane-fujitsu.man 2011-01-31 13:31:34.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-fujitsu.man 2012-07-31 01:38:34.000000000 +0000 @@ -10,7 +10,7 @@ library implements a SANE (Scanner Access Now Easy) backend which provides access to most Fujitsu flatbed and ADF scanners. -This document describes backend version 106, which shipped with SANE 1.0.22. +This document describes backend version 111, which shipped with SANE 1.0.23. .SH SUPPORTED HARDWARE This version supports every known model which speaks the Fujitsu SCSI and @@ -39,7 +39,7 @@ ScanStation M3093E/DE/EX fi\-4110EOX/2 ScanPartner M3096EX fi\-4010CU SP\-Jr M3097E+/DE S300/S300M -SP\-10/10C M3099A/EH/EX S1300 +SP\-10/10C M3099A/EH/EX S1300/S1100 SP\-15C/300C fi\-60F SP\-600C/620C fi\-5015C .fi @@ -88,7 +88,7 @@ Additionally, several 'software' options are exposed by the backend. These are reimplementations of features provided natively by larger scanners, but running on the host computer. This enables smaller machines to have similar -capabilites. Please note that these features are somewhat simplistic, and +capabilities. Please note that these features are somewhat simplistic, and may not perform as well as the native implementations. Note also that these features all require that the driver cache the entire image in memory. This will almost certainly result in a reduction of scanning speed. @@ -162,7 +162,9 @@ .br 25 SCSI/USB trace .br -30 SCSI/USB detail +30 SCSI/USB writes +.br +31 SCSI/USB reads .br 35 Useless noise .RE @@ -215,7 +217,7 @@ Martin G. Miller mgmiller at optonline.net -Software image enhancement routines funded and hardware donated by: +Hardware donated, software image enhancement and fi-6xxx support funded by: Fujitsu Computer Products of America, Inc. www.fcpa.com diff -Nru sane-backends-1.0.22/doc/sane-genesys.man sane-backends-1.0.23/doc/sane-genesys.man --- sane-backends-1.0.22/doc/sane-genesys.man 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-genesys.man 2012-08-10 00:33:29.000000000 +0000 @@ -1,4 +1,4 @@ -.TH "sane\-genesys" "5" "26 Dec 2010" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy" +.TH "sane\-genesys" "5" "4 Jul 2012" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy" .IX sane\-genesys .SH "NAME" sane\-genesys \- SANE backend for GL646, GL841, GL843, GL847 and GL124 based USB flatbed scanners @@ -6,13 +6,13 @@ The .B sane\-genesys library implements a SANE (Scanner Access Now Easy) backend that provides -access to USB flatbed scanners based on the Genesys GL646, GL841 and GL847 chips. +access to USB flatbed scanners based on the Genesys GL646, GL841, GL843, GL847 and GL124 chips. At present, the following scanners are known to work with this backend: .PP .RS -Canon LiDE 35/40/50/60/100/110/200/210 +Canon LiDE 35/40/50/60/100/110/200/210/700 .br -Hewlett-Packard HP2300C/HP3670/HP3690 +Hewlett-Packard HP2300C/HP2400/HP3670/HP3690/G4010/G4050 .br Medion MD5345/MD6228/MD6274 .br @@ -26,7 +26,7 @@ .br Visioneer OneTouch 7100/Strobe XP100 (rev3)/XP200/XP300/Roadwarrior .br -Xerox Travel Scanner 100 +Xerox Travel Scanner 100, OneTouch 2400 .RE .PP @@ -43,7 +43,7 @@ slightly different from the models mentioned above, please let me know. .PP If you own a scanner that isn't detected by the genesys backend but has a GL646, -GL841, GL843 or GL847 chipset, you can try to add it to the backend. +GL841, GL843, GL847 or GL124 chipset, you can try to add it to the backend. .PP .SH "CALIBRATION" To give correct image quality, sheet fed scanners need to be calibrated using the @@ -70,10 +70,15 @@ .B \-\-disable-interpolation yes|no .RS When using high resolutions where the horizontal resolution is smaller than vertical resolution, -data is expanded by software to preserve picture geometry. This can be disbled by this option to get +data is expanded by software to preserve picture geometry. This can be disabled by this option to get real scanned data. .RE +.B \-\-disable-dynamic-lineart yes|no +.RS + Disable use of a software adaptive algorithm to generate lineart and rely on hardware lineart. +.RE + .B \-\-color-filter None|Red|Green|Blue .RS When using gray or lineart this option selects the used color. Using a color filter @@ -81,11 +86,16 @@ selected. .RE +.B \-\-lamp\-off\-scan +.RS + The lamp will be turned off during the scan. Calibration is still done with lamp on. +.RE + .PP Additionally, several 'software' options are exposed by the backend. These are reimplementations of features provided natively by larger scanners, but running on the host computer. This enables smaller machines to have similar -capabilites. Please note that these features are somewhat simplistic, and +capabilities. Please note that these features are somewhat simplistic, and may not perform as well as the native implementations. Note also that these features all require that the driver cache the entire image in memory. This will almost certainly result in a reduction of scanning speed. @@ -106,6 +116,16 @@ .RS Requests the driver to find and remove dots of X diameter or smaller from the image, and fill the space with the average surrounding color. +.RE +.PP +.B \-\-swskip 0..100% (in steps of 1) [0] +.RS + Request driver to discard pages with low numbers of dark pixels. +.RE +.PP +.B \-\-swderotate[=(yes|no)] [no] +.RS + Request driver to detect and correct 90 degree image rotation. .PP .SH "SYSTEM ISSUES" @@ -214,11 +234,14 @@ .br Syscan/Ambir DocketPORT 467/485/487/665/685 .br -Xerox Travel Scanner 100 +Xerox Travel Scanner 100, Onetouch 2400 .RE .TP cncsolutions (http://www.cncsolutions.com.br) sponsored and supported the work on the Panasonic KV-SS080. .br +.TP +Brian Paavo from Benthic Science Limited for donating a Canoscan LiDE 700F. +.br .SH "SEE ALSO" .BR sane (7), @@ -239,15 +262,17 @@ .br Pierre Willenbrock .br +Alexey Osipov for HP2400 final support .SH "LIMITATIONS" -Powersaving isn't implemented for gl646 based scanner. +Powersaving isn't implemented for gl646 based scanner. Dynamic (emulated from gray data and with dithering) isn't enabled for gl646 scanners. Hardware lineart is limited up to 600 dpi for gl847 based scanners, due to the way image sensors are built. .br .TP This backend will be much slower if not using libusb-1.0. So be sure that sane-backends is built with the --enable-libusb_1_0 option. .br .SH "BUGS" -Currently no known bug. +For the LiDE 200, the scanned data at 4800 dpi is obtained "as is" from sensor. It seems the windows driver does some digital processing +to improve it, which is not implemented in the backend. .PP diff -Nru sane-backends-1.0.22/doc/sane-hpljm1005.man sane-backends-1.0.23/doc/sane-hpljm1005.man --- sane-backends-1.0.22/doc/sane-hpljm1005.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-hpljm1005.man 2011-10-19 00:43:00.000000000 +0000 @@ -34,4 +34,4 @@ .BR sane\-usb (5), .SH AUTHOR -Philippe Rtornaz +Philippe R\['e]tornaz diff -Nru sane-backends-1.0.22/doc/sane-hs2p.man sane-backends-1.0.23/doc/sane-hs2p.man --- sane-backends-1.0.22/doc/sane-hs2p.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-hs2p.man 2012-07-31 01:38:34.000000000 +0000 @@ -104,7 +104,7 @@ for Maintenance Data (80H) is planned as this functionality is more suited to a stand-alone utility to be used by a technician when replacing the lamp or ADF unit. Nor is support for reading or changing -IPU (93H) paramters and adjustments planned, since my IS450 lacks +IPU (93H) parameters and adjustments planned, since my IS450 lacks such a unit. The 31-byte Auto Photo/Letter struct and 21-byte Dynamic threshold struct are documented in the hs2p-scsi.h file should someone wish to use their IPU for image data processing. diff -Nru sane-backends-1.0.22/doc/sane-kodakaio.man sane-backends-1.0.23/doc/sane-kodakaio.man --- sane-backends-1.0.22/doc/sane-kodakaio.man 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-kodakaio.man 2012-07-01 02:00:44.000000000 +0000 @@ -0,0 +1,40 @@ +.TH sane\-kodakaio 2.4 "17 Jun 2012" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy" +.IX sane\-kodakaio + +.SH NAME +sane\-kodakaio \- SANE backend for Kodak aio printer / scanners + +.SH DESCRIPTION +The +.B sane\-kodakaio +library implements a SANE (Scanner Access Now Easy) backend which +provides access to Kodak aio printer / scanners, like the ESP and Hero series. + +This document describes backend version 2.4, which is the first candidate for +incorporation in sane-backends. + +.SH SUPPORTED HARDWARE +This version should support models of the Kodak ESP and Hero series, and possibly some +Advent AiO scanners. The ESP 5250 and Hero 9.1 were used to develop the backend, +but other models may work. Please see the desc file. + +If you have a model not on that list, or reported as 'untested': the best way +to determine level of support is to test the scanner directly. + +.SH CONFIGURATION FILE +The configuration file "kodakaio.conf" is used to tell the backend how to look +for scanners, and provide options controlling the operation of the backend. +This file is read each time the frontend asks the backend for a list +of scanners, generally only when the frontend starts. + +.SH ENVIRONMENT +The backend uses a single environment variable, SANE_DEBUG_KODAKAIO, which +enables debugging output to stderr. + +.SH KNOWN ISSUES +Most hardware options are either not supported or not exposed for control by +the user, including: multifeed detection, image compression etc. +.PP + +.SH AUTHOR +P. Newall diff -Nru sane-backends-1.0.22/doc/sane-kvs1025.man sane-backends-1.0.23/doc/sane-kvs1025.man --- sane-backends-1.0.22/doc/sane-kvs1025.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-kvs1025.man 2012-07-31 01:38:34.000000000 +0000 @@ -12,7 +12,7 @@ .SH KNOWN ISSUES This document was written by the SANE project, which has no information -regarding the capabilites or reliability of the backend. All information +regarding the capabilities or reliability of the backend. All information contained here is suspect. .SH CREDITS diff -Nru sane-backends-1.0.22/doc/sane-kvs20xx.man sane-backends-1.0.23/doc/sane-kvs20xx.man --- sane-backends-1.0.22/doc/sane-kvs20xx.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-kvs20xx.man 2012-07-31 01:38:34.000000000 +0000 @@ -12,7 +12,7 @@ .SH KNOWN ISSUES This document was written by the SANE project, which has no information -regarding the capabilites or reliability of the backend. All information +regarding the capabilities or reliability of the backend. All information contained here is suspect. .SH CREDITS diff -Nru sane-backends-1.0.22/doc/sane-kvs40xx.man sane-backends-1.0.23/doc/sane-kvs40xx.man --- sane-backends-1.0.22/doc/sane-kvs40xx.man 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-kvs40xx.man 2012-07-31 01:38:34.000000000 +0000 @@ -0,0 +1,31 @@ +.TH sane\-kvs40xx 5 "03 Jun 2011" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy" +.IX sane\-kvs40xx + +.SH NAME +sane\-kvs40xx \- SANE backend for Panasonic KV-S40xxC USB/SCSI ADF scanners. + +.SH DESCRIPTION +The +.B sane\-kvs40xx +library implements a SANE (Scanner Access Now Easy) backend which +provides access to the Panasonic KV-S40xxC and KV-S70xxC scanners. + +.SH KNOWN ISSUES +This document was written by the SANE project, which has no information +regarding the capabilities or reliability of the backend. All information +contained here is suspect. + +The backend uses pthreads directly, and so requires pthreads to be enabled. + +.SH CREDITS +The backend was written by Panasonic Russia Ltd. + +The backend was ported to sane-backends 1.0.23 and downgraded to C89 +by m. allan noah. + +.SH "SEE ALSO" +sane(7), sane\-usb(5), sane\-scsi(5) + +.SH AUTHOR +m. allan noah: + diff -Nru sane-backends-1.0.22/doc/sane-lexmark.man sane-backends-1.0.23/doc/sane-lexmark.man --- sane-backends-1.0.22/doc/sane-lexmark.man 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-lexmark.man 2012-07-31 01:38:34.000000000 +0000 @@ -121,7 +121,7 @@ implements what the scanner can support. For instance, shading correction (vertical stripes due to sensor variation across its width) is done in software. Head park position is also detected by software. -The data compression isn't supported for the X1200 serie on USB 1.1, +The data compression isn't supported for the X1200 series on USB 1.1, leading to slow scans. .SH "BUGS" @@ -136,10 +136,10 @@ .SH "AUTHOR" .TP -The backend was originaly written by Fred Odendaal. +The backend was originally written by Fred Odendaal. .I http://ca.geocities.com/freshshelf@rogers.com/ .TP -The new version is currently developped by St\['e]phane Voltz. +The new version is currently developed by St\['e]phane Voltz. .I http://stef.dev.free.fr/sane/lexmark .TP X74 support was written by Torsten Houwaart () diff -Nru sane-backends-1.0.22/doc/sane-magicolor.man sane-backends-1.0.23/doc/sane-magicolor.man --- sane-backends-1.0.22/doc/sane-magicolor.man 2011-01-19 02:31:13.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-magicolor.man 2012-07-31 01:38:34.000000000 +0000 @@ -19,7 +19,7 @@ .SH "CONFIGURATION" .PP -This section decribes the backend's configuration file entries. The file is located at: +This section describes the backend's configuration file entries. The file is located at: .IP .I @CONFIGDIR@/magicolor.conf .PP diff -Nru sane-backends-1.0.22/doc/sane-p5.man sane-backends-1.0.23/doc/sane-p5.man --- sane-backends-1.0.22/doc/sane-p5.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-p5.man 2011-10-19 00:43:00.000000000 +0000 @@ -133,7 +133,7 @@ .SH "CREDITS" Support for the Prima PagePartner has been made possible thank to an hardware donation -by Sbastien Lange. +by S\['e]bastien Lange. .SH "BUG REPORTS" If something doesn't work mail sane-devel@lists.alioth.debian.org or use the bug diff -Nru sane-backends-1.0.22/doc/sane-pixma.man sane-backends-1.0.23/doc/sane-pixma.man --- sane-backends-1.0.22/doc/sane-pixma.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-pixma.man 2012-08-10 00:33:29.000000000 +0000 @@ -1,10 +1,12 @@ -.TH "sane\-pixma" "5" "8 Jan 2010" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy" +.TH "sane\-pixma" "5" "31 Jul 2012" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy" .IX sane\-pixma .SH NAME .B sane\-pixma \- SANE backend for Canon PIXMA Multi-Functions Printers .br - MP, MX, ImageCLASS and I-SENSYS series + E, MG, MP, MX, ImageCLASS, imageRunner and I-SENSYS series +.br + and for Canon CanoScan Flatbed/TPU Scanners .SH DESCRIPTION The .B sane\-pixma @@ -17,7 +19,7 @@ .RS PIXMA MP140, MP150, MP160, MP170, MP180, MP190 .br -PIXMA MP210, MP220, MP240, MP250, MP260, MP270 +PIXMA MP210, MP220, MP240, MP250, MP260, MP270, MP280 .br PIXMA MP360, MP370, MP390 .br @@ -25,59 +27,78 @@ .br PIXMA MP500, MP510, MP520, MP530, MP540, MP550, MP560 .br -PIXMA MP600, MP600R, MP610, MP620, MP630, MP640, MP710 +PIXMA MP600, MP600R, MP610, MP620, MP630, MP640 +.br +PIXMA MP700, MP710, MP730, PIXMA MP750 (no grayscale) +.br +PIXMA MP800, MP800R, MP810, MP830 +.br +PIXMA MP960, MP970, MP980, MP990 .br -PIXMA MP800, MP800R, MP810, MP830, MP960, MP970, MP980, MP990 +PIXMA MX300, MX310, MX330, MX340, MX350, MX360 .br -PIXMA MX300, MX310, MX330, MX340, MX350 +PIXMA MX420, MX700, MX7600 .br -PIXMA MX700, MX850, MX860, MX870, MX7600 +PIXMA MX850, MX860, MX870, MX882, MX885 .br -PIXMA MP700, MP730, PIXMA MP750 (no grayscale) +ImageCLASS MF3110, MF3240, MF4010, MF4018 .br -ImageCLASS MF3110, MF3240, MF4010, MF4018, MF4120, MF4122 +ImageCLASS MF4120, MF4122, MF4140, MF4150 .br -ImageCLASS MF4140, MF4150, MF4270, MF4350d, MF4370dn, MF4380dn +ImageCLASS MF4270, MF4350d, MF4370dn, MF4380dn .br -ImageCLASS MF4660, MF4690, MF5770, MF6550, D480 +ImageCLASS MF4410, MF4660, MF4690 +.br +ImageCLASS MF5770, MF6550, D480 .br I-SENSYS MF4320d, MF4330d .br -CanoScan 8800F +CanoScan 8800F, 9000F .RE .PP The following models are not well tested and/or the scanner sometimes hangs and must be switched off and on. .PP .RS -PIXMA PIXMA MP760, PIXMA MP780 +PIXMA MP760, MP770, MP780, MP790 +.br +PIXMA MX360 .RE .PP The following models may use the same Pixma protocol as those listed above, but have not yet been reported to work (or not). They are declared in the backend so that they get recognized and activated. -Feedback in the Sane-dev mailing list welcome. +Feedback in the sane\-devel mailing list welcome. .PP .RS -PIXMA MP375R, MP740 +PIXMA MG2100, MG3100, MG4100, MG5100, MG5200, MG5300 +.br +PIXMA MG6100, MG6200, MG8100, MG8200 .br -PIXMA MX320 +PIXMA MP375R, MP493, MP495, MP740 +.br +PIXMA MX320, MX410 +.br +ImageCLASS MF5630, MF5650, MF5730, MF5750, MF8030, MF8170c +.br +imageRunner iR1020, iR1024, iR1025 +.RE +.PP +The following models may use partly the same Pixma protocol as other devices +listed above, but may still need some work. They are declared in the backend +as experimental. Snoop logs are required to further investigate, please contact +the sane\-devel mailing list. +.PP +.RS +PIXMA E500, E600 .br -ImageCLASS MF5630, MF5650, MF5730, MF5750, MF8170c +PIXMA MX370, MX430, MX510, MX710, MX890 .RE .PP -\#The following models may use partly the same Pixma protocol as MPs listed -\#above, but may still need some work. They are declared in the backend as -\#experimental. Snoop logs are required to further investigate, please contact -\#the sane\-devel mailing list. -\#.PP -\#.RS -\#PIXMA MP--- -\#.RE The backend supports: .PP .RS -* resolutions of 75, 150, 300, 600, 1200, 2400, and 4800 DPI (some maybe buggy), +* resolutions of 75, 150, 300, 600, 1200, 2400, 4800, and 9600 DPI (some maybe buggy), .br * color and grayscale mode, as well as lineart on certain models, .br @@ -243,7 +264,7 @@ You can also post into the Sane-devel mailing list for support. .SH AUTHORS -Wittawat Yamwong, Nicolas Martin, Dennis Lou, Louis Lagendijk +Wittawat Yamwong, Nicolas Martin, Dennis Lou, Louis Lagendijk, Rolf Bensch .PP We would like to thank all testers and helpers. Without them we could not be able to write subdrivers for models we don't have. See also the project diff -Nru sane-backends-1.0.22/doc/sane-plustek_pp.man sane-backends-1.0.23/doc/sane-plustek_pp.man --- sane-backends-1.0.22/doc/sane-plustek_pp.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-plustek_pp.man 2012-07-31 01:38:34.000000000 +0000 @@ -291,7 +291,7 @@ .I ppp specifies the port base address, where the scanner is connected to. The default value is 0x378, which -normaly is standard. +is normally a standard. .RE .PP warmup=www diff -Nru sane-backends-1.0.22/doc/sane-pnm.man sane-backends-1.0.23/doc/sane-pnm.man --- sane-backends-1.0.22/doc/sane-pnm.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-pnm.man 2012-07-31 01:38:34.000000000 +0000 @@ -8,7 +8,7 @@ library implements a SANE (Scanner Access Now Easy) backend that provides access to PNM (Portable aNyMap files, which covers PBM bitmap files, PGM grayscale files, and PPM pixmap files). The purpose of -this backend is primarly to aid in debugging of SANE frontends. It +this backend is primarily to aid in debugging of SANE frontends. It also serves as an illustrative example of a minimal SANE backend. .SH "DEVICE NAMES" This backend provides two devices called diff -Nru sane-backends-1.0.22/doc/sane-rts8891.man sane-backends-1.0.23/doc/sane-rts8891.man --- sane-backends-1.0.22/doc/sane-rts8891.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-rts8891.man 2012-07-31 01:38:34.000000000 +0000 @@ -100,7 +100,7 @@ enables or not the sharing of the scanner between multiple frontends at the same time. .PP .B modelnumber -is used to force the reported model by the backend and is only usefull in the case of a scanner which NVRAM has been erased. +is used to force the reported model by the backend and is only useful in the case of a scanner which NVRAM has been erased. .RS .ft CR .nf @@ -134,7 +134,7 @@ .SH "LIMITATIONS" Scanners of the same model exist with different sensors, due to lack of data (ie USB logs) some sensors are better supported than others. At least 75 dpi -mode is working for any model. Sharing the a scanner between several frontends +mode is working for any model. Sharing the scanner between several frontends at the same time (allowsharing option) may not work on some USB controllers. .PP XPA is no (yet) supported. @@ -149,7 +149,7 @@ .SH "AUTHOR" .TP -This backend has been developped by St\['e]phane Voltz. +This backend has been developed by St\['e]phane Voltz. .I http://stef.dev.free.fr/sane/rts8891 .SH "CREDITS" .TP diff -Nru sane-backends-1.0.22/doc/sane-scsi.man sane-backends-1.0.23/doc/sane-scsi.man --- sane-backends-1.0.22/doc/sane-scsi.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-scsi.man 2012-07-31 01:38:35.000000000 +0000 @@ -133,7 +133,7 @@ .PP .SH FREEBSD INFO Auto-configuration using the "scsi *" lines in the config files only works if -the user running the frontend has read/write acces to /dev/xpt0. Instead, you +the user running the frontend has read/write access to /dev/xpt0. Instead, you can also set a link .I /dev/scanner to the appropriate /dev/uk device. diff -Nru sane-backends-1.0.22/doc/sane-sharp.man sane-backends-1.0.23/doc/sane-sharp.man --- sane-backends-1.0.22/doc/sane-sharp.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-sharp.man 2012-07-31 01:38:35.000000000 +0000 @@ -160,13 +160,13 @@ The default values are 0, 1, 2, .. 255 (i.e., gamma == 1). .B Green Gamma Table -(paramter +(parameter .B \-\-green\-gamma\-table for scanimage). Allowed values: 0..255; 256 numbers must be defined. The default values are 0, 1, 2, .. 255 (i.e., gamma == 1). .B Blue Gamma Table -(paramter +(parameter .B \-\-blue\-gamma\-table for scanimage). Allowed values: 0..255; 256 numbers must be defined. The default values are 0, 1, 2, .. 255 (i.e., gamma == 1). diff -Nru sane-backends-1.0.22/doc/sane-test.man sane-backends-1.0.23/doc/sane-test.man --- sane-backends-1.0.22/doc/sane-test.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-test.man 2012-07-31 01:38:35.000000000 +0000 @@ -106,7 +106,7 @@ .B read\-return\-value is different from "Default", the selected status will be returned by every call to sane_read(). This is useful to test the frontend's handling of the -SANE statii. +SANE statuses. .PP If option .B ppl\-loss diff -Nru sane-backends-1.0.22/doc/sane-umax.man sane-backends-1.0.23/doc/sane-umax.man --- sane-backends-1.0.22/doc/sane-umax.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-umax.man 2012-07-31 01:38:35.000000000 +0000 @@ -6,15 +6,15 @@ .SH ABOUT THIS FILE -This file only is a short descripton of the umax-backend for sane! For detailled information take a look at +This file only is a short description of the umax-backend for sane! For detailed information take a look at sane\-umax\-doc.html (it is included in the sane source directory and in the xsane online help)! .SH DESCRIPTION The .B sane\-umax -library implements a SANE backend that provides acces to several UMAX-SCSI-scanners and some Linotye Hell SCSI-scanners, -parallel- and USB-scanners are not (and propably will never be) supported! +library implements a SANE backend that provides access to several UMAX-SCSI-scanners and some Linotye Hell SCSI-scanners, +parallel- and USB-scanners are not (and probably will never be) supported! .B I suggest you hold one hand on the power-button of the scanner while you try the first scans! @@ -246,8 +246,8 @@ 2 print sense 3 print warnings 4 print scanner-inquiry - 5 print informations - 6 print less important informations + 5 print information + 6 print less important information 7 print called procedures 8 print reader_process messages 10 print called sane\-init-routines diff -Nru sane-backends-1.0.22/doc/sane-umax_pp.man sane-backends-1.0.23/doc/sane-umax_pp.man --- sane-backends-1.0.22/doc/sane-umax_pp.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/sane-umax_pp.man 2012-07-31 01:38:35.000000000 +0000 @@ -29,7 +29,7 @@ .RE .PP This backend handles 75x75, 150x150, 300x300, 600x600 and 600x1200 for 1220P/1600P/2000P -dpi scan reslutions,and 75x75, 150x150, 300x300 and 300x600 for 610P. In color and gray +dpi scan resolutions, and 75x75, 150x150, 300x300 and 300x600 for 610P. In color and gray levels, there is a software lineart mode. .PP The new generation models share a newer version of the 610P ASIC embedded in an EPAT chip. @@ -146,7 +146,7 @@ .B green\-gain and .B blue\-gain -allow you to adjust the sensitivy of your scanner for the given color. Values +allow you to adjust the sensitivity of your scanner for the given color. Values range from 0 (lowest gain) to 15 (highest). If the advanced option "Gain" isn't checked in the frontend, the backend does automatic gain calibration, and do not use user provided values. @@ -167,8 +167,8 @@ .B astra allows you to change the model of your scanner. Current auto detection is based on side effects on scanning when using 1220P command set on other models, so -it may fail on unkown hardware combination. Valid values are 610, 1220, 1600 -and 2000. It is usefull only when autodetection fails to detect properly +it may fail on unknown hardware combination. Valid values are 610, 1220, 1600 +and 2000. It is useful only when autodetection fails to detect properly your scanner model. If your scanner work properly but is reported wrongly, let it be that way. The only valid case to change the model is when your scanner produces "black" or diff -Nru sane-backends-1.0.22/doc/sane.man sane-backends-1.0.23/doc/sane.man --- sane-backends-1.0.22/doc/sane.man 2011-01-16 01:01:28.000000000 +0000 +++ sane-backends-1.0.23/doc/sane.man 2012-07-01 02:00:44.000000000 +0000 @@ -260,9 +260,9 @@ for details. .TP .B genesys -The genesys backend provides support for scanners based on the Genesys Logic -GL646 and GL841 chips like the Medion 6471 and Hewlett-Packard 2300c. -Support for GL841 based scanners is far from being complete. See +The genesys backend provides support for several scanners based on the Genesys Logic +GL646, GL841, GL843, GL847 and GL124 chips like the Medion 6471 and Hewlett-Packard 2300c. + See .BR sane\-genesys (5) for details. .TP @@ -325,6 +325,11 @@ .BR sane\-kodak (5) for details. .TP +.B kodakaio +The SANE backend for Kodak AiO printer/scanners. See +.BR sane\-kodakaio (5) +for details. +.TP .B kvs1025 The SANE backend for Panasonic KV-S102xC scanners. See .BR sane\-kvs1025 (5) diff -Nru sane-backends-1.0.22/doc/saned.man sane-backends-1.0.23/doc/saned.man --- sane-backends-1.0.22/doc/saned.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/saned.man 2011-10-19 00:43:00.000000000 +0000 @@ -118,7 +118,7 @@ .br [::1] .br -[2001:7a8:185e::42:12]/64 +[2001:db8:185e::42:12]/64 .RE .PP The case of the host names does not matter, so AHost.COM is considered diff -Nru sane-backends-1.0.22/doc/scanimage.man sane-backends-1.0.23/doc/scanimage.man --- sane-backends-1.0.22/doc/scanimage.man 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/scanimage.man 2011-06-27 17:40:25.000000000 +0000 @@ -171,7 +171,7 @@ .B \-\-batch\-start .I start selects the page number to start naming files with. If this option is not -given, the counter will start at 0. +given, the counter will start at 1. .B \-\-batch\-count .I count specifies the number of pages to attempt to scan. If not given, diff -Nru sane-backends-1.0.22/doc/u12/U12.changes sane-backends-1.0.23/doc/u12/U12.changes --- sane-backends-1.0.22/doc/u12/U12.changes 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/u12/U12.changes 2011-10-19 00:43:00.000000000 +0000 @@ -1,4 +1,4 @@ -U12.changes - Gerhard Jger +U12.changes - Gerhard Jäger ================================================ V 0.01-1 (2004-09-01) diff -Nru sane-backends-1.0.22/doc/u12/U12.todo sane-backends-1.0.23/doc/u12/U12.todo --- sane-backends-1.0.22/doc/u12/U12.todo 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/u12/U12.todo 2011-10-19 00:43:00.000000000 +0000 @@ -1,4 +1,4 @@ -U12.todo (2004-19-01) Gerhard Jger +U12.todo (2004-19-01) Gerhard Jäger ========================================================= OPEN: diff -Nru sane-backends-1.0.22/doc/umax/sane-umax-config-doc.html sane-backends-1.0.23/doc/umax/sane-umax-config-doc.html --- sane-backends-1.0.22/doc/umax/sane-umax-config-doc.html 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/umax/sane-umax-config-doc.html 2012-07-31 01:38:35.000000000 +0000 @@ -133,7 +133,7 @@ some scanners it should be increased to 64KB.

-The option scan-lines defines the the number of lines that +The option scan-lines defines the number of lines that shall be scanned with one scsi read command for a real scan. The number of lines that are read with one scsi command for preview scans are defined by the option preview-lines. diff -Nru sane-backends-1.0.22/doc/umax/sane-umax-others-doc.html sane-backends-1.0.23/doc/umax/sane-umax-others-doc.html --- sane-backends-1.0.22/doc/umax/sane-umax-others-doc.html 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/umax/sane-umax-others-doc.html 2012-07-31 01:38:35.000000000 +0000 @@ -71,7 +71,7 @@


The sane-umax library implements a SANE -backend that provides acces to several UMAX-SCSI-scanners. Parallel- +backend that provides access to several UMAX-SCSI-scanners. Parallel- and USB- scanners are not supported!
Here is a list of the UMAX-scanners:
diff -Nru sane-backends-1.0.22/doc/umax/sane-umax-parport-doc.html sane-backends-1.0.23/doc/umax/sane-umax-parport-doc.html --- sane-backends-1.0.22/doc/umax/sane-umax-parport-doc.html 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/umax/sane-umax-parport-doc.html 2012-07-31 01:38:35.000000000 +0000 @@ -71,14 +71,14 @@

The sane-umax library implements a SANE -backend that provides acces to several UMAX-SCSI-scanners. +backend that provides access to several UMAX-SCSI-scanners. Parallel- and USB- scanners are not supported!

But there is an experimental parallel port driver for UMAX scanners.
-Dont ask me about that driver - I do not know anything about this driver! +Don't ask me about that driver - I do not know anything about this driver!
diff -Nru sane-backends-1.0.22/doc/umax/sane-umax-scanner-clones-doc.html sane-backends-1.0.23/doc/umax/sane-umax-scanner-clones-doc.html --- sane-backends-1.0.22/doc/umax/sane-umax-scanner-clones-doc.html 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/doc/umax/sane-umax-scanner-clones-doc.html 2012-07-31 01:38:35.000000000 +0000 @@ -71,7 +71,7 @@

The sane-umax library implements a SANE -backend that provides acces to several scanners that are compatible to the UMAX-SCSI-protocoll! +backend that provides access to several scanners that are compatible to the UMAX-SCSI-protocoll!
Here is a list of the UMAX-compatible scanners:
diff -Nru sane-backends-1.0.22/frontend/Makefile.am sane-backends-1.0.23/frontend/Makefile.am --- sane-backends-1.0.22/frontend/Makefile.am 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/frontend/Makefile.am 2012-08-15 01:49:28.000000000 +0000 @@ -17,11 +17,12 @@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include scanimage_SOURCES = scanimage.c stiff.c stiff.h -scanimage_LDADD = ../lib/liblib.la ../lib/libfelib.la ../backend/libsane.la +scanimage_LDADD = ../backend/libsane.la ../sanei/libsanei.la ../lib/liblib.la \ + ../lib/libfelib.la saned_SOURCES = saned.c -saned_LDADD = ../sanei/libsanei.la ../lib/liblib.la ../lib/libfelib.la \ - ../backend/libsane.la @SYSLOG_LIBS@ +saned_LDADD = ../backend/libsane.la ../sanei/libsanei.la ../lib/liblib.la \ + ../lib/libfelib.la @SYSLOG_LIBS@ test_SOURCES = test.c test_LDADD = ../lib/liblib.la ../lib/libfelib.la ../backend/libsane.la diff -Nru sane-backends-1.0.22/frontend/Makefile.in sane-backends-1.0.23/frontend/Makefile.in --- sane-backends-1.0.22/frontend/Makefile.in 2011-01-30 18:50:55.000000000 +0000 +++ sane-backends-1.0.23/frontend/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -55,12 +55,12 @@ PROGRAMS = $(bin_PROGRAMS) $(sbin_PROGRAMS) am_saned_OBJECTS = saned.$(OBJEXT) saned_OBJECTS = $(am_saned_OBJECTS) -saned_DEPENDENCIES = ../sanei/libsanei.la ../lib/liblib.la \ - ../lib/libfelib.la ../backend/libsane.la +saned_DEPENDENCIES = ../backend/libsane.la ../sanei/libsanei.la \ + ../lib/liblib.la ../lib/libfelib.la am_scanimage_OBJECTS = scanimage.$(OBJEXT) stiff.$(OBJEXT) scanimage_OBJECTS = $(am_scanimage_OBJECTS) -scanimage_DEPENDENCIES = ../lib/liblib.la ../lib/libfelib.la \ - ../backend/libsane.la +scanimage_DEPENDENCIES = ../backend/libsane.la ../sanei/libsanei.la \ + ../lib/liblib.la ../lib/libfelib.la am_test_OBJECTS = test.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) test_DEPENDENCIES = ../lib/liblib.la ../lib/libfelib.la \ @@ -100,6 +100,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -156,6 +157,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -205,6 +207,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -257,10 +260,12 @@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include scanimage_SOURCES = scanimage.c stiff.c stiff.h -scanimage_LDADD = ../lib/liblib.la ../lib/libfelib.la ../backend/libsane.la +scanimage_LDADD = ../backend/libsane.la ../sanei/libsanei.la ../lib/liblib.la \ + ../lib/libfelib.la + saned_SOURCES = saned.c -saned_LDADD = ../sanei/libsanei.la ../lib/liblib.la ../lib/libfelib.la \ - ../backend/libsane.la @SYSLOG_LIBS@ +saned_LDADD = ../backend/libsane.la ../sanei/libsanei.la ../lib/liblib.la \ + ../lib/libfelib.la @SYSLOG_LIBS@ test_SOURCES = test.c test_LDADD = ../lib/liblib.la ../lib/libfelib.la ../backend/libsane.la diff -Nru sane-backends-1.0.22/frontend/saned.c sane-backends-1.0.23/frontend/saned.c --- sane-backends-1.0.22/frontend/saned.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/frontend/saned.c 2011-06-27 17:40:22.000000000 +0000 @@ -209,6 +209,10 @@ # define MAXHOSTNAMELEN 120 #endif +#ifndef PATH_MAX +# define PATH_MAX 1024 +#endif + struct saned_child { pid_t pid; struct saned_child *next; diff -Nru sane-backends-1.0.22/frontend/scanimage.c sane-backends-1.0.23/frontend/scanimage.c --- sane-backends-1.0.22/frontend/scanimage.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/frontend/scanimage.c 2011-11-21 20:17:48.000000000 +0000 @@ -282,8 +282,12 @@ if (query_user == 1) { +#ifdef HAVE_GETPASS strcpy (password, (wipe = getpass ("Enter password: "))); memset (wipe, 0, strlen (password)); +#else + printf("OS has no getpass(). User Queries will not work\n"); +#endif } if (md5mode) @@ -1192,8 +1196,6 @@ SANE_Word total_bytes = 0, expected_bytes; SANE_Int hang_over = -1; - buffer = malloc (buffer_size); - do { if (!first_frame) @@ -2213,9 +2215,13 @@ if (output_format != OUTPUT_PNM) resolution_value = get_resolution (); +#ifdef SIGHUP signal (SIGHUP, sighandler); - signal (SIGINT, sighandler); +#endif +#ifdef SIGPIPE signal (SIGPIPE, sighandler); +#endif + signal (SIGINT, sighandler); signal (SIGTERM, sighandler); if (test == 0) @@ -2240,6 +2246,8 @@ exit (1); } + buffer = malloc (buffer_size); + do { char path[PATH_MAX]; diff -Nru sane-backends-1.0.22/include/Makefile.in sane-backends-1.0.23/include/Makefile.in --- sane-backends-1.0.22/include/Makefile.in 2011-01-30 18:50:56.000000000 +0000 +++ sane-backends-1.0.23/include/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -86,6 +86,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -142,6 +143,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -191,6 +193,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ diff -Nru sane-backends-1.0.22/include/sane/config.h.in sane-backends-1.0.23/include/sane/config.h.in --- sane-backends-1.0.22/include/sane/config.h.in 2011-01-21 00:26:47.000000000 +0000 +++ sane-backends-1.0.23/include/sane/config.h.in 2012-07-01 02:00:44.000000000 +0000 @@ -61,6 +61,12 @@ /* Define to 1 if you have the `cfmakeraw' function. */ #undef HAVE_CFMAKERAW +/* Is /usr/include/cups/cups.h available? */ +#undef HAVE_CUPS + +/* Define to 1 if you have the header file. */ +#undef HAVE_DDK_NTDDSCSI_H + /* Define to 1 if you have the header file. */ #undef HAVE_DEV_PPBUS_PPI_H @@ -97,6 +103,12 @@ /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE +/* Define to 1 if you have the `getpass' function. */ +#undef HAVE_GETPASS + +/* Define to 1 if you have the `getuid' function. */ +#undef HAVE_GETUID + /* Define to 1 if you have the `gp_camera_init' function. */ #undef HAVE_GP_CAMERA_INIT @@ -180,6 +192,9 @@ /* Define if the long long type is available. */ #undef HAVE_LONG_LONG +/* Define to 1 if you have the header file. */ +#undef HAVE_LUSB0_USB_H + /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_CPUFUNC_H @@ -201,6 +216,9 @@ /* Define to 1 if you have the `NSLinkModule' function. */ #undef HAVE_NSLINKMODULE +/* Define to 1 if you have the header file. */ +#undef HAVE_NTDDSCSI_H + /* Define to 1 if you have the header file. */ #undef HAVE_OS2_H @@ -261,6 +279,9 @@ /* Define to 1 if you have the `sigprocmask' function. */ #undef HAVE_SIGPROCMASK +/* Define to 1 if you have the `sleep' function. */ +#undef HAVE_SLEEP + /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF @@ -306,6 +327,9 @@ /* Define if struct flock is available. */ #undef HAVE_STRUCT_FLOCK +/* Define to 1 if you have the `syslog' function. */ +#undef HAVE_SYSLOG + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_BITYPES_H @@ -417,6 +441,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_WINDOWS_H +/* Define to 1 if you have the header file. */ +#undef HAVE_WINSOCK2_H + /* Define to 1 if you have the `_portaccess' function. */ #undef HAVE__PORTACCESS diff -Nru sane-backends-1.0.22/include/sane/sanei_backend.h sane-backends-1.0.23/include/sane/sanei_backend.h --- sane-backends-1.0.22/include/sane/sanei_backend.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/include/sane/sanei_backend.h 2011-11-21 20:17:48.000000000 +0000 @@ -42,7 +42,9 @@ # ifdef O_NDELAY # define O_NONBLOCK O_NDELAY # else -# define O_NONBLOCK FNDELAY /* last resort */ +# ifdef FNDELAY +# define O_NONBLOCK FNDELAY /* last resort */ +# endif # endif #endif #endif /* HAVE_OS2_H */ diff -Nru sane-backends-1.0.22/include/sane/sanei_magic.h sane-backends-1.0.23/include/sane/sanei_magic.h --- sane-backends-1.0.22/include/sane/sanei_magic.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/include/sane/sanei_magic.h 2012-07-25 00:02:39.000000000 +0000 @@ -47,6 +47,8 @@ * - Deskew (correct rotated scans, by detecting media edges) * - Autocrop (reduce image size to minimum rectangle containing media) * - Despeckle (replace dots of significantly different color with background) + * - Blank detection (check if density is over a threshold) + * - Rotate (detect and correct 90 degree increment rotations) * * Note that these functions are simplistic, and are expected to change. * Patches and suggestions are welcome. @@ -151,4 +153,52 @@ sanei_magic_crop(SANE_Parameters * params, SANE_Byte * buffer, int top, int bot, int left, int right); +/** Determine if image is blank + * + * @param params describes image + * @param buffer contains image data + * @param thresh maximum % density for blankness (0-100) + * + * @return + * - SANE_STATUS_GOOD - page is not blank + * - SANE_STATUS_NO_DOCS - page is blank + * - SANE_STATUS_NO_MEM - not enough memory + * - SANE_STATUS_INVAL - invalid image parameters + */ +extern SANE_Status +sanei_magic_isBlank(SANE_Parameters * params, SANE_Byte * buffer, + double thresh); + +/** Determine coarse image rotation (90 degree increments) + * + * @param params describes image + * @param buffer contains image data + * @param dpiX horizontal resolution + * @param dpiY vertical resolution + * @param[out] angle amount of rotation recommended + * + * @return + * - SANE_STATUS_GOOD - success + * - SANE_STATUS_NO_MEM - not enough memory + * - SANE_STATUS_INVAL - invalid image parameters + */ +extern SANE_Status +sanei_magic_findTurn(SANE_Parameters * params, SANE_Byte * buffer, + int dpiX, int dpiY, int * angle); + +/** Coarse image rotation (90 degree increments) + * + * @param params describes image + * @param buffer contains image data + * @param angle amount of rotation requested (multiple of 90) + * + * @return + * - SANE_STATUS_GOOD - success + * - SANE_STATUS_NO_MEM - not enough memory + * - SANE_STATUS_INVAL - invalid image or angle parameters + */ +extern SANE_Status +sanei_magic_turn(SANE_Parameters * params, SANE_Byte * buffer, + int angle); + #endif /* SANEI_MAGIC_H */ diff -Nru sane-backends-1.0.22/include/sane/sanei_tcp.h sane-backends-1.0.23/include/sane/sanei_tcp.h --- sane-backends-1.0.22/include/sane/sanei_tcp.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/include/sane/sanei_tcp.h 2011-11-21 20:17:48.000000000 +0000 @@ -20,8 +20,14 @@ #include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H #include #include +#endif +#include extern SANE_Status sanei_tcp_open(const char *host, int port, int *fdp); extern void sanei_tcp_close(int fd); diff -Nru sane-backends-1.0.22/include/sane/sanei_thread.h sane-backends-1.0.23/include/sane/sanei_thread.h --- sane-backends-1.0.22/include/sane/sanei_thread.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/include/sane/sanei_thread.h 2011-11-21 20:17:48.000000000 +0000 @@ -61,7 +61,7 @@ #include "../include/sane/config.h" #ifdef USE_PTHREAD -typedef long SANE_Pid; +typedef pthread_t SANE_Pid; #else typedef int SANE_Pid; #endif @@ -82,6 +82,17 @@ */ extern SANE_Bool sanei_thread_is_forked (void); +/** Is SANE_Pid valid pid? + * + * This function can be used to check if thread/fork creation worked + * regardless of SANE_Pid's data type. + * + * @return + * - SANE_TRUE - if pid is not a valid process + * - SANE_FALSE - if pid is a valid process + */ +extern SANE_Bool sanei_thread_is_invalid (SANE_Pid pid); + /** Spawn a new task. * * This function should be used to start a new task. diff -Nru sane-backends-1.0.22/include/sane/sanei_udp.h sane-backends-1.0.23/include/sane/sanei_udp.h --- sane-backends-1.0.22/include/sane/sanei_udp.h 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/include/sane/sanei_udp.h 2011-11-21 20:17:48.000000000 +0000 @@ -20,12 +20,18 @@ #include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H #include #include +#endif extern SANE_Status sanei_udp_open(const char *host, int port, int *fdp); extern SANE_Status sanei_udp_open_broadcast(int *fdp); extern void sanei_udp_close(int fd); +extern void sanei_udp_set_nonblock(int fd, SANE_Bool nonblock); extern ssize_t sanei_udp_write(int fd, const u_char * buf, int count); extern ssize_t sanei_udp_read(int fd, u_char * buf, int count); extern ssize_t sanei_udp_write_broadcast(int fd, int port, const u_char * buf, int count); diff -Nru sane-backends-1.0.22/install-sh sane-backends-1.0.23/install-sh --- sane-backends-1.0.22/install-sh 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/install-sh 2011-11-21 20:17:48.000000000 +0000 @@ -1,251 +1,520 @@ #!/bin/sh -# # install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. # -# Copyright 1991 by the Massachusetts Institute of Technology # -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. +# FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. +# from scratch. +nl=' +' +IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= -# put in absolute paths if you don't have them in your path; or use env. vars. +# Desired mode of installed file. +mode=0755 -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" - -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; +stripcmd= - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done +src= +dst= +dir_arg= +dst_arg= -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi +copy_on_change=false +no_target_directory= -if [ x"$dir_arg" != x ]; then - dst=$src - src="" - - if [ -d $dst ]; then - instcmd=: - chmodcmd="" - else - instcmd=mkdir - fi -else +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. - - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi - - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic +Options: + --help display this help and exit. + --version display version info and exit. - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script +while test $# -ne 0; do + case $1 in + -c) ;; -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" + -C) copy_on_change=true;; -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" - -pathcomp='' - -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift - - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi + -d) dir_arg=true;; - pathcomp="${pathcomp}/" -done -fi + -g) chgrpcmd="$chgrpprog $2" + shift;; -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && - - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else + --help) echo "$usage"; exit $?;; -# If we're going to rename the final executable, determine the name now. + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi + -o) chowncmd="$chownprog $2" + shift;; -# don't allow the sed command to completely eliminate the filename + -s) stripcmd=$stripprog;; - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; -# Make a temp file name in the proper directory. + *) break;; + esac + shift +done - dsttmp=$dstdir/#inst.$$# +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi -# Move or copy the file name to the temp name +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi - $doit $instcmd $src $dsttmp && +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 - trap "rm -f ${dsttmp}" 0 && + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi -# and set any options; do chmod last to preserve setuid bits +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 -# Now rename the file to the real destination. + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done -fi && + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + trap '' 0 + fi +done -exit 0 +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff -Nru sane-backends-1.0.22/japi/Makefile.in sane-backends-1.0.23/japi/Makefile.in --- sane-backends-1.0.22/japi/Makefile.in 2011-01-30 18:50:56.000000000 +0000 +++ sane-backends-1.0.23/japi/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -109,6 +109,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -165,6 +166,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -214,6 +216,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ diff -Nru sane-backends-1.0.22/lib/Makefile.am sane-backends-1.0.23/lib/Makefile.am --- sane-backends-1.0.22/lib/Makefile.am 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/lib/Makefile.am 2011-11-21 20:17:48.000000000 +0000 @@ -7,8 +7,8 @@ noinst_LTLIBRARIES = liblib.la libfelib.la -libfelib_la_SOURCES = getopt.c getopt1.c md5.c vsyslog.c +libfelib_la_SOURCES = getopt.c getopt1.c md5.c syslog.c vsyslog.c liblib_la_SOURCES = alloca.c getenv.c inet_ntop.c inet_pton.c \ - isfdtype.c sigprocmask.c snprintf.c strcasestr.c strdup.c \ - strndup.c strsep.c usleep.c + isfdtype.c sigprocmask.c sleep.c snprintf.c strcasestr.c \ + strdup.c strndup.c strsep.c usleep.c diff -Nru sane-backends-1.0.22/lib/Makefile.in sane-backends-1.0.23/lib/Makefile.in --- sane-backends-1.0.22/lib/Makefile.in 2011-01-30 18:50:56.000000000 +0000 +++ sane-backends-1.0.23/lib/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -48,12 +48,13 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libfelib_la_LIBADD = -am_libfelib_la_OBJECTS = getopt.lo getopt1.lo md5.lo vsyslog.lo +am_libfelib_la_OBJECTS = getopt.lo getopt1.lo md5.lo syslog.lo \ + vsyslog.lo libfelib_la_OBJECTS = $(am_libfelib_la_OBJECTS) liblib_la_LIBADD = am_liblib_la_OBJECTS = alloca.lo getenv.lo inet_ntop.lo inet_pton.lo \ - isfdtype.lo sigprocmask.lo snprintf.lo strcasestr.lo strdup.lo \ - strndup.lo strsep.lo usleep.lo + isfdtype.lo sigprocmask.lo sleep.lo snprintf.lo strcasestr.lo \ + strdup.lo strndup.lo strsep.lo usleep.lo liblib_la_OBJECTS = $(am_liblib_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/sane depcomp = $(SHELL) $(top_srcdir)/depcomp @@ -84,6 +85,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -140,6 +142,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -189,6 +192,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -241,10 +245,10 @@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I. -I$(top_builddir)/include -I$(top_srcdir)/include noinst_LTLIBRARIES = liblib.la libfelib.la -libfelib_la_SOURCES = getopt.c getopt1.c md5.c vsyslog.c +libfelib_la_SOURCES = getopt.c getopt1.c md5.c syslog.c vsyslog.c liblib_la_SOURCES = alloca.c getenv.c inet_ntop.c inet_pton.c \ - isfdtype.c sigprocmask.c snprintf.c strcasestr.c strdup.c \ - strndup.c strsep.c usleep.c + isfdtype.c sigprocmask.c sleep.c snprintf.c strcasestr.c \ + strdup.c strndup.c strsep.c usleep.c all: all-am @@ -309,11 +313,13 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isfdtype.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sigprocmask.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sleep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasestr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strdup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strndup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strsep.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syslog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usleep.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vsyslog.Plo@am__quote@ diff -Nru sane-backends-1.0.22/lib/inet_ntop.c sane-backends-1.0.23/lib/inet_ntop.c --- sane-backends-1.0.22/lib/inet_ntop.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/lib/inet_ntop.c 2011-11-21 20:17:48.000000000 +0000 @@ -4,9 +4,14 @@ #include #include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H #include #include #include +#endif const char * diff -Nru sane-backends-1.0.22/lib/inet_pton.c sane-backends-1.0.23/lib/inet_pton.c --- sane-backends-1.0.22/lib/inet_pton.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/lib/inet_pton.c 2011-11-21 20:17:48.000000000 +0000 @@ -4,9 +4,14 @@ #include #include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H #include #include #include +#endif int inet_pton (int af, const char *src, void *dst) diff -Nru sane-backends-1.0.22/lib/sigprocmask.c sane-backends-1.0.23/lib/sigprocmask.c --- sane-backends-1.0.22/lib/sigprocmask.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/lib/sigprocmask.c 2011-11-21 20:17:48.000000000 +0000 @@ -31,6 +31,10 @@ { int o, n = *new; +/* FIXME: Get this working on Windows. Probably should move to + * POSIX sigaction API and emulate it before emulating this one. + */ +#ifndef WIN32 switch (how) { case 1: o = sigblock (n); break; @@ -42,6 +46,7 @@ } if (old) *old = o; +#endif return 0; } diff -Nru sane-backends-1.0.22/lib/sleep.c sane-backends-1.0.23/lib/sleep.c --- sane-backends-1.0.22/lib/sleep.c 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/lib/sleep.c 2011-11-21 20:17:48.000000000 +0000 @@ -0,0 +1,30 @@ +#include "../include/sane/config.h" + +#ifndef HAVE_SLEEP + +#ifdef HAVE_WINDOWS_H +#include +#endif + +unsigned int sleep(unsigned int seconds) +{ +#ifdef HAVE_WINDOWS_H + Sleep(seconds*1000); + return 0; +#else + int rc = 0; + + /* WARNING: Not all platforms support usleep() for more than 1 + * second. Assuming if they do not have POSIX sleep then they + * do not have POSIX usleep() either and are using our internal + * version which can support it. If it fails, need to add an OS + * specific replacement like Sleep for Windows. + */ + if (usleep(seconds*1000000)) + rc = 1; + return rc; +#endif + +} + +#endif diff -Nru sane-backends-1.0.22/lib/syslog.c sane-backends-1.0.23/lib/syslog.c --- sane-backends-1.0.22/lib/syslog.c 1970-01-01 00:00:00.000000000 +0000 +++ sane-backends-1.0.23/lib/syslog.c 2011-11-21 20:17:48.000000000 +0000 @@ -0,0 +1,13 @@ +#include "../include/sane/config.h" + +#ifndef HAVE_SYSLOG + +#include + +void syslog(int priority, const char *format, va_list args) +{ + printf("%d ", priority); + printf(format, args); +} + +#endif diff -Nru sane-backends-1.0.22/lib/vsyslog.c sane-backends-1.0.23/lib/vsyslog.c --- sane-backends-1.0.22/lib/vsyslog.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/lib/vsyslog.c 2011-11-21 20:17:48.000000000 +0000 @@ -1,13 +1,11 @@ #include "../include/sane/config.h" -#include "stdio.h" -#include -#include - #ifndef HAVE_VSYSLOG -void -vsyslog(int priority, const char *format, va_list args) +#include +#include + +void vsyslog(int priority, const char *format, va_list args) { char buf[1024]; vsnprintf(buf, sizeof(buf), format, args); diff -Nru sane-backends-1.0.22/ltmain.sh sane-backends-1.0.23/ltmain.sh --- sane-backends-1.0.22/ltmain.sh 2011-01-16 01:01:29.000000000 +0000 +++ sane-backends-1.0.23/ltmain.sh 2011-11-21 20:17:48.000000000 +0000 @@ -2,9 +2,7 @@ # 2003-04-30: Henning Meirer-Geinitz # * soname changed to "libsane" for every backend (all systems but AIX) -# Generated from ltmain.m4sh. - -# libtool (GNU libtool) 2.2.10 +# libtool (GNU libtool) 2.4 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, @@ -74,17 +72,19 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.10 +# $progname: (GNU libtool) 2.4 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . +# GNU libtool home page: . +# General help using GNU software: . PROGRAM=libtool PACKAGE=libtool -VERSION=2.2.10 +VERSION=2.4 TIMESTAMP="" -package_revision=1.3175 +package_revision=1.3293 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then @@ -167,6 +167,27 @@ dirname="s,/[^/]*$,," basename="s,^.*/,," +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} # func_dirname may be replaced by extended shell implementation + + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "${1}" | $SED "$basename"` +} # func_basename may be replaced by extended shell implementation + + # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: @@ -181,17 +202,31 @@ # those functions but instead duplicate the functionality here. func_dirname_and_basename () { - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi + func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` +} # func_dirname_and_basename may be replaced by extended shell implementation + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname may be replaced by extended shell implementation -# Generated shell functions inserted here. # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' @@ -374,6 +409,15 @@ # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' +# Sed substitution that turns a string into a regex matching for the +# string literally. +sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' + +# Sed substitution that converts a w32 file name or path +# which contains forward slashes, into one that contains +# (escaped) backslashes. A very naive implementation. +lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' + # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. @@ -402,7 +446,7 @@ # name if it has been set yet. func_echo () { - $ECHO "$progname${mode+: }$mode: $*" + $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... @@ -428,14 +472,14 @@ # Echo program name prefixed message to standard error. func_error () { - $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2 + $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { - $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2 + $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : @@ -654,11 +698,30 @@ fi } +# func_tr_sh +# Turn $1 into a string suitable for a shell variable name. +# Result is stored in $func_tr_sh_result. All characters +# not in the set a-zA-Z0-9_ are replaced with '_'. Further, +# if $1 begins with a digit, a '_' is prepended as well. +func_tr_sh () +{ + case $1 in + [0-9]* | *[!a-zA-Z0-9_]*) + func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` + ;; + * ) + func_tr_sh_result=$1 + ;; + esac +} + # func_version # Echo version message to standard output and exit. func_version () { + $opt_debug + $SED -n '/(C)/!b go :more /\./!{ @@ -680,6 +743,8 @@ # Echo short help message to standard output and exit. func_usage () { + $opt_debug + $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// @@ -696,7 +761,10 @@ # unless 'noexit' is passed as argument. func_help () { + $opt_debug + $SED -n '/^# Usage:/,/# Report bugs to/ { + :print s/^# // s/^# *$// s*\$progname*'$progname'* @@ -709,7 +777,11 @@ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/ p - }' < "$progpath" + d + } + /^# .* home page:/b print + /^# General help using/b print + ' < "$progpath" ret=$? if test -z "$1"; then exit $ret @@ -721,12 +793,39 @@ # exit_cmd. func_missing_arg () { + $opt_debug + func_error "missing argument for $1." exit_cmd=exit } -exit_cmd=: +# func_split_short_opt shortopt +# Set func_split_short_opt_name and func_split_short_opt_arg shell +# variables after splitting SHORTOPT after the 2nd character. +func_split_short_opt () +{ + my_sed_short_opt='1s/^\(..\).*$/\1/;q' + my_sed_short_rest='1s/^..\(.*\)$/\1/;q' + + func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` + func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` +} # func_split_short_opt may be replaced by extended shell implementation + + +# func_split_long_opt longopt +# Set func_split_long_opt_name and func_split_long_opt_arg shell +# variables after splitting LONGOPT at the `=' sign. +func_split_long_opt () +{ + my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' + my_sed_long_arg='1s/^--[^=]*=//' + + func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` + func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` +} # func_split_long_opt may be replaced by extended shell implementation + +exit_cmd=: @@ -736,25 +835,64 @@ magic_exe="%%%MAGIC EXE variable%%%" # Global variables. -# $mode is unset nonopt= -execute_dlfiles= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 -opt_dry_run=false -opt_duplicate_deps=false -opt_silent=false -opt_debug=: - # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "${1}=\$${1}\${2}" +} # func_append may be replaced by extended shell implementation + +# func_append_quoted var value +# Quote VALUE and append to the end of shell variable VAR, separated +# by a space. +func_append_quoted () +{ + func_quote_for_eval "${2}" + eval "${1}=\$${1}\\ \$func_quote_for_eval_result" +} # func_append_quoted may be replaced by extended shell implementation + + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "${@}"` +} # func_arith may be replaced by extended shell implementation + + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` +} # func_len may be replaced by extended shell implementation + + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` +} # func_lo2o may be replaced by extended shell implementation + + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` +} # func_xform may be replaced by extended shell implementation + + # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. @@ -844,129 +982,204 @@ esac } -# Parse options once, thoroughly. This comes as soon as possible in -# the script to make things like `libtool --version' happen quickly. +# func_check_version_match +# Ensure that we are using m4 macros, and libtool script from the same +# release of libtool. +func_check_version_match () { + if test "$package_revision" != "$macro_revision"; then + if test "$VERSION" != "$macro_version"; then + if test -z "$macro_version"; then + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from an older release. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, but the +$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. +$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION +$progname: and run autoconf again. +_LT_EOF + fi + else + cat >&2 <<_LT_EOF +$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, +$progname: but the definition of this LT_INIT comes from revision $macro_revision. +$progname: You should recreate aclocal.m4 with macros from revision $package_revision +$progname: of $PACKAGE $VERSION and run autoconf again. +_LT_EOF + fi - # Shorthand for --mode=foo, only valid as the first argument - case $1 in - clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; - compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; - execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; - finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; - install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; - link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; - uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; - esac + exit $EXIT_MISMATCH + fi +} + + +# Shorthand for --mode=foo, only valid as the first argument +case $1 in +clean|clea|cle|cl) + shift; set dummy --mode clean ${1+"$@"}; shift + ;; +compile|compil|compi|comp|com|co|c) + shift; set dummy --mode compile ${1+"$@"}; shift + ;; +execute|execut|execu|exec|exe|ex|e) + shift; set dummy --mode execute ${1+"$@"}; shift + ;; +finish|finis|fini|fin|fi|f) + shift; set dummy --mode finish ${1+"$@"}; shift + ;; +install|instal|insta|inst|ins|in|i) + shift; set dummy --mode install ${1+"$@"}; shift + ;; +link|lin|li|l) + shift; set dummy --mode link ${1+"$@"}; shift + ;; +uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) + shift; set dummy --mode uninstall ${1+"$@"}; shift + ;; +esac + + + +# Option defaults: +opt_debug=: +opt_dry_run=false +opt_config=false +opt_preserve_dup_deps=false +opt_features=false +opt_finish=false +opt_help=false +opt_help_all=false +opt_silent=: +opt_verbose=: +opt_silent=false +opt_verbose=false - # Parse non-mode specific arguments: - while test "$#" -gt 0; do + +# Parse options once, thoroughly. This comes as soon as possible in the +# script to make things like `--version' happen as quickly as we can. +{ + # this just eases exit handling + while test $# -gt 0; do opt="$1" shift - case $opt in - --config) func_config ;; - - --debug) preserve_args="$preserve_args $opt" + --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" - opt_debug='set -x' $opt_debug ;; - - -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break - execute_dlfiles="$execute_dlfiles $1" - shift + --dry-run|--dryrun|-n) + opt_dry_run=: ;; - - --dry-run | -n) opt_dry_run=: ;; - --features) func_features ;; - --finish) mode="finish" ;; - - --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break - case $1 in - # Valid mode arguments: - clean) ;; - compile) ;; - execute) ;; - finish) ;; - install) ;; - link) ;; - relink) ;; - uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; - esac - - mode="$1" + --config) + opt_config=: +func_config + ;; + --dlopen|-dlopen) + optarg="$1" + opt_dlopen="${opt_dlopen+$opt_dlopen +}$optarg" shift ;; - --preserve-dup-deps) - opt_duplicate_deps=: ;; - - --quiet|--silent) preserve_args="$preserve_args $opt" - opt_silent=: - opt_verbose=false + opt_preserve_dup_deps=: ;; - - --no-quiet|--no-silent) - preserve_args="$preserve_args $opt" - opt_silent=false + --features) + opt_features=: +func_features ;; - - --verbose| -v) preserve_args="$preserve_args $opt" + --finish) + opt_finish=: +set dummy --mode finish ${1+"$@"}; shift + ;; + --help) + opt_help=: + ;; + --help-all) + opt_help_all=: +opt_help=': help-all' + ;; + --mode) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_mode="$optarg" +case $optarg in + # Valid mode arguments: + clean|compile|execute|finish|install|link|relink|uninstall) ;; + + # Catch anything else as an error + *) func_error "invalid argument for $opt" + exit_cmd=exit + break + ;; +esac + shift + ;; + --no-silent|--no-quiet) opt_silent=false - opt_verbose=: +func_append preserve_args " $opt" ;; - - --no-verbose) preserve_args="$preserve_args $opt" + --no-verbose) opt_verbose=false +func_append preserve_args " $opt" ;; - - --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break - preserve_args="$preserve_args $opt $1" - func_enable_tag "$1" # tagname is set here + --silent|--quiet) + opt_silent=: +func_append preserve_args " $opt" + opt_verbose=false + ;; + --verbose|-v) + opt_verbose=: +func_append preserve_args " $opt" +opt_silent=false + ;; + --tag) + test $# = 0 && func_missing_arg $opt && break + optarg="$1" + opt_tag="$optarg" +func_append preserve_args " $opt $optarg" +func_enable_tag "$optarg" shift ;; + -\?|-h) func_usage ;; + --help) func_help ;; + --version) func_version ;; + # Separate optargs to long options: - -dlopen=*|--mode=*|--tag=*) - func_opt_split "$opt" - set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"} + --*=*) + func_split_long_opt "$opt" + set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; - -\?|-h) func_usage ;; - --help) opt_help=: ;; - --help-all) opt_help=': help-all' ;; - --version) func_version ;; - - -*) func_fatal_help "unrecognized option \`$opt'" ;; - - *) nonopt="$opt" - break + # Separate non-argument short options: + -\?*|-h*|-n*|-v*) + func_split_short_opt "$opt" + set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} + shift ;; + + --) break ;; + -*) func_fatal_help "unrecognized option \`$opt'" ;; + *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done + # Validate options: + + # save first non-option argument + if test "$#" -gt 0; then + nonopt="$opt" + shift + fi + + # preserve --debug + test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) @@ -974,82 +1187,44 @@ opt_duplicate_compiler_generated_deps=: ;; *) - opt_duplicate_compiler_generated_deps=$opt_duplicate_deps + opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac - # Having warned about all mis-specified options, bail out if - # anything was wrong. - $exit_cmd $EXIT_FAILURE -} + $opt_help || { + # Sanity checks first: + func_check_version_match -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF + if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + func_fatal_configuration "not configured to build any kind of library" fi - exit $EXIT_MISMATCH - fi -} - + # Darwin sucks + eval std_shrext=\"$shrext_cmds\" -## ----------- ## -## Main. ## -## ----------- ## - -$opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi + # Only execute mode is allowed to have -dlopen flags. + if test -n "$opt_dlopen" && test "$opt_mode" != execute; then + func_error "unrecognized option \`-dlopen'" + $ECHO "$help" 1>&2 + exit $EXIT_FAILURE + fi - test -z "$mode" && func_fatal_error "error: you must specify a MODE." + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$progname --help --mode=$opt_mode' for more information." + } - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" + # Bail if the options were screwed + $exit_cmd $EXIT_FAILURE +} - # Only execute mode is allowed to have -dlopen flags. - if test -n "$execute_dlfiles" && test "$mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$mode' for more information." -} +## ----------- ## +## Main. ## +## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. @@ -1114,12 +1289,9 @@ # temporary ltwrapper_script. func_ltwrapper_scriptname () { - func_ltwrapper_scriptname_result="" - if func_ltwrapper_executable_p "$1"; then - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" - fi + func_dirname_and_basename "$1" "" "." + func_stripname '' '.exe' "$func_basename_result" + func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file @@ -1165,6 +1337,37 @@ } +# func_resolve_sysroot PATH +# Replace a leading = in PATH with a sysroot. Store the result into +# func_resolve_sysroot_result +func_resolve_sysroot () +{ + func_resolve_sysroot_result=$1 + case $func_resolve_sysroot_result in + =*) + func_stripname '=' '' "$func_resolve_sysroot_result" + func_resolve_sysroot_result=$lt_sysroot$func_stripname_result + ;; + esac +} + +# func_replace_sysroot PATH +# If PATH begins with the sysroot, replace it with = and +# store the result into func_replace_sysroot_result. +func_replace_sysroot () +{ + case "$lt_sysroot:$1" in + ?*:"$lt_sysroot"*) + func_stripname "$lt_sysroot" '' "$1" + func_replace_sysroot_result="=$func_stripname_result" + ;; + *) + # Including no sysroot. + func_replace_sysroot_result=$1 + ;; + esac +} + # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. @@ -1177,8 +1380,7 @@ if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" + func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` @@ -1197,8 +1399,7 @@ CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. - func_quote_for_eval "$arg" - CC_quoted="$CC_quoted $func_quote_for_eval_result" + func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` @@ -1230,42 +1431,522 @@ -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () +# func_write_libtool_object output_name pic_name nonpic_name +# Create a libtool object file (analogous to a ".la" file), +# but don't create it if we're doing a dry run. +func_write_libtool_object () +{ + write_libobj=${1} + if test "$build_libtool_libs" = yes; then + write_lobj=\'${2}\' + else + write_lobj=none + fi + + if test "$build_old_libs" = yes; then + write_oldobj=\'${3}\' + else + write_oldobj=none + fi + + $opt_dry_run || { + cat >${write_libobj}T </dev/null` + if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then + func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | + $SED -e "$lt_sed_naive_backslashify"` + else + func_convert_core_file_wine_to_w32_result= + fi + fi +} +# end: func_convert_core_file_wine_to_w32 + + +# func_convert_core_path_wine_to_w32 ARG +# Helper function used by path conversion functions when $build is *nix, and +# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly +# configured wine environment available, with the winepath program in $build's +# $PATH. Assumes ARG has no leading or trailing path separator characters. +# +# ARG is path to be converted from $build format to win32. +# Result is available in $func_convert_core_path_wine_to_w32_result. +# Unconvertible file (directory) names in ARG are skipped; if no directory names +# are convertible, then the result may be empty. +func_convert_core_path_wine_to_w32 () +{ + $opt_debug + # unfortunately, winepath doesn't convert paths, only file names + func_convert_core_path_wine_to_w32_result="" + if test -n "$1"; then + oldIFS=$IFS + IFS=: + for func_convert_core_path_wine_to_w32_f in $1; do + IFS=$oldIFS + func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" + if test -n "$func_convert_core_file_wine_to_w32_result" ; then + if test -z "$func_convert_core_path_wine_to_w32_result"; then + func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" + else + func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" + fi + fi + done + IFS=$oldIFS + fi +} +# end: func_convert_core_path_wine_to_w32 + + +# func_cygpath ARGS... +# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when +# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) +# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or +# (2), returns the Cygwin file name or path in func_cygpath_result (input +# file name or path is assumed to be in w32 format, as previously converted +# from $build's *nix or MSYS format). In case (3), returns the w32 file name +# or path in func_cygpath_result (input file name or path is assumed to be in +# Cygwin format). Returns an empty string on error. +# +# ARGS are passed to cygpath, with the last one being the file name or path to +# be converted. +# +# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH +# environment variable; do not put it in $PATH. +func_cygpath () +{ + $opt_debug + if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then + func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` + if test "$?" -ne 0; then + # on failure, ensure result is empty + func_cygpath_result= + fi + else + func_cygpath_result= + func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" + fi +} +#end: func_cygpath + + +# func_convert_core_msys_to_w32 ARG +# Convert file name or path ARG from MSYS format to w32 format. Return +# result in func_convert_core_msys_to_w32_result. +func_convert_core_msys_to_w32 () +{ + $opt_debug + # awkward: cmd appends spaces to result + func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | + $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` +} +#end: func_convert_core_msys_to_w32 + + +# func_convert_file_check ARG1 ARG2 +# Verify that ARG1 (a file name in $build format) was converted to $host +# format in ARG2. Otherwise, emit an error message, but continue (resetting +# func_to_host_file_result to ARG1). +func_convert_file_check () +{ + $opt_debug + if test -z "$2" && test -n "$1" ; then + func_error "Could not determine host file name corresponding to" + func_error " \`$1'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback: + func_to_host_file_result="$1" + fi +} +# end func_convert_file_check + + +# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH +# Verify that FROM_PATH (a path in $build format) was converted to $host +# format in TO_PATH. Otherwise, emit an error message, but continue, resetting +# func_to_host_file_result to a simplistic fallback value (see below). +func_convert_path_check () +{ + $opt_debug + if test -z "$4" && test -n "$3"; then + func_error "Could not determine the host path corresponding to" + func_error " \`$3'" + func_error "Continuing, but uninstalled executables may not work." + # Fallback. This is a deliberately simplistic "conversion" and + # should not be "improved". See libtool.info. + if test "x$1" != "x$2"; then + lt_replace_pathsep_chars="s|$1|$2|g" + func_to_host_path_result=`echo "$3" | + $SED -e "$lt_replace_pathsep_chars"` + else + func_to_host_path_result="$3" + fi + fi +} +# end func_convert_path_check + + +# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG +# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT +# and appending REPL if ORIG matches BACKPAT. +func_convert_path_front_back_pathsep () +{ + $opt_debug + case $4 in + $1 ) func_to_host_path_result="$3$func_to_host_path_result" + ;; + esac + case $4 in + $2 ) func_append func_to_host_path_result "$3" + ;; + esac +} +# end func_convert_path_front_back_pathsep + + +################################################## +# $build to $host FILE NAME CONVERSION FUNCTIONS # +################################################## +# invoked via `$to_host_file_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# Result will be available in $func_to_host_file_result. + + +# func_to_host_file ARG +# Converts the file name ARG from $build format to $host format. Return result +# in func_to_host_file_result. +func_to_host_file () +{ + $opt_debug + $to_host_file_cmd "$1" +} +# end func_to_host_file + + +# func_to_tool_file ARG LAZY +# converts the file name ARG from $build format to toolchain format. Return +# result in func_to_tool_file_result. If the conversion in use is listed +# in (the comma separated) LAZY, no conversion takes place. +func_to_tool_file () +{ + $opt_debug + case ,$2, in + *,"$to_tool_file_cmd",*) + func_to_tool_file_result=$1 + ;; + *) + $to_tool_file_cmd "$1" + func_to_tool_file_result=$func_to_host_file_result + ;; + esac +} +# end func_to_tool_file + + +# func_convert_file_noop ARG +# Copy ARG to func_to_host_file_result. +func_convert_file_noop () +{ + func_to_host_file_result="$1" +} +# end func_convert_file_noop + + +# func_convert_file_msys_to_w32 ARG +# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_file_result. +func_convert_file_msys_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_to_host_file_result="$func_convert_core_msys_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_w32 + + +# func_convert_file_cygwin_to_w32 ARG +# Convert file name ARG from Cygwin to w32 format. Returns result in +# func_to_host_file_result. +func_convert_file_cygwin_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # because $build is cygwin, we call "the" cygpath in $PATH; no need to use + # LT_CYGPATH in this case. + func_to_host_file_result=`cygpath -m "$1"` + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_cygwin_to_w32 + + +# func_convert_file_nix_to_w32 ARG +# Convert file name ARG from *nix to w32 format. Requires a wine environment +# and a working winepath. Returns result in func_to_host_file_result. +func_convert_file_nix_to_w32 () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_file_wine_to_w32 "$1" + func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_w32 + + +# func_convert_file_msys_to_cygwin ARG +# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. +# Returns result in func_to_host_file_result. +func_convert_file_msys_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + func_convert_core_msys_to_w32 "$1" + func_cygpath -u "$func_convert_core_msys_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_msys_to_cygwin + + +# func_convert_file_nix_to_cygwin ARG +# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed +# in a wine environment, working winepath, and LT_CYGPATH set. Returns result +# in func_to_host_file_result. +func_convert_file_nix_to_cygwin () +{ + $opt_debug + func_to_host_file_result="$1" + if test -n "$1"; then + # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. + func_convert_core_file_wine_to_w32 "$1" + func_cygpath -u "$func_convert_core_file_wine_to_w32_result" + func_to_host_file_result="$func_cygpath_result" + fi + func_convert_file_check "$1" "$func_to_host_file_result" +} +# end func_convert_file_nix_to_cygwin + + +############################################# +# $build to $host PATH CONVERSION FUNCTIONS # +############################################# +# invoked via `$to_host_path_cmd ARG' +# +# In each case, ARG is the path to be converted from $build to $host format. +# The result will be available in $func_to_host_path_result. +# +# Path separators are also converted from $build format to $host format. If +# ARG begins or ends with a path separator character, it is preserved (but +# converted to $host format) on output. +# +# All path conversion functions are named using the following convention: +# file name conversion function : func_convert_file_X_to_Y () +# path conversion function : func_convert_path_X_to_Y () +# where, for any given $build/$host combination the 'X_to_Y' value is the +# same. If conversion functions are added for new $build/$host combinations, +# the two new functions must follow this pattern, or func_init_to_host_path_cmd +# will break. + + +# func_init_to_host_path_cmd +# Ensures that function "pointer" variable $to_host_path_cmd is set to the +# appropriate value, based on the value of $to_host_file_cmd. +to_host_path_cmd= +func_init_to_host_path_cmd () +{ + $opt_debug + if test -z "$to_host_path_cmd"; then + func_stripname 'func_convert_file_' '' "$to_host_file_cmd" + to_host_path_cmd="func_convert_path_${func_stripname_result}" + fi +} + + +# func_to_host_path ARG +# Converts the path ARG from $build format to $host format. Return result +# in func_to_host_path_result. +func_to_host_path () +{ + $opt_debug + func_init_to_host_path_cmd + $to_host_path_cmd "$1" +} +# end func_to_host_path + + +# func_convert_path_noop ARG +# Copy ARG to func_to_host_path_result. +func_convert_path_noop () +{ + func_to_host_path_result="$1" +} +# end func_convert_path_noop + + +# func_convert_path_msys_to_w32 ARG +# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic +# conversion to w32 is not available inside the cwrapper. Returns result in +# func_to_host_path_result. +func_convert_path_msys_to_w32 () { - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi + $opt_debug + func_to_host_path_result="$1" + if test -n "$1"; then + # Remove leading and trailing path separator characters from ARG. MSYS + # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; + # and winepath ignores them completely. + func_stripname : : "$1" + func_to_host_path_tmp1=$func_stripname_result + func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" + func_to_host_path_result="$func_convert_core_msys_to_w32_result" + func_convert_path_check : ";" \ + "$func_to_host_path_tmp1" "$func_to_host_path_result" + func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" + fi +} +# end func_convert_path_msys_to_w32 - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - $opt_dry_run || { - cat >${write_libobj}T < "$lockfile" fi $opt_dry_run || $RM $removelist - removelist="$removelist $lockfile" + func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - if test -n "$fix_srcfile_path"; then - eval srcfile=\"$fix_srcfile_path\" - fi + func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 + srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result @@ -1519,7 +2197,7 @@ if test -z "$output_obj"; then # Place PIC objects in $objdir - command="$command -o $lobj" + func_append command " -o $lobj" fi func_show_eval_locale "$command" \ @@ -1566,11 +2244,11 @@ command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then - command="$command -o $obj" + func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. - command="$command$suppress_output" + func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' @@ -1615,13 +2293,13 @@ } $opt_help || { - test "$mode" = compile && func_mode_compile ${1+"$@"} + test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. - case $mode in + case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. @@ -1797,7 +2475,7 @@ ;; *) - func_fatal_help "invalid operation mode \`$mode'" + func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac @@ -1812,13 +2490,13 @@ else { func_help noexit - for mode in compile link execute install finish uninstall clean; do + for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit - for mode in compile link execute install finish uninstall clean; do + for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done @@ -1847,13 +2525,16 @@ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. - for file in $execute_dlfiles; do + for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" @@ -1875,7 +2556,7 @@ dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then - dir="$dir/$objdir" + func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" @@ -1932,8 +2613,7 @@ ;; esac # Quote arguments (to preserve shell metacharacters). - func_quote_for_eval "$file" - args="$args $func_quote_for_eval_result" + func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then @@ -1965,22 +2645,59 @@ fi } -test "$mode" = execute && func_mode_execute ${1+"$@"} +test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug - libdirs="$nonopt" + libs= + libdirs= admincmds= - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for dir - do - libdirs="$libdirs $dir" - done + for opt in "$nonopt" ${1+"$@"} + do + if test -d "$opt"; then + func_append libdirs " $opt" + + elif test -f "$opt"; then + if func_lalib_unsafe_p "$opt"; then + func_append libs " $opt" + else + func_warning "\`$opt' is not a valid libtool archive" + fi + else + func_fatal_error "invalid argument \`$opt'" + fi + done + + if test -n "$libs"; then + if test -n "$lt_sysroot"; then + sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` + sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" + else + sysroot_cmd= + fi + + # Remove sysroot references + if $opt_dry_run; then + for lib in $libs; do + echo "removing references to $lt_sysroot and \`=' prefixes from $lib" + done + else + tmpdir=`func_mktempdir` + for lib in $libs; do + sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ + > $tmpdir/tmp-la + mv -f $tmpdir/tmp-la $lib + done + ${RM}r "$tmpdir" + fi + fi + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. @@ -1990,7 +2707,7 @@ if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || admincmds="$admincmds + $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done @@ -1999,53 +2716,55 @@ # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + $ECHO " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use the \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo + $ECHO " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + $ECHO " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" + echo "See any operating system documentation about shared libraries for" + case $host in + solaris2.[6789]|solaris2.1[0-9]) + echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" + echo "pages." + ;; + *) + echo "more information, such as the ld(1) and ld.so(8) manual pages." + ;; + esac + echo "----------------------------------------------------------------------" + fi exit $EXIT_SUCCESS } -test "$mode" = finish && func_mode_finish ${1+"$@"} +test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... @@ -2070,7 +2789,7 @@ # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" - install_prog="$install_prog$func_quote_for_eval_result" + func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; @@ -2090,7 +2809,7 @@ do arg2= if test -n "$dest"; then - files="$files $dest" + func_append files " $dest" dest=$arg continue fi @@ -2128,11 +2847,11 @@ # Aesthetically quote the argument. func_quote_for_eval "$arg" - install_prog="$install_prog $func_quote_for_eval_result" + func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi - install_shared_prog="$install_shared_prog $func_quote_for_eval_result" + func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ @@ -2144,7 +2863,7 @@ if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" - install_shared_prog="$install_shared_prog -m $func_quote_for_eval_result" + func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi @@ -2202,10 +2921,13 @@ case $file in *.$libext) # Do the static libraries later. - staticlibs="$staticlibs $file" + func_append staticlibs " $file" ;; *.la) + func_resolve_sysroot "$file" + file=$func_resolve_sysroot_result + # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" @@ -2219,19 +2941,19 @@ if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; - *) current_libdirs="$current_libdirs $libdir" ;; + *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; - *) future_libdirs="$future_libdirs $libdir" ;; + *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" - dir="$dir$objdir" + func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. @@ -2308,7 +3030,7 @@ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. - test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) @@ -2505,7 +3227,7 @@ fi } -test "$mode" = install && func_mode_install ${1+"$@"} +test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p @@ -2552,6 +3274,18 @@ #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT_DLSYM_CONST +#else +# define LT_DLSYM_CONST const +#endif + /* External symbol declarations for the compiler. */\ " @@ -2563,8 +3297,9 @@ # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do - func_verbose "extracting global C symbols from \`$progfile'" - $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'" + func_to_tool_file "$progfile" func_convert_file_msys_to_w32 + func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" + $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then @@ -2613,10 +3348,52 @@ func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } + case $host in + *cygwin* | *mingw* | *cegcc* ) + # if an import library, we need to obtain dlname + if func_win32_import_lib_p "$dlprefile"; then + func_tr_sh "$dlprefile" + eval "curr_lafile=\$libfile_$func_tr_sh_result" + dlprefile_dlbasename="" + if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then + # Use subshell, to avoid clobbering current variable values + dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` + if test -n "$dlprefile_dlname" ; then + func_basename "$dlprefile_dlname" + dlprefile_dlbasename="$func_basename_result" + else + # no lafile. user explicitly requested -dlpreopen . + $sharedlib_from_linklib_cmd "$dlprefile" + dlprefile_dlbasename=$sharedlib_from_linklib_result + fi + fi + $opt_dry_run || { + if test -n "$dlprefile_dlbasename" ; then + eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' + else + func_warning "Could not compute DLL name from $name" + eval '$ECHO ": $name " >> "$nlist"' + fi + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | + $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" + } + else # not an import lib + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + fi + ;; + *) + $opt_dry_run || { + eval '$ECHO ": $name " >> "$nlist"' + func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 + eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" + } + ;; + esac done $opt_dry_run || { @@ -2654,26 +3431,9 @@ const char *name; void *address; } lt_dlsymlist; -" - case $host in - *cygwin* | *mingw* | *cegcc* ) - echo >> "$output_objdir/$my_dlsyms" "\ -/* DATA imports from DLLs on WIN32 con't be const, because - runtime relocations are performed -- see ld's documentation - on pseudo-relocs. */" - lt_dlsym_const= ;; - *osf5*) - echo >> "$output_objdir/$my_dlsyms" "\ -/* This system does not cope well with relocations in const data */" - lt_dlsym_const= ;; - *) - lt_dlsym_const=const ;; - esac - - echo >> "$output_objdir/$my_dlsyms" "\ -extern $lt_dlsym_const lt_dlsymlist +extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; -$lt_dlsym_const lt_dlsymlist +LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," @@ -2729,7 +3489,7 @@ for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; - *) symtab_cflags="$symtab_cflags $arg" ;; + *) func_append symtab_cflags " $arg" ;; esac done @@ -2792,7 +3552,8 @@ # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - win32_nmres=`eval $NM -f posix -A $1 | + func_to_tool_file "$1" func_convert_file_msys_to_w32 + win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ @@ -2821,6 +3582,131 @@ $ECHO "$win32_libid_type" } +# func_cygming_dll_for_implib ARG +# +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib () +{ + $opt_debug + sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` +} + +# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs +# +# The is the core of a fallback implementation of a +# platform-specific function to extract the name of the +# DLL associated with the specified import library LIBNAME. +# +# SECTION_NAME is either .idata$6 or .idata$7, depending +# on the platform and compiler that created the implib. +# +# Echos the name of the DLL associated with the +# specified import library. +func_cygming_dll_for_implib_fallback_core () +{ + $opt_debug + match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` + $OBJDUMP -s --section "$1" "$2" 2>/dev/null | + $SED '/^Contents of section '"$match_literal"':/{ + # Place marker at beginning of archive member dllname section + s/.*/====MARK====/ + p + d + } + # These lines can sometimes be longer than 43 characters, but + # are always uninteresting + /:[ ]*file format pe[i]\{,1\}-/d + /^In archive [^:]*:/d + # Ensure marker is printed + /^====MARK====/p + # Remove all lines with less than 43 characters + /^.\{43\}/!d + # From remaining lines, remove first 43 characters + s/^.\{43\}//' | + $SED -n ' + # Join marker and all lines until next marker into a single line + /^====MARK====/ b para + H + $ b para + b + :para + x + s/\n//g + # Remove the marker + s/^====MARK====// + # Remove trailing dots and whitespace + s/[\. \t]*$// + # Print + /./p' | + # we now have a list, one entry per line, of the stringified + # contents of the appropriate section of all members of the + # archive which possess that section. Heuristic: eliminate + # all those which have a first or second character that is + # a '.' (that is, objdump's representation of an unprintable + # character.) This should work for all archives with less than + # 0x302f exports -- but will fail for DLLs whose name actually + # begins with a literal '.' or a single character followed by + # a '.'. + # + # Of those that remain, print the first one. + $SED -e '/^\./d;/^.\./d;q' +} + +# func_cygming_gnu_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is a GNU/binutils-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_gnu_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` + test -n "$func_cygming_gnu_implib_tmp" +} + +# func_cygming_ms_implib_p ARG +# This predicate returns with zero status (TRUE) if +# ARG is an MS-style import library. Returns +# with nonzero status (FALSE) otherwise. +func_cygming_ms_implib_p () +{ + $opt_debug + func_to_tool_file "$1" func_convert_file_msys_to_w32 + func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` + test -n "$func_cygming_ms_implib_tmp" +} + +# func_cygming_dll_for_implib_fallback ARG +# Platform-specific function to extract the +# name of the DLL associated with the specified +# import library ARG. +# +# This fallback implementation is for use when $DLLTOOL +# does not support the --identify-strict option. +# Invoked by eval'ing the libtool variable +# $sharedlib_from_linklib_cmd +# Result is available in the variable +# $sharedlib_from_linklib_result +func_cygming_dll_for_implib_fallback () +{ + $opt_debug + if func_cygming_gnu_implib_p "$1" ; then + # binutils import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` + elif func_cygming_ms_implib_p "$1" ; then + # ms-generated import library + sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` + else + # unknown + sharedlib_from_linklib_result="" + fi +} # func_extract_an_archive dir oldlib @@ -3199,6 +4085,18 @@ if test -f \"\$progdir/\$program\"; then" + # fixup the dll searchpath if we need to. + # + # Fix the DLL searchpath if we need to. Do this before prepending + # to shlibpath, because on Windows, both are PATH and uninstalled + # libraries must come first. + if test -n "$dllsearchpath"; then + $ECHO "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ @@ -3213,14 +4111,6 @@ " fi - # fixup the dll searchpath if we need to. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. @@ -3238,166 +4128,6 @@ } -# func_to_host_path arg -# -# Convert paths to host format when used with build tools. -# Intended for use with "native" mingw (where libtool itself -# is running under the msys shell), or in the following cross- -# build environments: -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# where wine is equipped with the `winepath' executable. -# In the native mingw case, the (msys) shell automatically -# converts paths for any non-msys applications it launches, -# but that facility isn't available from inside the cwrapper. -# Similar accommodations are necessary for $host mingw and -# $build cygwin. Calling this function does no harm for other -# $host/$build combinations not listed above. -# -# ARG is the path (on $build) that should be converted to -# the proper representation for $host. The result is stored -# in $func_to_host_path_result. -func_to_host_path () -{ - func_to_host_path_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - case $build in - *mingw* ) # actually, msys - # awkward: cmd appends spaces to result - func_to_host_path_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_path_result=`cygpath -w "$1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # Unfortunately, winepath does not exit with a non-zero - # error code, so we are forced to check the contents of - # stdout. On the other hand, if the command is not - # found, the shell will set an exit code of 127 and print - # *an error message* to stdout. So we must check for both - # error code of zero AND non-empty stdout, which explains - # the odd construction: - func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null` - if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then - func_to_host_path_result=`$ECHO "$func_to_host_path_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - else - # Allow warning below. - func_to_host_path_result= - fi - ;; - esac - if test -z "$func_to_host_path_result" ; then - func_error "Could not determine host path corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_path_result="$1" - fi - ;; - esac - fi -} -# end: func_to_host_path - -# func_to_host_pathlist arg -# -# Convert pathlists to host format when used with build tools. -# See func_to_host_path(), above. This function supports the -# following $build/$host combinations (but does no harm for -# combinations not listed here): -# $build $host -# mingw (msys) mingw [e.g. native] -# cygwin mingw -# *nix + wine mingw -# -# Path separators are also converted from $build format to -# $host format. If ARG begins or ends with a path separator -# character, it is preserved (but converted to $host format) -# on output. -# -# ARG is a pathlist (on $build) that should be converted to -# the proper representation on $host. The result is stored -# in $func_to_host_pathlist_result. -func_to_host_pathlist () -{ - func_to_host_pathlist_result="$1" - if test -n "$1"; then - case $host in - *mingw* ) - lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_pathlist_tmp1=$func_stripname_result - case $build in - *mingw* ) # Actually, msys. - # Awkward: cmd appends spaces to result. - func_to_host_pathlist_result=` - ( cmd //c echo "$func_to_host_pathlist_tmp1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` - ;; - *cygwin* ) - func_to_host_pathlist_result=`cygpath -w -p "$func_to_host_pathlist_tmp1" | - $SED -e "$lt_sed_naive_backslashify"` - ;; - * ) - # unfortunately, winepath doesn't convert pathlists - func_to_host_pathlist_result="" - func_to_host_pathlist_oldIFS=$IFS - IFS=: - for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do - IFS=$func_to_host_pathlist_oldIFS - if test -n "$func_to_host_pathlist_f" ; then - func_to_host_path "$func_to_host_pathlist_f" - if test -n "$func_to_host_path_result" ; then - if test -z "$func_to_host_pathlist_result" ; then - func_to_host_pathlist_result="$func_to_host_path_result" - else - func_append func_to_host_pathlist_result ";$func_to_host_path_result" - fi - fi - fi - done - IFS=$func_to_host_pathlist_oldIFS - ;; - esac - if test -z "$func_to_host_pathlist_result"; then - func_error "Could not determine the host path(s) corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This may break if $1 contains DOS-style drive - # specifications. The fix is not to complicate the expression - # below, but for the user to provide a working wine installation - # with winepath so that path translation in the cross-to-mingw - # case works properly. - lt_replace_pathsep_nix_to_dos="s|:|;|g" - func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\ - $SED -e "$lt_replace_pathsep_nix_to_dos"` - fi - # Now, add the leading and trailing path separators back - case "$1" in - :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result" - ;; - esac - case "$1" in - *: ) func_append func_to_host_pathlist_result ";" - ;; - esac - ;; - esac - fi -} -# end: func_to_host_pathlist - # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because @@ -3567,14 +4297,14 @@ EOF cat </dev/null` + if test "$want_nocaseglob" = yes; then + shopt -s nocaseglob + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + $nocaseglob + else + potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` + fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | @@ -7003,7 +7815,7 @@ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi @@ -7028,7 +7840,7 @@ ;; *) # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. @@ -7044,7 +7856,7 @@ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" ;; esac @@ -7057,7 +7869,7 @@ potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi @@ -7082,7 +7894,7 @@ ;; *) # Add a -L argument. - newdeplibs="$newdeplibs $a_deplib" + func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. @@ -7186,7 +7998,7 @@ *) case " $deplibs " in *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; + func_append new_libs " -L$path/$objdir" ;; esac ;; esac @@ -7196,10 +8008,10 @@ -L*) case " $new_libs " in *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" @@ -7216,10 +8028,12 @@ hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" - test "$mode" != relink && rpath="$compile_rpath$rpath" + test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then + func_replace_sysroot "$libdir" + libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else @@ -7228,18 +8042,18 @@ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - dep_rpath="$dep_rpath $flag" + func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; + *) func_apped perm_rpath " $libdir" ;; esac fi done @@ -7257,7 +8071,7 @@ # We should set the runpath_var. rpath= for dir in $perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi @@ -7265,7 +8079,7 @@ fi shlibpath="$finalize_shlibpath" - test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath" + test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi @@ -7297,6 +8111,8 @@ dlname="$soname" fi case $host in + *mingw*) + ;; *aix*) ;; *) @@ -7308,7 +8124,7 @@ linknames= for link do - linknames="$linknames $link" + func_append linknames " $link" done # Use standard objects if they are pic @@ -7319,7 +8135,7 @@ if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" - delfiles="$delfiles $export_symbols" + func_append delfiles " $export_symbols" fi orig_export_symbols= @@ -7350,13 +8166,45 @@ $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do + for cmd1 in $cmds; do IFS="$save_ifs" - eval cmd=\"$cmd\" - func_len " $cmd" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then + # Take the normal branch if the nm_file_list_spec branch + # doesn't work or if tool conversion is not needed. + case $nm_file_list_spec~$to_tool_file_cmd in + *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) + try_normal_branch=yes + eval cmd=\"$cmd1\" + func_len " $cmd" + len=$func_len_result + ;; + *) + try_normal_branch=no + ;; + esac + if test "$try_normal_branch" = yes \ + && { test "$len" -lt "$max_cmd_len" \ + || test "$max_cmd_len" -le -1; } + then + func_show_eval "$cmd" 'exit $?' + skipped_export=false + elif test -n "$nm_file_list_spec"; then + func_basename "$output" + output_la=$func_basename_result + save_libobjs=$libobjs + save_output=$output + output=${output_objdir}/${output_la}.nm + func_to_tool_file "$output" + libobjs=$nm_file_list_spec$func_to_tool_file_result + func_append delfiles " $output" + func_verbose "creating $NM input file list: $output" + for obj in $save_libobjs; do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > "$output" + eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' + output=$save_output + libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. @@ -7390,7 +8238,7 @@ # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi @@ -7400,7 +8248,7 @@ case " $convenience " in *" $test_deplib "*) ;; *) - tmp_deplibs="$tmp_deplibs $test_deplib" + func_append tmp_deplibs " $test_deplib" ;; esac done @@ -7420,21 +8268,21 @@ test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $convenience - libobjs="$libobjs $func_extract_archives_result" + func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" - linker_flags="$linker_flags $flag" + func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking - if test "$mode" = relink; then + if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi @@ -7496,10 +8344,13 @@ echo 'INPUT (' > $output for obj in $save_libobjs do - $ECHO "$obj" >> $output + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output - delfiles="$delfiles $output" + func_append delfiles " $output" + func_to_tool_file "$output" + output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" @@ -7513,10 +8364,12 @@ fi for obj do - $ECHO "$obj" >> $output + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" >> $output done - delfiles="$delfiles $output" - output=$firstobj\"$file_list_spec$output\" + func_append delfiles " $output" + func_to_tool_file "$output" + output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." @@ -7567,7 +8420,7 @@ if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi - delfiles="$delfiles $output" + func_append delfiles " $output" else output= @@ -7601,7 +8454,7 @@ lt_exit=$? # Restore the uninstalled library and exit - if test "$mode" = relink; then + if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -7634,7 +8487,7 @@ # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - delfiles="$delfiles $export_symbols $output_objdir/$libname.filter" + func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi @@ -7675,10 +8528,10 @@ # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $dlprefiles - libobjs="$libobjs $func_extract_archives_result" + func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi @@ -7694,7 +8547,7 @@ lt_exit=$? # Restore the uninstalled library and exit - if test "$mode" = relink; then + if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) @@ -7706,7 +8559,7 @@ IFS="$save_ifs" # Restore the uninstalled library and exit - if test "$mode" = relink; then + if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then @@ -7725,7 +8578,7 @@ fi done -# Local change for sane-backends; moved up +# Local change from sane-backends; moved up # # If -module or -export-dynamic was specified, set the dlname. # if test "$module" = yes || test "$export_dynamic" = yes; then # # On all known operating systems, these are identical. @@ -7791,13 +8644,16 @@ reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi + # If we're not building shared, we need to use non_pic_objs + test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" + # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test @@ -7871,8 +8727,8 @@ if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) - compile_command="$compile_command ${wl}-bind_at_load" - finalize_command="$finalize_command ${wl}-bind_at_load" + func_append compile_command " ${wl}-bind_at_load" + func_append finalize_command " ${wl}-bind_at_load" ;; esac fi @@ -7892,7 +8748,7 @@ *) case " $compile_deplibs " in *" -L$path/$objdir "*) - new_libs="$new_libs -L$path/$objdir" ;; + func_append new_libs " -L$path/$objdir" ;; esac ;; esac @@ -7902,17 +8758,17 @@ -L*) case " $new_libs " in *" $deplib "*) ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac ;; - *) new_libs="$new_libs $deplib" ;; + *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" - compile_command="$compile_command $compile_deplibs" - finalize_command="$finalize_command $finalize_deplibs" + func_append compile_command " $compile_deplibs" + func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. @@ -7920,7 +8776,7 @@ # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; - *) finalize_rpath="$finalize_rpath $libdir" ;; + *) func_append finalize_rpath " $libdir" ;; esac done fi @@ -7939,18 +8795,18 @@ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" + func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; - *) perm_rpath="$perm_rpath $libdir" ;; + *) func_append perm_rpath " $libdir" ;; esac fi case $host in @@ -7959,12 +8815,12 @@ case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; - *) dllsearchpath="$dllsearchpath:$libdir";; + *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; - *) dllsearchpath="$dllsearchpath:$testbindir";; + *) func_append dllsearchpath ":$testbindir";; esac ;; esac @@ -7990,18 +8846,18 @@ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) - hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" - rpath="$rpath $flag" + func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; - *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + *) func_append finalize_perm_rpath " $libdir" ;; esac fi done @@ -8052,6 +8908,12 @@ exit_status=0 func_show_eval "$link_command" 'exit_status=$?' + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' @@ -8074,7 +8936,7 @@ # We should set the runpath_var. rpath= for dir in $perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi @@ -8082,7 +8944,7 @@ # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do - rpath="$rpath$dir:" + func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi @@ -8097,6 +8959,13 @@ $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' + + if test -n "$postlink_cmds"; then + func_to_tool_file "$output" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + exit $EXIT_SUCCESS fi @@ -8130,6 +8999,12 @@ func_show_eval "$link_command" 'exit $?' + if test -n "$postlink_cmds"; then + func_to_tool_file "$output_objdir/$outputname" + postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` + func_execute_cmds "$postlink_cmds" 'exit $?' + fi + # Now create the wrapper script. func_verbose "creating $output" @@ -8227,7 +9102,7 @@ else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then - oldobjs="$oldobjs $symfileobj" + func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" @@ -8235,10 +9110,10 @@ if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $addlibs - oldobjs="$oldobjs $func_extract_archives_result" + func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. @@ -8249,10 +9124,10 @@ # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_extract_archives $gentop $dlprefiles - oldobjs="$oldobjs $func_extract_archives_result" + func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have @@ -8270,7 +9145,7 @@ else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" - generated="$generated $gentop" + func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= @@ -8294,9 +9169,9 @@ esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - oldobjs="$oldobjs $gentop/$newobj" + func_append oldobjs " $gentop/$newobj" ;; - *) oldobjs="$oldobjs $obj" ;; + *) func_append oldobjs " $obj" ;; esac done fi @@ -8306,6 +9181,16 @@ len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds + elif test -n "$archiver_list_spec"; then + func_verbose "using command file archive linking..." + for obj in $oldobjs + do + func_to_tool_file "$obj" + $ECHO "$func_to_tool_file_result" + done > $output_objdir/$libname.libcmd + func_to_tool_file "$output_objdir/$libname.libcmd" + oldobjs=" $archiver_list_spec$func_to_tool_file_result" + cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." @@ -8402,9 +9287,19 @@ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" - newdependency_libs="$newdependency_libs $libdir/$name" + func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" + ;; + -L*) + func_stripname -L '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -L$func_replace_sysroot_result" + ;; + -R*) + func_stripname -R '' "$deplib" + func_replace_sysroot "$func_stripname_result" + func_append newdependency_libs " -R$func_replace_sysroot_result" ;; - *) newdependency_libs="$newdependency_libs $deplib" ;; + *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" @@ -8418,9 +9313,9 @@ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" - newdlfiles="$newdlfiles $libdir/$name" + func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; - *) newdlfiles="$newdlfiles $lib" ;; + *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" @@ -8437,7 +9332,7 @@ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" - newdlprefiles="$newdlprefiles $libdir/$name" + func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done @@ -8449,7 +9344,7 @@ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac - newdlfiles="$newdlfiles $abs" + func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= @@ -8458,7 +9353,7 @@ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac - newdlprefiles="$newdlprefiles $abs" + func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi @@ -8543,7 +9438,7 @@ exit $EXIT_SUCCESS } -{ test "$mode" = link || test "$mode" = relink; } && +{ test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} @@ -8563,9 +9458,9 @@ for arg do case $arg in - -f) RM="$RM $arg"; rmforce=yes ;; - -*) RM="$RM $arg" ;; - *) files="$files $arg" ;; + -f) func_append RM " $arg"; rmforce=yes ;; + -*) func_append RM " $arg" ;; + *) func_append files " $arg" ;; esac done @@ -8574,24 +9469,23 @@ rmdirs= - origobjdir="$objdir" for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then - objdir="$origobjdir" + odir="$objdir" else - objdir="$dir/$origobjdir" + odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" - test "$mode" = uninstall && objdir="$dir" + test "$opt_mode" = uninstall && odir="$dir" - # Remember objdir for removal later, being careful to avoid duplicates - if test "$mode" = clean; then + # Remember odir for removal later, being careful to avoid duplicates + if test "$opt_mode" = clean; then case " $rmdirs " in - *" $objdir "*) ;; - *) rmdirs="$rmdirs $objdir" ;; + *" $odir "*) ;; + *) func_append rmdirs " $odir" ;; esac fi @@ -8617,18 +9511,17 @@ # Delete the libtool libraries and symlinks. for n in $library_names; do - rmfiles="$rmfiles $objdir/$n" + func_append rmfiles " $odir/$n" done - test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test -n "$old_library" && func_append rmfiles " $odir/$old_library" - case "$mode" in + case "$opt_mode" in clean) - case " $library_names " in - # " " in the beginning catches empty $dlname + case " $library_names " in *" $dlname "*) ;; - *) rmfiles="$rmfiles $objdir/$dlname" ;; + *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac - test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then @@ -8656,19 +9549,19 @@ # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then - rmfiles="$rmfiles $dir/$pic_object" + func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then - rmfiles="$rmfiles $dir/$non_pic_object" + func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) - if test "$mode" = clean ; then + if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) @@ -8678,7 +9571,7 @@ noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe - rmfiles="$rmfiles $file" + func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. @@ -8687,7 +9580,7 @@ func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result - rmfiles="$rmfiles $func_ltwrapper_scriptname_result" + func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename @@ -8695,12 +9588,12 @@ # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles - rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then - rmfiles="$rmfiles $objdir/lt-$name" + func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then - rmfiles="$rmfiles $objdir/lt-${noexename}.c" + func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi @@ -8708,7 +9601,6 @@ esac func_show_eval "$RM $rmfiles" 'exit_status=1' done - objdir="$origobjdir" # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do @@ -8720,16 +9612,16 @@ exit $exit_status } -{ test "$mode" = uninstall || test "$mode" = clean; } && +{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} -test -z "$mode" && { +test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$mode'" + func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" diff -Nru sane-backends-1.0.22/m4/libtool.m4 sane-backends-1.0.23/m4/libtool.m4 --- sane-backends-1.0.22/m4/libtool.m4 2011-01-16 01:01:29.000000000 +0000 +++ sane-backends-1.0.23/m4/libtool.m4 2011-11-21 20:17:48.000000000 +0000 @@ -168,10 +168,13 @@ dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our @@ -748,15 +751,12 @@ # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? - sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) + sed '$q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) - _LT_PROG_XSI_SHELLFNS + _LT_PROG_REPLACE_SHELLFNS - sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - mv -f "$cfgfile" "$ofile" || + mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], @@ -1073,30 +1073,41 @@ fi ]) -# _LT_SYS_MODULE_PATH_AIX -# ----------------------- +# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) +# ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. +# Store the results from the different compilers for each TAGNAME. +# Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl -AC_LINK_IFELSE(AC_LANG_PROGRAM,[ -lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\(.*\)$/\1/ - p - } - }' -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then - aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` -fi],[]) -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +if test "${lt_cv_aix_libpath+set}" = set; then + aix_libpath=$lt_cv_aix_libpath +else + AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], + [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ + lt_aix_libpath_sed='[ + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\([^ ]*\) *$/\1/ + p + } + }]' + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + # Check for a 64-bit object if we didn't find anything. + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` + fi],[]) + if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then + _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" + fi + ]) + aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) +fi ])# _LT_SYS_MODULE_PATH_AIX @@ -1121,7 +1132,7 @@ AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. -if test "X`print -r -- -n 2>/dev/null`" = X-n && \ +if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then @@ -1165,6 +1176,39 @@ ])# _LT_PROG_ECHO_BACKSLASH +# _LT_WITH_SYSROOT +# ---------------- +AC_DEFUN([_LT_WITH_SYSROOT], +[AC_MSG_CHECKING([for sysroot]) +AC_ARG_WITH([sysroot], +[ --with-sysroot[=DIR] Search for dependent libraries within DIR + (or the compiler's sysroot if not specified).], +[], [with_sysroot=no]) + +dnl lt_sysroot will always be passed unquoted. We quote it here +dnl in case the user passed a directory name. +lt_sysroot= +case ${with_sysroot} in #( + yes) + if test "$GCC" = yes; then + lt_sysroot=`$CC --print-sysroot 2>/dev/null` + fi + ;; #( + /*) + lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` + ;; #( + no|'') + ;; #( + *) + AC_MSG_RESULT([${with_sysroot}]) + AC_MSG_ERROR([The sysroot must be an absolute path.]) + ;; +esac + + AC_MSG_RESULT([${lt_sysroot:-no}]) +_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl +[dependent libraries, and in which our libraries should be installed.])]) + # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], @@ -1311,14 +1355,47 @@ ])# _LT_ENABLE_LOCK +# _LT_PROG_AR +# ----------- +m4_defun([_LT_PROG_AR], +[AC_CHECK_TOOLS(AR, [ar], false) +: ${AR=ar} +: ${AR_FLAGS=cru} +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) + +AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], + [lt_cv_ar_at_file=no + AC_COMPILE_IFELSE([AC_LANG_PROGRAM], + [echo conftest.$ac_objext > conftest.lst + lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -eq 0; then + # Ensure the archiver fails upon bogus file names. + rm -f conftest.$ac_objext libconftest.a + AC_TRY_EVAL([lt_ar_try]) + if test "$ac_status" -ne 0; then + lt_cv_ar_at_file=@ + fi + fi + rm -f conftest.* libconftest.a + ]) + ]) + +if test "x$lt_cv_ar_at_file" = xno; then + archiver_list_spec= +else + archiver_list_spec=$lt_cv_ar_at_file +fi +_LT_DECL([], [archiver_list_spec], [1], + [How to feed a file listing to the archiver]) +])# _LT_PROG_AR + + # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], -[AC_CHECK_TOOL(AR, ar, false) -test -z "$AR" && AR=ar -test -z "$AR_FLAGS" && AR_FLAGS=cru -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1]) +[_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: @@ -1658,10 +1735,10 @@ /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -void fnord () __attribute__((visibility("default"))); +int fnord () __attribute__((visibility("default"))); #endif -void fnord () { int i=42; } +int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); @@ -2201,8 +2278,9 @@ need_version=no need_lib_prefix=no - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + case $GCC,$cc_basename in + yes,*) + # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ @@ -2235,13 +2313,71 @@ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac + dynamic_linker='Win32 ld.exe' + ;; + + *,cl*) + # Native MSVC + libname_spec='$name' + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + library_names_spec='${libname}.dll.lib' + + case $build_os in + mingw*) + sys_lib_search_path_spec= + lt_save_ifs=$IFS + IFS=';' + for lt_path in $LIB + do + IFS=$lt_save_ifs + # Let DOS variable expansion print the short 8.3 style file name. + lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` + sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" + done + IFS=$lt_save_ifs + # Convert to MSYS style. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` + ;; + cygwin*) + # Convert to unix form, then to dos form, then back to unix form + # but this time dos style (no spaces!) so that the unix form looks + # like /cygdrive/c/PROGRA~1:/cygdr... + sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` + sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` + sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + ;; + *) + sys_lib_search_path_spec="$LIB" + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # FIXME: find the short name or the path components, as spaces are + # common. (e.g. "Program Files" -> "PROGRA~1") + ;; + esac + + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + dynamic_linker='Win32 link.exe' ;; *) + # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + dynamic_linker='Win32 ld.exe' ;; esac - dynamic_linker='Win32 ld.exe' # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; @@ -2949,6 +3085,11 @@ esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + if test "$GCC" != yes; then + reload_cmds=false + fi + ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' @@ -3167,6 +3308,21 @@ ;; esac ]) + +file_magic_glob= +want_nocaseglob=no +if test "$build" = "$host"; then + case $host_os in + mingw* | pw32*) + if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then + want_nocaseglob=yes + else + file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` + fi + ;; + esac +fi + file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -3174,7 +3330,11 @@ _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method == "file_magic"]) + [Command to use when deplibs_check_method = "file_magic"]) +_LT_DECL([], [file_magic_glob], [1], + [How to find potential files when deplibs_check_method = "file_magic"]) +_LT_DECL([], [want_nocaseglob], [1], + [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD @@ -3277,6 +3437,67 @@ dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) +# _LT_CHECK_SHAREDLIB_FROM_LINKLIB +# -------------------------------- +# how to determine the name of the shared library +# associated with a specific link library. +# -- PORTME fill in with the dynamic library characteristics +m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], +[m4_require([_LT_DECL_EGREP]) +m4_require([_LT_DECL_OBJDUMP]) +m4_require([_LT_DECL_DLLTOOL]) +AC_CACHE_CHECK([how to associate runtime and link libraries], +lt_cv_sharedlib_from_linklib_cmd, +[lt_cv_sharedlib_from_linklib_cmd='unknown' + +case $host_os in +cygwin* | mingw* | pw32* | cegcc*) + # two different shell functions defined in ltmain.sh + # decide which to use based on capabilities of $DLLTOOL + case `$DLLTOOL --help 2>&1` in + *--identify-strict*) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib + ;; + *) + lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback + ;; + esac + ;; +*) + # fallback: assume linklib IS sharedlib + lt_cv_sharedlib_from_linklib_cmd="$ECHO" + ;; +esac +]) +sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd +test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO + +_LT_DECL([], [sharedlib_from_linklib_cmd], [1], + [Command to associate shared and link libraries]) +])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB + + +# _LT_PATH_MANIFEST_TOOL +# ---------------------- +# locate the manifest tool +m4_defun([_LT_PATH_MANIFEST_TOOL], +[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) +test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt +AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], + [lt_cv_path_mainfest_tool=no + echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD + $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out + cat conftest.err >&AS_MESSAGE_LOG_FD + if $GREP 'Manifest Tool' conftest.out > /dev/null; then + lt_cv_path_mainfest_tool=yes + fi + rm -f conftest*]) +if test "x$lt_cv_path_mainfest_tool" != xyes; then + MANIFEST_TOOL=: +fi +_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl +])# _LT_PATH_MANIFEST_TOOL + # LT_LIB_M # -------- @@ -3403,8 +3624,8 @@ lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= @@ -3440,6 +3661,7 @@ else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi + lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no @@ -3473,6 +3695,18 @@ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext +/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +/* DATA imports from DLLs on WIN32 con't be const, because runtime + relocations are performed -- see ld's documentation on pseudo-relocs. */ +# define LT@&t@_DLSYM_CONST +#elif defined(__osf__) +/* This system does not cope well with relocations in const data. */ +# define LT@&t@_DLSYM_CONST +#else +# define LT@&t@_DLSYM_CONST const +#endif + #ifdef __cplusplus extern "C" { #endif @@ -3484,7 +3718,7 @@ cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ -const struct { +LT@&t@_DLSYM_CONST struct { const char *name; void *address; } @@ -3510,15 +3744,15 @@ _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext - lt_save_LIBS="$LIBS" - lt_save_CFLAGS="$CFLAGS" + lt_globsym_save_LIBS=$LIBS + lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi - LIBS="$lt_save_LIBS" - CFLAGS="$lt_save_CFLAGS" + LIBS=$lt_globsym_save_LIBS + CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi @@ -3551,6 +3785,13 @@ AC_MSG_RESULT(ok) fi +# Response file support. +if test "$lt_cv_nm_interface" = "MS dumpbin"; then + nm_file_list_spec='@' +elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then + nm_file_list_spec='@' +fi + _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], @@ -3561,6 +3802,8 @@ _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) +_LT_DECL([], [nm_file_list_spec], [1], + [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS @@ -3572,7 +3815,6 @@ _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= -AC_MSG_CHECKING([for $compiler option to produce PIC]) m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then @@ -3677,6 +3919,12 @@ ;; esac ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; dgux*) case $cc_basename in ec++*) @@ -4051,6 +4299,12 @@ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; + nagfor*) + # NAG Fortran compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) @@ -4170,9 +4424,11 @@ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac -AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) + +AC_CACHE_CHECK([for $compiler option to produce PIC], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. @@ -4191,6 +4447,8 @@ _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # @@ -4211,6 +4469,7 @@ m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl @@ -4219,6 +4478,7 @@ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. @@ -4233,15 +4493,20 @@ ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; + ;; cygwin* | mingw* | cegcc*) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - ;; + case $cc_basename in + cl*) ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] + ;; + esac + ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; + ;; esac - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= @@ -4409,7 +4674,8 @@ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' @@ -4457,7 +4723,7 @@ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then - tmp_addflag= + tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler @@ -4527,8 +4793,8 @@ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; @@ -4546,8 +4812,8 @@ _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -4593,8 +4859,8 @@ *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi @@ -4724,7 +4990,7 @@ _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. - _LT_SYS_MODULE_PATH_AIX + _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else @@ -4735,7 +5001,7 @@ else # Determine the default libpath from the value encoded in an # empty executable. - _LT_SYS_MODULE_PATH_AIX + _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. @@ -4779,20 +5045,63 @@ # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + case $cc_basename in + cl*) + # Native MSVC + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # Assume MSVC wrapper + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + esac ;; darwin* | rhapsody*) @@ -4830,7 +5139,7 @@ # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no @@ -4838,7 +5147,7 @@ hpux9*) if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi @@ -4854,7 +5163,7 @@ hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi @@ -4878,10 +5187,10 @@ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else @@ -4928,16 +5237,31 @@ irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE(int foo(void) {}, - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - ) - LDFLAGS="$save_LDFLAGS" + # This should be the same for all languages, so no per-tag cache variable. + AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], + [lt_cv_irix_exported_symbol], + [save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE( + [AC_LANG_SOURCE( + [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], + [C++], [[int foo (void) { return 0; }]], + [Fortran 77], [[ + subroutine foo + end]], + [Fortran], [[ + subroutine foo + end]])])], + [lt_cv_irix_exported_symbol=yes], + [lt_cv_irix_exported_symbol=no]) + LDFLAGS="$save_LDFLAGS"]) + if test "$lt_cv_irix_exported_symbol" = yes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' @@ -5022,7 +5346,7 @@ osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' @@ -5041,9 +5365,9 @@ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) @@ -5315,8 +5639,6 @@ to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [fix_srcfile_path], [1], - [Fix the shell variable $srcfile for the compiler]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], @@ -5327,6 +5649,8 @@ [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [postlink_cmds], [2], + [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented @@ -5428,6 +5752,7 @@ m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then @@ -5489,6 +5814,7 @@ # Allow CC to be a program name with arguments. lt_save_CC=$CC + lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX @@ -5506,6 +5832,7 @@ fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} + CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) @@ -5527,8 +5854,8 @@ # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' @@ -5669,7 +5996,7 @@ _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. - _LT_SYS_MODULE_PATH_AIX + _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" @@ -5681,7 +6008,7 @@ else # Determine the default libpath from the value encoded in an # empty executable. - _LT_SYS_MODULE_PATH_AIX + _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. @@ -5723,29 +6050,75 @@ ;; cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; + case $GXX,$cc_basename in + ,cl* | no,cl*) + # Native MSVC + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='@' + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; + else + $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; + fi~ + $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ + linknames=' + # The linker will not automatically build a static lib if we build a DLL. + # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + # Don't use ranlib + _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' + _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ + lt_tool_outputfile="@TOOL_OUTPUT@"~ + case $lt_outputfile in + *.exe|*.EXE) ;; + *) + lt_outputfile="$lt_outputfile.exe" + lt_tool_outputfile="$lt_tool_outputfile.exe" + ;; + esac~ + func_to_tool_file "$lt_outputfile"~ + if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then + $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; + $RM "$lt_outputfile.manifest"; + fi' + ;; + *) + # g++ + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; @@ -5820,7 +6193,7 @@ ;; *) if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no @@ -5891,10 +6264,10 @@ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi @@ -5935,9 +6308,9 @@ *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes @@ -6215,7 +6588,7 @@ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac @@ -6302,9 +6675,9 @@ if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when @@ -6433,6 +6806,7 @@ fi # test -n "$compiler" CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC @@ -6447,6 +6821,29 @@ ])# _LT_LANG_CXX_CONFIG +# _LT_FUNC_STRIPNAME_CNF +# ---------------------- +# func_stripname_cnf prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# +# This function is identical to the (non-XSI) version of func_stripname, +# except this one can be used by m4 code that may be executed by configure, +# rather than the libtool script. +m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl +AC_REQUIRE([_LT_DECL_SED]) +AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) +func_stripname_cnf () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; + esac +} # func_stripname_cnf +])# _LT_FUNC_STRIPNAME_CNF + # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose @@ -6455,6 +6852,7 @@ # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= @@ -6505,6 +6903,13 @@ }; _LT_EOF ]) + +_lt_libdeps_save_CFLAGS=$CFLAGS +case "$CC $CFLAGS " in #( +*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; +*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; +esac + dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then @@ -6516,7 +6921,7 @@ pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do - case $p in + case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. @@ -6525,13 +6930,22 @@ test $p = "-R"; then prev=$p continue - else - prev= fi + # Expand the sysroot to ease extracting the directories later. + if test -z "$prev"; then + case $p in + -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; + -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; + -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; + esac + fi + case $p in + =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; + esac if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) + case ${prev} in + -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. @@ -6551,8 +6965,10 @@ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi + prev= ;; + *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. @@ -6588,6 +7004,7 @@ fi $RM -f confest.$objext +CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], @@ -6737,7 +7154,9 @@ # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} + CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) @@ -6791,6 +7210,7 @@ GCC=$lt_save_GCC CC="$lt_save_CC" + CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP @@ -6867,7 +7287,9 @@ # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC + lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} + CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu @@ -6923,7 +7345,8 @@ fi # test -n "$compiler" GCC=$lt_save_GCC - CC="$lt_save_CC" + CC=$lt_save_CC + CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP @@ -6960,10 +7383,12 @@ _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. -lt_save_CC="$CC" +lt_save_CC=$CC +lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} +CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" @@ -6994,7 +7419,8 @@ AC_LANG_RESTORE GCC=$lt_save_GCC -CC="$lt_save_CC" +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG @@ -7029,9 +7455,11 @@ # Allow CC to be a program name with arguments. lt_save_CC="$CC" +lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} +CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) @@ -7044,7 +7472,8 @@ GCC=$lt_save_GCC AC_LANG_RESTORE -CC="$lt_save_CC" +CC=$lt_save_CC +CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG @@ -7103,6 +7532,15 @@ AC_SUBST([OBJDUMP]) ]) +# _LT_DECL_DLLTOOL +# ---------------- +# Ensure DLLTOOL variable is set. +m4_defun([_LT_DECL_DLLTOOL], +[AC_CHECK_TOOL(DLLTOOL, dlltool, false) +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) +AC_SUBST([DLLTOOL]) +]) # _LT_DECL_SED # ------------ @@ -7196,8 +7634,8 @@ # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,, \ + test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes @@ -7236,206 +7674,162 @@ ])# _LT_CHECK_SHELL_FEATURES -# _LT_PROG_XSI_SHELLFNS -# --------------------- -# Bourne and XSI compatible variants of some useful shell functions. -m4_defun([_LT_PROG_XSI_SHELLFNS], -[case $xsi_shell in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac -} - -# func_basename file -func_basename () -{ - func_basename_result="${1##*/}" -} - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}" -} - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -func_stripname () -{ - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"} -} - -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=${1%%=*} - func_opt_split_arg=${1#*=} -} - -# func_lo2o object -func_lo2o () -{ - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac -} - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=${1%.*}.lo -} - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=$(( $[*] )) -} - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=${#1} -} - -_LT_EOF - ;; - *) # Bourne compatible functions. - cat << \_LT_EOF >> "$cfgfile" - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} +# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) +# ------------------------------------------------------ +# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and +# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. +m4_defun([_LT_PROG_FUNCTION_REPLACE], +[dnl { +sed -e '/^$1 ()$/,/^} # $1 /c\ +$1 ()\ +{\ +m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) +} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") +test 0 -eq $? || _lt_function_replace_fail=: +]) -dnl func_dirname_and_basename -dnl A portable version of this function is already defined in general.m4sh -dnl so there is no need for it here. -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} +# _LT_PROG_REPLACE_SHELLFNS +# ------------------------- +# Replace existing portable implementations of several shell functions with +# equivalent extended shell implementations where those features are available.. +m4_defun([_LT_PROG_REPLACE_SHELLFNS], +[if test x"$xsi_shell" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac]) + + _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl + func_basename_result="${1##*/}"]) + + _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}"]) -# sed scripts: -my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' -my_sed_long_arg='1s/^-[[^=]]*=//' + _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl + func_split_long_opt_name=${1%%=*} + func_split_long_opt_arg=${1#*=}]) + + _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl + func_split_short_opt_arg=${1#??} + func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) + + _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac]) -# func_opt_split -func_opt_split () -{ - func_opt_split_opt=`$ECHO "${1}" | $SED "$my_sed_long_opt"` - func_opt_split_arg=`$ECHO "${1}" | $SED "$my_sed_long_arg"` -} + _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} + _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[[^.]]*$/.lo/'` -} + _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) +fi -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "$[@]"` -} +if test x"$lt_shell_append" = xyes; then + _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` -} + _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl + func_quote_for_eval "${2}" +dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ + eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) + + # Save a `func_append' function call where possible by direct use of '+=' + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +else + # Save a `func_append' function call even when '+=' is not available + sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ + && mv -f "$cfgfile.tmp" "$cfgfile" \ + || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") + test 0 -eq $? || _lt_function_replace_fail=: +fi -_LT_EOF -esac +if test x"$_lt_function_replace_fail" = x":"; then + AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) +fi +]) -case $lt_shell_append in - yes) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]+=\$[2]" -} -_LT_EOF +# _LT_PATH_CONVERSION_FUNCTIONS +# ----------------------------- +# Determine which file name conversion functions should be used by +# func_to_host_file (and, implicitly, by func_to_host_path). These are needed +# for certain cross-compile configurations and native mingw. +m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_MSG_CHECKING([how to convert $build file names to $host format]) +AC_CACHE_VAL(lt_cv_to_host_file_cmd, +[case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 + ;; + esac ;; - *) - cat << \_LT_EOF >> "$cfgfile" - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "$[1]=\$$[1]\$[2]" -} - -_LT_EOF + *-*-cygwin* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin + ;; + *-*-cygwin* ) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; + * ) # otherwise, assume *nix + lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin + ;; + esac ;; - esac + * ) # unhandled hosts (and "normal" native builds) + lt_cv_to_host_file_cmd=func_convert_file_noop + ;; +esac +]) +to_host_file_cmd=$lt_cv_to_host_file_cmd +AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) +_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], + [0], [convert $build file names to $host format])dnl + +AC_MSG_CHECKING([how to convert $build file names to toolchain format]) +AC_CACHE_VAL(lt_cv_to_tool_file_cmd, +[#assume ordinary cross tools, or native build. +lt_cv_to_tool_file_cmd=func_convert_file_noop +case $host in + *-*-mingw* ) + case $build in + *-*-mingw* ) # actually msys + lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 + ;; + esac + ;; +esac ]) +to_tool_file_cmd=$lt_cv_to_tool_file_cmd +AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) +_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], + [0], [convert $build files to toolchain format])dnl +])# _LT_PATH_CONVERSION_FUNCTIONS diff -Nru sane-backends-1.0.22/missing sane-backends-1.0.23/missing --- sane-backends-1.0.22/missing 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/missing 2011-11-21 20:17:48.000000000 +0000 @@ -1,10 +1,10 @@ #! /bin/sh # Common stub for a few missing GNU programs while installing. -scriptversion=2006-05-10.23 +scriptversion=2009-04-28.21; # UTC -# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, +# 2008, 2009 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -18,9 +18,7 @@ # GNU General Public License for more details. # You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -# 02110-1301, USA. +# along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a @@ -89,6 +87,9 @@ tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] +Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and +\`g' are ignored when checking the name. + Send bug reports to ." exit $? ;; @@ -106,15 +107,22 @@ esac +# normalize program name to check for. +program=`echo "$1" | sed ' + s/^gnu-//; t + s/^gnu//; t + s/^g//; t'` + # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect -# the program). +# the program). This is about non-GNU programs, so use $1 not +# $program. case $1 in - lex|yacc) + lex*|yacc*) # Not GNU programs, they don't have --version. ;; - tar) + tar*) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 @@ -138,7 +146,7 @@ # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. -case $1 in +case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if @@ -148,7 +156,7 @@ touch aclocal.m4 ;; - autoconf) + autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the @@ -157,7 +165,7 @@ touch configure ;; - autoheader) + autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want @@ -187,7 +195,7 @@ while read f; do touch "$f"; done ;; - autom4te) + autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the @@ -210,7 +218,7 @@ fi ;; - bison|yacc) + bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package @@ -240,7 +248,7 @@ fi ;; - lex|flex) + lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package @@ -263,7 +271,7 @@ fi ;; - help2man) + help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the @@ -277,11 +285,11 @@ else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" - exit 1 + exit $? fi ;; - makeinfo) + makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file @@ -310,7 +318,7 @@ touch $file ;; - tar) + tar*) shift # We have already tried tar in the generic part. @@ -363,5 +371,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-end: "$" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff -Nru sane-backends-1.0.22/mkinstalldirs sane-backends-1.0.23/mkinstalldirs --- sane-backends-1.0.22/mkinstalldirs 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/mkinstalldirs 2011-11-21 20:17:48.000000000 +0000 @@ -1,110 +1,162 @@ #! /bin/sh # mkinstalldirs --- make directory hierarchy -# Author: Noah Friedman -# Created: 1993-05-16 -# Public domain -# $Id$ +scriptversion=2009-04-28.21; # UTC +# Original author: Noah Friedman +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +nl=' +' +IFS=" "" $nl" errstatus=0 -dirmode="" -owner="" -group="" - -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHOWNPROG-chgrp}" +dirmode= usage="\ -Usage: mkinstalldirs [-h] [--help] [-m mode] [-o owner] [-g group] dir ..." +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to ." # process command line arguments while test $# -gt 0 ; do - case "${1}" in - -h | --help | --h* ) # -h for help - echo "${usage}" 1>&2; exit 0 ;; - -m ) # -m PERM arg - shift - test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } - dirmode="${1}" - shift ;; - -o ) # -o OWNER arg - shift - test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } - owner="${1}" - shift ;; - -g ) # -g OWNER arg - shift - test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } - group="${1}" - shift ;; - -- ) shift; break ;; # stop option processing - -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option - * ) break ;; # first non-opt arg - esac + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit $? + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit $? + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac done for file do - set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` - shift - - pathcomp= - for d - do - pathcomp="$pathcomp$d" - case "$pathcomp" in - -* ) pathcomp=./$pathcomp ;; - esac - - if test ! -d "$pathcomp" -a ! -d "$pathcomp/"; then - echo "mkdir $pathcomp" - - mkdir "$pathcomp" || lasterr=$? - - if test ! -d "$pathcomp" -a ! -d "$pathcomp/"; then - errstatus=$lasterr - else - if test ! -z "$dirmode"; then - echo "$chmodprog $dirmode $pathcomp" - - lasterr="" - $chmodprog $dirmode "$pathcomp" || lasterr=$? - - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - if test ! -z "$owner"; then - echo "$chownprog $owner $pathcomp" - - lasterr="" - $chownprog $owner "$pathcomp" || lasterr=$? + if test -d "$file"; then + shift + else + break + fi +done - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi - fi - if test ! -z "$group"; then - echo "$chgrpprog $group $pathcomp" +case $# in + 0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error. This is a problem when calling mkinstalldirs +# from a parallel make. We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in + '') + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + test -d ./-p && rmdir ./-p + test -d ./--version && rmdir ./--version + fi + ;; + *) + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && + test ! -d ./--version; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + else + # Clean up after NextStep and OpenStep mkdir. + for d in ./-m ./-p ./--version "./$dirmode"; + do + test -d $d && rmdir $d + done + fi + ;; +esac - lasterr="" - $chgrpprog $group "$pathcomp" || lasterr=$? +for file +do + case $file in + /*) pathcomp=/ ;; + *) pathcomp= ;; + esac + oIFS=$IFS + IFS=/ + set fnord $file + shift + IFS=$oIFS + + for d + do + test "x$d" = x && continue + + pathcomp=$pathcomp$d + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr= + chmod "$dirmode" "$pathcomp" || lasterr=$? - if test ! -z "$lasterr"; then - errstatus=$lasterr - fi + if test ! -z "$lasterr"; then + errstatus=$lasterr fi - fi - fi + fi + fi + fi - pathcomp="$pathcomp/" - done + pathcomp=$pathcomp/ + done done exit $errstatus # Local Variables: -# mode:shell-script -# sh-indentation:3 +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" # End: diff -Nru sane-backends-1.0.22/po/Makefile.in sane-backends-1.0.23/po/Makefile.in --- sane-backends-1.0.22/po/Makefile.in 2011-01-30 18:50:56.000000000 +0000 +++ sane-backends-1.0.23/po/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -62,6 +62,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -118,6 +119,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -167,6 +169,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ diff -Nru sane-backends-1.0.22/po/POTFILES sane-backends-1.0.23/po/POTFILES --- sane-backends-1.0.22/po/POTFILES 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/po/POTFILES 2011-07-06 20:17:25.000000000 +0000 @@ -30,9 +30,6 @@ ../backend/genesys.c -../backend/kodak.c -../backend/kodak.h - ../backend/gt68xx.c ../backend/gt68xx_low.h @@ -43,6 +40,18 @@ ../backend/hp-option.c ../backend/hp-option.h +../backend/kodak.c +../backend/kodak.h + +../backend/kvs1025.h +../backend/kvs1025_opt.c +../backend/kvs20xx.c + +../backend/kvs20xx_opt.c + +../backend/kvs40xx.c +../backend/kvs40xx_opt.c + ../backend/leo.c ../backend/leo.h diff -Nru sane-backends-1.0.22/po/bg.po sane-backends-1.0.23/po/bg.po --- sane-backends-1.0.22/po/bg.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/bg.po 2011-07-06 20:17:25.000000000 +0000 @@ -5,10 +5,11 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.11\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2007-12-17 22:59+0100\n" "Last-Translator: Pavel Constantinov \n" "Language-Team: <>\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,9 +26,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -41,23 +44,24 @@ msgstr "Геометрия" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Повишение" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1005,22 +1009,22 @@ msgid "Button state" msgstr "" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Номер на кадъра за сканиране" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Избира номера на кадъра за сканиране" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, fuzzy, no-c-format msgid "Duplex scan" msgstr "Дуплексно" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1104,7 +1108,8 @@ msgid "Slides" msgstr "Солидно бяло" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Автоматично" @@ -1380,7 +1385,8 @@ msgstr "" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Огледален образ" @@ -1526,85 +1532,85 @@ msgid "Select the film type" msgstr "Избира полутона" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Flatbed" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "ADF" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, fuzzy, no-c-format msgid "ADF Duplex" msgstr "Дуплексно" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Червено" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Зелено" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Синьо" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Повишение" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Повишение" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Повишение" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1612,29 +1618,32 @@ msgid "None" msgstr "Нищо" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Симплексно" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Дуплексно" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Прозрачност" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Автоматично подаване на документи" @@ -1746,7 +1755,7 @@ msgid "CRT monitors" msgstr "CRT монитори" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1792,12 +1801,17 @@ msgid "A5 landscape" msgstr "A5 пейзаж" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1808,15 +1822,17 @@ msgstr "Макс." #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Режим на сканиране" @@ -2009,11 +2025,13 @@ msgstr "Извади документа след сканиране" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "" @@ -2089,242 +2107,241 @@ msgid "User defined CCT profile" msgstr "По потребителска дефиниция" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Вкл." -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Изкл." -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Dither" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Разсейка на грешките" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Степен на бялото" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Степен на черното" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Кондиционално" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Хоризонтално" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Хоризонтално" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Хоризонтално" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "8x8 вертикална черта" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "8x8 вертикална черта" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Печат" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Адаптиране на прозрачността" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, fuzzy, no-c-format msgid "Extras" msgstr "Екстра бързо" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Праг" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, fuzzy, no-c-format msgid "Disable interpolation" msgstr "Забрани връщане на главата" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " "than the vertical resolution this disables horizontal interpolation." msgstr "" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, fuzzy, no-c-format msgid "Color Filter" msgstr "Цветно Lineart" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, fuzzy, no-c-format msgid "Lamp off time" msgstr "Изкл. лампа" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, 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 "" -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Изчакай натискане на бутона" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Изчакай натискане на бутона" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Груба калибрация" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Задължителна калибрация преди сканиране" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Калибриране" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Започване на калибрацията." -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Груба калибрация" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Режим калибрация" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Адаптиране на прозрачността" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2425,12 +2442,12 @@ msgid "Sets the gamma value of all channels." msgstr "Наглася стойността на гамата за всички канали." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, fuzzy, no-c-format msgid "Geometry Group" msgstr "Геометрия" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, fuzzy, no-c-format msgid "Scan Mode Group" msgstr "Режим на сканиране" @@ -2736,9 +2753,9 @@ msgstr "По-бавно" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Нормално" @@ -2973,6 +2990,697 @@ msgid "Shut off scanner lamp." msgstr "Изключва лампата на скенера" +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Размер на хартията" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Автоматично разделение" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 пейзаж" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Ръчен предв. фокус" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Ръчен предв. фокус" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Позволи дупрексно (двустранно) сканиране" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Физически размер на хартията в ADF" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Полутон" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Цвят" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Кондиционално" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Изкл." + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Полутон" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Полутон" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Разсейка на грешките" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Нормално" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Осветление" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "flatbed скенер" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "От хартия" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "По подразбиране" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Изглаждане" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "По-бавно" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Средно" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Червено" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Зелено" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Източник на сканиране" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Режим на захранване" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Наглася режима на захранване" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Забрани предв. фокус" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Забрани предв. фокус" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Наглася режима на захранване" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Наглася режима на захранване" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Автоматичен праг" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Автоматично наглася яркостта, контраста, нивото на бяло, гамата, " +"редукцията на шума и подчертаването на образа" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Редуциране на шума" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Намали изолирания точков шум" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Подчертаване на образа" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Наглася подчертаването на образа" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Гама" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Вкл. лампа" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Включва/изключва лампата." + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Прави вертикален огледален образ" + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Корекция на гамата" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Принтиране с висока гъстота" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Принтиране с ниска гъстота" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Разсейка на грешките" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Без корекция" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Нормално" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Повишение" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Автоматичен праг" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Автоматичен праг" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Наглася поредността на фреймовете." + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Сянка - синьо" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Измести червено към синьо" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -2998,55 +3706,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 вертикална черта" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Увеличение" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Настройки по увеличение на цветните канали" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Увеличение - сиво" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Наглася увеличение на сивия канал" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Увеличение - червено" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Наглася увеличение на червения канал" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Увеличение - зелено" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Наглася увеличение на зеления канал" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Увеличение - синьо" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Наглася увеличение на синия канал" @@ -3096,11 +3804,6 @@ msgid "From white stick" msgstr "От бял" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "От хартия" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3142,56 +3845,6 @@ msgid "sheetfed scanner" msgstr "скенер с sheetfeed" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Режим на захранване" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Наглася режима на захранване" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Автоматичен праг" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Автоматично наглася яркостта, контраста, нивото на бяло, гамата, " -"редукцията на шума и подчертаването на образа" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Редуциране на шума" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Намали изолирания точков шум" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Подчертаване на образа" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Наглася подчертаването на образа" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Гама" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3202,26 +3855,6 @@ msgid "Grayscale 8 bits" msgstr "Сива скала 8 бита" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Размер на хартията" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Автоматично разделение" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Позволи дупрексно (двустранно) сканиране" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Физически размер на хартията в ADF" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3314,11 +3947,6 @@ "Ако отметнете тук, бекендът автоматично ще потърси оптимална стойноста " "за прага." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Корекция на гамата" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4109,29 +4737,29 @@ "Накарай бекенда да върне статус-кода SANE_STATUS_ACCESS_DENIED след " "повикване на sane_read()." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "" -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Вкл. лампа" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Включи лампата на скенера" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Изкл. лампа" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/cs.po sane-backends-1.0.23/po/cs.po --- sane-backends-1.0.22/po/cs.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/cs.po 2011-07-06 20:17:25.000000000 +0000 @@ -5,10 +5,11 @@ msgstr "" "Project-Id-Version: sane-backends.cs\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2007-12-17 22:59+0100\n" "Last-Translator: Josef \n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -26,9 +27,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -42,23 +45,24 @@ msgstr "Geometrie" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Vylepšení" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1005,22 +1009,22 @@ msgid "Button state" msgstr "Stav tlačítek" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Číslo políčka pro sken" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Zvolí číslo políčka, které bude naskenováno" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, fuzzy, no-c-format msgid "Duplex scan" msgstr "Oboustraně" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1104,7 +1108,8 @@ msgid "Slides" msgstr "Zcela bílá" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automaticky" @@ -1380,7 +1385,8 @@ msgstr "" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Zrcadlit obrázek" @@ -1526,85 +1532,85 @@ msgid "Select the film type" msgstr "Zvolit polotóny" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Stolní" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, fuzzy, no-c-format msgid "ADF Duplex" msgstr "Oboustraně" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Červená" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Zelená" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Modrá" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Vylepšení" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Vylepšení" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Vylepšení" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1612,29 +1618,32 @@ msgid "None" msgstr "Žádné" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Jednostraně" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Oboustraně" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Prosvětlovací jednotka" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Automatický podavač dokumentů" @@ -1746,7 +1755,7 @@ msgid "CRT monitors" msgstr "CRT monitory" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1792,12 +1801,17 @@ msgid "A5 landscape" msgstr "A5 na šířku" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1808,15 +1822,17 @@ msgstr "Max" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Režim skenování" @@ -2008,11 +2024,13 @@ msgstr "Vysunout dokument po naskenování" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "" @@ -2086,242 +2104,241 @@ msgid "User defined CCT profile" msgstr "Uživatelské nastavení" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Rozptyl" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Chybový rozptyl" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Úroveň bílé" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Úroveň černé" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, no-c-format msgid "Continue" msgstr "" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Horizontální" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Horizontální" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Horizontální" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Vertikální" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Vertikální" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, no-c-format msgid "Front" msgstr "" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Prosvětlovací adaptér" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, fuzzy, no-c-format msgid "Extras" msgstr "Velmi rychlý" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Prahová hodnota" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, fuzzy, no-c-format msgid "Disable interpolation" msgstr "Vyřadit zpětný chod" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " "than the vertical resolution this disables horizontal interpolation." msgstr "" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, fuzzy, no-c-format msgid "Color Filter" msgstr "Barevná perokresba" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, fuzzy, no-c-format msgid "Lamp off time" msgstr "Vypnout lampu" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, 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 "" -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Čekat na tlačítko" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Čekat na tlačítko" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Hrubá kalibrace" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Vynutit kalibraci skeneru před skenováním" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, fuzzy, no-c-format msgid "Buttons" msgstr "Stav tlačítek" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Kalibrovat" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Hrubá kalibrace" -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Hrubá kalibrace" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Režim kalibrace" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Prosvětlovací adaptér" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2422,12 +2439,12 @@ msgid "Sets the gamma value of all channels." msgstr "Nastavuje hodnotu gama pro všechny kanály." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, fuzzy, no-c-format msgid "Geometry Group" msgstr "Geometrie" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, fuzzy, no-c-format msgid "Scan Mode Group" msgstr "Režim skenování" @@ -2733,9 +2750,9 @@ msgstr "Pomalý" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normální" @@ -2964,6 +2981,697 @@ msgid "Shut off scanner lamp." msgstr "Vypnout lampu skeneru." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Rozměr papíru" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Automatické oddělení" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 na šířku" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Manuální předběžné zaostření" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Manuální předběžné zaostření" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Zapnout oboustranné (duplexní) skenování" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Fyzická velikost papíru v automatikém podavači" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Polotóny" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Barva" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, no-c-format +msgid "continuous" +msgstr "" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, no-c-format +msgid "off" +msgstr "" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Polotóny" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Polotóny" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Chybový rozptyl" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normální" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Světlé body" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "Stolní skener" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Z papíru" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Standard" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Jemný" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Pomalý" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Střední" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Červená" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Zelená" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Zdroj" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Režim podavače" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Nastavuje režim podavače" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Vyřadit předběžné zaostření" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Vyřadit předběžné zaostření" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Nastavuje režim podavače" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Nastavuje režim podavače" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Automatické nastavení prahových hodnot" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Automaticky nastaví jas, kontrast, úroveň bílé, gama korekci, redukci " +"šumu a zvýraznění obrázku" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Redukce šumu" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Redukuje izolovaný bodový šum" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Zvýraznění obrázku" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Nastaví zvýraznění obrázku" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gama" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Zapnout lampu" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Zapíná a vypíná lampu." + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Zrcadlit obrázek" + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Korekce gama" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Tisk ve vysoké kvalitě" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Tisk v nízké kvalitě" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Chybový rozptyl" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Bez korekce" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normální" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Vylepšení" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Automatické nastavení prahových hodnot" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Automatické nastavení prahových hodnot" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Nastavit pořadí kanálů" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Stíny modré" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Posun červená-modrá" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -2989,55 +3697,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 vertikála" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Zisk" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Nastavení zisku barevných kanálů" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Zisk šedé" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Nastavuje zisk šedého kanálu" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Zisk červené" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Nastavuje zisk červeného kanálu" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Zisk zelené" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Nastavuje zisk zeleného kanálu" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Zisk modré" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Nastavuje zisk modrého kanálu" @@ -3087,11 +3795,6 @@ msgid "From white stick" msgstr "Z bílého bodu" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Z papíru" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3133,56 +3836,6 @@ msgid "sheetfed scanner" msgstr "skener s podavačem" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Režim podavače" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Nastavuje režim podavače" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Automatické nastavení prahových hodnot" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Automaticky nastaví jas, kontrast, úroveň bílé, gama korekci, redukci " -"šumu a zvýraznění obrázku" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Redukce šumu" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Redukuje izolovaný bodový šum" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Zvýraznění obrázku" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Nastaví zvýraznění obrázku" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gama" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3193,26 +3846,6 @@ msgid "Grayscale 8 bits" msgstr "Stupně šedé 8 bitů" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Rozměr papíru" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Automatické oddělení" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Zapnout oboustranné (duplexní) skenování" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Fyzická velikost papíru v automatikém podavači" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3302,11 +3935,6 @@ msgstr "" "Pokud je zvoleno, optimální prahové hodnoty se pokusí nastavit backend." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Korekce gama" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4097,29 +4725,29 @@ "Přinutit backend, aby po volání sane_read() vrátil stavový kód " "SANE_STATUS_ACCESS_DENIED." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "" -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Zapnout lampu" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Zapnout lampu skeneru" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Vypnout lampu" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/da.po sane-backends-1.0.23/po/da.po --- sane-backends-1.0.22/po/da.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/da.po 2011-07-06 20:17:25.000000000 +0000 @@ -6,10 +6,11 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.17\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2007-12-17 22:59+0100\n" "Last-Translator: Mogens Jaeger \n" "Language-Team: Danish \n" +"Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -31,9 +32,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -47,23 +50,24 @@ msgstr "Skanområde" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Forbedring" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1009,22 +1013,22 @@ msgid "Button state" msgstr "Knap tilstand" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Billednummer der skal skannes" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Vælger nummeret på det billede der skal skannes" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Duplex skan" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1108,7 +1112,8 @@ msgid "Slides" msgstr "Diapositiv" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatisk" @@ -1384,7 +1389,8 @@ msgstr "" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Spejl billedet" @@ -1530,85 +1536,85 @@ msgid "Select the film type" msgstr "Vælger halvtone." -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Flatbed" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "ADF" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, fuzzy, no-c-format msgid "ADF Duplex" msgstr "Dobbeltsidet" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Rød" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Grøn" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Blå" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Forbedring" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Forbedring" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Forbedring" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1616,29 +1622,32 @@ msgid "None" msgstr "Ingen" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Enkeltsidet" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Dobbeltsidet" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Filmenhed" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Automatisk dokumentføder" @@ -1750,7 +1759,7 @@ msgid "CRT monitors" msgstr "CRT skærme" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1796,12 +1805,17 @@ msgid "A5 landscape" msgstr "A5 tværformat" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1812,15 +1826,17 @@ msgstr "Maks" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Skanner tilstand" @@ -2012,11 +2028,13 @@ msgstr "Skub dokumentet ud efter skanning" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "ADF-tilstand" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Vælger ADF tilstand (enkeltsidet/dobbeltsidet)" @@ -2091,182 +2109,175 @@ msgid "User defined CCT profile" msgstr "Brugerdefineret" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Tændt" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Slukket" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Dither" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Fejlspredning" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Hvid niveau" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Sort niveau" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Betinget" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Vandret" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Vandret" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Vandret" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Lodret" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Lodret" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Print" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Filmadapter" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Ekstra" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Tærskelværdi" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, fuzzy, no-c-format msgid "Disable interpolation" msgstr "Deaktiver bagudrettet sporing" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " "than the vertical resolution this disables horizontal interpolation." msgstr "" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, fuzzy, no-c-format msgid "Color Filter" msgstr "Farve stregtegning" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Sluk-lampe tid" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2275,60 +2286,66 @@ "Lampen bliver slukket efter den angivne tid (i minutter). Værdien 0 " "bevirker, at lampen ikke bliver slukket." -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Vent på knap" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Vent på knap" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Grovkalibrering" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Gennemtving kalibrering før skanning" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Knapper" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Kalibrering" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Begynd kalibreringsprocessen." -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Grovkalibrering" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Kalibreringsdatacache" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Filmadapter" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2435,12 +2452,12 @@ msgid "Sets the gamma value of all channels." msgstr "Fastsætter gamma værdien for alle kanaler." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, fuzzy, no-c-format msgid "Geometry Group" msgstr "Skanområde" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, fuzzy, no-c-format msgid "Scan Mode Group" msgstr "Skanner tilstand" @@ -2746,9 +2763,9 @@ msgstr "Langsom" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normal" @@ -2982,6 +2999,697 @@ msgid "Shut off scanner lamp." msgstr "Slukker for skannerens lampe." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Papirstørrelse" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Automatisk separering" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 tværformat" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Manuel pre-fokus" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Manuel pre-fokus" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Aktiver Duplex (dobbeltsidet) skanning" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Reel størrelse af papiret i ADF'en" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Halvtone" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Farve" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Betinget" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Slukket" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Halvtone" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Halvtone" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Fejlspredning" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normal" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Højlys" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "Flatbed skanner" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Fra papir" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Standard" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Udglat" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Langsom" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Mellem" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Rød" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Grøn" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Skanningskilde" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Arkføder tilstand" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Fastætter fødningstilstanden" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Deaktiver pre-fokusering" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Deaktiver pre-fokusering" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Fastætter fødningstilstanden" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Fastætter fødningstilstanden" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Automatisk tærskelværdi" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Automatisk indstilling af lyshed, kontrast, hvid balance, gamma, " +"støjreduktion og billedbetoning" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Støjreduktion" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Reducer støj fra enkelt punkter" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Billedbetoning" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Fastsætter billedbetoning" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Lampe tændt" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Tænder/slukker for lampen" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Spejlvend billedet lodret." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Gammakorrektion" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Udskrift med høj opløsning" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Udskrift med lav opløsning" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Fejlspredning" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Ingen korrektion" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normal" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Forbedring" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Automatisk tærskelværdi" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Automatisk tærskelværdi" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Fastsætter billedrammernes rækkefølge" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Skygge for blå" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Forskyder rød mod blå" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3007,55 +3715,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 lodret linie" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Forstærk" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Farvekanalforstærkningsindstillinger" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Grå-forstærkning" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Fastsætter grå-kanals forstærkning" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Rød forstærkning" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Fastsætter rød-kanals forstærkning" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Grøn forstærkning" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Fastsætter grøn-kanals forstærkning" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Blå forstærkning" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Fastsætter blå-kanals forstærkning" @@ -3105,11 +3813,6 @@ msgid "From white stick" msgstr "Fra kalibreringsstriber" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Fra papir" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3151,56 +3854,6 @@ msgid "sheetfed scanner" msgstr "arkføder skanner" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Arkføder tilstand" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Fastætter fødningstilstanden" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Automatisk tærskelværdi" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Automatisk indstilling af lyshed, kontrast, hvid balance, gamma, " -"støjreduktion og billedbetoning" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Støjreduktion" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Reducer støj fra enkelt punkter" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Billedbetoning" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Fastsætter billedbetoning" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3211,26 +3864,6 @@ msgid "Grayscale 8 bits" msgstr "8 bit gråskala" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Papirstørrelse" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Automatisk separering" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Aktiver Duplex (dobbeltsidet) skanning" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Reel størrelse af papiret i ADF'en" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3321,11 +3954,6 @@ "Hvis aktiveret prøver bagenden automatisk at bestemme en optimal " "tærskelværdi." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Gammakorrektion" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4117,29 +4745,29 @@ "Tving bagenden til at returnere statuskoden SANE_STATUS_ACCESS_DENIED " "efter sane_read() er blevet kaldt." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, fuzzy, no-c-format msgid "This option reflects the status of a scanner button." msgstr "Denne indstilling reflekterer skannerknappernes status." -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Lampe tændt" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Tænd for skannerlampen" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Sluk lampe" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/de.po sane-backends-1.0.23/po/de.po --- sane-backends-1.0.22/po/de.po 2011-01-19 02:31:13.000000000 +0000 +++ sane-backends-1.0.23/po/de.po 2012-07-01 02:00:44.000000000 +0000 @@ -9,17 +9,19 @@ # Oliver Schwartz , 2002, 2004. # Karsten Festag , 2002. # Burkhard Lück , 2009. +# Rolf Bensch , 2012. msgid "" msgstr "" "Project-Id-Version: sane-backends\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2012-06-27 10:43+0200\n" "PO-Revision-Date: 2010-08-06 17:17+0100\n" -"Last-Translator: Matthias Mailänder \n" +"Last-Translator: Rolf Bensch \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: de\n" "X-Generator: Lokalize 0.3\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" @@ -33,73 +35,45 @@ msgid "Standard" msgstr "Standard" -#: ../include/sane/saneopts.h:157 -#: ../backend/artec_eplus48u.c:2884 -#: ../backend/epson.c:3284 -#: ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 -#: ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 -#: ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 -#: ../backend/lexmark.c:189 -#: ../backend/ma1509.c:551 -#: ../backend/matsushita.c:1135 -#: ../backend/microtek2.h:599 -#: ../backend/mustek.c:4363 -#: ../backend/mustek_usb.c:305 -#: ../backend/mustek_usb2.c:465 -#: ../backend/pixma_sane_options.c:144 -#: ../backend/plustek.c:807 -#: ../backend/plustek_pp.c:746 -#: ../backend/sceptre.c:702 -#: ../backend/snapscan-options.c:494 -#: ../backend/teco1.c:1095 -#: ../backend/teco2.c:1914 -#: ../backend/teco3.c:920 -#: ../backend/test.c:647 -#: ../backend/u12.c:546 -#: ../backend/umax.c:5176 +#: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 +#: ../backend/epson.c:3284 ../backend/epson2.c:1269 +#: ../backend/genesys.c:5607 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 +#: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 +#: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 +#: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:159 +#: ../backend/plustek.c:808 ../backend/plustek_pp.c:746 +#: ../backend/sceptre.c:702 ../backend/snapscan-options.c:494 +#: ../backend/teco1.c:1095 ../backend/teco2.c:1914 ../backend/teco3.c:920 +#: ../backend/test.c:647 ../backend/u12.c:546 ../backend/umax.c:5176 #: ../backend/umax_pp.c:580 #, no-c-format msgid "Geometry" msgstr "Scanbereich" -#: ../include/sane/saneopts.h:158 -#: ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 -#: ../backend/genesys.c:5578 -#: ../backend/gt68xx.c:672 -#: ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 -#: ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 -#: ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 -#: ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 -#: ../backend/niash.c:756 -#: ../backend/plustek.c:853 -#: ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 -#: ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 -#: ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 -#: ../backend/teco3.c:968 -#: ../backend/u12.c:592 -#: ../backend/umax.c:5226 -#: ../backend/umax_pp.c:629 +#: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 +#: ../backend/canon.c:1492 ../backend/genesys.c:5667 +#: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:854 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Farbverbesserung" -#: ../include/sane/saneopts.h:159 -#: ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 -#: ../backend/rts8891.c:2766 -#: ../backend/snapscan-options.c:816 -#: ../backend/umax.c:5565 +#: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 +#: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" msgstr "Erweitert" @@ -124,10 +98,8 @@ msgid "Bit depth" msgstr "Bittiefe" -#: ../include/sane/saneopts.h:165 -#: ../backend/canon.c:1143 -#: ../backend/leo.c:781 -#: ../backend/pixma_sane_options.c:40 +#: ../include/sane/saneopts.h:165 ../backend/canon.c:1143 +#: ../backend/leo.c:781 ../backend/pixma_sane_options.c:43 #, no-c-format msgid "Scan mode" msgstr "Scanmodus" @@ -167,8 +139,7 @@ msgid "Bottom-right y" msgstr "Unten" -#: ../include/sane/saneopts.h:173 -#: ../backend/canon.c:1219 +#: ../include/sane/saneopts.h:173 ../backend/canon.c:1219 #, no-c-format msgid "Scan resolution" msgstr "Scanauflösung" @@ -333,14 +304,10 @@ msgid "Bind X and Y resolution" msgstr "Verbinde X- und Y-Auflösung" -#: ../include/sane/saneopts.h:206 -#: ../backend/hp3900_sane.c:428 -#: ../backend/hp3900_sane.c:1021 -#: ../backend/hp3900_sane.c:1421 -#: ../backend/hp-option.c:3235 -#: ../backend/mustek_usb2.c:121 -#: ../backend/plustek.c:235 -#: ../backend/plustek_pp.c:202 +#: ../include/sane/saneopts.h:206 ../backend/hp3900_sane.c:428 +#: ../backend/hp3900_sane.c:1021 ../backend/hp3900_sane.c:1421 +#: ../backend/hp-option.c:3235 ../backend/mustek_usb2.c:121 +#: ../backend/plustek.c:236 ../backend/plustek_pp.c:202 #: ../backend/u12.c:157 #, no-c-format msgid "Negative" @@ -361,8 +328,7 @@ msgid "Bind RGB" msgstr "Verbinde RGB" -#: ../include/sane/saneopts.h:210 -#: ../backend/sm3840.c:770 +#: ../include/sane/saneopts.h:210 ../backend/sm3840.c:770 #, no-c-format msgid "Threshold" msgstr "Schwellwert" @@ -457,16 +423,19 @@ msgid "Set lamp density" msgstr "Definiere Lichtwert" -#: ../include/sane/saneopts.h:231 -#: ../backend/umax.c:5829 +#: ../include/sane/saneopts.h:231 ../backend/umax.c:5829 #, no-c-format msgid "Lamp off at exit" msgstr "Lampe beim Beenden ausschalten" #: ../include/sane/saneopts.h:245 #, no-c-format -msgid "Read-only option that specifies how many options a specific devices supports." -msgstr "Nur-Lese-Option, die angibt, wieviele Optionen ein bestimmtes Gerät unterstützt." +msgid "" +"Read-only option that specifies how many options a specific devices " +"supports." +msgstr "" +"Nur-Lese-Option, die angibt, wieviele Optionen ein bestimmtes Gerät " +"unterstützt." #: ../include/sane/saneopts.h:248 #, no-c-format @@ -500,13 +469,24 @@ #: ../include/sane/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 "Legt fest, dass alle Vorschauscans im Graustufenmodus durchgeführt werden. Bei einem Three-Pass-Scanner wird dadurch nur ein Pass benötigt, bei einem Single-Pass-Scanner wird der Speicherverbrauch und die Scanzeit verringert." +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 "" +"Legt fest, dass alle Vorschauscans im Graustufenmodus durchgeführt " +"werden. Bei einem Three-Pass-Scanner wird dadurch nur ein Pass benötigt, " +"bei einem Single-Pass-Scanner wird der Speicherverbrauch und die " +"Scanzeit verringert." #: ../include/sane/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 "Anzahl der Bits pro Farbwert, typische Werte sind 1 für Lineart- und 8 für Multibit-Scans" +msgid "" +"Number of bits per sample, typical values are 1 for \"line-art\" and 8 " +"for multibit scans." +msgstr "" +"Anzahl der Bits pro Farbwert, typische Werte sind 1 für Lineart- und 8 " +"für Multibit-Scans" #: ../include/sane/saneopts.h:268 #, no-c-format @@ -565,8 +545,12 @@ #: ../include/sane/saneopts.h:301 #, no-c-format -msgid "Specifies the width of the media. Required for automatic centering of sheet-fed scans." -msgstr "Legt die Breite des Mediums fest. Erforderlich für die automatische Zentrierung bei Einzelblatt-Scans." +msgid "" +"Specifies the width of the media. Required for automatic centering of " +"sheet-fed scans." +msgstr "" +"Legt die Breite des Mediums fest. Erforderlich für die automatische " +"Zentrierung bei Einzelblatt-Scans." #: ../include/sane/saneopts.h:305 #, no-c-format @@ -575,13 +559,22 @@ #: ../include/sane/saneopts.h:308 #, no-c-format -msgid "Determines whether a builtin or a custom gamma-table should be used." -msgstr "Bestimmt ob die scannerinterne oder eine benutzerdefinierte Gammatabelle verwendet wird." +msgid "" +"Determines whether a builtin or a custom gamma-table should be used." +msgstr "" +"Bestimmt ob die scannerinterne oder eine benutzerdefinierte Gammatabelle " +"verwendet wird." #: ../include/sane/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 "Gamma-Korrekturtabelle. Im Farbmodus wirkt sich diese Option auf die rote, grüne und blaue Farbkomponente aus. Es ist also eine Helligkeits-Gammatabelle." +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 "" +"Gamma-Korrekturtabelle. Im Farbmodus wirkt sich diese Option auf die " +"rote, grüne und blaue Farbkomponente aus. Es ist also eine Helligkeits-" +"Gammatabelle." #: ../include/sane/saneopts.h:317 #, no-c-format @@ -610,22 +603,25 @@ #: ../include/sane/saneopts.h:332 #, no-c-format -msgid "Selects the \"graininess\" of the acquired image. Smaller values result in sharper images." -msgstr "Legt die \"Körnigkeit\" des gescannten Bildes fest. Kleinere Werte ergeben schärfere Bilder." +msgid "" +"Selects the \"graininess\" of the acquired image. Smaller values result " +"in sharper images." +msgstr "" +"Legt die \"Körnigkeit\" des gescannten Bildes fest. Kleinere Werte " +"ergeben schärfere Bilder." #: ../include/sane/saneopts.h:336 #, no-c-format msgid "Selects whether the acquired image should be halftoned (dithered)." msgstr "Legt fest, ob das Bild im Halbtonmodus (Dithering) gescannt wird." -#: ../include/sane/saneopts.h:339 -#: ../include/sane/saneopts.h:354 +#: ../include/sane/saneopts.h:339 ../include/sane/saneopts.h:354 #, no-c-format msgid "Selects what radiance level should be considered \"black\"." -msgstr "Bestimmt, welcher Helligkeitswert als Schwarz angesehen werden soll." +msgstr "" +"Bestimmt, welcher Helligkeitswert als Schwarz angesehen werden soll." -#: ../include/sane/saneopts.h:342 -#: ../include/sane/saneopts.h:363 +#: ../include/sane/saneopts.h:342 ../include/sane/saneopts.h:363 #, no-c-format msgid "Selects what radiance level should be considered \"white\"." msgstr "Bestimmt, welcher Helligkeitswert als Weiß angesehen werden soll." @@ -633,47 +629,67 @@ #: ../include/sane/saneopts.h:345 #, no-c-format msgid "Selects what red radiance level should be considered \"white\"." -msgstr "Bestimmt, welcher Helligkeitswert der roten Komponente als \"Weiß\" angesehen werden soll." +msgstr "" +"Bestimmt, welcher Helligkeitswert der roten Komponente als \"Weiß\" " +"angesehen werden soll." #: ../include/sane/saneopts.h:348 #, no-c-format msgid "Selects what green radiance level should be considered \"white\"." -msgstr "Bestimmt, welcher Helligkeitswert der grünen Komponente als \"Weiß\" angesehen werden soll." +msgstr "" +"Bestimmt, welcher Helligkeitswert der grünen Komponente als \"Weiß\" " +"angesehen werden soll." #: ../include/sane/saneopts.h:351 #, no-c-format msgid "Selects what blue radiance level should be considered \"white\"." -msgstr "Bestimmt, welcher Helligkeitswert der blauen Komponente als \"Weiß\" angesehen werden soll." +msgstr "" +"Bestimmt, welcher Helligkeitswert der blauen Komponente als \"Weiß\" " +"angesehen werden soll." #: ../include/sane/saneopts.h:356 #, no-c-format msgid "Selects what red radiance level should be considered \"black\"." -msgstr "Bestimmt, welcher Helligkeitswert der roten Komponente als Schwarz angesehen werden soll." +msgstr "" +"Bestimmt, welcher Helligkeitswert der roten Komponente als Schwarz " +"angesehen werden soll." #: ../include/sane/saneopts.h:358 #, no-c-format msgid "Selects what green radiance level should be considered \"black\"." -msgstr "Bestimmt, welcher Helligkeitswert der grünen Komponente als Schwarz angesehen werden soll." +msgstr "" +"Bestimmt, welcher Helligkeitswert der grünen Komponente als Schwarz " +"angesehen werden soll." #: ../include/sane/saneopts.h:360 #, no-c-format msgid "Selects what blue radiance level should be considered \"black\"." -msgstr "Bestimmt, welcher Helligkeitswert der blauen Komponente als Schwarz angesehen werden soll." +msgstr "" +"Bestimmt, welcher Helligkeitswert der blauen Komponente als Schwarz " +"angesehen werden soll." #: ../include/sane/saneopts.h:365 #, no-c-format msgid "Selects what red radiance level should be considered \"full red\"." -msgstr "Bestimmt, welcher Helligkeitswert der roten Komponente als Weiß angesehen werden soll." +msgstr "" +"Bestimmt, welcher Helligkeitswert der roten Komponente als Weiß " +"angesehen werden soll." #: ../include/sane/saneopts.h:367 #, no-c-format -msgid "Selects what green radiance level should be considered \"full green\"." -msgstr "Bestimmt, welcher Helligkeitswert der grünen Komponente als Weiß angesehen werden soll." +msgid "" +"Selects what green radiance level should be considered \"full green\"." +msgstr "" +"Bestimmt, welcher Helligkeitswert der grünen Komponente als Weiß " +"angesehen werden soll." #: ../include/sane/saneopts.h:370 #, no-c-format -msgid "Selects what blue radiance level should be considered \"full blue\"." -msgstr "Bestimmt, welcher Helligkeitswert der blauen Komponente als Weiß angesehen werden soll." +msgid "" +"Selects what blue radiance level should be considered \"full blue\"." +msgstr "" +"Bestimmt, welcher Helligkeitswert der blauen Komponente als Weiß " +"angesehen werden soll." #: ../include/sane/saneopts.h:374 #, no-c-format @@ -682,8 +698,12 @@ #: ../include/sane/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 "Der Sättigungsgrad steuert die Belichtung einesmit einer Kamera aufgenommenen Bildes. Höhere Werte sorgen für eine stärkere Belichtung." +msgid "" +"The saturation level controls the amount of \"blooming\" that occurs " +"when acquiring an image with a camera. Larger values cause more blooming." +msgstr "" +"Der Sättigungsgrad steuert die Belichtung einesmit einer Kamera " +"aufgenommenen Bildes. Höhere Werte sorgen für eine stärkere Belichtung." #: ../include/sane/saneopts.h:382 #, no-c-format @@ -692,12 +712,16 @@ #: ../include/sane/saneopts.h:385 #, no-c-format -msgid "Sets the size of the halftoning (dithering) pattern used when scanning halftoned images." -msgstr "Legt die Größe der für den Scanvorgang verwendeten Halbtonmatrix fest." +msgid "" +"Sets the size of the halftoning (dithering) pattern used when scanning " +"halftoned images." +msgstr "" +"Legt die Größe der für den Scanvorgang verwendeten Halbtonmatrix fest." #: ../include/sane/saneopts.h:389 #, no-c-format -msgid "Defines the halftoning (dithering) pattern for scanning halftoned images." +msgid "" +"Defines the halftoning (dithering) pattern for scanning halftoned images." msgstr "Definiert die für den Scanvorgang zu verwendende Halbton-Matrix." #: ../include/sane/saneopts.h:393 @@ -720,8 +744,7 @@ msgid "Use lens that doubles optical resolution" msgstr "Benutze die Linse, mit der die optische Auflösung verdoppelt wird." -#: ../include/sane/saneopts.h:401 -#: ../include/sane/saneopts.h:413 +#: ../include/sane/saneopts.h:401 ../include/sane/saneopts.h:413 #, no-c-format msgid "In RGB-mode use same values for each color" msgstr "Benutze die gleichen Wert für alle Farben im RGB Modus." @@ -729,7 +752,8 @@ #: ../include/sane/saneopts.h:403 #, no-c-format msgid "Select minimum-brightness to get a white point" -msgstr "Wähle die minimale Helligkeit, die als Weiß betrachtet werden soll." +msgstr "" +"Wähle die minimale Helligkeit, die als Weiß betrachtet werden soll." #: ../include/sane/saneopts.h:405 #, no-c-format @@ -764,17 +788,20 @@ #: ../include/sane/saneopts.h:419 #, no-c-format msgid "Define exposure-time for red calibration" -msgstr "Bestimmt die Beleuchtungszeit für die Kalibrierung der roten Komponente." +msgstr "" +"Bestimmt die Beleuchtungszeit für die Kalibrierung der roten Komponente." #: ../include/sane/saneopts.h:421 #, no-c-format msgid "Define exposure-time for green calibration" -msgstr "Bestimmt die Beleuchtungszeit für die Kalibrierung der grünen Komponente." +msgstr "" +"Bestimmt die Beleuchtungszeit für die Kalibrierung der grünen Komponente." #: ../include/sane/saneopts.h:423 #, no-c-format msgid "Define exposure-time for blue calibration" -msgstr "Bestimmt die Beleuchtungszeit für die Kalibrierung der blauen Komponente." +msgstr "" +"Bestimmt die Beleuchtungszeit für die Kalibrierung der blauen Komponente." #: ../include/sane/saneopts.h:425 #, no-c-format @@ -816,8 +843,7 @@ msgid "Enable selection of lamp density" msgstr "Ermögliche Auswahl der Lichtwerte." -#: ../include/sane/saneopts.h:441 -#: ../backend/umax.c:5830 +#: ../include/sane/saneopts.h:441 ../backend/umax.c:5830 #, no-c-format msgid "Turn off lamp when program exits" msgstr "Schalte Lampe beim Beenden des Programms aus" @@ -940,7 +966,7 @@ #: ../backend/sane_strstatus.c:86 #, no-c-format msgid "Error during device I/O" -msgstr " Copy text Fehler während der Datenübermittlung des Geräts" +msgstr "\tCopy text \tFehler während der Datenübermittlung des Geräts" #: ../backend/sane_strstatus.c:89 #, no-c-format @@ -962,8 +988,7 @@ msgid "Scanner mechanism locked for transport" msgstr "Mechanik des Scanners für den Transport verriegelt" -#: ../backend/artec_eplus48u.c:2874 -#: ../backend/pnm.c:282 +#: ../backend/artec_eplus48u.c:2874 ../backend/pnm.c:282 #, no-c-format msgid "Defaults" msgstr "Defaulteinstellungen" @@ -973,8 +998,7 @@ msgid "Set default values for enhancement controls." msgstr "Auf Voreinstellungen für Verbesserungen zurücksetzen." -#: ../backend/artec_eplus48u.c:2932 -#: ../backend/canon.c:1610 +#: ../backend/artec_eplus48u.c:2932 ../backend/canon.c:1610 #, no-c-format msgid "Calibration" msgstr "Kalibrierung" @@ -986,8 +1010,13 @@ #: ../backend/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 "Wenn diese Option eingeschaltet ist, wird vor dem nächsten Scan eine Kalibrierung durchgeführt. Ansonsten findet die Kalibrierung nur vor dem ersten Scan statt." +msgid "" +"If enabled, the device will be calibrated before the next scan. " +"Otherwise, calibration is performed only before the first start." +msgstr "" +"Wenn diese Option eingeschaltet ist, wird vor dem nächsten Scan eine " +"Kalibrierung durchgeführt. Ansonsten findet die Kalibrierung nur vor dem " +"ersten Scan statt." #: ../backend/artec_eplus48u.c:2954 #, no-c-format @@ -996,90 +1025,93 @@ #: ../backend/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 "Ist diese Option eingeschaltet, dann wird während der Kalibrierung nur die Shading-Korrektur durchgeführt. Andere Kalibrierungswerte werden aus der Konfigurationsdatei oder aus den Voreinstellungen des Backends übernommen." +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 "" +"Ist diese Option eingeschaltet, dann wird während der Kalibrierung nur " +"die Shading-Korrektur durchgeführt. Andere Kalibrierungswerte werden aus " +"der Konfigurationsdatei oder aus den Voreinstellungen des Backends " +"übernommen." #: ../backend/artec_eplus48u.c:2967 #, no-c-format msgid "Button state" msgstr "Schalter Status" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Nummer des zu scannenden Bildes" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Wählt die Nummer des zu scannenden Bildes aus" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Duplexscan" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format -msgid "Duplex scan provide a scan of the front and back side of the document" -msgstr "Duplex Scan ermöglicht das Scannen der Vorder- und Rückseite eines Dokuments." +msgid "" +"Duplex scan provide a scan of the front and back side of the document" +msgstr "" +"Duplex Scan ermöglicht das Scannen der Vorder- und Rückseite eines " +"Dokuments." -#: ../backend/canon630u.c:158 +#: ../backend/canon630u.c:159 #, no-c-format msgid "Calibrate Scanner" msgstr "Scanner kalibrieren" -#: ../backend/canon630u.c:159 +#: ../backend/canon630u.c:160 #, no-c-format msgid "Force scanner calibration before scan" msgstr "Erzwinge Scannerkalibrierung vor dem Scannen" -#: ../backend/canon630u.c:258 -#: ../backend/umax1220u.c:208 +#: ../backend/canon630u.c:259 ../backend/umax1220u.c:208 #, no-c-format msgid "Grayscale scan" msgstr "Graustufen-Scan" -#: ../backend/canon630u.c:259 -#: ../backend/umax1220u.c:209 +#: ../backend/canon630u.c:260 ../backend/umax1220u.c:209 #, no-c-format msgid "Do a grayscale rather than color scan" msgstr "Führe einen Graustufen-Scan statt eines Farb-Scans durch" -#: ../backend/canon630u.c:305 +#: ../backend/canon630u.c:306 #, no-c-format msgid "Analog Gain" msgstr "Analoge Verstärkung" -#: ../backend/canon630u.c:306 +#: ../backend/canon630u.c:307 #, no-c-format msgid "Increase or decrease the analog gain of the CCD array" -msgstr "Vergrößere oder verkleinere die analoge Verstärkung des CCD-Sensors" +msgstr "" +"Vergrößere oder verkleinere die analoge Verstärkung des CCD-Sensors" -#: ../backend/canon630u.c:346 -#: ../backend/epson.h:68 -#: ../backend/epson2.h:72 +#: ../backend/canon630u.c:347 ../backend/epson.h:68 ../backend/epson2.h:74 #, no-c-format msgid "Gamma Correction" msgstr "Gammakorrektur" -#: ../backend/canon630u.c:347 +#: ../backend/canon630u.c:348 #, no-c-format msgid "Selects the gamma corrected transfer curve" msgstr "Wählt die korrigierte Gammakurve aus." -#: ../backend/canon.c:149 -#: ../backend/canon-sane.c:1323 +#: ../backend/canon.c:149 ../backend/canon-sane.c:1323 #, no-c-format msgid "Raw" msgstr "Rohdaten" -#: ../backend/canon.c:157 -#: ../backend/canon-sane.c:732 -#: ../backend/canon-sane.c:940 -#: ../backend/canon-sane.c:1076 -#: ../backend/canon-sane.c:1318 -#: ../backend/canon-sane.c:1487 +#: ../backend/canon.c:157 ../backend/canon-sane.c:732 +#: ../backend/canon-sane.c:940 ../backend/canon-sane.c:1076 +#: ../backend/canon-sane.c:1318 ../backend/canon-sane.c:1487 #: ../backend/canon-sane.c:1636 #, no-c-format msgid "Fine color" @@ -1090,20 +1122,17 @@ msgid "No transparency correction" msgstr "Keine Transparenzkorrektur" -#: ../backend/canon.c:170 -#: ../backend/canon-sane.c:680 +#: ../backend/canon.c:170 ../backend/canon-sane.c:680 #, no-c-format msgid "Correction according to film type" msgstr "Korrektur entsprechend des Filmtyps" -#: ../backend/canon.c:171 -#: ../backend/canon-sane.c:674 +#: ../backend/canon.c:171 ../backend/canon-sane.c:674 #, no-c-format msgid "Correction according to transparency ratio" msgstr "Korrektur entsprechend des Seitenverhältnisses" -#: ../backend/canon.c:176 -#: ../backend/canon-sane.c:776 +#: ../backend/canon.c:176 ../backend/canon-sane.c:776 #, no-c-format msgid "Negatives" msgstr "Negative" @@ -1113,8 +1142,8 @@ msgid "Slides" msgstr "Dias" -#: ../backend/canon.c:186 -#: ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatik" @@ -1139,12 +1168,8 @@ msgid "rounded parameter" msgstr "Gerundete Parameter" -#: ../backend/canon.c:375 -#: ../backend/canon.c:391 -#: ../backend/canon.c:426 -#: ../backend/canon.c:476 -#: ../backend/canon.c:494 -#: ../backend/canon.c:537 +#: ../backend/canon.c:375 ../backend/canon.c:391 ../backend/canon.c:426 +#: ../backend/canon.c:476 ../backend/canon.c:494 ../backend/canon.c:537 #, no-c-format msgid "unknown" msgstr "unbekannt" @@ -1304,27 +1329,20 @@ msgid "problem not analyzed (unknown SCSI class)" msgstr "Problem nicht analysiert (unbekannte SCSI-Klasse)" -#: ../backend/canon.c:865 -#: ../backend/canon.c:880 +#: ../backend/canon.c:865 ../backend/canon.c:880 #, no-c-format msgid "film scanner" msgstr "Filmscanner" -#: ../backend/canon.c:895 -#: ../backend/canon.c:910 -#: ../backend/canon.c:925 -#: ../backend/hp3900_sane.c:1683 -#: ../backend/plustek.c:1334 -#: ../backend/plustek_pp.c:1014 -#: ../backend/sceptre.c:593 -#: ../backend/teco2.c:1836 -#: ../backend/u12.c:851 +#: ../backend/canon.c:895 ../backend/canon.c:910 ../backend/canon.c:925 +#: ../backend/hp3900_sane.c:1683 ../backend/plustek.c:1335 +#: ../backend/plustek_pp.c:1014 ../backend/sceptre.c:593 +#: ../backend/teco2.c:1836 ../backend/u12.c:851 #, no-c-format msgid "flatbed scanner" msgstr "Flachbettscanner" -#: ../backend/canon.c:1181 -#: ../backend/epson.c:3372 +#: ../backend/canon.c:1181 ../backend/epson.c:3372 #: ../backend/epson2.c:1343 #, no-c-format msgid "Film type" @@ -1368,7 +1386,7 @@ #: ../backend/canon.c:1327 #, no-c-format msgid "Enable/disable auto focus" -msgstr "Aktiviere/Deaktiviere automatischen Fokus " +msgstr "Aktiviere/Deaktiviere automatischen Fokus\t\t" #: ../backend/canon.c:1334 #, no-c-format @@ -1388,7 +1406,8 @@ #: ../backend/canon.c:1344 #, no-c-format msgid "Set the optical system's focus position by hand (default: 128)." -msgstr "Setzt die Fokusposition des optischen System von Hand (Standard: 128)." +msgstr "" +"Setzt die Fokusposition des optischen System von Hand (Standard: 128)." #: ../backend/canon.c:1354 #, no-c-format @@ -1400,9 +1419,9 @@ msgid "Extra color adjustments" msgstr "Erweiterte Farbeinstellungen" -#: ../backend/canon.c:1532 -#: ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/canon.c:1532 ../backend/epson.c:3191 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Bild spiegeln" @@ -1474,8 +1493,10 @@ #: ../backend/canon.c:1673 #, no-c-format -msgid "Automatically eject the film from the device before exiting the program" -msgstr "Den Film automatisch aus dem Gerät auswerfen bevor das Programm schließt" +msgid "" +"Automatically eject the film from the device before exiting the program" +msgstr "" +"Den Film automatisch aus dem Gerät auswerfen bevor das Programm schließt" #: ../backend/canon.c:1682 #, no-c-format @@ -1502,8 +1523,7 @@ msgid "Disable auto document feeder and use flatbed only" msgstr "Automatischen Dokumenteinzug abschalten und nur Flachbett benutzen" -#: ../backend/canon.c:1710 -#: ../backend/canon.c:1720 +#: ../backend/canon.c:1710 ../backend/canon.c:1720 #, no-c-format msgid "Transparency unit" msgstr "Durchlichtaufsatz" @@ -1548,268 +1568,195 @@ msgid "Select the film type" msgstr "Wählt den Filmtyp aus" -#: ../backend/canon_dr.c:319 -#: ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 -#: ../backend/epson2.c:110 -#: ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 -#: ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 -#: ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 -#: ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 -#: ../backend/mustek.c:156 -#: ../backend/mustek.c:160 -#: ../backend/mustek.c:164 -#: ../backend/pixma.c:658 -#: ../backend/pixma_sane_options.c:85 -#: ../backend/snapscan-options.c:82 -#: ../backend/test.c:192 -#: ../backend/umax.c:181 +#: ../backend/canon_dr.c:338 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:114 ../backend/fujitsu.c:579 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:167 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:850 +#: ../backend/pixma_sane_options.c:88 ../backend/snapscan-options.c:82 +#: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Flachbett" -#: ../backend/canon_dr.c:320 -#: ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 -#: ../backend/kodak.c:135 +#: ../backend/canon_dr.c:339 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:580 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "Automatischer Dokumenteneinzug vorne" -#: ../backend/canon_dr.c:321 -#: ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 -#: ../backend/kodak.c:136 +#: ../backend/canon_dr.c:340 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:581 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "Automatischer Dokumenteneinzug hinten" -#: ../backend/canon_dr.c:322 -#: ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 -#: ../backend/kodak.c:137 -#: ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:341 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:582 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:861 #, no-c-format msgid "ADF Duplex" msgstr "ADF-Duplex" -#: ../backend/canon_dr.c:329 -#: ../backend/epson.c:599 -#: ../backend/epson.c:3082 -#: ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 -#: ../backend/genesys.c:102 -#: ../backend/genesys.c:109 -#: ../backend/gt68xx_low.h:136 +#: ../backend/canon_dr.c:348 ../backend/epson.c:599 +#: ../backend/epson.c:3082 ../backend/epson2.c:200 +#: ../backend/fujitsu.c:599 ../backend/genesys.c:89 +#: ../backend/genesys.c:96 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Rot" -#: ../backend/canon_dr.c:330 -#: ../backend/epson.c:600 -#: ../backend/epson.c:3078 -#: ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 -#: ../backend/genesys.c:103 -#: ../backend/genesys.c:110 -#: ../backend/gt68xx_low.h:137 +#: ../backend/canon_dr.c:349 ../backend/epson.c:600 +#: ../backend/epson.c:3078 ../backend/epson2.c:201 +#: ../backend/fujitsu.c:600 ../backend/genesys.c:90 +#: ../backend/genesys.c:97 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Grün" -#: ../backend/canon_dr.c:331 -#: ../backend/epson.c:601 -#: ../backend/epson.c:3086 -#: ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 -#: ../backend/genesys.c:104 -#: ../backend/genesys.c:111 -#: ../backend/gt68xx_low.h:138 +#: ../backend/canon_dr.c:350 ../backend/epson.c:601 +#: ../backend/epson.c:3086 ../backend/epson2.c:202 +#: ../backend/fujitsu.c:601 ../backend/genesys.c:91 +#: ../backend/genesys.c:98 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Blau" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:351 #, no-c-format msgid "Enhance Red" msgstr "Rot verstärken" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:352 #, no-c-format msgid "Enhance Green" msgstr "Grün verstärken" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:353 #, no-c-format msgid "Enhance Blue" msgstr "Blau verstärken" -#: ../backend/canon_dr.c:336 -#: ../backend/epson.c:556 -#: ../backend/epson.c:564 -#: ../backend/epson.c:576 -#: ../backend/epson.c:598 -#: ../backend/epson2.c:159 -#: ../backend/epson2.c:167 -#: ../backend/epson2.c:179 -#: ../backend/epson2.c:194 -#: ../backend/epson2.c:208 -#: ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 -#: ../backend/leo.c:109 -#: ../backend/matsushita.c:138 -#: ../backend/matsushita.c:159 -#: ../backend/matsushita.c:191 -#: ../backend/matsushita.c:213 +#: ../backend/canon_dr.c:355 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:164 +#: ../backend/epson2.c:172 ../backend/epson2.c:184 ../backend/epson2.c:199 +#: ../backend/epson2.c:213 ../backend/fujitsu.c:605 +#: ../backend/genesys.c:99 ../backend/leo.c:109 +#: ../backend/matsushita.c:138 ../backend/matsushita.c:159 +#: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 #, no-c-format msgid "None" msgstr "Kein" -#: ../backend/canon_dr.c:337 -#: ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:356 ../backend/fujitsu.c:606 #, no-c-format msgid "JPEG" msgstr "JPEG" -#: ../backend/epson.c:491 -#: ../backend/epson2.c:103 +#: ../backend/epson.c:491 ../backend/epson2.c:107 +#: ../backend/magicolor.c:160 #, no-c-format msgid "Simplex" msgstr "Einseitig" -#: ../backend/epson.c:492 -#: ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:108 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:161 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Duplex" -#: ../backend/epson.c:502 -#: ../backend/epson2.c:111 -#: ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:115 ../backend/pixma.c:867 #, no-c-format msgid "Transparency Unit" msgstr "Durchlichtaufsatz" -#: ../backend/epson.c:503 -#: ../backend/epson2.c:112 -#: ../backend/mustek.c:160 -#: ../backend/pixma.c:663 -#: ../backend/test.c:192 -#: ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:117 +#: ../backend/magicolor.c:168 ../backend/mustek.c:160 +#: ../backend/pixma.c:855 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Autom. Dokumenteneinzug" -#: ../backend/epson.c:523 -#: ../backend/epson2.c:128 +#: ../backend/epson.c:523 ../backend/epson2.c:133 #, no-c-format msgid "Positive Film" msgstr "Filmpositiv" -#: ../backend/epson.c:524 -#: ../backend/epson2.c:129 +#: ../backend/epson.c:524 ../backend/epson2.c:134 #, no-c-format msgid "Negative Film" msgstr "Filmnegativ" -#: ../backend/epson.c:529 -#: ../backend/epson2.c:136 +#: ../backend/epson.c:529 ../backend/epson2.c:141 #, no-c-format msgid "Focus on glass" msgstr "Fokus auf dem Glas" -#: ../backend/epson.c:530 -#: ../backend/epson2.c:137 +#: ../backend/epson.c:530 ../backend/epson2.c:142 #, no-c-format msgid "Focus 2.5mm above glass" msgstr "Fokus 2.5mm über dem Glas" -#: ../backend/epson.c:557 -#: ../backend/epson.c:565 -#: ../backend/epson.c:577 -#: ../backend/epson2.c:160 -#: ../backend/epson2.c:168 -#: ../backend/epson2.c:180 +#: ../backend/epson.c:557 ../backend/epson.c:565 ../backend/epson.c:577 +#: ../backend/epson2.c:165 ../backend/epson2.c:173 ../backend/epson2.c:185 #, no-c-format msgid "Halftone A (Hard Tone)" msgstr "Halbton A (hart)" -#: ../backend/epson.c:558 -#: ../backend/epson.c:566 -#: ../backend/epson.c:578 -#: ../backend/epson2.c:161 -#: ../backend/epson2.c:169 -#: ../backend/epson2.c:181 +#: ../backend/epson.c:558 ../backend/epson.c:566 ../backend/epson.c:578 +#: ../backend/epson2.c:166 ../backend/epson2.c:174 ../backend/epson2.c:186 #, no-c-format msgid "Halftone B (Soft Tone)" msgstr "Halbton B (weich)" -#: ../backend/epson.c:559 -#: ../backend/epson.c:567 -#: ../backend/epson.c:579 -#: ../backend/epson2.c:162 -#: ../backend/epson2.c:170 -#: ../backend/epson2.c:182 +#: ../backend/epson.c:559 ../backend/epson.c:567 ../backend/epson.c:579 +#: ../backend/epson2.c:167 ../backend/epson2.c:175 ../backend/epson2.c:187 #, no-c-format msgid "Halftone C (Net Screen)" msgstr "Halbton C" -#: ../backend/epson.c:568 -#: ../backend/epson.c:580 -#: ../backend/epson2.c:171 -#: ../backend/epson2.c:183 +#: ../backend/epson.c:568 ../backend/epson.c:580 ../backend/epson2.c:176 +#: ../backend/epson2.c:188 #, no-c-format msgid "Dither A (4x4 Bayer)" msgstr "Dithering A (4x4 Bayer)" -#: ../backend/epson.c:569 -#: ../backend/epson.c:581 -#: ../backend/epson2.c:172 -#: ../backend/epson2.c:184 +#: ../backend/epson.c:569 ../backend/epson.c:581 ../backend/epson2.c:177 +#: ../backend/epson2.c:189 #, no-c-format msgid "Dither B (4x4 Spiral)" msgstr "Dithering B (4x4 Spiral)" -#: ../backend/epson.c:570 -#: ../backend/epson.c:582 -#: ../backend/epson2.c:173 -#: ../backend/epson2.c:185 +#: ../backend/epson.c:570 ../backend/epson.c:582 ../backend/epson2.c:178 +#: ../backend/epson2.c:190 #, no-c-format msgid "Dither C (4x4 Net Screen)" msgstr "Dithering C (4x4 Net Screen)" -#: ../backend/epson.c:571 -#: ../backend/epson.c:583 -#: ../backend/epson2.c:174 -#: ../backend/epson2.c:186 +#: ../backend/epson.c:571 ../backend/epson.c:583 ../backend/epson2.c:179 +#: ../backend/epson2.c:191 #, no-c-format msgid "Dither D (8x4 Net Screen)" msgstr "Dithering D (8x4 Net Screen)" -#: ../backend/epson.c:584 -#: ../backend/epson2.c:187 +#: ../backend/epson.c:584 ../backend/epson2.c:192 #, no-c-format msgid "Text Enhanced Technology" msgstr "Technik zur Textverbesserung" -#: ../backend/epson.c:585 -#: ../backend/epson2.c:188 +#: ../backend/epson.c:585 ../backend/epson2.c:193 #, no-c-format msgid "Download pattern A" msgstr "Übertrage Muster A" -#: ../backend/epson.c:586 -#: ../backend/epson2.c:189 +#: ../backend/epson.c:586 ../backend/epson2.c:194 #, no-c-format msgid "Download pattern B" msgstr "Übertrage Muster B" @@ -1819,9 +1766,7 @@ msgid "No Correction" msgstr "Keine Korrektur" -#: ../backend/epson.c:632 -#: ../backend/epson.c:657 -#: ../backend/epson2.c:249 +#: ../backend/epson.c:632 ../backend/epson.c:657 ../backend/epson2.c:254 #, no-c-format msgid "User defined" msgstr "Benutzerdefiniert" @@ -1846,41 +1791,33 @@ msgid "CRT monitors" msgstr "CRT-Monitore" -#: ../backend/epson.c:656 -#: ../backend/epson2.c:248 -#: ../backend/fujitsu.c:527 -#: ../backend/hp-option.c:3226 -#: ../backend/test.c:143 +#: ../backend/epson.c:656 ../backend/epson2.c:253 ../backend/fujitsu.c:589 +#: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" msgstr "Standardeinstellung" -#: ../backend/epson.c:658 -#: ../backend/epson2.c:250 +#: ../backend/epson.c:658 ../backend/epson2.c:255 #, no-c-format msgid "High density printing" msgstr "Drucken mit hoher Auflösung" -#: ../backend/epson.c:659 -#: ../backend/epson2.c:251 +#: ../backend/epson.c:659 ../backend/epson2.c:256 #, no-c-format msgid "Low density printing" msgstr "Drucken mit geringer Auflösung" -#: ../backend/epson.c:660 -#: ../backend/epson2.c:252 +#: ../backend/epson.c:660 ../backend/epson2.c:257 #, no-c-format msgid "High contrast printing" msgstr "Drucken mit hohem Kontrast" -#: ../backend/epson.c:678 -#: ../backend/epson2.c:270 +#: ../backend/epson.c:678 ../backend/epson2.c:275 #, no-c-format msgid "User defined (Gamma=1.0)" msgstr "Benutzerdefiniert (Gamma=1.0)" -#: ../backend/epson.c:679 -#: ../backend/epson2.c:271 +#: ../backend/epson.c:679 ../backend/epson2.c:276 #, no-c-format msgid "User defined (Gamma=1.8)" msgstr "Benutzerdefiniert (Gamma=1.8)" @@ -1900,12 +1837,17 @@ msgid "A5 landscape" msgstr "A5 quer" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1915,70 +1857,54 @@ msgid "Max" msgstr "Maximal" -#: ../backend/epson.c:2799 -#: ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 -#: ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 -#: ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 -#: ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 -#: ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 -#: ../backend/niash.c:736 -#: ../backend/plustek.c:720 -#: ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 -#: ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 -#: ../backend/teco2.c:1886 -#: ../backend/test.c:306 -#: ../backend/u12.c:473 +#: ../backend/epson.c:2799 ../backend/epson2.c:954 +#: ../backend/genesys.c:5524 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:721 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 #: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Scanmodus" -#: ../backend/epson.c:2831 -#: ../backend/epson2.c:990 +#: ../backend/epson.c:2831 ../backend/epson2.c:990 #, no-c-format msgid "Selects the halftone." msgstr "Wählt den Halbton aus." -#: ../backend/epson.c:2853 -#: ../backend/epson2.c:1011 +#: ../backend/epson.c:2853 ../backend/epson2.c:1011 #, no-c-format msgid "Dropout" msgstr "Blindfarbe" -#: ../backend/epson.c:2854 -#: ../backend/epson2.c:1012 +#: ../backend/epson.c:2854 ../backend/epson2.c:1012 #, no-c-format msgid "Selects the dropout." msgstr "Wählt die Blindfarbe." -#: ../backend/epson.c:2866 -#: ../backend/epson2.c:1024 +#: ../backend/epson.c:2866 ../backend/epson2.c:1024 #, no-c-format msgid "Selects the brightness." msgstr "Wählt die Helligkeit." -#: ../backend/epson.c:2881 -#: ../backend/epson2.c:1037 +#: ../backend/epson.c:2881 ../backend/epson2.c:1037 #, no-c-format msgid "Sharpness" msgstr "Schärfe" -#: ../backend/epson.c:3017 -#: ../backend/epson2.c:1153 +#: ../backend/epson.c:3017 ../backend/epson2.c:1153 #: ../backend/epson2.c:1200 #, no-c-format msgid "Color correction" msgstr "Farbkorrektur" -#: ../backend/epson.c:3020 -#: ../backend/epson2.c:1155 +#: ../backend/epson.c:3020 ../backend/epson2.c:1155 #, no-c-format msgid "Sets the color correction table for the selected output device." msgstr "Setzt die Farbkorrekturtabelle für das ausgewählte Ausgabegerät" @@ -2068,20 +1994,17 @@ msgid "Controls blue level" msgstr "Legt den Blauwert fest" -#: ../backend/epson.c:3192 -#: ../backend/epson2.c:1234 +#: ../backend/epson.c:3192 ../backend/epson2.c:1234 #, no-c-format msgid "Mirror the image." msgstr "Das Bild spiegeln" -#: ../backend/epson.c:3218 -#: ../backend/mustek.c:4334 +#: ../backend/epson.c:3218 ../backend/mustek.c:4334 #, no-c-format msgid "Fast preview" msgstr "Schnelle Vorschau" -#: ../backend/epson.c:3231 -#: ../backend/epson2.c:1244 +#: ../backend/epson.c:3231 ../backend/epson2.c:1244 #, no-c-format msgid "Auto area segmentation" msgstr "Automatische Auswahl des Scanbereichs" @@ -2111,370 +2034,404 @@ msgid "Quick format" msgstr "Schnellformat" -#: ../backend/epson.c:3346 -#: ../backend/epson2.c:1319 +#: ../backend/epson.c:3346 ../backend/epson2.c:1319 #, no-c-format msgid "Optional equipment" msgstr "Optionales Zubehör" -#: ../backend/epson.c:3417 -#: ../backend/epson2.c:1372 +#: ../backend/epson.c:3417 ../backend/epson2.c:1372 #, no-c-format msgid "Eject" msgstr "auswerfen" -#: ../backend/epson.c:3418 -#: ../backend/epson2.c:1373 +#: ../backend/epson.c:3418 ../backend/epson2.c:1373 #, no-c-format msgid "Eject the sheet in the ADF" msgstr "Wirft das Blatt aus dem automatischen Dokumenteinzug aus" -#: ../backend/epson.c:3430 -#: ../backend/epson2.c:1383 +#: ../backend/epson.c:3430 ../backend/epson2.c:1383 #, no-c-format msgid "Auto eject" msgstr "Automatischer Auswurf" -#: ../backend/epson.c:3431 -#: ../backend/epson2.c:1385 +#: ../backend/epson.c:3431 ../backend/epson2.c:1385 #, no-c-format msgid "Eject document after scanning" msgstr "Auswurf des Dokuments nach dem Scannen" -#: ../backend/epson.c:3443 -#: ../backend/epson2.c:1395 +#: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2399 #, no-c-format msgid "ADF Mode" msgstr "ADF-Modus" -#: ../backend/epson.c:3445 -#: ../backend/epson2.c:1397 +#: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2401 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Wählt den ADF-Modus aus (einseitig/doppelseitig)" -#: ../backend/epson.c:3459 -#: ../backend/epson2.c:1409 +#: ../backend/epson.c:3459 ../backend/epson2.c:1409 #, no-c-format msgid "Bay" msgstr "Schacht" -#: ../backend/epson.c:3460 -#: ../backend/epson2.c:1410 +#: ../backend/epson.c:3460 ../backend/epson2.c:1410 #, no-c-format msgid "Select bay to scan" msgstr "Wähle den Schacht zum Scannen aus" -#: ../backend/epson.h:69 -#: ../backend/epson2.h:73 +#: ../backend/epson.h:69 ../backend/epson2.h:75 #, 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 "Wählt die Gammakorrektur aus einer Liste von vordefinierten Geräten aus oder eine benutzerdefinierte Tabelle, die in den Scanner geladen werden kann" +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 "" +"Wählt die Gammakorrektur aus einer Liste von vordefinierten Geräten aus " +"oder eine benutzerdefinierte Tabelle, die in den Scanner geladen werden " +"kann" -#: ../backend/epson.h:72 -#: ../backend/epson2.h:76 +#: ../backend/epson.h:72 ../backend/epson2.h:78 #, no-c-format msgid "Focus Position" msgstr "Fokus Position" -#: ../backend/epson.h:73 -#: ../backend/epson2.h:77 +#: ../backend/epson.h:73 ../backend/epson2.h:79 #, no-c-format -msgid "Sets the focus position to either the glass or 2.5mm above the glass" +msgid "" +"Sets the focus position to either the glass or 2.5mm above the glass" msgstr "Setzt den Fokus entweder auf das Glas oder 2.5mm darüber" -#: ../backend/epson.h:75 -#: ../backend/epson2.h:79 +#: ../backend/epson.h:75 ../backend/epson2.h:81 #, no-c-format msgid "Wait for Button" msgstr "Warte auf Knopfdruck" -#: ../backend/epson.h:76 -#: ../backend/epson2.h:80 +#: ../backend/epson.h:76 ../backend/epson2.h:82 #, 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 "Beginne mit dem Scannen erst, wenn nach dem Senden des Scankommandos der Knopf am Scanner gedrückt wird." +msgid "" +"After sending the scan command, wait until the button on the scanner is " +"pressed to actually start the scan process." +msgstr "" +"Beginne mit dem Scannen erst, wenn nach dem Senden des Scankommandos der " +"Knopf am Scanner gedrückt wird." -#: ../backend/epson2.c:97 +#: ../backend/epson2.c:101 #, no-c-format msgid "Infrared" msgstr "Infrarot" -#: ../backend/epson2.c:130 +#: ../backend/epson2.c:116 +#, no-c-format +msgid "TPU8x10" +msgstr "" + +#: ../backend/epson2.c:135 #, no-c-format msgid "Positive Slide" msgstr "Diapositiv" -#: ../backend/epson2.c:131 +#: ../backend/epson2.c:136 #, no-c-format msgid "Negative Slide" msgstr "Dianegativ" -#: ../backend/epson2.c:209 +#: ../backend/epson2.c:214 #, no-c-format msgid "Built in CCT profile" msgstr "Eingebautes CCT-Profil" -#: ../backend/epson2.c:210 +#: ../backend/epson2.c:215 #, no-c-format msgid "User defined CCT profile" msgstr "Benutzerdefiniertes CCT-Profil" -#: ../backend/fujitsu.c:528 -#: ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:590 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "An" -#: ../backend/fujitsu.c:529 -#: ../backend/hp-option.c:3159 -#: ../backend/hp-option.c:3326 -#: ../backend/hp-option.c:3339 +#: ../backend/fujitsu.c:591 ../backend/hp-option.c:3159 +#: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Aus" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:593 #, no-c-format msgid "DTC" msgstr "DTC" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "SDTC" msgstr "SDTC" -#: ../backend/fujitsu.c:534 -#: ../backend/teco1.c:1152 -#: ../backend/teco1.c:1153 -#: ../backend/teco2.c:1971 -#: ../backend/teco2.c:1972 -#: ../backend/teco3.c:977 -#: ../backend/teco3.c:978 +#: ../backend/fujitsu.c:596 ../backend/teco1.c:1152 +#: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 +#: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Halbton" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:597 #, no-c-format msgid "Diffusion" msgstr "Diffusion" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:602 #, no-c-format msgid "White" msgstr "Weiß" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:603 #, no-c-format msgid "Black" msgstr "Schwarz" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:608 #, no-c-format msgid "Continue" msgstr "Fortfahren" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:609 #, no-c-format msgid "Stop" msgstr "Stopp" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:611 #, no-c-format msgid "10mm" msgstr "10mm" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:612 #, no-c-format msgid "15mm" msgstr "15mm" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:613 #, no-c-format msgid "20mm" msgstr "20mm" -#: ../backend/fujitsu.c:553 -#: ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:615 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Horizontal" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:616 #, no-c-format msgid "Horizontal bold" msgstr "horizontal breit" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:617 #, no-c-format msgid "Horizontal narrow" msgstr "horizontal schmal" -#: ../backend/fujitsu.c:556 -#: ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:618 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Vertikal" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:619 #, no-c-format msgid "Vertical bold" msgstr "vertikal breit" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:621 #, no-c-format msgid "Top to bottom" msgstr "Oben nach unten" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:622 #, no-c-format msgid "Bottom to top" msgstr "Unten nach oben" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:624 #, no-c-format msgid "Front" msgstr "Vorne" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:625 #, no-c-format msgid "Back" msgstr "Hinten" -#: ../backend/genesys.c:118 -#: ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 -#: ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 -#: ../backend/umax.c:182 +#: ../backend/genesys.c:5749 #, no-c-format -msgid "Transparency Adapter" -msgstr "Durchlichteinheit" +msgid "Software crop" +msgstr "" + +#: ../backend/genesys.c:5750 +#, no-c-format +msgid "Request backend to remove border from pages digitally" +msgstr "" + +#: ../backend/genesys.c:5758 ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/genesys.c:5759 ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/genesys.c:5769 ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/genesys.c:5770 ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:5777 ../backend/pixma_sane_options.c:271 #, no-c-format msgid "Extras" msgstr "Extras" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:5796 ../backend/pixma_sane_options.c:293 #, no-c-format msgid "Threshold curve" -msgstr "Grenzbereichskurve" +msgstr "Schwellwertkurve" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:5797 ../backend/pixma_sane_options.c:294 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" -msgstr "Dynamische Grenzbereichskurve, von hell zu dunkel, nomalerweise 50-65" +msgstr "" +"Dynamische Schwellwertkurve, von hell zu dunkel, nomalerweise 50-65" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:5806 #, no-c-format msgid "Disable dynamic lineart" msgstr "dynamische Strichzeichnung abschalten" -#: ../backend/genesys.c:5660 -#, no-c-format -msgid "Disabel use of a software adaptative algorithm to generate lineart instead of relying on hardware lineart" -msgstr "Abschalten um einen Software angepassten Algorithmus zur Erstellung von Strichzeichnungen zu verwenden anstatt die Hardwarefunktion zu nutzen" +#: ../backend/genesys.c:5808 +#, fuzzy, no-c-format +msgid "" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." +msgstr "" +"Abschalten um einen Software angepassten Algorithmus zur Erstellung von " +"Strichzeichnungen zu verwenden anstatt die Hardwarefunktion zu nutzen" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:5823 #, no-c-format msgid "Disable interpolation" msgstr "Interpolation abschalten" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:5826 #, no-c-format -msgid "When using high resolutions where the horizontal resolution is smaller than the vertical resolution this disables horizontal interpolation." -msgstr "Wenn Sie hohe Auflösungen verwenden, bei denen die horizontale Auflösung kleiner ist als die vertikale, schaltet dies die horizontale Interpolation aus" +msgid "" +"When using high resolutions where the horizontal resolution is smaller " +"than the vertical resolution this disables horizontal interpolation." +msgstr "" +"Wenn Sie hohe Auflösungen verwenden, bei denen die horizontale Auflösung " +"kleiner ist als die vertikale, schaltet dies die horizontale " +"Interpolation aus" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:5835 #, no-c-format msgid "Color Filter" msgstr "Farbfilter" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:5838 #, no-c-format msgid "When using gray or lineart this option selects the used color." -msgstr "Wenn Graustufen oder Strichzeichnung verwendet wird, wählt diese Option die Farbe" +msgstr "" +"Wenn Graustufen oder Strichzeichnung verwendet wird, wählt diese Option " +"die Farbe" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:5864 #, no-c-format msgid "Lamp off time" msgstr "Lampenausschaltzeit" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:5867 #, 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 "Die Lampe wird nach der angegebenen Zeit (in Minuten) ausgeschaltet. Ein Wert von 0 bedeutet, dass die Lampe nich ausgeschaltet wird." +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 "" +"Die Lampe wird nach der angegebenen Zeit (in Minuten) ausgeschaltet. Ein " +"Wert von 0 bedeutet, dass die Lampe nich ausgeschaltet wird." + +#: ../backend/genesys.c:5877 +#, fuzzy, no-c-format +msgid "Lamp off during scan" +msgstr "Lampe aus während Schwarzkalibrierung" + +#: ../backend/genesys.c:5878 +#, fuzzy, no-c-format +msgid "The lamp will be turned off during scan. " +msgstr "Anzahl der Minuten, bis die Lampe nach dem Scan ausgeschaltet wird" -#: ../backend/genesys.c:5747 -#: ../backend/genesys.c:5748 +#: ../backend/genesys.c:5905 ../backend/genesys.c:5906 #, no-c-format msgid "File button" msgstr "Datei-Knopf" -#: ../backend/genesys.c:5800 -#: ../backend/genesys.c:5801 +#: ../backend/genesys.c:5958 ../backend/genesys.c:5959 #, no-c-format msgid "OCR button" msgstr "OCR-Knopf" -#: ../backend/genesys.c:5814 -#: ../backend/genesys.c:5815 +#: ../backend/genesys.c:5972 ../backend/genesys.c:5973 #, no-c-format msgid "Power button" msgstr "Einschaltknopf" -#: ../backend/genesys.c:5828 -#: ../backend/gt68xx.c:762 +#: ../backend/genesys.c:5986 ../backend/gt68xx.c:762 #, no-c-format msgid "Need calibration" msgstr "benötigt Kalibirierung" -#: ../backend/genesys.c:5829 -#: ../backend/gt68xx.c:763 +#: ../backend/genesys.c:5987 ../backend/gt68xx.c:763 #, no-c-format msgid "The scanner needs calibration for the current settings" -msgstr "Der Scanner benötigt eine Kalibrierung für die momentanen Einstellungen" +msgstr "" +"Der Scanner benötigt eine Kalibrierung für die momentanen Einstellungen" -#: ../backend/genesys.c:5842 -#: ../backend/gt68xx.c:787 -#: ../backend/gt68xx.c:788 -#: ../backend/pixma_sane_options.c:210 -#: ../backend/plustek.c:1079 +#: ../backend/genesys.c:6000 ../backend/gt68xx.c:787 +#: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:225 +#: ../backend/plustek.c:1080 #, no-c-format msgid "Buttons" msgstr "Knöpfe" -#: ../backend/genesys.c:5849 -#: ../backend/gt68xx.c:794 -#: ../backend/hp5400_sane.c:392 -#: ../backend/hp-option.h:97 -#: ../backend/niash.c:728 -#: ../backend/plustek.c:940 +#: ../backend/genesys.c:6007 ../backend/gt68xx.c:794 +#: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 +#: ../backend/niash.c:728 ../backend/plustek.c:941 #, no-c-format msgid "Calibrate" msgstr "Kalibrierung" -#: ../backend/genesys.c:5851 -#: ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6009 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "Starte den Kalibrierungsprozess mit einem Spezialblatt" -#: ../backend/genesys.c:5865 -#: ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6023 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "Kalibrierung zurücksetzen" -#: ../backend/genesys.c:5866 -#: ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6024 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "Löscht den Kalibrierungsspeicher" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Durchlichteinheit" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2483,25 +2440,29 @@ #: ../backend/gt68xx.c:479 #, no-c-format msgid "Selects which scan color is used gray mode (default: green)." -msgstr "Legt fest, welche SCanfarbe im Garustufen-Modus verwendet wird (Standardwert: Grün)." +msgstr "" +"Legt fest, welche SCanfarbe im Garustufen-Modus verwendet wird " +"(Standardwert: Grün)." -#: ../backend/gt68xx.c:560 -#: ../backend/hp3900_sane.c:1392 +#: ../backend/gt68xx.c:560 ../backend/hp3900_sane.c:1392 #: ../backend/mustek_usb2.c:410 #, no-c-format msgid "Debugging Options" msgstr "Optionen zur Fehlersuche" -#: ../backend/gt68xx.c:571 -#: ../backend/mustek_usb2.c:419 +#: ../backend/gt68xx.c:571 ../backend/mustek_usb2.c:419 #, no-c-format msgid "Automatic warmup" msgstr "Automatisches Aufwärmen" #: ../backend/gt68xx.c:573 #, no-c-format -msgid "Warm-up until the lamp's brightness is constant instead of insisting on 60 seconds warm-up time." -msgstr "Warte solange, bis die Helligkeit der Lampe konstant ist anstatt einfach 60 Sekunden zu warten." +msgid "" +"Warm-up until the lamp's brightness is constant instead of insisting on " +"60 seconds warm-up time." +msgstr "" +"Warte solange, bis die Helligkeit der Lampe konstant ist anstatt einfach " +"60 Sekunden zu warten." #: ../backend/gt68xx.c:585 #, no-c-format @@ -2510,8 +2471,13 @@ #: ../backend/gt68xx.c:587 #, no-c-format -msgid "Scan the complete scanning area including calibration strip. Be careful. Don't select the full height. For testing only." -msgstr "Scanne den gesamten möglichen Scanbereich inklusive des Kalibrierungsstreifens. Vorsicht, keine zu große Länge auswählen. Nur für Testzwecke." +msgid "" +"Scan the complete scanning area including calibration strip. Be careful. " +"Don't select the full height. For testing only." +msgstr "" +"Scanne den gesamten möglichen Scanbereich inklusive des " +"Kalibrierungsstreifens. Vorsicht, keine zu große Länge auswählen. Nur " +"für Testzwecke." #: ../backend/gt68xx.c:598 #, no-c-format @@ -2520,8 +2486,15 @@ #: ../backend/gt68xx.c:600 #, 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 "Stelle Verstärkung und Versatz automatisch ein. Wenn dies Option ausgeschaltet ist, können die Parameter des AFE (\"Analog Frontend\") manuell eingestellt werden. Diese Option is standardmäßig an. Nur für Testzwecke." +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 "" +"Stelle Verstärkung und Versatz automatisch ein. Wenn dies Option " +"ausgeschaltet ist, können die Parameter des AFE (\"Analog Frontend\") " +"manuell eingestellt werden. Diese Option is standardmäßig an. Nur für " +"Testzwecke." #: ../backend/gt68xx.c:619 #, no-c-format @@ -2530,8 +2503,15 @@ #: ../backend/gt68xx.c:621 #, 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 "Die Grobkalibrierung wird nur für den ersten Scan durchgeführt. Das funktioniert mit den meisten Scannern und kann einiges an Scanzeit sparen. Wenn die Helligkeit der Bilder von Scan zu Scan schwankt, sollte diese Option ausgeschaltet werden. Nur für Testzwecke." +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 "" +"Die Grobkalibrierung wird nur für den ersten Scan durchgeführt. Das " +"funktioniert mit den meisten Scannern und kann einiges an Scanzeit " +"sparen. Wenn die Helligkeit der Bilder von Scan zu Scan schwankt, sollte " +"diese Option ausgeschaltet werden. Nur für Testzwecke." #: ../backend/gt68xx.c:654 #, no-c-format @@ -2540,34 +2520,38 @@ #: ../backend/gt68xx.c:656 #, 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 "Anzahl der Zeilen, die der Scanschlitten zurückfährt, wenn Backtracking auftritt. Das passiert, wenn der Scanner schneller scant, als der Computer die Daten aufnehmen kann. Niedrigere Werte sorgen für schnellere Scans, erhöhen jedoch das Risiko, Zeilen zu überspringen." +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 "" +"Anzahl der Zeilen, die der Scanschlitten zurückfährt, wenn Backtracking " +"auftritt. Das passiert, wenn der Scanner schneller scant, als der " +"Computer die Daten aufnehmen kann. Niedrigere Werte sorgen für " +"schnellere Scans, erhöhen jedoch das Risiko, Zeilen zu überspringen." -#: ../backend/gt68xx.c:681 -#: ../backend/mustek_usb2.c:452 +#: ../backend/gt68xx.c:681 ../backend/mustek_usb2.c:452 #, no-c-format msgid "Gamma value" msgstr "Gammawert" -#: ../backend/gt68xx.c:683 -#: ../backend/mustek_usb2.c:454 +#: ../backend/gt68xx.c:683 ../backend/mustek_usb2.c:454 #, no-c-format msgid "Sets the gamma value of all channels." msgstr "Legt den Gammawert für alle Kanäle fest." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Geometrie" -#: ../backend/hp3500.c:1032 -#: ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Scanmodus" -#: ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1019 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1019 #: ../backend/hp-option.c:3174 #, no-c-format msgid "Slide" @@ -2581,7 +2565,8 @@ #: ../backend/hp3900_sane.c:1408 #, no-c-format msgid "Allows to test device behaviour with other supported models" -msgstr "Erlaubt Geräteverhalten mit anderen unterstützten Modellen zu testen" +msgstr "" +"Erlaubt Geräteverhalten mit anderen unterstützten Modellen zu testen" #: ../backend/hp3900_sane.c:1422 #, no-c-format @@ -2625,8 +2610,14 @@ #: ../backend/hp3900_sane.c:1485 #, 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 "Falls Gamma verwendet wird, werden Scans mit einer Farbtiefe von 16 Bit ausgeführt und danach in die gewählte Farbtiefe umgewandelt, um die Bildqualität zu verbessern. Diese Option verhindert Farbtiefen-Emulation." +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 "" +"Falls Gamma verwendet wird, werden Scans mit einer Farbtiefe von 16 Bit " +"ausgeführt und danach in die gewählte Farbtiefe umgewandelt, um die " +"Bildqualität zu verbessern. Diese Option verhindert Farbtiefen-Emulation." #: ../backend/hp3900_sane.c:1499 #, no-c-format @@ -2635,8 +2626,14 @@ #: ../backend/hp3900_sane.c:1502 #, 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 "Falls verwendet, wird das Bild im Farbmodus gescannt und dann per Software in Graustufen umgewandelt. Unter manchen Umständen verbessert dies die Bildqualität." +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 "" +"Falls verwendet, wird das Bild im Farbmodus gescannt und dann per " +"Software in Graustufen umgewandelt. Unter manchen Umständen verbessert " +"dies die Bildqualität." #: ../backend/hp3900_sane.c:1516 #, no-c-format @@ -2645,8 +2642,12 @@ #: ../backend/hp3900_sane.c:1519 #, no-c-format -msgid "If enabled, some images involved in scanner processing are saved to analyze them." -msgstr "Wenn aktiviert werden einige Bilder im Scanprozess gespeichert um sie zu analysieren." +msgid "" +"If enabled, some images involved in scanner processing are saved to " +"analyze them." +msgstr "" +"Wenn aktiviert werden einige Bilder im Scanprozess gespeichert um sie zu " +"analysieren." #: ../backend/hp3900_sane.c:1533 #, no-c-format @@ -2713,14 +2714,12 @@ msgid "This option reflects a front panel scanner button" msgstr "Diese Option spiegelt den vorderen Scannerknopf wieder" -#: ../backend/hp5400_sane.c:313 -#: ../backend/niash.c:683 +#: ../backend/hp5400_sane.c:313 ../backend/niash.c:683 #, no-c-format msgid "Image" msgstr "Bild" -#: ../backend/hp5400_sane.c:352 -#: ../backend/niash.c:711 +#: ../backend/hp5400_sane.c:352 ../backend/niash.c:711 #, no-c-format msgid "Miscellaneous" msgstr "Verschiedenes" @@ -2745,26 +2744,22 @@ msgid "Hardware internal Y position of the scanning area." msgstr "hardwareinterne Y-Position des Scanbereichs" -#: ../backend/hp5400_sane.c:381 -#: ../backend/niash.c:718 +#: ../backend/hp5400_sane.c:381 ../backend/niash.c:718 #, no-c-format msgid "Lamp status" msgstr "Lampenstatus" -#: ../backend/hp5400_sane.c:382 -#: ../backend/niash.c:719 +#: ../backend/hp5400_sane.c:382 ../backend/niash.c:719 #, no-c-format msgid "Switches the lamp on or off." msgstr "Schaltet die Lampe an oder aus" -#: ../backend/hp5400_sane.c:393 -#: ../backend/niash.c:729 +#: ../backend/hp5400_sane.c:393 ../backend/niash.c:729 #, no-c-format msgid "Calibrates for black and white level." msgstr "Kalibriert Schwarz- und Weisswert." -#: ../backend/hp5590.c:83 -#: ../backend/hp-option.c:3253 +#: ../backend/hp5590.c:83 ../backend/hp-option.c:3253 #, no-c-format msgid "ADF" msgstr "ADF" @@ -2824,14 +2819,12 @@ msgid "Bayer" msgstr "Bayer" -#: ../backend/hp-option.c:3046 -#: ../backend/hp-option.c:3097 +#: ../backend/hp-option.c:3046 ../backend/hp-option.c:3097 #, no-c-format msgid "Custom" msgstr "Benutzerdefiniert" -#: ../backend/hp-option.c:3087 -#: ../backend/hp-option.c:3143 +#: ../backend/hp-option.c:3087 ../backend/hp-option.c:3143 #: ../backend/hp-option.c:3158 #, no-c-format msgid "Auto" @@ -2867,13 +2860,10 @@ msgid "Slow" msgstr "Langsam" -#: ../backend/hp-option.c:3145 -#: ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 -#: ../backend/mustek.c:149 -#: ../backend/plustek.c:233 -#: ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:234 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normal" @@ -2918,8 +2908,7 @@ msgid "XPA" msgstr "XPA" -#: ../backend/hp-option.c:3328 -#: ../backend/hp-option.c:3341 +#: ../backend/hp-option.c:3328 ../backend/hp-option.c:3341 #, no-c-format msgid "Conditional" msgstr "Bedingt" @@ -2947,7 +2936,9 @@ #: ../backend/hp-option.h:68 #, no-c-format msgid "Enable automatic determination of threshold for line-art scans." -msgstr "Schaltet die automatische Bestimmung des Schwellwerts für den Schwarz-Weiß-Modus ein." +msgstr "" +"Schaltet die automatische Bestimmung des Schwellwerts für den Schwarz-" +"Weiß-Modus ein." #: ../backend/hp-option.h:73 #, no-c-format @@ -3011,11 +3002,18 @@ #: ../backend/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 "Bei einer längeren Belichtungszeit kann der Scanner mehr Licht auffangen. Empfohlene Werte: 175% für Fotos, 150% für normale Dias und \"Negativ\" für Negativ-Filme. Für dunkle (unterentwickelte) Bilder kann dieser Wert vergrößert werden." +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 "" +"Bei einer längeren Belichtungszeit kann der Scanner mehr Licht " +"auffangen. Empfohlene Werte: 175% für Fotos, 150% für normale Dias und " +"\"Negativ\" für Negativ-Filme. Für dunkle (unterentwickelte) Bilder kann " +"dieser Wert vergrößert werden." -#: ../backend/hp-option.h:119 -#: ../backend/hp-option.h:126 +#: ../backend/hp-option.h:119 ../backend/hp-option.h:126 #, no-c-format msgid "Color Matrix" msgstr "Farbmatrix" @@ -3078,7 +3076,8 @@ #: ../backend/hp-option.h:158 #, no-c-format msgid "Use bit depth greater eight internally, but output only eight bits." -msgstr "Benutze intern eine Frabtiefe von mehr als 8 Bit, extern aber nur 8 Bit." +msgstr "" +"Benutze intern eine Frabtiefe von mehr als 8 Bit, extern aber nur 8 Bit." #: ../backend/hp-option.h:164 #, no-c-format @@ -3100,266 +3099,850 @@ msgid "Shut off scanner lamp." msgstr "Schalte Scannerlampe aus." -#: ../backend/leo.c:110 +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 #, no-c-format -msgid "Diamond" -msgstr "Diamant" +msgid "Paper size" +msgstr "Papiergröße" -#: ../backend/leo.c:111 +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 #, no-c-format -msgid "8x8 Coarse Fatting" -msgstr "" +msgid "Automatic separation" +msgstr "Automatische Trennung" -#: ../backend/leo.c:112 +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 quer" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 #, no-c-format -msgid "8x8 Fine Fatting" +msgid "Inverse Image" msgstr "" -#: ../backend/leo.c:113 +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 #, no-c-format -msgid "8x8 Bayer" -msgstr "8x8 Bayer" +msgid "Long paper mode" +msgstr "" -#: ../backend/leo.c:114 -#, no-c-format -msgid "8x8 Vertical Line" -msgstr "8x8 Vertikale Linie" +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "Dichte Einstellungsmodus setzen" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Manueller Pre-Focus" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Manueller Pre-Focus" -#: ../backend/lexmark.c:263 -#: ../backend/umax_pp.c:715 +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 #, no-c-format -msgid "Gain" -msgstr "Verstärkung" +msgid "Double feed detection" +msgstr "" -#: ../backend/lexmark.c:264 -#: ../backend/umax_pp.c:716 +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 #, no-c-format -msgid "Color channels gain settings" -msgstr "Farbkanal Verstärkungseinstellungen" +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Schalte Duplex- (zweiseitiges) Scannen ein" -#: ../backend/lexmark.c:273 -#: ../backend/umax_pp.c:723 +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 #, no-c-format -msgid "Gray gain" -msgstr "Verstärkung grauer Kanal" +msgid "Physical size of the paper in the ADF" +msgstr "Tatsächliche Größe des Papiers im ADF" -#: ../backend/lexmark.c:274 -#: ../backend/umax_pp.c:724 +#: ../backend/kvs1025_opt.c:39 #, no-c-format -msgid "Sets gray channel gain" -msgstr "Legt die Verstärkung des grauen Kanals fest" +msgid "bw" +msgstr "" -#: ../backend/lexmark.c:287 -#: ../backend/plustek.c:1000 -#: ../backend/umax_pp.c:735 +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Halbton" + +#: ../backend/kvs1025_opt.c:41 #, no-c-format -msgid "Red gain" -msgstr "Verstärkung roter Kanal" +msgid "gray" +msgstr "" -#: ../backend/lexmark.c:288 -#: ../backend/umax_pp.c:736 +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Farbe" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 #, no-c-format -msgid "Sets red channel gain" -msgstr "Legt die Verstärkung des roten Kanals fest" +msgid "adf" +msgstr "" -#: ../backend/lexmark.c:301 -#: ../backend/plustek.c:1016 -#: ../backend/umax_pp.c:747 +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 #, no-c-format -msgid "Green gain" -msgstr "Verstärkung grüner Kanal" +msgid "fb" +msgstr "" -#: ../backend/lexmark.c:302 -#: ../backend/umax_pp.c:748 +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 #, no-c-format -msgid "Sets green channel gain" -msgstr "Legt die Verstärkung des grünen Kanals fest" +msgid "single" +msgstr "" -#: ../backend/lexmark.c:315 -#: ../backend/plustek.c:1032 -#: ../backend/umax_pp.c:759 +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Fortfahren" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Aus" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 #, no-c-format -msgid "Blue gain" -msgstr "Verstärkung blauer Kanal" +msgid "wait_doc" +msgstr "" -#: ../backend/lexmark.c:316 -#: ../backend/umax_pp.c:760 +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 #, no-c-format -msgid "Sets blue channel gain" -msgstr "Legt die Verstärkung des blauen Kanals fest" +msgid "wait_key" +msgstr "" -#: ../backend/matsushita.c:139 +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 #, no-c-format -msgid "Bayer Dither 16" -msgstr "Bayer Halbton 16" +msgid "user_def" +msgstr "" -#: ../backend/matsushita.c:140 +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 #, no-c-format -msgid "Bayer Dither 64" -msgstr "Bayer Halbton 64" +msgid "business_card" +msgstr "" -#: ../backend/matsushita.c:141 +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 #, no-c-format -msgid "Halftone Dot 32" -msgstr "Halbton Punkt 32" +msgid "Check" +msgstr "" -#: ../backend/matsushita.c:142 +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 #, no-c-format -msgid "Halftone Dot 64" -msgstr "Halbton Punkt 64" +msgid "A5" +msgstr "" -#: ../backend/matsushita.c:143 +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 #, no-c-format -msgid "Error Diffusion" -msgstr "Fehlerstreuung" +msgid "A6" +msgstr "" -#: ../backend/matsushita.c:160 +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 #, no-c-format -msgid "Mode 1" -msgstr "Modus 1" +msgid "B5" +msgstr "" -#: ../backend/matsushita.c:161 +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 #, no-c-format -msgid "Mode 2" -msgstr "Modus 2" +msgid "B6" +msgstr "" -#: ../backend/matsushita.c:162 +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 #, no-c-format -msgid "Mode 3" -msgstr "Modus 3" +msgid "Legal" +msgstr "" -#: ../backend/matsushita.c:176 +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Halbton" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Halbton" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Diffusion" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normal" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Licht" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 #, no-c-format -msgid "From white stick" -msgstr "Vom Kalibrierungstreifen" +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "Filmscanner" +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 #: ../backend/matsushita.c:177 #, no-c-format msgid "From paper" msgstr "Vom Papier" -#: ../backend/matsushita.c:212 -#, no-c-format -msgid "Smooth" +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Standardeinstellung" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" msgstr "Glatt" -#: ../backend/matsushita.c:214 -#: ../backend/matsushita.c:229 +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 #, no-c-format -msgid "Low" -msgstr "Niedrig" +msgid "none" +msgstr "" -#: ../backend/matsushita.c:215 -#: ../backend/matsushita.c:230 -#: ../backend/matsushita.c:1296 -#, no-c-format -msgid "Medium" +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Langsam" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" msgstr "Mittel" -#: ../backend/matsushita.c:216 -#: ../backend/matsushita.c:231 +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 #, no-c-format -msgid "High" -msgstr "Hoch" +msgid "high" +msgstr "" -#: ../backend/matsushita.c:245 +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 #, no-c-format -msgid "CRT" -msgstr "Röhrenmonitor" +msgid "crt" +msgstr "" -#: ../backend/matsushita.c:257 +#: ../backend/kvs1025_opt.c:230 #, no-c-format -msgid "One page" -msgstr "Eine Seite" +msgid "linier" +msgstr "" -#: ../backend/matsushita.c:258 -#, no-c-format -msgid "All pages" -msgstr "Alle Seiten" +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Rot" -#: ../backend/matsushita.c:1034 -#: ../backend/plustek.c:1332 +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Grün" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 #, no-c-format -msgid "sheetfed scanner" -msgstr "Einzugsscanner" +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Scanquelle" -#: ../backend/matsushita.c:1126 +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 #, no-c-format msgid "Feeder mode" msgstr "Einzugsmodus" -#: ../backend/matsushita.c:1127 +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 #, no-c-format msgid "Sets the feeding mode" msgstr "Legt den Einzugsmodus fest" -#: ../backend/matsushita.c:1224 +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Aktiviere/Deaktiviere automatischen Fokus\t\t" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Dichte Einstellungsmodus setzen" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Legt den Einzugsmodus fest" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Legt den Einzugsmodus fest" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 #, no-c-format msgid "Automatic threshold" msgstr "Automatischer Schwellwert" -#: ../backend/matsushita.c:1227 +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 #, no-c-format -msgid "Automatically sets brightness, contrast, white level, gamma, noise reduction and image emphasis" -msgstr "Legt automatisch Helligkeit, Kontrast, Weißwert, Gamma, Rauschunterdrückung und Bildgewichtung fest" +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Legt automatisch Helligkeit, Kontrast, Weißwert, Gamma, " +"Rauschunterdrückung und Bildgewichtung fest" +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 #: ../backend/matsushita.c:1275 #, no-c-format msgid "Noise reduction" msgstr "Rauschunterdrückung" +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 #: ../backend/matsushita.c:1277 #, no-c-format msgid "Reduce the isolated dot noise" msgstr "Reduziert das Rauschen einzelner Punkte" -#: ../backend/matsushita.c:1288 +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 #, no-c-format msgid "Image emphasis" msgstr "Bildgewichtung" -#: ../backend/matsushita.c:1289 +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 #, no-c-format msgid "Sets the image emphasis" msgstr "Wählt die Bildgewichtung." -#: ../backend/matsushita.c:1300 -#: ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:108 #, no-c-format msgid "Gamma" msgstr "Gamma" -#: ../backend/matsushita.h:209 +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Lampe an" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Schaltet die Lampe an oder aus" + +#: ../backend/kvs1025_opt.c:832 #, no-c-format -msgid "Grayscale 4 bits" -msgstr "4 Bit Graustufen" +msgid "Inverse image in B/W or halftone mode" +msgstr "" -#: ../backend/matsushita.h:210 +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Bild vertikal spiegeln." + +#: ../backend/kvs1025_opt.c:847 #, no-c-format -msgid "Grayscale 8 bits" -msgstr "8 Bit Graustufen" +msgid "jpeg compression" +msgstr "" -#: ../backend/matsushita.h:219 +#: ../backend/kvs1025_opt.c:850 #, no-c-format -msgid "Paper size" -msgstr "Papiergröße" +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" -#: ../backend/matsushita.h:220 -#: ../backend/matsushita.h:227 +#: ../backend/kvs1025_opt.c:860 #, no-c-format -msgid "Automatic separation" -msgstr "Automatische Trennung" +msgid "Rotate image clockwise" +msgstr "" -#: ../backend/matsushita.h:223 +#: ../backend/kvs1025_opt.c:862 #, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Schalte Duplex- (zweiseitiges) Scannen ein" +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" -#: ../backend/matsushita.h:225 +#: ../backend/kvs1025_opt.c:872 #, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Tatsächliche Größe des Papiers im ADF" +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Gammakorrektur" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Drucken mit hoher Auflösung" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Drucken mit geringer Auflösung" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Diffusion" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Keine Korrektur" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normal" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Farbverbesserung" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Automatischer Schwellwert" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Automatischer Schwellwert" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Legt die Reihenfolge der Frames fest" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Schatten Blau" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Verschiebt Rot nach Blau" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + +#: ../backend/leo.c:110 +#, no-c-format +msgid "Diamond" +msgstr "Diamant" + +#: ../backend/leo.c:111 +#, no-c-format +msgid "8x8 Coarse Fatting" +msgstr "" + +#: ../backend/leo.c:112 +#, no-c-format +msgid "8x8 Fine Fatting" +msgstr "" + +#: ../backend/leo.c:113 +#, no-c-format +msgid "8x8 Bayer" +msgstr "8x8 Bayer" + +#: ../backend/leo.c:114 +#, no-c-format +msgid "8x8 Vertical Line" +msgstr "8x8 Vertikale Linie" + +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 +#, no-c-format +msgid "Gain" +msgstr "Verstärkung" + +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 +#, no-c-format +msgid "Color channels gain settings" +msgstr "Farbkanal Verstärkungseinstellungen" + +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 +#, no-c-format +msgid "Gray gain" +msgstr "Verstärkung grauer Kanal" + +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 +#, no-c-format +msgid "Sets gray channel gain" +msgstr "Legt die Verstärkung des grauen Kanals fest" + +#: ../backend/lexmark.c:297 ../backend/plustek.c:1001 +#: ../backend/umax_pp.c:735 +#, no-c-format +msgid "Red gain" +msgstr "Verstärkung roter Kanal" + +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 +#, no-c-format +msgid "Sets red channel gain" +msgstr "Legt die Verstärkung des roten Kanals fest" + +#: ../backend/lexmark.c:311 ../backend/plustek.c:1017 +#: ../backend/umax_pp.c:747 +#, no-c-format +msgid "Green gain" +msgstr "Verstärkung grüner Kanal" + +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 +#, no-c-format +msgid "Sets green channel gain" +msgstr "Legt die Verstärkung des grünen Kanals fest" + +#: ../backend/lexmark.c:325 ../backend/plustek.c:1033 +#: ../backend/umax_pp.c:759 +#, no-c-format +msgid "Blue gain" +msgstr "Verstärkung blauer Kanal" + +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 +#, no-c-format +msgid "Sets blue channel gain" +msgstr "Legt die Verstärkung des blauen Kanals fest" + +#: ../backend/matsushita.c:139 +#, no-c-format +msgid "Bayer Dither 16" +msgstr "Bayer Halbton 16" + +#: ../backend/matsushita.c:140 +#, no-c-format +msgid "Bayer Dither 64" +msgstr "Bayer Halbton 64" + +#: ../backend/matsushita.c:141 +#, no-c-format +msgid "Halftone Dot 32" +msgstr "Halbton Punkt 32" + +#: ../backend/matsushita.c:142 +#, no-c-format +msgid "Halftone Dot 64" +msgstr "Halbton Punkt 64" + +#: ../backend/matsushita.c:143 +#, no-c-format +msgid "Error Diffusion" +msgstr "Fehlerstreuung" + +#: ../backend/matsushita.c:160 +#, no-c-format +msgid "Mode 1" +msgstr "Modus 1" + +#: ../backend/matsushita.c:161 +#, no-c-format +msgid "Mode 2" +msgstr "Modus 2" + +#: ../backend/matsushita.c:162 +#, no-c-format +msgid "Mode 3" +msgstr "Modus 3" + +#: ../backend/matsushita.c:176 +#, no-c-format +msgid "From white stick" +msgstr "Vom Kalibrierungstreifen" + +#: ../backend/matsushita.c:212 +#, no-c-format +msgid "Smooth" +msgstr "Glatt" + +#: ../backend/matsushita.c:214 ../backend/matsushita.c:229 +#, no-c-format +msgid "Low" +msgstr "Niedrig" + +#: ../backend/matsushita.c:215 ../backend/matsushita.c:230 +#: ../backend/matsushita.c:1296 +#, no-c-format +msgid "Medium" +msgstr "Mittel" + +#: ../backend/matsushita.c:216 ../backend/matsushita.c:231 +#, no-c-format +msgid "High" +msgstr "Hoch" + +#: ../backend/matsushita.c:245 +#, no-c-format +msgid "CRT" +msgstr "Röhrenmonitor" + +#: ../backend/matsushita.c:257 +#, no-c-format +msgid "One page" +msgstr "Eine Seite" + +#: ../backend/matsushita.c:258 +#, no-c-format +msgid "All pages" +msgstr "Alle Seiten" + +#: ../backend/matsushita.c:1034 ../backend/plustek.c:1333 +#, no-c-format +msgid "sheetfed scanner" +msgstr "Einzugsscanner" + +#: ../backend/matsushita.h:209 +#, no-c-format +msgid "Grayscale 4 bits" +msgstr "4 Bit Graustufen" + +#: ../backend/matsushita.h:210 +#, no-c-format +msgid "Grayscale 8 bits" +msgstr "8 Bit Graustufen" #: ../backend/microtek2.h:601 #, no-c-format @@ -3384,7 +3967,9 @@ #: ../backend/microtek2.h:608 #, no-c-format msgid "If checked the scanner does not perform backtracking" -msgstr "wenn aktiviert, erfolgt kein Rücklauf des Scankopfes während der Datenübertragung" +msgstr "" +"wenn aktiviert, erfolgt kein Rücklauf des Scankopfes während der " +"Datenübertragung" #: ../backend/microtek2.h:612 #, no-c-format @@ -3403,8 +3988,11 @@ #: ../backend/microtek2.h:617 #, no-c-format -msgid "If checked the color calibration before a scan is done by the backend" -msgstr "einige Scanner benötigen eine Kalibrierung durch die Software, sonst entstehen senkrechte Streifen im Bild" +msgid "" +"If checked the color calibration before a scan is done by the backend" +msgstr "" +"einige Scanner benötigen eine Kalibrierung durch die Software, sonst " +"entstehen senkrechte Streifen im Bild" #: ../backend/microtek2.h:621 #, no-c-format @@ -3414,16 +4002,17 @@ #: ../backend/microtek2.h:622 #, no-c-format msgid "This option turns off the lamp of the flatbed during a scan" -msgstr "Bei der Benutzung des LIGHTLID 35 Durchlichtadapters wird während des Scans die Flachbett - Lampe ausgeschaltet um besseren Kontrast zu erreichen" +msgstr "" +"Bei der Benutzung des LIGHTLID 35 Durchlichtadapters wird während des " +"Scans die Flachbett - Lampe ausgeschaltet um besseren Kontrast zu " +"erreichen" -#: ../backend/microtek2.h:626 -#: ../backend/snapscan-options.c:375 +#: ../backend/microtek2.h:626 ../backend/snapscan-options.c:375 #, no-c-format msgid "Quality scan" msgstr "Hohe Qualität" -#: ../backend/microtek2.h:627 -#: ../backend/snapscan-options.c:376 +#: ../backend/microtek2.h:627 ../backend/snapscan-options.c:376 #, no-c-format msgid "Highest quality but lower speed" msgstr "Hohe Qualität bei geringer Geschwindigkeit" @@ -3445,13 +4034,12 @@ #: ../backend/microtek2.h:635 #, no-c-format -msgid "If checked the backend automatically tries to determine an optimal value for the threshold." -msgstr "Bei einem Strichzeichnungsscan versucht die Software einen optimalen Wert für die schwarz/weiß- Schwelle zu bestimmen" - -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Gammakorrektur" +msgid "" +"If checked the backend automatically tries to determine an optimal value " +"for the threshold." +msgstr "" +"Bei einem Strichzeichnungsscan versucht die Software einen optimalen " +"Wert für die schwarz/weiß- Schwelle zu bestimmen" #: ../backend/microtek2.h:641 #, no-c-format @@ -3515,8 +4103,11 @@ #: ../backend/microtek2.h:670 #, no-c-format -msgid "Selects the colour band, \"Master\" means that all colours are affected." -msgstr "Wählt den Farbkanal; \"Master\" bedeutet, dass alle Farben beeinflusst werden" +msgid "" +"Selects the colour band, \"Master\" means that all colours are affected." +msgstr "" +"Wählt den Farbkanal; \"Master\" bedeutet, dass alle Farben beeinflusst " +"werden" #: ../backend/microtek2.h:674 #, no-c-format @@ -3720,8 +4311,13 @@ #: ../backend/mustek.c:4335 #, 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 "Legt fest, dass alle Vorschau-Scans im schnellsten Modus (mit geringer Qualität) durchgeführt werden. Das kann ein Schwarzweißmodus oder ein Modus mit niedriger Auflösung sein." +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 "" +"Legt fest, dass alle Vorschau-Scans im schnellsten Modus (mit geringer " +"Qualität) durchgeführt werden. Das kann ein Schwarzweißmodus oder ein " +"Modus mit niedriger Auflösung sein." #: ../backend/mustek.c:4343 #, no-c-format @@ -3731,7 +4327,8 @@ #: ../backend/mustek.c:4344 #, no-c-format msgid "Set the time (in minutes) after which the lamp is shut off." -msgstr "Legt die Zeit (in Minuten) fest, nach der die Lampe ausgeschaltet wird." +msgstr "" +"Legt die Zeit (in Minuten) fest, nach der die Lampe ausgeschaltet wird." #: ../backend/mustek.c:4355 #, no-c-format @@ -3751,7 +4348,8 @@ #: ../backend/mustek.c:4434 #, no-c-format msgid "Controls the brightness of the red channel of the acquired image." -msgstr "Stellt die Helligkeit der roten Komponente des gescannten Bildes ein." +msgstr "" +"Stellt die Helligkeit der roten Komponente des gescannten Bildes ein." #: ../backend/mustek.c:4446 #, no-c-format @@ -3761,7 +4359,8 @@ #: ../backend/mustek.c:4447 #, no-c-format msgid "Controls the brightness of the green channel of the acquired image." -msgstr "Stellt die Helligkeit der grünen Komponente des gescannten Bildes ein." +msgstr "" +"Stellt die Helligkeit der grünen Komponente des gescannten Bildes ein." #: ../backend/mustek.c:4459 #, no-c-format @@ -3771,7 +4370,8 @@ #: ../backend/mustek.c:4460 #, no-c-format msgid "Controls the brightness of the blue channel of the acquired image." -msgstr "Stellt die Helligkeit der blauen Komponente des gescannten Bildes ein." +msgstr "" +"Stellt die Helligkeit der blauen Komponente des gescannten Bildes ein." #: ../backend/mustek.c:4485 #, no-c-format @@ -3781,7 +4381,8 @@ #: ../backend/mustek.c:4486 #, no-c-format msgid "Controls the contrast of the red channel of the acquired image." -msgstr "Stellt den Kontrast der roten Komponente des gescannten Bildes ein." +msgstr "" +"Stellt den Kontrast der roten Komponente des gescannten Bildes ein." #: ../backend/mustek.c:4498 #, no-c-format @@ -3791,7 +4392,8 @@ #: ../backend/mustek.c:4499 #, no-c-format msgid "Controls the contrast of the green channel of the acquired image." -msgstr "Stellt den Kontrast der grünen Komponente des gescannten Bildes ein." +msgstr "" +"Stellt den Kontrast der grünen Komponente des gescannten Bildes ein." #: ../backend/mustek.c:4511 #, no-c-format @@ -3801,15 +4403,15 @@ #: ../backend/mustek.c:4512 #, no-c-format msgid "Controls the contrast of the blue channel of the acquired image." -msgstr "Stellt den Kontrast der blauen Komponente des gescannten Bildes ein." +msgstr "" +"Stellt den Kontrast der blauen Komponente des gescannten Bildes ein." #: ../backend/mustek_usb2.c:105 #, no-c-format msgid "Color48" msgstr "Farbe 48" -#: ../backend/mustek_usb2.c:106 -#: ../backend/mustek_usb2.c:114 +#: ../backend/mustek_usb2.c:106 ../backend/mustek_usb2.c:114 #, no-c-format msgid "Color24" msgstr "Farbe 24" @@ -3836,195 +4438,241 @@ #: ../backend/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 "Warte solange, bis die Helligkeit der Lampe konstant ist anstatt einfach 40 Sekunden zu warten." +msgid "" +"Warm-up until the lamp's brightness is constant instead of insisting on " +"40 seconds warm-up time." +msgstr "" +"Warte solange, bis die Helligkeit der Lampe konstant ist anstatt einfach " +"40 Sekunden zu warten." + +#: ../backend/pixma.c:357 +#, no-c-format +msgid "Negative color" +msgstr "Negativfilm Farbe" -#: ../backend/pixma_sane_options.c:91 +#: ../backend/pixma.c:362 +#, no-c-format +msgid "Negative gray" +msgstr "Negativfilm Graustufen" + +#: ../backend/pixma.c:369 +#, no-c-format +msgid "48 bits color" +msgstr "48 Bit Farbe" + +#: ../backend/pixma.c:374 +#, no-c-format +msgid "16 bits gray" +msgstr "16 Bit Graustufen" + +#: ../backend/pixma_sane_options.c:80 +#, no-c-format +msgid "" +"Selects the scan source (such as a document-feeder). Set source before " +"mode and resolution. Resets mode and resolution to auto values." +msgstr "" +"Legt die Scanquelle fest (wie z.B. Dokumenteneinzug). Die Scanquelle " +"muss vor Scanmodus und Scanauflösung ausgewählt werden. Setzt die " +"Einstellungen für Scanmodus und Scanauflösung zurück." + +#: ../backend/pixma_sane_options.c:94 #, no-c-format msgid "Button-controlled scan" msgstr "Scanen auf Knopfdruck" -#: ../backend/pixma_sane_options.c:94 +#: ../backend/pixma_sane_options.c:95 #, 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 "Falls aktiviert startet der Scanprozess nicht automatisch. Zum Starten drücken Sie die Taste \"SCAN\" beim MP1500 oder \"COLOR\" bei anderen Modellen. Zum Abbrechen drücken Sie die Taste \"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 "" +"Falls aktiviert startet der Scanprozess nicht automatisch. Zum Starten " +"drücken Sie die Taste \"SCAN\" beim MP1500 oder \"COLOR\" bei anderen " +"Modellen. Zum Abbrechen drücken Sie die Taste \"GRAY\"." -#: ../backend/pixma_sane_options.c:216 +#: ../backend/pixma_sane_options.c:143 +#, no-c-format +msgid "Gamma function exponent" +msgstr "Gamma-Exponent" + +#: ../backend/pixma_sane_options.c:144 +#, no-c-format +msgid "Changes intensity of midtones" +msgstr "Verändert die Intensität der mittleren Farbtöne" + +#: ../backend/pixma_sane_options.c:231 #, no-c-format msgid "Update button state" msgstr "Knopfstatus aktualisieren" -#: ../backend/pixma_sane_options.c:228 +#: ../backend/pixma_sane_options.c:243 #, no-c-format msgid "Button 1" msgstr "Knopf 1" -#: ../backend/pixma_sane_options.c:242 +#: ../backend/pixma_sane_options.c:257 #, no-c-format msgid "Button 2" msgstr "Knopf 2" -#: ../backend/plustek.c:234 -#: ../backend/plustek_pp.c:201 +#: ../backend/plustek.c:235 ../backend/plustek_pp.c:201 #: ../backend/u12.c:156 #, no-c-format msgid "Transparency" msgstr "Durchlicht" -#: ../backend/plustek.c:912 +#: ../backend/plustek.c:913 #, no-c-format msgid "Device-Settings" msgstr "Geräteeinstellungen" -#: ../backend/plustek.c:919 +#: ../backend/plustek.c:920 #, no-c-format msgid "Lampswitch" msgstr "Lampenschalter" -#: ../backend/plustek.c:920 +#: ../backend/plustek.c:921 #, no-c-format msgid "Manually switching the lamp(s)." msgstr "Lampe(n) ein-/ausschalten." -#: ../backend/plustek.c:925 +#: ../backend/plustek.c:926 #, no-c-format msgid "Lamp off during dark calibration" msgstr "Lampe aus während Schwarzkalibrierung" -#: ../backend/plustek.c:926 +#: ../backend/plustek.c:927 #, no-c-format msgid "Always switches lamp off when doing dark calibration." msgstr "Schaltet die Lampe imerr während der Schwarzkalibrierung aus." -#: ../backend/plustek.c:934 +#: ../backend/plustek.c:935 #, no-c-format msgid "Calibration data cache" msgstr "Kalibrierungsdatenspeicher" -#: ../backend/plustek.c:935 +#: ../backend/plustek.c:936 #, no-c-format msgid "Enables or disables calibration data cache." msgstr "Schaltet Kalibrierungsdatenspeicher ein oder aus." -#: ../backend/plustek.c:941 +#: ../backend/plustek.c:942 #, no-c-format msgid "Performs calibration" msgstr "Führt Kalibrierung durch" -#: ../backend/plustek.c:958 +#: ../backend/plustek.c:959 #, no-c-format msgid "Speedup sensor" msgstr "Sensorbeschleunigung" -#: ../backend/plustek.c:959 +#: ../backend/plustek.c:960 #, no-c-format msgid "Enables or disables speeding up sensor movement." msgstr "Schaltet Sensorbeschleunigung an oder ab." -#: ../backend/plustek.c:973 +#: ../backend/plustek.c:974 #, no-c-format msgid "Warmup-time" msgstr "Aufwärmzeit" -#: ../backend/plustek.c:974 +#: ../backend/plustek.c:975 #, no-c-format msgid "Warmup-time in seconds." msgstr "Aufwärmzeit in Sekunden." -#: ../backend/plustek.c:986 +#: ../backend/plustek.c:987 #, no-c-format msgid "Lampoff-time" msgstr "Lampenausschaltzeit" -#: ../backend/plustek.c:987 +#: ../backend/plustek.c:988 #, no-c-format msgid "Lampoff-time in seconds." msgstr "Lampenausschaltzeit in Sekunden." -#: ../backend/plustek.c:994 +#: ../backend/plustek.c:995 #, no-c-format msgid "Analog frontend" msgstr "Analog Frontend" -#: ../backend/plustek.c:1001 +#: ../backend/plustek.c:1002 #, no-c-format msgid "Red gain value of the AFE" msgstr "Verstärkung roter Kanal des AD-Wandlers." -#: ../backend/plustek.c:1008 -#: ../backend/umax_pp.c:792 +#: ../backend/plustek.c:1009 ../backend/umax_pp.c:792 #, no-c-format msgid "Red offset" msgstr "Offset roter Kanal" -#: ../backend/plustek.c:1009 +#: ../backend/plustek.c:1010 #, no-c-format msgid "Red offset value of the AFE" msgstr "Offset roter Kanal des AD-Wandlers." -#: ../backend/plustek.c:1017 +#: ../backend/plustek.c:1018 #, no-c-format msgid "Green gain value of the AFE" msgstr "Verstärkung grüner Kanal des AD-Wandlers." -#: ../backend/plustek.c:1024 -#: ../backend/umax_pp.c:804 +#: ../backend/plustek.c:1025 ../backend/umax_pp.c:804 #, no-c-format msgid "Green offset" msgstr "Offset grüner Kanal" -#: ../backend/plustek.c:1025 +#: ../backend/plustek.c:1026 #, no-c-format msgid "Green offset value of the AFE" msgstr "Offset grüner Kanal des AD-Wandlers." -#: ../backend/plustek.c:1033 +#: ../backend/plustek.c:1034 #, no-c-format msgid "Blue gain value of the AFE" msgstr "Verstärkung blauer Kanal des AD-Wandlers." -#: ../backend/plustek.c:1040 -#: ../backend/umax_pp.c:816 +#: ../backend/plustek.c:1041 ../backend/umax_pp.c:816 #, no-c-format msgid "Blue offset" msgstr "Offset blauer Kanal" -#: ../backend/plustek.c:1041 +#: ../backend/plustek.c:1042 #, no-c-format msgid "Blue offset value of the AFE" msgstr "Offset blauer Kanal des AD-Wandlers." -#: ../backend/plustek.c:1048 +#: ../backend/plustek.c:1049 #, no-c-format msgid "Red lamp off" msgstr "Ausschaltzeitpunkt rote Lampe" -#: ../backend/plustek.c:1049 +#: ../backend/plustek.c:1050 #, no-c-format msgid "Defines red lamp off parameter" msgstr "Definiert den Ausschaltzeitpunkt der roten Lampe." -#: ../backend/plustek.c:1056 +#: ../backend/plustek.c:1057 #, no-c-format msgid "Green lamp off" msgstr "Ausschaltzeitpunkt grüne Lampe" -#: ../backend/plustek.c:1057 +#: ../backend/plustek.c:1058 #, no-c-format msgid "Defines green lamp off parameter" msgstr "Definiert den Ausschaltzeitpunkt der grünen Lampe." -#: ../backend/plustek.c:1064 +#: ../backend/plustek.c:1065 #, no-c-format msgid "Blue lamp off" msgstr "Ausschaltzeitpunkt blaue Lampe" -#: ../backend/plustek.c:1065 +#: ../backend/plustek.c:1066 #, no-c-format msgid "Defines blue lamp off parameter" msgstr "Definiert den Ausschaltzeitpunkt der blauen Lampe." -#: ../backend/plustek.c:1095 +#: ../backend/plustek.c:1096 #, no-c-format msgid "This option reflects the status of the scanner buttons." msgstr "Diese Option spiegelt den Zustand der Scannerknöpfe wider." @@ -4076,8 +4724,12 @@ #: ../backend/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 "Simuliere einen Three-Pass Scanner, indem hintereinander je ein Frame für jede Grundfarbe übertragen wird. Die Reihenfolge ist grün-blau-rot." +msgid "" +"Simulate a three-pass scanner by returning 3 separate frames. For " +"kicks, it returns green, then blue, then red." +msgstr "" +"Simuliere einen Three-Pass Scanner, indem hintereinander je ein Frame " +"für jede Grundfarbe übertragen wird. Die Reihenfolge ist grün-blau-rot." #: ../backend/pnm.c:267 #, no-c-format @@ -4086,13 +4738,23 @@ #: ../backend/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 "Simuliere einen Handscanner. Bei Handscannern steht meistens die Bildhöhe nicht von vornherein fest. Stattdessen geben sie eine Höhe von -1 zurück. Mit dieser Option kann man prüfen, ob das Frontend damit richtig umgehen kann." +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 "" +"Simuliere einen Handscanner. Bei Handscannern steht meistens die " +"Bildhöhe nicht von vornherein fest. Stattdessen geben sie eine Höhe von -" +"1 zurück. Mit dieser Option kann man prüfen, ob das Frontend damit " +"richtig umgehen kann." #: ../backend/pnm.c:283 #, no-c-format -msgid "Set default values for enhancement controls (brightness & contrast)." -msgstr "Stellt die Farbverbesserungseinstellungen (Helligkeit und Kontrast) auf Defaultwerte." +msgid "" +"Set default values for enhancement controls (brightness & contrast)." +msgstr "" +"Stellt die Farbverbesserungseinstellungen (Helligkeit und Kontrast) auf " +"Defaultwerte." #: ../backend/pnm.c:295 #, no-c-format @@ -4131,8 +4793,12 @@ #: ../backend/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 "Zwinge das Backend dazu, nach einem Aufruf von sane_read() den Statuscode SANE_STATUS_EOF zurückzuliefern." +msgid "" +"Force the backend to return the status code SANE_STATUS_EOF after " +"sane_read() has been called." +msgstr "" +"Zwinge das Backend dazu, nach einem Aufruf von sane_read() den " +"Statuscode SANE_STATUS_EOF zurückzuliefern." #: ../backend/pnm.c:416 #, no-c-format @@ -4141,8 +4807,12 @@ #: ../backend/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 "Zwinge das Backend dazu, nach einem Aufruf von sane_read() den Statuscode SANE_STATUS_JAMMED zurückzuliefern." +msgid "" +"Force the backend to return the status code SANE_STATUS_JAMMED after " +"sane_read() has been called." +msgstr "" +"Zwinge das Backend dazu, nach einem Aufruf von sane_read() den " +"Statuscode SANE_STATUS_JAMMED zurückzuliefern." #: ../backend/pnm.c:430 #, no-c-format @@ -4151,8 +4821,12 @@ #: ../backend/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 "Zwinge das Backend dazu, nach einem Aufruf von sane_read() den Statuscode SANE_STATUS_NO_DOCS zurückzuliefern." +msgid "" +"Force the backend to return the status code SANE_STATUS_NO_DOCS after " +"sane_read() has been called." +msgstr "" +"Zwinge das Backend dazu, nach einem Aufruf von sane_read() den " +"Statuscode SANE_STATUS_NO_DOCS zurückzuliefern." #: ../backend/pnm.c:443 #, no-c-format @@ -4161,8 +4835,12 @@ #: ../backend/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 "Zwinge das Backend dazu, nach einem Aufruf von sane_read() den Statuscode SANE_STATUS_COVER_OPEN zurückzuliefern." +msgid "" +"Force the backend to return the status code SANE_STATUS_COVER_OPEN after " +"sane_read() has been called." +msgstr "" +"Zwinge das Backend dazu, nach einem Aufruf von sane_read() den " +"Statuscode SANE_STATUS_COVER_OPEN zurückzuliefern." #: ../backend/pnm.c:456 #, no-c-format @@ -4171,8 +4849,12 @@ #: ../backend/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 "Zwinge das Backend dazu, nach einem Aufruf von sane_read() den Statuscode SANE_STATUS_IO_ERROR zurückzuliefern." +msgid "" +"Force the backend to return the status code SANE_STATUS_IO_ERROR after " +"sane_read() has been called." +msgstr "" +"Zwinge das Backend dazu, nach einem Aufruf von sane_read() den " +"Statuscode SANE_STATUS_IO_ERROR zurückzuliefern." #: ../backend/pnm.c:469 #, no-c-format @@ -4181,8 +4863,12 @@ #: ../backend/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 "Zwinge das Backend dazu, nach einem Aufruf von sane_read() den Statuscode SANE_STATUS_NO_MEM zurückzuliefern." +msgid "" +"Force the backend to return the status code SANE_STATUS_NO_MEM after " +"sane_read() has been called." +msgstr "" +"Zwinge das Backend dazu, nach einem Aufruf von sane_read() den " +"Statuscode SANE_STATUS_NO_MEM zurückzuliefern." #: ../backend/pnm.c:483 #, no-c-format @@ -4191,36 +4877,36 @@ #: ../backend/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 "Zwinge das Backend dazu, nach einem Aufruf von sane_read() den Statuscode SANE_STATUS_ACCESS_DENIED zurückzuliefern." +msgid "" +"Force the backend to return the status code SANE_STATUS_ACCESS_DENIED " +"after sane_read() has been called." +msgstr "" +"Zwinge das Backend dazu, nach einem Aufruf von sane_read() den " +"Statuscode SANE_STATUS_ACCESS_DENIED zurückzuliefern." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "Diese Option zeigt den Zustand eines Scannerknopfes an." -#: ../backend/rts8891.c:2775 -#: ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Lampe an" -#: ../backend/rts8891.c:2776 -#: ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Schalte Scannerlampe ein" -#: ../backend/rts8891.c:2786 -#: ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Lampe aus" -#: ../backend/rts8891.c:2787 -#: ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" @@ -4278,8 +4964,20 @@ #: ../backend/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 "Anzahl der Zeilen, die pro SCSI Lesevorgang angefordert werden. Eine Änderung dieses Parameters erlaubt die Feineinstellung der Geschwindigkeit, mit der Daten vom Scanner gelesen werden. Wenn die Geschwindigkeit zu niedrig ist, muss der Scanner in regelmäßigen Abständen mitten im Scanvorgang anhalten. Falls sie zu groß ist, reagiert die Scan-Anwendung möglicherweise nicht mehr auf Eingaben und das System kann unbenutzbar werden." +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 "" +"Anzahl der Zeilen, die pro SCSI Lesevorgang angefordert werden. Eine " +"Änderung dieses Parameters erlaubt die Feineinstellung der " +"Geschwindigkeit, mit der Daten vom Scanner gelesen werden. Wenn die " +"Geschwindigkeit zu niedrig ist, muss der Scanner in regelmäßigen " +"Abständen mitten im Scanvorgang anhalten. Falls sie zu groß ist, " +"reagiert die Scan-Anwendung möglicherweise nicht mehr auf Eingaben und " +"das System kann unbenutzbar werden." #: ../backend/snapscan-options.c:436 #, no-c-format @@ -4288,8 +4986,12 @@ #: ../backend/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 "Wählt den Scanmodus für die Vorschau aus. Vorschau in Graustufen ist normalerweise der beste Kompromiss aus Geschwindigkeit und Detailtreue." +msgid "" +"Select the mode for previews. Greyscale previews usually give the best " +"combination of speed and detail." +msgstr "" +"Wählt den Scanmodus für die Vorschau aus. Vorschau in Graustufen ist " +"normalerweise der beste Kompromiss aus Geschwindigkeit und Detailtreue." #: ../backend/snapscan-options.c:545 #, no-c-format @@ -4298,8 +5000,12 @@ #: ../backend/snapscan-options.c:547 #, no-c-format -msgid "Provides standard scanning areas for photographs, printed pages and the like." -msgstr "Stellt Standardgrößen für Fotographien, bedruckte Seiten etc. zur Verfügung." +msgid "" +"Provides standard scanning areas for photographs, printed pages and the " +"like." +msgstr "" +"Stellt Standardgrößen für Fotographien, bedruckte Seiten etc. zur " +"Verfügung." #: ../backend/snapscan-options.c:823 #, no-c-format @@ -4351,22 +5057,24 @@ msgid "Grid" msgstr "Gitter" -#: ../backend/test.c:163 -#: ../backend/test.c:171 +#: ../backend/test.c:163 ../backend/test.c:171 #, no-c-format msgid "First entry" msgstr "Erster Eintrag" -#: ../backend/test.c:163 -#: ../backend/test.c:171 +#: ../backend/test.c:163 ../backend/test.c:171 #, no-c-format msgid "Second entry" msgstr "Zweiter Eintrag" #: ../backend/test.c:165 #, no-c-format -msgid "This is the very long third entry. Maybe the frontend has an idea how to display it" -msgstr "Dies ist der sehr lange dritte Eintrag. Vielleicht weiß das Frontend, wie man ihn darstellen kann." +msgid "" +"This is the very long third entry. Maybe the frontend has an idea how to " +"display it" +msgstr "" +"Dies ist der sehr lange dritte Eintrag. Vielleicht weiß das Frontend, " +"wie man ihn darstellen kann." #: ../backend/test.c:348 #, no-c-format @@ -4375,8 +5083,16 @@ #: ../backend/test.c:349 #, 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 "Simuliere einen Handscanner. Bei Handscannern steht meistens die Bildhöhe nicht von vornherein fest. Stattdessen geben sie eine Höhe von -1 zurück. Mit dieser Option kann man prüfen, ob das Frontend damit richtig umgehen kann." +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 "" +"Simuliere einen Handscanner. Bei Handscannern steht meistens die " +"Bildhöhe nicht von vornherein fest. Stattdessen geben sie eine Höhe von -" +"1 zurück. Mit dieser Option kann man prüfen, ob das Frontend damit " +"richtig umgehen kann." #: ../backend/test.c:366 #, no-c-format @@ -4385,8 +5101,12 @@ #: ../backend/test.c:367 #, no-c-format -msgid "Simulate a three-pass scanner. In color mode, three frames are transmitted." -msgstr "Simuliere einen Three-Pass-Scanner. Im Farbmodus werden drei Frames übertragen." +msgid "" +"Simulate a three-pass scanner. In color mode, three frames are " +"transmitted." +msgstr "" +"Simuliere einen Three-Pass-Scanner. Im Farbmodus werden drei Frames " +"übertragen." #: ../backend/test.c:382 #, no-c-format @@ -4400,8 +5120,12 @@ #: ../backend/test.c:416 #, no-c-format -msgid "If Automatic Document Feeder is selected, the feeder will be 'empty' after 10 scans." -msgstr "Falls der automatische Vorlageneinzug ausgewählt ist, meldet der Einzug \"leer\" nach 10 Scans." +msgid "" +"If Automatic Document Feeder is selected, the feeder will be 'empty' " +"after 10 scans." +msgstr "" +"Falls der automatische Vorlageneinzug ausgewählt ist, meldet der Einzug " +"\"leer\" nach 10 Scans." #: ../backend/test.c:431 #, no-c-format @@ -4420,13 +5144,16 @@ "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 "" "Wählt die Art des Testbildes aus. Verfügbare Testbilder:\n" "Komplett schwarz: füllt das ganze Bild schwarz.\n" "Komplett weiß: füllt das ganze Bild weiß.\n" -"Farbmuster: zeichnet verschiedene Farbmuster, die vom ausgewählten Modus abhängen.\n" -"Gitter: zeichnet ein Schwarz-Weiß-Gitter mit einer Höhe und Breite der einzelnen Felder von jeweils 10 mm." +"Farbmuster: zeichnet verschiedene Farbmuster, die vom ausgewählten Modus " +"abhängen.\n" +"Gitter: zeichnet ein Schwarz-Weiß-Gitter mit einer Höhe und Breite der " +"einzelnen Felder von jeweils 10 mm." #: ../backend/test.c:467 #, no-c-format @@ -4435,8 +5162,15 @@ #: ../backend/test.c:468 #, 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 "Tausche das untere und das obere Byte der Bilddaten im 16-Bit-Modus aus. Diese Option kann dazu benutzt werden, den 16-Bit-Modus der Frontends zu testen, beispielsweise um festzustellen, ob das Frontend die richtige Endianness verwendet." +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 "" +"Tausche das untere und das obere Byte der Bilddaten im 16-Bit-Modus aus. " +"Diese Option kann dazu benutzt werden, den 16-Bit-Modus der Frontends zu " +"testen, beispielsweise um festzustellen, ob das Frontend die richtige " +"Endianness verwendet." #: ../backend/test.c:484 #, no-c-format @@ -4446,7 +5180,9 @@ #: ../backend/test.c:485 #, no-c-format msgid "Limit the amount of data transferred with each call to sane_read()." -msgstr "Begrenzt die Menge an Daten, die mit jedem Aufruf von sane_read() übertragen wird." +msgstr "" +"Begrenzt die Menge an Daten, die mit jedem Aufruf von sane_read() " +"übertragen wird." #: ../backend/test.c:498 #, no-c-format @@ -4455,8 +5191,11 @@ #: ../backend/test.c:499 #, no-c-format -msgid "The (maximum) amount of data transferred with each call to sane_read()." -msgstr "Die (maximale) Menge and Daten, die bei jedem Aufruf von sane_read() übertragen wird." +msgid "" +"The (maximum) amount of data transferred with each call to sane_read()." +msgstr "" +"Die (maximale) Menge and Daten, die bei jedem Aufruf von sane_read() " +"übertragen wird." #: ../backend/test.c:514 #, no-c-format @@ -4475,8 +5214,11 @@ #: ../backend/test.c:528 #, no-c-format -msgid "How long to wait after transferring each buffer of data through the pipe." -msgstr "Legt fest, wie lange nach der Übertragung eines Datenpuffers durch die Pipe gewartet wird." +msgid "" +"How long to wait after transferring each buffer of data through the pipe." +msgstr "" +"Legt fest, wie lange nach der Übertragung eines Datenpuffers durch die " +"Pipe gewartet wird." #: ../backend/test.c:543 #, no-c-format @@ -4485,8 +5227,14 @@ #: ../backend/test.c:545 #, 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 "Legt den Rückgabewert von sane_read() fest. \"Default\" ist die normale Einstellung für's Scannen. Alle anderen Rückgabewerte dienen dazu, das Verhalten des Frontends festzustellen." +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 "" +"Legt den Rückgabewert von sane_read() fest. \"Default\" ist die normale " +"Einstellung für's Scannen. Alle anderen Rückgabewerte dienen dazu, das " +"Verhalten des Frontends festzustellen." #: ../backend/test.c:562 #, no-c-format @@ -4505,8 +5253,12 @@ #: ../backend/test.c:578 #, no-c-format -msgid "Return fuzzy lines and bytes per line when sane_parameters() is called before sane_start()." -msgstr "Gebe ungenaue Werte für die Anzahl der Zeilen und die Bytes pro Zeile zurück, wenn sane_parameters() vor sane_start() aufgerufen wird." +msgid "" +"Return fuzzy lines and bytes per line when sane_parameters() is called " +"before sane_start()." +msgstr "" +"Gebe ungenaue Werte für die Anzahl der Zeilen und die Bytes pro Zeile " +"zurück, wenn sane_parameters() vor sane_start() aufgerufen wird." #: ../backend/test.c:591 #, no-c-format @@ -4516,7 +5268,9 @@ #: ../backend/test.c:592 #, no-c-format msgid "Use non-blocking IO for sane_read() if supported by the frontend." -msgstr "Verwende nichtblockierndes IO für sane_read(), wenn das durch das Frontend unterstützt wird." +msgstr "" +"Verwende nichtblockierndes IO für sane_read(), wenn das durch das " +"Frontend unterstützt wird." #: ../backend/test.c:605 #, no-c-format @@ -4525,8 +5279,12 @@ #: ../backend/test.c:606 #, no-c-format -msgid "Offer a select filedescriptor for detecting if sane_read() will return data." -msgstr "Biete einen Select-Dateideskriptor an, damit das Frontend erkennen kann, ob sane_read() Daten zurückliefern würde." +msgid "" +"Offer a select filedescriptor for detecting if sane_read() will return " +"data." +msgstr "" +"Biete einen Select-Dateideskriptor an, damit das Frontend erkennen kann, " +"ob sane_read() Daten zurückliefern würde." #: ../backend/test.c:619 #, no-c-format @@ -4535,8 +5293,13 @@ #: ../backend/test.c:620 #, 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 "Schalte verschiedene Testoptionen ein. Mit diesen Optionen kann man die Fähigkeit des Frontends feststellen, die verschiedenen Typen von SANE-Optionen darzustellen und zu ändern." +msgid "" +"Enable various test options. This is for testing the ability of " +"frontends to view and modify all the different SANE option types." +msgstr "" +"Schalte verschiedene Testoptionen ein. Mit diesen Optionen kann man die " +"Fähigkeit des Frontends feststellen, die verschiedenen Typen von SANE-" +"Optionen darzustellen und zu ändern." #: ../backend/test.c:634 #, no-c-format @@ -4560,8 +5323,13 @@ #: ../backend/test.c:727 #, 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) Dies ist eine Bool-Testoption, welche die Fähigkeiten \"soft select\" und \"soft detect\" (und \"advanced\") hat. Also eine ganz normale Bool-Option." +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) Dies ist eine Bool-Testoption, welche die Fähigkeiten \"soft select" +"\" und \"soft detect\" (und \"advanced\") hat. Also eine ganz normale " +"Bool-Option." #: ../backend/test.c:743 #, no-c-format @@ -4570,8 +5338,15 @@ #: ../backend/test.c:745 #, 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) Dies ist eine Bool-Testoption, welche die Fähigkeiten \"hard select\" und \"soft detect\" (und \"advanced\") hat. Das bedeutet, dass die Option nicht vom Frontend geändert werden kann, sondern vom Benutzer (z. B. indem er einen Knopf am Gerät drückt)." +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) Dies ist eine Bool-Testoption, welche die Fähigkeiten \"hard select" +"\" und \"soft detect\" (und \"advanced\") hat. Das bedeutet, dass die " +"Option nicht vom Frontend geändert werden kann, sondern vom Benutzer (z. " +"B. indem er einen Knopf am Gerät drückt)." #: ../backend/test.c:762 #, no-c-format @@ -4580,8 +5355,16 @@ #: ../backend/test.c:763 #, 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) Dies is eine Bool-Testoption, welche die Fähigkieten \"hard select\" (und \"advanced\") hat. Das bedeutet, dass die Option nicht vom Frontend geändert werden kann, sondern vom Benutzer (z. B. indem er einen Knopf am Gerät drückt). Außerdem kann sie nicht vom Frontend gelesen werden." +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) Dies is eine Bool-Testoption, welche die Fähigkieten \"hard select" +"\" (und \"advanced\") hat. Das bedeutet, dass die Option " +"nicht vom Frontend geändert " +"werden kann, sondern vom Benutzer (z. B. indem er einen Knopf am " +"Gerät drückt). Außerdem kann sie nicht vom Frontend gelesen werden." #: ../backend/test.c:781 #, no-c-format @@ -4590,8 +5373,12 @@ #: ../backend/test.c:782 #, 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) Die ist eine Bool-Testoption, welche die Fähigkeiten \"soft detect\" (und \"advanced\") hat. Das heißt, dass dies eine Nur-Lese-Option ist." +msgid "" +"(4/6) Bool test option that has soft detect (and advanced) capabilities. " +"That means the option is read-only." +msgstr "" +"(4/6) Die ist eine Bool-Testoption, welche die Fähigkeiten \"soft detect" +"\" (und \"advanced\") hat. Das heißt, dass dies eine Nur-Lese-Option ist." #: ../backend/test.c:798 #, no-c-format @@ -4600,8 +5387,12 @@ #: ../backend/test.c:799 #, no-c-format -msgid "(5/6) Bool test option that has soft select, soft detect, and emulated (and advanced) capabilities." -msgstr "(5/6) Dies ist eine Bool-Testoption, welche die Fähigkeiten \"soft select\", \"soft detect\", und \"emulated\" (und \"advanced\") hat." +msgid "" +"(5/6) Bool test option that has soft select, soft detect, and emulated " +"(and advanced) capabilities." +msgstr "" +"(5/6) Dies ist eine Bool-Testoption, welche die Fähigkeiten \"soft select" +"\", \"soft detect\", und \"emulated\" (und \"advanced\") hat." #: ../backend/test.c:815 #, no-c-format @@ -4610,8 +5401,14 @@ #: ../backend/test.c:816 #, 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) Dies ist eine Bool-Testoption, welche die Fähigkeiten \"soft select\", \"soft detect\", und \"automatic\" (und \"advanced\") hat. Diese Option kann vom Backend automatisch gesetzt werden." +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) Dies ist eine Bool-Testoption, welche die Fähigkeiten \"soft select" +"\", \"soft detect\", und \"automatic\" (und \"advanced\") hat. Diese " +"Option kann vom Backend automatisch gesetzt werden." #: ../backend/test.c:833 #, no-c-format @@ -4635,8 +5432,13 @@ #: ../backend/test.c:863 #, 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) Int-Testoption mit der Einheit \"Pixel\" und einer Bereichsbeschränkung. Das Minimum ist 4, das Maximum 192, und die Schrittweite ist 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) Int-Testoption mit der Einheit \"Pixel\" und einer " +"Bereichsbeschränkung. Das Minimum ist 4, das Maximum 192, und die " +"Schrittweite ist 2." #: ../backend/test.c:879 #, no-c-format @@ -4646,7 +5448,9 @@ #: ../backend/test.c:880 #, no-c-format msgid "(3/6) Int test option with unit bits and constraint word list set." -msgstr "(3/6) Int-Testoption mit der Einheit \"Bits\" und einer Wortlisten-Beschränkung." +msgstr "" +"(3/6) Int-Testoption mit der Einheit \"Bits\" und einer Wortlisten-" +"Beschränkung." #: ../backend/test.c:895 #, no-c-format @@ -4655,8 +5459,12 @@ #: ../backend/test.c:896 #, no-c-format -msgid "(4/6) Int test option with unit mm and using an array without constraints." -msgstr "(4/6) Int-Testoption mit der Einheit \"mm\" und einem Feld ohne Beschränkung." +msgid "" +"(4/6) Int test option with unit mm and using an array without " +"constraints." +msgstr "" +"(4/6) Int-Testoption mit der Einheit \"mm\" und einem Feld ohne " +"Beschränkung." #: ../backend/test.c:911 #, no-c-format @@ -4665,8 +5473,13 @@ #: ../backend/test.c:912 #, 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) Int-Testoption mit der Einheit \"dpi\" und einem Feld mit einer Bereichsbeschränkung. Das Minimum ist 4, das Maximum 192, und die Schrittweite ist 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) Int-Testoption mit der Einheit \"dpi\" und einem Feld mit einer " +"Bereichsbeschränkung. Das Minimum ist 4, das Maximum 192, und die " +"Schrittweite ist 2." #: ../backend/test.c:929 #, no-c-format @@ -4675,8 +5488,12 @@ #: ../backend/test.c:930 #, no-c-format -msgid "(6/6) Int test option with unit percent and using an array with a word list constraint." -msgstr "(6/6) Int-Testoption mit der Einheit \"Prozent\" und einem Feld mit einer Wort-Beschränkung." +msgid "" +"(6/6) Int test option with unit percent and using an array with a word " +"list constraint." +msgstr "" +"(6/6) Int-Testoption mit der Einheit \"Prozent\" und einem Feld mit " +"einer Wort-Beschränkung." #: ../backend/test.c:946 #, no-c-format @@ -4700,8 +5517,13 @@ #: ../backend/test.c:976 #, 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) Fixed-Testoption mit der Einheit \"Mikrosekunde\" und einer Bereichsbeschränkung. Das Minimum ist -42.17, das Maximum 32767.9999, und die Schrittweite ist 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) Fixed-Testoption mit der Einheit \"Mikrosekunde\" und einer " +"Bereichsbeschränkung. Das Minimum ist -42.17, das Maximum 32767.9999, " +"und die Schrittweite ist 2.0." #: ../backend/test.c:992 #, no-c-format @@ -4711,7 +5533,9 @@ #: ../backend/test.c:993 #, no-c-format msgid "(3/3) Fixed test option with no unit and constraint word list set." -msgstr "(3/3) Fixed-Testoption ohne Einheit und mit einer Wortlisten-Beschränkung." +msgstr "" +"(3/3) Fixed-Testoption ohne Einheit und mit einer Wortlisten-" +"Beschränkung." #: ../backend/test.c:1008 #, no-c-format @@ -4745,8 +5569,12 @@ #: ../backend/test.c:1060 #, no-c-format -msgid "(3/3) String test option with string list constraint. Contains some more entries..." -msgstr "(3/3) String-Testoption mit einer Stringlisten-Beschränkung. Enthält ein paar mehr Einträge..." +msgid "" +"(3/3) String test option with string list constraint. Contains some more " +"entries..." +msgstr "" +"(3/3) String-Testoption mit einer Stringlisten-Beschränkung. Enthält ein " +"paar mehr Einträge..." #: ../backend/test.c:1080 #, no-c-format @@ -4897,15 +5725,3 @@ #, no-c-format msgid "Sets blue channel offset" msgstr "Legt den Offset des blauen Kanals fest" - -#~ msgid "Grayscale" -#~ msgstr "Graustufen" - -#, fuzzy -#~ msgid "Binary" -#~ msgstr "Schwarzweiss" -#~ msgid "Display a shortened resolution list" -#~ msgstr "Zeigt eine verkürzte Auflösungsliste an" -#~ msgid "Black & White" -#~ msgstr "Schwarzweiß" - diff -Nru sane-backends-1.0.22/po/en_GB.po sane-backends-1.0.23/po/en_GB.po --- sane-backends-1.0.22/po/en_GB.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/en_GB.po 2011-07-06 20:17:25.000000000 +0000 @@ -6,10 +6,11 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2009-04-25 00:19+0100\n" "Last-Translator: Andrew Coles \n" "Language-Team: British English \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -28,9 +29,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -44,23 +47,24 @@ msgstr "Geometry" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Enhancement" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1003,22 +1007,22 @@ msgid "Button state" msgstr "Button state" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Number of the frame to scan" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Selects the number of the frame to scan" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Duplex scan" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1103,7 +1107,8 @@ msgid "Slides" msgstr "Slides" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatic" @@ -1379,7 +1384,8 @@ msgstr "Extra colour adjustments" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Mirror image" @@ -1526,85 +1532,85 @@ msgid "Select the film type" msgstr "Select the film type" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Flatbed" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, fuzzy, no-c-format msgid "ADF Front" msgstr "ADF cover open" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "ADF jam" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "ADF Duplex" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Red" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Green" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Blue" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Enhancement" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Enhancement" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Enhancement" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1612,29 +1618,32 @@ msgid "None" msgstr "None" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Simplex" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Duplex" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Transparency Unit" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Automatic Document Feeder" @@ -1746,7 +1755,7 @@ msgid "CRT monitors" msgstr "CRT monitors" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1792,12 +1801,17 @@ msgid "A5 landscape" msgstr "A5 landscape" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1808,15 +1822,17 @@ msgstr "Max" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Scan Mode" @@ -2008,11 +2024,13 @@ msgstr "Eject document after scanning" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "ADF Mode" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Selects the ADF mode (simplex/duplex)" @@ -2087,160 +2105,153 @@ msgid "User defined CCT profile" msgstr "User defined" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "On" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Off" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Dither" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Error Diffusion" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "White level" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Black level" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Conditional" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Horizontal" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Horizontal" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Horizontal" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Vertical" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Vertical" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Print" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Transparency Adapter" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Extras" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Threshold" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "Disable interpolation" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2249,22 +2260,22 @@ "When using high resolutions where the horizontal resolution is smaller " "than the vertical resolution this disables horizontal interpolation." -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, no-c-format msgid "Color Filter" msgstr "Colour Filter" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "When using grey or lineart this option selects the used colour." -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Lamp off time" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2273,60 +2284,66 @@ "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." -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Wait for button" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Wait for button" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Coarse calibration" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Force scanner calibration before scan" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Buttons" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Calibrate" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Start calibration process." -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Coarse calibration" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Calibration data cache" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Transparency Adapter" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2431,12 +2448,12 @@ msgid "Sets the gamma value of all channels." msgstr "Sets the gamma value of all channels." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Geometry Group" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Scan Mode Group" @@ -2750,9 +2767,9 @@ msgstr "Slow" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normal" @@ -2986,6 +3003,697 @@ msgid "Shut off scanner lamp." msgstr "Shut off scanner lamp." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Paper size" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Automatic separation" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 landscape" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "Set density control mode" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr " " + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr " " + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Enable Duplex (Dual-Sided) Scanning" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Physical size of the paper in the ADF" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Halftone" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Colour" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Conditional" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Off" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Halftone" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Halftone" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Error Diffusion" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normal" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Highlight" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "film scanner" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "From paper" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Default" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Smooth" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Slow" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Medium" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Red" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Green" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Scan source" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Feeder mode" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Sets the feeding mode" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Enable/disable auto focus" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Set density control mode" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Sets the feeding mode" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Sets the feeding mode" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Automatic threshold" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Noise reduction" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Reduce the isolated dot noise" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Image emphasis" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Sets the image emphasis" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Lamp on" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Switches the lamp on or off." + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Mirror image vertically." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Gamma correction" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "High density printing" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Low density printing" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Error Diffusion" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "No Correction" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normal" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Enhancement" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Automatic threshold" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Automatic threshold" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Set the order of frames" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Shadow for blue" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Shift red to blue" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3011,55 +3719,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 Vertical Line" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr " " -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Colour channels gain settings" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Grey gain" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Sets grey channel gain" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Red gain" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Sets red channel gain" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Green gain" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Sets green channel gain" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Blue gain" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Sets blue channel gain" @@ -3109,11 +3817,6 @@ msgid "From white stick" msgstr "From white stick" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "From paper" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3155,56 +3858,6 @@ msgid "sheetfed scanner" msgstr "sheetfed scanner" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Feeder mode" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Sets the feeding mode" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Automatic threshold" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Noise reduction" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Reduce the isolated dot noise" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Image emphasis" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Sets the image emphasis" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3215,26 +3868,6 @@ msgid "Grayscale 8 bits" msgstr "Greyscale 8 bits" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Paper size" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Automatic separation" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Enable Duplex (Dual-Sided) Scanning" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Physical size of the paper in the ADF" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3326,11 +3959,6 @@ "If ticked the backend automatically tries to determine an optimal value " "for the threshold." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Gamma correction" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4124,29 +4752,29 @@ "Force the backend to return the status code SANE_STATUS_ACCESS_DENIED " "after sane_read() has been called." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, fuzzy, no-c-format msgid "This option reflects the status of a scanner button." msgstr "This option reflects the status of the scanner buttons." -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Lamp on" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Turn on scanner lamp" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Lamp off" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/eo.po sane-backends-1.0.23/po/eo.po --- sane-backends-1.0.22/po/eo.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/eo.po 2011-07-06 20:17:25.000000000 +0000 @@ -10,10 +10,11 @@ msgstr "" "Project-Id-Version: sane-backends.eo\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2007-12-08 13:28+0100\n" "Last-Translator: A.C.Codazzi\n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -31,9 +32,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -47,23 +50,24 @@ msgstr "Geometrio" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Plibonigo" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1021,22 +1025,22 @@ msgid "Button state" msgstr "Stato de butono" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Nombro da skanendaj filmeroj" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Elektu nombron da skanendaj filmeroj" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Fronta-dorsa skanado" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1120,7 +1124,8 @@ msgid "Slides" msgstr "Lumbildoj" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Aŭtomata" @@ -1396,7 +1401,8 @@ msgstr "Aliaj aranĝoj de koloro" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Spegula bildo" @@ -1544,85 +1550,85 @@ msgid "Select the film type" msgstr "Ĝi elektas specon de filmo" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Fiksa ebeno" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, fuzzy, no-c-format msgid "ADF Front" msgstr "Kovrilo de ADF estas malfermita" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "ADF estas blokita" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "Fronta-dorsa ADF" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Ruĝo" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Verdo" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Bluo" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Plibonigo" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Plibonigo" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Plibonigo" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1630,29 +1636,32 @@ msgid "None" msgstr "Nenio" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Unuopa" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Fronta-dorsa" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Reguligilo de Diafaneco" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Aŭtomata Provizilo de Dokumentoj" @@ -1764,7 +1773,7 @@ msgid "CRT monitors" msgstr "CRT ekranoj" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1810,12 +1819,17 @@ msgid "A5 landscape" msgstr "A5 horizontala" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letero" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1826,15 +1840,17 @@ msgstr "Maks" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Moduso de Skanado" @@ -2027,11 +2043,13 @@ msgstr "Ĝi elpelas la dokumento post la skanado" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "Moduso por ADF" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Ĝi elektas la ADF-moduso (unuopa/fronta-dorsa)" @@ -2106,160 +2124,153 @@ msgid "User defined CCT profile" msgstr "Agordita de la uzanto" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Kondukta" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Elkluda" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Punktismo" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Difuzo de Eraro" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Nivelo de blanko" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Nivelo de nigro" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Kondiĉa" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Horizontala" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Horizontala" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Horizontala" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Vertikala" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Vertikala" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Presu" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "reguligilo de Diafaneco" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Ekstraĵoj" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Sojlo" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "Malebligu interpoladon" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2268,23 +2279,23 @@ "Kiam oni uzas altajn distingojn kun la horizontala malpli alta ol la " "verticala, la horizontala interpolado estas malebligata." -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, no-c-format msgid "Color Filter" msgstr "Filtrilo de Koloro" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" "Kiam oni uzas grizan aŭ duuman kolorojn, tiu elektas uzatan koloron." -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Ripozo de lampo" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2293,60 +2304,66 @@ "La lampo estos elŝaltata post la fiksita tempo (en minutoj). La valoro " "signifas ke la lampo neniam ripozos." -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Atendu butonon" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Atendu butonon" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Grajneca kalibrigo" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Ĝi devigas kalibrigon de skanilon antaŭ la skanado" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Butonoj" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Kalibrigu" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Startigu kalibrigadon." -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Grajneca kalibrigo" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Kaŝmemoro por kalibrigo" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "reguligilo de Diafaneco" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2453,12 +2470,12 @@ msgid "Sets the gamma value of all channels." msgstr "Ĝi agordas valoron de gama por ĉiuj kanaloj." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Geometria Grupo" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Grupo de Moduso de Skanado" @@ -2766,9 +2783,9 @@ msgstr "Malrapida" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normala" @@ -3001,6 +3018,701 @@ msgid "Shut off scanner lamp." msgstr "Ĝi elŝaltas la lampon de la skanilo." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Grando de folio" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Mem-dividado" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 horizontala" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "Ĝi ebligas moduson de la regado de denseco" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Mana prepara fokusigo" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Mana prepara fokusigo" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Ebligu frontan-dorsan skanado" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Grando de folio en provizilo" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Meznuancoj" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Koloro" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Kondiĉa" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Elkluda" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +# Bayer è il nome della persona che ha inventato questa matrice per il +# dithering. +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +# Bayer è il nome della persona che ha inventato questa matrice per il +# dithering. +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Meznuancoj" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Meznuancoj" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Difuzo de Eraro" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normala" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Lumbrilo" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "skanilo por negativoj" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "El papero" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Defaŭlto" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Milda" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Malrapida" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Meza" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Ruĝo" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Verdo" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Fonto de skanilo" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Moduso de provizilo" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Agordu moduson de provizilo" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Ĝi ebligas/malebligas aŭtomatan fokusigon" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Ĝi ebligas moduson de la regado de denseco" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Agordu moduson de provizilo" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Agordu moduson de provizilo" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Aŭtomata sojlo" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Heleco, kontrasto, nivelo de blanko, gama, redukto de bruo kaj emfazo de " +"bildo estos aŭtomate agorditaj" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Redukto de bruo" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Ĝi reduktas bruon de izolitaj punktoj" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Emfazo de bildo" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Ĝiu ebligas emfazon de bildo" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gama" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Ŝaltu lampon" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Ŝaltu aŭ elŝaltu la lampon." + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Ĝi reflektas bildon vertikale." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Korektado de gama" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Altdensa printado" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Malaltdensa printado" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Difuzo de Eraro" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Neniu korektado" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normala" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Plibonigo" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Aŭtomata sojlo" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Aŭtomata sojlo" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Agordu ordon por la bildoj" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Ombrumo laŭ bluo" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Ŝovu ruĝon al bluo" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3026,55 +3738,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 vertikal-linia" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Gajno" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Agordaĵoj pri la gajno de la kanaloj de koloro" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Gajno laŭ grizo" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Ĝi agordas la gajnon de la griza kanalo" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Gajno laŭ ruĝo" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Ĝi agordas la gajnon de la ruĝa kanalo" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Gajno laŭ verdo" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Ĝi agordas la gajnon de la verda kanalo" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Gajno laŭ bluo" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Ĝi agordas la gajnon de la blua kanalo" @@ -3124,11 +3836,6 @@ msgid "From white stick" msgstr "El blanka batoneto" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "El papero" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3170,56 +3877,6 @@ msgid "sheetfed scanner" msgstr "skaner kun aŭtomata provizilo" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Moduso de provizilo" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Agordu moduson de provizilo" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Aŭtomata sojlo" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Heleco, kontrasto, nivelo de blanko, gama, redukto de bruo kaj emfazo de " -"bildo estos aŭtomate agorditaj" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Redukto de bruo" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Ĝi reduktas bruon de izolitaj punktoj" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Emfazo de bildo" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Ĝiu ebligas emfazon de bildo" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gama" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3230,26 +3887,6 @@ msgid "Grayscale 8 bits" msgstr "Grizgamo je 8 bitoj" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Grando de folio" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Mem-dividado" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Ebligu frontan-dorsan skanado" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Grando de folio en provizilo" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3342,11 +3979,6 @@ "Se ĝi estas markita, la interna interfaco aŭtomate provas determini " "optimuman valoron de sojlo." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Korektado de gama" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4144,29 +4776,29 @@ "Ĝi perfortas la internan interfacon revenigi la valoron pri stato " "SANE_STATUS_ACCESS_DENIED post la alvoko de la funkcio sane_read()." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, fuzzy, no-c-format msgid "This option reflects the status of a scanner button." msgstr "Tiuj ĉi opcioj agas sur la stato de la butonoj de la skanilo." -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Ŝaltu lampon" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Ĝi ŝaltas la lampon de la skanilo" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Elŝaltu lampon" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/es.po sane-backends-1.0.23/po/es.po --- sane-backends-1.0.22/po/es.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/es.po 2011-07-06 20:17:25.000000000 +0000 @@ -6,10 +6,11 @@ msgstr "" "Project-Id-Version: sane-backends\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2009-06-25 10:22+0100\n" "Last-Translator: Miguel Anxo Bouzada \n" "Language-Team: GALPon MiniNo \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -30,9 +31,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -46,23 +49,24 @@ msgstr "Geometría" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Mejora" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -597,8 +601,8 @@ "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." +"Selecciona el «granulado» de la imagen obtenida. Valores más pequeños " +"dan como resultado imágenes mejor definidas." #: ../include/sane/saneopts.h:336 #, no-c-format @@ -687,9 +691,9 @@ "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." +"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." #: ../include/sane/saneopts.h:382 #, no-c-format @@ -1025,22 +1029,22 @@ msgid "Button state" msgstr "Botón de estado" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Número de muestra a escanear" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Selecciona el número de muestra a escanear" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Escaneo a dos caras" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1126,7 +1130,8 @@ msgid "Slides" msgstr "Diapositivas" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automático" @@ -1405,7 +1410,8 @@ msgstr "Ajustes de color extra" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Invertir imagen" @@ -1558,85 +1564,85 @@ msgid "Select the film type" msgstr "Seleccionar el tipo de película" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Plana" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, fuzzy, no-c-format msgid "ADF Front" msgstr "la tapa del alimentador está abierta" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "atasco en el alimentador" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "Alimentador a dos caras" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Rojo" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Verde" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Azul" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Mejora" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Mejora" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Mejora" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1644,29 +1650,32 @@ msgid "None" msgstr "Ninguno" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Una cara" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Dos caras" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Unidad de transparencias" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Alimentador automático de documentos (ADF)" @@ -1778,7 +1787,7 @@ msgid "CRT monitors" msgstr "Monitores CRT" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1824,12 +1833,17 @@ msgid "A5 landscape" msgstr "A5 apaisado" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Carta" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1840,15 +1854,17 @@ msgstr "Máx" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Modo de escaneo" @@ -2042,11 +2058,13 @@ msgstr "Expulsar el documento después del escaneo" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "Modo alimentador" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Seleccionar el modo del alimentador (una cara/dos caras)" @@ -2123,160 +2141,153 @@ msgid "User defined CCT profile" msgstr "Definida por el usuario" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Activo" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Apagado" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Difuminado" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Difusión de error" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Nivel de blanco" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Nivel de negro" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Condicional" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Horizontal" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Horizontal" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Horizontal" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Vertical" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Vertical" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Imprimir" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Adaptador de transparencias" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Extras" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Umbral" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "Desactivar interpolación" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2285,23 +2296,23 @@ "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." -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, no-c-format msgid "Color Filter" msgstr "Filtro de color" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" "Cuando se usa gris o línea de arte esta opción selecciona el color usado." -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Tiempo de espera de la lámpara" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2310,60 +2321,66 @@ "La lámpara será apagada después del tiempo dado (en minutos). Un valor " "de 0 significa que la lámpara no será apagada" -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, no-c-format msgid "File button" msgstr "Botón de archivo" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "Botón de OCR" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, no-c-format msgid "Power button" msgstr "Botón de energía" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Limpiar la calibración" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Fuerza la calibración del escáner antes de realizar el escaneo" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Botones" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Calibrar" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "Iniciar calibración usando una hoja especial" -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "Limpiar la calibración" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "Limpiar la caché de datos de calibración" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Adaptador de transparencias" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2471,12 +2488,12 @@ msgid "Sets the gamma value of all channels." msgstr "Ajusta el valor gamma para todos los canales." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Grupo de geometría" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Grupo de modo de escaneo" @@ -2793,9 +2810,9 @@ msgstr "Lento" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normal" @@ -3032,6 +3049,697 @@ msgid "Shut off scanner lamp." msgstr "Apagar la lámpara del escáner." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Tamaño del papel" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Separación automática" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 apaisado" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "Ajustar el modo de control de densidad" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Foco previo manual" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Foco previo manual" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Activa el escaneo por las dos caras" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Tamaño físico del papel en el alimentador" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Medios tonos" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Color" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Condicional" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Apagado" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Medios tonos" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Medios tonos" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Difusión de error" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normal" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Resalte" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "escáner de películas" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Del papel" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Predeterminado" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Suave" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Lento" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Soporte" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Rojo" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Verde" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Origen de escaneo" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Modo de alimentación" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Ajusta el modo de alimentación" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Activar/desactivar enfoque automático" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Ajustar el modo de control de densidad" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Ajusta el modo de alimentación" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Ajusta el modo de alimentación" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Umbral automático" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +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" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Reducción de ruido" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Reduce los puntos aislados de ruido" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Resalte de imagen" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Ajusta el resalte de la imagen" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Encender lámpara" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Enciende o apaga la lámpara" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Invertir la imagen verticalmente." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Corrección gamma" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Impresión de alta densidad" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Impresión de baja densidad" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Difusión de error" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Sin corrección" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normal" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Mejora" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Umbral automático" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Umbral automático" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Ajustar el orden de las muestras" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Sombra para azul" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Cambiar de rojo a azul" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3057,55 +3765,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 Línea vertical" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Ganancia" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Ajustes de ganancia de los canales de color" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Ganancia de gris" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Ajusta la ganancia del canal de gris" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Ganancia de rojo" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Ajusta la ganancia del canal de rojo" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Ganancia de Verde" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Ajusta la ganancia del canal de verde" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Ganancia de Azul" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Ajusta la ganancia del canal de azul" @@ -3155,11 +3863,6 @@ msgid "From white stick" msgstr "De palo blanco" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Del papel" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3201,56 +3904,6 @@ msgid "sheetfed scanner" msgstr "escáner con cargador automático" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Modo de alimentación" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Ajusta el modo de alimentación" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Umbral automático" - -#: ../backend/matsushita.c:1227 -#, no-c-format -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" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Reducción de ruido" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Reduce los puntos aislados de ruido" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Resalte de imagen" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Ajusta el resalte de la imagen" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3261,26 +3914,6 @@ msgid "Grayscale 8 bits" msgstr "Escala de grises de 8 bits" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Tamaño del papel" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Separación automática" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Activa el escaneo por las dos caras" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Tamaño físico del papel en el alimentador" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3373,11 +4006,6 @@ "Si se selecciona, el motor intenta determinar automáticamente un valor " "óptimo para el umbral." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Corrección gamma" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -3477,7 +4105,8 @@ #: ../backend/microtek2.h:685 #, 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»." #: ../backend/microtek2.h:689 #, no-c-format @@ -4180,29 +4809,29 @@ "Forzar al motor a devolver el código de estado de " "SANE_STATUS_ACCESS_DENIED después de haber sido llamado sane_read()." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "Esta opción refleja el estado de los botones del escáner" -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Encender lámpara" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Enciende la lámpara del escáner" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Apagar lámpara" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/fi.po sane-backends-1.0.23/po/fi.po --- sane-backends-1.0.22/po/fi.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/fi.po 2011-07-06 20:17:25.000000000 +0000 @@ -6,11 +6,12 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.11\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2007-12-17 23:00+0100\n" "Last-Translator: Harri Järvi \n" "Language-Team: Debian l10n Finnish \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -27,9 +28,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -43,23 +46,24 @@ msgstr "Geometria" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Parannus" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1001,22 +1005,22 @@ msgid "Button state" msgstr "Painikkeen tila" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Luettavan kehyksen numero" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Valitsee luettavan kehyksen numeron" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, fuzzy, no-c-format msgid "Duplex scan" msgstr "Kaksipuolinen" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1100,7 +1104,8 @@ msgid "Slides" msgstr "Dia" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automaattinen" @@ -1376,7 +1381,8 @@ msgstr "" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Peilikuva" @@ -1522,85 +1528,85 @@ msgid "Select the film type" msgstr "Valitsee rasterin" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Taso" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "ADF" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, fuzzy, no-c-format msgid "ADF Duplex" msgstr "Kaksipuolinen" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Punainen" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Vihreä" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Sininen" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Parannus" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Parannus" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Parannus" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1608,29 +1614,32 @@ msgid "None" msgstr "Ei mikään" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Yksipuolinen" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Kaksipuolinen" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Läpinäkyvyysyksikkö" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Automaattinen syöttö" @@ -1742,7 +1751,7 @@ msgid "CRT monitors" msgstr "Loisteputkinäytöt" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1788,12 +1797,17 @@ msgid "A5 landscape" msgstr "A5 vaaka" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "US-Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1804,15 +1818,17 @@ msgstr "Koko alue" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Lukutapa" @@ -2004,11 +2020,13 @@ msgstr "Poista kohde kuvanluvun jälkeen" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "Syötttapa" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Valitsee syöttötavan (yksi-/kaksipuolinen)" @@ -2082,242 +2100,241 @@ msgid "User defined CCT profile" msgstr "Käyttäjän määrittelemä" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Päällä" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Poissa" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Rasteri" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, no-c-format msgid "Diffusion" msgstr "" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Valkotaso" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Mustataso" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Ehdollinen" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Vaaka" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Vaaka" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Vaaka" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Pysty" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Pysty" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Tulosta" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Läpinäkyvyysyksikkö" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, fuzzy, no-c-format msgid "Extras" msgstr "Hyvin nopea" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Kynnys" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, fuzzy, no-c-format msgid "Disable interpolation" msgstr "Poista peruutus." -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " "than the vertical resolution this disables horizontal interpolation." msgstr "" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, fuzzy, no-c-format msgid "Color Filter" msgstr "Väriviivapiirros" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, fuzzy, no-c-format msgid "Lamp off time" msgstr "Valo pois" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, 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 "" -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Odota painiketta" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Odota painiketta" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Raakakalibrointi" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Pakottaa kalibroinnin ennen kuvanlukua." -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, fuzzy, no-c-format msgid "Buttons" msgstr "Painikkeen tila" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Kalibroi" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Aloita kalibrointi." -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Raakakalibrointi" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Kalibrointitila" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Läpinäkyvyysyksikkö" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2419,12 +2436,12 @@ msgid "Sets the gamma value of all channels." msgstr "Asettaa gamma-arvon kaikille kanaville." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, fuzzy, no-c-format msgid "Geometry Group" msgstr "Geometria" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, fuzzy, no-c-format msgid "Scan Mode Group" msgstr "Lukutapa" @@ -2730,9 +2747,9 @@ msgstr "Hidas" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normaali" @@ -2968,6 +2985,697 @@ msgid "Shut off scanner lamp." msgstr "Sulkee kuvanlukijan lampun." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Paperin koko" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Automaattinen osiointi" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 vaaka" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Manuaalinen esitarkennus" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Manuaalinen esitarkennus" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Kaksipuolinen kuvanluku" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Paperin koko syöttölaitteessa" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Rasteri" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Väri" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Ehdollinen" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Poissa" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Rasteri" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Rasteri" + +#: ../backend/kvs1025_opt.c:153 +#, no-c-format +msgid "diffusion" +msgstr "" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normaali" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Korostus" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "Tasokuvanlukija" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Paperilta" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Oletus" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Pehmeä" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Hidas" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Keskitaso" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Punainen" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Vihreä" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Lähde" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Syöttötapa" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Asettaa syöttötavan" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Poista esitarkennus" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Poista esitarkennus" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Asettaa syöttötavan" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Asettaa syöttötavan" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Automaattinen kynnys" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Asettaa automaattisesti kirkkauden, kontrastin, valkotasapainon, gamman, " +"kohinan poiston ja korostuksen" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Kohinan poisto" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Vähentää yksittäistä pistekohinaa" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Kuvan korostus" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Asettaa kuvan korostuksen" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Valo päälle" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Asettaa valon päälle/pois" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Peilaa kuvan pystysuunnassa." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Gammakorjaus" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Korkeatarkkuuksinen tulostus" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Matalatarkkuuksinen tulostus" + +#: ../backend/kvs40xx_opt.c:242 +#, no-c-format +msgid "err_diffusion" +msgstr "" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Ei korjausta" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normaali" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Parannus" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Automaattinen kynnys" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Automaattinen kynnys" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Aseta kehysten järjestys" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Sinisen varjo" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Punaisen siirtymä siniseen" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -2993,55 +3701,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 pystyviiva" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Vahvistus" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Värikanavien vahvistus" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Harmaan vahvistus" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Asettaa harmaan kanavan vahvistusta" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Punaisen vahvistus" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Asettaa punaisen kanavan vahvistusta" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Vihreän vahvistus" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Asettaa vihreän kanavan vahvistusta" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Sinisen vahvistus" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Asettaa sinisen kanavan vahvistusta" @@ -3091,11 +3799,6 @@ msgid "From white stick" msgstr "" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Paperilta" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3137,56 +3840,6 @@ msgid "sheetfed scanner" msgstr "arkkisyöttöinen" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Syöttötapa" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Asettaa syöttötavan" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Automaattinen kynnys" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Asettaa automaattisesti kirkkauden, kontrastin, valkotasapainon, gamman, " -"kohinan poiston ja korostuksen" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Kohinan poisto" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Vähentää yksittäistä pistekohinaa" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Kuvan korostus" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Asettaa kuvan korostuksen" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3197,26 +3850,6 @@ msgid "Grayscale 8 bits" msgstr "Harmaasävy 8 bittiä" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Paperin koko" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Automaattinen osiointi" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Kaksipuolinen kuvanluku" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Paperin koko syöttölaitteessa" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3306,11 +3939,6 @@ msgstr "" "Jos valittu, ajuri yrittää automaattisesti selvittää parhaan kynnyksen." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Gammakorjaus" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4098,29 +4726,29 @@ "Pakota ajuri palauttamaan paluuarvo SANE_STATUS_ACCESS_DENIED, kun " "sane_read() on kutsuttu." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "" -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Valo päälle" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Laittaa kuvanlukijan valon päälle" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Valo pois" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/fr.po sane-backends-1.0.23/po/fr.po --- sane-backends-1.0.22/po/fr.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/fr.po 2011-07-06 20:17:25.000000000 +0000 @@ -44,11 +44,12 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.19\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-06-05 22:25+0200\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2008-01-17 22:25+0100\n" "Last-Translator: Yann E. MORIN \n" "Language-Team:\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -66,9 +67,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5992 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:190 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -82,23 +85,24 @@ msgstr "Aire de numérisation" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:6052 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Réglages fins" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2792 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -502,9 +506,9 @@ "scanner, it reduces the memory requirements and scan-time of the preview." msgstr "" "Requière que toutes les prévisualisations soient faites en monochrome. " -"Sur un scanner à 3 passes, cela réduit le nombre de passes à 1. Sur " -"un scanner à 1 passe, cela réduit l'espace mémoire nécessaire et le " -"temps de numérisation de la prévisualisation." +"Sur un scanner à 3 passes, cela réduit le nombre de passes à 1. Sur un " +"scanner à 1 passe, cela réduit l'espace mémoire nécessaire et le temps " +"de numérisation de la prévisualisation." #: ../include/sane/saneopts.h:264 #, no-c-format @@ -990,7 +994,7 @@ msgstr "Chargeur automatique de documents vide" #: ../backend/sane_strstatus.c:83 -#, no-c-format +#, no-c-format msgid "Scanner cover is open" msgstr "Couvercle du scanner ouvert" @@ -1072,22 +1076,22 @@ msgid "Button state" msgstr "Etat du bouton" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Numéro de la trame à numériser" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Sélectionner le numéro de la trame à numériser" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Numérisation recto-verso" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1173,7 +1177,8 @@ msgid "Slides" msgstr "Diapositives" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatique" @@ -1451,7 +1456,8 @@ msgstr "Plus de réglages de couleur" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Image miroir" @@ -1598,84 +1604,85 @@ msgid "Select the film type" msgstr "Sélectionne le type de film" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:523 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 #: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 #: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 -#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 ../backend/mustek.c:156 -#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "A plat" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:524 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "Chargeur automatique de documents, recto" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:525 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "Chargeur automatique de documents, verso" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:526 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "Chargeur automatique de documents, recto-verso" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:543 ../backend/genesys.c:100 -#: ../backend/genesys.c:107 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Rouge" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:544 ../backend/genesys.c:101 -#: ../backend/genesys.c:108 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Vert" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:545 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Bleu" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, no-c-format msgid "Enhance Red" msgstr "Augmente le rouge" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, no-c-format msgid "Enhance Green" msgstr "Augmente le vert" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, no-c-format msgid "Enhance Blue" msgstr "Augmente le bleu" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:549 -#: ../backend/genesys.c:110 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1683,29 +1690,32 @@ msgid "None" msgstr "Aucun(e)" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:550 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "JPEG" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Recto" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Recto-verso" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Adaptateur pour transparents" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Chargeur automatique de document" @@ -1817,7 +1827,7 @@ msgid "CRT monitors" msgstr "Moniteurs à tube cathodique" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:533 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1863,12 +1873,17 @@ msgid "A5 landscape" msgstr "A5 - paysage" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1879,15 +1894,17 @@ msgstr "Max" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5923 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Mode de numérisation" @@ -2084,11 +2101,13 @@ msgstr "Ejecte le document après la numérisation" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "Mode du chargeur automatique de documents" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "" @@ -2165,155 +2184,156 @@ msgid "User defined CCT profile" msgstr "Profil de température de couleurs utilsateur" -#: ../backend/fujitsu.c:534 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Activé" -#: ../backend/fujitsu.c:535 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Aucun" -#: ../backend/fujitsu.c:537 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "Seuil dynamique (DTC)" -#: ../backend/fujitsu.c:538 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "Seuil dynamique simplifié (SDTC)" -#: ../backend/fujitsu.c:540 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Tramage" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:566 #, no-c-format msgid "Diffusion" msgstr "Diffusion d'erreur" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:571 #, no-c-format msgid "White" msgstr "Blanc" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:572 #, no-c-format msgid "Black" msgstr "Noir" -#: ../backend/fujitsu.c:552 +#: ../backend/fujitsu.c:577 #, no-c-format msgid "Continue" msgstr "Continuer" -#: ../backend/fujitsu.c:553 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "Arréter" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "10mm" -#: ../backend/fujitsu.c:556 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "15mm" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "20mm" -#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Horizontal" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:585 #, no-c-format msgid "Horizontal bold" msgstr "Horizontal large" -#: ../backend/fujitsu.c:561 +#: ../backend/fujitsu.c:586 #, no-c-format msgid "Horizontal narrow" msgstr "Horizontal étroit" -#: ../backend/fujitsu.c:562 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Vertical" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:588 #, no-c-format msgid "Vertical bold" msgstr "Vertical large" -#: ../backend/fujitsu.c:565 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "De haut en bas" -#: ../backend/fujitsu.c:566 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "De bas en haut" -#: ../backend/fujitsu.c:568 +#: ../backend/fujitsu.c:593 #, no-c-format msgid "Front" msgstr "Avant" -#: ../backend/fujitsu.c:569 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "Arrière" -#: ../backend/genesys.c:6102 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Extras" -#: ../backend/genesys.c:6121 +#: ../backend/genesys.c:6196 #, no-c-format msgid "Threshold curve" msgstr "Courbe du seuil" -#: ../backend/genesys.c:6122 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" -msgstr "Courbe dynamique de seuil, de clair à foncé, normallement entre 50-65" +msgstr "" +"Courbe dynamique de seuil, de clair à foncé, normallement entre 50-65" -#: ../backend/genesys.c:6131 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "Désactiver le mode Trait dynamique" -#: ../backend/genesys.c:6133 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" "Disable use of a software adaptive algorithm to generate lineart relying " "instead on hardware lineart." msgstr "" -"Utilise le mode Trait du matériel, au lieu d'utiliser un algorithme logiciel " -"adaptatif." +"Utilise le mode Trait du matériel, au lieu d'utiliser un algorithme " +"logiciel adaptatif." -#: ../backend/genesys.c:6147 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "Désactiver l'interpolation" -#: ../backend/genesys.c:6150 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2323,23 +2343,23 @@ "plus faible que la résolution verticale, ne pas faire d'interpolation " "horizontale." -#: ../backend/genesys.c:6159 +#: ../backend/genesys.c:6235 #, no-c-format msgid "Color Filter" msgstr "Filtre de couleur" -#: ../backend/genesys.c:6162 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" "En niveaux de gris ou en mode trait, sélectionne la couleur à utiliser." -#: ../backend/genesys.c:6187 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Temps avant extinction de la lampe" -#: ../backend/genesys.c:6190 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2348,57 +2368,56 @@ "La lampe sera éteinte après ce laps de temps (en minutes). Entrer 0 pour " "ne pas éteindre la lampe automatiquement." -#: ../backend/genesys.c:6219 ../backend/genesys.c:6220 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, no-c-format msgid "File button" msgstr "Bouton 'fichier'" -#: ../backend/genesys.c:6272 ../backend/genesys.c:6273 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "Bouton 'reconnaissance de caractères (OCR)'" -#: ../backend/genesys.c:6286 ../backend/genesys.c:6287 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, no-c-format msgid "Power button" msgstr "Bouton 'marche'" -#: ../backend/genesys.c:6300 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, no-c-format msgid "Need calibration" msgstr "Calibration requise" -#: ../backend/genesys.c:6301 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, no-c-format msgid "The scanner needs calibration for the current settings" -msgstr "" -"Le scanner a besoin d'être calibré avec les paramètres actuels" +msgstr "Le scanner a besoin d'être calibré avec les paramètres actuels" -#: ../backend/genesys.c:6314 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Boutons" -#: ../backend/genesys.c:6321 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Calibration" -#: ../backend/genesys.c:6323 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "Démarrer la calibration avec la feuille spéciale" -#: ../backend/genesys.c:6337 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "Annuler la calibration" -#: ../backend/genesys.c:6338 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "Efface le cache des données de calibration" @@ -2518,12 +2537,12 @@ msgid "Sets the gamma value of all channels." msgstr "Sélectionne la valeur de gamma pour tous les canaux." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Géométrie" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Mode de numérisation" @@ -2842,9 +2861,9 @@ msgstr "Lent" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normal" @@ -3080,6 +3099,697 @@ msgid "Shut off scanner lamp." msgstr "Eteint la lampe du scanner." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Taille du papier" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Séparation automatique" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 - paysage" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "Positionne le mode de contrôle de la densité" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Mise au point manuelle" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Mise au point manuelle" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Active la numérisation recto-verso" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Taille physique du papier dans le chargeur" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Demi-teinte" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Couleur" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Continuer" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Aucun" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Demi-teinte" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Demi-teinte" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Diffusion d'erreur" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normal" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Contraste" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "numériseur de transparents" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Avec du papier" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Valeur par défaut" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Lisse" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Lent" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Moyen" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Rouge" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Vert" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Source de numérisation" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Mode de chargement" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Sélectionne le mode de chargement" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Activer/désactiver la mise au point automatique" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Positionne le mode de contrôle de la densité" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Sélectionne le mode de chargement" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Sélectionne le mode de chargement" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Seuil automatique" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Fixe automatiquement la luminosité, le contraste, le niveau du blanc, le " +"gamma, la réduction du bruit et l'accentuation de l'image" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Réduction du bruit" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Réduit le bruit isolé" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Accentuation de l'image" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Sélectionne l'accentuation de l'image" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Lampe allumée" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Allume/éteint la lampe." + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Renverse l'image verticalement." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Correction gamma" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Impression haute définition" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Impression basse définition" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Diffusion d'erreur" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Pas de correction" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normal" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Réglages fins" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Seuil automatique" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Seuil automatique" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Fixe l'orde des trames" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Ombré bleu" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Décalage rouge -> bleu" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3105,55 +3815,55 @@ msgid "8x8 Vertical Line" msgstr "Ligne verticale 8x8" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Gain" -#: ../backend/lexmark.c:265 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Réglages de gain des couleurs" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Gain des gris" -#: ../backend/lexmark.c:275 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Fixe le gain pour le gris" -#: ../backend/lexmark.c:288 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Gain des rouges" -#: ../backend/lexmark.c:289 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Fixe le gain pour le rouge" -#: ../backend/lexmark.c:302 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Gain des verts" -#: ../backend/lexmark.c:303 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Fixe le gain pour le vert" -#: ../backend/lexmark.c:316 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Gain des bleus" -#: ../backend/lexmark.c:317 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Fixe le gain pour le bleu" @@ -3203,11 +3913,6 @@ msgid "From white stick" msgstr "Avec le batonnet blanc" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Avec du papier" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3249,56 +3954,6 @@ msgid "sheetfed scanner" msgstr "scanner avec chargeur automatique" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Mode de chargement" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Sélectionne le mode de chargement" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Seuil automatique" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Fixe automatiquement la luminosité, le contraste, le niveau du blanc, le " -"gamma, la réduction du bruit et l'accentuation de l'image" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Réduction du bruit" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Réduit le bruit isolé" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Accentuation de l'image" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Sélectionne l'accentuation de l'image" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3309,26 +3964,6 @@ msgid "Grayscale 8 bits" msgstr "Niveau de gris 8 bits" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Taille du papier" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Séparation automatique" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Active la numérisation recto-verso" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Taille physique du papier dans le chargeur" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3422,11 +4057,6 @@ "Lorsque sélectionné, le pilote détermine automatiquement la meilleure " "valeur du seuil." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Correction gamma" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4431,8 +5061,8 @@ "option also enables a fixed width of 11 cm." msgstr "" "Simule un scanner à main. Les scanners à main ne connaissent pas à " -"priori la hauteur de l'image. A la place, ils renvoient une auteur de -" -"1. Sélectionner cette option permet de tester si une interface peut le " +"priori la hauteur de l'image. A la place, ils renvoient une auteur de " +"-1. Sélectionner cette option permet de tester si une interface peut le " "supporter correctement. Cette option fixe aussi la largeur de " "numérisation à 11 cm." diff -Nru sane-backends-1.0.22/po/gl.po sane-backends-1.0.23/po/gl.po --- sane-backends-1.0.22/po/gl.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/gl.po 2011-07-06 20:17:25.000000000 +0000 @@ -7,10 +7,11 @@ msgstr "" "Project-Id-Version: sane-backends\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2009-06-25 10:22+0100\n" "Last-Translator: Miguel Anxo Bouzada \n" "Language-Team: Galician \n" +"Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -31,9 +32,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -47,23 +50,24 @@ msgstr "Xeometría" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Optimización" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1031,22 +1035,22 @@ msgid "Button state" msgstr "Botón de estado" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Número de mostra a escanear" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Escolle o número de mostra a escanear" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Escaneo dúplex" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1131,7 +1135,8 @@ msgid "Slides" msgstr "Diapositivas" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automático" @@ -1410,7 +1415,8 @@ msgstr "Axustes de cor extra" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Reflectir a imaxe horizontalmente" @@ -1561,85 +1567,85 @@ msgid "Select the film type" msgstr "Escoller o tipo de filme" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Plano" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, fuzzy, no-c-format msgid "ADF Front" msgstr "A tapa do alimentador está aberta" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "Atoamento no alimentador" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "Alimentador dúplex" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Vermello" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Verde" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Azul" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Optimización" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Optimización" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Optimización" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1647,29 +1653,32 @@ msgid "None" msgstr "Ningún" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Unha cara" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Duas caras" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Unidade de transparencias" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Alimentador automático de documentos (ADF)" @@ -1781,7 +1790,7 @@ msgid "CRT monitors" msgstr "Monitores CRT" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1827,12 +1836,17 @@ msgid "A5 landscape" msgstr "A5 apaisado" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Carta" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1843,15 +1857,17 @@ msgstr "Máx" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Modo de escaneo" @@ -2045,11 +2061,13 @@ msgstr "Expulsar o documento despois do escaneo" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "Modo alimentador" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Escoller o modo do alimentador (unha cara/duas caras)" @@ -2126,160 +2144,153 @@ msgid "User defined CCT profile" msgstr "Definida polo usuario" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Activado" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Desactivado" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Esfumado" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Difusión de erro" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Nivel do branco" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Nivel do negro" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Condicional" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Horizontal" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Horizontal" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Horizontal" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Vertical" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Vertical" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Imprimir" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Adaptador de transparencias" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Extras" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Limiar" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "Desactivar interpolación" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2288,23 +2299,23 @@ "Cando se usan altas resolucións nas que a resolución horizontal é máis " "pequena que a vertical, isto desactiva a interpolación horizontal." -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, no-c-format msgid "Color Filter" msgstr "Filtro de cor" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, 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." -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Tempo para apagado da lámpada" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2313,60 +2324,66 @@ "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." -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, no-c-format msgid "File button" msgstr "Botón de ficheiro" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "Botón de OCR" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, no-c-format msgid "Power button" msgstr "Botón de enerxía" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Limpar a calibración" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Forza a calibrar o escáner antes de facer o escaneo" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Botóns" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Calibrar" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "Iniciar a calibración usando unha folla especial" -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "Limpar a calibración" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "Limpar a caché de datos de calibración" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Adaptador de transparencias" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2477,12 +2494,12 @@ msgid "Sets the gamma value of all channels." msgstr "Axusta o valor gamma para todas as canles." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Grupo de xeometría" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Grupo de modo de escaneo" @@ -2799,9 +2816,9 @@ msgstr "Lento" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normal" @@ -2948,8 +2965,8 @@ 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." +"«Negativo» para filme en negativo. Para imaxes escuras (subexpostas) " +"pode incrementar este valor." #: ../backend/hp-option.h:119 ../backend/hp-option.h:126 #, no-c-format @@ -3038,6 +3055,697 @@ msgid "Shut off scanner lamp." msgstr "Apagar a lámpada do escáner." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Tamaño do papel" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Separación automática" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 apaisado" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "Axustar o modo de control de densidade" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Foco previo manual" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Foco previo manual" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Activa o escaneo polas dúas caras" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Tamaño físico do papel no alimentador" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Medios tons" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Cor" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Condicional" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Desactivado" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Medios tons" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Medios tons" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Difusión de erro" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normal" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Resaltar" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "escáner de filmes" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "De papel" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Predeterminado" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Suave" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Lento" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Soporte" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Vermello" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Verde" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Orixe de escaneo" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Modo de alimentación" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Axusta o modo de alimentación" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Activar/desactivar enfoque automático" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Axustar o modo de control de densidade" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Axusta o modo de alimentación" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Axusta o modo de alimentación" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Limiar automático" + +#: ../backend/kvs1025_opt.c:738 ../backend/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" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Redución de ruído" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Reduce os puntos illados de ruído" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Destaque da imaxe" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Axusta o destaque da imaxe" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Acender lámpada" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Acende ou apaga a lámpada" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Reflectir a imaxe en verticalv" + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Corrección gamma" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Impresión de alta densidade" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Impresión de baixa densidade" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Difusión de erro" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Sen corrección" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normal" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Optimización" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Limiar automático" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Limiar automático" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Axustar a orde das mostras" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Sombra para azul" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Cambiar de vermello a azul" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3063,55 +3771,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 Liña vertical" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Ganancia" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Axustes de ganancia das canles de cor" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Ganancia de gris" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Axusta a ganancia da canle de gris" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Ganancia vermella" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Axustar a ganancia da canle vermella" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Ganancia verde" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Axusta a ganancia da canle verde" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Ganancia azul" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Axusta a ganancia da canle azul" @@ -3161,11 +3869,6 @@ msgid "From white stick" msgstr "De pau branco" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "De papel" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3207,56 +3910,6 @@ msgid "sheetfed scanner" msgstr "escáner con cargador automático" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Modo de alimentación" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Axusta o modo de alimentación" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Limiar automático" - -#: ../backend/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" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Redución de ruído" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Reduce os puntos illados de ruído" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Destaque da imaxe" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Axusta o destaque da imaxe" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3267,26 +3920,6 @@ msgid "Grayscale 8 bits" msgstr "Escala de grises de 8 bits" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Tamaño do papel" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Separación automática" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Activa o escaneo polas dúas caras" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Tamaño físico do papel no alimentador" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3378,11 +4011,6 @@ "Se se selecciona, o motor tenta determinar automaticamente un valor " "óptimo para o limiar." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Corrección gamma" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4043,8 +4671,8 @@ "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 " +"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." #: ../backend/pnm.c:283 @@ -4183,29 +4811,29 @@ "Forzar o motor a devolver o código de estado de " "SANE_STATUS_ACCESS_DENIED despois de ter sido chamado sane_read()." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, 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" -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Acender lámpada" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Acende a lámpada do escáner" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Apagar lámpada" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" @@ -4388,8 +5016,8 @@ "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 " +"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." #: ../backend/test.c:366 diff -Nru sane-backends-1.0.22/po/it.po sane-backends-1.0.23/po/it.po --- sane-backends-1.0.22/po/it.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/it.po 2011-07-06 20:17:25.000000000 +0000 @@ -6,10 +6,11 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.18\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2007-08-28 23:11+0200\n" "Last-Translator: Giuseppe Sacco \n" "Language-Team: italian translation project \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -26,9 +27,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -42,23 +45,24 @@ msgstr "Geometria" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Miglioramento" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1030,22 +1034,22 @@ msgid "Button state" msgstr "Stato del pulsante" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Numero di fotogrammi da acquisire" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Selezionare il numero di fotogrammi da acquisire" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Scansione Duplex" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1129,7 +1133,8 @@ msgid "Slides" msgstr "Diapositive" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatico" @@ -1409,7 +1414,8 @@ msgstr "Altre impostazioni del colore" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Immagine riflessa" @@ -1557,85 +1563,85 @@ msgid "Select the film type" msgstr "Seleziona il tipo di pellicola" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Piano fisso" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, fuzzy, no-c-format msgid "ADF Front" msgstr "Coperchio ADF aperto" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "ADF inceppato" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "ADF Duplex" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Rosso" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Verde" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Blu" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Miglioramento" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Miglioramento" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Miglioramento" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1643,29 +1649,32 @@ msgid "None" msgstr "Nessuno" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Solo fronte" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Fronte e retro" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Adattatore per trasparenze" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Caricatore automatico fogli" @@ -1777,7 +1786,7 @@ msgid "CRT monitors" msgstr "Monitor CRT" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1823,12 +1832,17 @@ msgid "A5 landscape" msgstr "A5 orizzontale" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1839,15 +1853,17 @@ msgstr "Massimo" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Modalità di scansione" @@ -2041,11 +2057,13 @@ msgstr "Espelle il documento dopo la sua scansione" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "Modalità ADF" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Seleziona la modalità ADF (solo fronte/fronte-retro)" @@ -2122,160 +2140,153 @@ msgid "User defined CCT profile" msgstr "Definito dall'utente" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Attivo" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Disattivo" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Sfumatura" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Diffusione d'errore" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Livello bianco" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Livello nero" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Condizionale" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Orizzontale" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Orizzontale" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Orizzontale" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Verticale" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Verticale" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Stampa" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Adattatore per trasparenza" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Extra" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Soglia" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "Disattiva interpolazione" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2284,24 +2295,24 @@ "Quando si usano alte risoluzione con quella orizzontale minore della " "verticale, l'interpolazione orizzontale viene disabilitata." -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, no-c-format msgid "Color Filter" msgstr "Filtro colore" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" "Quando si usano i grigi o il binario questa opzione seleziona il colore " "usato." -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Durata spegnimento lampada" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2310,60 +2321,66 @@ "La lampada verrà spenta allo scadere del tempo impostato (in minuti). Il " "valore 0 indica che la lampada non deve mai essere spenta." -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Attendi il tasto" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Attendi il tasto" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Calibrazione granulosa" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Forza la calibrazione dello scanner prima della scansione" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Pulsanti" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Calibrazione" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Inizia la calibrazione." -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Calibrazione granulosa" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Cache per la calibrazione" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Adattatore per trasparenza" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2473,12 +2490,12 @@ msgid "Sets the gamma value of all channels." msgstr "Imposta il valore gamma per tutti i canali." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, fuzzy, no-c-format msgid "Geometry Group" msgstr "Geometria" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, fuzzy, no-c-format msgid "Scan Mode Group" msgstr "Modalità di scansione" @@ -2786,9 +2803,9 @@ msgstr "Lento" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normale" @@ -3024,6 +3041,702 @@ msgid "Shut off scanner lamp." msgstr "Spegne la lampada dello scanner." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Dimensione del foglio" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Separazione automatica" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 orizzontale" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "Imposta la modalità di controllo della densità" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Messa a fuoco preliminare manuale" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Messa a fuoco preliminare manuale" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Attiva la scansione fronte-retro" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Dimensione del foglio nel caricatore automatico" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Mezzi toni" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Colore" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Condizionale" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Disattivo" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +# Bayer è il nome della persona che ha inventato questa matrice per il +# dithering. +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayer" + +# Bayer è il nome della persona che ha inventato questa matrice per il +# dithering. +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayer" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Mezzi toni" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Mezzi toni" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Diffusione d'errore" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normale" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Contrasto" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "scanner da negativi" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Da carta" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Default" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Morbido" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Lento" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Medio" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Rosso" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Verde" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Sorgente scanner" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Modalità di caricamento" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Selezionare la modalità di caricamento" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Abilita/disabilita la messa a fuoco automatica" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Imposta la modalità di controllo della densità" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Selezionare la modalità di caricamento" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Selezionare la modalità di caricamento" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Soglia automatica" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Brillantezza, contrasto, livello del bianco, correzione gamma, riduzione " +"del rumore e accentuazione dell'immagine vengono determinati " +"automaticamente" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Riduzione del rumore" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Riduce il rumore dei punti isolati" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Accentuazione dell'immagine" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Imposta l'accentuazione dell'immagine" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Lampada accesa" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Accendi o spegni la lampada" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Riflette l'immagine verticalmente." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Correzione gamma" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Stampa ad alta definizione" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Stampa a bassa definizione" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Diffusione d'errore" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Nessuna correzione" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Normale" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Miglioramento" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Soglia automatica" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Soglia automatica" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Determina l'ordine delle immagini" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Ombreggiatura per il blu" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Spostamento da rosso a blu" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3049,55 +3762,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 linea verticale" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Guadagno" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Regolazione del guadagno sui canali di colore" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Guadagno sul grigio" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Imposta il guadagno sul canale grigio" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Guadagno sul rosso" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Imposta il guadagno sul canale rosso" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Guadagno sul verde" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Imposta il guadagno sul canale verde" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Guadagno sul blu" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Imposta il guadagno sul canale blu" @@ -3147,11 +3860,6 @@ msgid "From white stick" msgstr "Da bastoncino bianco" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Da carta" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3193,57 +3901,6 @@ msgid "sheetfed scanner" msgstr "Scanner con alimentatore automatico dei fogli" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Modalità di caricamento" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Selezionare la modalità di caricamento" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Soglia automatica" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Brillantezza, contrasto, livello del bianco, correzione gamma, riduzione " -"del rumore e accentuazione dell'immagine vengono determinati " -"automaticamente" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Riduzione del rumore" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Riduce il rumore dei punti isolati" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Accentuazione dell'immagine" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Imposta l'accentuazione dell'immagine" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3254,26 +3911,6 @@ msgid "Grayscale 8 bits" msgstr "Scala di grigi a 8 bit" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Dimensione del foglio" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Separazione automatica" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Attiva la scansione fronte-retro" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Dimensione del foglio nel caricatore automatico" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3366,11 +4003,6 @@ "Se abilitato viene determinato in maniera automatica il valore ottimale " "della soglia." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Correzione gamma" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4174,29 +4806,29 @@ "SANE_STATUS_ACCESS_DENIED dopo che sia stata chiamata la funzione " "sane_read()." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, fuzzy, no-c-format msgid "This option reflects the status of a scanner button." msgstr "Queste opzioni riflettono lo stato dei pulsanti dello scanner." -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Lampada accesa" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Accendere la lampada" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Lampada spenta" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/ja.po sane-backends-1.0.23/po/ja.po --- sane-backends-1.0.22/po/ja.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/ja.po 2011-07-06 20:17:25.000000000 +0000 @@ -7,10 +7,11 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.20\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2009-10-31 10:30+0900\n" "Last-Translator: Hiroshi Miura \n" "Language-Team: Japanese \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -30,9 +31,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -46,23 +49,24 @@ msgstr "配置" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "増強" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -987,22 +991,22 @@ msgid "Button state" msgstr "ボタンの状態" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "走査するフレーム数" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "走査するフレームの数を選んでください。" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "両面スキャン" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1086,7 +1090,8 @@ msgid "Slides" msgstr "スライド" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "自動" @@ -1362,7 +1367,8 @@ msgstr "追加色調整" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "鏡像画像" @@ -1509,85 +1515,85 @@ msgid "Select the film type" msgstr "フィルムの種類を選ぶ" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "フラットベッド" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "ADF表面" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "ADF裏面" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "ADF両面" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "赤" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "緑" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "青" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "増強" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "増強" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "増強" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1595,29 +1601,32 @@ msgid "None" msgstr " なし" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "片面" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "両面" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "透過ユニット" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "自動原稿送り装置" @@ -1729,7 +1738,7 @@ msgid "CRT monitors" msgstr "CRTモニター" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1775,12 +1784,17 @@ msgid "A5 landscape" msgstr "A5横" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "USレターサイズ" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1791,15 +1805,17 @@ msgstr "最大" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "走査モード" @@ -1991,11 +2007,13 @@ msgstr "走査後、書類を排出" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "ADFモード" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "ADFモードの選択(片面、両面)" @@ -2067,160 +2085,153 @@ msgid "User defined CCT profile" msgstr "ユーザ定義" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "オン" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "オフ" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "ディザー" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "エラー拡散" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "ホワイトレベル" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "黒レベル" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "条件付き" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "水平の" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "水平の" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "水平の" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "垂直の" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "垂直の" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "ADF表面" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, fuzzy, no-c-format msgid "Back" msgstr "ADF裏面" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "透過アダプター" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "追加" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "閾値" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2229,22 +2240,22 @@ "水平解像度が垂直解像度より低いような高解像度を使うときは、水平" "interpolationを無効にします。" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, no-c-format msgid "Color Filter" msgstr "カラーフィルタ" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "ランプをオフにする時間" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2253,60 +2264,66 @@ "ランプは指定された時間(分)が経過したらオフにされます。値が0のときは、" "この機能は働きません。" -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, no-c-format msgid "File button" msgstr "ファイルボタン" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "OCRボタン" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, no-c-format msgid "Power button" msgstr "電源ボタン" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "較正のクリア" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "走査前にスキャナの校正を強制する" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "ボタン" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "較正" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "特殊シートを用いた補正を開始" -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "較正のクリア" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "校正キャッシュを消去する" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "透過アダプター" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2404,12 +2421,12 @@ msgid "Sets the gamma value of all channels." msgstr "すべてのチャネルのガンマ値を設定" -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "配置グループ" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "スキャンモードグループ" @@ -2722,9 +2739,9 @@ msgstr "遅い" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "普通" @@ -2953,6 +2970,697 @@ msgid "Shut off scanner lamp." msgstr "スキャナーのランプを停止する。" +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "紙サイズ" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5横" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "濃度制御モードを設定" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, no-c-format +msgid "Manual feed mode" +msgstr "" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "手動焦点位置" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "両面走査を有効にする。" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "ADFにある紙の物理サイズ" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "網版" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "カラー" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "条件付き" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "オフ" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "バイエル" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "バイエル" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "網版" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "網版" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "エラー拡散" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "普通" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "ハイライト" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "フィルムスキャナー" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "紙から" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "既定" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "スムース" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "遅い" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "中" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "赤" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "緑" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "走査源" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "フィーダーモード" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "シート送りモードの設定" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "自動焦点を有効/無効" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "濃度制御モードを設定" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "シート送りモードの設定" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "シート送りモードの設定" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "自動閾値" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"自動的に輝度、コントラスト、ホワイトレベル、ガンマ値、ノイズ低減とイメー" +"ジ強調を設定する。" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "ノイズ除去" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "画像強調" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "イメージ強調を設定" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "ガンマ" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "ランプをオン" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "ランプのオフ/オンを切り替え" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "垂直に鏡像をとる。" + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "ガンマ補正" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "高密度印刷" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "低密度印刷" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "エラー拡散" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "補正をしない" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "普通" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "増強" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "自動閾値" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "自動閾値" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "フレームの順序を設定" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "青の最小輝度" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "赤を青にシフト" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -2978,55 +3686,55 @@ msgid "8x8 Vertical Line" msgstr "8x8縦の線" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "利得" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "カラーチャネルの利得設定" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "グレー利得" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "グレーチャネル利得を設定" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "赤利得" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "赤チャネル利得を設定" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "緑利得" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "緑チャネル利得を設定" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "青利得" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "青チャネル利得を設定" @@ -3076,11 +3784,6 @@ msgid "From white stick" msgstr "白サンプルから" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "紙から" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3122,56 +3825,6 @@ msgid "sheetfed scanner" msgstr "シートフィーダスキャナー" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "フィーダーモード" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "シート送りモードの設定" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "自動閾値" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"自動的に輝度、コントラスト、ホワイトレベル、ガンマ値、ノイズ低減とイメー" -"ジ強調を設定する。" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "ノイズ除去" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "画像強調" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "イメージ強調を設定" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "ガンマ" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3182,26 +3835,6 @@ msgid "Grayscale 8 bits" msgstr "グレースケール8ビット" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "紙サイズ" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "両面走査を有効にする。" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "ADFにある紙の物理サイズ" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3291,11 +3924,6 @@ msgstr "" "もしチェックされると、バックエンドは自動的に最適な閾値を探そうとします。" -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "ガンマ補正" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4072,29 +4700,29 @@ "after sane_read() has been called." msgstr "" -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "このオプションは、スキャナーボタンの状態を反映します。" -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "ランプをオン" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "スキャナーのランプをオンにする。" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "ランプオフ" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/nb.po sane-backends-1.0.23/po/nb.po --- sane-backends-1.0.22/po/nb.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/nb.po 2011-07-06 20:17:25.000000000 +0000 @@ -5,10 +5,11 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.12\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2007-12-17 23:01+0100\n" "Last-Translator: Sigurd Stordal \n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,9 +26,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -41,23 +44,24 @@ msgstr "Geometri" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Forbedring" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -975,22 +979,22 @@ msgid "Button state" msgstr "Knappstatus" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Rammenummer å skanne" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Velger rammenummer å skanne" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, fuzzy, no-c-format msgid "Duplex scan" msgstr "Full skan" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1074,7 +1078,8 @@ msgid "Slides" msgstr "Treigest" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatisk" @@ -1350,7 +1355,8 @@ msgstr "" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Speilbilde" @@ -1496,85 +1502,85 @@ msgid "Select the film type" msgstr "" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Rød" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Grønn" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Blå" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Forbedring" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Forbedring" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Forbedring" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1582,29 +1588,32 @@ msgid "None" msgstr "Ingen" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "" @@ -1716,7 +1725,7 @@ msgid "CRT monitors" msgstr "" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1762,12 +1771,17 @@ msgid "A5 landscape" msgstr "A5 landskap" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "" @@ -1778,15 +1792,17 @@ msgstr "Maks" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "" @@ -1978,11 +1994,13 @@ msgstr "Løs ut dokoment etter skanning" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "" @@ -2054,242 +2072,241 @@ msgid "User defined CCT profile" msgstr "Brukerdefinert" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, no-c-format msgid "Diffusion" msgstr "" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Hvitnivå" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Svartnivå" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, no-c-format msgid "Continue" msgstr "" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, no-c-format msgid "Horizontal bold" msgstr "" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, no-c-format msgid "Horizontal narrow" msgstr "" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, no-c-format msgid "Vertical bold" msgstr "" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, no-c-format msgid "Front" msgstr "" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, no-c-format msgid "Threshold curve" msgstr "" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " "than the vertical resolution this disables horizontal interpolation." msgstr "" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, fuzzy, no-c-format msgid "Color Filter" msgstr "Fargestrektegning" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, fuzzy, no-c-format msgid "Lamp off time" msgstr "Lampe av" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, 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 "" -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Vent på knappen" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Vent på knappen" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Grov kalibrering" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Grov kalibrering kun for første skan" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, fuzzy, no-c-format msgid "Buttons" msgstr "Knappstatus" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, fuzzy, no-c-format msgid "Calibrate" msgstr "Kalibrering" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Grov kalibrering" -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Grov kalibrering" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Kalibrering" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2380,12 +2397,12 @@ msgid "Sets the gamma value of all channels." msgstr "" -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, fuzzy, no-c-format msgid "Geometry Group" msgstr "Geometri" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "" @@ -2691,9 +2708,9 @@ msgstr "Treig" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "" @@ -2922,6 +2939,695 @@ msgid "Shut off scanner lamp." msgstr "Slå av skanner lampen." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Papirstørrelse" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 landskap" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Manuell førfokus" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Manuell førfokus" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Fysisk størrelse av papir i ADF" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, no-c-format +msgid "halftone" +msgstr "" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Farge" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, no-c-format +msgid "continuous" +msgstr "" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, no-c-format +msgid "off" +msgstr "" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, no-c-format +msgid "bayer_64" +msgstr "" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, no-c-format +msgid "bayer_16" +msgstr "" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, no-c-format +msgid "halftone_32" +msgstr "" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, no-c-format +msgid "halftone_64" +msgstr "" + +#: ../backend/kvs1025_opt.c:153 +#, no-c-format +msgid "diffusion" +msgstr "" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, no-c-format +msgid "normal" +msgstr "" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, no-c-format +msgid "light" +msgstr "" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "Fra papir" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Fra papir" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Standard" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, no-c-format +msgid "smooth" +msgstr "" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Treig" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Middels" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Rød" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Grønn" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Skankilde" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:584 +#, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:593 +#, no-c-format +msgid "Enable/Disable length control mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Velger måten å foreta gamma korreksjon på" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Støyreduksjon" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Lampe på" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Speilbilde" + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Gamma korreksjon" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Høy densitets utskrift" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "lav densitets utskrift" + +#: ../backend/kvs40xx_opt.c:242 +#, no-c-format +msgid "err_diffusion" +msgstr "" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Ingen korrigering" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Skanhastighet" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Forbedring" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Automatisk oppvarming" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Velger måten å foreta gamma korreksjon på" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, no-c-format +msgid "Set chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Skygge for blå" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Skygge for blå" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -2947,55 +3653,55 @@ msgid "8x8 Vertical Line" msgstr "" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, fuzzy, no-c-format msgid "Gray gain" msgstr "Grønn" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, fuzzy, no-c-format msgid "Sets gray channel gain" msgstr "Kontrast grønnkanal" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, fuzzy, no-c-format msgid "Red gain" msgstr "Rødbalanse" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, fuzzy, no-c-format msgid "Sets red channel gain" msgstr "Kontrast rødkanal" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, fuzzy, no-c-format msgid "Green gain" msgstr "Grønn" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, fuzzy, no-c-format msgid "Sets green channel gain" msgstr "Kontrast grønnkanal" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, fuzzy, no-c-format msgid "Blue gain" msgstr "Blå" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, fuzzy, no-c-format msgid "Sets blue channel gain" msgstr "Kontrast blåkanal" @@ -3045,11 +3751,6 @@ msgid "From white stick" msgstr "" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Fra papir" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3091,54 +3792,6 @@ msgid "sheetfed scanner" msgstr "" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Støyreduksjon" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3149,26 +3802,6 @@ msgid "Grayscale 8 bits" msgstr "Gråskala 8 bits" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Papirstørrelse" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Fysisk størrelse av papir i ADF" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3257,11 +3890,6 @@ "for the threshold." msgstr "" -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Gamma korreksjon" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4029,29 +4657,29 @@ "after sane_read() has been called." msgstr "" -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "" -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Lampe på" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Slå på skanner lampen" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Lampe av" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/nl.po sane-backends-1.0.23/po/nl.po --- sane-backends-1.0.22/po/nl.po 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/po/nl.po 2012-08-19 20:27:18.000000000 +0000 @@ -4,20 +4,20 @@ # Martin Kho , 2003, 2009. # Bertrik Sikken , 2003. # Martin Kho , 2010. -# Martin Kho , 2011. +# Martin Kho , 2011, 2012. msgid "" msgstr "" "Project-Id-Version: sane-backends.nl\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-02-01 14:35+0100\n" -"PO-Revision-Date: 2011-02-01 15:36+0100\n" +"POT-Creation-Date: 2012-08-14 22:45+0200\n" +"PO-Revision-Date: 2012-08-15 16:35+0200\n" "Last-Translator: Martin Kho \n" "Language-Team: American English \n" -"Language: \n" +"Language: en_US\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.2\n" +"X-Generator: Lokalize 1.5\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../include/sane/saneopts.h:154 @@ -32,13 +32,15 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:6021 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:199 ../backend/ma1509.c:551 +#: ../backend/genesys.c:5581 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 -#: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 -#: ../backend/plustek.c:807 ../backend/plustek_pp.c:746 +#: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:159 +#: ../backend/plustek.c:808 ../backend/plustek_pp.c:746 #: ../backend/sceptre.c:702 ../backend/snapscan-options.c:494 #: ../backend/teco1.c:1095 ../backend/teco2.c:1914 ../backend/teco3.c:920 #: ../backend/test.c:647 ../backend/u12.c:546 ../backend/umax.c:5176 @@ -48,23 +50,24 @@ msgstr "Geometrie" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:6081 +#: ../backend/canon.c:1492 ../backend/genesys.c:5641 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:854 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Kleurverbetering" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2792 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -91,7 +94,7 @@ msgstr "Bitdiepte" #: ../include/sane/saneopts.h:165 ../backend/canon.c:1143 -#: ../backend/leo.c:781 ../backend/pixma_sane_options.c:40 +#: ../backend/leo.c:781 ../backend/pixma_sane_options.c:43 #, no-c-format msgid "Scan mode" msgstr "Scanmodus" @@ -299,7 +302,7 @@ #: ../include/sane/saneopts.h:206 ../backend/hp3900_sane.c:428 #: ../backend/hp3900_sane.c:1021 ../backend/hp3900_sane.c:1421 #: ../backend/hp-option.c:3235 ../backend/mustek_usb2.c:121 -#: ../backend/plustek.c:235 ../backend/plustek_pp.c:202 +#: ../backend/plustek.c:236 ../backend/plustek_pp.c:202 #: ../backend/u12.c:157 #, no-c-format msgid "Negative" @@ -1044,42 +1047,42 @@ msgid "Duplex scan provide a scan of the front and back side of the document" msgstr "Dubbelzijdig scannen scant beide zijden van een document" -#: ../backend/canon630u.c:158 +#: ../backend/canon630u.c:159 #, no-c-format msgid "Calibrate Scanner" msgstr "Kalibreer scanner" -#: ../backend/canon630u.c:159 +#: ../backend/canon630u.c:160 #, no-c-format msgid "Force scanner calibration before scan" msgstr "Forceer kalibreren voor het scannen" -#: ../backend/canon630u.c:258 ../backend/umax1220u.c:208 +#: ../backend/canon630u.c:259 ../backend/umax1220u.c:208 #, no-c-format msgid "Grayscale scan" msgstr "Grijstrapscan" -#: ../backend/canon630u.c:259 ../backend/umax1220u.c:209 +#: ../backend/canon630u.c:260 ../backend/umax1220u.c:209 #, no-c-format msgid "Do a grayscale rather than color scan" msgstr "Voer een grijstrap-, in plaats van een kleurenscan uit" -#: ../backend/canon630u.c:305 +#: ../backend/canon630u.c:306 #, no-c-format msgid "Analog Gain" msgstr "Analoog bereik" -#: ../backend/canon630u.c:306 +#: ../backend/canon630u.c:307 #, no-c-format msgid "Increase or decrease the analog gain of the CCD array" msgstr "Vergroot of verklein het analoge bereik van de CCD-sensor" -#: ../backend/canon630u.c:346 ../backend/epson.h:68 ../backend/epson2.h:72 +#: ../backend/canon630u.c:347 ../backend/epson.h:68 ../backend/epson2.h:74 #, no-c-format msgid "Gamma Correction" msgstr "Gammacorrectie" -#: ../backend/canon630u.c:347 +#: ../backend/canon630u.c:348 #, no-c-format msgid "Selects the gamma corrected transfer curve" msgstr "Kiest de gamma gecorrigeerde overdrachtscurve" @@ -1122,7 +1125,8 @@ msgid "Slides" msgstr "Dia's" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatisch" @@ -1315,7 +1319,7 @@ msgstr "Filmscanner" #: ../backend/canon.c:895 ../backend/canon.c:910 ../backend/canon.c:925 -#: ../backend/hp3900_sane.c:1683 ../backend/plustek.c:1334 +#: ../backend/hp3900_sane.c:1683 ../backend/plustek.c:1335 #: ../backend/plustek_pp.c:1014 ../backend/sceptre.c:593 #: ../backend/teco2.c:1836 ../backend/u12.c:851 #, no-c-format @@ -1399,7 +1403,8 @@ msgstr "Extra kleuraanpassingen" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Spiegel het beeld" @@ -1546,85 +1551,85 @@ msgid "Select the film type" msgstr "Selecteert het filmtype" -#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/canon_dr.c:338 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:114 ../backend/fujitsu.c:579 #: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 #: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 #: ../backend/hp5590.c:82 ../backend/ma1509.c:108 -#: ../backend/magicolor.c:163 ../backend/mustek.c:156 -#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 -#: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 +#: ../backend/magicolor.c:167 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:850 +#: ../backend/pixma_sane_options.c:88 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Flatbed" -#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:339 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:580 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "Voorkant van de ADF" -#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:340 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:581 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "Achterkant van de ADF" -#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:551 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:675 +#: ../backend/canon_dr.c:341 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:582 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:861 #, no-c-format msgid "ADF Duplex" msgstr "Dubbelzijdige ADF" -#: ../backend/canon_dr.c:340 ../backend/epson.c:599 -#: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:568 ../backend/genesys.c:106 -#: ../backend/genesys.c:113 ../backend/gt68xx_low.h:136 +#: ../backend/canon_dr.c:348 ../backend/epson.c:599 +#: ../backend/epson.c:3082 ../backend/epson2.c:200 +#: ../backend/fujitsu.c:599 ../backend/genesys.c:89 +#: ../backend/genesys.c:96 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Rood" -#: ../backend/canon_dr.c:341 ../backend/epson.c:600 -#: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:569 ../backend/genesys.c:107 -#: ../backend/genesys.c:114 ../backend/gt68xx_low.h:137 +#: ../backend/canon_dr.c:349 ../backend/epson.c:600 +#: ../backend/epson.c:3078 ../backend/epson2.c:201 +#: ../backend/fujitsu.c:600 ../backend/genesys.c:90 +#: ../backend/genesys.c:97 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Groen" -#: ../backend/canon_dr.c:342 ../backend/epson.c:601 -#: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:570 ../backend/genesys.c:108 -#: ../backend/genesys.c:115 ../backend/gt68xx_low.h:138 +#: ../backend/canon_dr.c:350 ../backend/epson.c:601 +#: ../backend/epson.c:3086 ../backend/epson2.c:202 +#: ../backend/fujitsu.c:601 ../backend/genesys.c:91 +#: ../backend/genesys.c:98 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Blauw" -#: ../backend/canon_dr.c:343 +#: ../backend/canon_dr.c:351 #, no-c-format msgid "Enhance Red" msgstr "Verbeter rood" -#: ../backend/canon_dr.c:344 +#: ../backend/canon_dr.c:352 #, no-c-format msgid "Enhance Green" msgstr "Verbeter groen" -#: ../backend/canon_dr.c:345 +#: ../backend/canon_dr.c:353 #, no-c-format msgid "Enhance Blue" msgstr "Verbeter blauw" -#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 -#: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 -#: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 -#: ../backend/genesys.c:116 ../backend/leo.c:109 +#: ../backend/canon_dr.c:355 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:164 +#: ../backend/epson2.c:172 ../backend/epson2.c:184 ../backend/epson2.c:199 +#: ../backend/epson2.c:213 ../backend/fujitsu.c:605 +#: ../backend/genesys.c:99 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1632,108 +1637,109 @@ msgid "None" msgstr "Geen" -#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 +#: ../backend/canon_dr.c:356 ../backend/fujitsu.c:606 #, no-c-format msgid "JPEG" msgstr "JPEG" -#: ../backend/epson.c:491 ../backend/epson2.c:103 -#: ../backend/magicolor.c:156 +#: ../backend/epson.c:491 ../backend/epson2.c:107 +#: ../backend/magicolor.c:160 #, no-c-format msgid "Simplex" msgstr "enkelzijdig" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:108 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:161 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Dubbelzijdig" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 +#: ../backend/epson.c:502 ../backend/epson2.c:115 ../backend/pixma.c:867 #, no-c-format msgid "Transparency Unit" msgstr "Filmeenheid" -#: ../backend/epson.c:503 ../backend/epson2.c:112 -#: ../backend/magicolor.c:164 ../backend/mustek.c:160 -#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:117 +#: ../backend/magicolor.c:168 ../backend/mustek.c:160 +#: ../backend/pixma.c:855 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Automatische documenten doorvoer" -#: ../backend/epson.c:523 ../backend/epson2.c:128 +#: ../backend/epson.c:523 ../backend/epson2.c:133 #, no-c-format msgid "Positive Film" msgstr "Dia" -#: ../backend/epson.c:524 ../backend/epson2.c:129 +#: ../backend/epson.c:524 ../backend/epson2.c:134 #, no-c-format msgid "Negative Film" msgstr "Transparant" -#: ../backend/epson.c:529 ../backend/epson2.c:136 +#: ../backend/epson.c:529 ../backend/epson2.c:141 #, no-c-format msgid "Focus on glass" msgstr "Focus op het glas" -#: ../backend/epson.c:530 ../backend/epson2.c:137 +#: ../backend/epson.c:530 ../backend/epson2.c:142 #, no-c-format msgid "Focus 2.5mm above glass" msgstr "Focus 2.5mm boven het glas" #: ../backend/epson.c:557 ../backend/epson.c:565 ../backend/epson.c:577 -#: ../backend/epson2.c:160 ../backend/epson2.c:168 ../backend/epson2.c:180 +#: ../backend/epson2.c:165 ../backend/epson2.c:173 ../backend/epson2.c:185 #, no-c-format msgid "Halftone A (Hard Tone)" msgstr "Halftoon A (hard)" #: ../backend/epson.c:558 ../backend/epson.c:566 ../backend/epson.c:578 -#: ../backend/epson2.c:161 ../backend/epson2.c:169 ../backend/epson2.c:181 +#: ../backend/epson2.c:166 ../backend/epson2.c:174 ../backend/epson2.c:186 #, no-c-format msgid "Halftone B (Soft Tone)" msgstr "Halftoon B (zacht)" #: ../backend/epson.c:559 ../backend/epson.c:567 ../backend/epson.c:579 -#: ../backend/epson2.c:162 ../backend/epson2.c:170 ../backend/epson2.c:182 +#: ../backend/epson2.c:167 ../backend/epson2.c:175 ../backend/epson2.c:187 #, no-c-format msgid "Halftone C (Net Screen)" msgstr "Halftoon C" -#: ../backend/epson.c:568 ../backend/epson.c:580 ../backend/epson2.c:171 -#: ../backend/epson2.c:183 +#: ../backend/epson.c:568 ../backend/epson.c:580 ../backend/epson2.c:176 +#: ../backend/epson2.c:188 #, no-c-format msgid "Dither A (4x4 Bayer)" msgstr "Dither A (4x4 Bayer)" -#: ../backend/epson.c:569 ../backend/epson.c:581 ../backend/epson2.c:172 -#: ../backend/epson2.c:184 +#: ../backend/epson.c:569 ../backend/epson.c:581 ../backend/epson2.c:177 +#: ../backend/epson2.c:189 #, no-c-format msgid "Dither B (4x4 Spiral)" msgstr "Dither B (4x4 Spiraalvorm)" -#: ../backend/epson.c:570 ../backend/epson.c:582 ../backend/epson2.c:173 -#: ../backend/epson2.c:185 +#: ../backend/epson.c:570 ../backend/epson.c:582 ../backend/epson2.c:178 +#: ../backend/epson2.c:190 #, no-c-format msgid "Dither C (4x4 Net Screen)" msgstr "Dither C (4x4 Net Screen)" -#: ../backend/epson.c:571 ../backend/epson.c:583 ../backend/epson2.c:174 -#: ../backend/epson2.c:186 +#: ../backend/epson.c:571 ../backend/epson.c:583 ../backend/epson2.c:179 +#: ../backend/epson2.c:191 #, no-c-format msgid "Dither D (8x4 Net Screen)" msgstr "Dither D (8x4 Net Screen)" -#: ../backend/epson.c:584 ../backend/epson2.c:187 +#: ../backend/epson.c:584 ../backend/epson2.c:192 #, no-c-format msgid "Text Enhanced Technology" msgstr "Tekstverbeteringstechnologie" -#: ../backend/epson.c:585 ../backend/epson2.c:188 +#: ../backend/epson.c:585 ../backend/epson2.c:193 #, no-c-format msgid "Download pattern A" msgstr "Download patroon A" -#: ../backend/epson.c:586 ../backend/epson2.c:189 +#: ../backend/epson.c:586 ../backend/epson2.c:194 #, no-c-format msgid "Download pattern B" msgstr "Download patroon B" @@ -1743,7 +1749,7 @@ msgid "No Correction" msgstr "Geen correctie" -#: ../backend/epson.c:632 ../backend/epson.c:657 ../backend/epson2.c:249 +#: ../backend/epson.c:632 ../backend/epson.c:657 ../backend/epson2.c:254 #, no-c-format msgid "User defined" msgstr "Door gebruiker gedefinieerd" @@ -1768,33 +1774,33 @@ msgid "CRT monitors" msgstr "CRT-monitoren" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 +#: ../backend/epson.c:656 ../backend/epson2.c:253 ../backend/fujitsu.c:589 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" msgstr "Standaardinstelling" -#: ../backend/epson.c:658 ../backend/epson2.c:250 +#: ../backend/epson.c:658 ../backend/epson2.c:255 #, no-c-format msgid "High density printing" msgstr "Afdrukken op hoge kwaliteit" -#: ../backend/epson.c:659 ../backend/epson2.c:251 +#: ../backend/epson.c:659 ../backend/epson2.c:256 #, no-c-format msgid "Low density printing" msgstr "Afdrukken op lage kwaliteit" -#: ../backend/epson.c:660 ../backend/epson2.c:252 +#: ../backend/epson.c:660 ../backend/epson2.c:257 #, no-c-format msgid "High contrast printing" msgstr "Afdrukken met hoog contrast" -#: ../backend/epson.c:678 ../backend/epson2.c:270 +#: ../backend/epson.c:678 ../backend/epson2.c:275 #, no-c-format msgid "User defined (Gamma=1.0)" msgstr "Door gebruiker gedefinieerd (Gamma=1.0)" -#: ../backend/epson.c:679 ../backend/epson2.c:271 +#: ../backend/epson.c:679 ../backend/epson2.c:276 #, no-c-format msgid "User defined (Gamma=1.8)" msgstr "Door gebruiker gedefinieerd (Gamma=1.8)" @@ -1814,12 +1820,17 @@ msgid "A5 landscape" msgstr "A5 liggend" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1830,15 +1841,17 @@ msgstr "Maximaal" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5952 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5498 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:721 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Scanmodus" @@ -2030,13 +2043,13 @@ msgstr "Werpt het document uit na het scannen" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 -#: ../backend/magicolor.c:2345 +#: ../backend/magicolor.c:2399 #, no-c-format msgid "ADF Mode" msgstr "ADF Mode" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 -#: ../backend/magicolor.c:2347 +#: ../backend/magicolor.c:2401 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Selecteert de ADF mode (enkelzijdig/dubbelzijdig)" @@ -2051,7 +2064,7 @@ msgid "Select bay to scan" msgstr "Kies de bak om te scannen" -#: ../backend/epson.h:69 ../backend/epson2.h:73 +#: ../backend/epson.h:69 ../backend/epson2.h:75 #, no-c-format msgid "" "Selects the gamma correction value from a list of pre-defined devices or " @@ -2061,22 +2074,22 @@ "apparaten of de door de gebruiker gedefinieerde tabel die naar de " "scanner kan worden gestuurd" -#: ../backend/epson.h:72 ../backend/epson2.h:76 +#: ../backend/epson.h:72 ../backend/epson2.h:78 #, no-c-format msgid "Focus Position" msgstr "Focus positie" -#: ../backend/epson.h:73 ../backend/epson2.h:77 +#: ../backend/epson.h:73 ../backend/epson2.h:79 #, no-c-format msgid "Sets the focus position to either the glass or 2.5mm above the glass" msgstr "Stelt de focus in op het glas of 2.5mm daarboven" -#: ../backend/epson.h:75 ../backend/epson2.h:79 +#: ../backend/epson.h:75 ../backend/epson2.h:81 #, no-c-format msgid "Wait for Button" msgstr "Wacht op een druk op de knop" -#: ../backend/epson.h:76 ../backend/epson2.h:80 +#: ../backend/epson.h:76 ../backend/epson2.h:82 #, no-c-format msgid "" "After sending the scan command, wait until the button on the scanner is " @@ -2085,166 +2098,202 @@ "Begin pas met scannen nadat eerst het scancommando is gestuurd en " "vervolgens de knop van de scanner is ingedrukt." -#: ../backend/epson2.c:97 +#: ../backend/epson2.c:101 #, no-c-format msgid "Infrared" msgstr "Infrarood" -#: ../backend/epson2.c:130 +#: ../backend/epson2.c:116 +#, no-c-format +msgid "TPU8x10" +msgstr "TPU8x10" + +#: ../backend/epson2.c:135 #, no-c-format msgid "Positive Slide" msgstr "Dia" -#: ../backend/epson2.c:131 +#: ../backend/epson2.c:136 #, no-c-format msgid "Negative Slide" msgstr "Negatief" -#: ../backend/epson2.c:209 +#: ../backend/epson2.c:214 #, no-c-format msgid "Built in CCT profile" msgstr "Ingebouwd CCT profiel" -#: ../backend/epson2.c:210 +#: ../backend/epson2.c:215 #, no-c-format msgid "User defined CCT profile" msgstr "Door gebruiker gedefinieerd CCT profiel" -#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:590 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Aan" -#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:591 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Uit" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, no-c-format msgid "DTC" msgstr "DTC" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "SDTC" msgstr "SDTC" -#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:596 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Dither" -#: ../backend/fujitsu.c:566 +#: ../backend/fujitsu.c:597 #, no-c-format msgid "Diffusion" msgstr "Verspreiding" -#: ../backend/fujitsu.c:571 +#: ../backend/fujitsu.c:602 #, no-c-format msgid "White" msgstr "Wit" -#: ../backend/fujitsu.c:572 +#: ../backend/fujitsu.c:603 #, no-c-format msgid "Black" msgstr "Zwart" -#: ../backend/fujitsu.c:577 +#: ../backend/fujitsu.c:608 #, no-c-format msgid "Continue" msgstr "Voortzetten" -#: ../backend/fujitsu.c:578 +#: ../backend/fujitsu.c:609 #, no-c-format msgid "Stop" msgstr "Stoppen" -#: ../backend/fujitsu.c:580 +#: ../backend/fujitsu.c:611 #, no-c-format msgid "10mm" msgstr "10mm" -#: ../backend/fujitsu.c:581 +#: ../backend/fujitsu.c:612 #, no-c-format msgid "15mm" msgstr "15mm" -#: ../backend/fujitsu.c:582 +#: ../backend/fujitsu.c:613 #, no-c-format msgid "20mm" msgstr "20mm" -#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:615 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Horizontaal" -#: ../backend/fujitsu.c:585 +#: ../backend/fujitsu.c:616 #, no-c-format msgid "Horizontal bold" msgstr "Horizontaal vet" -#: ../backend/fujitsu.c:586 +#: ../backend/fujitsu.c:617 #, no-c-format msgid "Horizontal narrow" msgstr "Horizontaal smal" -#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:618 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Verticaal" -#: ../backend/fujitsu.c:588 +#: ../backend/fujitsu.c:619 #, no-c-format msgid "Vertical bold" msgstr "Verticaal vet" -#: ../backend/fujitsu.c:590 +#: ../backend/fujitsu.c:621 #, no-c-format msgid "Top to bottom" msgstr "Van boven naar beneden" -#: ../backend/fujitsu.c:591 +#: ../backend/fujitsu.c:622 #, no-c-format msgid "Bottom to top" msgstr "Van beneden naar boven" -#: ../backend/fujitsu.c:593 +#: ../backend/fujitsu.c:624 #, no-c-format msgid "Front" msgstr "Voorzijde" -#: ../backend/fujitsu.c:594 +#: ../backend/fujitsu.c:625 #, no-c-format msgid "Back" msgstr "Achterzijde" -#: ../backend/genesys.c:6170 +#: ../backend/genesys.c:5723 +#, no-c-format +msgid "Software crop" +msgstr "Softwarematig uitsnijden" + +#: ../backend/genesys.c:5724 +#, no-c-format +msgid "Request backend to remove border from pages digitally" +msgstr "Vraag backend randen van pagina's digitaal te verwijderen" + +#: ../backend/genesys.c:5732 ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "Softwarematig over te slaan percentage lege pagina's" + +#: ../backend/genesys.c:5733 ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "Vraag het stuurprogramma pagina's met weinig dekking te verwijderen" + +#: ../backend/genesys.c:5743 ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "Softwarematige rotatie tegen de klok in" + +#: ../backend/genesys.c:5744 ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" +"Vraag stuurprogramma een 90 graden gedraaid beeld te herkennen en corrigeren" + +#: ../backend/genesys.c:5751 ../backend/pixma_sane_options.c:271 #, no-c-format msgid "Extras" msgstr "Extra's" -#: ../backend/genesys.c:6189 +#: ../backend/genesys.c:5770 ../backend/pixma_sane_options.c:293 #, no-c-format msgid "Threshold curve" msgstr "Drempel curve" -#: ../backend/genesys.c:6190 +#: ../backend/genesys.c:5771 ../backend/pixma_sane_options.c:294 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "Dynamische drempel curve, van licht naar donker, normaal 50-65" -#: ../backend/genesys.c:6199 +#: ../backend/genesys.c:5780 #, no-c-format msgid "Disable dynamic lineart" msgstr "Dynamische lijntekening uitschakelen" -#: ../backend/genesys.c:6201 +#: ../backend/genesys.c:5782 #, no-c-format msgid "" "Disable use of a software adaptive algorithm to generate lineart relying " @@ -2253,12 +2302,12 @@ "Schakel, om een lijntekening te genereren het gebruik van een software " "aanpassend algoritme uit en vertrouw in plaats daarvan op de hardware." -#: ../backend/genesys.c:6216 +#: ../backend/genesys.c:5797 #, no-c-format msgid "Disable interpolation" msgstr "Schakel interpolatie uit" -#: ../backend/genesys.c:6219 +#: ../backend/genesys.c:5800 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2268,24 +2317,24 @@ "resolutie kleiner is dan de verticale resolutie, wordt de horizontale " "interpolatie uitgeschakeld." -#: ../backend/genesys.c:6228 +#: ../backend/genesys.c:5809 #, no-c-format msgid "Color Filter" msgstr "Kleurenfilter" -#: ../backend/genesys.c:6231 +#: ../backend/genesys.c:5812 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" "Wanneer grijs of lijntekening wordt gebruikt, selecteert deze optie de " "huidige actieve kleur." -#: ../backend/genesys.c:6257 +#: ../backend/genesys.c:5838 #, no-c-format msgid "Lamp off time" msgstr "Lamp uit tijd" -#: ../backend/genesys.c:6260 +#: ../backend/genesys.c:5841 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2294,56 +2343,66 @@ "De lamp wordt uitgeschakeld na de opgegeven tijd (in minuten). Een " "waarde van 0 betekent, dat de lamp niet wordt uitgeschakeld." -#: ../backend/genesys.c:6289 ../backend/genesys.c:6290 +#: ../backend/genesys.c:5851 +#, no-c-format +msgid "Lamp off during scan" +msgstr "Lamp uit tijdens het scannen" + +#: ../backend/genesys.c:5852 +#, no-c-format +msgid "The lamp will be turned off during scan. " +msgstr "De lamp wordt uitgeschakeld tijdens het scannen" + +#: ../backend/genesys.c:5879 ../backend/genesys.c:5880 #, no-c-format msgid "File button" msgstr "Bestandsknop" -#: ../backend/genesys.c:6342 ../backend/genesys.c:6343 +#: ../backend/genesys.c:5932 ../backend/genesys.c:5933 #, no-c-format msgid "OCR button" msgstr "OCR-knop" -#: ../backend/genesys.c:6356 ../backend/genesys.c:6357 +#: ../backend/genesys.c:5946 ../backend/genesys.c:5947 #, no-c-format msgid "Power button" msgstr "Power-knop" -#: ../backend/genesys.c:6370 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:5960 ../backend/gt68xx.c:762 #, no-c-format msgid "Need calibration" msgstr "Kalibratie nodig" -#: ../backend/genesys.c:6371 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:5961 ../backend/gt68xx.c:763 #, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "De scanner moet worden gekalibreerd voor de huidige instellingen" -#: ../backend/genesys.c:6384 ../backend/gt68xx.c:787 -#: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 -#: ../backend/plustek.c:1079 +#: ../backend/genesys.c:5974 ../backend/gt68xx.c:787 +#: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:225 +#: ../backend/plustek.c:1080 #, no-c-format msgid "Buttons" msgstr "Knoppen" -#: ../backend/genesys.c:6391 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:5981 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 -#: ../backend/niash.c:728 ../backend/plustek.c:940 +#: ../backend/niash.c:728 ../backend/plustek.c:941 #, no-c-format msgid "Calibrate" msgstr "Kalibreren" -#: ../backend/genesys.c:6393 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:5983 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "Gebruik een speciale transparant voor het kalibreerproces" -#: ../backend/genesys.c:6407 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:5997 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "Reset kalibratie" -#: ../backend/genesys.c:6408 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:5998 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "Reset kalibratiecache" @@ -2462,12 +2521,12 @@ msgid "Sets the gamma value of all channels." msgstr "Stelt de gammawaarde voor alle kanalen in." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Geometrie groep" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Scanmodus groep" @@ -2784,9 +2843,9 @@ msgstr "Langzaam" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:234 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normaal" @@ -3020,6 +3079,686 @@ msgid "Shut off scanner lamp." msgstr "Schakelt de scannerlamp uit." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Papierformaat" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Automatische kleurscheiding" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, no-c-format +msgid "Landscape" +msgstr "Liggend" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "Geinverteerd beeld" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "Groot formaat papier modus" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "Lengte-controlemodus" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, no-c-format +msgid "Manual feed mode" +msgstr "Handmatige doorvoermodus" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, no-c-format +msgid "Manual feed timeout" +msgstr "Handmatige doorvoer timeout" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "Dubbele doorvoer herkenning" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Schakelt Duplex (dubbelzijdig) scannen in" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Feitelijke papierformaat van de ADF" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "z/w" + +#: ../backend/kvs1025_opt.c:40 +#, no-c-format +msgid "halftone" +msgstr "halftoon" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "Grijs" + +#: ../backend/kvs1025_opt.c:42 +#, no-c-format +msgid "color" +msgstr "kleur" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "adf" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "fb" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "enkel" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:455 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:704 +#: ../backend/kvs40xx.c:722 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, no-c-format +msgid "continuous" +msgstr "continu" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, no-c-format +msgid "off" +msgstr "uit" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "wacht_doc" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "wacht_toets" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "gebruiker_gedefinieerd" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "visitekaart" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "Controleer" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "A5" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "A6" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "B5" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "B6" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "Legal" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, no-c-format +msgid "bayer_64" +msgstr "bayer 64" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, no-c-format +msgid "bayer_16" +msgstr "bayer 16" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, no-c-format +msgid "halftone_32" +msgstr "halftoon 32" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, no-c-format +msgid "halftone_64" +msgstr "halftoon 64" + +#: ../backend/kvs1025_opt.c:153 +#, no-c-format +msgid "diffusion" +msgstr "verspreiding" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, no-c-format +msgid "normal" +msgstr "normaal" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, no-c-format +msgid "light" +msgstr "licht" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "donker" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, no-c-format +msgid "From scanner" +msgstr "Vanuit de scanner" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Vanaf papier" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, no-c-format +msgid "default" +msgstr "standaardinstelling" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, no-c-format +msgid "smooth" +msgstr "gelijkmatig" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "geen" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, no-c-format +msgid "low" +msgstr "laag" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, no-c-format +msgid "medium" +msgstr "gemiddeld" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "hoog" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "crt" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "liniair" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, no-c-format +msgid "red" +msgstr "rood" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, no-c-format +msgid "green" +msgstr "groen" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "blauw" + +#: ../backend/kvs1025_opt.c:562 +#, no-c-format +msgid "Sets the scan source" +msgstr "Stelt de scanbron in" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Doorvoermodus" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Stelt de doorvoermodus in" + +#: ../backend/kvs1025_opt.c:584 +#, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Groot formaat papier modus aan/uit schakelen" + +#: ../backend/kvs1025_opt.c:593 +#, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Formaat gestuurde modus aan/uit schakelen" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, no-c-format +msgid "Sets the manual feed mode" +msgstr "Stelt de handmatige doorvoermodus in" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Stelt de handmatige doorvoer timeout in seconden in" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "Dubbele doorvoer herkenning aan/uit schakelen" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "aangepast aan de pagina" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "Aangepast aan de pagina" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "Scanner verkleint het beeld in lijn met de gescande pagina" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "Stelt de papier positie in: waar voor liggend, onwaar voor staand" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Automatische drempelwaarde" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Stelt helderheid, contrast, witwaarde, gamma, ruisonderdrukking en " +"beeldverbetering in" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Ruisonderdrukking" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Vermindert de ruis van afzonderlijke punten" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Beeldverbetering" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Stelt beeldverbetering in" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:108 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, no-c-format +msgid "Lamp color" +msgstr "Lamp kleur" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Schakelt de lamp kleur in (kleur uitval)" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "Geinverteerd beeld in Z/W of halftoon modus" + +#: ../backend/kvs1025_opt.c:840 +#, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Spiegel beeld (links/rechts verwisselen)" + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "jpeg compressie" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "JPEG beeld compressie met Q parameter, '0' - geen compressie" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "Roteer beeld met de klok mee" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "Vraag het stuurprogramma pagina's met een vaste hoeveelheid te roteren" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "Softwarematige scheefheid correctie" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" +"Vraag het stuurprogramma de scheef getrokken pagina's digitaal te roteren" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "Softwarematige ontspikkel omvang" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" +"Maximale omvang van verspreid liggende spikkels, die van het gescande beeld " +"moeten worden verwijderd" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "Automatisch softwarematig uitsnijden" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "Vraag het stuurprogramma randen van pagina's digitaal te verwijderen " + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" +"Formaat Controle Modus is een modus waarin de scanner leest tot aan de " +"kortste lengte van het gebruikte papier of de logische lengte van het " +"document." + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Gammacorrectie" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "wacht_doc_spring_op" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "A3" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "Dubbel briefpapier 11x17 inc." + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "B4" + +#: ../backend/kvs40xx_opt.c:230 +#, no-c-format +msgid "High sensivity" +msgstr "Hoge gevoeligheid" + +#: ../backend/kvs40xx_opt.c:231 +#, no-c-format +msgid "Low sensivity" +msgstr "Lage gevoeligheid" + +#: ../backend/kvs40xx_opt.c:242 +#, no-c-format +msgid "err_diffusion" +msgstr "err_verspreiding" + +#: ../backend/kvs40xx_opt.c:248 +#, no-c-format +msgid "No detection" +msgstr "geen herkenning" + +#: ../backend/kvs40xx_opt.c:249 +#, no-c-format +msgid "Normal mode" +msgstr "normale modus" + +#: ../backend/kvs40xx_opt.c:250 +#, no-c-format +msgid "Enhanced mode" +msgstr "Verbetermodus" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paper by the length which is set in Document Size option." +msgstr "" +"Groot Papier Modus is een modus waarin de scanner het beeld leest nadat hij" +"het formaat van het papier heeft gedeeld door de lengte, die is ingesteld bij" +"de optie Document Formaat" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "Gevoeligheid van de dubbele doorvoer verklikker" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "Stel de gevoeligheid van de dubbele doorvoer verklikker in" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "Stop niet na de dubbele doorvoer verklikker" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "Negeer linker dubbele doorvoor voeler" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "Negeer middelste dubbele doorvoer voeler" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "Negeer rechter dubbele doorvoer voeler" + +#: ../backend/kvs40xx_opt.c:641 +#, no-c-format +msgid "Automatic threshold mode" +msgstr "Automatische drempelwaarde modus" + +#: ../backend/kvs40xx_opt.c:642 +#, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Stel de automatische drempelwaarde in" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "Inverteer beeld in Z/W modus" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "JPEG compressie" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "JPEG compressie (je programma moet in staat zijn te decomprimeren)" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "Herken aan elkaar geniet document" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "kleurwaarde van rood" + +#: ../backend/kvs40xx_opt.c:776 +#, no-c-format +msgid "Set chroma of red" +msgstr "Stel kleurwaarde van rood in" + +#: ../backend/kvs40xx_opt.c:786 +#, no-c-format +msgid "chroma of blue" +msgstr "kleurwaarde van blauw" + +#: ../backend/kvs40xx_opt.c:787 +#, no-c-format +msgid "Set chroma of blue" +msgstr "Stel kleurwaarde van blauw in" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "Scheefheid correctie" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "Stop de scanner als het papier is scheefgetrokken" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "De scanner wordt gestopt als het papier is scheefgetrokken" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "Snij het effectieve beeldoppervlak uit" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "Laat de scanner automatisch het beeldoppervlak herkennen en uitsnijden" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "Het is links/rechtse omkering" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "Ruimte toevoegen aan de bovenzijde" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "Ruimte toevoegen aan de onderzijde" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3065,7 +3804,7 @@ msgid "Sets gray channel gain" msgstr "Stelt het bereik in van het grijze kanaal" -#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1001 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" @@ -3076,7 +3815,7 @@ msgid "Sets red channel gain" msgstr "Stelt het bereik in van het rode kanaal" -#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1017 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" @@ -3087,7 +3826,7 @@ msgid "Sets green channel gain" msgstr "Stelt het bereik in van het groene kanaal" -#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1033 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" @@ -3143,11 +3882,6 @@ msgid "From white stick" msgstr "Vanaf witte punt" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Vanaf papier" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3184,61 +3918,11 @@ msgid "All pages" msgstr "Alle pagina's" -#: ../backend/matsushita.c:1034 ../backend/plustek.c:1332 +#: ../backend/matsushita.c:1034 ../backend/plustek.c:1333 #, no-c-format msgid "sheetfed scanner" msgstr "Doorvoerscanner" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Doorvoermodus" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Stelt de doorvoermodus in" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Automatische drempelwaarde" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Stelt helderheid, contrast, witwaarde, gamma, ruisonderdrukking en " -"beeldverbetering in" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Ruisonderdrukking" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Vermindert de ruis van afzonderlijke punten" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Beeldverbetering" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Stelt beeldverbetering in" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3249,26 +3933,6 @@ msgid "Grayscale 8 bits" msgstr "8 bit grijstrap" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Papierformaat" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Automatische kleurscheiding" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Schakelt Duplex (dubbelzijdig) scannen in" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Feitelijke papierformaat van de ADF" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3362,11 +4026,6 @@ "Indien aangevinkt, probeert de software een optimale waarde te bepalen " "voor de zwart/wit drempelwaarde." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Gammacorrectie" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -3765,12 +4424,39 @@ "Wacht totdat de lamp constant brandt in plaats van de eis van 40 seconde " "opwarmtijd na te leven." -#: ../backend/pixma_sane_options.c:91 +#: ../backend/pixma.c:357 +#, no-c-format +msgid "Negative color" +msgstr "Kleurennegatief" + +#: ../backend/pixma.c:362 +#, no-c-format +msgid "Negative gray" +msgstr "Grijsnegatief" + +#: ../backend/pixma.c:369 +#, no-c-format +msgid "48 bits color" +msgstr "48 bits kleur" + +#: ../backend/pixma.c:374 +#, no-c-format +msgid "16 bits gray" +msgstr "16 bits grijs" + +#: ../backend/pixma_sane_options.c:80 +#, no-c-format +msgid "" +"Selects the scan source (such as a document-feeder). Set source before " +"mode and resolution. Resets mode and resolution to auto values." +msgstr "Selecteert de scanbron (zoals b.v. documentendoorvoer)." + +#: ../backend/pixma_sane_options.c:94 #, no-c-format msgid "Button-controlled scan" msgstr "Knop-gestuurde scan" -#: ../backend/pixma_sane_options.c:94 +#: ../backend/pixma_sane_options.c:95 #, no-c-format msgid "" "When enabled, scan process will not start immediately. To proceed, press " @@ -3781,178 +4467,188 @@ "gaan, druk op de \"SCAN\" knop (voor MP150) of \"COLOR\" knop (voor " "andere modellen). Om te annuleren, druk op de \"GRAY\" knop." -#: ../backend/pixma_sane_options.c:216 +#: ../backend/pixma_sane_options.c:143 +#, no-c-format +msgid "Gamma function exponent" +msgstr "Gammafunctie exponent" + +#: ../backend/pixma_sane_options.c:144 +#, no-c-format +msgid "Changes intensity of midtones" +msgstr "Verandert de intensiteit van de middentonen" + +#: ../backend/pixma_sane_options.c:231 #, no-c-format msgid "Update button state" msgstr "Werk stand van de knop bij" -#: ../backend/pixma_sane_options.c:228 +#: ../backend/pixma_sane_options.c:243 #, no-c-format msgid "Button 1" msgstr "Knop 1" -#: ../backend/pixma_sane_options.c:242 +#: ../backend/pixma_sane_options.c:257 #, no-c-format msgid "Button 2" msgstr "Knop 2" -#: ../backend/plustek.c:234 ../backend/plustek_pp.c:201 +#: ../backend/plustek.c:235 ../backend/plustek_pp.c:201 #: ../backend/u12.c:156 #, no-c-format msgid "Transparency" msgstr "Diapositief" -#: ../backend/plustek.c:912 +#: ../backend/plustek.c:913 #, no-c-format msgid "Device-Settings" msgstr "Apparaatinstellingen" -#: ../backend/plustek.c:919 +#: ../backend/plustek.c:920 #, no-c-format msgid "Lampswitch" msgstr "Lampschakelaar" -#: ../backend/plustek.c:920 +#: ../backend/plustek.c:921 #, no-c-format msgid "Manually switching the lamp(s)." msgstr "Schakel de lamp(en) handmatig aan/uit." -#: ../backend/plustek.c:925 +#: ../backend/plustek.c:926 #, no-c-format msgid "Lamp off during dark calibration" msgstr "Lamp uit tijdens donker kalibreren" -#: ../backend/plustek.c:926 +#: ../backend/plustek.c:927 #, no-c-format msgid "Always switches lamp off when doing dark calibration." msgstr "Schakel altijd de lamp uit tijdens donker kalibreren." -#: ../backend/plustek.c:934 +#: ../backend/plustek.c:935 #, no-c-format msgid "Calibration data cache" msgstr "Kalibratie gegevenscache" -#: ../backend/plustek.c:935 +#: ../backend/plustek.c:936 #, no-c-format msgid "Enables or disables calibration data cache." msgstr "Schakelt kalibratiecache in/uit" -#: ../backend/plustek.c:941 +#: ../backend/plustek.c:942 #, no-c-format msgid "Performs calibration" msgstr "Voert kalibratie uit" -#: ../backend/plustek.c:958 +#: ../backend/plustek.c:959 #, no-c-format msgid "Speedup sensor" msgstr "Snellere sensor beweging" -#: ../backend/plustek.c:959 +#: ../backend/plustek.c:960 #, no-c-format msgid "Enables or disables speeding up sensor movement." msgstr "Schakelt snellere sensor beweging in/uit" -#: ../backend/plustek.c:973 +#: ../backend/plustek.c:974 #, no-c-format msgid "Warmup-time" msgstr "Opwarmtijd" -#: ../backend/plustek.c:974 +#: ../backend/plustek.c:975 #, no-c-format msgid "Warmup-time in seconds." msgstr "Opwarmtijd in seconden." -#: ../backend/plustek.c:986 +#: ../backend/plustek.c:987 #, no-c-format msgid "Lampoff-time" msgstr "Lamp uit tijd" -#: ../backend/plustek.c:987 +#: ../backend/plustek.c:988 #, no-c-format msgid "Lampoff-time in seconds." msgstr "Lamp uit tijd in seconden." -#: ../backend/plustek.c:994 +#: ../backend/plustek.c:995 #, no-c-format msgid "Analog frontend" msgstr "Analoge \"frontend\"" -#: ../backend/plustek.c:1001 +#: ../backend/plustek.c:1002 #, no-c-format msgid "Red gain value of the AFE" msgstr "Roodbereik waarde van de AFE" -#: ../backend/plustek.c:1008 ../backend/umax_pp.c:792 +#: ../backend/plustek.c:1009 ../backend/umax_pp.c:792 #, no-c-format msgid "Red offset" msgstr "Roodoffset" -#: ../backend/plustek.c:1009 +#: ../backend/plustek.c:1010 #, no-c-format msgid "Red offset value of the AFE" msgstr "Roodoffset waarde van de AFE" -#: ../backend/plustek.c:1017 +#: ../backend/plustek.c:1018 #, no-c-format msgid "Green gain value of the AFE" msgstr "Groenbereik waarde van de AFE" -#: ../backend/plustek.c:1024 ../backend/umax_pp.c:804 +#: ../backend/plustek.c:1025 ../backend/umax_pp.c:804 #, no-c-format msgid "Green offset" msgstr "Groenoffset" -#: ../backend/plustek.c:1025 +#: ../backend/plustek.c:1026 #, no-c-format msgid "Green offset value of the AFE" msgstr "Groenoffset waarde van de AFE" -#: ../backend/plustek.c:1033 +#: ../backend/plustek.c:1034 #, no-c-format msgid "Blue gain value of the AFE" msgstr "Blauwbereik waarde van de AFE" -#: ../backend/plustek.c:1040 ../backend/umax_pp.c:816 +#: ../backend/plustek.c:1041 ../backend/umax_pp.c:816 #, no-c-format msgid "Blue offset" msgstr "Blauwoffset" -#: ../backend/plustek.c:1041 +#: ../backend/plustek.c:1042 #, no-c-format msgid "Blue offset value of the AFE" msgstr "Blauwoffset waarde van de AFE" -#: ../backend/plustek.c:1048 +#: ../backend/plustek.c:1049 #, no-c-format msgid "Red lamp off" msgstr "Rode lamp uit" -#: ../backend/plustek.c:1049 +#: ../backend/plustek.c:1050 #, no-c-format msgid "Defines red lamp off parameter" msgstr "Bepaalt de rode lamp uit parameter" -#: ../backend/plustek.c:1056 +#: ../backend/plustek.c:1057 #, no-c-format msgid "Green lamp off" msgstr "Groene lamp uit" -#: ../backend/plustek.c:1057 +#: ../backend/plustek.c:1058 #, no-c-format msgid "Defines green lamp off parameter" msgstr "Bepaalt de groene lamp uit parameter" -#: ../backend/plustek.c:1064 +#: ../backend/plustek.c:1065 #, no-c-format msgid "Blue lamp off" msgstr "Blauwe lamp uit" -#: ../backend/plustek.c:1065 +#: ../backend/plustek.c:1066 #, no-c-format msgid "Defines blue lamp off parameter" msgstr "Bepaalt de blauwe lamp uit parameter" -#: ../backend/plustek.c:1095 +#: ../backend/plustek.c:1096 #, no-c-format msgid "This option reflects the status of the scanner buttons." msgstr "Deze optie geeft de status weer van de sannerknoppen." @@ -4146,8 +4842,8 @@ "Force the backend to return the status code SANE_STATUS_NO_MEM after " "sane_read() has been called." msgstr "" -"Dwing de \"backend\", na een aanroep van sane_read() het " -"statusbericht SANE_STATUS_NO_MEM terug te geven." +"Dwing de \"backend\", na een aanroep van sane_read() het statusbericht " +"SANE_STATUS_NO_MEM terug te geven." #: ../backend/pnm.c:483 #, no-c-format @@ -4445,7 +5141,8 @@ msgstr "" "Verwissel de hoge en lage byte van de beeldgegevens in 16-bit-modus. " "Deze optie kan worden gebruikt om de 16-bit-modus van \"frontends\" te " -"testen, bijvoorbeeld of de \"frontend\" de juiste \"endianness\" gebruikt." +"testen, bijvoorbeeld of de \"frontend\" de juiste \"endianness\" " +"gebruikt." #: ../backend/test.c:484 #, no-c-format @@ -4617,8 +5314,8 @@ "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) Dit is een bool-testoptie, met \"hard select\" en \"soft detect\" " -"(en \"advanced\") mogelijkheden. Dit betekent dat de \"frontend\" de " +"(2/6) Dit is een bool-testoptie, met \"hard select\" en \"soft detect" +"\" (en \"advanced\") mogelijkheden. Dit betekent dat de \"frontend\" de " "optie niet kan instellen, maar de gebruiker dat moet doen (b.v. door op " "een knop van het apparaat te drukken)." diff -Nru sane-backends-1.0.22/po/pl.po sane-backends-1.0.23/po/pl.po --- sane-backends-1.0.22/po/pl.po 2011-01-19 02:31:13.000000000 +0000 +++ sane-backends-1.0.23/po/pl.po 2011-07-06 20:17:25.000000000 +0000 @@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.21\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-04-25 21:48-0400\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2010-11-06 19:33+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" @@ -26,9 +26,12 @@ msgstr "Standardowe" #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 -#: ../backend/epson.c:3284 ../backend/epson2.c:1269 ../backend/genesys.c:5554 -#: ../backend/gt68xx.c:703 ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:190 ../backend/ma1509.c:551 +#: ../backend/epson.c:3284 ../backend/epson2.c:1269 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -42,22 +45,24 @@ msgstr "Krawędzie obszaru skanowania" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5614 ../backend/gt68xx.c:672 -#: ../backend/hp-option.c:2953 ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 ../backend/teco2.c:1962 -#: ../backend/teco3.c:968 ../backend/u12.c:592 ../backend/umax.c:5226 -#: ../backend/umax_pp.c:629 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 +#: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Ulepszanie" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2792 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -83,8 +88,8 @@ msgid "Bit depth" msgstr "Głębokość bitowa" -#: ../include/sane/saneopts.h:165 ../backend/canon.c:1143 ../backend/leo.c:781 -#: ../backend/pixma_sane_options.c:40 +#: ../include/sane/saneopts.h:165 ../backend/canon.c:1143 +#: ../backend/leo.c:781 ../backend/pixma_sane_options.c:40 #, no-c-format msgid "Scan mode" msgstr "Tryb skanowania" @@ -292,7 +297,8 @@ #: ../include/sane/saneopts.h:206 ../backend/hp3900_sane.c:428 #: ../backend/hp3900_sane.c:1021 ../backend/hp3900_sane.c:1421 #: ../backend/hp-option.c:3235 ../backend/mustek_usb2.c:121 -#: ../backend/plustek.c:235 ../backend/plustek_pp.c:202 ../backend/u12.c:157 +#: ../backend/plustek.c:235 ../backend/plustek_pp.c:202 +#: ../backend/u12.c:157 #, no-c-format msgid "Negative" msgstr "Negatyw" @@ -415,7 +421,8 @@ #: ../include/sane/saneopts.h:245 #, no-c-format msgid "" -"Read-only option that specifies how many options a specific devices supports." +"Read-only option that specifies how many options a specific devices " +"supports." msgstr "Opcja tylko do odczytu, mówiąca ile opcji wspiera dane urządzenie." #: ../include/sane/saneopts.h:248 @@ -455,24 +462,25 @@ "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 "" -"Żądanie aby wszystkie podglądy były wykonywane w trybie monochromatycznym. W " -"skanerze trójprzebiegowym ogranicza to liczbę przebiegów do jednego a na " -"jednoprzebiegowym zmniejsza zapotrzebowanie na pamięć i czas pobierania " -"podglądu." +"Żądanie aby wszystkie podglądy były wykonywane w trybie " +"monochromatycznym. W skanerze trójprzebiegowym ogranicza to liczbę " +"przebiegów do jednego a na jednoprzebiegowym zmniejsza zapotrzebowanie " +"na pamięć i czas pobierania podglądu." #: ../include/sane/saneopts.h:264 #, no-c-format msgid "" -"Number of bits per sample, typical values are 1 for \"line-art\" and 8 for " -"multibit scans." +"Number of bits per sample, typical values are 1 for \"line-art\" and 8 " +"for multibit scans." msgstr "" -"Ilość bitów na próbkę; typowe wartości to 1 dla trybu kreski i 8 dla skanów " -"kolorowych i w skali szarości." +"Ilość bitów na próbkę; typowe wartości to 1 dla trybu kreski i 8 dla " +"skanów kolorowych i w skali szarości." #: ../include/sane/saneopts.h:268 #, no-c-format msgid "Selects the scan mode (e.g., lineart, monochrome, or color)." -msgstr "Ustawia tryb skanowania, np. tryb kreski, skala szarości lub kolorowy" +msgstr "" +"Ustawia tryb skanowania, np. tryb kreski, skala szarości lub kolorowy" #: ../include/sane/saneopts.h:271 #, no-c-format @@ -527,9 +535,11 @@ #: ../include/sane/saneopts.h:301 #, no-c-format msgid "" -"Specifies the width of the media. Required for automatic centering of sheet-" -"fed scans." -msgstr "Określa szerokość obiektu. Wymagane do automatycznego centrowania skanowania." +"Specifies the width of the media. Required for automatic centering of " +"sheet-fed scans." +msgstr "" +"Określa szerokość obiektu. Wymagane do automatycznego centrowania " +"skanowania." #: ../include/sane/saneopts.h:305 #, no-c-format @@ -538,18 +548,20 @@ #: ../include/sane/saneopts.h:308 #, no-c-format -msgid "Determines whether a builtin or a custom gamma-table should be used." -msgstr "Określa czy powinna być użyta wbudowana tabela gamma czy użytkownika" +msgid "" +"Determines whether a builtin or a custom gamma-table should be used." +msgstr "" +"Określa czy powinna być użyta wbudowana tabela gamma czy użytkownika" #: ../include/sane/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)." +"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 "" -"Tabela korekcji gamma. W trybie kolorowym ta opcja równomiernie wpływa na " -"wszystkie kanały jednocześnie (staje się tabelą intensywności)." +"Tabela korekcji gamma. W trybie kolorowym ta opcja równomiernie wpływa " +"na wszystkie kanały jednocześnie (staje się tabelą intensywności)." #: ../include/sane/saneopts.h:317 #, no-c-format @@ -579,8 +591,8 @@ #: ../include/sane/saneopts.h:332 #, no-c-format msgid "" -"Selects the \"graininess\" of the acquired image. Smaller values result in " -"sharper images." +"Selects the \"graininess\" of the acquired image. Smaller values result " +"in sharper images." msgstr "" "Ustawia \"ziarnistość\" uzyskanego obrazka. Mniejsze wartości dadzą " "ostrzejsze obrazki." @@ -604,7 +616,8 @@ #, no-c-format msgid "Selects what red radiance level should be considered \"white\"." msgstr "" -"Decyduje o tym jaki poziom jasności czerwieni ma być uznawany za \"biały\"." +"Decyduje o tym jaki poziom jasności czerwieni ma być uznawany za \"biały" +"\"." #: ../include/sane/saneopts.h:348 #, no-c-format @@ -622,40 +635,45 @@ #, no-c-format msgid "Selects what red radiance level should be considered \"black\"." msgstr "" -"Decyduje o tym jaki poziom jasności czerwieni ma być uznawany za \"czarny\"." +"Decyduje o tym jaki poziom jasności czerwieni ma być uznawany za \"czarny" +"\"." #: ../include/sane/saneopts.h:358 #, no-c-format msgid "Selects what green radiance level should be considered \"black\"." msgstr "" -"Decyduje o tym jaki poziom jasności zieleni ma być uznawany za \"czarny\"." +"Decyduje o tym jaki poziom jasności zieleni ma być uznawany za \"czarny" +"\"." #: ../include/sane/saneopts.h:360 #, no-c-format msgid "Selects what blue radiance level should be considered \"black\"." msgstr "" -"Decyduje o tym jaki poziom jasności błękitu ma być uznawany za \"czarny\"." +"Decyduje o tym jaki poziom jasności błękitu ma być uznawany za \"czarny" +"\"." #: ../include/sane/saneopts.h:365 #, no-c-format msgid "Selects what red radiance level should be considered \"full red\"." msgstr "" -"Decyduje o tym jaki poziom jasności czerwonego ma być uznawany jako czysty " -"czerwony." +"Decyduje o tym jaki poziom jasności czerwonego ma być uznawany jako " +"czysty czerwony." #: ../include/sane/saneopts.h:367 #, no-c-format -msgid "Selects what green radiance level should be considered \"full green\"." +msgid "" +"Selects what green radiance level should be considered \"full green\"." msgstr "" -"Decyduje o tym jaki poziom jasności niebieskiego ma być uznawany jako czysty " -"niebieski." +"Decyduje o tym jaki poziom jasności niebieskiego ma być uznawany jako " +"czysty niebieski." #: ../include/sane/saneopts.h:370 #, no-c-format -msgid "Selects what blue radiance level should be considered \"full blue\"." +msgid "" +"Selects what blue radiance level should be considered \"full blue\"." msgstr "" -"Decyduje o tym jaki poziom jasności zielonego ma być uznawany jako czysty " -"zielony." +"Decyduje o tym jaki poziom jasności zielonego ma być uznawany jako " +"czysty zielony." #: ../include/sane/saneopts.h:374 #, no-c-format @@ -665,8 +683,8 @@ #: ../include/sane/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." +"The saturation level controls the amount of \"blooming\" that occurs " +"when acquiring an image with a camera. Larger values cause more blooming." msgstr "" "Poziom nasycenia ustawia ilość \"wykwitu\" który ukazuje się, kiedy " "pobieramy obraz z kamery. Większe wartości powodują większy wykwit." @@ -682,21 +700,23 @@ "Sets the size of the halftoning (dithering) pattern used when scanning " "halftoned images." msgstr "" -"Ustawia rozmiar wzorca tonowania (ditheringu) używanego podczas skanowania " -"tonowanych obrazków." +"Ustawia rozmiar wzorca tonowania (ditheringu) używanego podczas " +"skanowania tonowanych obrazków." #: ../include/sane/saneopts.h:389 #, no-c-format msgid "" "Defines the halftoning (dithering) pattern for scanning halftoned images." msgstr "" -"Definiuje wzorzec tonowania (ditheringu) dla skanowania tonowanych obrazków." +"Definiuje wzorzec tonowania (ditheringu) dla skanowania tonowanych " +"obrazków." #: ../include/sane/saneopts.h:393 #, no-c-format msgid "Use same values for X and Y resolution" msgstr "" -"Użyj tych samych wartości dla rozdzielczości w osi X i Y (poziomie i pionie)" +"Użyj tych samych wartości dla rozdzielczości w osi X i Y (poziomie i " +"pionie)" #: ../include/sane/saneopts.h:395 #, no-c-format @@ -976,12 +996,12 @@ #: ../backend/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." +"If enabled, the device will be calibrated before the next scan. " +"Otherwise, calibration is performed only before the first start." msgstr "" "Jeśli jest zaznaczone, urządzenie będzie kalibrowane przed następnym " -"skanowaniem. W innym przypadku kalibracja zostanie wykonana przed pierwszym " -"przebiegiem" +"skanowaniem. W innym przypadku kalibracja zostanie wykonana przed " +"pierwszym przebiegiem" #: ../backend/artec_eplus48u.c:2954 #, no-c-format @@ -991,9 +1011,9 @@ #: ../backend/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." +"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 "" "Jeżeli włączone, tylko korekcja cieniowania jest przeprowadzana w czasie " "kalibracji. Domyślne są używane wartości dla wzmocnienia offsetu i czasu " @@ -1004,24 +1024,25 @@ msgid "Button state" msgstr "Stan przycisku" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Numer ramki do skanowania" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Wybiera numer ramki do skanowania" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Skanowanie dwustronne" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format -msgid "Duplex scan provide a scan of the front and back side of the document" +msgid "" +"Duplex scan provide a scan of the front and back side of the document" msgstr "" "Skanowanie dwustronne pozwala na skanowanie przedniej i tylnej strony " "dokumentu" @@ -1104,7 +1125,8 @@ msgid "Slides" msgstr "Slajdy" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatycznie" @@ -1303,7 +1325,8 @@ msgid "flatbed scanner" msgstr "skaner płaski" -#: ../backend/canon.c:1181 ../backend/epson.c:3372 ../backend/epson2.c:1343 +#: ../backend/canon.c:1181 ../backend/epson.c:3372 +#: ../backend/epson2.c:1343 #, no-c-format msgid "Film type" msgstr "Rodzaj filmu" @@ -1378,7 +1401,9 @@ msgid "Extra color adjustments" msgstr "Dodatkowe ustawienia kolorów" -#: ../backend/canon.c:1532 ../backend/epson.c:3191 ../backend/epson2.c:1233 +#: ../backend/canon.c:1532 ../backend/epson.c:3191 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Odbicie lustrzane obrazka" @@ -1450,8 +1475,10 @@ #: ../backend/canon.c:1673 #, no-c-format -msgid "Automatically eject the film from the device before exiting the program" -msgstr "Automatyczne wysuwanie filmu z urządzenia przed zakończeniem programu" +msgid "" +"Automatically eject the film from the device before exiting the program" +msgstr "" +"Automatyczne wysuwanie filmu z urządzenia przed zakończeniem programu" #: ../backend/canon.c:1682 #, no-c-format @@ -1476,7 +1503,8 @@ #: ../backend/canon.c:1700 #, no-c-format msgid "Disable auto document feeder and use flatbed only" -msgstr "Wyłączenie automatycznego podajnika dokumentów, używanie tylko płyty" +msgstr "" +"Wyłączenie automatycznego podajnika dokumentów, używanie tylko płyty" #: ../backend/canon.c:1710 ../backend/canon.c:1720 #, no-c-format @@ -1523,108 +1551,118 @@ msgid "Select the film type" msgstr "Wybór rodzaju filmu" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 ../backend/epson.c:501 -#: ../backend/epson2.c:110 ../backend/fujitsu.c:517 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Płyta" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 ../backend/fujitsu.c:518 -#: ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "ADF przód" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 ../backend/fujitsu.c:519 -#: ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "ADF tył" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 ../backend/fujitsu.c:520 -#: ../backend/kodak.c:137 ../backend/hp5590.c:84 ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "ADF dwustronny" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 ../backend/epson.c:3082 -#: ../backend/epson2.c:195 ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 +#: ../backend/epson.c:3082 ../backend/epson2.c:195 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Czerwony" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 ../backend/epson.c:3078 -#: ../backend/epson2.c:196 ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 +#: ../backend/epson.c:3078 ../backend/epson2.c:196 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Zielony" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 ../backend/epson.c:3086 -#: ../backend/epson2.c:197 ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 +#: ../backend/epson.c:3086 ../backend/epson2.c:197 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Niebieski" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, no-c-format msgid "Enhance Red" msgstr "Rozszerzenie czerwieni" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, no-c-format msgid "Enhance Green" msgstr "Rozszerzenie zieleni" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, no-c-format msgid "Enhance Blue" msgstr "Rozszerzenie błękitu" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 ../backend/genesys.c:112 -#: ../backend/leo.c:109 ../backend/matsushita.c:138 -#: ../backend/matsushita.c:159 ../backend/matsushita.c:191 -#: ../backend/matsushita.c:213 ../backend/snapscan-options.c:87 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 +#: ../backend/matsushita.c:138 ../backend/matsushita.c:159 +#: ../backend/matsushita.c:191 ../backend/matsushita.c:213 +#: ../backend/snapscan-options.c:87 #, no-c-format msgid "None" msgstr "Brak" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "JPEG" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Jednostronny" -#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Dwustronny" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Moduł do skanowania przezroczy" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Automatyczny podajnik dokumentów" @@ -1736,7 +1774,7 @@ msgid "CRT monitors" msgstr "Monitory CRT" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1782,12 +1820,17 @@ msgid "A5 landscape" msgstr "A5 krajobraz" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "List" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1797,15 +1840,18 @@ msgid "Max" msgstr "Maksimum" -#: ../backend/epson.c:2799 ../backend/epson2.c:954 ../backend/genesys.c:5485 -#: ../backend/gt68xx.c:458 ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/epson.c:2799 ../backend/epson2.c:954 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Tryb skanowania" @@ -1835,7 +1881,8 @@ msgid "Sharpness" msgstr "Ostrość" -#: ../backend/epson.c:3017 ../backend/epson2.c:1153 ../backend/epson2.c:1200 +#: ../backend/epson.c:3017 ../backend/epson2.c:1153 +#: ../backend/epson2.c:1200 #, no-c-format msgid "Color correction" msgstr "Korekcja koloru" @@ -1843,7 +1890,8 @@ #: ../backend/epson.c:3020 ../backend/epson2.c:1155 #, no-c-format msgid "Sets the color correction table for the selected output device." -msgstr "Ustawia tablicę korekcji koloru dla wybranego urządzenia wyjściowego." +msgstr "" +"Ustawia tablicę korekcji koloru dla wybranego urządzenia wyjściowego." #: ../backend/epson.c:3061 #, no-c-format @@ -1996,11 +2044,13 @@ msgstr "Wysuń dokument po zeskanowaniu" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "Tryb ADF" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Wybiera tryb ADF (jedno/dwustronny)" @@ -2018,11 +2068,11 @@ #: ../backend/epson.h:69 ../backend/epson2.h:73 #, 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" +"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 "" -"Wybiera wartość korekcji gamma z listy zdefiniowanych urządzeń lub tabeli " -"użytkownika, która może być załadowana do skanera" +"Wybiera wartość korekcji gamma z listy zdefiniowanych urządzeń lub " +"tabeli użytkownika, która może być załadowana do skanera" #: ../backend/epson.h:72 ../backend/epson2.h:76 #, no-c-format @@ -2031,7 +2081,8 @@ #: ../backend/epson.h:73 ../backend/epson2.h:77 #, no-c-format -msgid "Sets the focus position to either the glass or 2.5mm above the glass" +msgid "" +"Sets the focus position to either the glass or 2.5mm above the glass" msgstr "Ustawia skupienie (ostrość) na szybę lub 2.5mm powyżej szyby" #: ../backend/epson.h:75 ../backend/epson2.h:79 @@ -2073,235 +2124,238 @@ msgid "User defined CCT profile" msgstr "Profil CCT zdefiniowany przez użytkownika" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Włączony" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Wyłącz" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "DTC" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "SDTC" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 ../backend/teco1.c:1153 -#: ../backend/teco2.c:1971 ../backend/teco2.c:1972 ../backend/teco3.c:977 -#: ../backend/teco3.c:978 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 +#: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 +#: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Ditheruj" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, no-c-format msgid "Diffusion" msgstr "Dyfuzja" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, no-c-format msgid "White" msgstr "Biel" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, no-c-format msgid "Black" msgstr "Czerń" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, no-c-format msgid "Continue" msgstr "Kontynuacja" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "Stop" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "10mm" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "15mm" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "20mm" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Poziomy" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, no-c-format msgid "Horizontal bold" msgstr "Poziomy pogrubiony" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, no-c-format msgid "Horizontal narrow" msgstr "Poziomy cienki" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Pionowy" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, no-c-format msgid "Vertical bold" msgstr "Pionowy pogrubiony" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "Od góry do dołu" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "Od dołu do góry" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, no-c-format msgid "Front" msgstr "Przód" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "Tył" -#: ../backend/genesys.c:5664 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Dodatki" -#: ../backend/genesys.c:5683 +#: ../backend/genesys.c:6196 #, no-c-format msgid "Threshold curve" msgstr "Krzywa progowa" -#: ../backend/genesys.c:5684 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "Dynamiczna krzywa progowa, od ciemnego do jasnego, zwykle 50-65" -#: ../backend/genesys.c:5693 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "Wyłączenie dynamicznego trybu kreski" -#: ../backend/genesys.c:5696 -#, no-c-format +#: ../backend/genesys.c:6208 +#, fuzzy, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart instead " -"of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -"Wyłączenie użycia algorytmu adaptacyjnego do generowania linii zamiast polegania na trybie sprzętowym" +"Wyłączenie użycia algorytmu adaptacyjnego do generowania linii zamiast " +"polegania na trybie sprzętowym" -#: ../backend/genesys.c:5711 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "Wyłącz interpolację" -#: ../backend/genesys.c:5714 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" -"When using high resolutions where the horizontal resolution is smaller than " -"the vertical resolution this disables horizontal interpolation." +"When using high resolutions where the horizontal resolution is smaller " +"than the vertical resolution this disables horizontal interpolation." msgstr "" -"Przy wysokich rozdzielczościach kiedy rozdzielczość pozioma jest mniejsza " -"niż rozdzielczość pionowa, ta opcja wyłącza interpolację poziomą." +"Przy wysokich rozdzielczościach kiedy rozdzielczość pozioma jest " +"mniejsza niż rozdzielczość pionowa, ta opcja wyłącza interpolację " +"poziomą." -#: ../backend/genesys.c:5723 +#: ../backend/genesys.c:6235 #, no-c-format msgid "Color Filter" msgstr "Filtr kolorów" -#: ../backend/genesys.c:5726 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "W trybie szarości lub kreski ta opcja wybiera używany kolor." -#: ../backend/genesys.c:5751 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Czas wyłączania lampy" -#: ../backend/genesys.c:5754 +#: ../backend/genesys.c:6267 #, 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." +"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 "" -"Lampa zostanie wyłączona po podanym czasie (w minutach). Wartość 0 oznacza, " -"że lampa nie będzie wyłączana." +"Lampa zostanie wyłączona po podanym czasie (w minutach). Wartość 0 " +"oznacza, że lampa nie będzie wyłączana." -#: ../backend/genesys.c:5783 ../backend/genesys.c:5784 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, no-c-format msgid "File button" msgstr "Przycisk pliku" -#: ../backend/genesys.c:5836 ../backend/genesys.c:5837 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "Przycisk OCR" -#: ../backend/genesys.c:5850 ../backend/genesys.c:5851 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, no-c-format msgid "Power button" msgstr "Przycisk zasilania" -#: ../backend/genesys.c:5864 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, no-c-format msgid "Need calibration" msgstr "Wymaga kalibracji" -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Skaner wymaga kalibracji dla obecnych ustawień" -#: ../backend/genesys.c:5878 ../backend/gt68xx.c:787 ../backend/gt68xx.c:788 -#: ../backend/pixma_sane_options.c:210 ../backend/plustek.c:1079 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 +#: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 +#: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Przyciski" -#: ../backend/genesys.c:5885 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Kalibracja" -#: ../backend/genesys.c:5887 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "Rozpocznij kalibrację przy użyciu specjalnej kartki" -#: ../backend/genesys.c:5901 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "Wyczyść kalibrację" -#: ../backend/genesys.c:5902 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "Wyczyść pamięć podręczną kalibracji" @@ -2338,11 +2392,11 @@ #: ../backend/gt68xx.c:573 #, no-c-format msgid "" -"Warm-up until the lamp's brightness is constant instead of insisting on 60 " -"seconds warm-up time." +"Warm-up until the lamp's brightness is constant instead of insisting on " +"60 seconds warm-up time." msgstr "" -"Rozgrzewaj dopóki jasność lampy będzie stała, zamiast przyjmować stały czas " -"60 sekund." +"Rozgrzewaj dopóki jasność lampy będzie stała, zamiast przyjmować stały " +"czas 60 sekund." #: ../backend/gt68xx.c:585 #, no-c-format @@ -2355,8 +2409,8 @@ "Scan the complete scanning area including calibration strip. Be careful. " "Don't select the full height. For testing only." msgstr "" -"Skanuj cały dostępny obszar, łącznie z paskiem kalibracyjnym. Bądź ostrożny. " -"Nie wybieraj pełnej wysokości. Opcja tylko do celów testowych" +"Skanuj cały dostępny obszar, łącznie z paskiem kalibracyjnym. Bądź " +"ostrożny. Nie wybieraj pełnej wysokości. Opcja tylko do celów testowych" #: ../backend/gt68xx.c:598 #, no-c-format @@ -2367,12 +2421,13 @@ #, 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." +"disabled, options for setting the analog frontend parameters manually " +"are provided. This option is enabled by default. For testing only." msgstr "" -"Ustaw wzmocnienie i offset dla skanowania automatycznego. Jeżeli ta opcja " -"jest zablokowana, wówczas dostępne są opcje ręcznego ustawiania parametrów " -"analogowych. Ta opcja jest odblokowana domyślnie. Opcja tylko do testów." +"Ustaw wzmocnienie i offset dla skanowania automatycznego. Jeżeli ta " +"opcja jest zablokowana, wówczas dostępne są opcje ręcznego ustawiania " +"parametrów analogowych. Ta opcja jest odblokowana domyślnie. Opcja tylko " +"do testów." #: ../backend/gt68xx.c:619 #, no-c-format @@ -2382,13 +2437,14 @@ #: ../backend/gt68xx.c:621 #, 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 "" -"Kalibracja ziarnistości jest robiona tylko dla pierwszego przebiegu. Działa " -"z większością skanerów i pozwala zaoszczędzić czas. Jeżeli jasność obrazka " -"jest różna za każdym skanem, wyłącz tę opcję. Opcja tylko dla testów." +"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 "" +"Kalibracja ziarnistości jest robiona tylko dla pierwszego przebiegu. " +"Działa z większością skanerów i pozwala zaoszczędzić czas. Jeżeli " +"jasność obrazka jest różna za każdym skanem, wyłącz tę opcję. Opcja " +"tylko dla testów." #: ../backend/gt68xx.c:654 #, no-c-format @@ -2398,14 +2454,15 @@ #: ../backend/gt68xx.c:656 #, 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 "" -"Liczba linii o które powraca głowica, gdy wystąpi nawracanie. To się zdarza " -"gdy skaner skanuje szybciej niż komputer może odebrać dane. Niskie wartości " -"mogą powodować szybsze skanowanie lecz zwiększają ryzyko pominięcia " -"niektórych linii." +"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 "" +"Liczba linii o które powraca głowica, gdy wystąpi nawracanie. To się " +"zdarza gdy skaner skanuje szybciej niż komputer może odebrać dane. " +"Niskie wartości mogą powodować szybsze skanowanie lecz zwiększają ryzyko " +"pominięcia niektórych linii." #: ../backend/gt68xx.c:681 ../backend/mustek_usb2.c:452 #, no-c-format @@ -2417,12 +2474,12 @@ msgid "Sets the gamma value of all channels." msgstr "Ustawia wartość gamma dla wszystkich kanałów" -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Grupa geometrii" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Grupa trybu skanowania" @@ -2442,7 +2499,8 @@ #, no-c-format msgid "Allows to test device behaviour with other supported models" msgstr "" -"Umożliwia sprawdzenie zachowania urządzenia z innymi obsługiwanymi modelami" +"Umożliwia sprawdzenie zachowania urządzenia z innymi obsługiwanymi " +"modelami" #: ../backend/hp3900_sane.c:1422 #, no-c-format @@ -2487,13 +2545,13 @@ #: ../backend/hp3900_sane.c:1485 #, 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 "" -"Jeśli korekcja gamma jest wyłączona, wszystkie skanowania będą wykonane z 16-" -"bitową głębią w celu poprawy jakości obrazu, a następnie konwertowane do " -"wybranej głębi. Ta opcja zapobiega emulacji głębi." +"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 "" +"Jeśli korekcja gamma jest wyłączona, wszystkie skanowania będą wykonane " +"z 16-bitową głębią w celu poprawy jakości obrazu, a następnie " +"konwertowane do wybranej głębi. Ta opcja zapobiega emulacji głębi." #: ../backend/hp3900_sane.c:1499 #, no-c-format @@ -2504,11 +2562,12 @@ #, 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." +"grayscale by software. This may improve image quality in some " +"circumstances." msgstr "" -"Jeśli jest włączona, obraz będzie skanowany w trybie kolorowym, a następnie " -"konwertowany programowo do skali szarości. Może to poprawić jakość obrazu w " -"pewnych przypadkach." +"Jeśli jest włączona, obraz będzie skanowany w trybie kolorowym, a " +"następnie konwertowany programowo do skali szarości. Może to poprawić " +"jakość obrazu w pewnych przypadkach." #: ../backend/hp3900_sane.c:1516 #, no-c-format @@ -2518,8 +2577,8 @@ #: ../backend/hp3900_sane.c:1519 #, no-c-format msgid "" -"If enabled, some images involved in scanner processing are saved to analyze " -"them." +"If enabled, some images involved in scanner processing are saved to " +"analyze them." msgstr "" "Jeśli jest włączona, obrazy uczestniczące w dostrajaniu skanera są " "zapisywane w celu analizy." @@ -2736,8 +2795,9 @@ msgstr "Powolny" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Zwykły" @@ -2875,14 +2935,15 @@ #: ../backend/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 "" -"Dłuższy czas ekspozycji pozwala głowicy odebrać więcej światła. Sugerowane " -"jest 175% dla wydruków, 150% dla zwykłych slajdów i \"Negatyw\" dla filmu " -"negatywowego. Dla ciemnych (nie doświetlonych) obrazków możesz zwiększyć tę " -"wartość." +"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 "" +"Dłuższy czas ekspozycji pozwala głowicy odebrać więcej światła. " +"Sugerowane jest 175% dla wydruków, 150% dla zwykłych slajdów i \"Negatyw" +"\" dla filmu negatywowego. Dla ciemnych (nie doświetlonych) obrazków " +"możesz zwiększyć tę wartość." #: ../backend/hp-option.h:119 ../backend/hp-option.h:126 #, no-c-format @@ -2948,8 +3009,8 @@ #, no-c-format msgid "Use bit depth greater eight internally, but output only eight bits." msgstr "" -"Użyj wewnętrznie głębi większej niż osiem bitów, lecz na wyjściu daj równe " -"osiem." +"Użyj wewnętrznie głębi większej niż osiem bitów, lecz na wyjściu daj " +"równe osiem." #: ../backend/hp-option.h:164 #, no-c-format @@ -2971,6 +3032,697 @@ msgid "Shut off scanner lamp." msgstr "Wyłącz lampę skanera." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Rozmiar papieru" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Automatyczna separacja" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 krajobraz" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, fuzzy, no-c-format +msgid "Length control mode" +msgstr "Ustawienie trybu kontroli gęstości" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Ręczne wstępne ustawianie ostrości" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Ręczne wstępne ustawianie ostrości" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Włącz skanowanie dwustronne" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Fizyczny rozmiar papieru w ADF" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Półtony" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Kolor" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Kontynuacja" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Wyłącz" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, fuzzy, no-c-format +msgid "bayer_64" +msgstr "Bayera" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, fuzzy, no-c-format +msgid "bayer_16" +msgstr "Bayera" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Półtony" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Półtony" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Dyfuzja" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Zwykły" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Światło" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "skaner filmów" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Od papieru" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "Domyślny" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Wygładzanie" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Powolny" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Średni" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Czerwony" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Zielony" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Źródło skanowania" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "tryb podajnika" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Ustawia tryb podajnika" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Włączenie/wyłączenie automatycznego ustawiania ostrości" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Ustawienie trybu kontroli gęstości" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Ustawia tryb podajnika" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Ustawia tryb podajnika" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Automatyczne progowanie" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Automatycznie ustawia jasność, kontrast, poziom bieli, gammę, redukcję " +"szumów i emfazę obrazka" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Redukcja szumów" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Zmniejsz szum izolowanych punktów" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Emfaza obrazka" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Ustawia emfazę obrazka" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Włącz lampę" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Włącza lub wyłącza lampę." + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Pionowe, lustrzane odbicie obrazka." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Korekcja gamma" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Druk wysokiej gęstości" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Druk niskiej gęstości" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Dyfuzja" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Brak korekcji" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Zwykły" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Ulepszanie" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Automatyczne progowanie" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Automatyczne progowanie" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Ustaw kolejność ramek" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Cień dla niebieskiego" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Przesuń czerwień do błękitu" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -2996,52 +3748,55 @@ msgid "8x8 Vertical Line" msgstr "Linie pionowe 8x8" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Wzmocnienie" -#: ../backend/lexmark.c:265 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Ustawienia wzmocnienia kanałów kolorów" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Wzmocnienie szarości" -#: ../backend/lexmark.c:275 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Ustawia wzmocnienie kanału szarości" -#: ../backend/lexmark.c:288 ../backend/plustek.c:1000 ../backend/umax_pp.c:735 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 +#: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Wzmocnienie czerwieni" -#: ../backend/lexmark.c:289 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Ustawia wzmocnienie kanału czerwieni" -#: ../backend/lexmark.c:302 ../backend/plustek.c:1016 ../backend/umax_pp.c:747 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 +#: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Wzmocnienie zieleni" -#: ../backend/lexmark.c:303 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Ustawia wzmocnienie kanału zieleni" -#: ../backend/lexmark.c:316 ../backend/plustek.c:1032 ../backend/umax_pp.c:759 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 +#: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Wzmocnienie błękitu" -#: ../backend/lexmark.c:317 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Ustawia wzmocnienie kanału błękitu" @@ -3091,11 +3846,6 @@ msgid "From white stick" msgstr "Od białego elementu" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Od papieru" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3137,56 +3887,6 @@ msgid "sheetfed scanner" msgstr "skaner arkuszy" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "tryb podajnika" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Ustawia tryb podajnika" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Automatyczne progowanie" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise reduction " -"and image emphasis" -msgstr "" -"Automatycznie ustawia jasność, kontrast, poziom bieli, gammę, redukcję " -"szumów i emfazę obrazka" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Redukcja szumów" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Zmniejsz szum izolowanych punktów" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Emfaza obrazka" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Ustawia emfazę obrazka" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3197,26 +3897,6 @@ msgid "Grayscale 8 bits" msgstr "Skala szarości w 8-bitach" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Rozmiar papieru" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Automatyczna separacja" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Włącz skanowanie dwustronne" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Fizyczny rozmiar papieru w ADF" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3259,7 +3939,8 @@ #: ../backend/microtek2.h:617 #, no-c-format -msgid "If checked the color calibration before a scan is done by the backend" +msgid "" +"If checked the color calibration before a scan is done by the backend" msgstr "" "Jeśli zaznaczone, sterownik wykonuje kalibrację kolorów przed skanowaniem" @@ -3303,16 +3984,11 @@ #: ../backend/microtek2.h:635 #, no-c-format msgid "" -"If checked the backend automatically tries to determine an optimal value for " -"the threshold." +"If checked the backend automatically tries to determine an optimal value " +"for the threshold." msgstr "" -"Jeżeli zaznaczone, sterownik automatycznie próbuje znaleźć optymalną wartość " -"dla progu." - -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Korekcja gamma" +"Jeżeli zaznaczone, sterownik automatycznie próbuje znaleźć optymalną " +"wartość dla progu." #: ../backend/microtek2.h:641 #, no-c-format @@ -3388,7 +4064,8 @@ #: ../backend/microtek2.h:675 #, no-c-format msgid "Selects which radiance level should be considered \"50 % gray\"." -msgstr "Decyduje o tym jaki poziom jasności ma być uznawany za \"50% szarego\"" +msgstr "" +"Decyduje o tym jaki poziom jasności ma być uznawany za \"50% szarego\"" #: ../backend/microtek2.h:679 #, no-c-format @@ -3421,7 +4098,8 @@ #, no-c-format msgid "Selects which radiance level should be considered \"50 % blue\"." msgstr "" -"Decyduje o tym jaki poziom jasności ma być uznawany za \"50% niebieskiego\"" +"Decyduje o tym jaki poziom jasności ma być uznawany za \"50% niebieskiego" +"\"" #: ../backend/microtek2.h:694 #, no-c-format @@ -3454,7 +4132,8 @@ #, no-c-format msgid "Balance factor for blue. A value of 100% means no correction." msgstr "" -"Współczynnik balansu dla niebieskiego. Wartość 100% oznacza brak korekcji." +"Współczynnik balansu dla niebieskiego. Wartość 100% oznacza brak " +"korekcji." #: ../backend/microtek2.h:709 #, no-c-format @@ -3464,7 +4143,8 @@ #: ../backend/microtek2.h:710 #, no-c-format msgid "Sets the color balance values to the firmware provided values." -msgstr "Ustawia balans kolorów na wartości podane przez oprogramowania skanera" +msgstr "" +"Ustawia balans kolorów na wartości podane przez oprogramowania skanera" #: ../backend/mustek.c:149 #, no-c-format @@ -3589,11 +4269,12 @@ #: ../backend/mustek.c:4335 #, 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." +"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 "" -"Żądanie aby wszystkie podglądy były wykonywane w najszybszym trybie (niskiej " -"jakości). To może być tryb niekolorowy lub niskiej rozdzielczości." +"Żądanie aby wszystkie podglądy były wykonywane w najszybszym trybie " +"(niskiej jakości). To może być tryb niekolorowy lub niskiej " +"rozdzielczości." #: ../backend/mustek.c:4343 #, no-c-format @@ -3708,11 +4389,11 @@ #: ../backend/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." +"Warm-up until the lamp's brightness is constant instead of insisting on " +"40 seconds warm-up time." msgstr "" -"Rozgrzewaj dopóki jasność lampy będzie stała, zamiast przyjmować stały czas " -"40 sekund." +"Rozgrzewaj dopóki jasność lampy będzie stała, zamiast przyjmować stały " +"czas 40 sekund." #: ../backend/pixma_sane_options.c:91 #, no-c-format @@ -3728,8 +4409,8 @@ msgstr "" "Kiedy jest włączone, proces skanowania nie zacznie się natychmiast. Aby " "kontynuować, należy nacisnąć przycisk \"SCAN\" (dla MP150) lub przycisk " -"\"COLOR\" (dla innych modeli). Aby anulować, należy nacisnąć przycisk \"GRAY" -"\"." +"\"COLOR\" (dla innych modeli). Aby anulować, należy nacisnąć przycisk " +"\"GRAY\"." #: ../backend/pixma_sane_options.c:216 #, no-c-format @@ -3746,7 +4427,8 @@ msgid "Button 2" msgstr "Przycisk 2" -#: ../backend/plustek.c:234 ../backend/plustek_pp.c:201 ../backend/u12.c:156 +#: ../backend/plustek.c:234 ../backend/plustek_pp.c:201 +#: ../backend/u12.c:156 #, no-c-format msgid "Transparency" msgstr "Materiały fotograficzne" @@ -3954,8 +4636,8 @@ #: ../backend/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." +"Simulate a three-pass scanner by returning 3 separate frames. For " +"kicks, it returns green, then blue, then red." msgstr "" "Symuluje skaner trójprzebiegowy zwracając trzy oddzielne ramki: zieloną, " "potem niebieską a na końcu czerwoną." @@ -3968,19 +4650,21 @@ #: ../backend/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 "" -"Symuluje skaner ręczny. Skanery ręczne zwykle nie znają wysokości obrazka. " -"Zamiast tego zwracają wysokość -1. Ustawienie tej opcji pozwala sprawdzić " -"czy frontend obsługuje to poprawnie." +"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 "" +"Symuluje skaner ręczny. Skanery ręczne zwykle nie znają wysokości " +"obrazka. Zamiast tego zwracają wysokość -1. Ustawienie tej opcji pozwala " +"sprawdzić czy frontend obsługuje to poprawnie." #: ../backend/pnm.c:283 #, no-c-format -msgid "Set default values for enhancement controls (brightness & contrast)." +msgid "" +"Set default values for enhancement controls (brightness & contrast)." msgstr "" -"Przywróć domyślne wartości dla ustawień ulepszania (jasności i kontrastu)." +"Przywróć domyślne wartości dla ustawień ulepszania (jasności i " +"kontrastu)." #: ../backend/pnm.c:295 #, no-c-format @@ -4020,11 +4704,11 @@ #: ../backend/pnm.c:404 #, no-c-format msgid "" -"Force the backend to return the status code SANE_STATUS_EOF after sane_read" -"() has been called." +"Force the backend to return the status code SANE_STATUS_EOF after " +"sane_read() has been called." msgstr "" -"Zmuś sterownik by zwrócił kod SANE_STATUS_EOF po tym jak została wywołana " -"funkcja sane_read()." +"Zmuś sterownik by zwrócił kod SANE_STATUS_EOF po tym jak została " +"wywołana funkcja sane_read()." #: ../backend/pnm.c:416 #, no-c-format @@ -4037,8 +4721,8 @@ "Force the backend to return the status code SANE_STATUS_JAMMED after " "sane_read() has been called." msgstr "" -"Zmuś sterownik by zwrócił kod SANE_STATUS_JAMMED po tym jak została wywołana " -"funkcja sane_read()." +"Zmuś sterownik by zwrócił kod SANE_STATUS_JAMMED po tym jak została " +"wywołana funkcja sane_read()." #: ../backend/pnm.c:430 #, no-c-format @@ -4093,8 +4777,8 @@ "Force the backend to return the status code SANE_STATUS_NO_MEM after " "sane_read() has been called." msgstr "" -"Zmuś sterownik by zwrócił kod po tym jak została wywołana funkcja sane_read" -"()." +"Zmuś sterownik by zwrócił kod po tym jak została wywołana funkcja " +"sane_read()." #: ../backend/pnm.c:483 #, no-c-format @@ -4104,18 +4788,19 @@ #: ../backend/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." +"Force the backend to return the status code SANE_STATUS_ACCESS_DENIED " +"after sane_read() has been called." msgstr "" -"Zmuś sterownik by zwrócił kod SANE_STATUS_ACCESS_DENIED po tym jak została " -"wywołana funkcja sane_read()." +"Zmuś sterownik by zwrócił kod SANE_STATUS_ACCESS_DENIED po tym jak " +"została wywołana funkcja sane_read()." #: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "Opcja ta odzwierciedla stan przycisku skanera." -#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 ../backend/umax_pp.c:639 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 +#: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Włącz lampę" @@ -4125,12 +4810,14 @@ msgid "Turn on scanner lamp" msgstr "Włącza lampę skanera" -#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 ../backend/umax.c:5812 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 +#: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Wyłącz lampę" -#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 ../backend/umax.c:5813 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 +#: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" msgstr "Wyłącza lampę skanera" @@ -4189,16 +4876,17 @@ #, 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." +"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 "" "Liczba skanowanych linii w jednym żądaniu odczytu SCSI. Zmiana tego " -"parametru umożliwia dostrojenie prędkości przy której dane są odczytywane ze " -"skanera podczas skanowania. Jeżeli parametr jest ustawiony zbyt nisko, " -"skaner będzie musiał się okresowo zatrzymywać w połowie pracy; jeżeli za " -"wysoko, graficzne frontendy mogą przestać odpowiadać." +"parametru umożliwia dostrojenie prędkości przy której dane są " +"odczytywane ze skanera podczas skanowania. Jeżeli parametr jest " +"ustawiony zbyt nisko, skaner będzie musiał się okresowo zatrzymywać w " +"połowie pracy; jeżeli za wysoko, graficzne frontendy mogą przestać " +"odpowiadać." #: ../backend/snapscan-options.c:436 #, no-c-format @@ -4211,8 +4899,8 @@ "Select the mode for previews. Greyscale previews usually give the best " "combination of speed and detail." msgstr "" -"Wybierz tryb dla podglądów. Podglądy w skali szarości zwykle dają najlepszą " -"kombinację szybkości i detali." +"Wybierz tryb dla podglądów. Podglądy w skali szarości zwykle dają " +"najlepszą kombinację szybkości i detali." #: ../backend/snapscan-options.c:545 #, no-c-format @@ -4222,8 +4910,10 @@ #: ../backend/snapscan-options.c:547 #, no-c-format msgid "" -"Provides standard scanning areas for photographs, printed pages and the like." -msgstr "Udostępnia standardowe obszary skanowania dla fotografii, druków itp." +"Provides standard scanning areas for photographs, printed pages and the " +"like." +msgstr "" +"Udostępnia standardowe obszary skanowania dla fotografii, druków itp." #: ../backend/snapscan-options.c:823 #, no-c-format @@ -4291,8 +4981,8 @@ "This is the very long third entry. Maybe the frontend has an idea how to " "display it" msgstr "" -"To jest bardzo długa trzecia pozycja. Być może frontend ma jakiś pomysł jak " -"ją wyświetlić" +"To jest bardzo długa trzecia pozycja. Być może frontend ma jakiś pomysł " +"jak ją wyświetlić" #: ../backend/test.c:348 #, no-c-format @@ -4303,14 +4993,14 @@ #, 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 "" -"Symuluje skaner ręczny. Skanery ręczne zwykle nie znają wysokości obrazka. " -"Zamiast tego zwracają wysokość -1. Ustawienie tej opcji pozwala sprawdzić " -"czy frontend obsługuje to poprawnie. Ta opcja również włącza szerokość " -"ustaloną 11 cm." +"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 "" +"Symuluje skaner ręczny. Skanery ręczne zwykle nie znają wysokości " +"obrazka. Zamiast tego zwracają wysokość -1. Ustawienie tej opcji pozwala " +"sprawdzić czy frontend obsługuje to poprawnie. Ta opcja również włącza " +"szerokość ustaloną 11 cm." #: ../backend/test.c:366 #, no-c-format @@ -4320,9 +5010,11 @@ #: ../backend/test.c:367 #, no-c-format msgid "" -"Simulate a three-pass scanner. In color mode, three frames are transmitted." +"Simulate a three-pass scanner. In color mode, three frames are " +"transmitted." msgstr "" -"Symuluje skaner trójprzebiegowy. W trybie kolorowym przesyłane są trzy ramki." +"Symuluje skaner trójprzebiegowy. W trybie kolorowym przesyłane są trzy " +"ramki." #: ../backend/test.c:382 #, no-c-format @@ -4337,8 +5029,8 @@ #: ../backend/test.c:416 #, no-c-format msgid "" -"If Automatic Document Feeder is selected, the feeder will be 'empty' after " -"10 scans." +"If Automatic Document Feeder is selected, the feeder will be 'empty' " +"after 10 scans." msgstr "" "Jeśli wybrano automatyczny podajnij dokumentów (ADF), podajnik będzie " "'pusty' po 10 skanach." @@ -4360,7 +5052,8 @@ "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 "" "Wybierz rodzaj obrazu testowego. Dostępne opcje:\n" "Całkowicie czarny: wypełnia skan czernią.\n" @@ -4376,13 +5069,13 @@ #: ../backend/test.c:468 #, 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 "" -"Zamienia górny i dolny bajt danych obrazu w trybach 15-bitowych. Ta opcja " -"może być używana do testowania 16-bitowych trybów frontendów, np. czy " -"frontend używa odpowiedniej kolejności." +"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 "" +"Zamienia górny i dolny bajt danych obrazu w trybach 15-bitowych. Ta " +"opcja może być używana do testowania 16-bitowych trybów frontendów, np. " +"czy frontend używa odpowiedniej kolejności." #: ../backend/test.c:484 #, no-c-format @@ -4393,8 +5086,8 @@ #, no-c-format msgid "Limit the amount of data transferred with each call to sane_read()." msgstr "" -"Ogranicza ilość danych przesyłanych przy każdym wywołaniu funkcji sane_read" -"()." +"Ogranicza ilość danych przesyłanych przy każdym wywołaniu funkcji " +"sane_read()." #: ../backend/test.c:498 #, no-c-format @@ -4403,9 +5096,11 @@ #: ../backend/test.c:499 #, no-c-format -msgid "The (maximum) amount of data transferred with each call to sane_read()." +msgid "" +"The (maximum) amount of data transferred with each call to sane_read()." msgstr "" -"(maksymalna) ilość danych transmitowanych z każdym wywołaniem sane_read()." +"(maksymalna) ilość danych transmitowanych z każdym wywołaniem sane_read" +"()." #: ../backend/test.c:514 #, no-c-format @@ -4436,12 +5131,13 @@ #: ../backend/test.c:545 #, 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 "" -"Ustawia wartość powrotną sane_read(). \"Domyślne\" jest zwykłe skanowanie. " -"Wszystkie inne kody statusu służą do testowania jak traktuje je frontend." +"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 "" +"Ustawia wartość powrotną sane_read(). \"Domyślne\" jest zwykłe " +"skanowanie. Wszystkie inne kody statusu służą do testowania jak traktuje " +"je frontend." #: ../backend/test.c:562 #, no-c-format @@ -4464,8 +5160,8 @@ "Return fuzzy lines and bytes per line when sane_parameters() is called " "before sane_start()." msgstr "" -"Zwraca rozmyte linie i bajty na linię gdy wywoływany jest sane_parameters() " -"przed sane_start()." +"Zwraca rozmyte linie i bajty na linię gdy wywoływany jest sane_parameters" +"() przed sane_start()." #: ../backend/test.c:591 #, no-c-format @@ -4487,9 +5183,11 @@ #: ../backend/test.c:606 #, no-c-format msgid "" -"Offer a select filedescriptor for detecting if sane_read() will return data." +"Offer a select filedescriptor for detecting if sane_read() will return " +"data." msgstr "" -"Proponuj deskryptor pliku \"select\" jeżeli sane_read() będzie zwracaj dane." +"Proponuj deskryptor pliku \"select\" jeżeli sane_read() będzie zwracaj " +"dane." #: ../backend/test.c:619 #, no-c-format @@ -4499,11 +5197,11 @@ #: ../backend/test.c:620 #, 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." +"Enable various test options. This is for testing the ability of " +"frontends to view and modify all the different SANE option types." msgstr "" -"Udostępnia różne opcje testowe. Służy do testowania możliwości frontendów do " -"przeglądania i modyfikowania różnych typów opcji SANE." +"Udostępnia różne opcje testowe. Służy do testowania możliwości " +"frontendów do przeglądania i modyfikowania różnych typów opcji SANE." #: ../backend/test.c:634 #, no-c-format @@ -4528,11 +5226,11 @@ #: ../backend/test.c:727 #, 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." +"(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) logiczna opcja testowa, która umożliwia miękki wybór i miękkie (oraz " -"zaawansowane) wykrywanie możliwości. Jest to zwykła opcja logiczna." +"(1/6) logiczna opcja testowa, która umożliwia miękki wybór i miękkie " +"(oraz zaawansowane) wykrywanie możliwości. Jest to zwykła opcja logiczna." #: ../backend/test.c:743 #, no-c-format @@ -4542,9 +5240,9 @@ #: ../backend/test.c:745 #, 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)." +"(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) Logiczna opcja testowa, która umożliwia twardy wybór i miękkie " "wykrywanie (również zaawansowanych) możliwości. Oznacza to, że opcja nie " @@ -4560,13 +5258,13 @@ #, 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." +"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) Logiczna opcja testowa, która umożliwia twardy wybór możliwości. " "Oznacza to, że opcja nie może być ustawiona przez frontend, tylko przez " -"użytkownika (np. przez przyciśnięcie przycisku na urządzeniu) i nie może być " -"odczytywana przez frontend" +"użytkownika (np. przez przyciśnięcie przycisku na urządzeniu) i nie może " +"być odczytywana przez frontend" #: ../backend/test.c:781 #, no-c-format @@ -4579,8 +5277,9 @@ "(4/6) Bool test option that has soft detect (and advanced) capabilities. " "That means the option is read-only." msgstr "" -"(4/6) Logiczna opcja testowa, która umożliwia miękkie wykrywanie (również " -"zaawansowanych) możliwości. Oznacza to, że jest tylko do odczytu." +"(4/6) Logiczna opcja testowa, która umożliwia miękkie wykrywanie " +"(również zaawansowanych) możliwości. Oznacza to, że jest tylko do " +"odczytu." #: ../backend/test.c:798 #, no-c-format @@ -4590,8 +5289,8 @@ #: ../backend/test.c:799 #, no-c-format msgid "" -"(5/6) Bool test option that has soft select, soft detect, and emulated (and " -"advanced) capabilities." +"(5/6) Bool test option that has soft select, soft detect, and emulated " +"(and advanced) capabilities." msgstr "" "(5/6) Logiczna opcja testowa, która umożliwia miękki wybór, miękkie " "wykrywanie i emulowanie (również zaawansowanych) możliwości" @@ -4604,12 +5303,13 @@ #: ../backend/test.c:816 #, 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." +"(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) Logiczna opcja testowa, która umożliwia miękki wybór, miękkie " -"wykrywanie i automatyczne (oraz zaawansowane) możliwości. Ta opcja może być " -"automatycznie ustawiania przez sterownik." +"wykrywanie i automatyczne (oraz zaawansowane) możliwości. Ta opcja może " +"być automatycznie ustawiania przez sterownik." #: ../backend/test.c:833 #, no-c-format @@ -4625,7 +5325,8 @@ #, no-c-format msgid "(1/6) Int test option with no unit and no constraint set." msgstr "" -"(1/6) Opcja testowa typu całkowitego bez narzuconych jednostek i ograniczeń" +"(1/6) Opcja testowa typu całkowitego bez narzuconych jednostek i " +"ograniczeń" #: ../backend/test.c:862 #, no-c-format @@ -4635,8 +5336,8 @@ #: ../backend/test.c:863 #, 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." +"(2/6) Int test option with unit pixel and constraint range set. Minimum " +"is 4, maximum 192, and quant is 2." msgstr "(2/6) Opcja testowa typu całkowitego " #: ../backend/test.c:879 @@ -4659,10 +5360,11 @@ #: ../backend/test.c:896 #, no-c-format msgid "" -"(4/6) Int test option with unit mm and using an array without constraints." +"(4/6) Int test option with unit mm and using an array without " +"constraints." msgstr "" -"(4/6) Opcja testowa typu całkowitego z jednostką w mm, używająca macierzy " -"nieograniczonej" +"(4/6) Opcja testowa typu całkowitego z jednostką w mm, używająca " +"macierzy nieograniczonej" #: ../backend/test.c:911 #, no-c-format @@ -4675,8 +5377,9 @@ "(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) Opcja testowa typu całkowitego z jednostką w dpi, używająca tablicy z " -"ograniczeniem zasięgu. Minimum to 4, maksimum 192, a kwant to 2." +"(5/6) Opcja testowa typu całkowitego z jednostką w dpi, używająca " +"tablicy z ograniczeniem zasięgu. Minimum to 4, maksimum 192, a kwant to " +"2." #: ../backend/test.c:929 #, no-c-format @@ -4686,8 +5389,8 @@ #: ../backend/test.c:930 #, no-c-format msgid "" -"(6/6) Int test option with unit percent and using an array with a word list " -"constraint." +"(6/6) Int test option with unit percent and using an array with a word " +"list constraint." msgstr "" "(6/6) Opcja testowa typu całkowitego z jednostką w procentach, używająca " "tablicy ograniczonej słownikiem" @@ -4705,7 +5408,8 @@ #: ../backend/test.c:960 #, no-c-format msgid "(1/3) Fixed test option with no unit and no constraint set." -msgstr "(1/3) Opcja testowa stałoprzecinkowa bez jednostek i bez ograniczeń" +msgstr "" +"(1/3) Opcja testowa stałoprzecinkowa bez jednostek i bez ograniczeń" #: ../backend/test.c:975 #, no-c-format @@ -4719,8 +5423,8 @@ "Minimum is -42.17, maximum 32767.9999, and quant is 2.0." msgstr "" "(2/3) Opcja testowa stałoprzecinkowa z jednostką w mikrosekundach i " -"ograniczonym zasięgiem. Minimum to -42.17, maksimum 32767.9999 a kwant to " -"2.0." +"ograniczonym zasięgiem. Minimum to -42.17, maksimum 32767.9999 a kwant " +"to 2.0." #: ../backend/test.c:992 #, no-c-format @@ -4731,7 +5435,8 @@ #, no-c-format msgid "(3/3) Fixed test option with no unit and constraint word list set." msgstr "" -"(3/3) Opcja testowa stałoprzecinkowa bez jednostek, ograniczona słownikiem" +"(3/3) Opcja testowa stałoprzecinkowa bez jednostek, ograniczona " +"słownikiem" #: ../backend/test.c:1008 #, no-c-format diff -Nru sane-backends-1.0.22/po/pt.po sane-backends-1.0.23/po/pt.po --- sane-backends-1.0.22/po/pt.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/pt.po 2011-07-07 14:43:25.000000000 +0000 @@ -5,7 +5,7 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.10\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-05-27 11:57-0300\n" "PO-Revision-Date: 2007-05-08 13:31+0200\n" "Last-Translator: Pedro Morais \n" "Language-Team: pt \n" @@ -25,9 +25,9 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/leo.c:823 ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -35,13 +35,14 @@ #: ../backend/sceptre.c:702 ../backend/snapscan-options.c:494 #: ../backend/teco1.c:1095 ../backend/teco2.c:1914 ../backend/teco3.c:920 #: ../backend/test.c:647 ../backend/u12.c:546 ../backend/umax.c:5176 -#: ../backend/umax_pp.c:580 +#: ../backend/umax_pp.c:580 ../backend/kvs1025_opt.c:638 +#: ../backend/kvs20xx_opt.c:284 #, no-c-format msgid "Geometry" msgstr "Geometria" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 #: ../backend/leo.c:871 ../backend/ma1509.c:599 #: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 @@ -52,13 +53,15 @@ #: ../backend/stv680.c:1067 ../backend/teco1.c:1143 #: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 #: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:702 #, no-c-format msgid "Enhancement" msgstr "Melhorias" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 +#: ../backend/kvs20xx_opt.c:365 #, no-c-format msgid "Advanced" msgstr "" @@ -107,52 +110,52 @@ #: ../include/sane/saneopts.h:169 #, no-c-format msgid "Top-left x" -msgstr "" +msgstr "Superior-esquerda x" #: ../include/sane/saneopts.h:170 #, no-c-format msgid "Top-left y" -msgstr "" +msgstr "Superior-esquerda y" #: ../include/sane/saneopts.h:171 #, no-c-format msgid "Bottom-right x" -msgstr "" +msgstr "Inferior-direita x" #: ../include/sane/saneopts.h:172 #, no-c-format msgid "Bottom-right y" -msgstr "" +msgstr "Inferior-direita y" #: ../include/sane/saneopts.h:173 ../backend/canon.c:1219 #, no-c-format msgid "Scan resolution" -msgstr "" +msgstr "Resolução digitalização" #: ../include/sane/saneopts.h:174 #, no-c-format msgid "X-resolution" -msgstr "" +msgstr "X-Resolução" #: ../include/sane/saneopts.h:175 #, no-c-format msgid "Y-resolution" -msgstr "" +msgstr "Y-Resolução" #: ../include/sane/saneopts.h:176 #, no-c-format msgid "Page width" -msgstr "" +msgstr "Largura página" #: ../include/sane/saneopts.h:177 #, no-c-format msgid "Page height" -msgstr "" +msgstr "Altura página" #: ../include/sane/saneopts.h:178 #, no-c-format msgid "Use custom gamma table" -msgstr "" +msgstr "Usar tabela customizada gamma" #: ../include/sane/saneopts.h:179 #, no-c-format @@ -192,7 +195,7 @@ #: ../include/sane/saneopts.h:186 #, no-c-format msgid "Halftoning" -msgstr "" +msgstr "Simulação de cinza" #: ../include/sane/saneopts.h:187 #, no-c-format @@ -242,7 +245,7 @@ #: ../include/sane/saneopts.h:196 #, no-c-format msgid "Highlight" -msgstr "" +msgstr "Clarear" #: ../include/sane/saneopts.h:197 #, no-c-format @@ -262,7 +265,7 @@ #: ../include/sane/saneopts.h:200 #, no-c-format msgid "Hue" -msgstr "" +msgstr "Natural-Hue" #: ../include/sane/saneopts.h:201 #, no-c-format @@ -277,17 +280,17 @@ #: ../include/sane/saneopts.h:203 #, no-c-format msgid "Halftone pattern size" -msgstr "" +msgstr "Tamanho padrão ponto - simulação cinza" #: ../include/sane/saneopts.h:204 #, no-c-format msgid "Halftone pattern" -msgstr "" +msgstr "Simulação cinza padrão" #: ../include/sane/saneopts.h:205 #, no-c-format msgid "Bind X and Y resolution" -msgstr "" +msgstr "Vincular resoluções X e Y" #: ../include/sane/saneopts.h:206 ../backend/hp3900_sane.c:428 #: ../backend/hp3900_sane.c:1021 ../backend/hp3900_sane.c:1421 @@ -306,112 +309,112 @@ #: ../include/sane/saneopts.h:208 #, no-c-format msgid "Double Optical Resolution" -msgstr "" +msgstr "Resolução ótica dupla" #: ../include/sane/saneopts.h:209 #, no-c-format msgid "Bind RGB" -msgstr "" +msgstr "Vincular RGB" #: ../include/sane/saneopts.h:210 ../backend/sm3840.c:770 #, no-c-format msgid "Threshold" -msgstr "" +msgstr "Valor do pixel-Threshold" #: ../include/sane/saneopts.h:211 #, no-c-format msgid "Analog gamma correction" -msgstr "" +msgstr "Correção analógica do gama" #: ../include/sane/saneopts.h:212 #, no-c-format msgid "Analog gamma red" -msgstr "" +msgstr "Gama analógico vermelho" #: ../include/sane/saneopts.h:213 #, no-c-format msgid "Analog gamma green" -msgstr "" +msgstr "Gama analógico verde" #: ../include/sane/saneopts.h:214 #, no-c-format msgid "Analog gamma blue" -msgstr "" +msgstr "Gama analógico azul" #: ../include/sane/saneopts.h:215 #, no-c-format msgid "Bind analog gamma" -msgstr "" +msgstr "Vincular gama analógico" #: ../include/sane/saneopts.h:216 #, no-c-format msgid "Warmup lamp" -msgstr "" +msgstr "Aquecimento da lâmpada" #: ../include/sane/saneopts.h:217 #, no-c-format msgid "Cal. exposure-time" -msgstr "" +msgstr "Tempo de exposição Cal." #: ../include/sane/saneopts.h:218 #, no-c-format msgid "Cal. exposure-time for red" -msgstr "" +msgstr "Tempo de exposição Cal. para Vermelho" #: ../include/sane/saneopts.h:219 #, no-c-format msgid "Cal. exposure-time for green" -msgstr "" +msgstr "Tempo de exposição Cal. para Verde" #: ../include/sane/saneopts.h:221 #, no-c-format msgid "Cal. exposure-time for blue" -msgstr "" +msgstr "Tempo de exposição Cal. para azul" #: ../include/sane/saneopts.h:222 #, no-c-format msgid "Scan exposure-time" -msgstr "" +msgstr "Tempo de exposição digitalização" #: ../include/sane/saneopts.h:223 #, no-c-format msgid "Scan exposure-time for red" -msgstr "" +msgstr "Tempo de exposição digitalização para Vermelho" #: ../include/sane/saneopts.h:224 #, no-c-format msgid "Scan exposure-time for green" -msgstr "" +msgstr "Tempo de exposição digitalização para Verde" #: ../include/sane/saneopts.h:226 #, no-c-format msgid "Scan exposure-time for blue" -msgstr "" +msgstr "Tempo de exposição digitalização para Azul" #: ../include/sane/saneopts.h:227 #, no-c-format msgid "Set exposure-time" -msgstr "" +msgstr "Definir tempo de exposição" #: ../include/sane/saneopts.h:228 #, no-c-format msgid "Cal. lamp density" -msgstr "" +msgstr "Densidade lâmpada Cal." #: ../include/sane/saneopts.h:229 #, no-c-format msgid "Scan lamp density" -msgstr "" +msgstr "Densidade luz de digitalização" #: ../include/sane/saneopts.h:230 #, no-c-format msgid "Set lamp density" -msgstr "" +msgstr "Definir densidade da luz" #: ../include/sane/saneopts.h:231 ../backend/umax.c:5829 #, no-c-format msgid "Lamp off at exit" -msgstr "" +msgstr "Desligar lâmpada na saída" #: ../include/sane/saneopts.h:245 #, no-c-format @@ -423,32 +426,32 @@ #: ../include/sane/saneopts.h:248 #, no-c-format msgid "Source, mode and resolution options" -msgstr "" +msgstr "Opções de Fonte, Modo e Resolução" #: ../include/sane/saneopts.h:249 #, no-c-format msgid "Scan area and media size options" -msgstr "" +msgstr "Opções de digitalização de área e mídia" #: ../include/sane/saneopts.h:250 #, fuzzy, no-c-format msgid "Image modification options" -msgstr "Número de opções" +msgstr "Opções para alteração de imagens" #: ../include/sane/saneopts.h:251 #, no-c-format msgid "Hardware specific options" -msgstr "" +msgstr "Opções específicas de hardware" #: ../include/sane/saneopts.h:252 #, no-c-format msgid "Scanner sensors and buttons" -msgstr "" +msgstr "ensores e botôes do scanner" #: ../include/sane/saneopts.h:255 #, no-c-format msgid "Request a preview-quality scan." -msgstr "" +msgstr "Solicitar pré-visualização com qualidade da digitalização" #: ../include/sane/saneopts.h:258 #, no-c-format @@ -468,57 +471,57 @@ #: ../include/sane/saneopts.h:268 #, no-c-format msgid "Selects the scan mode (e.g., lineart, monochrome, or color)." -msgstr "" +msgstr "Selecionar Modo de digitalização ex. monocromático, colorido, ..." #: ../include/sane/saneopts.h:271 #, no-c-format msgid "Determines the speed at which the scan proceeds." -msgstr "" +msgstr "Determina em qual velocidade digitaliza" #: ../include/sane/saneopts.h:274 #, no-c-format msgid "Selects the scan source (such as a document-feeder)." -msgstr "" +msgstr "Seleciona fonte para digitalização (ex. ADF)" #: ../include/sane/saneopts.h:277 #, no-c-format msgid "Controls whether backtracking is forced." -msgstr "" +msgstr "ontrola se o backtracking é forçado" #: ../include/sane/saneopts.h:280 #, no-c-format msgid "Top-left x position of scan area." -msgstr "" +msgstr "Posição de área de digitalização Superior-esquerda x" #: ../include/sane/saneopts.h:283 #, no-c-format msgid "Top-left y position of scan area." -msgstr "" +msgstr "Posição de área de digitalização Superior-esquerda y " #: ../include/sane/saneopts.h:286 #, no-c-format msgid "Bottom-right x position of scan area." -msgstr "" +msgstr "Posição de área de digitalização Inferior-direita x" #: ../include/sane/saneopts.h:289 #, no-c-format msgid "Bottom-right y position of scan area." -msgstr "" +msgstr "Posição de área de digitalização Inferior-direita y" #: ../include/sane/saneopts.h:292 #, no-c-format msgid "Sets the resolution of the scanned image." -msgstr "" +msgstr "efine resolução de saída" #: ../include/sane/saneopts.h:295 #, no-c-format msgid "Sets the horizontal resolution of the scanned image." -msgstr "" +msgstr "Define resolução horizontal de saída " #: ../include/sane/saneopts.h:298 #, no-c-format msgid "Sets the vertical resolution of the scanned image." -msgstr "" +msgstr "Define resolução horizontal de saída" #: ../include/sane/saneopts.h:301 #, no-c-format @@ -530,13 +533,14 @@ #: ../include/sane/saneopts.h:305 #, no-c-format msgid "Specifies the height of the media." -msgstr "" +msgstr "Especifica a altura da mídia" #: ../include/sane/saneopts.h:308 #, no-c-format msgid "" "Determines whether a builtin or a custom gamma-table should be used." msgstr "" +"Determine se um builtin ou tabela customizada gama deve ser utilizada" #: ../include/sane/saneopts.h:312 #, no-c-format @@ -549,17 +553,17 @@ #: ../include/sane/saneopts.h:317 #, no-c-format msgid "Gamma-correction table for the red band." -msgstr "" +msgstr "Tabela correção Gama para banda vermelha" #: ../include/sane/saneopts.h:320 #, no-c-format msgid "Gamma-correction table for the green band." -msgstr "" +msgstr "Tabela correção Gama para banda verde" #: ../include/sane/saneopts.h:323 #, no-c-format msgid "Gamma-correction table for the blue band." -msgstr "" +msgstr "Tabela correção Gama para banda azul" #: ../include/sane/saneopts.h:326 #, no-c-format @@ -582,6 +586,8 @@ #, no-c-format msgid "Selects whether the acquired image should be halftoned (dithered)." msgstr "" +"Defina se a imagem inserida deve ser simulada em cinza (halftone-" +"dithered)" #: ../include/sane/saneopts.h:339 ../include/sane/saneopts.h:354 #, no-c-format @@ -688,72 +694,72 @@ #: ../include/sane/saneopts.h:399 #, no-c-format msgid "Use lens that doubles optical resolution" -msgstr "" +msgstr "Usar lentes que duplicam a resolução ótica" #: ../include/sane/saneopts.h:401 ../include/sane/saneopts.h:413 #, no-c-format msgid "In RGB-mode use same values for each color" -msgstr "" +msgstr "Em modo RGB usar os mesmos valores para cada cor" #: ../include/sane/saneopts.h:403 #, no-c-format msgid "Select minimum-brightness to get a white point" -msgstr "" +msgstr "Selecionar brilho mínimo para obter ponto branco" #: ../include/sane/saneopts.h:405 #, no-c-format msgid "Analog gamma-correction" -msgstr "" +msgstr "Correção analógica gama" #: ../include/sane/saneopts.h:407 #, no-c-format msgid "Analog gamma-correction for red" -msgstr "" +msgstr "Correção analógica gama para Vermelho" #: ../include/sane/saneopts.h:409 #, no-c-format msgid "Analog gamma-correction for green" -msgstr "" +msgstr "Correção analógica gama para Verde" #: ../include/sane/saneopts.h:411 #, no-c-format msgid "Analog gamma-correction for blue" -msgstr "" +msgstr "Correção analógica gama para Azul" #: ../include/sane/saneopts.h:415 #, no-c-format msgid "Warmup lamp before scanning" -msgstr "" +msgstr "Aquecer lâmpada antes de digitalizar" #: ../include/sane/saneopts.h:417 #, no-c-format msgid "Define exposure-time for calibration" -msgstr "" +msgstr "Definir tempo de exposição para calibração" #: ../include/sane/saneopts.h:419 #, no-c-format msgid "Define exposure-time for red calibration" -msgstr "" +msgstr "Definir tempo de exposição para calibração do vermelho" #: ../include/sane/saneopts.h:421 #, no-c-format msgid "Define exposure-time for green calibration" -msgstr "" +msgstr "Definir tempo de exposição para calibração do verde" #: ../include/sane/saneopts.h:423 #, no-c-format msgid "Define exposure-time for blue calibration" -msgstr "" +msgstr "Definir tempo de exposição para calibração do azul" #: ../include/sane/saneopts.h:425 #, no-c-format msgid "Define exposure-time for scan" -msgstr "" +msgstr "Definir tempo de exposição para digitalização" #: ../include/sane/saneopts.h:427 #, no-c-format msgid "Define exposure-time for red scan" -msgstr "" +msgstr "Definir tempo de exposição para digitalização do vermelho" #: ../include/sane/saneopts.h:429 #, no-c-format @@ -975,22 +981,22 @@ msgid "Button state" msgstr "Estado do botão" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, fuzzy, no-c-format msgid "Duplex scan" msgstr "Digitalização completa" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1075,6 +1081,7 @@ msgstr "Mais lento" #: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/kvs1025_opt.c:181 #, no-c-format msgid "Automatic" msgstr "Automático" @@ -1350,7 +1357,7 @@ msgstr "" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 #, no-c-format msgid "Mirror image" msgstr "" @@ -1496,85 +1503,85 @@ msgid "Select the film type" msgstr "" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Flachbett" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/kodak.c:137 ../backend/hp5590.c:84 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Vermelho" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Verde" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Azul" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Melhorias" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Melhorias" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Melhorias" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1582,29 +1589,32 @@ msgid "None" msgstr "" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "" #: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 +#: ../backend/kvs1025.h:50 ../backend/kvs20xx_opt.c:203 #, no-c-format msgid "Duplex" msgstr "" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Unidade de Transparências" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "" @@ -1716,7 +1726,7 @@ msgid "CRT monitors" msgstr "Monitores CRT" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1762,12 +1772,14 @@ msgid "A5 landscape" msgstr "" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 #, no-c-format msgid "A4" msgstr "A4" @@ -1778,7 +1790,7 @@ msgstr "Máximo" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 #: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 #: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 #: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 @@ -1787,6 +1799,7 @@ #: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 #: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 #: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/kvs1025_opt.c:520 ../backend/kvs20xx_opt.c:170 #, no-c-format msgid "Scan Mode" msgstr "Modo de Digitalização" @@ -1978,11 +1991,13 @@ msgstr "" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "" @@ -2052,242 +2067,282 @@ msgid "User defined CCT profile" msgstr "Definido pelo utilizador" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, no-c-format msgid "Diffusion" msgstr "" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Nível de branco" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Nível de preto" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, no-c-format msgid "Continue" msgstr "" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, no-c-format msgid "Horizontal bold" msgstr "" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, no-c-format msgid "Horizontal narrow" msgstr "" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, no-c-format msgid "Vertical bold" msgstr "" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, no-c-format msgid "Front" msgstr "" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#: ../backend/genesys.c:6143 ../backend/kvs1025_opt.c:858 #, no-c-format -msgid "Transparency Adapter" -msgstr "Adaptador de Transparências" +msgid "Software deskew" +msgstr "Alinhamento - Deskew" + +#: ../backend/genesys.c:6144 +#, fuzzy, no-c-format +msgid "Request backend to rotate skewed pages digitally" +msgstr "Solicita ao driver para rotacionar digitalmente páginas inclinadas" + +#: ../backend/genesys.c:6151 +#, fuzzy, no-c-format +msgid "Software despeck" +msgstr "Alinhamento - Deskew" -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6152 +#, fuzzy, no-c-format +msgid "Request backend to remove lone dots digitally" +msgstr "Solicita ao driver para remover digitalmente bordas das páginas" + +#: ../backend/genesys.c:6159 ../backend/kvs1025_opt.c:867 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "Diâmetro despeckle" + +#: ../backend/genesys.c:6160 ../backend/kvs1025_opt.c:869 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" +"Diâmetro máximo de pontos isolados a serem removidos da digitalização" + +#: ../backend/genesys.c:6170 +#, fuzzy, no-c-format +msgid "Software crop" +msgstr "Crop automático" + +#: ../backend/genesys.c:6171 +#, fuzzy, no-c-format +msgid "Request backend to remove border from pages digitally" +msgstr "Solicita ao driver para remover digitalmente bordas das páginas" + +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Limiar de aquecimento" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, no-c-format msgid "Disable interpolation" msgstr "" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " "than the vertical resolution this disables horizontal interpolation." msgstr "" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, fuzzy, no-c-format msgid "Color Filter" msgstr "Linhas em cor" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, fuzzy, no-c-format msgid "Lamp off time" msgstr "Lâmpada acesa" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, 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 "" -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, no-c-format msgid "File button" msgstr "" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, no-c-format msgid "Power button" msgstr "" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Calibração rudimentar" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Calibração rudimentar apenas na primeira digitalização" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, fuzzy, no-c-format msgid "Buttons" msgstr "Estado do botão" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, fuzzy, no-c-format msgid "Calibrate" msgstr "Calibração" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Calibração rudimentar" -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Calibração rudimentar" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Modo de calibração" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Adaptador de Transparências" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2389,12 +2444,12 @@ msgid "Sets the gamma value of all channels." msgstr "Define o valor de 'gamma' em todos os canais." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, fuzzy, no-c-format msgid "Geometry Group" msgstr "Geometria" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, fuzzy, no-c-format msgid "Scan Mode Group" msgstr "Modo de Digitalização" @@ -2956,55 +3011,55 @@ msgid "8x8 Vertical Line" msgstr "" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Ganho" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Ganho do cinzento" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Ganho do canal cinzento" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Ganho do vermelho" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Ganho do canal vermelho" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Ganho do verde" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Ganho do canal verde" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Ganho do azul" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Ganho do canal azul" @@ -3054,7 +3109,7 @@ msgid "From white stick" msgstr "" -#: ../backend/matsushita.c:177 +#: ../backend/matsushita.c:177 ../backend/kvs1025_opt.c:180 #, no-c-format msgid "From paper" msgstr "" @@ -3100,50 +3155,55 @@ msgid "sheetfed scanner" msgstr "" -#: ../backend/matsushita.c:1126 +#: ../backend/matsushita.c:1126 ../backend/kvs1025_opt.c:571 +#: ../backend/kvs20xx_opt.c:217 #, no-c-format msgid "Feeder mode" msgstr "" -#: ../backend/matsushita.c:1127 +#: ../backend/matsushita.c:1127 ../backend/kvs1025_opt.c:572 +#: ../backend/kvs20xx_opt.c:218 #, no-c-format msgid "Sets the feeding mode" msgstr "" -#: ../backend/matsushita.c:1224 +#: ../backend/matsushita.c:1224 ../backend/kvs1025_opt.c:733 #, no-c-format msgid "Automatic threshold" msgstr "Limiar de aquecimento" -#: ../backend/matsushita.c:1227 +#: ../backend/matsushita.c:1227 ../backend/kvs1025_opt.c:736 #, no-c-format msgid "" "Automatically sets brightness, contrast, white level, gamma, noise " "reduction and image emphasis" msgstr "" -#: ../backend/matsushita.c:1275 +#: ../backend/matsushita.c:1275 ../backend/kvs1025_opt.c:781 #, no-c-format msgid "Noise reduction" msgstr "" -#: ../backend/matsushita.c:1277 +#: ../backend/matsushita.c:1277 ../backend/kvs1025_opt.c:783 #, no-c-format msgid "Reduce the isolated dot noise" msgstr "" -#: ../backend/matsushita.c:1288 +#: ../backend/matsushita.c:1288 ../backend/kvs1025_opt.c:794 +#: ../backend/kvs20xx_opt.c:411 #, no-c-format msgid "Image emphasis" msgstr "" -#: ../backend/matsushita.c:1289 +#: ../backend/matsushita.c:1289 ../backend/kvs1025_opt.c:795 +#: ../backend/kvs20xx_opt.c:412 #, no-c-format msgid "Sets the image emphasis" msgstr "" #: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 +#: ../backend/pixma_sane_options.c:107 ../backend/kvs1025_opt.c:806 +#: ../backend/kvs1025_opt.c:807 #, no-c-format msgid "Gamma" msgstr "" @@ -3158,22 +3218,26 @@ msgid "Grayscale 8 bits" msgstr "" -#: ../backend/matsushita.h:219 +#: ../backend/matsushita.h:219 ../backend/kvs1025.h:51 +#: ../backend/kvs20xx_opt.c:294 #, no-c-format msgid "Paper size" msgstr "" #: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 #, no-c-format msgid "Automatic separation" msgstr "Separação automática" -#: ../backend/matsushita.h:223 +#: ../backend/matsushita.h:223 ../backend/kvs1025.h:63 +#: ../backend/kvs20xx_opt.c:204 #, no-c-format msgid "Enable Duplex (Dual-Sided) Scanning" msgstr "" -#: ../backend/matsushita.h:225 +#: ../backend/matsushita.h:225 ../backend/kvs1025.h:65 +#: ../backend/kvs20xx_opt.c:295 #, no-c-format msgid "Physical size of the paper in the ADF" msgstr "" @@ -3266,7 +3330,8 @@ "for the threshold." msgstr "" -#: ../backend/microtek2.h:640 +#: ../backend/microtek2.h:640 ../backend/kvs20xx_opt.c:423 +#: ../backend/kvs20xx_opt.c:424 #, no-c-format msgid "Gamma correction" msgstr "Correcção do gamma" @@ -4037,29 +4102,29 @@ "after sane_read() has been called." msgstr "" -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "" -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Lâmpada acesa" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" @@ -4791,6 +4856,355 @@ msgid "Sets blue channel offset" msgstr "Deslocamento do canal azul" +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#, no-c-format +msgid "Landscape" +msgstr "Paisagem" + +#: ../backend/kvs1025.h:54 +#, no-c-format +msgid "Inverse Image" +msgstr "Inverte imagem" + +#: ../backend/kvs1025.h:56 +#, no-c-format +msgid "Long paper mode" +msgstr "Modo de Papel Longo" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#, no-c-format +msgid "Length control mode" +msgstr "Modo de Controle do Comprimento" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#, no-c-format +msgid "Manual feed mode" +msgstr "Modo de Alimentação manual" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#, no-c-format +msgid "Manual feed timeout" +msgstr "Tempo de desligamento da alimentação manual" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#, no-c-format +msgid "Double feed detection" +msgstr "Detecção de dupla alimentação" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "PB" + +#: ../backend/kvs1025_opt.c:40 +#, no-c-format +msgid "halftone" +msgstr "" + +#: ../backend/kvs1025_opt.c:41 +#, fuzzy, no-c-format +msgid "gray" +msgstr "Cinzento" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Cor" + +#: ../backend/kvs1025_opt.c:61 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#, fuzzy, no-c-format +msgid "single" +msgstr "simples" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 +#, no-c-format +msgid "continuous" +msgstr "contínuo" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#, no-c-format +msgid "off" +msgstr "desliga" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#, no-c-format +msgid "wait_doc" +msgstr "Aguarde_doc" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#, no-c-format +msgid "wait_key" +msgstr "Aguarde-Chave" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#, fuzzy, no-c-format +msgid "user_def" +msgstr "Definido pelo utilizador" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#, no-c-format +msgid "business_card" +msgstr "Cartão de visita" + +#: ../backend/kvs1025_opt.c:98 +#, no-c-format +msgid "Check" +msgstr "Verificar" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 +#, no-c-format +msgid "bayer_64" +msgstr "" + +#: ../backend/kvs1025_opt.c:150 +#, no-c-format +msgid "bayer_16" +msgstr "" + +#: ../backend/kvs1025_opt.c:151 +#, no-c-format +msgid "halftone_32" +msgstr "" + +#: ../backend/kvs1025_opt.c:152 +#, no-c-format +msgid "halftone_64" +msgstr "" + +#: ../backend/kvs1025_opt.c:153 +#, no-c-format +msgid "diffusion" +msgstr "" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Normal" + +#: ../backend/kvs1025_opt.c:167 +#, no-c-format +msgid "light" +msgstr "claro" + +#: ../backend/kvs1025_opt.c:168 +#, no-c-format +msgid "dark" +msgstr "escuro" + +#: ../backend/kvs1025_opt.c:179 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "Digitalização rápida" + +#: ../backend/kvs1025_opt.c:192 +#, fuzzy, no-c-format +msgid "default" +msgstr "Predefinição" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#, no-c-format +msgid "smooth" +msgstr "Suave" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#, no-c-format +msgid "none" +msgstr "Nenhuma" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#, fuzzy, no-c-format +msgid "low" +msgstr "Lento" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:802 +#: ../backend/kvs20xx_opt.c:120 +#, no-c-format +msgid "medium" +msgstr "Média" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#, no-c-format +msgid "high" +msgstr "Alta" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, fuzzy, no-c-format +msgid "linier" +msgstr "Linhas" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#, fuzzy, no-c-format +msgid "red" +msgstr "Vermelho" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#, fuzzy, no-c-format +msgid "green" +msgstr "Verde" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#, fuzzy, no-c-format +msgid "blue" +msgstr "Azul" + +#: ../backend/kvs1025_opt.c:560 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Origem da digitalização" + +#: ../backend/kvs1025_opt.c:582 +#, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Liga / Desliga Modo Papel Longo" + +#: ../backend/kvs1025_opt.c:591 +#, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Liga / Desliga Modo Controle do Comprimento" + +#: ../backend/kvs1025_opt.c:599 ../backend/kvs20xx_opt.c:242 +#, no-c-format +msgid "Sets the manual feed mode" +msgstr "Define modo de alimentação manual" + +#: ../backend/kvs1025_opt.c:610 ../backend/kvs20xx_opt.c:254 +#, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Define desligamento de alimentação manual em segundos" + +#: ../backend/kvs1025_opt.c:623 ../backend/kvs20xx_opt.c:267 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "Liga / Desliga Modo de detecção de alimentação" + +#: ../backend/kvs1025_opt.c:629 ../backend/kvs20xx_opt.c:275 +#, no-c-format +msgid "fit-to-page" +msgstr "Adequar à página" + +#: ../backend/kvs1025_opt.c:630 ../backend/kvs20xx_opt.c:276 +#, no-c-format +msgid "Fit to page" +msgstr "Adequar à página" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:277 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "Scanner diminui imagem para adequar à pagina digitalizada" + +#: ../backend/kvs1025_opt.c:659 ../backend/kvs20xx_opt.c:308 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" +"Define posição do papel: Verdadeiro para Paisagem, Falso para Retrato" + +#: ../backend/kvs1025_opt.c:816 ../backend/kvs20xx_opt.c:435 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Cor da lâmpada" + +#: ../backend/kvs1025_opt.c:817 ../backend/kvs20xx_opt.c:436 +#, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Define cor da lâmpada (Color dropout)" + +#: ../backend/kvs1025_opt.c:830 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "Inverte imagem nos modos P/B ou simulação de cinza" + +#: ../backend/kvs1025_opt.c:838 +#, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Imagem espelhada" + +#: ../backend/kvs1025_opt.c:845 +#, no-c-format +msgid "jpeg compression" +msgstr "Compressão JPEG" + +#: ../backend/kvs1025_opt.c:848 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "Compressão da imagem JPEG com parâmetro Q, '0' - sem compressão" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "Solicita ao driver para rotacionar digitalmente páginas inclinadas" + +#: ../backend/kvs1025_opt.c:879 +#, no-c-format +msgid "Software automatic cropping" +msgstr "Crop automático" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "Solicita ao driver para remover digitalmente bordas das páginas" + +#: ../backend/kvs1025_opt.c:888 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "Desconsiderar porcentagem branco" + +#: ../backend/kvs1025_opt.c:890 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" +"Solicita ao driver para eliminar páginas com baixo número de pixels " +"escuros" + +#: ../backend/kvs20xx_opt.c:232 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + #~ msgid "Grayscale" #~ msgstr "Cinzento" diff -Nru sane-backends-1.0.22/po/ru.po sane-backends-1.0.23/po/ru.po --- sane-backends-1.0.22/po/ru.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/ru.po 2011-07-06 20:17:25.000000000 +0000 @@ -8,10 +8,11 @@ msgstr "" "Project-Id-Version: sane-backends\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" +"POT-Creation-Date: 2011-06-06 22:10-0400\n" "PO-Revision-Date: 2007-12-17 23:05+0100\n" "Last-Translator: \n" "Language-Team: \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -31,9 +32,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:6028 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -47,23 +50,24 @@ msgstr "Расположение" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:6088 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Повышение" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1036,22 +1040,22 @@ msgid "Button state" msgstr "Состояние кнопки" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Количество кадров для сканирования" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Выберите количество кадров для сканирования" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Двухстороннее сканирование" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" @@ -1137,7 +1141,8 @@ msgid "Slides" msgstr "Слайд" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Автоматически" @@ -1413,7 +1418,8 @@ msgstr "" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Зеркальное изображение" @@ -1559,85 +1565,85 @@ msgid "Select the film type" msgstr "Выбирает полутона." -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Планшетный" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 #, fuzzy, no-c-format msgid "ADF Back" msgstr "АПД" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, fuzzy, no-c-format msgid "ADF Duplex" msgstr "Двухсторонний" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:340 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Красный" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:341 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Зелёный" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:342 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Синий" -#: ../backend/canon_dr.c:332 +#: ../backend/canon_dr.c:343 #, fuzzy, no-c-format msgid "Enhance Red" msgstr "Повышение" -#: ../backend/canon_dr.c:333 +#: ../backend/canon_dr.c:344 #, fuzzy, no-c-format msgid "Enhance Green" msgstr "Повышение" -#: ../backend/canon_dr.c:334 +#: ../backend/canon_dr.c:345 #, fuzzy, no-c-format msgid "Enhance Blue" msgstr "Повышение" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1645,29 +1651,32 @@ msgid "None" msgstr "Ничего" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" msgstr "" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Односторонний" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Двухсторонний" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Модуль для слайдов" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Автоматический податчик документов" @@ -1779,7 +1788,7 @@ msgid "CRT monitors" msgstr "Мониторы с ЭЛТ" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1825,12 +1834,17 @@ msgid "A5 landscape" msgstr "A5 ландшафт" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1841,15 +1855,17 @@ msgstr "Макс" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5959 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Режим сканирования" @@ -2045,11 +2061,13 @@ msgstr "Извлечь документ после сканирования" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2345 #, no-c-format msgid "ADF Mode" msgstr "Режим автоподачи" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2347 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Выбирает режим автоподачи (односторонний/двухсторонний)" @@ -2125,182 +2143,175 @@ msgid "User defined CCT profile" msgstr "Определяемое пользователем" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Вкл" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Выкл" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" msgstr "" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" msgstr "" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Размытие" -#: ../backend/fujitsu.c:535 +#: ../backend/fujitsu.c:566 #, fuzzy, no-c-format msgid "Diffusion" msgstr "Диффузия ошибок" -#: ../backend/fujitsu.c:540 +#: ../backend/fujitsu.c:571 #, fuzzy, no-c-format msgid "White" msgstr "Уровень белого" -#: ../backend/fujitsu.c:541 +#: ../backend/fujitsu.c:572 #, fuzzy, no-c-format msgid "Black" msgstr "Уровень чёрного" -#: ../backend/fujitsu.c:546 +#: ../backend/fujitsu.c:577 #, fuzzy, no-c-format msgid "Continue" msgstr "Условно" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" msgstr "" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" msgstr "" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" msgstr "" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" msgstr "" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Горизонтально" -#: ../backend/fujitsu.c:554 +#: ../backend/fujitsu.c:585 #, fuzzy, no-c-format msgid "Horizontal bold" msgstr "Горизонтально" -#: ../backend/fujitsu.c:555 +#: ../backend/fujitsu.c:586 #, fuzzy, no-c-format msgid "Horizontal narrow" msgstr "Горизонтально" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Вертикальное" -#: ../backend/fujitsu.c:557 +#: ../backend/fujitsu.c:588 #, fuzzy, no-c-format msgid "Vertical bold" msgstr "Вертикальное" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" msgstr "" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" msgstr "" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, fuzzy, no-c-format msgid "Front" msgstr "Распечатка" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" msgstr "" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 -#, no-c-format -msgid "Transparency Adapter" -msgstr "Слайд-модуль" - -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:6177 #, no-c-format msgid "Extras" msgstr "Дополнительно" -#: ../backend/genesys.c:5647 +#: ../backend/genesys.c:6196 #, fuzzy, no-c-format msgid "Threshold curve" msgstr "Порог" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6197 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6206 #, no-c-format msgid "Disable dynamic lineart" msgstr "" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6208 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6223 #, fuzzy, no-c-format msgid "Disable interpolation" msgstr "Выключить отслеживание" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6226 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " "than the vertical resolution this disables horizontal interpolation." msgstr "" -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6235 #, fuzzy, no-c-format msgid "Color Filter" msgstr "Цветное штриховое" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6238 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6264 #, no-c-format msgid "Lamp off time" msgstr "Время выключения лампы" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6267 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2309,60 +2320,66 @@ "Лампа будет выключена через указанное время (в минутах). Значение 0 " "означает, что лампа выключаться не будет." -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6296 ../backend/genesys.c:6297 #, fuzzy, no-c-format msgid "File button" msgstr "Ожидать нажатия кнопки" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6349 ../backend/genesys.c:6350 #, no-c-format msgid "OCR button" msgstr "" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6363 ../backend/genesys.c:6364 #, fuzzy, no-c-format msgid "Power button" msgstr "Ожидать нажатия кнопки" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6377 ../backend/gt68xx.c:762 #, fuzzy, no-c-format msgid "Need calibration" msgstr "Грубая калибровка" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6378 ../backend/gt68xx.c:763 #, fuzzy, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Выполнять калибровку сканера перед сканированием" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6391 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Кнопки" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6398 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Калибровка" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6400 ../backend/gt68xx.c:796 #, fuzzy, no-c-format msgid "Start calibration using special sheet" msgstr "Начать процесс калибровки." -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6414 ../backend/gt68xx.c:809 #, fuzzy, no-c-format msgid "Clear calibration" msgstr "Грубая калибровка" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6415 ../backend/gt68xx.c:810 #, fuzzy, no-c-format msgid "Clear calibration cache" msgstr "Кэширование калибровочных данных" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Слайд-модуль" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2472,12 +2489,12 @@ msgid "Sets the gamma value of all channels." msgstr "Устанавливает значение гаммы всех каналов." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, fuzzy, no-c-format msgid "Geometry Group" msgstr "Расположение" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, fuzzy, no-c-format msgid "Scan Mode Group" msgstr "Режим сканирования" @@ -2783,9 +2800,9 @@ msgstr "Медленно" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Нормально" @@ -3021,6 +3038,697 @@ msgid "Shut off scanner lamp." msgstr "Выключает лампу сканера." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Размер бумаги" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Автоматическое разделение" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, fuzzy, no-c-format +msgid "Landscape" +msgstr "A5 ландшафт" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, fuzzy, no-c-format +msgid "Manual feed mode" +msgstr "Ручная предварительная фокусировка" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, fuzzy, no-c-format +msgid "Manual feed timeout" +msgstr "Ручная предварительная фокусировка" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Включить двустороннее сканирование" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Физический размер бумаги в устройстве автоподачи" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, fuzzy, no-c-format +msgid "halftone" +msgstr "Полутоновый (растр)" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, fuzzy, no-c-format +msgid "color" +msgstr "Цветной" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, fuzzy, no-c-format +msgid "continuous" +msgstr "Условно" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, fuzzy, no-c-format +msgid "off" +msgstr "Выкл" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, no-c-format +msgid "bayer_64" +msgstr "" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, no-c-format +msgid "bayer_16" +msgstr "" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, fuzzy, no-c-format +msgid "halftone_32" +msgstr "Полутоновый (растр)" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, fuzzy, no-c-format +msgid "halftone_64" +msgstr "Полутоновый (растр)" + +#: ../backend/kvs1025_opt.c:153 +#, fuzzy, no-c-format +msgid "diffusion" +msgstr "Диффузия ошибок" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, fuzzy, no-c-format +msgid "normal" +msgstr "Нормально" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, fuzzy, no-c-format +msgid "light" +msgstr "Подсветка" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, fuzzy, no-c-format +msgid "From scanner" +msgstr "планшетный сканер" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "От бумаги" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, fuzzy, no-c-format +msgid "default" +msgstr "По умолчанию" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, fuzzy, no-c-format +msgid "smooth" +msgstr "Сглаживать" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, fuzzy, no-c-format +msgid "low" +msgstr "Медленно" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, fuzzy, no-c-format +msgid "medium" +msgstr "Нормальный" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, fuzzy, no-c-format +msgid "red" +msgstr "Красный" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, fuzzy, no-c-format +msgid "green" +msgstr "Зелёный" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "" + +#: ../backend/kvs1025_opt.c:562 +#, fuzzy, no-c-format +msgid "Sets the scan source" +msgstr "Источник сканирования" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Режим подачи" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Устанавливает режим подачи" + +#: ../backend/kvs1025_opt.c:584 +#, fuzzy, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Выключить предварительный фокус" + +#: ../backend/kvs1025_opt.c:593 +#, fuzzy, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Выключить предварительный фокус" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, fuzzy, no-c-format +msgid "Sets the manual feed mode" +msgstr "Устанавливает режим подачи" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, fuzzy, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Устанавливает режим подачи" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Автоматический порог" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Автоматически устанавливает яркость, контрастность, уровень белого, " +"гамму, уменьшение шума и выразительность изображения" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Уменьшение шумов" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Уменьшает количество отдельных случайных точек" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Выразительность изображения" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Устанавливает выразительность изображения" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Гамма" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, fuzzy, no-c-format +msgid "Lamp color" +msgstr "Включить лампу" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, fuzzy, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Включить/выключить лампу." + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "" + +#: ../backend/kvs1025_opt.c:840 +#, fuzzy, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Отображает изображение по вертикали." + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" + +#: ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "" + +#: ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" + +#: ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "" + +#: ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Коррекция гаммы" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "" + +#: ../backend/kvs40xx_opt.c:230 +#, fuzzy, no-c-format +msgid "High sensivity" +msgstr "Печать высокой плотности" + +#: ../backend/kvs40xx_opt.c:231 +#, fuzzy, no-c-format +msgid "Low sensivity" +msgstr "Печать высокой плотности" + +#: ../backend/kvs40xx_opt.c:242 +#, fuzzy, no-c-format +msgid "err_diffusion" +msgstr "Диффузия ошибок" + +#: ../backend/kvs40xx_opt.c:248 +#, fuzzy, no-c-format +msgid "No detection" +msgstr "Без коррекции" + +#: ../backend/kvs40xx_opt.c:249 +#, fuzzy, no-c-format +msgid "Normal mode" +msgstr "Нормально" + +#: ../backend/kvs40xx_opt.c:250 +#, fuzzy, no-c-format +msgid "Enhanced mode" +msgstr "Повышение" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "" + +#: ../backend/kvs40xx_opt.c:641 +#, fuzzy, no-c-format +msgid "Automatic threshold mode" +msgstr "Автоматический порог" + +#: ../backend/kvs40xx_opt.c:642 +#, fuzzy, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Автоматический порог" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "" + +#: ../backend/kvs40xx_opt.c:776 +#, fuzzy, no-c-format +msgid "Set chroma of red" +msgstr "Установить порядок кадров" + +#: ../backend/kvs40xx_opt.c:786 +#, fuzzy, no-c-format +msgid "chroma of blue" +msgstr "Затенённость для синего" + +#: ../backend/kvs40xx_opt.c:787 +#, fuzzy, no-c-format +msgid "Set chroma of blue" +msgstr "Сдвиг красного к синему" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3046,55 +3754,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 вертикальная линия" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Усиление" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Настройки усиления цветовых каналов" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Усиление серого" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Устанавливает усиление серого канала" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Усиление красного" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Устанавливает усиление красного канала" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Усиление зелёного" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Устанавливает усиление зелёного канала" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Усиление синего" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Устанавливает усиление синего канала" @@ -3144,11 +3852,6 @@ msgid "From white stick" msgstr "От белой палочки" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "От бумаги" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3190,56 +3893,6 @@ msgid "sheetfed scanner" msgstr "листовой сканер" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Режим подачи" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Устанавливает режим подачи" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Автоматический порог" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Автоматически устанавливает яркость, контрастность, уровень белого, " -"гамму, уменьшение шума и выразительность изображения" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Уменьшение шумов" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Уменьшает количество отдельных случайных точек" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Выразительность изображения" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Устанавливает выразительность изображения" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Гамма" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3250,26 +3903,6 @@ msgid "Grayscale 8 bits" msgstr "Оттенки серого 8 бит" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Размер бумаги" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Автоматическое разделение" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Включить двустороннее сканирование" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Физический размер бумаги в устройстве автоподачи" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3362,11 +3995,6 @@ "Если отмечено, движок автоматически попробует определить оптимальное " "значение порога." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Коррекция гаммы" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4162,29 +4790,29 @@ "after sane_read() has been called." msgstr "" -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, fuzzy, no-c-format msgid "This option reflects the status of a scanner button." msgstr "Этот параметр отражает состояние кнопок сканера." -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Включить лампу" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Включить лампу сканера" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Выключить лампу" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" diff -Nru sane-backends-1.0.22/po/sv.po sane-backends-1.0.23/po/sv.po --- sane-backends-1.0.22/po/sv.po 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/po/sv.po 2011-11-01 20:09:20.000000000 +0000 @@ -11,10 +11,11 @@ msgstr "" "Project-Id-Version: sane-backends 1.0.18\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-27 20:43-0500\n" -"PO-Revision-Date: 2010-01-17 10:25+0100\n" +"POT-Creation-Date: 2011-10-30 10:39+0100\n" +"PO-Revision-Date: 2011-10-30 14:24+0100\n" "Last-Translator: Mattias Ellert \n" "Language-Team: Swedish \n" +"Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -31,9 +32,11 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:5527 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:189 ../backend/ma1509.c:551 +#: ../backend/genesys.c:5823 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 #: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 @@ -47,23 +50,24 @@ msgstr "Geometri" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:5578 +#: ../backend/canon.c:1492 ../backend/genesys.c:5883 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:853 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Förbättring" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2766 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -1009,63 +1013,63 @@ msgid "Button state" msgstr "Knappläge" -#: ../backend/avision.h:772 +#: ../backend/avision.h:781 #, no-c-format msgid "Number of the frame to scan" msgstr "Bildruta att läsa in" -#: ../backend/avision.h:773 +#: ../backend/avision.h:782 #, no-c-format msgid "Selects the number of the frame to scan" msgstr "Väljer numret på den bildruta som ska läsas in" -#: ../backend/avision.h:776 +#: ../backend/avision.h:785 #, no-c-format msgid "Duplex scan" msgstr "Dubbelsidig inläsning" -#: ../backend/avision.h:777 +#: ../backend/avision.h:786 #, no-c-format msgid "" "Duplex scan provide a scan of the front and back side of the document" msgstr "Dubbelsidig inläsning läser in dokumentets framsida och baksida" -#: ../backend/canon630u.c:158 +#: ../backend/canon630u.c:159 #, no-c-format msgid "Calibrate Scanner" msgstr "Kalibrera bildläsaren" -#: ../backend/canon630u.c:159 +#: ../backend/canon630u.c:160 #, no-c-format msgid "Force scanner calibration before scan" msgstr "Utför bildläsarkalibrering före inläsning" -#: ../backend/canon630u.c:258 ../backend/umax1220u.c:208 +#: ../backend/canon630u.c:259 ../backend/umax1220u.c:208 #, no-c-format msgid "Grayscale scan" msgstr "Gråskaleinläsning" -#: ../backend/canon630u.c:259 ../backend/umax1220u.c:209 +#: ../backend/canon630u.c:260 ../backend/umax1220u.c:209 #, no-c-format msgid "Do a grayscale rather than color scan" msgstr "Gör en gråskaleinläsning i stället för en färginläsning" -#: ../backend/canon630u.c:305 +#: ../backend/canon630u.c:306 #, no-c-format msgid "Analog Gain" msgstr "Analog förstärkning" -#: ../backend/canon630u.c:306 +#: ../backend/canon630u.c:307 #, no-c-format msgid "Increase or decrease the analog gain of the CCD array" msgstr "Öka eller minska CCD-sensorns analoga förstärkning" -#: ../backend/canon630u.c:346 ../backend/epson.h:68 ../backend/epson2.h:72 +#: ../backend/canon630u.c:347 ../backend/epson.h:68 ../backend/epson2.h:72 #, no-c-format msgid "Gamma Correction" msgstr "Gammakorrigering" -#: ../backend/canon630u.c:347 +#: ../backend/canon630u.c:348 #, no-c-format msgid "Selects the gamma corrected transfer curve" msgstr "Väljer gammakorrigerad överföringskurva" @@ -1108,7 +1112,8 @@ msgid "Slides" msgstr "Diapositiv" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Automatisk" @@ -1385,7 +1390,8 @@ msgstr "Extra färgjusteringar" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Spegla bild" @@ -1532,85 +1538,85 @@ msgid "Select the film type" msgstr "Välj filmtyp" -#: ../backend/canon_dr.c:319 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:517 -#: ../backend/genesys.c:117 ../backend/gt68xx.c:148 -#: ../backend/hp3900_sane.c:418 ../backend/hp3900_sane.c:427 -#: ../backend/hp3900_sane.c:1017 ../backend/hp5590.c:82 -#: ../backend/ma1509.c:108 ../backend/mustek.c:156 ../backend/mustek.c:160 -#: ../backend/mustek.c:164 ../backend/pixma.c:658 +#: ../backend/canon_dr.c:336 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 +#: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:163 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 #: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Flatbädd" -#: ../backend/canon_dr.c:320 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:518 ../backend/kodak.c:135 -#, fuzzy, no-c-format +#: ../backend/canon_dr.c:337 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 +#, no-c-format msgid "ADF Front" -msgstr "automatiska dokumentmatarens lock är öppet" +msgstr "Automatisk dokumentmatare framsida" -#: ../backend/canon_dr.c:321 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:519 ../backend/kodak.c:136 -#, fuzzy, no-c-format +#: ../backend/canon_dr.c:338 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 +#, no-c-format msgid "ADF Back" -msgstr "stopp i den automatiska dokumentmataren" +msgstr "Automatisk dokumentmatare baksida" -#: ../backend/canon_dr.c:322 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:520 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:669 +#: ../backend/canon_dr.c:339 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:551 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:675 #, no-c-format msgid "ADF Duplex" msgstr "Automatisk dokumentmatare dubbelsidigt" -#: ../backend/canon_dr.c:329 ../backend/epson.c:599 +#: ../backend/canon_dr.c:346 ../backend/epson.c:599 #: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:537 ../backend/genesys.c:102 -#: ../backend/genesys.c:109 ../backend/gt68xx_low.h:136 +#: ../backend/fujitsu.c:568 ../backend/genesys.c:110 +#: ../backend/genesys.c:117 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Röd" -#: ../backend/canon_dr.c:330 ../backend/epson.c:600 +#: ../backend/canon_dr.c:347 ../backend/epson.c:600 #: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:538 ../backend/genesys.c:103 -#: ../backend/genesys.c:110 ../backend/gt68xx_low.h:137 +#: ../backend/fujitsu.c:569 ../backend/genesys.c:111 +#: ../backend/genesys.c:118 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Grön" -#: ../backend/canon_dr.c:331 ../backend/epson.c:601 +#: ../backend/canon_dr.c:348 ../backend/epson.c:601 #: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:539 ../backend/genesys.c:104 -#: ../backend/genesys.c:111 ../backend/gt68xx_low.h:138 +#: ../backend/fujitsu.c:570 ../backend/genesys.c:112 +#: ../backend/genesys.c:119 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Blå" -#: ../backend/canon_dr.c:332 -#, fuzzy, no-c-format +#: ../backend/canon_dr.c:349 +#, no-c-format msgid "Enhance Red" -msgstr "Förbättring" +msgstr "Framhäv rött" -#: ../backend/canon_dr.c:333 -#, fuzzy, no-c-format +#: ../backend/canon_dr.c:350 +#, no-c-format msgid "Enhance Green" -msgstr "Förbättring" +msgstr "Framhäv grönt" -#: ../backend/canon_dr.c:334 -#, fuzzy, no-c-format +#: ../backend/canon_dr.c:351 +#, no-c-format msgid "Enhance Blue" -msgstr "Förbättring" +msgstr "Framhäv blått" -#: ../backend/canon_dr.c:336 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/canon_dr.c:353 ../backend/epson.c:556 ../backend/epson.c:564 #: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 #: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:543 -#: ../backend/genesys.c:112 ../backend/leo.c:109 +#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 +#: ../backend/genesys.c:120 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1618,29 +1624,32 @@ msgid "None" msgstr "Inget" -#: ../backend/canon_dr.c:337 ../backend/fujitsu.c:544 +#: ../backend/canon_dr.c:354 ../backend/fujitsu.c:575 #, no-c-format msgid "JPEG" -msgstr "" +msgstr "JPEG" #: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/magicolor.c:156 #, no-c-format msgid "Simplex" msgstr "Enkelsidigt" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:104 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:157 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Dubbelsidigt" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:675 +#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 #, no-c-format msgid "Transparency Unit" msgstr "Genomlysningsenhet" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:663 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:112 +#: ../backend/magicolor.c:164 ../backend/mustek.c:160 +#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Automatisk dokumentmatare" @@ -1752,7 +1761,7 @@ msgid "CRT monitors" msgstr "Bildskärmar (CRT)" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:527 +#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" @@ -1798,12 +1807,17 @@ msgid "A5 landscape" msgstr "A5 liggande" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "US-Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1814,15 +1828,17 @@ msgstr "Max" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5458 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5747 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:720 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Bildläsarläge" @@ -2014,11 +2030,13 @@ msgstr "Mata ut dokument efter inläsning" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2395 #, no-c-format msgid "ADF Mode" msgstr "Dokumentmatarläge" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2397 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "" @@ -2096,160 +2114,187 @@ msgid "User defined CCT profile" msgstr "Användardefinierad CCT-profil" -#: ../backend/fujitsu.c:528 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "På" -#: ../backend/fujitsu.c:529 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Av" -#: ../backend/fujitsu.c:531 +#: ../backend/fujitsu.c:562 #, no-c-format msgid "DTC" -msgstr "" +msgstr "DTC" -#: ../backend/fujitsu.c:532 +#: ../backend/fujitsu.c:563 #, no-c-format msgid "SDTC" -msgstr "" +msgstr "SDTC" -#: ../backend/fujitsu.c:534 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Gitter" -#: ../backend/fujitsu.c:535 -#, fuzzy, no-c-format +#: ../backend/fujitsu.c:566 +#, no-c-format msgid "Diffusion" -msgstr "Feldiffusion" +msgstr "Diffusion" -#: ../backend/fujitsu.c:540 -#, fuzzy, no-c-format +#: ../backend/fujitsu.c:571 +#, no-c-format msgid "White" -msgstr "Vitnivå" +msgstr "Vit" -#: ../backend/fujitsu.c:541 -#, fuzzy, no-c-format +#: ../backend/fujitsu.c:572 +#, no-c-format msgid "Black" -msgstr "Svartnivå" +msgstr "Svart" -#: ../backend/fujitsu.c:546 -#, fuzzy, no-c-format +#: ../backend/fujitsu.c:577 +#, no-c-format msgid "Continue" -msgstr "Villkorlig" +msgstr "Fortsätt" -#: ../backend/fujitsu.c:547 +#: ../backend/fujitsu.c:578 #, no-c-format msgid "Stop" -msgstr "" +msgstr "Avsluta" -#: ../backend/fujitsu.c:549 +#: ../backend/fujitsu.c:580 #, no-c-format msgid "10mm" -msgstr "" +msgstr "10 mm" -#: ../backend/fujitsu.c:550 +#: ../backend/fujitsu.c:581 #, no-c-format msgid "15mm" -msgstr "" +msgstr "15 mm" -#: ../backend/fujitsu.c:551 +#: ../backend/fujitsu.c:582 #, no-c-format msgid "20mm" -msgstr "" +msgstr "20 mm" -#: ../backend/fujitsu.c:553 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "Vågrätt" -#: ../backend/fujitsu.c:554 -#, fuzzy, no-c-format +#: ../backend/fujitsu.c:585 +#, no-c-format msgid "Horizontal bold" -msgstr "Vågrätt" +msgstr "Vågrätt fetstil" -#: ../backend/fujitsu.c:555 -#, fuzzy, no-c-format +#: ../backend/fujitsu.c:586 +#, no-c-format msgid "Horizontal narrow" -msgstr "Vågrätt" +msgstr "Vågrätt smal" -#: ../backend/fujitsu.c:556 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "Lodrätt" -#: ../backend/fujitsu.c:557 -#, fuzzy, no-c-format +#: ../backend/fujitsu.c:588 +#, no-c-format msgid "Vertical bold" -msgstr "Lodrätt" +msgstr "Lodrätt fetstil" -#: ../backend/fujitsu.c:559 +#: ../backend/fujitsu.c:590 #, no-c-format msgid "Top to bottom" -msgstr "" +msgstr "Uppifrån och ner" -#: ../backend/fujitsu.c:560 +#: ../backend/fujitsu.c:591 #, no-c-format msgid "Bottom to top" -msgstr "" +msgstr "Nerifrån och upp" -#: ../backend/fujitsu.c:562 -#, fuzzy, no-c-format +#: ../backend/fujitsu.c:593 +#, no-c-format msgid "Front" -msgstr "Fotografi" +msgstr "Framsida" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "Back" -msgstr "" +msgstr "Baksida" -#: ../backend/genesys.c:118 ../backend/gt68xx.c:149 -#: ../backend/ma1509.c:108 ../backend/mustek.c:164 -#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#: ../backend/genesys.c:5965 #, no-c-format -msgid "Transparency Adapter" -msgstr "Genomlysningsadapter" +msgid "Software crop" +msgstr "Mjukvarubeskärning" + +#: ../backend/genesys.c:5966 +#, no-c-format +msgid "Request backend to remove border from pages digitally" +msgstr "Begär att drivrutinen tar bort ram från sidor automatiskt" + +#: ../backend/genesys.c:5974 ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "Procentsats för hoppa över blanka sidor" + +#: ../backend/genesys.c:5975 ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "Begär att drivrutinen hoppar över sidor med få mörka pixlar" + +#: ../backend/genesys.c:5985 ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "Mjukvaruavrotera" + +#: ../backend/genesys.c:5986 ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" +"Begär att drivrutinen detekterar och korrigerar 90 graders bildrotation" -#: ../backend/genesys.c:5628 +#: ../backend/genesys.c:5993 #, no-c-format msgid "Extras" msgstr "Övrigt" -#: ../backend/genesys.c:5647 -#, fuzzy, no-c-format +#: ../backend/genesys.c:6012 +#, no-c-format msgid "Threshold curve" -msgstr "Tröskelvärde" +msgstr "Tröskelkurva" -#: ../backend/genesys.c:5648 +#: ../backend/genesys.c:6013 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" -msgstr "" +msgstr "Dynamisk tröskelkurva, från ljust till mörkt, vanligen 50-65" -#: ../backend/genesys.c:5657 +#: ../backend/genesys.c:6022 #, no-c-format msgid "Disable dynamic lineart" -msgstr "" +msgstr "Avaktivera dynamisk streckteckning" -#: ../backend/genesys.c:5660 +#: ../backend/genesys.c:6024 #, no-c-format msgid "" -"Disabel use of a software adaptative algorithm to generate lineart " -"instead of relying on hardware lineart" +"Disable use of a software adaptive algorithm to generate lineart relying " +"instead on hardware lineart." msgstr "" +"Stäng av användandet av en adaptiv algoritm i mjukvaran för att generera " +"streckteckningsinläsningar för att i stället använda hårdvarans " +"streckteckningsinläsningsläge." -#: ../backend/genesys.c:5675 +#: ../backend/genesys.c:6039 #, no-c-format msgid "Disable interpolation" msgstr "Stäng av interpolering" -#: ../backend/genesys.c:5678 +#: ../backend/genesys.c:6042 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2259,24 +2304,24 @@ "mindre än den vertikala upplösningen stänger detta av den horisontella " "interpoleringen." -#: ../backend/genesys.c:5687 +#: ../backend/genesys.c:6051 #, no-c-format msgid "Color Filter" msgstr "Färgfilter" -#: ../backend/genesys.c:5690 +#: ../backend/genesys.c:6054 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" "När gråskala eller streckteckning används väljer denna inställning den " "använda färgen." -#: ../backend/genesys.c:5715 +#: ../backend/genesys.c:6080 #, no-c-format msgid "Lamp off time" msgstr "Lampavstängningstid" -#: ../backend/genesys.c:5718 +#: ../backend/genesys.c:6083 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2285,60 +2330,66 @@ "Lampan kommer att stängas av efter den angivna tiden (i minuter). Värdet " "0 betyder att lampan inte kommer att stängas av." -#: ../backend/genesys.c:5747 ../backend/genesys.c:5748 +#: ../backend/genesys.c:6112 ../backend/genesys.c:6113 #, no-c-format msgid "File button" msgstr "Filknapp" -#: ../backend/genesys.c:5800 ../backend/genesys.c:5801 +#: ../backend/genesys.c:6165 ../backend/genesys.c:6166 #, no-c-format msgid "OCR button" msgstr "Optisk teckenigenkännings-knapp" -#: ../backend/genesys.c:5814 ../backend/genesys.c:5815 +#: ../backend/genesys.c:6179 ../backend/genesys.c:6180 #, no-c-format msgid "Power button" msgstr "Påslagningsknapp" -#: ../backend/genesys.c:5828 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:6193 ../backend/gt68xx.c:762 #, no-c-format msgid "Need calibration" msgstr "Behöver kalibrering" -#: ../backend/genesys.c:5829 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:6194 ../backend/gt68xx.c:763 #, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Bildläsaren behöver kalibrering för nuvarande inställningar" -#: ../backend/genesys.c:5842 ../backend/gt68xx.c:787 +#: ../backend/genesys.c:6207 ../backend/gt68xx.c:787 #: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 #: ../backend/plustek.c:1079 #, no-c-format msgid "Buttons" msgstr "Knappar" -#: ../backend/genesys.c:5849 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6214 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 #: ../backend/niash.c:728 ../backend/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Kalibrera" -#: ../backend/genesys.c:5851 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6216 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "Påbörja kalibrering med specialark" -#: ../backend/genesys.c:5865 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6230 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "Rensa kalibrering" -#: ../backend/genesys.c:5866 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6231 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "Rensa kalibreringsdatacache" +#: ../backend/gt68xx.c:149 ../backend/ma1509.c:108 ../backend/mustek.c:164 +#: ../backend/snapscan-options.c:83 ../backend/umax.c:182 +#, no-c-format +msgid "Transparency Adapter" +msgstr "Genomlysningsadapter" + #: ../backend/gt68xx.c:477 #, no-c-format msgid "Gray mode color" @@ -2444,12 +2495,12 @@ msgid "Sets the gamma value of all channels." msgstr "Ställer in gammavärdet för alla kanaler." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Geometrigrupp" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Bildläsarlägesgrupp" @@ -2763,9 +2814,9 @@ msgstr "Långsam" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:233 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Normal" @@ -3002,6 +3053,683 @@ msgid "Shut off scanner lamp." msgstr "Slå av bildläsarlampan." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Pappersstorlek" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Automatisk separering" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, no-c-format +msgid "Landscape" +msgstr "Liggande" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "Inverterad bild" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "Läge för långa papper" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "Längdkontrollsläge" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, no-c-format +msgid "Manual feed mode" +msgstr "Manuell matning" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, no-c-format +msgid "Manual feed timeout" +msgstr "Timeout för manuell matning" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "Dubbelmatningsdetektering" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Sätt på dubbelsidig inläsning" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Verklig storlek på papperet i den automatiska dokumentmataren" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "" + +#: ../backend/kvs1025_opt.c:40 +#, no-c-format +msgid "halftone" +msgstr "" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "" + +#: ../backend/kvs1025_opt.c:42 +#, no-c-format +msgid "color" +msgstr "" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, no-c-format +msgid "continuous" +msgstr "" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, no-c-format +msgid "off" +msgstr "" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "Check" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "A5" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "A6" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "B5" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "B6" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "US-Legal" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, no-c-format +msgid "bayer_64" +msgstr "Bayer 64" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, no-c-format +msgid "bayer_16" +msgstr "Bayer 16" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, no-c-format +msgid "halftone_32" +msgstr "Raster 32" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, no-c-format +msgid "halftone_64" +msgstr "Raster 64" + +#: ../backend/kvs1025_opt.c:153 +#, no-c-format +msgid "diffusion" +msgstr "diffusion" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, no-c-format +msgid "normal" +msgstr "normal" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, no-c-format +msgid "light" +msgstr "ljus" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "mörk" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, no-c-format +msgid "From scanner" +msgstr "Från bildläsare" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Från papper" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, no-c-format +msgid "default" +msgstr "standard" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, no-c-format +msgid "smooth" +msgstr "jämn" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, no-c-format +msgid "low" +msgstr "låg" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, no-c-format +msgid "medium" +msgstr "medel" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "hög" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "bildskärm" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "linjär" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, no-c-format +msgid "red" +msgstr "röd" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, no-c-format +msgid "green" +msgstr "grön" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "blå" + +#: ../backend/kvs1025_opt.c:562 +#, no-c-format +msgid "Sets the scan source" +msgstr "Väljer bildläsarkälla" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Dokumentmatarläge" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Ställer in dokumentmatarläge" + +#: ../backend/kvs1025_opt.c:584 +#, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Aktivera/avaktivera läge för långt papper" + +#: ../backend/kvs1025_opt.c:593 +#, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Aktivera/avaktivera läge för längdkontroll" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, no-c-format +msgid "Sets the manual feed mode" +msgstr "Ställer in manuellt matningsläge" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Ställer in timeout för manuell matning i sekunder" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "Aktivera/avaktivera dubbelmatningsdetekteing" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "Anpassa till sida" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "Bildläsaren krymper sidan för att rymmas på den inlästa sidan" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "Ställ in pappersläge: sant för liggande, falskt för stående" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Automatiskt tröskelvärde" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Ställer in ljusstyrka, kontrast, vitnivå, gamma, brusreduktion och " +"bildton automatiskt" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Brusreducering" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Minska bruset från isolerade punkter" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Bildton" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Ställer in bildton" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:107 +#, no-c-format +msgid "Gamma" +msgstr "Gamma" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, no-c-format +msgid "Lamp color" +msgstr "Lampfärg" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Ställer in lampfärg (blindfärg)" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "Invertera bild i svart-vitt eller rasterläge" + +#: ../backend/kvs1025_opt.c:840 +#, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Spegla bilden (vänster/höger)" + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "jpeg-komprimmering" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "JPEG-bildkomprimmering med Q-parameter, '0' - ingen komprimmering" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "Rotera bilden medurs" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "Begär att drivrutinen roterar sidor med ett fixt värde" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "Mjukvaruupplinjering" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "Begär att drivrutinen linjerar upp sneda sidor digitalt" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "Mjukvarufläckborttagningsdiameter" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" +"Maximal diameter för ensamma prickar som tas bort från den inlästa bilden" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "Automatisk beskärning i mjukvara" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "Begär att drivrutinen tar bort ramar från sidor auomatiskt" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" +"I längdkontrolläge läser bildläsaren upp till den kortare av verklig " +"papperslängd och logisk dokumentlängd." + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Gammakorrigering" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "A3" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "Dubbelt US-Letter 11x17 tum" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "B4" + +#: ../backend/kvs40xx_opt.c:230 +#, no-c-format +msgid "High sensivity" +msgstr "Hög känsighet" + +#: ../backend/kvs40xx_opt.c:231 +#, no-c-format +msgid "Low sensivity" +msgstr "Låg känsighet" + +#: ../backend/kvs40xx_opt.c:242 +#, no-c-format +msgid "err_diffusion" +msgstr "Feldiffusion" + +#: ../backend/kvs40xx_opt.c:248 +#, no-c-format +msgid "No detection" +msgstr "Ingen detektering" + +#: ../backend/kvs40xx_opt.c:249 +#, no-c-format +msgid "Normal mode" +msgstr "Normalläge" + +#: ../backend/kvs40xx_opt.c:250 +#, no-c-format +msgid "Enhanced mode" +msgstr "Förbättringsläge" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paperby the length which is set in Document Size option" +msgstr "" +"I långpappersläge läser bildläsaren in bilden efter att den delat upp " +"långa papper i delar med en längd som angetts in " +"dokumentstorleksparametrarna." + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "Dubbelmatningsdetektionskänslighet" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "Ställ in dubbelmatningsdetektionskänsligheten" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "Avbryt inte efter dubbelmatningsdetektering" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "Ignorera vänstra dubbelmatningssensorn" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "Ignorera mellersta dubbelmatningssensorn" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "Ignorera högra dubbelmatningssensorn" + +#: ../backend/kvs40xx_opt.c:641 +#, no-c-format +msgid "Automatic threshold mode" +msgstr "Automatiskt tröskelläge" + +#: ../backend/kvs40xx_opt.c:642 +#, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Väljer automatiskt tröskelläge" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "Invertera bilden i svart-vitt läge" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "JPEG-komprimmering" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "JPEG-komprimmering (din applikation måste kunna dekomprimmera)" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "Detektera häftade dokument" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "Röd färgmättnad" + +#: ../backend/kvs40xx_opt.c:776 +#, no-c-format +msgid "Set chroma of red" +msgstr "Ställ in färgmättnad för rött" + +#: ../backend/kvs40xx_opt.c:786 +#, no-c-format +msgid "chroma of blue" +msgstr "Blå färgmättnad" + +#: ../backend/kvs40xx_opt.c:787 +#, no-c-format +msgid "Set chroma of blue" +msgstr "Ställ in färgmättnad för blått" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "Justering för sned inmatning" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "Stoppa bildläsaren när ett papper har inmatats snett" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "Stoppa bildläsaren när ett papper har inmatats snett" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "Beskär verklig bildarea" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "Bildläsaren detecterar automatiskt verklig bildarea och beskär den" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "Den kastar om höger och vänster" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "Lägg till utrymme ovanför bilden" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "Lägg till utrymme nedanför bilden" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3027,55 +3755,55 @@ msgid "8x8 Vertical Line" msgstr "8x8 lodrät linje" -#: ../backend/lexmark.c:263 ../backend/umax_pp.c:715 +#: ../backend/lexmark.c:273 ../backend/umax_pp.c:715 #, no-c-format msgid "Gain" msgstr "Förstärking" -#: ../backend/lexmark.c:264 ../backend/umax_pp.c:716 +#: ../backend/lexmark.c:274 ../backend/umax_pp.c:716 #, no-c-format msgid "Color channels gain settings" msgstr "Inställningar för färgkanalernas förstärkning" -#: ../backend/lexmark.c:273 ../backend/umax_pp.c:723 +#: ../backend/lexmark.c:283 ../backend/umax_pp.c:723 #, no-c-format msgid "Gray gain" msgstr "Grå förstärkning" -#: ../backend/lexmark.c:274 ../backend/umax_pp.c:724 +#: ../backend/lexmark.c:284 ../backend/umax_pp.c:724 #, no-c-format msgid "Sets gray channel gain" msgstr "Ställer in den grå kanalens förstärkning" -#: ../backend/lexmark.c:287 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" msgstr "Röd förstärkning" -#: ../backend/lexmark.c:288 ../backend/umax_pp.c:736 +#: ../backend/lexmark.c:298 ../backend/umax_pp.c:736 #, no-c-format msgid "Sets red channel gain" msgstr "Ställer in den röda kanalens förstärkning" -#: ../backend/lexmark.c:301 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" msgstr "Grön förstärkning" -#: ../backend/lexmark.c:302 ../backend/umax_pp.c:748 +#: ../backend/lexmark.c:312 ../backend/umax_pp.c:748 #, no-c-format msgid "Sets green channel gain" msgstr "Ställer in den gröna kanalens förstärkning" -#: ../backend/lexmark.c:315 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" msgstr "Blå förstärkning" -#: ../backend/lexmark.c:316 ../backend/umax_pp.c:760 +#: ../backend/lexmark.c:326 ../backend/umax_pp.c:760 #, no-c-format msgid "Sets blue channel gain" msgstr "Ställer in den blå kanalens förstärkning" @@ -3125,11 +3853,6 @@ msgid "From white stick" msgstr "Från kalibreringsraden" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Från papper" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3171,56 +3894,6 @@ msgid "sheetfed scanner" msgstr "arkmatad bildläsare" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Dokumentmatarläge" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Ställer in dokumentmatarläge" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Automatiskt tröskelvärde" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Ställer in ljusstyrka, kontrast, vitnivå, gamma, brusreduktion och " -"bildton automatiskt" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Brusreducering" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Minska bruset från isolerade punkter" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Bildton" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Ställer in bildton" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Gamma" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3231,26 +3904,6 @@ msgid "Grayscale 8 bits" msgstr "8 bitars gråskala" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Pappersstorlek" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Automatisk separering" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Sätt på dubbelsidig inläsning" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Verklig storlek på papperet i den automatiska dokumentmataren" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3345,11 +3998,6 @@ "Om denna inställning är vald försöker bakplanet automatiskt bestämma ett " "optimalt tröskelvärde." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Gammakorrigering" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -4146,29 +4794,29 @@ "Tvinga bakplanet att returnera statuskoden SANE_STATUS_ACCESS_DENIED " "efter det att sane_read() har anropats." -#: ../backend/rts8891.c:2744 +#: ../backend/rts8891.c:2770 #, no-c-format msgid "This option reflects the status of a scanner button." msgstr "Denna inställing avspeglar status på en av bildläsarens knappar." -#: ../backend/rts8891.c:2775 ../backend/umax.c:5795 +#: ../backend/rts8891.c:2801 ../backend/umax.c:5795 #: ../backend/umax_pp.c:639 #, no-c-format msgid "Lamp on" msgstr "Lampa på" -#: ../backend/rts8891.c:2776 ../backend/umax.c:5796 +#: ../backend/rts8891.c:2802 ../backend/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "Slå på bildläsarlampan" -#: ../backend/rts8891.c:2786 ../backend/umax1220u.c:248 +#: ../backend/rts8891.c:2812 ../backend/umax1220u.c:248 #: ../backend/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Lampa av" -#: ../backend/rts8891.c:2787 ../backend/umax1220u.c:249 +#: ../backend/rts8891.c:2813 ../backend/umax1220u.c:249 #: ../backend/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" @@ -4965,12 +5613,3 @@ #, no-c-format msgid "Sets blue channel offset" msgstr "Ställer in den blå kanalens offset" - -#~ msgid "Grayscale" -#~ msgstr "Gråskala" - -#~ msgid "Binary" -#~ msgstr "Binär" - -#~ msgid "Black & White" -#~ msgstr "Svart-vit" diff -Nru sane-backends-1.0.22/po/uk.po sane-backends-1.0.23/po/uk.po --- sane-backends-1.0.22/po/uk.po 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/po/uk.po 2012-07-25 00:16:53.000000000 +0000 @@ -1,22 +1,22 @@ # Copyright (C) 2009 # This file is distributed under the same license as the sane-backends package. # -# Yuri Chornoivan , 2009, 2010, 2011. +# Yuri Chornoivan , 2009, 2010, 2011, 2012. msgid "" msgstr "" "Project-Id-Version: sane-backends\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2011-01-31 18:15+0200\n" -"PO-Revision-Date: 2011-01-31 18:22+0200\n" +"POT-Creation-Date: 2012-07-06 23:07+0300\n" +"PO-Revision-Date: 2012-07-06 23:08+0300\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" +"Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.2\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" -"Language: uk" +"X-Generator: Lokalize 1.5\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" #: ../include/sane/saneopts.h:154 #, no-c-format @@ -30,13 +30,15 @@ #: ../include/sane/saneopts.h:157 ../backend/artec_eplus48u.c:2884 #: ../backend/epson.c:3284 ../backend/epson2.c:1269 -#: ../backend/genesys.c:6021 ../backend/gt68xx.c:703 -#: ../backend/hp3500.c:975 ../backend/hp-option.c:3297 -#: ../backend/leo.c:823 ../backend/lexmark.c:199 ../backend/ma1509.c:551 +#: ../backend/genesys.c:5607 ../backend/gt68xx.c:703 +#: ../backend/hp3500.c:1003 ../backend/hp-option.c:3297 +#: ../backend/kvs1025_opt.c:640 ../backend/kvs20xx_opt.c:284 +#: ../backend/kvs40xx_opt.c:505 ../backend/leo.c:823 +#: ../backend/lexmark.c:199 ../backend/ma1509.c:551 #: ../backend/matsushita.c:1135 ../backend/microtek2.h:599 #: ../backend/mustek.c:4363 ../backend/mustek_usb.c:305 -#: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:144 -#: ../backend/plustek.c:807 ../backend/plustek_pp.c:746 +#: ../backend/mustek_usb2.c:465 ../backend/pixma_sane_options.c:159 +#: ../backend/plustek.c:808 ../backend/plustek_pp.c:746 #: ../backend/sceptre.c:702 ../backend/snapscan-options.c:494 #: ../backend/teco1.c:1095 ../backend/teco2.c:1914 ../backend/teco3.c:920 #: ../backend/test.c:647 ../backend/u12.c:546 ../backend/umax.c:5176 @@ -46,23 +48,24 @@ msgstr "Позиція і розміри" #: ../include/sane/saneopts.h:158 ../backend/artec_eplus48u.c:2805 -#: ../backend/canon.c:1492 ../backend/genesys.c:6081 +#: ../backend/canon.c:1492 ../backend/genesys.c:5667 #: ../backend/gt68xx.c:672 ../backend/hp-option.c:2953 -#: ../backend/leo.c:871 ../backend/ma1509.c:599 -#: ../backend/matsushita.c:1189 ../backend/microtek2.h:600 -#: ../backend/mustek.c:4411 ../backend/mustek_usb.c:353 -#: ../backend/mustek_usb2.c:431 ../backend/niash.c:756 -#: ../backend/plustek.c:853 ../backend/plustek_pp.c:792 -#: ../backend/sceptre.c:750 ../backend/snapscan-options.c:561 -#: ../backend/stv680.c:1067 ../backend/teco1.c:1143 -#: ../backend/teco2.c:1962 ../backend/teco3.c:968 ../backend/u12.c:592 -#: ../backend/umax.c:5226 ../backend/umax_pp.c:629 +#: ../backend/kvs1025_opt.c:704 ../backend/leo.c:871 +#: ../backend/ma1509.c:599 ../backend/matsushita.c:1189 +#: ../backend/microtek2.h:600 ../backend/mustek.c:4411 +#: ../backend/mustek_usb.c:353 ../backend/mustek_usb2.c:431 +#: ../backend/niash.c:756 ../backend/plustek.c:854 +#: ../backend/plustek_pp.c:792 ../backend/sceptre.c:750 +#: ../backend/snapscan-options.c:561 ../backend/stv680.c:1067 +#: ../backend/teco1.c:1143 ../backend/teco2.c:1962 ../backend/teco3.c:968 +#: ../backend/u12.c:592 ../backend/umax.c:5226 ../backend/umax_pp.c:629 #, no-c-format msgid "Enhancement" msgstr "Покращення" #: ../include/sane/saneopts.h:159 ../backend/epson.c:3183 -#: ../backend/epson2.c:1194 ../backend/rts8891.c:2792 +#: ../backend/epson2.c:1194 ../backend/kvs20xx_opt.c:365 +#: ../backend/kvs40xx_opt.c:596 ../backend/rts8891.c:2792 #: ../backend/snapscan-options.c:816 ../backend/umax.c:5565 #, no-c-format msgid "Advanced" @@ -89,7 +92,7 @@ msgstr "К-ть бітів на колір" #: ../include/sane/saneopts.h:165 ../backend/canon.c:1143 -#: ../backend/leo.c:781 ../backend/pixma_sane_options.c:40 +#: ../backend/leo.c:781 ../backend/pixma_sane_options.c:43 #, no-c-format msgid "Scan mode" msgstr "Режим сканування" @@ -297,7 +300,7 @@ #: ../include/sane/saneopts.h:206 ../backend/hp3900_sane.c:428 #: ../backend/hp3900_sane.c:1021 ../backend/hp3900_sane.c:1421 #: ../backend/hp-option.c:3235 ../backend/mustek_usb2.c:121 -#: ../backend/plustek.c:235 ../backend/plustek_pp.c:202 +#: ../backend/plustek.c:236 ../backend/plustek_pp.c:202 #: ../backend/u12.c:157 #, no-c-format msgid "Negative" @@ -1032,42 +1035,42 @@ "За використання двобічного сканування ви отримаєте одразу зображення " "лицьового та зворотного боків документа" -#: ../backend/canon630u.c:158 +#: ../backend/canon630u.c:159 #, no-c-format msgid "Calibrate Scanner" msgstr "Калібрувати сканер" -#: ../backend/canon630u.c:159 +#: ../backend/canon630u.c:160 #, no-c-format msgid "Force scanner calibration before scan" msgstr "Виконувати примусове калібрування перед скануванням" -#: ../backend/canon630u.c:258 ../backend/umax1220u.c:208 +#: ../backend/canon630u.c:259 ../backend/umax1220u.c:208 #, no-c-format msgid "Grayscale scan" msgstr "Сканувати у відтінках сірого" -#: ../backend/canon630u.c:259 ../backend/umax1220u.c:209 +#: ../backend/canon630u.c:260 ../backend/umax1220u.c:209 #, no-c-format msgid "Do a grayscale rather than color scan" msgstr "Виконувати чорно-біле сканування замість кольорового" -#: ../backend/canon630u.c:305 +#: ../backend/canon630u.c:306 #, no-c-format msgid "Analog Gain" msgstr "Аналогове підсилення" -#: ../backend/canon630u.c:306 +#: ../backend/canon630u.c:307 #, no-c-format msgid "Increase or decrease the analog gain of the CCD array" msgstr "Збільшити або зменшити аналогове підсилення матриці ПЗЗ" -#: ../backend/canon630u.c:346 ../backend/epson.h:68 ../backend/epson2.h:72 +#: ../backend/canon630u.c:347 ../backend/epson.h:68 ../backend/epson2.h:74 #, no-c-format msgid "Gamma Correction" msgstr "Виправлення гами" -#: ../backend/canon630u.c:347 +#: ../backend/canon630u.c:348 #, no-c-format msgid "Selects the gamma corrected transfer curve" msgstr "Визначити криву виправлення гами" @@ -1110,7 +1113,8 @@ msgid "Slides" msgstr "Слайди" -#: ../backend/canon.c:186 ../backend/matsushita.c:178 +#: ../backend/canon.c:186 ../backend/kvs1025_opt.c:181 +#: ../backend/kvs40xx_opt.c:272 ../backend/matsushita.c:178 #, no-c-format msgid "Automatic" msgstr "Автоматично" @@ -1302,7 +1306,7 @@ msgstr "плівковий сканер" #: ../backend/canon.c:895 ../backend/canon.c:910 ../backend/canon.c:925 -#: ../backend/hp3900_sane.c:1683 ../backend/plustek.c:1334 +#: ../backend/hp3900_sane.c:1683 ../backend/plustek.c:1335 #: ../backend/plustek_pp.c:1014 ../backend/sceptre.c:593 #: ../backend/teco2.c:1836 ../backend/u12.c:851 #, no-c-format @@ -1388,7 +1392,8 @@ msgstr "Додаткова корекція кольорів" #: ../backend/canon.c:1532 ../backend/epson.c:3191 -#: ../backend/epson2.c:1233 +#: ../backend/epson2.c:1233 ../backend/kvs1025.h:55 +#: ../backend/kvs40xx_opt.c:825 #, no-c-format msgid "Mirror image" msgstr "Віддзеркалити зображення" @@ -1535,84 +1540,85 @@ msgid "Select the film type" msgstr "Визначає тип плівки" -#: ../backend/canon_dr.c:330 ../backend/epjitsu.c:203 -#: ../backend/epson.c:501 ../backend/epson2.c:110 ../backend/fujitsu.c:548 +#: ../backend/canon_dr.c:338 ../backend/epjitsu.c:203 +#: ../backend/epson.c:501 ../backend/epson2.c:114 ../backend/fujitsu.c:579 #: ../backend/gt68xx.c:148 ../backend/hp3900_sane.c:418 #: ../backend/hp3900_sane.c:427 ../backend/hp3900_sane.c:1017 -#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 ../backend/mustek.c:156 -#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:664 -#: ../backend/pixma_sane_options.c:85 ../backend/snapscan-options.c:82 +#: ../backend/hp5590.c:82 ../backend/ma1509.c:108 +#: ../backend/magicolor.c:167 ../backend/mustek.c:156 +#: ../backend/mustek.c:160 ../backend/mustek.c:164 ../backend/pixma.c:850 +#: ../backend/pixma_sane_options.c:88 ../backend/snapscan-options.c:82 #: ../backend/test.c:192 ../backend/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Планшетний" -#: ../backend/canon_dr.c:331 ../backend/epjitsu.c:204 -#: ../backend/fujitsu.c:549 ../backend/kodak.c:135 +#: ../backend/canon_dr.c:339 ../backend/epjitsu.c:204 +#: ../backend/fujitsu.c:580 ../backend/kodak.c:135 #, no-c-format msgid "ADF Front" msgstr "Перед протяжного механізму" -#: ../backend/canon_dr.c:332 ../backend/epjitsu.c:205 -#: ../backend/fujitsu.c:550 ../backend/kodak.c:136 +#: ../backend/canon_dr.c:340 ../backend/epjitsu.c:205 +#: ../backend/fujitsu.c:581 ../backend/kodak.c:136 #, no-c-format msgid "ADF Back" msgstr "Зворот протяжного механізму" -#: ../backend/canon_dr.c:333 ../backend/epjitsu.c:206 -#: ../backend/fujitsu.c:551 ../backend/kodak.c:137 ../backend/hp5590.c:84 -#: ../backend/pixma.c:675 +#: ../backend/canon_dr.c:341 ../backend/epjitsu.c:206 +#: ../backend/fujitsu.c:582 ../backend/hp5590.c:84 ../backend/kodak.c:137 +#: ../backend/pixma.c:861 #, no-c-format msgid "ADF Duplex" msgstr "Двобічна АПД" -#: ../backend/canon_dr.c:340 ../backend/epson.c:599 -#: ../backend/epson.c:3082 ../backend/epson2.c:195 -#: ../backend/fujitsu.c:568 ../backend/genesys.c:106 -#: ../backend/genesys.c:113 ../backend/gt68xx_low.h:136 +#: ../backend/canon_dr.c:348 ../backend/epson.c:599 +#: ../backend/epson.c:3082 ../backend/epson2.c:200 +#: ../backend/fujitsu.c:599 ../backend/genesys.c:89 +#: ../backend/genesys.c:96 ../backend/gt68xx_low.h:136 #: ../backend/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Червоний" -#: ../backend/canon_dr.c:341 ../backend/epson.c:600 -#: ../backend/epson.c:3078 ../backend/epson2.c:196 -#: ../backend/fujitsu.c:569 ../backend/genesys.c:107 -#: ../backend/genesys.c:114 ../backend/gt68xx_low.h:137 +#: ../backend/canon_dr.c:349 ../backend/epson.c:600 +#: ../backend/epson.c:3078 ../backend/epson2.c:201 +#: ../backend/fujitsu.c:600 ../backend/genesys.c:90 +#: ../backend/genesys.c:97 ../backend/gt68xx_low.h:137 #: ../backend/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Зелений" -#: ../backend/canon_dr.c:342 ../backend/epson.c:601 -#: ../backend/epson.c:3086 ../backend/epson2.c:197 -#: ../backend/fujitsu.c:570 ../backend/genesys.c:108 -#: ../backend/genesys.c:115 ../backend/gt68xx_low.h:138 +#: ../backend/canon_dr.c:350 ../backend/epson.c:601 +#: ../backend/epson.c:3086 ../backend/epson2.c:202 +#: ../backend/fujitsu.c:601 ../backend/genesys.c:91 +#: ../backend/genesys.c:98 ../backend/gt68xx_low.h:138 #: ../backend/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "Синій" -#: ../backend/canon_dr.c:343 +#: ../backend/canon_dr.c:351 #, no-c-format msgid "Enhance Red" msgstr "Покращити червоний" -#: ../backend/canon_dr.c:344 +#: ../backend/canon_dr.c:352 #, no-c-format msgid "Enhance Green" msgstr "Покращити зелений" -#: ../backend/canon_dr.c:345 +#: ../backend/canon_dr.c:353 #, no-c-format msgid "Enhance Blue" msgstr "Покращити синій" -#: ../backend/canon_dr.c:347 ../backend/epson.c:556 ../backend/epson.c:564 -#: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:159 -#: ../backend/epson2.c:167 ../backend/epson2.c:179 ../backend/epson2.c:194 -#: ../backend/epson2.c:208 ../backend/fujitsu.c:574 -#: ../backend/genesys.c:116 ../backend/leo.c:109 +#: ../backend/canon_dr.c:355 ../backend/epson.c:556 ../backend/epson.c:564 +#: ../backend/epson.c:576 ../backend/epson.c:598 ../backend/epson2.c:164 +#: ../backend/epson2.c:172 ../backend/epson2.c:184 ../backend/epson2.c:199 +#: ../backend/epson2.c:213 ../backend/fujitsu.c:605 +#: ../backend/genesys.c:99 ../backend/leo.c:109 #: ../backend/matsushita.c:138 ../backend/matsushita.c:159 #: ../backend/matsushita.c:191 ../backend/matsushita.c:213 #: ../backend/snapscan-options.c:87 @@ -1620,106 +1626,109 @@ msgid "None" msgstr "Немає" -#: ../backend/canon_dr.c:348 ../backend/fujitsu.c:575 +#: ../backend/canon_dr.c:356 ../backend/fujitsu.c:606 #, no-c-format msgid "JPEG" msgstr "JPEG" -#: ../backend/epson.c:491 ../backend/epson2.c:103 +#: ../backend/epson.c:491 ../backend/epson2.c:107 +#: ../backend/magicolor.c:160 #, no-c-format msgid "Simplex" msgstr "Однобічна" -#: ../backend/epson.c:492 ../backend/epson2.c:104 -#: ../backend/matsushita.h:218 +#: ../backend/epson.c:492 ../backend/epson2.c:108 ../backend/kvs1025.h:50 +#: ../backend/kvs20xx_opt.c:203 ../backend/kvs40xx_opt.c:352 +#: ../backend/magicolor.c:161 ../backend/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Двобічна" -#: ../backend/epson.c:502 ../backend/epson2.c:111 ../backend/pixma.c:681 +#: ../backend/epson.c:502 ../backend/epson2.c:115 ../backend/pixma.c:867 #, no-c-format msgid "Transparency Unit" msgstr "Модуль для слайдів" -#: ../backend/epson.c:503 ../backend/epson2.c:112 ../backend/mustek.c:160 -#: ../backend/pixma.c:669 ../backend/test.c:192 ../backend/umax.c:183 +#: ../backend/epson.c:503 ../backend/epson2.c:117 +#: ../backend/magicolor.c:168 ../backend/mustek.c:160 +#: ../backend/pixma.c:855 ../backend/test.c:192 ../backend/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Автоматична подача документів" -#: ../backend/epson.c:523 ../backend/epson2.c:128 +#: ../backend/epson.c:523 ../backend/epson2.c:133 #, no-c-format msgid "Positive Film" msgstr "Плівка-позитив" -#: ../backend/epson.c:524 ../backend/epson2.c:129 +#: ../backend/epson.c:524 ../backend/epson2.c:134 #, no-c-format msgid "Negative Film" msgstr "Плівка-негатив" -#: ../backend/epson.c:529 ../backend/epson2.c:136 +#: ../backend/epson.c:529 ../backend/epson2.c:141 #, no-c-format msgid "Focus on glass" msgstr "Фокус на склі" -#: ../backend/epson.c:530 ../backend/epson2.c:137 +#: ../backend/epson.c:530 ../backend/epson2.c:142 #, no-c-format msgid "Focus 2.5mm above glass" msgstr "Фокус 2,5 мм над склом" #: ../backend/epson.c:557 ../backend/epson.c:565 ../backend/epson.c:577 -#: ../backend/epson2.c:160 ../backend/epson2.c:168 ../backend/epson2.c:180 +#: ../backend/epson2.c:165 ../backend/epson2.c:173 ../backend/epson2.c:185 #, no-c-format msgid "Halftone A (Hard Tone)" msgstr "Півтони A (Різкі тони)" #: ../backend/epson.c:558 ../backend/epson.c:566 ../backend/epson.c:578 -#: ../backend/epson2.c:161 ../backend/epson2.c:169 ../backend/epson2.c:181 +#: ../backend/epson2.c:166 ../backend/epson2.c:174 ../backend/epson2.c:186 #, no-c-format msgid "Halftone B (Soft Tone)" msgstr "Півтони B (М’які тони)" #: ../backend/epson.c:559 ../backend/epson.c:567 ../backend/epson.c:579 -#: ../backend/epson2.c:162 ../backend/epson2.c:170 ../backend/epson2.c:182 +#: ../backend/epson2.c:167 ../backend/epson2.c:175 ../backend/epson2.c:187 #, no-c-format msgid "Halftone C (Net Screen)" msgstr "Півтони C (Net Screen)" -#: ../backend/epson.c:568 ../backend/epson.c:580 ../backend/epson2.c:171 -#: ../backend/epson2.c:183 +#: ../backend/epson.c:568 ../backend/epson.c:580 ../backend/epson2.c:176 +#: ../backend/epson2.c:188 #, no-c-format msgid "Dither A (4x4 Bayer)" msgstr "Дизеринг A (секція 4x4)" -#: ../backend/epson.c:569 ../backend/epson.c:581 ../backend/epson2.c:172 -#: ../backend/epson2.c:184 +#: ../backend/epson.c:569 ../backend/epson.c:581 ../backend/epson2.c:177 +#: ../backend/epson2.c:189 #, no-c-format msgid "Dither B (4x4 Spiral)" msgstr "Дизеринг B (спіраль 4x4)" -#: ../backend/epson.c:570 ../backend/epson.c:582 ../backend/epson2.c:173 -#: ../backend/epson2.c:185 +#: ../backend/epson.c:570 ../backend/epson.c:582 ../backend/epson2.c:178 +#: ../backend/epson2.c:190 #, no-c-format msgid "Dither C (4x4 Net Screen)" msgstr "Дизеринг C (4x4 Net Screen)" -#: ../backend/epson.c:571 ../backend/epson.c:583 ../backend/epson2.c:174 -#: ../backend/epson2.c:186 +#: ../backend/epson.c:571 ../backend/epson.c:583 ../backend/epson2.c:179 +#: ../backend/epson2.c:191 #, no-c-format msgid "Dither D (8x4 Net Screen)" msgstr "Дизеринг D (8x4 Net Screen)" -#: ../backend/epson.c:584 ../backend/epson2.c:187 +#: ../backend/epson.c:584 ../backend/epson2.c:192 #, no-c-format msgid "Text Enhanced Technology" msgstr "Технологія покращення тексту" -#: ../backend/epson.c:585 ../backend/epson2.c:188 +#: ../backend/epson.c:585 ../backend/epson2.c:193 #, no-c-format msgid "Download pattern A" msgstr "Завантажити шаблон A" -#: ../backend/epson.c:586 ../backend/epson2.c:189 +#: ../backend/epson.c:586 ../backend/epson2.c:194 #, no-c-format msgid "Download pattern B" msgstr "Завантажити шаблон B" @@ -1729,7 +1738,7 @@ msgid "No Correction" msgstr "Без виправлення" -#: ../backend/epson.c:632 ../backend/epson.c:657 ../backend/epson2.c:249 +#: ../backend/epson.c:632 ../backend/epson.c:657 ../backend/epson2.c:254 #, no-c-format msgid "User defined" msgstr "Визначене користувачем" @@ -1754,33 +1763,33 @@ msgid "CRT monitors" msgstr "Монітори з ЕПТ" -#: ../backend/epson.c:656 ../backend/epson2.c:248 ../backend/fujitsu.c:558 +#: ../backend/epson.c:656 ../backend/epson2.c:253 ../backend/fujitsu.c:589 #: ../backend/hp-option.c:3226 ../backend/test.c:143 #, no-c-format msgid "Default" msgstr "Типовий" -#: ../backend/epson.c:658 ../backend/epson2.c:250 +#: ../backend/epson.c:658 ../backend/epson2.c:255 #, no-c-format msgid "High density printing" msgstr "Друк з високою щільністю" -#: ../backend/epson.c:659 ../backend/epson2.c:251 +#: ../backend/epson.c:659 ../backend/epson2.c:256 #, no-c-format msgid "Low density printing" msgstr "Друк з низькою щільністю" -#: ../backend/epson.c:660 ../backend/epson2.c:252 +#: ../backend/epson.c:660 ../backend/epson2.c:257 #, no-c-format msgid "High contrast printing" msgstr "Друк з високою контрастністю" -#: ../backend/epson.c:678 ../backend/epson2.c:270 +#: ../backend/epson.c:678 ../backend/epson2.c:275 #, no-c-format msgid "User defined (Gamma=1.0)" msgstr "Визначене користувачем (Gamma=1.0)" -#: ../backend/epson.c:679 ../backend/epson2.c:271 +#: ../backend/epson.c:679 ../backend/epson2.c:276 #, no-c-format msgid "User defined (Gamma=1.8)" msgstr "Визначена користувачем (Gamma=1.8)" @@ -1800,12 +1809,17 @@ msgid "A5 landscape" msgstr "A5 альбомна" -#: ../backend/epson.c:760 +#: ../backend/epson.c:760 ../backend/kvs1025_opt.c:103 +#: ../backend/kvs20xx_opt.c:76 ../backend/kvs40xx_opt.c:130 +#: ../backend/kvs40xx_opt.c:147 #, no-c-format msgid "Letter" msgstr "Letter" -#: ../backend/epson.c:761 +#: ../backend/epson.c:761 ../backend/kvs1025_opt.c:100 +#: ../backend/kvs20xx_opt.c:73 ../backend/kvs20xx_opt.c:301 +#: ../backend/kvs40xx_opt.c:127 ../backend/kvs40xx_opt.c:144 +#: ../backend/kvs40xx_opt.c:525 #, no-c-format msgid "A4" msgstr "A4" @@ -1816,15 +1830,17 @@ msgstr "Макс" #: ../backend/epson.c:2799 ../backend/epson2.c:954 -#: ../backend/genesys.c:5952 ../backend/gt68xx.c:458 -#: ../backend/hp-option.c:2914 ../backend/ma1509.c:501 -#: ../backend/matsushita.c:1084 ../backend/microtek2.h:598 -#: ../backend/mustek.c:4205 ../backend/mustek_usb.c:260 -#: ../backend/mustek_usb2.c:344 ../backend/niash.c:736 -#: ../backend/plustek.c:720 ../backend/plustek_pp.c:657 -#: ../backend/sceptre.c:673 ../backend/snapscan-options.c:315 -#: ../backend/stv680.c:1030 ../backend/teco2.c:1886 ../backend/test.c:306 -#: ../backend/u12.c:473 ../backend/umax.c:5054 +#: ../backend/genesys.c:5524 ../backend/gt68xx.c:458 +#: ../backend/hp-option.c:2914 ../backend/kvs1025_opt.c:522 +#: ../backend/kvs20xx_opt.c:170 ../backend/kvs40xx_opt.c:319 +#: ../backend/ma1509.c:501 ../backend/matsushita.c:1084 +#: ../backend/microtek2.h:598 ../backend/mustek.c:4205 +#: ../backend/mustek_usb.c:260 ../backend/mustek_usb2.c:344 +#: ../backend/niash.c:736 ../backend/plustek.c:721 +#: ../backend/plustek_pp.c:657 ../backend/sceptre.c:673 +#: ../backend/snapscan-options.c:315 ../backend/stv680.c:1030 +#: ../backend/teco2.c:1886 ../backend/test.c:306 ../backend/u12.c:473 +#: ../backend/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Режим сканування" @@ -2018,11 +2034,13 @@ msgstr "Виштовхнути документ після сканування" #: ../backend/epson.c:3443 ../backend/epson2.c:1395 +#: ../backend/magicolor.c:2399 #, no-c-format msgid "ADF Mode" msgstr "Режим автоподавання" #: ../backend/epson.c:3445 ../backend/epson2.c:1397 +#: ../backend/magicolor.c:2401 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "Визначає режим автоподавання (однобічний/двобічний)" @@ -2037,7 +2055,7 @@ msgid "Select bay to scan" msgstr "Визначає секцію, яку буде скановано" -#: ../backend/epson.h:69 ../backend/epson2.h:73 +#: ../backend/epson.h:69 ../backend/epson2.h:75 #, no-c-format msgid "" "Selects the gamma correction value from a list of pre-defined devices or " @@ -2047,24 +2065,24 @@ "попереднього визначених пристроїв або визначеної користувачем таблиці, " "яку можна завантажити у сканер" -#: ../backend/epson.h:72 ../backend/epson2.h:76 +#: ../backend/epson.h:72 ../backend/epson2.h:78 #, no-c-format msgid "Focus Position" msgstr "Позиція фокусування" -#: ../backend/epson.h:73 ../backend/epson2.h:77 +#: ../backend/epson.h:73 ../backend/epson2.h:79 #, no-c-format msgid "Sets the focus position to either the glass or 2.5mm above the glass" msgstr "" "Визначає позицію фокусування на рівень від поверхні скла до висоти 2,5 " "мм над склом" -#: ../backend/epson.h:75 ../backend/epson2.h:79 +#: ../backend/epson.h:75 ../backend/epson2.h:81 #, no-c-format msgid "Wait for Button" msgstr "Очікувати натискання кнопки" -#: ../backend/epson.h:76 ../backend/epson2.h:80 +#: ../backend/epson.h:76 ../backend/epson2.h:82 #, no-c-format msgid "" "After sending the scan command, wait until the button on the scanner is " @@ -2073,168 +2091,209 @@ "Після надсилання команди сканування не розпочинати сканування до " "натискання кнопки на сканері." -#: ../backend/epson2.c:97 +#: ../backend/epson2.c:101 #, no-c-format msgid "Infrared" msgstr "Інфрачервоне" -#: ../backend/epson2.c:130 +#: ../backend/epson2.c:116 +#, no-c-format +msgid "TPU8x10" +msgstr "TPU8x10" + +#: ../backend/epson2.c:135 #, no-c-format msgid "Positive Slide" msgstr "Слайд-позитив" -#: ../backend/epson2.c:131 +#: ../backend/epson2.c:136 #, no-c-format msgid "Negative Slide" msgstr "Слайд-негатив" -#: ../backend/epson2.c:209 +#: ../backend/epson2.c:214 #, no-c-format msgid "Built in CCT profile" msgstr "Вбудований профіль CCT" -#: ../backend/epson2.c:210 +#: ../backend/epson2.c:215 #, no-c-format msgid "User defined CCT profile" msgstr "Визначений користувачем профіль CCT" -#: ../backend/fujitsu.c:559 ../backend/hp-option.c:3327 +#: ../backend/fujitsu.c:590 ../backend/hp-option.c:3327 #: ../backend/hp-option.c:3340 #, no-c-format msgid "On" msgstr "Увімкнути" -#: ../backend/fujitsu.c:560 ../backend/hp-option.c:3159 +#: ../backend/fujitsu.c:591 ../backend/hp-option.c:3159 #: ../backend/hp-option.c:3326 ../backend/hp-option.c:3339 #, no-c-format msgid "Off" msgstr "Вимкнути" -#: ../backend/fujitsu.c:562 +#: ../backend/fujitsu.c:593 #, no-c-format msgid "DTC" msgstr "DTC" -#: ../backend/fujitsu.c:563 +#: ../backend/fujitsu.c:594 #, no-c-format msgid "SDTC" msgstr "SDTC" -#: ../backend/fujitsu.c:565 ../backend/teco1.c:1152 +#: ../backend/fujitsu.c:596 ../backend/teco1.c:1152 #: ../backend/teco1.c:1153 ../backend/teco2.c:1971 ../backend/teco2.c:1972 #: ../backend/teco3.c:977 ../backend/teco3.c:978 #, no-c-format msgid "Dither" msgstr "Дизеринг" -#: ../backend/fujitsu.c:566 +#: ../backend/fujitsu.c:597 #, no-c-format msgid "Diffusion" msgstr "Дифузія" -#: ../backend/fujitsu.c:571 +#: ../backend/fujitsu.c:602 #, no-c-format msgid "White" msgstr "Білий" -#: ../backend/fujitsu.c:572 +#: ../backend/fujitsu.c:603 #, no-c-format msgid "Black" msgstr "Чорний" -#: ../backend/fujitsu.c:577 +#: ../backend/fujitsu.c:608 #, no-c-format msgid "Continue" msgstr "Продовжити" -#: ../backend/fujitsu.c:578 +#: ../backend/fujitsu.c:609 #, no-c-format msgid "Stop" msgstr "Зупинити" -#: ../backend/fujitsu.c:580 +#: ../backend/fujitsu.c:611 #, no-c-format msgid "10mm" msgstr "10мм" -#: ../backend/fujitsu.c:581 +#: ../backend/fujitsu.c:612 #, no-c-format msgid "15mm" msgstr "15мм" -#: ../backend/fujitsu.c:582 +#: ../backend/fujitsu.c:613 #, no-c-format msgid "20mm" msgstr "20мм" -#: ../backend/fujitsu.c:584 ../backend/hp-option.c:3045 +#: ../backend/fujitsu.c:615 ../backend/hp-option.c:3045 #, no-c-format msgid "Horizontal" msgstr "По горизонталі" -#: ../backend/fujitsu.c:585 +#: ../backend/fujitsu.c:616 #, no-c-format msgid "Horizontal bold" msgstr "Жирний по горизонталі" -#: ../backend/fujitsu.c:586 +#: ../backend/fujitsu.c:617 #, no-c-format msgid "Horizontal narrow" msgstr "Вузький по горизонталі" -#: ../backend/fujitsu.c:587 ../backend/hp-option.c:3044 +#: ../backend/fujitsu.c:618 ../backend/hp-option.c:3044 #, no-c-format msgid "Vertical" msgstr "По вертикалі" -#: ../backend/fujitsu.c:588 +#: ../backend/fujitsu.c:619 #, no-c-format msgid "Vertical bold" msgstr "Жирний по вертикалі" -#: ../backend/fujitsu.c:590 +#: ../backend/fujitsu.c:621 #, no-c-format msgid "Top to bottom" msgstr "Згори вниз" -#: ../backend/fujitsu.c:591 +#: ../backend/fujitsu.c:622 #, no-c-format msgid "Bottom to top" msgstr "Знизу догори" -#: ../backend/fujitsu.c:593 +#: ../backend/fujitsu.c:624 #, no-c-format msgid "Front" msgstr "Перед" -#: ../backend/fujitsu.c:594 +#: ../backend/fujitsu.c:625 #, no-c-format msgid "Back" msgstr "Зворот" -#: ../backend/genesys.c:6170 +#: ../backend/genesys.c:5749 +#, no-c-format +msgid "Software crop" +msgstr "Програмне обрізання" + +#: ../backend/genesys.c:5750 +#, no-c-format +msgid "Request backend to remove border from pages digitally" +msgstr "" +"Вимагати від програмного модуля вилучення границі зі сторінок у " +"автоматичному режимі" + +#: ../backend/genesys.c:5758 ../backend/kvs1025_opt.c:911 +#, no-c-format +msgid "Software blank skip percentage" +msgstr "Порогове значення порожніх сторінок для програмного відкидання" + +#: ../backend/genesys.c:5759 ../backend/kvs1025_opt.c:913 +#, no-c-format +msgid "Request driver to discard pages with low numbers of dark pixels" +msgstr "" +"Вимагати від драйвера відкидання сторінок з надто низькою кількістю " +"темних пікселів" + +#: ../backend/genesys.c:5769 ../backend/kvs1025_opt.c:893 +#, no-c-format +msgid "Software derotate" +msgstr "Програмне усування обертання" + +#: ../backend/genesys.c:5770 ../backend/kvs1025_opt.c:895 +#, no-c-format +msgid "Request driver to detect and correct 90 degree image rotation" +msgstr "" +"Вимагати від драйвера виявлення і виправлення обертання зображення на 90 " +"градусів" + +#: ../backend/genesys.c:5777 ../backend/pixma_sane_options.c:271 #, no-c-format msgid "Extras" msgstr "Додаткові" -#: ../backend/genesys.c:6189 +#: ../backend/genesys.c:5796 ../backend/pixma_sane_options.c:293 #, no-c-format msgid "Threshold curve" msgstr "Порогова крива" -#: ../backend/genesys.c:6190 +#: ../backend/genesys.c:5797 ../backend/pixma_sane_options.c:294 #, no-c-format msgid "Dynamic threshold curve, from light to dark, normally 50-65" msgstr "" "Крива динамічного порогового значення, від світлого до темного, типово " "50-65" -#: ../backend/genesys.c:6199 +#: ../backend/genesys.c:5806 #, no-c-format msgid "Disable dynamic lineart" msgstr "Вимкнути динамічне штрихування" -#: ../backend/genesys.c:6201 +#: ../backend/genesys.c:5808 #, no-c-format msgid "" "Disable use of a software adaptive algorithm to generate lineart relying " @@ -2243,12 +2302,12 @@ "Вимкнути використання адаптивного програмного алгоритму для створення " "штрихування замість апаратного алгоритму штрихування." -#: ../backend/genesys.c:6216 +#: ../backend/genesys.c:5823 #, no-c-format msgid "Disable interpolation" msgstr "Вимкнути інтерполяцію" -#: ../backend/genesys.c:6219 +#: ../backend/genesys.c:5826 #, no-c-format msgid "" "When using high resolutions where the horizontal resolution is smaller " @@ -2258,24 +2317,24 @@ "роздільна здатність менша за вертикальну, вимикає горизонтальну " "інтерполяцію." -#: ../backend/genesys.c:6228 +#: ../backend/genesys.c:5835 #, no-c-format msgid "Color Filter" msgstr "Фільтр кольорів" -#: ../backend/genesys.c:6231 +#: ../backend/genesys.c:5838 #, no-c-format msgid "When using gray or lineart this option selects the used color." msgstr "" "За використання друку у півтонах або штрихового друку за допомогою цього " "пункту можна обрати колір друку." -#: ../backend/genesys.c:6257 +#: ../backend/genesys.c:5864 #, no-c-format msgid "Lamp off time" msgstr "Час вимикання лампи" -#: ../backend/genesys.c:6260 +#: ../backend/genesys.c:5867 #, no-c-format msgid "" "The lamp will be turned off after the given time (in minutes). A value " @@ -2284,56 +2343,66 @@ "Лампу буде вимкнено, коли спливе вказаний час (у хвилинах). Значення " "рівне 0 означатиме, що лампа не вимикатиметься." -#: ../backend/genesys.c:6289 ../backend/genesys.c:6290 +#: ../backend/genesys.c:5877 +#, no-c-format +msgid "Lamp off during scan" +msgstr "Вимикання лампи під час сканування" + +#: ../backend/genesys.c:5878 +#, no-c-format +msgid "The lamp will be turned off during scan. " +msgstr "Лампу буде вимкнено під час сканування. " + +#: ../backend/genesys.c:5905 ../backend/genesys.c:5906 #, no-c-format msgid "File button" msgstr "Кнопка «File»" -#: ../backend/genesys.c:6342 ../backend/genesys.c:6343 +#: ../backend/genesys.c:5958 ../backend/genesys.c:5959 #, no-c-format msgid "OCR button" msgstr "Кнопка «OCR»" -#: ../backend/genesys.c:6356 ../backend/genesys.c:6357 +#: ../backend/genesys.c:5972 ../backend/genesys.c:5973 #, no-c-format msgid "Power button" msgstr "Кнопка «Power»" -#: ../backend/genesys.c:6370 ../backend/gt68xx.c:762 +#: ../backend/genesys.c:5986 ../backend/gt68xx.c:762 #, no-c-format msgid "Need calibration" msgstr "Потребує калібрування" -#: ../backend/genesys.c:6371 ../backend/gt68xx.c:763 +#: ../backend/genesys.c:5987 ../backend/gt68xx.c:763 #, no-c-format msgid "The scanner needs calibration for the current settings" msgstr "Для застосування поточних параметрів потрібне калібрування" -#: ../backend/genesys.c:6384 ../backend/gt68xx.c:787 -#: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:210 -#: ../backend/plustek.c:1079 +#: ../backend/genesys.c:6000 ../backend/gt68xx.c:787 +#: ../backend/gt68xx.c:788 ../backend/pixma_sane_options.c:225 +#: ../backend/plustek.c:1080 #, no-c-format msgid "Buttons" msgstr "Кнопки" -#: ../backend/genesys.c:6391 ../backend/gt68xx.c:794 +#: ../backend/genesys.c:6007 ../backend/gt68xx.c:794 #: ../backend/hp5400_sane.c:392 ../backend/hp-option.h:97 -#: ../backend/niash.c:728 ../backend/plustek.c:940 +#: ../backend/niash.c:728 ../backend/plustek.c:941 #, no-c-format msgid "Calibrate" msgstr "Відкалібрувати" -#: ../backend/genesys.c:6393 ../backend/gt68xx.c:796 +#: ../backend/genesys.c:6009 ../backend/gt68xx.c:796 #, no-c-format msgid "Start calibration using special sheet" msgstr "Почати калібрування за допомогою спеціального аркуша" -#: ../backend/genesys.c:6407 ../backend/gt68xx.c:809 +#: ../backend/genesys.c:6023 ../backend/gt68xx.c:809 #, no-c-format msgid "Clear calibration" msgstr "Спорожнити дані калібрування" -#: ../backend/genesys.c:6408 ../backend/gt68xx.c:810 +#: ../backend/genesys.c:6024 ../backend/gt68xx.c:810 #, no-c-format msgid "Clear calibration cache" msgstr "Спорожнити кеш калібрування" @@ -2452,12 +2521,12 @@ msgid "Sets the gamma value of all channels." msgstr "Визначає значення коефіцієнта контрастності для всіх каналів." -#: ../backend/hp3500.c:976 +#: ../backend/hp3500.c:1004 #, no-c-format msgid "Geometry Group" msgstr "Група розташування" -#: ../backend/hp3500.c:1032 ../backend/hp3500.c:1033 +#: ../backend/hp3500.c:1057 ../backend/hp3500.c:1058 #, no-c-format msgid "Scan Mode Group" msgstr "Група режимів сканування" @@ -2774,9 +2843,9 @@ msgstr "Повільно" #: ../backend/hp-option.c:3145 ../backend/hp-option.c:3252 -#: ../backend/matsushita.c:244 ../backend/mustek.c:149 -#: ../backend/plustek.c:233 ../backend/plustek_pp.c:200 -#: ../backend/u12.c:155 +#: ../backend/kvs40xx_opt.c:229 ../backend/matsushita.c:244 +#: ../backend/mustek.c:149 ../backend/plustek.c:234 +#: ../backend/plustek_pp.c:200 ../backend/u12.c:155 #, no-c-format msgid "Normal" msgstr "Звичайна" @@ -3014,6 +3083,687 @@ msgid "Shut off scanner lamp." msgstr "Вимкнути лампу сканера." +#: ../backend/kvs1025.h:51 ../backend/kvs20xx_opt.c:294 +#: ../backend/kvs40xx_opt.c:515 ../backend/matsushita.h:219 +#, no-c-format +msgid "Paper size" +msgstr "Розмір паперу" + +#: ../backend/kvs1025.h:52 ../backend/kvs1025.h:67 +#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 +#, no-c-format +msgid "Automatic separation" +msgstr "Автоматичне відокремлення" + +#: ../backend/kvs1025.h:53 ../backend/kvs20xx_opt.c:306 +#: ../backend/kvs40xx_opt.c:530 +#, no-c-format +msgid "Landscape" +msgstr "Альбомна" + +#: ../backend/kvs1025.h:54 ../backend/kvs40xx_opt.c:692 +#, no-c-format +msgid "Inverse Image" +msgstr "Інверсивне зображення" + +#: ../backend/kvs1025.h:56 ../backend/kvs40xx_opt.c:403 +#, no-c-format +msgid "Long paper mode" +msgstr "Режим довгого паперу" + +#: ../backend/kvs1025.h:57 ../backend/kvs20xx_opt.c:229 +#: ../backend/kvs40xx_opt.c:392 +#, no-c-format +msgid "Length control mode" +msgstr "Режим керування довжиною" + +#: ../backend/kvs1025.h:58 ../backend/kvs20xx_opt.c:241 +#: ../backend/kvs40xx_opt.c:415 +#, no-c-format +msgid "Manual feed mode" +msgstr "Режим подавання вручну" + +#: ../backend/kvs1025.h:59 ../backend/kvs20xx_opt.c:253 +#: ../backend/kvs40xx_opt.c:427 +#, no-c-format +msgid "Manual feed timeout" +msgstr "Час очікування на подачу вручну" + +#: ../backend/kvs1025.h:60 ../backend/kvs20xx_opt.c:266 +#: ../backend/kvs40xx_opt.c:440 +#, no-c-format +msgid "Double feed detection" +msgstr "Виявлення двобічного подавання" + +#: ../backend/kvs1025.h:63 ../backend/kvs20xx_opt.c:204 +#: ../backend/kvs40xx_opt.c:353 ../backend/matsushita.h:223 +#, no-c-format +msgid "Enable Duplex (Dual-Sided) Scanning" +msgstr "Увімкнути двобічне сканування" + +#: ../backend/kvs1025.h:65 ../backend/kvs20xx_opt.c:295 +#: ../backend/kvs40xx_opt.c:516 ../backend/matsushita.h:225 +#, no-c-format +msgid "Physical size of the paper in the ADF" +msgstr "Фізичний розмір паперу у пристрої автоматичної подачі" + +#: ../backend/kvs1025_opt.c:39 +#, no-c-format +msgid "bw" +msgstr "чб" + +#: ../backend/kvs1025_opt.c:40 +#, no-c-format +msgid "halftone" +msgstr "півтони" + +#: ../backend/kvs1025_opt.c:41 +#, no-c-format +msgid "gray" +msgstr "сірий" + +#: ../backend/kvs1025_opt.c:42 +#, no-c-format +msgid "color" +msgstr "кольорове" + +#: ../backend/kvs1025_opt.c:61 ../backend/kvs40xx_opt.c:107 +#: ../backend/kvs40xx_opt.c:1046 +#, no-c-format +msgid "adf" +msgstr "АПД" + +#: ../backend/kvs1025_opt.c:62 ../backend/kvs40xx_opt.c:49 +#: ../backend/kvs40xx_opt.c:108 +#, no-c-format +msgid "fb" +msgstr "планшет" + +#: ../backend/kvs1025_opt.c:72 ../backend/kvs20xx_opt.c:54 +#: ../backend/kvs40xx_opt.c:100 +#, no-c-format +msgid "single" +msgstr "однобічний" + +#: ../backend/kvs1025_opt.c:73 ../backend/kvs20xx.c:457 +#: ../backend/kvs20xx_opt.c:55 ../backend/kvs40xx.c:703 +#: ../backend/kvs40xx.c:721 ../backend/kvs40xx_opt.c:101 +#: ../backend/kvs40xx_opt.c:1086 +#, no-c-format +msgid "continuous" +msgstr "безперервне" + +#: ../backend/kvs1025_opt.c:83 ../backend/kvs20xx_opt.c:61 +#: ../backend/kvs40xx_opt.c:114 +#, no-c-format +msgid "off" +msgstr "вимкнено" + +#: ../backend/kvs1025_opt.c:84 ../backend/kvs20xx_opt.c:62 +#: ../backend/kvs40xx_opt.c:115 +#, no-c-format +msgid "wait_doc" +msgstr "очік_документа" + +#: ../backend/kvs1025_opt.c:85 ../backend/kvs20xx_opt.c:63 +#: ../backend/kvs40xx_opt.c:117 +#, no-c-format +msgid "wait_key" +msgstr "очік_клавіші" + +#: ../backend/kvs1025_opt.c:96 ../backend/kvs20xx_opt.c:69 +#: ../backend/kvs40xx_opt.c:123 ../backend/kvs40xx_opt.c:140 +#, no-c-format +msgid "user_def" +msgstr "визн_користувачем" + +#: ../backend/kvs1025_opt.c:97 ../backend/kvs20xx_opt.c:70 +#: ../backend/kvs40xx_opt.c:124 ../backend/kvs40xx_opt.c:141 +#, no-c-format +msgid "business_card" +msgstr "бізнес_картка" + +#: ../backend/kvs1025_opt.c:98 ../backend/kvs40xx_opt.c:125 +#: ../backend/kvs40xx_opt.c:142 +#, no-c-format +msgid "Check" +msgstr "Чек" + +#: ../backend/kvs1025_opt.c:101 ../backend/kvs20xx_opt.c:74 +#: ../backend/kvs40xx_opt.c:128 ../backend/kvs40xx_opt.c:145 +#, no-c-format +msgid "A5" +msgstr "A5" + +#: ../backend/kvs1025_opt.c:102 ../backend/kvs20xx_opt.c:75 +#: ../backend/kvs40xx_opt.c:129 ../backend/kvs40xx_opt.c:146 +#, no-c-format +msgid "A6" +msgstr "A6" + +#: ../backend/kvs1025_opt.c:106 ../backend/kvs20xx_opt.c:79 +#: ../backend/kvs40xx_opt.c:133 ../backend/kvs40xx_opt.c:150 +#, no-c-format +msgid "B5" +msgstr "B5" + +#: ../backend/kvs1025_opt.c:107 ../backend/kvs20xx_opt.c:80 +#: ../backend/kvs40xx_opt.c:134 ../backend/kvs40xx_opt.c:151 +#, no-c-format +msgid "B6" +msgstr "B6" + +#: ../backend/kvs1025_opt.c:108 ../backend/kvs20xx_opt.c:81 +#: ../backend/kvs40xx_opt.c:135 ../backend/kvs40xx_opt.c:152 +#, no-c-format +msgid "Legal" +msgstr "Легал" + +#: ../backend/kvs1025_opt.c:149 ../backend/kvs40xx_opt.c:238 +#, no-c-format +msgid "bayer_64" +msgstr "баєр_64" + +#: ../backend/kvs1025_opt.c:150 ../backend/kvs40xx_opt.c:239 +#, no-c-format +msgid "bayer_16" +msgstr "баєр_16" + +#: ../backend/kvs1025_opt.c:151 ../backend/kvs40xx_opt.c:240 +#, no-c-format +msgid "halftone_32" +msgstr "напівтони_32" + +#: ../backend/kvs1025_opt.c:152 ../backend/kvs40xx_opt.c:241 +#, no-c-format +msgid "halftone_64" +msgstr "напівтони_64" + +#: ../backend/kvs1025_opt.c:153 +#, no-c-format +msgid "diffusion" +msgstr "розсіяне" + +#: ../backend/kvs1025_opt.c:166 ../backend/kvs1025_opt.c:228 +#: ../backend/kvs1025_opt.c:241 ../backend/kvs20xx_opt.c:128 +#: ../backend/kvs20xx_opt.c:136 ../backend/kvs40xx_opt.c:214 +#: ../backend/kvs40xx_opt.c:222 ../backend/kvs40xx_opt.c:257 +#, no-c-format +msgid "normal" +msgstr "звичайне" + +#: ../backend/kvs1025_opt.c:167 ../backend/kvs40xx_opt.c:258 +#, no-c-format +msgid "light" +msgstr "світле" + +#: ../backend/kvs1025_opt.c:168 ../backend/kvs40xx_opt.c:259 +#, no-c-format +msgid "dark" +msgstr "темне" + +#: ../backend/kvs1025_opt.c:179 ../backend/kvs40xx_opt.c:270 +#, no-c-format +msgid "From scanner" +msgstr "Зі сканера" + +#: ../backend/kvs1025_opt.c:180 ../backend/kvs40xx_opt.c:271 +#: ../backend/matsushita.c:177 +#, no-c-format +msgid "From paper" +msgstr "Від паперу" + +#: ../backend/kvs1025_opt.c:192 ../backend/kvs40xx_opt.c:283 +#, no-c-format +msgid "default" +msgstr "типове" + +#: ../backend/kvs1025_opt.c:211 ../backend/kvs20xx_opt.c:122 +#: ../backend/kvs40xx_opt.c:208 +#, no-c-format +msgid "smooth" +msgstr "гладке" + +#: ../backend/kvs1025_opt.c:212 ../backend/kvs20xx_opt.c:118 +#: ../backend/kvs40xx_opt.c:204 +#, no-c-format +msgid "none" +msgstr "немає" + +#: ../backend/kvs1025_opt.c:213 ../backend/kvs20xx_opt.c:119 +#: ../backend/kvs40xx_opt.c:205 +#, no-c-format +msgid "low" +msgstr "низьке" + +#: ../backend/kvs1025_opt.c:214 ../backend/kvs1025_opt.c:804 +#: ../backend/kvs20xx_opt.c:120 ../backend/kvs40xx_opt.c:206 +#, no-c-format +msgid "medium" +msgstr "середнє" + +#: ../backend/kvs1025_opt.c:215 ../backend/kvs20xx_opt.c:121 +#: ../backend/kvs40xx_opt.c:207 +#, no-c-format +msgid "high" +msgstr "високе" + +#: ../backend/kvs1025_opt.c:229 ../backend/kvs20xx_opt.c:129 +#: ../backend/kvs40xx_opt.c:215 +#, no-c-format +msgid "crt" +msgstr "ЕПТ" + +#: ../backend/kvs1025_opt.c:230 +#, no-c-format +msgid "linier" +msgstr "лінійна" + +#: ../backend/kvs1025_opt.c:242 ../backend/kvs20xx_opt.c:137 +#: ../backend/kvs40xx_opt.c:223 +#, no-c-format +msgid "red" +msgstr "червоний" + +#: ../backend/kvs1025_opt.c:243 ../backend/kvs20xx_opt.c:138 +#: ../backend/kvs40xx_opt.c:224 +#, no-c-format +msgid "green" +msgstr "зелений" + +#: ../backend/kvs1025_opt.c:244 ../backend/kvs20xx_opt.c:139 +#: ../backend/kvs40xx_opt.c:225 +#, no-c-format +msgid "blue" +msgstr "синій" + +#: ../backend/kvs1025_opt.c:562 +#, no-c-format +msgid "Sets the scan source" +msgstr "Встановлює джерело сканування" + +#: ../backend/kvs1025_opt.c:573 ../backend/kvs20xx_opt.c:217 +#: ../backend/kvs40xx_opt.c:366 ../backend/matsushita.c:1126 +#, no-c-format +msgid "Feeder mode" +msgstr "Режим подачі" + +#: ../backend/kvs1025_opt.c:574 ../backend/kvs20xx_opt.c:218 +#: ../backend/kvs40xx_opt.c:367 ../backend/matsushita.c:1127 +#, no-c-format +msgid "Sets the feeding mode" +msgstr "Визначити режим подачі" + +#: ../backend/kvs1025_opt.c:584 +#, no-c-format +msgid "Enable/Disable long paper mode" +msgstr "Увімкнути/Вимкнути режим довгого паперу" + +#: ../backend/kvs1025_opt.c:593 +#, no-c-format +msgid "Enable/Disable length control mode" +msgstr "Увімкнути/Вимкнути режим керування довжиною" + +#: ../backend/kvs1025_opt.c:601 ../backend/kvs20xx_opt.c:242 +#: ../backend/kvs40xx_opt.c:416 +#, no-c-format +msgid "Sets the manual feed mode" +msgstr "Встановлює режим подавання вручну" + +#: ../backend/kvs1025_opt.c:612 ../backend/kvs20xx_opt.c:254 +#: ../backend/kvs40xx_opt.c:428 +#, no-c-format +msgid "Sets the manual feed timeout in seconds" +msgstr "Встановлює час очікування на подавання вручну" + +#: ../backend/kvs1025_opt.c:625 ../backend/kvs20xx_opt.c:267 +#: ../backend/kvs40xx_opt.c:441 +#, no-c-format +msgid "Enable/Disable double feed detection" +msgstr "Увімкнути або вимкнути виявлення подвійного подавання" + +#: ../backend/kvs1025_opt.c:631 ../backend/kvs20xx_opt.c:275 +#: ../backend/kvs40xx_opt.c:496 +#, no-c-format +msgid "fit-to-page" +msgstr "за аркушем" + +#: ../backend/kvs1025_opt.c:632 ../backend/kvs20xx_opt.c:276 +#: ../backend/kvs40xx_opt.c:497 +#, no-c-format +msgid "Fit to page" +msgstr "За аркушем" + +#: ../backend/kvs1025_opt.c:634 ../backend/kvs20xx_opt.c:277 +#: ../backend/kvs40xx_opt.c:498 +#, no-c-format +msgid "Scanner shrinks image to fit scanned page" +msgstr "Сканер стискає зображення відповідно до розмірів аркуша" + +#: ../backend/kvs1025_opt.c:661 ../backend/kvs20xx_opt.c:308 +#: ../backend/kvs40xx_opt.c:532 +#, no-c-format +msgid "Set paper position : true for landscape, false for portrait" +msgstr "Встановлює розташування аркуша: true — альбомне, false — книжкове" + +#: ../backend/kvs1025_opt.c:735 ../backend/matsushita.c:1224 +#, no-c-format +msgid "Automatic threshold" +msgstr "Автоматичне визначення" + +#: ../backend/kvs1025_opt.c:738 ../backend/matsushita.c:1227 +#, no-c-format +msgid "" +"Automatically sets brightness, contrast, white level, gamma, noise " +"reduction and image emphasis" +msgstr "" +"Встановлювати яскравість, контрастність, рівень білого, гаму, зменшення " +"шумності і виразність зображення автоматично" + +#: ../backend/kvs1025_opt.c:783 ../backend/kvs40xx_opt.c:763 +#: ../backend/matsushita.c:1275 +#, no-c-format +msgid "Noise reduction" +msgstr "Зменшення шумності" + +#: ../backend/kvs1025_opt.c:785 ../backend/kvs40xx_opt.c:764 +#: ../backend/matsushita.c:1277 +#, no-c-format +msgid "Reduce the isolated dot noise" +msgstr "Зменшити шум від ізольованих точок" + +#: ../backend/kvs1025_opt.c:796 ../backend/kvs20xx_opt.c:411 +#: ../backend/kvs40xx_opt.c:654 ../backend/matsushita.c:1288 +#, no-c-format +msgid "Image emphasis" +msgstr "Виразність зображення" + +#: ../backend/kvs1025_opt.c:797 ../backend/kvs20xx_opt.c:412 +#: ../backend/kvs40xx_opt.c:655 ../backend/matsushita.c:1289 +#, no-c-format +msgid "Sets the image emphasis" +msgstr "Визначає виразність зображення" + +#: ../backend/kvs1025_opt.c:808 ../backend/kvs1025_opt.c:809 +#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 +#: ../backend/pixma_sane_options.c:108 +#, no-c-format +msgid "Gamma" +msgstr "Гама" + +#: ../backend/kvs1025_opt.c:818 ../backend/kvs20xx_opt.c:435 +#: ../backend/kvs40xx_opt.c:680 +#, no-c-format +msgid "Lamp color" +msgstr "Колір лампи" + +#: ../backend/kvs1025_opt.c:819 ../backend/kvs20xx_opt.c:436 +#: ../backend/kvs40xx_opt.c:681 +#, no-c-format +msgid "Sets the lamp color (color dropout)" +msgstr "Встановлює колір лампи (відкидання кольорів)" + +#: ../backend/kvs1025_opt.c:832 +#, no-c-format +msgid "Inverse image in B/W or halftone mode" +msgstr "Інверсивне зображення у чорно-білому або півтоновому режимі" + +#: ../backend/kvs1025_opt.c:840 +#, no-c-format +msgid "Mirror image (left/right flip)" +msgstr "Віддзеркалити зображення (перевертання через лівий/правий край)" + +#: ../backend/kvs1025_opt.c:847 +#, no-c-format +msgid "jpeg compression" +msgstr "стискання jpeg" + +#: ../backend/kvs1025_opt.c:850 +#, no-c-format +msgid "JPEG Image Compression with Q parameter, '0' - no compression" +msgstr "Стискання зображень JPEG з параметром Q, «0» — не стискати" + +#: ../backend/kvs1025_opt.c:860 +#, no-c-format +msgid "Rotate image clockwise" +msgstr "Обернути зображення за год. стрілкою" + +#: ../backend/kvs1025_opt.c:862 +#, no-c-format +msgid "Request driver to rotate pages by a fixed amount" +msgstr "Вимагати від драйвера обертання сторінок на фіксований вказаний кут" + +#: ../backend/kvs1025_opt.c:872 +#, no-c-format +msgid "Software deskew" +msgstr "Програмне усування обертання" + +#: ../backend/kvs1025_opt.c:874 +#, no-c-format +msgid "Request driver to rotate skewed pages digitally" +msgstr "" +"Вимагати від драйвера усування обертання сторінок у автоматичному режимі" + +#: ../backend/kvs1025_opt.c:881 +#, no-c-format +msgid "Software despeckle diameter" +msgstr "Діаметр плям для програмного усування" + +#: ../backend/kvs1025_opt.c:883 +#, no-c-format +msgid "Maximum diameter of lone dots to remove from scan" +msgstr "" +"Мінімальний діаметр окремих плям, які слід усунути зі сканованого " +"зображення" + +#: ../backend/kvs1025_opt.c:902 +#, no-c-format +msgid "Software automatic cropping" +msgstr "Програмне автоматичне обрізання" + +#: ../backend/kvs1025_opt.c:904 +#, no-c-format +msgid "Request driver to remove border from pages digitally" +msgstr "" +"Вимагати від драйвера вилучення границі зі сторінок у автоматичному " +"режимі" + +#: ../backend/kvs20xx_opt.c:232 ../backend/kvs40xx_opt.c:395 +#, no-c-format +msgid "" +"Length Control Mode is a mode that the scanner reads up to the shorter " +"length of actual paper or logical document length." +msgstr "" +"У режимі керування довжиною сканер читає дані до найкоротшої з таких " +"довжин: дійсної довжини аркуша паперу або логічної довжини документа." + +#: ../backend/kvs20xx_opt.c:423 ../backend/kvs20xx_opt.c:424 +#: ../backend/kvs40xx_opt.c:667 ../backend/kvs40xx_opt.c:668 +#: ../backend/microtek2.h:640 +#, no-c-format +msgid "Gamma correction" +msgstr "Виправлення гами" + +#: ../backend/kvs40xx_opt.c:116 +#, no-c-format +msgid "wait_doc_hopper_up" +msgstr "очік_документа_з_бункера" + +#: ../backend/kvs40xx_opt.c:126 +#, no-c-format +msgid "A3" +msgstr "A3" + +#: ../backend/kvs40xx_opt.c:131 +#, no-c-format +msgid "Double letter 11x17 in" +msgstr "Подвійний лист 11x17 дюймів" + +#: ../backend/kvs40xx_opt.c:132 +#, no-c-format +msgid "B4" +msgstr "B4" + +#: ../backend/kvs40xx_opt.c:230 +#, no-c-format +msgid "High sensivity" +msgstr "Висока чутливість" + +#: ../backend/kvs40xx_opt.c:231 +#, no-c-format +msgid "Low sensivity" +msgstr "Низька чутливість" + +#: ../backend/kvs40xx_opt.c:242 +#, no-c-format +msgid "err_diffusion" +msgstr "помилка_розс" + +#: ../backend/kvs40xx_opt.c:248 +#, no-c-format +msgid "No detection" +msgstr "Без виявлення" + +#: ../backend/kvs40xx_opt.c:249 +#, no-c-format +msgid "Normal mode" +msgstr "Звичайний режим" + +#: ../backend/kvs40xx_opt.c:250 +#, no-c-format +msgid "Enhanced mode" +msgstr "Розширений режим" + +#: ../backend/kvs40xx_opt.c:404 +#, no-c-format +msgid "" +"Long Paper Mode is a mode that the scanner reads the image after it " +"divides long paper by the length which is set in Document Size option." +msgstr "" +"У режимі довгого паперу сканер виконує читання зображення після поділу " +"довгого листа паперу на відрізки довжини, встановлені за допомогою " +"параметра «Розмір документа»" + +#: ../backend/kvs40xx_opt.c:448 +#, no-c-format +msgid "Double feed detector sensitivity" +msgstr "Значення чутливості датчика подвійного подавання" + +#: ../backend/kvs40xx_opt.c:449 +#, no-c-format +msgid "Set the double feed detector sensitivity" +msgstr "Встановити значення чутливості датчика подвійного подавання" + +#: ../backend/kvs40xx_opt.c:460 ../backend/kvs40xx_opt.c:461 +#, no-c-format +msgid "Do not stop after double feed detection" +msgstr "Не зупинятися після виявлення подвійного подавання" + +#: ../backend/kvs40xx_opt.c:469 ../backend/kvs40xx_opt.c:470 +#, no-c-format +msgid "Ignore left double feed sensor" +msgstr "Ігнорувати лівий датчик подвійного подавання" + +#: ../backend/kvs40xx_opt.c:478 ../backend/kvs40xx_opt.c:479 +#, no-c-format +msgid "Ignore center double feed sensor" +msgstr "Ігнорувати центральний датчик подвійного подавання" + +#: ../backend/kvs40xx_opt.c:487 ../backend/kvs40xx_opt.c:488 +#, no-c-format +msgid "Ignore right double feed sensor" +msgstr "Ігнорувати правий датчик подвійного подавання" + +#: ../backend/kvs40xx_opt.c:641 +#, no-c-format +msgid "Automatic threshold mode" +msgstr "Режим автоматичного порогового значення" + +#: ../backend/kvs40xx_opt.c:642 +#, no-c-format +msgid "Sets the automatic threshold mode" +msgstr "Встановлює режим автоматичного порогового значення" + +#: ../backend/kvs40xx_opt.c:693 +#, no-c-format +msgid "Inverse image in B/W mode" +msgstr "Інверсивне зображення у чорно-білому режимі" + +#: ../backend/kvs40xx_opt.c:714 +#, no-c-format +msgid "JPEG compression" +msgstr "Стискання JPEG" + +#: ../backend/kvs40xx_opt.c:717 +#, no-c-format +msgid "JPEG compression (yours application must be able to uncompress)" +msgstr "Стискання JPEG (ваша програма повинна мати змогу розпакувати дані)" + +#: ../backend/kvs40xx_opt.c:736 ../backend/kvs40xx_opt.c:737 +#, no-c-format +msgid "Detect stapled document" +msgstr "Виявляти підшиті документи" + +#: ../backend/kvs40xx_opt.c:775 +#, no-c-format +msgid "chroma of red" +msgstr "інтенсивність червоного" + +#: ../backend/kvs40xx_opt.c:776 +#, no-c-format +msgid "Set chroma of red" +msgstr "Встановити інтенсивність червоного" + +#: ../backend/kvs40xx_opt.c:786 +#, no-c-format +msgid "chroma of blue" +msgstr "інтенсивність синього" + +#: ../backend/kvs40xx_opt.c:787 +#, no-c-format +msgid "Set chroma of blue" +msgstr "Встановити інтенсивність синього" + +#: ../backend/kvs40xx_opt.c:797 ../backend/kvs40xx_opt.c:798 +#, no-c-format +msgid "Skew adjustment" +msgstr "Коригування перекошування" + +#: ../backend/kvs40xx_opt.c:807 +#, no-c-format +msgid "Stop scanner when a paper have been skewed" +msgstr "Зупинити сканування, якщо папір було перекошено" + +#: ../backend/kvs40xx_opt.c:808 +#, no-c-format +msgid "Scanner will be stop when a paper have been skewed" +msgstr "Сканування буде зупинено, якщо папір було вставлено з нахилом" + +#: ../backend/kvs40xx_opt.c:815 +#, no-c-format +msgid "Crop actual image area" +msgstr "Обрізати до справжньої області зображення" + +#: ../backend/kvs40xx_opt.c:816 +#, no-c-format +msgid "Scanner automatically detect image area and crop it" +msgstr "Сканер автоматично визначає область зображення і обрізає його" + +#: ../backend/kvs40xx_opt.c:826 +#, no-c-format +msgid "It is right and left reversing" +msgstr "Перевертання ліворуч і праворуч" + +#: ../backend/kvs40xx_opt.c:833 ../backend/kvs40xx_opt.c:834 +#, no-c-format +msgid "Addition of space in top position" +msgstr "Додавання простору у верхній частині" + +#: ../backend/kvs40xx_opt.c:841 ../backend/kvs40xx_opt.c:842 +#, no-c-format +msgid "Addition of space in bottom position" +msgstr "Додавання простору у нижній частині" + #: ../backend/leo.c:110 #, no-c-format msgid "Diamond" @@ -3059,7 +3809,7 @@ msgid "Sets gray channel gain" msgstr "Визначає підсилення сірого каналу" -#: ../backend/lexmark.c:297 ../backend/plustek.c:1000 +#: ../backend/lexmark.c:297 ../backend/plustek.c:1001 #: ../backend/umax_pp.c:735 #, no-c-format msgid "Red gain" @@ -3070,7 +3820,7 @@ msgid "Sets red channel gain" msgstr "Визначає підсилення каналу червоного" -#: ../backend/lexmark.c:311 ../backend/plustek.c:1016 +#: ../backend/lexmark.c:311 ../backend/plustek.c:1017 #: ../backend/umax_pp.c:747 #, no-c-format msgid "Green gain" @@ -3081,7 +3831,7 @@ msgid "Sets green channel gain" msgstr "Визначає підсилення каналу зеленого" -#: ../backend/lexmark.c:325 ../backend/plustek.c:1032 +#: ../backend/lexmark.c:325 ../backend/plustek.c:1033 #: ../backend/umax_pp.c:759 #, no-c-format msgid "Blue gain" @@ -3137,11 +3887,6 @@ msgid "From white stick" msgstr "Від білої палички" -#: ../backend/matsushita.c:177 -#, no-c-format -msgid "From paper" -msgstr "Від паперу" - #: ../backend/matsushita.c:212 #, no-c-format msgid "Smooth" @@ -3178,61 +3923,11 @@ msgid "All pages" msgstr "Всі сторінки" -#: ../backend/matsushita.c:1034 ../backend/plustek.c:1332 +#: ../backend/matsushita.c:1034 ../backend/plustek.c:1333 #, no-c-format msgid "sheetfed scanner" msgstr "сканер з подачею аркушів" -#: ../backend/matsushita.c:1126 -#, no-c-format -msgid "Feeder mode" -msgstr "Режим подачі" - -#: ../backend/matsushita.c:1127 -#, no-c-format -msgid "Sets the feeding mode" -msgstr "Визначити режим подачі" - -#: ../backend/matsushita.c:1224 -#, no-c-format -msgid "Automatic threshold" -msgstr "Автоматичне визначення" - -#: ../backend/matsushita.c:1227 -#, no-c-format -msgid "" -"Automatically sets brightness, contrast, white level, gamma, noise " -"reduction and image emphasis" -msgstr "" -"Встановлювати яскравість, контрастність, рівень білого, гаму, зменшення " -"шумності і виразність зображення автоматично" - -#: ../backend/matsushita.c:1275 -#, no-c-format -msgid "Noise reduction" -msgstr "Зменшення шумності" - -#: ../backend/matsushita.c:1277 -#, no-c-format -msgid "Reduce the isolated dot noise" -msgstr "Зменшити шум від ізольованих точок" - -#: ../backend/matsushita.c:1288 -#, no-c-format -msgid "Image emphasis" -msgstr "Виразність зображення" - -#: ../backend/matsushita.c:1289 -#, no-c-format -msgid "Sets the image emphasis" -msgstr "Визначає виразність зображення" - -#: ../backend/matsushita.c:1300 ../backend/matsushita.c:1301 -#: ../backend/pixma_sane_options.c:107 -#, no-c-format -msgid "Gamma" -msgstr "Гама" - #: ../backend/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" @@ -3243,26 +3938,6 @@ msgid "Grayscale 8 bits" msgstr "Відтінки сірого, 8-бітова" -#: ../backend/matsushita.h:219 -#, no-c-format -msgid "Paper size" -msgstr "Розмір паперу" - -#: ../backend/matsushita.h:220 ../backend/matsushita.h:227 -#, no-c-format -msgid "Automatic separation" -msgstr "Автоматичне відокремлення" - -#: ../backend/matsushita.h:223 -#, no-c-format -msgid "Enable Duplex (Dual-Sided) Scanning" -msgstr "Увімкнути двобічне сканування" - -#: ../backend/matsushita.h:225 -#, no-c-format -msgid "Physical size of the paper in the ADF" -msgstr "Фізичний розмір паперу у пристрої автоматичної подачі" - #: ../backend/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" @@ -3356,11 +4031,6 @@ "Якщо буде позначено цей пункт, програма обробки спробує визначити " "оптимальне порогове значення у автоматичному режимі." -#: ../backend/microtek2.h:640 -#, no-c-format -msgid "Gamma correction" -msgstr "Виправлення гами" - #: ../backend/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." @@ -3500,7 +4170,8 @@ #, no-c-format msgid "Balance factor for blue. A value of 100% means no correction." msgstr "" -"Коефіцієнт балансу для синього. Значення у 100% означає «без виправлення»." +"Коефіцієнт балансу для синього. Значення у 100% означає «без " +"виправлення»." #: ../backend/microtek2.h:709 #, no-c-format @@ -3761,12 +4432,42 @@ "Розігрівати, до сталої яскравості лампи, не наполягати на 40-ти " "секундному розігріві." -#: ../backend/pixma_sane_options.c:91 +#: ../backend/pixma.c:357 +#, no-c-format +msgid "Negative color" +msgstr "Кольоровий негатив" + +#: ../backend/pixma.c:362 +#, no-c-format +msgid "Negative gray" +msgstr "Чорно-білий негатив" + +#: ../backend/pixma.c:369 +#, no-c-format +msgid "48 bits color" +msgstr "48-бітовий колір" + +#: ../backend/pixma.c:374 +#, no-c-format +msgid "16 bits gray" +msgstr "16-бітовий сірий" + +#: ../backend/pixma_sane_options.c:80 +#, no-c-format +msgid "" +"Selects the scan source (such as a document-feeder). Set source before " +"mode and resolution. Resets mode and resolution to auto values." +msgstr "" +"Визначає джерело сканування (зокрема пристрій подачі документів). " +"Встановіть джерело перед режимом і роздільною здатністю. Відновлює " +"автоматично визначені значення режиму та роздільної здатності." + +#: ../backend/pixma_sane_options.c:94 #, no-c-format msgid "Button-controlled scan" msgstr "Кероване кнопкою сканування" -#: ../backend/pixma_sane_options.c:94 +#: ../backend/pixma_sane_options.c:95 #, no-c-format msgid "" "When enabled, scan process will not start immediately. To proceed, press " @@ -3774,181 +4475,191 @@ "cancel, press \"GRAY\" button." msgstr "" "Якщо буде позначено цей пункт, процес сканування не розпочинатиметься " -"негайно. Для продовження, натисніть кнопку «SCAN» (MP150) або «COLOR» (для " -"інших моделей). Для скасування натисніть кнопку «GRAY»." +"негайно. Для продовження, натисніть кнопку «SCAN» (MP150) або " +"«COLOR» (для інших моделей). Для скасування натисніть кнопку «GRAY»." + +#: ../backend/pixma_sane_options.c:143 +#, no-c-format +msgid "Gamma function exponent" +msgstr "Показник функції гами" + +#: ../backend/pixma_sane_options.c:144 +#, no-c-format +msgid "Changes intensity of midtones" +msgstr "Змінює інтенсивність напівтонів" -#: ../backend/pixma_sane_options.c:216 +#: ../backend/pixma_sane_options.c:231 #, no-c-format msgid "Update button state" msgstr "Оновити стан кнопки" -#: ../backend/pixma_sane_options.c:228 +#: ../backend/pixma_sane_options.c:243 #, no-c-format msgid "Button 1" msgstr "Кнопка 1" -#: ../backend/pixma_sane_options.c:242 +#: ../backend/pixma_sane_options.c:257 #, no-c-format msgid "Button 2" msgstr "Кнопка 2" -#: ../backend/plustek.c:234 ../backend/plustek_pp.c:201 +#: ../backend/plustek.c:235 ../backend/plustek_pp.c:201 #: ../backend/u12.c:156 #, no-c-format msgid "Transparency" msgstr "Прозорість" -#: ../backend/plustek.c:912 +#: ../backend/plustek.c:913 #, no-c-format msgid "Device-Settings" msgstr "Параметри пристрою" -#: ../backend/plustek.c:919 +#: ../backend/plustek.c:920 #, no-c-format msgid "Lampswitch" msgstr "Перемикач лампи" -#: ../backend/plustek.c:920 +#: ../backend/plustek.c:921 #, no-c-format msgid "Manually switching the lamp(s)." msgstr "Перемикання ламп вручну." -#: ../backend/plustek.c:925 +#: ../backend/plustek.c:926 #, no-c-format msgid "Lamp off during dark calibration" msgstr "Вимикання лампи під час калібрування темного" -#: ../backend/plustek.c:926 +#: ../backend/plustek.c:927 #, no-c-format msgid "Always switches lamp off when doing dark calibration." msgstr "Завжди вимикати лампу під час виконання калібрування темної зони" -#: ../backend/plustek.c:934 +#: ../backend/plustek.c:935 #, no-c-format msgid "Calibration data cache" msgstr "Кешування даних калібрування" -#: ../backend/plustek.c:935 +#: ../backend/plustek.c:936 #, no-c-format msgid "Enables or disables calibration data cache." msgstr "Вмикає або вимикає кешування даних калібрування." -#: ../backend/plustek.c:941 +#: ../backend/plustek.c:942 #, no-c-format msgid "Performs calibration" msgstr "Виконує калібрування" -#: ../backend/plustek.c:958 +#: ../backend/plustek.c:959 #, no-c-format msgid "Speedup sensor" msgstr "Пришвидшити датчик" -#: ../backend/plustek.c:959 +#: ../backend/plustek.c:960 #, no-c-format msgid "Enables or disables speeding up sensor movement." msgstr "Вмикає або вимикає пришвидшення руху датчика." -#: ../backend/plustek.c:973 +#: ../backend/plustek.c:974 #, no-c-format msgid "Warmup-time" msgstr "Час розігріву" -#: ../backend/plustek.c:974 +#: ../backend/plustek.c:975 #, no-c-format msgid "Warmup-time in seconds." msgstr "Час розігріву у секундах." -#: ../backend/plustek.c:986 +#: ../backend/plustek.c:987 #, no-c-format msgid "Lampoff-time" msgstr "Час вимикання" -#: ../backend/plustek.c:987 +#: ../backend/plustek.c:988 #, no-c-format msgid "Lampoff-time in seconds." msgstr "Час вимикання лампи у секундах." -#: ../backend/plustek.c:994 +#: ../backend/plustek.c:995 #, no-c-format msgid "Analog frontend" msgstr "Аналогова оболонка" -#: ../backend/plustek.c:1001 +#: ../backend/plustek.c:1002 #, no-c-format msgid "Red gain value of the AFE" msgstr "Значення підсилення червоного AFE" -#: ../backend/plustek.c:1008 ../backend/umax_pp.c:792 +#: ../backend/plustek.c:1009 ../backend/umax_pp.c:792 #, no-c-format msgid "Red offset" msgstr "Зміщення червоного" -#: ../backend/plustek.c:1009 +#: ../backend/plustek.c:1010 #, no-c-format msgid "Red offset value of the AFE" msgstr "Значення зміщення червоного AFE" -#: ../backend/plustek.c:1017 +#: ../backend/plustek.c:1018 #, no-c-format msgid "Green gain value of the AFE" msgstr "Значення підсилення зеленого AFE" -#: ../backend/plustek.c:1024 ../backend/umax_pp.c:804 +#: ../backend/plustek.c:1025 ../backend/umax_pp.c:804 #, no-c-format msgid "Green offset" msgstr "Зміщення зеленого" -#: ../backend/plustek.c:1025 +#: ../backend/plustek.c:1026 #, no-c-format msgid "Green offset value of the AFE" msgstr "Значення зміщення зеленого AFE" -#: ../backend/plustek.c:1033 +#: ../backend/plustek.c:1034 #, no-c-format msgid "Blue gain value of the AFE" msgstr "Значення підсилення синього AFE" -#: ../backend/plustek.c:1040 ../backend/umax_pp.c:816 +#: ../backend/plustek.c:1041 ../backend/umax_pp.c:816 #, no-c-format msgid "Blue offset" msgstr "Зміщення синього" -#: ../backend/plustek.c:1041 +#: ../backend/plustek.c:1042 #, no-c-format msgid "Blue offset value of the AFE" msgstr "Значення зміщення синього AFE" -#: ../backend/plustek.c:1048 +#: ../backend/plustek.c:1049 #, no-c-format msgid "Red lamp off" msgstr "Вимикання лампи червоного" -#: ../backend/plustek.c:1049 +#: ../backend/plustek.c:1050 #, no-c-format msgid "Defines red lamp off parameter" msgstr "Визначає параметр вимикання лампи червоного" -#: ../backend/plustek.c:1056 +#: ../backend/plustek.c:1057 #, no-c-format msgid "Green lamp off" msgstr "Вимикання лампи зеленого" -#: ../backend/plustek.c:1057 +#: ../backend/plustek.c:1058 #, no-c-format msgid "Defines green lamp off parameter" msgstr "Визначає параметр вимикання лампи зеленого" -#: ../backend/plustek.c:1064 +#: ../backend/plustek.c:1065 #, no-c-format msgid "Blue lamp off" msgstr "Вимикання лампи синього" -#: ../backend/plustek.c:1065 +#: ../backend/plustek.c:1066 #, no-c-format msgid "Defines blue lamp off parameter" msgstr "Визначає параметр вимикання лампи синього" -#: ../backend/plustek.c:1095 +#: ../backend/plustek.c:1096 #, no-c-format msgid "This option reflects the status of the scanner buttons." msgstr "Цей параметр відповідає стану кнопок сканера." @@ -4501,9 +5212,9 @@ "handling for scanning. All other status codes are for testing how the " "frontend handles them." msgstr "" -"Вкажіть повернуте значення sane_read(). «Типове» означає звичайну обробку " -"сканування. Всі інші коди стану призначено для перевірки способів їх " -"обробки оболонкою." +"Вкажіть повернуте значення sane_read(). «Типове» означає звичайну " +"обробку сканування. Всі інші коди стану призначено для перевірки " +"способів їх обробки оболонкою." #: ../backend/test.c:562 #, no-c-format @@ -4998,3 +5709,4 @@ #, no-c-format msgid "Sets blue channel offset" msgstr "Визначає зсув каналу синього" + diff -Nru sane-backends-1.0.22/sanei/Makefile.in sane-backends-1.0.23/sanei/Makefile.in --- sane-backends-1.0.22/sanei/Makefile.in 2011-01-30 18:50:56.000000000 +0000 +++ sane-backends-1.0.23/sanei/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -100,6 +100,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -156,6 +157,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -205,6 +207,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ diff -Nru sane-backends-1.0.22/sanei/sanei_access.c sane-backends-1.0.23/sanei/sanei_access.c --- sane-backends-1.0.22/sanei/sanei_access.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_access.c 2012-07-01 02:00:44.000000000 +0000 @@ -62,7 +62,7 @@ # define PATH_MAX 1024 #endif -#if defined(HAVE_OS2_H) || defined(HAVE_WINDOWS_H) +#if defined(_WIN32) || defined(HAVE_OS2_H) # define PATH_SEP '\\' #else # define PATH_SEP '/' diff -Nru sane-backends-1.0.22/sanei/sanei_config.c sane-backends-1.0.23/sanei/sanei_config.c --- sane-backends-1.0.22/sanei/sanei_config.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_config.c 2012-07-01 02:00:44.000000000 +0000 @@ -59,10 +59,7 @@ # define PATH_MAX 1024 #endif -#if defined(HAVE_OS2_H) -# define DIR_SEP ";" -# define PATH_SEP '\\' -#elif defined(HAVE_WINDOWS_H) +#if defined(_WIN32) || defined(HAVE_OS2_H) # define DIR_SEP ";" # define PATH_SEP '\\' #else diff -Nru sane-backends-1.0.22/sanei/sanei_init_debug.c sane-backends-1.0.23/sanei/sanei_init_debug.c --- sane-backends-1.0.22/sanei/sanei_init_debug.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_init_debug.c 2011-11-21 20:17:48.000000000 +0000 @@ -48,7 +48,9 @@ #endif #include #include +#ifdef HAVE_VSYSLOG #include +#endif #ifdef HAVE_OS2_H #include #endif diff -Nru sane-backends-1.0.22/sanei/sanei_magic.c sane-backends-1.0.23/sanei/sanei_magic.c --- sane-backends-1.0.22/sanei/sanei_magic.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_magic.c 2012-07-25 00:08:34.000000000 +0000 @@ -63,13 +63,13 @@ int * sanei_magic_getTransX ( SANE_Parameters * params, int dpi, SANE_Byte * buffer, int left); -SANE_Status getTopEdge (int width, int height, int resolution, +static SANE_Status getTopEdge (int width, int height, int resolution, int * buff, double * finSlope, int * finXInter, int * finYInter); -SANE_Status getLeftEdge (int width, int height, int * top, int * bot, +static SANE_Status getLeftEdge (int width, int height, int * top, int * bot, double slope, int * finXInter, int * finYInter); -SANE_Status getLine (int height, int width, int * buff, +static SANE_Status getLine (int height, int width, int * buff, int slopes, double minSlope, double maxSlope, int offsets, int minOffset, int maxOffset, double * finSlope, int * finOffset, int * finDensity); @@ -529,6 +529,8 @@ DBG (10, "sanei_magic_findSkew: start\n"); + dpiX=dpiX; + /* get buffers for edge detection */ topBuf = sanei_magic_getTransY(params,dpiY,buffer,1); if(!topBuf){ @@ -711,13 +713,455 @@ return 0; } +SANE_Status +sanei_magic_isBlank (SANE_Parameters * params, SANE_Byte * buffer, + double thresh) +{ + SANE_Status ret = SANE_STATUS_GOOD; + double imagesum = 0; + int i, j; + + DBG(10,"sanei_magic_isBlank: start: %f\n",thresh); + + /*convert thresh from percent (0-100) to 0-1 range*/ + thresh /= 100; + + if(params->format == SANE_FRAME_RGB || + (params->format == SANE_FRAME_GRAY && params->depth == 8) + ){ + + /* loop over all rows, find density of each */ + for(i=0; ilines; i++){ + int rowsum = 0; + SANE_Byte * ptr = buffer + params->bytes_per_line*i; + + /* loop over all columns, sum the 'darkness' of the pixels */ + for(j=0; jbytes_per_line; j++){ + rowsum += 255 - ptr[j]; + } + + imagesum += (double)rowsum/params->bytes_per_line/255; + } + + } + else if(params->format == SANE_FRAME_GRAY && params->depth == 1){ + + /* loop over all rows, find density of each */ + for(i=0; ilines; i++){ + int rowsum = 0; + SANE_Byte * ptr = buffer + params->bytes_per_line*i; + + /* loop over all columns, sum the pixels */ + for(j=0; jpixels_per_line; j++){ + rowsum += ptr[j/8] >> (7-(j%8)) & 1; + } + + imagesum += (double)rowsum/params->pixels_per_line; + } + + } + else{ + DBG (5, "sanei_magic_isBlank: unsupported format/depth\n"); + ret = SANE_STATUS_INVAL; + goto cleanup; + } + + DBG (5, "sanei_magic_isBlank: sum:%f lines:%d thresh:%f density:%f\n", + imagesum,params->lines,thresh,imagesum/params->lines); + + if(imagesum/params->lines <= thresh){ + DBG (5, "sanei_magic_isBlank: blank!\n"); + ret = SANE_STATUS_NO_DOCS; + } + + cleanup: + + DBG(10,"sanei_magic_isBlank: finish\n"); + + return ret; +} + +SANE_Status +sanei_magic_findTurn(SANE_Parameters * params, SANE_Byte * buffer, + int dpiX, int dpiY, int * angle) +{ + SANE_Status ret = SANE_STATUS_GOOD; + int i, j, k; + int depth = 1; + int htrans=0, vtrans=0; + int htot=0, vtot=0; + + DBG(10,"sanei_magic_findTurn: start\n"); + + if(params->format == SANE_FRAME_RGB || + (params->format == SANE_FRAME_GRAY && params->depth == 8) + ){ + + if(params->format == SANE_FRAME_RGB) + depth = 3; + + /* loop over some rows, count segment lengths */ + for(i=0; ilines; i+=dpiY/20){ + SANE_Byte * ptr = buffer + params->bytes_per_line*i; + int color = 0; + int len = 0; + int sum = 0; + + /* loop over all columns */ + for(j=0; jpixels_per_line; j++){ + int curr = 0; + + /*convert color to gray*/ + for (k=0; k 156)?0:color; + + /*count segment length*/ + if(curr != color || j==params->pixels_per_line-1){ + sum += len * len/5; + len = 0; + color = curr; + } + else{ + len++; + } + } + + htot++; + htrans += (double)sum/params->pixels_per_line; + } + + /* loop over some cols, count dark vs light transitions */ + for(i=0; ipixels_per_line; i+=dpiX/20){ + SANE_Byte * ptr = buffer + i*depth; + int color = 0; + int len = 0; + int sum = 0; + + /* loop over all rows */ + for(j=0; jlines; j++){ + int curr = 0; + + /*convert color to gray*/ + for (k=0; kbytes_per_line+k]; + } + curr /= depth; + + /*convert gray to binary (with hysteresis) */ + curr = (curr < 100)?1: + (curr > 156)?0:color; + + /*count segment length*/ + if(curr != color || j==params->lines-1){ + sum += len * len/5; + len = 0; + color = curr; + } + else{ + len++; + } + } + + vtot++; + vtrans += (double)sum/params->lines; + } + + } + else if(params->format == SANE_FRAME_GRAY && params->depth == 1){ + + /* loop over some rows, count segment lengths */ + for(i=0; ilines; i+=dpiY/30){ + SANE_Byte * ptr = buffer + params->bytes_per_line*i; + int color = 0; + int len = 0; + int sum = 0; + + /* loop over all columns */ + for(j=0; jpixels_per_line; j++){ + int curr = ptr[j/8] >> (7-(j%8)) & 1; + + /*count segment length*/ + if(curr != color || j==params->pixels_per_line-1){ + sum += len * len/5; + len = 0; + color = curr; + } + else{ + len++; + } + } + + htot++; + htrans += (double)sum/params->pixels_per_line; + } + + /* loop over some cols, count dark vs light transitions */ + for(i=0; ipixels_per_line; i+=dpiX/30){ + SANE_Byte * ptr = buffer; + int color = 0; + int len = 0; + int sum = 0; + + /* loop over all rows */ + for(j=0; jlines; j++){ + int curr = ptr[j*params->bytes_per_line + i/8] >> (7-(i%8)) & 1; + + /*count segment length*/ + if(curr != color || j==params->lines-1){ + sum += len * len/5; + len = 0; + color = curr; + } + else{ + len++; + } + } + + vtot++; + vtrans += (double)sum/params->lines; + } + + } + else{ + DBG (5, "sanei_magic_findTurn: unsupported format/depth\n"); + ret = SANE_STATUS_INVAL; + goto cleanup; + } + + DBG (10, "sanei_magic_findTurn: vtrans=%d vtot=%d vfrac=%f htrans=%d htot=%d hfrac=%f\n", + vtrans, vtot, (double)vtrans/vtot, htrans, htot, (double)htrans/htot + ); + + if((double)vtrans/vtot > (double)htrans/htot){ + DBG (10, "sanei_magic_findTurn: suggest turning 90\n"); + *angle = 90; + } + + cleanup: + + DBG(10,"sanei_magic_findTurn: finish\n"); + + return ret; +} + +/* FIXME: Do in-place rotation to save memory */ +SANE_Status +sanei_magic_turn(SANE_Parameters * params, SANE_Byte * buffer, + int angle) +{ + SANE_Status ret = SANE_STATUS_GOOD; + int opwidth, ipwidth = params->pixels_per_line; + int obwidth, ibwidth = params->bytes_per_line; + int oheight, iheight = params->lines; + int depth = 1; + + unsigned char * outbuf = NULL; + int i, j, k; + + DBG(10,"sanei_magic_turn: start %d\n",angle); + + if(params->format == SANE_FRAME_RGB) + depth = 3; + + /*clean angle and convert to 0-3*/ + angle = (angle % 360) / 90; + + /*figure size of output image*/ + switch(angle){ + case 1: + case 3: + opwidth = iheight; + oheight = ipwidth; + + /*gray and color, 1 or 3 bytes per pixel*/ + if ( params->format == SANE_FRAME_RGB + || (params->format == SANE_FRAME_GRAY && params->depth == 8) + ){ + obwidth = opwidth*depth; + } + + /*clamp binary to byte width. must be <= input image*/ + else if(params->format == SANE_FRAME_GRAY && params->depth == 1){ + obwidth = opwidth/8; + opwidth = obwidth*8; + } + + else{ + DBG(10,"sanei_magic_turn: bad params\n"); + ret = SANE_STATUS_INVAL; + goto cleanup; + } + + break; + + case 2: + opwidth = ipwidth; + obwidth = ibwidth; + oheight = iheight; + break; + + default: + DBG(10,"sanei_magic_turn: no turn\n"); + goto cleanup; + } + + /*get output image buffer*/ + outbuf = malloc(obwidth*oheight); + if(!outbuf){ + DBG(15,"sanei_magic_turn: no outbuf\n"); + ret = SANE_STATUS_NO_MEM; + goto cleanup; + } + + /*turn color & gray image*/ + if(params->format == SANE_FRAME_RGB || + (params->format == SANE_FRAME_GRAY && params->depth == 8) + ){ + + switch (angle) { + + /*rotate 90 clockwise*/ + case 1: + for (i=0; iformat == SANE_FRAME_GRAY && params->depth == 1){ + + switch (angle) { + + /*rotate 90 clockwise*/ + case 1: + for (i=0; i> (7-(i%8)) & 1; + + unsigned char mask = 1 << (7-(j%8)); + + if(curr){ + outbuf[i*obwidth + j/8] |= mask; + } + else{ + outbuf[i*obwidth + j/8] &= (~mask); + } + + } + } + break; + + /*rotate 180 clockwise*/ + case 2: + for (i=0; i> (j%8) & 1; + + unsigned char mask = 1 << (7-(j%8)); + + if(curr){ + outbuf[i*obwidth + j/8] |= mask; + } + else{ + outbuf[i*obwidth + j/8] &= (~mask); + } + + } + } + break; + + /*rotate 270 clockwise*/ + case 3: + for (i=0; i> (i%8) & 1; + + unsigned char mask = 1 << (7-(j%8)); + + if(curr){ + outbuf[i*obwidth + j/8] |= mask; + } + else{ + outbuf[i*obwidth + j/8] &= (~mask); + } + + } + } + break; + } /*end switch*/ + } + + else{ + DBG (5, "sanei_magic_turn: unsupported format/depth\n"); + ret = SANE_STATUS_INVAL; + goto cleanup; + } + + /*copy output back into input buffer*/ + memcpy(buffer,outbuf,obwidth*oheight); + + /*update input params*/ + params->pixels_per_line = opwidth; + params->bytes_per_line = obwidth; + params->lines = oheight; + + cleanup: + + if(outbuf) + free(outbuf); + + DBG(10,"sanei_magic_turn: finish\n"); + + return ret; +} + /* Utility functions, not used outside this file */ /* Repeatedly call getLine to find the best range of slope and offset. * Shift the ranges thru 4 different positions to avoid splitting data * across multiple bins (false positive). Home-in on the most likely upper * line of the paper inside the image. Return the 'best' edge. */ -SANE_Status +static SANE_Status getTopEdge(int width, int height, int resolution, int * buff, double * finSlope, int * finXInter, int * finYInter) { @@ -727,8 +1171,8 @@ int offsets = 31; double maxSlope = 1; double minSlope = -1; - int maxOffset = resolution/6; - int minOffset = -resolution/6; + int maxOffset = resolution; + int minOffset = -resolution; double topSlope = 0; int topOffset = 0; @@ -828,7 +1272,7 @@ /* Loop thru a transition array, and use a simplified Hough transform * to divide likely edges into a 2-d array of bins. Then weight each * bin based on its angle and offset. Return the 'best' bin. */ -SANE_Status +static SANE_Status getLine (int height, int width, int * buff, int slopes, double minSlope, double maxSlope, int offsets, int minOffset, int maxOffset, @@ -987,7 +1431,7 @@ * prefered (smaller absolute value) slope and offset */ for(i=0;i *finDensity){ *finDensity = lines[i][j]; *finSlope = slopeCenter[i]; @@ -997,24 +1441,24 @@ } if(0){ - DBG(15,"offsetCenter: "); + fprintf(stderr,"offsetCenter: "); for(j=0;j #endif +#include #ifdef HAVE_SYS_IO_H # include /* use where available (glibc 2.x, for example) */ diff -Nru sane-backends-1.0.22/sanei/sanei_scsi.c sane-backends-1.0.23/sanei/sanei_scsi.c --- sane-backends-1.0.22/sanei/sanei_scsi.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_scsi.c 2012-07-01 02:00:44.000000000 +0000 @@ -56,10 +56,16 @@ #include #include +#ifdef HAVE_SYS_IOCTL_H #include +#endif #include #include +#if defined (HAVE_WINDOWS_H) +# include +#endif + #define STUBBED_INTERFACE 0 #define LINUX_INTERFACE 1 #define BSD_INTERFACE 2 @@ -209,11 +215,13 @@ # include # endif # endif -#elif defined (HAVE_WINDOWS_H) +#elif defined (HAVE_DDK_NTDDSCSI_H) # define USE WIN32_INTERFACE -# include # include # include +#elif defined (HAVE_NTDDSCSI_H) +# define USE WIN32_INTERFACE +# include #endif #ifndef USE @@ -5046,7 +5054,7 @@ pkt.sptd.TimeOutValue = sane_scsicmd_timeout; - pkt.sptd.SenseInfoOffset = offsetof(struct pkt, sense); + pkt.sptd.SenseInfoOffset = (void *)pkt.sense - (void *)&pkt; pkt.sptd.SenseInfoLength = sizeof(pkt.sense); ret = DeviceIoControl(fd, diff -Nru sane-backends-1.0.22/sanei/sanei_tcp.c sane-backends-1.0.23/sanei/sanei_tcp.c --- sane-backends-1.0.22/sanei/sanei_tcp.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_tcp.c 2011-11-21 20:17:48.000000000 +0000 @@ -46,7 +46,12 @@ #include #include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H #include +#endif #define BACKEND_NAME sanei_tcp @@ -60,10 +65,19 @@ int fd, err; struct sockaddr_in saddr; struct hostent *h; +#ifdef HAVE_WINSOCK2_H + WSADATA wsaData; +#endif DBG_INIT(); DBG(1, "%s: host = %s, port = %d\n", __FUNCTION__, host, port); +#ifdef HAVE_WINSOCK2_H + err = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (err != 0) + return SANE_STATUS_INVAL; +#endif + h = gethostbyname(host); if (h == NULL || h->h_addr_list[0] == NULL @@ -95,6 +109,9 @@ sanei_tcp_close(int fd) { close(fd); +#ifdef HAVE_WINSOCK2_H + WSACleanup(); +#endif } ssize_t diff -Nru sane-backends-1.0.22/sanei/sanei_thread.c sane-backends-1.0.23/sanei/sanei_thread.c --- sane-backends-1.0.22/sanei/sanei_thread.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_thread.c 2011-11-21 20:17:48.000000000 +0000 @@ -116,10 +116,59 @@ #endif } +/* Use this to mark a SANE_Pid as invaild instead of marking with -1. + */ +static void +sanei_thread_set_invalid( SANE_Pid *pid ) +{ + +#ifdef WIN32 + pid->p = 0; +#else + *pid = -1; +#endif +} + +/* Return if PID is a valid PID or not. */ +SANE_Bool +sanei_thread_is_invalid( SANE_Pid pid ) +{ + SANE_Bool rc = SANE_FALSE; + +#ifdef WIN32 + if (pid.p == 0) + rc = SANE_TRUE; +#else + if (pid == -1) + rc = SANE_TRUE; +#endif + + return rc; +} + +/* pthread_t is not an integer on all platform. Do our best to return + * a PID-like value from structure. On platforms were it is an integer, + * return that. + */ +static long +sanei_thread_pid_to_long( SANE_Pid pid ) +{ + int rc; + +#ifdef WIN32 + rc = pid.p; +#else + rc = pid; +#endif + + return rc; +} + int sanei_thread_kill( SANE_Pid pid ) { - DBG(2, "sanei_thread_kill() will kill %ld\n", (long) pid); + DBG(2, "sanei_thread_kill() will kill %ld\n", + sanei_thread_pid_to_long(pid)); #ifdef USE_PTHREAD #if defined (__APPLE__) && defined (__MACH__) return pthread_kill((pthread_t)pid, SIGUSR2); @@ -307,6 +356,7 @@ static void restore_sigpipe( void ) { +#ifdef SIGPIPE struct sigaction act; if( sigaction( SIGPIPE, NULL, &act ) == 0 ) { @@ -320,6 +370,7 @@ sigaction( SIGPIPE, &act, NULL ); } } +#endif } #else /* the process stuff */ @@ -352,9 +403,10 @@ sanei_thread_begin( int (func)(void *args), void* args ) { #ifdef USE_PTHREAD - struct sigaction act; int result; pthread_t thread; +#ifdef SIGPIPE + struct sigaction act; /* if signal handler for SIGPIPE is SIG_DFL, replace by SIG_IGN */ if( sigaction( SIGPIPE, NULL, &act ) == 0 ) { @@ -368,6 +420,7 @@ sigaction( SIGPIPE, &act, NULL ); } } +#endif td.func = func; td.func_data = args; @@ -377,10 +430,12 @@ if ( result != 0 ) { DBG( 1, "pthread_create() failed with %d\n", result ); - return -1; + sanei_thread_set_invalid(&thread); } + else + DBG( 2, "pthread_create() created thread %ld\n", + (SANE_Pid)thread ); - DBG( 2, "pthread_create() created thread %ld\n", (SANE_Pid)thread ); return (SANE_Pid)thread; #else SANE_Pid pid; @@ -407,11 +462,11 @@ int sanei_thread_sendsig( SANE_Pid pid, int sig ) { + DBG(2, "sanei_thread_sendsig() %d to thread (id=%ld)\n", sig, + sanei_thread_pid_to_long(pid)); #ifdef USE_PTHREAD - DBG(2, "sanei_thread_sendsig() %d to thread (id=%ld)\n", sig, pid); return pthread_kill( (pthread_t)pid, sig ); #else - DBG(2, "sanei_thread_sendsig() %d to process (id=%d)\n", sig, pid); return kill( pid, sig ); #endif } @@ -429,11 +484,13 @@ stat = 0; - DBG(2, "sanei_thread_waitpid() - %ld\n", (long) pid); + DBG(2, "sanei_thread_waitpid() - %ld\n", + sanei_thread_pid_to_long(pid)); #ifdef USE_PTHREAD - result = pthread_join( (pthread_t)pid, (void*)&ls ); + int rc; + rc = pthread_join( (pthread_t)pid, (void*)&ls ); - if( 0 == result ) { + if( 0 == rc ) { if( PTHREAD_CANCELED == ls ) { DBG(2, "* thread has been canceled!\n" ); stat = SANE_STATUS_GOOD; diff -Nru sane-backends-1.0.22/sanei/sanei_udp.c sane-backends-1.0.23/sanei/sanei_udp.c --- sane-backends-1.0.22/sanei/sanei_udp.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_udp.c 2011-11-21 20:17:48.000000000 +0000 @@ -45,11 +45,17 @@ #include #include #include +#include +#ifdef HAVE_WINSOCK2_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H #include #include #include #include +#endif #define BACKEND_NAME sanei_udp @@ -110,10 +116,19 @@ sanei_udp_open(const char *host, int port, int *fdp) { int status; +#ifdef HAVE_WINSOCK2_H + WSADATA wsaData; +#endif DBG_INIT(); DBG(1, "%s\n", __func__); +#ifdef HAVE_WINSOCK2_H + status = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (status != 0) + return SANE_STATUS_INVAL; +#endif + status = sanei_udp_socket(fdp, 0); if (status != SANE_STATUS_GOOD) return status; @@ -146,6 +161,9 @@ sanei_udp_close(int fd) { close(fd); +#ifdef HAVE_WINSOCK2_H + WSACleanup(); +#endif } ssize_t @@ -169,6 +187,25 @@ (struct sockaddr *)&saddr, sizeof(saddr)); } +void +sanei_udp_set_nonblock(int fd, SANE_Bool nonblock) +{ +#ifdef HAVE_WINSOCK2_H + u_long mode=nonblock; + + ioctlsocket(fd, FIONBIO, &mode); +#else + long flags; + + flags = fcntl(fd, F_GETFL, 0L); + if (nonblock) + flags |= O_NONBLOCK; + else + flags &= ~O_NONBLOCK; + fcntl(fd, F_SETFL, flags); +#endif +} + ssize_t sanei_udp_read(int fd, u_char * buf, int count) { diff -Nru sane-backends-1.0.22/sanei/sanei_usb.c sane-backends-1.0.23/sanei/sanei_usb.c --- sane-backends-1.0.22/sanei/sanei_usb.c 2011-02-13 23:10:18.000000000 +0000 +++ sane-backends-1.0.23/sanei/sanei_usb.c 2012-07-01 02:00:44.000000000 +0000 @@ -55,7 +55,9 @@ #include #include #include +#ifdef HAVE_SYS_IOCTL_H #include +#endif #include #include #include @@ -65,7 +67,11 @@ #endif #ifdef HAVE_LIBUSB +#ifdef HAVE_LUSB0_USB_H +#include +#else #include +#endif #endif /* HAVE_LIBUSB */ #ifdef HAVE_LIBUSB_1_0 @@ -97,7 +103,8 @@ } #endif /* HAVE_USBCALLS */ -#if defined (__FreeBSD__) +#if (defined (__FreeBSD__) && (__FreeBSD_version < 800064)) +#include #include #endif /* __FreeBSD__ */ #if defined (__DragonFly__) @@ -274,7 +281,7 @@ *vendorID = vendor; *productID = product; } -#elif defined (__FreeBSD__) || defined (__DragonFly__) +#elif (defined (__FreeBSD__) && __FreeBSD_version < 800064) || defined (__DragonFly__) { int controller; int ctrl_fd; @@ -1807,6 +1814,7 @@ devname, strerror (errno)); return status; } +#ifdef FD_CLOEXEC flag = fcntl (devices[devcount].fd, F_GETFD); if (flag >= 0) { @@ -1814,6 +1822,7 @@ DBG (1, "sanei_usb_open: fcntl of `%s' failed: %s\n", devname, strerror (errno)); } +#endif } else if (devices[devcount].method == sanei_usb_method_usbcalls) { diff -Nru sane-backends-1.0.22/testsuite/Makefile.am sane-backends-1.0.23/testsuite/Makefile.am --- sane-backends-1.0.22/testsuite/Makefile.am 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/testsuite/Makefile.am 2011-11-21 20:17:48.000000000 +0000 @@ -4,7 +4,7 @@ ## This file is part of the "Sane" build infra-structure. See ## included LICENSE file for license information. -SCANIMAGE = ../frontend/scanimage +SCANIMAGE = ../frontend/scanimage$(EXEEXT) TESTFILE = $(srcdir)/testfile.pnm OUTFILE = outfile.pnm DEVICE = test diff -Nru sane-backends-1.0.22/testsuite/Makefile.in sane-backends-1.0.23/testsuite/Makefile.in --- sane-backends-1.0.22/testsuite/Makefile.in 2011-01-30 18:50:56.000000000 +0000 +++ sane-backends-1.0.23/testsuite/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -59,6 +59,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -115,6 +116,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -164,6 +166,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -214,7 +217,7 @@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -SCANIMAGE = ../frontend/scanimage +SCANIMAGE = ../frontend/scanimage$(EXEEXT) TESTFILE = $(srcdir)/testfile.pnm OUTFILE = outfile.pnm DEVICE = test diff -Nru sane-backends-1.0.22/tools/Makefile.am sane-backends-1.0.23/tools/Makefile.am --- sane-backends-1.0.22/tools/Makefile.am 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/tools/Makefile.am 2012-07-25 00:51:01.000000000 +0000 @@ -48,6 +48,9 @@ EXTRA_DIST += hotplug-ng/README hotplug-ng/libsane.hotplug EXTRA_DIST += openbsd/attach openbsd/detach +pkgconfigdir = @libdir@/pkgconfig +pkgconfig_DATA = sane-backends.pc + # When build directory is not same as source directory then any # subdirectories that targets use must be manually created (under # the build directory that is). diff -Nru sane-backends-1.0.22/tools/Makefile.in sane-backends-1.0.23/tools/Makefile.in --- sane-backends-1.0.22/tools/Makefile.in 2011-01-30 18:50:56.000000000 +0000 +++ sane-backends-1.0.23/tools/Makefile.in 2012-08-15 01:49:38.000000000 +0000 @@ -16,6 +16,7 @@ @SET_MAKE@ + VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ @@ -50,7 +51,8 @@ CONFIG_HEADER = $(top_builddir)/include/sane/config.h CONFIG_CLEAN_FILES = sane-config sane-backends.pc CONFIG_CLEAN_VPATH_FILES = -am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(pkgconfigdir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_gamma4scanimage_OBJECTS = gamma4scanimage.$(OBJEXT) gamma4scanimage_OBJECTS = $(am_gamma4scanimage_OBJECTS) @@ -105,6 +107,7 @@ $(sane_find_scanner_SOURCES) $(umax_pp_SOURCES) DIST_SOURCES = $(gamma4scanimage_SOURCES) $(sane_desc_SOURCES) \ $(sane_find_scanner_SOURCES) $(umax_pp_SOURCES) +DATA = $(pkgconfig_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -119,6 +122,7 @@ AVAHI_CFLAGS = @AVAHI_CFLAGS@ AVAHI_LIBS = @AVAHI_LIBS@ AWK = @AWK@ +BACKENDS = @BACKENDS@ BACKEND_CONFS_ENABLED = @BACKEND_CONFS_ENABLED@ BACKEND_LIBS_ENABLED = @BACKEND_LIBS_ENABLED@ BACKEND_MANS_ENABLED = @BACKEND_MANS_ENABLED@ @@ -175,6 +179,7 @@ MAINT = @MAINT@ MAKEINDEX = @MAKEINDEX@ MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ MATH_LIB = @MATH_LIB@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ @@ -224,6 +229,7 @@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ @@ -306,6 +312,8 @@ umax_pp_LDADD = ../sanei/libsanei.la ../lib/liblib.la @MATH_LIB@ sane_desc_SOURCES = sane-desc.c sane_desc_LDADD = ../sanei/libsanei.la ../lib/liblib.la +pkgconfigdir = @libdir@/pkgconfig +pkgconfig_DATA = sane-backends.pc all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am @@ -526,6 +534,26 @@ clean-libtool: -rm -rf .libs _libs +install-pkgconfigDATA: $(pkgconfig_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ + done + +uninstall-pkgconfigDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ @@ -612,9 +640,9 @@ check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am -all-am: Makefile $(PROGRAMS) $(SCRIPTS) +all-am: Makefile $(PROGRAMS) $(SCRIPTS) $(DATA) installdirs: - for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \ + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) @@ -668,7 +696,7 @@ info-am: -install-data-am: +install-data-am: install-pkgconfigDATA install-dvi: install-dvi-am @@ -714,7 +742,8 @@ ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS +uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \ + uninstall-pkgconfigDATA .MAKE: all check install install-am install-strip @@ -726,12 +755,13 @@ install-binSCRIPTS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-binSCRIPTS + install-pdf install-pdf-am install-pkgconfigDATA install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-binPROGRAMS uninstall-binSCRIPTS \ + uninstall-pkgconfigDATA # When build directory is not same as source directory then any diff -Nru sane-backends-1.0.22/tools/check-usb-chip.c sane-backends-1.0.23/tools/check-usb-chip.c --- sane-backends-1.0.22/tools/check-usb-chip.c 2011-01-16 01:01:29.000000000 +0000 +++ sane-backends-1.0.23/tools/check-usb-chip.c 2012-07-01 02:00:44.000000000 +0000 @@ -35,7 +35,11 @@ #include #include +#ifdef HAVE_LUSB0_USB_H +#include +#else #include +#endif #include "../include/_stdint.h" diff -Nru sane-backends-1.0.22/tools/sane-config.in sane-backends-1.0.23/tools/sane-config.in --- sane-backends-1.0.22/tools/sane-config.in 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/tools/sane-config.in 2012-07-25 00:55:41.000000000 +0000 @@ -7,31 +7,14 @@ PACKAGE="@PACKAGE@" scriptname="sane-config" -LINKER_RPATH="@LINKER_RPATH@" - prefix="@prefix@" exec_prefix="@exec_prefix@" -LDFLAGS="@LDFLAGS@ @GPHOTO2_LDFLAGS@" -LIBS="@LIBS@ @DL_LIBS@ @LIBV4L_LIBS@ @MATH_LIB@ @TIFF_LIBS@ @JPEG_LIBS@ @GPHOTO2_LIBS@ @SOCKET_LIBS@ @AVAHI_LIBS@ @USB_LIBS@ @SCSI_LIBS@ @RESMGR_LIBS@" -pkgincludedir="@pkgincludedir@" -pkglibdir="@pkglibdir@" -includedir="@includedir@" -mandir="@mandir@" -infodir="@infodir@" -libdir="@libdir@" -localstatedir="@localstatedir@" -sysconfdir="@sysconfdir@" -datarootdir="@datarootdir@" -datadir="@datadir@" -libexecdir="@libexecdir@" -sbindir="@sbindir@" -bindir="@bindir@" -#${prefix} -#exec_prefix_set=no -srcdir="@srcdir@" -top_srcdir="@top_srcdir@" -cflags= +# using our installed *.pc only - neither default nor user paths +export PKG_CONFIG_LIBDIR="@libdir@/pkgconfig" +export PKG_CONFIG_PATH="" + +pkgconfig_package=sane-backends usage () { @@ -60,7 +43,7 @@ if test $# -eq 1; then usage elif test $# -eq 2; then - case $2 in + case $2 in --cflags) echo "Usage: $0 --cflags" echo " Print C compiler flags for compiling code that uses SANE." @@ -85,33 +68,19 @@ exit 1 ;; --ldflags) - - if test -z "$LINKER_RPATH"; then - echo "-L${libdir} @LDFLAGS@" - else - echo "-L${libdir} @LDFLAGS@ ${LINKER_RPATH}${libdir}" - fi + pkg-config --libs-only-L "$pkgconfig_package" ;; --libs) - echo "-lsane ${LIBS}" + pkg-config --libs "$pkgconfig_package" ;; --cflags) - unique_cflags= - if test "${includedir}" != "/usr/include"; then - unique_cflags="${unique_cflags} -I${includedir}" - fi - for i in $cflags; do - if test "${i}" != "-I${includedir}"; then - unique_cflags="${unique_cflags} $i" - fi - done - echo ${unique_cflags} + pkg-config --cflags "$pkgconfig_package" ;; --prefix) - echo ${prefix} + echo "${prefix}" ;; --exec-prefix) - echo ${exec_prefix} + echo "${exec_prefix}" ;; *) usage diff -Nru sane-backends-1.0.22/tools/sane-desc.c sane-backends-1.0.23/tools/sane-desc.c --- sane-backends-1.0.22/tools/sane-desc.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/tools/sane-desc.c 2012-07-01 02:00:44.000000000 +0000 @@ -80,6 +80,7 @@ output_mode_usermap, output_mode_db, output_mode_udev, + output_mode_udevacl, output_mode_plist, output_mode_hal, output_mode_halnew @@ -316,7 +317,7 @@ "(multiple directories can be concatenated by \":\")\n"); printf (" -m|--mode mode " "Output mode (ascii, html-backends-split, html-mfgs,\n" - " xml, statistics, usermap, db, udev, plist, hal, hal-new)\n"); + " xml, statistics, usermap, db, udev, udev+acl, plist, hal, hal-new)\n"); printf (" -t|--title \"title\" The title used for HTML pages\n"); printf (" -i|--intro \"intro\" A short description of the " "contents of the page\n"); @@ -413,6 +414,11 @@ DBG_INFO ("Output mode: %s\n", optarg); mode = output_mode_udev; } + else if (strcmp (optarg, "udev+acl") == 0) + { + DBG_INFO ("Output mode: %s\n", optarg); + mode = output_mode_udevacl; + } else if (strcmp (optarg, "plist") == 0) { DBG_INFO ("Output mode: %s\n", optarg); @@ -3525,28 +3531,58 @@ } } 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); + + if (mode == output_mode_udevacl) + printf ("ATTRS{idVendor}==\"%s\", ATTRS{idProduct}==\"%s\", ENV{libsane_matched}=\"yes\"\n", + usbid->usb_vendor_id + 2, usbid->usb_product_id + 2); + else + 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; } 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("ENV{libsane_matched}==\"yes\", RUN+=\"/bin/sh -c 'if test -e /sys/$env{DEVPATH}/power/control; then echo on > /sys/$env{DEVPATH}/power/control; elif test -e /sys/$env{DEVPATH}/power/level; then echo on > /sys/$env{DEVPATH}/power/level; fi'\"\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]*\", ATTRS{type}==\"6\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", DEVMODE, DEVGROUP); + + if (mode == output_mode_udevacl) + printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"6\", ENV{libsane_matched}=\"yes\"\n"); + else + printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"6\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", DEVMODE, DEVGROUP); + + printf ("# Some scanners advertise themselves as SCSI device type 3\n"); + printf ("# Wildcard: for some Epson SCSI scanners\n"); + if (mode == output_mode_udevacl) + printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"EPSON\", ATTRS{model}==\"SCANNER*\", ENV{libsane_matched}=\"yes\"\n"); + else + printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"EPSON\", ATTRS{model}==\"SCANNER*\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", + DEVMODE, DEVGROUP); + while (scsiid) { manufacturer_model_type * name = scsiid->name; if (!scsiid->is_processor) - continue; + { + scsiid = scsiid->next; + continue; + } + + /* Wildcard for Epson scanners: vendor = EPSON, product = SCANNER* */ + if ((strcmp(scsiid->scsi_vendor_id, "EPSON") == 0) + && (strncmp(scsiid->scsi_product_id, "SCANNER", 7) == 0)) + { + scsiid = scsiid->next; + continue; + } i = 0; printf ("# "); @@ -3571,13 +3607,24 @@ } } printf ("\n"); - printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\n", + + if (mode == output_mode_udevacl) + printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", ENV{libsane_matched}=\"yes\"\n", + scsiid->scsi_vendor_id, scsiid->scsi_product_id); + else + printf ("KERNEL==\"sg[0-9]*\", ATTRS{type}==\"3\", ATTRS{vendor}==\"%s\", ATTRS{model}==\"%s\", MODE=\"%s\", GROUP=\"%s\", ENV{libsane_matched}=\"yes\"\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_scsi_rules_end\"\n"); + + if (mode == output_mode_udevacl) + printf("\nENV{libsane_matched}==\"yes\", RUN+=\"/bin/setfacl -m g:%s:rw $env{DEVNAME}\"\n", DEVGROUP); + else + printf ("\nENV{libsane_matched}==\"yes\", MODE=\"664\", GROUP=\"scanner\"\n"); - printf ("LABEL=\"libsane_rules_end\"\n"); + printf ("\nLABEL=\"libsane_rules_end\"\n"); } static void @@ -3769,6 +3816,7 @@ print_db (); break; case output_mode_udev: + case output_mode_udevacl: print_udev (); break; case output_mode_plist: diff -Nru sane-backends-1.0.22/tools/sane-find-scanner.c sane-backends-1.0.23/tools/sane-find-scanner.c --- sane-backends-1.0.22/tools/sane-find-scanner.c 2010-12-01 23:49:58.000000000 +0000 +++ sane-backends-1.0.23/tools/sane-find-scanner.c 2012-07-01 02:00:44.000000000 +0000 @@ -30,10 +30,15 @@ #include #include -#if defined (HAVE_WINDOWS_H) -#include -#include -#include +#if defined (HAVE_DDK_NTDDSCSI_H) || defined (HAVE_NTDDSCSI_H) +# define WIN32_SCSI +# include +# if defined (HAVE_DDK_NTDDSCSI_H) +# include +# include +# elif defined (HAVE_NTDDSCSI_H) +# include +# endif #endif #include "../include/sane/sanei.h" @@ -42,7 +47,11 @@ #include "../include/sane/sanei_config.h" #ifdef HAVE_LIBUSB +#ifdef HAVE_LUSB0_USB_H +#include +#else #include +#endif extern char * check_usb_chip (struct usb_device *dev, int verbosity, SANE_Bool from_file); #endif @@ -1144,7 +1153,7 @@ return file_name; } -#if defined (HAVE_WINDOWS_H) +#if defined(WIN32_SCSI) /* Return a list of potential scanners. There's a lot of hardcoded values here that might break on a system with lots of scsi devices. */ static char **build_scsi_dev_list(void) { @@ -1836,7 +1845,7 @@ 0 }; -#if defined (HAVE_WINDOWS_H) || \ +#if defined (WIN32_SCSI) || \ defined (HAVE_IOKIT_CDB_IOSCSILIB_H) || \ defined (HAVE_IOKIT_SCSI_SCSICOMMANDOPERATIONCODES_H) || \ defined (HAVE_IOKIT_SCSI_COMMANDS_SCSICOMMANDOPERATIONCODES_H) @@ -2072,12 +2081,14 @@ if (verbose > 0) printf ("\n # Most Scanners connected to the parallel port or other " "proprietary ports\n # can't be detected by this program.\n"); +#ifdef HAVE_GETUID if (getuid ()) if (verbose > 0) printf ("\n # You may want to run this program as root to find all devices. " "Once you\n # found the scanner devices, be sure to adjust access " "permissions as\n # necessary.\n"); +#endif if (verbose > 1) printf ("done\n");