summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff.email>2022-02-07 06:56:10 +0100
committerJörg Frings-Fürst <debian@jff.email>2022-02-07 06:56:10 +0100
commit43f33c72804e63306580755049c09d5a81ad83e3 (patch)
tree805caeb00a832ed96a331907987d4e6a2056a391
parent0f86c5490ea7c2218a4394bf4c21bf3f9267a47c (diff)
parent6427d36e269d8c14e6bc55373102a4ebc971ca38 (diff)
Merge branch 'release/debian/1.1.1-1'debian/1.1.1-1
-rw-r--r--.gitignore6
-rw-r--r--AUTHORS9
-rw-r--r--NEWS133
-rw-r--r--backend/Makefile.am978
-rw-r--r--backend/abaton.c2
-rw-r--r--backend/agfafocus.c2
-rw-r--r--backend/apple.c2
-rw-r--r--backend/artec.c2
-rw-r--r--backend/artec_eplus48u.c2
-rw-r--r--backend/as6e.c2
-rw-r--r--backend/avision.c168
-rw-r--r--backend/avision.h25
-rw-r--r--backend/bh.c4
-rw-r--r--backend/canon-sane.c2
-rw-r--r--backend/canon630u.c4
-rw-r--r--backend/canon_dr-cmd.h10
-rw-r--r--backend/canon_dr.c203
-rw-r--r--backend/canon_dr.conf.in4
-rw-r--r--backend/canon_dr.h13
-rw-r--r--backend/canon_lide70-common.c2363
-rw-r--r--backend/canon_lide70.c4
-rw-r--r--backend/canon_pp.c2
-rw-r--r--backend/cardscan.c4
-rw-r--r--backend/coolscan.c2
-rw-r--r--backend/coolscan2.c2
-rw-r--r--backend/coolscan3.c2
-rw-r--r--backend/dc210.c2
-rw-r--r--backend/dc240.c2
-rw-r--r--backend/dc25.c2
-rw-r--r--backend/dell1600n_net.c2
-rw-r--r--backend/dmc.c2
-rw-r--r--backend/epjitsu.c4
-rw-r--r--backend/epson.c2
-rw-r--r--backend/epson2-io.c3
-rw-r--r--backend/epson2-ops.c33
-rw-r--r--backend/epson2.c16
-rw-r--r--backend/epson2_usb.c353
-rw-r--r--backend/epsonds-cmd.c254
-rw-r--r--backend/epsonds-cmd.h2
-rw-r--r--backend/epsonds-jpeg.c311
-rw-r--r--backend/epsonds-jpeg.h6
-rw-r--r--backend/epsonds-net.c234
-rw-r--r--backend/epsonds-net.h6
-rw-r--r--backend/epsonds-ops.c34
-rw-r--r--backend/epsonds-ops.h1
-rw-r--r--backend/epsonds-usb.c19
-rw-r--r--backend/epsonds-usb.h3
-rw-r--r--backend/epsonds.c2629
-rw-r--r--backend/epsonds.conf.in5
-rw-r--r--backend/epsonds.h33
-rw-r--r--backend/escl.conf.in5
-rw-r--r--backend/escl/escl.c45
-rw-r--r--backend/escl/escl.h4
-rw-r--r--backend/escl/escl_capabilities.c111
-rw-r--r--backend/escl/escl_devices.c10
-rw-r--r--backend/escl/escl_jpeg.c53
-rw-r--r--backend/escl/escl_newjob.c12
-rw-r--r--backend/escl/escl_reset.c10
-rw-r--r--backend/escl/escl_scan.c10
-rw-r--r--backend/escl/escl_status.c2
-rw-r--r--backend/fujitsu.c6
-rw-r--r--backend/fujitsu.conf.in3
-rw-r--r--backend/genesys.conf.in3
-rw-r--r--backend/genesys/calibration.h21
-rw-r--r--backend/genesys/command_set.h21
-rw-r--r--backend/genesys/device.cpp21
-rw-r--r--backend/genesys/device.h21
-rw-r--r--backend/genesys/enums.cpp22
-rw-r--r--backend/genesys/enums.h25
-rw-r--r--backend/genesys/error.cpp21
-rw-r--r--backend/genesys/error.h21
-rw-r--r--backend/genesys/fwd.h21
-rw-r--r--backend/genesys/genesys.cpp196
-rw-r--r--backend/genesys/genesys.h23
-rw-r--r--backend/genesys/gl124.cpp46
-rw-r--r--backend/genesys/gl124.h21
-rw-r--r--backend/genesys/gl124_registers.h21
-rw-r--r--backend/genesys/gl646.cpp41
-rw-r--r--backend/genesys/gl646.h21
-rw-r--r--backend/genesys/gl646_registers.h21
-rw-r--r--backend/genesys/gl841.cpp230
-rw-r--r--backend/genesys/gl841.h21
-rw-r--r--backend/genesys/gl841_registers.h21
-rw-r--r--backend/genesys/gl842.cpp9
-rw-r--r--backend/genesys/gl842.h21
-rw-r--r--backend/genesys/gl842_registers.h21
-rw-r--r--backend/genesys/gl843.cpp35
-rw-r--r--backend/genesys/gl843.h21
-rw-r--r--backend/genesys/gl843_registers.h21
-rw-r--r--backend/genesys/gl846.cpp58
-rw-r--r--backend/genesys/gl846.h21
-rw-r--r--backend/genesys/gl846_registers.h21
-rw-r--r--backend/genesys/gl847.cpp59
-rw-r--r--backend/genesys/gl847.h21
-rw-r--r--backend/genesys/gl847_registers.h21
-rw-r--r--backend/genesys/image.cpp21
-rw-r--r--backend/genesys/image.h23
-rw-r--r--backend/genesys/image_buffer.cpp21
-rw-r--r--backend/genesys/image_buffer.h21
-rw-r--r--backend/genesys/image_pipeline.cpp102
-rw-r--r--backend/genesys/image_pipeline.h54
-rw-r--r--backend/genesys/image_pixel.cpp21
-rw-r--r--backend/genesys/image_pixel.h23
-rw-r--r--backend/genesys/low.cpp59
-rw-r--r--backend/genesys/low.h22
-rw-r--r--backend/genesys/motor.cpp24
-rw-r--r--backend/genesys/motor.h21
-rw-r--r--backend/genesys/register.h21
-rw-r--r--backend/genesys/register_cache.h21
-rw-r--r--backend/genesys/row_buffer.h21
-rw-r--r--backend/genesys/scanner_interface.cpp21
-rw-r--r--backend/genesys/scanner_interface.h21
-rw-r--r--backend/genesys/scanner_interface_usb.cpp24
-rw-r--r--backend/genesys/scanner_interface_usb.h21
-rw-r--r--backend/genesys/sensor.cpp21
-rw-r--r--backend/genesys/sensor.h21
-rw-r--r--backend/genesys/serialize.h23
-rw-r--r--backend/genesys/settings.cpp27
-rw-r--r--backend/genesys/settings.h40
-rw-r--r--backend/genesys/static_init.cpp32
-rw-r--r--backend/genesys/static_init.h21
-rw-r--r--backend/genesys/status.cpp21
-rw-r--r--backend/genesys/status.h21
-rw-r--r--backend/genesys/tables_frontend.cpp21
-rw-r--r--backend/genesys/tables_gpo.cpp36
-rw-r--r--backend/genesys/tables_model.cpp36
-rw-r--r--backend/genesys/tables_motor.cpp23
-rw-r--r--backend/genesys/tables_sensor.cpp103
-rw-r--r--backend/genesys/test_scanner_interface.cpp21
-rw-r--r--backend/genesys/test_scanner_interface.h21
-rw-r--r--backend/genesys/test_settings.cpp21
-rw-r--r--backend/genesys/test_settings.h21
-rw-r--r--backend/genesys/test_usb_device.cpp21
-rw-r--r--backend/genesys/test_usb_device.h21
-rw-r--r--backend/genesys/usb_device.cpp21
-rw-r--r--backend/genesys/usb_device.h21
-rw-r--r--backend/genesys/utilities.h23
-rw-r--r--backend/gphoto2.c2
-rw-r--r--backend/gt68xx.c26
-rw-r--r--backend/hp.c2
-rw-r--r--backend/hp3500.c2
-rw-r--r--backend/hp3900_sane.c2
-rw-r--r--backend/hp4200.c6
-rw-r--r--backend/hp5400_sane.c4
-rw-r--r--backend/hp5590.c4
-rw-r--r--backend/hpljm1005.c2
-rw-r--r--backend/hpsj5s.c4
-rw-r--r--backend/hs2p.c4
-rw-r--r--backend/ibm.c4
-rw-r--r--backend/kodak.c4
-rw-r--r--backend/kodakaio.c2
-rw-r--r--backend/kvs1025.c4
-rw-r--r--backend/kvs20xx.c2
-rw-r--r--backend/kvs40xx.c2
-rw-r--r--backend/leo.c4
-rw-r--r--backend/lexmark.c4
-rw-r--r--backend/ma1509.c4
-rw-r--r--backend/magicolor.c2
-rw-r--r--backend/matsushita.c4
-rw-r--r--backend/microtek.c3
-rw-r--r--backend/microtek2.c2
-rw-r--r--backend/mustek.c4
-rw-r--r--backend/mustek_pp.c2
-rw-r--r--backend/mustek_usb.c4
-rw-r--r--backend/mustek_usb2.c4
-rw-r--r--backend/nec.c2
-rw-r--r--backend/niash.c4
-rw-r--r--backend/p5.c4
-rw-r--r--backend/pie.c2
-rw-r--r--backend/pieusb.c7
-rw-r--r--backend/pieusb.conf.in6
-rw-r--r--backend/pieusb_specific.c2
-rw-r--r--backend/pint.c2
-rw-r--r--backend/pixma/pixma.c2
-rw-r--r--backend/pixma/pixma_common.c10
-rw-r--r--backend/plustek.c2
-rw-r--r--backend/plustek_pp.c2
-rw-r--r--backend/pnm.c4
-rw-r--r--backend/qcam.c2
-rw-r--r--backend/ricoh.c2
-rw-r--r--backend/ricoh2.c2
-rw-r--r--backend/rts8891.c4
-rw-r--r--backend/rts8891_low.c2
-rw-r--r--backend/rts88xx_lib.c2
-rw-r--r--backend/s9036.c2
-rw-r--r--backend/sceptre.c4
-rw-r--r--backend/sharp.c2
-rw-r--r--backend/sm3600-scanutil.c1
-rw-r--r--backend/sm3600.c4
-rw-r--r--backend/sm3840.c2
-rw-r--r--backend/sp15c.c2
-rw-r--r--backend/st400.c2
-rw-r--r--backend/stv680.c4
-rw-r--r--backend/tamarack.c2
-rw-r--r--backend/teco1.c4
-rw-r--r--backend/teco2.c4
-rw-r--r--backend/teco3.c4
-rw-r--r--backend/test.c4
-rw-r--r--backend/u12.c2
-rw-r--r--backend/umax.c4
-rw-r--r--backend/umax1220u.c4
-rw-r--r--backend/umax_pp.c4
-rw-r--r--backend/umax_pp.h2
-rw-r--r--backend/v4l.c4
-rw-r--r--backend/xerox_mfp.c2
-rw-r--r--debian/changelog23
-rw-r--r--debian/copyright14
-rw-r--r--debian/libsane-common.lintian-overrides4
-rw-r--r--debian/libsane1.lintian-overrides7
-rw-r--r--debian/patches/0040-remove_git.patch2
-rw-r--r--debian/patches/0100-source_spelling.patch266
-rw-r--r--debian/patches/0125-multiarch_dll_search_path.patch11
-rw-r--r--debian/patches/0175-fix_tests.patch16
-rw-r--r--debian/patches/0605-fix_groff-warnings.patch48
-rw-r--r--debian/patches/series8
-rw-r--r--debian/sane-utils.postinst7
-rw-r--r--debian/sane-utils.postrm2
-rw-r--r--doc/Makefile.am2
-rw-r--r--doc/descriptions-external/scangearmp2.desc23
-rw-r--r--doc/descriptions/epson.desc1
-rw-r--r--doc/descriptions/epson2.desc161
-rw-r--r--doc/descriptions/epsonds.desc266
-rw-r--r--doc/descriptions/escl.desc122
-rw-r--r--doc/descriptions/fujitsu.desc12
-rw-r--r--doc/descriptions/pieusb.desc1
-rw-r--r--doc/descriptions/pixma.desc6
-rw-r--r--doc/descriptions/snapscan.desc20
-rw-r--r--doc/descriptions/umax.desc2
-rw-r--r--doc/releases.md199
-rw-r--r--doc/releases.txt62
-rw-r--r--doc/sane-abaton.man2
-rw-r--r--doc/sane-agfafocus.man6
-rw-r--r--doc/sane-apple.man6
-rw-r--r--doc/sane-artec.man12
-rw-r--r--doc/sane-artec_eplus48u.man14
-rw-r--r--doc/sane-avision.man14
-rw-r--r--doc/sane-bh.man2
-rw-r--r--doc/sane-canon.man2
-rw-r--r--doc/sane-canon630u.man10
-rw-r--r--doc/sane-canon_dr.man9
-rw-r--r--doc/sane-canon_lide70.man6
-rw-r--r--doc/sane-canon_pp.man2
-rw-r--r--doc/sane-coolscan2.man15
-rw-r--r--doc/sane-coolscan3.man20
-rw-r--r--doc/sane-dc210.man12
-rw-r--r--doc/sane-dc240.man24
-rw-r--r--doc/sane-dc25.man2
-rw-r--r--doc/sane-dll.man2
-rw-r--r--doc/sane-dmc.man2
-rw-r--r--doc/sane-epsonds.man2
-rw-r--r--doc/sane-escl.man24
-rw-r--r--doc/sane-find-scanner.man4
-rw-r--r--doc/sane-fujitsu.man25
-rw-r--r--doc/sane-genesys.man2
-rw-r--r--doc/sane-gphoto2.man13
-rw-r--r--doc/sane-gt68xx.man10
-rw-r--r--doc/sane-hp.man2
-rw-r--r--doc/sane-hp3900.man4
-rw-r--r--doc/sane-hp4200.man2
-rw-r--r--doc/sane-hp5400.man2
-rw-r--r--doc/sane-hpsj5s.man12
-rw-r--r--doc/sane-hs2p.man4
-rw-r--r--doc/sane-ibm.man4
-rw-r--r--doc/sane-kodak.man5
-rw-r--r--doc/sane-kodakaio.man3
-rw-r--r--doc/sane-kvs1025.man2
-rw-r--r--doc/sane-leo.man28
-rw-r--r--doc/sane-lexmark.man15
-rw-r--r--doc/sane-ma1509.man11
-rw-r--r--doc/sane-magicolor.man12
-rw-r--r--doc/sane-microtek.man2
-rw-r--r--doc/sane-mustek.man2
-rw-r--r--doc/sane-mustek_pp.man2
-rw-r--r--doc/sane-mustek_usb.man2
-rw-r--r--doc/sane-mustek_usb2.man6
-rw-r--r--doc/sane-nec.man2
-rw-r--r--doc/sane-net.man2
-rw-r--r--doc/sane-p5.man2
-rw-r--r--doc/sane-pint.man2
-rw-r--r--doc/sane-pixma.man6
-rw-r--r--doc/sane-plustek.man4
-rw-r--r--doc/sane-plustek_pp.man2
-rw-r--r--doc/sane-qcam.man2
-rw-r--r--doc/sane-ricoh.man2
-rw-r--r--doc/sane-rts8891.man17
-rw-r--r--doc/sane-s9036.man2
-rw-r--r--doc/sane-scsi.man4
-rw-r--r--doc/sane-sharp.man8
-rw-r--r--doc/sane-sm3600.man8
-rw-r--r--doc/sane-snapscan.man2
-rw-r--r--doc/sane-sp15c.man4
-rw-r--r--doc/sane-st400.man4
-rw-r--r--doc/sane-stv680.man2
-rw-r--r--doc/sane-tamarack.man2
-rw-r--r--doc/sane-teco1.man11
-rw-r--r--doc/sane-teco2.man8
-rw-r--r--doc/sane-test.man4
-rw-r--r--doc/sane-u12.man2
-rw-r--r--doc/sane-umax.man38
-rw-r--r--doc/sane-umax_pp.man2
-rw-r--r--doc/sane-v4l.man2
-rw-r--r--doc/sane-xerox_mfp.man4
-rw-r--r--doc/sane.man63
-rw-r--r--doc/saned.man138
-rw-r--r--doc/scanimage.man316
-rw-r--r--frontend/Makefile.am2
-rw-r--r--frontend/jpegtopdf.c709
-rw-r--r--frontend/jpegtopdf.h77
-rw-r--r--frontend/scanimage.c198
-rw-r--r--newsfragments/README.md20
-rw-r--r--newsfragments/canon_lide70_improvements.bugfix1
-rw-r--r--po/LINGUAS1
-rw-r--r--po/bg.po213
-rw-r--r--po/ca.po213
-rw-r--r--po/ca@valencia.po213
-rw-r--r--po/cs.po213
-rw-r--r--po/da.po213
-rw-r--r--po/de.po213
-rw-r--r--po/en_GB.po215
-rw-r--r--po/eo.po213
-rw-r--r--po/es.po213
-rw-r--r--po/fi.po213
-rw-r--r--po/fr.po213
-rw-r--r--po/gl.po213
-rw-r--r--po/he.po213
-rw-r--r--po/hu.po213
-rw-r--r--po/it.po213
-rw-r--r--po/ja.po213
-rw-r--r--po/nb.po213
-rw-r--r--po/nl.po213
-rw-r--r--po/pl.po213
-rw-r--r--po/pt.po213
-rw-r--r--po/ru.po213
-rw-r--r--po/sv.po213
-rw-r--r--po/uk.po225
-rw-r--r--po/zh_CN.po6691
-rw-r--r--testsuite/backend/genesys/tests_image_pipeline.cpp38
-rw-r--r--testsuite/tools/Makefile.am2
-rw-r--r--tools/NEWS.template.jinja30
-rwxr-xr-xtools/epson2usb.pl3
-rw-r--r--towncrier.toml34
341 files changed, 18221 insertions, 7615 deletions
diff --git a/.gitignore b/.gitignore
index 31b9b76..bd3b383 100644
--- a/.gitignore
+++ b/.gitignore
@@ -58,9 +58,3 @@ test-suite.log
# `make dist` artifacts
/sane-backends-*.tar.gz
-
-#
-# Debian
-#
-.pc
-/debian/files
diff --git a/AUTHORS b/AUTHORS
index 92e8da1..b7e2399 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -27,7 +27,7 @@ Backends:
dmc: David F. Skoll
epjitsu: m. allan noah (*)
epson: Karl Heinz Kremer
- epson2: Alessandro Zummo
+ epson2: Alessandro Zummo, Wolfram Sang (*)
epsonds: Alessandro Zummo
escl: Touboul Nathane, Thierry HUCHARD (*)
fujitsu: Randolph Bentson, Frederik Ramm, Oliver Schirrmeister,
@@ -51,9 +51,9 @@ Backends:
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 (*)
+ kvs1025: Tao Zhang
+ kvs20xx: Panasonic Russia Ltd
+ kvs40xx: Panasonic Russia Ltd
leo: Frank Zago
lexmark: Fred Odendaal, Stéphane Voltz
ma1509: Henning Geinitz
@@ -257,4 +257,5 @@ Troy Rollo <sane@troy.rollo.name>
Ullrich Sigwanz <usigwanz@freesurf.ch>
Ulrich Deiters <ukd@xenon.pc.Uni-Koeln.DE>
Wittawat Yamwong <wittawat@web.de>
+Wolfram Sang <wsa@kernel.org>
m. allan noah <kitno455 at gmail dot com>
diff --git a/NEWS b/NEWS
index 10310f8..8c991a5 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,138 @@
<!-- -*- Mode: markdown -*- -->
+<!-- Please add new release notes to the newsfragments directory (read the README.md file there).
+ The release notes will be collected at release time and put into this document
+ semi-automatically.
+-->
+
+<!--(towncrier release notes start)-->
+
+## New with 1.1.1 (released 2022-01-19)
+
+### Backends
+
+- `epson2`: Fixed support for many scanners that don't support focus command.
+- `epson2`: Improve reliability of long scans.
+- `epsonds`: Implemented support for the following Epson scanners:
+ - DS-1610
+ - DS-1630
+ - DS-1660W
+ - DS-310
+ - DS-320
+ - DS-360W
+ - DS-410
+ - DS-530
+ - DS-530II
+ - DS-531
+ - DS-535
+ - DS-535H
+ - DS-535II
+ - DS-570W
+ - DS-570WII
+ - DS-571W
+ - DS-575W
+ - DS-575WII
+ - DS-70
+ - DS-80W
+ - ES-200
+ - ES-300W
+ - ES-300WR
+ - ES-400
+ - ES-400II
+ - ES-50
+ - ES-500W
+ - ES-500WII
+ - ES-500WR
+ - ES-55R
+ - ES-580W
+ - ES-60W
+ - ES-60WB
+ - ES-60WW
+ - ES-65WR
+ - ET-2700 Series
+ - ET-2710 Series
+ - ET-2810 Series
+ - ET-M2140 Series
+ - ET-M3140 Series
+ - EW-052A Series
+ - FF-680W
+ - L3150 Series
+ - L3200 Series
+ - L3210 Series
+ - L3250 Series
+ - L4150 Series
+ - M2140 Series
+ - M3140 Series
+ - RR-60
+ - RR-600W
+ - RR-70W
+ - XP-2100 Series
+ - XP-2150 Series
+- `epson2`: Marked XP-452 455 series as supported in documentation.
+- `escl`: Fixed scanning problems on certain scanners due to incorrect URL being used
+ (https://gitlab.com/sane-project/backends/-/issues/479)
+- `escl`: Fixed support for different resolutions when using JPEG format.
+- `escl`: Fixed handling of ipp-usb redirects to localhost which previously caused certain scanners
+ to be always reported as busy.
+- `escl`: Added support for Brother DCP-J772DW and Epson ET-2750 scanners.
+- `escl`: Marked the following scanners as supported in documentation:
+ - Canon PIXMA G4511
+ - Canon PIXMA TR4550 Series
+ - Canon PIXMA TR4551 Series
+ - Epson ET-6100
+- `escl`: Implemented support for disabling PDF output on scanners where it's broken
+ (https://gitlab.com/sane-project/backends/-/issues/510)
+- `escl`: Implemented support for Canon PIXME TR4520 and TR7500 scanners.
+- `genesys`: Improved scan quality on Canon LiDE 35/40/50/60 by using brighter LED illumination.
+- `genesys`: Fixed control of contrast and brigthness on certain scanners
+ (https://gitlab.com/sane-project/backends/-/issues/271).
+- `genesys`: Fixed crashes when handling slightly unexpected conditions
+ (https://gitlab.com/sane-project/backends/-/issues/464).
+- `genesys`: Fixed support for Plustek Opticfilm 7200 v2 scanner.
+- `genesys`: Fixed button support on HP ScanJet G4010.
+- `genesys`: Fixed compilation on gcc-4.8.
+- `genesys`: Fixed incorrect LED exposure calculation leading to wrong color balance on certain
+ resolutions on gl841 scanners
+- `genesys`: Improved gray scan quality on Canon LiDE 110, 120, 210, 220
+ (https://gitlab.com/sane-project/backends/-/issues/106,
+ https://gitlab.com/sane-project/backends/-/issues/52).
+- `genesys`: Fixed issue of motor becoming stuck at certain resolutions on Canon LiDE 50
+ and possibly other gl841 scanners (https://gitlab.com/sane-project/backends/-/issues/357)
+- `genesys`: Fixed periodic black lines in gray scans on Canon LiDE 80.
+- `genesys`: Removed support for broken 75 and 100 dpi hardware resolutions to fix preview
+ scans (https://gitlab.com/sane-project/backends/-/issues/383). These resolutions did
+ not have any benefit compared to next smallest 150 dpi resolution.
+- `genesys`: Add support for running in embedded environments that don't support threads.
+- `genesys`: Fixed gray scans to use white color for illumination instead of red on
+ Canon LiDE 35/40/50/60 and potentially other gl841 scanners. Old behavior can
+ be restored via the color filter setting to select specific color component for
+ the gray scan.
+- `genesys`: The genesys backend is now distributed under GPL v2 or later license.
+ Previously there existed an exception that allowed additional uses of the backend.
+- `gt68xx`: Fixed several memory issues that can potentially lead to crashes or increased memory use.
+- `hp4200`: Fixed crash when using HP ScanJet 4200C
+ (https://gitlab.com/sane-project/backends/-/issues/454).
+- `microtek`: Fixed support for embedded platforms using `uclibc`.
+- `pieusb`: Implemented support for Reflecta RPS 10M scanner.
+- `pieusb`: Fixed support for automatically advancing slides on DigitDia 4000.
+- `pixma`: Fixed compliation with `NDEBUG` macro defined.
+- `pixma`: Marked Canon PIXMA G4511 as supported in documentation
+- `scangearmp2`: Mark GX6000, GX7000, TS5400 and MX455 series as supported.
+- `sm3600-scanutil`: Fixed support for embedded platforms using `uclibc`.
+
+
+### Frontends
+
+- Improved documentation of `scanimage` concerning options provided by backends.
+- `scanimage`: Improved help to specify which options are advanced.
+- `scanimage`: Implemented support for PDF output format.
+
+
+### Miscellaneous
+
+- Added translation to Simplified Chinese.
+
+
## New with 1.0.32 (released 2021-02-14)
### Backends
diff --git a/backend/Makefile.am b/backend/Makefile.am
index 48a1393..e56e7f1 100644
--- a/backend/Makefile.am
+++ b/backend/Makefile.am
@@ -1,3 +1,4 @@
+
## Makefile.am -- an automake template for Makefile.in file
## Copyright (C) 2009 Chris Bagwell, Olaf Meeuwissen, and Sane Developers.
##
@@ -251,7 +252,15 @@ libabaton_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=abaton
nodist_libsane_abaton_la_SOURCES = abaton-s.c
libsane_abaton_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=abaton
libsane_abaton_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_abaton_la_LIBADD = $(COMMON_LIBS) libabaton.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_abaton_la_LIBADD = $(COMMON_LIBS) \
+ libabaton.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += abaton.conf.in
libagfafocus_la_SOURCES = agfafocus.c agfafocus.h
@@ -260,7 +269,16 @@ libagfafocus_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=agfafocus
nodist_libsane_agfafocus_la_SOURCES = agfafocus-s.c
libsane_agfafocus_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=agfafocus
libsane_agfafocus_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_agfafocus_la_LIBADD = $(COMMON_LIBS) libagfafocus.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_thread.lo ../sanei/sanei_scsi.lo $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_agfafocus_la_LIBADD = $(COMMON_LIBS) \
+ libagfafocus.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ ../sanei/sanei_config2.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_thread.lo \
+ ../sanei/sanei_scsi.lo \
+ $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += agfafocus.conf.in
libapple_la_SOURCES = apple.c apple.h
@@ -269,7 +287,15 @@ libapple_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=apple
nodist_libsane_apple_la_SOURCES = apple-s.c
libsane_apple_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=apple
libsane_apple_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_apple_la_LIBADD = $(COMMON_LIBS) libapple.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_apple_la_LIBADD = $(COMMON_LIBS) \
+ libapple.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += apple.conf.in
libartec_la_SOURCES = artec.c artec.h
@@ -278,7 +304,15 @@ libartec_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=artec
nodist_libsane_artec_la_SOURCES = artec-s.c
libsane_artec_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
libsane_artec_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=artec
-libsane_artec_la_LIBADD = $(COMMON_LIBS) libartec.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_artec_la_LIBADD = $(COMMON_LIBS) \
+ libartec.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += artec.conf.in
libartec_eplus48u_la_SOURCES = artec_eplus48u.c artec_eplus48u.h
@@ -287,7 +321,15 @@ libartec_eplus48u_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=artec_eplus48u
nodist_libsane_artec_eplus48u_la_SOURCES = artec_eplus48u-s.c
libsane_artec_eplus48u_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=artec_eplus48u
libsane_artec_eplus48u_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_artec_eplus48u_la_LIBADD = $(COMMON_LIBS) libartec_eplus48u.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_thread.lo $(MATH_LIB) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMEG_LIBS)
+libsane_artec_eplus48u_la_LIBADD = $(COMMON_LIBS) \
+ libartec_eplus48u.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_thread.lo \
+ $(MATH_LIB) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMEG_LIBS)
EXTRA_DIST += artec_eplus48u.conf.in
libas6e_la_SOURCES = as6e.c as6e.h
@@ -304,7 +346,17 @@ libavision_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=avision
nodist_libsane_avision_la_SOURCES = avision-s.c
libsane_avision_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=avision
libsane_avision_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_avision_la_LIBADD = $(COMMON_LIBS) libavision.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_thread.lo ../sanei/sanei_scsi.lo $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_avision_la_LIBADD = $(COMMON_LIBS) \
+ libavision.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_thread.lo \
+ ../sanei/sanei_scsi.lo \
+ $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += avision.conf.in
libbh_la_SOURCES = bh.c bh.h
@@ -313,7 +365,14 @@ libbh_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=bh
nodist_libsane_bh_la_SOURCES = bh-s.c
libsane_bh_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=bh
libsane_bh_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_bh_la_LIBADD = $(COMMON_LIBS) libbh.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_bh_la_LIBADD = $(COMMON_LIBS) libbh.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += bh.conf.in
libcanon_la_SOURCES = canon.c canon.h
@@ -322,7 +381,14 @@ libcanon_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon
nodist_libsane_canon_la_SOURCES = canon-s.c
libsane_canon_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon
libsane_canon_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_canon_la_LIBADD = $(COMMON_LIBS) libcanon.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) $(RESMGR_LIBS)
+libsane_canon_la_LIBADD = $(COMMON_LIBS) libcanon.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) $(RESMGR_LIBS)
EXTRA_DIST += canon.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += canon-sane.c canon-scsi.c
@@ -333,7 +399,14 @@ libcanon630u_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon630u
nodist_libsane_canon630u_la_SOURCES = canon630u-s.c
libsane_canon630u_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon630u
libsane_canon630u_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_canon630u_la_LIBADD = $(COMMON_LIBS) libcanon630u.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_canon630u_la_LIBADD = $(COMMON_LIBS) \
+ libcanon630u.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += canon630u.conf.in
# TODO: Why are this distributed but not compiled?
EXTRA_DIST += canon630u-common.c lm9830.h
@@ -344,7 +417,17 @@ libcanon_dr_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon_dr
nodist_libsane_canon_dr_la_SOURCES = canon_dr-s.c
libsane_canon_dr_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon_dr
libsane_canon_dr_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_canon_dr_la_LIBADD = $(COMMON_LIBS) libcanon_dr.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)
+libsane_canon_dr_la_LIBADD = $(COMMON_LIBS) \
+ libcanon_dr.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 += canon_dr.conf.in
libcanon_lide70_la_SOURCES = canon_lide70.c
@@ -353,7 +436,14 @@ libcanon_lide70_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon_lide70
nodist_libsane_canon_lide70_la_SOURCES = canon_lide70-s.c
libsane_canon_lide70_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon_lide70
libsane_canon_lide70_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_canon_lide70_la_LIBADD = $(COMMON_LIBS) libcanon_lide70.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_canon_lide70_la_LIBADD = $(COMMON_LIBS) \
+ libcanon_lide70.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += canon_lide70.conf.in
# TODO: Why are this distributed but not compiled?
EXTRA_DIST += canon_lide70-common.c
@@ -364,7 +454,13 @@ libcanon_pp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon_pp
nodist_libsane_canon_pp_la_SOURCES = canon_pp-s.c
libsane_canon_pp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=canon_pp
libsane_canon_pp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_canon_pp_la_LIBADD = $(COMMON_LIBS) libcanon_pp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(IEEE1284_LIBS)
+libsane_canon_pp_la_LIBADD = $(COMMON_LIBS) \
+ libcanon_pp.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(IEEE1284_LIBS)
EXTRA_DIST += canon_pp.conf.in
libcardscan_la_SOURCES = cardscan.c cardscan.h
@@ -373,7 +469,14 @@ libcardscan_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=cardscan
nodist_libsane_cardscan_la_SOURCES = cardscan-s.c
libsane_cardscan_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=cardscan
libsane_cardscan_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_cardscan_la_LIBADD = $(COMMON_LIBS) libcardscan.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_cardscan_la_LIBADD = $(COMMON_LIBS) \
+ libcardscan.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)
EXTRA_DIST += cardscan.conf.in
libcoolscan_la_SOURCES = coolscan.c coolscan.h coolscan-scsidef.h
@@ -382,7 +485,17 @@ libcoolscan_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=coolscan
nodist_libsane_coolscan_la_SOURCES = coolscan-s.c
libsane_coolscan_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=coolscan
libsane_coolscan_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_coolscan_la_LIBADD = $(COMMON_LIBS) libcoolscan.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_thread.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_coolscan_la_LIBADD = $(COMMON_LIBS) \
+ libcoolscan.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ ../sanei/sanei_config2.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_thread.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_scsi.lo \
+ $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += coolscan.conf.in
libcoolscan2_la_SOURCES = coolscan2.c
@@ -391,7 +504,16 @@ libcoolscan2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=coolscan2
nodist_libsane_coolscan2_la_SOURCES = coolscan2-s.c
libsane_coolscan2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=coolscan2
libsane_coolscan2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_coolscan2_la_LIBADD = $(COMMON_LIBS) libcoolscan2.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 $(SCSI_LIBS) $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_coolscan2_la_LIBADD = $(COMMON_LIBS) \
+ libcoolscan2.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 \
+ $(SCSI_LIBS) $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += coolscan2.conf.in
libcoolscan3_la_SOURCES = coolscan3.c
@@ -400,7 +522,16 @@ libcoolscan3_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=coolscan3
nodist_libsane_coolscan3_la_SOURCES = coolscan3-s.c
libsane_coolscan3_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=coolscan3
libsane_coolscan3_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_coolscan3_la_LIBADD = $(COMMON_LIBS) libcoolscan3.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 $(SCSI_LIBS) $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_coolscan3_la_LIBADD = $(COMMON_LIBS) \
+ libcoolscan3.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 \
+ $(SCSI_LIBS) $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += coolscan3.conf.in
libdc25_la_SOURCES = dc25.c dc25.h
@@ -409,7 +540,13 @@ libdc25_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dc25
nodist_libsane_dc25_la_SOURCES = dc25-s.c
libsane_dc25_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dc25
libsane_dc25_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_dc25_la_LIBADD = $(COMMON_LIBS) libdc25.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(MATH_LIB)
+libsane_dc25_la_LIBADD = $(COMMON_LIBS) \
+ libdc25.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(MATH_LIB)
EXTRA_DIST += dc25.conf.in
libdc210_la_SOURCES = dc210.c dc210.h
@@ -418,7 +555,13 @@ libdc210_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dc210
nodist_libsane_dc210_la_SOURCES = dc210-s.c
libsane_dc210_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dc210
libsane_dc210_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_dc210_la_LIBADD = $(COMMON_LIBS) libdc210.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(SANEI_SANEI_JPEG_LO) $(JPEG_LIBS)
+libsane_dc210_la_LIBADD = $(COMMON_LIBS) \
+ libdc210.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(SANEI_SANEI_JPEG_LO) $(JPEG_LIBS)
EXTRA_DIST += dc210.conf.in
libdc240_la_SOURCES = dc240.c dc240.h
@@ -427,7 +570,13 @@ libdc240_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dc240
nodist_libsane_dc240_la_SOURCES = dc240-s.c
libsane_dc240_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dc240
libsane_dc240_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_dc240_la_LIBADD = $(COMMON_LIBS) libdc240.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(SANEI_SANEI_JPEG_LO) $(JPEG_LIBS)
+libsane_dc240_la_LIBADD = $(COMMON_LIBS) \
+ libdc240.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(SANEI_SANEI_JPEG_LO) $(JPEG_LIBS)
EXTRA_DIST += dc240.conf.in
libdell1600n_net_la_SOURCES = dell1600n_net.c
@@ -436,7 +585,13 @@ libdell1600n_net_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dell1600n_net
nodist_libsane_dell1600n_net_la_SOURCES = dell1600n_net-s.c
libsane_dell1600n_net_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dell1600n_net
libsane_dell1600n_net_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_dell1600n_net_la_LIBADD = $(COMMON_LIBS) libdell1600n_net.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(TIFF_LIBS) $(JPEG_LIBS) $(SOCKET_LIBS)
+libsane_dell1600n_net_la_LIBADD = $(COMMON_LIBS) \
+ libdell1600n_net.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(TIFF_LIBS) $(JPEG_LIBS) $(SOCKET_LIBS)
EXTRA_DIST += dell1600n_net.conf.in
libdmc_la_SOURCES = dmc.c dmc.h
@@ -445,7 +600,15 @@ libdmc_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dmc
nodist_libsane_dmc_la_SOURCES = dmc-s.c
libsane_dmc_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dmc
libsane_dmc_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_dmc_la_LIBADD = $(COMMON_LIBS) libdmc.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_dmc_la_LIBADD = $(COMMON_LIBS) \
+ libdmc.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += dmc.conf.in
if have_libavahi
@@ -470,7 +633,14 @@ nodist_libsane_escl_la_SOURCES = escl-s.c
libsane_escl_la_CPPFLAGS = $(AM_CPPFLAGS) $(JPEG_CFLAGS) $(PNG_CFLAGS) $(TIFF_CFLAGS) $(POPPLER_GLIB_CFLAGS) $(XML_CFLAGS) $(libcurl_CFLAGS) $(AVAHI_CFLAGS) -DBACKEND_NAME=escl
libsane_escl_la_CFLAGS = $(AM_CFLAGS) $(JPEG_CFLAGS) $(PNG_CFLAGS) $(TIFF_CFLAGS) $(POPPLER_GLIB_CFLAGS) $(XML_CFLAGS) $(libcurl_CFLAGS) $(AVAHI_CFLAGS) -DBACKEND_NAME=escl
libsane_escl_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_escl_la_LIBADD = $(COMMON_LIBS) libescl.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(MATH_LIB) $(JPEG_LIBS) $(PNG_LIBS) $(TIFF_LIBS) $(POPPLER_GLIB_LIBS) $(XML_LIBS) $(libcurl_LIBS) $(AVAHI_LIBS)
+libsane_escl_la_LIBADD = $(COMMON_LIBS) \
+ libescl.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(MATH_LIB) $(JPEG_LIBS) $(PNG_LIBS) $(TIFF_LIBS) $(POPPLER_GLIB_LIBS) \
+ $(XML_LIBS) $(libcurl_LIBS) $(AVAHI_LIBS)
endif
endif
endif
@@ -482,7 +652,14 @@ libepjitsu_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epjitsu
nodist_libsane_epjitsu_la_SOURCES = epjitsu-s.c
libsane_epjitsu_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epjitsu
libsane_epjitsu_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_epjitsu_la_LIBADD = $(COMMON_LIBS) libepjitsu.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_epjitsu_la_LIBADD = $(COMMON_LIBS) \
+ libepjitsu.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += epjitsu.conf.in
libepson_la_SOURCES = epson.c epson.h epson_scsi.c epson_scsi.h epson_usb.c epson_usb.h
@@ -491,7 +668,17 @@ libepson_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson
nodist_libsane_epson_la_SOURCES = epson-s.c
libsane_epson_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson
libsane_epson_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_epson_la_LIBADD = $(COMMON_LIBS) libepson.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_epson_la_LIBADD = $(COMMON_LIBS) \
+ libepson.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ ../sanei/sanei_config2.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_scsi.lo \
+ ../sanei/sanei_pio.lo \
+ $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += epson.conf.in
libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson2_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h epson2-cct.c
@@ -500,7 +687,19 @@ libepson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2
nodist_libsane_epson2_la_SOURCES = epson2-s.c
libsane_epson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2
libsane_epson2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB) $(RESMGR_LIBS)
+libsane_epson2_la_LIBADD = $(COMMON_LIBS) \
+ libepson2.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ ../sanei/sanei_config2.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_scsi.lo \
+ ../sanei/sanei_pio.lo \
+ ../sanei/sanei_tcp.lo \
+ ../sanei/sanei_udp.lo \
+ $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB) $(RESMGR_LIBS)
EXTRA_DIST += epson2.conf.in
libepsonds_la_SOURCES = epsonds.c epsonds.h epsonds-usb.c epsonds-usb.h epsonds-io.c epsonds-io.h \
@@ -511,11 +710,20 @@ libepsonds_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epsonds
nodist_libsane_epsonds_la_SOURCES = epsonds-s.c
libsane_epsonds_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epsonds
libsane_epsonds_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
+
+if have_libavahi
+libsane_epsonds_la_LIBADD = $(COMMON_LIBS) libepsonds.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 \
+ $(SANEI_SANEI_JPEG_LO) $(JPEG_LIBS) $(USB_LIBS) $(MATH_LIB) $(RESMGR_LIBS) $(SOCKET_LIBS) $(AVAHI_LIBS)
+else
libsane_epsonds_la_LIBADD = $(COMMON_LIBS) libepsonds.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 \
$(SANEI_SANEI_JPEG_LO) $(JPEG_LIBS) $(USB_LIBS) $(MATH_LIB) $(RESMGR_LIBS) $(SOCKET_LIBS)
+endif
EXTRA_DIST += epsonds.conf.in
libfujitsu_la_SOURCES = fujitsu.c fujitsu.h fujitsu-scsi.h
@@ -524,7 +732,17 @@ libfujitsu_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=fujitsu
nodist_libsane_fujitsu_la_SOURCES = fujitsu-s.c
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)
+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/genesys.cpp genesys/genesys.h \
@@ -577,8 +795,11 @@ nodist_libsane_genesys_la_SOURCES = genesys-s.cpp
libsane_genesys_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=genesys
libsane_genesys_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
libsane_genesys_la_LIBADD = $(COMMON_LIBS) libgenesys.la \
- ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo \
- ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
$(MATH_LIB) $(TIFF_LIBS) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += genesys.conf.in
@@ -588,7 +809,13 @@ libgphoto2_i_la_CPPFLAGS = $(AM_CPPFLAGS) $(GPHOTO2_CPPFLAGS) -DBACKEND_NAME=gph
nodist_libsane_gphoto2_la_SOURCES = gphoto2-s.c
libsane_gphoto2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=gphoto2
libsane_gphoto2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_gphoto2_la_LIBADD = $(GPHOTO2_LDFLAGS) $(COMMON_LIBS) libgphoto2_i.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(SANEI_SANEI_JPEG_LO) $(GPHOTO2_LIBS) $(JPEG_LIBS)
+libsane_gphoto2_la_LIBADD = $(GPHOTO2_LDFLAGS) $(COMMON_LIBS) \
+ libgphoto2_i.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(SANEI_SANEI_JPEG_LO) $(GPHOTO2_LIBS) $(JPEG_LIBS)
EXTRA_DIST += gphoto2.conf.in
libgt68xx_la_SOURCES = gt68xx.c gt68xx.h
@@ -597,7 +824,14 @@ libgt68xx_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=gt68xx
nodist_libsane_gt68xx_la_SOURCES = gt68xx-s.c
libsane_gt68xx_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=gt68xx
libsane_gt68xx_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_gt68xx_la_LIBADD = $(COMMON_LIBS) libgt68xx.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_gt68xx_la_LIBADD = $(COMMON_LIBS) \
+ libgt68xx.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += gt68xx.conf.in
# TODO: Why are this distributed but not compiled?
EXTRA_DIST += gt68xx_devices.c gt68xx_generic.c gt68xx_generic.h gt68xx_gt6801.c gt68xx_gt6801.h gt68xx_gt6816.c gt68xx_gt6816.h gt68xx_high.c gt68xx_high.h gt68xx_low.c gt68xx_low.h gt68xx_mid.c gt68xx_mid.h gt68xx_shm_channel.c gt68xx_shm_channel.h
@@ -608,7 +842,18 @@ libhp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp
nodist_libsane_hp_la_SOURCES = hp-s.c
libsane_hp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp
libsane_hp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hp_la_LIBADD = $(COMMON_LIBS) libhp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_thread.lo $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_hp_la_LIBADD = $(COMMON_LIBS) \
+ libhp.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ ../sanei/sanei_config2.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_scsi.lo \
+ ../sanei/sanei_pio.lo \
+ ../sanei/sanei_thread.lo \
+ $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += hp.conf.in
# TODO: These should be moved to ../docs/hp; don't belong here.
EXTRA_DIST += hp.README hp.TODO
@@ -619,7 +864,15 @@ libhp3500_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp3500
nodist_libsane_hp3500_la_SOURCES = hp3500-s.c
libsane_hp3500_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp3500
libsane_hp3500_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hp3500_la_LIBADD = $(COMMON_LIBS) libhp3500.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_thread.lo $(MATH_LIB) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_hp3500_la_LIBADD = $(COMMON_LIBS) \
+ libhp3500.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_thread.lo \
+ $(MATH_LIB) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
libhp3900_la_SOURCES = hp3900.c
libhp3900_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp3900
@@ -627,7 +880,14 @@ libhp3900_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp3900
nodist_libsane_hp3900_la_SOURCES = hp3900-s.c
libsane_hp3900_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp3900
libsane_hp3900_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hp3900_la_LIBADD = $(COMMON_LIBS) libhp3900.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(TIFF_LIBS) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_hp3900_la_LIBADD = $(COMMON_LIBS) \
+ libhp3900.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(TIFF_LIBS) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += hp3900.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += hp3900_config.c hp3900_debug.c hp3900_rts8822.c hp3900_sane.c hp3900_types.c hp3900_usb.c
@@ -638,7 +898,15 @@ libhp4200_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp4200
nodist_libsane_hp4200_la_SOURCES = hp4200-s.c
libsane_hp4200_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp4200
libsane_hp4200_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hp4200_la_LIBADD = $(COMMON_LIBS) libhp4200.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_pv8630.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_hp4200_la_LIBADD = $(COMMON_LIBS) \
+ libhp4200.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_pv8630.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += hp4200.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += hp4200_lm9830.c hp4200_lm9830.h
@@ -649,7 +917,14 @@ libhp5400_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp5400
nodist_libsane_hp5400_la_SOURCES = hp5400-s.c
libsane_hp5400_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp5400
libsane_hp5400_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hp5400_la_LIBADD = $(COMMON_LIBS) libhp5400.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_hp5400_la_LIBADD = $(COMMON_LIBS) \
+ libhp5400.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)
EXTRA_DIST += hp5400.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += hp5400_debug.c hp5400_debug.h hp5400_internal.c hp5400_internal.h hp5400_sane.c hp5400_sanei.c hp5400_sanei.h hp5400_xfer.h
@@ -660,7 +935,14 @@ libhp5590_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp5590
nodist_libsane_hp5590_la_SOURCES = hp5590-s.c
libsane_hp5590_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hp5590
libsane_hp5590_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hp5590_la_LIBADD = $(COMMON_LIBS) libhp5590.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_hp5590_la_LIBADD = $(COMMON_LIBS) \
+ libhp5590.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)
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += hp5590_cmds.c hp5590_cmds.h hp5590_low.c hp5590_low.h
@@ -670,7 +952,14 @@ libhpljm1005_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hpljm1005
nodist_libsane_hpljm1005_la_SOURCES = hpljm1005-s.c
libsane_hpljm1005_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hpljm1005
libsane_hpljm1005_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hpljm1005_la_LIBADD = $(COMMON_LIBS) libhpljm1005.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_hpljm1005_la_LIBADD = $(COMMON_LIBS) \
+ libhpljm1005.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
libhpsj5s_la_SOURCES = hpsj5s.c hpsj5s.h
libhpsj5s_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hpsj5s
@@ -678,7 +967,13 @@ libhpsj5s_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hpsj5s
nodist_libsane_hpsj5s_la_SOURCES = hpsj5s-s.c
libsane_hpsj5s_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hpsj5s
libsane_hpsj5s_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hpsj5s_la_LIBADD = $(COMMON_LIBS) libhpsj5s.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(IEEE1284_LIBS)
+libsane_hpsj5s_la_LIBADD = $(COMMON_LIBS) \
+ libhpsj5s.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(IEEE1284_LIBS)
EXTRA_DIST += hpsj5s.conf.in
libhs2p_la_SOURCES = hs2p.c hs2p.h hs2p-saneopts.h
@@ -687,7 +982,15 @@ libhs2p_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hs2p
nodist_libsane_hs2p_la_SOURCES = hs2p-s.c
libsane_hs2p_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=hs2p
libsane_hs2p_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_hs2p_la_LIBADD = $(COMMON_LIBS) libhs2p.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_hs2p_la_LIBADD = $(COMMON_LIBS) \
+ libhs2p.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += hs2p.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += hs2p-scsi.c hs2p-scsi.h
@@ -698,7 +1001,15 @@ libibm_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=ibm
nodist_libsane_ibm_la_SOURCES = ibm-s.c
libsane_ibm_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=ibm
libsane_ibm_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_ibm_la_LIBADD = $(COMMON_LIBS) libibm.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_ibm_la_LIBADD = $(COMMON_LIBS) \
+ libibm.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += ibm.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += ibm-scsi.c
@@ -709,7 +1020,15 @@ libkodak_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kodak
nodist_libsane_kodak_la_SOURCES = kodak-s.c
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)
+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
@@ -718,7 +1037,18 @@ libkodakaio_la_CPPFLAGS = $(AM_CPPFLAGS) $(AVAHI_CFLAGS) -DBACKEND_NAME=kodakaio
nodist_libsane_kodakaio_la_SOURCES = kodakaio-s.c
libsane_kodakaio_la_CPPFLAGS = $(AM_CPPFLAGS) $(AVAHI_CFLAGS) -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) $(AVAHI_LIBS) $(MATH_LIB) $(RESMGR_LIBS)
+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) $(AVAHI_LIBS) $(MATH_LIB) $(RESMGR_LIBS)
EXTRA_DIST += kodakaio.conf.in
libkvs1025_la_SOURCES = kvs1025.c kvs1025_low.c kvs1025_opt.c kvs1025_usb.c \
@@ -728,7 +1058,15 @@ libkvs1025_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs1025
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 ../sanei/sanei_magic.lo $(MATH_LIB) $(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)
EXTRA_DIST += kvs1025.conf.in
libkvs20xx_la_SOURCES = kvs20xx.c kvs20xx_cmd.c kvs20xx_opt.c \
@@ -738,7 +1076,15 @@ libkvs20xx_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=kvs20xx
nodist_libsane_kvs20xx_la_SOURCES = kvs20xx-s.c
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)
+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
@@ -747,7 +1093,15 @@ 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)
+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
@@ -755,7 +1109,15 @@ libleo_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=leo
nodist_libsane_leo_la_SOURCES = leo-s.c
libsane_leo_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=leo
libsane_leo_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_leo_la_LIBADD = $(COMMON_LIBS) libleo.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_leo_la_LIBADD = $(COMMON_LIBS) \
+ libleo.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += leo.conf.in
liblexmark_la_SOURCES = lexmark.c lexmark.h lexmark_low.c
@@ -764,7 +1126,14 @@ liblexmark_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=lexmark
nodist_libsane_lexmark_la_SOURCES = lexmark-s.c
libsane_lexmark_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=lexmark
libsane_lexmark_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_lexmark_la_LIBADD = $(COMMON_LIBS) liblexmark.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_lexmark_la_LIBADD = $(COMMON_LIBS) \
+ liblexmark.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)
EXTRA_DIST += lexmark.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += lexmark_models.c lexmark_sensors.c
@@ -775,7 +1144,14 @@ libma1509_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=ma1509
nodist_libsane_ma1509_la_SOURCES = ma1509-s.c
libsane_ma1509_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=ma1509
libsane_ma1509_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_ma1509_la_LIBADD = $(COMMON_LIBS) libma1509.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_ma1509_la_LIBADD = $(COMMON_LIBS) \
+ libma1509.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)
EXTRA_DIST += ma1509.conf.in
libmagicolor_la_SOURCES = magicolor.c magicolor.h
@@ -784,7 +1160,18 @@ libmagicolor_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=magicolor $(SNMP_CFLAGS
nodist_libsane_magicolor_la_SOURCES = magicolor-s.c
libsane_magicolor_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=magicolor
libsane_magicolor_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_magicolor_la_LIBADD = $(COMMON_LIBS) libmagicolor.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) $(SNMP_LIBS)
+libsane_magicolor_la_LIBADD = $(COMMON_LIBS) \
+ libmagicolor.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) $(SNMP_LIBS)
EXTRA_DIST += magicolor.conf.in
libmatsushita_la_SOURCES = matsushita.c matsushita.h
@@ -793,7 +1180,15 @@ libmatsushita_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=matsushita
nodist_libsane_matsushita_la_SOURCES = matsushita-s.c
libsane_matsushita_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=matsushita
libsane_matsushita_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_matsushita_la_LIBADD = $(COMMON_LIBS) libmatsushita.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_matsushita_la_LIBADD = $(COMMON_LIBS) \
+ libmatsushita.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += matsushita.conf.in
libmicrotek_la_SOURCES = microtek.c microtek.h
@@ -802,7 +1197,15 @@ libmicrotek_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=microtek
nodist_libsane_microtek_la_SOURCES = microtek-s.c
libsane_microtek_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=microtek
libsane_microtek_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_microtek_la_LIBADD = $(COMMON_LIBS) libmicrotek.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) $(RESMGR_LIBS)
+libsane_microtek_la_LIBADD = $(COMMON_LIBS) \
+ libmicrotek.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) $(RESMGR_LIBS)
EXTRA_DIST += microtek.conf.in
libmicrotek2_la_SOURCES = microtek2.c microtek2.h
@@ -811,7 +1214,16 @@ libmicrotek2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=microtek2
nodist_libsane_microtek2_la_SOURCES = microtek2-s.c
libsane_microtek2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=microtek2
libsane_microtek2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_microtek2_la_LIBADD = $(COMMON_LIBS) libmicrotek2.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 ../sanei/sanei_thread.lo $(MATH_LIB) $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_microtek2_la_LIBADD = $(COMMON_LIBS) \
+ libmicrotek2.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 \
+ ../sanei/sanei_thread.lo \
+ $(MATH_LIB) $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += microtek2.conf.in
libmustek_la_SOURCES = mustek.c mustek.h
@@ -820,7 +1232,18 @@ libmustek_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=mustek
nodist_libsane_mustek_la_SOURCES = mustek-s.c
libsane_mustek_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=mustek
libsane_mustek_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_mustek_la_LIBADD = $(COMMON_LIBS) libmustek.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 ../sanei/sanei_thread.lo ../sanei/sanei_ab306.lo ../sanei/sanei_pa4s2.lo $(IEEE1284_LIBS) $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_mustek_la_LIBADD = $(COMMON_LIBS) \
+ libmustek.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 \
+ ../sanei/sanei_thread.lo \
+ ../sanei/sanei_ab306.lo \
+ ../sanei/sanei_pa4s2.lo \
+ $(IEEE1284_LIBS) $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += mustek.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += mustek_scsi_pp.c mustek_scsi_pp.h
@@ -831,7 +1254,14 @@ libmustek_pp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=mustek_pp
nodist_libsane_mustek_pp_la_SOURCES = mustek_pp-s.c
libsane_mustek_pp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=mustek_pp
libsane_mustek_pp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_mustek_pp_la_LIBADD = $(COMMON_LIBS) libmustek_pp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_pa4s2.lo $(MATH_LIB) $(IEEE1284_LIBS)
+libsane_mustek_pp_la_LIBADD = $(COMMON_LIBS) \
+ libmustek_pp.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_pa4s2.lo \
+ $(MATH_LIB) $(IEEE1284_LIBS)
EXTRA_DIST += mustek_pp.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += mustek_pp_ccd300.c mustek_pp_ccd300.h mustek_pp_cis.c mustek_pp_cis.h mustek_pp_null.c
@@ -842,7 +1272,14 @@ libmustek_usb_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=mustek_usb
nodist_libsane_mustek_usb_la_SOURCES = mustek_usb-s.c
libsane_mustek_usb_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=mustek_usb
libsane_mustek_usb_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_mustek_usb_la_LIBADD = $(COMMON_LIBS) libmustek_usb.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_mustek_usb_la_LIBADD = $(COMMON_LIBS) \
+ libmustek_usb.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)
EXTRA_DIST += mustek_usb.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += mustek_usb_high.c mustek_usb_high.h mustek_usb_low.c mustek_usb_low.h mustek_usb_mid.c mustek_usb_mid.h
@@ -853,7 +1290,14 @@ libmustek_usb2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=mustek_usb2
nodist_libsane_mustek_usb2_la_SOURCES = mustek_usb2-s.c
libsane_mustek_usb2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=mustek_usb2
libsane_mustek_usb2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_mustek_usb2_la_LIBADD = $(COMMON_LIBS) libmustek_usb2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(PTHREAD_LIBS) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_mustek_usb2_la_LIBADD = $(COMMON_LIBS) \
+ libmustek_usb2.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(PTHREAD_LIBS) $(USB_LIBS) $(RESMGR_LIBS)
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += mustek_usb2_asic.c mustek_usb2_asic.h mustek_usb2_high.c mustek_usb2_high.h mustek_usb2_reflective.c mustek_usb2_transparent.c
@@ -863,7 +1307,15 @@ libnec_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=nec
nodist_libsane_nec_la_SOURCES = nec-s.c
libsane_nec_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=nec
libsane_nec_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_nec_la_LIBADD = $(COMMON_LIBS) libnec.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) $(RESMGR_LIBS)
+libsane_nec_la_LIBADD = $(COMMON_LIBS) \
+ libnec.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) $(RESMGR_LIBS)
EXTRA_DIST += nec.conf.in
libnet_la_SOURCES = net.c net.h
@@ -872,7 +1324,16 @@ libnet_la_CPPFLAGS = $(AM_CPPFLAGS) $(AVAHI_CFLAGS) -DBACKEND_NAME=net
nodist_libsane_net_la_SOURCES = net-s.c
libsane_net_la_CPPFLAGS = $(AM_CPPFLAGS) $(AVAHI_CFLAGS) -DBACKEND_NAME=net
libsane_net_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_net_la_LIBADD = $(COMMON_LIBS) libnet.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_net.lo ../sanei/sanei_wire.lo ../sanei/sanei_codec_bin.lo $(AVAHI_LIBS) $(SOCKET_LIBS)
+libsane_net_la_LIBADD = $(COMMON_LIBS) \
+ libnet.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_net.lo \
+ ../sanei/sanei_wire.lo \
+ ../sanei/sanei_codec_bin.lo \
+ $(AVAHI_LIBS) $(SOCKET_LIBS)
EXTRA_DIST += net.conf.in
libniash_la_SOURCES = niash.c
@@ -881,7 +1342,14 @@ libniash_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=niash
nodist_libsane_niash_la_SOURCES = niash-s.c
libsane_niash_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=niash
libsane_niash_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_niash_la_LIBADD = $(COMMON_LIBS) libniash.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_niash_la_LIBADD = $(COMMON_LIBS) \
+ libniash.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += niash_core.c niash_core.h niash_xfer.c niash_xfer.h
@@ -891,7 +1359,16 @@ libpie_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pie
nodist_libsane_pie_la_SOURCES = pie-s.c
libsane_pie_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pie
libsane_pie_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_pie_la_LIBADD = $(COMMON_LIBS) libpie.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 ../sanei/sanei_thread.lo $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_pie_la_LIBADD = $(COMMON_LIBS) \
+ libpie.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 \
+ ../sanei/sanei_thread.lo \
+ $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += pie.conf.in
libpieusb_la_SOURCES = pieusb.h pieusb_buffer.c pieusb_buffer.h pieusb_scancmd.c pieusb_scancmd.h pieusb_specific.c pieusb_specific.h pieusb_usb.c pieusb_usb.h pieusb.c
@@ -900,7 +1377,19 @@ libpieusb_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pieusb
nodist_libsane_pieusb_la_SOURCES = pieusb-s.c
libsane_pieusb_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pieusb
libsane_pieusb_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_pieusb_la_LIBADD = $(COMMON_LIBS) libpieusb.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 ../sanei/sanei_thread.lo ../sanei/sanei_usb.lo ../sanei/sanei_ir.lo ../sanei/sanei_magic.lo $(SANEI_THREAD_LIBS) $(RESMGR_LIBS) $(USB_LIBS) $(MATH_LIB)
+libsane_pieusb_la_LIBADD = $(COMMON_LIBS) \
+ libpieusb.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 \
+ ../sanei/sanei_thread.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_ir.lo \
+ ../sanei/sanei_magic.lo \
+ $(SANEI_THREAD_LIBS) $(RESMGR_LIBS) $(USB_LIBS) $(MATH_LIB)
EXTRA_DIST += pieusb.conf.in
libp5_la_SOURCES = p5.c p5.h p5_device.h
@@ -909,7 +1398,13 @@ libp5_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=p5
nodist_libsane_p5_la_SOURCES = p5-s.c
libsane_p5_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=p5
libsane_p5_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_p5_la_LIBADD = $(COMMON_LIBS) libp5.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo
+libsane_p5_la_LIBADD = $(COMMON_LIBS) \
+ libp5.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo
+
EXTRA_DIST += p5.conf.in p5_device.c
libpint_la_SOURCES = pint.c pint.h
@@ -918,7 +1413,12 @@ libpint_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pint
nodist_libsane_pint_la_SOURCES = pint-s.c
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
+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/pixma.c \
pixma/pixma.h \
@@ -961,7 +1461,15 @@ CLEANFILES += pixma/pixma_sane_options.h
nodist_libsane_pixma_la_SOURCES = pixma-s.c
libsane_pixma_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pixma
libsane_pixma_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_pixma_la_LIBADD = $(COMMON_LIBS) libpixma.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_thread.lo $(SANEI_SANEI_JPEG_LO) $(JPEG_LIBS) $(XML_LIBS) $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_pixma_la_LIBADD = $(COMMON_LIBS) \
+ libpixma.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_thread.lo \
+ $(SANEI_SANEI_JPEG_LO) $(JPEG_LIBS) $(XML_LIBS) $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += pixma.conf.in
libplustek_la_SOURCES = plustek.c plustek.h
@@ -970,7 +1478,17 @@ libplustek_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=plustek
nodist_libsane_plustek_la_SOURCES = plustek-s.c
libsane_plustek_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=plustek
libsane_plustek_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_plustek_la_LIBADD = $(COMMON_LIBS) libplustek.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_thread.lo ../sanei/sanei_lm983x.lo ../sanei/sanei_access.lo $(MATH_LIB) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_plustek_la_LIBADD = $(COMMON_LIBS) \
+ libplustek.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_thread.lo \
+ ../sanei/sanei_lm983x.lo \
+ ../sanei/sanei_access.lo \
+ $(MATH_LIB) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += plustek.conf.in
EXTRA_DIST += plustek-usb.c plustek-usb.h plustek-usbcal.c plustek-usbcalfile.c plustek-usbdevs.c plustek-usbhw.c plustek-usbimg.c plustek-usbio.c plustek-usbmap.c plustek-usbscan.c plustek-usbshading.c
@@ -991,7 +1509,12 @@ libpnm_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pnm
nodist_libsane_pnm_la_SOURCES = pnm-s.c
libsane_pnm_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=pnm
libsane_pnm_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_pnm_la_LIBADD = $(COMMON_LIBS) libpnm.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo
+libsane_pnm_la_LIBADD = $(COMMON_LIBS) \
+ libpnm.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo
libqcam_la_SOURCES = qcam.c qcam.h
libqcam_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=qcam
@@ -999,7 +1522,14 @@ libqcam_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=qcam
nodist_libsane_qcam_la_SOURCES = qcam-s.c
libsane_qcam_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=qcam
libsane_qcam_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_qcam_la_LIBADD = $(COMMON_LIBS) libqcam.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_pio.lo
+libsane_qcam_la_LIBADD = $(COMMON_LIBS) \
+ libqcam.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_pio.lo
+
EXTRA_DIST += qcam.conf.in
libricoh_la_SOURCES = ricoh.c ricoh.h
@@ -1008,7 +1538,15 @@ libricoh_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=ricoh
nodist_libsane_ricoh_la_SOURCES = ricoh-s.c
libsane_ricoh_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=ricoh
libsane_ricoh_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_ricoh_la_LIBADD = $(COMMON_LIBS) libricoh.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_ricoh_la_LIBADD = $(COMMON_LIBS) \
+ libricoh.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += ricoh.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += ricoh-scsi.c
@@ -1019,7 +1557,14 @@ libricoh2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=ricoh2
nodist_libsane_ricoh2_la_SOURCES = ricoh2-s.c
libsane_ricoh2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=ricoh2
libsane_ricoh2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_ricoh2_la_LIBADD = $(COMMON_LIBS) libricoh2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_usb.lo ../sanei/sanei_config.lo sane_strstatus.lo $(USB_LIBS)
+libsane_ricoh2_la_LIBADD = $(COMMON_LIBS) \
+ libricoh2.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(USB_LIBS)
EXTRA_DIST += ricoh2_buffer.c
librts8891_la_SOURCES = rts8891.c rts8891.h rts88xx_lib.c rts88xx_lib.h
@@ -1028,7 +1573,15 @@ librts8891_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=rts8891
nodist_libsane_rts8891_la_SOURCES = rts8891-s.c
libsane_rts8891_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=rts8891
libsane_rts8891_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_rts8891_la_LIBADD = $(COMMON_LIBS) librts8891.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_scsi.lo ../sanei/sanei_usb.lo $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) $(RESMGR_LIBS)
+libsane_rts8891_la_LIBADD = $(COMMON_LIBS) \
+ librts8891.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_scsi.lo \
+ ../sanei/sanei_usb.lo \
+ $(SCSI_LIBS) $(USB_LIBS) $(RESMGR_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += rts8891.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += rts8891_devices.c rts8891_low.c rts8891_low.h
@@ -1039,7 +1592,15 @@ libs9036_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=s9036
nodist_libsane_s9036_la_SOURCES = s9036-s.c
libsane_s9036_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=s9036
libsane_s9036_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_s9036_la_LIBADD = $(COMMON_LIBS) libs9036.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_s9036_la_LIBADD = $(COMMON_LIBS) \
+ libs9036.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += s9036.conf.in
libsceptre_la_SOURCES = sceptre.c sceptre.h
@@ -1048,7 +1609,15 @@ libsceptre_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sceptre
nodist_libsane_sceptre_la_SOURCES = sceptre-s.c
libsane_sceptre_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sceptre
libsane_sceptre_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_sceptre_la_LIBADD = $(COMMON_LIBS) libsceptre.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_sceptre_la_LIBADD = $(COMMON_LIBS) \
+ libsceptre.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += sceptre.conf.in
libsharp_la_SOURCES = sharp.c sharp.h
@@ -1057,7 +1626,15 @@ libsharp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sharp
nodist_libsane_sharp_la_SOURCES = sharp-s.c
libsane_sharp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sharp
libsane_sharp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_sharp_la_LIBADD = $(COMMON_LIBS) libsharp.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) $(RESMGR_LIBS)
+libsane_sharp_la_LIBADD = $(COMMON_LIBS) \
+ libsharp.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) $(RESMGR_LIBS)
EXTRA_DIST += sharp.conf.in
libsm3600_la_SOURCES = sm3600.c sm3600.h
@@ -1066,7 +1643,14 @@ libsm3600_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sm3600
nodist_libsane_sm3600_la_SOURCES = sm3600-s.c
libsane_sm3600_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sm3600
libsane_sm3600_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_sm3600_la_LIBADD = $(COMMON_LIBS) libsm3600.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_sm3600_la_LIBADD = $(COMMON_LIBS) \
+ libsm3600.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)
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += sm3600-color.c sm3600-gray.c sm3600-homerun.c sm3600-scanmtek.c sm3600-scantool.h sm3600-scanusb.c sm3600-scanutil.c
@@ -1076,7 +1660,14 @@ libsm3840_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sm3840
nodist_libsane_sm3840_la_SOURCES = sm3840-s.c
libsane_sm3840_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sm3840
libsane_sm3840_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_sm3840_la_LIBADD = $(COMMON_LIBS) libsm3840.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_sm3840_la_LIBADD = $(COMMON_LIBS) \
+ libsm3840.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += sm3840.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += sm3840_lib.c sm3840_lib.h sm3840_scan.c
@@ -1087,7 +1678,17 @@ libsnapscan_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=snapscan
nodist_libsane_snapscan_la_SOURCES = snapscan-s.c
libsane_snapscan_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=snapscan
libsane_snapscan_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_snapscan_la_LIBADD = $(COMMON_LIBS) libsnapscan.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_thread.lo ../sanei/sanei_scsi.lo $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_snapscan_la_LIBADD = $(COMMON_LIBS) \
+ libsnapscan.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_thread.lo \
+ ../sanei/sanei_scsi.lo \
+ $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += snapscan.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += snapscan-data.c snapscan-mutex.c snapscan-options.c snapscan-scsi.c snapscan-sources.c snapscan-sources.h snapscan-usb.c snapscan-usb.h
@@ -1098,16 +1699,34 @@ libsp15c_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sp15c
nodist_libsane_sp15c_la_SOURCES = sp15c-s.c
libsane_sp15c_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=sp15c
libsane_sp15c_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_sp15c_la_LIBADD = $(COMMON_LIBS) libsp15c.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_thread.lo ../sanei/sanei_scsi.lo $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_sp15c_la_LIBADD = $(COMMON_LIBS) \
+ libsp15c.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ ../sanei/sanei_config2.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_thread.lo \
+ ../sanei/sanei_scsi.lo \
+ $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += sp15c.conf.in
libst400_la_SOURCES = st400.c st400.h
libst400_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=st400
nodist_libsane_st400_la_SOURCES = st400-s.c ../sanei/sanei_scsi.lo
+
libsane_st400_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=st400
libsane_st400_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_st400_la_LIBADD = $(COMMON_LIBS) libst400.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_st400_la_LIBADD = $(COMMON_LIBS) \
+ libst400.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += st400.conf.in
libstv680_la_SOURCES = stv680.c stv680.h
@@ -1116,7 +1735,14 @@ libstv680_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=stv680
nodist_libsane_stv680_la_SOURCES = stv680-s.c
libsane_stv680_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=stv680
libsane_stv680_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_stv680_la_LIBADD = $(COMMON_LIBS) libstv680.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_stv680_la_LIBADD = $(COMMON_LIBS) \
+ libstv680.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)
EXTRA_DIST += stv680.conf.in
libtamarack_la_SOURCES = tamarack.c tamarack.h
@@ -1125,7 +1751,16 @@ libtamarack_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=tamarack
nodist_libsane_tamarack_la_SOURCES = tamarack-s.c
libsane_tamarack_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=tamarack
libsane_tamarack_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_tamarack_la_LIBADD = $(COMMON_LIBS) libtamarack.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_thread.lo ../sanei/sanei_scsi.lo $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_tamarack_la_LIBADD = $(COMMON_LIBS) \
+ libtamarack.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ ../sanei/sanei_config2.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_thread.lo \
+ ../sanei/sanei_scsi.lo \
+ $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += tamarack.conf.in
libtest_la_SOURCES = test.c test.h
@@ -1134,7 +1769,14 @@ libtest_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=test
nodist_libsane_test_la_SOURCES = test-s.c
libsane_test_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=test
libsane_test_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_test_la_LIBADD = $(COMMON_LIBS) libtest.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_thread.lo $(SANEI_THREAD_LIBS)
+libsane_test_la_LIBADD = $(COMMON_LIBS) \
+ libtest.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_thread.lo \
+ $(SANEI_THREAD_LIBS)
EXTRA_DIST += test.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += test-picture.c
@@ -1145,7 +1787,15 @@ libteco1_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=teco1
nodist_libsane_teco1_la_SOURCES = teco1-s.c
libsane_teco1_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=teco1
libsane_teco1_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_teco1_la_LIBADD = $(COMMON_LIBS) libteco1.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_teco1_la_LIBADD = $(COMMON_LIBS) \
+ libteco1.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += teco1.conf.in
libteco2_la_SOURCES = teco2.c teco2.h
@@ -1154,7 +1804,15 @@ libteco2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=teco2
nodist_libsane_teco2_la_SOURCES = teco2-s.c
libsane_teco2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=teco2
libsane_teco2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_teco2_la_LIBADD = $(COMMON_LIBS) libteco2.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_teco2_la_LIBADD = $(COMMON_LIBS) \
+ libteco2.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += teco2.conf.in
libteco3_la_SOURCES = teco3.c teco3.h
@@ -1163,7 +1821,15 @@ libteco3_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=teco3
nodist_libsane_teco3_la_SOURCES = teco3-s.c
libsane_teco3_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=teco3
libsane_teco3_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_teco3_la_LIBADD = $(COMMON_LIBS) libteco3.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 $(SCSI_LIBS) $(RESMGR_LIBS)
+libsane_teco3_la_LIBADD = $(COMMON_LIBS) \
+ libteco3.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 \
+ $(SCSI_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += teco3.conf.in
libu12_la_SOURCES = u12.c u12.h
@@ -1172,7 +1838,15 @@ libu12_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=u12
nodist_libsane_u12_la_SOURCES = u12-s.c
libsane_u12_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=u12
libsane_u12_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_u12_la_LIBADD = $(COMMON_LIBS) libu12.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_thread.lo $(MATH_LIB) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_u12_la_LIBADD = $(COMMON_LIBS) \
+ libu12.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_thread.lo \
+ $(MATH_LIB) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += u12.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += u12-ccd.c u12-hw.c u12-hwdef.h u12-if.c u12-image.c u12-io.c u12-map.c u12-motor.c u12-scanner.h u12-shading.c u12-tpa.c
@@ -1183,7 +1857,18 @@ libumax_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=umax
nodist_libsane_umax_la_SOURCES = umax-s.c
libsane_umax_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=umax
libsane_umax_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_umax_la_LIBADD = $(COMMON_LIBS) libumax.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_thread.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pv8630.lo $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
+libsane_umax_la_LIBADD = $(COMMON_LIBS) \
+ libumax.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_thread.lo \
+ ../sanei/sanei_scsi.lo \
+ ../sanei/sanei_pv8630.lo \
+ $(MATH_LIB) $(SCSI_LIBS) $(USB_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += umax.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += umax-scanner.c umax-scanner.h umax-scsidef.h umax-uc1200s.c umax-uc1200se.c umax-uc1260.c umax-uc630.c umax-uc840.c umax-ug630.c umax-ug80.c umax-usb.c
@@ -1194,7 +1879,15 @@ libumax1220u_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=umax1220u
nodist_libsane_umax1220u_la_SOURCES = umax1220u-s.c
libsane_umax1220u_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=umax1220u
libsane_umax1220u_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_umax1220u_la_LIBADD = $(COMMON_LIBS) libumax1220u.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_pv8630.lo $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
+libsane_umax1220u_la_LIBADD = $(COMMON_LIBS) \
+ libumax1220u.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ ../sanei/sanei_usb.lo \
+ ../sanei/sanei_pv8630.lo \
+ $(MATH_LIB) $(USB_LIBS) $(RESMGR_LIBS)
EXTRA_DIST += umax1220u.conf.in
# TODO: Why are these distributed but not compiled?
EXTRA_DIST += umax1220u-common.c
@@ -1205,7 +1898,13 @@ libumax_pp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=umax_pp
nodist_libsane_umax_pp_la_SOURCES = umax_pp-s.c
libsane_umax_pp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=umax_pp
libsane_umax_pp_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_umax_pp_la_LIBADD = $(COMMON_LIBS) libumax_pp.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(MATH_LIB)
+libsane_umax_pp_la_LIBADD = $(COMMON_LIBS) \
+ libumax_pp.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(MATH_LIB)
EXTRA_DIST += umax_pp.conf.in
libv4l_la_SOURCES = v4l.c v4l.h v4l-frequencies.h
@@ -1214,7 +1913,13 @@ libv4l_la_CPPFLAGS = $(AM_CPPFLAGS) $(LIBV4L_CFLAGS) -DBACKEND_NAME=v4l
nodist_libsane_v4l_la_SOURCES = v4l-s.c
libsane_v4l_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=v4l
libsane_v4l_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS)
-libsane_v4l_la_LIBADD = $(COMMON_LIBS) libv4l.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(LIBV4L_LIBS)
+libsane_v4l_la_LIBADD = $(COMMON_LIBS) \
+ libv4l.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(LIBV4L_LIBS)
EXTRA_DIST += v4l.conf.in
libxerox_mfp_la_SOURCES = xerox_mfp.c xerox_mfp-usb.c xerox_mfp-tcp.c xerox_mfp.h
@@ -1223,22 +1928,38 @@ libxerox_mfp_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=xerox_mfp
nodist_libsane_xerox_mfp_la_SOURCES = xerox_mfp-s.c
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_JPEG_LO@ $(JPEG_LIBS) ../sanei/sanei_usb.lo ../sanei/sanei_tcp.lo $(MATH_LIB) $(SOCKET_LIBS) $(USB_LIBS) $(RESMGR_LIBS)
+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_JPEG_LO@ $(JPEG_LIBS) ../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_preload_la_LIBADD = ../sanei/sanei_usb.lo $(USB_LIBS) $(XML_LIBS)
+libdll_preload_la_LIBADD = ../sanei/sanei_usb.lo \
+ $(USB_LIBS) $(XML_LIBS)
libdll_la_SOURCES = dll.c
libdll_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=dll
-libdll_la_LIBADD = ../sanei/sanei_usb.lo $(USB_LIBS) $(XML_LIBS)
+libdll_la_LIBADD = ../sanei/sanei_usb.lo \
+ $(USB_LIBS) $(XML_LIBS)
BUILT_SOURCES = dll-preload.h
CLEANFILES += 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)
-libsane_dll_la_LIBADD = $(COMMON_LIBS) libdll.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo sane_strstatus.lo $(DL_LIBS)
+libsane_dll_la_LIBADD = $(COMMON_LIBS) \
+ libdll.la \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ sane_strstatus.lo \
+ $(DL_LIBS)
EXTRA_DIST += dll.conf.in
# TODO: Why is this distributed but not installed?
EXTRA_DIST += dll.aliases
@@ -1262,13 +1983,76 @@ EXTRA_DIST += dll.aliases
# what backends are preloaded. It should include what is needed by
# those backends that are actually preloaded.
if preloadable_backends_enabled
-PRELOADABLE_BACKENDS_LIBS = ../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 $(LIBV4L_LIBS) $(MATH_LIB) $(IEEE1284_LIBS) $(TIFF_LIBS) $(JPEG_LIBS) $(GPHOTO2_LIBS) $(SOCKET_LIBS) $(USB_LIBS) $(AVAHI_LIBS) $(SCSI_LIBS) $(SANEI_THREAD_LIBS) $(RESMGR_LIBS) $(PNG_LIBS) $(POPPLER_GLIB_LIBS) $(XML_LIBS) $(libcurl_LIBS) $(SNMP_LIBS)
-PRELOADABLE_BACKENDS_DEPS = ../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)
+PRELOADABLE_BACKENDS_LIBS = \
+ ../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 \
+ $(LIBV4L_LIBS) $(MATH_LIB) \
+ $(IEEE1284_LIBS) \
+ $(TIFF_LIBS) \
+ $(JPEG_LIBS) \
+ $(GPHOTO2_LIBS) \
+ $(SOCKET_LIBS) \
+ $(USB_LIBS) \
+ $(AVAHI_LIBS) \
+ $(SCSI_LIBS) \
+ $(SANEI_THREAD_LIBS) \
+ $(RESMGR_LIBS) \
+ $(PNG_LIBS) \
+ $(POPPLER_GLIB_LIBS) \
+ $(XML_LIBS) \
+ $(libcurl_LIBS) \
+ $(SNMP_LIBS)
+
+PRELOADABLE_BACKENDS_DEPS = ../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)
endif
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_preload.la sane_strstatus.lo ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo $(PRELOADABLE_BACKENDS_LIBS) $(DL_LIBS) $(XML_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 \
+ $(PRELOADABLE_BACKENDS_LIBS) $(DL_LIBS) $(XML_LIBS)
# WARNING: Automake is getting this wrong so have to do it ourselves.
-libsane_la_DEPENDENCIES = ../lib/liblib.la $(PRELOADABLE_BACKENDS_ENABLED) libdll_preload.la sane_strstatus.lo ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo $(PRELOADABLE_BACKENDS_DEPS)
+libsane_la_DEPENDENCIES = ../lib/liblib.la \
+ $(PRELOADABLE_BACKENDS_ENABLED) libdll_preload.la \
+ sane_strstatus.lo \
+ ../sanei/sanei_init_debug.lo \
+ ../sanei/sanei_constrain_value.lo \
+ ../sanei/sanei_config.lo \
+ $(PRELOADABLE_BACKENDS_DEPS)
diff --git a/backend/abaton.c b/backend/abaton.c
index d5968cc..06e60f1 100644
--- a/backend/abaton.c
+++ b/backend/abaton.c
@@ -855,7 +855,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG_INIT ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (ABATON_CONFIG_FILE);
if (!fp)
diff --git a/backend/agfafocus.c b/backend/agfafocus.c
index 71fcf30..d972f59 100644
--- a/backend/agfafocus.c
+++ b/backend/agfafocus.c
@@ -1287,7 +1287,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
sanei_thread_init ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open ("agfafocus.conf");
if (!fp)
diff --git a/backend/apple.c b/backend/apple.c
index 328fd1e..7b37248 100644
--- a/backend/apple.c
+++ b/backend/apple.c
@@ -1871,7 +1871,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG_INIT ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (APPLE_CONFIG_FILE);
if (!fp)
diff --git a/backend/artec.c b/backend/artec.c
index 355e78e..ea211eb 100644
--- a/backend/artec.c
+++ b/backend/artec.c
@@ -2591,7 +2591,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
strcpy (artec_model, "");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
if (authorize)
DBG (7, "sane_init(), authorize %s null\n", (authorize) ? "!=" : "==");
diff --git a/backend/artec_eplus48u.c b/backend/artec_eplus48u.c
index 4c15673..a4a3c24 100644
--- a/backend/artec_eplus48u.c
+++ b/backend/artec_eplus48u.c
@@ -4458,7 +4458,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
auth = authorize;
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (ARTEC48U_CONFIG_FILE);
diff --git a/backend/as6e.c b/backend/as6e.c
index f7c0e81..7655777 100644
--- a/backend/as6e.c
+++ b/backend/as6e.c
@@ -626,7 +626,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG_INIT ();
DBG (2, "sane_init (authorize %s null)\n", (authorize) ? "!=" : "==");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
/* fp = sanei_config_open (AS6E_CONFIG_FILE);*/
if (!fp)
{
diff --git a/backend/avision.c b/backend/avision.c
index e047a7f..b81578a 100644
--- a/backend/avision.c
+++ b/backend/avision.c
@@ -2013,6 +2013,102 @@ static void debug_print_window_descriptor (int dbg_level, char* func,
func, window->avision.type.normal.background_lines);
}
+static SANE_String_Const
+avision_strdatatypecode (uint8_t datatypecode)
+{
+ static char buf[80];
+
+ switch (datatypecode)
+ {
+ case AVISION_DATATYPECODE_LIGHT_STATUS:
+ return "Light status";
+ case AVISION_DATATYPECODE_POWER_SAVING_TIMER:
+ return "Power saving timer";
+ case AVISION_DATATYPECODE_FIRMWARE_STATUS:
+ return "Firmware status";
+ case AVISION_DATATYPECODE_FLASH_RAM_INFO:
+ return "Flash RAM info";
+ case AVISION_DATATYPECODE_READ_NVRAM_DATA:
+ return "Read NVRAM data";
+ case AVISION_DATATYPECODE_SEND_NVRAM_DATA:
+ return "Send NVRAM data";
+ case AVISION_DATATYPECODE_FLASH_DATA:
+ return "Flash data";
+ case AVISION_DATATYPECODE_UNKNOWN:
+ return "Unknown";
+ case AVISION_DATATYPECODE_DETECT_ACCESSORIES:
+ return "Detect accessories";
+ case AVISION_DATATYPECODE_BUTTON_STATUS:
+ return "Button status";
+ case AVISION_DATATYPECODE_FILM_HOLDER_SENSE:
+ return "Film holder sense";
+ case AVISION_DATATYPECODE_READ_DUPLEX_INFO:
+ return "Read duplex info";
+ case AVISION_DATATYPECODE_READ_GENERAL_ABILITY_PARAM:
+ return "Read general ability/parameter";
+ case AVISION_DATATYPECODE_ATTACH_TRUNCATE_HEAD:
+ return "Attach/Truncate head (left) of scan length";
+ case AVISION_DATATYPECODE_ATTACH_TRUNCATE_TAIL:
+ return "Attach/Truncate tail (right) of scan length";
+ case AVISION_DATATYPECODE_GET_CALIBRATION_FORMAT:
+ return "Get calibration format";
+ case AVISION_DATATYPECODE_DOWNLOAD_GAMMA_TABLE:
+ return "Download gamma table";
+ case AVISION_DATATYPECODE_3X3_COLOR_MATRIX:
+ return "3x3 color matrix";
+ case AVISION_DATATYPECODE_ACCELERATION_TABLE:
+ return "Acceleration table";
+ case AVISION_DATATYPECODE_GET_BACKGROUND_RASTER:
+ return "Get background raster";
+ case AVISION_DATATYPECODE_READ_IMAGE_DATA:
+ return "Read image data";
+ default:
+ /* non-reentrant, but better than nothing */
+ sprintf (buf, "Unknown data type code %02X", datatypecode);
+ return buf;
+ }
+}
+
+static int
+avision_strcmd (SANE_String buffer, size_t size, const void* cmd)
+{
+ const uint8_t* m_cmd = (const uint8_t*)cmd;
+ uint8_t opc = m_cmd[0];
+ uint8_t datatypecode = m_cmd[2];
+
+ switch (opc)
+ {
+ case AVISION_SCSI_TEST_UNIT_READY:
+ return snprintf (buffer, size, "Test unit ready");
+ case AVISION_SCSI_REQUEST_SENSE:
+ return snprintf (buffer, size, "Request sense");
+ case AVISION_SCSI_MEDIA_CHECK:
+ return snprintf (buffer, size, "Media check");
+ case AVISION_SCSI_INQUIRY:
+ return snprintf (buffer, size, "Inquiry");
+ case AVISION_SCSI_MODE_SELECT:
+ return snprintf (buffer, size, "Mode select");
+ case AVISION_SCSI_RESERVE_UNIT:
+ return snprintf (buffer, size, "Reserve unit");
+ case AVISION_SCSI_RELEASE_UNIT:
+ return snprintf (buffer, size, "Release unit");
+ case AVISION_SCSI_SCAN:
+ return snprintf (buffer, size, "Scan");
+ case AVISION_SCSI_SET_WINDOW:
+ return snprintf (buffer, size, "Set window");
+ case AVISION_SCSI_READ:
+ return snprintf (buffer, size, "Read (%s)", avision_strdatatypecode (datatypecode));
+ case AVISION_SCSI_SEND:
+ return snprintf (buffer, size, "Send (%s)", avision_strdatatypecode (datatypecode));
+ case AVISION_SCSI_OBJECT_POSITION:
+ return snprintf (buffer, size, "Object position");
+ case AVISION_SCSI_GET_DATA_STATUS:
+ return snprintf (buffer, size, "Get data status");
+ default:
+ return snprintf (buffer, size, "Unknown OPC %d", opc);
+ }
+}
+
static int write_pnm_header (FILE* f, color_mode m, int depth, int width, int height)
{
int maxval = (1 << depth) - 1;
@@ -2378,6 +2474,9 @@ static SANE_Status avision_cmd (Avision_Connection* av_con,
const void* src, size_t src_size,
void* dst, size_t* dst_size)
{
+ SANE_Char strcmd[80];
+ avision_strcmd (strcmd, sizeof (strcmd), cmd);
+ DBG (7, "avision_cmd: %s\n", strcmd);
if (av_con->connection_type == AV_SCSI) {
return sanei_scsi_cmd2 (av_con->scsi_fd, cmd, cmd_size,
src, src_size, dst, dst_size);
@@ -3224,7 +3323,7 @@ wait_4_light (Avision_Scanner* s)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0xa0; /* get light status */
+ rcmd.datatypecode = AVISION_DATATYPECODE_LIGHT_STATUS; /* get light status */
set_double (rcmd.datatypequal, dev->data_dq);
set_triple (rcmd.transferlen, size);
@@ -3263,7 +3362,7 @@ wait_4_light (Avision_Scanner* s)
memset (&scmd, 0, sizeof (scmd));
scmd.opc = AVISION_SCSI_SEND;
- scmd.datatypecode = 0xa0; /* send light status */
+ scmd.datatypecode = AVISION_DATATYPECODE_LIGHT_STATUS; /* send light status */
set_double (scmd.datatypequal, dev->data_dq);
set_triple (scmd.transferlen, size);
@@ -3297,7 +3396,7 @@ set_power_save_time (Avision_Scanner* s, int time)
memset (&scmd, 0, sizeof (scmd));
scmd.cmd.opc = AVISION_SCSI_SEND;
- scmd.cmd.datatypecode = 0xA2; /* power-saving timer */
+ scmd.cmd.datatypecode = AVISION_DATATYPECODE_POWER_SAVING_TIMER; /* power-saving timer */
set_double (scmd.cmd.datatypequal, dev->data_dq);
set_triple (scmd.cmd.transferlen, sizeof (scmd.time) );
@@ -3327,7 +3426,7 @@ get_firmware_status (Avision_Connection* av_con)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x90; /* firmware status */
+ rcmd.datatypecode = AVISION_DATATYPECODE_FIRMWARE_STATUS; /* firmware status */
set_double (rcmd.datatypequal, 0); /* dev->data_dq not available */
set_triple (rcmd.transferlen, size);
@@ -3364,7 +3463,7 @@ get_flash_ram_info (Avision_Connection* av_con)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x6a; /* flash ram information */
+ rcmd.datatypecode = AVISION_DATATYPECODE_FLASH_RAM_INFO; /* flash ram information */
set_double (rcmd.datatypequal, 0); /* dev->data_dq not available */
set_triple (rcmd.transferlen, size);
@@ -3433,7 +3532,7 @@ get_nvram_data (Avision_Scanner* s, nvram_data* nvram)
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x69; /* Read NVM RAM data */
+ rcmd.datatypecode = AVISION_DATATYPECODE_READ_NVRAM_DATA; /* Read NVM RAM data */
set_double (rcmd.datatypequal, 0); /* dev->data_dq not available */
set_triple (rcmd.transferlen, size);
@@ -3547,7 +3646,7 @@ send_nvram_data (Avision_Connection* av_con)
memset (&scmd, 0, sizeof (scmd));
scmd.opc = AVISION_SCSI_SEND;
- scmd.datatypecode = 0x85; /* nvram data */
+ scmd.datatypecode = AVISION_DATATYPECODE_SEND_NVRAM_DATA; /* nvram data */
set_double (scmd.datatypequal, 0); /* dev->data_dq not available */
set_triple (scmd.transferlen, size);
@@ -3577,7 +3676,7 @@ send_flash_ram_data (Avision_Connection* av_con)
memset (&scmd, 0, sizeof (scmd));
scmd.opc = AVISION_SCSI_SEND;
- scmd.datatypecode = 0x86; /* flash data */
+ scmd.datatypecode = AVISION_DATATYPECODE_FLASH_DATA; /* flash data */
set_double (scmd.datatypequal, 0);
set_triple (scmd.transferlen, size);
@@ -3613,7 +3712,7 @@ adf_reset (Avision_Scanner* s)
memset (&scmd, 0, sizeof (scmd));
memset (&payload, 0, sizeof (payload));
scmd.opc = AVISION_SCSI_SEND;
- scmd.datatypecode = 0xD0; /* unknown */
+ scmd.datatypecode = AVISION_DATATYPECODE_UNKNOWN; /* unknown */
set_double (scmd.datatypequal, 0);
size = 2;
set_triple (scmd.transferlen, size);
@@ -3629,7 +3728,7 @@ adf_reset (Avision_Scanner* s)
memset (&rcmd, 0, sizeof (rcmd));
memset (&payload, 0, sizeof (payload));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x69; /* Read NVRAM data */
+ rcmd.datatypecode = AVISION_DATATYPECODE_READ_NVRAM_DATA; /* Read NVRAM data */
set_double (rcmd.datatypequal, dev->data_dq);
size = 4 - i; /* read 3 bytes the first time, 4 the second */
set_triple (rcmd.transferlen, size);
@@ -3668,7 +3767,7 @@ get_accessories_info (Avision_Scanner* s)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x64; /* detect accessories */
+ rcmd.datatypecode = AVISION_DATATYPECODE_DETECT_ACCESSORIES; /* detect accessories */
set_double (rcmd.datatypequal, dev->data_dq);
set_triple (rcmd.transferlen, size);
@@ -3825,7 +3924,7 @@ get_button_status (Avision_Scanner* s)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0xA1; /* button status */
+ rcmd.datatypecode = AVISION_DATATYPECODE_BUTTON_STATUS; /* button status */
set_double (rcmd.datatypequal, dev->data_dq);
set_triple (rcmd.transferlen, size);
@@ -3927,7 +4026,7 @@ get_button_status (Avision_Scanner* s)
memset (&scmd, 0, sizeof (scmd));
scmd.opc = AVISION_SCSI_SEND;
- scmd.datatypecode = 0xA1; /* button control */
+ scmd.datatypecode = AVISION_DATATYPECODE_BUTTON_STATUS; /* button control */
set_double (scmd.datatypequal, dev->data_dq);
set_triple (scmd.transferlen, size);
@@ -3984,7 +4083,7 @@ get_frame_info (Avision_Scanner* s)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x87; /* film holder sense */
+ rcmd.datatypecode = AVISION_DATATYPECODE_FILM_HOLDER_SENSE; /* film holder sense */
set_double (rcmd.datatypequal, dev->data_dq);
set_triple (rcmd.transferlen, size);
@@ -4051,7 +4150,7 @@ get_duplex_info (Avision_Scanner* s)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0xB1; /* read duplex info */
+ rcmd.datatypecode = AVISION_DATATYPECODE_READ_DUPLEX_INFO; /* read duplex info */
set_double (rcmd.datatypequal, dev->data_dq);
set_triple (rcmd.transferlen, size);
@@ -4117,7 +4216,7 @@ set_frame (Avision_Scanner* s, SANE_Word frame)
memset (&scmd, 0, sizeof (scmd));
scmd.cmd.opc = AVISION_SCSI_SEND;
- scmd.cmd.datatypecode = 0x87; /* send film holder "sense" */
+ scmd.cmd.datatypecode = AVISION_DATATYPECODE_FILM_HOLDER_SENSE; /* send film holder "sense" */
set_double (scmd.cmd.datatypequal, dev->data_dq);
set_triple (scmd.cmd.transferlen, sizeof (scmd.data) );
@@ -4817,7 +4916,7 @@ get_tune_scan_length (Avision_Scanner* s)
size = sizeof (payload);
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0xD2; /* Read General Ability/Parameter */
+ rcmd.datatypecode = AVISION_DATATYPECODE_READ_GENERAL_ABILITY_PARAM; /* Read General Ability/Parameter */
for (i = 1; i <= 8; ++i) {
memset (&payload, 0, sizeof (payload));
@@ -4860,7 +4959,7 @@ send_tune_scan_length (Avision_Scanner* s)
size = sizeof (payload);
scmd.opc = AVISION_SCSI_SEND;
- scmd.datatypecode = 0x96; /* Attach/Truncate head(left) of scan length */
+ scmd.datatypecode = AVISION_DATATYPECODE_ATTACH_TRUNCATE_HEAD; /* Attach/Truncate head(left) of scan length */
set_triple (scmd.transferlen, size);
/* the SPEC says optical DPI, but real world measuring suggests it is 1200
@@ -4907,7 +5006,7 @@ send_tune_scan_length (Avision_Scanner* s)
return status;
}
- scmd.datatypecode = 0x95; /* Attach/Truncate tail(right) of scan length */
+ scmd.datatypecode = AVISION_DATATYPECODE_ATTACH_TRUNCATE_TAIL; /* Attach/Truncate tail(right) of scan length */
bottom = dpi * SANE_UNFIX (s->val[OPT_OVERSCAN_BOTTOM].w) / MM_PER_INCH;
DBG (3, "send_tune_scan_length: bottom: %d\n", bottom);
@@ -5055,7 +5154,7 @@ get_calib_format (Avision_Scanner* s, struct calibration_format* format)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x60; /* get calibration format */
+ rcmd.datatypecode = AVISION_DATATYPECODE_GET_CALIBRATION_FORMAT; /* get calibration format */
set_double (rcmd.datatypequal, s->hw->data_dq);
set_triple (rcmd.transferlen, size);
@@ -5720,7 +5819,7 @@ send_gamma (Avision_Scanner* s)
memset (&scmd, 0, sizeof (scmd) );
scmd.opc = AVISION_SCSI_SEND;
- scmd.datatypecode = 0x81; /* 0x81 for download gamma table */
+ scmd.datatypecode = AVISION_DATATYPECODE_DOWNLOAD_GAMMA_TABLE; /* 0x81 for download gamma table */
set_triple (scmd.transferlen, gamma_table_raw_size);
for (color = 0; color < 3 && status == SANE_STATUS_GOOD; ++ color)
@@ -5872,7 +5971,7 @@ send_3x3_matrix (Avision_Scanner* s)
}
cmd.scmd.opc = AVISION_SCSI_SEND;
- cmd.scmd.datatypecode = 0x83; /* 0x83 for 3x3 color matrix */
+ cmd.scmd.datatypecode = AVISION_DATATYPECODE_3X3_COLOR_MATRIX; /* 0x83 for 3x3 color matrix */
set_triple (cmd.scmd.transferlen, sizeof (struct matrix_3x3));
if (1) {
@@ -5903,7 +6002,7 @@ get_acceleration_info (Avision_Scanner* s, struct acceleration_info* info)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x6c; /* get acceleration information */
+ rcmd.datatypecode = AVISION_DATATYPECODE_ACCELERATION_TABLE; /* get acceleration information */
set_double (rcmd.datatypequal, s->hw->data_dq);
set_triple (rcmd.transferlen, size);
@@ -5967,7 +6066,7 @@ send_acceleration_table (Avision_Scanner* s)
memset (&scmd, 0x00, sizeof (scmd));
scmd.opc = AVISION_SCSI_SEND;
- scmd.datatypecode = 0x6c; /* send acceleration table */
+ scmd.datatypecode = AVISION_DATATYPECODE_ACCELERATION_TABLE; /* send acceleration table */
set_double (scmd.datatypequal, table);
set_triple (scmd.transferlen, accel_info.total_steps);
@@ -6393,7 +6492,7 @@ get_background_raster (Avision_Scanner* s)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x9b; /* get background raster */
+ rcmd.datatypecode = AVISION_DATATYPECODE_GET_BACKGROUND_RASTER; /* get background raster */
set_double (rcmd.datatypequal, s->hw->data_dq);
/* Ok, well - this part is very messy. The AV122 and DM152 appear to
@@ -6792,6 +6891,11 @@ do_cancel (Avision_Scanner* s)
DBG (1, "do_cancel: release_unit failed\n");
}
+ DBG (4, "FORCE RELEASE UNIT ON CANCEL\n");
+ status = release_unit (s, 1);
+ if (status != SANE_STATUS_GOOD)
+ DBG (1, "do_cancel: release_unit failed\n");
+
return SANE_STATUS_CANCELLED;
}
@@ -6806,7 +6910,7 @@ read_data (Avision_Scanner* s, SANE_Byte* buf, size_t* count)
memset (&rcmd, 0, sizeof (rcmd));
rcmd.opc = AVISION_SCSI_READ;
- rcmd.datatypecode = 0x00; /* read image data */
+ rcmd.datatypecode = AVISION_DATATYPECODE_READ_IMAGE_DATA; /* read image data */
set_double (rcmd.datatypequal, s->hw->data_dq);
set_triple (rcmd.transferlen, *count);
@@ -8081,15 +8185,15 @@ reader_process (void *data)
exit_status = SANE_STATUS_CANCELLED;
}
- status = release_unit (s, 0);
- if (status != SANE_STATUS_GOOD)
- DBG (1, "reader_process: release_unit failed\n");
-
if (dev->inquiry_new_protocol && dev->scanner_type == AV_FILM) {
status = object_position (s, AVISION_SCSI_OP_GO_HOME);
if (status != SANE_STATUS_GOOD)
DBG (1, "reader_process: object position go-home failed!\n");
}
+
+ status = release_unit (s, 0);
+ if (status != SANE_STATUS_GOOD)
+ DBG (1, "reader_process: release_unit failed\n");
}
if ((dev->hw->feature_type & AV_ADF_FLIPPING_DUPLEX) && s->source_mode == AV_ADF_DUPLEX && s->page % 2) {
@@ -8347,13 +8451,13 @@ sane_init (SANE_Int* version_code, SANE_Auth_Callback authorize)
#endif
DBG (3, "sane_init:(Version: %i.%i Build: %i)\n",
- SANE_CURRENT_MAJOR, V_MINOR, BACKEND_BUILD);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BACKEND_BUILD);
/* must come first */
sanei_thread_init ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BACKEND_BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BACKEND_BUILD);
sane_reload_devices ();
diff --git a/backend/avision.h b/backend/avision.h
index 0847dc8..aed6d9e 100644
--- a/backend/avision.h
+++ b/backend/avision.h
@@ -851,4 +851,29 @@ extern SANE_Status ENTRY(media_check) (SANE_Handle handle);
#endif
+typedef enum
+{
+ AVISION_DATATYPECODE_READ_IMAGE_DATA = 0x00,
+ AVISION_DATATYPECODE_GET_CALIBRATION_FORMAT = 0x60,
+ AVISION_DATATYPECODE_DETECT_ACCESSORIES = 0x64,
+ AVISION_DATATYPECODE_READ_NVRAM_DATA = 0x69,
+ AVISION_DATATYPECODE_FLASH_RAM_INFO = 0x6a,
+ AVISION_DATATYPECODE_ACCELERATION_TABLE = 0x6c,
+ AVISION_DATATYPECODE_DOWNLOAD_GAMMA_TABLE = 0x81,
+ AVISION_DATATYPECODE_3X3_COLOR_MATRIX = 0x83,
+ AVISION_DATATYPECODE_SEND_NVRAM_DATA = 0x85,
+ AVISION_DATATYPECODE_FLASH_DATA = 0x86,
+ AVISION_DATATYPECODE_FILM_HOLDER_SENSE = 0x87,
+ AVISION_DATATYPECODE_FIRMWARE_STATUS = 0x90,
+ AVISION_DATATYPECODE_ATTACH_TRUNCATE_TAIL = 0x95,
+ AVISION_DATATYPECODE_ATTACH_TRUNCATE_HEAD = 0x96,
+ AVISION_DATATYPECODE_GET_BACKGROUND_RASTER = 0x9b,
+ AVISION_DATATYPECODE_LIGHT_STATUS = 0xa0,
+ AVISION_DATATYPECODE_BUTTON_STATUS = 0xa1,
+ AVISION_DATATYPECODE_POWER_SAVING_TIMER = 0xa2,
+ AVISION_DATATYPECODE_READ_DUPLEX_INFO = 0xb1,
+ AVISION_DATATYPECODE_UNKNOWN = 0xd0,
+ AVISION_DATATYPECODE_READ_GENERAL_ABILITY_PARAM = 0xd2,
+} Avision_Datatypecode;
+
#endif /* avision_h */
diff --git a/backend/bh.c b/backend/bh.c
index dd5f6a0..0f2e70e 100644
--- a/backend/bh.c
+++ b/backend/bh.c
@@ -3150,11 +3150,11 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authorize)
DBG_INIT();
DBG(3, "sane_init called\n");
DBG(1, "Bell+Howell SANE backend %d.%d build %d %s endian\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD,
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD,
_is_host_little_endian() ? "little" : "big");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
fp = sanei_config_open(BH_CONFIG_FILE);
if (fp)
diff --git a/backend/canon-sane.c b/backend/canon-sane.c
index 016ca8a..6957aa7 100644
--- a/backend/canon-sane.c
+++ b/backend/canon-sane.c
@@ -55,7 +55,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
#endif
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (CANON_CONFIG_FILE);
if (fp)
diff --git a/backend/canon630u.c b/backend/canon630u.c
index 6a76211..659c31f 100644
--- a/backend/canon630u.c
+++ b/backend/canon630u.c
@@ -720,10 +720,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (2, "sane_init: version_code %s 0, authorize %s 0\n",
version_code == 0 ? "=" : "!=", authorize == 0 ? "=" : "!=");
DBG (1, "sane_init: SANE Canon630u backend version %d.%d.%d from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
sanei_usb_init ();
diff --git a/backend/canon_dr-cmd.h b/backend/canon_dr-cmd.h
index 44751fa..e9fc54b 100644
--- a/backend/canon_dr-cmd.h
+++ b/backend/canon_dr-cmd.h
@@ -11,9 +11,7 @@
#define USB_HEADER_LEN 12
#define USB_COMMAND_LEN 12
#define USB_STATUS_LEN 4
-#define USB_COMMAND_TIME 30000
-#define USB_DATA_TIME 30000
-#define USB_STATUS_TIME 30000
+#define USB_PACKET_TIMEOUT 30000
/*static inline void */
static void
@@ -116,8 +114,10 @@ putnbyte (unsigned char *pnt, unsigned int value, unsigned int nbytes)
#define INQUIRY_code 0x12
#define INQUIRY_len 6
-#define INQUIRY_std_len 0x30
-#define INQUIRY_vpd_len 0x1e
+#define INQUIRY_std_max_len 0x30
+#define INQUIRY_std_typ_len 0x30
+#define INQUIRY_vpd_max_len 0x30
+#define INQUIRY_vpd_typ_len 0x1e
#define set_IN_evpd(icb, val) setbitfield(icb + 1, 1, 0, val)
#define set_IN_page_code(icb, val) icb[0x02]=val
diff --git a/backend/canon_dr.c b/backend/canon_dr.c
index de7ed7e..95799e7 100644
--- a/backend/canon_dr.c
+++ b/backend/canon_dr.c
@@ -3,7 +3,7 @@
This file is part of the SANE package, and implements a SANE backend
for various Canon DR-series scanners.
- Copyright (C) 2008-2020 m. allan noah
+ Copyright (C) 2008-2021 m. allan noah
Yabarana Corp. www.yabarana.com provided significant funding
EvriChart, Inc. www.evrichart.com provided funding and loaned equipment
@@ -346,6 +346,15 @@
- add new gray and color interlacing options for DR-C120
- initial support for DR-C120 and C130
- enable fine calibration for P-208 (per @sashacmc in !546)
+ v61 2021-02-13, MAN
+ - treat DR-P208 like P-208 (#356)
+ - treat DR-P215 like P-215 (#356)
+ - adjust wait_scanner to try one TUR with a long timeout (#142)
+ v62 2021-02-13, MAN
+ - allow config file to set inq and vpd lengths for DR-M1060 (#263)
+ - rewrite do_cmd() timeout handling
+ - remove long timeout TUR from v61 (did not help)
+ - allow config file to set initial tur timeout for DR-X10C (#142)
SANE FLOW DIAGRAM
@@ -384,6 +393,7 @@
#include <math.h> /*tan*/
#include <unistd.h> /*usleep*/
#include <sys/time.h> /*gettimeofday*/
+#include <stdlib.h> /*strtol*/
#include "../include/sane/sanei_backend.h"
#include "../include/sane/sanei_scsi.h"
@@ -396,7 +406,7 @@
#include "canon_dr.h"
#define DEBUG 1
-#define BUILD 60
+#define BUILD 62
/* values for SANE_DEBUG_CANON_DR env var:
- errors 5
@@ -448,6 +458,10 @@ static int global_extra_status;
static int global_extra_status_default = 0;
static int global_duplex_offset;
static int global_duplex_offset_default = 0;
+static int global_inquiry_length;
+static int global_vpd_length;
+static int global_tur_timeout;
+static int global_tur_timeout_default = USB_PACKET_TIMEOUT/60; /* half second */
static char global_vendor_name[9];
static char global_model_name[17];
static char global_version_name[5];
@@ -486,10 +500,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (10, "sane_init: start\n");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (5, "sane_init: canon_dr backend %d.%d.%d, from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
DBG (10, "sane_init: finish\n");
@@ -675,6 +689,84 @@ sane_get_devices (const SANE_Device *** device_list, SANE_Bool local_only)
global_duplex_offset = buf;
}
+ /* INQUIRY_LENGTH: <= 0x30 */
+ else if (!strncmp (lp, "inquiry-length", 14) && isspace (lp[14])) {
+
+ int buf;
+ lp += 14;
+ lp = sanei_config_skip_whitespace (lp);
+ buf = (int) strtol (lp,NULL,16);
+
+ if (buf > INQUIRY_std_max_len) {
+ DBG (5, "sane_get_devices: config option \"inquiry-length\" "
+ "(%#04x) is > %#04x, ignoring!\n", buf, INQUIRY_std_max_len);
+ continue;
+ }
+
+ if (buf < 0) {
+ DBG (5, "sane_get_devices: config option \"inquiry-length\" "
+ "(%#04x) is < 0, ignoring!\n", buf);
+ continue;
+ }
+
+ DBG (15, "sane_get_devices: setting \"inquiry-length\" to %#04x\n",
+ buf);
+
+ global_inquiry_length = buf;
+ }
+
+ /* VPD_LENGTH: <= 0x30 */
+ else if (!strncmp (lp, "vpd-length", 10) && isspace (lp[10])) {
+
+ int buf;
+ lp += 10;
+ lp = sanei_config_skip_whitespace (lp);
+ buf = (int) strtol (lp,NULL,16);
+
+ if (buf > INQUIRY_vpd_max_len) {
+ DBG (5, "sane_get_devices: config option \"vpd-length\" "
+ "(%#04x) is > %#04x, ignoring!\n", buf, INQUIRY_vpd_max_len);
+ continue;
+ }
+
+ if (buf < 0) {
+ DBG (5, "sane_get_devices: config option \"vpd-length\" "
+ "(%#04x) is < 0, ignoring!\n", buf);
+ continue;
+ }
+
+ DBG (15, "sane_get_devices: setting \"vpd-length\" to %#04x\n",
+ buf);
+
+ global_vpd_length = buf;
+ }
+
+ /* TUR_TIMEOUT <= 60000 */
+ else if (!strncmp (lp, "tur-timeout", 11) && isspace (lp[11])) {
+
+ int buf;
+ lp += 11;
+ lp = sanei_config_skip_whitespace (lp);
+ buf = atoi (lp);
+
+ if (buf > 60000) {
+ DBG (5, "sane_get_devices: config option \"tur-timeout\" "
+ "(%d) is > 60000, ignoring!\n", buf);
+ continue;
+ }
+
+ if (buf < 0) {
+ DBG (5, "sane_get_devices: config option \"tur-timeout\" "
+ "(%d) is < 0, ignoring!\n", buf);
+ continue;
+ }
+
+ DBG (15, "sane_get_devices: setting \"tur-timeout\" to %d\n",
+ buf);
+
+ global_tur_timeout = buf;
+ }
+
/* VENDOR: we ingest up to 8 bytes */
else if (!strncmp (lp, "vendor-name", 11) && isspace (lp[11])) {
@@ -841,6 +933,9 @@ attach_one (const char *device_name, int connType)
s->padded_read = global_padded_read;
s->extra_status = global_extra_status;
s->duplex_offset = global_duplex_offset;
+ s->inquiry_length = global_inquiry_length;
+ s->vpd_length = global_vpd_length;
+ s->tur_timeout = global_tur_timeout;
/* copy the device name */
strcpy (s->device_name, device_name);
@@ -1017,8 +1112,8 @@ init_inquire (struct scanner *s)
unsigned char cmd[INQUIRY_len];
size_t cmdLen = INQUIRY_len;
- unsigned char in[INQUIRY_std_len];
- size_t inLen = INQUIRY_std_len;
+ unsigned char in[INQUIRY_std_max_len];
+ size_t inLen = s->inquiry_length;
DBG (10, "init_inquire: start\n");
@@ -1099,8 +1194,8 @@ init_vpd (struct scanner *s)
unsigned char cmd[INQUIRY_len];
size_t cmdLen = INQUIRY_len;
- unsigned char in[INQUIRY_vpd_len];
- size_t inLen = INQUIRY_vpd_len;
+ unsigned char in[INQUIRY_vpd_max_len];
+ size_t inLen = s->vpd_length;
DBG (10, "init_vpd: start\n");
@@ -1491,7 +1586,8 @@ init_model (struct scanner *s)
s->has_card = 1;
}
- else if (strstr (s->model_name, "P-208")) {
+ else if (strstr (s->model_name, "P-208")
+ || strstr (s->model_name,"DR-P208")){
s->color_interlace[SIDE_FRONT] = COLOR_INTERLACE_RRGGBB;
s->color_interlace[SIDE_BACK] = COLOR_INTERLACE_rRgGbB;
s->gray_interlace[SIDE_BACK] = GRAY_INTERLACE_gG;
@@ -1508,7 +1604,8 @@ init_model (struct scanner *s)
s->can_read_sensors = 1;
}
- else if (strstr (s->model_name, "P-215")) {
+ else if (strstr (s->model_name, "P-215")
+ || strstr (s->model_name,"DR-P215")){
s->color_interlace[SIDE_FRONT] = COLOR_INTERLACE_rRgGbB;
s->color_interlace[SIDE_BACK] = COLOR_INTERLACE_RRGGBB;
s->gray_interlace[SIDE_FRONT] = GRAY_INTERLACE_gG;
@@ -7079,6 +7176,9 @@ default_globals(void)
global_padded_read = global_padded_read_default;
global_extra_status = global_extra_status_default;
global_duplex_offset = global_duplex_offset_default;
+ global_inquiry_length = INQUIRY_std_typ_len;
+ global_vpd_length = INQUIRY_vpd_typ_len;
+ global_tur_timeout = global_tur_timeout_default;
global_vendor_name[0] = 0;
global_model_name[0] = 0;
global_version_name[0] = 0;
@@ -7332,21 +7432,21 @@ sense_handler (int fd, unsigned char * sensed_data, void *arg)
* take a bunch of pointers, send commands to scanner
*/
static SANE_Status
-do_cmd(struct scanner *s, int runRS, int shortTime,
+do_cmd(struct scanner *s, int runRS, int timeout,
unsigned char * cmdBuff, size_t cmdLen,
unsigned char * outBuff, size_t outLen,
unsigned char * inBuff, size_t * inLen
)
{
if (s->connection == CONNECTION_SCSI) {
- return do_scsi_cmd(s, runRS, shortTime,
+ return do_scsi_cmd(s, runRS, timeout,
cmdBuff, cmdLen,
outBuff, outLen,
inBuff, inLen
);
}
if (s->connection == CONNECTION_USB) {
- return do_usb_cmd(s, runRS, shortTime,
+ return do_usb_cmd(s, runRS, timeout,
cmdBuff, cmdLen,
outBuff, outLen,
inBuff, inLen
@@ -7356,7 +7456,7 @@ do_cmd(struct scanner *s, int runRS, int shortTime,
}
static SANE_Status
-do_scsi_cmd(struct scanner *s, int runRS, int shortTime,
+do_scsi_cmd(struct scanner *s, int runRS, int timeout,
unsigned char * cmdBuff, size_t cmdLen,
unsigned char * outBuff, size_t outLen,
unsigned char * inBuff, size_t * inLen
@@ -7366,7 +7466,7 @@ do_scsi_cmd(struct scanner *s, int runRS, int shortTime,
/*shut up compiler*/
runRS=runRS;
- shortTime=shortTime;
+ timeout=timeout;
DBG(10, "do_scsi_cmd: start\n");
@@ -7404,7 +7504,7 @@ do_scsi_cmd(struct scanner *s, int runRS, int shortTime,
}
static SANE_Status
-do_usb_cmd(struct scanner *s, int runRS, int shortTime,
+do_usb_cmd(struct scanner *s, int runRS, int timeout,
unsigned char * cmdBuff, size_t cmdLen,
unsigned char * outBuff, size_t outLen,
unsigned char * inBuff, size_t * inLen
@@ -7414,21 +7514,19 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
size_t cmdLength = 0;
size_t cmdActual = 0;
unsigned char * cmdBuffer = NULL;
- int cmdTimeout = 0;
size_t outOffset = 0;
size_t outLength = 0;
size_t outActual = 0;
unsigned char * outBuffer = NULL;
- int outTimeout = 0;
size_t inOffset = 0;
size_t inLength = 0;
size_t inActual = 0;
unsigned char * inBuffer = NULL;
- int inTimeout = 0;
size_t extraLength = 0;
+ int actTimeout = timeout ? timeout : USB_PACKET_TIMEOUT;
int ret = 0;
int ret2 = 0;
@@ -7438,18 +7536,15 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
DBG (10, "do_usb_cmd: start %lu %lu\n", (long unsigned int)timer.tv_sec, (long unsigned int)timer.tv_usec);
+ /* change timeout */
+ sanei_usb_set_timeout(actTimeout);
+
/****************************************************************/
/* the command stage */
{
cmdOffset = USB_HEADER_LEN;
cmdLength = cmdOffset+USB_COMMAND_LEN;
cmdActual = cmdLength;
- cmdTimeout = USB_COMMAND_TIME;
-
- /* change timeout */
- if(shortTime)
- cmdTimeout/=60;
- sanei_usb_set_timeout(cmdTimeout);
/* build buffer */
cmdBuffer = calloc(cmdLength,1);
@@ -7465,7 +7560,7 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
memcpy(cmdBuffer+cmdOffset,cmdBuff,cmdLen);
/* write the command out */
- DBG(25, "cmd: writing %d bytes, timeout %d\n", (int)cmdLength, cmdTimeout);
+ DBG(25, "cmd: writing %d bytes, timeout %d\n", (int)cmdLength, actTimeout);
hexdump(30, "cmd: >>", cmdBuffer, cmdLength);
ret = sanei_usb_write_bulk(s->fd, cmdBuffer, &cmdActual);
DBG(25, "cmd: wrote %d bytes, retVal %d\n", (int)cmdActual, ret);
@@ -7488,7 +7583,7 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
/* this is like the regular status block, with an additional */
/* length component at the end */
if(s->extra_status){
- ret2 = do_usb_status(s,runRS,shortTime,&extraLength);
+ ret2 = do_usb_status(s,runRS,timeout,&extraLength);
/* bail out on bad RS status */
if(ret2){
@@ -7504,12 +7599,6 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
outOffset = USB_HEADER_LEN;
outLength = outOffset+outLen;
outActual = outLength;
- outTimeout = USB_DATA_TIME;
-
- /* change timeout */
- if(shortTime)
- outTimeout/=60;
- sanei_usb_set_timeout(outTimeout);
/* build outBuffer */
outBuffer = calloc(outLength,1);
@@ -7525,7 +7614,7 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
memcpy(outBuffer+outOffset,outBuff,outLen);
/* write the command out */
- DBG(25, "out: writing %d bytes, timeout %d\n", (int)outLength, outTimeout);
+ DBG(25, "out: writing %d bytes, timeout %d\n", (int)outLength, actTimeout);
hexdump(30, "out: >>", outBuffer, outLength);
ret = sanei_usb_write_bulk(s->fd, outBuffer, &outActual);
DBG(25, "out: wrote %d bytes, retVal %d\n", (int)outActual, ret);
@@ -7563,13 +7652,6 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
/*blast caller's copy in case we error out*/
*inLen = 0;
- inTimeout = USB_DATA_TIME;
-
- /* change timeout */
- if(shortTime)
- inTimeout/=60;
- sanei_usb_set_timeout(inTimeout);
-
/* build inBuffer */
inBuffer = calloc(inActual,1);
if(!inBuffer){
@@ -7577,7 +7659,7 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
return SANE_STATUS_NO_MEM;
}
- DBG(25, "in: reading %d bytes, timeout %d\n", (int)inActual, inTimeout);
+ DBG(25, "in: reading %d bytes, timeout %d\n", (int)inActual, actTimeout);
ret = sanei_usb_read_bulk(s->fd, inBuffer, &inActual);
DBG(25, "in: read %d bytes, retval %d\n", (int)inActual, ret);
hexdump(31, "in: <<", inBuffer, inActual);
@@ -7603,7 +7685,7 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
/****************************************************************/
/* the normal status stage */
- ret2 = do_usb_status(s,runRS,shortTime,&extraLength);
+ ret2 = do_usb_status(s,runRS,timeout,&extraLength);
/* if status said EOF, adjust input with remainder count */
if(ret2 == SANE_STATUS_EOF && inBuffer){
@@ -7651,7 +7733,7 @@ do_usb_cmd(struct scanner *s, int runRS, int shortTime,
}
static SANE_Status
-do_usb_status(struct scanner *s, int runRS, int shortTime, size_t * extraLength)
+do_usb_status(struct scanner *s, int runRS, int timeout, size_t * extraLength)
{
#define EXTRA_READ_len 4
@@ -7661,7 +7743,8 @@ do_usb_status(struct scanner *s, int runRS, int shortTime, size_t * extraLength)
size_t statLength = 0;
size_t statActual = 0;
unsigned char * statBuffer = NULL;
- int statTimeout = 0;
+
+ int actTimeout = timeout ? timeout : USB_PACKET_TIMEOUT;
int ret = 0;
@@ -7675,12 +7758,9 @@ do_usb_status(struct scanner *s, int runRS, int shortTime, size_t * extraLength)
statLength += EXTRA_READ_len;
statActual = statLength;
- statTimeout = USB_STATUS_TIME;
/* change timeout */
- if(shortTime)
- statTimeout/=60;
- sanei_usb_set_timeout(statTimeout);
+ sanei_usb_set_timeout(timeout ? timeout : USB_PACKET_TIMEOUT);
/* build statBuffer */
statBuffer = calloc(statLength,1);
@@ -7689,7 +7769,7 @@ do_usb_status(struct scanner *s, int runRS, int shortTime, size_t * extraLength)
return SANE_STATUS_NO_MEM;
}
- DBG(25, "stat: reading %d bytes, timeout %d\n", (int)statLength, statTimeout);
+ DBG(25, "stat: reading %d bytes, timeout %d\n", (int)statLength, actTimeout);
ret = sanei_usb_read_bulk(s->fd, statBuffer, &statActual);
DBG(25, "stat: read %d bytes, retval %d\n", (int)statActual, ret);
hexdump(30, "stat: <<", statBuffer, statActual);
@@ -7754,7 +7834,7 @@ do_usb_clear(struct scanner *s, int clear, int runRS)
DBG(25,"rs sub call >>\n");
ret2 = do_cmd(
- s,0,0,
+ s, 0, 0,
rs_cmd, rs_cmdLen,
NULL,0,
rs_in, &rs_inLen
@@ -7796,7 +7876,7 @@ wait_scanner(struct scanner *s)
set_SCSI_opcode(cmd,TEST_UNIT_READY_code);
ret = do_cmd (
- s, 0, 1,
+ s, 0, s->tur_timeout,
cmd, cmdLen,
NULL, 0,
NULL, NULL
@@ -7805,7 +7885,7 @@ wait_scanner(struct scanner *s)
if (ret != SANE_STATUS_GOOD) {
DBG(5,"WARNING: Brain-dead scanner. Hitting with stick.\n");
ret = do_cmd (
- s, 0, 1,
+ s, 0, s->tur_timeout,
cmd, cmdLen,
NULL, 0,
NULL, NULL
@@ -7814,7 +7894,7 @@ wait_scanner(struct scanner *s)
if (ret != SANE_STATUS_GOOD) {
DBG(5,"WARNING: Brain-dead scanner. Hitting with stick again.\n");
ret = do_cmd (
- s, 0, 1,
+ s, 0, s->tur_timeout,
cmd, cmdLen,
NULL, 0,
NULL, NULL
@@ -7823,18 +7903,9 @@ wait_scanner(struct scanner *s)
// some scanners (such as DR-F120) are OK but will not respond to commands
// when in sleep mode. By checking the sense it wakes them up.
if (ret != SANE_STATUS_GOOD) {
- DBG(5,"WARNING: Brain-dead scanner. Hitting with request sense.\n");
- ret = do_cmd (
- s, 1, 1,
- cmd, cmdLen,
- NULL, 0,
- NULL, NULL
- );
- }
- if (ret != SANE_STATUS_GOOD) {
- DBG(5,"WARNING: Brain-dead scanner. Hitting with stick a third time.\n");
+ DBG(5,"WARNING: Brain-dead scanner. Hitting with stick and request sense.\n");
ret = do_cmd (
- s, 0, 1,
+ s, 1, s->tur_timeout,
cmd, cmdLen,
NULL, 0,
NULL, NULL
@@ -7843,7 +7914,7 @@ wait_scanner(struct scanner *s)
if (ret != SANE_STATUS_GOOD) {
DBG(5,"WARNING: Brain-dead scanner. Hitting with stick a fourth time.\n");
ret = do_cmd (
- s, 0, 1,
+ s, 0, s->tur_timeout,
cmd, cmdLen,
NULL, 0,
NULL, NULL
diff --git a/backend/canon_dr.conf.in b/backend/canon_dr.conf.in
index 3b72fda..7bce43c 100644
--- a/backend/canon_dr.conf.in
+++ b/backend/canon_dr.conf.in
@@ -103,6 +103,7 @@ option duplex-offset 400
usb 0x1083 0x1617
# DR-X10C
+option tur-timeout 5000
usb 0x1083 0x1618
# CR-25
@@ -173,6 +174,7 @@ usb 0x1083 0x164a
usb 0x1083 0x164b
# P-208
+option duplex-offset 260
usb 0x1083 0x164c
# DR-G1130
@@ -194,6 +196,8 @@ option duplex-offset 1640
usb 0x1083 0x1654
# DR-M1060
+option inquiry-length 0x24
+option vpd-length 0x30
usb 0x1083 0x1657
# DR-C225
diff --git a/backend/canon_dr.h b/backend/canon_dr.h
index a945d00..7afbb90 100644
--- a/backend/canon_dr.h
+++ b/backend/canon_dr.h
@@ -116,12 +116,18 @@ struct scanner
/* --------------------------------------------------------------------- */
/* immutable values which are set during reading of config file. */
+ int connection; /* hardware interface type */
int buffer_size;
- int connection; /* hardware interface type */
+ int duplex_offset; /* number of lines of padding added to front (1/1200)*/
+ int extra_status; /* some machines need extra status read after cmd */
+ int inquiry_length; /* some models are particular about inquiry size */
+ int padded_read; /* some machines need extra 12 bytes on reads */
+ int tur_timeout; /* some models are slow to wake up */
+ int vpd_length; /* some models are particular about vpd size */
/* --------------------------------------------------------------------- */
/* immutable values which are set during inquiry probing of the scanner. */
- /* members in order found in scsi data... */
+ /* members in order found in scsi data. These can also be in config file */
char vendor_name[9]; /* raw data as returned by SCSI inquiry. */
char model_name[17]; /* raw data as returned by SCSI inquiry. */
char version_name[5]; /* raw data as returned by SCSI inquiry. */
@@ -207,8 +213,6 @@ struct scanner
int always_op; /* send object pos between pages */
int invert_tly; /* weird bug in some smaller scanners */
int unknown_byte2; /* weird byte, required, meaning unknown */
- int padded_read; /* some machines need extra 12 bytes on reads */
- int extra_status; /* some machines need extra status read after cmd */
int fixed_width; /* some machines always scan full width */
int even_Bpl; /* some machines require even bytes per line */
@@ -217,7 +221,6 @@ struct scanner
int color_inter_by_res[16]; /* and some even change by resolution */
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 */
diff --git a/backend/canon_lide70-common.c b/backend/canon_lide70-common.c
index 405d693..0882fec 100644
--- a/backend/canon_lide70-common.c
+++ b/backend/canon_lide70-common.c
@@ -2,7 +2,7 @@
BACKEND canon_lide70
- Copyright (C) 2019 Juergen Ernst and pimvantend.
+ Copyright (C) 2019-2021 Juergen Ernst and pimvantend.
This file is part of the SANE package.
@@ -28,7 +28,7 @@
#include <string.h>
#include <unistd.h> /* usleep */
#include <time.h>
-#include <math.h> /* exp() */
+#include <math.h> /* pow() */
#ifdef HAVE_OS2_H
#include <sys/types.h> /* mode_t */
#endif
@@ -74,12 +74,18 @@ typedef struct CANON_Handle
long width, height; /* at scan resolution */
unsigned char value_08, value_09; /* left */
unsigned char value_0a, value_0b; /* right */
- unsigned char value_67, value_68; /* bottom */
+ unsigned char value_66, value_67, value_68; /* bottom */
unsigned char value_51; /* lamp colors */
+ unsigned char value_90; /* motor mode */
int resolution; /* dpi */
char *fname; /* output file name */
FILE *fp; /* output file pointer (for reading) */
unsigned char absolute_threshold;
+ double table_gamma;
+ double table_gamma_blue;
+ unsigned char highlight_red_enhanced;
+ unsigned char highlight_blue_reduced;
+ unsigned char highlight_other;
}
CANON_Handle;
@@ -104,12 +110,15 @@ cp2155_set (int fd, CP2155_Register reg, byte data)
cmd_buffer[3] = 0x00;
cmd_buffer[4] = data;
+/* if (cmd_buffer[0]==0 && cmd_buffer[1]>0x21 && cmd_buffer[1]<0x44)
+ { */
DBG (1, "cp2155_set %02x %02x %02x %02x %02x\n",
cmd_buffer[0], cmd_buffer[1], cmd_buffer[2],
cmd_buffer[3], cmd_buffer[4]);
-/*
- usleep (100 * MSEC);
-*/
+/* } */
+/* */
+ usleep (0.0 * MSEC);
+/* */
status = sanei_usb_write_bulk (fd, cmd_buffer, &count);
if (status != SANE_STATUS_GOOD)
@@ -225,110 +234,98 @@ cp2155_write_gamma_block (int fd, unsigned int addr, byte * data)
sanei_usb_write_bulk (fd, data, &count);
}
-/* size=0x0100 */
-/* gamma table red*/
-static byte cp2155_gamma_red_enhanced_data[] = {
-
- 0x04, 0x70, 0x00, 0x01,
- 0x00, 0x14, 0x1c, 0x26, 0x2a, 0x2e, 0x34, 0x37, 0x3a, 0x3f, 0x42, 0x44,
- 0x48, 0x4a, 0x4c, 0x50,
- 0x52, 0x53, 0x57, 0x58, 0x5c, 0x5d, 0x5f, 0x62, 0x63, 0x64, 0x67, 0x68,
- 0x6a, 0x6c, 0x6e, 0x6f,
- 0x71, 0x72, 0x74, 0x76, 0x77, 0x78, 0x7a, 0x7c, 0x7e, 0x7f, 0x80, 0x82,
- 0x83, 0x84, 0x86, 0x87,
- 0x88, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x91, 0x92, 0x93, 0x95, 0x96,
- 0x97, 0x98, 0x99, 0x9b,
- 0x9b, 0x9c, 0x9e, 0x9f, 0x9f, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
- 0xa8, 0xa9, 0xaa, 0xab,
- 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb6,
- 0xb8, 0xb8, 0xb9, 0xba,
- 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5,
- 0xc5, 0xc6, 0xc7, 0xc8,
- 0xc9, 0xc9, 0xca, 0xcb, 0xcc, 0xcc, 0xce, 0xce, 0xcf, 0xd0, 0xd1, 0xd2,
- 0xd2, 0xd3, 0xd4, 0xd5,
- 0xd5, 0xd6, 0xd7, 0xd7, 0xd9, 0xd9, 0xda, 0xdb, 0xdb, 0xdc, 0xdd, 0xdd,
- 0xdf, 0xdf, 0xe0, 0xe1,
- 0xe1, 0xe2, 0xe3, 0xe3, 0xe4, 0xe5, 0xe5, 0xe6, 0xe7, 0xe7, 0xe8, 0xe9,
- 0xe9, 0xea, 0xeb, 0xeb,
- 0xec, 0xed, 0xed, 0xee, 0xef, 0xef, 0xf0, 0xf1, 0xf1, 0xf2, 0xf3, 0xf3,
- 0xf4, 0xf5, 0xf5, 0xf6,
- 0xf7, 0xf7, 0xf8, 0xf9, 0xfa, 0xfa, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe,
- 0xfe, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- 0xff, 0xff, 0xff, 0xff
-};
-
-/* size=0x0100 */
-/* gamma table */
-static byte cp2155_gamma_standard_data[] = {
-
- 0x04, 0x70, 0x00, 0x01,
- 0x00, 0x14, 0x1c, 0x21, 0x26, 0x2a, 0x2e, 0x31, 0x34, 0x37, 0x3a, 0x3d,
- 0x3f, 0x42, 0x44, 0x46,
- 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x53, 0x55, 0x57, 0x58, 0x5a, 0x5c,
- 0x5d, 0x5f, 0x60, 0x62,
- 0x63, 0x64, 0x66, 0x67, 0x68, 0x6a, 0x6b, 0x6c, 0x6e, 0x6f, 0x70, 0x71,
- 0x72, 0x74, 0x75, 0x76,
- 0x77, 0x78, 0x79, 0x7a, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x83,
- 0x84, 0x85, 0x86, 0x87,
- 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92,
- 0x93, 0x94, 0x95, 0x96,
- 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0x9f,
- 0xa0, 0xa1, 0xa2, 0xa3,
- 0xa3, 0xa4, 0xa5, 0xa6, 0xa6, 0xa7, 0xa8, 0xa9, 0xa9, 0xaa, 0xab, 0xac,
- 0xac, 0xad, 0xae, 0xaf,
- 0xaf, 0xb0, 0xb1, 0xb1, 0xb2, 0xb3, 0xb4, 0xb4, 0xb5, 0xb6, 0xb6, 0xb7,
- 0xb8, 0xb8, 0xb9, 0xba,
- 0xba, 0xbb, 0xbc, 0xbc, 0xbd, 0xbe, 0xbe, 0xbf, 0xc0, 0xc0, 0xc1, 0xc1,
- 0xc2, 0xc3, 0xc3, 0xc4,
- 0xc5, 0xc5, 0xc6, 0xc6, 0xc7, 0xc8, 0xc8, 0xc9, 0xc9, 0xca, 0xcb, 0xcb,
- 0xcc, 0xcc, 0xcd, 0xce,
- 0xce, 0xcf, 0xcf, 0xd0, 0xd1, 0xd1, 0xd2, 0xd2, 0xd3, 0xd3, 0xd4, 0xd5,
- 0xd5, 0xd6, 0xd6, 0xd7,
- 0xd7, 0xd8, 0xd9, 0xd9, 0xda, 0xda, 0xdb, 0xdb, 0xdc, 0xdc, 0xdd, 0xdd,
- 0xde, 0xdf, 0xdf, 0xe0,
- 0xe0, 0xe1, 0xe1, 0xe2, 0xe2, 0xe3, 0xe3, 0xe4, 0xe4, 0xe5, 0xe5, 0xe6,
- 0xe6, 0xe7, 0xe7, 0xe8,
- 0xe8, 0xe9, 0xe9, 0xea, 0xea, 0xeb, 0xeb, 0xec, 0xec, 0xed, 0xed, 0xee,
- 0xee, 0xef, 0xef, 0xf0,
- 0xf0, 0xf1, 0xf1, 0xf2, 0xf2, 0xf3, 0xf3, 0xf4, 0xf4, 0xf5, 0xf5, 0xf6,
- 0xf6, 0xf7, 0xf7, 0xf8,
- 0xf8, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfc, 0xfc, 0xfd, 0xfd,
- 0xfe, 0xfe, 0xff, 0xff
-};
+void
+makegammatable (double gamma, int highlight, unsigned char *buf)
+{
+ int maxin = 255; /* 8 bit gamma input */
+ int maxout = 255; /* 8 bit gamma output */
+ int in = 0;
+ int out;
+
+ buf[0] = 0x04;
+ buf[1] = 0x70;
+ buf[2] = 0x00;
+ buf[3] = 0x01;
+
+ while (in < highlight)
+ {
+ out = maxout * pow ((double) in / highlight, (1.0 / gamma));
+ buf[in + 4] = (unsigned char) out;
+ in++;
+ }
+
+ while (in <= maxin)
+ {
+ buf[in + 4] = maxout;
+ in++;
+ }
+
+ return;
+}
static void
-cp2155_set_gamma (int fd)
+cp2155_set_gamma (int fd, CANON_Handle * chndl)
{
DBG (1, "cp2155_set_gamma\n");
+ unsigned char buf[260];
/* gamma tables */
- cp2155_write_gamma_block (fd, 0x000, cp2155_gamma_standard_data);
- cp2155_write_gamma_block (fd, 0x100, cp2155_gamma_standard_data);
- cp2155_write_gamma_block (fd, 0x200, cp2155_gamma_standard_data);
+ makegammatable (chndl->table_gamma, chndl->highlight_other, buf);
+ cp2155_write_gamma_block (fd, 0x000, buf);
+ cp2155_write_gamma_block (fd, 0x100, buf);
+ cp2155_write_gamma_block (fd, 0x200, buf);
}
static void
-cp2155_set_gamma_red_enhanced (int fd)
+cp2155_set_gamma_red_enhanced (int fd, CANON_Handle * chndl)
{
DBG (1, "cp2155_set_gamma\n");
+ unsigned char buf[260];
/* gamma tables */
- cp2155_write_gamma_block (fd, 0x000, cp2155_gamma_red_enhanced_data);
- cp2155_write_gamma_block (fd, 0x100, cp2155_gamma_standard_data);
- cp2155_write_gamma_block (fd, 0x200, cp2155_gamma_standard_data);
+ makegammatable (chndl->table_gamma, chndl->highlight_red_enhanced, buf);
+ cp2155_write_gamma_block (fd, 0x000, buf);
+ makegammatable (chndl->table_gamma, chndl->highlight_other, buf);
+ cp2155_write_gamma_block (fd, 0x100, buf);
+ makegammatable (chndl->table_gamma_blue, chndl->highlight_blue_reduced,
+ buf);
+ cp2155_write_gamma_block (fd, 0x200, buf);
+}
+
+void
+make_descending_slope (size_t start_descent, double coefficient,
+ unsigned char *buf)
+{
+ size_t count, position;
+ int top_value;
+ int value;
+ unsigned char value_lo, value_hi;
+ DBG (1, "start_descent = %lx\n", start_descent);
+ top_value = buf[start_descent - 2] + 256 * buf[start_descent - 1];
+ DBG (1, "buf[start_descent-2] = %02x buf[start_descent-1] = %02x\n",
+ buf[start_descent - 2], buf[start_descent - 1]);
+ count = buf[2] + 256 * buf[3];
+ position = start_descent;
+ DBG (1, "count = %ld top_value = %d\n", count, top_value);
+ while (position < count + 4)
+ {
+ value =
+ (int) (top_value /
+ (1.0 + coefficient * (position + 2 - start_descent)));
+ value_lo = value & 0xff;
+ value_hi = (value >> 8) & 0xff;
+ buf[position] = value_lo;
+ buf[position + 1] = value_hi;
+ DBG (1,
+ "position = %03lx buf[position]= %02x buf[position+1] = %02x\n",
+ position, buf[position], buf[position + 1]);
+ position += 2;
+ }
}
void
-make_buf (size_t count, unsigned char *buf)
+make_constant_buf (size_t count, unsigned int hiword, unsigned int loword,
+ unsigned char *buf)
{
size_t i = 4;
- int hiword = 62756;
- int loword = 20918;
unsigned char hihi = (hiword >> 8) & 0xff;
unsigned char hilo = (hiword) & 0xff;
unsigned char lohi = (loword >> 8) & 0xff;
@@ -351,6 +348,27 @@ make_buf (size_t count, unsigned char *buf)
}
void
+make_slope_table (size_t count, unsigned int word, size_t start_descent,
+ double coefficient, unsigned char *buf)
+{
+ size_t i = 4;
+ unsigned char hi = (word >> 8) & 0xff;
+ unsigned char lo = (word) & 0xff;
+ buf[0] = 0x04;
+ buf[1] = 0x70;
+ buf[2] = (count - 4) & 0xff;
+ buf[3] = ((count - 4) >> 8) & 0xff;
+ while (i < start_descent)
+ {
+ buf[i] = lo;
+ i++;
+ buf[i] = hi;
+ i++;
+ }
+ make_descending_slope (start_descent, coefficient, buf);
+}
+
+void
write_buf (int fd, size_t count, unsigned char *buf,
unsigned char value_74, unsigned char value_75)
{
@@ -375,10 +393,31 @@ write_buf (int fd, size_t count, unsigned char *buf,
void
big_write (int fd, size_t count, unsigned char *buf)
{
- make_buf (count, buf);
+ make_constant_buf (count, 62756, 20918, buf);
+ write_buf (fd, count, buf, 0x00, 0x00);
+ write_buf (fd, count, buf, 0x00, 0xb0);
+ write_buf (fd, count, buf, 0x01, 0x60);
+ write_buf (fd, count, buf, 0x02, 0x10);
+}
+
+void
+big_write_2224 (int fd, size_t count, unsigned char *buf)
+{
+ make_constant_buf (count, 62756, 30918, buf);
write_buf (fd, count, buf, 0x00, 0x00);
write_buf (fd, count, buf, 0x00, 0xb0);
write_buf (fd, count, buf, 0x01, 0x60);
+ write_buf (fd, count, buf, 0x02, 0x10);
+}
+
+void
+big_write_film (int fd, size_t count, unsigned char *buf)
+{
+ make_constant_buf (count, 62756, 20918, buf);
+ write_buf (fd, count, buf, 0x00, 0x00);
+ write_buf (fd, count, buf, 0x02, 0x00);
+ write_buf (fd, count, buf, 0x04, 0x00);
+ write_buf (fd, count, buf, 0x06, 0x00);
}
void
@@ -422,6 +461,92 @@ general_motor_2224 (int fd)
}
void
+register_table (int fd, unsigned char register_value, unsigned char *buf)
+{
+ cp2155_set (fd, 0x1a, 0x00);
+ cp2155_set (fd, 0x1b, 0x00);
+ cp2155_set (fd, 0x1c, 0x02);
+ cp2155_set (fd, 0x15, 0x80);
+ cp2155_set (fd, 0x14, 0x7c);
+ cp2155_set (fd, 0x17, 0x01);
+ cp2155_set (fd, 0x43, 0x1c);
+ cp2155_set (fd, 0x44, 0x9c);
+ cp2155_set (fd, 0x45, 0x38);
+ if (register_value > 0)
+ {
+ unsigned char register_number = 0x23;
+ while (register_number < 0x43)
+ {
+ cp2155_set (fd, register_number, register_value);
+ register_number++;
+ }
+ }
+ else
+ {
+ int buffer_index = 0;
+ cp2155_set (fd, 0x23 + buffer_index, buf[buffer_index]);
+ cp2155_set (fd, 0x33 + buffer_index, buf[buffer_index]);
+ buffer_index++;
+ while (buffer_index < 9)
+ {
+ cp2155_set (fd, 0x23 + buffer_index, buf[buffer_index]);
+ cp2155_set (fd, 0x33 + buffer_index, buf[buffer_index]);
+ cp2155_set (fd, 0x43 - buffer_index, buf[buffer_index]);
+ cp2155_set (fd, 0x33 - buffer_index, buf[buffer_index]);
+ buffer_index++;
+ }
+ }
+
+ cp2155_set (fd, 0xca, 0x00);
+ cp2155_set (fd, 0xca, 0x00);
+ cp2155_set (fd, 0xca, 0x00);
+
+}
+
+void
+register_table_4800 (int fd, unsigned char register_value, unsigned char *buf)
+{
+ cp2155_set (fd, 0x1a, 0x00);
+ cp2155_set (fd, 0x1b, 0x00);
+ cp2155_set (fd, 0x1c, 0x02);
+ cp2155_set (fd, 0x15, 0x80);
+ cp2155_set (fd, 0x14, 0x7a);
+ cp2155_set (fd, 0x17, 0x02);
+ cp2155_set (fd, 0x43, 0x1c);
+ cp2155_set (fd, 0x44, 0x9c);
+ cp2155_set (fd, 0x45, 0x38);
+ if (register_value > 0)
+ {
+ unsigned char register_number = 0x23;
+ while (register_number < 0x43)
+ {
+ cp2155_set (fd, register_number, register_value);
+ register_number++;
+ }
+ }
+ else
+ {
+ int buffer_index = 0;
+ cp2155_set (fd, 0x23 + buffer_index, buf[buffer_index]);
+ cp2155_set (fd, 0x33 + buffer_index, buf[buffer_index]);
+ buffer_index++;
+ while (buffer_index < 9)
+ {
+ cp2155_set (fd, 0x23 + buffer_index, buf[buffer_index]);
+ cp2155_set (fd, 0x33 + buffer_index, buf[buffer_index]);
+ cp2155_set (fd, 0x43 - buffer_index, buf[buffer_index]);
+ cp2155_set (fd, 0x33 - buffer_index, buf[buffer_index]);
+ buffer_index++;
+ }
+ }
+
+ cp2155_set (fd, 0xca, 0x00);
+ cp2155_set (fd, 0xca, 0x00);
+ cp2155_set (fd, 0xca, 0x00);
+
+}
+
+void
startblob_2225_0075 (CANON_Handle * chndl, unsigned char *buf)
{
@@ -429,6 +554,15 @@ startblob_2225_0075 (CANON_Handle * chndl, unsigned char *buf)
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2e;
+
+/* original:
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2e;
+ ratio 320 decimal
+
+*/
cp2155_set (fd, 0x90, 0xd8);
cp2155_set (fd, 0x90, 0xd8);
cp2155_set (fd, 0xb0, 0x03);
@@ -445,7 +579,7 @@ startblob_2225_0075 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x2e);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0x00);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -506,114 +640,21 @@ startblob_2225_0075 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x83);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x28);
- cp2155_set (fd, 0x33, 0x28);
- cp2155_set (fd, 0x24, 0x27);
- cp2155_set (fd, 0x34, 0x27);
- cp2155_set (fd, 0x25, 0x25);
- cp2155_set (fd, 0x35, 0x25);
- cp2155_set (fd, 0x26, 0x21);
- cp2155_set (fd, 0x36, 0x21);
- cp2155_set (fd, 0x27, 0x1c);
- cp2155_set (fd, 0x37, 0x1c);
- cp2155_set (fd, 0x28, 0x16);
- cp2155_set (fd, 0x38, 0x16);
- cp2155_set (fd, 0x29, 0x0f);
- cp2155_set (fd, 0x39, 0x0f);
- cp2155_set (fd, 0x2a, 0x08);
- cp2155_set (fd, 0x3a, 0x08);
- cp2155_set (fd, 0x2b, 0x00);
- cp2155_set (fd, 0x3b, 0x00);
- cp2155_set (fd, 0x2c, 0x08);
- cp2155_set (fd, 0x3c, 0x08);
- cp2155_set (fd, 0x2d, 0x0f);
- cp2155_set (fd, 0x3d, 0x0f);
- cp2155_set (fd, 0x2e, 0x16);
- cp2155_set (fd, 0x3e, 0x16);
- cp2155_set (fd, 0x2f, 0x1c);
- cp2155_set (fd, 0x3f, 0x1c);
- cp2155_set (fd, 0x30, 0x21);
- cp2155_set (fd, 0x40, 0x21);
- cp2155_set (fd, 0x31, 0x25);
- cp2155_set (fd, 0x41, 0x25);
- cp2155_set (fd, 0x32, 0x27);
- cp2155_set (fd, 0x42, 0x27);
- cp2155_set (fd, 0xca, 0x01);
- cp2155_set (fd, 0xca, 0x01);
- cp2155_set (fd, 0xca, 0x11);
+
+ memcpy (buf, "\x28\x27\x25\x21\x1c\x16\x0f\x08\x00", 9);
+ register_table (fd, 0, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x00000000,
- "\x04\x70\x00\x01\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000010,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000030,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000040,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000050,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000060,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\xf0\x23\x80\x22\x2c\x21",
- 16);
- memcpy (buf + 0x00000070,
- "\xf1\x1f\xcd\x1e\xbd\x1d\xc0\x1c\xd2\x1b\xf4\x1a\x22\x1a\x5e\x19",
- 16);
- memcpy (buf + 0x00000080,
- "\xa4\x18\xf5\x17\x4f\x17\xb2\x16\x1d\x16\x90\x15\x09\x15\x89\x14",
- 16);
- memcpy (buf + 0x00000090,
- "\x0e\x14\x9a\x13\x2a\x13\xc0\x12\x59\x12\xf8\x11\x9a\x11\x3f\x11",
- 16);
- memcpy (buf + 0x000000a0,
- "\xe9\x10\x96\x10\x46\x10\xf8\x0f\xae\x0f\x66\x0f\x21\x0f\xde\x0e",
- 16);
- memcpy (buf + 0x000000b0,
- "\x9e\x0e\x60\x0e\x23\x0e\xe9\x0d\xb0\x0d\x7a\x0d\x44\x0d\x11\x0d",
- 16);
- memcpy (buf + 0x000000c0,
- "\xdf\x0c\xaf\x0c\x80\x0c\x52\x0c\x25\x0c\xfa\x0b\xd0\x0b\xa7\x0b",
- 16);
- memcpy (buf + 0x000000d0,
- "\x80\x0b\x59\x0b\x33\x0b\x0e\x0b\xea\x0a\xc8\x0a\xa5\x0a\x84\x0a",
- 16);
- memcpy (buf + 0x000000e0,
- "\x64\x0a\x44\x0a\x25\x0a\x07\x0a\xe9\x09\xcd\x09\xb0\x09\x95\x09",
- 16);
- memcpy (buf + 0x000000f0,
- "\x7a\x09\x60\x09\x46\x09\x2c\x09\x14\x09\xfc\x08\xe4\x08\xcd\x08",
- 16);
- memcpy (buf + 0x00000100, "\xb6\x08\xa0\x08", 4);
count = 260;
+ make_slope_table (count, top_value, 0x6a, 0.021739, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x25\xc0\x1c\x4f\x17\x9a\x13\xe9\x10\xde\x0e",
- 16);
- memcpy (buf + 0x00000010,
- "\x44\x0d\xfa\x0b\xea\x0a\x07\x0a\x46\x09\xa0\x08\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020, "\x80\x25\x80\x25", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.15217, buf);
+
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -628,6 +669,14 @@ startblob_2225_0150 (CANON_Handle * chndl, unsigned char *buf)
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x1e;
+
+/* original:
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x1e;
+ ratio 320 decimal
+*/
cp2155_set (fd, 0x90, 0xd8);
cp2155_set (fd, 0x90, 0xd8);
cp2155_set (fd, 0xb0, 0x02);
@@ -644,7 +693,7 @@ startblob_2225_0150 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x1e);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0xa0);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -705,125 +754,21 @@ startblob_2225_0150 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x84);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x28);
- cp2155_set (fd, 0x33, 0x28);
- cp2155_set (fd, 0x24, 0x27);
- cp2155_set (fd, 0x34, 0x27);
- cp2155_set (fd, 0x25, 0x25);
- cp2155_set (fd, 0x35, 0x25);
- cp2155_set (fd, 0x26, 0x21);
- cp2155_set (fd, 0x36, 0x21);
- cp2155_set (fd, 0x27, 0x1c);
- cp2155_set (fd, 0x37, 0x1c);
- cp2155_set (fd, 0x28, 0x16);
- cp2155_set (fd, 0x38, 0x16);
- cp2155_set (fd, 0x29, 0x0f);
- cp2155_set (fd, 0x39, 0x0f);
- cp2155_set (fd, 0x2a, 0x08);
- cp2155_set (fd, 0x3a, 0x08);
- cp2155_set (fd, 0x2b, 0x00);
- cp2155_set (fd, 0x3b, 0x00);
- cp2155_set (fd, 0x2c, 0x08);
- cp2155_set (fd, 0x3c, 0x08);
- cp2155_set (fd, 0x2d, 0x0f);
- cp2155_set (fd, 0x3d, 0x0f);
- cp2155_set (fd, 0x2e, 0x16);
- cp2155_set (fd, 0x3e, 0x16);
- cp2155_set (fd, 0x2f, 0x1c);
- cp2155_set (fd, 0x3f, 0x1c);
- cp2155_set (fd, 0x30, 0x21);
- cp2155_set (fd, 0x40, 0x21);
- cp2155_set (fd, 0x31, 0x25);
- cp2155_set (fd, 0x41, 0x25);
- cp2155_set (fd, 0x32, 0x27);
- cp2155_set (fd, 0x42, 0x27);
- cp2155_set (fd, 0xca, 0x01);
- cp2155_set (fd, 0xca, 0x01);
- cp2155_set (fd, 0xca, 0x11);
+
+ memcpy (buf, "\x28\x27\x25\x21\x1c\x16\x0f\x08\x00", 9);
+ register_table (fd, 0, buf);
cp2155_set (fd, 0x18, 0x00);
- cp2155_set (fd, 0x71, 0x01);
- cp2155_set (fd, 0x0230, 0x11);
- cp2155_set (fd, 0x71, 0x14);
- cp2155_set (fd, 0x72, 0x01);
- cp2155_set (fd, 0x73, 0x00);
- cp2155_set (fd, 0x74, 0x03);
- cp2155_set (fd, 0x75, 0x00);
- cp2155_set (fd, 0x76, 0x00);
- cp2155_set (fd, 0x0239, 0x40);
- cp2155_set (fd, 0x0238, 0x89);
- cp2155_set (fd, 0x023c, 0x2f);
- cp2155_set (fd, 0x0264, 0x20);
- memcpy (buf + 0x00000000,
- "\x04\x70\x00\x01\x80\x25\xd7\x24\x35\x24\x98\x23\x00\x23\x6d\x22",
- 16);
- memcpy (buf + 0x00000010,
- "\xdf\x21\x56\x21\xd1\x20\x50\x20\xd2\x1f\x59\x1f\xe3\x1e\x70\x1e",
- 16);
- memcpy (buf + 0x00000020,
- "\x01\x1e\x95\x1d\x2c\x1d\xc6\x1c\x62\x1c\x02\x1c\xa3\x1b\x47\x1b",
- 16);
- memcpy (buf + 0x00000030,
- "\xee\x1a\x97\x1a\x42\x1a\xef\x19\x9e\x19\x4f\x19\x02\x19\xb7\x18",
- 16);
- memcpy (buf + 0x00000040,
- "\x6d\x18\x25\x18\xdf\x17\x9a\x17\x57\x17\x16\x17\xd6\x16\x97\x16",
- 16);
- memcpy (buf + 0x00000050,
- "\x59\x16\x1d\x16\xe2\x15\xa8\x15\x70\x15\x38\x15\x02\x15\xcd\x14",
- 16);
- memcpy (buf + 0x00000060,
- "\x99\x14\x66\x14\x33\x14\x02\x14\xd2\x13\xa2\x13\x74\x13\x46\x13",
- 16);
- memcpy (buf + 0x00000070,
- "\x19\x13\xed\x12\xc2\x12\x98\x12\x6e\x12\x45\x12\x1d\x12\xf5\x11",
- 16);
- memcpy (buf + 0x00000080,
- "\xce\x11\xa8\x11\x82\x11\x5d\x11\x39\x11\x15\x11\xf2\x10\xcf\x10",
- 16);
- memcpy (buf + 0x00000090,
- "\xad\x10\x8b\x10\x6a\x10\x4a\x10\x2a\x10\x0a\x10\xeb\x0f\xcc\x0f",
- 16);
- memcpy (buf + 0x000000a0,
- "\xae\x0f\x90\x0f\x73\x0f\x56\x0f\x3a\x0f\x1e\x0f\x02\x0f\xe7\x0e",
- 16);
- memcpy (buf + 0x000000b0,
- "\xcc\x0e\xb2\x0e\x97\x0e\x7e\x0e\x64\x0e\x4b\x0e\x32\x0e\x1a\x0e",
- 16);
- memcpy (buf + 0x000000c0,
- "\x02\x0e\xea\x0d\xd3\x0d\xbc\x0d\xa5\x0d\x8e\x0d\x78\x0d\x62\x0d",
- 16);
- memcpy (buf + 0x000000d0,
- "\x4d\x0d\x37\x0d\x22\x0d\x0d\x0d\xf8\x0c\xe4\x0c\xd0\x0c\xbc\x0c",
- 16);
- memcpy (buf + 0x000000e0,
- "\xa8\x0c\x95\x0c\x82\x0c\x6f\x0c\x5c\x0c\x4a\x0c\x37\x0c\x25\x0c",
- 16);
- memcpy (buf + 0x000000f0,
- "\x14\x0c\x02\x0c\xf0\x0b\xdf\x0b\xce\x0b\xbd\x0b\xac\x0b\x9c\x0b",
- 16);
- memcpy (buf + 0x00000100, "\x8c\x0b\x7c\x0b", 4);
+
count = 260;
+ make_slope_table (count, top_value, 0x06, 0.0089185, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x25\x18\x1f\x8f\x1a\x2d\x17\x8f\x14\x79\x12",
- 16);
- memcpy (buf + 0x00000010,
- "\xc6\x10\x5b\x0f\x2a\x0e\x24\x0d\x41\x0c\x7c\x0b\xe3\x1e\x70\x1e",
- 16);
- memcpy (buf + 0x00000020, "\x01\x1e\x95\x1d", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.102968, buf);
+
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -838,6 +783,14 @@ startblob_2225_0300 (CANON_Handle * chndl, unsigned char *buf)
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2a;
+
+/* original:
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2a;
+ ratio 228 decimal
+*/
cp2155_set (fd, 0x90, 0xd8);
cp2155_set (fd, 0x90, 0xd8);
cp2155_set (fd, 0xb0, 0x01);
@@ -854,7 +807,7 @@ startblob_2225_0300 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x2a);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0x80);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -915,75 +868,20 @@ startblob_2225_0300 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x83);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x14);
- cp2155_set (fd, 0x33, 0x14);
- cp2155_set (fd, 0x24, 0x14);
- cp2155_set (fd, 0x34, 0x14);
- cp2155_set (fd, 0x25, 0x14);
- cp2155_set (fd, 0x35, 0x14);
- cp2155_set (fd, 0x26, 0x14);
- cp2155_set (fd, 0x36, 0x14);
- cp2155_set (fd, 0x27, 0x14);
- cp2155_set (fd, 0x37, 0x14);
- cp2155_set (fd, 0x28, 0x14);
- cp2155_set (fd, 0x38, 0x14);
- cp2155_set (fd, 0x29, 0x14);
- cp2155_set (fd, 0x39, 0x14);
- cp2155_set (fd, 0x2a, 0x14);
- cp2155_set (fd, 0x3a, 0x14);
- cp2155_set (fd, 0x2b, 0x14);
- cp2155_set (fd, 0x3b, 0x14);
- cp2155_set (fd, 0x2c, 0x14);
- cp2155_set (fd, 0x3c, 0x14);
- cp2155_set (fd, 0x2d, 0x14);
- cp2155_set (fd, 0x3d, 0x14);
- cp2155_set (fd, 0x2e, 0x14);
- cp2155_set (fd, 0x3e, 0x14);
- cp2155_set (fd, 0x2f, 0x14);
- cp2155_set (fd, 0x3f, 0x14);
- cp2155_set (fd, 0x30, 0x14);
- cp2155_set (fd, 0x40, 0x14);
- cp2155_set (fd, 0x31, 0x14);
- cp2155_set (fd, 0x41, 0x14);
- cp2155_set (fd, 0x32, 0x14);
- cp2155_set (fd, 0x42, 0x14);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ register_table (fd, 0x14, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x00000000,
- "\x04\x70\x30\x00\x80\x25\x36\x25\xee\x24\xa8\x24\x62\x24\x1d\x24",
- 16);
- memcpy (buf + 0x00000010,
- "\xd9\x23\x96\x23\x54\x23\x13\x23\xd3\x22\x94\x22\x56\x22\x19\x22",
- 16);
- memcpy (buf + 0x00000020,
- "\xdc\x21\xa1\x21\x66\x21\x2c\x21\xf3\x20\xba\x20\x82\x20\x4b\x20",
- 16);
- memcpy (buf + 0x00000030, "\x15\x20\xe0\x1f", 4);
count = 52;
+ make_slope_table (count, top_value, 0x06, 0.0038363, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x25\xe8\x24\x55\x24\xc7\x23\x3d\x23\xb7\x22",
- 16);
- memcpy (buf + 0x00000010,
- "\x35\x22\xb6\x21\x3c\x21\xc4\x20\x50\x20\xe0\x1f\x56\x22\x19\x22",
- 16);
- memcpy (buf + 0x00000020, "\xdc\x21\xa1\x21", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.0080213, buf);
+
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -998,6 +896,14 @@ startblob_2225_0600 (CANON_Handle * chndl, unsigned char *buf)
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x15;
+
+/* original:
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x15;
+ ratio 457 decimal
+*/
cp2155_set (fd, 0x90, 0xd8);
cp2155_set (fd, 0x90, 0xd8);
cp2155_set (fd, 0xb0, 0x00);
@@ -1014,7 +920,7 @@ startblob_2225_0600 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x15);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0xe0);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -1072,229 +978,20 @@ startblob_2225_0600 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x01);
- cp2155_set (fd, 0x14, 0x01);
- cp2155_set (fd, 0x17, 0x01);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x14);
- cp2155_set (fd, 0x33, 0x14);
- cp2155_set (fd, 0x24, 0x14);
- cp2155_set (fd, 0x34, 0x14);
- cp2155_set (fd, 0x25, 0x14);
- cp2155_set (fd, 0x35, 0x14);
- cp2155_set (fd, 0x26, 0x14);
- cp2155_set (fd, 0x36, 0x14);
- cp2155_set (fd, 0x27, 0x14);
- cp2155_set (fd, 0x37, 0x14);
- cp2155_set (fd, 0x28, 0x14);
- cp2155_set (fd, 0x38, 0x14);
- cp2155_set (fd, 0x29, 0x14);
- cp2155_set (fd, 0x39, 0x14);
- cp2155_set (fd, 0x2a, 0x14);
- cp2155_set (fd, 0x3a, 0x14);
- cp2155_set (fd, 0x2b, 0x14);
- cp2155_set (fd, 0x3b, 0x14);
- cp2155_set (fd, 0x2c, 0x14);
- cp2155_set (fd, 0x3c, 0x14);
- cp2155_set (fd, 0x2d, 0x14);
- cp2155_set (fd, 0x3d, 0x14);
- cp2155_set (fd, 0x2e, 0x14);
- cp2155_set (fd, 0x3e, 0x14);
- cp2155_set (fd, 0x2f, 0x14);
- cp2155_set (fd, 0x3f, 0x14);
- cp2155_set (fd, 0x30, 0x14);
- cp2155_set (fd, 0x40, 0x14);
- cp2155_set (fd, 0x31, 0x14);
- cp2155_set (fd, 0x41, 0x14);
- cp2155_set (fd, 0x32, 0x14);
- cp2155_set (fd, 0x42, 0x14);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ register_table (fd, 0x14, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x0000,
- "\x04\x70\x50\x00\x80\x25\x58\x25\x32\x25\x0b\x25\xe5\x24\xc0\x24",
- 16);
- memcpy (buf + 0x0010,
- "\x9a\x24\x75\x24\x50\x24\x2b\x24\x07\x24\xe3\x23\xbf\x23\x9c\x23",
- 16);
- memcpy (buf + 0x0020,
- "\x79\x23\x56\x23\x33\x23\x11\x23\xee\x22\xcd\x22\xab\x22\x8a\x22",
- 16);
- memcpy (buf + 0x0030,
- "\x68\x22\x48\x22\x27\x22\x07\x22\xe6\x21\xc7\x21\xa7\x21\x87\x21",
- 16);
- memcpy (buf + 0x0040,
- "\x68\x21\x49\x21\x2a\x21\x0c\x21\xee\x20\xd0\x20\x00\x00\x00\x00",
- 16);
- memcpy (buf + 0x0050, "\x00\x00\x00\x00", 4);
count = 84;
+ make_slope_table (count, top_value, 0x06, 0.0020408, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x0000,
- "\x04\x70\x20\x00\x80\x25\x04\x25\x8c\x24\x18\x24\xa5\x23\x36\x23",
- 16);
- memcpy (buf + 0x0010,
- "\xca\x22\x60\x22\xf8\x21\x93\x21\x30\x21\xd0\x20\x00\x00\x00\x00",
- 16);
- memcpy (buf + 0x0020, "\x00\x00\x00\x00", 4);
count = 36;
- write_buf (fd, count, buf, 0x03, 0x04);
- write_buf (fd, count, buf, 0x03, 0x08);
-
- general_motor_2225 (fd);
-}
-
-void
-startblob_2225_0600_extra (CANON_Handle * chndl, unsigned char *buf)
-{
-
- int fd;
- fd = chndl->fd;
- size_t count;
-
- cp2155_set (fd, 0x90, 0xd8);
- cp2155_set (fd, 0x90, 0xd8);
- cp2155_set (fd, 0xb0, 0x00);
- cp2155_set (fd, 0x07, 0x00);
- cp2155_set (fd, 0x07, 0x00);
- cp2155_set (fd, 0x08, chndl->value_08);
- cp2155_set (fd, 0x09, chndl->value_09);
- cp2155_set (fd, 0x0a, chndl->value_0a);
- cp2155_set (fd, 0x0b, chndl->value_0b);
- cp2155_set (fd, 0xa0, 0x1d);
- cp2155_set (fd, 0xa1, 0x00);
- cp2155_set (fd, 0xa2, 0x31);
- cp2155_set (fd, 0xa3, 0xf0);
- cp2155_set (fd, 0x64, 0x00);
- cp2155_set (fd, 0x65, 0x00);
- cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x55);
- cp2155_set (fd, 0x63, 0x00);
- cp2155_set (fd, 0x50, 0x04);
- cp2155_set (fd, 0x50, 0x04);
- cp2155_set (fd, 0x51, chndl->value_51);
- cp2155_set (fd, 0x5a, 0x32);
- cp2155_set (fd, 0x5b, 0x32);
- cp2155_set (fd, 0x5c, 0x32);
- cp2155_set (fd, 0x5d, 0x32);
- cp2155_set (fd, 0x52, 0x09);
- cp2155_set (fd, 0x53, 0x5a);
- cp2155_set (fd, 0x54, 0x06);
- cp2155_set (fd, 0x55, 0x08);
- cp2155_set (fd, 0x56, 0x05);
- cp2155_set (fd, 0x57, 0x5f);
- cp2155_set (fd, 0x58, 0xa9);
- cp2155_set (fd, 0x59, 0xce);
- cp2155_set (fd, 0x5e, 0x02);
- cp2155_set (fd, 0x5f, 0x00);
- cp2155_set (fd, 0x5f, 0x03);
- cp2155_set (fd, 0x60, 0x15);
- cp2155_set (fd, 0x60, 0x15);
- cp2155_set (fd, 0x60, 0x15);
- cp2155_set (fd, 0x60, 0x15);
- cp2155_set (fd, 0x50, 0x04);
- cp2155_set (fd, 0x51, chndl->value_51);
- cp2155_set (fd, 0x81, 0x29);
- cp2155_set (fd, 0x81, 0x29);
- cp2155_set (fd, 0x82, 0x09);
- cp2155_set (fd, 0x82, 0x09);
- cp2155_set (fd, 0x83, 0x02);
- cp2155_set (fd, 0x84, 0x06);
- cp2155_set (fd, 0x80, 0x12);
- cp2155_set (fd, 0x80, 0x12);
- cp2155_set (fd, 0xb0, 0x08);
-
- big_write (fd, 0x5174, buf);
-
- cp2155_set (fd, 0x10, 0x05);
- cp2155_set (fd, 0x10, 0x05);
- cp2155_set (fd, 0x9b, 0x01);
- cp2155_set (fd, 0x10, 0x05);
- cp2155_set (fd, 0x11, 0x81);
- cp2155_set (fd, 0x11, 0x81);
- cp2155_set (fd, 0x11, 0x81);
- cp2155_set (fd, 0x11, 0x81);
- cp2155_set (fd, 0x11, 0x81);
- cp2155_set (fd, 0x11, 0x81);
- cp2155_set (fd, 0x11, 0x81);
- cp2155_set (fd, 0x12, 0x06);
- cp2155_set (fd, 0x13, 0x06);
- cp2155_set (fd, 0x16, 0x06);
- cp2155_set (fd, 0x21, 0x06);
- cp2155_set (fd, 0x22, 0x06);
- cp2155_set (fd, 0x20, 0x06);
- cp2155_set (fd, 0x1d, 0x00);
- cp2155_set (fd, 0x1e, 0x00);
- cp2155_set (fd, 0x1f, 0x04);
- cp2155_set (fd, 0x66, 0x00);
- cp2155_set (fd, 0x67, 0x0f);
- cp2155_set (fd, 0x68, 0x39);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x80);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x01);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x14);
- cp2155_set (fd, 0x33, 0x14);
- cp2155_set (fd, 0x24, 0x14);
- cp2155_set (fd, 0x34, 0x14);
- cp2155_set (fd, 0x25, 0x14);
- cp2155_set (fd, 0x35, 0x14);
- cp2155_set (fd, 0x26, 0x14);
- cp2155_set (fd, 0x36, 0x14);
- cp2155_set (fd, 0x27, 0x14);
- cp2155_set (fd, 0x37, 0x14);
- cp2155_set (fd, 0x28, 0x14);
- cp2155_set (fd, 0x38, 0x14);
- cp2155_set (fd, 0x29, 0x14);
- cp2155_set (fd, 0x39, 0x14);
- cp2155_set (fd, 0x2a, 0x14);
- cp2155_set (fd, 0x3a, 0x14);
- cp2155_set (fd, 0x2b, 0x14);
- cp2155_set (fd, 0x3b, 0x14);
- cp2155_set (fd, 0x2c, 0x14);
- cp2155_set (fd, 0x3c, 0x14);
- cp2155_set (fd, 0x2d, 0x14);
- cp2155_set (fd, 0x3d, 0x14);
- cp2155_set (fd, 0x2e, 0x14);
- cp2155_set (fd, 0x3e, 0x14);
- cp2155_set (fd, 0x2f, 0x14);
- cp2155_set (fd, 0x3f, 0x14);
- cp2155_set (fd, 0x30, 0x14);
- cp2155_set (fd, 0x40, 0x14);
- cp2155_set (fd, 0x31, 0x14);
- cp2155_set (fd, 0x41, 0x14);
- cp2155_set (fd, 0x32, 0x14);
- cp2155_set (fd, 0x42, 0x14);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0x18, 0x00);
+ make_slope_table (count, top_value, 0x06, 0.0064935, buf);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000010,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x00\x00\x00\x00",
- 16);
- memcpy (buf + 0x00000020, "\x00\x00\x00\x00", 4);
- count = 36;
- write_buf (fd, count, buf, 0x03, 0x00);
- write_buf (fd, count, buf, 0x03, 0x02);
- write_buf (fd, count, buf, 0x03, 0x06);
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -1309,6 +1006,13 @@ startblob_2225_1200 (CANON_Handle * chndl, unsigned char *buf)
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0xff00;
+ unsigned char value_62 = 0xaa;
+
+/* original:
+ unsigned int top_value = 0xff00;
+ unsigned char value_62 = 0xaa;
+*/
cp2155_set (fd, 0x90, 0xc8);
cp2155_set (fd, 0x90, 0xe8);
cp2155_set (fd, 0xb0, 0x00);
@@ -1325,7 +1029,7 @@ startblob_2225_1200 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0xaa);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0x00);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -1386,60 +1090,14 @@ startblob_2225_1200 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x80);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x01);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x14);
- cp2155_set (fd, 0x33, 0x14);
- cp2155_set (fd, 0x24, 0x14);
- cp2155_set (fd, 0x34, 0x14);
- cp2155_set (fd, 0x25, 0x12);
- cp2155_set (fd, 0x35, 0x12);
- cp2155_set (fd, 0x26, 0x11);
- cp2155_set (fd, 0x36, 0x11);
- cp2155_set (fd, 0x27, 0x0e);
- cp2155_set (fd, 0x37, 0x0e);
- cp2155_set (fd, 0x28, 0x0b);
- cp2155_set (fd, 0x38, 0x0b);
- cp2155_set (fd, 0x29, 0x08);
- cp2155_set (fd, 0x39, 0x08);
- cp2155_set (fd, 0x2a, 0x04);
- cp2155_set (fd, 0x3a, 0x04);
- cp2155_set (fd, 0x2b, 0x00);
- cp2155_set (fd, 0x3b, 0x00);
- cp2155_set (fd, 0x2c, 0x04);
- cp2155_set (fd, 0x3c, 0x04);
- cp2155_set (fd, 0x2d, 0x08);
- cp2155_set (fd, 0x3d, 0x08);
- cp2155_set (fd, 0x2e, 0x0b);
- cp2155_set (fd, 0x3e, 0x0b);
- cp2155_set (fd, 0x2f, 0x0e);
- cp2155_set (fd, 0x3f, 0x0e);
- cp2155_set (fd, 0x30, 0x11);
- cp2155_set (fd, 0x40, 0x11);
- cp2155_set (fd, 0x31, 0x12);
- cp2155_set (fd, 0x41, 0x12);
- cp2155_set (fd, 0x32, 0x14);
- cp2155_set (fd, 0x42, 0x14);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ memcpy (buf, "\x14\x14\x12\x11\x0e\x0b\x08\x04\x00", 9);
+ register_table (fd, 0, buf);
cp2155_set (fd, 0x18, 0x01);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff",
- 16);
- memcpy (buf + 0x00000010,
- "\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\xff\x00\x00\x00\x00",
- 16);
- memcpy (buf + 0x00000020, "\x00\x00\x00\x00", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
@@ -1457,6 +1115,14 @@ startblob_2224_0075 (CANON_Handle * chndl, unsigned char *buf)
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2e;
+
+/* original:
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2e;
+ ratio 208 decimal
+*/
cp2155_set (fd, 0x90, 0xe8);
cp2155_set (fd, 0x9b, 0x06);
cp2155_set (fd, 0x9b, 0x04);
@@ -1475,7 +1141,7 @@ startblob_2224_0075 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x2e);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0x00);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -1537,162 +1203,20 @@ startblob_2224_0075 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x83);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x0f);
- cp2155_set (fd, 0x33, 0x0f);
- cp2155_set (fd, 0x24, 0x0f);
- cp2155_set (fd, 0x34, 0x0f);
- cp2155_set (fd, 0x25, 0x0f);
- cp2155_set (fd, 0x35, 0x0f);
- cp2155_set (fd, 0x26, 0x0f);
- cp2155_set (fd, 0x36, 0x0f);
- cp2155_set (fd, 0x27, 0x0f);
- cp2155_set (fd, 0x37, 0x0f);
- cp2155_set (fd, 0x28, 0x0f);
- cp2155_set (fd, 0x38, 0x0f);
- cp2155_set (fd, 0x29, 0x0f);
- cp2155_set (fd, 0x39, 0x0f);
- cp2155_set (fd, 0x2a, 0x0f);
- cp2155_set (fd, 0x3a, 0x0f);
- cp2155_set (fd, 0x2b, 0x0f);
- cp2155_set (fd, 0x3b, 0x0f);
- cp2155_set (fd, 0x2c, 0x0f);
- cp2155_set (fd, 0x3c, 0x0f);
- cp2155_set (fd, 0x2d, 0x0f);
- cp2155_set (fd, 0x3d, 0x0f);
- cp2155_set (fd, 0x2e, 0x0f);
- cp2155_set (fd, 0x3e, 0x0f);
- cp2155_set (fd, 0x2f, 0x0f);
- cp2155_set (fd, 0x3f, 0x0f);
- cp2155_set (fd, 0x30, 0x0f);
- cp2155_set (fd, 0x40, 0x0f);
- cp2155_set (fd, 0x31, 0x0f);
- cp2155_set (fd, 0x41, 0x0f);
- cp2155_set (fd, 0x32, 0x0f);
- cp2155_set (fd, 0x42, 0x0f);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ register_table (fd, 0x0f, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x00000000,
- "\x04\x70\xf4\x01\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000010,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000030,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000040,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000050,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000060,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\xe1\x24\x47\x24\xb2\x23",
- 16);
- memcpy (buf + 0x00000070,
- "\x22\x23\x97\x22\x0f\x22\x8c\x21\x0d\x21\x91\x20\x19\x20\xa4\x1f",
- 16);
- memcpy (buf + 0x00000080,
- "\x33\x1f\xc5\x1e\x59\x1e\xf1\x1d\x8b\x1d\x29\x1d\xc8\x1c\x6a\x1c",
- 16);
- memcpy (buf + 0x00000090,
- "\x0f\x1c\xb5\x1b\x5e\x1b\x09\x1b\xb6\x1a\x65\x1a\x16\x1a\xc9\x19",
- 16);
- memcpy (buf + 0x000000a0,
- "\x7d\x19\x34\x19\xec\x18\xa5\x18\x60\x18\x1c\x18\xda\x17\x9a\x17",
- 16);
- memcpy (buf + 0x000000b0,
- "\x5a\x17\x1c\x17\xe0\x16\xa4\x16\x6a\x16\x31\x16\xf9\x15\xc2\x15",
- 16);
- memcpy (buf + 0x000000c0,
- "\x8c\x15\x57\x15\x23\x15\xf1\x14\xbf\x14\x8e\x14\x5e\x14\x2e\x14",
- 16);
- memcpy (buf + 0x000000d0,
- "\x00\x14\xd2\x13\xa6\x13\x7a\x13\x4f\x13\x24\x13\xfa\x12\xd1\x12",
- 16);
- memcpy (buf + 0x000000e0,
- "\xa9\x12\x81\x12\x5a\x12\x34\x12\x0e\x12\xe9\x11\xc5\x11\xa1\x11",
- 16);
- memcpy (buf + 0x000000f0,
- "\x7d\x11\x5a\x11\x38\x11\x16\x11\xf5\x10\xd4\x10\xb4\x10\x94\x10",
- 16);
- memcpy (buf + 0x00000100,
- "\x75\x10\x56\x10\x37\x10\x19\x10\xfc\x0f\xdf\x0f\xc2\x0f\xa6\x0f",
- 16);
- memcpy (buf + 0x00000110,
- "\x8a\x0f\x6e\x0f\x53\x0f\x38\x0f\x1e\x0f\x04\x0f\xea\x0e\xd1\x0e",
- 16);
- memcpy (buf + 0x00000120,
- "\xb8\x0e\x9f\x0e\x86\x0e\x6e\x0e\x57\x0e\x3f\x0e\x28\x0e\x11\x0e",
- 16);
- memcpy (buf + 0x00000130,
- "\xfa\x0d\xe4\x0d\xce\x0d\xb8\x0d\xa3\x0d\x8e\x0d\x79\x0d\x64\x0d",
- 16);
- memcpy (buf + 0x00000140,
- "\x4f\x0d\x3b\x0d\x27\x0d\x14\x0d\x00\x0d\xed\x0c\xda\x0c\xc7\x0c",
- 16);
- memcpy (buf + 0x00000150,
- "\xb4\x0c\xa2\x0c\x8f\x0c\x7d\x0c\x6c\x0c\x5a\x0c\x49\x0c\x37\x0c",
- 16);
- memcpy (buf + 0x00000160,
- "\x26\x0c\x15\x0c\x05\x0c\xf4\x0b\xe4\x0b\xd4\x0b\xc4\x0b\xb4\x0b",
- 16);
- memcpy (buf + 0x00000170,
- "\xa4\x0b\x95\x0b\x85\x0b\x76\x0b\x67\x0b\x58\x0b\x4a\x0b\x3b\x0b",
- 16);
- memcpy (buf + 0x00000180,
- "\x2d\x0b\x1e\x0b\x10\x0b\x02\x0b\xf4\x0a\xe7\x0a\xd9\x0a\xcc\x0a",
- 16);
- memcpy (buf + 0x00000190,
- "\xbe\x0a\xb1\x0a\xa4\x0a\x97\x0a\x8a\x0a\x7e\x0a\x71\x0a\x65\x0a",
- 16);
- memcpy (buf + 0x000001a0,
- "\x58\x0a\x4c\x0a\x40\x0a\x34\x0a\x28\x0a\x1c\x0a\x10\x0a\x05\x0a",
- 16);
- memcpy (buf + 0x000001b0,
- "\xf9\x09\xee\x09\xe3\x09\xd8\x09\xcc\x09\xc1\x09\xb7\x09\xac\x09",
- 16);
- memcpy (buf + 0x000001c0,
- "\xa1\x09\x96\x09\x8c\x09\x82\x09\x77\x09\x6d\x09\x63\x09\x59\x09",
- 16);
- memcpy (buf + 0x000001d0,
- "\x4f\x09\x45\x09\x3b\x09\x31\x09\x28\x09\x1e\x09\x14\x09\x0b\x09",
- 16);
- memcpy (buf + 0x000001e0,
- "\x02\x09\xf8\x08\xef\x08\xe6\x08\xdd\x08\xd4\x08\xcb\x08\xc2\x08",
- 16);
- memcpy (buf + 0x000001f0,
- "\xb9\x08\xb1\x08\xa8\x08\xa0\x08\x00\x00\x00\x00\x00\x00\x00\x00",
- 16);
- memcpy (buf + 0x00000200, "\x00\x00\x00\x00", 4);
count = 516;
+ make_slope_table (count, top_value, 0x6a, 0.0084116, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x25\xc0\x1c\x4f\x17\x9a\x13\xe9\x10\xde\x0e",
- 16);
- memcpy (buf + 0x00000010,
- "\x44\x0d\xfa\x0b\xea\x0a\x07\x0a\x46\x09\xa0\x08\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020, "\x80\x25\x80\x25", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.15217, buf);
+
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -1708,6 +1232,14 @@ startblob_2224_0150 (CANON_Handle * chndl, unsigned char *buf)
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x1e;
+
+/* original:
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x1e;
+ ratio 320 decimal
+*/
cp2155_set (fd, 0x90, 0xe8);
cp2155_set (fd, 0x9b, 0x06);
cp2155_set (fd, 0x9b, 0x04);
@@ -1726,7 +1258,7 @@ startblob_2224_0150 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x1e);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0xa0);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -1788,114 +1320,20 @@ startblob_2224_0150 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x84);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x0d);
- cp2155_set (fd, 0x33, 0x0d);
- cp2155_set (fd, 0x24, 0x0d);
- cp2155_set (fd, 0x34, 0x0d);
- cp2155_set (fd, 0x25, 0x0d);
- cp2155_set (fd, 0x35, 0x0d);
- cp2155_set (fd, 0x26, 0x0d);
- cp2155_set (fd, 0x36, 0x0d);
- cp2155_set (fd, 0x27, 0x0d);
- cp2155_set (fd, 0x37, 0x0d);
- cp2155_set (fd, 0x28, 0x0d);
- cp2155_set (fd, 0x38, 0x0d);
- cp2155_set (fd, 0x29, 0x0d);
- cp2155_set (fd, 0x39, 0x0d);
- cp2155_set (fd, 0x2a, 0x0d);
- cp2155_set (fd, 0x3a, 0x0d);
- cp2155_set (fd, 0x2b, 0x0d);
- cp2155_set (fd, 0x3b, 0x0d);
- cp2155_set (fd, 0x2c, 0x0d);
- cp2155_set (fd, 0x3c, 0x0d);
- cp2155_set (fd, 0x2d, 0x0d);
- cp2155_set (fd, 0x3d, 0x0d);
- cp2155_set (fd, 0x2e, 0x0d);
- cp2155_set (fd, 0x3e, 0x0d);
- cp2155_set (fd, 0x2f, 0x0d);
- cp2155_set (fd, 0x3f, 0x0d);
- cp2155_set (fd, 0x30, 0x0d);
- cp2155_set (fd, 0x40, 0x0d);
- cp2155_set (fd, 0x31, 0x0d);
- cp2155_set (fd, 0x41, 0x0d);
- cp2155_set (fd, 0x32, 0x0d);
- cp2155_set (fd, 0x42, 0x0d);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ register_table (fd, 0x0d, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x00000000,
- "\x04\x70\x00\x01\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000010,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000030,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000040,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000050,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000060,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000070,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000080,
- "\x80\x25\x80\x25\x80\x25\x32\x24\xfb\x22\xd9\x21\xc8\x20\xc9\x1f",
- 16);
- memcpy (buf + 0x00000090,
- "\xd8\x1e\xf5\x1d\x1f\x1d\x54\x1c\x95\x1b\xdf\x1a\x32\x1a\x8d\x19",
- 16);
- memcpy (buf + 0x000000a0,
- "\xf1\x18\x5c\x18\xce\x17\x46\x17\xc3\x16\x47\x16\xd0\x15\x5d\x15",
- 16);
- memcpy (buf + 0x000000b0,
- "\xef\x14\x86\x14\x21\x14\xbf\x13\x61\x13\x07\x13\xaf\x12\x5b\x12",
- 16);
- memcpy (buf + 0x000000c0,
- "\x0a\x12\xbb\x11\x6f\x11\x26\x11\xdf\x10\x9a\x10\x57\x10\x17\x10",
- 16);
- memcpy (buf + 0x000000d0,
- "\xd8\x0f\x9c\x0f\x61\x0f\x27\x0f\xf0\x0e\xba\x0e\x85\x0e\x52\x0e",
- 16);
- memcpy (buf + 0x000000e0,
- "\x21\x0e\xf0\x0d\xc1\x0d\x93\x0d\x67\x0d\x3b\x0d\x11\x0d\xe7\x0c",
- 16);
- memcpy (buf + 0x000000f0,
- "\xbf\x0c\x98\x0c\x71\x0c\x4b\x0c\x27\x0c\x03\x0c\xe0\x0b\xbe\x0b",
- 16);
- memcpy (buf + 0x00000100, "\x9c\x0b\x7c\x0b", 4);
count = 260;
+ make_slope_table (count, top_value, 0x86, 0.017979, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x25\x18\x1f\x8f\x1a\x2d\x17\x8f\x14\x79\x12",
- 16);
- memcpy (buf + 0x00000010,
- "\xc6\x10\x5b\x0f\x2a\x0e\x24\x0d\x41\x0c\x7c\x0b\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020, "\x80\x25\x80\x25", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.102968, buf);
+
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -1906,11 +1344,18 @@ startblob_2224_0150 (CANON_Handle * chndl, unsigned char *buf)
void
startblob_2224_0300 (CANON_Handle * chndl, unsigned char *buf)
{
-
int fd;
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0x3200;
+ unsigned char value_62 = 0x15;
+
+/* original:
+ unsigned int top_value = 0x3200;
+ unsigned char value_62 = 0x15;
+ ratio 609.52 decimal
+*/
cp2155_set (fd, 0x90, 0xe8);
cp2155_set (fd, 0x9b, 0x06);
cp2155_set (fd, 0x9b, 0x04);
@@ -1929,7 +1374,7 @@ startblob_2224_0300 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x15);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0xe0);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -1988,114 +1433,20 @@ startblob_2224_0300 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x01);
- cp2155_set (fd, 0x14, 0x01);
- cp2155_set (fd, 0x17, 0x01);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x0a);
- cp2155_set (fd, 0x33, 0x0a);
- cp2155_set (fd, 0x24, 0x0a);
- cp2155_set (fd, 0x34, 0x0a);
- cp2155_set (fd, 0x25, 0x0a);
- cp2155_set (fd, 0x35, 0x0a);
- cp2155_set (fd, 0x26, 0x0a);
- cp2155_set (fd, 0x36, 0x0a);
- cp2155_set (fd, 0x27, 0x0a);
- cp2155_set (fd, 0x37, 0x0a);
- cp2155_set (fd, 0x28, 0x0a);
- cp2155_set (fd, 0x38, 0x0a);
- cp2155_set (fd, 0x29, 0x0a);
- cp2155_set (fd, 0x39, 0x0a);
- cp2155_set (fd, 0x2a, 0x0a);
- cp2155_set (fd, 0x3a, 0x0a);
- cp2155_set (fd, 0x2b, 0x0a);
- cp2155_set (fd, 0x3b, 0x0a);
- cp2155_set (fd, 0x2c, 0x0a);
- cp2155_set (fd, 0x3c, 0x0a);
- cp2155_set (fd, 0x2d, 0x0a);
- cp2155_set (fd, 0x3d, 0x0a);
- cp2155_set (fd, 0x2e, 0x0a);
- cp2155_set (fd, 0x3e, 0x0a);
- cp2155_set (fd, 0x2f, 0x0a);
- cp2155_set (fd, 0x3f, 0x0a);
- cp2155_set (fd, 0x30, 0x0a);
- cp2155_set (fd, 0x40, 0x0a);
- cp2155_set (fd, 0x31, 0x0a);
- cp2155_set (fd, 0x41, 0x0a);
- cp2155_set (fd, 0x32, 0x0a);
- cp2155_set (fd, 0x42, 0x0a);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ register_table (fd, 0x0a, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x0000,
- "\x04\x70\x00\x01\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32",
- 16);
- memcpy (buf + 0x0010,
- "\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32",
- 16);
- memcpy (buf + 0x0020,
- "\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32",
- 16);
- memcpy (buf + 0x0030,
- "\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32",
- 16);
- memcpy (buf + 0x0040,
- "\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32",
- 16);
- memcpy (buf + 0x0050,
- "\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32\x00\x32",
- 16);
- memcpy (buf + 0x0060,
- "\x00\x32\x00\x32\x00\x32\xbc\x30\x89\x2f\x64\x2e\x4d\x2d\x43\x2c",
- 16);
- memcpy (buf + 0x0070,
- "\x45\x2b\x52\x2a\x69\x29\x8a\x28\xb5\x27\xe8\x26\x23\x26\x66\x25",
- 16);
- memcpy (buf + 0x0080,
- "\xaf\x24\x00\x24\x57\x23\xb5\x22\x17\x22\x80\x21\xee\x20\x60\x20",
- 16);
- memcpy (buf + 0x0090,
- "\xd7\x1f\x53\x1f\xd3\x1e\x57\x1e\xde\x1d\x6a\x1d\xf9\x1c\x8b\x1c",
- 16);
- memcpy (buf + 0x00a0,
- "\x20\x1c\xb9\x1b\x54\x1b\xf3\x1a\x93\x1a\x37\x1a\xdd\x19\x85\x19",
- 16);
- memcpy (buf + 0x00b0,
- "\x30\x19\xdd\x18\x8c\x18\x3d\x18\xf0\x17\xa5\x17\x5c\x17\x14\x17",
- 16);
- memcpy (buf + 0x00c0,
- "\xce\x16\x8a\x16\x47\x16\x06\x16\xc7\x15\x88\x15\x4b\x15\x10\x15",
- 16);
- memcpy (buf + 0x00d0,
- "\xd6\x14\x9d\x14\x65\x14\x2e\x14\xf9\x13\xc4\x13\x91\x13\x5f\x13",
- 16);
- memcpy (buf + 0x00e0,
- "\x2d\x13\xfd\x12\xce\x12\x9f\x12\x72\x12\x45\x12\x19\x12\xee\x11",
- 16);
- memcpy (buf + 0x00f0,
- "\xc4\x11\x9a\x11\x71\x11\x49\x11\x22\x11\xfb\x10\xd5\x10\xb0\x10",
- 16);
- memcpy (buf + 0x0100, "\x8c\x10\x68\x10", 4);
count = 260;
+ make_slope_table (count, top_value, 0x66, 0.0129596, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x0000,
- "\x04\x70\x20\x00\x00\x32\x27\x2a\x6f\x24\x15\x20\xa8\x1c\xe5\x19",
- 16);
- memcpy (buf + 0x0010,
- "\x9e\x17\xb5\x15\x16\x14\xb0\x12\x79\x11\x68\x10\x00\x00\x00\x00",
- 16);
- memcpy (buf + 0x0020, "\x00\x00\x00\x00", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.09307359, buf);
+
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -2111,6 +1462,14 @@ startblob_2224_0600 (CANON_Handle * chndl, unsigned char *buf)
fd = chndl->fd;
size_t count;
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x19;
+
+/* original:
+ unsigned int top_value = 0x7f80;
+ unsigned char value_62 = 0x55;
+ ratio 384 decimal
+*/
cp2155_set (fd, 0x90, 0xe8);
cp2155_set (fd, 0x9b, 0x06);
cp2155_set (fd, 0x9b, 0x04);
@@ -2129,7 +1488,7 @@ startblob_2224_0600 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x55);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0x00);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -2166,7 +1525,7 @@ startblob_2224_0600 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x80, 0x12);
cp2155_set (fd, 0xb0, 0x08);
- big_write (fd, 0x5694, buf);
+ big_write_2224 (fd, 0x5694, buf);
cp2155_set (fd, 0x10, 0x05);
cp2155_set (fd, 0x10, 0x05);
@@ -2191,59 +1550,13 @@ startblob_2224_0600 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x80);
- cp2155_set (fd, 0x14, 0x7a);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x0c);
- cp2155_set (fd, 0x33, 0x0c);
- cp2155_set (fd, 0x24, 0x0c);
- cp2155_set (fd, 0x34, 0x0c);
- cp2155_set (fd, 0x25, 0x0c);
- cp2155_set (fd, 0x35, 0x0c);
- cp2155_set (fd, 0x26, 0x0c);
- cp2155_set (fd, 0x36, 0x0c);
- cp2155_set (fd, 0x27, 0x0c);
- cp2155_set (fd, 0x37, 0x0c);
- cp2155_set (fd, 0x28, 0x0c);
- cp2155_set (fd, 0x38, 0x0c);
- cp2155_set (fd, 0x29, 0x0c);
- cp2155_set (fd, 0x39, 0x0c);
- cp2155_set (fd, 0x2a, 0x0c);
- cp2155_set (fd, 0x3a, 0x0c);
- cp2155_set (fd, 0x2b, 0x0c);
- cp2155_set (fd, 0x3b, 0x0c);
- cp2155_set (fd, 0x2c, 0x0c);
- cp2155_set (fd, 0x3c, 0x0c);
- cp2155_set (fd, 0x2d, 0x0c);
- cp2155_set (fd, 0x3d, 0x0c);
- cp2155_set (fd, 0x2e, 0x0c);
- cp2155_set (fd, 0x3e, 0x0c);
- cp2155_set (fd, 0x2f, 0x0c);
- cp2155_set (fd, 0x3f, 0x0c);
- cp2155_set (fd, 0x30, 0x0c);
- cp2155_set (fd, 0x40, 0x0c);
- cp2155_set (fd, 0x31, 0x0c);
- cp2155_set (fd, 0x41, 0x0c);
- cp2155_set (fd, 0x32, 0x0c);
- cp2155_set (fd, 0x42, 0x0c);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ register_table (fd, 0x0c, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000010,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x00\x00\x00\x00",
- 16);
- memcpy (buf + 0x00000020, "\x00\x00\x00\x00", 4);
+
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
@@ -2257,17 +1570,36 @@ startblob_2224_0600 (CANON_Handle * chndl, unsigned char *buf)
void
startblob_2224_1200 (CANON_Handle * chndl, unsigned char *buf)
{
-
+/*
+ chndl->value_51 = 0x0f;
+*/
int fd;
fd = chndl->fd;
size_t count;
- cp2155_set (fd, 0x90, 0xe8);
- cp2155_set (fd, 0x9b, 0x06);
- cp2155_set (fd, 0x9b, 0x04);
- cp2155_set (fd, 0x9b, 0x06);
- cp2155_set (fd, 0x9b, 0x04);
- cp2155_set (fd, 0x90, 0xf8);
+ unsigned int top_value = 0x7c71;
+ unsigned char value_62 = 0x29;
+
+/*
+ unsigned int top_value = 0x3fc7;
+ unsigned char value_62 = 0x15;
+ ratio 777 decimal
+*/
+
+ cp2155_set (fd, 0x90, 0xe0); /* e8 */
+
+ double n_msec = 10.0;
+ int n_9b = 10; /* 2 */
+ while (n_9b > 0)
+ {
+ cp2155_set (fd, 0x9b, 0x06);
+ usleep (n_msec * MSEC);
+ cp2155_set (fd, 0x9b, 0x04);
+ usleep (n_msec * MSEC);
+ n_9b--;
+ }
+
+ cp2155_set (fd, 0x90, 0xf0); /* f8 */
cp2155_set (fd, 0xb0, 0x00);
cp2155_set (fd, 0x07, 0x00);
cp2155_set (fd, 0x07, 0x00);
@@ -2282,7 +1614,7 @@ startblob_2224_1200 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0xaa);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0x00);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -2319,7 +1651,8 @@ startblob_2224_1200 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x80, 0x12);
cp2155_set (fd, 0xb0, 0x08);
- big_write (fd, 0xa714, buf);
+ big_write (fd, 0xa1a4, buf);
+/* big_write_film (fd, 0xf004, buf); */
cp2155_set (fd, 0x10, 0x05);
cp2155_set (fd, 0x10, 0x05);
@@ -2344,127 +1677,434 @@ startblob_2224_1200 (CANON_Handle * chndl, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, chndl->value_67);
cp2155_set (fd, 0x68, chndl->value_68);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x80);
- cp2155_set (fd, 0x14, 0x7a);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x01);
- cp2155_set (fd, 0x33, 0x01);
- cp2155_set (fd, 0x24, 0x03);
- cp2155_set (fd, 0x34, 0x03);
- cp2155_set (fd, 0x25, 0x05);
- cp2155_set (fd, 0x35, 0x05);
- cp2155_set (fd, 0x26, 0x07);
- cp2155_set (fd, 0x36, 0x07);
- cp2155_set (fd, 0x27, 0x09);
- cp2155_set (fd, 0x37, 0x09);
- cp2155_set (fd, 0x28, 0x0a);
- cp2155_set (fd, 0x38, 0x0a);
- cp2155_set (fd, 0x29, 0x0b);
- cp2155_set (fd, 0x39, 0x0b);
- cp2155_set (fd, 0x2a, 0x0c);
- cp2155_set (fd, 0x3a, 0x0c);
- cp2155_set (fd, 0x2b, 0x0c);
- cp2155_set (fd, 0x3b, 0x0c);
- cp2155_set (fd, 0x2c, 0x0b);
- cp2155_set (fd, 0x3c, 0x0b);
- cp2155_set (fd, 0x2d, 0x0a);
- cp2155_set (fd, 0x3d, 0x0a);
- cp2155_set (fd, 0x2e, 0x09);
- cp2155_set (fd, 0x3e, 0x09);
- cp2155_set (fd, 0x2f, 0x07);
- cp2155_set (fd, 0x3f, 0x07);
- cp2155_set (fd, 0x30, 0x05);
- cp2155_set (fd, 0x40, 0x05);
- cp2155_set (fd, 0x31, 0x03);
- cp2155_set (fd, 0x41, 0x03);
- cp2155_set (fd, 0x32, 0x01);
- cp2155_set (fd, 0x42, 0x01);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ memcpy (buf, "\x01\x03\x05\x07\x09\x0a\x0b\x0c\x0c", 9);
+ register_table (fd, 0, buf);
+ cp2155_set (fd, 0x18, 0x00);
+
+ count = 324;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
+
+ write_buf (fd, count, buf, 0x03, 0x00);
+ write_buf (fd, count, buf, 0x03, 0x02);
+ write_buf (fd, count, buf, 0x03, 0x06);
+
+ count = 36;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
+
+ write_buf (fd, count, buf, 0x03, 0x04);
+ write_buf (fd, count, buf, 0x03, 0x08);
+
+ general_motor_2224 (fd);
+
+}
+
+void
+startblob_2224_2400 (CANON_Handle * chndl, unsigned char *buf)
+{
+
+ int fd;
+ fd = chndl->fd;
+ size_t count;
+
+ unsigned int top_value = 0x5555; /* was 0x7c71 */
+ unsigned char value_62 = 0x0e; /* at 0x15 ratio 1517 decimal, value_62 was 0x29 */
+
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x11, 0x83);
+/*
+ unsigned int top_value = 0x3fc7;
+ unsigned char value_62 = 0x15;
+ ratio 777 decimal
+
+ cp2155_set (fd, 0x01, 0x2b);
+ cp2155_set (fd, 0x04, 0x08);
+ cp2155_set (fd, 0x05, 0x00);
+ cp2155_set (fd, 0x06, 0x00);
+*/
+ cp2155_set (fd, 0x90, 0xe0);
+
+ double n_msec = 10.0;
+ int n_9b = 11;
+ while (n_9b > 0)
+ {
+ cp2155_set (fd, 0x9b, 0x06);
+ usleep (n_msec * MSEC);
+ cp2155_set (fd, 0x9b, 0x04);
+ usleep (n_msec * MSEC);
+ n_9b--;
+ }
+
+ cp2155_set (fd, 0x90, 0xf0);
+ cp2155_set (fd, 0xb0, 0x00);
+ cp2155_set (fd, 0x07, 0x00);
+ cp2155_set (fd, 0x07, 0x00);
+ cp2155_set (fd, 0x08, chndl->value_08);
+ cp2155_set (fd, 0x09, chndl->value_09);
+ cp2155_set (fd, 0x0a, chndl->value_0a);
+ cp2155_set (fd, 0x0b, chndl->value_0b);
+ cp2155_set (fd, 0xa0, 0x25);
+ cp2155_set (fd, 0xa1, 0x00);
+ cp2155_set (fd, 0xa2, 0x92);
+ cp2155_set (fd, 0xa3, 0x10);
+ cp2155_set (fd, 0x64, 0x00);
+ cp2155_set (fd, 0x65, 0x00);
+ cp2155_set (fd, 0x61, 0x00);
+ cp2155_set (fd, 0x62, value_62);
+ cp2155_set (fd, 0x63, 0x00);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x90, 0xf1);
+ cp2155_set (fd, 0x51, chndl->value_51);
+ cp2155_set (fd, 0x5a, 0xff);
+ cp2155_set (fd, 0x5b, 0xff);
+ cp2155_set (fd, 0x5c, 0xff);
+ cp2155_set (fd, 0x5d, 0xff);
+ cp2155_set (fd, 0x52, 0x47);
+ cp2155_set (fd, 0x53, 0x3d);
+ cp2155_set (fd, 0x54, 0x2b);
+ cp2155_set (fd, 0x55, 0xd1);
+ cp2155_set (fd, 0x56, 0x20);
+ cp2155_set (fd, 0x57, 0x3d);
+ cp2155_set (fd, 0x58, 0x13);
+ cp2155_set (fd, 0x59, 0x25);
+ cp2155_set (fd, 0x5e, 0x02);
+ cp2155_set (fd, 0x5f, 0x00);
+ cp2155_set (fd, 0x5f, 0x03);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x51, chndl->value_51);
+ cp2155_set (fd, 0x81, 0x31); /* 0x29); = darker */
+ cp2155_set (fd, 0x81, 0x31); /* 0x29); */
+ cp2155_set (fd, 0x82, 0x11);
+ cp2155_set (fd, 0x82, 0x11);
+ cp2155_set (fd, 0x83, 0x01);
+ cp2155_set (fd, 0x84, 0x05);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0xb0, 0x08);
+
+ big_write (fd, 0xa1a4, buf);
+ big_write_film (fd, 0xf004, buf);
+
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x81);
+ cp2155_set (fd, 0x11, 0x81);
+ cp2155_set (fd, 0x12, 0x50);
+ cp2155_set (fd, 0x13, 0x50);
+ cp2155_set (fd, 0x16, 0x50);
+ cp2155_set (fd, 0x21, 0x06);
+ cp2155_set (fd, 0x22, 0x50);
+ cp2155_set (fd, 0x20, 0x06);
+ cp2155_set (fd, 0x1d, 0x00);
+ cp2155_set (fd, 0x1e, 0x00);
+ cp2155_set (fd, 0x1f, 0x04);
+ cp2155_set (fd, 0x66, chndl->value_66);
+ cp2155_set (fd, 0x67, chndl->value_67);
+ cp2155_set (fd, 0x68, chndl->value_68);
+
+ memcpy (buf, "\x02\x04\x04\x06\x06\x08\x08\x0a\x0a", 9);
+ register_table (fd, 0, buf);
+ cp2155_set (fd, 0x18, 0x00);
+
+ count = 324;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
+
+ write_buf (fd, count, buf, 0x03, 0x00);
+ write_buf (fd, count, buf, 0x03, 0x02);
+ write_buf (fd, count, buf, 0x03, 0x06);
+
+ count = 36;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
+
+ write_buf (fd, count, buf, 0x03, 0x04);
+ write_buf (fd, count, buf, 0x03, 0x08);
+
+ general_motor_2224 (fd);
+
+}
+
+void
+startblob_2224_4800 (CANON_Handle * chndl, unsigned char *buf)
+{
+
+ int fd;
+ fd = chndl->fd;
+ size_t count;
+
+ unsigned int top_value = 0x3fc7; /* was 0x7c71 */
+ unsigned char value_62 = 0x15; /* at 0x15 ratio 1517 decimal, value_62 was 0x29 */
+
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x11, 0x83);
+/*
+ unsigned int top_value = 0x3fc7;
+ unsigned char value_62 = 0x15;
+ ratio 777 decimal
+
+ cp2155_set (fd, 0x01, 0x2b);
+ cp2155_set (fd, 0x04, 0x08);
+ cp2155_set (fd, 0x05, 0x00);
+ cp2155_set (fd, 0x06, 0x00);
+*/
+ cp2155_set (fd, 0x90, 0xe0);
+
+ double n_msec = 10.0;
+ int n_9b = 12;
+ while (n_9b > 0)
+ {
+ cp2155_set (fd, 0x9b, 0x06);
+ usleep (n_msec * MSEC);
+ cp2155_set (fd, 0x9b, 0x04);
+ usleep (n_msec * MSEC);
+ n_9b--;
+ }
+
+ cp2155_set (fd, 0x90, 0xf0);
+ cp2155_set (fd, 0xb0, 0x00);
+ cp2155_set (fd, 0x07, 0x00);
+ cp2155_set (fd, 0x07, 0x00);
+ cp2155_set (fd, 0x08, chndl->value_08);
+ cp2155_set (fd, 0x09, chndl->value_09);
+ cp2155_set (fd, 0x0a, chndl->value_0a);
+ cp2155_set (fd, 0x0b, chndl->value_0b);
+ cp2155_set (fd, 0xa0, 0x25);
+ cp2155_set (fd, 0xa1, 0x00);
+ cp2155_set (fd, 0xa2, 0x92);
+ cp2155_set (fd, 0xa3, 0x10);
+ cp2155_set (fd, 0x64, 0x00);
+ cp2155_set (fd, 0x65, 0x00);
+ cp2155_set (fd, 0x61, 0x00);
+ cp2155_set (fd, 0x62, value_62);
+ cp2155_set (fd, 0x63, 0x00);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x90, 0xf1);
+ cp2155_set (fd, 0x51, chndl->value_51);
+ cp2155_set (fd, 0x5a, 0xff);
+ cp2155_set (fd, 0x5b, 0xff);
+ cp2155_set (fd, 0x5c, 0xff);
+ cp2155_set (fd, 0x5d, 0xff);
+ cp2155_set (fd, 0x52, 0x47);
+ cp2155_set (fd, 0x53, 0x3d);
+ cp2155_set (fd, 0x54, 0x2b);
+ cp2155_set (fd, 0x55, 0xd1);
+ cp2155_set (fd, 0x56, 0x20);
+ cp2155_set (fd, 0x57, 0x3d);
+ cp2155_set (fd, 0x58, 0x13);
+ cp2155_set (fd, 0x59, 0x25);
+ cp2155_set (fd, 0x5e, 0x02);
+ cp2155_set (fd, 0x5f, 0x00);
+ cp2155_set (fd, 0x5f, 0x03);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x51, chndl->value_51);
+ cp2155_set (fd, 0x81, 0x31); /* 0x29); = darker */
+ cp2155_set (fd, 0x81, 0x31); /* 0x29); */
+ cp2155_set (fd, 0x82, 0x11);
+ cp2155_set (fd, 0x82, 0x11);
+ cp2155_set (fd, 0x83, 0x01);
+ cp2155_set (fd, 0x84, 0x05);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0xb0, 0x08);
+
+ big_write (fd, 0xa1a4, buf);
+ big_write_film (fd, 0xf004, buf);
+
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x81);
+ cp2155_set (fd, 0x11, 0x81);
+ cp2155_set (fd, 0x12, 0x50);
+ cp2155_set (fd, 0x13, 0x50);
+ cp2155_set (fd, 0x16, 0x50);
+ cp2155_set (fd, 0x21, 0x06);
+ cp2155_set (fd, 0x22, 0x50);
+ cp2155_set (fd, 0x20, 0x06);
+ cp2155_set (fd, 0x1d, 0x00);
+ cp2155_set (fd, 0x1e, 0x00);
+ cp2155_set (fd, 0x1f, 0x04);
+ cp2155_set (fd, 0x66, chndl->value_66);
+ cp2155_set (fd, 0x67, chndl->value_67);
+ cp2155_set (fd, 0x68, chndl->value_68);
+
+ memcpy (buf, "\x02\x04\x04\x06\x06\x08\x08\x0a\x0a", 9);
+ register_table (fd, 0, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x00000000,
- "\x04\x70\x40\x01\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000010,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000020,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000030,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000040,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000050,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000060,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000070,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000080,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000090,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x000000a0,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x000000b0,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x000000c0,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x000000d0,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x000000e0,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x000000f0,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000100,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000110,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000120,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000130,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000140, "\x80\x7f\x80\x7f", 4);
count = 324;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000010,
- "\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f\x80\x7f",
- 16);
- memcpy (buf + 0x00000020, "\x80\x7f\x80\x7f", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
+
+ write_buf (fd, count, buf, 0x03, 0x04);
+ write_buf (fd, count, buf, 0x03, 0x08);
+
+ general_motor_2224 (fd);
+
+}
+
+void
+startblob_2224_4799 (CANON_Handle * chndl, unsigned char *buf)
+{
+
+ int fd;
+ fd = chndl->fd;
+ size_t count;
+
+ unsigned int top_value = 0x1400; /* was 0x7c71 */
+ unsigned char value_62 = 0x14; /* at 0x15 ratio 1517 decimal, value_62 was 0x29 */
+
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x11, 0x83);
+
+/*
+ unsigned int top_value = 0x3fc7;
+ unsigned char value_62 = 0x15;
+ ratio 777 decimal
+
+ cp2155_set (fd, 0x01, 0x2b);
+ cp2155_set (fd, 0x04, 0x08);
+ cp2155_set (fd, 0x05, 0x00);
+ cp2155_set (fd, 0x06, 0x00);
+*/
+ cp2155_set (fd, 0x90, 0xe0);
+
+ double n_msec = 10.0;
+ int n_9b = 12;
+ while (n_9b > 0)
+ {
+ cp2155_set (fd, 0x9b, 0x06);
+ usleep (n_msec * MSEC);
+ cp2155_set (fd, 0x9b, 0x04);
+ usleep (n_msec * MSEC);
+ n_9b--;
+ }
+
+ cp2155_set (fd, 0x90, 0xf0);
+ cp2155_set (fd, 0xb0, 0x00);
+ cp2155_set (fd, 0x07, 0x00);
+ cp2155_set (fd, 0x07, 0x00);
+ cp2155_set (fd, 0x08, chndl->value_08);
+ cp2155_set (fd, 0x09, chndl->value_09);
+ cp2155_set (fd, 0x0a, chndl->value_0a);
+ cp2155_set (fd, 0x0b, chndl->value_0b);
+ cp2155_set (fd, 0xa0, 0x25);
+ cp2155_set (fd, 0xa1, 0x01);
+ cp2155_set (fd, 0xa2, 0x23);
+ cp2155_set (fd, 0xa3, 0x10);
+ cp2155_set (fd, 0x64, 0x00);
+ cp2155_set (fd, 0x65, 0x00);
+ cp2155_set (fd, 0x61, 0x00);
+ cp2155_set (fd, 0x62, value_62);
+ cp2155_set (fd, 0x63, 0x00);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x90, 0xf1);
+ cp2155_set (fd, 0x51, chndl->value_51);
+ cp2155_set (fd, 0x5a, 0xff);
+ cp2155_set (fd, 0x5b, 0xff);
+ cp2155_set (fd, 0x5c, 0xff);
+ cp2155_set (fd, 0x5d, 0xff);
+ cp2155_set (fd, 0x52, 0x92);
+ cp2155_set (fd, 0x53, 0xa0);
+ cp2155_set (fd, 0x54, 0x58);
+ cp2155_set (fd, 0x55, 0x29);
+ cp2155_set (fd, 0x56, 0x40);
+ cp2155_set (fd, 0x57, 0x08);
+ cp2155_set (fd, 0x58, 0x27);
+ cp2155_set (fd, 0x59, 0xc7);
+ cp2155_set (fd, 0x5e, 0x02);
+ cp2155_set (fd, 0x5f, 0x00);
+ cp2155_set (fd, 0x5f, 0x03);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x60, 0x01);
+ cp2155_set (fd, 0x50, 0x04);
+ cp2155_set (fd, 0x51, chndl->value_51);
+ cp2155_set (fd, 0x81, 0x29);
+ cp2155_set (fd, 0x81, 0x29);
+ cp2155_set (fd, 0x82, 0x11);
+ cp2155_set (fd, 0x82, 0x11);
+ cp2155_set (fd, 0x83, 0x01);
+ cp2155_set (fd, 0x84, 0x05);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0x80, 0x12);
+ cp2155_set (fd, 0xb0, 0x08);
+
+ big_write (fd, 0xa1a4, buf);
+ big_write_film (fd, 0xf004, buf);
+
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x10, 0x05);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x83);
+ cp2155_set (fd, 0x11, 0x81);
+ cp2155_set (fd, 0x11, 0x81);
+ cp2155_set (fd, 0x12, 0x50);
+ cp2155_set (fd, 0x13, 0x50);
+ cp2155_set (fd, 0x16, 0x50);
+ cp2155_set (fd, 0x21, 0x06);
+ cp2155_set (fd, 0x22, 0x50);
+ cp2155_set (fd, 0x20, 0x06);
+ cp2155_set (fd, 0x1d, 0x00);
+ cp2155_set (fd, 0x1e, 0x00);
+ cp2155_set (fd, 0x1f, 0x04);
+ cp2155_set (fd, 0x66, chndl->value_66);
+ cp2155_set (fd, 0x67, chndl->value_67);
+ cp2155_set (fd, 0x68, chndl->value_68);
+
+ register_table_4800 (fd, 0x05, buf);
+ cp2155_set (fd, 0x18, 0x02);
+
+ count = 324;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
+
+ write_buf (fd, count, buf, 0x03, 0x00);
+ write_buf (fd, count, buf, 0x03, 0x02);
+ write_buf (fd, count, buf, 0x03, 0x06);
+
+ count = 36;
+ make_slope_table (count, top_value, 0x06, 0.0, buf);
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -2476,16 +2116,18 @@ startblob_2224_1200 (CANON_Handle * chndl, unsigned char *buf)
void
send_start_blob (CANON_Handle * chndl)
{
- unsigned char buf[0xf000];
+ unsigned char buf[0xfff0];
int fd;
fd = chndl->fd;
/* value_51: lamp colors
- bit 0 set: red on, bit 1 set: green on, bit 2 set: blue on
+ bit 0 set: red on, bit 1 set: green on, bit 2 set: blue on,
+ bit 3 set: infrared on
all bits off: no scan is made
*/
chndl->value_51 = 0x07;
+ chndl->value_66 = 0x00;
switch (chndl->val[opt_resolution].w)
{
@@ -2508,21 +2150,33 @@ send_start_blob (CANON_Handle * chndl)
case 1200:
chndl->value_67 = 0xab; /* 6*7300 */
chndl->value_68 = 0x18;
+ break;
+ case 2400:
+ chndl->value_66 = 0x01;
+ chndl->value_67 = 0x56; /* 12*7300 */
+ chndl->value_68 = 0x30;
+ break;
+ case 4800:
+ chndl->value_66 = 0x02;
+ chndl->value_67 = 0xac; /* 24*7300 */
+ chndl->value_68 = 0x60;
}
+ unsigned char value_11 = 0xc1; /* 0x00; */
+
cp2155_set (fd, 0x80, 0x12);
- cp2155_set (fd, 0x11, 0xc1);
+ cp2155_set (fd, 0x11, value_11);
cp2155_set (fd, 0x80, 0x12);
- cp2155_set (fd, 0x11, 0xc1);
+ cp2155_set (fd, 0x11, value_11);
cp2155_set (fd, 0x90, 0xf8);
cp2155_set (fd, 0x80, 0x12);
- cp2155_set (fd, 0x11, 0xc1);
+ cp2155_set (fd, 0x11, value_11);
cp2155_set (fd, 0x01, 0x29);
cp2155_set (fd, 0x04, 0x0c);
cp2155_set (fd, 0x05, 0x00);
cp2155_set (fd, 0x06, 0x00);
cp2155_set (fd, 0x01, 0x29);
- cp2155_set_gamma (fd);
+ cp2155_set_gamma (fd, chndl);
switch (chndl->val[opt_resolution].w)
{
@@ -2553,14 +2207,14 @@ send_start_blob (CANON_Handle * chndl)
}
else
{
- cp2155_set_gamma_red_enhanced (fd);
+ cp2155_set_gamma_red_enhanced (fd, chndl);
startblob_2224_0300 (chndl, buf);
}
break;
case 600:
if (chndl->productcode == 0x2225)
{
- cp2155_set_gamma_red_enhanced (fd);
+ cp2155_set_gamma_red_enhanced (fd, chndl);
startblob_2225_0600 (chndl, buf);
/*
startblob_2225_0600_extra (chndl, buf);
@@ -2581,6 +2235,26 @@ send_start_blob (CANON_Handle * chndl)
startblob_2224_1200 (chndl, buf);
}
break;
+ case 2400:
+ if (chndl->productcode == 0x2225)
+ {
+ startblob_2225_1200 (chndl, buf);
+ }
+ else
+ {
+ startblob_2224_2400 (chndl, buf);
+ }
+ break;
+ case 4800:
+ if (chndl->productcode == 0x2225)
+ {
+ startblob_2225_1200 (chndl, buf);
+ }
+ else
+ {
+ startblob_2224_4800 (chndl, buf);
+ }
+ break;
}
}
@@ -2658,7 +2332,7 @@ init_2225 (CANON_Handle * chndl)
/* Detect if scanner is plugged in */
if (value != 0x81 && value != 0x40)
{
- DBG (0, "INIT: unexpected value: %x\n", value);
+ DBG (1, "INIT: unexpected value: %x\n", value);
}
if (value == 0x00)
@@ -2774,10 +2448,20 @@ init (CANON_Handle * chndl)
int result;
if (chndl->productcode == 0x2225)
{
+ chndl->table_gamma = 2.2;
+ chndl->table_gamma_blue = 2.2;
+ chndl->highlight_red_enhanced = 190;
+ chndl->highlight_other = 240;
+ chndl->highlight_blue_reduced = 240;
result = init_2225 (chndl);
}
else
{
+ chndl->table_gamma = 2.2;
+ chndl->table_gamma_blue = 1.95;
+ chndl->highlight_red_enhanced = 190;
+ chndl->highlight_other = 215;
+ chndl->highlight_blue_reduced = 255;
result = init_2224 (chndl);
}
return result;
@@ -2787,6 +2471,14 @@ void
back2225 (int fd, unsigned char *buf)
{
size_t count;
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2e;
+
+/* original:
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2e;
+ ratio 320 decimal
+*/
cp2155_set (fd, 0x90, 0xc8);
cp2155_set (fd, 0x90, 0xc8);
cp2155_set (fd, 0xb0, 0x03);
@@ -2803,7 +2495,7 @@ back2225 (int fd, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x2e);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0x00);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -2861,114 +2553,21 @@ back2225 (int fd, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, 0x00);
cp2155_set (fd, 0x68, 0x06);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x83);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x28);
- cp2155_set (fd, 0x33, 0x28);
- cp2155_set (fd, 0x24, 0x27);
- cp2155_set (fd, 0x34, 0x27);
- cp2155_set (fd, 0x25, 0x25);
- cp2155_set (fd, 0x35, 0x25);
- cp2155_set (fd, 0x26, 0x21);
- cp2155_set (fd, 0x36, 0x21);
- cp2155_set (fd, 0x27, 0x1c);
- cp2155_set (fd, 0x37, 0x1c);
- cp2155_set (fd, 0x28, 0x16);
- cp2155_set (fd, 0x38, 0x16);
- cp2155_set (fd, 0x29, 0x0f);
- cp2155_set (fd, 0x39, 0x0f);
- cp2155_set (fd, 0x2a, 0x08);
- cp2155_set (fd, 0x3a, 0x08);
- cp2155_set (fd, 0x2b, 0x00);
- cp2155_set (fd, 0x3b, 0x00);
- cp2155_set (fd, 0x2c, 0x08);
- cp2155_set (fd, 0x3c, 0x08);
- cp2155_set (fd, 0x2d, 0x0f);
- cp2155_set (fd, 0x3d, 0x0f);
- cp2155_set (fd, 0x2e, 0x16);
- cp2155_set (fd, 0x3e, 0x16);
- cp2155_set (fd, 0x2f, 0x1c);
- cp2155_set (fd, 0x3f, 0x1c);
- cp2155_set (fd, 0x30, 0x21);
- cp2155_set (fd, 0x40, 0x21);
- cp2155_set (fd, 0x31, 0x25);
- cp2155_set (fd, 0x41, 0x25);
- cp2155_set (fd, 0x32, 0x27);
- cp2155_set (fd, 0x42, 0x27);
- cp2155_set (fd, 0xca, 0x02);
- cp2155_set (fd, 0xca, 0x02);
- cp2155_set (fd, 0xca, 0x22);
+
+ memcpy (buf, "\x28\x27\x25\x21\x1c\x16\x0f\x08\x00", 9);
+ register_table (fd, 0, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x00000000,
- "\x04\x70\x00\x01\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000010,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000030,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000040,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000050,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000060,
- "\x80\x25\x80\x25\x80\x25\x80\x25\x80\x25\xf0\x23\x80\x22\x2c\x21",
- 16);
- memcpy (buf + 0x00000070,
- "\xf1\x1f\xcd\x1e\xbd\x1d\xc0\x1c\xd2\x1b\xf4\x1a\x22\x1a\x5e\x19",
- 16);
- memcpy (buf + 0x00000080,
- "\xa4\x18\xf5\x17\x4f\x17\xb2\x16\x1d\x16\x90\x15\x09\x15\x89\x14",
- 16);
- memcpy (buf + 0x00000090,
- "\x0e\x14\x9a\x13\x2a\x13\xc0\x12\x59\x12\xf8\x11\x9a\x11\x3f\x11",
- 16);
- memcpy (buf + 0x000000a0,
- "\xe9\x10\x96\x10\x46\x10\xf8\x0f\xae\x0f\x66\x0f\x21\x0f\xde\x0e",
- 16);
- memcpy (buf + 0x000000b0,
- "\x9e\x0e\x60\x0e\x23\x0e\xe9\x0d\xb0\x0d\x7a\x0d\x44\x0d\x11\x0d",
- 16);
- memcpy (buf + 0x000000c0,
- "\xdf\x0c\xaf\x0c\x80\x0c\x52\x0c\x25\x0c\xfa\x0b\xd0\x0b\xa7\x0b",
- 16);
- memcpy (buf + 0x000000d0,
- "\x80\x0b\x59\x0b\x33\x0b\x0e\x0b\xea\x0a\xc8\x0a\xa5\x0a\x84\x0a",
- 16);
- memcpy (buf + 0x000000e0,
- "\x64\x0a\x44\x0a\x25\x0a\x07\x0a\xe9\x09\xcd\x09\xb0\x09\x95\x09",
- 16);
- memcpy (buf + 0x000000f0,
- "\x7a\x09\x60\x09\x46\x09\x2c\x09\x14\x09\xfc\x08\xe4\x08\xcd\x08",
- 16);
- memcpy (buf + 0x00000100, "\xb6\x08\xa0\x08", 4);
count = 260;
+ make_slope_table (count, top_value, 0x6a, 0.021739, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x25\xc0\x1c\x4f\x17\x9a\x13\xe9\x10\xde\x0e",
- 16);
- memcpy (buf + 0x00000010,
- "\x44\x0d\xfa\x0b\xea\x0a\x07\x0a\x46\x09\xa0\x08\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020, "\x80\x25\x80\x25", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.15217, buf);
+
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -2985,10 +2584,18 @@ back2224 (int fd, unsigned char *buf)
{
size_t count;
-/* cp2155_set (fd, 0x90, 0xe8); */
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2e;
+
+/* original:
+ unsigned int top_value = 0x2580;
+ unsigned char value_62 = 0x2e;
+ ratio 320 decimal
+*/
+ cp2155_set (fd, 0x90, 0xe8);
cp2155_set (fd, 0x9b, 0x06);
cp2155_set (fd, 0x9b, 0x04);
-/* cp2155_set (fd, 0x90, 0xf8); */
+ cp2155_set (fd, 0x90, 0xf8);
cp2155_set (fd, 0xb0, 0x03);
cp2155_set (fd, 0x07, 0x00);
cp2155_set (fd, 0x07, 0x00);
@@ -3003,7 +2610,7 @@ back2224 (int fd, unsigned char *buf)
cp2155_set (fd, 0x64, 0x00);
cp2155_set (fd, 0x65, 0x00);
cp2155_set (fd, 0x61, 0x00);
- cp2155_set (fd, 0x62, 0x2e);
+ cp2155_set (fd, 0x62, value_62);
cp2155_set (fd, 0x63, 0x00);
cp2155_set (fd, 0x50, 0x04);
cp2155_set (fd, 0x50, 0x04);
@@ -3062,162 +2669,20 @@ back2224 (int fd, unsigned char *buf)
cp2155_set (fd, 0x66, 0x00);
cp2155_set (fd, 0x67, 0x00);
cp2155_set (fd, 0x68, 0x06);
- cp2155_set (fd, 0x1a, 0x00);
- cp2155_set (fd, 0x1b, 0x00);
- cp2155_set (fd, 0x1c, 0x02);
- cp2155_set (fd, 0x15, 0x83);
- cp2155_set (fd, 0x14, 0x7c);
- cp2155_set (fd, 0x17, 0x02);
- cp2155_set (fd, 0x43, 0x1c);
- cp2155_set (fd, 0x44, 0x9c);
- cp2155_set (fd, 0x45, 0x38);
- cp2155_set (fd, 0x23, 0x0d);
- cp2155_set (fd, 0x33, 0x0d);
- cp2155_set (fd, 0x24, 0x0d);
- cp2155_set (fd, 0x34, 0x0d);
- cp2155_set (fd, 0x25, 0x0d);
- cp2155_set (fd, 0x35, 0x0d);
- cp2155_set (fd, 0x26, 0x0d);
- cp2155_set (fd, 0x36, 0x0d);
- cp2155_set (fd, 0x27, 0x0d);
- cp2155_set (fd, 0x37, 0x0d);
- cp2155_set (fd, 0x28, 0x0d);
- cp2155_set (fd, 0x38, 0x0d);
- cp2155_set (fd, 0x29, 0x0d);
- cp2155_set (fd, 0x39, 0x0d);
- cp2155_set (fd, 0x2a, 0x0d);
- cp2155_set (fd, 0x3a, 0x0d);
- cp2155_set (fd, 0x2b, 0x0d);
- cp2155_set (fd, 0x3b, 0x0d);
- cp2155_set (fd, 0x2c, 0x0d);
- cp2155_set (fd, 0x3c, 0x0d);
- cp2155_set (fd, 0x2d, 0x0d);
- cp2155_set (fd, 0x3d, 0x0d);
- cp2155_set (fd, 0x2e, 0x0d);
- cp2155_set (fd, 0x3e, 0x0d);
- cp2155_set (fd, 0x2f, 0x0d);
- cp2155_set (fd, 0x3f, 0x0d);
- cp2155_set (fd, 0x30, 0x0d);
- cp2155_set (fd, 0x40, 0x0d);
- cp2155_set (fd, 0x31, 0x0d);
- cp2155_set (fd, 0x41, 0x0d);
- cp2155_set (fd, 0x32, 0x0d);
- cp2155_set (fd, 0x42, 0x0d);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
- cp2155_set (fd, 0xca, 0x00);
+
+ register_table (fd, 0x0d, buf);
cp2155_set (fd, 0x18, 0x00);
- memcpy (buf + 0x0000,
- "\x04\x70\xf4\x01\x80\x25\x00\x25\x84\x24\x0b\x24\x96\x23\x23\x23",
- 16);
- memcpy (buf + 0x0010,
- "\xb3\x22\x46\x22\xdb\x21\x73\x21\x0e\x21\xab\x20\x4a\x20\xeb\x1f",
- 16);
- memcpy (buf + 0x0020,
- "\x8f\x1f\x34\x1f\xdc\x1e\x85\x1e\x31\x1e\xde\x1d\x8d\x1d\x3e\x1d",
- 16);
- memcpy (buf + 0x0030,
- "\xf0\x1c\xa4\x1c\x59\x1c\x10\x1c\xc9\x1b\x83\x1b\x3e\x1b\xfa\x1a",
- 16);
- memcpy (buf + 0x0040,
- "\xb8\x1a\x77\x1a\x38\x1a\xf9\x19\xbc\x19\x80\x19\x44\x19\x0a\x19",
- 16);
- memcpy (buf + 0x0050,
- "\xd1\x18\x99\x18\x62\x18\x2c\x18\xf7\x17\xc3\x17\x8f\x17\x5d\x17",
- 16);
- memcpy (buf + 0x0060,
- "\x2b\x17\xfa\x16\xca\x16\x9b\x16\x6c\x16\x3e\x16\x11\x16\xe5\x15",
- 16);
- memcpy (buf + 0x0070,
- "\xb9\x15\x8e\x15\x64\x15\x3a\x15\x11\x15\xe9\x14\xc1\x14\x9a\x14",
- 16);
- memcpy (buf + 0x0080,
- "\x73\x14\x4d\x14\x27\x14\x02\x14\xde\x13\xba\x13\x96\x13\x74\x13",
- 16);
- memcpy (buf + 0x0090,
- "\x51\x13\x2f\x13\x0d\x13\xec\x12\xcc\x12\xab\x12\x8c\x12\x6c\x12",
- 16);
- memcpy (buf + 0x00a0,
- "\x4d\x12\x2f\x12\x11\x12\xf3\x11\xd5\x11\xb8\x11\x9c\x11\x80\x11",
- 16);
- memcpy (buf + 0x00b0,
- "\x64\x11\x48\x11\x2d\x11\x12\x11\xf7\x10\xdd\x10\xc3\x10\xa9\x10",
- 16);
- memcpy (buf + 0x00c0,
- "\x90\x10\x77\x10\x5e\x10\x46\x10\x2e\x10\x16\x10\xfe\x0f\xe7\x0f",
- 16);
- memcpy (buf + 0x00d0,
- "\xd0\x0f\xb9\x0f\xa2\x0f\x8c\x0f\x76\x0f\x60\x0f\x4b\x0f\x35\x0f",
- 16);
- memcpy (buf + 0x00e0,
- "\x20\x0f\x0b\x0f\xf7\x0e\xe2\x0e\xce\x0e\xba\x0e\xa6\x0e\x92\x0e",
- 16);
- memcpy (buf + 0x00f0,
- "\x7f\x0e\x6c\x0e\x59\x0e\x46\x0e\x33\x0e\x21\x0e\x0f\x0e\xfd\x0d",
- 16);
- memcpy (buf + 0x0100,
- "\xeb\x0d\xd9\x0d\xc8\x0d\xb6\x0d\xa5\x0d\x94\x0d\x83\x0d\x73\x0d",
- 16);
- memcpy (buf + 0x0110,
- "\x62\x0d\x52\x0d\x41\x0d\x31\x0d\x22\x0d\x12\x0d\x02\x0d\xf3\x0c",
- 16);
- memcpy (buf + 0x0120,
- "\xe3\x0c\xd4\x0c\xc5\x0c\xb6\x0c\xa7\x0c\x99\x0c\x8a\x0c\x7c\x0c",
- 16);
- memcpy (buf + 0x0130,
- "\x6e\x0c\x60\x0c\x52\x0c\x44\x0c\x36\x0c\x28\x0c\x1b\x0c\x0d\x0c",
- 16);
- memcpy (buf + 0x0140,
- "\x00\x0c\xf3\x0b\xe6\x0b\xd9\x0b\xcc\x0b\xbf\x0b\xb3\x0b\xa6\x0b",
- 16);
- memcpy (buf + 0x0150,
- "\x9a\x0b\x8e\x0b\x81\x0b\x75\x0b\x69\x0b\x5d\x0b\x52\x0b\x46\x0b",
- 16);
- memcpy (buf + 0x0160,
- "\x3a\x0b\x2f\x0b\x23\x0b\x18\x0b\x0d\x0b\x02\x0b\xf6\x0a\xeb\x0a",
- 16);
- memcpy (buf + 0x0170,
- "\xe1\x0a\xd6\x0a\xcb\x0a\xc0\x0a\xb6\x0a\xab\x0a\xa1\x0a\x97\x0a",
- 16);
- memcpy (buf + 0x0180,
- "\x8c\x0a\x82\x0a\x78\x0a\x6e\x0a\x64\x0a\x5a\x0a\x50\x0a\x47\x0a",
- 16);
- memcpy (buf + 0x0190,
- "\x3d\x0a\x33\x0a\x2a\x0a\x20\x0a\x17\x0a\x0e\x0a\x04\x0a\xfb\x09",
- 16);
- memcpy (buf + 0x01a0,
- "\xf2\x09\xe9\x09\xe0\x09\xd7\x09\xce\x09\xc6\x09\xbd\x09\xb4\x09",
- 16);
- memcpy (buf + 0x01b0,
- "\xab\x09\xa3\x09\x9a\x09\x92\x09\x8a\x09\x81\x09\x79\x09\x71\x09",
- 16);
- memcpy (buf + 0x01c0,
- "\x69\x09\x61\x09\x59\x09\x51\x09\x49\x09\x41\x09\x39\x09\x31\x09",
- 16);
- memcpy (buf + 0x01d0,
- "\x29\x09\x22\x09\x1a\x09\x12\x09\x0b\x09\x03\x09\xfc\x08\xf5\x08",
- 16);
- memcpy (buf + 0x01e0,
- "\xed\x08\xe6\x08\xdf\x08\xd8\x08\xd0\x08\xc9\x08\xc2\x08\xbb\x08",
- 16);
- memcpy (buf + 0x01f0,
- "\xb4\x08\xad\x08\xa6\x08\xa0\x08\x00\x00\x00\x00\x00\x00\x00\x00",
- 16);
- memcpy (buf + 0x0200, "\x00\x00\x00\x00", 4);
count = 516;
+ make_slope_table (count, top_value, 0x06, 0.0067225, buf);
+
write_buf (fd, count, buf, 0x03, 0x00);
write_buf (fd, count, buf, 0x03, 0x02);
write_buf (fd, count, buf, 0x03, 0x06);
- memcpy (buf + 0x00000000,
- "\x04\x70\x18\x00\x80\x25\xc0\x1c\x4f\x17\x9a\x13\xe9\x10\xde\x0e",
- 16);
- memcpy (buf + 0x00000010,
- "\x44\x0d\xfa\x0b\xea\x0a\x07\x0a\x46\x09\xa0\x08\x80\x25\x80\x25",
- 16);
- memcpy (buf + 0x00000020, "\x80\x25\x80\x25", 4);
count = 36;
+ make_slope_table (count, top_value, 0x06, 0.15217, buf);
+
write_buf (fd, count, buf, 0x03, 0x04);
write_buf (fd, count, buf, 0x03, 0x08);
@@ -3281,14 +2746,6 @@ go_home (CANON_Handle * chndl)
return 0;
}
-
-/* Scanner init, called at calibration and scan time.
- Returns:
- 1 if this was the first time the scanner was plugged in,
- 0 afterward, and
- -1 on error. */
-
-
/* Scan and save the resulting image as r,g,b non-interleaved PPM file */
static SANE_Status
preread (CANON_Handle * chndl, SANE_Byte * data, FILE * fp)
@@ -3487,7 +2944,27 @@ do_scan (CANON_Handle * chndl)
case 1200:
if (chndl->productcode == 0x2224)
{
- left_edge = 0x1e3;
+ left_edge = 0x1b2;
+ }
+ else
+ {
+ left_edge = 0x87;
+ }
+ break;
+ case 2400:
+ if (chndl->productcode == 0x2224)
+ {
+ left_edge = 0x287; /* 0x2eb; */
+ }
+ else
+ {
+ left_edge = 0x87;
+ }
+ break;
+ case 4800:
+ if (chndl->productcode == 0x2224)
+ {
+ left_edge = 0x2e3; /* should be adjusted; 0x23e; 0x2eb; */
}
else
{
@@ -3533,14 +3010,14 @@ do_scan (CANON_Handle * chndl)
}
/* Scan sequence */
-/* resolution is 75,150,300,600,1200
+/* resolution is 75,150,300,600,1200,2400,4800
scan coordinates in 600-dpi pixels */
static SANE_Status
scan (CANON_Handle * chndl)
{
SANE_Status status = SANE_STATUS_GOOD;
- /* Resolution: dpi 75, 150, 300, 600, 1200 */
+ /* Resolution: dpi 75, 150, 300, 600, 1200, 2400, 4800 */
switch (chndl->val[opt_resolution].w)
{
case 75:
@@ -3548,6 +3025,8 @@ scan (CANON_Handle * chndl)
case 300:
case 600:
case 1200:
+ case 2400:
+ case 4800:
break;
default:
chndl->val[opt_resolution].w = 600;
@@ -3584,11 +3063,15 @@ CANON_set_scan_parameters (CANON_Handle * chndl)
int widthi;
int heighti;
- int top_edge = 7;
+ int top_edge = 7; /* in mm */
if (chndl->val[opt_resolution].w < 300)
{
top_edge = 0;
}
+ if (chndl->val[opt_resolution].w == 300 && chndl->productcode == 0x2224)
+ {
+ top_edge = 0;
+ }
left = SANE_UNFIX (chndl->val[opt_tl_x].w) / MM_IN_INCH * 600;
top = (top_edge + SANE_UNFIX (chndl->val[opt_tl_y].w)) / MM_IN_INCH * 600;
@@ -3633,7 +3116,9 @@ CANON_set_scan_parameters (CANON_Handle * chndl)
(chndl->val[opt_resolution].w != 150) &&
(chndl->val[opt_resolution].w != 300) &&
(chndl->val[opt_resolution].w != 600) &&
- (chndl->val[opt_resolution].w != 1200))
+ (chndl->val[opt_resolution].w != 1200) &&
+ (chndl->val[opt_resolution].w != 2400) &&
+ (chndl->val[opt_resolution].w != 4800))
{
return SANE_STATUS_INVAL;
}
@@ -3789,7 +3274,7 @@ CANON_start_scan (CANON_Handle * chndl)
return status;
}
- /* read the temp file back out */
+ /* prepare for reading the temp file back out */
chndl->fp = fopen (chndl->fname, "r");
DBG (4, "reading %s\n", chndl->fname);
diff --git a/backend/canon_lide70.c b/backend/canon_lide70.c
index 8f18ed9..4cc8999 100644
--- a/backend/canon_lide70.c
+++ b/backend/canon_lide70.c
@@ -225,10 +225,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (2, "sane_init: version_code %s 0, authorize %s 0\n",
version_code == 0 ? "=" : "!=", authorize == 0 ? "=" : "!=");
DBG (1, "sane_init: SANE Canon LiDE70 backend version %d.%d.%d from %s\n",
- V_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (V_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
sanei_usb_init ();
diff --git a/backend/canon_pp.c b/backend/canon_pp.c
index 5a23892..b933102 100644
--- a/backend/canon_pp.c
+++ b/backend/canon_pp.c
@@ -147,7 +147,7 @@ sane_init (SANE_Int *vc, SANE_Auth_Callback cb)
#endif
if(vc)
- *vc = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *vc = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
DBG(2,"sane_init: >> ieee1284_find_ports\n");
/* Find lp ports */
diff --git a/backend/cardscan.c b/backend/cardscan.c
index 8090006..2adad7c 100644
--- a/backend/cardscan.c
+++ b/backend/cardscan.c
@@ -279,10 +279,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
sanei_usb_init();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (5, "sane_init: cardscan backend %d.%d.%d, from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
DBG (10, "sane_init: finish\n");
diff --git a/backend/coolscan.c b/backend/coolscan.c
index a7760c3..e51b499 100644
--- a/backend/coolscan.c
+++ b/backend/coolscan.c
@@ -3244,7 +3244,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (10, "sane_init\n");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (COOLSCAN_CONFIG_FILE);
if (!fp)
diff --git a/backend/coolscan2.c b/backend/coolscan2.c
index 9b1f570..f0d897f 100644
--- a/backend/coolscan2.c
+++ b/backend/coolscan2.c
@@ -348,7 +348,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
if (version_code)
*version_code =
- SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
sanei_usb_init ();
diff --git a/backend/coolscan3.c b/backend/coolscan3.c
index 5bc5b5e..f279c9c 100644
--- a/backend/coolscan3.c
+++ b/backend/coolscan3.c
@@ -317,7 +317,7 @@ sane_init(SANE_Int * version_code, SANE_Auth_Callback authorize)
authorize = authorize; /* to shut up compiler */
if (version_code)
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
sanei_usb_init();
diff --git a/backend/dc210.c b/backend/dc210.c
index f2d1ec3..b6eae40 100644
--- a/backend/dc210.c
+++ b/backend/dc210.c
@@ -663,7 +663,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG_INIT ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (DC210_CONFIG_FILE);
diff --git a/backend/dc240.c b/backend/dc240.c
index 47aeab9..bdab777 100644
--- a/backend/dc240.c
+++ b/backend/dc240.c
@@ -820,7 +820,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG_INIT ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (DC240_CONFIG_FILE);
diff --git a/backend/dc25.c b/backend/dc25.c
index 1d9032d..59597a5 100644
--- a/backend/dc25.c
+++ b/backend/dc25.c
@@ -1833,7 +1833,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG_INIT ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (DC25_CONFIG_FILE);
diff --git a/backend/dell1600n_net.c b/backend/dell1600n_net.c
index 2436dd4..41be589 100644
--- a/backend/dell1600n_net.c
+++ b/backend/dell1600n_net.c
@@ -86,7 +86,7 @@
#define MAX_SCANNERS 32
/* version number */
-#define DRIVER_VERSION SANE_VERSION_CODE( SANE_CURRENT_MAJOR, V_MINOR, 0 )
+#define DRIVER_VERSION SANE_VERSION_CODE( SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0 )
/* size of buffer for socket communication */
#define SOCK_BUF_SIZE 2048
diff --git a/backend/dmc.c b/backend/dmc.c
index 5edb417..b1a3b5a 100644
--- a/backend/dmc.c
+++ b/backend/dmc.c
@@ -816,7 +816,7 @@ sane_init(SANE_Int *version_code, SANE_Auth_Callback authorize)
DBG_INIT();
if (version_code) {
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
}
fp = sanei_config_open(DMC_CONFIG_FILE);
diff --git a/backend/epjitsu.c b/backend/epjitsu.c
index 90ef148..6fda662 100644
--- a/backend/epjitsu.c
+++ b/backend/epjitsu.c
@@ -271,10 +271,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (10, "sane_init: start\n");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (5, "sane_init: epjitsu backend %d.%d.%d, from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
DBG (10, "sane_init: finish\n");
diff --git a/backend/epson.c b/backend/epson.c
index 8c1a41d..d0f5e54 100644
--- a/backend/epson.c
+++ b/backend/epson.c
@@ -2663,7 +2663,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
#endif
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, SANE_EPSON_BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, SANE_EPSON_BUILD);
sanei_usb_init ();
diff --git a/backend/epson2-io.c b/backend/epson2-io.c
index 9d23e2a..293a825 100644
--- a/backend/epson2-io.c
+++ b/backend/epson2-io.c
@@ -77,7 +77,8 @@ e2_send(Epson_Scanner * s, void *buf, size_t buf_size, size_t reply_len,
if (reply_len == 0) {
DBG(0,
"Cannot send this command to a networked scanner\n");
- return SANE_STATUS_INVAL;
+ *status = SANE_STATUS_INVAL;
+ return 0; /* nothing actually sent */
}
return sanei_epson_net_write(s, 0x2000, buf, buf_size,
reply_len, status);
diff --git a/backend/epson2-ops.c b/backend/epson2-ops.c
index 83a0169..faf0ffa 100644
--- a/backend/epson2-ops.c
+++ b/backend/epson2-ops.c
@@ -291,14 +291,14 @@ e2_dev_post_init(struct Epson_Device *dev)
dev->need_reset_on_source_change = SANE_FALSE;
if (e2_dev_model(dev, "ES-9000H") || e2_dev_model(dev, "GT-30000")) {
- dev->cmd->set_focus_position = 0;
+ dev->focusSupport = SANE_FALSE;
dev->cmd->feed = 0x19;
}
if (e2_dev_model(dev, "GT-8200") || e2_dev_model(dev, "Perfection1650")
|| e2_dev_model(dev, "Perfection1640") || e2_dev_model(dev, "GT-8700")) {
+ dev->focusSupport = SANE_FALSE;
dev->cmd->feed = 0;
- dev->cmd->set_focus_position = 0;
dev->need_reset_on_source_change = SANE_TRUE;
}
@@ -588,7 +588,7 @@ e2_discover_capabilities(Epson_Scanner *s)
/* ESC F, request status */
status = esci_request_status(s, &scanner_status);
if (status != SANE_STATUS_GOOD)
- return status;;
+ return status;
/* set capabilities */
if (scanner_status & STATUS_OPTION)
@@ -817,20 +817,17 @@ e2_discover_capabilities(Epson_Scanner *s)
DBG(1, "maximum supported color depth: %d\n", dev->maxDepth);
/*
- * Check for "request focus position" command. If this command is
- * supported, then the scanner does also support the "set focus
- * position" command.
- * XXX ???
+ * We assume that setting focus is supported when we can get the focus.
+ * This assumption may be overridden in e2_dev_post_init()
*/
-
if (esci_request_focus_position(s, &s->currentFocusPosition) ==
SANE_STATUS_GOOD) {
- DBG(1, "setting focus is supported, current focus: %u\n", s->currentFocusPosition);
+ DBG(1, "getting focus is supported, current focus: %u\n", s->currentFocusPosition);
dev->focusSupport = SANE_TRUE;
s->opt[OPT_FOCUS_POS].cap &= ~SANE_CAP_INACTIVE;
s->val[OPT_FOCUS_POS].w = s->currentFocusPosition;
} else {
- DBG(1, "setting focus is not supported\n");
+ DBG(1, "getting focus is not supported\n");
dev->focusSupport = SANE_FALSE;
s->opt[OPT_FOCUS_POS].cap |= SANE_CAP_INACTIVE;
s->val[OPT_FOCUS_POS].w = FOCUS_ON_GLASS; /* just in case */
@@ -1596,7 +1593,7 @@ e2_check_adf(Epson_Scanner * s)
status = esci_request_extended_status(s, &buf, NULL);
if (status != SANE_STATUS_GOOD)
- return status;;
+ return status;
t = buf[1];
@@ -1649,11 +1646,23 @@ e2_start_ext_scan(Epson_Scanner * s)
if (buf[0] != STX)
return SANE_STATUS_INVAL;
- if (buf[1] & 0x80) {
+ if (buf[1] & STATUS_FER) {
DBG(1, "%s: fatal error\n", __func__);
return SANE_STATUS_IO_ERROR;
}
+ /*
+ * The 12000XL signals busy only with FS+G, all other status queries
+ * say non-busy. Probably because you can in deed communicate with the
+ * device, just scanning is not yet possible. I tried polling with FS+G
+ * every 5 seconds, but that made scary noises. So, bail out and let
+ * the user retry manually.
+ */
+ if (buf[1] & STATUS_NOT_READY) {
+ DBG(1, "%s: device not ready\n", __func__);
+ return SANE_STATUS_DEVICE_BUSY;
+ }
+
s->ext_block_len = le32atoh(&buf[2]);
s->ext_blocks = le32atoh(&buf[6]);
s->ext_last_len = le32atoh(&buf[10]);
diff --git a/backend/epson2.c b/backend/epson2.c
index a15a620..5bb75d4 100644
--- a/backend/epson2.c
+++ b/backend/epson2.c
@@ -15,10 +15,6 @@
* published by the Free Software Foundation, version 2.
*/
-#define EPSON2_VERSION 1
-#define EPSON2_REVISION 0
-#define EPSON2_BUILD 124
-
/* debugging levels:
*
* 127 e2_recv buffer
@@ -900,16 +896,14 @@ SANE_Status
sane_init(SANE_Int *version_code, SANE_Auth_Callback __sane_unused__ authorize)
{
DBG_INIT();
- DBG(2, "%s: " PACKAGE " " VERSION "\n", __func__);
-
- DBG(1, "epson2 backend, version %i.%i.%i\n",
- EPSON2_VERSION, EPSON2_REVISION, EPSON2_BUILD);
+ DBG(1, "%s: version " VERSION "\n", __func__);
- if (version_code != NULL)
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR,
- EPSON2_BUILD);
+ /* Keep '124' as our build version. The arg is obsolete by now */
+ if (version_code)
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 124);
sanei_usb_init();
+ sanei_usb_set_timeout(60 * 1000);
return SANE_STATUS_GOOD;
}
diff --git a/backend/epson2_usb.c b/backend/epson2_usb.c
index 3977ee3..8c850ab 100644
--- a/backend/epson2_usb.c
+++ b/backend/epson2_usb.c
@@ -5,184 +5,193 @@
/* generated with epson2usb.pl doc/descriptions/epson2.desc */
SANE_Word sanei_epson_usb_product_ids[] = {
- 0x101, /* GT-7000U, Perfection 636U */
- 0x103, /* GT-6600U, Perfection 610 */
- 0x104, /* GT-7600U, GT-7600UF, Perfection 1200U, Perfection 1200U PHOTO */
- 0x105, /* Stylus Scan 2000 */
- 0x106, /* Stylus Scan 2500 */
- 0x107, /* ES-2000, Expression 1600 */
- 0x109, /* ES-8500, Expression 1640XL */
- 0x10a, /* GT-8700, GT-8700F, Perfection 1640SU, Perfection 1640SU PHOTO */
- 0x10b, /* GT-7700U, Perfection 1240U */
- 0x10c, /* GT-6700U, Perfection 640U */
- 0x10e, /* ES-2200, Expression 1680 */
- 0x110, /* GT-8200U, GT-8200UF, Perfection 1650, Perfection 1650 PHOTO */
- 0x1116, /* XP-243 245 247 Series, XP-427 */
- 0x112, /* GT-9700F, Perfection 2450 PHOTO */
+ 0x0101, /* GT-7000U, Perfection 636U */
+ 0x0103, /* GT-6600U, Perfection 610 */
+ 0x0104, /* GT-7600U, GT-7600UF, Perfection 1200U, Perfection 1200U PHOTO */
+ 0x0105, /* Stylus Scan 2000 */
+ 0x0106, /* Stylus Scan 2500 */
+ 0x0107, /* ES-2000, Expression 1600 */
+ 0x0109, /* ES-8500, Expression 1640XL */
+ 0x010a, /* GT-8700, GT-8700F, Perfection 1640SU, Perfection 1640SU PHOTO */
+ 0x010b, /* GT-7700U, Perfection 1240U */
+ 0x010c, /* GT-6700U, Perfection 640U */
+ 0x010e, /* ES-2200, Expression 1680 */
+ 0x0110, /* GT-8200U, GT-8200UF, Perfection 1650, Perfection 1650 PHOTO */
+ 0x0112, /* GT-9700F, Perfection 2450 PHOTO */
+ 0x011b, /* GT-9300UF, Perfection 2400 PHOTO */
+ 0x011c, /* GT-9800F, Perfection 3200 PHOTO */
+ 0x011e, /* GT-8300UF, Perfection 1660 PHOTO */
+ 0x0126, /* ES-7000H, GT-15000 */
+ 0x0128, /* GT-X700, Perfection 4870 PHOTO */
+ 0x0129, /* ES-10000G, Expression 10000XL */
+ 0x012a, /* GT-X800, Perfection 4990 PHOTO */
+ 0x012b, /* ES-H300, GT-2500 */
+ 0x012c, /* GT-X900, Perfection V700 Photo, Perfection V750 Photo */
+ 0x0135, /* GT-X970 */
+ 0x0138, /* ES-H7200, GT-20000 */
+ 0x014b, /* ES-G11000, Expression 11000XL */
+ 0x0151, /* GT-X980, Perfection V800 Photo, Perfection V850 Pro */
+ 0x015b, /* DS-G20000, Expression 12000XL */
+ 0x0801, /* CC-600PX, Stylus CX5100, Stylus CX5200 */
+ 0x0802, /* CC-570L, Stylus CX3100, Stylus CX3200 */
+ 0x0805, /* Stylus CX6300, Stylus CX6400 */
+ 0x0806, /* PM-A850, Stylus Photo RX600 */
+ 0x0807, /* Stylus Photo RX500, Stylus Photo RX510 */
+ 0x0808, /* Stylus CX5300, Stylus CX5400 */
+ 0x080d, /* Stylus CX4500, Stylus CX4600 */
+ 0x080e, /* PX-A550, Stylus CX3500, Stylus CX3600, Stylus CX3650 */
+ 0x080f, /* Stylus Photo RX420, Stylus Photo RX425, Stylus Photo RX430 */
+ 0x0810, /* PM-A900, Stylus Photo RX700 */
+ 0x0811, /* PM-A870, Stylus Photo RX620, Stylus Photo RX630 */
+ 0x0813, /* Stylus CX6500, Stylus CX6600 */
+ 0x0814, /* PM-A700 */
+ 0x0815, /* AcuLaser CX11, AcuLaser CX11NF, LP-A500 */
+ 0x0817, /* LP-M5500, LP-M5500F */
+ 0x0818, /* Stylus CX3700, Stylus CX3800, Stylus CX3810, Stylus DX3800 */
+ 0x0819, /* PX-A650, Stylus CX4700, Stylus CX4800, Stylus DX4800, Stylus DX4850 */
+ 0x081a, /* PM-A750, Stylus Photo RX520, Stylus Photo RX530 */
+ 0x081c, /* PM-A890, Stylus Photo RX640, Stylus Photo RX650 */
+ 0x081d, /* PM-A950 */
+ 0x081f, /* Stylus CX7700, Stylus CX7800 */
+ 0x0820, /* Stylus CX4100, Stylus CX4200, Stylus DX4200 */
+ 0x0827, /* PM-A820, Stylus Photo RX560, Stylus Photo RX580, Stylus Photo RX590 */
+ 0x0828, /* PM-A970 */
+ 0x0829, /* PM-T990 */
+ 0x082a, /* PM-A920 */
+ 0x082b, /* Stylus CX4900, Stylus CX5000, Stylus DX5000 */
+ 0x082e, /* PX-A720, Stylus CX5900, Stylus CX6000, Stylus DX6000 */
+ 0x082f, /* PX-A620, Stylus CX3900, Stylus DX4000 */
+ 0x0830, /* ME 200, Stylus CX2800, Stylus CX2900 */
+ 0x0833, /* LP-M5600 */
+ 0x0834, /* LP-M6000 */
+ 0x0835, /* AcuLaser CX21 */
+ 0x0836, /* PM-T960 */
+ 0x0837, /* PM-A940, Stylus Photo RX680, Stylus Photo RX685, Stylus Photo RX690 */
+ 0x0838, /* PX-A640, Stylus CX7300, Stylus CX7400, Stylus DX7400 */
+ 0x0839, /* PX-A740, Stylus CX8300, Stylus CX8400, Stylus DX8400 */
+ 0x083a, /* PX-FA700, Stylus CX9300F, Stylus CX9400Fax, Stylus DX9400F */
+ 0x083c, /* PM-A840, PM-A840S, Stylus Photo RX585, Stylus Photo RX595, Stylus Photo RX610 */
+ 0x0841, /* ME 300, PX-401A, Stylus NX100, Stylus SX100, Stylus TX100 */
+ 0x0843, /* LP-M5000 */
+ 0x0844, /* Artisan 800, EP-901A, EP-901F, Stylus Photo PX800FW, Stylus Photo TX800FW */
+ 0x0846, /* Artisan 700, EP-801A, Stylus Photo PX700W, Stylus Photo TX700W */
+ 0x0847, /* ME Office 700FW, PX-601F, Stylus Office BX600FW, Stylus Office TX600FW, Stylus SX600FW, WorkForce 600 */
+ 0x0848, /* ME Office 600F, Stylus Office BX300F, Stylus Office TX300F, Stylus NX300 Series */
+ 0x0849, /* Stylus NX200, Stylus SX200, Stylus SX205, Stylus TX200, Stylus TX203, Stylus TX209 */
+ 0x084a, /* PX-501A, Stylus NX400, Stylus SX400, Stylus SX405, Stylus TX400 */
+ 0x084c, /* WorkForce 500 */
+ 0x084d, /* PX-402A, Stylus NX110 Series, Stylus SX110 Series, Stylus TX110 Series */
+ 0x084f, /* ME OFFICE 510, Stylus NX210 Series, Stylus SX210 Series, Stylus TX210 Series */
+ 0x0850, /* EP-702A, Stylus Photo PX650 Series, Stylus Photo TX650 Series */
+ 0x0851, /* Stylus NX410 Series, Stylus SX410 Series, Stylus TX410 Series */
+ 0x0852, /* Artisan 710 Series, EP-802A, Stylus Photo PX710W Series, Stylus Photo TX710W Series */
+ 0x0853, /* Artisan 810 Series, EP-902A, Stylus Photo PX810FW Series */
+ 0x0854, /* ME OFFICE 650FN Series, Stylus Office BX310FN Series, Stylus Office TX510FN Series, WorkForce 310 Series */
+ 0x0855, /* PX-602F, Stylus Office BX610FW Series, Stylus Office TX610FW Series, Stylus SX610FW Series, WorkForce 610 Series */
+ 0x0856, /* PX-502A, Stylus NX510 Series, Stylus SX510W Series, Stylus TX550W Series */
+ 0x085c, /* ME 320 Series, ME 330 Series, Stylus NX125, Stylus NX127, Stylus SX125, Stylus TX120 Series */
+ 0x085d, /* ME OFFICE 960FWD Series, PX-603F, Stylus Office BX625FWD, Stylus Office TX620FWD Series, Stylus SX620FW Series, WorkForce 630 Series */
+ 0x085e, /* ME OFFICE 900WD Series, PX-503A, Stylus Office BX525WD, Stylus NX625, Stylus SX525WD, Stylus TX560WD Series, WorkForce 625 */
+ 0x085f, /* Stylus Office BX320FW Series, Stylus Office TX525FW, WorkForce 520 Series */
+ 0x0860, /* Artisan 835, EP-903A, EP-903F, Stylus Photo PX820FWD Series, Stylus Photo TX820FWD Series */
+ 0x0861, /* Artisan 725, EP-803A, EP-803AW, Stylus Photo PX720WD Series, Stylus Photo TX720WD Series */
+ 0x0862, /* EP-703A, Stylus Photo PX660 Series */
+ 0x0863, /* ME OFFICE 620F Series, Stylus Office BX305F, Stylus Office BX305FW, Stylus Office TX320F Series, WorkForce 320 Series */
+ 0x0864, /* ME OFFICE 560W Series, Stylus NX420 Series, Stylus SX420W Series, Stylus TX420W Series */
+ 0x0865, /* ME OFFICE 520 Series, Stylus NX220 Series, Stylus SX218, Stylus TX220 Series */
+ 0x0866, /* AcuLaser MX20DN, AcuLaser MX20DNF, AcuLaser MX21DNF */
+ 0x0869, /* PX-1600F, WF-7510 Series */
+ 0x086a, /* PX-673F, Stylus Office BX925FWD, WorkForce 840 Series */
+ 0x0870, /* Stylus Office BX305FW Plus, WorkForce 435 */
+ 0x0871, /* K200 Series */
+ 0x0872, /* K300 Series, WorkForce K301 */
+ 0x0873, /* L200 Series */
+ 0x0878, /* Artisan 635, EP-704A */
+ 0x0879, /* Artisan 837, EP-904A, EP-904F, Stylus Photo PX830FWD Series */
+ 0x087b, /* Artisan 730 Series, EP-804A, EP-804AR, EP-804AW, Stylus Photo PX730WD Series, Stylus Photo TX730WD Series */
+ 0x087c, /* PX-1700F, WF-7520 Series */
+ 0x087d, /* PX-B750F, WP-4511, WP-4515, WP-4521, WP-4525, WP-4530 Series, WP-4540 Series */
+ 0x087e, /* WP-4590 Series */
+ 0x087f, /* PX-403A */
+ 0x0880, /* ME OFFICE 570W Series, PX-434A, Stylus NX330 Series, Stylus SX430W Series, Stylus TX430W Series */
+ 0x0881, /* ME OFFICE 535, PX-404A, Stylus SX230 Series, Stylus TX235 */
+ 0x0883, /* ME 340 Series, Stylus NX130 Series, Stylus SX130 Series, Stylus TX130 Series */
+ 0x0884, /* Stylus NX430W Series, Stylus SX440W Series, Stylus TX435W */
+ 0x0885, /* Stylus NX230 Series, Stylus SX235W, Stylus TX230W Series */
+ 0x088d, /* Epson ME 350 */
+ 0x088f, /* Stylus Office BX635FWD, WorkForce 645 */
+ 0x0890, /* ME OFFICE 940FW Series, Stylus Office BX630FW Series, WorkForce 545 */
+ 0x0891, /* PX-504A, Stylus Office BX535WD, Stylus NX530 Series, Stylus NX635, Stylus SX535WD */
+ 0x0892, /* Stylus Office BX935FWD, WorkForce 845 */
+ 0x0893, /* EP-774A */
+ 0x0894, /* LP-M5300 Series */
+ 0x0895, /* PX-045A, XP-100 Series */
+ 0x0896, /* ME-301, XP-200 Series */
+ 0x0897, /* ME-303, PX-405A */
+ 0x0898, /* ME-401, PX-435A, XP-300 Series, XP-400 Series */
+ 0x0899, /* PX-605F, PX-675F, WF-3520 Series, WF-3530 Series, WF-3540 Series */
+ 0x089a, /* EP-905F, XP-850 Series */
+ 0x089b, /* EP-905A, XP-800 Series */
+ 0x089c, /* EP-805A, EP-805AR, EP-805AW, XP-750 Series */
+ 0x089d, /* XP-700 Series */
+ 0x089e, /* EP-775A, EP-775AW, XP-600 Series */
+ 0x089f, /* EP-705A */
+ 0x08a0, /* ME-101 */
+ 0x08a1, /* L210 Series, L350, L351 */
+ 0x08a5, /* PX-505F, WF-2510 Series */
+ 0x08a6, /* PX-535F, WF-2520 Series, WF-2530 Series, WF-2540 Series */
+ 0x08a7, /* WP-M4525, WP-M4521, PX-K751F, WP-M4595 */
+ 0x08a8, /* L355, L358 */
+ 0x08a9, /* L550 Series */
+ 0x08aa, /* M200 Series */
+ 0x08ab, /* WF-M1560 Series */
+ 0x08ac, /* AL-MX300DN Series, AL-MX300DNF Series */
+ 0x08ad, /* LP-M8040, LP-M8040A, LP-M8040F */
+ 0x08ae, /* PX-046A, XP-211, XP-212, XP-215 */
+ 0x08af, /* PX-436A, XP-310 Series */
+ 0x08b0, /* XP-410 Series */
+ 0x08b3, /* EP-976A3, XP-950 Series */
+ 0x08b4, /* EP-906F, XP-810 Series */
+ 0x08b5, /* EP-806AB, EP-806AR, EP-806AW, XP-710 Series */
+ 0x08b6, /* EP-776AB, EP-776AW, XP-610 Series */
+ 0x08b7, /* EP-706A, XP-510 Series */
+ 0x08b8, /* PX-M740F, PX-M741F, WF-3620 Series, WF-3640 Series */
+ 0x08b9, /* PX-M5040F, PX-M5041F, WF-7610 Series, WF-7620 Series */
+ 0x08bd, /* PX-M840F, WF-5620 Series, WF-5690 Series */
+ 0x08be, /* WF-4630 Series, WF-4640 Series */
+ 0x08bf, /* PX-437A, XP-320 Series */
+ 0x08c0, /* PX-047A, XP-225 */
+ 0x08c1, /* XP-420 Series */
+ 0x08c3, /* PX-M650A, PX-M650F, WF-2650 Series, WF-2660 Series */
+ 0x08c4, /* WF-2630 Series */
+ 0x08c5, /* EP-977A3 */
+ 0x08c6, /* EP-907F, XP-820 Series, XP-860 Series */
+ 0x08c7, /* EP-807AB, EP-807AR, EP-807AW, XP-720 Series, XP-760 Series */
+ 0x08c8, /* EP-777A, XP-520 Series, XP-620 Series */
+ 0x08c9, /* EP-707A */
+ 0x08ca, /* L850 Series */
+ 0x08cd, /* WF-R4640 Series, WF-R5690 Series */
+ 0x08d0, /* PX-M350F, WF-M5690 Series */
+ 0x08d2, /* L365 Series, L366 Series */
+ 0x1102, /* PX-048A Series, XP-230 Series, XP-235 Series */
+ 0x1105, /* ET-2500 Series, L375 Series */
+ 0x110f, /* PX-M160T Series */
+ 0x1116, /* XP-240 243 245 247 Series, XP-427, PX-049A Series */
0x1120, /* L380 */
0x1121, /* ET-2650, L495 */
- 0x1122, /* ET-2600 */
+ 0x1122, /* ET-2600 Series, ET-2610 Series, L3050 Series, L3060 Series, L395 Series, L396 Series */
0x113d, /* XP-255 */
- 0x11b, /* GT-9300UF, Perfection 2400 PHOTO */
- 0x11c, /* GT-9800F, Perfection 3200 PHOTO */
- 0x11e, /* GT-8300UF, Perfection 1660 PHOTO */
- 0x126, /* ES-7000H, GT-15000 */
- 0x128, /* GT-X700, Perfection 4870 PHOTO */
- 0x129, /* ES-10000G, Expression 10000XL */
- 0x12a, /* GT-X800, Perfection 4990 PHOTO */
- 0x12b, /* ES-H300, GT-2500 */
- 0x12c, /* GT-X900, Perfection V700 Photo, Perfection V750 Photo */
- 0x135, /* GT-X970 */
- 0x138, /* ES-H7200, GT-20000 */
- 0x14b, /* ES-G11000, Expression 11000XL */
- 0x151, /* GT-X980, Perfection V800 Photo, Perfection V850 Pro */
- 0x15b, /* DS-G20000, Expression 12000XL */
- 0x801, /* CC-600PX, Stylus CX5100, Stylus CX5200 */
- 0x802, /* CC-570L, Stylus CX3100, Stylus CX3200 */
- 0x805, /* Stylus CX6300, Stylus CX6400 */
- 0x806, /* PM-A850, Stylus Photo RX600 */
- 0x807, /* Stylus Photo RX500, Stylus Photo RX510 */
- 0x808, /* Stylus CX5300, Stylus CX5400 */
- 0x80d, /* Stylus CX4500, Stylus CX4600 */
- 0x80e, /* PX-A550, Stylus CX3500, Stylus CX3600, Stylus CX3650 */
- 0x80f, /* Stylus Photo RX420, Stylus Photo RX425, Stylus Photo RX430 */
- 0x810, /* PM-A900, Stylus Photo RX700 */
- 0x811, /* PM-A870, Stylus Photo RX620, Stylus Photo RX630 */
- 0x813, /* Stylus CX6500, Stylus CX6600 */
- 0x814, /* PM-A700 */
- 0x815, /* AcuLaser CX11, AcuLaser CX11NF, LP-A500 */
- 0x817, /* LP-M5500, LP-M5500F */
- 0x818, /* Stylus CX3700, Stylus CX3800, Stylus CX3810, Stylus DX3800 */
- 0x819, /* PX-A650, Stylus CX4700, Stylus CX4800, Stylus DX4800, Stylus DX4850 */
- 0x81a, /* PM-A750, Stylus Photo RX520, Stylus Photo RX530 */
- 0x81c, /* PM-A890, Stylus Photo RX640, Stylus Photo RX650 */
- 0x81d, /* PM-A950 */
- 0x81f, /* Stylus CX7700, Stylus CX7800 */
- 0x820, /* Stylus CX4100, Stylus CX4200, Stylus DX4200 */
- 0x827, /* PM-A820, Stylus Photo RX560, Stylus Photo RX580, Stylus Photo RX590 */
- 0x828, /* PM-A970 */
- 0x829, /* PM-T990 */
- 0x82a, /* PM-A920 */
- 0x82b, /* Stylus CX4900, Stylus CX5000, Stylus DX5000 */
- 0x82e, /* PX-A720, Stylus CX5900, Stylus CX6000, Stylus DX6000 */
- 0x82f, /* PX-A620, Stylus CX3900, Stylus DX4000 */
- 0x830, /* ME 200, Stylus CX2800, Stylus CX2900 */
- 0x833, /* LP-M5600 */
- 0x834, /* LP-M6000 */
- 0x835, /* AcuLaser CX21 */
- 0x836, /* PM-T960 */
- 0x837, /* PM-A940, Stylus Photo RX680, Stylus Photo RX685, Stylus Photo RX690 */
- 0x838, /* PX-A640, Stylus CX7300, Stylus CX7400, Stylus DX7400 */
- 0x839, /* PX-A740, Stylus CX8300, Stylus CX8400, Stylus DX8400 */
- 0x83a, /* PX-FA700, Stylus CX9300F, Stylus CX9400Fax, Stylus DX9400F */
- 0x83c, /* PM-A840, PM-A840S, Stylus Photo RX585, Stylus Photo RX595, Stylus Photo RX610 */
- 0x841, /* ME 300, PX-401A, Stylus NX100, Stylus SX100, Stylus TX100 */
- 0x843, /* LP-M5000 */
- 0x844, /* Artisan 800, EP-901A, EP-901F, Stylus Photo PX800FW, Stylus Photo TX800FW */
- 0x846, /* Artisan 700, EP-801A, Stylus Photo PX700W, Stylus Photo TX700W */
- 0x847, /* ME Office 700FW, PX-601F, Stylus Office BX600FW, Stylus Office TX600FW, Stylus SX600FW, WorkForce 600 */
- 0x848, /* ME Office 600F, Stylus Office BX300F, Stylus Office TX300F, Stylus NX300 Series */
- 0x849, /* Stylus NX200, Stylus SX200, Stylus SX205, Stylus TX200, Stylus TX203, Stylus TX209 */
- 0x84a, /* PX-501A, Stylus NX400, Stylus SX400, Stylus SX405, Stylus TX400 */
- 0x84c, /* WorkForce 500 */
- 0x84d, /* PX-402A, Stylus NX110 Series, Stylus SX110 Series, Stylus TX110 Series */
- 0x84f, /* ME OFFICE 510, Stylus NX210 Series, Stylus SX210 Series, Stylus TX210 Series */
- 0x850, /* EP-702A, Stylus Photo PX650 Series, Stylus Photo TX650 Series */
- 0x851, /* Stylus NX410 Series, Stylus SX410 Series, Stylus TX410 Series */
- 0x852, /* Artisan 710 Series, EP-802A, Stylus Photo PX710W Series, Stylus Photo TX710W Series */
- 0x853, /* Artisan 810 Series, EP-902A, Stylus Photo PX810FW Series */
- 0x854, /* ME OFFICE 650FN Series, Stylus Office BX310FN Series, Stylus Office TX510FN Series, WorkForce 310 Series */
- 0x855, /* PX-602F, Stylus Office BX610FW Series, Stylus Office TX610FW Series, Stylus SX610FW Series, WorkForce 610 Series */
- 0x856, /* PX-502A, Stylus NX510 Series, Stylus SX510W Series, Stylus TX550W Series */
- 0x85c, /* ME 320 Series, ME 330 Series, Stylus NX125, Stylus NX127, Stylus SX125, Stylus TX120 Series */
- 0x85d, /* ME OFFICE 960FWD Series, PX-603F, Stylus Office BX625FWD, Stylus Office TX620FWD Series, Stylus SX620FW Series, WorkForce 630 Series */
- 0x85e, /* ME OFFICE 900WD Series, PX-503A, Stylus Office BX525WD, Stylus NX625, Stylus SX525WD, Stylus TX560WD Series, WorkForce 625 */
- 0x85f, /* Stylus Office BX320FW Series, Stylus Office TX525FW, WorkForce 520 Series */
- 0x860, /* Artisan 835, EP-903A, EP-903F, Stylus Photo PX820FWD Series, Stylus Photo TX820FWD Series */
- 0x861, /* Artisan 725, EP-803A, EP-803AW, Stylus Photo PX720WD Series, Stylus Photo TX720WD Series */
- 0x862, /* EP-703A, Stylus Photo PX660 Series */
- 0x863, /* ME OFFICE 620F Series, Stylus Office BX305F, Stylus Office BX305FW, Stylus Office TX320F Series, WorkForce 320 Series */
- 0x864, /* ME OFFICE 560W Series, Stylus NX420 Series, Stylus SX420W Series, Stylus TX420W Series */
- 0x865, /* ME OFFICE 520 Series, Stylus NX220 Series, Stylus SX218, Stylus TX220 Series */
- 0x866, /* AcuLaser MX20DN, AcuLaser MX20DNF, AcuLaser MX21DNF */
- 0x869, /* PX-1600F, WF-7510 Series */
- 0x86a, /* PX-673F, Stylus Office BX925FWD, WorkForce 840 Series */
- 0x870, /* Stylus Office BX305FW Plus, WorkForce 435 */
- 0x871, /* K200 Series */
- 0x872, /* K300 Series, WorkForce K301 */
- 0x873, /* L200 Series */
- 0x878, /* Artisan 635, EP-704A */
- 0x879, /* Artisan 837, EP-904A, EP-904F, Stylus Photo PX830FWD Series */
- 0x87b, /* Artisan 730 Series, EP-804A, EP-804AR, EP-804AW, Stylus Photo PX730WD Series, Stylus Photo TX730WD Series */
- 0x87c, /* PX-1700F, WF-7520 Series */
- 0x87d, /* PX-B750F, WP-4511, WP-4515, WP-4521, WP-4525, WP-4530 Series, WP-4540 Series */
- 0x87e, /* WP-4590 Series */
- 0x87f, /* PX-403A */
- 0x880, /* ME OFFICE 570W Series, PX-434A, Stylus NX330 Series, Stylus SX430W Series, Stylus TX430W Series */
- 0x881, /* ME OFFICE 535, PX-404A, Stylus SX230 Series, Stylus TX235 */
- 0x883, /* ME 340 Series, Stylus NX130 Series, Stylus SX130 Series, Stylus TX130 Series */
- 0x884, /* Stylus NX430W Series, Stylus SX440W Series, Stylus TX435W */
- 0x885, /* Stylus NX230 Series, Stylus SX235W, Stylus TX230W Series */
- 0x88d, /* Epson ME 350 */
- 0x88f, /* Stylus Office BX635FWD, WorkForce 645 */
- 0x890, /* ME OFFICE 940FW Series, Stylus Office BX630FW Series, WorkForce 545 */
- 0x891, /* PX-504A, Stylus Office BX535WD, Stylus NX530 Series, Stylus NX635, Stylus SX535WD */
- 0x892, /* Stylus Office BX935FWD, WorkForce 845 */
- 0x893, /* EP-774A */
- 0x894, /* LP-M5300 Series */
- 0x895, /* PX-045A, XP-100 Series */
- 0x896, /* ME-301, XP-200 Series */
- 0x897, /* ME-303, PX-405A */
- 0x898, /* ME-401, PX-435A, XP-300 Series, XP-400 Series */
- 0x899, /* PX-605F, PX-675F, WF-3520 Series, WF-3530 Series, WF-3540 Series */
- 0x89a, /* EP-905F, XP-850 Series */
- 0x89b, /* EP-905A, XP-800 Series */
- 0x89c, /* EP-805A, EP-805AR, EP-805AW, XP-750 Series */
- 0x89d, /* XP-700 Series */
- 0x89e, /* EP-775A, EP-775AW, XP-600 Series */
- 0x89f, /* EP-705A */
- 0x8a0, /* ME-101 */
- 0x8a1, /* L210 Series, L350, L351 */
- 0x8a5, /* PX-505F, WF-2510 Series */
- 0x8a6, /* PX-535F, WF-2520 Series, WF-2530 Series, WF-2540 Series */
- 0x8a7, /* WP-M4525, WP-M4521, PX-K751F, WP-M4595 */
- 0x8a8, /* L355, L358 */
- 0x8a9, /* L550 Series */
- 0x8aa, /* M200 Series */
- 0x8ab, /* WF-M1560 Series */
- 0x8ac, /* AL-MX300DN Series, AL-MX300DNF Series */
- 0x8ad, /* LP-M8040, LP-M8040A, LP-M8040F */
- 0x8ae, /* PX-046A, XP-211, XP-212, XP-215 */
- 0x8af, /* PX-436A, XP-310 Series */
- 0x8b0, /* XP-410 Series */
- 0x8b3, /* EP-976A3, XP-950 Series */
- 0x8b4, /* EP-906F, XP-810 Series */
- 0x8b5, /* EP-806AB, EP-806AR, EP-806AW, XP-710 Series */
- 0x8b6, /* EP-776AB, EP-776AW, XP-610 Series */
- 0x8b7, /* EP-706A, XP-510 Series */
- 0x8b8, /* PX-M740F, PX-M741F, WF-3620 Series, WF-3640 Series */
- 0x8b9, /* PX-M5040F, PX-M5041F, WF-7610 Series, WF-7620 Series */
- 0x8bd, /* PX-M840F, WF-5620 Series, WF-5690 Series */
- 0x8be, /* WF-4630 Series, WF-4640 Series */
- 0x8bf, /* PX-437A, XP-320 Series */
- 0x8c0, /* PX-047A, XP-225 */
- 0x8c1, /* XP-420 Series */
- 0x8c3, /* PX-M650A, PX-M650F, WF-2650 Series, WF-2660 Series */
- 0x8c4, /* WF-2630 Series */
- 0x8c5, /* EP-977A3 */
- 0x8c6, /* EP-907F, XP-820 Series, XP-860 Series */
- 0x8c7, /* EP-807AB, EP-807AR, EP-807AW, XP-720 Series, XP-760 Series */
- 0x8c8, /* EP-777A, XP-520 Series, XP-620 Series */
- 0x8c9, /* EP-707A */
- 0x8ca, /* L850 Series */
- 0x8cd, /* WF-R4640 Series, WF-R5690 Series */
- 0x8d0, /* PX-M350F, WF-M5690 Series */
- 0 /* last entry - this is used for devices that are specified
- in the config file as "usb <vendor> <product>" */
+ 0x113e, /* XP-452 455 Series */
+ 0x1141, /* L3100 Series */
+ 0x1142, /* L3110 Series */
+ 0x1188, /* L3210 Series */
+ 0x1189, /* L3200 Series */
+ 0 /* last entry - this is used for devices that are specified
+ in the config file as "usb <vendor> <product>" */
};
int
-sanei_epson_getNumberOfUSBProductIds (void)
+sanei_epson_getNumberOfUSBProductIds(void)
{
return sizeof (sanei_epson_usb_product_ids) / sizeof (SANE_Word);
}
diff --git a/backend/epsonds-cmd.c b/backend/epsonds-cmd.c
index 5141e07..6f0ec64 100644
--- a/backend/epsonds-cmd.c
+++ b/backend/epsonds-cmd.c
@@ -134,6 +134,7 @@ static SANE_Status esci2_cmd(epsonds_scanner* s,
SANE_Status status;
unsigned int more;
char header[13], rbuf[64]; /* add one more byte for header buffer to correct buffer overflow issue,*/
+ char *buf;
DBG(8, "%s: %4s len %lu, payload len: %lu\n", __func__, cmd, len, plen);
@@ -151,6 +152,21 @@ static SANE_Status esci2_cmd(epsonds_scanner* s,
// send RequestBlock, request immediate response if there's no payload
status = eds_txrx(s, header, len, rbuf, (plen > 0) ? 0 : 64);
+
+ /* pointer to the token's value */
+ buf = rbuf + 12;
+ /* nrd / nrdBUSY */
+ DBG(8, "buf = %s\n",buf);
+ if (strncmp("#nrd", buf, 4) == 0) {
+ buf += 4;
+ DBG(8, "buf = %s\n",buf);
+ if (strncmp("BUSY", buf, 4) == 0) {
+ DBG(8, "device busy\n");
+ DBG(8, "SANE_STATUS:%d\n", SANE_STATUS_DEVICE_BUSY);
+ return SANE_STATUS_DEVICE_BUSY;
+ }
+ }
+
if (status != SANE_STATUS_GOOD) {
return status;
}
@@ -227,6 +243,21 @@ SANE_Status esci2_fin(epsonds_scanner *s)
DBG(5, "%s\n", __func__);
status = esci2_cmd_simple(s, "FIN x0000000", NULL);
+
+ for(int i = 0; i < 10; i++) {
+
+ if(status == SANE_STATUS_DEVICE_BUSY || status == SANE_STATUS_IO_ERROR) {
+ status = esci2_cmd_simple(s, "FIN x0000000", NULL);
+ }
+ else {
+ DBG(1, "break\n");
+ break;
+ }
+ DBG(1, "sleep(5)\n");
+ sleep(5);
+
+ }
+
s->locked = 0;
return status;
}
@@ -264,13 +295,13 @@ static char *decode_binary(char *buf, int len)
memcpy(tmp, buf, 4);
tmp[4] = '\0';
- len -= 4;
if (buf[0] != 'h')
return NULL;
hl = strtol(tmp + 1, NULL, 16);
- if (hl > len) hl = len;
+ if (hl > len)
+ hl = len;
if (hl) {
char *v = malloc(hl + 1);
@@ -313,9 +344,6 @@ static SANE_Status info_cb(void *userdata, char *token, int len)
epsonds_scanner *s = (epsonds_scanner *)userdata;
char *value;
- if (DBG_LEVEL >= 11) {
- debug_token(DBG_LEVEL, __func__, token, len);
- }
/* pointer to the token's value */
value = token + 3;
@@ -333,7 +361,6 @@ static SANE_Status info_cb(void *userdata, char *token, int len)
s->hw->model = decode_string(value, len);
s->hw->sane.model = s->hw->model;
DBG(1, " product: %s\n", s->hw->model);
- /* we will free the string later */
}
if (strncmp("VER", token, 3) == 0) {
@@ -421,6 +448,7 @@ static SANE_Status info_cb(void *userdata, char *token, int len)
int max = decode_value(value + 4 + 8, 8);
DBG(1, " ADF: area %dx%d @ 100dpi\n", min, max);
+ eds_set_adf_area(s->hw, min, max, 100);
}
if (strncmp("AMIN", value, 4) == 0) {
@@ -437,11 +465,40 @@ static SANE_Status info_cb(void *userdata, char *token, int len)
int max = decode_value(value + 4 + 8, 8);
DBG(1, " ADF: max %dx%d @ 100dpi\n", min, max);
+ }
+ }
+
+
+
+
+
+
+ if (len == 16) {
+
+ if (strncmp("AREA", value, 4) == 0) {
+
+ int min = decode_value(value + 4, 4);
+ int max = decode_value(value + 4 + 4, 8);
+
+ DBG(1, " ADF: area %dx%d @ 100dpi\n", min, max);
eds_set_adf_area(s->hw, min, max, 100);
}
+
+ if (strncmp("AMAX", value, 4) == 0) {
+
+ // d
+ int min = decode_value(value + 4, 4);
+ // i
+ int max = decode_value(value + 4 + 4, 8);
+
+ DBG(1, " ADF: max %dx%d @ 100dpi\n", min, max);
+ }
}
+
+
+
if (len == 12) {
/* RESOi0000600 */
@@ -483,6 +540,22 @@ static SANE_Status info_cb(void *userdata, char *token, int len)
}
}
+
+ if (len == 16) {
+
+ /* AREAi0000850i0001400 */
+ if (strncmp("AREA", value, 4) == 0) {
+ //d
+ int min = decode_value(value + 4, 4);
+ //i
+ int max = decode_value(value + 4 + 4, 8);
+
+ DBG(1, " FB: area %dx%d @ 100dpi\n", min, max);
+
+ eds_set_fbf_area(s->hw, min, max, 100);
+ }
+ }
+
if (len == 8) {
if (strncmp("ALGNLEFT", value, len) == 0) {
@@ -602,6 +675,7 @@ static SANE_Status capa_cb(void *userdata, char *token, int len)
if (strncmp("ADFCRP ", token, 3 + 4) == 0) {
DBG(1, " ADF: image cropping\n");
+ s->hw->adf_has_crp = 1;
}
if (strncmp("ADFFAST", token, 3 + 4) == 0) {
@@ -636,6 +710,23 @@ static SANE_Status capa_cb(void *userdata, char *token, int len)
}
}
+
+ if (strncmp("COLLIST", token, 3 + 4) == 0)
+ {
+ char *p = token + 3 + 4;
+ int count = (len - 4);
+ int readBytes = 0;
+ s->hw->has_mono = 0;
+ while (readBytes < count) {
+ if (strncmp(p, "M001", 4) == 0)
+ {
+ s->hw->has_mono = 1;
+ }
+ readBytes+=4;
+ p+=4;
+ }
+ }
+
/* RSMRANGi0000050i0000600 */
if (strncmp("RSMRANG", token, 3 + 4) == 0) {
@@ -659,17 +750,24 @@ static SANE_Status capa_cb(void *userdata, char *token, int len)
char *p = token + 3 + 4;
- if (p[0] == 'i') {
-
- int i;
- int count = (len - 4) / 8;
- for (i = 0; i < count; i++) {
+ int count = (len - 4);
+ int readBytes = 0;
+ while (readBytes < count) {
+ if(*p == 'i')
+ {
eds_add_resolution(s->hw, decode_value(p, 8));
p += 8;
+ readBytes += 8;
+ }else if(*p == 'd')
+ {
+ eds_add_resolution(s->hw, decode_value(p, 4));
+ p += 4;
+ readBytes +=4;
+ }
}
- }
+
}
return SANE_STATUS_GOOD;
@@ -684,16 +782,26 @@ SANE_Status esci2_capa(epsonds_scanner *s)
static SANE_Status stat_cb(void *userdata, char *token, int len)
{
-/*
- epsonds_scanner *s = (epsonds_scanner *)userdata;
char *value = token + 3;
-*/
+
userdata = userdata;
if (DBG_LEVEL >= 11) {
debug_token(DBG_LEVEL, __func__, token, len);
}
+ if (strncmp("ERR", token, 3) == 0) {
+ if (strncmp("ADF PE ", value, len) == 0) {
+ DBG(1, " PE : paper empty\n");
+ return SANE_STATUS_NO_DOCS;
+ }
+
+ if (strncmp("ADF OPN", value, len) == 0) {
+ DBG(1, " conver open\n");
+ return SANE_STATUS_COVER_OPEN;
+ }
+ }
+
return SANE_STATUS_GOOD;
}
@@ -742,10 +850,10 @@ static SANE_Status para_cb(void *userdata, char *token, int len)
return SANE_STATUS_GOOD;
}
-SANE_Status esci2_para(epsonds_scanner *s, char *parameters)
+SANE_Status esci2_para(epsonds_scanner *s, char *parameters, int len)
{
DBG(8, "%s: %s\n", __func__, parameters);
- return esci2_cmd(s, "PARAx0000000", 12, parameters, strlen(parameters), NULL, &para_cb);
+ return esci2_cmd(s, "PARAx0000000", 12, parameters, len, NULL, &para_cb);
}
SANE_Status esci2_mech(epsonds_scanner *s, char *parameters)
@@ -784,12 +892,105 @@ static SANE_Status img_cb(void *userdata, char *token, int len)
return SANE_STATUS_GOOD;
}
+ if (len == 12 && strncmp("pst", token, 3) == 0) {
+
+ s->dummy = decode_value(token + 3 + 4, 4);
+
+ DBG(10, "%s: pst width: %d, height: %d, dummy: %d\n",
+ __func__,
+ decode_value(token + 3, 4),
+ decode_value(token + 3 + 4 + 4, 4),
+ s->dummy);
+
+ return SANE_STATUS_GOOD;
+ }
+
+ if (len == 16 && strncmp("pst", token, 3) == 0) {
+
+ s->dummy = decode_value(token + 3 + 4, 4);
+
+ DBG(10, "%s: pst width: %d, height: %d, dummy: %d\n",
+ __func__,
+ decode_value(token + 3, 4),
+ decode_value(token + 3 + 4 + 4, 8),
+ s->dummy);
+
+ return SANE_STATUS_GOOD;
+ }
+
+ if (len == 20 && strncmp("pst", token, 3) == 0) {
+
+ s->dummy = decode_value(token + 3 + 8, 4);
+
+ DBG(10, "%s: pst width: %d, height: %d, dummy: %d\n",
+ __func__,
+ decode_value(token + 3, 8),
+ decode_value(token + 3 + 8 + 4, 8),
+ s->dummy);
+
+ return SANE_STATUS_GOOD;
+ }
+
+
+ // i0001696i0002347
if (len == 16 && strncmp("pen", token, 3) == 0) {
DBG(10, "%s: page end\n", __func__);
s->eof = 1;
+ if (s->isflatbedScan)
+ {
+ s->scanning = 0;
+ }
+ DBG(10, "%s: pen width: %d, height: %d, dummy: %d\n",
+ __func__,
+ decode_value(token + 3, 8),
+ decode_value(token + 3 + 8, 8),
+ s->dummy);
+ s->width_temp = decode_value(token + 3, 8);
+ s->height_temp = decode_value(token + 3 + 8, 8);
return SANE_STATUS_EOF;
}
+ // d696i0002347
+ if (len == 12 && strncmp("pen", token, 3) == 0) {
+ DBG(10, "%s: page end\n", __func__);
+ s->eof = 1;
+ if (s->isflatbedScan)
+ {
+ s->scanning = 0;
+ }
+
+ DBG(10, "%s: pen width: %d, height: %d, dummy: %d\n",
+ __func__,
+ decode_value(token + 3, 4),
+ decode_value(token + 3 + 4, 8),
+ s->dummy);
+
+ s->width_temp = decode_value(token + 3, 4);
+ s->height_temp = decode_value(token + 3 + 4, 8);
+ return SANE_STATUS_EOF;
+ }
+
+ // d696d2347
+ if (len == 8 && strncmp("pen", token, 3) == 0) {
+ DBG(10, "%s: page end\n", __func__);
+ s->eof = 1;
+ if (s->isflatbedScan)
+ {
+ s->scanning = 0;
+ }
+ DBG(10, "%s: pen width: %d, height: %d, dummy: %d\n",
+ __func__,
+ decode_value(token + 3, 4),
+ decode_value(token + 3 + 4, 4),
+ s->dummy);
+
+ s->width_temp = decode_value(token + 3, 4);
+ s->height_temp = decode_value(token + 3 + 4, 4);
+
+ return SANE_STATUS_EOF;
+ }
+
+
/* typIMGA or typIMGB */
if (len == 4 && strncmp("typ", token, 3) == 0) {
@@ -807,6 +1008,7 @@ static SANE_Status img_cb(void *userdata, char *token, int len)
char *cause = token + 3 + 4; /* OPN, PJ, PE, ERR, LTF, LOCK, DFED, DTCL, AUT, PERM */
s->scanning = 0;
+ s->scanEnd = 1;
DBG(1, "%s: error on option %3.3s, cause %4.4s\n",
__func__, option, cause);
@@ -831,6 +1033,8 @@ static SANE_Status img_cb(void *userdata, char *token, int len)
}
if (len == 4 && strncmp("lftd000", token, 3 + 4) == 0) {
+ DBG(1, "%s:lft ok\n", __func__);
+ s->scanEnd = 1;
s->scanning = 0;
}
@@ -846,6 +1050,8 @@ esci2_img(struct epsonds_scanner *s, SANE_Int *length)
unsigned int more;
ssize_t read;
+ DBG(15, "esci2_img start\n");
+
*length = 0;
if (s->canceling)
@@ -856,6 +1062,7 @@ esci2_img(struct epsonds_scanner *s, SANE_Int *length)
if (status != SANE_STATUS_GOOD) {
return status;
}
+ DBG(15, "request img OK\n");
/* receive DataHeaderBlock */
memset(s->buf, 0x00, 64);
@@ -863,6 +1070,7 @@ esci2_img(struct epsonds_scanner *s, SANE_Int *length)
if (status != SANE_STATUS_GOOD) {
return status;
}
+ DBG(15, "receive img OK\n");
/* check if we need to read any image data */
more = 0;
@@ -873,6 +1081,17 @@ esci2_img(struct epsonds_scanner *s, SANE_Int *length)
/* this handles eof and errors */
parse_status = esci2_parse_block((char *)s->buf + 12, 64 - 12, s, &img_cb);
+ if (s->backside)
+ {
+ s->width_back = s->width_temp;
+ s->height_back = s->height_temp;
+ }else{
+ s->width_front = s->width_temp;
+ s->height_front = s->height_temp;
+
+ }
+
+
/* no more data? return using the status of the esci2_parse_block
* call, which might hold other error conditions.
*/
@@ -884,7 +1103,6 @@ esci2_img(struct epsonds_scanner *s, SANE_Int *length)
if (more > s->bsz) {
return SANE_STATUS_IO_ERROR;
}
-
/* ALWAYS read image data */
if (s->hw->connection == SANE_EPSONDS_NET) {
epsonds_net_request_read(s, more);
diff --git a/backend/epsonds-cmd.h b/backend/epsonds-cmd.h
index 973609a..2bd19db 100644
--- a/backend/epsonds-cmd.h
+++ b/backend/epsonds-cmd.h
@@ -20,7 +20,7 @@ SANE_Status esci2_can(epsonds_scanner *s);
SANE_Status esci2_capa(epsonds_scanner *s);
SANE_Status esci2_resa(epsonds_scanner *s);
SANE_Status esci2_stat(epsonds_scanner *s);
-SANE_Status esci2_para(epsonds_scanner *s, char *parameters);
+SANE_Status esci2_para(epsonds_scanner *s, char *parameters, int len);
SANE_Status esci2_mech(epsonds_scanner *s, char *parameters);
SANE_Status esci2_trdt(epsonds_scanner *s);
SANE_Status esci2_img(struct epsonds_scanner *s, SANE_Int *length) ;
diff --git a/backend/epsonds-jpeg.c b/backend/epsonds-jpeg.c
index 244f442..99ca53a 100644
--- a/backend/epsonds-jpeg.c
+++ b/backend/epsonds-jpeg.c
@@ -20,19 +20,39 @@
#include "epsonds.h"
#include "epsonds-jpeg.h"
#include "epsonds-ops.h"
+#include <setjmp.h>
-#define min(A,B) (((A)<(B)) ? (A) : (B))
+struct my_error_mgr {
+ struct jpeg_error_mgr pub;
+ jmp_buf setjmp_buffer;
+};
+
+typedef struct my_error_mgr * my_error_ptr;
+
+
+METHODDEF(void) my_error_exit (j_common_ptr cinfo)
+{
+
+ char buffer[JMSG_LENGTH_MAX];
+ (*cinfo->err->format_message) (cinfo, buffer);
+
+ DBG(10,"Jpeg decode error [%s]", buffer);
+}
+
+LOCAL(struct jpeg_error_mgr *) jpeg_custom_error (struct my_error_mgr * err)
+{
+
+ struct jpeg_error_mgr* pRet = jpeg_std_error(&(err->pub));
+ err->pub.error_exit = my_error_exit;
+
+ return pRet;
+}
typedef struct
{
struct jpeg_source_mgr pub;
-
- epsonds_scanner *s;
JOCTET *buffer;
-
- SANE_Byte *linebuffer;
- SANE_Int linebuffer_size;
- SANE_Int linebuffer_index;
+ int length;
}
epsonds_src_mgr;
@@ -50,22 +70,11 @@ METHODDEF(boolean)
jpeg_fill_input_buffer(j_decompress_ptr cinfo)
{
epsonds_src_mgr *src = (epsonds_src_mgr *)cinfo->src;
- int avail, size;
-
- /* read from the scanner or the ring buffer */
-
- avail = eds_ring_avail(src->s->current);
- if (avail == 0) {
- return FALSE;
- }
-
/* read from scanner if no data? */
- size = min(1024, avail);
-
- eds_ring_read(src->s->current, src->buffer, size);
src->pub.next_input_byte = src->buffer;
- src->pub.bytes_in_buffer = size;
+ src->pub.bytes_in_buffer = src->length;
+ DBG(18, "reading from ring buffer, %d left\n", src->length);
return TRUE;
}
@@ -87,140 +96,140 @@ jpeg_skip_input_data(j_decompress_ptr cinfo, long num_bytes)
}
}
-SANE_Status
-eds_jpeg_start(epsonds_scanner *s)
-{
- epsonds_src_mgr *src;
-
- s->jpeg_cinfo.err = jpeg_std_error(&s->jpeg_err);
-
- jpeg_create_decompress(&s->jpeg_cinfo);
-
- s->jpeg_cinfo.src = (struct jpeg_source_mgr *)(*s->jpeg_cinfo.mem->alloc_small)((j_common_ptr)&s->jpeg_cinfo,
- JPOOL_PERMANENT, sizeof(epsonds_src_mgr));
-
- memset(s->jpeg_cinfo.src, 0x00, sizeof(epsonds_src_mgr));
-
- src = (epsonds_src_mgr *)s->jpeg_cinfo.src;
- src->s = s;
-
- src->buffer = (JOCTET *)(*s->jpeg_cinfo.mem->alloc_small)((j_common_ptr)&s->jpeg_cinfo,
- JPOOL_PERMANENT,
- 1024 * sizeof(JOCTET));
- src->pub.init_source = jpeg_init_source;
- src->pub.fill_input_buffer = jpeg_fill_input_buffer;
- src->pub.skip_input_data = jpeg_skip_input_data;
- src->pub.resync_to_restart = jpeg_resync_to_restart;
- src->pub.term_source = jpeg_term_source;
- src->pub.bytes_in_buffer = 0;
- src->pub.next_input_byte = NULL;
-
- s->jpeg_header_seen = 0;
-
- return SANE_STATUS_GOOD;
-}
-
-SANE_Status
-eds_jpeg_read_header(epsonds_scanner *s)
+void eds_decode_jpeg(epsonds_scanner*s, SANE_Byte *data, SANE_Int size, ring_buffer* ringBuffer, SANE_Int isBackSide, SANE_Int needToConvertBW)
{
- epsonds_src_mgr *src = (epsonds_src_mgr *)s->jpeg_cinfo.src;
-
- if (jpeg_read_header(&s->jpeg_cinfo, TRUE)) {
-
- s->jdst = sanei_jpeg_jinit_write_ppm(&s->jpeg_cinfo);
-
- if (jpeg_start_decompress(&s->jpeg_cinfo)) {
-
- int size;
-
- DBG(3, "%s: w: %d, h: %d, components: %d\n",
+ struct jpeg_decompress_struct jpeg_cinfo;
+ struct my_error_mgr jpeg_err;
+
+ {
+ epsonds_src_mgr *src;
+
+ jpeg_cinfo.err = jpeg_custom_error(&jpeg_err);
+
+ jpeg_create_decompress(&jpeg_cinfo);
+
+ jpeg_cinfo.src = (struct jpeg_source_mgr *)(*jpeg_cinfo.mem->alloc_small)((j_common_ptr)&jpeg_cinfo,
+ JPOOL_PERMANENT, sizeof(epsonds_src_mgr));
+
+ memset(jpeg_cinfo.src, 0x00, sizeof(epsonds_src_mgr));
+;
+ src = (epsonds_src_mgr *)jpeg_cinfo.src;
+ src->pub.init_source = jpeg_init_source;
+ src->pub.fill_input_buffer = jpeg_fill_input_buffer;
+ src->pub.skip_input_data = jpeg_skip_input_data;
+ src->pub.resync_to_restart = jpeg_resync_to_restart;
+ src->pub.term_source = jpeg_term_source;
+ src->pub.bytes_in_buffer = 0;
+ src->pub.next_input_byte = NULL;
+ src->buffer = (JOCTET*)data;
+ src->length = size;
+ }
+ {
+ if (jpeg_read_header(&jpeg_cinfo, TRUE)) {
+
+ if (jpeg_start_decompress(&jpeg_cinfo)) {
+
+ DBG(10,"%s: w: %d, h: %d, components: %d\n",
__func__,
- s->jpeg_cinfo.output_width, s->jpeg_cinfo.output_height,
- s->jpeg_cinfo.output_components);
-
- size = s->jpeg_cinfo.output_width * s->jpeg_cinfo.output_components * 1;
-
- src->linebuffer = (*s->jpeg_cinfo.mem->alloc_large)((j_common_ptr)&s->jpeg_cinfo,
- JPOOL_PERMANENT, size);
-
- src->linebuffer_size = 0;
- src->linebuffer_index = 0;
-
- s->jpeg_header_seen = 1;
-
- return SANE_STATUS_GOOD;
-
- } else {
- DBG(0, "%s: decompression failed\n", __func__);
- return SANE_STATUS_IO_ERROR;
+ jpeg_cinfo.output_width, jpeg_cinfo.output_height,
+ jpeg_cinfo.output_components);
+ }
+ }
+ }
+ {
+ int sum = 0;
+ int bufSize = jpeg_cinfo.output_width * jpeg_cinfo.output_components;
+
+ int monoBufSize = (jpeg_cinfo.output_width + 7)/8;
+
+ JSAMPARRAY scanlines = (jpeg_cinfo.mem->alloc_sarray)((j_common_ptr)&jpeg_cinfo, JPOOL_IMAGE, bufSize, 1);
+ while (jpeg_cinfo.output_scanline < jpeg_cinfo.output_height) {
+ int l = jpeg_read_scanlines(&jpeg_cinfo, scanlines, 1);
+ if (l == 0) {
+ break;
+ }
+ sum += l;
+
+ if (needToConvertBW)
+ {
+ SANE_Byte* bytes = scanlines[0];
+
+ SANE_Int imgPos = 0;
+
+ for (int i = 0; i < monoBufSize; i++)
+ {
+ SANE_Byte outByte = 0;
+
+ for(SANE_Int bitIndex = 0; bitIndex < 8 && imgPos < bufSize; bitIndex++) {
+ //DBG(10,"bytes[imgPos] = %d\n", bytes[imgPos]);
+
+ if(bytes[imgPos] >= 110) {
+ SANE_Byte bit = 7 - (bitIndex % 8);
+ outByte |= (1<< bit);
+ }
+ imgPos += 1;
+ }
+ //DBG(10,"outByte = %d\n", outByte);
+ eds_ring_write(ringBuffer, &outByte, 1);
+ }
+ }
+ else
+ {
+ eds_ring_write(ringBuffer, scanlines[0], bufSize);
+ }
+
+ // decode until valida data
+ if (isBackSide)
+ {
+ if (sum >= s->height_back)
+ {
+ break;
+ }
+ }else
+ {
+ if (sum >= s->height_front)
+ {
+ break;
+ }
+ }
+ }
+ DBG(10,"decodded lines = %d\n", sum);
+
+ // abandon unncessary data
+ if ((JDIMENSION)sum < jpeg_cinfo.output_height)
+ {
+ // unncessary data
+ while(1)
+ {
+ int l = jpeg_read_scanlines(&jpeg_cinfo, scanlines, 1);
+ if (l == 0)
+ {
+ break;
+ }
+ }
}
- } else {
- DBG(0, "%s: cannot read JPEG header\n", __func__);
- return SANE_STATUS_IO_ERROR;
- }
-}
-
-void
-eds_jpeg_finish(epsonds_scanner *s)
-{
- jpeg_destroy_decompress(&s->jpeg_cinfo);
-}
-
-void
-eds_jpeg_read(SANE_Handle handle, SANE_Byte *data,
- SANE_Int max_length, SANE_Int *length)
-{
- epsonds_scanner *s = handle;
-
- struct jpeg_decompress_struct cinfo = s->jpeg_cinfo;
- epsonds_src_mgr *src = (epsonds_src_mgr *)s->jpeg_cinfo.src;
-
- int l;
-
- *length = 0;
-
- /* copy from line buffer if available */
- if (src->linebuffer_size && src->linebuffer_index < src->linebuffer_size) {
-
- *length = src->linebuffer_size - src->linebuffer_index;
-
- if (*length > max_length)
- *length = max_length;
-
- memcpy(data, src->linebuffer + src->linebuffer_index, *length);
- src->linebuffer_index += *length;
-
- return;
- }
-
- if (cinfo.output_scanline >= cinfo.output_height) {
- *length = 0;
- return;
- }
-
- /* scanlines of decompressed data will be in s->jdst->buffer
- * only one line at time is supported
- */
-
- l = jpeg_read_scanlines(&cinfo, s->jdst->buffer, 1);
- if (l == 0) {
- return;
- }
-
- /* from s->jdst->buffer to linebuffer
- * linebuffer holds width * bytesperpixel
- */
-
- (*s->jdst->put_pixel_rows)(&cinfo, s->jdst, 1, (char *)src->linebuffer);
-
- *length = cinfo.output_width * cinfo.output_components * 1;
- src->linebuffer_size = *length;
- src->linebuffer_index = 0;
-
- if (*length > max_length)
- *length = max_length;
- memcpy(data, src->linebuffer + src->linebuffer_index, *length);
- src->linebuffer_index += *length;
+ // if not auto crop mode padding to lines
+ if (s->val[OPT_ADF_CRP].w == 0)
+ {
+ unsigned char* padding = malloc(s->params.bytes_per_line);
+ memset(padding, 255, s->params.bytes_per_line);
+ DBG(10,"padding data lines = %d to %d pa \n", sum, s->params.lines);
+
+ while(sum < s->params.lines)
+ {
+ eds_ring_write(ringBuffer, padding, bufSize);
+ sum++;
+ }
+
+ free(padding);
+ padding = NULL;
+ }
+ }
+ {
+ jpeg_finish_decompress(&jpeg_cinfo);
+ jpeg_destroy_decompress(&jpeg_cinfo);
+ }
+ return;
}
diff --git a/backend/epsonds-jpeg.h b/backend/epsonds-jpeg.h
index a804dec..42f542d 100644
--- a/backend/epsonds-jpeg.h
+++ b/backend/epsonds-jpeg.h
@@ -10,8 +10,4 @@
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation, version 2.
*/
-
-SANE_Status eds_jpeg_start(epsonds_scanner *s);
-void eds_jpeg_finish(epsonds_scanner *s);
-SANE_Status eds_jpeg_read_header(epsonds_scanner *s);
-void eds_jpeg_read(SANE_Handle handle, SANE_Byte *data, SANE_Int max_length, SANE_Int *length);
+void eds_decode_jpeg(epsonds_scanner*s, SANE_Byte *data, SANE_Int size, ring_buffer* ringBuffer, SANE_Int isBackSide, SANE_Int needToConvertBW);
diff --git a/backend/epsonds-net.c b/backend/epsonds-net.c
index 3c8be29..4f4c1e2 100644
--- a/backend/epsonds-net.c
+++ b/backend/epsonds-net.c
@@ -32,10 +32,19 @@
#include "sane/sanei_debug.h"
+
static ssize_t
epsonds_net_read_raw(epsonds_scanner *s, unsigned char *buf, ssize_t wanted,
SANE_Status *status)
{
+ DBG(15, "%s: wanted: %ld\n", __func__, wanted);
+
+ if (wanted == 0)
+ {
+ *status = SANE_STATUS_GOOD;
+ return 0;
+ }
+
int ready;
ssize_t read = -1;
fd_set readable;
@@ -284,3 +293,228 @@ epsonds_net_unlock(struct epsonds_scanner *s)
/* epsonds_net_read(s, buf, 1, &status); */
return status;
}
+#if WITH_AVAHI
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <avahi-client/lookup.h>
+#include <avahi-common/error.h>
+#include <avahi-common/simple-watch.h>
+#include <sys/time.h>
+#include <errno.h>
+
+static AvahiSimplePoll *simple_poll = NULL;
+
+static struct timeval borowseEndTime;
+
+static int resolvedCount = 0;
+static int browsedCount = 0;
+static int waitResolver = 0;
+
+typedef struct {
+ AvahiClient* client;
+ Device_Found_CallBack callBack;
+}EDSAvahiUserData;
+
+static int my_avahi_simple_poll_loop(AvahiSimplePoll *s) {
+ struct timeval currentTime;
+
+ for (;;)
+ {
+ int r = avahi_simple_poll_iterate(s, 1);
+ if (r != 0)
+ {
+ if (r >= 0 || errno != EINTR)
+ {
+ DBG(10, "my_avahi_simple_poll_loop end\n");
+ return r;
+ }
+ }
+
+ if (waitResolver) {
+ gettimeofday(&currentTime, NULL);
+
+ if ((currentTime.tv_sec - borowseEndTime.tv_sec) >= 3)
+ {
+ avahi_simple_poll_quit(simple_poll);
+ DBG(10, "resolve timeout\n");
+ return 0;
+ }
+ }
+ }
+}
+
+static void
+epsonds_resolve_callback(AvahiServiceResolver *r, AVAHI_GCC_UNUSED AvahiIfIndex interface,
+ AVAHI_GCC_UNUSED AvahiProtocol protocol,
+ AvahiResolverEvent event, const char *name,
+ const char *type,
+ const char *domain,
+ const char *host_name,
+ const AvahiAddress *address, uint16_t port, AvahiStringList *txt,
+ AvahiLookupResultFlags flags,
+ void *userdata)
+{
+ // unused parameter
+ (void)r;
+ (void)type;
+ (void)domain;
+ (void)host_name;
+ (void)port;
+ (void)flags;
+ EDSAvahiUserData* data = userdata;
+ char ipAddr[AVAHI_ADDRESS_STR_MAX];
+
+ DBG(10, "epsonds_searchDevices resolve_callback\n");
+
+
+ resolvedCount++;
+
+ switch (event) {
+ case AVAHI_RESOLVER_FAILURE:
+ break;
+ case AVAHI_RESOLVER_FOUND:
+ avahi_address_snprint(ipAddr, sizeof(ipAddr), address);
+ DBG(10, "epsonds_searchDevices name = %s \n", name);
+ if (strlen(name) > 7)
+ {
+ if (strncmp(name, "EPSON", 5) == 0)
+ {
+ while(txt != NULL)
+ {
+ char* text = (char*)avahi_string_list_get_text(txt);
+ DBG(10, "avahi string = %s\n", text);
+
+ if (strlen(text) > 4 && strncmp(text, "mdl=", 4) == 0)
+ {
+ if (data->callBack)
+ {
+ data->callBack(&text[4], ipAddr);
+ break;
+ }
+ }
+ txt = avahi_string_list_get_next(txt);
+ }
+
+ }
+ }
+ break;
+ }
+}
+
+static void
+browse_callback(AvahiServiceBrowser *b, AvahiIfIndex interface,
+ AvahiProtocol protocol, AvahiBrowserEvent event,
+ const char *name, const char *type,
+ const char *domain,
+ AvahiLookupResultFlags flags,
+ void* userdata)
+{
+ DBG(10, "browse_callback event = %d\n", event);
+
+ //unused parameter
+ (void)b;
+ (void)flags;
+
+ EDSAvahiUserData *data = userdata;
+ switch (event) {
+ case AVAHI_BROWSER_FAILURE:
+ avahi_simple_poll_quit(simple_poll);
+ return;
+ case AVAHI_BROWSER_NEW:
+ DBG(10, "browse_callback name = %s\n", name);
+ browsedCount++;
+ if (!(avahi_service_resolver_new(data->client, interface, protocol, name,
+ type, domain,
+ AVAHI_PROTO_UNSPEC, 0,
+ epsonds_resolve_callback, data)))
+ {
+ DBG(10, "avahi_service_resolver_new fails\n");
+ break;
+ }
+ case AVAHI_BROWSER_REMOVE:
+ break;
+ case AVAHI_BROWSER_ALL_FOR_NOW:
+ DBG(10, "AVAHI_BROWSER_ALL_FOR_NOW\n");
+ gettimeofday(&borowseEndTime, NULL);
+
+ if (browsedCount > resolvedCount)
+ {
+ DBG(10, "WAIT RESOLVER\n");
+ waitResolver = 1;
+ }else{
+ DBG(10, "QUIT POLL\n");
+ avahi_simple_poll_quit(simple_poll);
+ }
+ break;
+ case AVAHI_BROWSER_CACHE_EXHAUSTED:
+ DBG(10, "AVAHI_BROWSER_CACHE_EXHAUSTED\n");
+ break;
+ }
+}
+
+static void
+client_callback(AvahiClient *c, AvahiClientState state,
+ AVAHI_GCC_UNUSED void *userdata)
+{
+ assert(c);
+ if (state == AVAHI_CLIENT_FAILURE)
+ avahi_simple_poll_quit(simple_poll);
+}
+
+SANE_Status epsonds_searchDevices(Device_Found_CallBack deviceFoundCallBack)
+{
+ int result = SANE_STATUS_GOOD;
+
+ AvahiClient *client = NULL;
+ AvahiServiceBrowser *sb = NULL;
+
+ EDSAvahiUserData data;
+
+ resolvedCount = 0;
+ browsedCount = 0;
+ waitResolver = 0;
+
+
+ int error = 0;
+ DBG(10, "epsonds_searchDevices\n");
+
+ if (!(simple_poll = avahi_simple_poll_new())) {
+ DBG(10, "avahi_simple_poll_new failed\n");
+ result = SANE_STATUS_INVAL;
+ goto fail;
+ }
+ client = avahi_client_new(avahi_simple_poll_get(simple_poll), 0,
+ client_callback, NULL, &error);
+ if (!client) {
+ DBG(10, "avahi_client_new failed %s\n", avahi_strerror(error));
+ result = SANE_STATUS_INVAL;
+ goto fail;
+ }
+ data.client = client;
+ data.callBack = deviceFoundCallBack;
+
+ if (!(sb = avahi_service_browser_new(client, AVAHI_IF_UNSPEC,
+ AVAHI_PROTO_UNSPEC, "_scanner._tcp",
+ NULL, 0, browse_callback, &data))) {
+ DBG(10, "avahi_service_browser_new failed: %s\n",
+ avahi_strerror(avahi_client_errno(client)));
+ result = SANE_STATUS_INVAL;
+ goto fail;
+ }
+ my_avahi_simple_poll_loop(simple_poll);
+fail:
+ if (sb)
+ avahi_service_browser_free(sb);
+ if (client)
+ avahi_client_free(client);
+ if (simple_poll)
+ avahi_simple_poll_free(simple_poll);
+
+ DBG(10, "epsonds_searchDevices fin\n");
+
+ return result;
+}
+#endif
diff --git a/backend/epsonds-net.h b/backend/epsonds-net.h
index 107301b..2431c35 100644
--- a/backend/epsonds-net.h
+++ b/backend/epsonds-net.h
@@ -4,6 +4,8 @@
#include <sys/types.h>
#include "../include/sane/sane.h"
+typedef void (*Device_Found_CallBack) (const char* name, const char* ip);
+
extern ssize_t epsonds_net_read(struct epsonds_scanner *s, unsigned char *buf, ssize_t buf_size,
SANE_Status *status);
extern size_t epsonds_net_write(struct epsonds_scanner *s, unsigned int cmd, const unsigned char *buf,
@@ -13,4 +15,8 @@ extern SANE_Status epsonds_net_lock(struct epsonds_scanner *s);
extern SANE_Status epsonds_net_unlock(struct epsonds_scanner *s);
extern SANE_Status epsonds_net_request_read(epsonds_scanner *s, size_t len);
+#if WITH_AVAHI
+extern SANE_Status epsonds_searchDevices(Device_Found_CallBack deviceFoundCallBack);
+#endif
+
#endif
diff --git a/backend/epsonds-ops.c b/backend/epsonds-ops.c
index 8b9d115..56194c4 100644
--- a/backend/epsonds-ops.c
+++ b/backend/epsonds-ops.c
@@ -28,10 +28,9 @@
extern struct mode_param mode_params[];
/* Define the different scan sources */
-
-#define FBF_STR SANE_I18N("Flatbed")
-#define TPU_STR SANE_I18N("Transparency Unit")
-#define ADF_STR SANE_I18N("Automatic Document Feeder")
+#define STRING_FLATBED SANE_I18N("Flatbed")
+#define STRING_ADFFRONT SANE_I18N("ADF Front")
+#define STRING_ADFDUPLEX SANE_I18N("ADF Duplex")
extern SANE_String_Const source_list[];
@@ -53,10 +52,13 @@ eds_dev_post_init(struct epsonds_device *dev)
DBG(10, "%s\n", __func__);
if (dev->has_fb)
- *source_list_add++ = FBF_STR;
+ *source_list_add++ = STRING_FLATBED;
if (dev->has_adf)
- *source_list_add++ = ADF_STR;
+ *source_list_add++ = STRING_ADFFRONT;
+
+ if (dev->adf_is_duplex)
+ *source_list_add++ = STRING_ADFDUPLEX;
if (source_list[0] == 0
|| (dev->res_list[0] == 0 && dev->dpi_range.min == 0)
@@ -209,8 +211,6 @@ eds_init_parameters(epsonds_scanner *s)
memset(&s->params, 0, sizeof(SANE_Parameters));
- s->dummy = 0;
-
/* setup depth according to our mode table */
if (mode_params[s->val[OPT_MODE].w].depth == 1)
s->params.depth = 1;
@@ -314,6 +314,7 @@ eds_init_parameters(epsonds_scanner *s)
return SANE_STATUS_GOOD;
}
+#define min(A,B) (((A)<(B)) ? (A) : (B))
void
eds_copy_image_from_ring(epsonds_scanner *s, SANE_Byte *data, SANE_Int max_length,
@@ -322,17 +323,13 @@ eds_copy_image_from_ring(epsonds_scanner *s, SANE_Byte *data, SANE_Int max_lengt
int lines, available;
int hw_line_size = (s->params.bytes_per_line + s->dummy);
- /* trim max_length to a multiple of hw_line_size */
- max_length -= (max_length % hw_line_size);
-
- /* check available data */
available = eds_ring_avail(s->current);
if (max_length > available)
max_length = available;
- lines = max_length / hw_line_size;
+ lines = min(max_length / s->params.bytes_per_line, available / hw_line_size);
- DBG(18, "copying %d lines (%d, %d)\n", lines, s->params.bytes_per_line, s->dummy);
+ DBG(18, "copying %d lines (%d, %d, %d)\n", lines, s->params.bytes_per_line, s->dummy, s->params.depth);
/* need more data? */
if (lines == 0) {
@@ -490,3 +487,12 @@ void eds_ring_flush(ring_buffer *ring)
{
eds_ring_skip(ring, ring->fill);
}
+
+void eds_ring_destory(ring_buffer *ring)
+{
+ if (ring->ring)
+ {
+ free(ring->ring);
+ ring->ring = NULL;
+ }
+}
diff --git a/backend/epsonds-ops.h b/backend/epsonds-ops.h
index fe503d6..108d544 100644
--- a/backend/epsonds-ops.h
+++ b/backend/epsonds-ops.h
@@ -38,3 +38,4 @@ extern SANE_Int eds_ring_read(ring_buffer *ring, SANE_Byte *buf, SANE_Int size);
extern SANE_Int eds_ring_skip(ring_buffer *ring, SANE_Int size);
extern SANE_Int eds_ring_avail(ring_buffer *ring);
extern void eds_ring_flush(ring_buffer *ring) ;
+extern void eds_ring_destory(ring_buffer *ring) ;
diff --git a/backend/epsonds-usb.c b/backend/epsonds-usb.c
index c7e514c..dacfd5f 100644
--- a/backend/epsonds-usb.c
+++ b/backend/epsonds-usb.c
@@ -12,22 +12,3 @@
*/
#include "epsonds-usb.h"
-
-SANE_Word epsonds_usb_product_ids[] = {
- 0x0145, /* DS-5500, DS-6500, DS-7500 */
- 0x0146, /* DS-50000, DS-60000, DS-70000 */
- 0x014c, /* DS-510 */
- 0x014d, /* DS-560 */
- 0x0150, /* DS-40 */
- 0x0152, /* DS-760, DS-860 */
- 0x0154, /* DS-520 */
- 0x08bc, /* PX-M7050 Series, WF-8510/8590 Series */
- 0x08cc, /* PX-M7050FX Series, WF-R8590 Series */
- 0 /* last entry - this is used for devices that are specified
- in the config file as "usb <vendor> <product>" */
-};
-
-int epsonds_get_number_of_ids(void)
-{
- return sizeof (epsonds_usb_product_ids) / sizeof (SANE_Word);
-}
diff --git a/backend/epsonds-usb.h b/backend/epsonds-usb.h
index 96c77b5..9baab70 100644
--- a/backend/epsonds-usb.h
+++ b/backend/epsonds-usb.h
@@ -18,7 +18,4 @@
#define SANE_EPSONDS_VENDOR_ID (0x4b8)
-extern SANE_Word epsonds_usb_product_ids[];
-extern int epsonds_get_number_of_ids(void);
-
#endif
diff --git a/backend/epsonds.c b/backend/epsonds.c
index 1d557c9..0815535 100644
--- a/backend/epsonds.c
+++ b/backend/epsonds.c
@@ -50,6 +50,7 @@
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
+#include <math.h>
#include "sane/saneopts.h"
#include "sane/sanei_config.h"
@@ -64,7 +65,8 @@
#include "epsonds-jpeg.h"
#include "epsonds-net.h"
-
+static SANE_Status
+setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info);
/*
* Definition of the mode_param struct, that is used to
* specify the valid parameters for the different scan modes.
@@ -72,6 +74,1234 @@
* The depth variable gets updated when the bit depth is modified.
*/
+
+static unsigned char LUT[][256] =
+{
+ {// 0
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+ 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
+ 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
+ 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
+ 0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+ 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
+ 0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+ 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,
+ 0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+ 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
+ 0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
+ 0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
+ 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
+ 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
+ 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+ 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
+ 0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,
+ 0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+ 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
+ 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+ 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,
+ 0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+ },
+ { // 1
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x06,0x07,0x09,0x0B,0x0D,
+ 0x10,0x12,0x14,0x17,0x19,0x1B,0x1E,0x20,
+ 0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,0x30,
+ 0x32,0x33,0x35,0x37,0x39,0x3B,0x3C,0x3E,
+ 0x40,0x41,0x43,0x45,0x46,0x48,0x4A,0x4B,
+ 0x4D,0x4F,0x50,0x52,0x53,0x55,0x57,0x58,
+ 0x5A,0x5B,0x5D,0x5E,0x60,0x61,0x63,0x64,
+ 0x66,0x67,0x69,0x6A,0x6C,0x6D,0x6F,0x70,
+ 0x71,0x73,0x74,0x76,0x77,0x79,0x7A,0x7B,
+ 0x7D,0x7E,0x7F,0x81,0x82,0x84,0x85,0x86,
+ 0x88,0x89,0x8A,0x8C,0x8D,0x8E,0x90,0x91,
+ 0x92,0x94,0x95,0x96,0x98,0x99,0x9A,0x9C,
+ 0x9D,0x9E,0xA0,0xA1,0xA2,0xA3,0xA5,0xA6,
+ 0xA7,0xA8,0xAA,0xAB,0xAC,0xAE,0xAF,0xB0,
+ 0xB1,0xB3,0xB4,0xB5,0xB6,0xB8,0xB9,0xBA,
+ 0xBB,0xBC,0xBE,0xBF,0xC0,0xC1,0xC3,0xC4,
+ 0xC5,0xC6,0xC7,0xC9,0xCA,0xCB,0xCC,0xCD,
+ 0xCF,0xD0,0xD1,0xD2,0xD3,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDC,0xDD,0xDE,0xDF,0xE0,
+ 0xE1,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,
+ 0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF3,
+ 0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFB,0xFC,
+ 0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
+ },
+ { // 2
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x05,0x07,0x08,0x0A,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x16,0x19,0x1B,
+ 0x1D,0x1F,0x21,0x23,0x25,0x27,0x28,0x2A,
+ 0x2C,0x2E,0x30,0x32,0x33,0x35,0x37,0x39,
+ 0x3A,0x3C,0x3E,0x40,0x41,0x43,0x45,0x46,
+ 0x48,0x4A,0x4B,0x4D,0x4F,0x50,0x52,0x53,
+ 0x55,0x57,0x58,0x5A,0x5B,0x5D,0x5F,0x60,
+ 0x62,0x63,0x65,0x66,0x68,0x69,0x6B,0x6C,
+ 0x6E,0x6F,0x71,0x72,0x74,0x75,0x77,0x78,
+ 0x7A,0x7B,0x7D,0x7E,0x80,0x81,0x83,0x84,
+ 0x86,0x87,0x88,0x8A,0x8B,0x8D,0x8E,0x90,
+ 0x91,0x92,0x94,0x95,0x97,0x98,0x99,0x9B,
+ 0x9C,0x9E,0x9F,0xA0,0xA2,0xA3,0xA5,0xA7,
+ 0xA9,0xAA,0xAB,0xAD,0xAE,0xB0,0xB1,0xB2,
+ 0xB4,0xB5,0xB6,0xB8,0xB9,0xBA,0xBC,0xBD,
+ 0xBE,0xC0,0xC1,0xC2,0xC4,0xC5,0xC6,0xC8,
+ 0xC9,0xCA,0xCC,0xCD,0xCE,0xD0,0xD1,0xD2,
+ 0xD4,0xD5,0xD6,0xD7,0xD9,0xDA,0xDB,0xDD,
+ 0xDE,0xDF,0xE1,0xE2,0xE3,0xE4,0xE6,0xE7,
+ 0xE8,0xE9,0xEB,0xEC,0xED,0xEF,0xF0,0xF1,
+ 0xF2,0xF4,0xF5,0xF6,0xF7,0xF9,0xFA,0xFB,
+ 0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ { // 3
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x07,
+ 0x08,0x0A,0x0C,0x0E,0x10,0x12,0x14,0x16,
+ 0x18,0x1A,0x1C,0x1E,0x20,0x22,0x24,0x26,
+ 0x28,0x2A,0x2B,0x2D,0x2F,0x31,0x33,0x34,
+ 0x36,0x38,0x39,0x3B,0x3D,0x3E,0x40,0x42,
+ 0x43,0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4F,
+ 0x50,0x52,0x53,0x55,0x56,0x58,0x59,0x5B,
+ 0x5D,0x5E,0x60,0x61,0x63,0x64,0x66,0x67,
+ 0x69,0x6A,0x6B,0x6D,0x6E,0x70,0x71,0x73,
+ 0x74,0x76,0x77,0x79,0x7A,0x7B,0x7D,0x7E,
+ 0x80,0x81,0x83,0x84,0x85,0x87,0x88,0x8A,
+ 0x8B,0x8C,0x8E,0x8F,0x90,0x92,0x93,0x95,
+ 0x96,0x97,0x99,0x9A,0x9B,0x9D,0x9E,0x9F,
+ 0xA1,0xA2,0xA3,0xA5,0xA6,0xA7,0xA9,0xAA,
+ 0xAB,0xAD,0xAE,0xAF,0xB1,0xB2,0xB3,0xB5,
+ 0xB6,0xB7,0xB9,0xBA,0xBB,0xBD,0xBE,0xBF,
+ 0xC0,0xC2,0xC3,0xC4,0xC6,0xC7,0xC8,0xC9,
+ 0xCB,0xCC,0xCD,0xCF,0xD0,0xD1,0xD2,0xD4,
+ 0xD5,0xD6,0xD7,0xD9,0xDA,0xDB,0xDC,0xDF,
+ 0xE0,0xE1,0xE3,0xE4,0xE5,0xE6,0xE8,0xE9,
+ 0xEA,0xEB,0xED,0xEE,0xEF,0xF0,0xF2,0xF3,
+ 0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ { //4
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,
+ 0x04,0x05,0x07,0x08,0x0A,0x0C,0x0E,0x10,
+ 0x12,0x14,0x16,0x18,0x1A,0x1C,0x1E,0x20,
+ 0x22,0x24,0x26,0x28,0x2A,0x2B,0x2D,0x2F,
+ 0x31,0x33,0x34,0x36,0x38,0x39,0x3B,0x3D,
+ 0x3E,0x40,0x42,0x43,0x45,0x47,0x48,0x4A,
+ 0x4B,0x4D,0x4F,0x50,0x52,0x53,0x55,0x56,
+ 0x58,0x59,0x5B,0x5D,0x5E,0x60,0x61,0x63,
+ 0x64,0x66,0x67,0x69,0x6A,0x6B,0x6D,0x6E,
+ 0x70,0x71,0x73,0x74,0x76,0x77,0x79,0x7A,
+ 0x7B,0x7D,0x7E,0x80,0x81,0x83,0x84,0x85,
+ 0x87,0x88,0x8A,0x8B,0x8C,0x8E,0x8F,0x90,
+ 0x92,0x93,0x95,0x96,0x97,0x99,0x9A,0x9B,
+ 0x9D,0x9E,0x9F,0xA1,0xA2,0xA3,0xA5,0xA6,
+ 0xA7,0xA9,0xAA,0xAB,0xAD,0xAE,0xAF,0xB1,
+ 0xB2,0xB3,0xB5,0xB6,0xB7,0xB9,0xBA,0xBB,
+ 0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,0xC6,
+ 0xC7,0xC8,0xC9,0xCB,0xCC,0xCD,0xCF,0xD0,
+ 0xD1,0xD2,0xD4,0xD5,0xD6,0xD7,0xD9,0xDA,
+ 0xDB,0xDC,0xDE,0xDF,0xE0,0xE1,0xE3,0xE5,
+ 0xE6,0xE8,0xE9,0xEA,0xEB,0xED,0xEE,0xEF,
+ 0xF0,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,
+ 0xFA,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ { // 5
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x02,0x03,0x04,0x05,0x07,0x08,0x0A,
+ 0x0C,0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,
+ 0x1C,0x1E,0x20,0x22,0x24,0x26,0x28,0x2A,
+ 0x2B,0x2D,0x2F,0x31,0x33,0x34,0x36,0x38,
+ 0x39,0x3B,0x3D,0x3E,0x40,0x42,0x43,0x45,
+ 0x47,0x48,0x4A,0x4B,0x4D,0x4F,0x50,0x52,
+ 0x53,0x55,0x56,0x58,0x59,0x5B,0x5D,0x5E,
+ 0x60,0x61,0x63,0x64,0x66,0x67,0x69,0x6A,
+ 0x6B,0x6D,0x6E,0x70,0x71,0x73,0x74,0x76,
+ 0x77,0x79,0x7A,0x7B,0x7D,0x7E,0x80,0x81,
+ 0x83,0x84,0x85,0x87,0x88,0x8A,0x8B,0x8C,
+ 0x8E,0x8F,0x90,0x92,0x93,0x95,0x96,0x97,
+ 0x99,0x9A,0x9B,0x9D,0x9E,0x9F,0xA1,0xA2,
+ 0xA3,0xA5,0xA6,0xA7,0xA9,0xAA,0xAB,0xAD,
+ 0xAE,0xAF,0xB1,0xB2,0xB3,0xB5,0xB6,0xB7,
+ 0xB9,0xBA,0xBB,0xBD,0xBE,0xBF,0xC0,0xC2,
+ 0xC3,0xC4,0xC6,0xC7,0xC8,0xC9,0xCB,0xCC,
+ 0xCD,0xCF,0xD0,0xD1,0xD2,0xD4,0xD5,0xD6,
+ 0xD7,0xD9,0xDA,0xDB,0xDC,0xDE,0xDF,0xE0,
+ 0xE3,0xE4,0xE5,0xE6,0xE8,0xE9,0xEA,0xEB,
+ 0xED,0xEE,0xEF,0xF0,0xF2,0xF3,0xF4,0xF5,
+ 0xF6,0xF8,0xF9,0xFA,0xFB,0xFD,0xFE,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ { // 6
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x03,0x04,0x05,0x07,0x08,0x0A,0x0C,0x0E,
+ 0x10,0x12,0x14,0x16,0x18,0x18,0x1A,0x1C,
+ 0x1E,0x20,0x22,0x24,0x26,0x27,0x29,0x2B,
+ 0x2C,0x2E,0x30,0x31,0x33,0x35,0x36,0x38,
+ 0x39,0x3B,0x3C,0x3E,0x40,0x41,0x43,0x44,
+ 0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4E,0x50,
+ 0x51,0x52,0x54,0x55,0x56,0x58,0x59,0x5B,
+ 0x5C,0x5D,0x5F,0x60,0x61,0x63,0x64,0x65,
+ 0x67,0x68,0x69,0x6A,0x6C,0x6D,0x6E,0x70,
+ 0x71,0x72,0x73,0x75,0x76,0x77,0x78,0x7A,
+ 0x7B,0x7C,0x7D,0x7E,0x80,0x81,0x82,0x83,
+ 0x85,0x86,0x87,0x88,0x89,0x8A,0x8C,0x8D,
+ 0x8E,0x8F,0x90,0x92,0x93,0x94,0x95,0x96,
+ 0x97,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+ 0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,
+ 0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,
+ 0xB2,0xB3,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,
+ 0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC2,0xC4,
+ 0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,
+ 0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD4,0xD5,
+ 0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,
+ 0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,
+ 0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,
+ 0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,
+ 0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ { // 7
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x03,0x04,0x05,0x06,0x07,0x09,0x0B,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,
+ 0x1E,0x20,0x21,0x23,0x25,0x27,0x28,0x2A,
+ 0x2C,0x2D,0x2F,0x31,0x32,0x34,0x36,0x37,
+ 0x39,0x3B,0x3C,0x3E,0x3F,0x41,0x42,0x44,
+ 0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4E,0x50,
+ 0x51,0x53,0x54,0x56,0x57,0x59,0x5A,0x5C,
+ 0x5D,0x5F,0x60,0x61,0x63,0x64,0x66,0x67,
+ 0x68,0x6A,0x6B,0x6D,0x6E,0x6F,0x71,0x72,
+ 0x73,0x75,0x76,0x78,0x79,0x7A,0x7C,0x7D,
+ 0x7E,0x80,0x81,0x82,0x84,0x85,0x86,0x88,
+ 0x89,0x8A,0x8B,0x8D,0x8E,0x8F,0x91,0x92,
+ 0x93,0x95,0x96,0x97,0x98,0x9A,0x9B,0x9C,
+ 0x9E,0x9F,0xA0,0xA1,0xA3,0xA4,0xA5,0xA6,
+ 0xA8,0xA9,0xAA,0xAB,0xAD,0xAE,0xAF,0xB0,
+ 0xB2,0xB3,0xB4,0xB5,0xB7,0xB8,0xB9,0xBA,
+ 0xBC,0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,
+ 0xC5,0xC7,0xC8,0xC9,0xCA,0xCB,0xCD,0xCE,
+ 0xCF,0xD0,0xD1,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xE0,0xE1,
+ 0xE2,0xE3,0xE4,0xE6,0xE7,0xE8,0xE9,0xEA,
+ 0xEB,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,
+ 0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFC,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ }
+};
+
+static unsigned char LUT_R[][256] =
+{
+ { // 0
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+ 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
+ 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
+ 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
+ 0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+ 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
+ 0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+ 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,
+ 0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+ 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
+ 0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
+ 0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
+ 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
+ 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
+ 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+ 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
+ 0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,
+ 0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+ 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
+ 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+ 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,
+ 0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+ },
+ { // 1
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x06,0x07,0x09,0x0B,0x0D,
+ 0x10,0x12,0x14,0x17,0x19,0x1B,0x1E,0x20,
+ 0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,0x30,
+ 0x32,0x33,0x35,0x37,0x39,0x3B,0x3C,0x3E,
+ 0x40,0x41,0x43,0x45,0x46,0x48,0x4A,0x4B,
+ 0x4D,0x4F,0x50,0x52,0x53,0x55,0x57,0x58,
+ 0x5A,0x5B,0x5D,0x5E,0x60,0x61,0x63,0x64,
+ 0x66,0x67,0x69,0x6A,0x6C,0x6D,0x6F,0x70,
+ 0x71,0x73,0x74,0x76,0x77,0x79,0x7A,0x7B,
+ 0x7D,0x7E,0x7F,0x81,0x82,0x84,0x85,0x86,
+ 0x88,0x89,0x8A,0x8C,0x8D,0x8E,0x90,0x91,
+ 0x92,0x94,0x95,0x96,0x98,0x99,0x9A,0x9C,
+ 0x9D,0x9E,0xA0,0xA1,0xA2,0xA3,0xA5,0xA6,
+ 0xA7,0xA8,0xAA,0xAB,0xAC,0xAE,0xAF,0xB0,
+ 0xB1,0xB3,0xB4,0xB5,0xB6,0xB8,0xB9,0xBA,
+ 0xBB,0xBC,0xBE,0xBF,0xC0,0xC1,0xC3,0xC4,
+ 0xC5,0xC6,0xC7,0xC9,0xCA,0xCB,0xCC,0xCD,
+ 0xCF,0xD0,0xD1,0xD2,0xD3,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDC,0xDD,0xDE,0xDF,0xE0,
+ 0xE1,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,
+ 0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF3,
+ 0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFB,0xFC,
+ 0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
+ },
+ { // 2
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x03,0x04,0x05,0x07,0x08,0x0A,0x0C,0x0E,
+ 0x10,0x12,0x14,0x16,0x19,0x1B,0x1D,0x1F,
+ 0x21,0x23,0x25,0x27,0x28,0x2A,0x2C,0x2E,
+ 0x30,0x32,0x33,0x35,0x37,0x39,0x3A,0x3C,
+ 0x3E,0x40,0x41,0x43,0x45,0x46,0x48,0x4A,
+ 0x4B,0x4D,0x4F,0x50,0x52,0x53,0x55,0x57,
+ 0x58,0x5A,0x5B,0x5D,0x5F,0x60,0x62,0x63,
+ 0x65,0x66,0x68,0x69,0x6B,0x6C,0x6E,0x6F,
+ 0x71,0x72,0x74,0x75,0x77,0x78,0x7A,0x7B,
+ 0x7D,0x7E,0x80,0x81,0x83,0x84,0x86,0x87,
+ 0x88,0x8A,0x8B,0x8D,0x8E,0x90,0x91,0x92,
+ 0x94,0x95,0x97,0x98,0x99,0x9B,0x9C,0x9E,
+ 0x9F,0xA0,0xA2,0xA3,0xA5,0xA6,0xA7,0xA9,
+ 0xAA,0xAB,0xAD,0xAE,0xB0,0xB1,0xB2,0xB4,
+ 0xB5,0xB6,0xB8,0xB9,0xBA,0xBC,0xBD,0xBE,
+ 0xC0,0xC1,0xC2,0xC4,0xC5,0xC6,0xC8,0xC9,
+ 0xCA,0xCC,0xCD,0xCE,0xD0,0xD1,0xD2,0xD4,
+ 0xD5,0xD6,0xD7,0xD9,0xDA,0xDB,0xDD,0xDE,
+ 0xDF,0xE1,0xE2,0xE3,0xE4,0xE6,0xE7,0xE8,
+ 0xE9,0xEB,0xEC,0xED,0xEF,0xF0,0xF1,0xF2,
+ 0xF4,0xF5,0xF6,0xF7,0xF9,0xFA,0xFB,0xFC,
+ 0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x02,0x03,0x04,0x05,0x07,0x08,0x0A,
+ 0x0C,0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,
+ 0x1C,0x1E,0x20,0x22,0x24,0x26,0x28,0x2A,
+ 0x2B,0x2D,0x2F,0x31,0x33,0x34,0x36,0x38,
+ 0x39,0x3B,0x3D,0x3E,0x40,0x42,0x43,0x45,
+ 0x47,0x48,0x4A,0x4B,0x4D,0x4F,0x50,0x52,
+ 0x53,0x55,0x56,0x58,0x59,0x5B,0x5D,0x5E,
+ 0x60,0x61,0x63,0x64,0x66,0x67,0x69,0x6A,
+ 0x6B,0x6D,0x6E,0x70,0x71,0x73,0x74,0x76,
+ 0x77,0x79,0x7A,0x7B,0x7D,0x7E,0x80,0x81,
+ 0x83,0x84,0x85,0x87,0x88,0x8A,0x8B,0x8C,
+ 0x8E,0x8F,0x90,0x92,0x93,0x95,0x96,0x97,
+ 0x99,0x9A,0x9B,0x9D,0x9E,0x9F,0xA1,0xA2,
+ 0xA3,0xA5,0xA6,0xA7,0xA9,0xAA,0xAB,0xAD,
+ 0xAE,0xAF,0xB1,0xB2,0xB3,0xB5,0xB6,0xB7,
+ 0xB9,0xBA,0xBB,0xBD,0xBE,0xBF,0xC0,0xC2,
+ 0xC3,0xC4,0xC6,0xC7,0xC8,0xC9,0xCB,0xCC,
+ 0xCD,0xCF,0xD0,0xD1,0xD2,0xD4,0xD5,0xD6,
+ 0xD7,0xD9,0xDA,0xDB,0xDC,0xDE,0xDF,0xE0,
+ 0xE1,0xE3,0xE4,0xE5,0xE5,0xE6,0xE8,0xE9,
+ 0xEA,0xEB,0xED,0xEE,0xEF,0xF0,0xF2,0xF3,
+ 0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,
+ 0x07,0x08,0x0A,0x0C,0x0E,0x10,0x12,0x14,
+ 0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x24,
+ 0x26,0x28,0x2A,0x2B,0x2D,0x2F,0x31,0x33,
+ 0x34,0x36,0x38,0x39,0x3B,0x3D,0x3E,0x40,
+ 0x42,0x43,0x45,0x47,0x48,0x4A,0x4B,0x4D,
+ 0x4F,0x50,0x52,0x53,0x55,0x56,0x58,0x59,
+ 0x5B,0x5D,0x5E,0x60,0x61,0x63,0x64,0x66,
+ 0x67,0x69,0x6A,0x6B,0x6D,0x6E,0x70,0x71,
+ 0x73,0x74,0x76,0x77,0x79,0x7A,0x7B,0x7D,
+ 0x7E,0x80,0x81,0x83,0x84,0x85,0x87,0x88,
+ 0x8A,0x8B,0x8C,0x8E,0x8F,0x90,0x92,0x93,
+ 0x95,0x96,0x97,0x99,0x9A,0x9B,0x9D,0x9E,
+ 0x9F,0xA1,0xA2,0xA3,0xA5,0xA6,0xA7,0xA9,
+ 0xAA,0xAB,0xAD,0xAE,0xAF,0xB1,0xB2,0xB3,
+ 0xB5,0xB6,0xB7,0xB9,0xBA,0xBB,0xBD,0xBE,
+ 0xBF,0xC0,0xC2,0xC3,0xC4,0xC6,0xC7,0xC8,
+ 0xC9,0xCB,0xCC,0xCD,0xCF,0xD0,0xD1,0xD2,
+ 0xD4,0xD5,0xD6,0xD7,0xD9,0xDA,0xDB,0xDC,
+ 0xDE,0xDF,0xE0,0xE1,0xE3,0xE4,0xE5,0xE6,
+ 0xE8,0xE9,0xEA,0xEB,0xEB,0xED,0xEE,0xEF,
+ 0xF0,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,
+ 0xFA,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x03,0x04,0x05,0x07,0x08,0x0A,0x0C,0x0E,
+ 0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,0x1E,
+ 0x20,0x22,0x24,0x26,0x28,0x2A,0x2B,0x2D,
+ 0x2F,0x31,0x33,0x34,0x36,0x38,0x39,0x3B,
+ 0x3D,0x3E,0x40,0x42,0x43,0x45,0x47,0x48,
+ 0x4A,0x4B,0x4D,0x4F,0x50,0x52,0x53,0x55,
+ 0x56,0x58,0x59,0x5B,0x5D,0x5E,0x60,0x61,
+ 0x63,0x64,0x66,0x67,0x69,0x6A,0x6B,0x6D,
+ 0x6E,0x70,0x71,0x73,0x74,0x76,0x77,0x79,
+ 0x7A,0x7B,0x7D,0x7E,0x80,0x81,0x83,0x84,
+ 0x85,0x87,0x88,0x8A,0x8B,0x8C,0x8E,0x8F,
+ 0x90,0x92,0x93,0x95,0x96,0x97,0x99,0x9A,
+ 0x9B,0x9D,0x9E,0x9F,0xA1,0xA2,0xA3,0xA5,
+ 0xA6,0xA7,0xA9,0xAA,0xAB,0xAD,0xAE,0xAF,
+ 0xB1,0xB2,0xB3,0xB5,0xB6,0xB7,0xB9,0xBA,
+ 0xBB,0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,
+ 0xC6,0xC7,0xC8,0xC9,0xCB,0xCC,0xCD,0xCF,
+ 0xD0,0xD1,0xD2,0xD4,0xD5,0xD6,0xD7,0xD9,
+ 0xDA,0xDB,0xDC,0xDE,0xDF,0xE0,0xE1,0xE3,
+ 0xE4,0xE5,0xE6,0xE8,0xE9,0xEA,0xEB,0xED,
+ 0xEE,0xEF,0xF0,0xF2,0xF3,0xF4,0xF5,0xF6,
+ 0xF8,0xF9,0xFA,0xFB,0xFD,0xFE,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x05,0x06,0x08,0x0A,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x19,0x1B,0x1D,
+ 0x1F,0x20,0x22,0x24,0x26,0x28,0x2A,0x2B,
+ 0x2D,0x2F,0x31,0x32,0x34,0x35,0x37,0x39,
+ 0x3A,0x3C,0x3D,0x3F,0x41,0x42,0x44,0x45,
+ 0x47,0x48,0x4A,0x4B,0x4D,0x4E,0x4F,0x51,
+ 0x52,0x54,0x55,0x57,0x58,0x59,0x5B,0x5C,
+ 0x5E,0x5F,0x60,0x62,0x63,0x64,0x66,0x67,
+ 0x68,0x6A,0x6B,0x6C,0x6E,0x6F,0x70,0x72,
+ 0x73,0x74,0x75,0x77,0x78,0x79,0x7B,0x7C,
+ 0x7D,0x7E,0x80,0x81,0x82,0x83,0x85,0x86,
+ 0x87,0x88,0x89,0x8B,0x8C,0x8D,0x8E,0x90,
+ 0x91,0x92,0x93,0x94,0x96,0x97,0x98,0x99,
+ 0x9A,0x9B,0x9D,0x9E,0x9F,0xA0,0xA1,0xA2,
+ 0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAB,0xAC,
+ 0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB4,0xB5,
+ 0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBD,0xBE,
+ 0xBF,0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,
+ 0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+ 0xD0,0xD1,0xD2,0xD3,0xD4,0xD6,0xD7,0xD8,
+ 0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,
+ 0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xEA,
+ 0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,
+ 0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,
+ 0xFB,0xFC,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x03,0x04,0x05,0x06,0x07,0x09,0x0B,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,
+ 0x1E,0x20,0x21,0x23,0x25,0x27,0x28,0x2A,
+ 0x2C,0x2D,0x2F,0x31,0x32,0x34,0x36,0x37,
+ 0x39,0x3B,0x3C,0x3E,0x3F,0x41,0x42,0x44,
+ 0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4E,0x50,
+ 0x51,0x53,0x54,0x56,0x57,0x59,0x5A,0x5C,
+ 0x5D,0x5F,0x60,0x61,0x63,0x64,0x66,0x67,
+ 0x68,0x6A,0x6B,0x6D,0x6E,0x6F,0x71,0x72,
+ 0x73,0x75,0x76,0x78,0x79,0x7A,0x7C,0x7D,
+ 0x7E,0x80,0x81,0x82,0x84,0x85,0x86,0x88,
+ 0x89,0x8A,0x8B,0x8D,0x8E,0x8F,0x91,0x92,
+ 0x93,0x95,0x96,0x97,0x98,0x9A,0x9B,0x9C,
+ 0x9E,0x9F,0xA0,0xA1,0xA3,0xA4,0xA5,0xA6,
+ 0xA8,0xA9,0xAA,0xAB,0xAD,0xAE,0xAF,0xB0,
+ 0xB2,0xB3,0xB4,0xB5,0xB7,0xB8,0xB9,0xBA,
+ 0xBC,0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,
+ 0xC5,0xC7,0xC8,0xC9,0xCA,0xCB,0xCD,0xCE,
+ 0xCF,0xD0,0xD1,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xE0,0xE1,
+ 0xE2,0xE3,0xE4,0xE6,0xE7,0xE8,0xE9,0xEA,
+ 0xEB,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,
+ 0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFC,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
+ }
+};
+
+static unsigned char LUT_G[][256] =
+{
+ {
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+ 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
+ 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
+ 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
+ 0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+ 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
+ 0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+ 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,
+ 0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+ 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
+ 0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
+ 0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
+ 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
+ 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
+ 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+ 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
+ 0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,
+ 0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+ 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
+ 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+ 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,
+ 0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x06,0x07,0x09,0x0B,0x0D,
+ 0x10,0x12,0x14,0x17,0x19,0x1B,0x1E,0x20,
+ 0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,0x30,
+ 0x32,0x33,0x35,0x37,0x39,0x3B,0x3C,0x3E,
+ 0x40,0x41,0x43,0x45,0x46,0x48,0x4A,0x4B,
+ 0x4D,0x4F,0x50,0x52,0x53,0x55,0x57,0x58,
+ 0x5A,0x5B,0x5D,0x5E,0x60,0x61,0x63,0x64,
+ 0x66,0x67,0x69,0x6A,0x6C,0x6D,0x6F,0x70,
+ 0x71,0x73,0x74,0x76,0x77,0x79,0x7A,0x7B,
+ 0x7D,0x7E,0x7F,0x81,0x82,0x84,0x85,0x86,
+ 0x88,0x89,0x8A,0x8C,0x8D,0x8E,0x90,0x91,
+ 0x92,0x94,0x95,0x96,0x98,0x99,0x9A,0x9C,
+ 0x9D,0x9E,0xA0,0xA1,0xA2,0xA3,0xA5,0xA6,
+ 0xA7,0xA8,0xAA,0xAB,0xAC,0xAE,0xAF,0xB0,
+ 0xB1,0xB3,0xB4,0xB5,0xB6,0xB8,0xB9,0xBA,
+ 0xBB,0xBC,0xBE,0xBF,0xC0,0xC1,0xC3,0xC4,
+ 0xC5,0xC6,0xC7,0xC9,0xCA,0xCB,0xCC,0xCD,
+ 0xCF,0xD0,0xD1,0xD2,0xD3,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDC,0xDD,0xDE,0xDF,0xE0,
+ 0xE1,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,
+ 0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF3,
+ 0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFB,0xFC,
+ 0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x05,0x07,0x08,0x0A,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x16,0x19,0x1B,
+ 0x1D,0x1F,0x21,0x23,0x25,0x27,0x28,0x2A,
+ 0x2C,0x2E,0x30,0x32,0x33,0x35,0x37,0x39,
+ 0x3A,0x3C,0x3E,0x40,0x41,0x43,0x45,0x46,
+ 0x48,0x4A,0x4B,0x4D,0x4F,0x50,0x52,0x53,
+ 0x55,0x57,0x58,0x5A,0x5B,0x5D,0x5F,0x60,
+ 0x62,0x63,0x65,0x66,0x68,0x69,0x6B,0x6C,
+ 0x6E,0x6F,0x71,0x72,0x74,0x75,0x77,0x78,
+ 0x7A,0x7B,0x7D,0x7E,0x80,0x81,0x83,0x84,
+ 0x86,0x87,0x88,0x8A,0x8B,0x8D,0x8E,0x90,
+ 0x91,0x92,0x94,0x95,0x97,0x98,0x99,0x9B,
+ 0x9C,0x9E,0x9F,0xA0,0xA2,0xA3,0xA5,0xA7,
+ 0xA9,0xAA,0xAB,0xAD,0xAE,0xB0,0xB1,0xB2,
+ 0xB4,0xB5,0xB6,0xB8,0xB9,0xBA,0xBC,0xBD,
+ 0xBE,0xC0,0xC1,0xC2,0xC4,0xC5,0xC6,0xC8,
+ 0xC9,0xCA,0xCC,0xCD,0xCE,0xD0,0xD1,0xD2,
+ 0xD4,0xD5,0xD6,0xD7,0xD9,0xDA,0xDB,0xDD,
+ 0xDE,0xDF,0xE1,0xE2,0xE3,0xE4,0xE6,0xE7,
+ 0xE8,0xE9,0xEB,0xEC,0xED,0xEF,0xF0,0xF1,
+ 0xF2,0xF4,0xF5,0xF6,0xF7,0xF9,0xFA,0xFB,
+ 0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x07,
+ 0x08,0x0A,0x0C,0x0E,0x10,0x12,0x14,0x16,
+ 0x18,0x1A,0x1C,0x1E,0x20,0x22,0x24,0x26,
+ 0x28,0x2A,0x2B,0x2D,0x2F,0x31,0x33,0x34,
+ 0x36,0x38,0x39,0x3B,0x3D,0x3E,0x40,0x42,
+ 0x43,0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4F,
+ 0x50,0x52,0x53,0x55,0x56,0x58,0x59,0x5B,
+ 0x5D,0x5E,0x60,0x61,0x63,0x64,0x66,0x67,
+ 0x69,0x6A,0x6B,0x6D,0x6E,0x70,0x71,0x73,
+ 0x74,0x76,0x77,0x79,0x7A,0x7B,0x7D,0x7E,
+ 0x80,0x81,0x83,0x84,0x85,0x87,0x88,0x8A,
+ 0x8B,0x8C,0x8E,0x8F,0x90,0x92,0x93,0x95,
+ 0x96,0x97,0x99,0x9A,0x9B,0x9D,0x9E,0x9F,
+ 0xA1,0xA2,0xA3,0xA5,0xA6,0xA7,0xA9,0xAA,
+ 0xAB,0xAD,0xAE,0xAF,0xB1,0xB2,0xB3,0xB5,
+ 0xB6,0xB7,0xB9,0xBA,0xBB,0xBD,0xBE,0xBF,
+ 0xC0,0xC2,0xC3,0xC4,0xC6,0xC7,0xC8,0xC9,
+ 0xCB,0xCC,0xCD,0xCF,0xD0,0xD1,0xD2,0xD4,
+ 0xD5,0xD6,0xD7,0xD9,0xDA,0xDB,0xDC,0xDF,
+ 0xE0,0xE1,0xE3,0xE4,0xE5,0xE6,0xE8,0xE9,
+ 0xEA,0xEB,0xED,0xEE,0xEF,0xF0,0xF2,0xF3,
+ 0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,
+ 0x04,0x05,0x07,0x08,0x0A,0x0C,0x0E,0x10,
+ 0x12,0x14,0x16,0x18,0x1A,0x1C,0x1E,0x20,
+ 0x22,0x24,0x26,0x28,0x2A,0x2B,0x2D,0x2F,
+ 0x31,0x33,0x34,0x36,0x38,0x39,0x3B,0x3D,
+ 0x3E,0x40,0x42,0x43,0x45,0x47,0x48,0x4A,
+ 0x4B,0x4D,0x4F,0x50,0x52,0x53,0x55,0x56,
+ 0x58,0x59,0x5B,0x5D,0x5E,0x60,0x61,0x63,
+ 0x64,0x66,0x67,0x69,0x6A,0x6B,0x6D,0x6E,
+ 0x70,0x71,0x73,0x74,0x76,0x77,0x79,0x7A,
+ 0x7B,0x7D,0x7E,0x80,0x81,0x83,0x84,0x85,
+ 0x87,0x88,0x8A,0x8B,0x8C,0x8E,0x8F,0x90,
+ 0x92,0x93,0x95,0x96,0x97,0x99,0x9A,0x9B,
+ 0x9D,0x9E,0x9F,0xA1,0xA2,0xA3,0xA5,0xA6,
+ 0xA7,0xA9,0xAA,0xAB,0xAD,0xAE,0xAF,0xB1,
+ 0xB2,0xB3,0xB5,0xB6,0xB7,0xB9,0xBA,0xBB,
+ 0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,0xC6,
+ 0xC7,0xC8,0xC9,0xCB,0xCC,0xCD,0xCF,0xD0,
+ 0xD1,0xD2,0xD4,0xD5,0xD6,0xD7,0xD9,0xDA,
+ 0xDB,0xDC,0xDE,0xDF,0xE0,0xE1,0xE3,0xE5,
+ 0xE6,0xE8,0xE9,0xEA,0xEB,0xED,0xEE,0xEF,
+ 0xF0,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,
+ 0xFA,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x01,0x02,0x03,0x04,0x05,0x07,0x08,0x0A,
+ 0x0C,0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,
+ 0x1C,0x1E,0x20,0x22,0x24,0x26,0x28,0x2A,
+ 0x2B,0x2D,0x2F,0x31,0x33,0x34,0x36,0x38,
+ 0x39,0x3B,0x3D,0x3E,0x40,0x42,0x43,0x45,
+ 0x47,0x48,0x4A,0x4B,0x4D,0x4F,0x50,0x52,
+ 0x53,0x55,0x56,0x58,0x59,0x5B,0x5D,0x5E,
+ 0x60,0x61,0x63,0x64,0x66,0x67,0x69,0x6A,
+ 0x6B,0x6D,0x6E,0x70,0x71,0x73,0x74,0x76,
+ 0x77,0x79,0x7A,0x7B,0x7D,0x7E,0x80,0x81,
+ 0x83,0x84,0x85,0x87,0x88,0x8A,0x8B,0x8C,
+ 0x8E,0x8F,0x90,0x92,0x93,0x95,0x96,0x97,
+ 0x99,0x9A,0x9B,0x9D,0x9E,0x9F,0xA1,0xA2,
+ 0xA3,0xA5,0xA6,0xA7,0xA9,0xAA,0xAB,0xAD,
+ 0xAE,0xAF,0xB1,0xB2,0xB3,0xB5,0xB6,0xB7,
+ 0xB9,0xBA,0xBB,0xBD,0xBE,0xBF,0xC0,0xC2,
+ 0xC3,0xC4,0xC6,0xC7,0xC8,0xC9,0xCB,0xCC,
+ 0xCD,0xCF,0xD0,0xD1,0xD2,0xD4,0xD5,0xD6,
+ 0xD7,0xD9,0xDA,0xDB,0xDC,0xDE,0xDF,0xE0,
+ 0xE3,0xE4,0xE5,0xE6,0xE8,0xE9,0xEA,0xEB,
+ 0xED,0xEE,0xEF,0xF0,0xF2,0xF3,0xF4,0xF5,
+ 0xF6,0xF8,0xF9,0xFA,0xFB,0xFD,0xFE,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x03,0x04,0x05,0x07,0x08,0x0A,0x0C,0x0E,
+ 0x10,0x12,0x14,0x16,0x18,0x18,0x1A,0x1C,
+ 0x1E,0x20,0x22,0x24,0x26,0x27,0x29,0x2B,
+ 0x2C,0x2E,0x30,0x31,0x33,0x35,0x36,0x38,
+ 0x39,0x3B,0x3C,0x3E,0x40,0x41,0x43,0x44,
+ 0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4E,0x50,
+ 0x51,0x52,0x54,0x55,0x56,0x58,0x59,0x5B,
+ 0x5C,0x5D,0x5F,0x60,0x61,0x63,0x64,0x65,
+ 0x67,0x68,0x69,0x6A,0x6C,0x6D,0x6E,0x70,
+ 0x71,0x72,0x73,0x75,0x76,0x77,0x78,0x7A,
+ 0x7B,0x7C,0x7D,0x7E,0x80,0x81,0x82,0x83,
+ 0x85,0x86,0x87,0x88,0x89,0x8A,0x8C,0x8D,
+ 0x8E,0x8F,0x90,0x92,0x93,0x94,0x95,0x96,
+ 0x97,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+ 0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,
+ 0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,
+ 0xB2,0xB3,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,
+ 0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC2,0xC4,
+ 0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,
+ 0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD4,0xD5,
+ 0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,
+ 0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,
+ 0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,
+ 0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,
+ 0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ { // 7
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x03,0x04,0x05,0x06,0x07,0x09,0x0B,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,
+ 0x1E,0x20,0x21,0x23,0x25,0x27,0x28,0x2A,
+ 0x2C,0x2D,0x2F,0x31,0x32,0x34,0x36,0x37,
+ 0x39,0x3B,0x3C,0x3E,0x3F,0x41,0x42,0x44,
+ 0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4E,0x50,
+ 0x51,0x53,0x54,0x56,0x57,0x59,0x5A,0x5C,
+ 0x5D,0x5F,0x60,0x61,0x63,0x64,0x66,0x67,
+ 0x68,0x6A,0x6B,0x6D,0x6E,0x6F,0x71,0x72,
+ 0x73,0x75,0x76,0x78,0x79,0x7A,0x7C,0x7D,
+ 0x7E,0x80,0x81,0x82,0x84,0x85,0x86,0x88,
+ 0x89,0x8A,0x8B,0x8D,0x8E,0x8F,0x91,0x92,
+ 0x93,0x95,0x96,0x97,0x98,0x9A,0x9B,0x9C,
+ 0x9E,0x9F,0xA0,0xA1,0xA3,0xA4,0xA5,0xA6,
+ 0xA8,0xA9,0xAA,0xAB,0xAD,0xAE,0xAF,0xB0,
+ 0xB2,0xB3,0xB4,0xB5,0xB7,0xB8,0xB9,0xBA,
+ 0xBC,0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,
+ 0xC5,0xC7,0xC8,0xC9,0xCA,0xCB,0xCD,0xCE,
+ 0xCF,0xD0,0xD1,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xE0,0xE1,
+ 0xE2,0xE3,0xE4,0xE6,0xE7,0xE8,0xE9,0xEA,
+ 0xEB,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,
+ 0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFC,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ }
+};
+
+static unsigned char LUT_B[][256] =
+{
+ {
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
+ 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
+ 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
+ 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
+ 0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
+ 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
+ 0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
+ 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,
+ 0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
+ 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
+ 0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
+ 0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
+ 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
+ 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
+ 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
+ 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
+ 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
+ 0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
+ 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,
+ 0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
+ 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
+ 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
+ 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
+ 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,
+ 0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x06,0x07,0x09,0x0B,0x0D,
+ 0x10,0x12,0x14,0x17,0x19,0x1B,0x1E,0x20,
+ 0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,0x30,
+ 0x32,0x33,0x35,0x37,0x39,0x3B,0x3C,0x3E,
+ 0x40,0x41,0x43,0x45,0x46,0x48,0x4A,0x4B,
+ 0x4D,0x4F,0x50,0x52,0x53,0x55,0x57,0x58,
+ 0x5A,0x5B,0x5D,0x5E,0x60,0x61,0x63,0x64,
+ 0x66,0x67,0x69,0x6A,0x6C,0x6D,0x6F,0x70,
+ 0x71,0x73,0x74,0x76,0x77,0x79,0x7A,0x7B,
+ 0x7D,0x7E,0x7F,0x81,0x82,0x84,0x85,0x86,
+ 0x88,0x89,0x8A,0x8C,0x8D,0x8E,0x90,0x91,
+ 0x92,0x94,0x95,0x96,0x98,0x99,0x9A,0x9C,
+ 0x9D,0x9E,0xA0,0xA1,0xA2,0xA3,0xA5,0xA6,
+ 0xA7,0xA8,0xAA,0xAB,0xAC,0xAE,0xAF,0xB0,
+ 0xB1,0xB3,0xB4,0xB5,0xB6,0xB8,0xB9,0xBA,
+ 0xBB,0xBC,0xBE,0xBF,0xC0,0xC1,0xC3,0xC4,
+ 0xC5,0xC6,0xC7,0xC9,0xCA,0xCB,0xCC,0xCD,
+ 0xCF,0xD0,0xD1,0xD2,0xD3,0xD5,0xD6,0xD7,
+ 0xD8,0xD9,0xDA,0xDC,0xDD,0xDE,0xDF,0xE0,
+ 0xE1,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,
+ 0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1,0xF3,
+ 0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFB,0xFC,
+ 0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x05,0x07,0x08,0x0A,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x16,0x19,0x1B,
+ 0x1D,0x1F,0x21,0x23,0x25,0x27,0x28,0x2A,
+ 0x2C,0x2E,0x30,0x32,0x33,0x35,0x37,0x39,
+ 0x3A,0x3C,0x3E,0x40,0x41,0x43,0x45,0x46,
+ 0x48,0x4A,0x4B,0x4D,0x4F,0x50,0x52,0x53,
+ 0x55,0x57,0x58,0x5A,0x5B,0x5D,0x5F,0x60,
+ 0x62,0x63,0x65,0x66,0x68,0x69,0x6B,0x6C,
+ 0x6E,0x6F,0x71,0x72,0x74,0x75,0x77,0x78,
+ 0x7A,0x7B,0x7D,0x7E,0x80,0x81,0x83,0x84,
+ 0x86,0x87,0x88,0x8A,0x8B,0x8D,0x8E,0x90,
+ 0x91,0x92,0x94,0x95,0x97,0x98,0x99,0x9B,
+ 0x9C,0x9E,0x9F,0xA0,0xA2,0xA3,0xA5,0xA7,
+ 0xA9,0xAA,0xAB,0xAD,0xAE,0xB0,0xB1,0xB2,
+ 0xB4,0xB5,0xB6,0xB8,0xB9,0xBA,0xBC,0xBD,
+ 0xBE,0xC0,0xC1,0xC2,0xC4,0xC5,0xC6,0xC8,
+ 0xC9,0xCA,0xCC,0xCD,0xCE,0xD0,0xD1,0xD2,
+ 0xD4,0xD5,0xD6,0xD7,0xD9,0xDA,0xDB,0xDD,
+ 0xDE,0xDF,0xE1,0xE2,0xE3,0xE4,0xE6,0xE7,
+ 0xE8,0xE9,0xEB,0xEC,0xED,0xEF,0xF0,0xF1,
+ 0xF2,0xF4,0xF5,0xF6,0xF7,0xF9,0xFA,0xFB,
+ 0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x07,0x08,
+ 0x0A,0x0C,0x0E,0x10,0x12,0x14,0x16,0x18,
+ 0x1A,0x1C,0x1E,0x20,0x22,0x24,0x26,0x28,
+ 0x2A,0x2B,0x2D,0x2F,0x31,0x33,0x34,0x36,
+ 0x38,0x39,0x3B,0x3D,0x3E,0x40,0x42,0x43,
+ 0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4F,0x50,
+ 0x52,0x53,0x55,0x56,0x58,0x59,0x5B,0x5D,
+ 0x5E,0x60,0x61,0x63,0x64,0x66,0x67,0x69,
+ 0x6A,0x6B,0x6D,0x6E,0x70,0x71,0x73,0x74,
+ 0x76,0x77,0x79,0x7A,0x7B,0x7D,0x7E,0x80,
+ 0x81,0x83,0x84,0x85,0x87,0x88,0x8A,0x8B,
+ 0x8C,0x8E,0x8F,0x90,0x92,0x93,0x95,0x96,
+ 0x97,0x99,0x9A,0x9B,0x9D,0x9E,0x9F,0xA1,
+ 0xA2,0xA3,0xA5,0xA6,0xA7,0xA9,0xAA,0xAB,
+ 0xAD,0xAE,0xAF,0xB1,0xB2,0xB3,0xB5,0xB6,
+ 0xB7,0xB9,0xBA,0xBB,0xBD,0xBE,0xBF,0xC0,
+ 0xC2,0xC3,0xC4,0xC6,0xC7,0xC8,0xC9,0xCB,
+ 0xCC,0xCD,0xCF,0xD0,0xD1,0xD2,0xD4,0xD5,
+ 0xD6,0xD7,0xD9,0xDA,0xDB,0xDC,0xDE,0xDF,
+ 0xE0,0xE1,0xE3,0xE4,0xE5,0xE6,0xE8,0xE9,
+ 0xEA,0xEB,0xED,0xEE,0xEF,0xF0,0xF2,0xF3,
+ 0xF4,0xF5,0xF6,0xF8,0xF9,0xFA,0xFB,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,
+ 0x05,0x07,0x08,0x0A,0x0C,0x0E,0x10,0x12,
+ 0x14,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,
+ 0x24,0x26,0x28,0x2A,0x2B,0x2D,0x2F,0x31,
+ 0x33,0x34,0x36,0x38,0x39,0x3B,0x3D,0x3E,
+ 0x40,0x42,0x43,0x45,0x47,0x48,0x4A,0x4B,
+ 0x4D,0x4F,0x50,0x52,0x53,0x55,0x56,0x58,
+ 0x59,0x5B,0x5D,0x5E,0x60,0x61,0x63,0x64,
+ 0x66,0x67,0x69,0x6A,0x6B,0x6D,0x6E,0x70,
+ 0x71,0x73,0x74,0x76,0x77,0x79,0x7A,0x7B,
+ 0x7D,0x7E,0x80,0x81,0x83,0x84,0x85,0x87,
+ 0x88,0x8A,0x8B,0x8C,0x8E,0x8F,0x90,0x92,
+ 0x93,0x95,0x96,0x97,0x99,0x9A,0x9B,0x9D,
+ 0x9E,0x9F,0xA1,0xA2,0xA3,0xA5,0xA6,0xA7,
+ 0xA9,0xAA,0xAB,0xAD,0xAE,0xAF,0xB1,0xB2,
+ 0xB3,0xB5,0xB6,0xB7,0xB9,0xBA,0xBB,0xBD,
+ 0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,0xC6,0xC7,
+ 0xC8,0xC9,0xCB,0xCC,0xCD,0xCF,0xD0,0xD1,
+ 0xD2,0xD4,0xD5,0xD6,0xD7,0xD9,0xDA,0xDB,
+ 0xDC,0xDE,0xDF,0xE0,0xE1,0xE3,0xE4,0xE5,
+ 0xE6,0xE8,0xE9,0xEA,0xEB,0xED,0xEE,0xEF,
+ 0xF0,0xF2,0xF3,0xF4,0xF5,0xF6,0xF8,0xF9,
+ 0xFA,0xFB,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
+ 0x02,0x03,0x04,0x05,0x07,0x08,0x0A,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x16,0x18,0x1A,
+ 0x1C,0x1E,0x20,0x22,0x24,0x26,0x28,0x2A,
+ 0x2B,0x2D,0x2F,0x31,0x33,0x34,0x36,0x38,
+ 0x39,0x3B,0x3D,0x3E,0x40,0x42,0x43,0x45,
+ 0x47,0x48,0x4A,0x4B,0x4D,0x4F,0x50,0x52,
+ 0x53,0x55,0x56,0x58,0x59,0x5B,0x5D,0x5E,
+ 0x60,0x61,0x63,0x64,0x66,0x67,0x69,0x6A,
+ 0x6B,0x6D,0x6E,0x70,0x71,0x73,0x74,0x76,
+ 0x77,0x79,0x7A,0x7B,0x7D,0x7E,0x80,0x81,
+ 0x83,0x84,0x85,0x87,0x88,0x8A,0x8B,0x8C,
+ 0x8E,0x8F,0x90,0x92,0x93,0x95,0x96,0x97,
+ 0x99,0x9A,0x9B,0x9D,0x9E,0x9F,0xA1,0xA3,
+ 0xA5,0xA6,0xA7,0xA9,0xAA,0xAB,0xAD,0xAE,
+ 0xAF,0xB1,0xB2,0xB3,0xB5,0xB6,0xB7,0xB9,
+ 0xBA,0xBB,0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,
+ 0xC4,0xC6,0xC7,0xC8,0xC9,0xCB,0xCC,0xCD,
+ 0xCF,0xD0,0xD1,0xD2,0xD4,0xD5,0xD6,0xD7,
+ 0xD9,0xDA,0xDB,0xDC,0xDE,0xDF,0xE0,0xE1,
+ 0xE3,0xE4,0xE5,0xE6,0xE8,0xE9,0xEA,0xEB,
+ 0xED,0xEE,0xEF,0xF0,0xF2,0xF3,0xF4,0xF5,
+ 0xF6,0xF8,0xF9,0xFA,0xFB,0xFD,0xFE,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x03,
+ 0x04,0x05,0x07,0x08,0x0A,0x0C,0x0E,0x10,
+ 0x12,0x14,0x16,0x18,0x1A,0x1C,0x1E,0x20,
+ 0x22,0x24,0x26,0x27,0x29,0x2B,0x2C,0x2E,
+ 0x30,0x31,0x33,0x35,0x36,0x38,0x39,0x3B,
+ 0x3C,0x3E,0x40,0x41,0x43,0x44,0x45,0x47,
+ 0x48,0x4B,0x4D,0x4E,0x50,0x51,0x52,0x54,
+ 0x55,0x56,0x58,0x59,0x5B,0x5C,0x5D,0x5F,
+ 0x60,0x61,0x63,0x64,0x65,0x67,0x68,0x69,
+ 0x6A,0x6C,0x6D,0x6E,0x70,0x71,0x72,0x73,
+ 0x75,0x76,0x77,0x78,0x7A,0x7B,0x7C,0x7D,
+ 0x7E,0x80,0x81,0x82,0x83,0x85,0x86,0x87,
+ 0x88,0x89,0x8A,0x8C,0x8D,0x8E,0x8F,0x90,
+ 0x92,0x93,0x94,0x95,0x96,0x96,0x97,0x99,
+ 0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,0xA1,0xA2,
+ 0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xAA,0xAB,
+ 0xAC,0xAD,0xAE,0xAF,0xB0,0xB1,0xB2,0xB3,
+ 0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,
+ 0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,0xC5,
+ 0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,
+ 0xCE,0xCF,0xD0,0xD1,0xD2,0xD4,0xD5,0xD6,
+ 0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,
+ 0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,
+ 0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,
+ 0xEF,0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,
+ 0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ },
+ {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,
+ 0x03,0x04,0x05,0x06,0x07,0x09,0x0B,0x0C,
+ 0x0E,0x10,0x12,0x14,0x16,0x18,0x1A,0x1C,
+ 0x1E,0x20,0x21,0x23,0x25,0x27,0x28,0x2A,
+ 0x2C,0x2D,0x2F,0x31,0x32,0x34,0x36,0x37,
+ 0x39,0x3B,0x3C,0x3E,0x3F,0x41,0x42,0x44,
+ 0x45,0x47,0x48,0x4A,0x4B,0x4D,0x4E,0x50,
+ 0x51,0x53,0x54,0x56,0x57,0x59,0x5A,0x5C,
+ 0x5D,0x5F,0x60,0x61,0x63,0x64,0x66,0x67,
+ 0x68,0x6A,0x6B,0x6D,0x6E,0x6F,0x71,0x72,
+ 0x73,0x75,0x76,0x78,0x79,0x7A,0x7C,0x7D,
+ 0x7E,0x80,0x81,0x82,0x84,0x85,0x86,0x88,
+ 0x89,0x8A,0x8B,0x8D,0x8E,0x8F,0x91,0x92,
+ 0x93,0x95,0x96,0x97,0x98,0x9A,0x9B,0x9C,
+ 0x9E,0x9F,0xA0,0xA1,0xA3,0xA4,0xA5,0xA6,
+ 0xA8,0xA9,0xAA,0xAB,0xAD,0xAE,0xAF,0xB0,
+ 0xB2,0xB3,0xB4,0xB5,0xB7,0xB8,0xB9,0xBA,
+ 0xBC,0xBD,0xBE,0xBF,0xC0,0xC2,0xC3,0xC4,
+ 0xC5,0xC7,0xC8,0xC9,0xCA,0xCB,0xCD,0xCE,
+ 0xCF,0xD0,0xD1,0xD3,0xD4,0xD5,0xD6,0xD7,
+ 0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xE0,0xE1,
+ 0xE2,0xE3,0xE4,0xE6,0xE7,0xE8,0xE9,0xEA,
+ 0xEB,0xED,0xEE,0xEF,0xF0,0xF1,0xF2,0xF3,
+ 0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFC,0xFD,
+ 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+ }
+};
+//// profile array ////
+
+typedef struct
+{
+ int productID; // USB PID
+ char productName[50]; // ESCI/2 procduct name
+ char deviceID[50]; // device ID (same as bonjour mdl name)
+ int lutID; // look up table no
+}epsonds_profile_map;
+
+const epsonds_profile_map epsonds_models_predefined[] = {
+ {0x0145, "DS-5500","DS-5500", 7},
+ {0x0145, "DS-6500","DS-6500", 7},
+ {0x0145, "DS-7500","DS-7500", 7},
+ {0x0146, "DS-50000","DS-50000", 7},
+ {0x0146, "DS-60000","DS-60000", 7},
+ {0x0146, "DS-70000","DS-70000", 7},
+ {0x014C, "DS-510","DS-510", 7},
+ {0x0150, "DS-560","DS-560", 7},
+ {0x0152, "DS-40","DS-40", 7},
+ {0x014D, "DS-760","DS-760", 7},
+ {0x014D, "DS-860","DS-860", 7},
+ {0x0154, "DS-520","DS-520", 7},
+ {0x08BC, "PID 08BC","PX-M7050 Series", 7},
+ {0x08BC, "PID 08BC","WF-8510 Series", 7},
+ {0x08BC, "PID 08BC","WF-8590 Series", 7},
+ {0x08CC, "PID 08CC","PX-M7050FX Series", 7},
+ {0x08CC, "PID 08CC","WF-R8590 Series", 7},
+ {0x0165, "DS-410","DS-410", 7},
+ {0x016C, "ES-50","ES-50", 6},
+ {0x0160, "DS-70","DS-70", 6},
+ {0x016D, "ES-55R","ES-55R", 6},
+ {0x018C, "RR-60","RR-60", 6},
+ {0x016E, "ES-60W","ES-60W", 6},
+ {0x0166, "DS-80W","DS-80W", 6},
+ {0x016F, "ES-65WR","ES-65WR", 6},
+ {0x018B, "RR-70W","RR-70W", 6},
+ {0x016E, "ES-60WW","ES-60WW", 6},
+ {0x016E, "ES-60WB","ES-60WB", 6},
+ {0x015C, "DS-1630","DS-1630", 4},
+ {0x015D, "DS-1610","DS-1610", 4},
+ {0x015E, "DS-1660W","DS-1660W", 4},
+ {0x0159, "DS-310","DS-310", 5},
+ {0x0159, "ES-200","ES-200", 5},
+ {0x0162, "DS-320","DS-320", 5},
+ {0x015A, "DS-360W","DS-360W", 5},
+ {0x015A, "ES-300W","ES-300W", 5},
+ {0x0177, "ES-300WR","ES-300WR", 5},
+ {0x0181, "ES-400II","ES-400II", 2},
+ {0x0183, "DS-535II","DS-535II", 2},
+ {0x0184, "DS-531","DS-531", 2},
+ {0x0182, "DS-530II","DS-530II", 2},
+ {0x0185, "ES-500WII","ES-500WII", 2},
+ {0x0188, "DS-571W","DS-571W", 2},
+ {0x0187, "DS-575WII","DS-575WII", 2},
+ {0x0186, "DS-570WII","DS-570WII", 2},
+ {0x017F, "ES-580W","ES-580W", 2},
+ {0x0180, "RR-600W","RR-600W", 2},
+ {0x0167, "DS-535","DS-535", 2},
+ {0x017A, "DS-535H","DS-535H", 2},
+ {0x0156, "ES-400","ES-400", 2},
+ {0x0155, "DS-530","DS-530", 2},
+ {0x016B, "FF-680W","FF-680W", 2},
+ {0x0157, "DS-570W","DS-570W", 2},
+ {0x0157, "ES-500W","ES-500W", 2},
+ {0x0169, "DS-575W","DS-575W", 2},
+ {0x0176, "ES-500WR","ES-500WR", 2},
+ {0x114E, "PID 114E","EW-052A Series", 7},
+ {0x114E, "PID 114E","XP-2100 Series", 7},
+ {0x1135, "PID 1135","ET-2700 Series", 7},
+ {0x1135, "PID 1135","L4150 Series", 7},
+ {0x114A, "PID 114A","ET-M2140 Series", 7},
+ {0x114A, "PID 114A","M2140 Series", 7},
+ {0x114F, "PID 114F","ET-M3140 Series", 7},
+ {0x114F, "PID 114F","M3140 Series", 7},
+ {0x1143, "PID 1143","L3150 Series", 7},
+ {0x1143, "PID 1143","ET-2710 Series", 7},
+ {0x118A, "PID 118A","ET-2810 Series", 7},
+ {0x118A, "PID 118A","L3250 Series", 7},
+ {0x119B, "PID 119B","XP-2150 Series", 7},
+ {0x00, "","", 0x00 }
+};
+
+typedef struct
+{
+ epsonds_profile_map *array;
+ int used;
+ int size;
+}epsonds_profile_map_array;
+
+
+static epsonds_profile_map_array stProfileMapArray;
+
+static void insert_profile_map(epsonds_profile_map_array *a, epsonds_profile_map element);
+
+static void init_profile_maps(epsonds_profile_map_array *a, size_t initialSize) {
+ a->array = malloc(initialSize * sizeof(epsonds_profile_map));
+ a->used = 0;
+ a->size = initialSize;
+
+ for (int i = 0; epsonds_models_predefined[i].productID != 0; i++) {
+
+ //DBG(6, "epsonds_models_predefined[i].productID = %x\n", epsonds_models_predefined[i].productID );
+
+ insert_profile_map(a, epsonds_models_predefined[i]);
+ }
+}
+
+static void insert_profile_map(epsonds_profile_map_array *a, epsonds_profile_map element) {
+ if (a->used == a->size) {
+ a->size *= 2;
+ a->array = realloc(a->array, a->size * sizeof(epsonds_profile_map));
+ }
+ a->array[a->used++] = element;
+}
+
+static void free_profile_maps(epsonds_profile_map_array *a) {
+ free(a->array);
+ a->array = NULL;
+ a->used = a->size = 0;
+}
+/////////////////////////
+
+
struct mode_param mode_params[] = {
{0, 0x00, 0x30, 1},
{0, 0x00, 0x30, 8},
@@ -86,16 +1316,12 @@ static SANE_String_Const mode_list[] = {
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")
+#define STRING_FLATBED SANE_I18N("Flatbed")
+#define STRING_ADFFRONT SANE_I18N("ADF Front")
+#define STRING_ADFDUPLEX SANE_I18N("ADF Duplex")
/* order will be fixed: fb, adf, tpu */
SANE_String_Const source_list[] = {
@@ -129,6 +1355,9 @@ max_string_size(const SANE_String_Const strings[])
static SANE_Status attach_one_usb(SANE_String_Const devname);
static SANE_Status attach_one_net(SANE_String_Const devname);
+static SANE_Status acquire_jpeg_data(epsonds_scanner* s);
+static SANE_Status acquire_and_decode_jpeg_data(epsonds_scanner* s);
+static SANE_Status acquire_raw_data(epsonds_scanner* s);
static void
print_params(const SANE_Parameters params)
@@ -146,6 +1375,11 @@ close_scanner(epsonds_scanner *s)
{
DBG(7, "%s: fd = %d\n", __func__, s->fd);
+ if (s->scanning)
+ {
+ sane_cancel(s);
+ }
+
if (s->fd == -1)
goto free;
@@ -171,49 +1405,6 @@ free:
DBG(7, "%s: ZZZ\n", __func__);
}
-static void
-e2_network_discovery(void)
-{
- fd_set rfds;
- int fd, len;
- SANE_Status status;
-
- char *ip, *query = "EPSONP\x00\xff\x00\x00\x00\x00\x00\x00\x00";
- unsigned char buf[76];
-
- struct timeval to;
-
- status = sanei_udp_open_broadcast(&fd);
- if (status != SANE_STATUS_GOOD)
- return;
-
- sanei_udp_write_broadcast(fd, 3289, (unsigned char *) query, 15);
-
- DBG(5, "%s, sent discovery packet\n", __func__);
-
- to.tv_sec = 1;
- to.tv_usec = 0;
-
- FD_ZERO(&rfds);
- FD_SET(fd, &rfds);
-
- sanei_udp_set_nonblock(fd, SANE_TRUE);
- while (select(fd + 1, &rfds, NULL, NULL, &to) > 0) {
- if ((len = sanei_udp_recvfrom(fd, buf, 76, &ip)) == 76) {
- DBG(5, " response from %s\n", ip);
-
- /* minimal check, protocol unknown */
- if (strncmp((char *) buf, "EPSON", 5) == 0)
- attach_one_net(ip);
- }
- }
-
- DBG(5, "%s, end\n", __func__);
-
- sanei_udp_close(fd);
-}
-
-
static SANE_Status
open_scanner(epsonds_scanner *s)
{
@@ -230,7 +1421,7 @@ open_scanner(epsonds_scanner *s)
unsigned char buf[5];
/* device name has the form net:ipaddr */
- status = sanei_tcp_open(&s->hw->sane.name[4], 1865, &s->fd);
+ status = sanei_tcp_open(&s->hw->name[4], 1865, &s->fd);
if (status == SANE_STATUS_GOOD) {
ssize_t read;
@@ -272,12 +1463,10 @@ open_scanner(epsonds_scanner *s)
}
} else if (s->hw->connection == SANE_EPSONDS_USB) {
-
status = sanei_usb_open(s->hw->sane.name, &s->fd);
if (status == SANE_STATUS_GOOD) {
sanei_usb_set_timeout(USB_TIMEOUT);
- sanei_usb_clear_halt(s->fd);
}
} else {
@@ -307,7 +1496,6 @@ static struct epsonds_scanner *
scanner_create(struct epsonds_device *dev, SANE_Status *status)
{
struct epsonds_scanner *s;
-
s = malloc(sizeof(struct epsonds_scanner));
if (s == NULL) {
*status = SANE_STATUS_NO_MEM;
@@ -428,7 +1616,32 @@ device_detect(const char *name, int type, SANE_Status *status)
DBG(1, "scanner model: %s\n", dev->model);
- /* add this scanner to the device list */
+
+ s->hw->lut_id = 0;
+
+ for (int i = 0; i < stProfileMapArray.used; i++) {
+
+ epsonds_profile_map* map = &stProfileMapArray.array[i];
+
+
+ if (strcmp(map->productName, dev->model) == 0) {
+
+ {//Convert to user friendly model name
+ free(s->hw->model);
+
+ char* deviceName = (char*)malloc(strlen(map->deviceID) + 1);
+ memset(deviceName, 0, strlen(map->deviceID) + 1);
+ strncpy(deviceName, map->deviceID, strlen(map->deviceID));
+ s->hw->model = deviceName;
+ s->hw->sane.model = s->hw->model;
+ }
+ {// set lutid
+ s->hw->lut_id = map->lutID;
+ }
+ break;
+ }
+ }
+ DBG(1, "scanner lut_id: %d\n", s->hw->lut_id);
num_devices++;
dev->next = first_dev;
@@ -479,6 +1692,67 @@ attach_one_net(const char *dev)
return attach(name, SANE_EPSONDS_NET);
}
+static void found_net_device(const char* device_name, const char* ip)
+{
+ DBG(7, "Found %s: ip = %s\n", device_name, ip);
+
+ int foundSupportedDevice = 0;
+
+ // search models
+ for (int i = 0; i < stProfileMapArray.used; i++) {
+ if (strcmp(stProfileMapArray.array[i].deviceID, device_name) == 0) {
+ foundSupportedDevice = 1;
+ break;
+ }
+ }
+
+
+ if (foundSupportedDevice)
+ {
+ char name[39 + 4];
+
+ strcpy(name, "net:");
+ strncat(name, ip, 39);
+
+ int foundCache = 0;
+ // search cache and prents duplicated model
+ for (epsonds_device* dev = first_dev; dev; dev = dev->next) {
+ if (strcmp(dev->sane.name, name) == 0) {
+ foundCache = 1;
+ }
+ }
+ if (foundCache == 0)
+ {
+ attach(name, SANE_EPSONDS_NET);
+ }
+ }
+}
+
+static void
+splitProfileName(const char* input, int* outProductID, char *outProductName, char* outDeviceID, int* outLutID)
+{
+ char target[1024];
+ strncpy(target, input, 1023);
+
+ strtok(target, ":");//profile
+
+ //productID
+ char* pid = strtok(NULL, ",");
+ sscanf(pid, "%x", (unsigned int*)outProductID);
+
+ //productName
+ char* productName = strtok(NULL, ",");
+ strncpy(outProductName, productName, 49);
+
+ //deviceID
+ char* deviceID = strtok(NULL, ",");
+ strncpy(outDeviceID, deviceID, 49);
+
+ //lutID
+ char* lutID = strtok(NULL, ",");
+ sscanf(lutID, "%d", outLutID);
+}
+
static SANE_Status
attach_one_config(SANEI_Config __sane_unused__ *config, const char *line,
@@ -489,8 +1763,17 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line,
int len = strlen(line);
DBG(7, "%s: len = %d, line = %s\n", __func__, len, line);
+ if (strncmp(line, "profile", 7) == 0 ) {
+ DBG(7, " found profile device profile\n");
+
+ epsonds_profile_map profle_map;
+
+ splitProfileName(line, &profle_map.productID, profle_map.productName, profle_map.deviceID, &profle_map.lutID);
- if (sscanf(line, "usb %i %i", &vendor, &product) == 2) {
+ DBG(7, "Found profile : %x %s %s %d\n", profle_map.productID, profle_map.productName, profle_map.deviceID, profle_map.lutID);
+
+ insert_profile_map(&stProfileMapArray, profle_map);
+ }else if (sscanf(line, "usb %i %i", &vendor, &product) == 2) {
DBG(7, " user configured device\n");
@@ -501,15 +1784,11 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line,
} else if (strncmp(line, "usb", 3) == 0 && len == 3) {
- int i, numIds;
-
DBG(7, " probing usb devices\n");
- numIds = epsonds_get_number_of_ids();
-
- for (i = 0; i < numIds; i++) {
- sanei_usb_find_devices(SANE_EPSONDS_VENDOR_ID,
- epsonds_usb_product_ids[i], attach_one_usb);
+ for (int i = 0; i < stProfileMapArray.used; i++) {
+ int usbPid = stProfileMapArray.array[i].productID;
+ sanei_usb_find_devices(SANE_EPSONDS_VENDOR_ID, usbPid, attach_one_usb);
}
} else if (strncmp(line, "net", 3) == 0) {
@@ -520,11 +1799,17 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line,
sanei_config_skip_whitespace(line + 3);
if (strncmp(name, "autodiscovery", 13) == 0)
- e2_network_discovery();
+ {
+ #if WITH_AVAHI
+ epsonds_searchDevices(found_net_device);
+ #else
+ // currently does not support
+ //e2_network_discovery();
+ #endif
+ }
else
attach_one_net(name);
}
-
} else {
DBG(0, "unable to parse config line: %s\n", line);
}
@@ -564,13 +1849,16 @@ SANE_Status
sane_init(SANE_Int *version_code, SANE_Auth_Callback __sane_unused__ authorize)
{
DBG_INIT();
+
+ init_profile_maps(&stProfileMapArray, 100);
+
DBG(2, "%s: " PACKAGE " " VERSION "\n", __func__);
DBG(1, "epsonds backend, version %i.%i.%i\n",
EPSONDS_VERSION, EPSONDS_REVISION, EPSONDS_BUILD);
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR,
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR,
EPSONDS_BUILD);
sanei_usb_init();
@@ -582,6 +1870,7 @@ void
sane_exit(void)
{
DBG(5, "** %s\n", __func__);
+ free_profile_maps(&stProfileMapArray);
free_devices();
}
@@ -591,7 +1880,8 @@ sane_get_devices(const SANE_Device ***device_list, SANE_Bool local_only)
int i;
epsonds_device *dev;
- DBG(5, "** %s\n", __func__);
+ DBG(5, "** %s local_only = %d \n", __func__, local_only);
+
probe_devices(local_only);
@@ -612,12 +1902,14 @@ sane_get_devices(const SANE_Device ***device_list, SANE_Bool local_only)
*device_list = devlist;
+
return SANE_STATUS_GOOD;
}
static SANE_Status
init_options(epsonds_scanner *s)
{
+ DBG(5, "init_options\n");
int i;
for (i = 0; i < NUM_OPTIONS; i++) {
@@ -632,11 +1924,11 @@ init_options(epsonds_scanner *s)
s->val[OPT_NUM_OPTS].w = NUM_OPTIONS;
/* "Scan Mode" group: */
-
- s->opt[OPT_MODE_GROUP].title = SANE_I18N("Scan Mode");
- s->opt[OPT_MODE_GROUP].desc = "";
- s->opt[OPT_MODE_GROUP].type = SANE_TYPE_GROUP;
- s->opt[OPT_MODE_GROUP].cap = 0;
+ s->opt[OPT_STANDARD_GROUP].name = SANE_NAME_STANDARD;
+ s->opt[OPT_STANDARD_GROUP].title = SANE_TITLE_STANDARD;
+ s->opt[OPT_STANDARD_GROUP].desc = SANE_DESC_STANDARD;
+ s->opt[OPT_STANDARD_GROUP].type = SANE_TYPE_GROUP;
+ s->opt[OPT_STANDARD_GROUP].cap = 0;
/* scan mode */
s->opt[OPT_MODE].name = SANE_NAME_SCAN_MODE;
@@ -761,18 +2053,6 @@ init_options(epsonds_scanner *s)
if (!s->hw->adf_has_load)
s->opt[OPT_LOAD].cap |= SANE_CAP_INACTIVE;
- 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->adf_is_duplex)
- s->opt[OPT_ADF_MODE].cap |= SANE_CAP_INACTIVE;
s->opt[OPT_ADF_SKEW].name = "adf-skew";
s->opt[OPT_ADF_SKEW].title = SANE_I18N("ADF Skew Correction");
@@ -781,8 +2061,26 @@ init_options(epsonds_scanner *s)
s->opt[OPT_ADF_SKEW].type = SANE_TYPE_BOOL;
s->val[OPT_ADF_SKEW].w = 0;
+
+ s->opt[OPT_ADF_CRP].name = "adf-crp";
+ s->opt[OPT_ADF_CRP].title = SANE_I18N("ADF CRP Correction");
+ s->opt[OPT_ADF_CRP].desc =
+ SANE_I18N("Enables ADF auto cropping"); //
+ s->opt[OPT_ADF_CRP].type = SANE_TYPE_BOOL;
+ s->val[OPT_ADF_CRP].w = 0;
+
+
if (!s->hw->adf_has_skew)
+ {
+ s->val[OPT_ADF_SKEW].w = 0;
s->opt[OPT_ADF_SKEW].cap |= SANE_CAP_INACTIVE;
+ }
+
+ if(!s->hw->adf_has_crp)
+ {
+ s->val[OPT_ADF_CRP].w = 0;
+ s->opt[OPT_ADF_CRP].cap |= SANE_CAP_INACTIVE;
+ }
return SANE_STATUS_GOOD;
}
@@ -793,6 +2091,8 @@ sane_open(SANE_String_Const name, SANE_Handle *handle)
SANE_Status status;
epsonds_scanner *s = NULL;
+
+
DBG(7, "** %s: name = '%s'\n", __func__, name);
/* probe if empty device name provided */
@@ -848,6 +2148,8 @@ sane_open(SANE_String_Const name, SANE_Handle *handle)
status = eds_lock(s);
}
+ setvalue((SANE_Handle)s, OPT_MODE, (void*)SANE_VALUE_SCAN_MODE_COLOR, NULL);
+
return status;
}
@@ -881,24 +2183,6 @@ search_string_list(const SANE_String_Const *list, SANE_String value)
return ((*list == NULL) ? NULL : list);
}
-static void
-activateOption(epsonds_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(epsonds_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;
- }
-}
-
/*
* Handles setting the source (flatbed, transparency adapter (TPU),
* or auto document feeder (ADF)).
@@ -911,7 +2195,6 @@ static void
change_source(epsonds_scanner *s, SANE_Int optindex, char *value)
{
int force_max = SANE_FALSE;
- SANE_Bool dummy;
DBG(1, "%s: optindex = %d, source = '%s'\n", __func__, optindex,
value);
@@ -928,26 +2211,17 @@ change_source(epsonds_scanner *s, SANE_Int optindex, char *value)
force_max = SANE_TRUE;
}
- if (strcmp(ADF_STR, value) == 0) {
-
+ if (strcmp(STRING_ADFFRONT, value) == 0 || strcmp(STRING_ADFDUPLEX, value) == 0) {
s->hw->x_range = &s->hw->adf_x_range;
s->hw->y_range = &s->hw->adf_y_range;
s->hw->alignment = s->hw->adf_alignment;
- if (s->hw->adf_is_duplex) {
- activateOption(s, OPT_ADF_MODE, &dummy);
- } else {
- deactivateOption(s, OPT_ADF_MODE, &dummy);
- s->val[OPT_ADF_MODE].w = 0;
- }
} 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;
- deactivateOption(s, OPT_ADF_MODE, &dummy);
-
} else {
/* neither ADF nor TPU active, assume FB */
@@ -995,7 +2269,6 @@ getvalue(SANE_Handle handle, SANE_Int option, void *value)
break;
case OPT_MODE:
- case OPT_ADF_MODE:
case OPT_SOURCE:
strcpy((char *) value, sopt->constraint.string_list[sval->w]);
break;
@@ -1045,12 +2318,9 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
switch (option) {
- case OPT_ADF_MODE: /* simple lists */
- sval->w = optindex;
- break;
-
case OPT_ADF_SKEW:
case OPT_RESOLUTION:
+ case OPT_ADF_CRP:
sval->w = *((SANE_Word *) value);
reload = SANE_TRUE;
break;
@@ -1064,9 +2334,29 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
// fall through
case OPT_TL_X:
case OPT_TL_Y:
+
sval->w = *((SANE_Word *) value);
if (NULL != info)
*info |= SANE_INFO_RELOAD_PARAMS;
+
+ if (option == OPT_BR_X)
+ {
+ DBG(17, "OPT_BR_X = %d\n", sval->w);
+ }
+ if (option == OPT_BR_Y)
+ {
+ DBG(17, "OPT_BR_Y = %d\n", sval->w);
+ }
+ if (option == OPT_TL_X)
+ {
+ DBG(17, "OPT_TL_X = %d\n", sval->w);
+ }
+ if (option == OPT_TL_Y)
+ {
+ DBG(17, "OPT_TL_Y = %d\n", sval->w);
+ }
+ // adf crop set to off
+ s->val[OPT_ADF_CRP].w = 0;
break;
case OPT_SOURCE:
@@ -1076,6 +2366,8 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info)
case OPT_MODE:
{
+ DBG(17, " OPT_MODE = index %d\n", optindex);
+
/* use JPEG mode if RAW is not available when bpp > 1 */
if (optindex > 0 && !s->hw->has_raw) {
s->mode_jpeg = 1;
@@ -1152,6 +2444,183 @@ sane_control_option(SANE_Handle handle, SANE_Int option, SANE_Action action,
return SANE_STATUS_INVAL;
}
+
+static void setBit (SANE_Byte* bytes, SANE_Int bitIndex, SANE_Bool isTrue)
+{
+ SANE_Int octet = bitIndex / 8;
+ SANE_Byte bit = 7 - (bitIndex % 8);
+
+ if (isTrue) {
+ bytes[octet] |= (1 << bit);
+ } else {
+ bytes[octet] &= ~(1 << bit);
+ }
+}
+
+static SANE_Bool getBit (SANE_Byte* bytes, SANE_Int bitIndex)
+{
+ SANE_Int octet = bitIndex / 8;
+ SANE_Byte mask = 1 << (7 - (bitIndex % 8));
+
+ if( bytes[octet] & mask ){
+ return SANE_TRUE;
+ }
+
+ return SANE_FALSE;
+}
+
+static void swapPixel1(SANE_Int x1,
+ SANE_Int y1,
+ SANE_Int x2,
+ SANE_Int y2,
+ SANE_Byte* bytes,
+ SANE_Byte bitsPerSample,
+ SANE_Int samplesPerPixel,
+ SANE_Int bytesPerRow)
+{
+ SANE_Int pixelBits = bitsPerSample * samplesPerPixel;
+ SANE_Int widthBits = bytesPerRow * 8;
+
+ SANE_Byte temp = getBit(bytes, widthBits * y1 + x1 * pixelBits);
+ {
+ SANE_Byte right = getBit(bytes, widthBits * y2 + x2 * pixelBits);
+ setBit(bytes, widthBits * y1 + x1 * pixelBits, right);
+ }
+ setBit(bytes, widthBits * y2 + x2 * pixelBits, temp);
+}
+
+static void swapPixel8(SANE_Int x1,
+ SANE_Int y1,
+ SANE_Int x2,
+ SANE_Int y2,
+ SANE_Byte* bytes,
+ SANE_Byte bitsPerSample,
+ SANE_Int samplesPerPixel,
+ SANE_Int bytesPerRow)
+{
+ SANE_Int pixelBytes = samplesPerPixel * bitsPerSample / 8;
+
+ for (SANE_Byte i = 0; i < pixelBytes; i++) {
+ SANE_Byte temp = bytes[y1 * bytesPerRow + (pixelBytes * x1 + i)];
+ bytes[y1 * bytesPerRow + (pixelBytes * x1 + i)] = bytes[y2 * bytesPerRow + (pixelBytes * x2 + i)];
+ bytes[y2 * bytesPerRow + (pixelBytes * x2 + i)] = temp;
+ }
+}
+
+
+
+static void swapPixel(SANE_Int x1,
+ SANE_Int y1,
+ SANE_Int x2,
+ SANE_Int y2,
+ SANE_Byte* bytes,
+ SANE_Byte bitsPerSample,
+ SANE_Int samplesPerPixel,
+ SANE_Int bytesPerRow)
+{
+ if (bitsPerSample == 1) {
+ swapPixel1(x1, y1, x2, y2, bytes, bitsPerSample, samplesPerPixel, bytesPerRow);
+ }else if(bitsPerSample == 8 || bitsPerSample == 16){
+ swapPixel8(x1, y1, x2, y2, bytes, bitsPerSample, samplesPerPixel, bytesPerRow);
+ }
+}
+
+
+void
+upside_down_backside_image(epsonds_scanner *s)
+{
+ // get all data from ring_buffer
+ if (eds_ring_avail(&s->back) &&
+ (strcmp(s->hw->sane.model, (char*)"DS-1630") == 0
+ || strcmp(s->hw->sane.model, (char*)"DS-1610") == 0
+ || strcmp(s->hw->sane.model, (char*)"DS-1660W") == 0))
+ {
+ SANE_Int bytesPerLine = s->params.bytes_per_line;
+ SANE_Int imageSize = bytesPerLine * s->height_back;
+
+ SANE_Byte* workBuffer = malloc(imageSize);
+ // if there is not enough memory, do nothing.
+ if (workBuffer)
+ {
+ eds_ring_read(&s->back, workBuffer, imageSize);
+ SANE_Int samplesPerPxel = 3;
+ if (s->params.format == SANE_FRAME_RGB)
+ {
+ samplesPerPxel = 3;
+ }
+ else if (s->params.format == SANE_FRAME_GRAY)
+ {
+ samplesPerPxel = 1;
+ }
+
+ SANE_Int half = (s->height_back / 2) - 1;
+ if (half < 0) {
+ half = 0;
+ }
+
+ if((s->height_back % 2) == 1) {
+ SANE_Int ymid = ( (s->height_back - 1 ) / 2 );
+ for(SANE_Int x = 0;x < (s->width_back / 2); x++) {
+ swapPixel(x, ymid, s->width_back - x - 1, ymid, workBuffer, s->params.depth, samplesPerPxel, s->params.bytes_per_line);
+ }
+ }
+
+ if (s->height_back != 1) {
+ for(SANE_Int x = 0; x < s->width_back; x++) {
+ for(SANE_Int y = 0;y <= half; y++) {
+ swapPixel(x, y, s->width_back - x - 1, s->height_back - y -1, workBuffer, s->params.depth, samplesPerPxel, s->params.bytes_per_line);
+ }
+ }
+ }
+
+ eds_ring_write(&s->back, workBuffer, imageSize);
+ free(workBuffer);
+ workBuffer = NULL;
+
+ }
+ }
+
+}
+
+
+SANE_Status
+get_next_image(epsonds_scanner *s)
+{
+ SANE_Status status = SANE_STATUS_GOOD;
+
+ if (s->acquirePage == 0 && s->current == &s->front)
+ {
+ DBG(20, "** %s: get_next_image\n", __func__);
+
+
+ /*page info will be updatted by pen*/
+ s->width_back = 0;
+ s->width_front = 0;
+ s->height_back = 0;
+ s->height_front = 0;
+
+ if (s->mode_jpeg)
+ {
+ status = acquire_and_decode_jpeg_data(s);
+ }else{
+ status = acquire_raw_data(s);
+ }
+ if (status != SANE_STATUS_GOOD)
+ {
+ eds_ring_flush(&s->front);
+ eds_ring_flush(&s->back);
+ eds_ring_destory(&s->front);
+ eds_ring_destory(&s->back);
+ }
+ DBG(20," ringFront = %d ringBack = %d\n", eds_ring_avail(&s->front), eds_ring_avail(&s->back));
+
+ s->acquirePage = 1;
+ }
+
+ return status;
+}
+
+
SANE_Status
sane_get_parameters(SANE_Handle handle, SANE_Parameters *params)
{
@@ -1173,25 +2642,186 @@ sane_get_parameters(SANE_Handle handle, SANE_Parameters *params)
eds_init_parameters(s);
}
+
+ SANE_Status status = SANE_STATUS_GOOD;
+
+ status = get_next_image(s);
+
+ // if size auto, update page size value
+ if(s->val[OPT_ADF_CRP].w)
+ {
+ // frontside
+ if (s->current == &s->front)
+ {
+ DBG(20, "front side \n");
+ if (s->width_front != 0 && s->height_front != 0)
+ {
+ if (s->params.format == SANE_FRAME_RGB)
+ {
+ s->params.bytes_per_line = s->width_front * 3;
+ s->params.pixels_per_line = s->width_front;
+ }
+
+ if (s->params.format == SANE_FRAME_GRAY && s->params.depth == 8)
+ {
+ s->params.bytes_per_line = s->width_front;
+ s->params.pixels_per_line = s->width_front;
+ }
+
+ if (s->params.format == SANE_FRAME_GRAY && s->params.depth == 1)
+ {
+ s->params.bytes_per_line = (s->width_front + 7)/8;
+ s->params.pixels_per_line = s->width_front;
+ }
+ s->params.lines = s->height_front;
+ }
+ }
+ // backside
+ if (s->current == &s->back)
+ {
+ DBG(20, "back side \n");
+ if (s->width_back != 0 && s->height_back != 0)
+ {
+ if (s->params.format == SANE_FRAME_RGB)
+ {
+ s->params.bytes_per_line = s->width_back * 3;
+ s->params.pixels_per_line = s->width_back;
+ }
+
+ if (s->params.format == SANE_FRAME_GRAY && s->params.depth == 8)
+ {
+ s->params.bytes_per_line = s->width_back;
+ s->params.pixels_per_line = s->width_back;
+ }
+
+ if (s->params.format == SANE_FRAME_GRAY && s->params.depth == 1)
+ {
+ s->params.bytes_per_line = (s->width_back + 7)/8;
+ s->params.pixels_per_line = s->width_back;
+ }
+ s->params.lines = s->height_back;
+ }
+ }
+ }
if (params != NULL)
*params = s->params;
print_params(s->params);
- return SANE_STATUS_GOOD;
+ DBG(20, "s->params.line = %d s->params.bytes_per_line = %d s->params.pixels_per_line = %d \n", s->params.lines, s->params.bytes_per_line , s->params.pixels_per_line );
+ return status;
+}
+
+
+
+typedef float ColorMatrix[3][3];
+
+#define CCT_TABLE_SIZE 9
+static int get_roundup_index(double frac[], int n)
+{
+ int i, index = -1;
+ double max_val = 0.0;
+
+ for (i=0; i<n; i++) {
+ if (frac[i]<0) continue;
+ if (max_val<frac[i]) {
+ index = i;
+ max_val = frac[i];
+ }
+ }
+ return index;
+}
+
+static int get_rounddown_index(double frac[], int n)
+{
+ int i, index = -1;
+ double min_val = 1.0;
+
+ for (i=0; i<n; i++) {
+ if (frac[i]>0) continue;
+ if (min_val>frac[i]) {
+ index = i;
+ min_val = frac[i];
+ }
+ }
+ return index;
}
+
+void ESCIRoundColorCorrectionMatrix(int mult, double org_cct[], int rnd_cct[])
+{
+ int i, j, index;
+ double mult_cct[CCT_TABLE_SIZE], frac[CCT_TABLE_SIZE];
+ int sum[3];
+ int loop;
+
+ for (i=0; i<CCT_TABLE_SIZE; i++) {
+ mult_cct[i] = org_cct[i] * mult;
+ }
+
+ // round value multiplied by 'mult' off to integer.
+ for (i=0; i<CCT_TABLE_SIZE; i++) {
+ rnd_cct[i] = (int)floor(org_cct[i] * mult + 0.5);
+ }
+
+ loop=0;
+ do {
+ // If all element equal to 11, diagonal element is set to 10.
+ for (i=0; i<3; i++) {
+ if ( (rnd_cct[i*3]==11) &&
+ (rnd_cct[i*3]==rnd_cct[i*3+1]) &&
+ (rnd_cct[i*3]==rnd_cct[i*3+2]) ) {
+ rnd_cct[i*3+i] --;
+ mult_cct[i*3+i] = rnd_cct[i*3+i];
+ }
+ }
+ // calc. summation of each line.
+ for (i=0; i<3; i++) {
+ sum[i] = 0;
+ for (j=0; j<3; j++) {
+ sum[i] += rnd_cct[i*3+j];
+ }
+ }
+ // calc. values rounded up or down.
+ for (i=0; i<CCT_TABLE_SIZE; i++) {
+ frac[i] = mult_cct[i] - rnd_cct[i];
+ }
+
+ // if summation does not equal to 'mult', adjust rounded up or down value.
+ for (i=0; i<3; i++) {
+ if (sum[i]<mult) {
+ index = get_roundup_index(&frac[i*3], 3);
+ if (index!=-1) {
+ rnd_cct[i*3+index] ++;
+ mult_cct[i*3+index] = rnd_cct[i*3+index];
+ sum[i]++;
+ }
+ } else if (sum[i]>mult) {
+ index = get_rounddown_index(&frac[i*3], 3);
+ if (index!=-1) {
+ rnd_cct[i*3+index] --;
+ mult_cct[i*3+index] = rnd_cct[i*3+index];
+ sum[i]--;
+ }
+ }
+ }
+
+ } while ((++loop<2)&&((sum[0]!=mult)||(sum[1]!=mult)||(sum[2]!=mult)));
+}
+
+
+
/*
* This function is part of the SANE API and gets called from the front end to
* start the scan process.
*/
-
+#define CMD_BUF_SIZE 1000
SANE_Status
sane_start(SANE_Handle handle)
{
epsonds_scanner *s = (epsonds_scanner *)handle;
char buf[65]; /* add one more byte to correct buffer overflow issue */
- char cmd[100]; /* take care not to overflow */
+ char cmd[CMD_BUF_SIZE]; /* take care not to overflow */
SANE_Status status = 0;
s->pages++;
@@ -1203,26 +2833,28 @@ sane_start(SANE_Handle handle)
s->eof = 0;
s->canceling = 0;
+ s->acquirePage = 0;
if ((s->pages % 2) == 1) {
s->current = &s->front;
- eds_ring_flush(s->current);
} else if (eds_ring_avail(&s->back)) {
DBG(5, "back side\n");
s->current = &s->back;
}
- /* prepare the JPEG decompressor */
- if (s->mode_jpeg) {
- status = eds_jpeg_start(s);
- if (status != SANE_STATUS_GOOD) {
- goto end;
- } }
-
/* scan already in progress? (one pass adf) */
- if (s->scanning) {
+ if (s->scanning || eds_ring_avail(&s->back) > 0) {
DBG(5, " scan in progress, returning early\n");
- return SANE_STATUS_GOOD;
+ return get_next_image(s);
+ }
+ if (strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFFRONT) == 0 || strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFDUPLEX) == 0) {
+ if (s->scanEnd)
+ {
+ s->scanEnd = 0;
+ return SANE_STATUS_NO_DOCS;
+ }
+ }else{
+ s->scanEnd = 0;
}
/* calc scanning parameters */
@@ -1239,13 +2871,7 @@ sane_start(SANE_Handle handle)
/* transfer buffer size, bsz */
/* XXX read value from scanner */
- s->bsz = (65536 * 4);
-
- /* ring buffer for front page */
- status = eds_ring_init(&s->front, s->bsz * 2);
- if (status != SANE_STATUS_GOOD) {
- return status;
- }
+ s->bsz = (1048576 * 4);
/* transfer buffer */
s->buf = realloc(s->buf, s->bsz);
@@ -1256,29 +2882,34 @@ sane_start(SANE_Handle handle)
/* set scanning parameters */
+ s->isDuplexScan = 0;
/* document source */
- if (strcmp(source_list[s->val[OPT_SOURCE].w], ADF_STR) == 0) {
+ if (strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFFRONT) == 0 || strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFDUPLEX) == 0) {
- sprintf(buf, "#ADF%s%s",
- s->val[OPT_ADF_MODE].w ? "DPLX" : "",
- s->val[OPT_ADF_SKEW].w ? "SKEW" : "");
+ SANE_Int status = esci2_stat(s);
+ if (status == SANE_STATUS_NO_DOCS)
+ {
+ return SANE_STATUS_NO_DOCS;
+ }
- /* it seems that DFL only works in duplex mode, but it's
- * also required to be enabled or duplex will be rejected.
- */
+ SANE_Int duplexMode = (strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFDUPLEX) == 0);
- if (s->val[OPT_ADF_MODE].w) {
+ sprintf(buf, "#ADF%s%s%s",
+ duplexMode ? "DPLX" : "",
+ s->val[OPT_ADF_SKEW].w ? "SKEW" : "",
+ s->val[OPT_ADF_CRP].w ? "CRP " : ""
+ );
- if (s->hw->adf_has_dfd == 2) {
- strcat(buf, "DFL2");
- } else if (s->hw->adf_has_dfd == 1) {
- strcat(buf, "DFL1");
- }
+ if (duplexMode)
+ {
+ s->isDuplexScan = 1;
}
-
- } else if (strcmp(source_list[s->val[OPT_SOURCE].w], FBF_STR) == 0) {
+ s->isflatbedScan = 0;
+ }
+ else if (strcmp(source_list[s->val[OPT_SOURCE].w], STRING_FLATBED) == 0) {
strcpy(buf, "#FB ");
+ s->isflatbedScan = 1;
} else {
/* XXX */
@@ -1286,8 +2917,18 @@ sane_start(SANE_Handle handle)
strcpy(cmd, buf);
+ s->needToConvertBW = 0;
+
if (s->params.format == SANE_FRAME_GRAY) {
- sprintf(buf, "#COLM%03d", s->params.depth);
+ if (s->params.depth == 1 && s->hw->has_mono == 0)
+ {
+ sprintf(buf, "#COLM008");
+ s->needToConvertBW = 1;
+ s->mode_jpeg = 1;
+ }else
+ {
+ sprintf(buf, "#COLM%03d", s->params.depth);
+ }
} else if (s->params.format == SANE_FRAME_RGB) {
sprintf(buf, "#COLC%03d", s->params.depth * 3);
}
@@ -1303,9 +2944,29 @@ sane_start(SANE_Handle handle)
strcat(cmd, "#FMTJPG #JPGd090");
}
+ /* set GMM */
+ if (s->params.depth == 1)
+ {
+ sprintf(buf, "#GMMUG10");
+ } else
+ {
+ sprintf(buf, "#GMMUG18");
+ }
+ strcat(cmd, buf);
+
/* resolution (RSMi not always supported) */
- if (s->val[OPT_RESOLUTION].w > 999) {
+ if (strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFFRONT) == 0 && s->val[OPT_RESOLUTION].w > 600) {
+ DBG(0, "Automatic Document Feeder supported resolution of 600dpi or less. \n");
+ } else if (s->val[OPT_RESOLUTION].w > 999) {
+ sprintf(buf, "#RSMi%07d#RSSi%07d", s->val[OPT_RESOLUTION].w, s->val[OPT_RESOLUTION].w);
+ } else {
+ sprintf(buf, "#RSMd%03d#RSSd%03d", s->val[OPT_RESOLUTION].w, s->val[OPT_RESOLUTION].w);
+ }
+
+ if (strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFDUPLEX) == 0 && s->val[OPT_RESOLUTION].w > 600) {
+ DBG(0, "Automatic Document Feeder supported resolution of 600dpi or less. \n");
+ } else if (s->val[OPT_RESOLUTION].w > 999) {
sprintf(buf, "#RSMi%07d#RSSi%07d", s->val[OPT_RESOLUTION].w, s->val[OPT_RESOLUTION].w);
} else {
sprintf(buf, "#RSMd%03d#RSSd%03d", s->val[OPT_RESOLUTION].w, s->val[OPT_RESOLUTION].w);
@@ -1313,13 +2974,321 @@ sane_start(SANE_Handle handle)
strcat(cmd, buf);
+ if (strcmp(s->hw->sane.model, (char*)"DS-70") == 0 || strcmp(s->hw->sane.model, (char*)"ES-65WR") == 0 || strcmp(s->hw->sane.model, (char*)"ES-60W") == 0
+ || strcmp(s->hw->sane.model, (char*)"DS-80W") == 0 || strcmp(s->hw->sane.model, (char*)"ES-55R") == 0 || strcmp(s->hw->sane.model, (char*)"ES-50") == 0){
+ sprintf(buf, "#BSZi0262144");
+ strcat(cmd, buf);
+ }
+ else {
+ sprintf(buf, "#BSZi1048576");
+ strcat(cmd, buf);
+ }
+
+
/* scanning area */
+
sprintf(buf, "#ACQi%07di%07di%07di%07d",
s->left, s->top, s->params.pixels_per_line, s->params.lines);
+
+ if (strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFFRONT) == 0 || strcmp(source_list[s->val[OPT_SOURCE].w], STRING_ADFDUPLEX) == 0) {
+ status = esci2_stat(s);
+ if (status != SANE_STATUS_GOOD) {
+ goto end;
+ }
+ }
+
strcat(cmd, buf);
- status = esci2_para(s, cmd);
+
+ int pos = 0;
+
+ {
+ for (int i = 0; i < CMD_BUF_SIZE; i++)
+ {
+ // find end of string
+ if(cmd[i] == 0)
+ {
+ pos = i;
+ break;
+ }
+ }
+
+
+ if (s->params.format == SANE_FRAME_GRAY && s->params.depth == 8) {
+ DBG(10, "SANE_FRAME_GRAY\n");
+ cmd[pos++] = '#';
+ cmd[pos++] = 'G';
+ cmd[pos++] = 'M';
+ cmd[pos++] = 'T';
+ cmd[pos++] = 'M';
+ cmd[pos++] = 'O';
+ cmd[pos++] = 'N';
+ cmd[pos++] = 'O';
+ cmd[pos++] = 'h';
+ cmd[pos++] = '1';
+ cmd[pos++] = '0';
+ cmd[pos++] = '0';
+
+ for(int count = 0; count < 256; count++) {
+ cmd[pos++] = LUT[s->hw->lut_id][count];
+ }
+ }
+ if (s->params.format == SANE_FRAME_GRAY && s->params.depth == 1) {
+ DBG(10, "SANE_FRAME_GRAY\n");
+ cmd[pos++] = '#';
+ cmd[pos++] = 'G';
+ cmd[pos++] = 'M';
+ cmd[pos++] = 'T';
+ cmd[pos++] = 'M';
+ cmd[pos++] = 'O';
+ cmd[pos++] = 'N';
+ cmd[pos++] = 'O';
+ cmd[pos++] = 'h';
+ cmd[pos++] = '1';
+ cmd[pos++] = '0';
+ cmd[pos++] = '0';
+
+ for(int count = 0; count < 256; count++) {
+ cmd[pos++] = LUT[0][count];
+ }
+ }
+ else if (s->params.format == SANE_FRAME_RGB) {
+ DBG(10, "SANE_FRAME_RGB\n");
+ cmd[pos++] = '#';
+ cmd[pos++] = 'G';
+ cmd[pos++] = 'M';
+ cmd[pos++] = 'T';
+ cmd[pos++] = 'R';
+ cmd[pos++] = 'E';
+ cmd[pos++] = 'D';
+ cmd[pos++] = ' ';
+ cmd[pos++] = 'h';
+ cmd[pos++] = '1';
+ cmd[pos++] = '0';
+ cmd[pos++] = '0';
+
+ for(int count = 0; count < 256; count++) {
+ cmd[pos++] = LUT_R[s->hw->lut_id][count];
+ }
+
+ cmd[pos++] = '#';
+ cmd[pos++] = 'G';
+ cmd[pos++] = 'M';
+ cmd[pos++] = 'T';
+ cmd[pos++] = 'G';
+ cmd[pos++] = 'R';
+ cmd[pos++] = 'N';
+ cmd[pos++] = ' ';
+ cmd[pos++] = 'h';
+ cmd[pos++] = '1';
+ cmd[pos++] = '0';
+ cmd[pos++] = '0';
+
+ for(int count = 0; count < 256; count++) {
+ cmd[pos++] = LUT_G[s->hw->lut_id][count];
+ }
+
+ cmd[pos++] = '#';
+ cmd[pos++] = 'G';
+ cmd[pos++] = 'M';
+ cmd[pos++] = 'T';
+ cmd[pos++] = 'B';
+ cmd[pos++] = 'L';
+ cmd[pos++] = 'U';
+ cmd[pos++] = ' ';
+ cmd[pos++] = 'h';
+ cmd[pos++] = '1';
+ cmd[pos++] = '0';
+ cmd[pos++] = '0';
+
+ for(int count = 0; count < 256; count++) {
+ cmd[pos++] = LUT_B[s->hw->lut_id][count];
+ }
+ }
+ cmd[pos] = 0;
+
+ }
+ {// Set Color Matrix
+ if (s->params.format == SANE_FRAME_RGB && s->hw->lut_id != 0 )/*Color Matrix Target devide and color Scan*/
+ {
+ ColorMatrix matrix;
+
+ // DS-530
+
+ if (s->hw->lut_id == 2)
+ {
+ // R
+ matrix[0][0] = 1.0229;
+ matrix[0][1] = 0.0009;
+ matrix[0][2] = -0.0238;
+
+ // G
+ matrix[1][0] = 0.0031;
+ matrix[1][1] = 1.0287;
+ matrix[1][2] = -0.0318;
+
+ //B
+ matrix[2][0] = 0.0044;
+ matrix[2][1] = -0.1150;
+ matrix[2][2] = 1.1106;
+ }
+
+ // DS-1660W Flatbed
+
+ if (s->hw->lut_id == 4)
+ {
+ // R
+ matrix[0][0] = 1.0229;
+ matrix[0][1] = 0.0009;
+ matrix[0][2] = -0.0238;
+
+ // G
+ matrix[1][0] = 0.0031;
+ matrix[1][1] = 1.0287;
+ matrix[1][2] = -0.0318;
+
+ //B
+ matrix[2][0] = 0.0044;
+ matrix[2][1] = -0.1150;
+ matrix[2][2] = 1.1106;
+ }
+
+
+ // DS-320
+
+ if (s->hw->lut_id == 5)
+ {
+ // R
+ matrix[0][0] = 1.0250;
+ matrix[0][1] = 0.0004;
+ matrix[0][2] = -0.0254;
+
+ // G
+ matrix[1][0] = 0.0003;
+ matrix[1][1] = 1.0022;
+ matrix[1][2] = -0.0025;
+
+ //B
+ matrix[2][0] = 0.0049;
+ matrix[2][1] = -0.0949;
+ matrix[2][2] = 1.0900;
+ }
+
+
+ // ES-50
+
+ if (s->hw->lut_id == 6)
+ {
+ // R
+ matrix[0][0] = 1.0383;
+ matrix[0][1] = -0.0021;
+ matrix[0][2] = -0.0362;
+
+ // G
+ matrix[1][0] = 0.0046;
+ matrix[1][1] = 1.0576;
+ matrix[1][2] = -0.0622;
+
+ //B
+ matrix[2][0] = 0.0235;
+ matrix[2][1] = -0.2396;
+ matrix[2][2] = 1.2161;
+ }
+
+
+ // R
+ matrix[0][0] = 0.9864;
+ matrix[0][1] = 0.0248;
+ matrix[0][2] = -0.0112;
+
+ // G
+ matrix[1][0] = 0.0021;
+ matrix[1][1] = 1.0100;
+ matrix[1][2] = -0.0112;
+
+ //B
+ matrix[2][0] = 0.0139;
+ matrix[2][1] = -0.1249;
+ matrix[2][2] = 1.1110;
+
+
+ // Set Matrix value
+ {
+ cmd[pos++] = '#';
+ cmd[pos++] = 'C';
+ cmd[pos++] = 'M';
+ cmd[pos++] = 'X';
+ cmd[pos++] = 'U';
+ cmd[pos++] = 'M';
+ cmd[pos++] = '0';
+ cmd[pos++] = '8';
+ cmd[pos++] = 'h';
+ cmd[pos++] = '0';
+ cmd[pos++] = '0';
+ cmd[pos++] = '9';
+ }
+
+
+ // Matrix to be sent to scanner must be following d1-d9 order:
+ //
+ // G R B
+ // G [d1 d4 d7]
+ // R [d2 d5 d8]
+ // B [d3 d6 d9]
+ //
+ // So, we will convert it with index table.
+ char index[9] = {4, 1, 7, 3, 0, 6, 5, 2, 8};
+
+ double flatten[9] = {0};
+ for (int row = 0; row < 3; row++) {
+ for (int col = 0; col < 3; col++) {
+ flatten[row * 3 + col] = matrix[row][col];
+ }
+ }
+
+ int rounded[9] = {0};
+ ESCIRoundColorCorrectionMatrix(32, flatten, rounded);
+
+
+ char ordered[9] = {0};
+ for (int row = 0; row < 3; row++) {
+ for (int col = 0; col < 3; col++) {
+ int val = rounded[row * 3 + col];
+ unsigned char oct = (unsigned char)abs(val);
+ oct |= ((val < 0) ? (1 << 7) : 0);
+ ordered[(signed char)index[row * 3 + col]] = oct;
+ }
+ }
+ {
+ cmd[pos++] = ordered[0];
+ cmd[pos++] = ordered[1];
+ cmd[pos++] = ordered[2];
+ cmd[pos++] = ordered[3];
+ cmd[pos++] = ordered[4];
+ cmd[pos++] = ordered[5];
+ cmd[pos++] = ordered[6];
+ cmd[pos++] = ordered[7];
+ cmd[pos++] = ordered[8];
+ cmd[pos++] = 0; //padding
+ cmd[pos++] = 0; //padding
+ cmd[pos++] = 0; //padding
+
+
+ DBG(1, "color matrix\n");
+ for (int i = 0; i < 9; i++)
+ {
+ DBG(1, "%d\n", ordered[i]);
+ }
+
+ }
+ cmd[pos] = 0;
+ }
+
+ }
+
+
+ status = esci2_para(s, cmd, pos);
if (status != SANE_STATUS_GOOD) {
goto end;
}
@@ -1336,7 +3305,8 @@ sane_start(SANE_Handle handle)
/* first page is page 1 */
s->pages = 1;
s->scanning = 1;
-
+ s->dummy = 0;
+ s->scanEnd = 0;
end:
if (status != SANE_STATUS_GOOD) {
DBG(1, "%s: start failed: %s\n", __func__, sane_strstatus(status));
@@ -1345,140 +3315,305 @@ end:
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)
+static SANE_Status acquire_jpeg_data(epsonds_scanner* s)
{
- SANE_Int read = 0, tries = 3;
- SANE_Int available;
- SANE_Status status = 0;
- epsonds_scanner *s = (epsonds_scanner *)handle;
- *length = read = 0;
+ SANE_Int read = 0;
- DBG(20, "** %s: backside = %d\n", __func__, s->backside);
-
- /* sane_read called before sane_start? */
- if (s->current == NULL) {
- DBG(0, "%s: buffer is NULL", __func__);
- return SANE_STATUS_INVAL;
+ SANE_Int jpegBufSize = s->params.bytes_per_line * s->params.lines;
+ if (s->needToConvertBW)
+ {
+ jpegBufSize = s->params.pixels_per_line * s->params.lines;
}
- /* anything in the buffer? pass it to the frontend */
- available = eds_ring_avail(s->current);
- if (available) {
- DBG(18, "reading from ring buffer, %d left\n", available);
+ s->frontJpegBuf = malloc(jpegBufSize);
+ s->backJpegBuf = malloc(jpegBufSize);
+ s->frontJpegBufLen = 0;
+ s->backJpegBufLen = 0;
+
+ // load all images, decode and fill buffer
+ SANE_Int status = SANE_STATUS_GOOD;
- if (s->mode_jpeg && !s->jpeg_header_seen) {
+ int eofFront = 0;
+ int eofBack = 0;
- status = eds_jpeg_read_header(s);
- if (status != SANE_STATUS_GOOD && --tries) {
- goto read_again;
+
+ status = eds_ring_init(&s->front, (s->params.bytes_per_line) * s->params.lines);
+ if (status != SANE_STATUS_GOOD) {
+ return status;
+ }
+
+ status = eds_ring_init(&s->back, (s->params.bytes_per_line) * s->params.lines);
+ if (status != SANE_STATUS_GOOD) {
+ return status;
+ }
+
+ while (1)
+ {
+ status = esci2_img(s, &read);
+ DBG(20, "acquire_jpeg_data read: %d, eof: %d, backside: %d, status: %d\n", read, s->eof, s->backside, status);
+ if (read)
+ {
+ if (s->backside)
+ {
+ SANE_Byte* backBuffer = s->backJpegBuf + s->backJpegBufLen;
+ memcpy(backBuffer, s->buf, read);
+ s->backJpegBufLen += read;
+ }else{
+ SANE_Byte* frontBuffer = s->frontJpegBuf + s->frontJpegBufLen ;
+ memcpy(frontBuffer, s->buf, read);
+ s->frontJpegBufLen += read;
}
}
+ if (status == SANE_STATUS_GOOD)
+ {
- if (s->mode_jpeg) {
- eds_jpeg_read(handle, data, max_length, &read);
- } else {
- eds_copy_image_from_ring(s, data, max_length, &read);
+ DBG(20, "continue acquire image\n");
+ continue;
}
-
- if (read == 0) {
- goto read_again;
+ else if (status == SANE_STATUS_EOF)
+ {
+ if (s->backside)
+ {
+ DBG(20, "eofBack\n");
+ eofBack = 1;
+ }else{
+ DBG(20, "eofFront\n");
+ eofFront = 1;
+ }
+ }else if (status == SANE_STATUS_CANCELLED)
+ {
+ // cancel cleanup
+ esci2_can(s);
+
+ free(s->frontJpegBuf);
+ free(s->backJpegBuf);
+ s->frontJpegBuf = NULL;
+ s->backJpegBuf = NULL;
+ return status;
+ }else{
+ // error occurs cleanup
+ free(s->frontJpegBuf);
+ free(s->backJpegBuf);
+ s->frontJpegBuf = NULL;
+ s->backJpegBuf = NULL;
+ return status;
}
- *length = read;
- return SANE_STATUS_GOOD;
+ if (s->isDuplexScan)
+ {
+ DBG(20, "eofFront = %d eofBack = %d\n", eofFront, eofBack);
+ // acquire finish
+ if (eofFront && eofBack)
+ {
+ DBG(20, "eofFront && eofBack end\n");
+ break;
+ }
+ }else{
+ if (eofFront)
+ {
+ DBG(20, "eofFront end\n");
+ break;
+ }
+ }
+ }
+ return SANE_STATUS_GOOD;
+}
- } else if (s->current == &s->back) {
+static SANE_Status
+acquire_raw_data(epsonds_scanner* s)
+{
+ SANE_Int read = 0;
- /* finished reading the back page, next
- * command should give us the EOF
- */
- DBG(18, "back side ring buffer empty\n");
- }
+ // load all images, decode and fill buffer
+ SANE_Int status = SANE_STATUS_GOOD;
- /* read until data or error */
+ int eofFront = 0;
+ int eofBack = 0;
+ int firstWrite = 1;
-read_again:
+ while (1)
+ {
+ DBG(20, "acquire_raw_data loop start\n");
+ status = esci2_img(s, &read);
+ DBG(20, "acquire_raw_data read: %d, eof: %d, backside: %d, status: %d\n", read, s->eof, s->backside, status);
+
+ if (read)
+ {
+ if (firstWrite)
+ {
+ status = eds_ring_init(&s->front, (s->params.bytes_per_line + s->dummy) * s->params.lines);
+ if (status != SANE_STATUS_GOOD) {
+ return status;
+ }
+
+ status = eds_ring_init(&s->back, (s->params.bytes_per_line + s->dummy) * s->params.lines);
+ if (status != SANE_STATUS_GOOD) {
+ return status;
+ }
+ firstWrite = 0;
+ }
- status = esci2_img(s, &read);
- if (status != SANE_STATUS_GOOD) {
- DBG(20, "read: %d, eof: %d, backside: %d, status: %d\n", read, s->eof, s->backside, status);
- }
+ DBG(20, "eds_ring_write start\n");
+ status = eds_ring_write(s->backside ? &s->back : &s->front, s->buf, read);
+ DBG(20, "eds_ring_write end\n");
+ }
+ DBG(20, "acquire_raw_data3\n");
- /* just got a back side page, alloc ring buffer if necessary
- * we didn't before because dummy was not known
- */
- if (s->backside) {
+ if (status == SANE_STATUS_GOOD)
+ {
+ DBG(20, "contiune acquire image\n");
+ continue;
+ }
+ else if (status == SANE_STATUS_EOF)
+ {
+ if (s->backside)
+ {
+ eofBack = 1;
+ }else{
+ eofFront = 1;
+ }
+ }
+ else if (status == SANE_STATUS_CANCELLED)
+ {
+ esci2_can(s);
+ return status;
+ }else{
+ // error occurs cleanup
+ return status;
+ }
- int required = s->params.lines * (s->params.bytes_per_line + s->dummy);
+ if (s->isDuplexScan)
+ {
+ // acquire finish
+ if (eofFront && eofBack)
+ {
+ break;
+ }
+ }else{
+ if (eofFront)
+ {
+ break;
+ }
+ }
+ }
- if (s->back.size < required) {
- DBG(20, "allocating buffer for the back side\n");
+ int needBytes = (s->params.bytes_per_line + s->dummy) * s->params.lines;
+ {
+ int available = eds_ring_avail(&s->front);
+ if (available < needBytes)
+ {
+ int required = needBytes - available;
+ unsigned char* padding = (unsigned char*)malloc(required);
+ memset(padding, 255, required);
+ eds_ring_write(&s->front, padding, required);
+ free(padding);
- status = eds_ring_init(&s->back, required);
- if (status != SANE_STATUS_GOOD) {
- return status;
- }
}
- }
- /* abort scanning when appropriate */
- if (status == SANE_STATUS_CANCELLED) {
- esci2_can(s);
- return status;
}
+ {
+ int available = eds_ring_avail(&s->back);
+ if (available > 0 && available < needBytes)
+ {
+ int required = needBytes - available;
+ unsigned char* padding = (unsigned char*)malloc(required);
+ memset(padding, 255, required);
+ eds_ring_write(&s->back, padding, required);
+ free(padding);
+ }
- if (s->eof && s->backside) {
- DBG(18, "back side scan finished\n");
}
- /* read again if no error and no data */
- if (read == 0 && status == SANE_STATUS_GOOD) {
- goto read_again;
+ if (s->isDuplexScan)
+ {
+ upside_down_backside_image(s);
}
- /* got something, write to ring */
- if (read) {
-
- DBG(20, " %d bytes read, %d lines, eof: %d, canceling: %d, status: %d, backside: %d\n",
- read, read / (s->params.bytes_per_line + s->dummy),
- s->canceling, s->eof, status, s->backside);
+ DBG(20, "acquire_raw_data finish");
+ return SANE_STATUS_GOOD;
- /* move data to the appropriate ring */
- status = eds_ring_write(s->backside ? &s->back : &s->front, s->buf, read);
+}
- if (0 && s->mode_jpeg && !s->jpeg_header_seen
- && status == SANE_STATUS_GOOD) {
+static SANE_Status
+acquire_and_decode_jpeg_data(epsonds_scanner* s)
+{
+ SANE_Int status = acquire_jpeg_data(s);
+ if (status == SANE_STATUS_GOOD)
+ {
+ DBG(20, "** %s: sane status = %d needToConvertBW = %d \n", __func__, status, s->needToConvertBW);
+
+ // process front page
+ if (s->frontJpegBufLen > 0)
+ {
+ eds_decode_jpeg(s, s->frontJpegBuf, s->frontJpegBufLen, &s->front,0, s->needToConvertBW);
+ free(s->frontJpegBuf);
+ s->frontJpegBuf = NULL;
+ }
+ // process back page
+ if (s->backJpegBufLen > 0)
+ {
+ eds_decode_jpeg(s, s->backJpegBuf, s->backJpegBufLen, &s->back, 1, s->needToConvertBW);
+ free(s->backJpegBuf);
+ s->backJpegBuf = NULL;
+ }
- status = eds_jpeg_read_header(s);
- if (status != SANE_STATUS_GOOD && --tries) {
- goto read_again;
+ if (s->isDuplexScan)
+ {
+ upside_down_backside_image(s);
}
+ }else{
+ DBG(20, "** %s: sane finish status = %d\n", __func__, status);
+ return status;
}
- }
-
- /* continue reading if appropriate */
- if (status == SANE_STATUS_GOOD)
return status;
+}
- /* cleanup */
- DBG(5, "** %s: cleaning up\n", __func__);
+int sumLength = 0;
+/* 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)
+{
+ epsonds_scanner *s = (epsonds_scanner *)handle;
+ SANE_Int read = 0;
- if (s->mode_jpeg) {
- eds_jpeg_finish(s);
+ if (s->canceling)
+ {
+ esci2_can(s);
+ *length = 0;
+ return SANE_STATUS_CANCELLED;
}
- eds_ring_flush(s->current);
+ int available = eds_ring_avail(s->current);
+ /* anything in the buffer? pass it to the frontend */
+ if (available > 0) {
- return status;
+ DBG(18, "reading from ring buffer, %d left\n", available);
+
+ eds_copy_image_from_ring(s, data, max_length, &read);
+
+ // data is empty fin
+ if (read == 0) {
+ *length = 0;
+ eds_ring_flush(s->current);
+ eds_ring_destory(s->current);
+ DBG(18, "returns EOF 2\n");
+ return SANE_STATUS_EOF;
+ }
+ *length = read;
+
+ return SANE_STATUS_GOOD;
+ }else{
+ *length = 0;
+ eds_ring_flush(s->current);
+ eds_ring_destory(s->current);
+ DBG(18, "returns EOF 1\n");
+ return SANE_STATUS_EOF;
+ }
}
/*
diff --git a/backend/epsonds.conf.in b/backend/epsonds.conf.in
index 1967a00..e2880fa 100644
--- a/backend/epsonds.conf.in
+++ b/backend/epsonds.conf.in
@@ -10,7 +10,8 @@ usb
# e.g.:
# usb 0x4b8 0x14c
-# Network (not yet supported!)
+#
+# Network
#
# net 192.168.1.123
-#net autodiscovery
+net autodiscovery
diff --git a/backend/epsonds.h b/backend/epsonds.h
index 04cb724..7f1b650 100644
--- a/backend/epsonds.h
+++ b/backend/epsonds.h
@@ -66,9 +66,14 @@
#define TPU_STR SANE_I18N("Transparency Unit")
#define ADF_STR SANE_I18N("Automatic Document Feeder")
+#define STRING_FLATBED SANE_I18N("Flatbed")
+#define STRING_ADFFRONT SANE_I18N("ADF Front")
+#define STRING_ADFDUPLEX SANE_I18N("ADF Duplex")
+
enum {
OPT_NUM_OPTS = 0,
- OPT_MODE_GROUP,
+ OPT_STANDARD_GROUP,
+ OPT_SOURCE,
OPT_MODE,
OPT_DEPTH,
OPT_RESOLUTION,
@@ -78,11 +83,10 @@ enum {
OPT_BR_X,
OPT_BR_Y,
OPT_EQU_GROUP,
- OPT_SOURCE,
OPT_EJECT,
OPT_LOAD,
- OPT_ADF_MODE,
OPT_ADF_SKEW,
+ OPT_ADF_CRP,
NUM_OPTIONS
};
@@ -119,6 +123,8 @@ struct epsonds_device
SANE_Bool has_raw; /* supports RAW format */
+ SANE_Bool has_mono; /*supprt M001*/
+
SANE_Bool has_fb; /* flatbed */
SANE_Range fbf_x_range; /* x range */
SANE_Range fbf_y_range; /* y range */
@@ -136,9 +142,13 @@ struct epsonds_device
SANE_Byte adf_alignment; /* left, center, right */
SANE_Byte adf_has_dfd; /* supports double feed detection */
+ SANE_Byte adf_has_crp; /* supports crp */
+
SANE_Bool has_tpu; /* tpu */
SANE_Range tpu_x_range; /* transparency unit x range */
SANE_Range tpu_y_range; /* transparency unit y range */
+
+ SANE_Int lut_id;
};
typedef struct epsonds_device epsonds_device;
@@ -171,6 +181,10 @@ struct epsonds_scanner
SANE_Int left, top, pages, dummy;
+ SANE_Int width_front, height_front;
+ SANE_Int width_back , height_back;
+ SANE_Int width_temp, height_temp;
+
/* jpeg stuff */
djpeg_dest_ptr jdst;
@@ -181,7 +195,18 @@ struct epsonds_scanner
/* network buffers */
unsigned char *netbuf, *netptr;
size_t netlen;
-};
+
+ SANE_Byte *frontJpegBuf, *backJpegBuf;
+ SANE_Int frontJpegBufLen, backJpegBufLen;
+ SANE_Int acquirePage;
+
+ SANE_Int isflatbedScan;
+ SANE_Int isDuplexScan;
+
+ SANE_Int needToConvertBW;
+
+ SANE_Int scanEnd;
+ };
typedef struct epsonds_scanner epsonds_scanner;
diff --git a/backend/escl.conf.in b/backend/escl.conf.in
index 18ea516..8c6bb04 100644
--- a/backend/escl.conf.in
+++ b/backend/escl.conf.in
@@ -11,6 +11,11 @@
# You can also configure a device on a single line starting with 'device'
# by writing a complete URL and an optional model name.
+
+# Name of the device not using the PDF format. Spaces are replaced by _. Please report the devices having this problem on sane-devel
+# Uncomment the line to add your device
+#pdfblacklist Brother_DCP-L2530DW_series
+
#device http://123.456.789.10:8080 OptionalModel1
#device https://123.456.789.10:443 "Optional Model 2"
#device https://123.456.789.10:443 "HP Color LaserJet FlowMFP M578" "hack=localhost"
diff --git a/backend/escl/escl.c b/backend/escl/escl.c
index bb62219..5f02ec8 100644
--- a/backend/escl/escl.c
+++ b/backend/escl/escl.c
@@ -432,7 +432,8 @@ attach_one_config(SANEI_Config __sane_unused__ *config, const char *line,
int port = 0;
SANE_Status status;
static ESCL_Device *escl_device = NULL;
-
+ if (*line == '#') return SANE_STATUS_GOOD;
+ if (!strncmp(line, "pdfblacklist", 12)) return SANE_STATUS_GOOD;
if (strncmp(line, "device", 6) == 0) {
char *name_str = NULL;
char *opt_model = NULL;
@@ -1135,6 +1136,37 @@ finish_hack:
fclose(fp);
}
+static char*
+_get_blacklist_pdf(void)
+{
+ FILE *fp;
+ char *blacklist = NULL;
+ SANE_Char line[PATH_MAX];
+
+ /* open configuration file */
+ fp = sanei_config_open (ESCL_CONFIG_FILE);
+ if (!fp)
+ {
+ DBG (2, "_get_blacklit: couldn't access %s\n", ESCL_CONFIG_FILE);
+ DBG (3, "_get_blacklist: exit\n");
+ }
+
+ /* loop reading the configuration file, all line beginning by "option " are
+ * parsed for value to store in configuration structure, other line are
+ * used are device to try to attach
+ */
+ while (sanei_config_read (line, PATH_MAX, fp))
+ {
+ if (!strncmp(line, "pdfblacklist", 12)) {
+ blacklist = strdup(line);
+ goto finish_;
+ }
+ }
+finish_:
+ DBG (3, "_get_blacklist_pdf: finish\n");
+ fclose(fp);
+ return blacklist;
+}
/**
@@ -1149,6 +1181,7 @@ finish_hack:
SANE_Status
sane_open(SANE_String_Const name, SANE_Handle *h)
{
+ char *blacklist = NULL;
DBG (10, "escl sane_open\n");
SANE_Status status;
escl_sane_t *handler = NULL;
@@ -1173,7 +1206,8 @@ sane_open(SANE_String_Const name, SANE_Handle *h)
return (SANE_STATUS_NO_MEM);
}
handler->device = device; // Handler owns device now.
- handler->scanner = escl_capabilities(device, &status);
+ blacklist = _get_blacklist_pdf();
+ handler->scanner = escl_capabilities(device, blacklist, &status);
if (status != SANE_STATUS_GOOD) {
escl_free_handler(handler);
return (status);
@@ -1222,9 +1256,11 @@ sane_cancel(SANE_Handle h)
}
handler->scanner->work = SANE_FALSE;
handler->cancel = SANE_TRUE;
- escl_scanner(handler->device, handler->result);
+ escl_scanner(handler->device, handler->scanner->scanJob, handler->result);
free(handler->result);
handler->result = NULL;
+ free(handler->scanner->scanJob);
+ handler->scanner->scanJob = NULL;
}
/**
@@ -1381,6 +1417,7 @@ sane_control_option(SANE_Handle h, SANE_Int n, SANE_Action a, void *v, SANE_Int
break;
case OPT_RESOLUTION:
handler->val[n].w = _get_resolution(handler, (int)(*(SANE_Word *) v));
+ handler->scanner->caps[handler->scanner->source].default_resolution = handler->val[n].w;
if (i)
*i |= SANE_INFO_RELOAD_PARAMS | SANE_INFO_RELOAD_OPTIONS | SANE_INFO_INEXACT;
break;
@@ -1591,7 +1628,7 @@ sane_start(SANE_Handle h)
return SANE_STATUS_NO_DOCS;
}
}
- status = escl_scan(handler->scanner, handler->device, handler->result);
+ status = escl_scan(handler->scanner, handler->device, handler->scanner->scanJob, handler->result);
if (status != SANE_STATUS_GOOD)
return (status);
if (!strcmp(handler->scanner->caps[handler->scanner->source].default_format, "image/jpeg"))
diff --git a/backend/escl/escl.h b/backend/escl/escl.h
index 67b11c7..142b4b4 100644
--- a/backend/escl/escl.h
+++ b/backend/escl/escl.h
@@ -156,6 +156,7 @@ typedef struct capabilities
SANE_String_Const *Sources;
int SourcesSize;
FILE *tmp;
+ char *scanJob;
unsigned char *img_data;
long img_size;
long img_read;
@@ -230,6 +231,7 @@ SANE_Status escl_status(const ESCL_Device *device,
SANE_Status *job);
capabilities_t *escl_capabilities(ESCL_Device *device,
+ char *blacklist,
SANE_Status *status);
char *escl_newjob(capabilities_t *scanner,
@@ -238,9 +240,11 @@ char *escl_newjob(capabilities_t *scanner,
SANE_Status escl_scan(capabilities_t *scanner,
const ESCL_Device *device,
+ char *scanJob,
char *result);
void escl_scanner(const ESCL_Device *device,
+ char *scanJob,
char *result);
typedef void CURL;
diff --git a/backend/escl/escl_capabilities.c b/backend/escl/escl_capabilities.c
index db194f9..7422896 100644
--- a/backend/escl/escl_capabilities.c
+++ b/backend/escl/escl_capabilities.c
@@ -40,6 +40,25 @@ struct cap
size_t size;
};
+static size_t
+header_callback(void *str, size_t size, size_t nmemb, void *userp)
+{
+ struct cap *header = (struct cap *)userp;
+ size_t realsize = size * nmemb;
+ char *content = realloc(header->memory, header->size + realsize + 1);
+
+ if (content == NULL) {
+ DBG( 1, "Not enough memory (realloc returned NULL)\n");
+ return (0);
+ }
+ header->memory = content;
+ memcpy(&(header->memory[header->size]), str, realsize);
+ header->size = header->size + realsize;
+ header->memory[header->size] = 0;
+ return (realsize);
+}
+
+
/**
* \fn static SANE_String_Const convert_elements(SANE_String_Const str)
* \brief Function that converts the 'color modes' of the scanner (color/gray) to be understood by SANE.
@@ -182,10 +201,10 @@ find_valor_of_array_variables(xmlNode *node, capabilities_t *scanner, int type)
{
const char *name = (const char *)node->name;
if (strcmp(name, "ColorMode") == 0) {
- const char *color = (SANE_String_Const)xmlNodeGetContent(node);
- if (type == PLATEN || strcmp(color, "BlackAndWhite1"))
+ const char *color = (SANE_String_Const)xmlNodeGetContent(node);
+ if (type == PLATEN || strcmp(color, "BlackAndWhite1"))
scanner->caps[type].ColorModes = char_to_array(scanner->caps[type].ColorModes, &scanner->caps[type].ColorModesSize, (SANE_String_Const)xmlNodeGetContent(node), 1);
- }
+ }
else if (strcmp(name, "ContentType") == 0)
scanner->caps[type].ContentTypes = char_to_array(scanner->caps[type].ContentTypes, &scanner->caps[type].ContentTypesSize, (SANE_String_Const)xmlNodeGetContent(node), 0);
else if (strcmp(name, "DocumentFormat") == 0)
@@ -385,6 +404,16 @@ find_true_variables(xmlNode *node, capabilities_t *scanner, int type)
return (0);
}
+static char*
+replace_char(char* str, char find, char replace){
+ char *current_pos = strchr(str,find);
+ while (current_pos) {
+ *current_pos = replace;
+ current_pos = strchr(current_pos,find);
+ }
+ return str;
+}
+
/**
* \fn static int print_xml_c(xmlNode *node, capabilities_t *scanner)
* \brief Function that browses the xml file, node by node.
@@ -454,6 +483,37 @@ _reduce_color_modes(capabilities_t *scanner)
}
}
+static void
+_delete_pdf(capabilities_t *scanner)
+{
+ int type = 0;
+ for (type = 0; type < 3; type++) {
+ if (scanner->caps[type].ColorModesSize) {
+ if (scanner->caps[type].default_format) {
+ scanner->caps[type].have_pdf = -1;
+ if (!strcmp(scanner->caps[type].default_format, "application/pdf")) {
+ free(scanner->caps[type].default_format);
+ if (scanner->caps[type].have_tiff > -1)
+ scanner->caps[type].default_format = strdup("image/tiff");
+ else if (scanner->caps[type].have_png > -1)
+ scanner->caps[type].default_format = strdup("image/png");
+ else if (scanner->caps[type].have_jpeg > -1)
+ scanner->caps[type].default_format = strdup("image/jpeg");
+ }
+ free(scanner->caps[type].ColorModes);
+ scanner->caps[type].ColorModes = NULL;
+ scanner->caps[type].ColorModesSize = 0;
+ scanner->caps[type].ColorModes = char_to_array(scanner->caps[type].ColorModes,
+ &scanner->caps[type].ColorModesSize,
+ (SANE_String_Const)SANE_VALUE_SCAN_MODE_GRAY, 0);
+ scanner->caps[type].ColorModes = char_to_array(scanner->caps[type].ColorModes,
+ &scanner->caps[type].ColorModesSize,
+ (SANE_String_Const)SANE_VALUE_SCAN_MODE_COLOR, 0);
+ }
+ }
+ }
+}
+
/**
* \fn capabilities_t *escl_capabilities(const ESCL_Device *device, SANE_Status *status)
* \brief Function that finally recovers all the capabilities of the scanner, using curl.
@@ -463,15 +523,17 @@ _reduce_color_modes(capabilities_t *scanner)
* \return scanner (the structure that stocks all the capabilities elements)
*/
capabilities_t *
-escl_capabilities(ESCL_Device *device, SANE_Status *status)
+escl_capabilities(ESCL_Device *device, char *blacklist, SANE_Status *status)
{
capabilities_t *scanner = (capabilities_t*)calloc(1, sizeof(capabilities_t));
CURL *curl_handle = NULL;
struct cap *var = NULL;
+ struct cap *header = NULL;
xmlDoc *data = NULL;
xmlNode *node = NULL;
int i = 0;
const char *scanner_capabilities = "/eSCL/ScannerCapabilities";
+ SANE_Bool use_pdf = SANE_TRUE;
*status = SANE_STATUS_GOOD;
if (device == NULL)
@@ -481,11 +543,22 @@ escl_capabilities(ESCL_Device *device, SANE_Status *status)
*status = SANE_STATUS_NO_MEM;
var->memory = malloc(1);
var->size = 0;
+ header = (struct cap *)calloc(1, sizeof(struct cap));
+ if (header == NULL)
+ *status = SANE_STATUS_NO_MEM;
+ header->memory = malloc(1);
+ header->size = 0;
curl_handle = curl_easy_init();
escl_curl_url(curl_handle, device, scanner_capabilities);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, memory_callback_c);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)var);
+ curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, header_callback);
+ curl_easy_setopt(curl_handle, CURLOPT_HEADERDATA, (void *)header);
+ curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
CURLcode res = curl_easy_perform(curl_handle);
+ if (res == CURLE_OK)
+ DBG( 1, "Create NewJob : the scanner header responded : [%s]\n", header->memory);
if (res != CURLE_OK) {
DBG( 1, "The scanner didn't respond: %s\n", curl_easy_strerror(res));
*status = SANE_STATUS_INVAL;
@@ -503,18 +576,46 @@ escl_capabilities(ESCL_Device *device, SANE_Status *status)
goto clean;
}
+ if (device->hack &&
+ header &&
+ header->memory &&
+ strstr(header->memory, "Server: HP_Compact_Server"))
+ device->hack = curl_slist_append(NULL, "Host: localhost");
+
scanner->source = 0;
scanner->Sources = (SANE_String_Const *)malloc(sizeof(SANE_String_Const) * 4);
for (i = 0; i < 4; i++)
scanner->Sources[i] = NULL;
print_xml_c(node, device, scanner, -1);
- _reduce_color_modes(scanner);
+ DBG (3, "1-blacklist_pdf: %s\n", (use_pdf ? "TRUE" : "FALSE") );
+ if (device->model_name != NULL) {
+ if (strcasestr(device->model_name, "MFC-J985DW")) {
+ DBG (3, "blacklist_pdf: device not support PDF\n");
+ use_pdf = SANE_FALSE;
+ }
+ else if (blacklist) {
+ char *model = strdup(device->model_name);
+ replace_char(model, ' ', '_');
+ if (strcasestr(blacklist, model)) {
+ use_pdf = SANE_FALSE;
+ }
+ free(model);
+ }
+ }
+ DBG (3, "1-blacklist_pdf: %s\n", (use_pdf ? "TRUE" : "FALSE") );
+ if (use_pdf)
+ _reduce_color_modes(scanner);
+ else
+ _delete_pdf(scanner);
clean:
xmlFreeDoc(data);
clean_data:
xmlCleanupParser();
xmlMemoryDump();
curl_easy_cleanup(curl_handle);
+ if (header)
+ free(header->memory);
+ free(header);
if (var)
free(var->memory);
free(var);
diff --git a/backend/escl/escl_devices.c b/backend/escl/escl_devices.c
index 3ca28de..92e064b 100644
--- a/backend/escl/escl_devices.c
+++ b/backend/escl/escl_devices.c
@@ -74,6 +74,7 @@ resolve_callback(AvahiServiceResolver *r, AVAHI_GCC_UNUSED AvahiIfIndex interfac
avahi_address_snprint(a, sizeof(a), address);
t = avahi_string_list_to_string(txt);
if (strstr(t, "\"rs=eSCL\"") || strstr(t, "\"rs=/eSCL\"")) {
+ char ip_add[PATH_MAX] = {0};
s = avahi_string_list_find(txt, "is");
if (s && s->size > 3)
is = (const char*)s->text + 3;
@@ -84,7 +85,14 @@ resolve_callback(AvahiServiceResolver *r, AVAHI_GCC_UNUSED AvahiIfIndex interfac
uuid = (const char*)s->text + 5;
else
uuid = (const char*)NULL;
- escl_device_add(port, name, a, is, uuid, (char*)type);
+ DBG (10, "resolve_callback [%s]\n", a);
+ if (strstr(a, "127.0.0.1") != NULL) {
+ snprintf(ip_add, sizeof(ip_add), "%s", "localhost");
+ DBG (10,"resolve_callback fix redirect [localhost]\n");
+ }
+ else
+ snprintf(ip_add, sizeof(ip_add), "%s", a);
+ escl_device_add(port, name, ip_add, is, uuid, (char*)type);
}
}
}
diff --git a/backend/escl/escl_jpeg.c b/backend/escl/escl_jpeg.c
index 651e7c5..1dd3ec9 100644
--- a/backend/escl/escl_jpeg.c
+++ b/backend/escl/escl_jpeg.c
@@ -192,34 +192,41 @@ get_JPEG_data(capabilities_t *scanner, int *width, int *height, int *bps)
cinfo.out_color_space = JCS_RGB;
cinfo.quantize_colors = FALSE;
jpeg_calc_output_dimensions(&cinfo);
- if (cinfo.output_width < (unsigned int)scanner->caps[scanner->source].width)
- scanner->caps[scanner->source].width = cinfo.output_width;
- if (scanner->caps[scanner->source].pos_x < 0)
- scanner->caps[scanner->source].pos_x = 0;
-
- if (cinfo.output_height < (unsigned int)scanner->caps[scanner->source].height)
- scanner->caps[scanner->source].height = cinfo.output_height;
- if (scanner->caps[scanner->source].pos_y < 0)
- scanner->caps[scanner->source].pos_y = 0;
+ double ratio = (double)cinfo.output_width / (double)scanner->caps[scanner->source].width;
+ int rw = (int)((double)scanner->caps[scanner->source].width * ratio);
+ int rh = (int)((double)scanner->caps[scanner->source].height * ratio);
+ int rx = (int)((double)scanner->caps[scanner->source].pos_x * ratio);
+ int ry = (int)((double)scanner->caps[scanner->source].pos_y * ratio);
+
+
+ if (cinfo.output_width < (unsigned int)rw)
+ rw = cinfo.output_width;
+ if (rx < 0)
+ rx = 0;
+
+ if (cinfo.output_height < (unsigned int)rh)
+ rh = cinfo.output_height;
+ if (ry < 0)
+ ry = 0;
DBG(10, "1-JPEF Geometry [%dx%d|%dx%d]\n",
- scanner->caps[scanner->source].pos_x,
- scanner->caps[scanner->source].pos_y,
- scanner->caps[scanner->source].width,
- scanner->caps[scanner->source].height);
- x_off = scanner->caps[scanner->source].pos_x;
- if (x_off > (unsigned int)scanner->caps[scanner->source].width) {
- w = scanner->caps[scanner->source].width;
+ rx,
+ ry,
+ rw,
+ rh);
+ x_off = rx;
+ if (x_off > (unsigned int)rw) {
+ w = rw;
x_off = 0;
}
else
- w = scanner->caps[scanner->source].width - x_off;
- y_off = scanner->caps[scanner->source].pos_y;
- if(y_off > (unsigned int)scanner->caps[scanner->source].height) {
- h = scanner->caps[scanner->source].height;
+ w = rw - x_off;
+ y_off = ry;
+ if(y_off > (unsigned int)rh) {
+ h = rh;
y_off = 0;
}
else
- h = scanner->caps[scanner->source].height - y_off;
+ h = rh - y_off;
DBG(10, "2-JPEF Geometry [%dx%d|%dx%d]\n",
x_off,
y_off,
@@ -242,7 +249,7 @@ get_JPEG_data(capabilities_t *scanner, int *width, int *height, int *bps)
if (y_off > 0)
jpeg_skip_scanlines(&cinfo, y_off);
pos = 0;
- while (cinfo.output_scanline < (unsigned int)scanner->caps[scanner->source].height) {
+ while (cinfo.output_scanline < (unsigned int)rh) {
rowptr[0] = (JSAMPROW)surface + (lineSize * pos); // ..cinfo.output_scanline);
jpeg_read_scanlines(&cinfo, rowptr, (JDIMENSION) 1);
pos++;
@@ -253,7 +260,7 @@ get_JPEG_data(capabilities_t *scanner, int *width, int *height, int *bps)
*width = w;
*height = h;
*bps = cinfo.output_components;
- jpeg_finish_decompress(&cinfo);
+ // jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);
fclose(scanner->tmp);
scanner->tmp = NULL;
diff --git a/backend/escl/escl_newjob.c b/backend/escl/escl_newjob.c
index 24bfbc9..98a953f 100644
--- a/backend/escl/escl_newjob.c
+++ b/backend/escl/escl_newjob.c
@@ -277,6 +277,8 @@ wake_up_device:
curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDSIZE, upload->size);
curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, download_callback);
curl_easy_setopt(curl_handle, CURLOPT_HEADERDATA, (void *)download);
+ curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
CURLcode res = curl_easy_perform(curl_handle);
if (res != CURLE_OK) {
DBG( 1, "Create NewJob : the scanner responded incorrectly: %s\n", curl_easy_strerror(res));
@@ -296,7 +298,17 @@ wake_up_device:
result = strdup(location);
DBG( 1, "Create NewJob : %s\n", result);
*temporary = '\n';
+ *location = '\0';
+ location = strrchr(tmp_location,'/');
wakup_count = 0;
+ if (location) {
+ location++;
+ scanner->scanJob = strdup(location);
+ DBG( 1, "Full location header [%s]\n", scanner->scanJob);
+ }
+ else
+ scanner->scanJob = strdup("ScanJobs");
+ *location = '/';
}
}
if (result == NULL) {
diff --git a/backend/escl/escl_reset.c b/backend/escl/escl_reset.c
index 7494dda..95e3f2d 100644
--- a/backend/escl/escl_reset.c
+++ b/backend/escl/escl_reset.c
@@ -44,10 +44,10 @@ write_callback(void __sane_unused__*str,
* This function is called in the 'sane_cancel' function.
*/
void
-escl_scanner(const ESCL_Device *device, char *result)
+escl_scanner(const ESCL_Device *device, char *scanJob, char *result)
{
CURL *curl_handle = NULL;
- const char *scan_jobs = "/eSCL/ScanJobs";
+ const char *scan_jobs = "/eSCL/";
const char *scanner_start = "/NextDocument";
char scan_cmd[PATH_MAX] = { 0 };
int i = 0;
@@ -58,10 +58,12 @@ escl_scanner(const ESCL_Device *device, char *result)
CURL_CALL:
curl_handle = curl_easy_init();
if (curl_handle != NULL) {
- snprintf(scan_cmd, sizeof(scan_cmd), "%s%s%s",
- scan_jobs, result, scanner_start);
+ snprintf(scan_cmd, sizeof(scan_cmd), "%s%s%s%s",
+ scan_jobs, scanJob, result, scanner_start);
escl_curl_url(curl_handle, device, scan_cmd);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_callback);
+ curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
if (curl_easy_perform(curl_handle) == CURLE_OK) {
curl_easy_getinfo(curl_handle, CURLINFO_RESPONSE_CODE, &answer);
i++;
diff --git a/backend/escl/escl_scan.c b/backend/escl/escl_scan.c
index 53bd438..3350c83 100644
--- a/backend/escl/escl_scan.c
+++ b/backend/escl/escl_scan.c
@@ -57,10 +57,10 @@ write_callback(void *str, size_t size, size_t nmemb, void *userp)
* \return status (if everything is OK, status = SANE_STATUS_GOOD, otherwise, SANE_STATUS_NO_MEM/SANE_STATUS_INVAL)
*/
SANE_Status
-escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *result)
+escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *scanJob, char *result)
{
CURL *curl_handle = NULL;
- const char *scan_jobs = "/eSCL/ScanJobs";
+ const char *scan_jobs = "/eSCL/";
const char *scanner_start = "/NextDocument";
char scan_cmd[PATH_MAX] = { 0 };
SANE_Status status = SANE_STATUS_GOOD;
@@ -70,10 +70,12 @@ escl_scan(capabilities_t *scanner, const ESCL_Device *device, char *result)
scanner->real_read = 0;
curl_handle = curl_easy_init();
if (curl_handle != NULL) {
- snprintf(scan_cmd, sizeof(scan_cmd), "%s%s%s",
- scan_jobs, result, scanner_start);
+ snprintf(scan_cmd, sizeof(scan_cmd), "%s%s%s%s",
+ scan_jobs, scanJob, result, scanner_start);
escl_curl_url(curl_handle, device, scan_cmd);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_callback);
+ curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
if (scanner->tmp)
fclose(scanner->tmp);
scanner->tmp = tmpfile();
diff --git a/backend/escl/escl_status.c b/backend/escl/escl_status.c
index a68f6ea..1f848a2 100644
--- a/backend/escl/escl_status.c
+++ b/backend/escl/escl_status.c
@@ -220,6 +220,8 @@ reload:
escl_curl_url(curl_handle, device, scanner_status);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, memory_callback_s);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)var);
+ curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1L);
+ curl_easy_setopt(curl_handle, CURLOPT_MAXREDIRS, 3L);
CURLcode res = curl_easy_perform(curl_handle);
if (res != CURLE_OK) {
DBG( 1, "The scanner didn't respond: %s\n", curl_easy_strerror(res));
diff --git a/backend/fujitsu.c b/backend/fujitsu.c
index 6c1c8f6..d17e015 100644
--- a/backend/fujitsu.c
+++ b/backend/fujitsu.c
@@ -6,7 +6,7 @@
Copyright (C) 2000 Randolph Bentson
Copyright (C) 2001 Frederik Ramm
Copyright (C) 2001-2004 Oliver Schirrmeister
- Copyright (C) 2003-2019 m. allan noah
+ Copyright (C) 2003-2021 m. allan noah
JPEG output and low memory usage support funded by:
Archivista GmbH, www.archivista.ch
@@ -770,10 +770,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (10, "sane_init: start\n");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (5, "sane_init: fujitsu backend %d.%d.%d, from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
sanei_magic_init();
diff --git a/backend/fujitsu.conf.in b/backend/fujitsu.conf.in
index 8e2115f..1645e87 100644
--- a/backend/fujitsu.conf.in
+++ b/backend/fujitsu.conf.in
@@ -264,3 +264,6 @@ usb 0x04c5 0x160a
#fi-7800
usb 0x04c5 0x160b
+
+#ScanSnap iX1600
+usb 0x04c5 0x1632
diff --git a/backend/genesys.conf.in b/backend/genesys.conf.in
index 21506f6..d9c596a 100644
--- a/backend/genesys.conf.in
+++ b/backend/genesys.conf.in
@@ -131,6 +131,9 @@ usb 0x07b3 0x0900
# Plustek OpticFilm 7200
usb 0x07b3 0x0807
+# Plustek OpticFilm 7200 V2
+usb 0x07b3 0x0c07
+
# Plustek OpticFilm 7200i
usb 0x07b3 0x0c04
diff --git a/backend/genesys/calibration.h b/backend/genesys/calibration.h
index fc82850..fd0f627 100644
--- a/backend/genesys/calibration.h
+++ b/backend/genesys/calibration.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_CALIBRATION_H
diff --git a/backend/genesys/command_set.h b/backend/genesys/command_set.h
index 47bdfbd..b031a8c 100644
--- a/backend/genesys/command_set.h
+++ b/backend/genesys/command_set.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_COMMAND_SET_H
diff --git a/backend/genesys/device.cpp b/backend/genesys/device.cpp
index 4b1940b..5411d7b 100644
--- a/backend/genesys/device.cpp
+++ b/backend/genesys/device.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/device.h b/backend/genesys/device.h
index f998714..842856b 100644
--- a/backend/genesys/device.h
+++ b/backend/genesys/device.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_DEVICE_H
diff --git a/backend/genesys/enums.cpp b/backend/genesys/enums.cpp
index ce0ad10..460e73f 100644
--- a/backend/genesys/enums.cpp
+++ b/backend/genesys/enums.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -279,6 +258,7 @@ std::ostream& operator<<(std::ostream& out, GpioId id)
case GpioId::CANON_8600F: out << "CANON_8600F"; break;
case GpioId::DP665: out << "DP665"; break;
case GpioId::DP685: out << "DP685"; break;
+ case GpioId::G4010: out << "G4010"; break;
case GpioId::G4050: out << "G4050"; break;
case GpioId::HP2300: out << "HP2300"; break;
case GpioId::HP2400: out << "HP2400"; break;
diff --git a/backend/genesys/enums.h b/backend/genesys/enums.h
index ae5dedd..88fc9c3 100644
--- a/backend/genesys/enums.h
+++ b/backend/genesys/enums.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_ENUMS_H
@@ -372,6 +351,7 @@ enum class GpioId : unsigned
DP665,
DP685,
G4050,
+ G4010,
HP2300,
HP2400,
HP3670,
@@ -525,6 +505,9 @@ enum class ModelFlag : unsigned
// disable fast feeding mode on this scanner
DISABLE_FAST_FEEDING = 1 << 14,
+ // scan gray scans as color and combine on host side
+ HOST_SIDE_GRAY = 1 << 15,
+
// the scanner uses multi-segment sensors that must be handled during calibration
SIS_SENSOR = 1 << 16,
diff --git a/backend/genesys/error.cpp b/backend/genesys/error.cpp
index e302e22..6f892de 100644
--- a/backend/genesys/error.cpp
+++ b/backend/genesys/error.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/error.h b/backend/genesys/error.h
index e95313f..93a428b 100644
--- a/backend/genesys/error.h
+++ b/backend/genesys/error.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_ERROR_H
diff --git a/backend/genesys/fwd.h b/backend/genesys/fwd.h
index 89ca150..9937654 100644
--- a/backend/genesys/fwd.h
+++ b/backend/genesys/fwd.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_FWD_H
diff --git a/backend/genesys/genesys.cpp b/backend/genesys/genesys.cpp
index 9552fa9..5aba58c 100644
--- a/backend/genesys/genesys.cpp
+++ b/backend/genesys/genesys.cpp
@@ -29,27 +29,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
/*
@@ -674,9 +653,9 @@ void scanner_setup_sensor(Genesys_Device& dev, const Genesys_Sensor& sensor,
regs.set8(custom_reg.address, custom_reg.value);
}
- if (dev.model->asic_type != AsicType::GL841 &&
- dev.model->asic_type != AsicType::GL843)
+ if (dev.model->asic_type != AsicType::GL843)
{
+ // FIXME: remove the above check
regs_set_exposure(dev.model->asic_type, regs, sensor.exposure);
}
@@ -795,6 +774,8 @@ void scanner_move(Genesys_Device& dev, ScanMethod scan_method, unsigned steps, D
session.params.scan_method = scan_method;
session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = ColorFilter::GREEN;
+ session.params.contrast_adjustment = dev.settings.contrast;
+ session.params.brightness_adjustment = dev.settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
@@ -959,6 +940,8 @@ void scanner_move_back_home(Genesys_Device& dev, bool wait_until_home)
session.params.scan_method = dev.settings.scan_method;
session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = ColorFilter::GREEN;
+ session.params.contrast_adjustment = dev.settings.contrast;
+ session.params.brightness_adjustment = dev.settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
@@ -1100,6 +1083,8 @@ void scanner_move_back_home_ta(Genesys_Device& dev)
session.params.scan_method = scan_method;
session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = ColorFilter::GREEN;
+ session.params.contrast_adjustment = dev.settings.contrast;
+ session.params.brightness_adjustment = dev.settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
@@ -1210,6 +1195,8 @@ void scanner_search_strip(Genesys_Device& dev, bool forward, bool black)
session.params.scan_method = dev.settings.scan_method;
session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = ColorFilter::RED;
+ session.params.contrast_adjustment = dev.settings.contrast;
+ session.params.brightness_adjustment = dev.settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA;
if (dev.model->asic_type != AsicType::GL841 && !forward) {
@@ -1506,6 +1493,8 @@ void scanner_offset_calibration(Genesys_Device& dev, const Genesys_Sensor& senso
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev.model->asic_type == AsicType::GL843 ? ColorFilter::RED
: dev.settings.color_filter;
+ session.params.contrast_adjustment = dev.settings.contrast;
+ session.params.brightness_adjustment = dev.settings.brightness;
session.params.flags = flags;
compute_session(&dev, session, *calib_sensor);
@@ -1815,6 +1804,8 @@ void scanner_coarse_gain_calibration(Genesys_Device& dev, const Genesys_Sensor&
session.params.scan_method = dev.settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev.settings.color_filter;
+ session.params.contrast_adjustment = dev.settings.contrast;
+ session.params.brightness_adjustment = dev.settings.brightness;
session.params.flags = flags;
compute_session(&dev, session, *calib_sensor);
@@ -1873,7 +1864,8 @@ void scanner_coarse_gain_calibration(Genesys_Device& dev, const Genesys_Sensor&
float curr_output = 0;
float target_value = 0;
- if (dev.model->asic_type == AsicType::GL842 ||
+ if (dev.model->asic_type == AsicType::GL841 ||
+ dev.model->asic_type == AsicType::GL842 ||
dev.model->asic_type == AsicType::GL843)
{
std::vector<uint16_t> values;
@@ -1889,18 +1881,6 @@ void scanner_coarse_gain_calibration(Genesys_Device& dev, const Genesys_Sensor&
curr_output = static_cast<float>(values[unsigned((values.size() - 1) * 0.95)]);
target_value = calib_sensor->gain_white_ref * coeff;
- } else if (dev.model->asic_type == AsicType::GL841) {
- // FIXME: use the GL843 approach
- unsigned max = 0;
- for (std::size_t x = 0; x < image.get_width(); x++) {
- auto value = image.get_raw_channel(x, 0, ch);
- if (value > max) {
- max = value;
- }
- }
-
- curr_output = max;
- target_value = 65535.0f;
} else {
// FIXME: use the GL843 approach
auto width = image.get_width();
@@ -1998,7 +1978,8 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
const auto& calib_sensor = sanei_genesys_find_sensor(&dev, resolution, channels,
dev.settings.scan_method);
- if (dev.model->asic_type == AsicType::GL845 ||
+ if (dev.model->asic_type == AsicType::GL841 ||
+ dev.model->asic_type == AsicType::GL845 ||
dev.model->asic_type == AsicType::GL846 ||
dev.model->asic_type == AsicType::GL847 ||
dev.model->asic_type == AsicType::GL124)
@@ -2006,14 +1987,9 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
regs = dev.reg; // FIXME: apply this to all ASICs
}
- unsigned yres = resolution;
- if (dev.model->asic_type == AsicType::GL841) {
- yres = dev.settings.yres; // FIXME: remove this
- }
-
ScanSession session;
session.params.xres = resolution;
- session.params.yres = yres;
+ session.params.yres = resolution;
session.params.startx = 0;
session.params.starty = 0;
session.params.pixels = dev.model->x_size_calib_mm * resolution / MM_PER_INCH;
@@ -2023,6 +1999,8 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
session.params.scan_method = dev.settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev.settings.color_filter;
+ session.params.contrast_adjustment = dev.settings.contrast;
+ session.params.brightness_adjustment = dev.settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
@@ -2032,27 +2010,14 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
dev.cmd_set->init_regs_for_scan_session(&dev, calib_sensor, &regs, session);
- if (dev.model->asic_type == AsicType::GL841) {
- dev.interface->write_registers(regs); // FIXME: remove this
- }
-
std::uint16_t exp[3];
- if (dev.model->asic_type == AsicType::GL841) {
- exp[0] = sensor.exposure.red;
- exp[1] = sensor.exposure.green;
- exp[2] = sensor.exposure.blue;
- } else {
- exp[0] = calib_sensor.exposure.red;
- exp[1] = calib_sensor.exposure.green;
- exp[2] = calib_sensor.exposure.blue;
- }
+ exp[0] = calib_sensor.exposure.red;
+ exp[1] = calib_sensor.exposure.green;
+ exp[2] = calib_sensor.exposure.blue;
std::uint16_t target = sensor.gain_white_ref * 256;
- std::uint16_t min_exposure = 500; // only gl841
- std::uint16_t max_exposure = ((exp[0] + exp[1] + exp[2]) / 3) * 2; // only gl841
-
std::uint16_t top[3] = {};
std::uint16_t bottom[3] = {};
@@ -2088,16 +2053,6 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
for (unsigned i_test = 0; i_test < 100 && !acceptable; ++i_test) {
regs_set_exposure(dev.model->asic_type, regs, { exp[0], exp[1], exp[2] });
- if (dev.model->asic_type == AsicType::GL841) {
- // FIXME: remove
- dev.interface->write_register(0x10, (exp[0] >> 8) & 0xff);
- dev.interface->write_register(0x11, exp[0] & 0xff);
- dev.interface->write_register(0x12, (exp[1] >> 8) & 0xff);
- dev.interface->write_register(0x13, exp[1] & 0xff);
- dev.interface->write_register(0x14, (exp[2] >> 8) & 0xff);
- dev.interface->write_register(0x15, exp[2] & 0xff);
- }
-
dev.interface->write_registers(regs);
dbg.log(DBG_info, "starting line reading");
@@ -2108,15 +2063,13 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
if (dev.model->asic_type == AsicType::GL841) {
scanner_stop_action(dev);
dev.cmd_set->move_back_home(&dev, true);
- return { exp[0], exp[1], exp[2] };
} else if (dev.model->asic_type == AsicType::GL124) {
scanner_stop_action(dev);
- return calib_sensor.exposure;
} else {
scanner_stop_action(dev);
dev.cmd_set->move_back_home(&dev, true);
- return calib_sensor.exposure;
}
+ return { exp[0], exp[1], exp[2] };
}
auto image = read_unshuffled_image_from_scanner(&dev, session, session.output_line_bytes);
@@ -2142,57 +2095,8 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
acceptable = true;
- if (dev.model->asic_type == AsicType::GL841) {
- 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 = false;
- }
-
- // led exposure is not acceptable if white level is too low.
- // ~80 hardcoded value for white level
- if (avg[0] < 20000 || avg[1] < 20000 || avg[2] < 20000) {
- acceptable = false;
- }
-
- // for scanners using target value
- if (target > 0) {
- acceptable = true;
- for (unsigned i = 0; i < 3; i++) {
- // we accept +- 2% delta from target
- if (std::abs(avg[i] - target) > target / 50) {
- exp[i] = (exp[i] * target) / avg[i];
- acceptable = false;
- }
- }
- } else {
- if (!acceptable) {
- unsigned avga = (avg[0] + avg[1] + avg[2]) / 3;
- exp[0] = (exp[0] * avga) / avg[0];
- exp[1] = (exp[1] * avga) / avg[1];
- exp[2] = (exp[2] * 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
- */
- unsigned avge = (exp[0] + exp[1] + exp[2]) / 3;
-
- if (avge > max_exposure) {
- exp[0] = (exp[0] * max_exposure) / avge;
- exp[1] = (exp[1] * max_exposure) / avge;
- exp[2] = (exp[2] * max_exposure) / avge;
- }
- if (avge < min_exposure) {
- exp[0] = (exp[0] * min_exposure) / avge;
- exp[1] = (exp[1] * min_exposure) / avge;
- exp[2] = (exp[2] * min_exposure) / avge;
- }
-
- }
- }
- } else if (dev.model->asic_type == AsicType::GL845 ||
- dev.model->asic_type == AsicType::GL846)
+ if (dev.model->asic_type == AsicType::GL845 ||
+ dev.model->asic_type == AsicType::GL846)
{
for (unsigned i = 0; i < 3; i++) {
if (avg[i] < bottom[i]) {
@@ -2225,7 +2129,9 @@ SensorExposure scanner_led_calibration(Genesys_Device& dev, const Genesys_Sensor
acceptable = false;
}
}
- } else if (dev.model->asic_type == AsicType::GL124) {
+ } else if (dev.model->asic_type == AsicType::GL841 ||
+ dev.model->asic_type == AsicType::GL124)
+ {
for (unsigned i = 0; i < 3; i++) {
// we accept +- 2% delta from target
if (std::abs(avg[i] - target) > target / 50) {
@@ -4366,12 +4272,6 @@ static Genesys_Settings calculate_scan_settings(Genesys_Scanner* s)
settings.color_filter = ColorFilter::NONE;
}
- if (s->color_filter == "None") {
- settings.true_gray = 1;
- } else {
- settings.true_gray = 0;
- }
-
// brightness and contrast only for for 8 bit scans
if (s->bit_depth == 8) {
settings.contrast = (s->contrast * 127) / 100;
@@ -4992,16 +4892,28 @@ static void init_options(Genesys_Scanner* s)
s->opt[OPT_POWER_SW].cap = SANE_CAP_INACTIVE;
/* extra button */
- s->opt[OPT_EXTRA_SW].name = "extra";
- s->opt[OPT_EXTRA_SW].title = SANE_I18N ("Extra button");
- s->opt[OPT_EXTRA_SW].desc = SANE_I18N ("Extra button");
- s->opt[OPT_EXTRA_SW].type = SANE_TYPE_BOOL;
- s->opt[OPT_EXTRA_SW].unit = SANE_UNIT_NONE;
- if (model->buttons & GENESYS_HAS_EXTRA_SW)
- s->opt[OPT_EXTRA_SW].cap =
- SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
- else
- s->opt[OPT_EXTRA_SW].cap = SANE_CAP_INACTIVE;
+ s->opt[OPT_EXTRA_SW].name = "extra";
+ s->opt[OPT_EXTRA_SW].title = SANE_I18N("Extra button");
+ s->opt[OPT_EXTRA_SW].desc = SANE_I18N("Extra button");
+ s->opt[OPT_EXTRA_SW].type = SANE_TYPE_BOOL;
+ s->opt[OPT_EXTRA_SW].unit = SANE_UNIT_NONE;
+ if (model->buttons & GENESYS_HAS_EXTRA_SW) {
+ s->opt[OPT_EXTRA_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
+ } else {
+ s->opt[OPT_EXTRA_SW].cap = SANE_CAP_INACTIVE;
+ }
+
+ // transparency/scan_film button
+ s->opt[OPT_TRANSP_SW].name = "transparency";
+ s->opt[OPT_TRANSP_SW].title = SANE_I18N ("Transparency button");
+ s->opt[OPT_TRANSP_SW].desc = SANE_I18N ("Transparency button");
+ s->opt[OPT_TRANSP_SW].type = SANE_TYPE_BOOL;
+ s->opt[OPT_TRANSP_SW].unit = SANE_UNIT_NONE;
+ if (model->buttons & GENESYS_HAS_TRANSP_SW) {
+ s->opt[OPT_TRANSP_SW].cap = SANE_CAP_SOFT_DETECT | SANE_CAP_HARD_SELECT | SANE_CAP_ADVANCED;
+ } else {
+ s->opt[OPT_TRANSP_SW].cap = SANE_CAP_INACTIVE;
+ }
/* calibration needed */
s->opt[OPT_NEED_CALIBRATION_SW].name = "need-calibration";
@@ -5231,7 +5143,7 @@ static void probe_genesys_devices()
of Genesys_Calibration_Cache as is.
*/
static const char* CALIBRATION_IDENT = "sane_genesys";
-static const int CALIBRATION_VERSION = 31;
+static const int CALIBRATION_VERSION = 32;
bool read_calibration(std::istream& str, Genesys_Device::Calibration& calibration,
const std::string& path)
@@ -5821,6 +5733,7 @@ static void get_option_value(Genesys_Scanner* s, int option, void* val)
case OPT_OCR_SW:
case OPT_POWER_SW:
case OPT_EXTRA_SW:
+ case OPT_TRANSP_SW:
s->dev->cmd_set->update_hardware_sensors(s);
*reinterpret_cast<SANE_Bool*>(val) = s->buttons[genesys_option_to_button(option)].read();
break;
@@ -6456,6 +6369,7 @@ GenesysButtonName genesys_option_to_button(int option)
case OPT_OCR_SW: return BUTTON_OCR_SW;
case OPT_POWER_SW: return BUTTON_POWER_SW;
case OPT_EXTRA_SW: return BUTTON_EXTRA_SW;
+ case OPT_TRANSP_SW: return BUTTON_TRANSP_SW;
default: throw std::runtime_error("Unknown option to convert to button index");
}
}
diff --git a/backend/genesys/genesys.h b/backend/genesys/genesys.h
index 19d6feb..272beaa 100644
--- a/backend/genesys/genesys.h
+++ b/backend/genesys/genesys.h
@@ -19,27 +19,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef GENESYS_H
@@ -124,6 +103,7 @@ enum Genesys_Option
OPT_OCR_SW,
OPT_POWER_SW,
OPT_EXTRA_SW,
+ OPT_TRANSP_SW,
OPT_NEED_CALIBRATION_SW,
OPT_BUTTON_GROUP,
OPT_CALIBRATE,
@@ -144,6 +124,7 @@ enum GenesysButtonName : unsigned {
BUTTON_OCR_SW,
BUTTON_POWER_SW,
BUTTON_EXTRA_SW,
+ BUTTON_TRANSP_SW,
NUM_BUTTONS
};
diff --git a/backend/genesys/gl124.cpp b/backend/genesys/gl124.cpp
index ed733b8..1fa4d99 100644
--- a/backend/genesys/gl124.cpp
+++ b/backend/genesys/gl124.cpp
@@ -17,27 +17,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -113,7 +92,7 @@ gl124_init_registers (Genesys_Device * dev)
dev->reg.init_reg(0x09, 0x00);
dev->reg.init_reg(0x0a, 0xc0);
dev->reg.init_reg(0x0b, 0x2a);
- dev->reg.init_reg(0x0c, 0x12);
+ dev->reg.init_reg(0x0c, 0x12); // SENSOR_DEF
dev->reg.init_reg(0x11, 0x00);
dev->reg.init_reg(0x12, 0x00);
dev->reg.init_reg(0x13, 0x0f);
@@ -453,7 +432,6 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev,
ScanFlag flags)
{
DBG_HELPER(dbg);
- int use_fast_fed;
unsigned int lincnt, fast_dpi;
unsigned int feedl,dist;
uint32_t z1, z2;
@@ -467,9 +445,6 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev,
feed_steps, static_cast<unsigned>(scan_mode),
static_cast<unsigned>(flags));
- /* we never use fast fed since we do manual feed for the scans */
- use_fast_fed=0;
-
/* enforce motor minimal scan speed
* @TODO extend motor struct for this value */
if (scan_mode == ScanColorMode::COLOR_SINGLE_PASS)
@@ -516,12 +491,6 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev,
/* compute register 02 value */
uint8_t r02 = REG_0x02_NOTHOME;
- if (use_fast_fed) {
- r02 |= REG_0x02_FASTFED;
- } else {
- r02 &= ~REG_0x02_FASTFED;
- }
-
if (has_flag(flags, ScanFlag::AUTO_GO_HOME)) {
r02 |= REG_0x02_AGOHOME;
}
@@ -573,9 +542,6 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev,
if (has_flag(flags, ScanFlag::FEEDING)) {
dist *= 2;
}
- if (use_fast_fed) {
- dist += fast_table.table.size() * 2;
- }
/* get sure we don't use insane value */
if (dist < feedl) {
@@ -587,7 +553,7 @@ static void gl124_init_motor_regs_scan(Genesys_Device* dev,
reg->set24(REG_FEEDL, feedl);
/* doesn't seem to matter that much */
- sanei_genesys_calculate_zmod(use_fast_fed,
+ sanei_genesys_calculate_zmod(false,
scan_exposure_time,
scan_table.table,
scan_table.table.size(),
@@ -815,6 +781,8 @@ ScanSession CommandSetGl124::calculate_scan_session(const Genesys_Device* dev,
session.params.scan_method = settings.scan_method;
session.params.scan_mode = settings.scan_mode;
session.params.color_filter = settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::NONE;
compute_session(dev, session, sensor);
@@ -983,6 +951,8 @@ void CommandSetGl124::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = ColorFilter::RED;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::DISABLE_BUFFER_FULL_MOVE;
@@ -1116,6 +1086,8 @@ void move_to_calibration_area(Genesys_Device* dev, const Genesys_Sensor& sensor,
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
@@ -1202,6 +1174,8 @@ void CommandSetGl124::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = flags;
compute_session(dev, session, sensor);
diff --git a/backend/genesys/gl124.h b/backend/genesys/gl124.h
index b722e67..02b733b 100644
--- a/backend/genesys/gl124.h
+++ b/backend/genesys/gl124.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL124_H
diff --git a/backend/genesys/gl124_registers.h b/backend/genesys/gl124_registers.h
index 66c5fda..dfc25f6 100644
--- a/backend/genesys/gl124_registers.h
+++ b/backend/genesys/gl124_registers.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL124_REGISTERS_H
diff --git a/backend/genesys/gl646.cpp b/backend/genesys/gl646.cpp
index acc1a4b..bdde703 100644
--- a/backend/genesys/gl646.cpp
+++ b/backend/genesys/gl646.cpp
@@ -23,27 +23,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -605,7 +584,9 @@ void CommandSetGl646::init_regs_for_scan_session(Genesys_Device* dev, const Gene
}
/* true CIS gray if needed */
- if (dev->model->is_cis && session.params.channels == 1 && dev->settings.true_gray) {
+ if (dev->model->is_cis && session.params.channels == 1 &&
+ session.params.color_filter == ColorFilter::NONE)
+ {
regs->find_reg(0x05).value |= REG_0x05_LEDADD;
} else {
regs->find_reg(0x05).value &= ~REG_0x05_LEDADD;
@@ -1707,6 +1688,8 @@ void CommandSetGl646::move_back_home(Genesys_Device* dev, bool wait_until_home)
session.params.scan_method = dev->model->default_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = ColorFilter::RED;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::REVERSE |
ScanFlag::AUTO_GO_HOME |
ScanFlag::DISABLE_GAMMA;
@@ -1823,6 +1806,8 @@ void CommandSetGl646::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::IGNORE_COLOR_OFFSET |
@@ -1931,6 +1916,8 @@ SensorExposure CommandSetGl646::led_calibration(Genesys_Device* dev, const Genes
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = scan_mode;
session.params.color_filter = ColorFilter::RED;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING;
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY) {
session.params.flags |= ScanFlag::USE_XPA;
@@ -2110,6 +2097,8 @@ static void ad_fe_offset_calibration(Genesys_Device* dev, const Genesys_Sensor&
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = ColorFilter::RED;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING;
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY) {
session.params.flags |= ScanFlag::USE_XPA;
@@ -2222,6 +2211,8 @@ void CommandSetGl646::offset_calibration(Genesys_Device* dev, const Genesys_Sens
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = ColorFilter::RED;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING;
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY) {
session.params.flags |= ScanFlag::USE_XPA;
@@ -2373,6 +2364,8 @@ void CommandSetGl646::coarse_gain_calibration(Genesys_Device* dev, const Genesys
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = ColorFilter::RED;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING;
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY) {
session.params.flags |= ScanFlag::USE_XPA;
@@ -2485,6 +2478,8 @@ void CommandSetGl646::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::GRAY;
session.params.color_filter = ColorFilter::RED;
+ session.params.contrast_adjustment = 0;
+ session.params.brightness_adjustment = 0;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA;
if (dev->settings.scan_method == ScanMethod::TRANSPARENCY) {
@@ -2966,6 +2961,8 @@ ScanSession CommandSetGl646::calculate_scan_session(const Genesys_Device* dev,
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = settings.scan_mode;
session.params.color_filter = settings.color_filter;
+ session.params.contrast_adjustment = settings.contrast;
+ session.params.brightness_adjustment = settings.brightness;
session.params.flags = ScanFlag::AUTO_GO_HOME;
if (settings.scan_method == ScanMethod::TRANSPARENCY) {
session.params.flags |= ScanFlag::USE_XPA;
diff --git a/backend/genesys/gl646.h b/backend/genesys/gl646.h
index e4c8d6b..04e5fb2 100644
--- a/backend/genesys/gl646.h
+++ b/backend/genesys/gl646.h
@@ -19,27 +19,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL646_H
diff --git a/backend/genesys/gl646_registers.h b/backend/genesys/gl646_registers.h
index 1c50888..b20bdbd 100644
--- a/backend/genesys/gl646_registers.h
+++ b/backend/genesys/gl646_registers.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL646_REGISTERS_H
diff --git a/backend/genesys/gl841.cpp b/backend/genesys/gl841.cpp
index 62e0e9d..27a6a36 100644
--- a/backend/genesys/gl841.cpp
+++ b/backend/genesys/gl841.cpp
@@ -25,27 +25,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -149,15 +128,6 @@ gl841_init_registers (Genesys_Device * dev)
dev->reg.init_reg(0x13, 0x00); // SENSOR_DEF
dev->reg.init_reg(0x14, 0x00); // SENSOR_DEF
dev->reg.init_reg(0x15, 0x00); // SENSOR_DEF
- if (dev->model->model_id == ModelId::CANON_LIDE_80) {
- dev->reg.init_reg(0x10, 0x40);
- dev->reg.init_reg(0x11, 0x00);
- dev->reg.init_reg(0x12, 0x40);
- dev->reg.init_reg(0x13, 0x00);
- dev->reg.init_reg(0x14, 0x40);
- dev->reg.init_reg(0x15, 0x00);
- }
-
dev->reg.init_reg(0x16, 0x00); // SENSOR_DEF, overwritten in scanner_setup_sensor() below
dev->reg.init_reg(0x17, 0x00); // SENSOR_DEF, overwritten in scanner_setup_sensor() below
dev->reg.init_reg(0x18, 0x00); // SENSOR_DEF, overwritten in scanner_setup_sensor() below
@@ -184,36 +154,21 @@ gl841_init_registers (Genesys_Device * dev)
dev->reg.init_reg(0x27, 0x00);
dev->reg.init_reg(0x29, 0xff);
- dev->reg.init_reg(0x2c, 0x00);
- dev->reg.init_reg(0x2d, 0x00);
- if (dev->model->model_id == ModelId::CANON_LIDE_80) {
- dev->reg.init_reg(0x2c, sensor.full_resolution >> 8);
- dev->reg.init_reg(0x2d, sensor.full_resolution & 0xff);
- }
+ dev->reg.init_reg(0x2c, 0x02); // DPISET: overwritten during scanner setup
+ dev->reg.init_reg(0x2d, 0x58); // DPISET: overwritten during scanner setup
dev->reg.init_reg(0x2e, 0x80);
dev->reg.init_reg(0x2f, 0x80);
- dev->reg.init_reg(0x30, 0x00);
- dev->reg.init_reg(0x31, 0x00);
- dev->reg.init_reg(0x32, 0x00);
- dev->reg.init_reg(0x33, 0x00);
- dev->reg.init_reg(0x34, 0x00);
- dev->reg.init_reg(0x35, 0x00);
- dev->reg.init_reg(0x36, 0x00);
- dev->reg.init_reg(0x37, 0x00);
- dev->reg.init_reg(0x38, 0x4f);
- dev->reg.init_reg(0x39, 0xc1);
- if (dev->model->model_id == ModelId::CANON_LIDE_80) {
- dev->reg.init_reg(0x31, 0x10);
- dev->reg.init_reg(0x32, 0x15);
- dev->reg.init_reg(0x33, 0x0e);
- dev->reg.init_reg(0x34, 0x40);
- dev->reg.init_reg(0x35, 0x00);
- dev->reg.init_reg(0x36, 0x2a);
- dev->reg.init_reg(0x37, 0x30);
- dev->reg.init_reg(0x38, 0x2a);
- dev->reg.init_reg(0x39, 0xf8);
- }
+ dev->reg.init_reg(0x30, 0x00); // STRPIXEL: overwritten during scanner setup
+ dev->reg.init_reg(0x31, 0x00); // STRPIXEL: overwritten during scanner setup
+ dev->reg.init_reg(0x32, 0x00); // ENDPIXEL: overwritten during scanner setup
+ dev->reg.init_reg(0x33, 0x00); // ENDPIXEL: overwritten during scanner setup
+ dev->reg.init_reg(0x34, 0x00); // DUMMY: overwritten during scanner setup
+ dev->reg.init_reg(0x35, 0x00); // MAXWD: overwritten during scanner setup
+ dev->reg.init_reg(0x36, 0x00); // MAXWD: overwritten during scanner setup
+ dev->reg.init_reg(0x37, 0x00); // MAXWD: overwritten during scanner setup
+ dev->reg.init_reg(0x38, 0x4f); // LPERIOD: overwritten during scanner setup
+ dev->reg.init_reg(0x39, 0xc1); // LPERIOD: overwritten during scanner setup
dev->reg.init_reg(0x3d, 0x00);
dev->reg.init_reg(0x3e, 0x00);
@@ -330,11 +285,6 @@ gl841_init_registers (Genesys_Device * dev)
dev->interface->write_0x8c(0x10, 0x94);
dev->interface->write_register(0x09, 0x10);
-
- // FIXME: the following code originally changed 0x6b, but due to bug the 0x6c register was
- // effectively changed. The current behavior matches the old code, but should probably be fixed.
- dev->reg.find_reg(0x6c).value |= REG_0x6B_GPO18;
- dev->reg.find_reg(0x6c).value &= ~REG_0x6B_GPO17;
}
}
@@ -541,7 +491,6 @@ static void gl841_init_motor_regs_feed(Genesys_Device* dev, const Genesys_Sensor
{
DBG_HELPER_ARGS(dbg, "feed_steps=%d, flags=%x", feed_steps, static_cast<unsigned>(flags));
unsigned step_multiplier = 2;
- int use_fast_fed = 0;
unsigned int feedl;
/*number of scan lines to add in a scan_lines line*/
@@ -572,10 +521,6 @@ static void gl841_init_motor_regs_feed(Genesys_Device* dev, const Genesys_Sensor
// BUG: fast table is counted in base_ydpi / 4
feedl = feed_steps - fast_table.table.size() * 2;
- use_fast_fed = 1;
- if (has_flag(dev->model->flags, ModelFlag::DISABLE_FAST_FEEDING)) {
- use_fast_fed = false;
- }
reg->set8(0x3d, (feedl >> 16) & 0xf);
reg->set8(0x3e, (feedl >> 8) & 0xff);
@@ -590,10 +535,6 @@ static void gl841_init_motor_regs_feed(Genesys_Device* dev, const Genesys_Sensor
reg->find_reg(0x02).value &= ~0x80; /*NOT_HOME OFF*/
reg->find_reg(0x02).value |= REG_0x02_MTRPWR;
-
- if (use_fast_fed)
- reg->find_reg(0x02).value |= 0x08;
- else
reg->find_reg(0x02).value &= ~0x08;
if (has_flag(flags, ScanFlag::AUTO_GO_HOME)) {
@@ -640,9 +581,6 @@ static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor
unsigned step_multiplier = 2;
- int use_fast_fed = 0;
- unsigned int fast_time;
- unsigned int slow_time;
unsigned int feedl;
unsigned int min_restep = 0x20;
@@ -679,54 +617,11 @@ static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor
fast_table.slice_steps(max_fast_slope_steps_count, step_multiplier);
}
- /* fast fed special cases handling */
- if (dev->model->gpio_id == GpioId::XP300
- || dev->model->gpio_id == GpioId::DP685)
- {
- /* quirk: looks like at least this scanner is unable to use
- 2-feed mode */
- use_fast_fed = 0;
- }
- else if (feed_steps < fast_table.table.size() * 2 +
- (slow_table.table.size() >> static_cast<unsigned>(motor_profile.step_type)))
- {
- use_fast_fed = 0;
- DBG(DBG_info, "%s: feed too short, slow move forced.\n", __func__);
- } else {
-/* 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_table.table.back() << static_cast<unsigned>(fast_profile->step_type)) / 4 *
- (feed_steps - fast_table.table.size()*2 -
- (slow_table.table.size() >> static_cast<unsigned>(motor_profile.step_type)))
- + fast_table.pixeltime_sum() * 2 + slow_table.pixeltime_sum();
- slow_time =
- (scan_exposure_time * scan_yres) / dev->motor.base_ydpi *
- (feed_steps - (slow_table.table.size() >> static_cast<unsigned>(motor_profile.step_type)))
- + slow_table.pixeltime_sum();
-
- use_fast_fed = fast_time < slow_time;
- }
-
- if (has_flag(dev->model->flags, ModelFlag::DISABLE_FAST_FEEDING)) {
- use_fast_fed = false;
- }
-
- if (use_fast_fed) {
- feedl = feed_steps - fast_table.table.size() * 2 -
- (slow_table.table.size() >> static_cast<unsigned>(motor_profile.step_type));
- } else if ((feed_steps << static_cast<unsigned>(motor_profile.step_type)) < slow_table.table.size()) {
+ if ((feed_steps << static_cast<unsigned>(motor_profile.step_type)) < slow_table.table.size()) {
feedl = 0;
} else {
feedl = (feed_steps << static_cast<unsigned>(motor_profile.step_type)) - slow_table.table.size();
}
- DBG(DBG_info, "%s: Decided to use %s mode\n", __func__, use_fast_fed?"fast feed":"slow feed");
reg->set8(0x3d, (feedl >> 16) & 0xf);
reg->set8(0x3e, (feedl >> 8) & 0xff);
@@ -743,9 +638,6 @@ static void gl841_init_motor_regs_scan(Genesys_Device* dev, const Genesys_Sensor
reg->find_reg(0x02).value &= ~REG_0x02_MTRREV;
}
- if (use_fast_fed)
- reg->find_reg(0x02).value |= 0x08;
- else
reg->find_reg(0x02).value &= ~0x08;
if (has_flag(flags, ScanFlag::AUTO_GO_HOME))
@@ -819,8 +711,6 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
const ScanSession& session)
{
DBG_HELPER_ARGS(dbg, "exposure_time=%d", exposure_time);
- uint16_t expavg, expr, expb, expg;
-
dev->cmd_set->set_fe(dev, sensor, AFE_SET);
/* gpio part.*/
@@ -876,11 +766,7 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* AFEMOD should depend on FESET, and we should set these
* bits separately */
reg->find_reg(0x04).value &= ~(REG_0x04_FILTER | REG_0x04_AFEMOD);
- if (has_flag(session.params.flags, ScanFlag::ENABLE_LEDADD)) {
- reg->find_reg(0x04).value |= 0x10; /* no filter */
- }
- else if (session.params.channels == 1)
- {
+ if (session.params.channels == 1) {
switch (session.params.color_filter)
{
case ColorFilter::RED:
@@ -910,23 +796,6 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
/* CIS scanners can do true gray by setting LEDADD */
reg->find_reg(0x87).value &= ~REG_0x87_LEDADD;
- if (has_flag(session.params.flags, ScanFlag::ENABLE_LEDADD)) {
- reg->find_reg(0x87).value |= REG_0x87_LEDADD;
- expr = reg->get16(REG_EXPR);
- expg = reg->get16(REG_EXPG);
- expb = reg->get16(REG_EXPB);
-
- /* use minimal exposure for best image quality */
- expavg = expg;
- if (expr < expg)
- expavg = expr;
- if (expb < expavg)
- expavg = expb;
-
- dev->reg.set16(REG_EXPR, expavg);
- dev->reg.set16(REG_EXPG, expavg);
- dev->reg.set16(REG_EXPB, expavg);
- }
// enable gamma tables
if (should_enable_gamma(session, sensor)) {
@@ -946,27 +815,6 @@ static void gl841_init_optical_regs_scan(Genesys_Device* dev, const Genesys_Sens
reg->set8(0x34, sensor.dummy_pixel);
}
-static int
-gl841_get_led_exposure(Genesys_Device * dev, const Genesys_Sensor& sensor)
-{
- int d,r,g,b,m;
- if (!dev->model->is_cis)
- return 0;
- d = dev->reg.find_reg(0x19).value;
-
- r = sensor.exposure.red;
- g = sensor.exposure.green;
- b = sensor.exposure.blue;
-
- m = r;
- if (m < g)
- m = g;
- if (m < b)
- m = b;
-
- return m + d;
-}
-
/** @brief compute exposure time
* Compute exposure time for the device and the given scan resolution
*/
@@ -975,9 +823,13 @@ static int gl841_exposure_time(Genesys_Device *dev, const Genesys_Sensor& sensor
int start,
int used_pixels)
{
-int led_exposure;
-
- led_exposure=gl841_get_led_exposure(dev, sensor);
+ int led_exposure = 0;
+ if (dev->model->is_cis) {
+ unsigned dummy = dev->reg.find_reg(0x19).value;
+ unsigned max_sensor_exposure = std::max({sensor.exposure.red, sensor.exposure.green,
+ sensor.exposure.blue});
+ led_exposure = dummy + max_sensor_exposure;
+ }
return sanei_genesys_exposure_time2(dev, profile, slope_dpi,
start + used_pixels,/*+tgtime? currently done in sanei_genesys_exposure_time2 with tgtime = 32 pixel*/
led_exposure);
@@ -1069,6 +921,9 @@ dummy \ scanned lines
dev->total_bytes_read = 0;
dev->total_bytes_to_read = session.output_line_bytes_requested * session.params.lines;
+ if (session.use_host_side_gray) {
+ dev->total_bytes_to_read /= 3;
+ }
DBG(DBG_info, "%s: total bytes to send = %zu\n", __func__, dev->total_bytes_to_read);
}
@@ -1106,19 +961,6 @@ ScanSession CommandSetGl841::calculate_scan_session(const Genesys_Device* dev,
start += dev->settings.tl_x;
start = static_cast<float>((start * dev->settings.xres) / MM_PER_INCH);
- // we enable true gray for cis scanners only, and just when doing
- // scan since color calibration is OK for this mode
- ScanFlag flags = ScanFlag::NONE;
-
- // true gray (led add for cis scanners)
- if (dev->model->is_cis && dev->settings.true_gray &&
- dev->settings.scan_mode != ScanColorMode::COLOR_SINGLE_PASS &&
- dev->model->sensor_id != SensorId::CIS_CANON_LIDE_80)
- {
- // on Lide 80 the LEDADD bit results in only red LED array being lit
- flags |= ScanFlag::ENABLE_LEDADD;
- }
-
ScanSession session;
session.params.xres = dev->settings.xres;
session.params.yres = dev->settings.yres;
@@ -1132,7 +974,9 @@ ScanSession CommandSetGl841::calculate_scan_session(const Genesys_Device* dev,
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter;
- session.params.flags = flags;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
+ session.params.flags = ScanFlag::NONE;
compute_session(dev, session, sensor);
return session;
@@ -1613,6 +1457,8 @@ void CommandSetGl841::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA;
compute_session(dev, session, calib_sensor);
@@ -1690,6 +1536,8 @@ static void ad_fe_offset_calibration(Genesys_Device* dev, const Genesys_Sensor&
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
@@ -1760,14 +1608,10 @@ static void ad_fe_offset_calibration(Genesys_Device* dev, const Genesys_Sensor&
turn++;
} while ((top-bottom)>1 && turn < 100);
- // FIXME: don't overwrite the calibrated values
- dev->frontend.set_offset(0, 0);
- dev->frontend.set_offset(1, 0);
- dev->frontend.set_offset(2, 0);
- DBG(DBG_info, "%s: offset=(%d,%d,%d)\n", __func__,
- dev->frontend.get_offset(0),
- dev->frontend.get_offset(1),
- dev->frontend.get_offset(2));
+ DBG(DBG_info, "%s: offset=(%d,%d,%d)\n", __func__,
+ dev->frontend.get_offset(0),
+ dev->frontend.get_offset(1),
+ dev->frontend.get_offset(2));
}
/* this function does the offset calibration by scanning one line of the calibration
@@ -1811,6 +1655,8 @@ void CommandSetGl841::offset_calibration(Genesys_Device* dev, const Genesys_Sens
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = ScanFlag::DISABLE_SHADING |
ScanFlag::DISABLE_GAMMA |
ScanFlag::SINGLE_LINE |
@@ -2160,6 +2006,8 @@ void CommandSetGl841::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = 0;
+ session.params.brightness_adjustment = 0;
session.params.flags = flags;
compute_session(dev, session, sensor);
diff --git a/backend/genesys/gl841.h b/backend/genesys/gl841.h
index dbe2e59..64b23c8 100644
--- a/backend/genesys/gl841.h
+++ b/backend/genesys/gl841.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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"
diff --git a/backend/genesys/gl841_registers.h b/backend/genesys/gl841_registers.h
index a8d924d..0a59aac 100644
--- a/backend/genesys/gl841_registers.h
+++ b/backend/genesys/gl841_registers.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL841_REGISTERS_H
diff --git a/backend/genesys/gl842.cpp b/backend/genesys/gl842.cpp
index 9d3da67..a593040 100644
--- a/backend/genesys/gl842.cpp
+++ b/backend/genesys/gl842.cpp
@@ -17,9 +17,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- As a special exception, the authors of SANE give permission for
- additional uses of the libraries contained in this release of SANE.
*/
#define DEBUG_DECLARE_ONLY
@@ -629,6 +626,8 @@ ScanSession CommandSetGl842::calculate_scan_session(const Genesys_Device* dev,
session.params.scan_method = settings.scan_method;
session.params.scan_mode = settings.scan_mode;
session.params.color_filter = settings.color_filter;
+ session.params.contrast_adjustment = settings.contrast;
+ session.params.brightness_adjustment = settings.brightness;
session.params.flags = flags;
compute_session(dev, session, sensor);
@@ -823,6 +822,8 @@ void CommandSetGl842::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = flags;
compute_session(dev, session, calib_sensor);
@@ -916,6 +917,8 @@ void CommandSetGl842::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = 0;
+ session.params.brightness_adjustment = 0;
session.params.flags = flags;
compute_session(dev, session, calib_sensor);
diff --git a/backend/genesys/gl842.h b/backend/genesys/gl842.h
index b20ef5e..3636bac 100644
--- a/backend/genesys/gl842.h
+++ b/backend/genesys/gl842.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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"
diff --git a/backend/genesys/gl842_registers.h b/backend/genesys/gl842_registers.h
index ceb540b..7c5957a 100644
--- a/backend/genesys/gl842_registers.h
+++ b/backend/genesys/gl842_registers.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_gl842_REGISTERS_H
diff --git a/backend/genesys/gl843.cpp b/backend/genesys/gl843.cpp
index e768ac0..6180bf9 100644
--- a/backend/genesys/gl843.cpp
+++ b/backend/genesys/gl843.cpp
@@ -17,27 +17,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -1122,6 +1101,8 @@ ScanSession CommandSetGl843::calculate_scan_session(const Genesys_Device* dev,
session.params.scan_method = settings.scan_method;
session.params.scan_mode = settings.scan_mode;
session.params.color_filter = settings.color_filter;
+ session.params.contrast_adjustment = settings.contrast;
+ session.params.brightness_adjustment = settings.brightness;
session.params.flags = flags;
compute_session(dev, session, sensor);
@@ -1240,6 +1221,7 @@ void CommandSetGl843::begin_scan(Genesys_Device* dev, const Genesys_Sensor& sens
dev->interface->write_register(0x7e, 0x04);
break;
case GpioId::G4050:
+ case GpioId::G4010:
dev->interface->write_register(REG_0xA7, 0xfe);
dev->interface->write_register(REG_0xA8, 0x3e);
dev->interface->write_register(REG_0xA9, 0x06);
@@ -1432,6 +1414,8 @@ void CommandSetGl843::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = dev->settings.scan_mode;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = flags;
compute_session(dev, session, calib_sensor);
@@ -1535,6 +1519,8 @@ void CommandSetGl843::init_regs_for_warmup(Genesys_Device* dev, const Genesys_Se
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = 0;
+ session.params.brightness_adjustment = 0;
session.params.flags = flags;
compute_session(dev, session, calib_sensor);
@@ -1680,6 +1666,7 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const
*/
uint8_t val = s->dev->interface->read_register(REG_0x6D);
+ DBG(DBG_io, "%s: read buttons_gpio value=0x%x\n", __func__, (int)val);
switch (s->dev->model->gpio_id)
{
@@ -1692,6 +1679,12 @@ void CommandSetGl843::update_hardware_sensors(Genesys_Scanner* s) const
s->buttons[BUTTON_EMAIL_SW].write((val & 0x04) == 0);
s->buttons[BUTTON_COPY_SW].write((val & 0x08) == 0);
break;
+ case GpioId::G4010:
+ s->buttons[BUTTON_FILE_SW].write((val & 0x01) == 0);
+ s->buttons[BUTTON_COPY_SW].write((val & 0x04) == 0);
+ s->buttons[BUTTON_TRANSP_SW].write((val & 0x40) == 0);
+ s->buttons[BUTTON_SCAN_SW].write((val & 0x08) == 0);
+ break;
case GpioId::CANON_4400F:
case GpioId::CANON_8400F:
default:
diff --git a/backend/genesys/gl843.h b/backend/genesys/gl843.h
index fe2814d..ac845bd 100644
--- a/backend/genesys/gl843.h
+++ b/backend/genesys/gl843.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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"
diff --git a/backend/genesys/gl843_registers.h b/backend/genesys/gl843_registers.h
index ab1f4c7..a1fe156 100644
--- a/backend/genesys/gl843_registers.h
+++ b/backend/genesys/gl843_registers.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL843_REGISTERS_H
diff --git a/backend/genesys/gl846.cpp b/backend/genesys/gl846.cpp
index c8907b2..b427376 100644
--- a/backend/genesys/gl846.cpp
+++ b/backend/genesys/gl846.cpp
@@ -17,27 +17,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
/** @file
@@ -374,25 +353,13 @@ static void gl846_init_motor_regs_scan(Genesys_Device* dev,
unsigned step_multiplier = gl846_get_step_multiplier(reg);
- bool use_fast_fed = false;
- if (dev->settings.yres == 4444 && feed_steps > 100 && !has_flag(flags, ScanFlag::FEEDING)) {
- use_fast_fed = true;
- }
- if (has_flag(dev->model->flags, ModelFlag::DISABLE_FAST_FEEDING)) {
- use_fast_fed = false;
- }
-
reg->set24(REG_LINCNT, scan_lines);
reg->set8(REG_0x02, 0);
sanei_genesys_set_motor_power(*reg, true);
std::uint8_t reg02 = reg->get8(REG_0x02);
- if (use_fast_fed) {
- reg02 |= REG_0x02_FASTFED;
- } else {
- reg02 &= ~REG_0x02_FASTFED;
- }
+ reg02 &= ~REG_0x02_FASTFED;
if (has_flag(flags, ScanFlag::AUTO_GO_HOME)) {
reg02 |= REG_0x02_AGOHOME | REG_0x02_NOTHOME;
@@ -446,18 +413,11 @@ static void gl846_init_motor_regs_scan(Genesys_Device* dev,
unsigned feedl = feed_steps;
unsigned dist = 0;
- if (use_fast_fed) {
- feedl <<= static_cast<unsigned>(fast_profile->step_type);
- dist = (scan_table.table.size() + 2 * fast_table.table.size());
- // TODO read and decode REG_0xAB
- dist += (reg->get8(0x5e) & 31);
- dist += reg->get8(REG_FEDCNT);
- } else {
- feedl <<= static_cast<unsigned>(motor_profile.step_type);
- dist = scan_table.table.size();
- if (has_flag(flags, ScanFlag::FEEDING)) {
- dist *= 2;
- }
+
+ feedl <<= static_cast<unsigned>(motor_profile.step_type);
+ dist = scan_table.table.size();
+ if (has_flag(flags, ScanFlag::FEEDING)) {
+ dist *= 2;
}
// check for overflow
@@ -513,7 +473,7 @@ static void gl846_init_motor_regs_scan(Genesys_Device* dev,
reg->set8(REG_BWDSTEP, min_restep);
std::uint32_t z1, z2;
- sanei_genesys_calculate_zmod(use_fast_fed,
+ sanei_genesys_calculate_zmod(false,
scan_exposure_time * ccdlmt * tgtime,
scan_table.table,
scan_table.table.size(),
@@ -759,6 +719,8 @@ ScanSession CommandSetGl846::calculate_scan_session(const Genesys_Device* dev,
session.params.scan_method = settings.scan_method;
session.params.scan_mode = settings.scan_mode;
session.params.color_filter = settings.color_filter;
+ session.params.contrast_adjustment = settings.contrast;
+ session.params.brightness_adjustment = settings.brightness;
// backtracking isn't handled well, so don't enable it
session.params.flags = flags;
@@ -882,6 +844,8 @@ void CommandSetGl846::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = flags;
compute_session(dev, session, calib_sensor);
diff --git a/backend/genesys/gl846.h b/backend/genesys/gl846.h
index d06b337..f1d396d 100644
--- a/backend/genesys/gl846.h
+++ b/backend/genesys/gl846.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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"
diff --git a/backend/genesys/gl846_registers.h b/backend/genesys/gl846_registers.h
index df45e4f..8e3c655 100644
--- a/backend/genesys/gl846_registers.h
+++ b/backend/genesys/gl846_registers.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL846_REGISTERS_H
diff --git a/backend/genesys/gl847.cpp b/backend/genesys/gl847.cpp
index 91ac4eb..13f9dd9 100644
--- a/backend/genesys/gl847.cpp
+++ b/backend/genesys/gl847.cpp
@@ -17,27 +17,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -338,25 +317,13 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev,
unsigned step_multiplier = gl847_get_step_multiplier (reg);
- bool use_fast_fed = false;
- if (dev->settings.yres == 4444 && feed_steps > 100 && !has_flag(flags, ScanFlag::FEEDING)) {
- use_fast_fed = true;
- }
- if (has_flag(dev->model->flags, ModelFlag::DISABLE_FAST_FEEDING)) {
- use_fast_fed = false;
- }
-
reg->set24(REG_LINCNT, scan_lines);
reg->set8(REG_0x02, 0);
sanei_genesys_set_motor_power(*reg, true);
std::uint8_t reg02 = reg->get8(REG_0x02);
- if (use_fast_fed) {
- reg02 |= REG_0x02_FASTFED;
- } else {
- reg02 &= ~REG_0x02_FASTFED;
- }
+ reg02 &= ~REG_0x02_FASTFED;
if (has_flag(flags, ScanFlag::AUTO_GO_HOME)) {
reg02 |= REG_0x02_AGOHOME | REG_0x02_NOTHOME;
@@ -402,19 +369,11 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev,
// correct move distance by acceleration and deceleration amounts
unsigned feedl = feed_steps;
unsigned dist = 0;
- if (use_fast_fed)
- {
- feedl <<= static_cast<unsigned>(fast_step_type);
- dist = (scan_table.table.size() + 2 * fast_table.table.size());
- // TODO read and decode REG_0xAB
- dist += (reg->get8(0x5e) & 31);
- dist += reg->get8(REG_FEDCNT);
- } else {
- feedl <<= static_cast<unsigned>(motor_profile.step_type);
- dist = scan_table.table.size();
- if (has_flag(flags, ScanFlag::FEEDING)) {
- dist *= 2;
- }
+
+ feedl <<= static_cast<unsigned>(motor_profile.step_type);
+ dist = scan_table.table.size();
+ if (has_flag(flags, ScanFlag::FEEDING)) {
+ dist *= 2;
}
// check for overflow
@@ -456,7 +415,7 @@ static void gl847_init_motor_regs_scan(Genesys_Device* dev,
reg->set8(REG_BWDSTEP, min_restep);
std::uint32_t z1, z2;
- sanei_genesys_calculate_zmod(use_fast_fed,
+ sanei_genesys_calculate_zmod(false,
scan_exposure_time * ccdlmt * tgtime,
scan_table.table,
scan_table.table.size(),
@@ -735,6 +694,8 @@ ScanSession CommandSetGl847::calculate_scan_session(const Genesys_Device* dev,
session.params.scan_method = settings.scan_method;
session.params.scan_mode = settings.scan_mode;
session.params.color_filter = settings.color_filter;
+ session.params.contrast_adjustment = settings.contrast;
+ session.params.brightness_adjustment = settings.brightness;
session.params.flags = flags;
compute_session(dev, session, sensor);
@@ -900,6 +861,8 @@ void CommandSetGl847::init_regs_for_shading(Genesys_Device* dev, const Genesys_S
session.params.scan_method = dev->settings.scan_method;
session.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
session.params.color_filter = dev->settings.color_filter;
+ session.params.contrast_adjustment = dev->settings.contrast;
+ session.params.brightness_adjustment = dev->settings.brightness;
session.params.flags = flags;
compute_session(dev, session, calib_sensor);
diff --git a/backend/genesys/gl847.h b/backend/genesys/gl847.h
index 2cb3a9f..4b98b7a 100644
--- a/backend/genesys/gl847.h
+++ b/backend/genesys/gl847.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL847_H
diff --git a/backend/genesys/gl847_registers.h b/backend/genesys/gl847_registers.h
index 66fda4b..3497c69 100644
--- a/backend/genesys/gl847_registers.h
+++ b/backend/genesys/gl847_registers.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_GL847_REGISTERS_H
diff --git a/backend/genesys/image.cpp b/backend/genesys/image.cpp
index 3ea6ef6..431f996 100644
--- a/backend/genesys/image.cpp
+++ b/backend/genesys/image.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/image.h b/backend/genesys/image.h
index 0ad344e..07d3be3 100644
--- a/backend/genesys/image.h
+++ b/backend/genesys/image.h
@@ -15,28 +15,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, see <https://www.gnu.org/licenses/>.
-
- 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.
+ along with this program. If not, see <https://www.gnu.org/licenses/>.s
*/
#ifndef BACKEND_GENESYS_IMAGE_H
diff --git a/backend/genesys/image_buffer.cpp b/backend/genesys/image_buffer.cpp
index 46ca292..ed01252 100644
--- a/backend/genesys/image_buffer.cpp
+++ b/backend/genesys/image_buffer.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/image_buffer.h b/backend/genesys/image_buffer.h
index 516e828..15af742 100644
--- a/backend/genesys/image_buffer.h
+++ b/backend/genesys/image_buffer.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_IMAGE_BUFFER_H
diff --git a/backend/genesys/image_pipeline.cpp b/backend/genesys/image_pipeline.cpp
index 4161e95..f53680f 100644
--- a/backend/genesys/image_pipeline.cpp
+++ b/backend/genesys/image_pipeline.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -304,8 +283,8 @@ bool ImagePipelineNodeInvert::get_next_row_data(std::uint8_t* out_data)
return got_data;
}
-ImagePipelineNodeMergeMonoLines::ImagePipelineNodeMergeMonoLines(ImagePipelineNode& source,
- ColorOrder color_order) :
+ImagePipelineNodeMergeMonoLinesToColor::ImagePipelineNodeMergeMonoLinesToColor(
+ ImagePipelineNode& source, ColorOrder color_order) :
source_(source),
buffer_(source_.get_row_bytes())
{
@@ -314,7 +293,7 @@ ImagePipelineNodeMergeMonoLines::ImagePipelineNodeMergeMonoLines(ImagePipelineNo
output_format_ = get_output_format(source_.get_format(), color_order);
}
-bool ImagePipelineNodeMergeMonoLines::get_next_row_data(std::uint8_t* out_data)
+bool ImagePipelineNodeMergeMonoLinesToColor::get_next_row_data(std::uint8_t* out_data)
{
bool got_data = true;
@@ -341,8 +320,8 @@ bool ImagePipelineNodeMergeMonoLines::get_next_row_data(std::uint8_t* out_data)
return got_data;
}
-PixelFormat ImagePipelineNodeMergeMonoLines::get_output_format(PixelFormat input_format,
- ColorOrder order)
+PixelFormat ImagePipelineNodeMergeMonoLinesToColor::get_output_format(PixelFormat input_format,
+ ColorOrder order)
{
switch (input_format) {
case PixelFormat::I1: {
@@ -417,6 +396,75 @@ PixelFormat ImagePipelineNodeSplitMonoLines::get_output_format(PixelFormat input
throw SaneException("Unsupported input format %d", static_cast<unsigned>(input_format));
}
+
+ImagePipelineNodeMergeColorToGray::ImagePipelineNodeMergeColorToGray(ImagePipelineNode& source) :
+ source_(source)
+{
+
+ output_format_ = get_output_format(source_.get_format());
+ float red_mult = 0.2125f;
+ float green_mult = 0.7154f;
+ float blue_mult = 0.0721f;
+
+ switch (get_pixel_format_color_order(source_.get_format())) {
+ case ColorOrder::RGB: {
+ ch0_mult_ = red_mult;
+ ch1_mult_ = green_mult;
+ ch2_mult_ = blue_mult;
+ break;
+ }
+ case ColorOrder::BGR: {
+ ch0_mult_ = blue_mult;
+ ch1_mult_ = green_mult;
+ ch2_mult_ = red_mult;
+ break;
+ }
+ case ColorOrder::GBR: {
+ ch0_mult_ = green_mult;
+ ch1_mult_ = blue_mult;
+ ch2_mult_ = red_mult;
+ break;
+ }
+ default:
+ throw SaneException("Unknown color order");
+ }
+ temp_buffer_.resize(source_.get_row_bytes());
+}
+
+bool ImagePipelineNodeMergeColorToGray::get_next_row_data(std::uint8_t* out_data)
+{
+ auto* src_data = temp_buffer_.data();
+
+ bool got_data = source_.get_next_row_data(src_data);
+
+ auto src_format = source_.get_format();
+
+ for (std::size_t x = 0, width = get_width(); x < width; ++x) {
+ std::uint16_t ch0 = get_raw_channel_from_row(src_data, x, 0, src_format);
+ std::uint16_t ch1 = get_raw_channel_from_row(src_data, x, 1, src_format);
+ std::uint16_t ch2 = get_raw_channel_from_row(src_data, x, 2, src_format);
+ float mono = ch0 * ch0_mult_ + ch1 * ch1_mult_ + ch2 * ch2_mult_;
+ set_raw_channel_to_row(out_data, x, 0, static_cast<std::uint16_t>(mono), output_format_);
+ }
+ return got_data;
+}
+
+PixelFormat ImagePipelineNodeMergeColorToGray::get_output_format(PixelFormat input_format)
+{
+ switch (input_format) {
+ case PixelFormat::RGB111:
+ return PixelFormat::I1;
+ case PixelFormat::RGB888:
+ case PixelFormat::BGR888:
+ return PixelFormat::I8;
+ case PixelFormat::RGB161616:
+ case PixelFormat::BGR161616:
+ return PixelFormat::I16;
+ default: break;
+ }
+ throw SaneException("Unsupported format %d", static_cast<unsigned>(input_format));
+}
+
ImagePipelineNodeComponentShiftLines::ImagePipelineNodeComponentShiftLines(
ImagePipelineNode& source, unsigned shift_r, unsigned shift_g, unsigned shift_b) :
source_(source),
@@ -712,7 +760,7 @@ ImagePipelineNodeCalibrate::ImagePipelineNodeCalibrate(ImagePipelineNode& source
const std::vector<std::uint16_t>& bottom,
const std::vector<std::uint16_t>& top,
std::size_t x_start) :
- source_{source}
+ source_(source)
{
std::size_t size = 0;
if (bottom.size() >= x_start && top.size() >= x_start) {
diff --git a/backend/genesys/image_pipeline.h b/backend/genesys/image_pipeline.h
index 3632b36..39aed71 100644
--- a/backend/genesys/image_pipeline.h
+++ b/backend/genesys/image_pipeline.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_IMAGE_PIPELINE_H
@@ -295,11 +274,11 @@ private:
};
// A pipeline node that merges 3 mono lines into a color channel
-class ImagePipelineNodeMergeMonoLines : public ImagePipelineNode
+class ImagePipelineNodeMergeMonoLinesToColor : public ImagePipelineNode
{
public:
- ImagePipelineNodeMergeMonoLines(ImagePipelineNode& source,
- ColorOrder color_order);
+ ImagePipelineNodeMergeMonoLinesToColor(ImagePipelineNode& source,
+ ColorOrder color_order);
std::size_t get_width() const override { return source_.get_width(); }
std::size_t get_height() const override { return source_.get_height() / 3; }
@@ -342,6 +321,33 @@ private:
unsigned next_channel_ = 0;
};
+
+// A pipeline node that merges 3 mono lines into a gray channel
+class ImagePipelineNodeMergeColorToGray : public ImagePipelineNode
+{
+public:
+ ImagePipelineNodeMergeColorToGray(ImagePipelineNode& source);
+
+ std::size_t get_width() const override { return source_.get_width(); }
+ std::size_t get_height() const override { return source_.get_height(); }
+ PixelFormat get_format() const override { return output_format_; }
+
+ bool eof() const override { return source_.eof(); }
+
+ bool get_next_row_data(std::uint8_t* out_data) override;
+
+private:
+ static PixelFormat get_output_format(PixelFormat input_format);
+
+ ImagePipelineNode& source_;
+ PixelFormat output_format_ = PixelFormat::UNKNOWN;
+ float ch0_mult_ = 0;
+ float ch1_mult_ = 0;
+ float ch2_mult_ = 0;
+
+ std::vector<std::uint8_t> temp_buffer_;
+};
+
// A pipeline node that shifts colors across lines by the given offsets
class ImagePipelineNodeComponentShiftLines : public ImagePipelineNode
{
diff --git a/backend/genesys/image_pixel.cpp b/backend/genesys/image_pixel.cpp
index 011a086..02ef782 100644
--- a/backend/genesys/image_pixel.cpp
+++ b/backend/genesys/image_pixel.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/image_pixel.h b/backend/genesys/image_pixel.h
index 4b16083..e414cfb 100644
--- a/backend/genesys/image_pixel.h
+++ b/backend/genesys/image_pixel.h
@@ -15,28 +15,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, see <https://www.gnu.org/licenses/>.
-
- 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.
+ along with this program. If not, see <https://www.gnu.org/licenses/>.s
*/
#ifndef BACKEND_GENESYS_IMAGE_PIXEL_H
diff --git a/backend/genesys/low.cpp b/backend/genesys/low.cpp
index ddd2c88..a6da2c1 100644
--- a/backend/genesys/low.cpp
+++ b/backend/genesys/low.cpp
@@ -17,27 +17,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -442,7 +421,11 @@ Image read_unshuffled_image_from_scanner(Genesys_Device* dev, const ScanSession&
}
if (dev->model->is_cis && session.params.channels == 3) {
- pipeline.push_node<ImagePipelineNodeMergeMonoLines>(dev->model->line_mode_color_order);
+ pipeline.push_node<ImagePipelineNodeMergeMonoLinesToColor>(dev->model->line_mode_color_order);
+ }
+
+ if (session.use_host_side_gray) {
+ pipeline.push_node<ImagePipelineNodeMergeColorToGray>();
}
if (pipeline.get_output_format() == PixelFormat::BGR888) {
@@ -540,7 +523,7 @@ Image read_shuffled_image_from_scanner(Genesys_Device* dev, const ScanSession& s
}
if (dev->model->is_cis && session.params.channels == 3) {
- pipeline.push_node<ImagePipelineNodeMergeMonoLines>(dev->model->line_mode_color_order);
+ pipeline.push_node<ImagePipelineNodeMergeMonoLinesToColor>(dev->model->line_mode_color_order);
}
if (pipeline.get_output_format() == PixelFormat::BGR888) {
@@ -638,11 +621,16 @@ bool should_enable_gamma(const ScanSession& session, const Genesys_Sensor& senso
if ((session.params.flags & ScanFlag::DISABLE_GAMMA) != ScanFlag::NONE) {
return false;
}
- if (sensor.gamma[0] == 1.0f || sensor.gamma[1] == 1.0f || sensor.gamma[2] == 1.0f) {
+ if (session.params.depth == 16) {
return false;
}
- if (session.params.depth == 16)
+ if (session.params.brightness_adjustment != 0 || session.params.contrast_adjustment != 0) {
+ return true;
+ }
+
+ if (sensor.gamma[0] == 1.0f || sensor.gamma[1] == 1.0f || sensor.gamma[2] == 1.0f) {
return false;
+ }
return true;
}
@@ -949,6 +937,14 @@ void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Se
s.output_startx = static_cast<unsigned>(
static_cast<int>(s.params.startx) + sensor.output_pixel_offset);
+ if (has_flag(dev->model->flags, ModelFlag::HOST_SIDE_GRAY) && s.params.channels == 1 &&
+ s.params.color_filter == ColorFilter::NONE)
+ {
+ s.use_host_side_gray = true;
+ s.params.channels = 3;
+ s.params.scan_mode = ScanColorMode::COLOR_SINGLE_PASS;
+ }
+
s.stagger_x = sensor.stagger_x;
s.stagger_y = sensor.stagger_y;
@@ -1114,7 +1110,8 @@ void compute_session(const Genesys_Device* dev, ScanSession& s, const Genesys_Se
dev->model->asic_type == AsicType::GL845 ||
dev->model->asic_type == AsicType::GL846)
{
- s.enable_ledadd = (s.params.channels == 1 && dev->model->is_cis && dev->settings.true_gray);
+ s.enable_ledadd = (s.params.channels == 1 && dev->model->is_cis &&
+ s.params.color_filter == ColorFilter::NONE);
}
s.use_host_side_calib = sensor.use_host_side_calib;
@@ -1212,7 +1209,7 @@ ImagePipelineStack build_image_pipeline(const Genesys_Device& dev, const ScanSes
}
if (dev.model->is_cis && session.params.channels == 3) {
- pipeline.push_node<ImagePipelineNodeMergeMonoLines>(dev.model->line_mode_color_order);
+ pipeline.push_node<ImagePipelineNodeMergeMonoLinesToColor>(dev.model->line_mode_color_order);
if (log_image_data) {
pipeline.push_node<ImagePipelineNodeDebug>(debug_prefix + "_4_after_merge_mono.tiff");
@@ -1274,6 +1271,14 @@ ImagePipelineStack build_image_pipeline(const Genesys_Device& dev, const ScanSes
}
}
+ if (session.use_host_side_gray) {
+ pipeline.push_node<ImagePipelineNodeMergeColorToGray>();
+
+ if (log_image_data) {
+ pipeline.push_node<ImagePipelineNodeDebug>(debug_prefix + "_10_after_nogray.tiff");
+ }
+ }
+
if (pipeline.get_output_width() != session.params.get_requested_pixels()) {
pipeline.push_node<ImagePipelineNodeScaleRows>(session.params.get_requested_pixels());
}
diff --git a/backend/genesys/low.h b/backend/genesys/low.h
index ac149b5..b0d23fe 100644
--- a/backend/genesys/low.h
+++ b/backend/genesys/low.h
@@ -23,27 +23,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef GENESYS_LOW_H
@@ -116,6 +95,7 @@
#define GENESYS_HAS_POWER_SW (1 << 6) /**< scanner has power button */
#define GENESYS_HAS_CALIBRATE (1 << 7) /**< scanner has 'calibrate' software button to start calibration */
#define GENESYS_HAS_EXTRA_SW (1 << 8) /**< scanner has extra function button */
+#define GENESYS_HAS_TRANSP_SW (1 << 9) /**< scanner has TRANSPARCY/SCAN_FILM button */
/* USB control message values */
#define REQUEST_TYPE_IN (USB_TYPE_VENDOR | USB_DIR_IN)
diff --git a/backend/genesys/motor.cpp b/backend/genesys/motor.cpp
index 8450fea..1dfe64f 100644
--- a/backend/genesys/motor.cpp
+++ b/backend/genesys/motor.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -136,7 +115,8 @@ MotorSlopeTable create_slope_table_for_speed(const MotorSlope& slope, unsigned t
unsigned max_speed_shifted_w = slope.max_speed_w >> step_shift;
if (target_speed_shifted_w < max_speed_shifted_w) {
- dbg.log(DBG_warn, "failed to reach target speed");
+ dbg.vlog(DBG_warn, "failed to reach target speed %d %d", target_speed_w,
+ slope.max_speed_w);
}
if (target_speed_shifted_w >= std::numeric_limits<std::uint16_t>::max()) {
diff --git a/backend/genesys/motor.h b/backend/genesys/motor.h
index e5fd695..1981e80 100644
--- a/backend/genesys/motor.h
+++ b/backend/genesys/motor.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_MOTOR_H
diff --git a/backend/genesys/register.h b/backend/genesys/register.h
index cee9adf..8ac549d 100644
--- a/backend/genesys/register.h
+++ b/backend/genesys/register.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_REGISTER_H
diff --git a/backend/genesys/register_cache.h b/backend/genesys/register_cache.h
index c7e5c41..0538529 100644
--- a/backend/genesys/register_cache.h
+++ b/backend/genesys/register_cache.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_REGISTER_CACHE_H
diff --git a/backend/genesys/row_buffer.h b/backend/genesys/row_buffer.h
index a4b9e42..d7f071c 100644
--- a/backend/genesys/row_buffer.h
+++ b/backend/genesys/row_buffer.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_LINE_BUFFER_H
diff --git a/backend/genesys/scanner_interface.cpp b/backend/genesys/scanner_interface.cpp
index 5363f0e..485270e 100644
--- a/backend/genesys/scanner_interface.cpp
+++ b/backend/genesys/scanner_interface.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/scanner_interface.h b/backend/genesys/scanner_interface.h
index 8258117..3aa9d6b 100644
--- a/backend/genesys/scanner_interface.h
+++ b/backend/genesys/scanner_interface.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_SCANNER_INTERFACE_H
diff --git a/backend/genesys/scanner_interface_usb.cpp b/backend/genesys/scanner_interface_usb.cpp
index 117297c..da8823b 100644
--- a/backend/genesys/scanner_interface_usb.cpp
+++ b/backend/genesys/scanner_interface_usb.cpp
@@ -16,34 +16,12 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
#include "scanner_interface_usb.h"
#include "low.h"
-#include <thread>
namespace genesys {
@@ -481,7 +459,7 @@ void ScannerInterfaceUsb::sleep_us(unsigned microseconds)
if (sanei_usb_is_replay_mode_enabled()) {
return;
}
- std::this_thread::sleep_for(std::chrono::microseconds{microseconds});
+ usleep(microseconds);
}
void ScannerInterfaceUsb::record_progress_message(const char* msg)
diff --git a/backend/genesys/scanner_interface_usb.h b/backend/genesys/scanner_interface_usb.h
index 569d634..d6408df 100644
--- a/backend/genesys/scanner_interface_usb.h
+++ b/backend/genesys/scanner_interface_usb.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_SCANNER_INTERFACE_USB_H
diff --git a/backend/genesys/sensor.cpp b/backend/genesys/sensor.cpp
index b09745f..d3cdda1 100644
--- a/backend/genesys/sensor.cpp
+++ b/backend/genesys/sensor.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/sensor.h b/backend/genesys/sensor.h
index 6f87607..2902b0d 100644
--- a/backend/genesys/sensor.h
+++ b/backend/genesys/sensor.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_SENSOR_H
diff --git a/backend/genesys/serialize.h b/backend/genesys/serialize.h
index 138ff08..ed67ea3 100644
--- a/backend/genesys/serialize.h
+++ b/backend/genesys/serialize.h
@@ -15,28 +15,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, see <https://www.gnu.org/licenses/>.
-
- 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.
+ along with this program. If not, see <https://www.gnu.org/licenses/>.s
*/
#ifndef BACKEND_GENESYS_SERIALIZE_H
diff --git a/backend/genesys/settings.cpp b/backend/genesys/settings.cpp
index 7f64798..d409683 100644
--- a/backend/genesys/settings.cpp
+++ b/backend/genesys/settings.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -86,6 +65,8 @@ std::ostream& operator<<(std::ostream& out, const SetupParams& params)
<< " channels: " << params.channels << '\n'
<< " scan_mode: " << params.scan_mode << '\n'
<< " color_filter: " << params.color_filter << '\n'
+ << " contrast_adjustment: " << params.contrast_adjustment << '\n'
+ << " brightness_adjustment: " << params.brightness_adjustment << '\n'
<< " flags: " << params.flags << '\n'
<< "}";
return out;
@@ -127,7 +108,8 @@ bool ScanSession::operator==(const ScanSession& other) const
shading_pixel_offset == other.shading_pixel_offset &&
buffer_size_read == other.buffer_size_read &&
enable_ledadd == other.enable_ledadd &&
- use_host_side_calib == other.use_host_side_calib;
+ use_host_side_calib == other.use_host_side_calib &&
+ use_host_side_gray == other.use_host_side_gray;
}
std::ostream& operator<<(std::ostream& out, const ScanSession& session)
@@ -164,6 +146,7 @@ std::ostream& operator<<(std::ostream& out, const ScanSession& session)
<< " buffer_size_read: " << session.buffer_size_read << '\n'
<< " enable_ledadd: " << session.enable_ledadd << '\n'
<< " use_host_side_calib: " << session.use_host_side_calib << '\n'
+ << " use_host_side_gray: " << session.use_host_side_gray << '\n'
<< " params: " << format_indent_braced_list(4, session.params) << '\n'
<< "}";
return out;
diff --git a/backend/genesys/settings.h b/backend/genesys/settings.h
index 4c834fa..d404941 100644
--- a/backend/genesys/settings.h
+++ b/backend/genesys/settings.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_SETTINGS_H
@@ -76,9 +55,6 @@ struct Genesys_Settings
ColorFilter color_filter = ColorFilter::NONE;
- // true if scan is true gray, false if monochrome scan
- int true_gray = 0;
-
// value for contrast enhancement in the [-100..100] range
int contrast = 0;
@@ -102,6 +78,7 @@ std::ostream& operator<<(std::ostream& out, const Genesys_Settings& settings);
struct SetupParams {
static constexpr unsigned NOT_SET = std::numeric_limits<unsigned>::max();
+ static constexpr unsigned NOT_SET_I = std::numeric_limits<int>::max();
// resolution in x direction
unsigned xres = NOT_SET;
@@ -136,6 +113,10 @@ struct SetupParams {
ColorFilter color_filter = static_cast<ColorFilter>(NOT_SET);
+ // the values for contrast and brightness adjustment in the range of [-100..100]
+ int contrast_adjustment = NOT_SET_I;
+ int brightness_adjustment = NOT_SET_I;
+
ScanFlag flags = ScanFlag::NONE;
unsigned get_requested_pixels() const
@@ -152,7 +133,8 @@ struct SetupParams {
pixels == NOT_SET || lines == NOT_SET ||depth == NOT_SET || channels == NOT_SET ||
scan_method == static_cast<ScanMethod>(NOT_SET) ||
scan_mode == static_cast<ScanColorMode>(NOT_SET) ||
- color_filter == static_cast<ColorFilter>(NOT_SET))
+ color_filter == static_cast<ColorFilter>(NOT_SET) ||
+ contrast_adjustment == NOT_SET_I || brightness_adjustment == NOT_SET_I)
{
throw std::runtime_error("SetupParams are not valid");
}
@@ -172,6 +154,8 @@ struct SetupParams {
scan_method == other.scan_method &&
scan_mode == other.scan_mode &&
color_filter == other.color_filter &&
+ contrast_adjustment == other.contrast_adjustment &&
+ brightness_adjustment == other.brightness_adjustment &&
flags == other.flags;
}
};
@@ -193,6 +177,8 @@ void serialize(Stream& str, SetupParams& x)
serialize(str, x.scan_method);
serialize(str, x.scan_mode);
serialize(str, x.color_filter);
+ serialize(str, x.contrast_adjustment);
+ serialize(str, x.brightness_adjustment);
serialize(str, x.flags);
}
@@ -317,6 +303,9 @@ struct ScanSession {
// whether calibration should be performed host-side
bool use_host_side_calib = false;
+ // whether gray scanning should be performed host-side (scan as color and merge to gray)
+ bool use_host_side_gray = false;
+
void assert_computed() const
{
if (!computed) {
@@ -368,6 +357,7 @@ void serialize(Stream& str, ScanSession& x)
serialize(str, x.buffer_size_read);
serialize(str, x.enable_ledadd);
serialize(str, x.use_host_side_calib);
+ serialize(str, x.use_host_side_gray);
}
std::ostream& operator<<(std::ostream& out, const SANE_Parameters& params);
diff --git a/backend/genesys/static_init.cpp b/backend/genesys/static_init.cpp
index 5ed3b50..2d463ee 100644
--- a/backend/genesys/static_init.cpp
+++ b/backend/genesys/static_init.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -57,12 +36,15 @@ void add_function_to_run_at_backend_exit(const std::function<void()>& function)
void run_functions_at_backend_exit()
{
- for (auto it = s_functions_run_at_backend_exit->rbegin();
- it != s_functions_run_at_backend_exit->rend(); ++it)
+ if (s_functions_run_at_backend_exit)
{
- (*it)();
+ for (auto it = s_functions_run_at_backend_exit->rbegin();
+ it != s_functions_run_at_backend_exit->rend(); ++it)
+ {
+ (*it)();
+ }
+ s_functions_run_at_backend_exit.reset();
}
- s_functions_run_at_backend_exit.reset();
}
} // namespace genesys
diff --git a/backend/genesys/static_init.h b/backend/genesys/static_init.h
index e0b39c8..63c242e 100644
--- a/backend/genesys/static_init.h
+++ b/backend/genesys/static_init.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_STATIC_INIT_H
diff --git a/backend/genesys/status.cpp b/backend/genesys/status.cpp
index 170bcd7..b95bcd6 100644
--- a/backend/genesys/status.cpp
+++ b/backend/genesys/status.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/status.h b/backend/genesys/status.h
index f1a3695..5983bf2 100644
--- a/backend/genesys/status.h
+++ b/backend/genesys/status.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_STATUS_H
diff --git a/backend/genesys/tables_frontend.cpp b/backend/genesys/tables_frontend.cpp
index 02e9998..65fc7f4 100644
--- a/backend/genesys/tables_frontend.cpp
+++ b/backend/genesys/tables_frontend.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/tables_gpo.cpp b/backend/genesys/tables_gpo.cpp
index 075cafb..f129262 100644
--- a/backend/genesys/tables_gpo.cpp
+++ b/backend/genesys/tables_gpo.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -258,6 +237,21 @@ void genesys_init_gpo_tables()
gpo = Genesys_Gpo();
+ gpo.id = GpioId::G4010;
+ gpo.regs = {
+ { 0x6c, 0x20 },
+ { 0x6d, 0x00 },
+ { 0x6e, 0xfc },
+ { 0x6f, 0x00 },
+ { 0xa6, 0x08 },
+ { 0xa7, 0x1e },
+ { 0xa8, 0x3e },
+ { 0xa9, 0x06 },
+ };
+ s_gpo->push_back(gpo);
+
+
+ gpo = Genesys_Gpo();
gpo.id = GpioId::HP_N6310;
gpo.regs = {
{ 0x6c, 0xa3 },
diff --git a/backend/genesys/tables_model.cpp b/backend/genesys/tables_model.cpp
index 6998a51..d139334 100644
--- a/backend/genesys/tables_model.cpp
+++ b/backend/genesys/tables_model.cpp
@@ -27,27 +27,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -191,6 +170,7 @@ void genesys_init_usb_device_tables()
model.gpio_id = GpioId::CANON_LIDE_35;
model.motor_id = MotorId::CANON_LIDE_35;
model.flags = ModelFlag::DARK_WHITE_CALIBRATION |
+ ModelFlag::HOST_SIDE_GRAY |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW |
GENESYS_HAS_FILE_SW |
@@ -342,12 +322,12 @@ void genesys_init_usb_device_tables()
model.is_sheetfed = false;
model.sensor_id = SensorId::CCD_G4050;
model.adc_id = AdcId::G4050;
- model.gpio_id = GpioId::G4050;
+ model.gpio_id = GpioId::G4010;
model.motor_id = MotorId::G4050;
model.flags = ModelFlag::WARMUP |
ModelFlag::DARK_CALIBRATION |
ModelFlag::CUSTOM_GAMMA;
- model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW;
+ model.buttons = GENESYS_HAS_SCAN_SW | GENESYS_HAS_FILE_SW | GENESYS_HAS_COPY_SW | GENESYS_HAS_TRANSP_SW;
model.search_lines = 100;
s_usb_devices->emplace_back(0x03f0, 0x4505, model);
@@ -619,8 +599,8 @@ void genesys_init_usb_device_tables()
model.resolutions = {
{
{ ScanMethod::FLATBED },
- { 2400, 1200, 600, 300, 200, 150, 100, 75 },
- { 4800, 2400, 1200, 600, 300, 200, 150, 100, 75 },
+ { 2400, 1200, 600, 300, 200, 150 },
+ { 4800, 2400, 1200, 600, 300, 200, 150 },
}
};
@@ -1020,8 +1000,8 @@ void genesys_init_usb_device_tables()
model.resolutions = {
{
{ ScanMethod::FLATBED },
- { 4800, 2400, 1200, 600, 300, 200, 150, 100, 75 },
- { 4800, 2400, 1200, 600, 300, 200, 150, 100, 75 },
+ { 4800, 2400, 1200, 600, 300, 200, 150 },
+ { 4800, 2400, 1200, 600, 300, 200, 150 },
}
};
@@ -1110,6 +1090,7 @@ void genesys_init_usb_device_tables()
model.gpio_id = GpioId::CANON_LIDE_35;
model.motor_id = MotorId::CANON_LIDE_60;
model.flags = ModelFlag::DARK_WHITE_CALIBRATION |
+ ModelFlag::HOST_SIDE_GRAY |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_COPY_SW |
@@ -1165,6 +1146,7 @@ void genesys_init_usb_device_tables()
model.gpio_id = GpioId::CANON_LIDE_80;
model.motor_id = MotorId::CANON_LIDE_80;
model.flags = ModelFlag::DARK_WHITE_CALIBRATION |
+ ModelFlag::HOST_SIDE_GRAY |
ModelFlag::CUSTOM_GAMMA;
model.buttons = GENESYS_HAS_SCAN_SW |
GENESYS_HAS_FILE_SW |
diff --git a/backend/genesys/tables_motor.cpp b/backend/genesys/tables_motor.cpp
index e8e89c5..3cc576f 100644
--- a/backend/genesys/tables_motor.cpp
+++ b/backend/genesys/tables_motor.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -472,7 +451,7 @@ void genesys_init_motor_tables()
motor.base_ydpi = 4800;
motor.profiles.push_back({MotorSlope::create_from_steps(62496, 864, 127),
StepType::FULL, 4608});
- motor.profiles.push_back({MotorSlope::create_from_steps(62496, 2010, 63),
+ motor.profiles.push_back({MotorSlope::create_from_steps(62496, 1338, 63),
StepType::HALF, 5360});
motor.profiles.push_back({MotorSlope::create_from_steps(62464, 2632, 3),
StepType::QUARTER, 10528});
diff --git a/backend/genesys/tables_sensor.cpp b/backend/genesys/tables_sensor.cpp
index 8383287..fb18abc 100644
--- a/backend/genesys/tables_sensor.cpp
+++ b/backend/genesys/tables_sensor.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
@@ -471,8 +450,8 @@ void genesys_init_sensor_tables()
sensor.register_dpihw = 1200;
sensor.black_pixels = 87;
sensor.dummy_pixel = 87;
- sensor.fau_gain_white_ref = 0;
- sensor.gain_white_ref = 0;
+ sensor.fau_gain_white_ref = 100;
+ sensor.gain_white_ref = 100;
sensor.exposure = { 0x0400, 0x0400, 0x0400 };
sensor.custom_regs = {
{ 0x16, 0x00 }, { 0x17, 0x02 }, { 0x18, 0x00 }, { 0x19, 0x50 },
@@ -519,8 +498,8 @@ void genesys_init_sensor_tables()
sensor.register_dpihw = 1200;
sensor.black_pixels = 87;
sensor.dummy_pixel = 87;
- sensor.fau_gain_white_ref = 0;
- sensor.gain_white_ref = 0;
+ sensor.fau_gain_white_ref = 100;
+ sensor.gain_white_ref = 100;
sensor.exposure = { 0x0400, 0x0400, 0x0400 };
sensor.custom_regs = {
{ 0x16, 0x00 }, { 0x17, 0x01 }, { 0x18, 0x00 }, { 0x19, 0x50 },
@@ -1058,30 +1037,6 @@ void genesys_init_sensor_tables()
CustomSensorSettings custom_settings[] = {
// Note: Windows driver uses 1424 lperiod and enables dummy line (0x17)
- { { 75 }, 600, 2848, { 304, 203, 180 }, Ratio{1, 8}, 8, 40, 5136,
- std::vector<unsigned>{}, {
- { 0x16, 0x10 }, { 0x17, 0x0a }, { 0x18, 0x00 }, { 0x19, 0xff },
- { 0x1a, 0x34 }, { 0x1b, 0x00 }, { 0x1c, 0x02 }, { 0x1d, 0x04 },
- { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x00 }, { 0x55, 0x00 },
- { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x2a }, { 0x59, 0xe1 }, { 0x5a, 0x55 },
- { 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x3c },
- { 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x9f },
- { 0x7a, 0x00 }, { 0x7b, 0x00 }, { 0x7c, 0x55 },
- }
- },
- // Note: Windows driver uses 1424 lperiod and enables dummy line (0x17)
- { { 100 }, 600, 2848, { 304, 203, 180 }, Ratio{1, 8}, 6, 53, 5136,
- std::vector<unsigned>{}, {
- { 0x16, 0x10 }, { 0x17, 0x0a }, { 0x18, 0x00 }, { 0x19, 0xff },
- { 0x1a, 0x34 }, { 0x1b, 0x00 }, { 0x1c, 0x02 }, { 0x1d, 0x04 },
- { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x00 }, { 0x55, 0x00 },
- { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x2a }, { 0x59, 0xe1 }, { 0x5a, 0x55 },
- { 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x3c },
- { 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x9f },
- { 0x7a, 0x00 }, { 0x7b, 0x00 }, { 0x7c, 0x55 },
- }
- },
- // Note: Windows driver uses 1424 lperiod and enables dummy line (0x17)
{ { 150 }, 600, 2848, { 304, 203, 180 }, Ratio{1, 8}, 4, 80, 5136,
std::vector<unsigned>{}, {
{ 0x16, 0x10 }, { 0x17, 0x0a }, { 0x18, 0x00 }, { 0x19, 0xff },
@@ -1361,28 +1316,6 @@ void genesys_init_sensor_tables()
};
CustomSensorSettings custom_settings[] = {
- { { 75 }, 600, 2304, { 423, 294, 242 }, Ratio{1, 4}, 8, 40, 5136,
- std::vector<unsigned>{}, {
- { 0x16, 0x10 }, { 0x17, 0x0a }, { 0x18, 0x00 }, { 0x19, 0xff },
- { 0x1a, 0x34 }, { 0x1b, 0x00 }, { 0x1c, 0x02 }, { 0x1d, 0x04 },
- { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x00 }, { 0x55, 0x00 },
- { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x2a }, { 0x59, 0xe1 }, { 0x5a, 0x55 },
- { 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x3c },
- { 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x9f },
- { 0x7a, 0x00 }, { 0x7b, 0x00 }, { 0x7c, 0x55 },
- }
- },
- { { 100 }, 600, 2304, { 423, 294, 242 }, Ratio{1, 4}, 6, 53, 5136,
- std::vector<unsigned>{}, {
- { 0x16, 0x10 }, { 0x17, 0x0a }, { 0x18, 0x00 }, { 0x19, 0xff },
- { 0x1a, 0x34 }, { 0x1b, 0x00 }, { 0x1c, 0x02 }, { 0x1d, 0x04 },
- { 0x52, 0x03 }, { 0x53, 0x07 }, { 0x54, 0x00 }, { 0x55, 0x00 },
- { 0x56, 0x00 }, { 0x57, 0x00 }, { 0x58, 0x2a }, { 0x59, 0xe1 }, { 0x5a, 0x55 },
- { 0x74, 0x00 }, { 0x75, 0x00 }, { 0x76, 0x3c },
- { 0x77, 0x00 }, { 0x78, 0x00 }, { 0x79, 0x9f },
- { 0x7a, 0x00 }, { 0x7b, 0x00 }, { 0x7c, 0x55 },
- }
- },
{ { 150 }, 600, 2304, { 423, 294, 242 }, Ratio{1, 4}, 4, 80, 5136,
std::vector<unsigned>{}, {
{ 0x16, 0x10 }, { 0x17, 0x0a }, { 0x18, 0x00 }, { 0x19, 0xff },
@@ -2635,6 +2568,13 @@ void genesys_init_sensor_tables()
sensor.shading_factor = setting.shading_factor;
sensor.segment_order = setting.segment_order;
sensor.custom_regs = setting.custom_regs;
+
+ sensor.channels = { 1 };
+ sensor.custom_regs.set_value(0x0c, 0x10);
+ s_sensors->push_back(sensor);
+
+ sensor.channels = { 3 };
+ sensor.custom_regs.set_value(0x0c, 0x12);
s_sensors->push_back(sensor);
}
}
@@ -2805,6 +2745,13 @@ void genesys_init_sensor_tables()
sensor.shading_factor = setting.shading_factor;
sensor.segment_order = setting.segment_order;
sensor.custom_regs = setting.custom_regs;
+
+ sensor.channels = { 1 };
+ sensor.custom_regs.set_value(0x0c, 0x10);
+ s_sensors->push_back(sensor);
+
+ sensor.channels = { 3 };
+ sensor.custom_regs.set_value(0x0c, 0x12);
s_sensors->push_back(sensor);
}
}
@@ -3000,6 +2947,13 @@ void genesys_init_sensor_tables()
sensor.shading_factor = setting.shading_factor;
sensor.segment_order = setting.segment_order;
sensor.custom_regs = setting.custom_regs;
+
+ sensor.channels = { 1 };
+ sensor.custom_regs.set_value(0x0c, 0x10);
+ s_sensors->push_back(sensor);
+
+ sensor.channels = { 3 };
+ sensor.custom_regs.set_value(0x0c, 0x12);
s_sensors->push_back(sensor);
}
}
@@ -3196,6 +3150,13 @@ void genesys_init_sensor_tables()
sensor.shading_factor = setting.shading_factor;
sensor.segment_order = setting.segment_order;
sensor.custom_regs = setting.custom_regs;
+
+ sensor.channels = { 1 };
+ sensor.custom_regs.set_value(0x0c, 0x10);
+ s_sensors->push_back(sensor);
+
+ sensor.channels = { 3 };
+ sensor.custom_regs.set_value(0x0c, 0x12);
s_sensors->push_back(sensor);
}
}
diff --git a/backend/genesys/test_scanner_interface.cpp b/backend/genesys/test_scanner_interface.cpp
index 5d0dcd3..412176e 100644
--- a/backend/genesys/test_scanner_interface.cpp
+++ b/backend/genesys/test_scanner_interface.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/test_scanner_interface.h b/backend/genesys/test_scanner_interface.h
index c1a3b76..9a5f412 100644
--- a/backend/genesys/test_scanner_interface.h
+++ b/backend/genesys/test_scanner_interface.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_TEST_SCANNER_INTERFACE_H
diff --git a/backend/genesys/test_settings.cpp b/backend/genesys/test_settings.cpp
index ba50f36..c0aa43f 100644
--- a/backend/genesys/test_settings.cpp
+++ b/backend/genesys/test_settings.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/test_settings.h b/backend/genesys/test_settings.h
index 90c6e50..64e8f02 100644
--- a/backend/genesys/test_settings.h
+++ b/backend/genesys/test_settings.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_TEST_SETTINGS_H
diff --git a/backend/genesys/test_usb_device.cpp b/backend/genesys/test_usb_device.cpp
index 46cd4e5..a5dbd78 100644
--- a/backend/genesys/test_usb_device.cpp
+++ b/backend/genesys/test_usb_device.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/test_usb_device.h b/backend/genesys/test_usb_device.h
index 6fd0ff3..ae8d4a2 100644
--- a/backend/genesys/test_usb_device.h
+++ b/backend/genesys/test_usb_device.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_TEST_USB_DEVICE_H
diff --git a/backend/genesys/usb_device.cpp b/backend/genesys/usb_device.cpp
index 63afb09..41b8fbe 100644
--- a/backend/genesys/usb_device.cpp
+++ b/backend/genesys/usb_device.cpp
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#define DEBUG_DECLARE_ONLY
diff --git a/backend/genesys/usb_device.h b/backend/genesys/usb_device.h
index 72f7017..fa97e5c 100644
--- a/backend/genesys/usb_device.h
+++ b/backend/genesys/usb_device.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_USB_DEVICE_H
diff --git a/backend/genesys/utilities.h b/backend/genesys/utilities.h
index 6e637d0..8c872c9 100644
--- a/backend/genesys/utilities.h
+++ b/backend/genesys/utilities.h
@@ -16,27 +16,6 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
-
- 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.
*/
#ifndef BACKEND_GENESYS_UTILITIES_H
@@ -226,7 +205,7 @@ class BasicStreamStateSaver
{
public:
explicit BasicStreamStateSaver(std::basic_ios<Char, Traits>& stream) :
- stream_{stream}
+ stream_(stream)
{
flags_ = stream_.flags();
width_ = stream_.width();
diff --git a/backend/gphoto2.c b/backend/gphoto2.c
index 0ea5b48..758829a 100644
--- a/backend/gphoto2.c
+++ b/backend/gphoto2.c
@@ -677,7 +677,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
}
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (GPHOTO2_CONFIG_FILE);
diff --git a/backend/gt68xx.c b/backend/gt68xx.c
index 6e43765..f46c578 100644
--- a/backend/gt68xx.c
+++ b/backend/gt68xx.c
@@ -1174,8 +1174,11 @@ static SANE_Status probe_gt68xx_devices(void)
new_dev[i]->model->firmware_name);
}
if (i == 0)
- DBG (5, "sane_init: firmware %s can't be loaded, set device "
- "first\n", word);
+ {
+ DBG (5, "sane_init: firmware %s can't be loaded, set device "
+ "first\n", word);
+ free (word);
+ }
}
else
{
@@ -1198,8 +1201,11 @@ static SANE_Status probe_gt68xx_devices(void)
new_dev[i]->model->name, new_dev[i]->model->vendor);
}
if (i == 0)
- DBG (5, "sane_init: can't set vendor name %s, set device "
- "first\n", word);
+ {
+ DBG (5, "sane_init: can't set vendor name %s, set device "
+ "first\n", word);
+ free (word);
+ }
}
else
{
@@ -1221,9 +1227,11 @@ static SANE_Status probe_gt68xx_devices(void)
new_dev[i]->model->name, new_dev[i]->model->model);
}
if (i == 0)
- DBG (5, "sane_init: can't set model name %s, set device "
- "first\n", word);
- free (word);
+ {
+ DBG (5, "sane_init: can't set model name %s, set device "
+ "first\n", word);
+ free (word);
+ }
}
else
{
@@ -1332,10 +1340,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
}
#endif
DBG (2, "SANE GT68xx backend version %d.%d build %d from %s\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (5, "sane_init: authorize %s null\n", authorize ? "!=" : "==");
diff --git a/backend/hp.c b/backend/hp.c
index 2358d1f..558a36d 100644
--- a/backend/hp.c
+++ b/backend/hp.c
@@ -816,7 +816,7 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback __sane_unused__ authorize)
hp_destroy();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, VERSIO);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, VERSIO);
status = hp_init();
DBG(3, "sane_init will finish with %s\n", sane_strstatus (status));
diff --git a/backend/hp3500.c b/backend/hp3500.c
index b7a2d59..bf07b36 100644
--- a/backend/hp3500.c
+++ b/backend/hp3500.c
@@ -274,7 +274,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
sanei_thread_init ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
sanei_usb_find_devices (0x03f0, 0x2205, attachScanner);
sanei_usb_find_devices (0x03f0, 0x2005, attachScanner);
diff --git a/backend/hp3900_sane.c b/backend/hp3900_sane.c
index c717d4d..eae99e0 100644
--- a/backend/hp3900_sane.c
+++ b/backend/hp3900_sane.c
@@ -1806,7 +1806,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
/* Return backend version */
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
return SANE_STATUS_GOOD;
}
diff --git a/backend/hp4200.c b/backend/hp4200.c
index c080fcb..5b21b47 100644
--- a/backend/hp4200.c
+++ b/backend/hp4200.c
@@ -1497,7 +1497,7 @@ do_fine_calibration (HP4200_Scanner * s, struct coarse_t *coarse)
int i;
for (i = 0; i < 12; i++)
{
- memset (registro[i], 0, 5460 * 3 * sizeof(registro[0]));
+ memset (registro[i], 0, 5460 * 3 * sizeof(int));
}
}
@@ -2375,12 +2375,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (DBG_proc, "%s\n", me);
DBG (DBG_error, "SANE hp4200 backend version %d.%d build %d from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
/* put some version_code checks here */
if (NULL != version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
}
sanei_usb_init ();
diff --git a/backend/hp5400_sane.c b/backend/hp5400_sane.c
index 8413568..5043dad 100644
--- a/backend/hp5400_sane.c
+++ b/backend/hp5400_sane.c
@@ -623,7 +623,7 @@ sane_init (SANE_Int * piVersion, SANE_Auth_Callback pfnAuth)
DBG_INIT ();
HP5400_DBG (DBG_MSG, "sane_init: SANE hp5400 backend version %d.%d-%d (from %s)\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
sanei_usb_init ();
@@ -671,7 +671,7 @@ sane_init (SANE_Int * piVersion, SANE_Auth_Callback pfnAuth)
if (piVersion != NULL)
{
- *piVersion = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *piVersion = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
return SANE_STATUS_GOOD;
diff --git a/backend/hp5590.c b/backend/hp5590.c
index 1c164e4..78c9313 100644
--- a/backend/hp5590.c
+++ b/backend/hp5590.c
@@ -480,11 +480,11 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG_INIT();
DBG (1, "SANE backed for HP ScanJet 4500C/4570C/5500C/5550C/5590/7650 %u.%u.%u\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (1, "(c) Ilia Sotnikov <hostcc@gmail.com>\n");
if (version_code)
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
sanei_usb_init();
diff --git a/backend/hpljm1005.c b/backend/hpljm1005.c
index 95ddd8e..2a7116c 100644
--- a/backend/hpljm1005.c
+++ b/backend/hpljm1005.c
@@ -392,7 +392,7 @@ sane_init (SANE_Int * version_code,
{
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG_INIT();
diff --git a/backend/hpsj5s.c b/backend/hpsj5s.c
index ea58433..5ff5064 100644
--- a/backend/hpsj5s.c
+++ b/backend/hpsj5s.c
@@ -166,11 +166,11 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (2, "sane_init: version_code %s 0, authorize %s 0\n",
version_code == 0 ? "=" : "!=", authorize == 0 ? "=" : "!=");
DBG (1, "sane_init: SANE hpsj5s backend version %d.%d.%d\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
/*Inform about supported version */
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
/*Open configuration file for this backend */
config_file = sanei_config_open (HPSJ5S_CONFIG_FILE);
diff --git a/backend/hs2p.c b/backend/hs2p.c
index ec9eec9..76f4b96 100644
--- a/backend/hs2p.c
+++ b/backend/hs2p.c
@@ -1565,14 +1565,14 @@ sane_init (SANE_Int * version_code,
/*DBG (DBG_sane_init, "> sane_init (authorize = %p)\n", (void *) authorize); */
#if defined PACKAGE && defined VERSION
DBG (DBG_sane_init, "> sane_init: hs2p backend version %d.%d-%d ("
- PACKAGE " " VERSION ")\n", SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ PACKAGE " " VERSION ")\n", SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
#endif
/*
sanei_thread_init ();
*/
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
if ((fp = sanei_config_open (HS2P_CONFIG_FILE)) != NULL)
diff --git a/backend/ibm.c b/backend/ibm.c
index 91a09ee..688cdfb 100644
--- a/backend/ibm.c
+++ b/backend/ibm.c
@@ -545,11 +545,11 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
#if defined PACKAGE && defined VERSION
DBG (2, "sane_init: ibm backend version %d.%d-%d ("
- PACKAGE " " VERSION ")\n", SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ PACKAGE " " VERSION ")\n", SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
#endif
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open(IBM_CONFIG_FILE);
if (fp)
diff --git a/backend/kodak.c b/backend/kodak.c
index 39c91e6..c41f088 100644
--- a/backend/kodak.c
+++ b/backend/kodak.c
@@ -181,10 +181,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (10, "sane_init: start\n");
if (version_code)
- *version_code = SANE_VERSION_CODE (V_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (5, "sane_init: kodak backend %d.%d.%d, from %s\n",
- V_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
DBG (10, "sane_init: finish\n");
diff --git a/backend/kodakaio.c b/backend/kodakaio.c
index 73dd58b..fe83e27 100644
--- a/backend/kodakaio.c
+++ b/backend/kodakaio.c
@@ -2629,7 +2629,7 @@ sane_init(SANE_Int *version_code, SANE_Auth_Callback __sane_unused__ authorize)
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,
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR,
KODAKAIO_BUILD);
sanei_usb_init();
diff --git a/backend/kvs1025.c b/backend/kvs1025.c
index fc89d87..9d53690 100644
--- a/backend/kvs1025.c
+++ b/backend/kvs1025.c
@@ -51,11 +51,11 @@ sane_init (SANE_Int * version_code,
DBG (DBG_error,
"This is panasonic KV-S1020C / KV-S1025C version %d.%d build %d\n",
- V_MAJOR, V_MINOR, V_BUILD);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, V_BUILD);
if (version_code)
{
- *version_code = SANE_VERSION_CODE (V_MAJOR, V_MINOR, V_BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, V_BUILD);
}
/* Initialize USB */
diff --git a/backend/kvs20xx.c b/backend/kvs20xx.c
index 8864d7d..7baebbc 100644
--- a/backend/kvs20xx.c
+++ b/backend/kvs20xx.c
@@ -64,7 +64,7 @@ sane_init (SANE_Int __sane_unused__ * version_code,
DBG_INIT ();
DBG (DBG_INFO, "This is panasonic kvs20xx driver\n");
- *version_code = SANE_VERSION_CODE (V_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
/* Initialize USB */
sanei_usb_init ();
diff --git a/backend/kvs40xx.c b/backend/kvs40xx.c
index 6416d64..230bdc2 100644
--- a/backend/kvs40xx.c
+++ b/backend/kvs40xx.c
@@ -165,7 +165,7 @@ sane_init (SANE_Int __sane_unused__ * version_code,
DBG_INIT ();
DBG (DBG_INFO, "This is panasonic kvs40xx driver\n");
- *version_code = SANE_VERSION_CODE (V_MAJOR, V_MINOR, 1);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 1);
/* Initialize USB */
sanei_usb_init ();
diff --git a/backend/leo.c b/backend/leo.c
index 3c97daa..344d2c6 100644
--- a/backend/leo.c
+++ b/backend/leo.c
@@ -1298,12 +1298,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG (DBG_sane_init, "sane_init\n");
DBG (DBG_error, "This is sane-leo version %d.%d-%d\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD);
+ SANE_CURRENT_MINOR, BUILD);
DBG (DBG_error, "(C) 2002 by Frank Zago\n");
if (version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
fp = sanei_config_open (LEO_CONFIG_FILE);
diff --git a/backend/lexmark.c b/backend/lexmark.c
index 2c9287a..ba0311d 100644
--- a/backend/lexmark.c
+++ b/backend/lexmark.c
@@ -526,12 +526,12 @@ sane_init (SANE_Int * version_code,
DBG_INIT ();
DBG (1, "SANE Lexmark backend version %d.%d.%d-devel\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD);
+ SANE_CURRENT_MINOR, BUILD);
DBG (2, "sane_init: version_code=%p\n", (void *) version_code);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
#ifndef FAKE_USB
sanei_usb_init ();
diff --git a/backend/ma1509.c b/backend/ma1509.c
index 37bbefb..5966a17 100644
--- a/backend/ma1509.c
+++ b/backend/ma1509.c
@@ -1110,10 +1110,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
#endif
DBG (2, "SANE ma1509 backend version %d.%d build %d from %s\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (4, "sane_init: authorize %s null\n", authorize ? "!=" : "==");
diff --git a/backend/magicolor.c b/backend/magicolor.c
index 886dbab..8fc6d31 100644
--- a/backend/magicolor.c
+++ b/backend/magicolor.c
@@ -2266,7 +2266,7 @@ sane_init(SANE_Int *version_code, SANE_Auth_Callback __sane_unused__ authorize)
MAGICOLOR_VERSION, MAGICOLOR_REVISION, MAGICOLOR_BUILD);
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR,
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR,
MAGICOLOR_BUILD);
sanei_usb_init();
diff --git a/backend/matsushita.c b/backend/matsushita.c
index d982f50..e3a983f 100644
--- a/backend/matsushita.c
+++ b/backend/matsushita.c
@@ -1711,12 +1711,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG (DBG_sane_init, "sane_init\n");
DBG (DBG_error, "This is sane-matsushita version %d.%d-%d\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD);
+ SANE_CURRENT_MINOR, BUILD);
DBG (DBG_error, "(C) 2002 by Frank Zago\n");
if (version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
fp = sanei_config_open (MATSUSHITA_CONFIG_FILE);
diff --git a/backend/microtek.c b/backend/microtek.c
index 200a69c..17f3151 100644
--- a/backend/microtek.c
+++ b/backend/microtek.c
@@ -57,6 +57,7 @@
#include "../include/sane/config.h"
+#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@@ -3065,7 +3066,7 @@ sane_init(SANE_Int *version_code, SANE_Auth_Callback authorize)
MICROTEK_MAJOR, MICROTEK_MINOR, MICROTEK_PATCH);
/* return the SANE version we got compiled under */
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
/* parse config file */
fp = sanei_config_open (MICROTEK_CONFIG_FILE);
diff --git a/backend/microtek2.c b/backend/microtek2.c
index 72c1b20..505e86b 100644
--- a/backend/microtek2.c
+++ b/backend/microtek2.c
@@ -456,7 +456,7 @@ sane_init(SANE_Int *version_code, SANE_Auth_Callback __sane_unused__ authorize)
MICROTEK2_MAJOR, MICROTEK2_MINOR, MICROTEK2_BUILD);
if ( version_code )
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
#ifdef HAVE_AUTHORIZATION
auth_callback = authorize;
diff --git a/backend/mustek.c b/backend/mustek.c
index 48bcfd9..4d77fb5 100644
--- a/backend/mustek.c
+++ b/backend/mustek.c
@@ -5201,10 +5201,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
#endif
DBG (2, "SANE mustek backend version %d.%d build %d from %s\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (5, "sane_init: authorize %s null\n", authorize ? "!=" : "==");
diff --git a/backend/mustek_pp.c b/backend/mustek_pp.c
index 26dc0e4..2d374ee 100644
--- a/backend/mustek_pp.c
+++ b/backend/mustek_pp.c
@@ -710,7 +710,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (3, "backend by Jochen Eisinger <jochen.eisinger@gmx.net>\n");
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, MUSTEK_PP_BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, MUSTEK_PP_BUILD);
sane_auth = authorize;
diff --git a/backend/mustek_usb.c b/backend/mustek_usb.c
index 6bd3390..7417094 100644
--- a/backend/mustek_usb.c
+++ b/backend/mustek_usb.c
@@ -699,10 +699,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG_INIT ();
DBG (2, "SANE Mustek USB backend version %d.%d build %d from %s\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (5, "sane_init: authorize %s null\n", authorize ? "!=" : "==");
diff --git a/backend/mustek_usb2.c b/backend/mustek_usb2.c
index aa4d797..9faeff6 100644
--- a/backend/mustek_usb2.c
+++ b/backend/mustek_usb2.c
@@ -2008,12 +2008,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG_INIT ();
DBG (DBG_FUNC, "sane_init: start\n");
DBG (DBG_ERR, "SANE Mustek USB2 backend version %d.%d build %d from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
num_devices = 1; /* HOLD: only one device in this backend */
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (DBG_INFO, "sane_init: authorize %s null\n", authorize ? "!=" : "==");
diff --git a/backend/nec.c b/backend/nec.c
index b61bb37..66bfc9b 100644
--- a/backend/nec.c
+++ b/backend/nec.c
@@ -1898,7 +1898,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (1, "sane_init: NEC (Ver %d.%d)\n", NEC_MAJOR, NEC_MINOR);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (NEC_CONFIG_FILE);
if (!fp)
diff --git a/backend/niash.c b/backend/niash.c
index 03faa36..bce6c2f 100644
--- a/backend/niash.c
+++ b/backend/niash.c
@@ -195,7 +195,7 @@ _UnityGammaTable (unsigned char *hwGamma)
}
static const SANE_Range rangeXmm = { 0, 220, 1 };
-static const SANE_Range rangeYmm = { 0, 296, 1 };
+static const SANE_Range rangeYmm = { 0, 297, 1 };
static const SANE_Int startUpGamma = SANE_FIX (1.6);
static const char colorStr[] = { SANE_VALUE_SCAN_MODE_COLOR };
@@ -827,7 +827,7 @@ sane_init (SANE_Int * piVersion, SANE_Auth_Callback __sane_unused__ pfnAuth)
if (piVersion != NULL)
{
- *piVersion = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *piVersion = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
/* initialise transfer methods */
diff --git a/backend/p5.c b/backend/p5.c
index 7e25cc1..558d9d2 100644
--- a/backend/p5.c
+++ b/backend/p5.c
@@ -164,12 +164,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
/* init backend debug */
DBG_INIT ();
DBG (DBG_info, "SANE P5 backend version %d.%d-%d\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (DBG_proc, "sane_init: start\n");
DBG (DBG_trace, "sane_init: init_count=%d\n", init_count);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
/* cold-plugging case : probe for already plugged devices */
status = probe_p5_devices ();
diff --git a/backend/pie.c b/backend/pie.c
index b5be0a2..2db90dc 100644
--- a/backend/pie.c
+++ b/backend/pie.c
@@ -2936,7 +2936,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG (DBG_sane_init, "sane_init() build %d\n", BUILD);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
fp = sanei_config_open (PIE_CONFIG_FILE);
if (!fp)
diff --git a/backend/pieusb.c b/backend/pieusb.c
index a070fc0..f8dc073 100644
--- a/backend/pieusb.c
+++ b/backend/pieusb.c
@@ -110,6 +110,8 @@ extern void write_tiff_rgbi_header (FILE *fptr, int width, int height, int depth
/* device flags */
#define FLAG_SLIDE_TRANSPORT 0x01
+/* Some scanners do understand SLIDE_TRANSPORT but not CMD_17 - introducing a new flag */
+#define FLAG_CMD_17_NOSUPPORT 0x02
/* --------------------------------------------------------------------------
*
@@ -163,7 +165,6 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG (DBG_info_sane, "sane_init() build %d\n", BUILD);
/* Set version code to current major, minor and build number */
- /* TODO: use V_MINOR instead or SANE_CURRENT_MINOR? If so, why? */
if (version_code)
*version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
@@ -1004,10 +1005,12 @@ sane_start (SANE_Handle handle)
/* ----------------------------------------------------------------------
*
* Function 17
+ * This function is not supported by all scanners which are capable of
+ * slide transport, therefore FLAG_CMD_17_NOSUPPORT was introduced.
*
* ---------------------------------------------------------------------- */
- if (scanner->device->flags & FLAG_SLIDE_TRANSPORT) {
+ if ( (scanner->device->flags & FLAG_SLIDE_TRANSPORT) & !(scanner->device->flags & FLAG_CMD_17_NOSUPPORT) ) {
sanei_pieusb_cmd_17 (scanner->device_number, 1, &status);
if (status.pieusb_status != PIEUSB_STATUS_GOOD) {
DBG (DBG_error, "sane_start(): sanei_pieusb_cmd_17 failed: %d\n", status.pieusb_status);
diff --git a/backend/pieusb.conf.in b/backend/pieusb.conf.in
index 8904d3d..df9a194 100644
--- a/backend/pieusb.conf.in
+++ b/backend/pieusb.conf.in
@@ -16,5 +16,7 @@
usb 0x05e3 0x0145 0x47 0x00
# Reflecta CrystalScan 3600
usb 0x05e3 0x0145 0x2e 0x00
-# Reflecta DigitDia 4000
-usb 0x05e3 0x0142 0x2f 0x00
+# Reflecta DigitDia 4000 - SLIDE_TRANSPORT but no CMD_17
+usb 0x05e3 0x0142 0x2f 0x03
+# Reflecta RPS 10M (aka Pacific Image PrimeFilm XAs)
+usb 0x05e3 0x0144 0x0048 0x00
diff --git a/backend/pieusb_specific.c b/backend/pieusb_specific.c
index 033ad03..e5471ee 100644
--- a/backend/pieusb_specific.c
+++ b/backend/pieusb_specific.c
@@ -753,7 +753,7 @@ sanei_pieusb_init_options (Pieusb_Scanner* scanner)
scanner->opt[OPT_FAST_INFRARED].cap |= SANE_CAP_SOFT_SELECT;
/* automatically advance to next slide after scan */
- scanner->opt[OPT_ADVANCE_SLIDE].name = "advcane";
+ scanner->opt[OPT_ADVANCE_SLIDE].name = "advance";
scanner->opt[OPT_ADVANCE_SLIDE].title = "Advance slide";
scanner->opt[OPT_ADVANCE_SLIDE].desc = "Automatically advance to next slide after scan";
scanner->opt[OPT_ADVANCE_SLIDE].type = SANE_TYPE_BOOL;
diff --git a/backend/pint.c b/backend/pint.c
index 7ab53e5..cc8137b 100644
--- a/backend/pint.c
+++ b/backend/pint.c
@@ -573,7 +573,7 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authorize)
DBG_INIT();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (PINT_CONFIG_FILE);
if (!fp)
diff --git a/backend/pixma/pixma.c b/backend/pixma/pixma.c
index b4e423d..31e71f0 100644
--- a/backend/pixma/pixma.c
+++ b/backend/pixma/pixma.c
@@ -1661,7 +1661,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
if (!version_code)
return SANE_STATUS_INVAL;
myversion = 100 * PIXMA_VERSION_MAJOR + PIXMA_VERSION_MINOR;
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, myversion);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, myversion);
DBG_INIT ();
sanei_thread_init ();
pixma_set_debug_level (DBG_LEVEL);
diff --git a/backend/pixma/pixma_common.c b/backend/pixma/pixma_common.c
index 6bce4bc..24912b8 100644
--- a/backend/pixma/pixma_common.c
+++ b/backend/pixma/pixma_common.c
@@ -968,16 +968,16 @@ pixma_read_image (pixma_t * s, void *buf, unsigned len)
s->last_source = s->param->source;
if ((s->cur_image_size != s->param->image_size) && !s->param->mode_jpeg)
{
- pixma_dbg (1, "WARNING:image size mismatches\n");
- pixma_dbg (1,
+ PDBG (pixma_dbg (1, "WARNING:image size mismatches\n"));
+ PDBG (pixma_dbg (1,
" %"PRIu64" expected (%d lines) but %"PRIu64" received (%"PRIu64" lines)\n",
s->param->image_size, s->param->h,
s->cur_image_size,
- 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,
- "BUG:received data not multiple of line_size\n");
+ PDBG (pixma_dbg (1,
+ "BUG:received data not multiple of line_size\n"));
}
}
if ((s->cur_image_size < s->param->image_size) && !s->param->mode_jpeg)
diff --git a/backend/plustek.c b/backend/plustek.c
index 10458a0..96fd04f 100644
--- a/backend/plustek.c
+++ b/backend/plustek.c
@@ -1465,7 +1465,7 @@ sane_init( SANE_Int *version_code, SANE_Auth_Callback authorize )
usbGetList( &usbDevs );
if( version_code != NULL )
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open( PLUSTEK_CONFIG_FILE );
diff --git a/backend/plustek_pp.c b/backend/plustek_pp.c
index 76a8789..af91c99 100644
--- a/backend/plustek_pp.c
+++ b/backend/plustek_pp.c
@@ -1166,7 +1166,7 @@ SANE_Status sane_init( SANE_Int *version_code, SANE_Auth_Callback authorize )
#endif
if( version_code != NULL )
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open( PLUSTEK_CONFIG_FILE );
diff --git a/backend/pnm.c b/backend/pnm.c
index ccc6f64..0ace3a5 100644
--- a/backend/pnm.c
+++ b/backend/pnm.c
@@ -509,10 +509,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (2, "sane_init: version_code %s 0, authorize %s 0\n",
version_code == 0 ? "=" : "!=", authorize == 0 ? "=" : "!=");
DBG (1, "sane_init: SANE pnm backend version %d.%d.%d from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
return SANE_STATUS_GOOD;
}
diff --git a/backend/qcam.c b/backend/qcam.c
index 9b1d7a3..9d55055 100644
--- a/backend/qcam.c
+++ b/backend/qcam.c
@@ -1461,7 +1461,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (1, "sane_init: enter\n");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (QCAM_CONFIG_FILE);
if (!fp)
diff --git a/backend/ricoh.c b/backend/ricoh.c
index eb692c9..d1f20c0 100644
--- a/backend/ricoh.c
+++ b/backend/ricoh.c
@@ -495,7 +495,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
#endif
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open(RICOH_CONFIG_FILE);
if (fp)
diff --git a/backend/ricoh2.c b/backend/ricoh2.c
index e8f8604..e145b65 100644
--- a/backend/ricoh2.c
+++ b/backend/ricoh2.c
@@ -293,7 +293,7 @@ sane_init (SANE_Int *vc, SANE_Auth_Callback __sane_unused__ cb)
}
if (vc)
- *vc = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *vc = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
DBG(8, "<sane_init\n");
initialized = SANE_TRUE;
diff --git a/backend/rts8891.c b/backend/rts8891.c
index e8d57b8..fa5d17a 100644
--- a/backend/rts8891.c
+++ b/backend/rts8891.c
@@ -315,11 +315,11 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
/* init backend debug */
DBG_INIT ();
DBG (DBG_info, "SANE Rts8891 backend version %d.%d-%d\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG (DBG_proc, "sane_init: start\n");
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
/* cold-plugging case : probe for already plugged devices */
status = probe_rts8891_devices ();
diff --git a/backend/rts8891_low.c b/backend/rts8891_low.c
index 535f6d5..1b95765 100644
--- a/backend/rts8891_low.c
+++ b/backend/rts8891_low.c
@@ -64,7 +64,7 @@ rts8891_low_init (void)
{
DBG_INIT ();
DBG (DBG_info, "RTS8891 low-level functions, version %d.%d-%d\n",
- SANE_CURRENT_MAJOR, V_MINOR, RTS8891_BUILD);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, RTS8891_BUILD);
}
diff --git a/backend/rts88xx_lib.c b/backend/rts88xx_lib.c
index 16727ef..c047b18 100644
--- a/backend/rts88xx_lib.c
+++ b/backend/rts88xx_lib.c
@@ -63,7 +63,7 @@ void
sanei_rts88xx_lib_init (void)
{
DBG_INIT ();
- DBG (DBG_info, "RTS88XX library, version %d.%d-%d\n", SANE_CURRENT_MAJOR, V_MINOR,
+ DBG (DBG_info, "RTS88XX library, version %d.%d-%d\n", SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR,
RTS88XX_LIB_BUILD);
}
diff --git a/backend/s9036.c b/backend/s9036.c
index b3734ed..8f84ecf 100644
--- a/backend/s9036.c
+++ b/backend/s9036.c
@@ -834,7 +834,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG_INIT ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open ("s9036.conf");
if (!fp)
diff --git a/backend/sceptre.c b/backend/sceptre.c
index 62f28ff..7f5d4e4 100644
--- a/backend/sceptre.c
+++ b/backend/sceptre.c
@@ -1315,12 +1315,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG (DBG_proc, "sane_init: enter\n");
DBG (DBG_error, "This is sane-sceptre version %d.%d-%d\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD);
+ SANE_CURRENT_MINOR, BUILD);
DBG (DBG_error, "(C) 2002 by Frank Zago\n");
if (version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
fp = sanei_config_open (SCEPTRE_CONFIG_FILE);
diff --git a/backend/sharp.c b/backend/sharp.c
index d533103..b52e8e2 100644
--- a/backend/sharp.c
+++ b/backend/sharp.c
@@ -2361,7 +2361,7 @@ sane_init (SANE_Int * version_code,
#endif
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (SHARP_CONFIG_FILE);
if (!fp)
diff --git a/backend/sm3600-scanutil.c b/backend/sm3600-scanutil.c
index 6fe67ed..616bf3f 100644
--- a/backend/sm3600-scanutil.c
+++ b/backend/sm3600-scanutil.c
@@ -43,6 +43,7 @@ Userspace scan tool for the Microtek 3600 scanner
====================================================================== */
+#include <stdarg.h>
#include <unistd.h>
#include "sm3600-scantool.h"
diff --git a/backend/sm3600.c b/backend/sm3600.c
index 8542e3e..e1df6b0 100644
--- a/backend/sm3600.c
+++ b/backend/sm3600.c
@@ -390,9 +390,9 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authCB)
DBG(DEBUG_VERBOSE,"SM3600 init\n");
if (version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
DBG(DEBUG_VERBOSE,"SM3600 version: %x\n",
- SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, BUILD));
+ SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD));
}
pdevFirst=NULL;
diff --git a/backend/sm3840.c b/backend/sm3840.c
index b728128..159f600 100644
--- a/backend/sm3840.c
+++ b/backend/sm3840.c
@@ -549,7 +549,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
{
DBG_INIT ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
if (authorize)
DBG (2, "Unused authorize\n");
diff --git a/backend/sp15c.c b/backend/sp15c.c
index 6feada5..a3ad5c2 100644
--- a/backend/sp15c.c
+++ b/backend/sp15c.c
@@ -281,7 +281,7 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
sanei_thread_init ();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (SP15C_CONFIG_FILE);
if (!fp)
{
diff --git a/backend/st400.c b/backend/st400.c
index 487dbd1..a75807f 100644
--- a/backend/st400.c
+++ b/backend/st400.c
@@ -680,7 +680,7 @@ sane_init( SANE_Int *versionP, SANE_Auth_Callback authorize )
DBG(DCODE, "sane_init: version %s null, authorize %s null\n", (versionP) ? "!=" : "==", (authorize) ? "!=" : "==");
if( versionP != NULL )
- *versionP = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *versionP = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
status = SANE_STATUS_GOOD;
if( (fp = sanei_config_open(ST400_CONFIG_FILE)) != NULL ) {
diff --git a/backend/stv680.c b/backend/stv680.c
index cab59b4..eb9add5 100644
--- a/backend/stv680.c
+++ b/backend/stv680.c
@@ -1523,12 +1523,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
authorize = authorize; /* silence gcc */
DBG (DBG_error, "This is sane-stv680 version %d.%d-%d\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD);
+ SANE_CURRENT_MINOR, BUILD);
DBG (DBG_error, "(C) 2004-2006 by Gerard Klaver\n");
if (version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
DBG (DBG_proc, "sane_init: authorize %s null\n", authorize ? "!=" : "==");
diff --git a/backend/tamarack.c b/backend/tamarack.c
index 38e0aad..38cc7ea 100644
--- a/backend/tamarack.c
+++ b/backend/tamarack.c
@@ -916,7 +916,7 @@ sane_init (SANE_Int *version_code, SANE_Auth_Callback authorize)
sanei_thread_init();
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open (TAMARACK_CONFIG_FILE);
if (!fp) {
diff --git a/backend/teco1.c b/backend/teco1.c
index 6462ac2..1ba0dff 100644
--- a/backend/teco1.c
+++ b/backend/teco1.c
@@ -1476,12 +1476,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG (DBG_sane_init, "sane_init\n");
DBG (DBG_error, "This is sane-teco1 version %d.%d-%d\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD);
+ SANE_CURRENT_MINOR, BUILD);
DBG (DBG_error, "(C) 2002 by Frank Zago\n");
if (version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
fp = sanei_config_open (TECO_CONFIG_FILE);
diff --git a/backend/teco2.c b/backend/teco2.c
index 01fb667..fd3aa5f 100644
--- a/backend/teco2.c
+++ b/backend/teco2.c
@@ -2519,12 +2519,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG (DBG_sane_init, "sane_init\n");
DBG (DBG_error, "This is sane-teco2 version %d.%d-%d\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD);
+ SANE_CURRENT_MINOR, BUILD);
DBG (DBG_error, "(C) 2002 - 2003 by Frank Zago, update 2003 - 2008 by Gerard Klaver\n");
if (version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
fp = sanei_config_open (TECO2_CONFIG_FILE);
diff --git a/backend/teco3.c b/backend/teco3.c
index 6a0c61f..d568a5e 100644
--- a/backend/teco3.c
+++ b/backend/teco3.c
@@ -1498,12 +1498,12 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback __sane_unused__ authorize
DBG (DBG_sane_init, "sane_init\n");
DBG (DBG_error, "This is sane-teco3 version %d.%d-%d\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD);
+ SANE_CURRENT_MINOR, BUILD);
DBG (DBG_error, "(C) 2002 by Frank Zago\n");
if (version_code)
{
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
fp = sanei_config_open (TECO_CONFIG_FILE);
diff --git a/backend/test.c b/backend/test.c
index 075fdfa..3c7a949 100644
--- a/backend/test.c
+++ b/backend/test.c
@@ -1637,10 +1637,10 @@ sane_init (SANE_Int * __sane_unused__ version_code, SANE_Auth_Callback __sane_un
previous_device = 0;
DBG (1, "sane_init: SANE test backend version %d.%d.%d from %s\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
if (inited)
DBG (3, "sane_init: warning: already inited\n");
diff --git a/backend/u12.c b/backend/u12.c
index 7434552..c7bc51a 100644
--- a/backend/u12.c
+++ b/backend/u12.c
@@ -941,7 +941,7 @@ SANE_Status sane_init( SANE_Int *version_code, SANE_Auth_Callback authorize )
init_config_struct( &config );
if( version_code != NULL )
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, 0);
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, 0);
fp = sanei_config_open( U12_CONFIG_FILE );
diff --git a/backend/umax.c b/backend/umax.c
index 9cefc08..d6551c5 100644
--- a/backend/umax.c
+++ b/backend/umax.c
@@ -5987,7 +5987,7 @@ SANE_Status sane_init(SANE_Int *version_code, SANE_Auth_Callback authorize)
DBG_INIT();
DBG(DBG_sane_init,"sane_init\n");
- DBG(DBG_error,"This is sane-umax version %d.%d build %d\n", SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ DBG(DBG_error,"This is sane-umax version %d.%d build %d\n", SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
#ifdef UMAX_ENABLE_USB
DBG(DBG_error,"compiled with USB support for Astra 2200\n");
#else
@@ -5998,7 +5998,7 @@ SANE_Status sane_init(SANE_Int *version_code, SANE_Auth_Callback authorize)
if (version_code)
{
- *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
}
frontend_authorize_callback = authorize; /* store frontend authorize callback */
diff --git a/backend/umax1220u.c b/backend/umax1220u.c
index 6e8d95f..8c6098c 100644
--- a/backend/umax1220u.c
+++ b/backend/umax1220u.c
@@ -593,10 +593,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG (2, "sane_init: version_code %s 0, authorize %s 0\n",
version_code == 0 ? "=" : "!=", authorize == 0 ? "=" : "!=");
DBG (1, "sane_init: SANE umax1220u backend version %d.%d.%d from %s\n",
- SANE_CURRENT_MAJOR, V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
sanei_usb_init ();
sanei_pv8630_init ();
diff --git a/backend/umax_pp.c b/backend/umax_pp.c
index 4a4ab8a..e705a77 100644
--- a/backend/umax_pp.c
+++ b/backend/umax_pp.c
@@ -833,9 +833,9 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
}
if (version_code != NULL)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, UMAX_PP_BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, UMAX_PP_BUILD);
- DBG (3, "init: SANE v%s, backend v%d.%d.%d-%s\n", VERSION, SANE_CURRENT_MAJOR, V_MINOR,
+ DBG (3, "init: SANE v%s, backend v%d.%d.%d-%s\n", VERSION, SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR,
UMAX_PP_BUILD, UMAX_PP_STATE);
/* set up configuration options to parse */
diff --git a/backend/umax_pp.h b/backend/umax_pp.h
index ffff012..c41328b 100644
--- a/backend/umax_pp.h
+++ b/backend/umax_pp.h
@@ -192,7 +192,7 @@ enum Umax_PP_Configure_Option
};
#define DEBUG() DBG(4, "%s(v%d.%d.%d-%s): line %d: debug exception\n", \
- __func__, SANE_CURRENT_MAJOR, V_MINOR, \
+ __func__, SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, \
UMAX_PP_BUILD, UMAX_PP_STATE, __LINE__)
#endif /* umax_pp_h */
diff --git a/backend/v4l.c b/backend/v4l.c
index b15e5d1..bce3c3a 100644
--- a/backend/v4l.c
+++ b/backend/v4l.c
@@ -438,10 +438,10 @@ sane_init (SANE_Int * version_code, SANE_Auth_Callback authorize)
DBG_INIT ();
DBG (2, "SANE v4l backend version %d.%d build %d from %s\n", SANE_CURRENT_MAJOR,
- V_MINOR, BUILD, PACKAGE_STRING);
+ SANE_CURRENT_MINOR, BUILD, PACKAGE_STRING);
if (version_code)
- *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, V_MINOR, BUILD);
+ *version_code = SANE_VERSION_CODE (SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BUILD);
fp = sanei_config_open (V4L_CONFIG_FILE);
if (!fp)
diff --git a/backend/xerox_mfp.c b/backend/xerox_mfp.c
index edd6e64..310dc53 100644
--- a/backend/xerox_mfp.c
+++ b/backend/xerox_mfp.c
@@ -1042,7 +1042,7 @@ sane_init(SANE_Int *version_code, SANE_Auth_Callback cb)
(version_code) ? "!=" : "==", (cb) ? "!=" : "==");
if (version_code)
- *version_code = SANE_VERSION_CODE(V_MAJOR, V_MINOR, BACKEND_BUILD);
+ *version_code = SANE_VERSION_CODE(SANE_CURRENT_MAJOR, SANE_CURRENT_MINOR, BACKEND_BUILD);
sanei_usb_init();
return SANE_STATUS_GOOD;
diff --git a/debian/changelog b/debian/changelog
index aee6848..1a3e467 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,26 @@
+sane-backends (1.1.1-1) unstable; urgency=medium
+
+ * New upstream release.
+ - Remove not longer needed patches:
+ + 0180-gt68xx_fix_use-after-free_two_memleaks.patch
+ + 0600-scanimage_manpage.patch
+ - Refresh patches:
+ + 0605-fix_groff-warnings.patch
+ + 0100-source_spelling.patch
+ - Closes: #920216, #998616.
+ * debian/copyright:
+ - Refresh to the new upstream release.
+ - Add 2022 to myself.
+ * Remove *.lintian-overrides.
+ * debian/sane-utils.postinst:
+ - Add home dir for user/group saned (Closes: #995732).
+ * debian/sane-utils.postrm:
+ - Use --remove-home instead --remove-all-files (Closes: #1001960).
+ * Reactivate debian/patches/0125-multiarch_dll_search_path.patch
+ (Closes: #1002704).
+
+ -- Jörg Frings-Fürst <debian@jff.email> Sun, 06 Feb 2022 10:51:26 +0100
+
sane-backends (1.0.32-4) unstable; urgency=medium
* Upload into unstable.
diff --git a/debian/copyright b/debian/copyright
index 428fa7e..551790f 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -15,7 +15,7 @@ Copyright: 1997-2002 Kevin Dalley <kevind@rahul.net>
2013 Mark Buda <hermit@acm.org>
2018 Laurent Bigonville <bigon@debian.org>
2019 John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
- 2014-2021 Jörg Frings-Fürst <debian@jff.email>
+ 2014-2022 Jörg Frings-Fürst <debian@jff.email>
License: GPL-2+ with sane exception
Files: backend/abaton.*
@@ -69,6 +69,10 @@ Files: backend/canon-scsi.c
Copyright: 1997 BYTEC GmbH Germany
License: GPL-2+ with sane exception
+Files: backend/canon_lide70*
+Copyright: 2019-2021 Juergen Ernst and pimvantend
+License: GPL-2+ with sane exception
+
Files: backend/canon630u.c
Copyright: 2002 Nathan Rutman <nathan@gordian.com>
2001 Marcio Luis Teixeira
@@ -81,7 +85,7 @@ Files: backend/canon_dr.*
backend/cardscan.*
include/sane/sanei_magic.h
sanei/sanei_magic.c
-Copyright: 2007-2020 m. allan noah
+Copyright: 2007-2021 m. allan noah
License: GPL-2+ with sane exception
Files: backend/canon_pp-*.*
@@ -158,7 +162,7 @@ Files: backend/fujitsu.*
Copyright: 2000 Randolph Bentson
2001 Frederik Ramm
2001-2004 Oliver Schirrmeister
- 2003-2016 m. allan noah
+ 2003-2021 m. allan noah
License: GPL-2+ with sane exception
Files: backend/genesys/genesys.h
@@ -749,6 +753,10 @@ Copyright: 1997 Andreas Beck
2003-2008 Julien BLACHE <jb@jblache.org>2010-2011 Reinhold Kainhofer
License: GPL-2+
+Files: frontend/jpegtopdf.*
+Copyright: 2021 Thierry HUCHARD <thierry@ordissimo.com>
+License: GPL-2+
+
Files: frontend/scanimage.c
Copyright: 1996-1998 Andreas Beck
1996-1998 David Mosberger
diff --git a/debian/libsane-common.lintian-overrides b/debian/libsane-common.lintian-overrides
deleted file mode 100644
index cf00b5d..0000000
--- a/debian/libsane-common.lintian-overrides
+++ /dev/null
@@ -1,4 +0,0 @@
-#
-# doc/gt68xx/gt68xx.CHANGES:442:- Added "afe" option for gt68xx.conf for selecting default afe values.
-#
-libsane-common: typo-in-manual-page usr/share/man/man5/sane-gt68xx.5.gz afe safe
diff --git a/debian/libsane1.lintian-overrides b/debian/libsane1.lintian-overrides
deleted file mode 100644
index 39bacce..0000000
--- a/debian/libsane1.lintian-overrides
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# doc/gt68xx/gt68xx.CHANGES:442:- Added "afe" option for gt68xx.conf for selecting default afe values.
-#
-libsane1: spelling-error-in-binary usr/lib/x86_64-linux-gnu/sane/libsane-artec_eplus48u.so.1.0.32 afe safe
-libsane1: spelling-error-in-binary usr/lib/x86_64-linux-gnu/sane/libsane-canon_dr.so.1.0.32 afe safe
-libsane1: spelling-error-in-binary usr/lib/x86_64-linux-gnu/sane/libsane-gt68xx.so.1.0.32 afe safe
-
diff --git a/debian/patches/0040-remove_git.patch b/debian/patches/0040-remove_git.patch
index 2be7a6e..6cbe5f7 100644
--- a/debian/patches/0040-remove_git.patch
+++ b/debian/patches/0040-remove_git.patch
@@ -9,4 +9,4 @@ Index: trunk/.tarball-version
--- /dev/null
+++ trunk/.tarball-version
@@ -0,0 +1 @@
-+1.0.32-debian
++1.1.1-debian
diff --git a/debian/patches/0100-source_spelling.patch b/debian/patches/0100-source_spelling.patch
index 17bde04..6bf41f1 100644
--- a/debian/patches/0100-source_spelling.patch
+++ b/debian/patches/0100-source_spelling.patch
@@ -1,84 +1,194 @@
Description: Correct source typos
-Author: Jörg Frings-Fürst <debian@jff-webhosting.net>
+Author: Jörg Frings-Fürst <debian@jff.email>
Forwarded: not-needed
-Last-Update: 2019-04-28
+Last-Update: 2022-02-04
----
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
-Index: trunk/doc/sane-epjitsu.man
+Index: trunk/backend/epsonds-jpeg.c
===================================================================
---- trunk.orig/doc/sane-epjitsu.man
-+++ trunk/doc/sane-epjitsu.man
-@@ -42,7 +42,7 @@ Scanners can be specified in the configu
- .PP
- "usb 0x04c5 0x10c7" (or other vendor/product ids)
- .RS
--Requests backend to search all usb busses in the system for a device which uses that vendor and product id. The device will then be queried to determine if it is a supported scanner.
-+Requests backend to search all usb buses in the system for a device which uses that vendor and product id. The device will then be queried to determine if it is a supported scanner.
- .RE
- .PP
- "usb /dev/usb/scanner0" (or other device file)
-Index: trunk/backend/apple.c
-===================================================================
---- trunk.orig/backend/apple.c
-+++ trunk/backend/apple.c
-@@ -1546,7 +1546,7 @@ init_options (Apple_Scanner * s)
- /* Use volt_ref */
- s->opt[OPT_VOLT_REF].name = "volt-ref";
- s->opt[OPT_VOLT_REF].title = "Volt Reference";
-- s->opt[OPT_VOLT_REF].desc ="It's brightness equivalant.";
-+ s->opt[OPT_VOLT_REF].desc ="It's brightness equivalent.";
- s->opt[OPT_VOLT_REF].type = SANE_TYPE_BOOL;
- if (s->hw->ScannerModel!=COLORONESCANNER)
- s->opt[OPT_VOLT_REF].cap |= SANE_CAP_INACTIVE;
-Index: trunk/tools/umax_pp.c
-===================================================================
---- trunk.orig/tools/umax_pp.c
-+++ trunk/tools/umax_pp.c
-@@ -374,10 +374,10 @@ main (int argc, char **argv)
- if (sanei_umax_pp_initPort (port, name) != 1)
- {
- if (port)
-- fprintf (stderr, "failed to gain direct acces to port 0x%X!\n",
-+ fprintf (stderr, "failed to gain direct access to port 0x%X!\n",
- port);
- else
-- fprintf (stderr, "failed to gain acces to device %s!\n", name);
-+ fprintf (stderr, "failed to gain access to device %s!\n", name);
- return 0;
- }
- }
-Index: trunk/doc/saned.man
-===================================================================
---- trunk.orig/doc/saned.man
-+++ trunk/doc/saned.man
-@@ -254,7 +254,7 @@ to the systemd journal. The systemd supp
- requires compilation with the systemd-devel package
- installed on the system. this is the preferred option.
-
--Saned can be used wih systemd without the systemd integration
-+Saned can be used with systemd without the systemd integration
- compiled in, but then logging of debug information is not supported.
-
- The systemd configuration is different for the 2 options, so
-Index: trunk/doc/sane-pixma.man
+--- trunk.orig/backend/epsonds-jpeg.c
++++ trunk/backend/epsonds-jpeg.c
+@@ -194,7 +194,7 @@ void eds_decode_jpeg(epsonds_scanner*s,
+ }
+ }
+ }
+- DBG(10,"decodded lines = %d\n", sum);
++ DBG(10,"decoded lines = %d\n", sum);
+
+ // abandon unncessary data
+ if ((JDIMENSION)sum < jpeg_cinfo.output_height)
+Index: trunk/frontend/jpegtopdf.c
===================================================================
---- trunk.orig/doc/sane-pixma.man
-+++ trunk/doc/sane-pixma.man
-@@ -328,7 +328,7 @@ This will cause all further statements i
- .IP -
- A line that contains
- .B auto_detection=no
--will cause auto-detection to be skipped. Explicitely defined network scanners will still be probed.
-+will cause auto-detection to be skipped. Explicitly defined network scanners will still be probed.
- .SH USB SUPPORT
- USB scanners will be auto-detected and require no configuration.
- .SH NETWORKING SUPPORT
-@@ -358,7 +358,7 @@ common subnet for scanning.
- .PP
- Scanner detection is slightly more complicated. The pixma backend sends
- a broadcast on all direct connected subnets it can find (provided your OS
--allows for enumeration of all netowrk interfaces). The broadcast is sent FROM
-+allows for enumeration of all network interfaces). The broadcast is sent FROM
- port 8612 TO port 8610 or 8612 on the broadcast address of each interface.
- The outgoing packets will be allowed by the rule described above.
- .PP
+--- trunk.orig/frontend/jpegtopdf.c
++++ trunk/frontend/jpegtopdf.c
+@@ -285,7 +285,7 @@ SANE_Int sane_pdf_start_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -326,7 +326,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -346,7 +346,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -360,7 +360,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -376,7 +376,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -386,7 +386,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( _get_current_time( &tm, &sign_c, &tz_h, &tz_m ) == SANE_ERR ) {
+- fprintf ( stderr, " Error is occured in _get_current_time.\n" );
++ fprintf ( stderr, " Error is occurred in _get_current_time.\n" );
+ goto EXIT;
+ }
+ /* Dates format */
+@@ -404,7 +404,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -420,7 +420,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -434,7 +434,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ w_count += SANE_PDF_FIRST_PAGE_ID - 1;
+@@ -450,7 +450,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ w_count ++;
+@@ -472,7 +472,7 @@ SANE_Int sane_pdf_end_doc( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -568,7 +568,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -586,7 +586,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ /* write Contents(2) */
+@@ -598,7 +598,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -609,7 +609,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -627,7 +627,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -648,7 +648,7 @@ SANE_Int sane_pdf_start_page(
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -680,7 +680,7 @@ SANE_Int sane_pdf_end_page( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+@@ -698,7 +698,7 @@ SANE_Int sane_pdf_end_page( void *pw )
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+- fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
++ fprintf ( stderr, " Error is occurred in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
diff --git a/debian/patches/0125-multiarch_dll_search_path.patch b/debian/patches/0125-multiarch_dll_search_path.patch
index 25726c7..67b9484 100644
--- a/debian/patches/0125-multiarch_dll_search_path.patch
+++ b/debian/patches/0125-multiarch_dll_search_path.patch
@@ -7,7 +7,7 @@ Index: trunk/backend/dll.c
===================================================================
--- trunk.orig/backend/dll.c
+++ trunk/backend/dll.c
-@@ -470,7 +470,7 @@ load (struct backend *be)
+@@ -468,18 +468,18 @@ load (struct backend *be)
if (path)
{
@@ -16,10 +16,9 @@ Index: trunk/backend/dll.c
src = malloc (src_len);
if (!src)
{
-@@ -480,11 +480,11 @@ load (struct backend *be)
- if (orig_src)
- free (orig_src);
- orig_src = src;
+ DBG (1, "load: malloc failed: %s\n", strerror (errno));
+ return SANE_STATUS_NO_MEM;
+ }
- snprintf (src, src_len, "%s%s%s", path, DIR_SEP, LIBDIR);
+ snprintf (src, src_len, "%s%s%s", path, DIR_SEP, DEB_DLL_LIBDIR);
}
@@ -34,7 +33,7 @@ Index: trunk/backend/Makefile.am
===================================================================
--- trunk.orig/backend/Makefile.am
+++ trunk/backend/Makefile.am
-@@ -4,7 +4,7 @@
+@@ -5,7 +5,7 @@
## This file is part of the "Sane" build infra-structure. See
## included LICENSE file for license information.
diff --git a/debian/patches/0175-fix_tests.patch b/debian/patches/0175-fix_tests.patch
index 77f5e03..612d851 100644
--- a/debian/patches/0175-fix_tests.patch
+++ b/debian/patches/0175-fix_tests.patch
@@ -11,7 +11,7 @@ Index: trunk/testsuite/tools/data/db.ref
@@ -1,5 +1,5 @@
# This file was generated from description files (*.desc)
-# by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
-+# by sane-desc 3.6 from sane-backends 1.0.32-debian
++# by sane-desc 3.6 from sane-backends 1.1.1-debian
#
# The entries below are used to detect a USB device when it's plugged in
# and then run a script to change the ownership and
@@ -24,7 +24,7 @@ Index: trunk/testsuite/tools/data/html-backends-split.ref
</address>
<font size=-1>
-This page was created by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
-+This page was created by sane-desc 3.6 from sane-backends 1.0.32-debian
++This page was created by sane-desc 3.6 from sane-backends 1.1.1-debian
</font>
</body> </html>
Index: trunk/testsuite/tools/data/html-mfgs.ref
@@ -36,7 +36,7 @@ Index: trunk/testsuite/tools/data/html-mfgs.ref
</address>
<font size=-1>
-This page was created by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
-+This page was created by sane-desc 3.6 from sane-backends 1.0.32-debian
++This page was created by sane-desc 3.6 from sane-backends 1.1.1-debian
</font>
</body> </html>
Index: trunk/testsuite/tools/data/hwdb.ref
@@ -46,7 +46,7 @@ Index: trunk/testsuite/tools/data/hwdb.ref
@@ -1,5 +1,5 @@
# This file was generated from description files (*.desc)
-# by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
-+# by sane-desc 3.6 from sane-backends 1.0.32-debian
++# by sane-desc 3.6 from sane-backends 1.1.1-debian
#
# hwdb file for supported USB devices
#
@@ -57,7 +57,7 @@ Index: trunk/testsuite/tools/data/udev+acl.ref
@@ -1,5 +1,5 @@
# This file was generated from description files (*.desc)
-# by sane-desc 3.6 from sane-backends 1.0.31-118-g5d3ce7806
-+# by sane-desc 3.6 from sane-backends 1.0.32-debian
++# by sane-desc 3.6 from sane-backends 1.1.1-debian
#
# udev rules file for supported USB and SCSI devices
#
@@ -68,7 +68,7 @@ Index: trunk/testsuite/tools/data/udev+hwdb.ref
@@ -1,5 +1,5 @@
# This file was generated from description files (*.desc)
-# by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
-+# by sane-desc 3.6 from sane-backends 1.0.32-debian
++# by sane-desc 3.6 from sane-backends 1.1.1-debian
#
# udev rules file for supported USB and SCSI devices
#
@@ -79,7 +79,7 @@ Index: trunk/testsuite/tools/data/udev.ref
@@ -1,5 +1,5 @@
# This file was generated from description files (*.desc)
-# by sane-desc 3.6 from sane-backends 1.0.31-118-g5d3ce7806
-+# by sane-desc 3.6 from sane-backends 1.0.32-debian
++# by sane-desc 3.6 from sane-backends 1.1.1-debian
#
# udev rules file for supported USB and SCSI devices
#
@@ -90,7 +90,7 @@ Index: trunk/testsuite/tools/data/usermap.ref
@@ -1,5 +1,5 @@
# This file was generated from description files (*.desc)
-# by sane-desc 3.6 from sane-backends 1.0.29-241-g1f9590ab
-+# by sane-desc 3.6 from sane-backends 1.0.32-debian
++# by sane-desc 3.6 from sane-backends 1.1.1-debian
#
# The entries below are used to detect a USB device and change owner
# and permissions on the "device node" used by libusb.
diff --git a/debian/patches/0605-fix_groff-warnings.patch b/debian/patches/0605-fix_groff-warnings.patch
index 9e8ecde..1e0ac17 100644
--- a/debian/patches/0605-fix_groff-warnings.patch
+++ b/debian/patches/0605-fix_groff-warnings.patch
@@ -4,54 +4,6 @@ Bug: https://gitlab.com/sane-project/backends/-/issues/433
Last-Update: 2021-02-17
---
This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
-Index: trunk/doc/sane-canon_dr.man
-===================================================================
---- trunk.orig/doc/sane-canon_dr.man
-+++ trunk/doc/sane-canon_dr.man
-@@ -161,7 +161,7 @@ Some scanners pad the upper edge of one
- .RE
- .PP
- .BR NOTE :
--'option' lines may appear multiple times in the configuration file.
-+"option" lines may appear multiple times in the configuration file.
- They only apply to scanners discovered by the next 'scsi/usb' line.
- .PP
-
-Index: trunk/doc/sane-pixma.man
-===================================================================
---- trunk.orig/doc/sane-pixma.man
-+++ trunk/doc/sane-pixma.man
-@@ -184,7 +184,7 @@ an up-to-date status at the project home
- Users feedback is essential to help improve features and performances.
- .SH OPTIONS
- Besides "well-known" options (e.g. resolution, mode etc.)
--.Bsane\-pixma
-+.B sane\-pixma
- backend also
- provides the following options, i.e. the options might change in the future.
- .br
-Index: trunk/doc/sane-scsi.man
-===================================================================
---- trunk.orig/doc/sane-scsi.man
-+++ trunk/doc/sane-scsi.man
-@@ -122,7 +122,7 @@ $ chmod 660 /dev/sg0
- .RE
- .PP
- When your system uses the device filesystem (devfs), you have to edit
--.BIR /etc/devfs/perms.
-+.BI /etc/devfs/perms.
- There you should search the line
- .PP
- .RS
-@@ -172,7 +172,7 @@ If there are no
- devices, just do a
- .I sh MAKEDEV uk0
- in the
--.i /dev
-+.I /dev
- directory. The scanner should then be accessible as
- .I /dev/uk0
- if it was probed during boot.
Index: trunk/doc/sane-artec_eplus48u.man
===================================================================
--- trunk.orig/doc/sane-artec_eplus48u.man
diff --git a/debian/patches/series b/debian/patches/series
index 2a4677c..a1dd4c2 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,11 +1,11 @@
0035-trim-libraries-in-sane-backends.pc.in.patch
0040-remove_git.patch
-#0100-source_spelling.patch
-#0125-multiarch_dll_search_path.patch
+0100-source_spelling.patch
+0125-multiarch_dll_search_path.patch
0175-fix_tests.patch
0140-avahi.patch
0145-avahi.patch
-0600-scanimage_manpage.patch
+#0600-scanimage_manpage.patch
0705-kfreebsd.patch
0725-fix_link_60-libsane_rule.patch
0150-i386-test.patch
@@ -17,4 +17,4 @@
#0165-respect_local_only_parameter.patch
#0170-return_empty_list_when_local_devices_requested.patch
0605-fix_groff-warnings.patch
-0180-gt68xx_fix_use-after-free_two_memleaks.patch
+#0180-gt68xx_fix_use-after-free_two_memleaks.patch
diff --git a/debian/sane-utils.postinst b/debian/sane-utils.postinst
index 2d47e78..cde28cf 100644
--- a/debian/sane-utils.postinst
+++ b/debian/sane-utils.postinst
@@ -43,7 +43,7 @@ if [ "$1" = "configure" ] || [ "$1" = "reconfigure" ]; then
# Create saned user/group if they do not exist
if ! getent passwd | grep -q "^saned:"; then
echo "Adding saned group and user..."
- adduser --home /var/lib/saned --quiet --system --no-create-home --group saned || true
+ adduser --home /var/lib/saned --quiet --system --group saned || true
fi
# Move home from /home/saned to /var/lib/saned (since 1.0.24-6)
@@ -61,6 +61,11 @@ if [ "$1" = "configure" ] || [ "$1" = "reconfigure" ]; then
usermod -d /var/lib/saned saned
fi
fi
+
+ if [ ! -d /var/lib/saned saned ] ; then
+ usermod -d /var/lib/saned saned
+ fi
+
if [ "$SANED_IN_SCANNER" = "true" ]; then
adduser --quiet saned scanner
else
diff --git a/debian/sane-utils.postrm b/debian/sane-utils.postrm
index 9f4ef99..4bb3253 100644
--- a/debian/sane-utils.postrm
+++ b/debian/sane-utils.postrm
@@ -56,7 +56,7 @@ if [ "$1" = purge ] ; then
if pathfind deluser ; then
deluser -q --group --system saned || true
deluser -q --group --system scanner || true
- deluser -q --system --remove-all-files saned || true
+ deluser -q --system --remove-home saned || true
fi
fi
diff --git a/doc/Makefile.am b/doc/Makefile.am
index 5cf3011..17ae02f 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -86,7 +86,7 @@ all: bemans html-pages
dist_doc_DATA = backend-writing.txt
nobase_dist_doc_DATA = $(BEDOCS)
-EXTRA_DIST += descriptions.txt releases.txt sane-logo2.jpg sane-logo.png \
+EXTRA_DIST += descriptions.txt releases.md sane-logo2.jpg sane-logo.png \
sane.png
MAN2HTML = nroff -c -man |\
diff --git a/doc/descriptions-external/scangearmp2.desc b/doc/descriptions-external/scangearmp2.desc
index c82aa40..b670144 100644
--- a/doc/descriptions-external/scangearmp2.desc
+++ b/doc/descriptions-external/scangearmp2.desc
@@ -11,7 +11,7 @@
:backend "canon_pixma" ; name of backend
;:version "(external)" ; version of backend
-:url "https://github.com/Ordissimo/scangearmp2/blob/master/README.md" ; backend's web page
+:url "https://github.com/Ordissimo/libmfp2-canon/blob/master/README.md" ; backend's web page
:comment "External binary-only backend for Linux i386 and x86_64?. See the website for the latest release."
@@ -28,6 +28,22 @@
; Canon MFP2 conf file
;
+; ---- V420 --------------------------
+:model "GX6000 series"
+:interface "USB WiFi"
+:usbid "0x04a9" "0x0153"
+:status :good
+
+:model "GX7000 series"
+:interface "USB WiFi"
+:usbid "0x04a9" "0x0157"
+:status :good
+
+:model "TS5400 series"
+:interface "USB WiFi"
+:usbid "0x04a9" "0x0151"
+:status :good
+
; ---- V410 --------------------------
:model "TS3400 series"
:interface "USB WiFi"
@@ -466,6 +482,11 @@
; ---- V310 --------------------------
+:model "MX455 series"
+:interface "USB WiFi"
+:usbid "0x04a9" "0x1768"
+:status :good
+
:model "MX490 series"
:interface "USB WiFi"
:usbid "0x04a9" "0x1787"
diff --git a/doc/descriptions/epson.desc b/doc/descriptions/epson.desc
index fc901a7..eb9bdb2 100644
--- a/doc/descriptions/epson.desc
+++ b/doc/descriptions/epson.desc
@@ -11,7 +11,6 @@
:backend "epson" ; name of backend
:version "0.2.42 (unmaintained)" ; version of backend
-:new :no
:manpage "sane-epson" ; name of manpage (if it exists)
:url "http://www.khk.net/sane" ; backend's web page
diff --git a/doc/descriptions/epson2.desc b/doc/descriptions/epson2.desc
index 1af191f..ad1d183 100644
--- a/doc/descriptions/epson2.desc
+++ b/doc/descriptions/epson2.desc
@@ -8,8 +8,6 @@
; distributed with "Image Scan!" and released under GPL.
:backend "epson2"
-:version "1.0.124 (unmaintained)"
-:new :no
:manpage "sane-epson2"
:devicetype :scanner
@@ -22,7 +20,6 @@
:usbid "0x04b8" "0x08ac"
:status :complete
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one"
-:url "http://www.epson.com/"
:model "AL-MX300DNF Series"
:interface "USB"
@@ -164,7 +161,7 @@
:model "DS-G20000"
:interface "USB"
:usbid "0x04b8" "0x015b"
-:status :good
+:status :complete
:model "EP-702A"
:interface "USB"
@@ -528,10 +525,20 @@
:status :good
:comment "network interface supported via DFSG non-free iscan-network-nt package"
-:model "ET-2600"
+:model "ET-2500 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1105"
+:status :complete
+
+:model "ET-2600 Series"
:interface "USB"
:usbid "0x04b8" "0x1122"
-:status :good
+:status :complete
+
+:model "ET-2610 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1122"
+:status :complete
:model "ET-2650"
:interface "USB Ethernet"
@@ -606,7 +613,7 @@
:model "Expression 12000XL"
:interface "USB"
:usbid "0x04b8" "0x015b"
-:status :good
+:status :complete
:comment "overseas version of the DS-G20000"
:model "F-3200" ; product spec (JP)
@@ -698,12 +705,6 @@
:status :unsupported
:comment "supported by the epkowa backend plus non-free interpreter"
-:model "GT-7400U" ; product spec (JP)
-:interface "USB"
-:usbid "0x04b8" "0x0120"
-:status :unsupported
-:comment "supported by the snapscan backend"
-
:model "GT-7600S" ; product spec (JP)
:interface "SCSI"
:status :complete
@@ -745,11 +746,6 @@
:usbid "0x04b8" "0x011e"
:status :complete
-:model "GT-8400UF" ; product spec (JP)
-:interface "USB"
-:usbid "0x04b8" "0x011f"
-:status :unsupported
-
:model "GT-8500"
:status :untested
@@ -761,7 +757,7 @@
:model "GT-8700F" ; product spec (JP)
:interface "SCSI USB"
:usbid "0x04b8" "0x010a"
-:status :good
+:status :complete
:comment "GT-8700U with TPU option bundled"
:model "GT-9000"
@@ -1059,11 +1055,36 @@
:status :complete
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one"
+:model "L365 Series"
+:interface "USB"
+:usbid "0x04b8" "0x08d2"
+:status :complete
+
+:model "L366 Series"
+:interface "USB"
+:usbid "0x04b8" "0x08d2"
+:status :complete
+
+:model "L375 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1105"
+:status :complete
+
:model "L380"
:interface "USB"
:usbid "0x04b8" "0x1120"
:status :good
+:model "L395 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1122"
+:status :complete
+
+:model "L396 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1122"
+:status :complete
+
:model "L495"
:interface "USB Ethernet"
:usbid "0x04b8" "0x1121"
@@ -1081,6 +1102,36 @@
:status :complete
:comment "all-in-one"
+:model "L3050 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1122"
+:status :complete
+
+:model "L3060 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1122"
+:status :complete
+
+:model "L3100 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1141"
+:status :complete
+
+:model "L3110 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1142"
+:status :complete
+
+:model "L3200 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1189"
+:status :complete
+
+:model "L3210 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1188"
+:status :complete
+
:model "LP-7900CS"
:status :untested
:comment "business all-in-one; scanner is a ES-7000H"
@@ -1421,6 +1472,16 @@
:status :complete
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one"
+:model "PX-048A Series"
+:interface "USB"
+:usbid "0x04b8" "0x1102"
+:status :complete
+
+:model "PX-049A Series"
+:interface "USB"
+:usbid "0x04b8" "0x1116"
+:status :complete
+
:model "PX-1600F"
:interface "USB"
:usbid "0x04b8" "0x0869"
@@ -1607,6 +1668,11 @@
:status :good
:comment "all-in-one"
+:model "PX-M160T Series"
+:interface "USB"
+:usbid "0x04b8" "0x110f"
+:status :complete
+
:model "PX-M350F"
:interface "USB"
:usbid "0x04b8" "0x08d0"
@@ -1655,11 +1721,6 @@
:status :complete
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one"
-:model "Perfection 600"
-:interface "SCSI"
-:status :unsupported
-:comment "supported by the umax backend<br>rebadged UMAX Astra 1200S"
-
:model "Perfection 610" ; command spec
:interface "USB"
:usbid "0x04b8" "0x0103"
@@ -1684,12 +1745,6 @@
:status :complete
:comment "overseas version of the GT-6700U"
-:model "Perfection 660"
-:interface "USB"
-:usbid "0x04b8" "0x0114"
-:status :unsupported
-:comment "supported by the snapscan backend"
-
:model "Perfection 1200S" ; command spec
:interface "SCSI"
:scsi "EPSON" "Perfection1200" "processor"
@@ -1738,12 +1793,6 @@
:status :unsupported
:comment "supported by the epkowa backend plus non-free interpreter"
-:model "Perfection 1270"
-:interface "USB"
-:usbid "0x04b8" "0x0120"
-:status :unsupported
-:comment "supported by the snapscan backend<br>overseas version of the GT-7400"
-
:model "Perfection 1600"
:interface "SCSI"
:status :unsupported
@@ -1759,7 +1808,7 @@
:interface "SCSI USB"
:scsi "EPSON" "Perfection1640" "processor"
:usbid "0x04b8" "0x010a"
-:status :good
+:status :complete
:comment "overseas version of the GT-8700F"
:model "Perfection 1650" ; command spec
@@ -1780,18 +1829,6 @@
:status :complete
:comment "overseas version of the GT-8300UF"
-:model "Perfection 1670"
-:interface "USB"
-:usbid "0x04b8" "0x011f"
-:status :unsupported
-:comment "supported by the snapscan backend"
-
-:model "Perfection 1670 PHOTO"
-:interface "USB"
-:usbid "0x04b8" "0x011f"
-:status :unsupported
-:comment "supported by the snapscan backend<br>overseas version of the GT-8400UF"
-
:model "Perfection 2400 PHOTO" ; command spec
:interface "USB"
:usbid "0x04b8" "0x011b"
@@ -1986,12 +2023,6 @@
:status :good
:comment "overseas version of the GT-X980"
-:model "Stylus CX1500" ; Australia
-:interface "USB"
-:usbid "0x04b8" "0x080c"
-:status :unsupported
-:comment "supported by the snapscan backend<br>all-in-one"
-
:model "Stylus CX2800"
:interface "USB"
:usbid "0x04b8" "0x0830"
@@ -3377,10 +3408,20 @@
:status :complete
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one<br>overseas version of the PX-047A"
-:model "XP-243 245 247 Series"
+:model "XP-230 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1102"
+:status :complete
+
+:model "XP-235 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1102"
+:status :complete
+
+:model "XP-240 243 245 247 Series"
:interface "USB"
:usbid "0x04b8" "0x1116"
-:status :good
+:status :complete
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one"
:model "XP-255"
@@ -3430,6 +3471,12 @@
:status :good
:comment "network interface supported via DFSG non-free iscan-network-nt package<br>all-in-one"
+:model "XP-452 455 Series"
+:interface "USB"
+:usbid "0x04b8" "0x113e"
+:status :good
+:comment "all-in-one"
+
:model "XP-600 Series"
:interface "USB"
:usbid "0x04b8" "0x089e"
diff --git a/doc/descriptions/epsonds.desc b/doc/descriptions/epsonds.desc
index 690dd25..9a17f43 100644
--- a/doc/descriptions/epsonds.desc
+++ b/doc/descriptions/epsonds.desc
@@ -7,7 +7,6 @@
:backend "epsonds"
:version "1.0.18 (unmaintained)"
-:new :no
:manpage "sane-epsonds"
:devicetype :scanner
@@ -94,3 +93,268 @@
:interface "USB"
:usbid "0x04b8" "0x08cc"
:status :untested
+
+:model "DS-410"
+:interface "USB"
+:usbid "0x04b8" "0x0165"
+:status :complete
+
+:model "ES-50"
+:interface "USB"
+:usbid "0x04b8" "0x016c"
+:status :complete
+
+:model "DS-70"
+:interface "USB"
+:usbid "0x04b8" "0x0160"
+:status :complete
+
+:model "ES-55R"
+:interface "USB"
+:usbid "0x04b8" "0x016d"
+:status :complete
+
+:model "RR-60"
+:interface "USB"
+:usbid "0x04b8" "0x018c"
+:status :complete
+
+:model "ES-60W"
+:interface "USB"
+:usbid "0x04b8" "0x016e"
+:status :complete
+
+:model "DS-80W"
+:interface "USB"
+:usbid "0x04b8" "0x0166"
+:status :complete
+
+:model "ES-65WR"
+:interface "USB"
+:usbid "0x04b8" "0x016f"
+:status :complete
+
+:model "RR-70W"
+:interface "USB"
+:usbid "0x04b8" "0x018b"
+:status :complete
+
+:model "ES-60WW"
+:interface "USB"
+:usbid "0x04b8" "0x016e"
+:status :complete
+
+:model "ES-60WB"
+:interface "USB"
+:usbid "0x04b8" "0x016e"
+:status :complete
+
+:model "DS-1630"
+:interface "USB"
+:usbid "0x04b8" "0x015c"
+:status :complete
+
+:model "DS-1610"
+:interface "USB"
+:usbid "0x04b8" "0x015d"
+:status :complete
+
+:model "DS-1660W"
+:interface "USB"
+:usbid "0x04b8" "0x015e"
+:status :complete
+
+:model "DS-310"
+:interface "USB"
+:usbid "0x04b8" "0x0159"
+:status :complete
+
+:model "ES-200"
+:interface "USB"
+:usbid "0x04b8" "0x0159"
+:status :complete
+
+:model "DS-320"
+:interface "USB"
+:usbid "0x04b8" "0x0162"
+:status :complete
+
+:model "DS-360W"
+:interface "USB"
+:usbid "0x04b8" "0x015a"
+:status :complete
+
+:model "ES-300W"
+:interface "USB"
+:usbid "0x04b8" "0x015a"
+:status :complete
+
+:model "ES-300WR"
+:interface "USB"
+:usbid "0x04b8" "0x0177"
+:status :complete
+
+:model "ES-400II"
+:interface "USB"
+:usbid "0x04b8" "0x0181"
+:status :complete
+
+:model "DS-535II"
+:interface "USB"
+:usbid "0x04b8" "0x0183"
+:status :complete
+
+:model "DS-531"
+:interface "USB"
+:usbid "0x04b8" "0x0184"
+:status :complete
+
+:model "DS-530II"
+:interface "USB"
+:usbid "0x04b8" "0x0182"
+:status :complete
+
+:model "ES-500WII"
+:interface "USB"
+:usbid "0x04b8" "0x0185"
+:status :complete
+
+:model "DS-571W"
+:interface "USB"
+:usbid "0x04b8" "0x0188"
+:status :complete
+
+:model "DS-575WII"
+:interface "USB"
+:usbid "0x04b8" "0x0187"
+:status :complete
+
+:model "DS-570WII"
+:interface "USB"
+:usbid "0x04b8" "0x0186"
+:status :complete
+
+:model "ES-580W"
+:interface "USB"
+:usbid "0x04b8" "0x017f"
+:status :complete
+
+:model "RR-600W"
+:interface "USB"
+:usbid "0x04b8" "0x0180"
+:status :complete
+
+:model "DS-535"
+:interface "USB"
+:usbid "0x04b8" "0x0167"
+:status :complete
+
+:model "DS-535H"
+:interface "USB"
+:usbid "0x04b8" "0x017a"
+:status :complete
+
+:model "ES-400"
+:interface "USB"
+:usbid "0x04b8" "0x0156"
+:status :complete
+
+:model "DS-530"
+:interface "USB"
+:usbid "0x04b8" "0x0155"
+:status :complete
+
+:model "FF-680W"
+:interface "USB"
+:usbid "0x04b8" "0x016b"
+:status :complete
+
+:model "DS-570W"
+:interface "USB"
+:usbid "0x04b8" "0x0157"
+:status :complete
+
+:model "ES-500W"
+:interface "USB"
+:usbid "0x04b8" "0x0157"
+:status :complete
+
+:model "DS-575W"
+:interface "USB"
+:usbid "0x04b8" "0x0169"
+:status :complete
+
+:model "ES-500WR"
+:interface "USB"
+:usbid "0x04b8" "0x0176"
+:status :complete
+
+:model "EW-052A Series"
+:interface "USB"
+:usbid "0x04b8" "0x114e"
+:status :complete
+
+:model "XP-2100 Series"
+:interface "USB"
+:usbid "0x04b8" "0x114e"
+:status :complete
+
+:model "ET-2700 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1135"
+:status :complete
+
+:model "L4150 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1135"
+:status :complete
+
+:model "ET-M2140 Series"
+:interface "USB"
+:usbid "0x04b8" "0x114a"
+:status :complete
+
+:model "M2140 Series"
+:interface "USB"
+:usbid "0x04b8" "0x114a"
+:status :complete
+
+:model "ET-M3140 Series"
+:interface "USB"
+:usbid "0x04b8" "0x114f"
+:status :complete
+
+:model "M3140 Series"
+:interface "USB"
+:usbid "0x04b8" "0x114f"
+:status :complete
+
+:model "L3150 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1143"
+:status :complete
+
+:model "ET-2710 Series"
+:interface "USB"
+:usbid "0x04b8" "0x1143"
+:status :complete
+
+:model "ET-2810 Series"
+:interface "USB"
+:usbid "0x04b8" "0x118A"
+:status :complete
+
+:model "L3250 Series"
+:interface "USB"
+:usbid "0x04b8" "0x118A"
+:status :complete
+
+:model "XP-2150 Series"
+:interface "USB"
+:usbid "0x04b8" "0x119B"
+:status :complete
+
+:model ""
+:interface "USB"
+:usbid "0x04b8" "0x00"
+:status :complete
diff --git a/doc/descriptions/escl.desc b/doc/descriptions/escl.desc
index 88f0fdb..fa5b32b 100644
--- a/doc/descriptions/escl.desc
+++ b/doc/descriptions/escl.desc
@@ -8,12 +8,17 @@
:mfg "Brother"
:url "https://www.brother.ee/support/drivers"
+:model "DCP-J772DW"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported."
+
:model "DCP-L2530DW"
:interface "WiFi"
:status :good
:comment "All resolutions supported."
-:model "HL-L258DW"
+:model "HL-L2590DW"
:interface "WiFi"
:status :good
:comment "All resolutions supported."
@@ -21,42 +26,117 @@
:mfg "Canon"
:url "https://www.canon-europe.com/support/"
+:model "IR C3520"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported, Flatted and ADF supported."
+
:model "PIXMA MG5765"
:interface "WiFi"
:status :good
:comment "All resolutions supported."
+:model "PIXMA G4511"
+:interface "Ethernet WiFi"
+:status :basic
+:comment "All resolutions supported."
+
:model "PIXMA G7050"
:interface "Ethernet WiFi"
:status :untested
:comment "Testers needed!"
-:model "IR C3520"
+:model "PIXMA TR4520 Series"
+:interface "Wifi"
+:status :good
+:comment "All resolutions supported, Flatted and ADF supported."
+
+:model "PIXMA TR4540 Series"
+:interface "Wifi"
+:status :good
+:comment "All resolutions supported, Flatted and ADF supported."
+
+:model "PIXMA TR4550 Series"
+:interface "Wifi"
+:status :good
+:comment "All resolutions supported, Flatted and ADF supported."
+
+:model "PIXMA TR4551"
+:interface "Wifi"
+:status :good
+:comment "All resolutions supported, Flatted and ADF supported."
+
+:model "PIXMA TR7500 Series"
:interface "WiFi"
:status :good
:comment "All resolutions supported, Flatted and ADF supported."
+:model "PIXMA TR8500 Series"
+:interface "Ethernet WiFi"
+:status :good
+:comment "All resolutions supported, Flatted and ADF supported."
+
+:model "PIXMA TR8520"
+:interface "Ethernet WiFi"
+:status :good
+:comment "All resolutions supported, Flatted and ADF supported."
+
:model "PIXMA TS3100 Series"
:interface "WiFi"
:status :good
:comment "All resolutions supported."
+:model "PIXMA TS3150 Series"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported."
+
+:model "PIXMA TS3151"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported."
+
+:model "PIXMA TS3152"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported."
+
:model "PIXMA TS3300 Series"
:interface "WiFi"
:status :good
:comment "All resolutions supported."
+:model "PIXMA TS3350 Series"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported."
+
+:model "PIXMA TS3351"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported."
+
+:model "PIXMA TS3352"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported."
+
+:model "PIXMA TS5350 Series"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported."
+
:model "PIXMA TS5351"
:interface "WiFi"
:status :good
:comment "All resolutions supported."
-:model "PIXMA TS6150"
+:model "PIXMA TS6150 Series"
:interface "Wifi"
:status :untested
:comment "Testers needed!"
-:model "PIXMA TS8050"
+:model "PIXMA TS8050 Series"
:interface "Wifi"
:status :untested
:comment "Testers needed!"
@@ -66,24 +146,14 @@
:status :untested
:comment "Testers needed!"
-:model "PIXMA TR4540 Series"
-:interface "Wifi"
-:status :good
-:comment "All resolutions supported, Flatted and ADF supported."
-
-:model "PIXMA TR8500 Series"
-:interface "Ethernet WiFi"
-:status :good
-:comment "All resolutions supported, Flatted and ADF supported."
-
-:model "PIXMA TR8520"
-:interface "Ethernet WiFi"
-:status :good
-:comment "All resolutions supported, Flatted and ADF supported."
-
:mfg "Epson"
:url "http://download.ebz.epson.net/dsc/search/01/search/?OSC=LX"
+:model "ET-2750"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported, Flatted only supported."
+
:model "ET-3750"
:interface "WiFi"
:status :good
@@ -94,6 +164,11 @@
:status :good
:comment "All resolutions supported, Flatted and ADF supported."
+:model "XP-6100"
+:interface "WiFi"
+:status :good
+:comment "All resolutions supported, Flatted only supported."
+
:mfg "HP"
:url "https://support.hp.com/us-en/drivers/printers"
@@ -112,10 +187,15 @@
:status :good
:comment "All resolutions supported."
+:model "LaserJet Entreprise Flow MFP M578"
+:interface "WiFi"
+:status :basic
+:comment "All resolutions supported."
+
:model "LaserJet MFP M28w"
:interface "WiFi"
-:status :untested
-:comment "Testers needed!"
+:status :basic
+:comment "All resolutions supported."
:model "LaserJet FlowMFP M578"
:interface "WiFi"
diff --git a/doc/descriptions/fujitsu.desc b/doc/descriptions/fujitsu.desc
index 0527579..d484168 100644
--- a/doc/descriptions/fujitsu.desc
+++ b/doc/descriptions/fujitsu.desc
@@ -12,9 +12,9 @@
:backend "fujitsu" ; name of backend
:url "http://www.thebility.com/fujitsu/"
-:version "134" ; version of backend
+:version "137" ; version of backend
:manpage "sane-fujitsu" ; name of manpage (if it exists)
-:comment "Backend updated for SANE release 1.0.28, see sane-fujitsu manpage"
+:comment "Backend updated for SANE release 1.0.32, see sane-fujitsu manpage"
:devicetype :scanner ; start of a list of devices....
; other types: :stillcam, :vidcam,
; :meta, :api
@@ -579,7 +579,7 @@
:model "fi-7140"
:interface "USB"
-:status :untested
+:status :good
:usbid "0x04c5" "0x14df"
:model "fi-7240"
@@ -673,3 +673,9 @@
:interface "USB"
:status :good
:usbid "0x04c5" "0x160b"
+
+:model "ScanSnap iX1600"
+:interface "USB WiFi"
+:status :good
+:usbid "0x04c5" "0x1632"
+:comment "small, current, WiFi not supported."
diff --git a/doc/descriptions/pieusb.desc b/doc/descriptions/pieusb.desc
index c0d17a9..0deb7af 100644
--- a/doc/descriptions/pieusb.desc
+++ b/doc/descriptions/pieusb.desc
@@ -11,7 +11,6 @@
:backend "pieusb" ; name of backend
:version "1.0 (unmaintained)" ; version of backend
-:new :no
:manpage "sane-pieusb" ; name of manpage (if it exists)
:url "https://github.com/kkaempf/sane-backends" ; backend's web page
diff --git a/doc/descriptions/pixma.desc b/doc/descriptions/pixma.desc
index 933780f..618d128 100644
--- a/doc/descriptions/pixma.desc
+++ b/doc/descriptions/pixma.desc
@@ -172,6 +172,12 @@
:status :untested
:comment "Testers needed!"
+:model "PIXMA G4511"
+:interface "USB WiFi"
+:usbid "0x04a9" "0x183d"
+:status :complete
+:comment "Flatbed and ADF scan. All resolutions supported (up to 600DPI). WIFI not supported"
+
:model "PIXMA G6000"
:interface "USB WiFi"
:usbid "0x04a9" "0x1865"
diff --git a/doc/descriptions/snapscan.desc b/doc/descriptions/snapscan.desc
index 33d7ec3..ae6c246 100644
--- a/doc/descriptions/snapscan.desc
+++ b/doc/descriptions/snapscan.desc
@@ -305,6 +305,18 @@
:mfg "Epson"
:url "http://www.epson.com"
+:model "GT-7400U" ; product spec (JP)
+:interface "USB"
+:usbid "0x04b8" "0x0120"
+:status :good
+:comment "Requires firmware esfw3e.bin."
+
+:model "GT-8400UF" ; product spec (JP)
+:interface "USB"
+:usbid "0x04b8" "0x011f"
+:status :good
+:comment "Requires firmware esfw30.bin, film scanning unit untested."
+
:model "Perfection 660"
:interface "USB"
:usbid "0x04b8" "0x0114"
@@ -315,7 +327,7 @@
:interface "USB"
:usbid "0x04b8" "0x0120"
:status :good
-:comment "Requires firmware esfw3e.bin."
+:comment "Requires firmware esfw3e.bin.<br>overseas version of the GT-7400U"
:model "Perfection 1670"
:interface "USB"
@@ -323,6 +335,12 @@
:status :good
:comment "Requires firmware esfw30.bin."
+:model "Perfection 1670 PHOTO"
+:interface "USB"
+:usbid "0x04b8" "0x011f"
+:status :good
+:comment "Requires firmware esfw30.bin, film scanning unit untested.<br>overseas version of the GT-8400UF"
+
:model "Perfection 2480 PHOTO"
:interface "USB"
:usbid "0x04b8" "0x0121"
diff --git a/doc/descriptions/umax.desc b/doc/descriptions/umax.desc
index 8f5a22b..25f51ba 100644
--- a/doc/descriptions/umax.desc
+++ b/doc/descriptions/umax.desc
@@ -333,7 +333,7 @@
:model "Perfection 600"
:interface "SCSI"
:status :good
-:comment "OK, SCSI-ID=EPSON Perfection600"
+:comment "OK, SCSI-ID=EPSON Perfection600<br>rebadged UMAX Astra 1200S"
:mfg "Escom" ; another manufacturer...
diff --git a/doc/releases.md b/doc/releases.md
new file mode 100644
index 0000000..4bc85af
--- /dev/null
+++ b/doc/releases.md
@@ -0,0 +1,199 @@
+---
+Copyright: © 2021 SANE Project
+SPDX-License-Identifier: CC-BY-SA-4.0
+---
+
+# Creating A New `sane-backends` Release
+
+This file summarizes most points to pay attention to when planning for
+a new `sane-backends` release. Content has been checked while working
+on `$old_version` and getting ready for `$new_version`, where:
+
+``` sh
+old_version=1.0.31
+new_version=1.0.32
+```
+
+## Timetable
+
+It is easiest to pick a release date well in advance so everyone knows
+what to expect. Ignoring security bug fix releases, `sane-backends`
+has been released on a roughly half-yearly schedule since `1.0.28`.
+
+Once you pick a date (and time), say `DT`, the planning is simply a
+matter of counting back from there:
+
+ - `$DT - 0 days`: **release** :confetti_ball:
+ - `$DT - 21 days`: **branch off** after which the release branch will not get any new features,
+ only bug fixes and translations.
+ - `$DT - 35 days`: **schedule announcement** including the timetable.
+
+Feel free to adjust the offsets if that works better. Also, pinging
+on the mailing list well in advance, say two, three months, about a
+suitable date for everyone involved is a good idea.
+
+> If you mention time of day, on the mailing list, in issues or merge
+> requests, use UTC times and mention that, e.g. 09:00 UTC. People
+> are in time zones all over the place and converting to and from UTC
+> should be relatively easy for everyone. Converting from other
+> time zones is generally cumbersome, even without things like DST.
+
+## Schedule Announcement
+
+Send an announcement to the `sane-devel` mailing list announcing the schedule.
+
+All notable changes are tracked as separate files in the newsfragments directory which means there's
+no need to track them manually.
+
+## Branch off
+
+A separate branch for the upcoming release is created on the repository. This marks the point when
+the code for the release effectively enters a feature freeze and no new features will land into
+the release branch.
+
+Use branch in the format of `release-1.2.x` so that it's clear that further bugfix releases will
+happen on that branch.
+
+Notify `sane-devel` of the Branch Off and point out that merge requests that have to be included
+in the upcoming release need to be targeted at release branch. Anything else can go to `master` as
+usual.
+
+For backends added since the `$old_version`, make sure that its
+`.desc` file includes a `:new :yes` near the top. You can find such
+backends from the list of added files with:
+
+``` sh
+git ls-files -- backend | while read f; do
+ git log --follow --diff-filter=A --find-renames=40% \
+ --format="%ai $f" $old_version..release/$new_version -- "$f"
+done | cat
+```
+
+Feature changes are no longer allowed, bar exceptional circumstances, so now is a good time to
+sync the `po/*.po` files in the repository for translators.
+
+Announce the Branch Off on `sane-devel` and invite translators to contribute their updates.
+Release manager should ensure that whichever branch the translator work on, their work lands on
+both the release branch and the master branch.
+
+Occasionally, you may notice changes that have not been documented,
+either in a `.desc` file or a manual page. Now is a good time to
+rectify the omission.
+
+The `NEWS` file is updated during the release time, there's no need to do anything with the
+release notes now.
+
+## Release
+
+The release consists of two parts: a release notes MR and the actual release.
+
+The release notes are handled by the towncrier tool. The easiest way to use it is from virtualenv:
+
+``` sh
+virtualenv some/path/to/virtualenv
+source some/path/to/virtualenv
+pip install towncrier
+```
+
+To update the `NEWS `document, run the following:
+
+```
+towncrier --version $new_version --date `date -u +%F`
+```
+
+After that, create a new MR, merge it and fetch the new release branch.
+
+The actual release is as easy as pushing a tag and clicking a web UI button. GitLab CI/CD
+takes care of the rest.
+
+``` sh
+git tag -a -s $new_version -m "Release $new_version"
+git push --tags origin release-$new_release
+```
+
+The final job in the release pipeline that is triggered by the above
+is a manual job. You have to press a button in the web UI. However,
+before you do so, create a Personal Access Token (with `api` scope) in
+your own GitLab account's `Settings` > [`Access Tokens`][] and use its
+value to set the `PRIVATE_TOKEN` variable for the `upload` job in the
+`Release` stage. You need to set this on the page that triggers the
+`upload` job.
+
+ [`Access Tokens`]: https://gitlab.com/-/profile/personal_access_tokens
+ [`CI/CD`]: https://gitlab.com/sane-project/backends/-/settings/ci_cd
+
+### Updating The Website
+
+After the release artifacts, i.e. the source tarball, have hit the
+GitLab [Release][] tab, grab the source tarball to create updated
+lists of supported devices and HTML manual pages for the website.
+
+With the `$new_version`'s source tarball:
+
+``` sh
+tar xaf sane-backends-$new_version.tar.gz@
+cd sane-backends-$new_version
+./configure
+make -C lib
+make -C sanei
+make -C doc html-pages
+LANG=C make -C doc html-man
+```
+
+The last command assumes you have `man2html` in your `$PATH`. There
+are various versions of this command but `make` assumes you are using
+the version from one of:
+
+- https://savannah.nongnu.org/projects/man2html/
+- https://web.archive.org/web/20100611002649/http://hydra.nac.uci.edu/indiv/ehood/tar/man2html3.0.1.tar.gz
+
+Using anything else is asking for trouble.
+
+> See also #261.
+
+With the various HTML pages generated in `sane-backends-$new_version`,
+check out the latest code of the sane-project/website and:
+
+``` sh
+cd website
+rm man/*
+cp .../sane-backends-$new_version/doc/*.[1578].html man/
+git add man/
+git mv sane-backends.html sane-backends-$old_version.html
+cp .../sane-backends-$new_version/doc/sane-{backends,mfgs}.html .
+git add sane-{backends,mfgs}.html
+```
+
+Next, add a hyperlink to the `$old_version`'s file in
+`sane-supported-devices.html` and add an entry for the new release to
+`index.html`.
+
+Finally
+
+``` sh
+git add sane-supported-devices.html index.html
+git commit -m "Update for sane-backends-$new_version release"
+git push
+```
+
+The push will trigger a GitLab CI/CD pipeline that will update the
+website. Make sure it succeeds (see sane-project/website#33 for one
+reason it might fail).
+
+ [Release]: https://gitlab.com/sane-project/backends/-/releases
+
+### Mailing List Announcement
+
+Once the website has been updated successfully, announce the release
+on the `sane-announce` mailing list (and Cc: `sane-devel`). You may
+want to ping the `sane-announce` list's moderator (@kitno455) to get
+your post approved sooner rather than later.
+
+## Post-Release
+
+With the release all done, there are still a few finishing touches that need taking care of:
+
+* remove the `:new` tag from all `doc/descriptions*/*.desc` files
+* update this file!
+
+That's All Folks!
diff --git a/doc/releases.txt b/doc/releases.txt
deleted file mode 100644
index 0cb7518..0000000
--- a/doc/releases.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-2019-08-24
-
-This text summarizes some points to pay attention to when a new release
-of sane-backends is planned.
-
-Timetable (approximate periods):
-
-Day 0: Announcement of upcoming release on sane-devel including timetable
- and pointer to the GitLab milestone
-Day 14: Feature freeze (only bugfixes + documentation updates)
-Day 28: Code freeze (only fixes for bugs that can destroy hardware, can cause
- compilation problems or render a backend completely unusable, and
- documentation updates are allowed)
-Day 35: Release
-
-Before the release:
-
-* set :new :yes on any new backend .desc files, by looking for added files:
-
- version=1.0.27
- git ls-files -- backend | while read f; do
- git log --follow --diff-filter=A --find-renames=40% \
- --format="%ai $f" $version..HEAD -- "$f"
- done | cat
-
-* NEWS: update and enter date of release, etc
- Get list of heavily change backends via: git diff --stat $version..HEAD
- Get list of details from: git log $version..HEAD
-* git commit -a
-* git push origin master
-
-Making the release:
-
-* temporarily set a PRIVATE_TOKEN variable in the GitLab CI/CD
- variables. You have to create one in your own Settings > Access
- Tokens. Set it to expire the next day to avoid abuse. Better yet,
- remove it from the CI/CD variables when the job is finished.
-* git tag -a -s 1.0.28 -m Release
-* git push --tags origin master
-* trigger the manual 'release' stage of the build via the web UI when
- this becomes possible. This requires a valid PRIVATE_TOKEN.
-
-Updating the website and announcing the release:
-
-* 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 (make -C doc html-pages)
-* [TBD] use man2html from http://hydra.nac.uci.edu/indiv/ehood/man2html.html
- to rebuild html man pages (make -C doc html-man) (no other version works)
-* update announcement to index.html
-* git commit -a && git push
-* check that website's pipeline succeeded
-* announce release on sane-announce mailing list (and Cc: sane-devel).
- Ping the sane-announce list's moderator (m. allan noah) to get your
- post approved ASAP.
-
-After the release:
-
-* remove the ':new' tag from all doc/descriptions*/*.desc files
-* git add new and changed files and commit
-* git push
diff --git a/doc/sane-abaton.man b/doc/sane-abaton.man
index 13c3c6b..8765dad 100644
--- a/doc/sane-abaton.man
+++ b/doc/sane-abaton.man
@@ -78,7 +78,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-agfafocus.man b/doc/sane-agfafocus.man
index 53b2d37..f9abb04 100644
--- a/doc/sane-agfafocus.man
+++ b/doc/sane-agfafocus.man
@@ -47,9 +47,9 @@ This backend expects device names of the form:
.I special
.RE
.PP
-Where
+where
.I special
-is either the path-name for the special device that corresponds to a
+is the path-name for the special device that corresponds to a
SCSI scanner. For SCSI scanners, the special device name must be a
generic SCSI device or a symlink to such a device. Under Linux, such
a device name could be
@@ -93,7 +93,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-apple.man b/doc/sane-apple.man
index 0c057fb..ef7d4ce 100644
--- a/doc/sane-apple.man
+++ b/doc/sane-apple.man
@@ -35,9 +35,9 @@ This backend expects device names of the form:
.I special
.RE
.PP
-Where
+where
.I special
-is either the path-name for the special device that corresponds to a
+is the path-name for the special device that corresponds to a
SCSI scanner. For SCSI
scanners, the special device name must be a generic SCSI device or a
symlink to such a device. Under Linux, such a device name could be
@@ -85,7 +85,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable is list of directories where SANE looks
-for the configuration file. Under UNIX directory names are
+for the configuration file. On *NIX systems, directory names are
separated by a colon (`:'), under OS/2 by a semi-colon (`;').
If SANE_CONFIG_DIR is not set, SANE defaults to
searching the current working directory (".") and then
diff --git a/doc/sane-artec.man b/doc/sane-artec.man
index a738660..d612732 100644
--- a/doc/sane-artec.man
+++ b/doc/sane-artec.man
@@ -79,7 +79,7 @@ model AT3
.SH SCSI ADAPTER TIPS
Some Artec scanners come with an included SCSI adapter. If your scanner came
-with a DTC ISA scsi cards, you can probably use it with recent (>= 2.2.0)
+with a DTC ISA SCSI cards, you can probably use it with recent (>= 2.2.0)
kernels using the generic NCR5380 support. You must pass the following
boot argument to the kernel: "dtc3181e=0x2c0,0"
.br
@@ -104,11 +104,11 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
-separated by a colon (`:'), under OS/2, they are separated by a semi-
-colon (`;'). If this variable is not set, the configuration file is
-searched in two default directories: first, the current working direc-
-tory (".") and then in
+contain the configuration file. On *NIX systems, the directories are
+separated by a colon (`:'), under OS/2, they are separated by a
+semi-colon (`;'). If this variable is not set, the configuration file is
+searched in two default directories: first, the current working
+directory (".") and then in
.IR @CONFIGDIR@ .
If the value of the
environment variable ends with the directory separator character, then
diff --git a/doc/sane-artec_eplus48u.man b/doc/sane-artec_eplus48u.man
index 70f4254..fa6fe7f 100644
--- a/doc/sane-artec_eplus48u.man
+++ b/doc/sane-artec_eplus48u.man
@@ -6,7 +6,7 @@ The
.B sane\-artec_eplus48u
library implements a SANE (Scanner Access Now Easy) backend that provides
access to several USB flatbed scanners using the GT6816 chipset like the Artec E+ 48U.
-These scanners have a contact image sensor (CIS) and an USB interface.
+These scanners have a contact image sensor (CIS).
.PP
A complete list of supported devices can be found on
.IR http://www.sane\-project.org/sane\-supported\-devices.html .
@@ -57,10 +57,9 @@ autodetected by
.I usb vendor_id product_id
statements which are already included into
.I artec_eplus48u.conf .
-"vendor_id" and "product_id" are hexadecimal numbers that identify the
-.B scanner.
+"vendor_id" and "product_id" are hexadecimal numbers that identify the scanner.
.PP
-Every usb section can have additional options
+Every usb section can have additional options.
.TP
.B artecFirmwareFile @DATADIR@/sane/artec_eplus48u/Artec48.usb
The path to the firmware file. This option is required.
@@ -86,8 +85,9 @@ then the gamma options are reset to the values specified here.
.B greenExposure 0x116
.TP
.B blueExposure 0xdc
-These are the default values for offset and exposure time. You can e.g. change them to speed up calibration,
-if you don't want to save the calibration data to disk.
+These are the default values for offset and exposure time.
+You can change them (e.g. to speed up calibration)
+if you don't want to save the calibration data permanently.
.TP
.B vendorString "Artec"
.TP
@@ -111,7 +111,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-avision.man b/doc/sane-avision.man
index 517ac1b..9aae5e1 100644
--- a/doc/sane-avision.man
+++ b/doc/sane-avision.man
@@ -2,7 +2,7 @@
.IX sane\-avision
.SH NAME
-sane\-avision \- SANE backend for original Avision and Avision OEM scanners
+sane\-avision \- SANE backend for Avision branded and Avision OEM
(HP, Minolta, Mitsubishi, UMAX and possibly more) flatbed and film scanners.
.SH DESCRIPTION
@@ -16,7 +16,7 @@ It is fully big-endian aware and in everyday use on PowerPC and SPARC
systems.
.B I suggest you hold one hand on the power-button of the scanner while
-you try the first scans \- especially with film-scanners!
+.B you try the first scans \- especially with film-scanners!
.SH CONFIGURATION
@@ -69,19 +69,19 @@ respond.
.TP
disable\-gamma\-table:
Disables the usage of the scanner's gamma-table. You
-might try this if your scans hang or only produces
+might try this if your scans hang or only produce
random garbage.
.TP
disable\-calibration:
Disables the scanner's color calibration. You
-might try this if your scans hang or only produces
+might try this if your scans hang or only produce
random garbage.
.TP
Note:
Any option above modifies the default code-flow
for your scanner. The options should only be used
-when you encounter problems with the default be-
-haviour of the backend. Please report the need of
+when you encounter problems with the default behavior
+of the backend. Please report the need of
options to the backend-author so the backend can
be fixed as soon as possible.
@@ -146,7 +146,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-bh.man b/doc/sane-bh.man
index de1336e..218fd39 100644
--- a/doc/sane-bh.man
+++ b/doc/sane-bh.man
@@ -418,7 +418,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-canon.man b/doc/sane-canon.man
index 6cc23a5..7d181f2 100644
--- a/doc/sane-canon.man
+++ b/doc/sane-canon.man
@@ -74,7 +74,7 @@ image data are exported without corrections as 16-bit intensities; this
mode can be recommended if extensive adjustments have to be made to a
picture (and if the frontend can handle 16-bit intensities).
.PP
-Negatives are handled by simple color inversion and may require manual
+Negatives are handled by simple color inversion and will require manual
removal of blue discoloration.
.PP
.SH FILES
diff --git a/doc/sane-canon630u.man b/doc/sane-canon630u.man
index f569695..73bb3bd 100644
--- a/doc/sane-canon630u.man
+++ b/doc/sane-canon630u.man
@@ -40,7 +40,7 @@ for details.
.PP
This product-specific scanner driver uses the lower-level kernel USB driver
"scanner". Check for "Driver=usbscanner" under
-.IR /proc/bus/usb/devices.
+.IR /proc/bus/usb/devices .
If "Driver=(none)", try forcing it with
.I "insmod scanner vendor=0x04a9 product=0x2204"
.SH NOTES
@@ -56,12 +56,12 @@ kernel 2.4.12 or later.
Some users have reported that this driver doesn't work at all. This seems
to be a hardware specific issue, although I dsane\-uson't know what exactly the
problem is. If you are having problems, please send me the info in
-.IR /proc/bus/usb/devices,
-.IR /proc/pci,
+.IR /proc/bus/usb/devices ,
+.IR /proc/pci ,
the kernel
.I scanner.c
driver version from
-.IR /var/log/messages,
+.IR /var/log/messages ,
and the output from
.I "SANE_DEBUG_CANON630U=12 scanimage > /dev/null"
.PP
@@ -87,7 +87,7 @@ Deleting this file will force recalibration.
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-canon_dr.man b/doc/sane-canon_dr.man
index db483e0..1704291 100644
--- a/doc/sane-canon_dr.man
+++ b/doc/sane-canon_dr.man
@@ -1,4 +1,4 @@
-.TH sane\-canon_dr 5 "31 Aug 2015" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
+.TH sane\-canon_dr 5 "13 Feb 2021" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.IX sane\-canon_dr
.SH NAME
@@ -10,7 +10,7 @@ The
library implements a SANE (Scanner Access Now Easy) backend which
provides access to some Canon DR-series scanners.
-This document describes backend version 57, which shipped with SANE 1.0.28.
+This document describes backend version 60, which shipped with SANE 1.0.32.
.SH SUPPORTED HARDWARE
This version has only been tested with a few scanner models. Please see
@@ -55,7 +55,8 @@ by some frontends.
.TP
.B \-\-page\-width, \-\-page\-height
Sets paper size. Used by scanner to determine centering of scan
-coordinates when using ADF and to detect double feed errors.
+coordinates when using the ADF (Automatic Document Feeder) and
+to detect double feed errors.
.PP
Other options will be available based on the capabilities of the scanner:
@@ -161,7 +162,7 @@ Some scanners pad the upper edge of one side of a duplex scan. There is some var
.RE
.PP
.BR NOTE :
-'option' lines may appear multiple times in the configuration file.
+"option" lines may appear multiple times in the configuration file.
They only apply to scanners discovered by the next 'scsi/usb' line.
.PP
diff --git a/doc/sane-canon_lide70.man b/doc/sane-canon_lide70.man
index 83c54bc..c243a90 100644
--- a/doc/sane-canon_lide70.man
+++ b/doc/sane-canon_lide70.man
@@ -90,12 +90,6 @@ where such precision matters. Note that
.BR xsane (1)
uses the 75 dpi mode for prescans. The problem is worse on the LiDE 600(F),
where the offset is five millimeters.
-.PP
-It is recommended that in
-.BR xsane (1)
-the gamma value be set to approximately 1.7
-to get more realistic colors. This also wipes out some artifacts caused by
-the lack of real calibration.
.SH "SEE ALSO"
.BR sane (7),
diff --git a/doc/sane-canon_pp.man b/doc/sane-canon_pp.man
index 72a9381..6889c05 100644
--- a/doc/sane-canon_pp.man
+++ b/doc/sane-canon_pp.man
@@ -132,7 +132,7 @@ dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may contain
-the configuration file. Under UNIX, the directories are separated by a colon
+the configuration file. On *NIX systems, the directories are separated by a colon
(`:'), under OS/2, they are separated by a semi-colon (`;'). If this variable
is not set, the configuration file is searched in two default directories:
first, the current working directory (".") and then in
diff --git a/doc/sane-coolscan2.man b/doc/sane-coolscan2.man
index c801034..84e8a93 100644
--- a/doc/sane-coolscan2.man
+++ b/doc/sane-coolscan2.man
@@ -85,7 +85,7 @@ with no options altered. The backend must not be restarted between the scans.
If you use
.BR scanimage (1),
perform a batch scan with
-.B batch\-count=2
+.B \-\-batch\-count=2
to obtain the IR information.
.TP
.B \-\-depth <n>
@@ -115,15 +115,17 @@ Multiply all exposure times with this value. This allows exposure
correction without modifying white balance.
.TP
.B \-\-load
-Load the next slide when using the slide loader.
+Load the next slide when using the slide loader
+(applies only to the SF\-200 bulk feeder).
.TP
.B \-\-eject
Eject the film strip or mounted slide when using the slide loader.
.TP
.B \-\-reset
Reset scanner. The scanner will perform the same action as when power is
-turned on: it will eject the film strip and calibrate itself. Use this
-whenever the scanner refuses to load a film strip properly, as a result of
+turned on: it will eject the film strip (with the SF\-200 bulk feeder)
+and calibrate itself. Use this whenever the scanner refuses to load
+a film strip properly, as a result of
which
.B \-\-eject
does not work.
@@ -186,8 +188,9 @@ whenever the hardware changes. Thus the number of choices for the
.B \-\-frame
option will be fixed when the backend is initialized (usually when the user
runs the frontend). In particular, if there is no film strip in the
-automatic film strip feeder when the backend is initialized, the frame option
-will not appear at all. Also, restarting the frontend after swapping film
+automatic film strip feeder when the backend is initialized, the
+.B \-\-frame
+option will not appear at all. Also, restarting the frontend after swapping film
adapters is strongly recommended.
Linux kernels prior to 2.4.19 had a patch that truncated INQUIRY data
diff --git a/doc/sane-coolscan3.man b/doc/sane-coolscan3.man
index 57c0652..7c59f43 100644
--- a/doc/sane-coolscan3.man
+++ b/doc/sane-coolscan3.man
@@ -83,7 +83,7 @@ If set to "yes", the scanner will read the infrared channel, thus allowing
defect removal in software. The infrared image is read during a second scan,
with no options altered. The backend must not be restarted between the scans.
If you use scanimage, perform a batch scan with
-.B batch\-count=2
+.B \-\-batch\-count=2
to obtain the IR information.
.TP
.B \-\-depth <n>
@@ -113,14 +113,15 @@ Multiply all exposure times with this value. This allows exposure
correction without modifying white balance.
.TP
.B \-\-load
-Load the next slide when using the slide loader.
+Load the next slide when using the slide loader (SF\-200 bulk loader only).
.TP
.B \-\-eject
Eject the film strip or mounted slide when using the slide loader.
.TP
.B \-\-reset
Reset scanner. The scanner will perform the same action as when power is
-turned on: it will eject the film strip and calibrate itself. Use this
+turned on: it will eject the film strip (with the SF\-200 bulk loader)
+and calibrate itself. Use this
whenever the scanner refuses to load a film strip properly, as a result of
which
.B \-\-eject
@@ -142,7 +143,7 @@ These lines are ignored, thus '#' can be used to include comments.
.TP
.I containing only the word """auto"""
This instructs the backend to probe for a scanner by scanning the buses for
-devices with know identifiers. This is the action taken when no
+devices with known identifiers. This is the default action when no
configuration file is present.
.TP
.I a line of the form <interface>:<device>
@@ -175,8 +176,8 @@ levels reduce verbosity.
.BR sane\-scsi (5),
.BR sane\-usb (5),
.BR scanimage (1),
-.BR xscanimage(1),
-.BR xsane(1)
+.BR xscanimage (1),
+.BR xsane (1)
.SH BUGS
Currently, the SANE protocol does not allow automatically updating options
@@ -184,9 +185,10 @@ whenever the hardware changes. Thus the number of choices for the
.B \-\-frame
option will be fixed when the backend is initialized (usually when the user
runs the frontend). In particular, if there is no film strip in the
-automatic film strip feeder when the backend is initialized, the frame option
-will not appear at all. Also, restarting the frontend after swapping film
-adapters is strongly recommended.
+automatic film strip feeder when the backend is initialized, the
+.B \-\-frame
+option will not appear at all.
+Also, restarting the frontend after swapping film adapters is strongly recommended.
Linux kernels prior to 2.4.19 had a patch that truncated INQUIRY data
from IEEE 1394 scanners to 36 bytes, discarding vital information
diff --git a/doc/sane-dc210.man b/doc/sane-dc210.man
index 89e9e72..a782aec 100644
--- a/doc/sane-dc210.man
+++ b/doc/sane-dc210.man
@@ -30,13 +30,13 @@ line causes some information about the camera to
be printed.
.PP
.B cmdrespause
-specifies how many usec (1,000,000ths of a) between
-writing the command and reading the result should be used. 125000
-seems to be the lowest I could go reliably.
+specifies how many usec (1,000,000ths of a second) to wait between
+writing the command and reading the result. 125000 seems to be the
+lowest I could go reliably.
.PP
.B breakpause
-is the time in 1,000,000ths of a usec between sending the
-"back to default" break sending commands.
+specifies how many usec (1,000,000ths of a second) between sending the
+"back to default" break and sending commands.
.PP
Empty lines and lines starting with a hash mark (#) are
ignored. A sample configuration file is shown below:
@@ -73,7 +73,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-dc240.man b/doc/sane-dc240.man
index 27547c1..6d0e9b1 100644
--- a/doc/sane-dc240.man
+++ b/doc/sane-dc240.man
@@ -30,13 +30,13 @@ The
line causes some information about the camera to be printed.
.PP
.B cmdrespause
-specifies how many usec (1,000,000ths of a) between
-writing the command and reading the result should be used. 125000
-seems to be the lowest I could go reliably.
+specifies how many usec (1,000,000ths of a second) to wait between
+writing the command and reading the result. 125000 seems to be the
+lowest I could go reliably.
.PP
.B breakpause
-is the time in 1,000,000ths of a usec between sending the
-"back to default" break sending commands.
+specifies how many usec (1,000,000ths of a second) between sending the
+"back to default" break and sending commands.
.PP
Empty lines and lines starting with a hash mark (#) are
ignored. A sample configuration file is shown below:
@@ -73,7 +73,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
@@ -104,10 +104,16 @@ levels reduce verbosity.
Peter S. Fales
.PP
-This backend borrows heavily from the dc210 backend by Brian J. Murrell
-which is based somewhat on the dc25 backend by Peter Fales.
+This backend borrows heavily from the
+.BR sane\-dc210 (5)
+backend by Brian J. Murrell
+which is based somewhat on the
+.BR sane\-dc25 (5)
+backend by Peter Fales.
.PP
-The manpage was largely copied from the dc210 manpage.
+The manpage was largely copied from the
+.BR sane\-dc210 (5)
+manpage.
.SH BUGS
The major limitation that I know of is that the backend assumes
diff --git a/doc/sane-dc25.man b/doc/sane-dc25.man
index 23f4717..160aa02 100644
--- a/doc/sane-dc25.man
+++ b/doc/sane-dc25.man
@@ -61,7 +61,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-dll.man b/doc/sane-dll.man
index aaa3577..b7f98c9 100644
--- a/doc/sane-dll.man
+++ b/doc/sane-dll.man
@@ -136,7 +136,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-dmc.man b/doc/sane-dmc.man
index a076736..eee5e92 100644
--- a/doc/sane-dmc.man
+++ b/doc/sane-dmc.man
@@ -102,7 +102,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-epsonds.man b/doc/sane-epsonds.man
index a7c9e32..e75dac6 100644
--- a/doc/sane-epsonds.man
+++ b/doc/sane-epsonds.man
@@ -111,4 +111,4 @@ a bug report.
.SH AUTHOR
-The package is written by Alessandro Zummo
+The backend is written by Alessandro Zummo.
diff --git a/doc/sane-escl.man b/doc/sane-escl.man
index 92a6650..f0c7821 100644
--- a/doc/sane-escl.man
+++ b/doc/sane-escl.man
@@ -11,7 +11,7 @@ eSCL protocol scanners.
Currently, the following models work with this backend (This list is not exhaustive):
.PP
.RS
-BROTHER DCP-L2530
+BROTHER DCP-J772DW, DCP-L2530DW
.br
BROTHER HL-L2590DW
.br
@@ -19,15 +19,27 @@ CANON IR C3520
.br
CANON PIXMA MG5765
.br
-CANON PIXMA TS3100, TS3150, TS3300, TS3151, TS3350, TS3351,
+CANON PIXMA G4511, G7050
.br
-CANON PIXMA TS3352, TS5351, TS6150, TS8050, TS9100, TR4540,
+CANON PIXMA TR4520, TR4540, TR4550, TR4551, TR7500, TR8500,
.br
-CANON PIXMA TR8500, TR8520
+CANON PIXMA TR8520
.br
-EPSON ET3740, ET4750
+CANON PIXMA TS3100, TS3150, TS3151, TS3152, TS3300, TS3350,
.br
-HP DESKJET 2710, DESKJET 2723, DESKJET 3760, LASERJET MFP M28W,
+CANON PIXMA TS3351, TS3352, TS5350, TS5351, TS6150, TS8050,
+.br
+CANON PIXMA TS9100
+.br
+EPSON ET-2750, ET-3750, ET-4750
+.br
+EPSON XP-6100
+.br
+HP DESKJET 2710, DESKJET 2723, DESKJET 3760
+.br
+HP LASERJET ENTREPRISE FLOW MFP M578,
+.br
+HP LASERJET MFP M28W, LASERJET MFP M630
.br
HP OFFICEJET 4630, OFFICEJET PRO 8610
.br
diff --git a/doc/sane-find-scanner.man b/doc/sane-find-scanner.man
index ae46369..22b17e3 100644
--- a/doc/sane-find-scanner.man
+++ b/doc/sane-find-scanner.man
@@ -35,7 +35,7 @@ isn't supported by any SANE backend.
For
.B USB
scanners, first the USB kernel scanner device files (e.g.
-.IR /dev/usb/scanner0 ),
+.IR /dev/usb/scanner0 ,
.IR /dev/usb/scanner ,
and
.IR /dev/usbscanner )
@@ -59,7 +59,7 @@ won't find most
parallel port scanners, or scanners connected to proprietary ports. Some
.B parallel port
scanners may be detected by
-.I sane\-find\-scanner -p.
+.I "sane\-find\-scanner -p" .
At the time of writing this will only detect Mustek parallel port scanners.
.SH OPTIONS
diff --git a/doc/sane-fujitsu.man b/doc/sane-fujitsu.man
index 161347f..4db6d41 100644
--- a/doc/sane-fujitsu.man
+++ b/doc/sane-fujitsu.man
@@ -1,4 +1,4 @@
-.TH sane\-fujitsu 5 "07 Feb 2020" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
+.TH sane\-fujitsu 5 "13 Feb 2021" "@PACKAGEVERSION@" "SANE Scanner Access Now Easy"
.IX sane\-fujitsu
.SH NAME
@@ -10,7 +10,7 @@ The
library implements a SANE (Scanner Access Now Easy) backend which provides
access to most Fujitsu flatbed and ADF scanners.
-This document describes backend version 136, which shipped with SANE 1.0.30.
+This document describes backend version 137, which shipped with SANE 1.0.32.
.SH SUPPORTED HARDWARE
This version supports every known model which speaks the Fujitsu SCSI and
@@ -83,7 +83,8 @@ by some frontends.
.B page\-width, page\-height
.RS
Sets paper size. Used by scanner to determine centering of scan
-coordinates when using ADF and to detect double feed errors.
+coordinates when using the ADF (Automatic Document Feeder) and to detect
+double feed errors.
.RE
.PP
Other options will be available based on the capabilities of the scanner:
@@ -98,6 +99,24 @@ 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.
+.PP
+swcrop
+.RS
+Requests the driver to detect the extremities of the paper within the larger
+image, and crop the empty edges.
+.RE
+.PP
+swdeskew
+.RS
+Requests the driver to detect the rotation of the paper within the larger
+image, and counter the rotation.
+.RE
+.PP
+swdespeck X
+.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
Use
.I 'scanimage \-\-help'
diff --git a/doc/sane-genesys.man b/doc/sane-genesys.man
index cf4fa38..85b80ff 100644
--- a/doc/sane-genesys.man
+++ b/doc/sane-genesys.man
@@ -196,7 +196,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-gphoto2.man b/doc/sane-gphoto2.man
index d98387e..2b2d66f 100644
--- a/doc/sane-gphoto2.man
+++ b/doc/sane-gphoto2.man
@@ -91,7 +91,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
@@ -122,15 +122,18 @@ Set to 1, 2, or 3, to enable various levels of debugging within the
gphoto2 libraries.
.SH "SEE ALSO"
-.BR sane (7)
-.BR scanimage (1)
-.BR xscanimage (1)
+.BR sane (7) ,
+.BR scanimage (1) ,
+.BR xscanimage (1) ,
+.BR libgphoto2 (3)
.SH AUTHOR
Peter S. Fales
.PP
-The manpage was largely copied from the dc210 manpage.
+The manpage was largely copied from the
+.BR sane\-dc210 (5)
+manpage.
.SH BUGS
Many, no doubt.
diff --git a/doc/sane-gt68xx.man b/doc/sane-gt68xx.man
index 8a1cff9..62bd045 100644
--- a/doc/sane-gt68xx.man
+++ b/doc/sane-gt68xx.man
@@ -31,7 +31,7 @@ following web page:
Please use libusb-0.1.8 or later. Without libusb or with older libusb versions
all kinds of trouble can be expected. The scanner should be found by
.BR sane\-find\-scanner (1)
-without further actions. For setting permissions and general USB information looks at
+without further actions. For setting permissions and general USB information, look at
.BR sane\-usb (5).
.PP
@@ -44,7 +44,8 @@ It comes on the installation CD that was provided by the manufacturer, but it
may be packaged together with the installation program in an .exe file. For
Mustek scanners, the file can be downloaded from the gt68xx backend homepage. For
other scanners, check the CD for .usb files. If you only find *.cab files, try
-cabextract to unpack. If everything else fails, you must install the Windows
+.BR cabextract (1)
+to unpack. If everything else fails, you must install the Windows
driver and get the firmware from there (usually in the
.I windows/system
or
@@ -159,7 +160,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
@@ -195,7 +196,8 @@ export SANE_DEBUG_GT68XX=4
.BR sane\-ma1509 (5),
.BR sane\-mustek_usb (5),
.BR sane\-mustek (5),
-.BR sane\-mustek_pp (5)
+.BR sane\-mustek_pp (5),
+.BR cabextract (1)
.br
.I @DOCDIR@/gt68xx/gt68xx.CHANGES
.br
diff --git a/doc/sane-hp.man b/doc/sane-hp.man
index 7a6fa14..d0b0ff8 100644
--- a/doc/sane-hp.man
+++ b/doc/sane-hp.man
@@ -192,7 +192,7 @@ changed to 'print media'.
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-hp3900.man b/doc/sane-hp3900.man
index 4c2e562..2afbdc0 100644
--- a/doc/sane-hp3900.man
+++ b/doc/sane-hp3900.man
@@ -27,7 +27,7 @@ BenQ 5550 RTS8823L-01E *
.RE
.PP
More details can be found on the
-.BR sane\-hp3900 (1)
+.BR sane\-hp3900 (5)
backend homepage
.IR http://sourceforge.net/projects/hp3900\-series/ .
.PP
@@ -77,7 +77,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-hp4200.man b/doc/sane-hp4200.man
index 7d92cde..bc0fe58 100644
--- a/doc/sane-hp4200.man
+++ b/doc/sane-hp4200.man
@@ -64,7 +64,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-hp5400.man b/doc/sane-hp5400.man
index 4738c08..e0752da 100644
--- a/doc/sane-hp5400.man
+++ b/doc/sane-hp5400.man
@@ -64,7 +64,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-hpsj5s.man b/doc/sane-hpsj5s.man
index aae2f51..56a940b 100644
--- a/doc/sane-hpsj5s.man
+++ b/doc/sane-hpsj5s.man
@@ -19,7 +19,7 @@ is due to dependence on the
.BR libieee1284 (3)
library. If your system supports
.BR libieee1284 (3)
-too,this backend should work. If you ported
+too, this backend should work. If you ported
.BR libieee1284 (3)
for your platform, please let me know. Your system should support
.B EPP
@@ -61,10 +61,10 @@ for this moment. Future versions will support daisy chain selection.
.SH TIPS
.PP
It seems that HP ScanJet 5S scanner uses software noise correction. This
-feature is not implemented for now. So does gamma correction and calibration.
-I'll handle it in future versions.
-Native resolution for this scanner is 300 DPI. Other modes could be jagged in some
-ways.
+feature, along with gamma correction and calibration, are not implemented for now.
+They will be handled in future versions.
+Native resolution for this scanner is 300 DPI.
+Other modes may present aliasing artifacts.
.PP
.SH FILES
.TP
@@ -83,7 +83,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-hs2p.man b/doc/sane-hs2p.man
index fcbdae1..1b39296 100644
--- a/doc/sane-hs2p.man
+++ b/doc/sane-hs2p.man
@@ -23,7 +23,7 @@ This backend expects device names of the form:
.PP
Where
.I special
-is either the path-name for the special device that corresponds to a SCSI
+is the path-name for the special device that corresponds to a SCSI
scanner. The program
.BR sane\-find\-scanner (1)
helps to find out the correct device. Under Linux, such a device name could be
@@ -60,7 +60,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-ibm.man b/doc/sane-ibm.man
index 1ecb285..677de8f 100644
--- a/doc/sane-ibm.man
+++ b/doc/sane-ibm.man
@@ -23,7 +23,7 @@ This backend expects device names of the form:
.PP
Where
.I special
-is either the path-name for the special device that corresponds to a SCSI
+is the path-name for the special device that corresponds to a SCSI
scanner. The program
.BR sane\-find\-scanner (1)
helps to find out the correct device. Under Linux, such a device name could be
@@ -60,7 +60,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-kodak.man b/doc/sane-kodak.man
index 9b89c2b..3261f68 100644
--- a/doc/sane-kodak.man
+++ b/doc/sane-kodak.man
@@ -59,7 +59,8 @@ by some frontends.
.BR --page\-width ", " --page\-height
.RS
Sets paper size. Used by scanner to determine centering of scan
-coordinates when using ADF and to detect double feed errors.
+coordinates when using the ADF (Automatic Document Feeder) and to
+detect double feed errors.
.RE
.PP
Other options will be available based on the capabilities of the scanner.
@@ -133,7 +134,7 @@ which enables debugging output to stderr. Valid values are:
.SH KNOWN ISSUES
Most hardware options are either not supported or not exposed for control by
the user, including: multifeed detection, image compression, autocropping,
-endorser, iThresholding, multi\-stream, etc.
+endorser, thresholding, multi\-stream, etc.
.PP
.SH CREDITS
diff --git a/doc/sane-kodakaio.man b/doc/sane-kodakaio.man
index 6c94ce0..990195c 100644
--- a/doc/sane-kodakaio.man
+++ b/doc/sane-kodakaio.man
@@ -16,7 +16,8 @@ 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.
+but other models may work. Please see the supported devices list at
+.IR http://www.sane-project.org/sane-backends.html#S-KODAKAIO .
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.
diff --git a/doc/sane-kvs1025.man b/doc/sane-kvs1025.man
index d366c0b..c8e9631 100644
--- a/doc/sane-kvs1025.man
+++ b/doc/sane-kvs1025.man
@@ -24,7 +24,7 @@ sanei_usb instead of libusb by m. allan noah.
The backend was tested on KV-S1025C and 1045C by Tiago Zaniquelli.
.SH "SEE ALSO"
-.BR sane (7) ,
+.BR sane (7),
.BR sane\-usb (5)
.SH AUTHOR
diff --git a/doc/sane-leo.man b/doc/sane-leo.man
index 00ec8fd..b2548b7 100644
--- a/doc/sane-leo.man
+++ b/doc/sane-leo.man
@@ -46,15 +46,18 @@ scanimage \-\-help \-d leo
.TP
.B \-\-mode
-selects the basic mode of operation of the scanner valid choices are
-.I Black & White
-,
+selects the basic mode of operation of the scanner. Valid choices are
+.IR "Black & White" ,
.I Grayscale
and
+.IR Color .
+The
+.I Black & White
+mode is black and white only (1 bit).
+.I Grayscale
+mode will produce 256 levels of gray (8 bits).
.I Color
-The Black & White mode is black and white only (1 bit). Grayscale
-will produce 256 levels of gray (8 bits). Color will produce a 24 bits
-color image.
+mode will produce a 24 bit color image.
.TP
.B \-\-resolution
@@ -98,15 +101,12 @@ for the blue channel. The table must be 256 bytes long.
.TP
.B \-\-halftone
(Black & White only) select the halftone mask to use. Possible values are
-.I Diamond
-,
-.I 8x8 Coarse Fatting
-,
-.I 8x8 Fine Fatting
-,
+.IR Diamond ,
+.IR "8x8 Coarse Fatting" ,
+.IR "8x8 Fine Fatting" ,
.I 8x8 Bayer
and
-.I 8x8 Vertical Line
+.IR "8x8 Vertical Line" .
.TP
.B \-\-preview
@@ -147,7 +147,7 @@ backend. However they are only software adjustments. This backend only
implements what the scanner can support.
-SH BUGS
+.SH BUGS
None known.
diff --git a/doc/sane-lexmark.man b/doc/sane-lexmark.man
index 3ab9f8f..0f1fd6e 100644
--- a/doc/sane-lexmark.man
+++ b/doc/sane-lexmark.man
@@ -55,14 +55,21 @@ scanimage \-\-help \-d lexmark:usb:<usb port>
.TP
.B \-\-mode
-selects the basic mode of operation of the scanner valid choices are
+selects the basic mode of operation of the scanner. Valid choices are
.IR Color ,
.I Gray
and
+.IR Lineart .
+The default mode is
+.IR Color .
+The
.I Lineart
-The default mode is Color. The Lineart mode is black and white only (1 bit).
-Grayscale will produce 256 levels of gray (8 bits). Color mode allows for over
-16 million different colors produced from 24 bits of color information.
+mode is black and white only (1 bit).
+.I Gray
+mode will produce 256 levels of gray (8 bits).
+.I Color
+mode allows for over 16 million different colors produced from 24
+bits of color information.
.TP
.B \-\-resolution
diff --git a/doc/sane-ma1509.man b/doc/sane-ma1509.man
index e6b3a7e..06f3840 100644
--- a/doc/sane-ma1509.man
+++ b/doc/sane-ma1509.man
@@ -13,16 +13,17 @@ also work.
This backend is ALPHA software. Be careful and remove the power plug
immediately if your hear unusual noises.
.PP
-More details can be found on the ma1509 backend homepage
+More details can be found on the
+.B sane\-ma1509
+backend homepage
.IR http://www.meier\-geinitz.de/sane/ma1509\-backend/ .
.PP
-Other Mustek USB scanners are supported by the gt68xx, mustek_usb and the
-plustek backends. See
+Other Mustek USB scanners are supported by the
.BR sane\-mustek_usb (5),
.BR sane\-gt68xx (5)
and
.BR sane\-plustek (5)
-for details.
+backends.
.PP
This backend can only work with scanners that are already detected by the
operating system. See
@@ -92,7 +93,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-magicolor.man b/doc/sane-magicolor.man
index 8b2446a..19716e0 100644
--- a/doc/sane-magicolor.man
+++ b/doc/sane-magicolor.man
@@ -47,9 +47,15 @@ The shared library implementing this backend (present on systems that support dy
.SH "ENVIRONMENT"
.TP
.B SANE_CONFIG_DIR
-This environment variable specifies the list of directories that may contain the configuration file. Under UNIX, the directories are separated by a colon (`:'), under OS/2, they are separated by a semi\-colon (`;'). If this variable is not set, the configuration file is searched in two default directories: first, the current working directory (".") and then in
+This environment variable specifies the list of directories that may contain the
+configuration file. On *NIX systems, the directories are separated by a
+colon (`:'), under OS/2, they are separated by a semi\-colon (`;').
+If this variable is not set, the configuration file is searched in two
+default directories: first, the current working directory (".") and then in
.IR @CONFIGDIR@ .
-If the value of the environment variable ends with the directory separator character, then the default directories are searched after the explicitly specified directories. For example, setting
+If the value of the environment variable ends with the directory separator character,
+then the default directories are searched after the explicitly specified directories.
+For example, setting
.B SANE_CONFIG_DIR
to "/tmp/config:" would result in directories
.IR "/tmp/config" ,
@@ -69,7 +75,7 @@ To obtain debug messages from the backend, set this environment variable before
Example: SANE_DEBUG_MAGICOLOR=65 xscanimage
.SH "KNOWN BUGS AND RESTRICTIONS"
.PP
-Large color scans may sometimes timeout due to unknown reasons (the scanner simply stops returning data)
+Large color scans may sometimes timeout due to unknown reasons (the scanner simply stops returning data).
.PP
Cancelling large scans may lock up the scanner.
diff --git a/doc/sane-microtek.man b/doc/sane-microtek.man
index cb42aa3..674f0bd 100644
--- a/doc/sane-microtek.man
+++ b/doc/sane-microtek.man
@@ -131,7 +131,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-mustek.man b/doc/sane-mustek.man
index 925e6d8..45ea2d3 100644
--- a/doc/sane-mustek.man
+++ b/doc/sane-mustek.man
@@ -349,7 +349,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-mustek_pp.man b/doc/sane-mustek_pp.man
index 8443306..0ab8e41 100644
--- a/doc/sane-mustek_pp.man
+++ b/doc/sane-mustek_pp.man
@@ -411,7 +411,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-mustek_usb.man b/doc/sane-mustek_usb.man
index cea9e36..105228f 100644
--- a/doc/sane-mustek_usb.man
+++ b/doc/sane-mustek_usb.man
@@ -136,7 +136,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-mustek_usb2.man b/doc/sane-mustek_usb2.man
index 2ad7b24..cc96919 100644
--- a/doc/sane-mustek_usb2.man
+++ b/doc/sane-mustek_usb2.man
@@ -9,7 +9,9 @@ library implements a SANE (Scanner Access Now Easy) backend that provides
access to USB flatbed scanners based on the Service & Quality SQ113 chipset. At
the moment, only the Mustek BearPaw 2448 TA Pro is supported. It's planned to add
support for other scanners that are based on the SQ113 and maybe SQ11 chip. For
-more details, see the mustek_usb2 backend homepage:
+more details, see the
+.B sane\-mustek_usb2
+backend homepage:
.IR http://www.meier\-geinitz.de/sane/mustek_usb2\-backend/ .
.PP
This is BETA software. Especially if you test new or untested scanners, keep
@@ -28,7 +30,7 @@ Please use libusb-0.1.8 or later. Without libusb or with older libusb versions
all kinds of trouble can be expected. The scanner should be found by
.BR sane\-find\-scanner (1)
without further actions. For setting permissions and general
-USB information looks at
+USB information, look at
.BR sane\-usb (5).
.PP
diff --git a/doc/sane-nec.man b/doc/sane-nec.man
index 1990c1b..effbeea 100644
--- a/doc/sane-nec.man
+++ b/doc/sane-nec.man
@@ -10,7 +10,7 @@ provides access to NEC SCSI scanners. This backend should be
considered
.B alpha-quality
software! In the current state it is known to work with PC-IN500/4C
-scanners. Another MultiReader scanner series is not supported. PC-IN
+scanners. Other MultiReader scanner series are not supported. PC-IN
500/4C and MultiReader scanner are only sold in Japan (except Multi
Reader PetiScan).
diff --git a/doc/sane-net.man b/doc/sane-net.man
index 0f62684..ee7e82e 100644
--- a/doc/sane-net.man
+++ b/doc/sane-net.man
@@ -119,7 +119,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-p5.man b/doc/sane-p5.man
index dd1db03..80438e8 100644
--- a/doc/sane-p5.man
+++ b/doc/sane-p5.man
@@ -76,7 +76,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-pint.man b/doc/sane-pint.man
index b6dd181..4fa7d2e 100644
--- a/doc/sane-pint.man
+++ b/doc/sane-pint.man
@@ -73,7 +73,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-pixma.man b/doc/sane-pixma.man
index bebe485..860c9a9 100644
--- a/doc/sane-pixma.man
+++ b/doc/sane-pixma.man
@@ -17,7 +17,7 @@ Currently, the following models work with this backend:
.RS
PIXMA E410, E510
.br
-PIXMA G2000, G2010, G2100, G4000
+PIXMA G2000, G2010, G2100, G4000, G4511
.br
PIXMA MG2100, MG2200, MG2400, MG2500, MG2900, MG3000, MG3100
.br
@@ -184,7 +184,7 @@ an up-to-date status at the project homepage. (See below).
Users feedback is essential to help improve features and performances.
.SH OPTIONS
Besides "well-known" options (e.g. resolution, mode etc.)
-.Bsane\-pixma
+.B sane\-pixma
backend also
provides the following options, i.e. the options might change in the future.
.br
@@ -445,7 +445,7 @@ You should also set SANE_DEBUG_PIXMA to 11.
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-plustek.man b/doc/sane-plustek.man
index c043072..50e2c6a 100644
--- a/doc/sane-plustek.man
+++ b/doc/sane-plustek.man
@@ -444,7 +444,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
@@ -477,7 +477,7 @@ export SANE_DEBUG_PLUSTEK=10
.BR sane\-gt68xx (5),
.BR sane-\mustek_pp (5),
.BR sane\-find\-scanner (1),
-.BR scanimage (1),
+.BR scanimage (1)
.br
.I @DOCDIR@/plustek/Plustek-USB.changes
diff --git a/doc/sane-plustek_pp.man b/doc/sane-plustek_pp.man
index e225c95..2ef9b96 100644
--- a/doc/sane-plustek_pp.man
+++ b/doc/sane-plustek_pp.man
@@ -435,7 +435,7 @@ The Linux kernelmodule for kernels >= 2.6.x.
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-qcam.man b/doc/sane-qcam.man
index 30d2e83..d809e09 100644
--- a/doc/sane-qcam.man
+++ b/doc/sane-qcam.man
@@ -60,7 +60,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-ricoh.man b/doc/sane-ricoh.man
index 4006b49..d0c6185 100644
--- a/doc/sane-ricoh.man
+++ b/doc/sane-ricoh.man
@@ -54,7 +54,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-rts8891.man b/doc/sane-rts8891.man
index 75c5ac1..95d028b 100644
--- a/doc/sane-rts8891.man
+++ b/doc/sane-rts8891.man
@@ -45,14 +45,21 @@ scanimage \-\-help \-d rts8891
.TP
.B \-\-mode
-selects the basic mode of operation of the scanner valid choices are
-.IR "R Color" ,
+selects the basic mode of operation of the scanner. Valid choices are
+.IR "Color" ,
.I Gray
and
+.IR Lineart .
+The default mode is
+.IR Color .
+The
.I Lineart
-The default mode is Color. The Lineart mode is black and white only (1 bit).
-Grayscale will produce 256 levels of gray (8 bits). Color mode allows for over
-16 million different colors produced from 24 bits of color information.
+mode is for black and white only (1 bit).
+.I Gray
+will produce 256 levels of gray (8 bits).
+.I Color
+mode allows for over 16 million different colors produced from
+24 bits of color information.
.TP
.B \-\-resolution
diff --git a/doc/sane-s9036.man b/doc/sane-s9036.man
index 5065a3d..f1e4020 100644
--- a/doc/sane-s9036.man
+++ b/doc/sane-s9036.man
@@ -47,7 +47,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-scsi.man b/doc/sane-scsi.man
index 9239250..0cd63ca 100644
--- a/doc/sane-scsi.man
+++ b/doc/sane-scsi.man
@@ -122,7 +122,7 @@ $ chmod 660 /dev/sg0
.RE
.PP
When your system uses the device filesystem (devfs), you have to edit
-.BIR /etc/devfs/perms.
+.IR /etc/devfs/perms.
There you should search the line
.PP
.RS
@@ -172,7 +172,7 @@ If there are no
devices, just do a
.I sh MAKEDEV uk0
in the
-.i /dev
+.I /dev
directory. The scanner should then be accessible as
.I /dev/uk0
if it was probed during boot.
diff --git a/doc/sane-sharp.man b/doc/sane-sharp.man
index 3200990..34ad8cb 100644
--- a/doc/sane-sharp.man
+++ b/doc/sane-sharp.man
@@ -50,15 +50,17 @@ This backend expects device names of the form:
.I special
.RE
.PP
-Where
+where
.I special
-is either the path-name for the special device that corresponds to a
+is the path-name for the special device that corresponds to a
SCSI scanner. The special device name must be a generic SCSI device or a
symlink to such a device. Under Linux, such a device name could be
.I /dev/sga
or
.IR /dev/sge ,
-for example. See sane\-scsi(5) for details.
+for example. See
+.BR sane\-scsi (5)
+for details.
.SH SCAN OPTIONS
.TP
diff --git a/doc/sane-sm3600.man b/doc/sane-sm3600.man
index 849acd0..bd4bc55 100644
--- a/doc/sane-sm3600.man
+++ b/doc/sane-sm3600.man
@@ -39,11 +39,11 @@ This backend dynamically enables the options for the frontend,
that are supported by the scanner dependent on the scanning-mode
and other options. Unsupported options are disabled.
.PP
-The following options are supported by the Microtek2-driver:
-.PP
+The following options are supported by the
+.B sane\-sm3600
+backend:
Color, grayscale, halftone and lineart scans.
-.PP
-contrast, brightness, control, gamma correction.
+Also contrast, brightness, and gamma correction.
.SH "DEVICE NAMES"
This backend does not support device names in a standardized form.
diff --git a/doc/sane-snapscan.man b/doc/sane-snapscan.man
index aff29a9..0fb493e 100644
--- a/doc/sane-snapscan.man
+++ b/doc/sane-snapscan.man
@@ -77,7 +77,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-sp15c.man b/doc/sane-sp15c.man
index f0dc72a..9056947 100644
--- a/doc/sane-sp15c.man
+++ b/doc/sane-sp15c.man
@@ -41,8 +41,8 @@ to set scanning region,
resolution, bit-depth (and color), and enable the automatic document feeder.
.SH "SEE ALSO"
-.BR sane (7) ,
-.BR sane\-scsi (5) ,
+.BR sane (7),
+.BR sane\-scsi (5),
.BR sane\-fujitsu (5),
.BR xscanimage (1)
.br
diff --git a/doc/sane-st400.man b/doc/sane-st400.man
index b93dc49..dab23f6 100644
--- a/doc/sane-st400.man
+++ b/doc/sane-st400.man
@@ -36,7 +36,7 @@ This backend expects device names of the form:
.PP
Where
.I special
-is either the path-name for the special device that corresponds to a
+is the path-name for the special device that corresponds to a
SCSI scanner. For SCSI scanners, the special device name must be a
generic SCSI device or a symlink to such a device. Under Linux, such
a device name could be
@@ -98,7 +98,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-stv680.man b/doc/sane-stv680.man
index d4a8d3a..58488e0 100644
--- a/doc/sane-stv680.man
+++ b/doc/sane-stv680.man
@@ -160,7 +160,7 @@ Plenty. Parts of this backend are still under development.
.SH "SEE ALSO"
-.BR sane(7),
+.BR sane (7),
.BR sane\-usb (5),
.BR scanimage (1),
.BR xcam (1)
diff --git a/doc/sane-tamarack.man b/doc/sane-tamarack.man
index 16b1128..82ec419 100644
--- a/doc/sane-tamarack.man
+++ b/doc/sane-tamarack.man
@@ -56,7 +56,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-teco1.man b/doc/sane-teco1.man
index e9d9663..936ce00 100644
--- a/doc/sane-teco1.man
+++ b/doc/sane-teco1.man
@@ -77,14 +77,19 @@ scanimage \-\-help \-d teco1
.TP
.B \-\-mode Black & White|Grayscale|Color
-Selects the basic mode of operation of the scanner valid choices are
+Selects the basic mode of operation of the scanner. Valid choices are
+.IR "Black & White" ,
+.I "Grayscale"
+and
+.IR Color .
+
The
.I Black & White
-mode is black and white only (1 bit).
+mode is for black and white only (1 bit).
.I Grayscale
will produce 256 levels of gray (8 bits).
.I Color
-will produce a 24 bits color image.
+will produce a 24 bit color image.
.TP
.B \-\-resolution 1..600
diff --git a/doc/sane-teco2.man b/doc/sane-teco2.man
index 6b04290..6fd9780 100644
--- a/doc/sane-teco2.man
+++ b/doc/sane-teco2.man
@@ -96,7 +96,9 @@ a restricted set of resolutions are available.
.B Note:
All values with ydpi > 300 (300 x 600) or 600 (600 x 1200) result in
a wrong proportion for the scan. The proportion can be adjusted with
-the following imagemagick command:
+the following
+.BR convert (1)
+command from imagemagick:
.br
.I convert \-geometry (dpi/max_xdpi * 100%)x100%
.br
@@ -164,7 +166,7 @@ value loaded into the scanner. Scale 0..64 in steps of 1.
.TP
.B \-\-white\-level\-g 0..64
Selects what green radiance level should be
-considered "white", when scanning some sheets by changing the calibration i
+considered "white", when scanning some sheets by changing the calibration
value loaded into the scanner. Scale 0..64 in steps of 1.
.TP
@@ -252,4 +254,4 @@ Dave Parker for testing the support for the VM6575.
.TP
Michael Hoeller for testing the support for the VM356A.
.TP
-Christoph.Hoeffner for testing the support for the VM3564 (Relisys AVEC II S3 firmware 1.09).
+Christoph Hoeffner for testing the support for the VM3564 (Relisys AVEC II S3 firmware 1.09).
diff --git a/doc/sane-test.man b/doc/sane-test.man
index 3368bdf..194fd8b 100644
--- a/doc/sane-test.man
+++ b/doc/sane-test.man
@@ -51,7 +51,7 @@ correctly. This option also enables a fixed width of 11 cm.
Setting option
.B three\-pass
simulates a three-pass scanner. Older color scanners needed to scan the image
-once per color (reg/green/blue) to get the full image. Therefore, in this mode
+once per color (red/green/blue) to get the full image. Therefore, in this mode
three single frames are transmitted in color mode.
.PP
Option
@@ -303,7 +303,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-u12.man b/doc/sane-u12.man
index a09ae91..81ab725 100644
--- a/doc/sane-u12.man
+++ b/doc/sane-u12.man
@@ -126,7 +126,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-umax.man b/doc/sane-umax.man
index 21caa3c..747277e 100644
--- a/doc/sane-umax.man
+++ b/doc/sane-umax.man
@@ -6,9 +6,9 @@ sane\-umax \- SANE backend for UMAX scanners
.SH ABOUT THIS FILE
-This file only is a short description of the
+This file is only a brief description of the
.B sane\-umax
-backend for sane! For detailed information take a look at
+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
.BR xsane (1)
online help)!
@@ -17,7 +17,7 @@ online help)!
The
.B sane\-umax
-library implements a SANE backend that provides access to several UMAX-SCSI-scanners and some Linotye Hell SCSI-scanners,
+library implements a SANE backend that provides access to several UMAX-SCSI-scanners and some Linotype 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!
@@ -69,9 +69,11 @@ values: 0 = disabled, 1 = enabled
.br
default = 0
.br
-If set to 1 umax_do_request_sense is called in
-umax_do_calibration. This can hang the system
-(but has been enabled until this version)
+If set to 1,
+.BR umax_do_request_sense ()
+is called in
+.BR umax_do_calibration ().
+This can hang the system, but has been enabled until this version.
.TP
scsi\-buffer\-size\-min, scsi\-buffer\-size\-max:
values: 4096-1048576
@@ -113,10 +115,11 @@ values:
.br
default = \-1
.br
-dangerous options, needed for some scanners
-do not changed these options until you really know
-what you do, you may destroy your scanner when you
-define wrong values for this options
+Dangerous options, needed for some scanners.
+.br
+Do not change these options unless you really know
+what you are doing otherwise you may destroy your scanner
+with invalid values.
.TP
calibration\-full\-ccd:
values:
@@ -132,8 +135,7 @@ selected image
calibration\-width\-offset:
values: \-99999 = auto, > \-99999 set value
.br
-add an offset width to the calculated with for
-image/ccd
+add an offset to the calculated width for image/ccd
.TP
calibration\-bytes\-pixel:
values:
@@ -191,7 +193,7 @@ values:
default = 2
.br
most SCSI drivers allow internal command queueing with a depth
-of 2 commands. In most cases it does not mprove anything when you
+of 2 commands. In most cases it does not improve anything when you
increase this value. When your SCSI driver does not support any
command queueing you can try to set this value to 1.
@@ -203,9 +205,9 @@ permissions of that device, have a look at
.SH SCSI ADAPTER TIPS
-The ISA-SCSI-adapters that are shipped with some Umax-scanners are not supported very
+The ISA-SCSI-adapters that are shipped with some UMAX-scanners are not supported very
well by Linux (I suggest not to use it), the PCI-SCSI-adapters that come with some
-Umax-scanners are not supported at all (as far as I know). On other platforms these
+UMAX-scanners are not supported at all (as far as I know). On other platforms these
SCSI-adapters are not supported. So you typically need to purchase another SCSI-adapter
that is supported by your platform. See the relevant hardware FAQs and HOWTOs for your
platform for more information.
@@ -215,7 +217,7 @@ necessary to connect the scanner to its own SCSI-adapter. But if you need short
response time for your SCSI-harddisk (e.g. if your computer is a file-server) or
other SCSI devices, I suggest you use an own SCSI-adapter for your UMAX-scanner.
-If you have any problems with your Umax scanner, check your SCSI chain
+If you have any problems with your UMAX scanner, check your SCSI chain
(cable length, termination, ...).
See also:
@@ -240,9 +242,9 @@ The shared library implementing this backend:
.B SANE_DEBUG_UMAX
If the library was compiled with debug support enabled, this environment
variable controls the debug level for this backend. E.g., a value of 128
-requests all debug output to be printed. Smaller levels reduce verbosity:
+requests all debug output to be printed. Smaller levels reduce verbosity.
.B SANE_DEBUG_UMAX
-values.
+values:
.ft CR
.nf
diff --git a/doc/sane-umax_pp.man b/doc/sane-umax_pp.man
index 1d15061..7bfa750 100644
--- a/doc/sane-umax_pp.man
+++ b/doc/sane-umax_pp.man
@@ -217,7 +217,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-v4l.man b/doc/sane-v4l.man
index 41a600e..1ecaa65 100644
--- a/doc/sane-v4l.man
+++ b/doc/sane-v4l.man
@@ -59,7 +59,7 @@ support dynamic loading).
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
diff --git a/doc/sane-xerox_mfp.man b/doc/sane-xerox_mfp.man
index c41a770..da189b8 100644
--- a/doc/sane-xerox_mfp.man
+++ b/doc/sane-xerox_mfp.man
@@ -8,7 +8,7 @@ The
library implements a SANE (Scanner Access Now Easy) backend that provides
access to several Samsung-based Samsung, Xerox, and Dell scanners.
Please see full list of supported devices at
-http://www.sane\-project.org/sane\-supported\-devices.html
+.IR http://www.sane\-project.org/sane\-supported\-devices.html .
.SH CONFIGURATION
.TP
@@ -50,7 +50,7 @@ Example:
export SANE_DEBUG_XEROX_MFP=4
.SH LIMITATIONS
-Multicast autoconfiguration for LAN scanners is not implemented yet. IPv6 addressing never been tested.
+Multicast autoconfiguration for LAN scanners is not implemented yet. IPv6 addressing has never been tested.
.SH BUGS AND SUPPORT
If you have found a bug or need support please follow open\-source way of acquiring support via
diff --git a/doc/sane.man b/doc/sane.man
index 80f7c1a..a37e8d2 100644
--- a/doc/sane.man
+++ b/doc/sane.man
@@ -49,7 +49,7 @@ The frontends
and
.BR scanadf (1)
are included in the package
-.BR sane\-frontends.
+.BR sane\-frontends .
Both packages can be downloaded from the
.B SANE
homepage
@@ -90,7 +90,8 @@ supported or unsupported), please contact us. See section HOW CAN YOU HELP
SANE for details. There are lists for specific releases of SANE, for the
current development version and a search engine:
.IR http://www.sane\-project.org/sane\-supported\-devices.html .
-The lists are also installed on your system at \fI@DOCDIR@/\fR.
+The lists are also installed on your system at
+.IR @DOCDIR@/ .
.TP
.B SANE mailing list
There is a mailing list for the purpose of discussing the SANE standard and its
@@ -102,7 +103,7 @@ unsubscribe:
.TP
.B SANE IRC channel
The IRC (Internet Relay Chat) channel #sane can be found on the Freenode
-network (irc.freenode.net). It's for discussing
+network (irc.libera.chat). It's for discussing
.B SANE
problems, talking about development and general
.B SANE
@@ -222,7 +223,7 @@ Supports the Canon DR-Series ADF SCSI and USB scanners. See
for details.
.TP
.B canon_lide70
-Supports the CanoScan LiDE 70 USB scanner. See
+Supports the CanoScan LiDE 70 and 600 USB scanners. See
.BR sane\-canon_lide70 (5)
for details.
.TP
@@ -251,8 +252,18 @@ Supports Epson-based Fujitsu USB scanners. See
for details.
.TP
.B epson
-Supports Epson SCSI, parallel port and USB flatbed scanners. See
+Old driver for Epson SCSI, parallel port and USB flatbed scanners. See
.BR sane\-epson (5)
+for details but try
+.BR epson2
+first.
+.TP
+.B epson2
+Newer driver for Epson SCSI, parallel port, network and USB flatbed
+scanners (try this before
+.BR epson
+which is outdated). See
+.BR sane\-epson2 (5)
for details.
.TP
.B escl
@@ -267,16 +278,20 @@ for details.
.TP
.B genesys
Supports several scanners based on the Genesys Logic
-GL646, GL841, GL843, GL847 and GL124 chips like the Medion 6471 and Hewlett-Packard 2300c.
- See
+GL646, GL841, GL843, GL847 and GL124 chips like the
+Medion 6471 and Hewlett-Packard 2300c.
+See
.BR sane\-genesys (5)
for details.
.TP
.B gt68xx
Supports scanners based on the Grandtech
-GT-6801 and GT-6816 chips like the Artec Ultima 2000 and several Mustek
-BearPaw CU and TA models. Some Genius, Lexmark, Medion, Packard Bell, Plustek,
-and Trust scanners are also supported. See
+GT-6801 and GT-6816 chips like the Artec Ultima 2000
+and several Mustek BearPaw CU and TA models.
+.br
+Some Genius,
+Lexmark, Medion, Packard Bell, Plustek, and Trust scanners
+are also supported. See
.BR sane\-gt68xx (5)
for details.
.TP
@@ -313,7 +328,7 @@ for details.
.TP
.B hpljm1005
Supports the Hewlett-Packard LaserJet M1005 scanner. See
-.BR sane\-hpljm1005(5)
+.BR sane\-hpljm1005 (5)
for details.
.TP
.B hs2p
@@ -601,9 +616,9 @@ The
network daemon
.BR saned (8)
provides access to scanners located on different
-computers in connection with the net backend. See
+computers in connection with the
.BR sane\-net (5)
-and
+backend. See
.BR saned (8).
.TP
.B pnm
@@ -761,9 +776,16 @@ information when testing a Mustek SCSI scanner, set environment variables
.BR SANE_DEBUG_DLL ", " SANE_DEBUG_MUSTEK ", and " SANE_DEBUG_SANEI_SCSI
to 128 and then invoke
.IR scanimage\ \-L .
-The debug messages for the dll backend tell if the mustek backend was found
-and loaded at all. The mustek messages explain what the mustek backend is
-doing while the SCSI debugging shows the low level handling. If you can't find
+The
+.B SANE_DEBUG_DLL
+messages tell if the
+.BR sane\-mustek (5)
+backend was found and loaded at all. The
+.B SANE_DEBUG_MUSTEK
+messages explain what the backend is
+doing while the
+.B SANE_DEBUG_SCSI
+debugging shows the low level handling. If you can't find
out what's going on by checking the messages carefully, contact the sane\-devel
mailing list for help (see REPORTING BUGS below).
.PP
@@ -792,11 +814,11 @@ You should get a list of PASSed tests. You can do the same with your backend
by changing "test" to your backend's name.
.PP
So now scanning with
-.B scanimage(1)
+.B scanimage (1)
works and you want to use one of the graphical frontends like
-.BR xsane(1) ,
-.BR xscanimage(1) ", or"
-.B quiteinsane(1)
+.BR xsane (1) ,
+.BR xscanimage (1) ", or"
+.B quiteinsane (1)
but those frontends don't detect your scanner? One reason may be that you
installed two versions of
.BR SANE .
@@ -866,6 +888,7 @@ for details).
.BR sane\-dll (5),
.BR sane\-dmc (5),
.BR sane\-epson (5),
+.BR sane\-epson2 (5),
.BR sane\-escl (5),
.BR sane\-fujitsu (5),
.BR sane\-genesys (5),
diff --git a/doc/saned.man b/doc/saned.man
index 89484d5..d91f817 100644
--- a/doc/saned.man
+++ b/doc/saned.man
@@ -24,81 +24,99 @@ saned \- SANE network daemon
.B ]
.B [ \-e ]
.B [ \-h ]
+
.SH DESCRIPTION
.B saned
is the SANE (Scanner Access Now Easy) daemon that allows remote clients
to access image acquisition devices available on the local host.
+
.SH OPTIONS
.PP
-The
-.B \-l
-flag requests that
-.B saned
-run in standalone daemon mode. In this mode,
.B saned
-will listen for incoming client connections;
-.BR inetd (8)
-is not required for
+recognises the following options:
+
+.TP
+.BR \-a "\fI [username]\fR, " \-\-alone [=\fIusername]\fR
+is equivalent to the combination of
+.B \-l \-D \-u
+.I username
+options. However,
+.I username
+is optional and running user will only be set when specified.
+
+.TP
+.BR \-u "\fI username\fR, " \-\-user =\fIusername\fR
+requests that
.B saned
-operations in this mode. The
-.B \-b
-flag tells
+drop root privileges and run as the user (and group) associated with
+.I username
+after binding.
+
+.TP
+.BR \-b "\fI address\fR, " \-\-bind =\fIaddress\fR
+tells
.B saned
to bind to the
.I address
-given. The
-.B \-p
-flags tells
+given.
+
+.TP
+.BR \-p "\fI port\fR, " \-\-port=\fIport\fR
+tells
.B saned
-to listen on the port given. A value of 0 tells
+to listen on the
+.I port
+given. A value of 0 tells
.B saned
to pick an unused port. The default is the
.B sane-port (6566).
-The
-.B \-u
-flag requests that
+
+.TP
+.BR \-l ", " \-\-listen
+requests that
.B saned
-drop root privileges and run as the user (and group) associated with
-.I username
-after binding.
-The
-.B \-D
-flag will request
+run in standalone daemon mode. In this mode,
+.B saned
+will listen for incoming client connections;
+.BR inetd (8)
+is not required for
+.B saned
+operations in this mode.
+
+.TP
+.BR \-D ", " \-\-daemonize
+will request
.B saned
to detach from the console and run in the background.
-The flag
-.B \-a
-is equivalent to the combination of
-.B \-l \-B \-u
-.I username
-options.
-.PP
-The
-.B \-d
-flag sets the level of
+
+.TP
+.BR \-o ", " \-\-once
+requests that
+.B saned
+exits after the first client disconnects. This is useful for debugging.
+
+.TP
+.BR \-d "\fI n\fR, " \-\-debug =\fIn\fR
+sets the level of
.B saned
-debug output. When compiled with debugging enabled, this flag may be
+debug output to
+.IR n .
+When compiled with debugging enabled, this flag may be
followed by a number to request more or less debug info. The larger
the number, the more verbose the debug output. E.g.,
.B \-d128
will request output of all debug info. A level of 0 produces no
output at all. The default value is 2.
-.PP
-The
-.B \-e
-flag will divert
+
+.TP
+.BR \-e ", " \-\-stderr
+will divert
.B saned
debug output to stderr instead of the syslog default.
-.PP
-The
-.B \-o
-flag requests that
-.B saned
-exits after the first client disconnects. This is useful for debugging.
-.PP
-The
-.B \-h
-flag displays a short help message.
+
+.TP
+.BR \-h ", " \-\-help
+displays a short help message.
.PP
If
.B saned
@@ -108,6 +126,7 @@ is run from other programs such as
and
.BR systemd (1),
check that program's documentation on how to pass command-line options.
+
.SH CONFIGURATION
First and foremost:
.B saned
@@ -290,14 +309,15 @@ service sane\-port
.SH SYSTEMD CONFIGURATION
.B saned
can be compiled with explicit
-.BR systemd (1) support. This
+.BR systemd (1)
+support. This
will allow logging debugging information to be forwarded
to the
.BR systemd (1)
journal. The
.BR systemd (1)
support requires compilation with the systemd-devel package
-installed on the system. this is the preferred option.
+installed on the system. This is the preferred option.
.B saned
can be used with
@@ -314,7 +334,7 @@ configuration is different for the 2 options, so both are described below.
For
.BR systemd (1)
configuration we need to add 2 configuration files in
-.I /etc/systemd/system.
+.IR /etc/systemd/system .
.PP
The first file we need to add here is called
.I saned.socket.
@@ -372,7 +392,7 @@ You need to set an environment variable for
pointing to the directory where
.B saned
can find its configuration files.
-you will have to remove the # on the last line and set the variables
+You will have to remove the # on the last line and set the variables
for the desired debugging information if required. Multiple variables
can be set by separating the assignments by spaces as shown in the
example above.
@@ -393,15 +413,15 @@ forwarded to the system log.
This configuration will also work when
.B saned
is compiled WITH
-.BR systemd (1) integration support, but it does not allow debugging
-information to be logged.
+.BR systemd (1)
+integration support, but it does not allow debugging information to be logged.
.PP
For
.BR systemd (1)
configuration for
.BR saned ,
we need to add 2 configuration files in
-.I /etc/systemd/system.
+.IR /etc/systemd/system .
.PP
The first file we need to add here is called
.I saned.socket.
@@ -428,7 +448,7 @@ WantedBy=sockets.target
.RE
.PP
The second file to be added is
-.I saned@.service
+.IR saned@.service .
This one differs from the version with
.BR systemd (1)
integration compiled in:
@@ -480,7 +500,7 @@ if supported by the client.
.TP
.B SANE_CONFIG_DIR
This environment variable specifies the list of directories that may
-contain the configuration file. Under UNIX, the directories are
+contain the configuration file. On *NIX systems, the directories are
separated by a colon (`:'), under OS/2, they are separated by a
semi-colon (`;'). If this variable is not set, the configuration file
is searched in two default directories: first, the current working
@@ -508,7 +528,7 @@ being searched (in this order).
.BR sane\-"backendname" (5),
.BR inetd (8),
.BR xinetd (8),
-.BR systemd (1),
+.BR systemd (1)
.br
.I http://www.penguin-breeder.org/?page=sane\-net
.SH AUTHOR
diff --git a/doc/scanimage.man b/doc/scanimage.man
index 7d48389..a86fe2a 100644
--- a/doc/scanimage.man
+++ b/doc/scanimage.man
@@ -14,7 +14,7 @@ scanimage \- scan an image
.RB [ \-f | \-\-formatted\-device\-list
.IR format ]
.RB [ \-b | \-\-batch
-.RI [= format ]]
+.RI [ format ]]
.RB [ \-\-batch\-start
.IR start ]
.RB [ \-\-batch\-count
@@ -24,7 +24,8 @@ scanimage \- scan an image
.RB [ \-\-batch\-double ]
.RB [ \-\-accept\-md5\-only ]
.RB [ \-p | \-\-progress ]
-.RB [ \-o | \-\-output-file ]
+.RB [ \-o | \-\-output-file
+.IR path ]
.RB [ \-n | \-\-dont\-scan ]
.RB [ \-T | \-\-test ]
.RB [ \-A | \-\-all-options ]
@@ -75,17 +76,33 @@ To print all available options:
scanimage \-h
.SH OPTIONS
+There are two sets of options available when running
+.BR scanimage .
+.PP
+The options that are provided by
+.B scanimage
+itself are listed below. In addition, each backend offers its own set of options and these
+can also be specified. Note that the options available from the backend may vary depending on the
+scanning device that is selected.
+.PP
+Often options that are similar in function may be implemented
+differently across backends. An example of this difference is
+.I \-\-mode Gray
+and
+.IR "\-\-mode Grayscale" .
+This may be due to differing backend author preferences.
+At other times, options are defined by the scanning device itself and therefore out of the
+control of the backend code.
+
+.PP
Parameters are separated by a blank from single-character options (e.g.
-.BR "\-d epson" )
+.BI "\-d " epson )
and by a "=" from multi-character options (e.g.
-.BR \-\-device\-name=epson ).
+.BR \-\-device\-name =\fIepson\FR ).
-.PP
-The
-.B \-d
-or
-.B \-\-device\-name
-options must be followed by a SANE device-name like
+.TP
+.BR \-d "\fI dev\fR, " \-\-device\-name =\fIdev\fR
+specifies the device to access and must be followed by a SANE device-name like
.RI ` epson:/dev/sg0 '
or
.RI ` hp:/dev/usbscanner0 '.
@@ -98,11 +115,10 @@ reads a device-name from the environment variable
If this variable is not set,
.B scanimage
will attempt to open the first available device.
-.PP
-The
-.B \-\-format
-.I format
-option selects how image data is written to standard output or the file specified by
+
+.TP
+.BR \-\-format =\fIformat\fR
+selects how image data is written to standard output or the file specified by
the
.B \-\-output\-file
option.
@@ -116,19 +132,15 @@ or
If
.B \-\-format
is not specified, PNM is written by default.
-.PP
-The
-.B \-i
-or
-.B \-\-icc\-profile
-option is used to include an ICC profile into a TIFF file.
-.PP
-The
-.B \-L
-or
-.B \-\-list\-devices
-option requests a (partial) list of devices that are available. The
-list is not complete since some devices may be available, but are not
+
+.TP
+.BR \-i "\fI profile\fR, " \-\-icc\-profile =\fIprofile\fR
+is used to include an ICC profile into a TIFF file.
+
+.TP
+.BR \-L ", " \-\-list\-devices
+requests a (partial) list of devices that are available. The
+list may not be complete since some devices may be available, but are not
listed in any of the configuration files (which are typically stored
in directory
.IR @CONFIGDIR@ ).
@@ -136,12 +148,10 @@ This is particularly the case when accessing scanners through the network. If
a device is not listed in a configuration file, the only way to access it is
by its full device name. You may need to consult your system administrator to
find out the names of such devices.
-.PP
-The
-.B \-f
-or
-.B \-\-formatted\-device\-list
-option works similar to
+
+.TP
+.BR \-f "\fI format\fR, " \-\-formatted\-device\-list =\fIformat\fR
+works similar to
.BR \-\-list\-devices ,
but requires a format string.
.B scanimage
@@ -149,25 +159,30 @@ replaces the placeholders
.B %d %v %m %t %i %n
with the device name, vendor name, model name, scanner type, an index
number and newline respectively. The command
-.PP
+.LP
.RS
.B scanimage \-f
.I \*(lq scanner number %i device %d is a %t, model %m, produced by %v \*(rq
-.PP
-.RE
+.LP
+
will produce something like:
.PP
.RS
scanner number 0 device sharp:/dev/sg1 is a flatbed scanner, model JX250
SCSI, produced by SHARP
.RE
+.RE
+
.PP
The
.B \-\-batch*
-options provide the features for scanning documents using document
+options provide features for scanning documents using document
feeders.
-.BR \-\-batch
-.RI [ format ]
+
+.RS
+
+.TP
+.BR \-b " [\fIformat\fR], " \-\-batch =[\fIformat\fR]
is used to specify the format of the filename that each page will be written
to. Each page is written out to a single file. If
.I format
@@ -190,129 +205,126 @@ This option is incompatible with the
option.
.I format
is given as a printf style string with one integer parameter.
-.B \-\-batch\-start
-.I start
+
+
+.TP
+.BR \-\-batch\-start =\fIstart\fR
selects the page number to start naming files with. If this option is not
given, the counter will start at 1.
-.B \-\-batch\-count
-.I count
+
+.TP
+.BR \-\-batch\-count =\fIcount\fR
specifies the number of pages to attempt to scan. If not given,
-scanimage will continue scanning until the scanner returns a state
+.B scanimage
+will continue scanning until the scanner returns a state
other than OK. Not all scanners with document feeders signal when the
-ADF is empty, use this command to work around them.
-With
-.B \-\-batch\-increment
-.I increment
-you can change the amount that the number in the filename is incremented
+ADF is empty. Use this option to work around them.
+
+.TP
+.BR \-\-batch\-increment =\fIincrement\fR
+sets the amount that the number in the filename is incremented
by. Generally this is used when you are scanning double-sided documents
-on a single-sided document feeder. A specific command is provided to
-aid this:
+on a single-sided document feeder.
+.B \-\-batch\-double
+is a specific command provided to aid this.
+
+.TP
.B \-\-batch\-double
will automatically set the increment to 2.
+Equivalent to
+.BR \-\-batch\-increment =2
+
+.TP
.B \-\-batch\-prompt
will ask for pressing RETURN before scanning a page. This can be used for
scanning multiple pages without an automatic document feeder.
-.PP
-The
+.RE
+
+.TP
.B \-\-accept\-md5\-only
-option only accepts user authorization requests that support MD5 security. The
+only accepts user authorization requests that support MD5 security. The
.B SANE
network daemon
-.RB ( saned )
-is capable of doing such requests. See
-.BR saned (8).
-.PP
-The
-.B \-p
-or
-.B \-\-progress
-option requests that
+.BR saned (8)
+is capable of doing such requests.
+
+.TP
+.BR \-p ", " \-\-progress
+requests that
.B scanimage
prints a progress counter. It shows how much image data of the current image has
-already been received by
-.B scanimage
-(in percent).
-.PP
-The
-.B \-o
-or
-.B \-\-output\-file
-option requests that
+already been received (in percent).
+
+.TP
+.BR \-o "\fI path\fR, " \-\-output\-file =\fIpath\fR
+requests that
.B scanimage
-saves the scanning output to the given path. This option is incompatible with the
-\-\-batch option. The program will try to guess
+saves the scanning output to the given
+.IR path .
+This option is incompatible with the
+.B \-\-batch
+option. The program will try to guess
.B \-\-format
from the file name. If that is not possible, it will print an error message and exit.
-.PP
-The
-.B \-n
-or
-.B \-\-dont\-scan
-option requests that
+
+.TP
+.BR \-n ", " \-\-dont\-scan
+requests that
.B scanimage
only sets the options provided by the user but doesn't actually perform a
scan. This option can be used to e.g. turn off the scanner's lamp (if
supported by the backend).
-.PP
-The
-.B \-T
-or
-.B \-\-test
-option requests that
+
+.TP
+.BR \-T ", " \-\-test
+requests that
.B scanimage
performs a few simple sanity tests to make sure the backend works as
defined by the
.B SANE
-API (in particular the
+API. In particular the
.BR sane_read ()
-function is exercised by this test).
-.PP
-The
-.B \-A
-or
-.B \-\-all-options
-option requests that
+function is exercised by this test.
+
+.TP
+.BR \-A ", " \-\-all\-options
+requests that
.B scanimage
-lists all available options exposed the backend, including button options.
-The information is printed on standard output and no scan will be done.
-.PP
-The
-.B \-h
-or
-.B \-\-help
-options request help information. The information is printed on
-standard output and in this case, no attempt will be made to acquire
-an image.
-.PP
-The
-.B \-v
-or
-.B \-\-verbose
-options increase the verbosity of the operation of
+lists all available options exposed by the backend, including button options.
+The information is printed on standard output and no scan will be performed.
+
+.TP
+.BR \-h ", " \-\-help
+requests help information. The information is printed on
+standard output and no scan will be performed.
+
+.TP
+.BR \-v ", " \-\-verbose
+increases the verbosity of the output of
.B scanimage.
The option may be specified repeatedly, each time increasing the verbosity
level.
-.PP
-The
-.B \-B
-option without argument changes the input buffer size from the default 32KB to 1MB. For finer grained control, use
-.B \-\-buffer-size=
-followed by the number of KB.
-.PP
-The
-.B \-V
-or
-.B \-\-version
-option requests that
+
+.TP
+.BR \-B " [\fIsize\fR], " \-\-buffer\-size =[\fIsize\fR]
+changes input buffer size from the default of 32KB to
+.I size
+KB. If
+.I size
+is not specified then the buffer is set to 1 MB.
+
+.TP
+.BR \-V ", " \-\-version
+requests that
.B scanimage
prints the program and package name, the version number of
the
.B SANE
distribution that it came with and the version of the backend that it
-loads. Usually that's the dll backend. If more information about the version
+loads. If more information about the version
numbers of the backends are necessary, the
.B DEBUG
-variable for the dll backend can be used. Example:
+variable for the dll layer can be used. Example:
.I "SANE_DEBUG_DLL=3 scanimage \-L" .
.PP
As you might imagine, much of the power of
@@ -336,24 +348,26 @@ The documentation for the device-specific options printed by
is best explained with a few examples:
.B \-l 0..218mm [0]
-.br
- Top-left x position of scan area.
-.PP
.RS
+Top-left x position of scan area.
+.PP
The description above shows that option
.B \-l
expects an option value in the range from 0 to 218 mm. The
value in square brackets indicates that the current option value is 0
-mm. Most backends provide similar geometry options for top-left y position (\-t),
-width (\-x) and height of scan-area (\-y).
+mm. Most backends provide similar geometry options for top-left y position
+.RB ( \-t ),
+width
+.RB ( \-x )
+and height of scan-area
+.RB (\-y ).
.RE
.B \-\-brightness \-100..100% [0]
-.br
- Controls the brightness of the acquired image.
-.PP
.RS
+Controls the brightness of the acquired image.
+.PP
The description above shows that option
.B \-\-brightness
expects an option value in the range from \-100 to 100 percent. The
@@ -362,10 +376,9 @@ percent.
.RE
.B \-\-default\-enhancements
-.br
- Set default values for enhancement controls.
-.PP
.RS
+Set default values for enhancement controls.
+.PP
The description above shows that option
.B \-\-default\-enhancements
has no option value. It should be thought of as having an immediate
@@ -378,10 +391,9 @@ would effectively be a no-op.
.RE
.B \-\-mode Lineart|Gray|Color [Gray]
-.br
- Selects the scan mode (e.g., lineart or color).
-.PP
.RS
+Selects the scan mode (e.g., lineart or color).
+.PP
The description above shows that option
.B \-\-mode
accepts an argument that must be one of the strings
@@ -401,10 +413,9 @@ is identical to
.RE
.B \-\-custom\-gamma[=(yes|no)] [inactive]
-.br
- Determines whether a builtin or a custom gamma-table should be used.
-.PP
.RS
+Determines whether a builtin or a custom gamma-table should be used.
+.PP
The description above shows that option
.B \-\-custom\-gamma
expects either no option value, a "yes" string, or a "no" string.
@@ -434,14 +445,11 @@ is selected.
.RE
.B \-\-gamma\-table 0..255,...
-.br
- Gamma-correction table. In color mode this option
-.br
- equally affects the red, green, and blue channels
-.br
- simultaneously (i.e., it is an intensity gamma table).
-.PP
.RS
+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).
+.PP
The description above shows that option
.B \-\-gamma\-table
expects zero or more values in the range 0 to 255. For example, a
@@ -459,12 +467,10 @@ can be used to generate such gamma tables (see
for details).
.RE
-.br
.B \-\-filename <string> [/tmp/input.ppm]
-.br
- The filename of the image to be loaded.
-.PP
.RS
+The filename of the image to be loaded.
+.PP
The description above is an example of an option that takes an
arbitrary string value (which happens to be a filename). Again,
the value in brackets show that the option is current set to the
@@ -501,8 +507,8 @@ to 127 characters.
.BR sane (7),
.BR gamma4scanimage (1),
.BR xscanimage (1),
-.BR xcam(1) ,
-.BR xsane(1) ,
+.BR xcam (1) ,
+.BR xsane (1) ,
.BR scanadf (1),
.BR sane\-dll (5),
.BR sane\-net (5),
diff --git a/frontend/Makefile.am b/frontend/Makefile.am
index 47c50f3..9b92645 100644
--- a/frontend/Makefile.am
+++ b/frontend/Makefile.am
@@ -16,7 +16,7 @@ endif
AM_CPPFLAGS += -I. -I$(srcdir) -I$(top_builddir)/include -I$(top_srcdir)/include
-scanimage_SOURCES = scanimage.c sicc.c sicc.h stiff.c stiff.h
+scanimage_SOURCES = scanimage.c jpegtopdf.c jpegtopdf.h sicc.c sicc.h stiff.c stiff.h
scanimage_LDADD = ../backend/libsane.la ../sanei/libsanei.la ../lib/liblib.la \
$(PNG_LIBS) $(JPEG_LIBS)
diff --git a/frontend/jpegtopdf.c b/frontend/jpegtopdf.c
new file mode 100644
index 0000000..8f144b5
--- /dev/null
+++ b/frontend/jpegtopdf.c
@@ -0,0 +1,709 @@
+/* scanimage -- command line scanning utility
+ * Uses the SANE library.
+ *
+ * Copyright (C) 2021 Thierry HUCHARD <thierry@ordissimo.com>
+ *
+ * For questions and comments contact the sane-devel mailinglist (see
+ * http://www.sane-project.org/mailing-lists.html).
+ *
+ * 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, see <https://www.gnu.org/licenses/>.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <errno.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <time.h>
+#include "jpegtopdf.h"
+
+#ifndef PATH_MAX
+# define PATH_MAX 4096
+#endif
+
+#define SANE_NO_ERR (0)
+#define SANE_NO_ERR_CANCLED (1)
+
+#define SANE_ERR (-128)
+#define SANE_FILE_ERR (-1)
+
+
+/* Creater/Producer */
+#define SANE_PDF_CREATER "sane"
+#define SANE_PDF_PRODUCER "sane"
+
+/* PDF File Header */
+#define SANE_PDF_HEADER "%%PDF-1.3\n"
+
+/* trailer format */
+#define SANE_PDF_TRAILER_OBJ "trailer\n<<\n/Size %d\n/Root 1 0 R\n/Info 3 0 R\n>>\nstartxref\n%lld\n%%%%EOF\n"
+
+/* xref format */
+#define SANE_PDF_XREF_OBJ1 "xref\n0 %d\n0000000000 65535 f \n"
+#define SANE_PDF_XREF_OBJ2 "%010lld 00000 n \n"
+
+/* Catalog format */
+#define SANE_PDF_CATALOG_OBJ "1 0 obj\n<<\n/Type /Catalog\n/Pages 2 0 R\n>>\nendobj\n"
+
+/* Pages format */
+#define SANE_PDF_PAGES_OBJ1 "2 0 obj\n<<\n/Type /Pages\n/Kids [ "
+#define SANE_PDF_PAGES_OBJ2 "%d 0 R "
+#define SANE_PDF_PAGES_OBJ3 "]\n/Count %d\n>>\nendobj\n"
+
+/* Info format */
+#define SANE_PDF_INFO_OBJ "3 0 obj\n<<\n/Creator (" SANE_PDF_CREATER ")\n/Producer (" SANE_PDF_PRODUCER ")\n/CreationDate %s\n>>\nendobj\n"
+#define SANE_PDF_INFO_DATES "(D:%4d%02d%02d%02d%02d%02d%c%02d'%02d')"
+
+/* Page format */
+#define SANE_PDF_PAGE_OBJ1 "%d 0 obj\n<<\n/Type /Page\n/Parent 2 0 R\n"
+#define SANE_PDF_PAGE_OBJ2 "/Resources\n<<\n/XObject << /Im%d %d 0 R >>\n/ProcSet [ /PDF /%s ]\n>>\n"
+#define SANE_PDF_PAGE_OBJ3 "/MediaBox [ 0 0 %d %d ]\n/Contents %d 0 R\n>>\nendobj\n"
+#define SANE_PDF_PAGE_OBJ3_180 "/Rotate 180\n/MediaBox [ 0 0 %d %d ]\n/Contents %d 0 R\n>>\nendobj\n"
+#define SANE_PDF_PAGE_OBJ SANE_PDF_PAGE_OBJ1 SANE_PDF_PAGE_OBJ2 SANE_PDF_PAGE_OBJ3
+#define SANE_PDF_PAGE_OBJ_180 SANE_PDF_PAGE_OBJ1 SANE_PDF_PAGE_OBJ2 SANE_PDF_PAGE_OBJ3_180
+
+/* Contents format */
+#define SANE_PDF_CONTENTS_OBJ1 "%d 0 obj\n<< /Length %d 0 R >>\nstream\n"
+#define SANE_PDF_CONTENTS_OBJ2 "q\n%d 0 0 %d 0 0 cm\n/Im%d Do\nQ\n"
+
+/* XObject(Image) format */
+#define SANE_PDF_IMAGE_OBJ1 "%d 0 obj\n<<\n/Length %d 0 R\n/Type /XObject\n/Subtype /Image\n"
+#define SANE_PDF_IMAGE_OBJ2 "/Width %d /Height %d\n/ColorSpace /%s\n/BitsPerComponent %d\n"
+#define SANE_PDF_IMAGE_OBJ3 "/Filter /DCTDecode\n>>\nstream\n"
+#define SANE_PDF_IMAGE_OBJ SANE_PDF_IMAGE_OBJ1 SANE_PDF_IMAGE_OBJ2 SANE_PDF_IMAGE_OBJ3
+
+/* Length format */
+#define SANE_PDF_LENGTH_OBJ "%d 0 obj\n%d\nendobj\n"
+
+/* end of stream/object */
+#define SANE_PDF_END_ST_OBJ "endstream\nendobj\n"
+
+
+/* object id of first page */
+#define SANE_PDF_FIRST_PAGE_ID (4)
+
+/* xref max value */
+#define SANE_PDF_XREF_MAX (9999999999LL)
+
+/* pdfwork->offset_table */
+enum {
+ SANE_PDF_ENDDOC_XREF = 0,
+ SANE_PDF_ENDDOC_CATALOG,
+ SANE_PDF_ENDDOC_PAGES,
+ SANE_PDF_ENDDOC_INFO,
+ SANE_PDF_ENDDOC_NUM,
+};
+
+/* pdfpage->offset_table */
+enum {
+ SANE_PDF_PAGE_OBJ_PAGE = 0,
+ SANE_PDF_PAGE_OBJ_IMAGE,
+ SANE_PDF_PAGE_OBJ_IMAGE_LEN,
+ SANE_PDF_PAGE_OBJ_CONTENTS,
+ SANE_PDF_PAGE_OBJ_CONTENTS_LEN,
+ SANE_PDF_PAGE_OBJ_NUM,
+};
+
+/* Page object info */
+typedef struct sane_pdf_page {
+ SANE_Int page; /* page No. */
+ SANE_Int obj_id; /* Page object id */
+ SANE_Int image_type; /* ColorSpace, BitsPerComponent */
+ SANE_Int res; /* image resolution */
+ SANE_Int w; /* width (image res) */
+ SANE_Int h; /* height (image res) */
+ SANE_Int w_72; /* width (72dpi) */
+ SANE_Int h_72; /* height (72dpi) */
+ SANE_Int64 offset_table[SANE_PDF_PAGE_OBJ_NUM]; /* xref table */
+ SANE_Int stream_len; /* stream object length */
+ SANE_Int status; /* page object status */
+ struct sane_pdf_page *prev; /* previous page data */
+ struct sane_pdf_page *next; /* next page data */
+} SANE_pdf_page;
+
+
+/* PDF Work */
+typedef struct {
+ SANE_Int obj_num; /* xref - num, trailer - Size */
+ SANE_Int page_num; /* Pages - Count */
+ SANE_Int64 offset_table[SANE_PDF_ENDDOC_NUM]; /* xref table */
+ SANE_pdf_page *first; /* first page data */
+ SANE_pdf_page *last; /* last page data */
+ FILE* fd; /* destination file */
+} SANE_pdf_work;
+
+static SANE_Int re_write_if_fail(
+ FILE * fd,
+ void * lpSrc,
+ SANE_Int writeSize )
+{
+ SANE_Int ret = SANE_ERR, ldata_1st, ldata_2nd;
+
+ if( ( fd == NULL ) || ( lpSrc == NULL ) || ( writeSize <= 0 ) ) {
+ fprintf ( stderr, "[re_write_if_fail]Parameter is error.\n" );
+ goto EXIT;
+ }
+ else if( ( ldata_1st = fwrite( (SANE_Byte *)lpSrc, 1, writeSize, fd ) ) != writeSize ){
+ fprintf ( stderr, "[re_write_if_fail]Can't write file(1st request:%d -> write:%d).\n", writeSize, ldata_1st );
+ if( ( ldata_2nd = fwrite( (SANE_Byte*)lpSrc+ldata_1st, 1, writeSize-ldata_1st, fd) ) != writeSize-ldata_1st ){ /* For detect write() error */
+ fprintf ( stderr, "[re_write_if_fail]Can't write file(2nd request:%d -> write:%d).\n", writeSize-ldata_1st, ldata_2nd );
+ goto EXIT;
+ }
+ }
+ ret = SANE_NO_ERR;
+EXIT:
+ return ret;
+}
+
+static SANE_Int64 _get_current_offset( FILE *fd )
+{
+ SANE_Int64 offset64 = (SANE_Int64)fseek( fd, 0, SEEK_CUR );
+
+ if ( offset64 > SANE_PDF_XREF_MAX ) offset64 = -1;
+
+ return offset64;
+}
+
+static SANE_Int _get_current_time( struct tm *pt, SANE_Byte *sign_c, int *ptz_h, int *ptz_m )
+{
+ SANE_Int ret = SANE_ERR;
+ time_t t;
+ long tz;
+
+ if ( pt == NULL || sign_c == NULL || ptz_h == NULL || ptz_m == NULL ) {
+ goto EXIT;
+ }
+
+ memset ((void *)pt, 0, sizeof(struct tm) );
+ /* get time */
+ if( ( t = time( NULL ) ) < 0 ) {
+ fprintf ( stderr, " Can't get time.\n" );
+ goto EXIT;
+ }
+ /* get localtime */
+ if ( localtime_r( &t, pt ) == NULL ) {
+ fprintf ( stderr, " Can't get localtime.\n" );
+ goto EXIT;
+ }
+ /* get time difference ( OHH'mm' ) */
+ tz = timezone;
+ if ( tz > 0 ) {
+ *sign_c = '-';
+ }
+ else {
+ tz = -tz;
+ *sign_c = '+';
+ }
+ *ptz_h = tz / 60 / 60;
+ *ptz_m = ( tz / 60 ) % 60;
+
+ ret = SANE_NO_ERR;
+EXIT:
+ return ret;
+}
+
+SANE_Int sane_pdf_open( void **ppw, FILE *fd )
+{
+ SANE_Int ret = SANE_ERR;
+ SANE_pdf_work *p = NULL;
+
+ if ( fd == NULL ) {
+ fprintf ( stderr, " Initialize parameter is error!\n" );
+ goto EXIT;
+ }
+ else if ( ( p = (SANE_pdf_work *)calloc(1, sizeof(SANE_pdf_page) ) ) == NULL ) {
+ fprintf ( stderr, " Can't get work memory!\n" );
+ goto EXIT;
+ }
+
+ p->fd = fd;
+ p->obj_num = SANE_PDF_FIRST_PAGE_ID - 1; /* Catalog, Pages, Info */
+ p->page_num = 0;
+ p->first = NULL;
+ p->last = NULL;
+
+ *ppw = (void *)p;
+
+ ret = SANE_NO_ERR;
+EXIT:
+ return ret;
+}
+
+void sane_pdf_close( void *pw )
+{
+ SANE_pdf_page *cur, *next;
+ SANE_pdf_work *pwork = (SANE_pdf_work *)pw;
+
+ if ( pwork == NULL ) {
+ fprintf ( stderr, " Initialize parameter is error!\n");
+ goto EXIT;
+ }
+
+ cur = pwork->first;
+ while ( cur != NULL ) {
+ next = cur->next;
+ free( (void *)cur );
+ cur = next;
+ }
+
+ free ( (void *)pwork );
+
+EXIT:
+ return ;
+}
+
+SANE_Int sane_pdf_start_doc( void *pw )
+{
+ SANE_Int ret = SANE_ERR, ldata;
+ SANE_Byte str[32];
+ SANE_Int len;
+ SANE_pdf_work *pwork = (SANE_pdf_work *)pw;
+
+ if ( pwork == NULL ) {
+ fprintf ( stderr, " Initialize parameter is error!\n");
+ goto EXIT;
+ }
+
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_HEADER );
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ ret = SANE_NO_ERR;
+EXIT:
+ return ret;
+}
+
+SANE_Int sane_pdf_end_doc( void *pw )
+{
+ SANE_Int ret = SANE_ERR, ldata, i, size, w_count;
+ SANE_pdf_page *p = NULL;
+ SANE_Byte str[1024], str_t[64];
+ SANE_Int len;
+ SANE_pdf_work *pwork = (SANE_pdf_work *)pw;
+
+ struct tm tm;
+ SANE_Byte sign_c;
+ int tz_h = 0, tz_m = 0;
+
+ if ( pwork == NULL ) {
+ fprintf ( stderr, " Initialize parameter is error!\n");
+ goto EXIT;
+ }
+
+ size = pwork->obj_num + 1;
+ w_count = 1;
+
+ /* <1> Pages */
+ if ( ( pwork->offset_table[ SANE_PDF_ENDDOC_PAGES ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ /* write Pages(1) */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_PAGES_OBJ1 );
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* write Pages(2) ... Kids array */
+ p = pwork->first;
+ i = 0;
+ while ( p != NULL ) {
+ i++;
+ if ( p->status != SANE_NO_ERR ) {
+ fprintf ( stderr, " page(%d) is NG!\n", i );
+ goto EXIT;
+ }
+
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_PAGES_OBJ2, (int)p->obj_id ); /* Page object id */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ p = p->next;
+ }
+
+ /* write Pages(3) */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_PAGES_OBJ3, (int)pwork->page_num ); /* Count */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* <2> Catalog */
+ if ( ( pwork->offset_table[ SANE_PDF_ENDDOC_CATALOG ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ /* write Catalog */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_CATALOG_OBJ );
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* <3> Info */
+ if ( ( pwork->offset_table[ SANE_PDF_ENDDOC_INFO ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ if ( _get_current_time( &tm, &sign_c, &tz_h, &tz_m ) == SANE_ERR ) {
+ fprintf ( stderr, " Error is occured in _get_current_time.\n" );
+ goto EXIT;
+ }
+ /* Dates format */
+ len = snprintf((char*)str_t, sizeof(str_t), SANE_PDF_INFO_DATES,
+ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
+ tm.tm_hour, tm.tm_min, tm.tm_sec, sign_c, tz_h, tz_m );
+ if ( (size_t)len >= sizeof(str_t) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ /* write Info */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_INFO_OBJ, str_t ); /* CreationDate */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* <4> xref */
+ if ( ( pwork->offset_table[ SANE_PDF_ENDDOC_XREF ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ /* write xref(1) */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_XREF_OBJ1, (int)size ); /* object num */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* write xref(2) */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_XREF_OBJ2 SANE_PDF_XREF_OBJ2 SANE_PDF_XREF_OBJ2,
+ pwork->offset_table[ SANE_PDF_ENDDOC_CATALOG ], /* object id = 1 : Catalog */
+ pwork->offset_table[ SANE_PDF_ENDDOC_PAGES ], /* object id = 2 : Pages */
+ pwork->offset_table[ SANE_PDF_ENDDOC_INFO ] ); /* object id = 3 : Info */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ w_count += SANE_PDF_FIRST_PAGE_ID - 1;
+
+ /* write xref(3) */
+ p = pwork->first;
+ while ( p != NULL ) {
+ /* write offset : SANE_PDF_PAGE_OBJ_PAGE -> SANE_PDF_PAGE_OBJ_CONTENTS_LEN */
+ for ( i = 0; i < SANE_PDF_PAGE_OBJ_NUM; i++ ) {
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_XREF_OBJ2, p->offset_table[ i ] ); /* object id = 3 ~ */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ w_count ++;
+ }
+ p = p->next;
+ }
+ /* check object number */
+ if ( w_count != size ) {
+ fprintf ( stderr, " object number is wrong.\n" );
+ goto EXIT;
+ }
+
+ /* <4> trailer */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_TRAILER_OBJ,
+ (int)size, /* object num */
+ pwork->offset_table[ SANE_PDF_ENDDOC_XREF ] ); /* xref offset */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+
+ ret = SANE_NO_ERR;
+EXIT:
+ return ret;
+}
+
+SANE_Int sane_pdf_start_page(
+ void *pw,
+ SANE_Int w,
+ SANE_Int h,
+ SANE_Int res,
+ SANE_Int type,
+ SANE_Int rotate )
+{
+ SANE_Int ret = SANE_ERR, ldata;
+ SANE_pdf_page *p = NULL;
+ SANE_Byte str[1024];
+ SANE_Int len, len_c;
+ SANE_Byte *ProcSetImage[SANE_PDF_IMAGE_NUM] = { (SANE_Byte *)"ImageC", (SANE_Byte *)"ImageG", (SANE_Byte *)"ImageG" };
+ SANE_Byte *ColorSpace[SANE_PDF_IMAGE_NUM] = { (SANE_Byte *)"DeviceRGB", (SANE_Byte *)"DeviceGray", (SANE_Byte *)"DeviceGray" };
+ SANE_Int BitsPerComponent[SANE_PDF_IMAGE_NUM] = { 8, 8, 1 };
+ SANE_pdf_work *pwork = (SANE_pdf_work *)pw;
+
+ if ( pwork == NULL || w <= 0 || h <= 0 || res <= 0 ||
+ !( type == SANE_PDF_IMAGE_COLOR || type == SANE_PDF_IMAGE_GRAY || type == SANE_PDF_IMAGE_MONO ) ||
+ !( rotate == SANE_PDF_ROTATE_OFF || rotate == SANE_PDF_ROTATE_ON ) ) {
+ fprintf ( stderr, " Initialize parameter is error!\n");
+ goto EXIT;
+ }
+ else if ( ( p = (SANE_pdf_page *)calloc( 1, sizeof(SANE_pdf_page) ) ) == NULL ) {
+ fprintf ( stderr, " Can't get work memory!\n" );
+ goto EXIT;
+ }
+
+ pwork->obj_num += SANE_PDF_PAGE_OBJ_NUM;
+ pwork->page_num ++;
+
+ p->prev = p->next = NULL;
+ if ( pwork->first == NULL ) {
+ /* append first page */
+ pwork->first = p;
+ }
+ if ( pwork->last == NULL ) {
+ /* append first page */
+ pwork->last = p;
+ }
+ else {
+ /* append page */
+ pwork->last->next = p;
+ p->prev = pwork->last;
+ pwork->last = p;
+ }
+
+ p->page = pwork->page_num;
+ /* page obj id : page1=4, page2=4+5=9, page3=4+5*2=14, ... */
+ p->obj_id = SANE_PDF_FIRST_PAGE_ID + ( p->page - 1 ) * SANE_PDF_PAGE_OBJ_NUM;
+ p->image_type = type;
+ p->res = res;
+ p->w = w; p->h = h;
+ p->w_72 = w * 72 / res; p->h_72 = h * 72 / res;
+ p->stream_len = 0;
+ p->status = SANE_ERR;
+
+ /* <1> Page */
+ if ( ( p->offset_table[ SANE_PDF_PAGE_OBJ_PAGE ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ /* write Page */
+ if ( rotate == SANE_PDF_ROTATE_OFF ) {
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_PAGE_OBJ,
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_PAGE), /* object id ( Page ) */
+ (int)p->page, /* ImX (X = page number) ... XObject/Image Name */
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_IMAGE), /* object id ( XObject/Image ) */
+ ProcSetImage[ type ], /* ProcSet */
+ (int)p->w_72, (int)p->h_72, /* MediaBox */
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_CONTENTS) ); /* object id ( Contents ) */
+ }
+ else {
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_PAGE_OBJ_180,
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_PAGE), /* object id ( Page ) */
+ (int)p->page, /* ImX (X = page number) ... XObject/Image Name */
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_IMAGE), /* object id ( XObject/Image ) */
+ ProcSetImage[ type ], /* ProcSet */
+ (int)p->w_72, (int)p->h_72, /* MediaBox */
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_CONTENTS) ); /* object id ( Contents ) */
+ }
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* <2> Contents */
+ if ( ( p->offset_table[ SANE_PDF_PAGE_OBJ_CONTENTS ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ /* write Contents(1) */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_CONTENTS_OBJ1,
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_CONTENTS), /* object id ( Contents ) */
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_CONTENTS_LEN) ); /* object id ( Length of Contents ) */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+ /* write Contents(2) */
+ len_c = len = snprintf( (char*)str, sizeof(str), SANE_PDF_CONTENTS_OBJ2,
+ (int)p->w_72, (int)p->h_72, /* CTM ( scaling ) */
+ (int)p->page ); /* ImX (X = page number) ... XObject/Image Name */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* write Contents(3) */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_END_ST_OBJ );
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* <3> Length of Contents - stream */
+ if ( ( p->offset_table[ SANE_PDF_PAGE_OBJ_CONTENTS_LEN ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ /* write Length */
+ len = snprintf( (char *)str, sizeof(str), SANE_PDF_LENGTH_OBJ,
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_CONTENTS_LEN), /* object id ( Length of Contents ) */
+ len_c ); /* length value */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* <4> XObject(Image) */
+ if ( ( p->offset_table[ SANE_PDF_PAGE_OBJ_IMAGE ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ /* write XObject */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_IMAGE_OBJ,
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_IMAGE), /* object id ( XObject(Image) ) */
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_IMAGE_LEN), /* object id ( Length of XObject ) */
+ (int)p->w, (int)p->h, /* Width/Height */
+ ColorSpace[ type ], /* ColorSpace */
+ (int)BitsPerComponent[ type ] ); /* BitsPerComponent */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ ret = SANE_NO_ERR;
+EXIT:
+ return ret;
+
+}
+
+SANE_Int sane_pdf_end_page( void *pw )
+{
+ SANE_Int ret = SANE_ERR, ldata;
+ SANE_pdf_page *p = NULL;
+ SANE_Byte str[1024];
+ SANE_Int len;
+ SANE_pdf_work *pwork = (SANE_pdf_work *)pw;
+
+ if ( pwork == NULL ) {
+ fprintf ( stderr, " Initialize parameter is error!\n" );
+ goto EXIT;
+ }
+
+ p = pwork->last;
+
+ /* <1> endstream, endobj (XObject) */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_END_ST_OBJ );
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ /* <2> Length of XObject - stream */
+ if ( ( p->offset_table[ SANE_PDF_PAGE_OBJ_IMAGE_LEN ] = _get_current_offset( pwork->fd ) ) < 0 ) {
+ fprintf ( stderr, " offset > %lld\n", SANE_PDF_XREF_MAX );
+ goto EXIT;
+ }
+ /* write Length */
+ len = snprintf( (char*)str, sizeof(str), SANE_PDF_LENGTH_OBJ,
+ (int)(p->obj_id + SANE_PDF_PAGE_OBJ_IMAGE_LEN), /* object id ( Length of XObject stream ) */
+ (int)p->stream_len ); /* length value */
+ if ( (size_t)len >= sizeof(str) || len < 0 ) {
+ fprintf ( stderr, " string is too long!\n" );
+ goto EXIT;
+ }
+ if ( ( ldata = re_write_if_fail( pwork->fd, str, len ) ) < 0 ) {
+ fprintf ( stderr, " Error is occured in re_write_if_fail.\n" );
+ goto EXIT;
+ }
+
+ ret = SANE_NO_ERR;
+ p->status = SANE_NO_ERR;
+EXIT:
+ return ret;
+}
diff --git a/frontend/jpegtopdf.h b/frontend/jpegtopdf.h
new file mode 100644
index 0000000..123c8a0
--- /dev/null
+++ b/frontend/jpegtopdf.h
@@ -0,0 +1,77 @@
+/* scanimage -- command line scanning utility
+ * Uses the SANE library.
+ *
+ * Copyright (C) 2021 Thierry HUCHARD <thierry@ordissimo.com>
+ *
+ * For questions and comments contact the sane-devel mailinglist (see
+ * http://www.sane-project.org/mailing-lists.html).
+ *
+ * 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, see <https://www.gnu.org/licenses/>.
+*/
+
+#ifndef __JPEG_TO_PDF_H__
+#define __JPEG_TO_PDF_H__
+
+#include "../include/_stdint.h"
+
+#include "../include/sane/sane.h"
+#include "../include/sane/sanei.h"
+#include "../include/sane/saneopts.h"
+
+
+
+#ifndef PATH_MAX
+# define PATH_MAX 4096
+#endif
+
+typedef long long SANE_Int64;
+
+/* sane_pdf_StartPage - type */
+enum {
+ SANE_PDF_IMAGE_COLOR = 0, /* RGB24bit */
+ SANE_PDF_IMAGE_GRAY, /* Gray8bit */
+ SANE_PDF_IMAGE_MONO, /* Gray1bit */
+ SANE_PDF_IMAGE_NUM,
+};
+
+/* sane_pdf_StartPage - rotate */
+enum {
+ SANE_PDF_ROTATE_OFF = 0, /* rotate off */
+ SANE_PDF_ROTATE_ON, /* rotate 180 degrees */
+};
+
+
+typedef struct mynode
+{
+ SANE_Int page;
+ SANE_Int show_page;
+ SANE_Int rotate;
+ struct mynode *prev;
+ struct mynode *next;
+ FILE* fd;
+ SANE_Int file_size;
+ SANE_Byte file_path[ PATH_MAX ];
+} SANE_PDF_NODE, *LPSANE_PDF_NODE;
+
+
+SANE_Int sane_pdf_open( void **ppw, FILE* fd );
+void sane_pdf_close( void *pw );
+
+SANE_Int sane_pdf_start_doc( void *pw );
+SANE_Int sane_pdf_end_doc( void *pw );
+
+SANE_Int sane_pdf_start_page( void *pw, SANE_Int w, SANE_Int h, SANE_Int res, SANE_Int type, SANE_Int rotate );
+SANE_Int sane_pdf_end_page( void *pw );
+
+#endif /* __JPEG_TO_PDF_H__ */
diff --git a/frontend/scanimage.c b/frontend/scanimage.c
index 901a7c8..b587b9d 100644
--- a/frontend/scanimage.c
+++ b/frontend/scanimage.c
@@ -60,6 +60,10 @@
#include "sicc.h"
#include "stiff.h"
+#ifdef HAVE_LIBJPEG
+#include "jpegtopdf.h"
+#endif
+
#include "../include/md5.h"
#ifndef PATH_MAX
@@ -119,6 +123,7 @@ static struct option basic_options[] = {
#define OUTPUT_TIFF 2
#define OUTPUT_PNG 3
#define OUTPUT_JPEG 4
+#define OUTPUT_PDF 5
#define BASE_OPTSTRING "d:hi:Lf:o:B::nvVTAbp"
#define STRIP_HEIGHT 256 /* # lines we increment image height */
@@ -633,6 +638,9 @@ print_option (SANE_Device * device, int opt_num, const SANE_Option_Descriptor *o
else if(!(opt->cap & SANE_CAP_SOFT_SELECT) && (opt->cap & SANE_CAP_SOFT_DETECT))
fputs (" [read-only]", stdout);
+ else if (opt->cap & SANE_CAP_ADVANCED)
+ fputs (" [advanced]", stdout);
+
fputs ("\n ", stdout);
column = 8;
@@ -1328,7 +1336,7 @@ advance (Image * image)
}
static SANE_Status
-scan_it (FILE *ofp)
+scan_it (FILE *ofp, void* pw)
{
int i, len, first_frame = 1, offset = 0, must_buffer = 0;
uint64_t hundred_percent = 0;
@@ -1354,6 +1362,8 @@ scan_it (FILE *ofp)
struct jpeg_error_mgr jerr;
#endif
+ (void)pw;
+
do
{
if (!first_frame)
@@ -1448,6 +1458,14 @@ scan_it (FILE *ofp)
break;
#endif
#ifdef HAVE_LIBJPEG
+ case OUTPUT_PDF:
+ sane_pdf_start_page ( pw, parm.pixels_per_line, parm.lines,
+ resolution_value, SANE_PDF_IMAGE_COLOR,
+ SANE_PDF_ROTATE_OFF);
+ write_jpeg_header (parm.format, parm.pixels_per_line,
+ parm.lines, resolution_value,
+ ofp, &cinfo, &jerr);
+ break;
case OUTPUT_JPEG:
write_jpeg_header (parm.format, parm.pixels_per_line,
parm.lines, resolution_value,
@@ -1465,7 +1483,7 @@ scan_it (FILE *ofp)
pngbuf = malloc(parm.bytes_per_line);
#endif
#ifdef HAVE_LIBJPEG
- if(output_format == OUTPUT_JPEG)
+ if(output_format == OUTPUT_JPEG || output_format == OUTPUT_PDF)
jpegbuf = malloc(parm.bytes_per_line);
#endif
@@ -1629,7 +1647,7 @@ scan_it (FILE *ofp)
else
#endif
#ifdef HAVE_LIBJPEG
- if (output_format == OUTPUT_JPEG)
+ if (output_format == OUTPUT_JPEG || output_format == OUTPUT_PDF)
{
int i = 0;
int left = len;
@@ -1729,6 +1747,14 @@ scan_it (FILE *ofp)
break;
#endif
#ifdef HAVE_LIBJPEG
+ case OUTPUT_PDF:
+ sane_pdf_start_page ( pw, parm.pixels_per_line, parm.lines,
+ resolution_value, SANE_PDF_IMAGE_COLOR,
+ SANE_PDF_ROTATE_OFF);
+ write_jpeg_header (parm.format, parm.pixels_per_line,
+ parm.lines, resolution_value,
+ ofp, &cinfo, &jerr);
+ break;
case OUTPUT_JPEG:
write_jpeg_header (parm.format, parm.pixels_per_line,
parm.lines, resolution_value,
@@ -1760,7 +1786,7 @@ scan_it (FILE *ofp)
png_write_end(png_ptr, info_ptr);
#endif
#ifdef HAVE_LIBJPEG
- if(output_format == OUTPUT_JPEG)
+ if(output_format == OUTPUT_JPEG || output_format == OUTPUT_PDF)
jpeg_finish_compress(&cinfo);
#endif
@@ -1775,7 +1801,7 @@ cleanup:
}
#endif
#ifdef HAVE_LIBJPEG
- if(output_format == OUTPUT_JPEG) {
+ if(output_format == OUTPUT_JPEG || output_format == OUTPUT_PDF) {
jpeg_destroy_compress(&cinfo);
free(jpegbuf);
}
@@ -2017,7 +2043,8 @@ static int guess_output_format(const char* output_file)
{ ".jpg", OUTPUT_JPEG },
{ ".jpeg", OUTPUT_JPEG },
{ ".tiff", OUTPUT_TIFF },
- { ".tif", OUTPUT_TIFF }
+ { ".tif", OUTPUT_TIFF },
+ { ".pdf", OUTPUT_PDF }
};
for (unsigned i = 0; i < sizeof(formats) / sizeof(formats[0]); ++i)
{
@@ -2052,6 +2079,7 @@ main (int argc, char **argv)
SANE_Status status;
char *full_optstring;
SANE_Int version_code;
+ void *pw = NULL;
FILE *ofp = NULL;
buffer_size = (32 * 1024); /* default size */
@@ -2155,6 +2183,15 @@ main (int argc, char **argv)
exit(1);
#endif
}
+ else if (strcmp (optarg, "pdf") == 0)
+ {
+#ifdef HAVE_LIBJPEG
+ output_format = OUTPUT_PDF;
+#else
+ fprintf(stderr, "PDF support not compiled in\n");
+ exit(1);
+#endif
+ }
else if (strcmp (optarg, "pnm") == 0)
{
output_format = OUTPUT_PNM;
@@ -2308,7 +2345,7 @@ standard output.\n\
Parameters are separated by a blank from single-character options (e.g.\n\
-d epson) and by a \"=\" from multi-character options (e.g. --device-name=epson).\n\
-d, --device-name=DEVICE use a given scanner device (e.g. hp:/dev/scanner)\n\
- --format=pnm|tiff|png|jpeg file format of output file\n\
+ --format=pnm|tiff|png|jpeg|pdf file format of output file\n\
-i, --icc-profile=PROFILE include this ICC profile into TIFF file\n", prog_name);
printf ("\
-L, --list-devices show available scanner devices\n\
@@ -2622,6 +2659,9 @@ List of available devices:", prog_name);
break;
#endif
#ifdef HAVE_LIBJPEG
+ case OUTPUT_PDF:
+ format = "out%d.pdf";
+ break;
case OUTPUT_JPEG:
format = "out%d.jpg";
break;
@@ -2642,6 +2682,13 @@ List of available devices:", prog_name);
scanimage_exit(1);
}
}
+#ifdef HAVE_LIBJPEG
+ if (output_format == OUTPUT_PDF)
+ {
+ sane_pdf_open(&pw, ofp );
+ sane_pdf_start_doc( pw );
+ }
+#endif
}
if (batch)
@@ -2667,11 +2714,14 @@ List of available devices:", prog_name);
{
char path[PATH_MAX];
char part_path[PATH_MAX];
- if (batch) /* format is NULL unless batch mode */
+ if (batch) /* format is NULL unless batch mode */
{
sprintf (path, format, n); /* love --(C++) */
strcpy (part_path, path);
- strcat (part_path, ".part");
+#ifdef HAVE_LIBJPEG
+ if (output_format != OUTPUT_PDF)
+#endif
+ strcat (part_path, ".part");
}
@@ -2689,6 +2739,13 @@ List of available devices:", prog_name);
{
if (ofp)
{
+#ifdef HAVE_LIBJPEG
+ if (output_format == OUTPUT_PDF)
+ {
+ sane_pdf_end_doc( pw );
+ sane_pdf_close ( pw );
+ }
+#endif
fclose (ofp);
ofp = NULL;
}
@@ -2711,8 +2768,15 @@ List of available devices:", prog_name);
{
fprintf (stderr, "%s: sane_start: %s\n",
prog_name, sane_strstatus (status));
- if (ofp)
+ if (ofp )
{
+#ifdef HAVE_LIBJPEG
+ if (output_format == OUTPUT_PDF)
+ {
+ sane_pdf_end_doc( pw );
+ sane_pdf_close ( pw );
+ }
+#endif
fclose (ofp);
ofp = NULL;
}
@@ -2723,15 +2787,42 @@ List of available devices:", prog_name);
/* write to .part file while scanning is in progress */
if (batch)
{
- if (NULL == (ofp = fopen (part_path, "w")))
+#ifdef HAVE_LIBJPEG
+ SANE_Bool init_pdf = SANE_FALSE;
+#endif
+ if (ofp == NULL)
+ {
+ ofp = fopen (part_path, "w");
+#ifdef HAVE_LIBJPEG
+ if (output_format == OUTPUT_PDF && ofp != NULL)
+ init_pdf = SANE_TRUE;
+#endif
+ }
+ if (NULL == ofp)
{
fprintf (stderr, "cannot open %s\n", part_path);
sane_cancel (device);
return SANE_STATUS_ACCESS_DENIED;
}
+#ifdef HAVE_LIBJPEG
+ if (init_pdf )
+ {
+ sane_pdf_open( &pw, ofp );
+ sane_pdf_start_doc ( pw );
+ }
+#endif
+ }
+
+ status = scan_it (ofp, pw);
+
+#ifdef HAVE_LIBJPEG
+ if (output_format == OUTPUT_PDF)
+ {
+ sane_pdf_end_page( pw );
+ fflush( ofp );
}
+#endif
- status = scan_it (ofp);
if (batch)
{
fprintf (stderr, "Scanned page %d.", n);
@@ -2745,32 +2836,47 @@ List of available devices:", prog_name);
status = SANE_STATUS_GOOD;
if (batch)
{
- if (!ofp || 0 != fclose(ofp))
- {
- fprintf (stderr, "cannot close image file\n");
- sane_cancel (device);
- return SANE_STATUS_ACCESS_DENIED;
- }
- else
+#ifdef HAVE_LIBJPEG
+ if (output_format != OUTPUT_PDF)
{
- ofp = NULL;
- /* let the fully scanned file show up */
- if (rename (part_path, path))
- {
- fprintf (stderr, "cannot rename %s to %s\n",
- part_path, path);
- sane_cancel (device);
- return SANE_STATUS_ACCESS_DENIED;
- }
- if (batch_print)
- {
- fprintf (stdout, "%s\n", path);
- fflush (stdout);
- }
+#endif
+ if (!ofp || 0 != fclose(ofp))
+ {
+ fprintf (stderr, "cannot close image file\n");
+ sane_cancel (device);
+ return SANE_STATUS_ACCESS_DENIED;
+ }
+ else
+ {
+ ofp = NULL;
+ /* let the fully scanned file show up */
+ if (rename (part_path, path))
+ {
+ fprintf (stderr, "cannot rename %s to %s\n",
+ part_path, path);
+ sane_cancel (device);
+ return SANE_STATUS_ACCESS_DENIED;
+ }
+ if (batch_print)
+ {
+ fprintf (stdout, "%s\n", path);
+ fflush (stdout);
+ }
+ }
+#ifdef HAVE_LIBJPEG
}
+#endif
}
else
{
+#ifdef HAVE_LIBJPEG
+ if (output_format == OUTPUT_PDF)
+ {
+ sane_pdf_end_doc( pw );
+ fflush( ofp );
+ sane_pdf_close ( pw );
+ }
+#endif
if (output_file && ofp)
{
fclose(ofp);
@@ -2783,13 +2889,20 @@ List of available devices:", prog_name);
{
if (ofp)
{
- fclose (ofp);
- ofp = NULL;
- }
+ fclose (ofp);
+ ofp = NULL;
+ }
unlink (part_path);
}
else
{
+#ifdef HAVE_LIBJPEG
+ if (output_format == OUTPUT_PDF)
+ {
+ sane_pdf_end_doc( pw );
+ sane_pdf_close ( pw );
+ }
+#endif
if (output_file && ofp)
{
fclose(ofp);
@@ -2807,6 +2920,19 @@ List of available devices:", prog_name);
if (batch)
{
+#ifdef HAVE_LIBJPEG
+ if (output_format == OUTPUT_PDF)
+ {
+ if (output_file && ofp)
+ {
+ sane_pdf_end_doc( pw );
+ fflush( ofp );
+ sane_pdf_close ( pw );
+ fclose(ofp);
+ ofp = NULL;
+ }
+ }
+#endif
int num_pgs = (n - batch_start_at) / batch_increment;
fprintf (stderr, "Batch terminated, %d page%s scanned\n",
num_pgs, num_pgs == 1 ? "" : "s");
diff --git a/newsfragments/README.md b/newsfragments/README.md
new file mode 100644
index 0000000..1201054
--- /dev/null
+++ b/newsfragments/README.md
@@ -0,0 +1,20 @@
+This is the directory for release note fragments processed by
+[towncrier](https://github.com/twisted/towncrier).
+
+When making a user-visible change create a file in this directory and it will be automatically be
+included into the release note document when the next release is published.
+
+The file extension specifies the type of a change. The following are currently supported:
+
+ - .backend: a new feature or a bugfix for a backend.
+ - .frontend: a new feature or a bugfix for a backend.
+ - .security: a fix for security issue.
+ - .removal: a deprecation or removal of functionality.
+ - .misc: miscellaneous changes
+
+Please don't add links to the merge requests into the release notes. If it's not clear where
+the feature is coming from by looking into the git history (e.g. if a release note is being
+made after the MR has landed) then add link to the MR to the commit description.
+
+Please add links to fixed issues in Gitlab by using full URLs to them instead of Gitlab
+shorthand syntax.
diff --git a/newsfragments/canon_lide70_improvements.bugfix b/newsfragments/canon_lide70_improvements.bugfix
new file mode 100644
index 0000000..48feece
--- /dev/null
+++ b/newsfragments/canon_lide70_improvements.bugfix
@@ -0,0 +1 @@
+`canon_lide70`: Color adjustments. Faster scanning at 600 dpi for the LiDE 600.
diff --git a/po/LINGUAS b/po/LINGUAS
index 19e4bd6..8590692 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -25,3 +25,4 @@ pt
ru
sv
uk
+zh_CN
diff --git a/po/bg.po b/po/bg.po
index a7c223f..d8b76b1 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.11\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2007-12-17 22:59+0100\n"
"Last-Translator: Pavel Constantinov <pavelconstantinov@bigfoot.com>\n"
"Language-Team: <>\n"
@@ -25,8 +25,8 @@ msgid "Standard"
msgstr ""
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -55,7 +55,7 @@ msgstr "Геометрия"
msgid "Enhancement"
msgstr "Повишение"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1279,7 +1279,7 @@ msgstr "flatbed скенер"
msgid "flatbed scanner"
msgstr "flatbed скенер"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Тип екран (film)"
@@ -1309,7 +1309,7 @@ msgstr "Резолюция на сканиране"
msgid "Use only hardware resolutions"
msgstr "Покажи кратък списък с резолюции"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr ""
@@ -1354,7 +1354,7 @@ msgstr ""
msgid "Extra color adjustments"
msgstr ""
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1541,10 +1541,10 @@ msgstr "Корекция на гамата"
msgid "Selects the gamma corrected transfer curve"
msgstr "Избира кривата на коригираната гама"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1555,82 +1555,84 @@ msgstr "Избира кривата на коригираната гама"
msgid "Flatbed"
msgstr "Flatbed"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr ""
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, fuzzy, no-c-format
msgid "ADF Back"
msgstr "ADF"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, fuzzy, no-c-format
msgid "ADF Duplex"
msgstr "Дуплексно"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Печат"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Дуплексно"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Червено"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Зелено"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Синьо"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Повишение"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Повишение"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Повишение"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1639,24 +1641,24 @@ msgstr "Повишение"
msgid "None"
msgstr "Нищо"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1679,40 +1681,39 @@ msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
"Използва неблокиращ IO порт за sane_read(), ако фронтенда го поддържа."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Симплексно"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Дуплексно"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Прозрачност"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Автоматично подаване на документи"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Позитивен екран"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Негативен филм"
@@ -1728,58 +1729,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Фокус 2,5 мм над стъклото"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Полутон A (Твърд тон)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Полутон B (Мек тон)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Полутон C (Net Screen)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Dither A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Dither B (4x4 Spiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Dither C (4x4 Net Screen)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Dither D (8x4 Net Screen)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Технология за оконтрастиране на текста"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Свали десен B"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Свали десен B"
@@ -1789,7 +1790,7 @@ msgstr "Свали десен B"
msgid "No Correction"
msgstr "Без корекция"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "По потребителска дефиниция"
@@ -1814,33 +1815,33 @@ msgstr "Мастиленоструйни принтери"
msgid "CRT monitors"
msgstr "CRT монитори"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "По подразбиране"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Принтиране с висока гъстота"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Принтиране с ниска гъстота"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Принтиране с висок контраст"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "По потребителска дефиниция (Гама=1,0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "По потребителска дефиниция (Гама=1,8)"
@@ -1878,37 +1879,37 @@ msgstr "A4"
msgid "Max"
msgstr "Макс."
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Избира полутона"
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Dropout"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Избира dropout-а."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Избира яркостта."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Острота"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Цветова корекция."
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -1999,7 +2000,7 @@ msgstr "Добавя към червеното според степента н
msgid "Controls blue level"
msgstr "Наглася степента на синьо"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Направи огледален образ на изображението"
@@ -2009,7 +2010,7 @@ msgstr "Направи огледален образ на изображение
msgid "Fast preview"
msgstr "Бързо превю"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Автоматична сегментация на площ"
@@ -2039,49 +2040,49 @@ msgstr "Определя фактора на увеличение за скен
msgid "Quick format"
msgstr "Бързо форматиране"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Оборудване по избор"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Извади"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Извади листа от ADF"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Авто изваждане"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Извади документа след сканиране"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr ""
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr ""
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, fuzzy, no-c-format
msgid "Bay"
msgstr "Bay"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, fuzzy, no-c-format
msgid "Select bay to scan"
msgstr "Избор на bay за сканиране"
@@ -2122,56 +2123,66 @@ msgstr ""
"След изпращане на команда за сканиране, изчакай, докато бутонът на "
"скенера не е натиснат, преди да започнеш самото сканиране."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, fuzzy, no-c-format
msgid "Positive Slide"
msgstr "Позитивен екран"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, fuzzy, no-c-format
msgid "Negative Slide"
msgstr "Негативен филм"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "По потребителска дефиниция"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Извади листа от ADF"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Без корекция"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Корекция на аналоговата гама"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Без корекция"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Корекция на аналоговата гама"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/ca.po b/po/ca.po
index 018e5ad..01b5e57 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.29\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2020-01-17 11:40+0100\n"
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
@@ -28,8 +28,8 @@ msgid "Standard"
msgstr "Estàndard"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -58,7 +58,7 @@ msgstr "Geometria"
msgid "Enhancement"
msgstr "Millora"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1308,7 +1308,7 @@ msgstr "Escàner de pel·lícula"
msgid "flatbed scanner"
msgstr "Escàner de superfície plana"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Tipus de pel·lícula"
@@ -1339,7 +1339,7 @@ msgstr "Resolució del maquinari"
msgid "Use only hardware resolutions"
msgstr "Usa només les resolucions del maquinari"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Enfocament"
@@ -1386,7 +1386,7 @@ msgstr "Escaneja els marges"
msgid "Extra color adjustments"
msgstr "Ajustaments addicionals per al color"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1582,10 +1582,10 @@ msgid "Selects the gamma corrected transfer curve"
msgstr ""
"Selecciona la corba de transferència per a la correcció de la gamma"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1596,82 +1596,84 @@ msgstr ""
msgid "Flatbed"
msgstr "De superfície plana"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "ADF per a l'anvers"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "ADF per al revers"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "ADF per a les dues cares"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "Targeta per a l'anvers"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "Targeta per al revers"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "Targeta per a les dues cares"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Vermell"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Verd"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blau"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Vermell realçat"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Verd realçat"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Blau realçat"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1680,26 +1682,26 @@ msgstr "Blau realçat"
msgid "None"
msgstr "Cap"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "El percentatge per a saltar el blanc del programari"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
"Sol·licita al controlador que descarti les pàgines amb un percentatge "
"baix de píxels foscos"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1723,40 +1725,39 @@ msgstr ""
"Usa una E/S que no es bloquegi per a la «sane_read()» si està admès pel "
"frontal."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Una cara"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Dues cares"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Unitat per a la transparència"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Alimentador automàtic de documents"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Pel·lícula en positiu"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Pel·lícula en negatiu"
@@ -1772,58 +1773,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Enfocament de 2,5 mm per sobre del vidre"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Semi to A (to dur)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Semi to B (to suau)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Semi to C (matisat)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Trama A (bayer 4x4)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Trama B (espiral 4x4)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Trama C (matisat 4x4)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Trama D (matisat 8x4)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tecnologia per a la millora del text"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Descarrega el patró A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Descarrega el patró B"
@@ -1833,7 +1834,7 @@ msgstr "Descarrega el patró B"
msgid "No Correction"
msgstr "Sense correcció"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Definit per l'usuari"
@@ -1858,33 +1859,33 @@ msgstr "Impressores d'injecció de tinta"
msgid "CRT monitors"
msgstr "Monitors CRT"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Predeterminat"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Impressió d'alta densitat"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Impressió de baixa densitat"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Impressió d'alt contrast"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Definit per l'usuari (gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Definit per l'usuari (gamma=1.8)"
@@ -1922,37 +1923,37 @@ msgstr "A4"
msgid "Max"
msgstr "Màx"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Selecciona el semi to."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Exclusió"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Selecciona el que s'exclourà."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Selecciona la brillantor."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Agudesa"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Correcció del color"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2044,7 +2045,7 @@ msgstr "Afegeix vermell en funció del nivell de blau"
msgid "Controls blue level"
msgstr "Controla el nivell de blau"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Emmiralla la imatge."
@@ -2054,7 +2055,7 @@ msgstr "Emmiralla la imatge."
msgid "Fast preview"
msgstr "Vista prèvia ràpida"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Segmentació automàtica de l'àrea"
@@ -2084,49 +2085,49 @@ msgstr "Defineix el factor de zoom que usarà l'escàner"
msgid "Quick format"
msgstr "Format ràpid"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Equipament opcional"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Expulsa"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Expulsa el full de l'ADF"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Expulsa automàticament"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Expulsa el document després de l'escaneig"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Mode ADF"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Seleccionar el mode de l'ADF (una cara/dues cares)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Badia"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Selecciona la badia per escanejar"
@@ -2169,57 +2170,67 @@ msgstr ""
"botó de l'escàner per iniciar realment el procés d'escaneig."
# Nota: https://github.com/Scan-o-Matic/scanomatic/wiki/Installing-scanners
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Infraroigs"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Diapositiva en positiu"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Diapositiva en negatiu"
# Nota: https://en.wikipedia.org/wiki/Color_temperature#Correlated_color_temperature
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Incorpora el perfil CCT"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Perfil CCT definit per l'usuari"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr "Carrega"
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Carrega un full a l'ADF"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, no-c-format
msgid "ADF Skew Correction"
msgstr "Correcció de la inclinació a l'ADF"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, no-c-format
msgid "Enables ADF skew correction"
msgstr "Habilita la correcció de la inclinació a l'ADF"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Correcció de la inclinació a l'ADF"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Habilita la correcció de la inclinació a l'ADF"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/ca@valencia.po b/po/ca@valencia.po
index 58c0d9f..b3179f1 100644
--- a/po/ca@valencia.po
+++ b/po/ca@valencia.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.29\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2020-01-17 11:40+0100\n"
"Last-Translator: Antoni Bella Pérez <antonibella5@yahoo.com>\n"
"Language-Team: Catalan <kde-i18n-ca@kde.org>\n"
@@ -28,8 +28,8 @@ msgid "Standard"
msgstr "Estàndard"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -58,7 +58,7 @@ msgstr "Geometria"
msgid "Enhancement"
msgstr "Millora"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1308,7 +1308,7 @@ msgstr "Escàner de pel·lícula"
msgid "flatbed scanner"
msgstr "Escàner de superfície plana"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Tipus de pel·lícula"
@@ -1339,7 +1339,7 @@ msgstr "Resolució del maquinari"
msgid "Use only hardware resolutions"
msgstr "Usa només les resolucions del maquinari"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Enfocament"
@@ -1386,7 +1386,7 @@ msgstr "Escaneja els marges"
msgid "Extra color adjustments"
msgstr "Ajustaments addicionals per al color"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1582,10 +1582,10 @@ msgid "Selects the gamma corrected transfer curve"
msgstr ""
"Selecciona la corba de transferència per a la correcció de la gamma"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1596,82 +1596,84 @@ msgstr ""
msgid "Flatbed"
msgstr "De superfície plana"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "ADF per a l'anvers"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "ADF per al revers"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "ADF per a les dues cares"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "Targeta per a l'anvers"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "Targeta per al revers"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "Targeta per a les dues cares"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Roig"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Verd"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blau"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Roig realçat"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Verd realçat"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Blau realçat"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1680,26 +1682,26 @@ msgstr "Blau realçat"
msgid "None"
msgstr "Cap"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "El percentatge per a saltar el blanc del programari"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
"Sol·licita al controlador que descarti les pàgines amb un percentatge "
"baix de píxels foscos"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1723,40 +1725,39 @@ msgstr ""
"Usa una E/S que no es bloquegi per a la «sane_read()» si està admés pel "
"frontal."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Una cara"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Dues cares"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Unitat per a la transparència"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Alimentador automàtic de documents"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Pel·lícula en positiu"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Pel·lícula en negatiu"
@@ -1772,58 +1773,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Enfocament de 2,5 mm per sobre del vidre"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Semi to A (to dur)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Semi to B (to suau)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Semi to C (matisat)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Trama A (bayer 4x4)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Trama B (espiral 4x4)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Trama C (matisat 4x4)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Trama D (matisat 8x4)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tecnologia per a la millora del text"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Descarrega el patró A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Descarrega el patró B"
@@ -1833,7 +1834,7 @@ msgstr "Descarrega el patró B"
msgid "No Correction"
msgstr "Sense correcció"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Definit per l'usuari"
@@ -1858,33 +1859,33 @@ msgstr "Impressores d'injecció de tinta"
msgid "CRT monitors"
msgstr "Monitors CRT"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Predeterminat"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Impressió d'alta densitat"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Impressió de baixa densitat"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Impressió d'alt contrast"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Definit per l'usuari (gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Definit per l'usuari (gamma=1.8)"
@@ -1922,37 +1923,37 @@ msgstr "A4"
msgid "Max"
msgstr "Màx"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Selecciona el semi to."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Exclusió"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Selecciona el que s'exclourà."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Selecciona la brillantor."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Agudesa"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Correcció del color"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2044,7 +2045,7 @@ msgstr "Afig roig en funció del nivell de blau"
msgid "Controls blue level"
msgstr "Controla el nivell de blau"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Emmiralla la imatge."
@@ -2054,7 +2055,7 @@ msgstr "Emmiralla la imatge."
msgid "Fast preview"
msgstr "Vista prèvia ràpida"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Segmentació automàtica de l'àrea"
@@ -2084,49 +2085,49 @@ msgstr "Defineix el factor de zoom que usarà l'escàner"
msgid "Quick format"
msgstr "Format ràpid"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Equipament opcional"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Expulsa"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Expulsa el full de l'ADF"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Expulsa automàticament"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Expulsa el document després de l'escaneig"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Mode ADF"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Seleccionar el mode de l'ADF (una cara/dues cares)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Badia"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Selecciona la badia per escanejar"
@@ -2169,57 +2170,67 @@ msgstr ""
"botó de l'escàner per iniciar realment el procés d'escaneig."
# Nota: https://github.com/Scan-o-Matic/scanomatic/wiki/Installing-scanners
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Infraroigs"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Diapositiva en positiu"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Diapositiva en negatiu"
# Nota: https://en.wikipedia.org/wiki/Color_temperature#Correlated_color_temperature
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Incorpora el perfil CCT"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Perfil CCT definit per l'usuari"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr "Carrega"
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Carrega un full a l'ADF"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, no-c-format
msgid "ADF Skew Correction"
msgstr "Correcció de la inclinació a l'ADF"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, no-c-format
msgid "Enables ADF skew correction"
msgstr "Habilita la correcció de la inclinació a l'ADF"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Correcció de la inclinació a l'ADF"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Habilita la correcció de la inclinació a l'ADF"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/cs.po b/po/cs.po
index 31b10f8..6335a39 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends.cs\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2007-12-17 22:59+0100\n"
"Last-Translator: Josef <joeprusa@volny.cz>\n"
"Language-Team: \n"
@@ -26,8 +26,8 @@ msgid "Standard"
msgstr ""
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -56,7 +56,7 @@ msgstr "Geometrie"
msgid "Enhancement"
msgstr "Vylepšení"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1279,7 +1279,7 @@ msgstr "Stolní skener"
msgid "flatbed scanner"
msgstr "Stolní skener"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Typ filmu"
@@ -1309,7 +1309,7 @@ msgstr "Rozlišení"
msgid "Use only hardware resolutions"
msgstr "Zobrazí zkrácený seznam rozlišení"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr ""
@@ -1354,7 +1354,7 @@ msgstr ""
msgid "Extra color adjustments"
msgstr ""
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1541,10 +1541,10 @@ msgstr "Korekce gama"
msgid "Selects the gamma corrected transfer curve"
msgstr "Nastaví gama korekci přenosové křivky"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1555,82 +1555,84 @@ msgstr "Nastaví gama korekci přenosové křivky"
msgid "Flatbed"
msgstr "Stolní"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr ""
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr ""
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, fuzzy, no-c-format
msgid "ADF Duplex"
msgstr "Oboustraně"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr ""
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Oboustraně"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Červená"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Zelená"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Modrá"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Vylepšení"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Vylepšení"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Vylepšení"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1639,24 +1641,24 @@ msgstr "Vylepšení"
msgid "None"
msgstr "Žádné"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1679,40 +1681,39 @@ msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
"Použít neblokující V/V pro sane_read(), pokud to frontend podporuje."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Jednostraně"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Oboustraně"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Prosvětlovací jednotka"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automatický podavač dokumentů"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Pozitivní film"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negativní film"
@@ -1728,58 +1729,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Zaostření 2,5 mm nad sklo"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Polotón A (ostrý)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Polotón B (měkký)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Polotón C (síť - \"Net Screen\")"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Rozptyl A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Rozptyl B (4x4 Spirálový)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Rozptyl C (4x4 Síťový)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Rozptyl D (8x4 Síťový)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Technika vylepšení textu"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Download vzor A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Download vzor B"
@@ -1789,7 +1790,7 @@ msgstr "Download vzor B"
msgid "No Correction"
msgstr "Bez korekce"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Uživatelské nastavení"
@@ -1814,33 +1815,33 @@ msgstr "Inkoustové tiskárny"
msgid "CRT monitors"
msgstr "CRT monitory"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Standard"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Tisk ve vysoké kvalitě"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Tisk v nízké kvalitě"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Tisk s vysokým kontrastem"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Uživatelsky definováno (Gama=1,0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Uživatelsky definováno (Gama=1,8)"
@@ -1878,37 +1879,37 @@ msgstr "A4"
msgid "Max"
msgstr "Max"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Zvolit polotóny"
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Výpadek"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Nastaví výpadek."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Nastaví jas."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Zaostření"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Barevná korekce"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr "Nastaví tabulku barevných korekcí pro vybrané výstupní zařízení."
@@ -1998,7 +1999,7 @@ msgstr "Přidává červenou v závislosti na úrovni modré"
msgid "Controls blue level"
msgstr "Ovládá úroveň modré"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Zrcadlí obrázek."
@@ -2008,7 +2009,7 @@ msgstr "Zrcadlí obrázek."
msgid "Fast preview"
msgstr "Rychlý náhled"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Automatické rozložení plochy"
@@ -2038,49 +2039,49 @@ msgstr "Nastaví faktor přiblížení, který skener použije"
msgid "Quick format"
msgstr "Rychlý formát"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Volitelné příslušenství"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Vysunout"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Vysunout papír z automatického podavače"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Automaticky vysunout"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Vysunout dokument po naskenování"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr ""
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr ""
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Pozice"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Zvolte pozici pro sken"
@@ -2119,56 +2120,66 @@ msgstr ""
"Po odeslání příkazu ke skenování se s vlastním skenem čeká až na stisk "
"tlačítka na skeneru."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, fuzzy, no-c-format
msgid "Positive Slide"
msgstr "Pozitivní film"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, fuzzy, no-c-format
msgid "Negative Slide"
msgstr "Negativní film"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Uživatelské nastavení"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Vysunout papír z automatického podavače"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Bez korekce"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Analogová korekce gama"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Bez korekce"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Analogová korekce gama"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/da.po b/po/da.po
index e44cb67..02cc302 100644
--- a/po/da.po
+++ b/po/da.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.17\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2007-12-17 22:59+0100\n"
"Last-Translator: Mogens Jaeger <mogensjaeger@get2net.dk>\n"
"Language-Team: Danish <dansk@klid.dk>\n"
@@ -31,8 +31,8 @@ msgid "Standard"
msgstr ""
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -61,7 +61,7 @@ msgstr "Skanområde"
msgid "Enhancement"
msgstr "Forbedring"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1283,7 +1283,7 @@ msgstr "Flatbed skanner"
msgid "flatbed scanner"
msgstr "Flatbed skanner"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Filmtype"
@@ -1313,7 +1313,7 @@ msgstr "Skanningsopløsning"
msgid "Use only hardware resolutions"
msgstr "Vis kort liste med mulige opløsninger"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr ""
@@ -1358,7 +1358,7 @@ msgstr ""
msgid "Extra color adjustments"
msgstr ""
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1545,10 +1545,10 @@ msgstr "Gammakorrektion"
msgid "Selects the gamma corrected transfer curve"
msgstr "Vælger gammakorrigeret overføringskurve"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1559,82 +1559,84 @@ msgstr "Vælger gammakorrigeret overføringskurve"
msgid "Flatbed"
msgstr "Flatbed"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr ""
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, fuzzy, no-c-format
msgid "ADF Back"
msgstr "ADF"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, fuzzy, no-c-format
msgid "ADF Duplex"
msgstr "Dobbeltsidet"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Print"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Dobbeltsidet"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Rød"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Grøn"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blå"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Forbedring"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Forbedring"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Forbedring"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1643,24 +1645,24 @@ msgstr "Forbedring"
msgid "None"
msgstr "Ingen"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1684,40 +1686,39 @@ msgstr ""
"Brug ikke blokerende IO for sane_read(), hvis det er understøttet af "
"forenden."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Enkeltsidet"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Dobbeltsidet"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Filmenhed"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automatisk dokumentføder"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Positiv film"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negativ film"
@@ -1733,58 +1734,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Fokusér 2,5 mm over glaspladen"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Halvtone A (hård tone)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Halvtone B (blød tone)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Halvtone C (net/skærm)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Dithering A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Dithering B (4x4 spiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Dithering C (4x4 net/skærm)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Dithering D (8x4 net/skærm)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tekstforbedringsteknologi"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Hent mønster A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Hent mønster B"
@@ -1794,7 +1795,7 @@ msgstr "Hent mønster B"
msgid "No Correction"
msgstr "Ingen korrektion"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Brugerdefineret"
@@ -1819,33 +1820,33 @@ msgstr "Blæk printere"
msgid "CRT monitors"
msgstr "CRT skærme"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Standard"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Udskrift med høj opløsning"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Udskrift med lav opløsning"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Udskrift med høj kontrast"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Brugerdefineret (gamma=1,0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Brugerdefineret (gamma=1,8)"
@@ -1883,37 +1884,37 @@ msgstr "A4"
msgid "Max"
msgstr "Maks"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Vælger halvtone."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Udfald"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Vælger udfaldet."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Vælger lyshed."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Skarphed"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Farvekorrektion"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr "Fastsætter farvekorrektiontabellen for den valgte uddataenhed."
@@ -2003,7 +2004,7 @@ msgstr "Øger det røde, baseret på blåt niveau"
msgid "Controls blue level"
msgstr "Fastsætter blåt niveau"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Spejlvend billedet."
@@ -2013,7 +2014,7 @@ msgstr "Spejlvend billedet."
msgid "Fast preview"
msgstr "Hurtig forhåndsvisning"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Automatisk områdeopdeling"
@@ -2043,49 +2044,49 @@ msgstr "Angiver zoomfaktoren som skanneren skal bruge"
msgid "Quick format"
msgstr "Hurtig format"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Tilvalgsudstyr"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Skub ud"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Skub arket i den automatiske arkføder ud"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Automatisk skub ud"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Skub dokumentet ud efter skanning"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "ADF-tilstand"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Vælger ADF tilstand (enkeltsidet/dobbeltsidet)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Skuffe"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Vælg fra hvilken skuffe der skal skannes"
@@ -2125,56 +2126,66 @@ msgstr ""
"Når skankommando er sendt, starter skanningen først når der er trykket "
"på knappen på skanneren."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, fuzzy, no-c-format
msgid "Positive Slide"
msgstr "Positiv film"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, fuzzy, no-c-format
msgid "Negative Slide"
msgstr "Negativ film"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Brugerdefineret"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Skub arket i den automatiske arkføder ud"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Ingen korrektion"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Analog gammakorrektion"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Ingen korrektion"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Analog gammakorrektion"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/de.po b/po/de.po
index 564f7cc..9b318b9 100644
--- a/po/de.po
+++ b/po/de.po
@@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.29\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2020-08-10 22:47+0200\n"
"Last-Translator: Rolf Bensch <rolf@bensch-online.de>\n"
"Language-Team: \n"
@@ -38,8 +38,8 @@ msgid "Standard"
msgstr "Standard"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -68,7 +68,7 @@ msgstr "Scanbereich"
msgid "Enhancement"
msgstr "Verbesserung"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1329,7 +1329,7 @@ msgstr "Filmscanner"
msgid "flatbed scanner"
msgstr "Flachbettscanner"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Filmtyp"
@@ -1359,7 +1359,7 @@ msgstr "Hardwareauflösung"
msgid "Use only hardware resolutions"
msgstr "Nur Hardwareauflösungen verwenden"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Fokus"
@@ -1405,7 +1405,7 @@ msgstr "Seitenränder"
msgid "Extra color adjustments"
msgstr "Erweiterte Farbeinstellungen"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1595,10 +1595,10 @@ msgstr "Gammakorrektur"
msgid "Selects the gamma corrected transfer curve"
msgstr "Wählt die korrigierte Gammakurve aus"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1609,82 +1609,84 @@ msgstr "Wählt die korrigierte Gammakurve aus"
msgid "Flatbed"
msgstr "Flachbett"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "Automatischer Dokumenteneinzug vorne"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "Automatischer Dokumenteneinzug hinten"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "Dokumenteneinzug mit Duplex"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "Karte Vorderseite"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "Karte Rückseite"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "Karte Duplex"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Rot"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Grün"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blau"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Rot verstärken"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Grün verstärken"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Blau verstärken"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1693,24 +1695,24 @@ msgstr "Blau verstärken"
msgid "None"
msgstr "Kein"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "Schwellwert für Leerseitenerkennung"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr "Seiten mit geringer Pixeldichte überspringen"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1734,40 +1736,39 @@ msgstr ""
"Verwende nichtblockierndes IO für sane_read(), wenn das durch das "
"Frontend unterstützt wird."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Einseitig"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Duplex"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Durchlichtaufsatz"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automatischer Dokumenteneinzug"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Film positiv"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Film negativ"
@@ -1783,58 +1784,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Fokus 2.5mm über dem Glas"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Halbton A (hart)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Halbton B (weich)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Halbton C"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Dithering A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Dithering B (4x4 Spiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Dithering C (4x4 Net Screen)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Dithering D (8x4 Net Screen)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Technik zur Textverbesserung"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Übertrage Muster A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Übertrage Muster B"
@@ -1844,7 +1845,7 @@ msgstr "Übertrage Muster B"
msgid "No Correction"
msgstr "Keine Korrektur"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Benutzerdefiniert"
@@ -1869,33 +1870,33 @@ msgstr "Tintenstrahldrucker"
msgid "CRT monitors"
msgstr "Monitore"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Standardeinstellung"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Drucken mit hoher Auflösung"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Drucken mit geringer Auflösung"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Drucken mit hohem Kontrast"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Benutzerdefiniert (Gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Benutzerdefiniert (Gamma=1.8)"
@@ -1933,37 +1934,37 @@ msgstr "A4"
msgid "Max"
msgstr "Maximal"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Wählt den Halbton aus."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Blindfarbe"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Wählt die Blindfarbe."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Wählt die Helligkeit."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Schärfe"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Farbkorrektur"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, 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."
@@ -2053,7 +2054,7 @@ msgstr "Erhöhe den Rotanteil basierend auf dem Blauwert"
msgid "Controls blue level"
msgstr "Legt den Blauwert fest"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Das Bild spiegeln."
@@ -2063,7 +2064,7 @@ msgstr "Das Bild spiegeln."
msgid "Fast preview"
msgstr "Schnelle Vorschau"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Automatische Auswahl des Scanbereichs"
@@ -2093,49 +2094,49 @@ msgstr "Definiert den Vergrösserungsfaktor, der vom Scanner benutzt wird"
msgid "Quick format"
msgstr "Schnellformat"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Optionales Zubehör"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Auswerfen"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Wirft das Blatt aus dem automatischen Dokumenteneinzug aus"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Automatischer Auswurf"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Dokument nach dem Scannen auswerfen"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Dokumenteneinzug Modus"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Wählt den Duplex-Modus aus (einseitig/doppelseitig)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Schacht"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Wähle den Schacht zum Scannen aus"
@@ -2175,56 +2176,66 @@ msgstr ""
"Beginne mit dem Scannen erst, wenn nach dem Senden des Scankommandos die "
"Taste am Scanner gedrückt wird."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "Durchlichtaufsatz 8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Infrarot"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Dia positiv"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Dia negativ"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Eingebautes CCT-Profil"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Benutzerdefiniertes CCT-Profil"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr "Lade"
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Lade ein Blatt im automatischen Dokumenteneinzug"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, no-c-format
msgid "ADF Skew Correction"
msgstr "ADF-Schräglaufkorrektur"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, no-c-format
msgid "Enables ADF skew correction"
msgstr "Aktiviert ADF-Schräglaufkorrektur"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "ADF-Schräglaufkorrektur"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Aktiviert ADF-Schräglaufkorrektur"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/en_GB.po b/po/en_GB.po
index 9b4a342..1e5a89f 100644
--- a/po/en_GB.po
+++ b/po/en_GB.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.31\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
-"PO-Revision-Date: 2021-01-24 09:57-0800\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
+"PO-Revision-Date: 2021-09-20 20:30-0700\n"
"Last-Translator: Ralph Little <littlesincanada@yahoo.co.uk>\n"
"Language-Team: British English <kde-i18n-doc@kde.org>\n"
"Language: en_GB\n"
@@ -28,8 +28,8 @@ msgid "Standard"
msgstr "Standard"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -58,7 +58,7 @@ msgstr "Geometry"
msgid "Enhancement"
msgstr "Enhancement"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1280,7 +1280,7 @@ msgstr "film scanner"
msgid "flatbed scanner"
msgstr "flatbed scanner"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Film type"
@@ -1310,7 +1310,7 @@ msgstr "Hardware resolution"
msgid "Use only hardware resolutions"
msgstr "Use only hardware resolutions"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Focus"
@@ -1355,7 +1355,7 @@ msgstr "Scan margins"
msgid "Extra color adjustments"
msgstr "Extra colour adjustments"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1543,10 +1543,10 @@ msgstr "Gamma Correction"
msgid "Selects the gamma corrected transfer curve"
msgstr "Selects the gamma corrected transfer curve"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1557,82 +1557,84 @@ msgstr "Selects the gamma corrected transfer curve"
msgid "Flatbed"
msgstr "Flatbed"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "ADF Front"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "ADF Back"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "ADF Duplex"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "Card Front"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "Card Back"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "Card Duplex"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Red"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Green"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blue"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Enhance Red"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Enhance Green"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Enhance Blue"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1641,24 +1643,24 @@ msgstr "Enhance Blue"
msgid "None"
msgstr "None"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "Software blank skip percentage"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr "Request driver to discard pages with low percentage of dark pixels"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1680,40 +1682,39 @@ msgstr "Use non-blocking IO"
msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr "Use non-blocking IO for sane_read() if supported by the frontend."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Simplex"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Duplex"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Transparency Unit"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automatic Document Feeder"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Positive Film"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negative Film"
@@ -1729,58 +1730,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Focus 2.5mm above glass"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Halftone A (Hard Tone)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Halftone B (Soft Tone)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Halftone C (Net Screen)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Dither A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Dither B (4x4 Spiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Dither C (4x4 Net Screen)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Dither D (8x4 Net Screen)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Text Enhanced Technology"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Download pattern A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Download pattern B"
@@ -1790,7 +1791,7 @@ msgstr "Download pattern B"
msgid "No Correction"
msgstr "No Correction"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "User defined"
@@ -1815,33 +1816,33 @@ msgstr "Ink-jet printers"
msgid "CRT monitors"
msgstr "CRT monitors"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Default"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "High density printing"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Low density printing"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "High contrast printing"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "User defined (Gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "User defined (Gamma=1.8)"
@@ -1879,37 +1880,37 @@ msgstr "A4"
msgid "Max"
msgstr "Max"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Selects the halftone."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Dropout"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Selects the dropout."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Selects the brightness."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Sharpness"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Colour correction"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr "Sets the colour correction table for the selected output device."
@@ -1999,7 +2000,7 @@ msgstr "Adds to red based on blue level"
msgid "Controls blue level"
msgstr "Controls blue level"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Mirror the image."
@@ -2009,7 +2010,7 @@ msgstr "Mirror the image."
msgid "Fast preview"
msgstr "Fast preview"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Auto area segmentation"
@@ -2039,49 +2040,49 @@ msgstr "Defines the zoom factor the scanner will use"
msgid "Quick format"
msgstr "Quick format"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Optional equipment"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Eject"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Eject the sheet in the ADF"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Auto eject"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Eject document after scanning"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "ADF Mode"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Selects the ADF mode (simplex/duplex)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Bay"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Select bay to scan"
@@ -2121,56 +2122,66 @@ msgstr ""
"After sending the scan command, wait until the button on the scanner is "
"pressed to actually start the scan process."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Infrared"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Positive Slide"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Negative Slide"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Built in CCT profile"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "User defined CCT profile"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr "Load"
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Load a sheet in the ADF"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, no-c-format
msgid "ADF Skew Correction"
msgstr "ADF Skew Correction"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, no-c-format
msgid "Enables ADF skew correction"
msgstr "Enables ADF skew correction"
+#: backend/epsonds.c:2063
+#, no-c-format
+msgid "ADF CRP Correction"
+msgstr "ADF CRP Correction"
+
+#: backend/epsonds.c:2065
+#, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Enables ADF auto cropping"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/eo.po b/po/eo.po
index fc50023..a5a78d9 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends.eo\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2007-12-08 13:28+0100\n"
"Last-Translator: A.C.Codazzi\n"
"Language-Team: <it@li.org>\n"
@@ -31,8 +31,8 @@ msgid "Standard"
msgstr ""
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -61,7 +61,7 @@ msgstr "Geometrio"
msgid "Enhancement"
msgstr "Plibonigo"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1295,7 +1295,7 @@ msgstr "skanilo por negativoj"
msgid "flatbed scanner"
msgstr "plata skanilo"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Filmo"
@@ -1325,7 +1325,7 @@ msgstr "Hardvara difino"
msgid "Use only hardware resolutions"
msgstr "Uzu nur hardvarajn difinojn"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Fokuso"
@@ -1370,7 +1370,7 @@ msgstr "Marĝenoj por skanado"
msgid "Extra color adjustments"
msgstr "Aliaj aranĝoj de koloro"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1559,10 +1559,10 @@ msgstr "Korektado de Gama"
msgid "Selects the gamma corrected transfer curve"
msgstr "Ĝi elektas la kurbon de korektado de gama"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1573,82 +1573,84 @@ msgstr "Ĝi elektas la kurbon de korektado de gama"
msgid "Flatbed"
msgstr "Fiksa ebeno"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, fuzzy, no-c-format
msgid "ADF Front"
msgstr "Kovrilo de ADF estas malfermita"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, fuzzy, no-c-format
msgid "ADF Back"
msgstr "ADF estas blokita"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "Fronta-dorsa ADF"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Presu"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Fronta-dorsa"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Ruĝo"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Verdo"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Bluo"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Plibonigo"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Plibonigo"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Plibonigo"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1657,24 +1659,24 @@ msgstr "Plibonigo"
msgid "None"
msgstr "Nenio"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1697,40 +1699,39 @@ msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
"Ĝi uzas ne-blokantan eneligon por sane_read() se la fasado subtenas ĝin."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Unuopa"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Fronta-dorsa"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Reguligilo de Diafaneco"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Aŭtomata Provizilo de Dokumentoj"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Pozitiva filmo"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negativa filmo"
@@ -1746,58 +1747,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Fokusigo je 2.5mm super la vitro"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Meznuanco A (Duraj tonoj)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Meznuanco B (Delikataj tonoj)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Meznuanco C (Reta ekrano)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Punktismo A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Punktismo B (4x4 Spiralo)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Punktismo C (4x4 Reta ekrano)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Punktismo D (8x4 Reta ekrano)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Teknologio por Plibonigo de Teksto"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Elŝutu modelon A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Elŝutu modelon B"
@@ -1807,7 +1808,7 @@ msgstr "Elŝutu modelon B"
msgid "No Correction"
msgstr "Neniu korektado"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Agordita de la uzanto"
@@ -1832,33 +1833,33 @@ msgstr "Inkoŝprucaj printiloj"
msgid "CRT monitors"
msgstr "CRT ekranoj"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Defaŭlto"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Altdensa printado"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Malaltdensa printado"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Altkontrasta printado"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Agordita de la uzanto (Gama=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Agordita de la uzanto (Gama=1.8)"
@@ -1896,37 +1897,37 @@ msgstr "A4"
msgid "Max"
msgstr "Maks"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Elektu meznuancojn."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Eskludado"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Ĝi elektas la eskludadon."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Ĝi elektas la helecon."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Neteco"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Korektado de koloro"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2017,7 +2018,7 @@ msgstr "Aldonu ruĝon surbaze de nivelo de bluo"
msgid "Controls blue level"
msgstr "Mastrumu nivelon de bluo"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Spegulu bildon"
@@ -2027,7 +2028,7 @@ msgstr "Spegulu bildon"
msgid "Fast preview"
msgstr "Tuja antaŭmontro"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Aŭtomata segmentado de areo"
@@ -2057,49 +2058,49 @@ msgstr "Ĝi agordas la faktoron de zomo kiun la skanilo uzos"
msgid "Quick format"
msgstr "Formato rapido"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Akcesora ekipaĵo"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Elpelo"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Ĝi elpelas la folion el aŭtomata provizilo"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Mem-elpelo"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Ĝi elpelas la dokumento post la skanado"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Moduso por ADF"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Ĝi elektas la ADF-moduso (unuopa/fronta-dorsa)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Kesto"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Ĝi elektas la keston por skani"
@@ -2139,56 +2140,66 @@ msgstr ""
"Post la sendo de la skan-komando, ĝi atendas la premon de la butono de "
"la skanilo por startigi la skanadon."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Pozitiva lumbildo"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Negativa lumbildo"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Agordita de la uzanto"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Ĝi elpelas la folion el aŭtomata provizilo"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Neniu korektado"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Korektado de analoga gama"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Neniu korektado"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Korektado de analoga gama"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/es.po b/po/es.po
index d59f512..77c65f9 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2009-06-25 10:22+0100\n"
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
"Language-Team: GALPon MiniNo <minino@galpon.org>\n"
@@ -30,8 +30,8 @@ msgid "Standard"
msgstr "Estándar"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -60,7 +60,7 @@ msgstr "Geometría"
msgid "Enhancement"
msgstr "Mejora"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1302,7 +1302,7 @@ msgstr "escáner de películas"
msgid "flatbed scanner"
msgstr "escáner plano"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Tipo de película"
@@ -1332,7 +1332,7 @@ msgstr "Resolución del hardware"
msgid "Use only hardware resolutions"
msgstr "Usar sólo resoluciones de hardware"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Enfoque"
@@ -1379,7 +1379,7 @@ msgstr "Márgenes de escaneo"
msgid "Extra color adjustments"
msgstr "Ajustes de color extra"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1573,10 +1573,10 @@ msgstr "Corrección gamma"
msgid "Selects the gamma corrected transfer curve"
msgstr "Selecciona la curva de transferencia de la corrección gamma"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1587,82 +1587,84 @@ msgstr "Selecciona la curva de transferencia de la corrección gamma"
msgid "Flatbed"
msgstr "Plana"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, fuzzy, no-c-format
msgid "ADF Front"
msgstr "la tapa del alimentador está abierta"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, fuzzy, no-c-format
msgid "ADF Back"
msgstr "atasco en el alimentador"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "Alimentador a dos caras"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Imprimir"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Dos caras"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Rojo"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Verde"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Azul"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Mejora"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Mejora"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Mejora"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1671,24 +1673,24 @@ msgstr "Mejora"
msgid "None"
msgstr "Ninguno"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1711,40 +1713,39 @@ msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
"Usar una E/S no bloqueante para sane_red() si lo permite la interfaz."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Una cara"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Dos caras"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Unidad de transparencias"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Alimentador automático de documentos (ADF)"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Película en positivo"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Película en negativo"
@@ -1760,58 +1761,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Enfoque a 2.5mm sobre el cristal"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Medios tonos A (tonos duros)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Medios tonos B (tonos suaves)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Medios tonos C (matizado)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Trama A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Trama B (4x4 espiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Trama C (4x4 matizado)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Trama D (8x4 matizado)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tecnología de mejora de texto"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Descargar patrón A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Descargar patrón B"
@@ -1821,7 +1822,7 @@ msgstr "Descargar patrón B"
msgid "No Correction"
msgstr "Sin corrección"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Definida por el usuario"
@@ -1846,33 +1847,33 @@ msgstr "Impresoras de inyección de tinta"
msgid "CRT monitors"
msgstr "Monitores CRT"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Predeterminado"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Impresión de alta densidad"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Impresión de baja densidad"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Impresión de alto contraste"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Definido por el usuario (gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Definido por el usuario (gamma=1.8)"
@@ -1910,37 +1911,37 @@ msgstr "A4"
msgid "Max"
msgstr "Máx"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Selecciona medios tonos"
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Exclusión"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Seleccionar lo que se va a excluir."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Selecciona el brillo."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Enfoque"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Corrección de color"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2032,7 +2033,7 @@ msgstr "Añade rojo basándose en el nivel de azul."
msgid "Controls blue level"
msgstr "Controla el nivel de azul"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Invertir la imagen."
@@ -2042,7 +2043,7 @@ msgstr "Invertir la imagen."
msgid "Fast preview"
msgstr "Vista previa rápida"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Segmentación automática de área"
@@ -2072,49 +2073,49 @@ msgstr "Define el factor de zoom que usará el escáner"
msgid "Quick format"
msgstr "Formato rápido"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Equipamiento opcional"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Expulsar"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Expulsar la hoja del alimentador"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Expulsión automática"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Expulsar el documento después del escaneo"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Modo alimentador"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Seleccionar el modo del alimentador (una cara/dos caras)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Bahía"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Seleccione la bahía para escanear"
@@ -2156,56 +2157,66 @@ msgstr ""
"Después de enviar la orden de escanear, esperar hasta que se presione el "
"botón del escáner para empezar realmente el proceso de escaneo."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Diapositiva en positivo"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Diapositiva en negativo"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Definida por el usuario"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Expulsar la hoja del alimentador"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Sin corrección"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Desactivar corrección gamma"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Sin corrección"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Desactivar corrección gamma"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/fi.po b/po/fi.po
index b0f8dc4..da72813 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.11\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2007-12-17 23:00+0100\n"
"Last-Translator: Harri Järvi <harri.jarvi@tut.fi>\n"
"Language-Team: Debian l10n Finnish <debian-l10n-finnish@lists.debian."
@@ -27,8 +27,8 @@ msgid "Standard"
msgstr ""
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -57,7 +57,7 @@ msgstr "Geometria"
msgid "Enhancement"
msgstr "Parannus"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1275,7 +1275,7 @@ msgstr "Tasokuvanlukija"
msgid "flatbed scanner"
msgstr "Tasokuvanlukija"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Filmin tyyppi"
@@ -1305,7 +1305,7 @@ msgstr "Kuvanluvun tarkkuus"
msgid "Use only hardware resolutions"
msgstr "Näyttää lyhyen tarkkuuslistan"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr ""
@@ -1350,7 +1350,7 @@ msgstr ""
msgid "Extra color adjustments"
msgstr ""
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1537,10 +1537,10 @@ msgstr "Gamma-korjaus"
msgid "Selects the gamma corrected transfer curve"
msgstr "Valitsee gamma-korjauskäyrän"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1551,82 +1551,84 @@ msgstr "Valitsee gamma-korjauskäyrän"
msgid "Flatbed"
msgstr "Taso"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr ""
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, fuzzy, no-c-format
msgid "ADF Back"
msgstr "ADF"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, fuzzy, no-c-format
msgid "ADF Duplex"
msgstr "Kaksipuolinen"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Tulosta"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Kaksipuolinen"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Punainen"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Vihreä"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Sininen"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Parannus"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Parannus"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Parannus"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1635,24 +1637,24 @@ msgstr "Parannus"
msgid "None"
msgstr "Ei mikään"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1674,40 +1676,39 @@ msgstr "Käytä non-blocking IO"
msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr "sane_read käyttää non-blocking IO:ta."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Yksipuolinen"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Kaksipuolinen"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Läpinäkyvyysyksikkö"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automaattinen syöttö"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Positiivifilmi"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negatiivifilmi"
@@ -1723,58 +1724,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Kohdistus 2,5 mm lasin yläpuolella"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Rasteri A (Hard Tone)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Rasteri B (Soft Tone)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Rasteri C (Net Screen)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Rasteri A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Rasteri B (4x4 Spiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Rasteri C (4x4 Net Screen)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Rasteri D (8x4 Net Screen)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tekstin parannusmenetelmä"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Ladattu kuvio A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Ladattu kuvio B"
@@ -1784,7 +1785,7 @@ msgstr "Ladattu kuvio B"
msgid "No Correction"
msgstr "Ei korjausta"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Käyttäjän määrittelemä"
@@ -1809,33 +1810,33 @@ msgstr "Mustesuihkutulostimet"
msgid "CRT monitors"
msgstr "Loisteputkinäytöt"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Oletus"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Korkeatarkkuuksinen tulostus"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Matalatarkkuuksinen tulostus"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Suuri kontrastinen tulostus"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Käyttäjän määrittelemä (Gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Käyttäjän määrittelemä (Gamma=1.8)"
@@ -1873,37 +1874,37 @@ msgstr "A4"
msgid "Max"
msgstr "Koko alue"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Valitsee rasterin"
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr ""
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr ""
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Valitsee kirkkauden."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Terävyys"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Värikorjaus"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr "Valitsee värikorjaustaulukon valitulle tuloslaitteelle."
@@ -1993,7 +1994,7 @@ msgstr "Lisää punaista sinisen määrän perusteella"
msgid "Controls blue level"
msgstr "Määrää sinisen määrän"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Peilaa kuvan."
@@ -2003,7 +2004,7 @@ msgstr "Peilaa kuvan."
msgid "Fast preview"
msgstr "Nopea esikatselu"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Automaattinen osittelu"
@@ -2033,49 +2034,49 @@ msgstr "Määrää kuvanlukijan käyttämän zoom-kertoimen"
msgid "Quick format"
msgstr "Nopea formaatti"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Lisävaruste"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Poista"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Poista kohde syöttölaitteesta"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Automaattinen poisto"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Poista kohde kuvanluvun jälkeen"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Syötttapa"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Valitsee syöttötavan (yksi-/kaksipuolinen)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Taso"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Valitsee kuvanluvun tasolta"
@@ -2114,56 +2115,66 @@ msgstr ""
"Kuvanlukukomennon lähettämisen jälkeen, odota kunnes kuvanlukijan "
"painiketta todella painetaan, ennen kuvanluvun aloittamista."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, fuzzy, no-c-format
msgid "Positive Slide"
msgstr "Positiivifilmi"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, fuzzy, no-c-format
msgid "Negative Slide"
msgstr "Negatiivifilmi"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Käyttäjän määrittelemä"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Poista kohde syöttölaitteesta"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Ei korjausta"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Analoginen gammakorjaus"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Ei korjausta"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Analoginen gammakorjaus"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/fr.po b/po/fr.po
index b01cf12..8d304a4 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -44,7 +44,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.31\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2020-07-24 21:53+0000\n"
"Last-Translator: Thierry HUCHARD <thierry@ordissimo.com>\n"
"Language-Team:\n"
@@ -65,8 +65,8 @@ msgid "Standard"
msgstr "Général"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -95,7 +95,7 @@ msgstr "Aire de numérisation"
msgid "Enhancement"
msgstr "Réglages fins"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1346,7 +1346,7 @@ msgstr "numériseur de film"
msgid "flatbed scanner"
msgstr "numériseur à plat"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Type de film"
@@ -1376,7 +1376,7 @@ msgstr "Echantillonnage matériel"
msgid "Use only hardware resolutions"
msgstr "Utilise seulement les valeurs résolution du matériel"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Mise au point"
@@ -1423,7 +1423,7 @@ msgstr "Marges"
msgid "Extra color adjustments"
msgstr "Plus de réglages de couleur"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1611,10 +1611,10 @@ msgstr "Correction gamma"
msgid "Selects the gamma corrected transfer curve"
msgstr "Sélectionne la courbe de correction gamma"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1625,82 +1625,84 @@ msgstr "Sélectionne la courbe de correction gamma"
msgid "Flatbed"
msgstr "A plat"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "Chargeur automatique de documents, recto"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "Chargeur automatique de documents, verso"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "Chargeur automatique de documents, recto-verso"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "Recto de la carte"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "Verso de la carte"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "Recto-verso de la carte"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Rouge"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Vert"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Bleu"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Augmente le rouge"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Augmente le vert"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Augmente le bleu"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1709,26 +1711,26 @@ msgstr "Augmente le bleu"
msgid "None"
msgstr "Aucun(e)"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "Pourcentage logiciel du blanc ignoré"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
"Demande au pilote d'éliminer les pages ayant un faible pourcentage de "
"pixels foncés"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1752,40 +1754,39 @@ msgstr ""
"Utilise un méchanisme d'E/S non bloquantes pour sane_read(), si supporté "
"par l'application."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Recto"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Recto-verso"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Unité de Transparence"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Chargeur automatique de document"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Film positif"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Film négatif"
@@ -1801,58 +1802,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Faire le point 2,5 mm au-dessus de la vitre"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Demi-teinte A (teinte dure)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Demi-teinte B (teinte douce)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Demi-teinte C (trame nette)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Dither A (Bayer 4x4)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Dither B (Spiral 4x4)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Dither C (trame nette 4x4)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Dither C (trame nette 4x4)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Technologie d'amélioration du texte"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Télécharger le motif A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Télécharger le motif B"
@@ -1862,7 +1863,7 @@ msgstr "Télécharger le motif B"
msgid "No Correction"
msgstr "Pas de correction"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Spécifié par l'utilisateur"
@@ -1887,33 +1888,33 @@ msgstr "Imprimantes à jet d'encre"
msgid "CRT monitors"
msgstr "Moniteurs à tube cathodique"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Valeur par défaut"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Impression haute définition"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Impression basse définition"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Impression avec contraste élevé"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Spécifié par l'utilisateur (gamma=1,0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Spécifié par l'utilisateur (gamma=1,8)"
@@ -1951,12 +1952,12 @@ msgstr "A4"
msgid "Max"
msgstr "Max"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Sélectionne la demi-teinte."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Exclusion"
@@ -1964,27 +1965,27 @@ msgstr "Exclusion"
# Dictionnary gives me 'marginal' for dropout. Sounds like
# a part of the scan area is 'droped out', I mean excluded.
# No, it is one of the colours that is excluded.
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Sélectionne le couleur exclu."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Sélectionne la brillance."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Netteté"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Correction de couleur"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2076,7 +2077,7 @@ msgstr "Ajoute au rouge en fonction du niveau de bleu"
msgid "Controls blue level"
msgstr "Contrôle le niveau de bleu"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Effectue une symétrie verticale de l'image."
@@ -2086,7 +2087,7 @@ msgstr "Effectue une symétrie verticale de l'image."
msgid "Fast preview"
msgstr "Aperçu rapide"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Séparation automatique"
@@ -2116,51 +2117,51 @@ msgstr "Définit le facteur de zoom utilisé par le scanner"
msgid "Quick format"
msgstr "Format rapide"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Equipement optionnel"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Ejecter"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Ejecter la feuille du chargeur automatique"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Ejection automatique"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Ejecte le document après la numérisation"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Mode du chargeur automatique de documents"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr ""
"Sélectionne le mode du chargeur automatique de documents (recto/recto-"
"verso)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Baie"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Sélectionne la baie contenant le document à numériser"
@@ -2200,56 +2201,66 @@ msgstr ""
"Aprés avoir envoyé la commande de numérisation, attendre l'appui du "
"bouton avant de commencer la numérisation."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Infra-rouge"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Diapositive positive"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Diapositive négative"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Profil de température de couleurs interne"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Profil de température de couleurs utilsateur"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr "Chargement"
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Insérer un feuille dans le bach du chargeur automatique"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, no-c-format
msgid "ADF Skew Correction"
msgstr "Correction des erreurs de l'ADF"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, no-c-format
msgid "Enables ADF skew correction"
msgstr "Activer la correction des erreurs de l'ADF"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Correction des erreurs de l'ADF"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Activer la correction des erreurs de l'ADF"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/gl.po b/po/gl.po
index 3e4ba54..d700bfb 100644
--- a/po/gl.po
+++ b/po/gl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2009-06-25 10:22+0100\n"
"Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
"Language-Team: Galician <proxecto@trasno.net>\n"
@@ -31,8 +31,8 @@ msgid "Standard"
msgstr "Estándar"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -61,7 +61,7 @@ msgstr "Xeometría"
msgid "Enhancement"
msgstr "Optimización"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1307,7 +1307,7 @@ msgstr "escáner de filmes"
msgid "flatbed scanner"
msgstr "escáner plano"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Tipo de filme"
@@ -1337,7 +1337,7 @@ msgstr "Resolución do hardware"
msgid "Use only hardware resolutions"
msgstr "Usar só resolucións do hardware"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Enfoque"
@@ -1384,7 +1384,7 @@ msgstr "Marxes de escaneo"
msgid "Extra color adjustments"
msgstr "Axustes de cor extra"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1576,10 +1576,10 @@ msgstr "Corrección gamma"
msgid "Selects the gamma corrected transfer curve"
msgstr "Selecciona a curva de transferencia da corrección gamma"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1590,82 +1590,84 @@ msgstr "Selecciona a curva de transferencia da corrección gamma"
msgid "Flatbed"
msgstr "Plano"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, fuzzy, no-c-format
msgid "ADF Front"
msgstr "A tapa do alimentador está aberta"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, fuzzy, no-c-format
msgid "ADF Back"
msgstr "Atoamento no alimentador"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "Alimentador dúplex"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Imprimir"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Duas caras"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Vermello"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Verde"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Azul"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Optimización"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Optimización"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Optimización"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1674,24 +1676,24 @@ msgstr "Optimización"
msgid "None"
msgstr "Ningún"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1714,40 +1716,39 @@ msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
"Usar unha E/S non bloqueante para sane_red() se o permite a interface."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Unha cara"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Duas caras"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Unidade de transparencias"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Alimentador automático de documentos (ADF)"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Filme en positivo"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Filme en negativo"
@@ -1763,58 +1764,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Enfoque a 2.5mm sobre o cristal"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Medios tons A (tons duros)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Medios tons B (tons suaves)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Medios tons C (matizado)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Trama A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Trama B (4x4 espiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Trama C (4x4 matizado)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Trama D (8x4 matizado)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tecnoloxia de optimización de texto"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Descargar patrón A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Descargar patrón B"
@@ -1824,7 +1825,7 @@ msgstr "Descargar patrón B"
msgid "No Correction"
msgstr "Sen corrección"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Definida polo usuario"
@@ -1849,33 +1850,33 @@ msgstr "Impresoras de inxección de tinta"
msgid "CRT monitors"
msgstr "Monitores CRT"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Predeterminado"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Impresión de alta densidade"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Impresión de baixa densidade"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Impresión de alto contraste"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Definido polo usuario (gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Definido polo usuario (gamma=1.8)"
@@ -1913,37 +1914,37 @@ msgstr "A4"
msgid "Max"
msgstr "Máx"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Escolle o medios tons"
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Exclusión"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Escoller o que se vai a excluir"
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Escoller o brillo"
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Nitidez"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Corrección da cor"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2035,7 +2036,7 @@ msgstr "Engade vermello baseándose no nivel de azul"
msgid "Controls blue level"
msgstr "Controla o nivel de azul"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Reflectir a imaxe."
@@ -2045,7 +2046,7 @@ msgstr "Reflectir a imaxe."
msgid "Fast preview"
msgstr "Vista previa rápida"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Segmentación automática da área"
@@ -2075,49 +2076,49 @@ msgstr "Define o factor de zoom que vai usar o escáner"
msgid "Quick format"
msgstr "Formato rápido"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Equipamento opcional"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Expulsar"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Expulsar a folla do alimentador"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Expulsión automática"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Expulsar o documento despois do escaneo"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Modo alimentador"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Escoller o modo do alimentador (unha cara/duas caras)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Badía"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Escolla a badía para escanear"
@@ -2159,56 +2160,66 @@ msgstr ""
"Despois de enviar a orde de escaneo, agardar até que se prema no botón "
"do escáner para comezar verdadeiramente o proceso de escaneo."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Diapositiva en positivo"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Diapositiva en negativo"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Definida polo usuario"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Expulsar a folla do alimentador"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Sen corrección"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Desactivar a corrección gamma"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Sen corrección"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Desactivar a corrección gamma"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/he.po b/po/he.po
index 269c814..fed8cd5 100644
--- a/po/he.po
+++ b/po/he.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.27git\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2018-09-16 22:30+0300\n"
"Last-Translator: Elishai Shkury <e1907@mm.st>\n"
"Language-Team: Hebrew\n"
@@ -28,8 +28,8 @@ msgid "Standard"
msgstr "סטנדרט"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -58,7 +58,7 @@ msgstr "גיאומטריה"
msgid "Enhancement"
msgstr "הגדלה"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1270,7 +1270,7 @@ msgstr "סורק סרט"
msgid "flatbed scanner"
msgstr "סורק שטוח"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "סוג סרט"
@@ -1300,7 +1300,7 @@ msgstr "רזולוציית חומרה"
msgid "Use only hardware resolutions"
msgstr "השתמש רק ברזולוציות חומרה"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "פוקוס"
@@ -1345,7 +1345,7 @@ msgstr "סרוק שוליים"
msgid "Extra color adjustments"
msgstr "התאמות צבע נוספות"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1532,10 +1532,10 @@ msgstr "תיקון גמה"
msgid "Selects the gamma corrected transfer curve"
msgstr "בוחר את עקום ההעברה מתוקן הגמה"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1546,82 +1546,84 @@ msgstr "בוחר את עקום ההעברה מתוקן הגמה"
msgid "Flatbed"
msgstr "סורק שטוח"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "חזית מזין מסמכים אוטומטי"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "אחורי מזין מסמכים אוטומטי"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "דו צדדי מזין מסמכים אוטומטי"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "חזית לוח"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "אחורי לוח"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "דו צדדי לוח"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "אדום"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "ירוק"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "כחול"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "שפר אדום"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "שפר ירוק"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "שפר כחול"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1630,24 +1632,24 @@ msgstr "שפר כחול"
msgid "None"
msgstr "אף אחד"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "אחוז דילוג מקום ריק של תוכנה"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr "בקש מהדרייבר לזנוח עמודים עם אחוז נמוך של פיקסלים כהים"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1669,40 +1671,39 @@ msgstr "השתמש בקלט פלט לא חוסם"
msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr "השתמש בקלט פלט לא חוסם עבור sane_read() אם נתמך על ידי הממשק."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "חד צדדי"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "דו צדדי"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "יחידת שקיפות"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "מזין מסמכים אוטומטי"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "סרט ממשי"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "סרט תשליל"
@@ -1718,58 +1719,58 @@ msgid "Focus 2.5mm above glass"
msgstr "פוקוס 2.5 מילימטר מעל זכוכית"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "הדפסת רשת A (גוון חזק)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "הדפסת רשת B (גוון חלש)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "הדפסת רשת C (מסך רשת)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Dither A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Dither B (4x4 Spiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Dither C (4x4 Net Screen)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Dither D (8x4 Net Screen)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "טכנולוגיה מועשרת טקסט"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "הורד תבנית A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "הורד תבנית B"
@@ -1779,7 +1780,7 @@ msgstr "הורד תבנית B"
msgid "No Correction"
msgstr "ללא תיקון"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "מוגדר משתמש"
@@ -1804,33 +1805,33 @@ msgstr "מדפסות הזרקת דיו"
msgid "CRT monitors"
msgstr "מסכי CRT"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "ברירת מחדל"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "הדפסה בצפיפות גבוהה"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "הדפסה בצפיפות נמוכה"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "הדפסה בניגודיות גבוהה"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "מוגדר משתמש (גמה=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "מוגדר משתמש (גמה=1.8)"
@@ -1868,37 +1869,37 @@ msgstr "A4"
msgid "Max"
msgstr "מירבי"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "בוחר את הדפסת הרשת."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "נושר"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "בוחר את הנושר."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "בוחר את הבהירות."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "חדות"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "תיקון צבע"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr "קובע את טבלת תיקון הצבע להתקן הפלט הנבחר."
@@ -1988,7 +1989,7 @@ msgstr "מוסיף לאדום בהסתמך על רמת כחול"
msgid "Controls blue level"
msgstr "שולט על רמת כחול"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "בצע תמונת ראי."
@@ -1998,7 +1999,7 @@ msgstr "בצע תמונת ראי."
msgid "Fast preview"
msgstr "תצוגה מקדימה מהירה"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "חילוק שטח אוטומטי"
@@ -2028,49 +2029,49 @@ msgstr "מגדיר את מקדם הזום בשימוש הסורק"
msgid "Quick format"
msgstr "פורמט מהיר"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "ציוד אופציונלי"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "הוצא"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "הוצא את הדף במזין המסמכים האוטומטי"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "הוצאה אוטומטית"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "הוצא מסמך לאחר סריקה"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "מצב מזין מסמכים אוטומטי"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "בוחר את מצב מזין המסמכים האוטומטי (חד צדדי/דו צדדי)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "תא"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "בחר תא לסריקה"
@@ -2109,56 +2110,66 @@ msgstr ""
"לאחר שליחת פקודת הסריקה, חכה עד שהכפתור על הסורק יילחץ כדי להתחיל בפועל "
"את תהליך הסריקה."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "אינפרה אדום"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "שקף ממשי"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "שקף תשליל"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "פרופיל CCT מובנה"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "פרופיל CCT מוגדר משתמש"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "הוצא את הדף במזין המסמכים האוטומטי"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "ללא תיקון"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "כבה תיקון גמה"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "ללא תיקון"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "כבה תיקון גמה"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/hu.po b/po/hu.po
index 875fbd5..00c755b 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2011-04-06 19:50+0200\n"
"Last-Translator: Németh Tamás <ntomasz@uhuklub.hu>\n"
"Language-Team: Hungarian <NONE>\n"
@@ -27,8 +27,8 @@ msgid "Standard"
msgstr "Általános"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -57,7 +57,7 @@ msgstr "Geometria"
msgid "Enhancement"
msgstr "Haladó"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1251,7 +1251,7 @@ msgstr "lapolvasó"
msgid "flatbed scanner"
msgstr "síkágyas lapolvasó"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Filmtípus"
@@ -1281,7 +1281,7 @@ msgstr "Eszköz felbontása"
msgid "Use only hardware resolutions"
msgstr ""
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr ""
@@ -1326,7 +1326,7 @@ msgstr ""
msgid "Extra color adjustments"
msgstr ""
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1513,10 +1513,10 @@ msgstr "Gamma korrekció"
msgid "Selects the gamma corrected transfer curve"
msgstr ""
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1527,82 +1527,84 @@ msgstr ""
msgid "Flatbed"
msgstr "Síkágyas"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr ""
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr ""
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr ""
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Nyomtatás"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr ""
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Vörös"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Zöld"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Kék"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Haladó"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Haladó"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Haladó"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1611,24 +1613,24 @@ msgstr "Haladó"
msgid "None"
msgstr "Nincs"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1650,40 +1652,39 @@ msgstr ""
msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr ""
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr ""
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr ""
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automatikus dokumentum adagoló"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Pozitív film"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negatív film"
@@ -1699,58 +1700,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Fókusz 2,5mm-el az üveg felett"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr ""
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr ""
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr ""
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr ""
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr ""
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr ""
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr ""
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr ""
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr ""
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr ""
@@ -1760,7 +1761,7 @@ msgstr ""
msgid "No Correction"
msgstr "Nincs korrekció"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr ""
@@ -1785,33 +1786,33 @@ msgstr "Tintasugaras nyomtató"
msgid "CRT monitors"
msgstr "CRT monitor"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Alapértelmezett"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr ""
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr ""
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr ""
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr ""
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr ""
@@ -1849,37 +1850,37 @@ msgstr "A4"
msgid "Max"
msgstr "Max"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr ""
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr ""
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr ""
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr ""
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr ""
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Színkorrekció"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -1969,7 +1970,7 @@ msgstr ""
msgid "Controls blue level"
msgstr "A kék csatorna kontrasztja"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Kép tükrözése."
@@ -1979,7 +1980,7 @@ msgstr "Kép tükrözése."
msgid "Fast preview"
msgstr "Gyors előnézet"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr ""
@@ -2009,49 +2010,49 @@ msgstr ""
msgid "Quick format"
msgstr ""
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr ""
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr ""
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr ""
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr ""
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr ""
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr ""
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr ""
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr ""
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr ""
@@ -2086,56 +2087,66 @@ msgid ""
"pressed to actually start the scan process."
msgstr ""
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, fuzzy, no-c-format
msgid "Positive Slide"
msgstr "Pozitív film"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, fuzzy, no-c-format
msgid "Negative Slide"
msgstr "Negatív film"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr ""
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr ""
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Nincs korrekció"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Gamma korrekció"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Nincs korrekció"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Gamma korrekció"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/it.po b/po/it.po
index e751c3c..c05f068 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.18\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2020-08-19 12:06+0200\n"
"Last-Translator: Vincenzo Reale <smart2128@baslug.org>\n"
"Language-Team: Italian <kde-i18n-it@kde.org>\n"
@@ -29,8 +29,8 @@ msgid "Standard"
msgstr "Standard"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -59,7 +59,7 @@ msgstr "Geometria"
msgid "Enhancement"
msgstr "Miglioramento"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1313,7 +1313,7 @@ msgstr "scanner da negativi"
msgid "flatbed scanner"
msgstr "scanner piano"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Pellicola"
@@ -1343,7 +1343,7 @@ msgstr "Risoluzione hardware"
msgid "Use only hardware resolutions"
msgstr "Mostra solo le risoluzioni hardware"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Fuoco"
@@ -1390,7 +1390,7 @@ msgstr "Margini di scansione"
msgid "Extra color adjustments"
msgstr "Altre impostazioni del colore"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1579,10 +1579,10 @@ msgstr "Correzione gamma"
msgid "Selects the gamma corrected transfer curve"
msgstr "Seleziona la curva di correzione gamma"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1593,82 +1593,84 @@ msgstr "Seleziona la curva di correzione gamma"
msgid "Flatbed"
msgstr "Piano fisso"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "Fronte ADF"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "Retro ADF"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "ADF Duplex"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "Fronte della carta"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "Retro della carta"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "Fronte/retro della carta"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Rosso"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Verde"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blu"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Miglioramento rosso"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Miglioramento verde"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Miglioramento blu"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1677,26 +1679,26 @@ msgstr "Miglioramento blu"
msgid "None"
msgstr "Nessuno"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "Percentuale di salto del vuoto del software"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
"Richiedi al driver di eliminare le pagine con una bassa percentuale di "
"pixel scuri"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1720,40 +1722,39 @@ msgstr ""
"Usa la modalità non bloccante di I/O per sane_read() se il frontend la "
"supporta."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Solo fronte"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Fronte e retro"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Adattatore per trasparenze"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Alimentatore automatico dei documenti"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Pellicola positiva"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Pellicola negativa"
@@ -1769,58 +1770,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Messa a fuoco 2,5mm sopra piano di vetro"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Mezzitoni A (hard tone)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Mezzitoni B (soft tone)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Mezzitoni C (net screen)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Dither A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Dither B (4x4 Spiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Dither C (4x4 Net Screen)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Dither D (8x4 Net Screen)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tecnologia di miglioramento del testo"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Scarica il modello A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Scarica il modello B"
@@ -1830,7 +1831,7 @@ msgstr "Scarica il modello B"
msgid "No Correction"
msgstr "Nessuna correzione"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Definito dall'utente"
@@ -1855,33 +1856,33 @@ msgstr "Stampanti a getto d'inchiostro"
msgid "CRT monitors"
msgstr "Monitor CRT"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Default"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Stampa ad alta definizione"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Stampa a bassa definizione"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Stampa a contrasto elevato"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Definito dall'utente (gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Definito dall'utente (gamma=1.8)"
@@ -1919,37 +1920,37 @@ msgstr "A4"
msgid "Max"
msgstr "Massimo"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Seleziona i mezzitoni"
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Esclusione"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Seleziona l'esclusione."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Seleziona la brillantezza."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Nitidezza"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Correzione del colore"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2041,7 +2042,7 @@ msgstr "Modula il rosso sulla base del livello del blu"
msgid "Controls blue level"
msgstr "Controlla del livello del blu"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Effettua una riflessione dell'immagine lungo l'asse verticale"
@@ -2051,7 +2052,7 @@ msgstr "Effettua una riflessione dell'immagine lungo l'asse verticale"
msgid "Fast preview"
msgstr "Anteprima veloce"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Sezionamento automatico dell'area"
@@ -2081,49 +2082,49 @@ msgstr "Definisce il fattore di zoom usato dallo scanner"
msgid "Quick format"
msgstr "Formato rapido"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Dispositivi opzionali"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Espulsione"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Espelle il foglio dall'alimentatore automatico"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Espulsione automatica"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Espelli il documento dopo la scansione"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Modalità ADF"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Seleziona la modalità ADF (solo fronte/fronte-retro)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Cassetto"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Seleziona il cassetto per la scansione"
@@ -2165,56 +2166,66 @@ msgstr ""
"premuto il tasto dello scanner per fare partire il processo di "
"acquisizione."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Infrarosso"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Diapositiva positiva"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Diapositiva negativa"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Profilo CCT integrato"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Profilo CCT definito dall'utente"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr "Carica"
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Carica un foglio nell'ADF"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, no-c-format
msgid "ADF Skew Correction"
msgstr "Correzione dell'inclinazione dell'ADF"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, no-c-format
msgid "Enables ADF skew correction"
msgstr "Abilita la correzione dell'inclinazione dell'ADF"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Correzione dell'inclinazione dell'ADF"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Abilita la correzione dell'inclinazione dell'ADF"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/ja.po b/po/ja.po
index d299081..08331c7 100644
--- a/po/ja.po
+++ b/po/ja.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.20\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2009-10-31 10:30+0900\n"
"Last-Translator: Hiroshi Miura <miurahr@linux.com>\n"
"Language-Team: Japanese <japanese@li.org>\n"
@@ -30,8 +30,8 @@ msgid "Standard"
msgstr "標準"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -60,7 +60,7 @@ msgstr "配置"
msgid "Enhancement"
msgstr "増強"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1261,7 +1261,7 @@ msgstr "フィルムスキャナー"
msgid "flatbed scanner"
msgstr "フラットベッド(平台型)スキャナ"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "フィルムの種類"
@@ -1291,7 +1291,7 @@ msgstr "ハードウエア解像度"
msgid "Use only hardware resolutions"
msgstr "ハードウエア解像度だけを使用"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "焦点"
@@ -1336,7 +1336,7 @@ msgstr "走査の余白"
msgid "Extra color adjustments"
msgstr "追加色調整"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1524,10 +1524,10 @@ msgstr "ガンマ校正"
msgid "Selects the gamma corrected transfer curve"
msgstr "ガンマ補正された変換カーブを選択"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1538,82 +1538,84 @@ msgstr "ガンマ補正された変換カーブを選択"
msgid "Flatbed"
msgstr "フラットベッド"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "ADF表面"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "ADF裏面"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "ADF両面"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "ADF表面"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, fuzzy, no-c-format
msgid "Card Back"
msgstr "ADF裏面"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "両面"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "赤"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "緑"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "青"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "増強"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "増強"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "増強"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1622,24 +1624,24 @@ msgstr "増強"
msgid "None"
msgstr " なし"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1663,40 +1665,39 @@ msgstr ""
"フロントエンドがサポートするときは、sane_read()にノンブロッキングIOを使"
"う。"
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "片面"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "両面"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "透過ユニット"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "自動原稿送り装置"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "ポジフィルム"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "ネガフィルム"
@@ -1712,58 +1713,58 @@ msgid "Focus 2.5mm above glass"
msgstr "ガラスから2.5mmの場所に焦点を合わせる"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "ハーフトーン A(ハードトーン)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "ハーフトーンB(ソフトトーン)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "ハーフトーンC(ネットトーン)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "ディザーA(4x4バイエル)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "ディザーB(4x4スパイラル)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "ディザーC(4x4網スクリーン)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "ディザーD(8x4の網スクリーン)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "テキスト強調技術"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "パターンAのダウンロード"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "パターンBのダウンロード"
@@ -1773,7 +1774,7 @@ msgstr "パターンBのダウンロード"
msgid "No Correction"
msgstr "補正をしない"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "ユーザ定義"
@@ -1798,33 +1799,33 @@ msgstr "インクジェットプリンタ"
msgid "CRT monitors"
msgstr "CRTモニター"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "既定"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "高密度印刷"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "低密度印刷"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "高コントラスト印刷"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "ユーザ定義(ガンマ=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "ユーザ定義(ガンマ=1.8)"
@@ -1862,37 +1863,37 @@ msgstr "A4"
msgid "Max"
msgstr "最大"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "ハーフトーンを選択する。"
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "取り出し口"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "取り出し口の選択"
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "輝度の選択"
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "鮮鋭度"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "カラー補正"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr "選択した出力デバイスのための色補正テーブルを設定する。"
@@ -1982,7 +1983,7 @@ msgstr "青レベルを基準として赤を増加"
msgid "Controls blue level"
msgstr "青レベルの制御"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "鏡像をとる。"
@@ -1992,7 +1993,7 @@ msgstr "鏡像をとる。"
msgid "Fast preview"
msgstr "高速プレビュー"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "自動領域分割"
@@ -2022,49 +2023,49 @@ msgstr "スキャナーが使うべきズーム値を定義"
msgid "Quick format"
msgstr "簡易フォーマット"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "光学装置"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "排出"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "ADFの書類を排出する"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "自動排出"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "走査後、書類を排出"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "ADFモード"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "ADFモードの選択(片面、両面)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr ""
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr ""
@@ -2101,56 +2102,66 @@ msgstr ""
"スキャンコマンドを送信後、実際に走査処理が始まる、スキャナーのボタンが押"
"されるのをまつ。"
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "ポジスライド"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "ネガスライド"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "ユーザ定義"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "ADFの書類を排出する"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "補正をしない"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "ガンマ補正を無効"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "補正をしない"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "ガンマ補正を無効"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/nb.po b/po/nb.po
index d8d0b68..f131318 100644
--- a/po/nb.po
+++ b/po/nb.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.12\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2007-12-17 23:01+0100\n"
"Last-Translator: Sigurd Stordal <polarbear42@phreaker.net>\n"
"Language-Team: \n"
@@ -25,8 +25,8 @@ msgid "Standard"
msgstr ""
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -55,7 +55,7 @@ msgstr "Geometri"
msgid "Enhancement"
msgstr "Forbedring"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1249,7 +1249,7 @@ msgstr ""
msgid "flatbed scanner"
msgstr ""
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Filmtype"
@@ -1279,7 +1279,7 @@ msgstr "Skanoppløsning"
msgid "Use only hardware resolutions"
msgstr "Vis kort liste over oppløsninger"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr ""
@@ -1324,7 +1324,7 @@ msgstr ""
msgid "Extra color adjustments"
msgstr ""
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1511,10 +1511,10 @@ msgstr "Gamma korreksjon"
msgid "Selects the gamma corrected transfer curve"
msgstr "Velger den gamma korrigerte overførsels kurven"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1525,82 +1525,84 @@ msgstr "Velger den gamma korrigerte overførsels kurven"
msgid "Flatbed"
msgstr ""
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr ""
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr ""
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr ""
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr ""
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr ""
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Rød"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Grønn"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blå"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Forbedring"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Forbedring"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Forbedring"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1609,24 +1611,24 @@ msgstr "Forbedring"
msgid "None"
msgstr "Ingen"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1648,40 +1650,39 @@ msgstr ""
msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr ""
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr ""
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr ""
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr ""
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Lysbilde Film"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negativ Film"
@@ -1697,58 +1698,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Fokuser 2.5mm over glasset"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr ""
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr ""
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr ""
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr ""
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr ""
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr ""
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr ""
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tekst Fremhevings Teknologi"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Last ned mønster A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Last ned mønster B"
@@ -1758,7 +1759,7 @@ msgstr "Last ned mønster B"
msgid "No Correction"
msgstr "Ingen korrigering"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Brukerdefinert"
@@ -1783,33 +1784,33 @@ msgstr "Blekkskrivere"
msgid "CRT monitors"
msgstr ""
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Standard"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Høy densitets utskrift"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "lav densitets utskrift"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Høy kontrasts utskrift"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Brukerdefinert (Gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Brukerdefinert (Gamma=1.8)"
@@ -1847,37 +1848,37 @@ msgstr ""
msgid "Max"
msgstr "Maks"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr ""
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr ""
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr ""
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr ""
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Skarphet"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Farge korreksjon"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -1967,7 +1968,7 @@ msgstr "Legger til rødt basert på blå-nivå"
msgid "Controls blue level"
msgstr "Kontrollerer blå-nivå"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Speil bildet"
@@ -1977,7 +1978,7 @@ msgstr "Speil bildet"
msgid "Fast preview"
msgstr "Rask forvisning"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Automatisk oppdeling av areal i delareal"
@@ -2007,49 +2008,49 @@ msgstr ""
msgid "Quick format"
msgstr ""
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Tilleggsutstyr"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Utløs"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Utløs arket i ADF"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Automatisk utløsning"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Løs ut dokoment etter skanning"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr ""
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr ""
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr ""
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr ""
@@ -2086,56 +2087,66 @@ msgstr ""
"Etter at kommandoen for skan er sendt, vent til skannerens knapp "
"ertrykket før skanings prossesen startes."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, fuzzy, no-c-format
msgid "Positive Slide"
msgstr "Lysbilde Film"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, fuzzy, no-c-format
msgid "Negative Slide"
msgstr "Negativ Film"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Brukerdefinert"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Utløs arket i ADF"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Ingen korrigering"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Gamma korreksjon"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Ingen korrigering"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Gamma korreksjon"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/nl.po b/po/nl.po
index 4c102ae..90c0b0a 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends.nl\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2019-07-26 13:38+0900\n"
"Last-Translator: Olaf Meeuwissen <paddy-hack@member.fsf.org>\n"
"Language-Team:\n"
@@ -30,8 +30,8 @@ msgid "Standard"
msgstr "Standaard"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -60,7 +60,7 @@ msgstr "Geometrie"
msgid "Enhancement"
msgstr "Kleurverbetering"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1301,7 +1301,7 @@ msgstr "Filmscanner"
msgid "flatbed scanner"
msgstr "Flatbedscanner"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Filmtype"
@@ -1331,7 +1331,7 @@ msgstr "Hardware resolutie"
msgid "Use only hardware resolutions"
msgstr "Gebruik alleen hardware resoluties"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Focus"
@@ -1377,7 +1377,7 @@ msgstr "Scanmarges"
msgid "Extra color adjustments"
msgstr "Extra kleuraanpassingen"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1565,10 +1565,10 @@ msgstr "Gammacorrectie"
msgid "Selects the gamma corrected transfer curve"
msgstr "Kiest de gamma gecorrigeerde overdrachtscurve"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1579,82 +1579,84 @@ msgstr "Kiest de gamma gecorrigeerde overdrachtscurve"
msgid "Flatbed"
msgstr "Flatbed"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "Automatische documentinvoer voorzijde"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "Automatische documentinvoer achterzijde"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "Automatische documentinvoer dubbelzijdig"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "Kaart voorzijde"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "Kaart achterzijde"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "Kaart dubbelzijdig"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Rood"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Groen"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blauw"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Verbeter rood"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Verbeter groen"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Verbeter blauw"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1663,24 +1665,24 @@ msgstr "Verbeter blauw"
msgid "None"
msgstr "Geen"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "Softwarematig over te slaan percentage lege pagina's"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr "Verzoek het stuurprogramma pagina's met weinig dekking te negeren"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1704,40 +1706,39 @@ msgstr ""
"Gebruik niet-blokkerende IO voor sane_read() als de \"frontend\" dat "
"ondersteunt."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "enkelzijdig"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Dubbelzijdig"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Filmeenheid"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automatische documentinvoer"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Dia"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Transparant"
@@ -1753,58 +1754,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Focus 2.5mm boven het glas"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Halftoon A (hard)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Halftoon B (zacht)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Halftoon C"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Dither A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Dither B (4x4 Spiraalvorm)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Dither C (4x4 Net Screen)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Dither D (8x4 Net Screen)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Tekstverbeteringstechnologie"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Download patroon A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Download patroon B"
@@ -1814,7 +1815,7 @@ msgstr "Download patroon B"
msgid "No Correction"
msgstr "Geen correctie"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Door gebruiker gedefinieerd"
@@ -1839,33 +1840,33 @@ msgstr "Inkjetprinters"
msgid "CRT monitors"
msgstr "CRT-monitoren"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Standaardinstelling"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Afdrukken op hoge kwaliteit"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Afdrukken op lage kwaliteit"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Afdrukken met hoog contrast"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Door gebruiker gedefinieerd (Gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Door gebruiker gedefinieerd (Gamma=1.8)"
@@ -1903,37 +1904,37 @@ msgstr "A4"
msgid "Max"
msgstr "Maximaal"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Kiest halftoon."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Kleuronderdrukken"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Kiest kleuronderdrukken."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Kiest helderheid."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Scherpte"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Kleurcorrectie"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr "Stelt de kleurcorrectietabel in voor het gekozen uitvoerapparaat."
@@ -2023,7 +2024,7 @@ msgstr "Verhoogt rood op basis van de blauwwaarde"
msgid "Controls blue level"
msgstr "Regelt de blauwwaarde"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Spiegel het beeld."
@@ -2033,7 +2034,7 @@ msgstr "Spiegel het beeld."
msgid "Fast preview"
msgstr "Snelle voorbeeldscan"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Automatische verdeling van het scanoppervlak"
@@ -2063,51 +2064,51 @@ msgstr "Definieert de vergrotingsfactor die de scanner zal gebruiken"
msgid "Quick format"
msgstr "Snelle opmaak"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Optioneel hulpstuk"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Uitwerpen"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Werp het document in de automatische documentinvoer uit"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Automatische uitworp"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Werp het document uit na het scannen"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Automatische documentinvoer Modus"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr ""
"Selecteert de Automatische documentinvoer modus (enkelzijdig/"
"dubbelzijdig)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Bak"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Kies de bak om te scannen"
@@ -2147,56 +2148,66 @@ msgstr ""
"Begin pas met scannen als eerst het scancommando naar de scanner is "
"gestuurd en daarna de knop van de scanner is ingedrukt."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Infrarood"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Dia"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Negatief"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Ingebouwd CCT profiel"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Door gebruiker gedefinieerd CCT profiel"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Werp het document in de automatische documentinvoer uit"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Geen correctie"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Schakel gammacorrectie uit"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Geen correctie"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Schakel gammacorrectie uit"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/pl.po b/po/pl.po
index b16f70d..918a925 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.21\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2010-11-06 19:33+0100\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
@@ -26,8 +26,8 @@ msgid "Standard"
msgstr "Standardowe"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -56,7 +56,7 @@ msgstr "Krawędzie obszaru skanowania"
msgid "Enhancement"
msgstr "Ulepszanie"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1296,7 +1296,7 @@ msgstr "skaner filmów"
msgid "flatbed scanner"
msgstr "skaner płaski"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Rodzaj filmu"
@@ -1326,7 +1326,7 @@ msgstr "Rozdzielczość sprzętowa"
msgid "Use only hardware resolutions"
msgstr "Użycie tylko rozdzielczości sprzętowych"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Ostrość"
@@ -1371,7 +1371,7 @@ msgstr "Marginesy skanowania"
msgid "Extra color adjustments"
msgstr "Dodatkowe ustawienia kolorów"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1560,10 +1560,10 @@ msgstr "Korekcja Gamma"
msgid "Selects the gamma corrected transfer curve"
msgstr "Wybiera poprawioną krzywą przejścia"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1574,82 +1574,84 @@ msgstr "Wybiera poprawioną krzywą przejścia"
msgid "Flatbed"
msgstr "Płyta"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "ADF przód"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "ADF tył"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "ADF dwustronny"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Przód"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, fuzzy, no-c-format
msgid "Card Back"
msgstr "Tył"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Dwustronny"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Czerwony"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Zielony"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Niebieski"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Rozszerzenie czerwieni"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Rozszerzenie zieleni"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Rozszerzenie błękitu"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1658,24 +1660,24 @@ msgstr "Rozszerzenie błękitu"
msgid "None"
msgstr "Brak"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1699,40 +1701,39 @@ msgstr ""
"Użyj nie blokującego IO dla sane_read jeżeli jest to wspierane przez "
"frontend."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Jednostronny"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Dwustronny"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Moduł do skanowania przezroczy"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automatyczny podajnik dokumentów"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Pozytyw"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negatyw"
@@ -1748,58 +1749,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Ostrość 2.5mm powyżej szyby"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Półton A (Twardy)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Półton B (Miękki)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Półton C (Siatka)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Ziarnistość A (4x4 Bayera)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Ziarnistość B (4x4 Spiralna)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Ziarnistość C (4x4 Siatka)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Ziarnistość D (8x4 Siatka)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Technologia Uwydatniania Tekstu"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Pobierz wzór A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Pobierz wzór B"
@@ -1809,7 +1810,7 @@ msgstr "Pobierz wzór B"
msgid "No Correction"
msgstr "Brak korekcji"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Zdefiniowane przez użytkownika"
@@ -1834,33 +1835,33 @@ msgstr "Drukarki atramentowe"
msgid "CRT monitors"
msgstr "Monitory CRT"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Domyślny"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Druk wysokiej gęstości"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Druk niskiej gęstości"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Druk o wysokim kontraście"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Zdefiniowane przez użytkownika (Gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Zdefiniowane przez użytkownika (Gamma=1.8)"
@@ -1898,37 +1899,37 @@ msgstr "A4"
msgid "Max"
msgstr "Maksimum"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Wybór półcieni"
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Dropout"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Wybiera dropout"
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Wybiera jasność"
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Ostrość"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Korekcja koloru"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2019,7 +2020,7 @@ msgstr "Dodaje do czerwieni bazując na poziomie błękitu"
msgid "Controls blue level"
msgstr "Nadzoruje poziom błękitu"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Utwórz odbicie lustrzane obrazka"
@@ -2029,7 +2030,7 @@ msgstr "Utwórz odbicie lustrzane obrazka"
msgid "Fast preview"
msgstr "Szybki podgląd"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Automatyczny podział obszaru"
@@ -2059,49 +2060,49 @@ msgstr "Definiuje współczynnik powiększenia dla skanera"
msgid "Quick format"
msgstr "Szybkie formatowanie"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Wyposażenie opcjonalne"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Wysuń"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Wysuń arkusz z ADF"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Wysuwanie automatyczne"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Wysuń dokument po zeskanowaniu"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Tryb ADF"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Wybiera tryb ADF (jedno/dwustronny)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Wnęka"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Wybierz wnękę do skanowania"
@@ -2140,56 +2141,66 @@ msgstr ""
"Po wysłaniu komendy skanowania, czekaj aż przycisk na skanerze jest "
"naciśnięty, aby naprawdę rozpocząć skanowanie"
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Podczerwień"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Pozytyw"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Negatyw"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Wbudowany profil CCT"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Profil CCT zdefiniowany przez użytkownika"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Wysuń arkusz z ADF"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Brak korekcji"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Wyłącz korekcję gamma"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Brak korekcji"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Wyłącz korekcję gamma"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/pt.po b/po/pt.po
index e97c66f..78ae6f7 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.10\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2007-05-08 13:31+0200\n"
"Last-Translator: Pedro Morais <morais@inocam.com>\n"
"Language-Team: pt <morais@inocam.com>\n"
@@ -25,8 +25,8 @@ msgid "Standard"
msgstr ""
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -55,7 +55,7 @@ msgstr "Geometria"
msgid "Enhancement"
msgstr "Melhorias"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1252,7 +1252,7 @@ msgstr ""
msgid "flatbed scanner"
msgstr ""
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr ""
@@ -1282,7 +1282,7 @@ msgstr ""
msgid "Use only hardware resolutions"
msgstr ""
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr ""
@@ -1327,7 +1327,7 @@ msgstr ""
msgid "Extra color adjustments"
msgstr ""
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1514,10 +1514,10 @@ msgstr "Correcção do gamma"
msgid "Selects the gamma corrected transfer curve"
msgstr ""
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1528,82 +1528,84 @@ msgstr ""
msgid "Flatbed"
msgstr "Flachbett"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr ""
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr ""
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr ""
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr ""
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr ""
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Vermelho"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Verde"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Azul"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Melhorias"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Melhorias"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Melhorias"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1612,26 +1614,26 @@ msgstr "Melhorias"
msgid "None"
msgstr ""
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "Desconsiderar porcentagem branco"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, fuzzy, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
"Solicita ao driver para eliminar páginas com baixo número de pixels "
"escuros"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1653,40 +1655,39 @@ msgstr ""
msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr ""
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr ""
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Unidade de Transparências"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr ""
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Filme Positivo"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Filme Negativo"
@@ -1702,58 +1703,58 @@ msgid "Focus 2.5mm above glass"
msgstr ""
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr ""
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr ""
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr ""
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr ""
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr ""
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr ""
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr ""
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr ""
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr ""
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr ""
@@ -1763,7 +1764,7 @@ msgstr ""
msgid "No Correction"
msgstr "Sem Correcção"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Definido pelo utilizador"
@@ -1788,33 +1789,33 @@ msgstr "Impressoras de jacto de tinta"
msgid "CRT monitors"
msgstr "Monitores CRT"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Predefinição"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr ""
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr ""
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr ""
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr ""
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr ""
@@ -1852,37 +1853,37 @@ msgstr "A4"
msgid "Max"
msgstr "Máximo"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr ""
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr ""
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr ""
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr ""
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr ""
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr ""
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -1972,7 +1973,7 @@ msgstr ""
msgid "Controls blue level"
msgstr "Contraste do canal azul"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr ""
@@ -1982,7 +1983,7 @@ msgstr ""
msgid "Fast preview"
msgstr ""
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr ""
@@ -2012,49 +2013,49 @@ msgstr ""
msgid "Quick format"
msgstr ""
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr ""
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr ""
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr ""
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr ""
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr ""
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr ""
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr ""
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr ""
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr ""
@@ -2089,56 +2090,66 @@ msgid ""
"pressed to actually start the scan process."
msgstr ""
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, fuzzy, no-c-format
msgid "Positive Slide"
msgstr "Filme Positivo"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, fuzzy, no-c-format
msgid "Negative Slide"
msgstr "Filme Negativo"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Definido pelo utilizador"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr ""
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Sem Correcção"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Correcção do gamma"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Sem Correcção"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Correcção do gamma"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/ru.po b/po/ru.po
index 346d4bf..fb3d464 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2007-12-17 23:05+0100\n"
"Last-Translator: \n"
"Language-Team: <ru@li.org>\n"
@@ -31,8 +31,8 @@ msgid "Standard"
msgstr ""
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -61,7 +61,7 @@ msgstr "Расположение"
msgid "Enhancement"
msgstr "Повышение"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1312,7 +1312,7 @@ msgstr "планшетный сканер"
msgid "flatbed scanner"
msgstr "планшетный сканер"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Тип плёнки"
@@ -1342,7 +1342,7 @@ msgstr "Разрешение сканирования"
msgid "Use only hardware resolutions"
msgstr "Показывать короткий список разрешений"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr ""
@@ -1387,7 +1387,7 @@ msgstr ""
msgid "Extra color adjustments"
msgstr ""
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1574,10 +1574,10 @@ msgstr "Коррекция гаммы"
msgid "Selects the gamma corrected transfer curve"
msgstr "Выберите кривую гамма-коррекции"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1588,82 +1588,84 @@ msgstr "Выберите кривую гамма-коррекции"
msgid "Flatbed"
msgstr "Планшетный"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr ""
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, fuzzy, no-c-format
msgid "ADF Back"
msgstr "АПД"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, fuzzy, no-c-format
msgid "ADF Duplex"
msgstr "Двухсторонний"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Распечатка"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr ""
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Двухсторонний"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Красный"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Зелёный"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Синий"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, fuzzy, no-c-format
msgid "Enhance Red"
msgstr "Повышение"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, fuzzy, no-c-format
msgid "Enhance Green"
msgstr "Повышение"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, fuzzy, no-c-format
msgid "Enhance Blue"
msgstr "Повышение"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1672,24 +1674,24 @@ msgstr "Повышение"
msgid "None"
msgstr "Ничего"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr ""
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr ""
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1713,40 +1715,39 @@ msgstr ""
"Использовать неблокируемый ввод-вывод для sane_read(), если таковой "
"поддерживается графической оболочкой."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Односторонний"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Двухсторонний"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Модуль для слайдов"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Автоматический податчик документов"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Позитив"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Негатив"
@@ -1762,58 +1763,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Фокус 2.5мм над стеклом"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Чёрно-белый A (Резкие тона)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Чёрно-белый B (Мягкие тона)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Чёрно-белый C (Net Screen)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr ""
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr ""
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr ""
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr ""
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Технология улучшения текста"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Загрузить шаблон A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Загрузить шаблон B"
@@ -1823,7 +1824,7 @@ msgstr "Загрузить шаблон B"
msgid "No Correction"
msgstr "Без коррекции"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Определяемое пользователем"
@@ -1848,33 +1849,33 @@ msgstr "Струйные принтеры"
msgid "CRT monitors"
msgstr "Мониторы с ЭЛТ"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "По умолчанию"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Печать высокой плотности"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Печать высокой плотности"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Печать высокой контрастности"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Определённое пользователем (Gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Определённое пользователем (Gamma=1.8)"
@@ -1912,37 +1913,37 @@ msgstr "A4"
msgid "Max"
msgstr "Макс"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Выбирает полутона."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr ""
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr ""
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Выбирает яркость."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Резкость"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Коррекция цветов"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2034,7 +2035,7 @@ msgstr "Добавляет к красному, основанному на ур
msgid "Controls blue level"
msgstr "Управляет уровнем синего"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Сделать изображение зеркальным."
@@ -2044,7 +2045,7 @@ msgstr "Сделать изображение зеркальным."
msgid "Fast preview"
msgstr "Быстрый предварительный просмотр"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Автоматически разделять на области"
@@ -2076,49 +2077,49 @@ msgstr ""
msgid "Quick format"
msgstr "Быстрый формат"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Дополнительное оборудование"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Извлечь"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Вставить бумагу в устройство подачи документов"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Автоизвлечение"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Извлечь документ после сканирования"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Режим автоподачи"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Выбирает режим автоподачи (односторонний/двухсторонний)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Отсек"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Выбрать отсек, который сканировать"
@@ -2159,56 +2160,66 @@ msgstr ""
"После подачи команды \"сканировать\", будет ожидать пока не будет нажата "
"кнопка на сканере, чтобы действительно начать процесс сканирования."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr ""
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr ""
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, fuzzy, no-c-format
msgid "Positive Slide"
msgstr "Позитив"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, fuzzy, no-c-format
msgid "Negative Slide"
msgstr "Негатив"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr ""
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, fuzzy, no-c-format
msgid "User defined CCT profile"
msgstr "Определяемое пользователем"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Вставить бумагу в устройство подачи документов"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Без коррекции"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Аналоговая коррекция гаммы"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Без коррекции"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Аналоговая коррекция гаммы"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/sv.po b/po/sv.po
index b0c079b..0961658 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.18\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
"PO-Revision-Date: 2012-10-22 11:17+0200\n"
"Last-Translator: Mattias Ellert <mattias.ellert@fysast.uu.se>\n"
"Language-Team: Swedish <sv@li.org>\n"
@@ -31,8 +31,8 @@ msgid "Standard"
msgstr "Standard"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -61,7 +61,7 @@ msgstr "Geometri"
msgid "Enhancement"
msgstr "Förbättring"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1283,7 +1283,7 @@ msgstr "filmbildläsare"
msgid "flatbed scanner"
msgstr "flatbäddsbildläsare"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Filmtyp"
@@ -1313,7 +1313,7 @@ msgstr "Hårdvaruupplösning"
msgid "Use only hardware resolutions"
msgstr "Använd endast hårdvaruupplösningar"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Fokus"
@@ -1359,7 +1359,7 @@ msgstr "Inläsningsmarginaler"
msgid "Extra color adjustments"
msgstr "Extra färgjusteringar"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1547,10 +1547,10 @@ msgstr "Gammakorrigering"
msgid "Selects the gamma corrected transfer curve"
msgstr "Väljer gammakorrigerad överföringskurva"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1561,82 +1561,84 @@ msgstr "Väljer gammakorrigerad överföringskurva"
msgid "Flatbed"
msgstr "Flatbädd"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "Automatisk dokumentmatare framsida"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "Automatisk dokumentmatare baksida"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "Automatisk dokumentmatare dubbelsidigt"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, fuzzy, no-c-format
msgid "Card Front"
msgstr "Framsida"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, fuzzy, no-c-format
msgid "Card Back"
msgstr "Baksida"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, fuzzy, no-c-format
msgid "Card Duplex"
msgstr "Dubbelsidigt"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Röd"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Grön"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Blå"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Framhäv rött"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Framhäv grönt"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Framhäv blått"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1645,24 +1647,24 @@ msgstr "Framhäv blått"
msgid "None"
msgstr "Inget"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "Procentsats för hoppa över blanka sidor"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, fuzzy, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr "Begär att drivrutinen hoppar över sidor med få mörka pixlar"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1685,40 +1687,39 @@ msgid "Use non-blocking IO for sane_read() if supported by the frontend."
msgstr ""
"Använd icke-blockerande IO för sane_read() om det stöds av framplanet."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Enkelsidigt"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Dubbelsidigt"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Genomlysningsenhet"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Automatisk dokumentmatare"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Positiv film"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Negativ film"
@@ -1734,58 +1735,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Fokusera 2,5 mm ovanför glaset"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Raster A (hårt)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Raster B (mjukt)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Raster C (nätskärm)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Gitter A (4x4 Bayer)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Gitter B (4x4 spiral)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Gitter C (4x4 nätskärm)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Gitter D (8x4 nätskärm)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Textförbättringsteknik"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Nedladdat mönster A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Nedladdat mönster B"
@@ -1795,7 +1796,7 @@ msgstr "Nedladdat mönster B"
msgid "No Correction"
msgstr "Ingen korrigering"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Användardefinierat"
@@ -1820,33 +1821,33 @@ msgstr "Bläckstråleskrivare"
msgid "CRT monitors"
msgstr "Bildskärmar (CRT)"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Standard"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Utskrift med hög densitet"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Utskrift med låg densitet"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Utskrift med hög kontrast"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Användardefinierat (gamma=1,0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Användardefinierat (gamma=1,8)"
@@ -1884,37 +1885,37 @@ msgstr "A4"
msgid "Max"
msgstr "Max"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Väljer raster."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Blindfärg"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Väljer blindfärg."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Väljer ljusstyrka."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Skärpa"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Färgkorrigering"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr "Ställer in färgkorrigeringstabellen för den valda utdataenheten."
@@ -2004,7 +2005,7 @@ msgstr "Lägger till till rött beroende på blånivån"
msgid "Controls blue level"
msgstr "Bestämmer blånivån"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Spegla bilden."
@@ -2014,7 +2015,7 @@ msgstr "Spegla bilden."
msgid "Fast preview"
msgstr "Snabb förhandsgranskning"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Automatisk ytuppdelning"
@@ -2044,51 +2045,51 @@ msgstr "Anger zoom-faktorn som bildläsaren kommer att använda"
msgid "Quick format"
msgstr "Snabbformatera"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Tillvalsutrustning"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Mata ut"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Mata ut bladet i dokumentmataren"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Mata ut automatiskt"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Mata ut dokument efter inläsning"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Dokumentmatarläge"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr ""
"Väljer läge för den automatiska dokumentmataren (enkelsidigt/"
"dubbelsidigt)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Fack"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Välj fack att läsa in från"
@@ -2129,56 +2130,66 @@ msgstr ""
"Efter att ha skickat inläsningskommandot, vänta tills knappen på läsaren "
"trycks in för att starta inläsningen."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU 8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Infraröd"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Diapositiv"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Dianegativ"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Inbyggd CCT-profil"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Användardefinierad CCT-profil"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr ""
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, fuzzy, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Mata ut bladet i dokumentmataren"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, fuzzy, no-c-format
msgid "ADF Skew Correction"
msgstr "Ingen korrigering"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, fuzzy, no-c-format
msgid "Enables ADF skew correction"
msgstr "Stäng av gammakorrigering"
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Ingen korrigering"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Stäng av gammakorrigering"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
diff --git a/po/uk.po b/po/uk.po
index 5d534a5..c68cc22 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -6,15 +6,15 @@ msgid ""
msgstr ""
"Project-Id-Version: sane-backends 1.0.32\n"
"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
-"POT-Creation-Date: 2021-02-14 07:21+0000\n"
-"PO-Revision-Date: 2021-02-07 15:24+0200\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
+"PO-Revision-Date: 2021-09-20 19:45+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <trans-uk@lists.fedoraproject.org>\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 20.11.70\n"
+"X-Generator: Lokalize 20.12.0\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"
@@ -29,8 +29,8 @@ msgid "Standard"
msgstr "Типово"
#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
-#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1287
-#: backend/epsonds.c:684 backend/genesys/genesys.cpp:4701
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
@@ -59,7 +59,7 @@ msgstr "Позиція і розміри"
msgid "Enhancement"
msgstr "Покращення"
-#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1212
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
#: backend/rts8891.c:2830 backend/snapscan-options.c:923
#: backend/umax.c:5563
@@ -1293,7 +1293,7 @@ msgstr "плівковий сканер"
msgid "flatbed scanner"
msgstr "планшетний сканер"
-#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1394
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
#, no-c-format
msgid "Film type"
msgstr "Тип плівки"
@@ -1323,7 +1323,7 @@ msgstr "Апаратна роздільна здатність"
msgid "Use only hardware resolutions"
msgstr "Використовувати лише апаратні значення"
-#: backend/canon.c:1311 backend/epson2.c:1337
+#: backend/canon.c:1311 backend/epson2.c:1331
#, no-c-format
msgid "Focus"
msgstr "Фокусування"
@@ -1370,7 +1370,7 @@ msgstr "Поля області сканування"
msgid "Extra color adjustments"
msgstr "Додаткова корекція кольорів"
-#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1251
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
#, no-c-format
msgid "Mirror image"
@@ -1561,10 +1561,10 @@ msgstr "Виправлення гами"
msgid "Selects the gamma corrected transfer curve"
msgstr "Визначити криву виправлення гами"
-#: backend/canon_dr.c:419 backend/epjitsu.c:231 backend/epson.c:499
-#: backend/epson2-ops.c:101 backend/epson2.c:115 backend/epsonds-ops.c:32
-#: backend/epsonds.c:97 backend/epsonds.h:65 backend/fujitsu.c:683
-#: backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
@@ -1575,82 +1575,84 @@ msgstr "Визначити криву виправлення гами"
msgid "Flatbed"
msgstr "Планшет"
-#: backend/canon_dr.c:420 backend/epjitsu.c:232 backend/fujitsu.c:684
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
#: backend/kodak.c:138
#, no-c-format
msgid "ADF Front"
msgstr "Перед протяжного механізму"
-#: backend/canon_dr.c:421 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
#: backend/kodak.c:139
#, no-c-format
msgid "ADF Back"
msgstr "Зворот протяжного механізму"
-#: backend/canon_dr.c:422 backend/epjitsu.c:234 backend/fujitsu.c:686
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
#, no-c-format
msgid "ADF Duplex"
msgstr "Двобічна АПД"
-#: backend/canon_dr.c:423 backend/fujitsu.c:687
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
#, no-c-format
msgid "Card Front"
msgstr "Картка (профіль)"
-#: backend/canon_dr.c:424 backend/fujitsu.c:688
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
#, no-c-format
msgid "Card Back"
msgstr "Картка (зворот)"
-#: backend/canon_dr.c:425 backend/fujitsu.c:689
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
#, no-c-format
msgid "Card Duplex"
msgstr "Картка (обидва боки)"
-#: backend/canon_dr.c:432 backend/epson.c:597 backend/epson.c:3094
-#: backend/epson2.c:195 backend/fujitsu.c:706
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
#, no-c-format
msgid "Red"
msgstr "Червоний"
-#: backend/canon_dr.c:433 backend/epson.c:598 backend/epson.c:3090
-#: backend/epson2.c:196 backend/fujitsu.c:707
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
#, no-c-format
msgid "Green"
msgstr "Зелений"
-#: backend/canon_dr.c:434 backend/epson.c:599 backend/epson.c:3098
-#: backend/epson2.c:197 backend/fujitsu.c:708
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
#, no-c-format
msgid "Blue"
msgstr "Синій"
-#: backend/canon_dr.c:435
+#: backend/canon_dr.c:445
#, no-c-format
msgid "Enhance Red"
msgstr "Покращити червоний"
-#: backend/canon_dr.c:436
+#: backend/canon_dr.c:446
#, no-c-format
msgid "Enhance Green"
msgstr "Покращити зелений"
-#: backend/canon_dr.c:437
+#: backend/canon_dr.c:447
#, no-c-format
msgid "Enhance Blue"
msgstr "Покращити синій"
-#: backend/canon_dr.c:439 backend/epson.c:554 backend/epson.c:562
-#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:159
-#: backend/epson2.c:167 backend/epson2.c:179 backend/epson2.c:194
-#: backend/epson2.c:208 backend/fujitsu.c:712
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
#: backend/genesys/genesys.cpp:127 backend/leo.c:106
#: backend/matsushita.c:135 backend/matsushita.c:156
#: backend/matsushita.c:188 backend/matsushita.c:210
@@ -1659,26 +1661,26 @@ msgstr "Покращити синій"
msgid "None"
msgstr "Немає"
-#: backend/canon_dr.c:440 backend/fujitsu.c:713
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
#, no-c-format
msgid "JPEG"
msgstr "JPEG"
-#: backend/canon_dr.c:2526 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
#, no-c-format
msgid "Software blank skip percentage"
msgstr "Порогове значення порожніх сторінок для програмного відкидання"
-#: backend/canon_dr.c:2527 backend/fujitsu.c:4141
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
#, no-c-format
msgid "Request driver to discard pages with low percentage of dark pixels"
msgstr ""
"Вимагати від драйвера відкидання сторінок з надто низькою питомою "
"кількістю темних пікселів"
-#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:973
-#: backend/epsonds.c:636 backend/genesys/genesys.cpp:4632
-#: backend/gt68xx.c:449 backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
@@ -1702,40 +1704,39 @@ msgstr ""
"Використовувати режим вводу-виводу без блокування для sane_read(), якщо "
"підтримується оболонкою."
-#: backend/epson.c:489 backend/epson2.c:108 backend/epsonds.c:90
-#: backend/kodakaio.c:611 backend/magicolor.c:174
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
#, no-c-format
msgid "Simplex"
msgstr "Однобічна"
-#: backend/epson.c:490 backend/epson2.c:109 backend/epsonds.c:91
-#: backend/kodakaio.c:612 backend/kvs1025.h:50 backend/kvs20xx_opt.c:204
-#: backend/kvs40xx_opt.c:353 backend/magicolor.c:175
-#: backend/matsushita.h:212
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
#, no-c-format
msgid "Duplex"
msgstr "Двобічна"
-#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:116
-#: backend/epsonds-ops.c:33 backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
#, no-c-format
msgid "Transparency Unit"
msgstr "Модуль для слайдів"
-#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:118
-#: backend/epsonds-ops.c:34 backend/epsonds.c:98 backend/epsonds.h:67
-#: backend/kodakaio.c:618 backend/magicolor.c:182 backend/mustek.c:158
-#: backend/pixma/pixma.c:1001 backend/test.c:232 backend/umax.c:181
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
#, no-c-format
msgid "Automatic Document Feeder"
msgstr "Автоматична подача документів"
-#: backend/epson.c:521 backend/epson2.c:134
+#: backend/epson.c:521 backend/epson2.c:130
#, no-c-format
msgid "Positive Film"
msgstr "Плівка-позитив"
-#: backend/epson.c:522 backend/epson2.c:135
+#: backend/epson.c:522 backend/epson2.c:131
#, no-c-format
msgid "Negative Film"
msgstr "Плівка-негатив"
@@ -1751,58 +1752,58 @@ msgid "Focus 2.5mm above glass"
msgstr "Фокус 2,5 мм над склом"
#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
-#: backend/epson2.c:160 backend/epson2.c:168 backend/epson2.c:180
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
#, no-c-format
msgid "Halftone A (Hard Tone)"
msgstr "Півтони A (Різкі тони)"
#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
-#: backend/epson2.c:161 backend/epson2.c:169 backend/epson2.c:181
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
#, no-c-format
msgid "Halftone B (Soft Tone)"
msgstr "Півтони B (М’які тони)"
#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
-#: backend/epson2.c:162 backend/epson2.c:170 backend/epson2.c:182
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
#, no-c-format
msgid "Halftone C (Net Screen)"
msgstr "Півтони C (Net Screen)"
-#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:171
-#: backend/epson2.c:183
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
#, no-c-format
msgid "Dither A (4x4 Bayer)"
msgstr "Дизеринг A (секція 4x4)"
-#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:172
-#: backend/epson2.c:184
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
#, no-c-format
msgid "Dither B (4x4 Spiral)"
msgstr "Дизеринг B (спіраль 4x4)"
-#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:173
-#: backend/epson2.c:185
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
#, no-c-format
msgid "Dither C (4x4 Net Screen)"
msgstr "Дизеринг C (4x4 Net Screen)"
-#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:174
-#: backend/epson2.c:186
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
#, no-c-format
msgid "Dither D (8x4 Net Screen)"
msgstr "Дизеринг D (8x4 Net Screen)"
-#: backend/epson.c:582 backend/epson2.c:187
+#: backend/epson.c:582 backend/epson2.c:183
#, no-c-format
msgid "Text Enhanced Technology"
msgstr "Технологія покращення тексту"
-#: backend/epson.c:583 backend/epson2.c:188
+#: backend/epson.c:583 backend/epson2.c:184
#, no-c-format
msgid "Download pattern A"
msgstr "Завантажити шаблон A"
-#: backend/epson.c:584 backend/epson2.c:189
+#: backend/epson.c:584 backend/epson2.c:185
#, no-c-format
msgid "Download pattern B"
msgstr "Завантажити шаблон B"
@@ -1812,7 +1813,7 @@ msgstr "Завантажити шаблон B"
msgid "No Correction"
msgstr "Без виправлення"
-#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:249
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
#, no-c-format
msgid "User defined"
msgstr "Визначене користувачем"
@@ -1837,33 +1838,33 @@ msgstr "Струминні принтери"
msgid "CRT monitors"
msgstr "Монітори з ЕПТ"
-#: backend/epson.c:654 backend/epson2.c:248 backend/fujitsu.c:696
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
#: backend/hp-option.c:3224 backend/test.c:147
#, no-c-format
msgid "Default"
msgstr "Типовий"
-#: backend/epson.c:656 backend/epson2.c:250
+#: backend/epson.c:656 backend/epson2.c:246
#, no-c-format
msgid "High density printing"
msgstr "Друк з високою щільністю"
-#: backend/epson.c:657 backend/epson2.c:251
+#: backend/epson.c:657 backend/epson2.c:247
#, no-c-format
msgid "Low density printing"
msgstr "Друк з низькою щільністю"
-#: backend/epson.c:658 backend/epson2.c:252
+#: backend/epson.c:658 backend/epson2.c:248
#, no-c-format
msgid "High contrast printing"
msgstr "Друк з високою контрастністю"
-#: backend/epson.c:676 backend/epson2.c:270
+#: backend/epson.c:676 backend/epson2.c:266
#, no-c-format
msgid "User defined (Gamma=1.0)"
msgstr "Визначене користувачем (Gamma=1.0)"
-#: backend/epson.c:677 backend/epson2.c:271
+#: backend/epson.c:677 backend/epson2.c:267
#, no-c-format
msgid "User defined (Gamma=1.8)"
msgstr "Визначена користувачем (Gamma=1.8)"
@@ -1901,37 +1902,37 @@ msgstr "A4"
msgid "Max"
msgstr "Макс"
-#: backend/epson.c:2843 backend/epson2.c:1008
+#: backend/epson.c:2843 backend/epson2.c:1002
#, no-c-format
msgid "Selects the halftone."
msgstr "Визначає півтон."
-#: backend/epson.c:2865 backend/epson2.c:1029
+#: backend/epson.c:2865 backend/epson2.c:1023
#, no-c-format
msgid "Dropout"
msgstr "Маска"
-#: backend/epson.c:2866 backend/epson2.c:1030
+#: backend/epson.c:2866 backend/epson2.c:1024
#, no-c-format
msgid "Selects the dropout."
msgstr "Визначає маску."
-#: backend/epson.c:2878 backend/epson2.c:1042
+#: backend/epson.c:2878 backend/epson2.c:1036
#, no-c-format
msgid "Selects the brightness."
msgstr "Визначає яскравість."
-#: backend/epson.c:2893 backend/epson2.c:1055
+#: backend/epson.c:2893 backend/epson2.c:1049
#, no-c-format
msgid "Sharpness"
msgstr "Різкість"
-#: backend/epson.c:3029 backend/epson2.c:1171 backend/epson2.c:1218
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
#, no-c-format
msgid "Color correction"
msgstr "Кольорова компенсація"
-#: backend/epson.c:3032 backend/epson2.c:1173
+#: backend/epson.c:3032 backend/epson2.c:1167
#, no-c-format
msgid "Sets the color correction table for the selected output device."
msgstr ""
@@ -2023,7 +2024,7 @@ msgstr "Додаток до червоного на основі рівня си
msgid "Controls blue level"
msgstr "Визначає рівень синього"
-#: backend/epson.c:3204 backend/epson2.c:1252
+#: backend/epson.c:3204 backend/epson2.c:1246
#, no-c-format
msgid "Mirror the image."
msgstr "Віддзеркалити зображення."
@@ -2033,7 +2034,7 @@ msgstr "Віддзеркалити зображення."
msgid "Fast preview"
msgstr "Швидкий перегляд"
-#: backend/epson.c:3243 backend/epson2.c:1262
+#: backend/epson.c:3243 backend/epson2.c:1256
#, no-c-format
msgid "Auto area segmentation"
msgstr "Автоматичний поділ на області"
@@ -2063,49 +2064,49 @@ msgstr "Визначає масштаб, який буде використан
msgid "Quick format"
msgstr "Швидке форматування"
-#: backend/epson.c:3358 backend/epson2.c:1370 backend/epsonds.c:733
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
#, no-c-format
msgid "Optional equipment"
msgstr "Додаткове устаткування"
-#: backend/epson.c:3429 backend/epson2.c:1407 backend/epsonds.c:749
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
#, no-c-format
msgid "Eject"
msgstr "Виштовхнути"
-#: backend/epson.c:3430 backend/epson2.c:1408 backend/epsonds.c:750
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
#, no-c-format
msgid "Eject the sheet in the ADF"
msgstr "Виштовхнути аркуш з протяжного пристрою"
-#: backend/epson.c:3442 backend/epson2.c:1418
+#: backend/epson.c:3442 backend/epson2.c:1412
#, no-c-format
msgid "Auto eject"
msgstr "Автовиштовхування"
-#: backend/epson.c:3443 backend/epson2.c:1420
+#: backend/epson.c:3443 backend/epson2.c:1414
#, no-c-format
msgid "Eject document after scanning"
msgstr "Виштовхнути документ після сканування"
-#: backend/epson.c:3455 backend/epson2.c:1430 backend/epsonds.c:765
-#: backend/kodakaio.c:2859 backend/magicolor.c:2454
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
#, no-c-format
msgid "ADF Mode"
msgstr "Режим протяжного пристрою"
-#: backend/epson.c:3457 backend/epson2.c:1432 backend/epsonds.c:767
-#: backend/kodakaio.c:2861 backend/magicolor.c:2456
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
#, no-c-format
msgid "Selects the ADF mode (simplex/duplex)"
msgstr "Визначає режим протяжного пристрою (однобічний/двобічний)"
-#: backend/epson.c:3471 backend/epson2.c:1444
+#: backend/epson.c:3471 backend/epson2.c:1438
#, no-c-format
msgid "Bay"
msgstr "Секція"
-#: backend/epson.c:3472 backend/epson2.c:1445
+#: backend/epson.c:3472 backend/epson2.c:1439
#, no-c-format
msgid "Select bay to scan"
msgstr "Визначає секцію, яку буде скановано"
@@ -2147,56 +2148,66 @@ msgstr ""
"Після надсилання команди сканування не розпочинати сканування до "
"натискання кнопки на сканері."
-#: backend/epson2-ops.c:103 backend/epson2.c:117
+#: backend/epson2-ops.c:103 backend/epson2.c:113
#, no-c-format
msgid "TPU8x10"
msgstr "TPU8x10"
-#: backend/epson2.c:102 backend/pixma/pixma.c:414
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
#, no-c-format
msgid "Infrared"
msgstr "Інфрачервоне"
-#: backend/epson2.c:136
+#: backend/epson2.c:132
#, no-c-format
msgid "Positive Slide"
msgstr "Слайд-позитив"
-#: backend/epson2.c:137
+#: backend/epson2.c:133
#, no-c-format
msgid "Negative Slide"
msgstr "Слайд-негатив"
-#: backend/epson2.c:209
+#: backend/epson2.c:205
#, no-c-format
msgid "Built in CCT profile"
msgstr "Вбудований профіль CCT"
-#: backend/epson2.c:210
+#: backend/epson2.c:206
#, no-c-format
msgid "User defined CCT profile"
msgstr "Визначений користувачем профіль CCT"
-#: backend/epsonds.c:757
+#: backend/epsonds.c:2046
#, no-c-format
msgid "Load"
msgstr "Завантажити"
-#: backend/epsonds.c:758
+#: backend/epsonds.c:2047
#, no-c-format
msgid "Load a sheet in the ADF"
msgstr "Завантажити аркуш до протяжного пристрою"
-#: backend/epsonds.c:778
+#: backend/epsonds.c:2055
#, no-c-format
msgid "ADF Skew Correction"
msgstr "Виправлення нахилу у протяжному пристрої"
-#: backend/epsonds.c:780
+#: backend/epsonds.c:2057
#, no-c-format
msgid "Enables ADF skew correction"
msgstr "Вмикає виправлення нахилу у протяжному пристрої"
+#: backend/epsonds.c:2063
+#, no-c-format
+msgid "ADF CRP Correction"
+msgstr "Виправлення обрізання у протяжному пристрої"
+
+#: backend/epsonds.c:2065
+#, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "Вмикає виправлення автообрізання у протяжному пристрої"
+
#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
#, no-c-format
msgid "On"
@@ -5684,10 +5695,10 @@ msgid ""
"performed a single time per driver init for single page scans, and for "
"the first page for each ADF scan."
msgstr ""
-"При виконання калібрування сканера. Якщо ви виберете «Лише раз», його "
-"буде виконано один раз під час ініціалізації сканера для сканування "
-"окремих сторінок і для першої сторінки для кожного сканування із "
-"автоматичною подачею документів."
+"Визначає, коли слід виконувати калібрування сканера. Якщо ви виберете "
+"«Лише раз», його буде виконано один раз під час ініціалізації сканера "
+"для сканування окремих сторінок і для першої сторінки для кожного "
+"сканування із автоматичною подачею документів."
#: backend/plustek.c:233 backend/plustek_pp.c:202 backend/u12.c:154
#, no-c-format
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..77d941d
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,6691 @@
+# Copyright (C) YEAR The SANE developers
+# This file is distributed under the same license as the sane-backends package.
+#
+# Tyson Tan <tysontan@tysontan.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: sane-backends 1.0.32.60-2b0e4\n"
+"Report-Msgid-Bugs-To: sane-devel@alioth-lists.debian.net\n"
+"POT-Creation-Date: 2021-09-20 20:08-0700\n"
+"PO-Revision-Date: 2021-05-21 21:01+0800\n"
+"Last-Translator: Tyson Tan <tysontan@tysontan.com>\n"
+"Language-Team: Simplified Chinese <kde-i18n-doc@kde.org>\n"
+"Language: zh_CN\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Lokalize 21.04.1\n"
+
+#: include/sane/saneopts.h:156
+#, no-c-format
+msgid "Number of options"
+msgstr "选项数量"
+
+#: include/sane/saneopts.h:158
+#, no-c-format
+msgid "Standard"
+msgstr "标准"
+
+#: include/sane/saneopts.h:159 backend/artec_eplus48u.c:2882
+#: backend/canon_lide70.c:416 backend/epson.c:3296 backend/epson2.c:1281
+#: backend/epsonds.c:1973 backend/genesys/genesys.cpp:4701
+#: backend/gt68xx.c:694 backend/hp-option.c:3295 backend/hp3500.c:1017
+#: backend/kvs1025_opt.c:639 backend/kvs20xx_opt.c:285
+#: backend/kvs40xx_opt.c:506 backend/leo.c:820 backend/lexmark.c:197
+#: backend/ma1509.c:549 backend/matsushita.c:1132 backend/microtek2.h:597
+#: backend/mustek.c:4371 backend/mustek_usb.c:299 backend/mustek_usb2.c:463
+#: backend/pixma/pixma_sane_options.c:161 backend/plustek.c:806
+#: backend/plustek_pp.c:745 backend/sceptre.c:699
+#: backend/snapscan-options.c:550 backend/teco1.c:1092 backend/teco2.c:1907
+#: backend/teco3.c:917 backend/test.c:718 backend/u12.c:544
+#: backend/umax.c:5174 backend/umax_pp.c:569
+#, no-c-format
+msgid "Geometry"
+msgstr "尺寸"
+
+#: include/sane/saneopts.h:160 backend/artec_eplus48u.c:2803
+#: backend/canon.c:1491 backend/genesys/genesys.cpp:4744
+#: backend/gt68xx.c:663 backend/hp-option.c:2951 backend/kvs1025_opt.c:703
+#: backend/leo.c:868 backend/ma1509.c:597 backend/matsushita.c:1186
+#: backend/microtek2.h:598 backend/mustek.c:4419 backend/mustek_usb.c:347
+#: backend/mustek_usb2.c:429 backend/niash.c:751 backend/plustek.c:852
+#: backend/plustek_pp.c:791 backend/sceptre.c:747
+#: backend/snapscan-options.c:617 backend/stv680.c:1064
+#: backend/teco1.c:1140 backend/teco2.c:1955 backend/teco3.c:965
+#: backend/u12.c:590 backend/umax.c:5224 backend/umax_pp.c:618
+#, no-c-format
+msgid "Enhancement"
+msgstr "增强"
+
+#: include/sane/saneopts.h:161 backend/epson.c:3195 backend/epson2.c:1206
+#: backend/kvs20xx_opt.c:366 backend/kvs40xx_opt.c:597
+#: backend/rts8891.c:2830 backend/snapscan-options.c:923
+#: backend/umax.c:5563
+#, no-c-format
+msgid "Advanced"
+msgstr "高级"
+
+#: include/sane/saneopts.h:162
+#, no-c-format
+msgid "Sensors"
+msgstr "传感器"
+
+#: include/sane/saneopts.h:164
+#, no-c-format
+msgid "Preview"
+msgstr "预览"
+
+#: include/sane/saneopts.h:165
+#, no-c-format
+msgid "Force monochrome preview"
+msgstr "强制使用单色预览"
+
+#: include/sane/saneopts.h:166
+#, no-c-format
+msgid "Bit depth"
+msgstr "色彩位深"
+
+#: include/sane/saneopts.h:167 backend/canon.c:1138 backend/leo.c:778
+#: backend/pixma/pixma_sane_options.c:48
+#, no-c-format
+msgid "Scan mode"
+msgstr "扫描模式"
+
+#: include/sane/saneopts.h:168
+#, no-c-format
+msgid "Scan speed"
+msgstr "扫描速度"
+
+#: include/sane/saneopts.h:169
+#, no-c-format
+msgid "Scan source"
+msgstr "扫描来源"
+
+#: include/sane/saneopts.h:170
+#, no-c-format
+msgid "Force backtracking"
+msgstr "强制反退"
+
+#: include/sane/saneopts.h:171
+#, no-c-format
+msgid "Top-left x"
+msgstr "左上角 X"
+
+#: include/sane/saneopts.h:172
+#, no-c-format
+msgid "Top-left y"
+msgstr "左上角 Y"
+
+#: include/sane/saneopts.h:173
+#, no-c-format
+msgid "Bottom-right x"
+msgstr "右下角 X"
+
+#: include/sane/saneopts.h:174
+#, no-c-format
+msgid "Bottom-right y"
+msgstr "右下角 Y"
+
+#: include/sane/saneopts.h:175 backend/canon.c:1214
+#: backend/pixma/pixma_sane_options.c:301
+#, no-c-format
+msgid "Scan resolution"
+msgstr "扫描分辨率"
+
+#: include/sane/saneopts.h:176
+#, no-c-format
+msgid "X-resolution"
+msgstr "X 分辨率"
+
+#: include/sane/saneopts.h:177
+#, no-c-format
+msgid "Y-resolution"
+msgstr "Y 分辨率"
+
+#: include/sane/saneopts.h:178
+#, no-c-format
+msgid "Page width"
+msgstr "页宽"
+
+#: include/sane/saneopts.h:179
+#, no-c-format
+msgid "Page height"
+msgstr "页高"
+
+#: include/sane/saneopts.h:180
+#, no-c-format
+msgid "Use custom gamma table"
+msgstr "使用自定义伽玛值表"
+
+#: include/sane/saneopts.h:181
+#, no-c-format
+msgid "Image intensity"
+msgstr "图像颜色强度"
+
+#: include/sane/saneopts.h:182
+#, no-c-format
+msgid "Red intensity"
+msgstr "红色强度"
+
+#: include/sane/saneopts.h:183
+#, no-c-format
+msgid "Green intensity"
+msgstr "绿色强度"
+
+#: include/sane/saneopts.h:184
+#, no-c-format
+msgid "Blue intensity"
+msgstr "蓝色强度"
+
+#: include/sane/saneopts.h:185
+#, no-c-format
+msgid "Brightness"
+msgstr "亮度"
+
+#: include/sane/saneopts.h:186
+#, no-c-format
+msgid "Contrast"
+msgstr "对比度"
+
+#: include/sane/saneopts.h:187
+#, no-c-format
+msgid "Grain size"
+msgstr "颗粒大小"
+
+#: include/sane/saneopts.h:188
+#, no-c-format
+msgid "Halftoning"
+msgstr "半调"
+
+#: include/sane/saneopts.h:189
+#, no-c-format
+msgid "Black level"
+msgstr "黑色级别"
+
+#: include/sane/saneopts.h:190
+#, no-c-format
+msgid "White level"
+msgstr "白色级别"
+
+#: include/sane/saneopts.h:191
+#, no-c-format
+msgid "White level for red"
+msgstr "白色级别红数值"
+
+#: include/sane/saneopts.h:192
+#, no-c-format
+msgid "White level for green"
+msgstr "白色级别绿数值"
+
+#: include/sane/saneopts.h:193
+#, no-c-format
+msgid "White level for blue"
+msgstr "白色级别蓝数值"
+
+#: include/sane/saneopts.h:194
+#, no-c-format
+msgid "Shadow"
+msgstr "暗调"
+
+#: include/sane/saneopts.h:195
+#, no-c-format
+msgid "Shadow for red"
+msgstr "暗调红数值"
+
+#: include/sane/saneopts.h:196
+#, no-c-format
+msgid "Shadow for green"
+msgstr "暗调绿数值"
+
+#: include/sane/saneopts.h:197
+#, no-c-format
+msgid "Shadow for blue"
+msgstr "暗调蓝数值"
+
+#: include/sane/saneopts.h:198
+#, no-c-format
+msgid "Highlight"
+msgstr "亮调"
+
+#: include/sane/saneopts.h:199
+#, no-c-format
+msgid "Highlight for red"
+msgstr "亮调红数值"
+
+#: include/sane/saneopts.h:200
+#, no-c-format
+msgid "Highlight for green"
+msgstr "亮调绿数值"
+
+#: include/sane/saneopts.h:201
+#, no-c-format
+msgid "Highlight for blue"
+msgstr "亮调蓝数值"
+
+#: include/sane/saneopts.h:202
+#, no-c-format
+msgid "Hue"
+msgstr "色相"
+
+#: include/sane/saneopts.h:203
+#, no-c-format
+msgid "Saturation"
+msgstr "饱和度"
+
+#: include/sane/saneopts.h:204
+#, no-c-format
+msgid "Filename"
+msgstr "文件名"
+
+#: include/sane/saneopts.h:205
+#, no-c-format
+msgid "Halftone pattern size"
+msgstr "半调图案大小"
+
+#: include/sane/saneopts.h:206 backend/fujitsu.c:3260
+#, no-c-format
+msgid "Halftone pattern"
+msgstr "半调图案"
+
+#: include/sane/saneopts.h:207
+#, no-c-format
+msgid "Bind X and Y resolution"
+msgstr "绑定 X 和 Y 分辨率"
+
+#: include/sane/saneopts.h:208 backend/hp-option.c:3233
+#: backend/hp3900_sane.c:427 backend/hp3900_sane.c:1020
+#: backend/hp3900_sane.c:1420 backend/mustek_usb2.c:119
+#: backend/plustek.c:234 backend/plustek_pp.c:203 backend/u12.c:155
+#, no-c-format
+msgid "Negative"
+msgstr "负片"
+
+#: include/sane/saneopts.h:209
+#, no-c-format
+msgid "Quality calibration"
+msgstr "画质校准"
+
+#: include/sane/saneopts.h:210
+#, no-c-format
+msgid "Double Optical Resolution"
+msgstr "双重光学分辨率"
+
+#: include/sane/saneopts.h:211
+#, no-c-format
+msgid "Bind RGB"
+msgstr "绑定 RGB 数值"
+
+#: include/sane/saneopts.h:212 backend/sm3840.c:768
+#, no-c-format
+msgid "Threshold"
+msgstr "阈值"
+
+#: include/sane/saneopts.h:213
+#, no-c-format
+msgid "Analog gamma correction"
+msgstr "模拟伽玛值校准"
+
+#: include/sane/saneopts.h:214
+#, no-c-format
+msgid "Analog gamma red"
+msgstr "模拟伽玛值-红"
+
+#: include/sane/saneopts.h:215
+#, no-c-format
+msgid "Analog gamma green"
+msgstr "模拟伽玛值-绿"
+
+#: include/sane/saneopts.h:216
+#, no-c-format
+msgid "Analog gamma blue"
+msgstr "模拟伽玛值-蓝"
+
+#: include/sane/saneopts.h:217
+#, no-c-format
+msgid "Bind analog gamma"
+msgstr "绑定模拟伽玛值"
+
+#: include/sane/saneopts.h:218
+#, no-c-format
+msgid "Warmup lamp"
+msgstr "预热背光灯"
+
+#: include/sane/saneopts.h:219
+#, no-c-format
+msgid "Cal. exposure-time"
+msgstr "校准曝光时间"
+
+#: include/sane/saneopts.h:220
+#, no-c-format
+msgid "Cal. exposure-time for red"
+msgstr "校准曝光时间-红"
+
+#: include/sane/saneopts.h:221
+#, no-c-format
+msgid "Cal. exposure-time for green"
+msgstr "校准曝光时间-绿"
+
+#: include/sane/saneopts.h:223
+#, no-c-format
+msgid "Cal. exposure-time for blue"
+msgstr "校准曝光时间-蓝"
+
+#: include/sane/saneopts.h:224
+#, no-c-format
+msgid "Scan exposure-time"
+msgstr "扫描曝光时间"
+
+#: include/sane/saneopts.h:225
+#, no-c-format
+msgid "Scan exposure-time for red"
+msgstr "扫描曝光时间-红"
+
+#: include/sane/saneopts.h:226
+#, no-c-format
+msgid "Scan exposure-time for green"
+msgstr "扫描曝光时间-绿"
+
+#: include/sane/saneopts.h:228
+#, no-c-format
+msgid "Scan exposure-time for blue"
+msgstr "扫描曝光时间-蓝"
+
+#: include/sane/saneopts.h:229
+#, no-c-format
+msgid "Set exposure-time"
+msgstr "设置曝光时间"
+
+#: include/sane/saneopts.h:230
+#, no-c-format
+msgid "Cal. lamp density"
+msgstr "校准背光灯密度"
+
+#: include/sane/saneopts.h:231
+#, no-c-format
+msgid "Scan lamp density"
+msgstr "扫描背光灯密度"
+
+#: include/sane/saneopts.h:232
+#, no-c-format
+msgid "Set lamp density"
+msgstr "设置背光灯密度"
+
+#: include/sane/saneopts.h:233 backend/umax.c:5827
+#, no-c-format
+msgid "Lamp off at exit"
+msgstr "背光灯退出后关闭"
+
+#: include/sane/saneopts.h:234
+#, no-c-format
+msgid "Focus position"
+msgstr "对焦位置"
+
+#: include/sane/saneopts.h:235
+#, no-c-format
+msgid "Autofocus"
+msgstr "自动对焦"
+
+#: include/sane/saneopts.h:249
+#, no-c-format
+msgid ""
+"Read-only option that specifies how many options a specific device "
+"supports."
+msgstr "用于反映某个设备支持的选项数量的只读选项。"
+
+#: include/sane/saneopts.h:252
+#, no-c-format
+msgid "Source, mode and resolution options"
+msgstr "来源、模式和分辨率选项"
+
+#: include/sane/saneopts.h:253
+#, no-c-format
+msgid "Scan area and media size options"
+msgstr "扫描区域和媒介大小选项"
+
+#: include/sane/saneopts.h:254
+#, no-c-format
+msgid "Image modification options"
+msgstr "图像调整选项"
+
+#: include/sane/saneopts.h:255
+#, no-c-format
+msgid "Hardware specific options"
+msgstr "硬件特有选项"
+
+#: include/sane/saneopts.h:256
+#, no-c-format
+msgid "Scanner sensors and buttons"
+msgstr "扫描仪传感器和按钮"
+
+#: include/sane/saneopts.h:259
+#, no-c-format
+msgid "Request a preview-quality scan."
+msgstr "请求一次预览品质扫描。"
+
+#: include/sane/saneopts.h:262
+#, 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 ""
+"请求所有预览在单色模式下进行。对三遍式扫描仪而言这可以将扫描过程缩短为单"
+"遍扫描。对单遍式扫描仪而言这可以降低扫描时的内存需求,并缩短预览扫描的时"
+"间。"
+
+#: include/sane/saneopts.h:268
+#, no-c-format
+msgid ""
+"Number of bits per sample, typical values are 1 for \"line-art\" and 8 "
+"for multibit scans."
+msgstr ""
+"每个采样像素的色彩位深。“线稿”模式的典型数值为 1,多位扫描的典型数值为 "
+"8。"
+
+#: include/sane/saneopts.h:272
+#, no-c-format
+msgid "Selects the scan mode (e.g., lineart, monochrome, or color)."
+msgstr "选择扫描模式 (例如线稿、单色、彩色)。"
+
+#: include/sane/saneopts.h:275
+#, no-c-format
+msgid "Determines the speed at which the scan proceeds."
+msgstr "决定扫描过程的速度。"
+
+#: include/sane/saneopts.h:278
+#, no-c-format
+msgid "Selects the scan source (such as a document-feeder)."
+msgstr "选择扫描来源 (例如输稿器)。"
+
+#: include/sane/saneopts.h:281
+#, no-c-format
+msgid "Controls whether backtracking is forced."
+msgstr "控制是否强制反退。"
+
+#: include/sane/saneopts.h:284
+#, no-c-format
+msgid "Top-left x position of scan area."
+msgstr "扫描区域的左上角 X 坐标。"
+
+#: include/sane/saneopts.h:287
+#, no-c-format
+msgid "Top-left y position of scan area."
+msgstr "扫描区域的左上角 Y 坐标。"
+
+#: include/sane/saneopts.h:290
+#, no-c-format
+msgid "Bottom-right x position of scan area."
+msgstr "扫描区域的右下角 X 坐标。"
+
+#: include/sane/saneopts.h:293
+#, no-c-format
+msgid "Bottom-right y position of scan area."
+msgstr "扫描区域的右下角 Y 坐标。"
+
+#: include/sane/saneopts.h:296
+#, no-c-format
+msgid "Sets the resolution of the scanned image."
+msgstr "设置扫描图像的分辨率。"
+
+#: include/sane/saneopts.h:299
+#, no-c-format
+msgid "Sets the horizontal resolution of the scanned image."
+msgstr "设置扫描图像的水平分辨率。"
+
+#: include/sane/saneopts.h:302
+#, no-c-format
+msgid "Sets the vertical resolution of the scanned image."
+msgstr "设置扫描图像的垂直分辨率。"
+
+#: include/sane/saneopts.h:305
+#, no-c-format
+msgid ""
+"Specifies the width of the media. Required for automatic centering of "
+"sheet-fed scans."
+msgstr "指定介质的宽度。输稿器纸张自动居中扫描需要设置。"
+
+#: include/sane/saneopts.h:309
+#, no-c-format
+msgid "Specifies the height of the media."
+msgstr "指定媒介的高度。"
+
+#: include/sane/saneopts.h:312
+#, no-c-format
+msgid ""
+"Determines whether a builtin or a custom gamma-table should be used."
+msgstr "决定使用内建还是自定义伽玛值表。"
+
+#: include/sane/saneopts.h:316
+#, 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 ""
+"伽玛校正表 (基于亮度)。在彩色模式下此选项将对红、绿、蓝通道发挥同等影"
+"响 。"
+
+#: include/sane/saneopts.h:321
+#, no-c-format
+msgid "Gamma-correction table for the red band."
+msgstr "伽玛校正表-红通道。"
+
+#: include/sane/saneopts.h:324
+#, no-c-format
+msgid "Gamma-correction table for the green band."
+msgstr "伽玛校正表-绿通道。"
+
+#: include/sane/saneopts.h:327
+#, no-c-format
+msgid "Gamma-correction table for the blue band."
+msgstr "伽玛校正表-蓝通道。"
+
+#: include/sane/saneopts.h:330
+#, no-c-format
+msgid "Controls the brightness of the acquired image."
+msgstr "控制捕获图像的亮度。"
+
+#: include/sane/saneopts.h:333
+#, no-c-format
+msgid "Controls the contrast of the acquired image."
+msgstr "控制捕获图像的对比度。"
+
+#: include/sane/saneopts.h:336
+#, no-c-format
+msgid ""
+"Selects the \"graininess\" of the acquired image. Smaller values result "
+"in sharper images."
+msgstr "控制捕获图像的“颗粒感”。数值越小,图像越锐利。"
+
+#: include/sane/saneopts.h:340
+#, no-c-format
+msgid "Selects whether the acquired image should be halftoned (dithered)."
+msgstr "选择是否对捕获图像进行半调 (抖动) 处理。"
+
+#: include/sane/saneopts.h:343 include/sane/saneopts.h:358
+#, no-c-format
+msgid "Selects what radiance level should be considered \"black\"."
+msgstr "选择被视作纯黑的亮度级别。"
+
+#: include/sane/saneopts.h:346 include/sane/saneopts.h:367
+#, no-c-format
+msgid "Selects what radiance level should be considered \"white\"."
+msgstr "选择被视作纯白的亮度级别。"
+
+#: include/sane/saneopts.h:349
+#, no-c-format
+msgid "Selects what red radiance level should be considered \"white\"."
+msgstr "选择被视作纯白的红通道亮度级别。"
+
+#: include/sane/saneopts.h:352
+#, no-c-format
+msgid "Selects what green radiance level should be considered \"white\"."
+msgstr "选择被视作纯白的绿通道亮度级别。"
+
+#: include/sane/saneopts.h:355
+#, no-c-format
+msgid "Selects what blue radiance level should be considered \"white\"."
+msgstr "选择被视作纯白的蓝通道亮度级别。"
+
+#: include/sane/saneopts.h:360
+#, no-c-format
+msgid "Selects what red radiance level should be considered \"black\"."
+msgstr "选择被视作纯黑的红通道亮度级别。"
+
+#: include/sane/saneopts.h:362
+#, no-c-format
+msgid "Selects what green radiance level should be considered \"black\"."
+msgstr "选择被视作纯黑的绿通道亮度级别。"
+
+#: include/sane/saneopts.h:364
+#, no-c-format
+msgid "Selects what blue radiance level should be considered \"black\"."
+msgstr "选择被视作纯黑的蓝通道亮度级别。"
+
+#: include/sane/saneopts.h:369
+#, no-c-format
+msgid "Selects what red radiance level should be considered \"full red\"."
+msgstr "选择被视作纯红的红通道亮度级别。"
+
+#: include/sane/saneopts.h:371
+#, no-c-format
+msgid ""
+"Selects what green radiance level should be considered \"full green\"."
+msgstr "选择被视作纯绿的绿通道亮度级别。"
+
+#: include/sane/saneopts.h:374
+#, no-c-format
+msgid ""
+"Selects what blue radiance level should be considered \"full blue\"."
+msgstr "选择被视作纯蓝的蓝通道亮度级别。"
+
+#: include/sane/saneopts.h:378
+#, no-c-format
+msgid "Controls the \"hue\" (blue-level) of the acquired image."
+msgstr "控制捕获图像的色相 (蓝度)。"
+
+#: include/sane/saneopts.h:381
+#, 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 ""
+"饱和度级别控制使用相机捕获图像时的颜色鲜艳程度。数值越大,颜色越鲜艳。"
+
+#: include/sane/saneopts.h:386
+#, no-c-format
+msgid "The filename of the image to be loaded."
+msgstr "将被加载图像的文件名。"
+
+#: include/sane/saneopts.h:389
+#, no-c-format
+msgid ""
+"Sets the size of the halftoning (dithering) pattern used when scanning "
+"halftoned images."
+msgstr "设置扫描半调图像时半调 (抖动) 的图案大小。"
+
+#: include/sane/saneopts.h:393
+#, no-c-format
+msgid ""
+"Defines the halftoning (dithering) pattern for scanning halftoned images."
+msgstr "指定扫描半调图像时使用的半调 (抖动) 图案。"
+
+#: include/sane/saneopts.h:397
+#, no-c-format
+msgid "Use same values for X and Y resolution"
+msgstr "为 X 和 Y 分辨率使用相同数值"
+
+#: include/sane/saneopts.h:399
+#, no-c-format
+msgid "Swap black and white"
+msgstr "反转黑白颜色"
+
+#: include/sane/saneopts.h:401
+#, no-c-format
+msgid "Do a quality white-calibration"
+msgstr "执行一次扫描品质白色校准"
+
+#: include/sane/saneopts.h:403
+#, no-c-format
+msgid "Use lens that doubles optical resolution"
+msgstr "使用让光学分辨率翻倍的镜头"
+
+#: include/sane/saneopts.h:405 include/sane/saneopts.h:417
+#, no-c-format
+msgid "In RGB-mode use same values for each color"
+msgstr "在 RGB 模式下为每种颜色使用相同的数值"
+
+#: include/sane/saneopts.h:407
+#, no-c-format
+msgid "Select minimum-brightness to get a white point"
+msgstr "选择获取白点时的最小亮度值"
+
+#: include/sane/saneopts.h:409
+#, no-c-format
+msgid "Analog gamma-correction"
+msgstr "模拟伽玛值校准"
+
+#: include/sane/saneopts.h:411
+#, no-c-format
+msgid "Analog gamma-correction for red"
+msgstr "模拟伽玛值校准-红通道"
+
+#: include/sane/saneopts.h:413
+#, no-c-format
+msgid "Analog gamma-correction for green"
+msgstr "模拟伽玛值校准-绿通道"
+
+#: include/sane/saneopts.h:415
+#, no-c-format
+msgid "Analog gamma-correction for blue"
+msgstr "模拟伽玛值校准-蓝通道"
+
+#: include/sane/saneopts.h:419
+#, no-c-format
+msgid "Warm up lamp before scanning"
+msgstr "扫描前预热背光灯"
+
+#: include/sane/saneopts.h:421
+#, no-c-format
+msgid "Define exposure-time for calibration"
+msgstr "指定校准时的曝光时间"
+
+#: include/sane/saneopts.h:423
+#, no-c-format
+msgid "Define exposure-time for red calibration"
+msgstr "指定红通道校准时的曝光时间"
+
+#: include/sane/saneopts.h:425
+#, no-c-format
+msgid "Define exposure-time for green calibration"
+msgstr "指定绿通道校准时的曝光时间"
+
+#: include/sane/saneopts.h:427
+#, no-c-format
+msgid "Define exposure-time for blue calibration"
+msgstr "指定蓝通道校准时的曝光时间"
+
+#: include/sane/saneopts.h:429
+#, no-c-format
+msgid "Define exposure-time for scan"
+msgstr "指定扫描时的曝光时间"
+
+#: include/sane/saneopts.h:431
+#, no-c-format
+msgid "Define exposure-time for red scan"
+msgstr "指定红通道扫描时的曝光时间"
+
+#: include/sane/saneopts.h:433
+#, no-c-format
+msgid "Define exposure-time for green scan"
+msgstr "指定绿通道扫描时的曝光时间"
+
+#: include/sane/saneopts.h:435
+#, no-c-format
+msgid "Define exposure-time for blue scan"
+msgstr "指定蓝通道扫描时的曝光时间"
+
+#: include/sane/saneopts.h:437
+#, no-c-format
+msgid "Enable selection of exposure-time"
+msgstr "启用曝光时间选择"
+
+#: include/sane/saneopts.h:439
+#, no-c-format
+msgid "Define lamp density for calibration"
+msgstr "指定校准时的背光灯密度"
+
+#: include/sane/saneopts.h:441
+#, no-c-format
+msgid "Define lamp density for scan"
+msgstr "指定扫描时的背光灯密度"
+
+#: include/sane/saneopts.h:443
+#, no-c-format
+msgid "Enable selection of lamp density"
+msgstr "启用背光灯密度选择"
+
+#: include/sane/saneopts.h:445 backend/umax.c:5828
+#, no-c-format
+msgid "Turn off lamp when program exits"
+msgstr "程序退出时关闭背光灯"
+
+#: include/sane/saneopts.h:447
+#, no-c-format
+msgid "Focus position for manual focus"
+msgstr "手动对焦使用的对焦位置"
+
+#: include/sane/saneopts.h:449
+#, no-c-format
+msgid "Perform autofocus before scan"
+msgstr "扫描前执行自动对焦"
+
+#: include/sane/saneopts.h:452
+#, no-c-format
+msgid "Scan button"
+msgstr "扫描按钮"
+
+#: include/sane/saneopts.h:453
+#, no-c-format
+msgid "Email button"
+msgstr "邮件按钮"
+
+#: include/sane/saneopts.h:454
+#, no-c-format
+msgid "Fax button"
+msgstr "传真按钮"
+
+#: include/sane/saneopts.h:455
+#, no-c-format
+msgid "Copy button"
+msgstr "复印按钮"
+
+#: include/sane/saneopts.h:456
+#, no-c-format
+msgid "PDF button"
+msgstr "PDF 按钮"
+
+#: include/sane/saneopts.h:457
+#, no-c-format
+msgid "Cancel button"
+msgstr "取消按钮"
+
+#: include/sane/saneopts.h:458
+#, no-c-format
+msgid "Page loaded"
+msgstr "页面已装载"
+
+#: include/sane/saneopts.h:459
+#, no-c-format
+msgid "Cover open"
+msgstr "上盖打开"
+
+#: include/sane/saneopts.h:462
+#, no-c-format
+msgid "Color"
+msgstr "彩色"
+
+#: include/sane/saneopts.h:463
+#, no-c-format
+msgid "Color Lineart"
+msgstr "彩色线稿"
+
+#: include/sane/saneopts.h:464
+#, no-c-format
+msgid "Color Halftone"
+msgstr "彩色半调"
+
+#: include/sane/saneopts.h:465
+#, no-c-format
+msgid "Gray"
+msgstr "灰阶"
+
+#: include/sane/saneopts.h:466
+#, no-c-format
+msgid "Halftone"
+msgstr "半调"
+
+#: include/sane/saneopts.h:467
+#, no-c-format
+msgid "Lineart"
+msgstr "线稿"
+
+#: backend/sane_strstatus.c:57
+#, no-c-format
+msgid "Success"
+msgstr "成功"
+
+#: backend/sane_strstatus.c:60
+#, no-c-format
+msgid "Operation not supported"
+msgstr "操作不支持"
+
+#: backend/sane_strstatus.c:63
+#, no-c-format
+msgid "Operation was canceled"
+msgstr "操作已取消"
+
+#: backend/sane_strstatus.c:66
+#, no-c-format
+msgid "Device busy"
+msgstr "设备正忙"
+
+#: backend/sane_strstatus.c:69
+#, no-c-format
+msgid "Invalid argument"
+msgstr "无效参数"
+
+#: backend/sane_strstatus.c:72
+#, no-c-format
+msgid "End of file reached"
+msgstr "到达文件末尾"
+
+#: backend/sane_strstatus.c:75
+#, no-c-format
+msgid "Document feeder jammed"
+msgstr "输稿器卡纸"
+
+#: backend/sane_strstatus.c:78
+#, no-c-format
+msgid "Document feeder out of documents"
+msgstr "输稿器脱稿"
+
+#: backend/sane_strstatus.c:81
+#, no-c-format
+msgid "Scanner cover is open"
+msgstr "扫描仪上盖打开"
+
+#: backend/sane_strstatus.c:84
+#, no-c-format
+msgid "Error during device I/O"
+msgstr "设备传输出错"
+
+#: backend/sane_strstatus.c:87
+#, no-c-format
+msgid "Out of memory"
+msgstr "内存不足"
+
+#: backend/sane_strstatus.c:90
+#, no-c-format
+msgid "Access to resource has been denied"
+msgstr "对资源的访问权限已被禁止"
+
+#: backend/sane_strstatus.c:94
+#, no-c-format
+msgid "Lamp not ready, please retry"
+msgstr "背光灯未就绪,请重试"
+
+#: backend/sane_strstatus.c:99
+#, no-c-format
+msgid "Scanner mechanism locked for transport"
+msgstr "扫描仪可动机构已为运输而锁定"
+
+#: backend/artec_eplus48u.c:2872 backend/pnm.c:280
+#, no-c-format
+msgid "Defaults"
+msgstr "默认值"
+
+#: backend/artec_eplus48u.c:2874
+#, no-c-format
+msgid "Set default values for enhancement controls."
+msgstr "设置增强控制的默认值。"
+
+#: backend/artec_eplus48u.c:2930 backend/canon.c:1609
+#: backend/pixma/pixma_sane_options.c:406
+#, no-c-format
+msgid "Calibration"
+msgstr "校准"
+
+#: backend/artec_eplus48u.c:2939
+#, no-c-format
+msgid "Calibrate before next scan"
+msgstr "下一次扫描前校准"
+
+#: backend/artec_eplus48u.c:2941
+#, 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 ""
+"如果启用,该设备将在下一次扫描前进行校准。如果不启用,则仅在第一次扫描开"
+"始前进行校准。"
+
+#: backend/artec_eplus48u.c:2952
+#, no-c-format
+msgid "Only perform shading-correction"
+msgstr "仅进行遮光校准"
+
+#: backend/artec_eplus48u.c:2954
+#, no-c-format
+msgid ""
+"If enabled, only the shading correction is performed during calibration. "
+"The default values for gain, offset and exposure time, either built-in "
+"or from the configuration file, are used."
+msgstr ""
+"如果启用,在校准过程中将仅进行遮光校准。这将使用增益、偏移、曝光时间的内"
+"建或配置文件默认值。"
+
+#: backend/artec_eplus48u.c:2965
+#, no-c-format
+msgid "Button state"
+msgstr "按钮状态"
+
+#: backend/avision.h:832
+#, no-c-format
+msgid "Number of the frame to scan"
+msgstr "要扫描的帧号"
+
+#: backend/avision.h:833
+#, no-c-format
+msgid "Selects the number of the frame to scan"
+msgstr "选择要扫描的帧号"
+
+#: backend/avision.h:836
+#, no-c-format
+msgid "Duplex scan"
+msgstr "双向扫描"
+
+#: backend/avision.h:837
+#, no-c-format
+msgid ""
+"Duplex scan provides a scan of the front and back side of the document"
+msgstr "双向扫描将同时扫描文稿的正反两面"
+
+#: backend/canon-sane.c:674 backend/canon.c:169
+#, no-c-format
+msgid "Correction according to transparency ratio"
+msgstr "根据透光比例的校正"
+
+#: backend/canon-sane.c:680 backend/canon.c:168
+#, no-c-format
+msgid "Correction according to film type"
+msgstr "根据胶片类型的校正"
+
+#: backend/canon-sane.c:732 backend/canon-sane.c:940
+#: backend/canon-sane.c:1076 backend/canon-sane.c:1314
+#: backend/canon-sane.c:1494 backend/canon-sane.c:1643 backend/canon.c:155
+#, no-c-format
+msgid "Fine color"
+msgstr "全彩"
+
+#: backend/canon-sane.c:776 backend/canon.c:174
+#, no-c-format
+msgid "Negatives"
+msgstr "负片"
+
+#: backend/canon-sane.c:1318 backend/canon.c:147
+#, no-c-format
+msgid "Raw"
+msgstr "RAW"
+
+#: backend/canon.c:167
+#, no-c-format
+msgid "No transparency correction"
+msgstr "无透光校正"
+
+#: backend/canon.c:174
+#, no-c-format
+msgid "Slides"
+msgstr "幻灯片"
+
+#: backend/canon.c:184 backend/kvs1025_opt.c:180 backend/kvs40xx_opt.c:273
+#: backend/matsushita.c:175
+#, no-c-format
+msgid "Automatic"
+msgstr "自动"
+
+#: backend/canon.c:184
+#, no-c-format
+msgid "Normal speed"
+msgstr "正常速度"
+
+#: backend/canon.c:185
+#, no-c-format
+msgid "1/2 normal speed"
+msgstr "1/2 正常速度"
+
+#: backend/canon.c:185
+#, no-c-format
+msgid "1/3 normal speed"
+msgstr "1/3 正常速度"
+
+#: backend/canon.c:358
+#, no-c-format
+msgid "rounded parameter"
+msgstr "四舍五入参数"
+
+#: backend/canon.c:361 backend/canon.c:377 backend/canon.c:412
+#: backend/canon.c:462 backend/canon.c:480 backend/canon.c:523
+#, no-c-format
+msgid "unknown"
+msgstr "位置"
+
+#: backend/canon.c:371
+#, no-c-format
+msgid "ADF jam"
+msgstr "自动输稿器卡纸"
+
+#: backend/canon.c:374
+#, no-c-format
+msgid "ADF cover open"
+msgstr "自动输稿器上盖打开"
+
+#: backend/canon.c:387
+#, no-c-format
+msgid "lamp failure"
+msgstr "背光灯故障"
+
+#: backend/canon.c:390
+#, no-c-format
+msgid "scan head positioning error"
+msgstr "扫描头定位错误"
+
+#: backend/canon.c:393
+#, no-c-format
+msgid "CPU check error"
+msgstr "CPU 检查错误"
+
+#: backend/canon.c:396
+#, no-c-format
+msgid "RAM check error"
+msgstr "RAM 检查错误"
+
+#: backend/canon.c:399
+#, no-c-format
+msgid "ROM check error"
+msgstr "ROM 检查错误"
+
+#: backend/canon.c:402
+#, no-c-format
+msgid "hardware check error"
+msgstr "硬件检查错误"
+
+#: backend/canon.c:405
+#, no-c-format
+msgid "transparency unit lamp failure"
+msgstr "透扫器背光灯故障"
+
+#: backend/canon.c:408
+#, no-c-format
+msgid "transparency unit scan head positioning failure"
+msgstr "透扫器扫描头定位故障"
+
+#: backend/canon.c:422
+#, no-c-format
+msgid "parameter list length error"
+msgstr "参数列表长度错误"
+
+#: backend/canon.c:426
+#, no-c-format
+msgid "invalid command operation code"
+msgstr "无效指令操作码"
+
+#: backend/canon.c:430
+#, no-c-format
+msgid "invalid field in CDB"
+msgstr "无效的 CDB 字段"
+
+#: backend/canon.c:434
+#, no-c-format
+msgid "unsupported LUN"
+msgstr "不支持的 LUN"
+
+#: backend/canon.c:438
+#, no-c-format
+msgid "invalid field in parameter list"
+msgstr "无效的参数表字段"
+
+#: backend/canon.c:442
+#, no-c-format
+msgid "command sequence error"
+msgstr "指令序列错误"
+
+#: backend/canon.c:446
+#, no-c-format
+msgid "too many windows specified"
+msgstr "指定窗口过多"
+
+#: backend/canon.c:450
+#, no-c-format
+msgid "medium not present"
+msgstr "介质缺失"
+
+#: backend/canon.c:454
+#, no-c-format
+msgid "invalid bit IDENTIFY message"
+msgstr "无效位 IDENTIFY 消息"
+
+#: backend/canon.c:458
+#, no-c-format
+msgid "option not correct"
+msgstr "选项不正确"
+
+#: backend/canon.c:472
+#, no-c-format
+msgid "power on reset / bus device reset"
+msgstr "开机重置/总线设备重置"
+
+#: backend/canon.c:476
+#, no-c-format
+msgid "parameter changed by another initiator"
+msgstr "参数已被另一个发起程序更改"
+
+#: backend/canon.c:490
+#, no-c-format
+msgid "no additional sense information"
+msgstr "无额外传感信息"
+
+#: backend/canon.c:494
+#, no-c-format
+msgid "reselect failure"
+msgstr "重新选择失败"
+
+#: backend/canon.c:498
+#, no-c-format
+msgid "SCSI parity error"
+msgstr "SCSI 奇偶校验错误"
+
+#: backend/canon.c:502
+#, no-c-format
+msgid "initiator detected error message received"
+msgstr "发起程序收到已检测到错误消息"
+
+#: backend/canon.c:507
+#, no-c-format
+msgid "invalid message error"
+msgstr "无效消息错误"
+
+#: backend/canon.c:511
+#, no-c-format
+msgid "timeout error"
+msgstr "超时错误"
+
+#: backend/canon.c:515
+#, no-c-format
+msgid "transparency unit shading error"
+msgstr "透扫器遮光错误"
+
+#: backend/canon.c:519
+#, no-c-format
+msgid "lamp not stabilized"
+msgstr "背光灯未稳定"
+
+#: backend/canon.c:845 backend/canon.c:860
+#, no-c-format
+msgid "film scanner"
+msgstr "胶片扫描仪"
+
+#: backend/canon.c:875 backend/canon.c:890 backend/canon.c:905
+#: backend/canon.c:920 backend/hp3900_sane.c:1682 backend/plustek.c:1333
+#: backend/plustek_pp.c:1012 backend/sceptre.c:590 backend/teco2.c:1829
+#: backend/u12.c:849
+#, no-c-format
+msgid "flatbed scanner"
+msgstr "平板扫描仪"
+
+#: backend/canon.c:1176 backend/epson.c:3384 backend/epson2.c:1388
+#, no-c-format
+msgid "Film type"
+msgstr "胶片类型"
+
+#: backend/canon.c:1177
+#, no-c-format
+msgid "Selects the film type, i.e. negatives or slides"
+msgstr "选择胶片类型,例如负片还是幻灯片"
+
+#: backend/canon.c:1189
+#, no-c-format
+msgid "Negative film type"
+msgstr "负片类型"
+
+#: backend/canon.c:1190
+#, no-c-format
+msgid "Selects the negative film type"
+msgstr "选择负片类型"
+
+#: backend/canon.c:1229
+#, no-c-format
+msgid "Hardware resolution"
+msgstr "硬件分辨率"
+
+#: backend/canon.c:1230
+#, no-c-format
+msgid "Use only hardware resolutions"
+msgstr "仅使用硬件分辨率"
+
+#: backend/canon.c:1311 backend/epson2.c:1331
+#, no-c-format
+msgid "Focus"
+msgstr "对焦"
+
+#: backend/canon.c:1321
+#, no-c-format
+msgid "Auto focus"
+msgstr "自动对焦"
+
+#: backend/canon.c:1322
+#, no-c-format
+msgid "Enable/disable auto focus"
+msgstr "启用/禁用自动对焦"
+
+#: backend/canon.c:1329
+#, no-c-format
+msgid "Auto focus only once"
+msgstr "仅自动对焦一次"
+
+#: backend/canon.c:1330
+#, no-c-format
+msgid "Do auto focus only once between ejects"
+msgstr "仅在每次退片后执行一次自动对焦"
+
+#: backend/canon.c:1338
+#, no-c-format
+msgid "Manual focus position"
+msgstr "手动对焦位置"
+
+#: backend/canon.c:1339
+#, no-c-format
+msgid "Set the optical system's focus position by hand (default: 128)."
+msgstr "手动设置光学系统对焦位置 (默认值:128)"
+
+#: backend/canon.c:1349
+#, no-c-format
+msgid "Scan margins"
+msgstr "扫描边距"
+
+#: backend/canon.c:1396
+#, no-c-format
+msgid "Extra color adjustments"
+msgstr "额外颜色调整"
+
+#: backend/canon.c:1531 backend/epson.c:3203 backend/epson2.c:1245
+#: backend/kvs1025.h:55 backend/kvs40xx_opt.c:826
+#, no-c-format
+msgid "Mirror image"
+msgstr "镜像翻转图像"
+
+#: backend/canon.c:1532
+#, no-c-format
+msgid "Mirror the image horizontally"
+msgstr "水平镜像翻转图像"
+
+#: backend/canon.c:1601
+#, no-c-format
+msgid "Auto exposure"
+msgstr "自动曝光"
+
+#: backend/canon.c:1602
+#, no-c-format
+msgid "Enable/disable the auto exposure feature"
+msgstr "启用/禁用自动曝光功能"
+
+#: backend/canon.c:1618
+#, no-c-format
+msgid "Calibration now"
+msgstr "立即校准"
+
+#: backend/canon.c:1619
+#, no-c-format
+msgid "Execute calibration *now*"
+msgstr "立即执行校准"
+
+#: backend/canon.c:1629
+#, no-c-format
+msgid "Self diagnosis"
+msgstr "设备自检"
+
+#: backend/canon.c:1630
+#, no-c-format
+msgid "Perform scanner self diagnosis"
+msgstr "执行扫描仪自检"
+
+#: backend/canon.c:1641
+#, no-c-format
+msgid "Reset scanner"
+msgstr "重置扫描仪"
+
+#: backend/canon.c:1642
+#, no-c-format
+msgid "Reset the scanner"
+msgstr "重置扫描仪"
+
+#: backend/canon.c:1652
+#, no-c-format
+msgid "Medium handling"
+msgstr "介质处理"
+
+#: backend/canon.c:1661
+#, no-c-format
+msgid "Eject film after each scan"
+msgstr "每次扫描后退出胶片"
+
+#: backend/canon.c:1662
+#, no-c-format
+msgid "Automatically eject the film from the device after each scan"
+msgstr "每次扫描后自动从设备中退出胶片"
+
+#: backend/canon.c:1673
+#, no-c-format
+msgid "Eject film before exit"
+msgstr "退出程序前退出胶片"
+
+#: backend/canon.c:1674
+#, no-c-format
+msgid ""
+"Automatically eject the film from the device before exiting the program"
+msgstr "退出程序前自动从设备中退出胶片"
+
+#: backend/canon.c:1683
+#, no-c-format
+msgid "Eject film now"
+msgstr "立即退出胶片"
+
+#: backend/canon.c:1684
+#, no-c-format
+msgid "Eject the film *now*"
+msgstr "立即退出胶片"
+
+#: backend/canon.c:1693
+#, no-c-format
+msgid "Document feeder extras"
+msgstr "输稿器额外设置"
+
+#: backend/canon.c:1700
+#, no-c-format
+msgid "Flatbed only"
+msgstr "仅使用平板扫描仪"
+
+#: backend/canon.c:1701
+#, no-c-format
+msgid "Disable auto document feeder and use flatbed only"
+msgstr "禁用自动输稿器,仅使用平板扫描仪"
+
+#: backend/canon.c:1711 backend/canon.c:1721
+#, no-c-format
+msgid "Transparency unit"
+msgstr "透扫器"
+
+#: backend/canon.c:1722
+#, no-c-format
+msgid "Switch on/off the transparency unit (FAU, film adapter unit)"
+msgstr "开/关透扫器 (胶片适配器模块/FAU)"
+
+#: backend/canon.c:1732
+#, no-c-format
+msgid "Negative film"
+msgstr "负片"
+
+#: backend/canon.c:1733
+#, no-c-format
+msgid "Positive or negative film"
+msgstr "正片或负片"
+
+#: backend/canon.c:1742
+#, no-c-format
+msgid "Density control"
+msgstr "密度控制"
+
+#: backend/canon.c:1743
+#, no-c-format
+msgid "Set density control mode"
+msgstr "设置密度控制模式"
+
+#: backend/canon.c:1754
+#, no-c-format
+msgid "Transparency ratio"
+msgstr "透光比例"
+
+#: backend/canon.c:1768
+#, no-c-format
+msgid "Select film type"
+msgstr "选择胶片类型"
+
+#: backend/canon.c:1769
+#, no-c-format
+msgid "Select the film type"
+msgstr "选择胶片类型"
+
+#: backend/canon630u.c:157
+#, no-c-format
+msgid "Calibrate Scanner"
+msgstr "校准扫描仪"
+
+#: backend/canon630u.c:158
+#, no-c-format
+msgid "Force scanner calibration before scan"
+msgstr "扫描前强制校准扫描仪"
+
+#: backend/canon630u.c:257 backend/umax1220u.c:206
+#, no-c-format
+msgid "Grayscale scan"
+msgstr "灰阶扫描"
+
+#: backend/canon630u.c:258 backend/umax1220u.c:207
+#, no-c-format
+msgid "Do a grayscale rather than color scan"
+msgstr "进行灰阶扫描而不是彩色扫描"
+
+#: backend/canon630u.c:304
+#, no-c-format
+msgid "Analog Gain"
+msgstr "模拟增益"
+
+#: backend/canon630u.c:305
+#, no-c-format
+msgid "Increase or decrease the analog gain of the CCD array"
+msgstr "提高或降低 CCD 阵列的模拟增益"
+
+#: backend/canon630u.c:345 backend/epson.h:66 backend/epson2.h:70
+#, no-c-format
+msgid "Gamma Correction"
+msgstr "伽玛值校正"
+
+#: backend/canon630u.c:346
+#, no-c-format
+msgid "Selects the gamma corrected transfer curve"
+msgstr "选择伽玛值校正转移曲线"
+
+#: backend/canon_dr.c:429 backend/epjitsu.c:231 backend/epson.c:499
+#: backend/epson2-ops.c:101 backend/epson2.c:111 backend/epsonds-ops.c:31
+#: backend/epsonds.c:1319 backend/epsonds.h:65 backend/epsonds.h:69
+#: backend/fujitsu.c:683 backend/genesys/genesys.h:76 backend/gt68xx.c:146
+#: backend/hp3900_sane.c:417 backend/hp3900_sane.c:426
+#: backend/hp3900_sane.c:1016 backend/hp5590.c:90 backend/kodakaio.c:617
+#: backend/ma1509.c:106 backend/magicolor.c:181 backend/mustek.c:154
+#: backend/mustek.c:158 backend/mustek.c:162 backend/pixma/pixma.c:996
+#: backend/pixma/pixma_sane_options.c:93 backend/snapscan-options.c:86
+#: backend/test.c:232 backend/umax.c:179
+#, no-c-format
+msgid "Flatbed"
+msgstr "平板扫描仪"
+
+#: backend/canon_dr.c:430 backend/epjitsu.c:232 backend/epsonds-ops.c:32
+#: backend/epsonds.c:1320 backend/epsonds.h:70 backend/fujitsu.c:684
+#: backend/kodak.c:138
+#, no-c-format
+msgid "ADF Front"
+msgstr "自动输稿器正面"
+
+#: backend/canon_dr.c:431 backend/epjitsu.c:233 backend/fujitsu.c:685
+#: backend/kodak.c:139
+#, no-c-format
+msgid "ADF Back"
+msgstr "自动输稿器反面"
+
+#: backend/canon_dr.c:432 backend/epjitsu.c:234 backend/epsonds-ops.c:33
+#: backend/epsonds.c:1321 backend/epsonds.h:71 backend/fujitsu.c:686
+#: backend/hp5590.c:92 backend/kodak.c:140 backend/pixma/pixma.c:1007
+#, no-c-format
+msgid "ADF Duplex"
+msgstr "自动输稿器双向"
+
+#: backend/canon_dr.c:433 backend/fujitsu.c:687
+#, no-c-format
+msgid "Card Front"
+msgstr "名片正面"
+
+#: backend/canon_dr.c:434 backend/fujitsu.c:688
+#, no-c-format
+msgid "Card Back"
+msgstr "名片反面"
+
+#: backend/canon_dr.c:435 backend/fujitsu.c:689
+#, no-c-format
+msgid "Card Duplex"
+msgstr "名片双向"
+
+#: backend/canon_dr.c:442 backend/epson.c:597 backend/epson.c:3094
+#: backend/epson2.c:191 backend/fujitsu.c:706
+#: backend/genesys/genesys.cpp:117 backend/genesys/genesys.cpp:124
+#: backend/gt68xx_low.h:134 backend/hp-option.c:3091
+#, no-c-format
+msgid "Red"
+msgstr "红"
+
+#: backend/canon_dr.c:443 backend/epson.c:598 backend/epson.c:3090
+#: backend/epson2.c:192 backend/fujitsu.c:707
+#: backend/genesys/genesys.cpp:118 backend/genesys/genesys.cpp:125
+#: backend/gt68xx_low.h:135 backend/hp-option.c:3092
+#, no-c-format
+msgid "Green"
+msgstr "绿"
+
+#: backend/canon_dr.c:444 backend/epson.c:599 backend/epson.c:3098
+#: backend/epson2.c:193 backend/fujitsu.c:708
+#: backend/genesys/genesys.cpp:119 backend/genesys/genesys.cpp:126
+#: backend/gt68xx_low.h:136 backend/hp-option.c:3093
+#, no-c-format
+msgid "Blue"
+msgstr "蓝"
+
+#: backend/canon_dr.c:445
+#, no-c-format
+msgid "Enhance Red"
+msgstr "增强红"
+
+#: backend/canon_dr.c:446
+#, no-c-format
+msgid "Enhance Green"
+msgstr "增强绿"
+
+#: backend/canon_dr.c:447
+#, no-c-format
+msgid "Enhance Blue"
+msgstr "增强蓝"
+
+#: backend/canon_dr.c:449 backend/epson.c:554 backend/epson.c:562
+#: backend/epson.c:574 backend/epson.c:596 backend/epson2.c:155
+#: backend/epson2.c:163 backend/epson2.c:175 backend/epson2.c:190
+#: backend/epson2.c:204 backend/fujitsu.c:712
+#: backend/genesys/genesys.cpp:127 backend/leo.c:106
+#: backend/matsushita.c:135 backend/matsushita.c:156
+#: backend/matsushita.c:188 backend/matsushita.c:210
+#: backend/snapscan-options.c:91
+#, no-c-format
+msgid "None"
+msgstr "无"
+
+#: backend/canon_dr.c:450 backend/fujitsu.c:713
+#, no-c-format
+msgid "JPEG"
+msgstr "JPEG"
+
+#: backend/canon_dr.c:2623 backend/fujitsu.c:4140 backend/kvs1025_opt.c:910
+#, no-c-format
+msgid "Software blank skip percentage"
+msgstr "软件空白页跳过百分比"
+
+#: backend/canon_dr.c:2624 backend/fujitsu.c:4141
+#, no-c-format
+msgid "Request driver to discard pages with low percentage of dark pixels"
+msgstr "请求驱动程序丢弃暗色比例较低的页面"
+
+#: backend/canon_lide70.c:342 backend/epson.c:2811 backend/epson2.c:967
+#: backend/genesys/genesys.cpp:4632 backend/gt68xx.c:449
+#: backend/hp-option.c:2912 backend/kvs1025_opt.c:521
+#: backend/kvs20xx_opt.c:171 backend/kvs40xx_opt.c:320 backend/ma1509.c:499
+#: backend/matsushita.c:1081 backend/microtek2.h:596 backend/mustek.c:4213
+#: backend/mustek_usb.c:254 backend/mustek_usb2.c:342 backend/niash.c:731
+#: backend/plustek.c:719 backend/plustek_pp.c:656 backend/sceptre.c:670
+#: backend/snapscan-options.c:354 backend/stv680.c:1027
+#: backend/teco2.c:1879 backend/test.c:377 backend/u12.c:471
+#: backend/umax.c:5052
+#, no-c-format
+msgid "Scan Mode"
+msgstr "扫描模式"
+
+#: backend/canon_lide70.c:402 backend/test.c:662
+#, no-c-format
+msgid "Use non-blocking IO"
+msgstr "使用非块状传输"
+
+#: backend/canon_lide70.c:403 backend/test.c:663
+#, no-c-format
+msgid "Use non-blocking IO for sane_read() if supported by the frontend."
+msgstr "如果前端程序支持,为 sane_read() 使用非块状传输。"
+
+#: backend/epson.c:489 backend/epson2.c:104 backend/kodakaio.c:611
+#: backend/magicolor.c:174
+#, no-c-format
+msgid "Simplex"
+msgstr "单工"
+
+#: backend/epson.c:490 backend/epson2.c:105 backend/kodakaio.c:612
+#: backend/kvs1025.h:50 backend/kvs20xx_opt.c:204 backend/kvs40xx_opt.c:353
+#: backend/magicolor.c:175 backend/matsushita.h:212
+#, no-c-format
+msgid "Duplex"
+msgstr "双工"
+
+#: backend/epson.c:500 backend/epson2-ops.c:102 backend/epson2.c:112
+#: backend/epsonds.h:66 backend/pixma/pixma.c:1013
+#, no-c-format
+msgid "Transparency Unit"
+msgstr "透扫器"
+
+#: backend/epson.c:501 backend/epson2-ops.c:104 backend/epson2.c:114
+#: backend/epsonds.h:67 backend/kodakaio.c:618 backend/magicolor.c:182
+#: backend/mustek.c:158 backend/pixma/pixma.c:1001 backend/test.c:232
+#: backend/umax.c:181
+#, no-c-format
+msgid "Automatic Document Feeder"
+msgstr "自动输稿器"
+
+#: backend/epson.c:521 backend/epson2.c:130
+#, no-c-format
+msgid "Positive Film"
+msgstr "正片"
+
+#: backend/epson.c:522 backend/epson2.c:131
+#, no-c-format
+msgid "Negative Film"
+msgstr "负片"
+
+#: backend/epson.c:527
+#, no-c-format
+msgid "Focus on glass"
+msgstr "对焦到玻璃表面"
+
+#: backend/epson.c:528
+#, no-c-format
+msgid "Focus 2.5mm above glass"
+msgstr "对焦到玻璃表面上方 2.5mm"
+
+#: backend/epson.c:555 backend/epson.c:563 backend/epson.c:575
+#: backend/epson2.c:156 backend/epson2.c:164 backend/epson2.c:176
+#, no-c-format
+msgid "Halftone A (Hard Tone)"
+msgstr "半调 A (硬调)"
+
+#: backend/epson.c:556 backend/epson.c:564 backend/epson.c:576
+#: backend/epson2.c:157 backend/epson2.c:165 backend/epson2.c:177
+#, no-c-format
+msgid "Halftone B (Soft Tone)"
+msgstr "半调 B (软调)"
+
+#: backend/epson.c:557 backend/epson.c:565 backend/epson.c:577
+#: backend/epson2.c:158 backend/epson2.c:166 backend/epson2.c:178
+#, no-c-format
+msgid "Halftone C (Net Screen)"
+msgstr "半调 C (网面)"
+
+#: backend/epson.c:566 backend/epson.c:578 backend/epson2.c:167
+#: backend/epson2.c:179
+#, no-c-format
+msgid "Dither A (4x4 Bayer)"
+msgstr "抖动 A (4x4 拜耳)"
+
+#: backend/epson.c:567 backend/epson.c:579 backend/epson2.c:168
+#: backend/epson2.c:180
+#, no-c-format
+msgid "Dither B (4x4 Spiral)"
+msgstr "抖动 B (4x4 螺旋)"
+
+#: backend/epson.c:568 backend/epson.c:580 backend/epson2.c:169
+#: backend/epson2.c:181
+#, no-c-format
+msgid "Dither C (4x4 Net Screen)"
+msgstr "抖动 C (4x4 网面)"
+
+#: backend/epson.c:569 backend/epson.c:581 backend/epson2.c:170
+#: backend/epson2.c:182
+#, no-c-format
+msgid "Dither D (8x4 Net Screen)"
+msgstr "抖动 D (8x4 网面)"
+
+#: backend/epson.c:582 backend/epson2.c:183
+#, no-c-format
+msgid "Text Enhanced Technology"
+msgstr "文本增强技术"
+
+#: backend/epson.c:583 backend/epson2.c:184
+#, no-c-format
+msgid "Download pattern A"
+msgstr "下载图案 A"
+
+#: backend/epson.c:584 backend/epson2.c:185
+#, no-c-format
+msgid "Download pattern B"
+msgstr "下载图案 B"
+
+#: backend/epson.c:629
+#, no-c-format
+msgid "No Correction"
+msgstr "无校正"
+
+#: backend/epson.c:630 backend/epson.c:655 backend/epson2.c:245
+#, no-c-format
+msgid "User defined"
+msgstr "用户定义"
+
+#: backend/epson.c:631
+#, no-c-format
+msgid "Impact-dot printers"
+msgstr "针式打印机"
+
+#: backend/epson.c:632
+#, no-c-format
+msgid "Thermal printers"
+msgstr "热敏打印机"
+
+#: backend/epson.c:633
+#, no-c-format
+msgid "Ink-jet printers"
+msgstr "喷墨打印机"
+
+#: backend/epson.c:634
+#, no-c-format
+msgid "CRT monitors"
+msgstr "CRT 显示器"
+
+#: backend/epson.c:654 backend/epson2.c:244 backend/fujitsu.c:696
+#: backend/hp-option.c:3224 backend/test.c:147
+#, no-c-format
+msgid "Default"
+msgstr "默认"
+
+#: backend/epson.c:656 backend/epson2.c:246
+#, no-c-format
+msgid "High density printing"
+msgstr "高密度印刷物"
+
+#: backend/epson.c:657 backend/epson2.c:247
+#, no-c-format
+msgid "Low density printing"
+msgstr "低密度印刷物"
+
+#: backend/epson.c:658 backend/epson2.c:248
+#, no-c-format
+msgid "High contrast printing"
+msgstr "高对比度印刷物"
+
+#: backend/epson.c:676 backend/epson2.c:266
+#, no-c-format
+msgid "User defined (Gamma=1.0)"
+msgstr "用户定义 (伽玛值=1.0)"
+
+#: backend/epson.c:677 backend/epson2.c:267
+#, no-c-format
+msgid "User defined (Gamma=1.8)"
+msgstr "用户定义 (伽玛值=1.8)"
+
+#: backend/epson.c:755
+#, no-c-format
+msgid "CD"
+msgstr "CD"
+
+#: backend/epson.c:756
+#, no-c-format
+msgid "A5 portrait"
+msgstr "A5 纵向"
+
+#: backend/epson.c:757
+#, no-c-format
+msgid "A5 landscape"
+msgstr "A5 横向"
+
+#: backend/epson.c:758 backend/kvs1025_opt.c:103 backend/kvs20xx_opt.c:77
+#: backend/kvs40xx_opt.c:131 backend/kvs40xx_opt.c:148
+#, no-c-format
+msgid "Letter"
+msgstr "美国信纸 (Letter)"
+
+#: backend/epson.c:759 backend/kvs1025_opt.c:100 backend/kvs20xx_opt.c:74
+#: backend/kvs20xx_opt.c:302 backend/kvs40xx_opt.c:128
+#: backend/kvs40xx_opt.c:145 backend/kvs40xx_opt.c:526
+#, no-c-format
+msgid "A4"
+msgstr "A4"
+
+#: backend/epson.c:760
+#, no-c-format
+msgid "Max"
+msgstr "最大值"
+
+#: backend/epson.c:2843 backend/epson2.c:1002
+#, no-c-format
+msgid "Selects the halftone."
+msgstr "选择半调。"
+
+#: backend/epson.c:2865 backend/epson2.c:1023
+#, no-c-format
+msgid "Dropout"
+msgstr "丢弃"
+
+#: backend/epson.c:2866 backend/epson2.c:1024
+#, no-c-format
+msgid "Selects the dropout."
+msgstr "选择丢弃区域。"
+
+#: backend/epson.c:2878 backend/epson2.c:1036
+#, no-c-format
+msgid "Selects the brightness."
+msgstr "选择亮度。"
+
+#: backend/epson.c:2893 backend/epson2.c:1049
+#, no-c-format
+msgid "Sharpness"
+msgstr "锐利度"
+
+#: backend/epson.c:3029 backend/epson2.c:1165 backend/epson2.c:1212
+#, no-c-format
+msgid "Color correction"
+msgstr "颜色校正"
+
+#: backend/epson.c:3032 backend/epson2.c:1167
+#, no-c-format
+msgid "Sets the color correction table for the selected output device."
+msgstr "设置所选输出设备的色彩校正表。"
+
+#: backend/epson.c:3073
+#, no-c-format
+msgid "Color correction coefficients"
+msgstr "色彩校正系数"
+
+#: backend/epson.c:3074
+#, no-c-format
+msgid "Matrix multiplication of RGB"
+msgstr "RGB 矩阵乘法"
+
+#: backend/epson.c:3091
+#, no-c-format
+msgid "Shift green to red"
+msgstr "偏移绿到红"
+
+#: backend/epson.c:3092
+#, no-c-format
+msgid "Shift green to blue"
+msgstr "偏移绿到蓝"
+
+#: backend/epson.c:3093
+#, no-c-format
+msgid "Shift red to green"
+msgstr "偏移红到绿"
+
+#: backend/epson.c:3095
+#, no-c-format
+msgid "Shift red to blue"
+msgstr "偏移红到蓝"
+
+#: backend/epson.c:3096
+#, no-c-format
+msgid "Shift blue to green"
+msgstr "偏移蓝到绿"
+
+#: backend/epson.c:3097
+#, no-c-format
+msgid "Shift blue to red"
+msgstr "偏移蓝到红"
+
+#: backend/epson.c:3100
+#, no-c-format
+msgid "Controls green level"
+msgstr "控制绿级别"
+
+#: backend/epson.c:3101
+#, no-c-format
+msgid "Adds to red based on green level"
+msgstr "基于绿级别增加红"
+
+#: backend/epson.c:3102
+#, no-c-format
+msgid "Adds to blue based on green level"
+msgstr "基于绿级别增加蓝"
+
+#: backend/epson.c:3103
+#, no-c-format
+msgid "Adds to green based on red level"
+msgstr "基于红级别增加绿"
+
+#: backend/epson.c:3104
+#, no-c-format
+msgid "Controls red level"
+msgstr "控制红级别"
+
+#: backend/epson.c:3105
+#, no-c-format
+msgid "Adds to blue based on red level"
+msgstr "基于红级别增加蓝"
+
+#: backend/epson.c:3106
+#, no-c-format
+msgid "Adds to green based on blue level"
+msgstr "基于蓝级别增加绿"
+
+#: backend/epson.c:3107
+#, no-c-format
+msgid "Adds to red based on blue level"
+msgstr "基于蓝级别增加红"
+
+#: backend/epson.c:3108
+#, no-c-format
+msgid "Controls blue level"
+msgstr "控制蓝级别"
+
+#: backend/epson.c:3204 backend/epson2.c:1246
+#, no-c-format
+msgid "Mirror the image."
+msgstr "镜像翻转图像。"
+
+#: backend/epson.c:3230 backend/mustek.c:4342
+#, no-c-format
+msgid "Fast preview"
+msgstr "快速预览"
+
+#: backend/epson.c:3243 backend/epson2.c:1256
+#, no-c-format
+msgid "Auto area segmentation"
+msgstr "自动分区"
+
+#: backend/epson.c:3256
+#, no-c-format
+msgid "Short resolution list"
+msgstr "分辨率简表"
+
+#: backend/epson.c:3258
+#, no-c-format
+msgid "Display short resolution list"
+msgstr "显示分辨率简表"
+
+#: backend/epson.c:3265
+#, no-c-format
+msgid "Zoom"
+msgstr "缩放"
+
+#: backend/epson.c:3267
+#, no-c-format
+msgid "Defines the zoom factor the scanner will use"
+msgstr "指定扫描仪使用的缩放系数"
+
+#: backend/epson.c:3347
+#, no-c-format
+msgid "Quick format"
+msgstr "快速格式"
+
+#: backend/epson.c:3358 backend/epson2.c:1364 backend/epsonds.c:2022
+#, no-c-format
+msgid "Optional equipment"
+msgstr "选装模块"
+
+#: backend/epson.c:3429 backend/epson2.c:1401 backend/epsonds.c:2038
+#, no-c-format
+msgid "Eject"
+msgstr "退纸"
+
+#: backend/epson.c:3430 backend/epson2.c:1402 backend/epsonds.c:2039
+#, no-c-format
+msgid "Eject the sheet in the ADF"
+msgstr "退出自动输稿器中的纸张"
+
+#: backend/epson.c:3442 backend/epson2.c:1412
+#, no-c-format
+msgid "Auto eject"
+msgstr "自动退纸"
+
+#: backend/epson.c:3443 backend/epson2.c:1414
+#, no-c-format
+msgid "Eject document after scanning"
+msgstr "扫描后退出文稿"
+
+#: backend/epson.c:3455 backend/epson2.c:1424 backend/kodakaio.c:2859
+#: backend/magicolor.c:2454
+#, no-c-format
+msgid "ADF Mode"
+msgstr "自动输稿器模式"
+
+#: backend/epson.c:3457 backend/epson2.c:1426 backend/kodakaio.c:2861
+#: backend/magicolor.c:2456
+#, no-c-format
+msgid "Selects the ADF mode (simplex/duplex)"
+msgstr "选择自动输稿器模式 (单向/双向)"
+
+#: backend/epson.c:3471 backend/epson2.c:1438
+#, no-c-format
+msgid "Bay"
+msgstr "送纸盒"
+
+#: backend/epson.c:3472 backend/epson2.c:1439
+#, no-c-format
+msgid "Select bay to scan"
+msgstr "选择要扫描的送纸盒"
+
+#: backend/epson.h:67 backend/epson2.h:71
+#, 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 ""
+"选择伽玛值校正值,可从设备预设或用户定义的伽玛表列表中选择。该表将被下载"
+"到扫描仪"
+
+#: backend/epson.h:70 backend/epson2.h:74
+#, no-c-format
+msgid "Focus Position"
+msgstr "对焦位置"
+
+#: backend/epson.h:71 backend/epson2.h:75
+#, no-c-format
+msgid ""
+"Sets the focus position to either the glass or 2.5mm above the glass"
+msgstr "设置对焦位置为玻璃表面还是玻璃表面上方 2.5mm"
+
+#: backend/epson.h:73 backend/epson2.h:77
+#, no-c-format
+msgid "Wait for Button"
+msgstr "等待按钮按下"
+
+#: backend/epson.h:74 backend/epson2.h:78
+#, 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 "发送扫描指令后,等待扫描仪上的按钮被按下后才开始实际扫描进程。"
+
+#: backend/epson2-ops.c:103 backend/epson2.c:113
+#, no-c-format
+msgid "TPU8x10"
+msgstr "TPU8x10"
+
+#: backend/epson2.c:98 backend/pixma/pixma.c:414
+#, no-c-format
+msgid "Infrared"
+msgstr "红外"
+
+#: backend/epson2.c:132
+#, no-c-format
+msgid "Positive Slide"
+msgstr "正片幻灯片"
+
+#: backend/epson2.c:133
+#, no-c-format
+msgid "Negative Slide"
+msgstr "负片幻灯片"
+
+#: backend/epson2.c:205
+#, no-c-format
+msgid "Built in CCT profile"
+msgstr "内建 CCT 配置文件"
+
+#: backend/epson2.c:206
+#, no-c-format
+msgid "User defined CCT profile"
+msgstr "用户定义 CCT 配置文件"
+
+#: backend/epsonds.c:2046
+#, no-c-format
+msgid "Load"
+msgstr "装载"
+
+#: backend/epsonds.c:2047
+#, no-c-format
+msgid "Load a sheet in the ADF"
+msgstr "装载自动输稿器中的一页文稿"
+
+#: backend/epsonds.c:2055
+#, no-c-format
+msgid "ADF Skew Correction"
+msgstr "自动输稿器倾斜纠正"
+
+#: backend/epsonds.c:2057
+#, no-c-format
+msgid "Enables ADF skew correction"
+msgstr "启用自动输稿器倾斜纠正"
+
+#: backend/epsonds.c:2063
+#, fuzzy, no-c-format
+msgid "ADF CRP Correction"
+msgstr "自动输稿器倾斜纠正"
+
+#: backend/epsonds.c:2065
+#, fuzzy, no-c-format
+msgid "Enables ADF auto cropping"
+msgstr "启用自动输稿器倾斜纠正"
+
+#: backend/fujitsu.c:697 backend/hp-option.c:3325 backend/hp-option.c:3338
+#, no-c-format
+msgid "On"
+msgstr "开"
+
+#: backend/fujitsu.c:698 backend/hp-option.c:3157 backend/hp-option.c:3324
+#: backend/hp-option.c:3337
+#, no-c-format
+msgid "Off"
+msgstr "关"
+
+#: backend/fujitsu.c:700
+#, no-c-format
+msgid "DTC"
+msgstr "DTC"
+
+#: backend/fujitsu.c:701
+#, no-c-format
+msgid "SDTC"
+msgstr "SDTC"
+
+#: backend/fujitsu.c:703 backend/teco1.c:1149 backend/teco1.c:1150
+#: backend/teco2.c:1964 backend/teco2.c:1965 backend/teco3.c:974
+#: backend/teco3.c:975
+#, no-c-format
+msgid "Dither"
+msgstr "抖动"
+
+#: backend/fujitsu.c:704
+#, no-c-format
+msgid "Diffusion"
+msgstr "扩散"
+
+#: backend/fujitsu.c:709
+#, no-c-format
+msgid "White"
+msgstr "白"
+
+#: backend/fujitsu.c:710
+#, no-c-format
+msgid "Black"
+msgstr "黑"
+
+#: backend/fujitsu.c:715
+#, no-c-format
+msgid "Continue"
+msgstr "继续"
+
+#: backend/fujitsu.c:716
+#, no-c-format
+msgid "Stop"
+msgstr "停止"
+
+#: backend/fujitsu.c:718
+#, no-c-format
+msgid "10mm"
+msgstr "10mm"
+
+#: backend/fujitsu.c:719
+#, no-c-format
+msgid "15mm"
+msgstr "15mm"
+
+#: backend/fujitsu.c:720
+#, no-c-format
+msgid "20mm"
+msgstr "20mm"
+
+#: backend/fujitsu.c:722 backend/hp-option.c:3043
+#, no-c-format
+msgid "Horizontal"
+msgstr "水平"
+
+#: backend/fujitsu.c:723
+#, no-c-format
+msgid "Horizontal bold"
+msgstr "水平加宽"
+
+#: backend/fujitsu.c:724
+#, no-c-format
+msgid "Horizontal narrow"
+msgstr "水平收窄"
+
+#: backend/fujitsu.c:725 backend/hp-option.c:3042
+#, no-c-format
+msgid "Vertical"
+msgstr "垂直"
+
+#: backend/fujitsu.c:726
+#, no-c-format
+msgid "Vertical bold"
+msgstr "垂直加宽"
+
+#: backend/fujitsu.c:728
+#, no-c-format
+msgid "Top to bottom"
+msgstr "由上至下"
+
+#: backend/fujitsu.c:729
+#, no-c-format
+msgid "Bottom to top"
+msgstr "由下至上"
+
+#: backend/fujitsu.c:731
+#, no-c-format
+msgid "Front"
+msgstr "正面"
+
+#: backend/fujitsu.c:732
+#, no-c-format
+msgid "Back"
+msgstr "反面"
+
+#: backend/fujitsu.c:3171 backend/pixma/pixma_sane_options.c:146
+#, no-c-format
+msgid "Gamma function exponent"
+msgstr "伽玛函数指数"
+
+#: backend/fujitsu.c:3172 backend/pixma/pixma_sane_options.c:147
+#, no-c-format
+msgid "Changes intensity of midtones"
+msgstr "更改中间调亮度"
+
+#: backend/fujitsu.c:3221
+#, no-c-format
+msgid "RIF"
+msgstr "RIF"
+
+#: backend/fujitsu.c:3222
+#, no-c-format
+msgid "Reverse image format"
+msgstr "反向图像格式"
+
+#: backend/fujitsu.c:3239
+#, no-c-format
+msgid "Halftone type"
+msgstr "半调类型"
+
+#: backend/fujitsu.c:3240
+#, no-c-format
+msgid "Control type of halftone filter"
+msgstr "控制半调滤镜类型"
+
+#: backend/fujitsu.c:3261
+#, no-c-format
+msgid "Control pattern of halftone filter"
+msgstr "控制半调滤镜图案"
+
+#: backend/fujitsu.c:3283
+#, no-c-format
+msgid "Outline"
+msgstr "轮廓"
+
+#: backend/fujitsu.c:3284
+#, no-c-format
+msgid "Perform outline extraction"
+msgstr "执行轮廓提取"
+
+#: backend/fujitsu.c:3295
+#, no-c-format
+msgid "Emphasis"
+msgstr "重点"
+
+#: backend/fujitsu.c:3296
+#, no-c-format
+msgid "Negative to smooth or positive to sharpen image"
+msgstr "负值将对图像进行平滑处理,正值则对图像进行锐化处理"
+
+#: backend/fujitsu.c:3314
+#, no-c-format
+msgid "Separation"
+msgstr "分离"
+
+#: backend/fujitsu.c:3315
+#, no-c-format
+msgid "Enable automatic separation of image and text"
+msgstr "启用自动图像与文本分离"
+
+#: backend/fujitsu.c:3326
+#, no-c-format
+msgid "Mirroring"
+msgstr "镜像翻转"
+
+#: backend/fujitsu.c:3327
+#, no-c-format
+msgid "Reflect output image horizontally"
+msgstr "水平镜像翻转输出图像"
+
+#: backend/fujitsu.c:3344
+#, no-c-format
+msgid "White level follower"
+msgstr "白级别跟随参数"
+
+#: backend/fujitsu.c:3345
+#, no-c-format
+msgid "Control white level follower"
+msgstr "控制白级别跟随参数"
+
+#: backend/fujitsu.c:3363
+#, no-c-format
+msgid "BP filter"
+msgstr "圆珠笔滤镜"
+
+#: backend/fujitsu.c:3364
+#, no-c-format
+msgid "Improves quality of high resolution ball-point pen text"
+msgstr "改善高分辨率圆珠笔文本的品质"
+
+#: backend/fujitsu.c:3380 backend/hp-option.h:68
+#, no-c-format
+msgid "Smoothing"
+msgstr "平滑"
+
+#: backend/fujitsu.c:3381
+#, no-c-format
+msgid "Enable smoothing for improved OCR"
+msgstr "启用平滑以改善光学文本识别效果"
+
+#: backend/fujitsu.c:3397
+#, no-c-format
+msgid "Gamma curve"
+msgstr "伽玛曲线"
+
+#: backend/fujitsu.c:3398
+#, no-c-format
+msgid "Gamma curve, from light to dark, but upper two may not work"
+msgstr "伽玛值,由亮到暗,但最上面的两项可能不能工作"
+
+#: backend/fujitsu.c:3420 backend/pixma/pixma_sane_options.c:378
+#, no-c-format
+msgid "Threshold curve"
+msgstr "阈值曲线"
+
+#: backend/fujitsu.c:3421
+#, no-c-format
+msgid ""
+"Threshold curve, from light to dark, but upper two may not be linear"
+msgstr "阈值曲线,由亮到暗,但最上面的两项可能不是线性"
+
+#: backend/fujitsu.c:3443
+#, no-c-format
+msgid "Threshold white"
+msgstr "阈值白"
+
+#: backend/fujitsu.c:3444
+#, no-c-format
+msgid "Set pixels equal to threshold to white instead of black"
+msgstr "设置像素的阈值等值为白而不是黑"
+
+#: backend/fujitsu.c:3460 backend/fujitsu.c:3461
+#, no-c-format
+msgid "Noise removal"
+msgstr "噪点移除"
+
+#: backend/fujitsu.c:3477
+#, no-c-format
+msgid "Matrix 5x5"
+msgstr "矩阵 5x5"
+
+#: backend/fujitsu.c:3478
+#, no-c-format
+msgid "Remove 5 pixel square noise"
+msgstr "移除 5 像素方格噪点"
+
+#: backend/fujitsu.c:3494
+#, no-c-format
+msgid "Matrix 4x4"
+msgstr "矩阵 4x4"
+
+#: backend/fujitsu.c:3495
+#, no-c-format
+msgid "Remove 4 pixel square noise"
+msgstr "移除 4 像素方格噪点"
+
+#: backend/fujitsu.c:3511
+#, no-c-format
+msgid "Matrix 3x3"
+msgstr "矩阵 3x3"
+
+#: backend/fujitsu.c:3512
+#, no-c-format
+msgid "Remove 3 pixel square noise"
+msgstr "移除 3 像素方格噪点"
+
+#: backend/fujitsu.c:3528
+#, no-c-format
+msgid "Matrix 2x2"
+msgstr "矩阵 2x2"
+
+#: backend/fujitsu.c:3529
+#, no-c-format
+msgid "Remove 2 pixel square noise"
+msgstr "移除 2 像素方格噪点"
+
+#: backend/fujitsu.c:3548
+#, no-c-format
+msgid "Variance"
+msgstr "差异"
+
+#: backend/fujitsu.c:3549
+#, no-c-format
+msgid "Set SDTC variance rate (sensitivity), 0 equals 127"
+msgstr "设置 SDTC 差异率 (灵敏度),0 相当于 127"
+
+#: backend/fujitsu.c:3582
+#, no-c-format
+msgid "Auto width detection"
+msgstr "自动宽度检测"
+
+#: backend/fujitsu.c:3583
+#, no-c-format
+msgid "Scanner detects paper sides. May reduce scanning speed."
+msgstr "扫描仪将检测纸张边缘。可能会降低扫描速度。"
+
+#: backend/fujitsu.c:3600
+#, no-c-format
+msgid "Auto length detection"
+msgstr "自动长度检测"
+
+#: backend/fujitsu.c:3601
+#, no-c-format
+msgid "Scanner detects paper lower edge. May confuse some frontends."
+msgstr "扫描仪将检测纸张下边缘。可能会造成某些前端程序工作失灵。"
+
+#: backend/fujitsu.c:3627
+#, no-c-format
+msgid "Compression"
+msgstr "压缩"
+
+#: backend/fujitsu.c:3628
+#, no-c-format
+msgid "Enable compressed data. May crash your front-end program"
+msgstr "启用数据压缩。可能会导致某些前端程序崩溃"
+
+#: backend/fujitsu.c:3648
+#, no-c-format
+msgid "Compression argument"
+msgstr "压缩参数"
+
+#: backend/fujitsu.c:3649
+#, no-c-format
+msgid ""
+"Level of JPEG compression. 1 is small file, 7 is large file. 0 (default) "
+"is same as 4"
+msgstr "JPEG 压缩级别。1 为小文件,7 为大文件。0 (默认值) 相当于 4"
+
+#: backend/fujitsu.c:3679
+#, no-c-format
+msgid "DF action"
+msgstr "双张进纸操作"
+
+#: backend/fujitsu.c:3680
+#, no-c-format
+msgid "Action following double feed error"
+msgstr "双张进纸错误后的操作"
+
+#: backend/fujitsu.c:3696
+#, no-c-format
+msgid "DF skew"
+msgstr "双张进纸倾斜"
+
+#: backend/fujitsu.c:3697
+#, no-c-format
+msgid "Enable double feed error due to skew"
+msgstr "启用由于纸张倾斜造成的双张进纸错误"
+
+#: backend/fujitsu.c:3715
+#, no-c-format
+msgid "DF thickness"
+msgstr "双张进纸厚度"
+
+#: backend/fujitsu.c:3716
+#, no-c-format
+msgid "Enable double feed error due to paper thickness"
+msgstr "启用由于纸张厚度造成的双张进纸错误"
+
+#: backend/fujitsu.c:3734
+#, no-c-format
+msgid "DF length"
+msgstr "双张进纸长度"
+
+#: backend/fujitsu.c:3735
+#, no-c-format
+msgid "Enable double feed error due to paper length"
+msgstr "启用由于纸张长度造成的双张进纸错误"
+
+#: backend/fujitsu.c:3758
+#, no-c-format
+msgid "DF length difference"
+msgstr "双张进纸长度差异"
+
+#: backend/fujitsu.c:3759
+#, no-c-format
+msgid "Difference in page length to trigger double feed error"
+msgstr "纸张长度差异将激发双张进纸错误"
+
+#: backend/fujitsu.c:3782
+#, no-c-format
+msgid "DF recovery mode"
+msgstr "双张进纸恢复模式"
+
+#: backend/fujitsu.c:3783
+#, no-c-format
+msgid "Request scanner to reverse feed on paper jam"
+msgstr "请求扫描仪在卡纸时反向送纸"
+
+#: backend/fujitsu.c:3802
+#, no-c-format
+msgid "Paper protection"
+msgstr "纸张保护"
+
+#: backend/fujitsu.c:3803
+#, no-c-format
+msgid "Request scanner to predict jams in the ADF"
+msgstr "请求扫描仪预测自动输稿器卡纸"
+
+#: backend/fujitsu.c:3822
+#, no-c-format
+msgid "Advanced paper protection"
+msgstr "高级纸张保护"
+
+#: backend/fujitsu.c:3823
+#, no-c-format
+msgid "Request scanner to predict jams in the ADF using improved sensors"
+msgstr "请求扫描仪使用改良的传感器预测自动输稿器卡纸"
+
+#: backend/fujitsu.c:3842
+#, no-c-format
+msgid "Staple detection"
+msgstr "订书钉检测"
+
+#: backend/fujitsu.c:3843
+#, no-c-format
+msgid "Request scanner to detect jams in the ADF caused by staples"
+msgstr "请求扫描仪检测由于订书钉造成的自动输稿器卡纸"
+
+#: backend/fujitsu.c:3862
+#, no-c-format
+msgid "Background color"
+msgstr "背景色"
+
+#: backend/fujitsu.c:3863
+#, no-c-format
+msgid ""
+"Set color of background for scans. May conflict with overscan option"
+msgstr "设置扫描图像的背景色。可能与过扫描选项冲突"
+
+#: backend/fujitsu.c:3883
+#, no-c-format
+msgid "Dropout color"
+msgstr "丢弃颜色"
+
+#: backend/fujitsu.c:3884
+#, no-c-format
+msgid ""
+"One-pass scanners use only one color during gray or binary scanning, "
+"useful for colored paper or ink"
+msgstr "单遍式扫描仪在灰阶或单色扫描时仅使用一种颜色,对于色纸或彩墨有效"
+
+#: backend/fujitsu.c:3907
+#, no-c-format
+msgid "Buffer mode"
+msgstr "缓冲模式"
+
+#: backend/fujitsu.c:3908
+#, no-c-format
+msgid "Request scanner to read pages quickly from ADF into internal memory"
+msgstr "请求扫描仪从自动输稿器快速读取页面到内存"
+
+#: backend/fujitsu.c:3927
+#, no-c-format
+msgid "Prepick"
+msgstr "预拾取"
+
+#: backend/fujitsu.c:3928
+#, no-c-format
+msgid "Request scanner to grab next page from ADF"
+msgstr "请求扫描仪从自动输稿器拾取下一页"
+
+#: backend/fujitsu.c:3947
+#, no-c-format
+msgid "Overscan"
+msgstr "过扫描"
+
+#: backend/fujitsu.c:3948
+#, no-c-format
+msgid ""
+"Collect a few mm of background on top side of scan, before paper enters "
+"ADF, and increase maximum scan area beyond paper size, to allow "
+"collection on remaining sides. May conflict with bgcolor option"
+msgstr ""
+"在纸张进入自动输稿器之前在扫描图像的顶端额外扫描数毫米,并扩展扫描区域到"
+"纸张大小之外,以捕获剩余的边缘。可能会与背景色选项冲突"
+
+#: backend/fujitsu.c:3966
+#, no-c-format
+msgid "Sleep timer"
+msgstr "睡眠计时器"
+
+#: backend/fujitsu.c:3967
+#, no-c-format
+msgid ""
+"Time in minutes until the internal power supply switches to sleep mode"
+msgstr "扫描仪内部电源切换为睡眠模式的计时器,单位为分钟"
+
+#: backend/fujitsu.c:3985
+#, no-c-format
+msgid "Off timer"
+msgstr "关机计时器"
+
+#: backend/fujitsu.c:3986
+#, no-c-format
+msgid ""
+"Time in minutes until the internal power supply switches the scanner "
+"off. Will be rounded to nearest 15 minutes. Zero means never power off."
+msgstr ""
+"扫描仪内部电源关机的计时器,单位为分钟。将被四舍五入到最接近 15 分钟的数"
+"值。0 意味着永不关机。"
+
+#: backend/fujitsu.c:4004
+#, no-c-format
+msgid "Duplex offset"
+msgstr "双面扫描偏移"
+
+#: backend/fujitsu.c:4005
+#, no-c-format
+msgid "Adjust front/back offset"
+msgstr "调整正反面偏移"
+
+#: backend/fujitsu.c:4022 backend/plustek.c:1023 backend/umax_pp.c:793
+#, no-c-format
+msgid "Green offset"
+msgstr "绿偏移"
+
+#: backend/fujitsu.c:4023
+#, no-c-format
+msgid "Adjust green/red offset"
+msgstr "调整绿/红偏移"
+
+#: backend/fujitsu.c:4040 backend/plustek.c:1039 backend/umax_pp.c:805
+#, no-c-format
+msgid "Blue offset"
+msgstr "蓝偏移"
+
+#: backend/fujitsu.c:4041
+#, no-c-format
+msgid "Adjust blue/red offset"
+msgstr "调整蓝/红偏移"
+
+#: backend/fujitsu.c:4054
+#, no-c-format
+msgid "Low Memory"
+msgstr "低内存占用"
+
+#: backend/fujitsu.c:4055
+#, no-c-format
+msgid ""
+"Limit driver memory usage for use in embedded systems. Causes some "
+"duplex transfers to alternate sides on each call to sane_read. Value of "
+"option 'side' can be used to determine correct image. This option should "
+"only be used with custom front-end software."
+msgstr ""
+"限制驱动程序的内存占用以适应嵌入式系统。将造成单次 sane_read 调用的某些双"
+"工传输的图像被传输到正反两面。“双面扫描正反”数值可用于确定正确的图像。此"
+"选项只应配合定制的前端软件使用。"
+
+#: backend/fujitsu.c:4070
+#, no-c-format
+msgid "Duplex side"
+msgstr "双面扫描正反"
+
+#: backend/fujitsu.c:4071
+#, no-c-format
+msgid ""
+"Tells which side (0=front, 1=back) of a duplex scan the next call to "
+"sane_read will return."
+msgstr "指定下一次调用 sane_read 时返回的是纸张的哪一面(0=正面,1=反面)。"
+
+#: backend/fujitsu.c:4082
+#, no-c-format
+msgid "Hardware deskew and crop"
+msgstr "硬件倾斜纠正与裁剪"
+
+#: backend/fujitsu.c:4083
+#, no-c-format
+msgid "Request scanner to rotate and crop pages digitally."
+msgstr "请求扫描仪对页面进行数码旋转和裁剪。"
+
+#: backend/fujitsu.c:4094 backend/kvs1025_opt.c:871
+#, no-c-format
+msgid "Software deskew"
+msgstr "软件倾斜纠正"
+
+#: backend/fujitsu.c:4095
+#, no-c-format
+msgid "Request driver to rotate skewed pages digitally."
+msgstr "请求扫描仪对页面进行数码倾斜纠正。"
+
+#: backend/fujitsu.c:4107 backend/kvs1025_opt.c:880
+#, no-c-format
+msgid "Software despeckle diameter"
+msgstr "软件去色斑直径"
+
+#: backend/fujitsu.c:4108
+#, no-c-format
+msgid "Maximum diameter of lone dots to remove from scan."
+msgstr "要从扫描图像中移除的单个斑点最大直径"
+
+#: backend/fujitsu.c:4127
+#, no-c-format
+msgid "Software crop"
+msgstr "软件裁剪"
+
+#: backend/fujitsu.c:4128
+#, no-c-format
+msgid "Request driver to remove border from pages digitally."
+msgstr "请求驱动程序以数码方式移除页面外框。"
+
+#: backend/fujitsu.c:4157
+#, no-c-format
+msgid "Halt on Cancel"
+msgstr "取消时挂起"
+
+#: backend/fujitsu.c:4158
+#, no-c-format
+msgid ""
+"Request driver to halt the paper feed instead of eject during a cancel."
+msgstr "请求驱动程序在取消时挂起送纸操作而不是退纸。"
+
+#: backend/fujitsu.c:4169
+#, no-c-format
+msgid "Endorser Options"
+msgstr "背书器选项"
+
+#: backend/fujitsu.c:4170
+#, no-c-format
+msgid "Controls for endorser unit"
+msgstr "背书器模块控制"
+
+#: backend/fujitsu.c:4181
+#, no-c-format
+msgid "Endorser"
+msgstr "背书器"
+
+#: backend/fujitsu.c:4182
+#, no-c-format
+msgid "Enable endorser unit"
+msgstr "启用背书器模块"
+
+#: backend/fujitsu.c:4197
+#, no-c-format
+msgid "Endorser bits"
+msgstr "背书器位数"
+
+#: backend/fujitsu.c:4198
+#, no-c-format
+msgid "Determines maximum endorser counter value."
+msgstr "指定背书器的最大计数器数值"
+
+#: backend/fujitsu.c:4223
+#, no-c-format
+msgid "Endorser value"
+msgstr "背书器数值"
+
+#: backend/fujitsu.c:4224
+#, no-c-format
+msgid "Initial endorser counter value."
+msgstr "背书器计数器起始数值。"
+
+#: backend/fujitsu.c:4247
+#, no-c-format
+msgid "Endorser step"
+msgstr "背书器步长"
+
+#: backend/fujitsu.c:4248
+#, no-c-format
+msgid "Change endorser counter value by this much for each page."
+msgstr "按此数值为每个页面更改背书器数值。"
+
+#: backend/fujitsu.c:4271
+#, no-c-format
+msgid "Endorser Y"
+msgstr "背书器 Y"
+
+#: backend/fujitsu.c:4272
+#, no-c-format
+msgid "Endorser print offset from top of paper."
+msgstr "背书器距离页面顶部的打印偏移。"
+
+#: backend/fujitsu.c:4297
+#, no-c-format
+msgid "Endorser font"
+msgstr "背书器字体"
+
+#: backend/fujitsu.c:4298
+#, no-c-format
+msgid "Endorser printing font."
+msgstr "背书器打印字体。"
+
+#: backend/fujitsu.c:4327
+#, no-c-format
+msgid "Endorser direction"
+msgstr "背书器方向"
+
+#: backend/fujitsu.c:4328
+#, no-c-format
+msgid "Endorser printing direction."
+msgstr "背书器打印方向。"
+
+#: backend/fujitsu.c:4352
+#, no-c-format
+msgid "Endorser side"
+msgstr "背书器正反"
+
+#: backend/fujitsu.c:4353
+#, no-c-format
+msgid "Endorser printing side, requires hardware support to change"
+msgstr "背书器打印正反方向,需要硬件支持才能更改"
+
+#: backend/fujitsu.c:4378
+#, no-c-format
+msgid "Endorser string"
+msgstr "背书器字串"
+
+#: backend/fujitsu.c:4379
+#, no-c-format
+msgid ""
+"Endorser alphanumeric print format. %05ud or %08ud at the end will be "
+"replaced by counter value."
+msgstr ""
+"背书器英文数字打印格式。位于末尾的 %05ud 或 %08ud 将被替换为计数器数值。"
+
+#: backend/fujitsu.c:4406
+#, no-c-format
+msgid "Top edge"
+msgstr "上边缘"
+
+#: backend/fujitsu.c:4407
+#, no-c-format
+msgid "Paper is pulled partly into ADF"
+msgstr "纸张被部分拉入自动输稿器"
+
+#: backend/fujitsu.c:4418
+#, no-c-format
+msgid "A3 paper"
+msgstr "A3 纸"
+
+#: backend/fujitsu.c:4419
+#, no-c-format
+msgid "A3 paper detected"
+msgstr "检测到 A3 纸"
+
+#: backend/fujitsu.c:4430
+#, no-c-format
+msgid "B4 paper"
+msgstr "B4 纸"
+
+#: backend/fujitsu.c:4431
+#, no-c-format
+msgid "B4 paper detected"
+msgstr "检测到 B4 纸"
+
+#: backend/fujitsu.c:4442
+#, no-c-format
+msgid "A4 paper"
+msgstr "A4 纸"
+
+#: backend/fujitsu.c:4443
+#, no-c-format
+msgid "A4 paper detected"
+msgstr "检测到 A4 纸"
+
+#: backend/fujitsu.c:4454
+#, no-c-format
+msgid "B5 paper"
+msgstr "B5 纸"
+
+#: backend/fujitsu.c:4455
+#, no-c-format
+msgid "B5 paper detected"
+msgstr "检测到 B5 纸"
+
+#: backend/fujitsu.c:4478
+#, no-c-format
+msgid "OMR or DF"
+msgstr "光标阅卷机或双张进纸"
+
+#: backend/fujitsu.c:4479
+#, no-c-format
+msgid "OMR or double feed detected"
+msgstr "检测到光标阅卷机或双张进纸"
+
+#: backend/fujitsu.c:4502
+#, no-c-format
+msgid "Card loaded"
+msgstr "名片已装载"
+
+#: backend/fujitsu.c:4503
+#, no-c-format
+msgid "Card slot contains paper"
+msgstr "名片槽含有纸张"
+
+#: backend/fujitsu.c:4514
+#, no-c-format
+msgid "Power saving"
+msgstr "节能"
+
+#: backend/fujitsu.c:4515
+#, no-c-format
+msgid "Scanner in power saving mode"
+msgstr "扫描仪处于节能模式"
+
+#: backend/fujitsu.c:4538
+#, no-c-format
+msgid "Manual feed"
+msgstr "手动送纸"
+
+#: backend/fujitsu.c:4539
+#, no-c-format
+msgid "Manual feed selected"
+msgstr "已选择手动送纸"
+
+#: backend/fujitsu.c:4562
+#, no-c-format
+msgid "Function"
+msgstr "功能"
+
+#: backend/fujitsu.c:4563
+#, no-c-format
+msgid "Function character on screen"
+msgstr "功能字符屏显"
+
+#: backend/fujitsu.c:4574
+#, no-c-format
+msgid "Ink low"
+msgstr "墨量低"
+
+#: backend/fujitsu.c:4575
+#, no-c-format
+msgid "Imprinter ink running low"
+msgstr "压印机墨量低"
+
+#: backend/fujitsu.c:4586
+#, no-c-format
+msgid "Double feed"
+msgstr "双张进纸"
+
+#: backend/fujitsu.c:4587
+#, no-c-format
+msgid "Double feed detected"
+msgstr "检测到双张进纸"
+
+#: backend/fujitsu.c:4598
+#, no-c-format
+msgid "Error code"
+msgstr "错误代码"
+
+#: backend/fujitsu.c:4599
+#, no-c-format
+msgid "Hardware error code"
+msgstr "硬件错误代码"
+
+#: backend/fujitsu.c:4610
+#, no-c-format
+msgid "Skew angle"
+msgstr "倾斜角度"
+
+#: backend/fujitsu.c:4611
+#, no-c-format
+msgid "Requires black background for scanning"
+msgstr "要求扫描图像使用黑色背景"
+
+#: backend/fujitsu.c:4622
+#, no-c-format
+msgid "Ink remaining"
+msgstr "墨量剩余"
+
+#: backend/fujitsu.c:4623
+#, no-c-format
+msgid "Imprinter ink level"
+msgstr "压印机墨量级别"
+
+#: backend/fujitsu.c:4634
+#, no-c-format
+msgid "Density"
+msgstr "密度"
+
+#: backend/fujitsu.c:4635
+#, no-c-format
+msgid "Density dial"
+msgstr "密度旋钮"
+
+#: backend/fujitsu.c:4646 backend/fujitsu.c:4647
+#, no-c-format
+msgid "Duplex switch"
+msgstr "双工开关"
+
+#: backend/genesys/genesys.cpp:4821 backend/pixma/pixma_sane_options.c:357
+#, no-c-format
+msgid "Extras"
+msgstr "额外设置"
+
+#: backend/genesys/genesys.cpp:4830
+#, no-c-format
+msgid "Color filter"
+msgstr "颜色滤镜"
+
+#: backend/genesys/genesys.cpp:4833
+#, no-c-format
+msgid "When using gray or lineart this option selects the used color."
+msgstr "此选项选择灰阶或线稿模式使用的颜色。"
+
+#: backend/genesys/genesys.cpp:4857
+#, no-c-format
+msgid "Calibration file"
+msgstr "校准文件"
+
+#: backend/genesys/genesys.cpp:4858
+#, no-c-format
+msgid "Specify the calibration file to use"
+msgstr "指定要使用的校准文件"
+
+#: backend/genesys/genesys.cpp:4875
+#, no-c-format
+msgid "Calibration cache expiration time"
+msgstr "校准缓存过期时间"
+
+#: backend/genesys/genesys.cpp:4876
+#, no-c-format
+msgid ""
+"Time (in minutes) before a cached calibration expires. A value of 0 "
+"means cache is not used. A negative value means cache never expires."
+msgstr ""
+"已缓存校准的过期时间 (单位为分钟)。数值为 0 意味着不使用缓存。数值为负值"
+"意味着缓存永不过期。"
+
+#: backend/genesys/genesys.cpp:4886
+#, no-c-format
+msgid "Lamp off time"
+msgstr "背光灯关闭时间"
+
+#: backend/genesys/genesys.cpp:4889
+#, 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 ""
+"背光灯将在经过指定的时间 (单位为分钟) 后关闭。数值为 0 时背光灯将永不关"
+"闭。"
+
+#: backend/genesys/genesys.cpp:4899
+#, no-c-format
+msgid "Lamp off during scan"
+msgstr "扫描时关闭背光灯"
+
+#: backend/genesys/genesys.cpp:4900
+#, no-c-format
+msgid "The lamp will be turned off during scan. "
+msgstr "扫描时背光灯将被关闭。"
+
+#: backend/genesys/genesys.cpp:4927 backend/genesys/genesys.cpp:4928
+#, no-c-format
+msgid "File button"
+msgstr "文件按钮"
+
+#: backend/genesys/genesys.cpp:4972 backend/genesys/genesys.cpp:4973
+#, no-c-format
+msgid "OCR button"
+msgstr "光学识别按钮"
+
+#: backend/genesys/genesys.cpp:4984 backend/genesys/genesys.cpp:4985
+#, no-c-format
+msgid "Power button"
+msgstr "电源按钮"
+
+#: backend/genesys/genesys.cpp:4996 backend/genesys/genesys.cpp:4997
+#, no-c-format
+msgid "Extra button"
+msgstr "额外功能按钮"
+
+#: backend/genesys/genesys.cpp:5008 backend/gt68xx.c:753
+#, no-c-format
+msgid "Needs calibration"
+msgstr "需要校准"
+
+#: backend/genesys/genesys.cpp:5009 backend/gt68xx.c:754 backend/p5.c:1928
+#, no-c-format
+msgid "The scanner needs calibration for the current settings"
+msgstr "扫描仪需要为当前设置进行校准"
+
+#: backend/genesys/genesys.cpp:5020 backend/gt68xx.c:778
+#: backend/gt68xx.c:779 backend/p5.c:1937 backend/p5.c:1938
+#: backend/pixma/pixma_sane_options.c:227 backend/plustek.c:1078
+#, no-c-format
+msgid "Buttons"
+msgstr "按钮"
+
+#: backend/genesys/genesys.cpp:5029 backend/gt68xx.c:785
+#: backend/hp-option.h:92 backend/hp5400_sane.c:535 backend/niash.c:723
+#: backend/p5.c:1945 backend/plustek.c:939
+#, no-c-format
+msgid "Calibrate"
+msgstr "校准"
+
+#: backend/genesys/genesys.cpp:5031 backend/gt68xx.c:787 backend/p5.c:1947
+#, no-c-format
+msgid "Start calibration using special sheet"
+msgstr "使用特殊纸张开始校准"
+
+#: backend/genesys/genesys.cpp:5043 backend/gt68xx.c:800 backend/p5.c:1958
+#, no-c-format
+msgid "Clear calibration"
+msgstr "清除校准"
+
+#: backend/genesys/genesys.cpp:5044 backend/gt68xx.c:801 backend/p5.c:1960
+#, no-c-format
+msgid "Clear calibration cache"
+msgstr "清除校准缓存"
+
+#: backend/genesys/genesys.cpp:5054
+#, no-c-format
+msgid "Force calibration"
+msgstr "强制校准"
+
+#: backend/genesys/genesys.cpp:5055
+#, no-c-format
+msgid "Force calibration ignoring all and any calibration caches"
+msgstr "强制校准并忽略所有校准缓存"
+
+#: backend/genesys/genesys.cpp:5065
+#, no-c-format
+msgid "Ignore internal offsets"
+msgstr "忽略内部偏移"
+
+#: backend/genesys/genesys.cpp:5067
+#, no-c-format
+msgid ""
+"Acquires the image including the internal calibration areas of the "
+"scanner"
+msgstr "获取包括扫描仪内部校准区域在内的图像"
+
+#: backend/genesys/genesys.h:77 backend/gt68xx.c:147 backend/ma1509.c:106
+#: backend/mustek.c:162 backend/snapscan-options.c:87 backend/umax.c:180
+#, no-c-format
+msgid "Transparency Adapter"
+msgstr "透扫适配器"
+
+#: backend/genesys/genesys.h:78
+#, no-c-format
+msgid "Transparency Adapter Infrared"
+msgstr "透扫适配器红外"
+
+#: backend/gt68xx.c:468
+#, no-c-format
+msgid "Gray mode color"
+msgstr "灰阶模式颜色"
+
+#: backend/gt68xx.c:470
+#, no-c-format
+msgid "Selects which scan color is used gray mode (default: green)."
+msgstr "选择灰阶模式使用什么颜色进行扫描 (默认:绿色)。"
+
+#: backend/gt68xx.c:551 backend/hp3900_sane.c:1391
+#: backend/mustek_usb2.c:408
+#, no-c-format
+msgid "Debugging Options"
+msgstr "调试选项"
+
+#: backend/gt68xx.c:562 backend/mustek_usb2.c:417
+#, no-c-format
+msgid "Automatic warmup"
+msgstr "自动预热"
+
+#: backend/gt68xx.c:564
+#, no-c-format
+msgid ""
+"Warm-up until the lamp's brightness is constant instead of insisting on "
+"60 seconds warm-up time."
+msgstr "预热背光灯直至亮度稳定而不是强制预热 60 秒。"
+
+#: backend/gt68xx.c:576
+#, no-c-format
+msgid "Full scan"
+msgstr "完整扫描"
+
+#: backend/gt68xx.c:578
+#, no-c-format
+msgid ""
+"Scan the complete scanning area including calibration strip. Be careful. "
+"Don't select the full height. For testing only."
+msgstr ""
+"扫描包括校准条在内完整扫描区域。请慎重使用。不要选择完整高度。仅用于测"
+"试。"
+
+#: backend/gt68xx.c:589
+#, no-c-format
+msgid "Coarse calibration"
+msgstr "粗略校准"
+
+#: backend/gt68xx.c:591
+#, 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 ""
+"自动设置扫描的增益和偏移。禁用此选项后将显示手动模拟前端参数设置。此选项"
+"默认开启。仅用于测试。"
+
+#: backend/gt68xx.c:610
+#, no-c-format
+msgid "Coarse calibration for first scan only"
+msgstr "仅为第一次扫描进行粗略校准"
+
+#: backend/gt68xx.c:612
+#, 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 ""
+"粗略校准仅在第一次扫描时进行。适用于大多数扫描仪,能节省扫描时间。如果每"
+"次扫描的图像亮度有差异,请禁用此选项。仅用于测试。"
+
+#: backend/gt68xx.c:645
+#, no-c-format
+msgid "Backtrack lines"
+msgstr "反退线数"
+
+#: backend/gt68xx.c:647
+#, 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 ""
+"当反退发生时扫描头回移的线数。这可能发生在扫描仪的扫描速度快于计算机接收"
+"数据的速度时。低数值有助于提高扫描速度,但存在扫描缺线的风险。"
+
+#: backend/gt68xx.c:672 backend/mustek_usb2.c:450
+#, no-c-format
+msgid "Gamma value"
+msgstr "伽玛值"
+
+#: backend/gt68xx.c:674 backend/mustek_usb2.c:452
+#, no-c-format
+msgid "Sets the gamma value of all channels."
+msgstr "设置所有通道的伽玛值。"
+
+#: backend/hp-option.c:2982
+#, no-c-format
+msgid "Advanced Options"
+msgstr "高级选项"
+
+#: backend/hp-option.c:3039
+#, no-c-format
+msgid "Coarse"
+msgstr "粗略"
+
+#: backend/hp-option.c:3040
+#, no-c-format
+msgid "Fine"
+msgstr "精细"
+
+#: backend/hp-option.c:3041
+#, no-c-format
+msgid "Bayer"
+msgstr "Bayer"
+
+#: backend/hp-option.c:3044 backend/hp-option.c:3095
+#, no-c-format
+msgid "Custom"
+msgstr "自定义"
+
+#: backend/hp-option.c:3085 backend/hp-option.c:3141
+#: backend/hp-option.c:3156
+#, no-c-format
+msgid "Auto"
+msgstr "自动"
+
+#: backend/hp-option.c:3086
+#, no-c-format
+msgid "NTSC RGB"
+msgstr "NTSC RGB"
+
+#: backend/hp-option.c:3087
+#, no-c-format
+msgid "XPA RGB"
+msgstr "XPA RGB"
+
+#: backend/hp-option.c:3088
+#, no-c-format
+msgid "Pass-through"
+msgstr "透传"
+
+#: backend/hp-option.c:3089
+#, no-c-format
+msgid "NTSC Gray"
+msgstr "NTSC Gray"
+
+#: backend/hp-option.c:3090
+#, no-c-format
+msgid "XPA Gray"
+msgstr "XPA Gray"
+
+#: backend/hp-option.c:3142
+#, no-c-format
+msgid "Slow"
+msgstr "慢"
+
+#: backend/hp-option.c:3143 backend/hp-option.c:3250
+#: backend/kvs40xx_opt.c:230 backend/matsushita.c:241 backend/mustek.c:147
+#: backend/plustek.c:232 backend/plustek_pp.c:201 backend/u12.c:153
+#, no-c-format
+msgid "Normal"
+msgstr "正常"
+
+#: backend/hp-option.c:3144
+#, no-c-format
+msgid "Fast"
+msgstr "快"
+
+#: backend/hp-option.c:3145
+#, no-c-format
+msgid "Extra Fast"
+msgstr "超快"
+
+#: backend/hp-option.c:3158
+#, no-c-format
+msgid "2-pixel"
+msgstr "2 像素"
+
+#: backend/hp-option.c:3159
+#, no-c-format
+msgid "4-pixel"
+msgstr "4 像素"
+
+#: backend/hp-option.c:3160
+#, no-c-format
+msgid "8-pixel"
+msgstr "8 像素"
+
+#: backend/hp-option.c:3171
+#, no-c-format
+msgid "Print"
+msgstr "打印"
+
+#: backend/hp-option.c:3172 backend/hp3900_sane.c:426
+#: backend/hp3900_sane.c:1018
+#, no-c-format
+msgid "Slide"
+msgstr "幻灯片"
+
+#: backend/hp-option.c:3173
+#, no-c-format
+msgid "Film-strip"
+msgstr "胶片"
+
+#: backend/hp-option.c:3251 backend/hp5590.c:91
+#, no-c-format
+msgid "ADF"
+msgstr "自动输稿器"
+
+#: backend/hp-option.c:3252
+#, no-c-format
+msgid "XPA"
+msgstr "透扫器"
+
+#: backend/hp-option.c:3326 backend/hp-option.c:3339
+#, no-c-format
+msgid "Conditional"
+msgstr "有条件"
+
+#: backend/hp-option.c:3412
+#, no-c-format
+msgid "Experiment"
+msgstr "实验性"
+
+#: backend/hp-option.h:55
+#, no-c-format
+msgid "Sharpening"
+msgstr "锐化"
+
+#: backend/hp-option.h:56
+#, no-c-format
+msgid "Set sharpening value."
+msgstr "设置锐化数值。"
+
+#: backend/hp-option.h:61
+#, no-c-format
+msgid "Auto Threshold"
+msgstr "自动阈值"
+
+#: backend/hp-option.h:63
+#, no-c-format
+msgid "Enable automatic determination of threshold for line-art scans."
+msgstr "为线稿扫描启用自动阈值。"
+
+#: backend/hp-option.h:69
+#, no-c-format
+msgid "Select smoothing filter."
+msgstr "选择平滑滤镜。"
+
+#: backend/hp-option.h:74
+#, no-c-format
+msgid "Unload media after scan"
+msgstr "扫描后退出介质"
+
+#: backend/hp-option.h:75
+#, no-c-format
+msgid "Unloads the media after a scan."
+msgstr "扫描后退出介质。"
+
+#: backend/hp-option.h:80
+#, no-c-format
+msgid "Change document"
+msgstr "更换文稿"
+
+#: backend/hp-option.h:81
+#, no-c-format
+msgid "Change Document."
+msgstr "更换文稿。"
+
+#: backend/hp-option.h:86
+#, no-c-format
+msgid "Unload"
+msgstr "退出"
+
+#: backend/hp-option.h:87
+#, no-c-format
+msgid "Unload Document."
+msgstr "退出文稿。"
+
+#: backend/hp-option.h:93
+#, no-c-format
+msgid "Start calibration process."
+msgstr "开始校准过程。"
+
+#: backend/hp-option.h:98
+#, no-c-format
+msgid "Media"
+msgstr "介质"
+
+#: backend/hp-option.h:99
+#, no-c-format
+msgid "Set type of media."
+msgstr "设置介质类型。"
+
+#: backend/hp-option.h:104
+#, no-c-format
+msgid "Exposure time"
+msgstr "曝光时间"
+
+#: backend/hp-option.h:106
+#, 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 ""
+"曝光时间越长,扫描仪收集的光量越大。建议值:印刷品 175%,幻灯片和负片 "
+"150%。可为昏暗 (欠曝) 图像提高此数值。"
+
+#: backend/hp-option.h:114 backend/hp-option.h:121
+#, no-c-format
+msgid "Color Matrix"
+msgstr "颜色矩阵"
+
+#: backend/hp-option.h:116
+#, no-c-format
+msgid "Set the scanner's color matrix."
+msgstr "设置扫描仪的颜色矩阵。"
+
+#: backend/hp-option.h:122
+#, no-c-format
+msgid "Custom color matrix."
+msgstr "自定义颜色矩阵。"
+
+#: backend/hp-option.h:127
+#, no-c-format
+msgid "Mono Color Matrix"
+msgstr "单色颜色矩阵"
+
+#: backend/hp-option.h:128
+#, no-c-format
+msgid "Custom color matrix for grayscale scans."
+msgstr "设置灰阶扫描的颜色矩阵。"
+
+#: backend/hp-option.h:133
+#, no-c-format
+msgid "Mirror horizontal"
+msgstr "水平镜像翻转"
+
+#: backend/hp-option.h:134
+#, no-c-format
+msgid "Mirror image horizontally."
+msgstr "水平镜像翻转图像。"
+
+#: backend/hp-option.h:139
+#, no-c-format
+msgid "Mirror vertical"
+msgstr "垂直镜像翻转"
+
+#: backend/hp-option.h:140
+#, no-c-format
+msgid "Mirror image vertically."
+msgstr "垂直镜像翻转图像。"
+
+#: backend/hp-option.h:145
+#, no-c-format
+msgid "Update options"
+msgstr "更新选项"
+
+#: backend/hp-option.h:146
+#, no-c-format
+msgid "Update options."
+msgstr "更新选项。"
+
+#: backend/hp-option.h:151
+#, no-c-format
+msgid "8 bit output"
+msgstr "8 位输出"
+
+#: backend/hp-option.h:153
+#, no-c-format
+msgid "Use bit depth greater eight internally, but output only eight bits."
+msgstr "使用大于 8 位的内部色彩深度,但仅输出 8 位。"
+
+#: backend/hp-option.h:159
+#, no-c-format
+msgid "Front button wait"
+msgstr "前面板按钮等待"
+
+#: backend/hp-option.h:160
+#, no-c-format
+msgid "Wait to scan for front-panel button push."
+msgstr "等待前面板按钮按下时开始扫描。"
+
+#: backend/hp-option.h:167
+#, no-c-format
+msgid "Shut off lamp"
+msgstr "关闭背光灯"
+
+#: backend/hp-option.h:168
+#, no-c-format
+msgid "Shut off scanner lamp."
+msgstr "关闭扫描仪的背光灯。"
+
+#: backend/hp3500.c:1018
+#, no-c-format
+msgid "Geometry Group"
+msgstr "尺寸分组"
+
+#: backend/hp3500.c:1071 backend/hp3500.c:1072
+#, no-c-format
+msgid "Scan Mode Group"
+msgstr "扫描模式分组"
+
+#: backend/hp3900_sane.c:1404
+#, no-c-format
+msgid "Scanner model"
+msgstr "扫描仪型号"
+
+#: backend/hp3900_sane.c:1407
+#, no-c-format
+msgid "Allows one to test device behavior with other supported models"
+msgstr "方便测试其他支持型号的设备的行为"
+
+#: backend/hp3900_sane.c:1421
+#, no-c-format
+msgid "Image colors will be inverted"
+msgstr "图像的颜色将被反相处理"
+
+#: backend/hp3900_sane.c:1435
+#, no-c-format
+msgid "Disable gamma correction"
+msgstr "禁用伽玛校正"
+
+#: backend/hp3900_sane.c:1436
+#, no-c-format
+msgid "Gamma correction will be disabled"
+msgstr "将禁用伽玛校正功能"
+
+#: backend/hp3900_sane.c:1450
+#, no-c-format
+msgid "Disable white shading correction"
+msgstr "禁用白色调校正"
+
+#: backend/hp3900_sane.c:1452
+#, no-c-format
+msgid "White shading correction will be disabled"
+msgstr "将禁用白色调校正功能"
+
+#: backend/hp3900_sane.c:1466
+#, no-c-format
+msgid "Skip warmup process"
+msgstr "跳过预热过程"
+
+#: backend/hp3900_sane.c:1467
+#, no-c-format
+msgid "Warmup process will be disabled"
+msgstr "将禁用预热过程"
+
+#: backend/hp3900_sane.c:1481
+#, no-c-format
+msgid "Force real depth"
+msgstr "强制真实色彩位深"
+
+#: backend/hp3900_sane.c:1484
+#, no-c-format
+msgid ""
+"If gamma is enabled, scans are always made in 16 bits depth to improve "
+"image quality and then converted to the selected depth. This option "
+"avoids depth emulation."
+msgstr ""
+"启用伽玛校正时,将总是以 16 位色彩深度进行扫描,然后转换为选定的色彩深"
+"度。此选项可以避免发生色彩深度模拟,有助于改善图像品质。"
+
+#: backend/hp3900_sane.c:1498
+#, no-c-format
+msgid "Emulate Grayscale"
+msgstr "模拟灰阶"
+
+#: backend/hp3900_sane.c:1501
+#, no-c-format
+msgid ""
+"If enabled, image will be scanned in color mode and then converted to "
+"grayscale by software. This may improve image quality in some "
+"circumstances."
+msgstr ""
+"启用此项时,图像将在彩色模式下进行扫描,然后通过软件转换为灰阶。在某些情"
+"况下这可以改善图像品质。"
+
+#: backend/hp3900_sane.c:1515
+#, no-c-format
+msgid "Save debugging images"
+msgstr "保存调试图像"
+
+#: backend/hp3900_sane.c:1518
+#, no-c-format
+msgid ""
+"If enabled, some images involved in scanner processing are saved to "
+"analyze them."
+msgstr "启用此项后,某些扫描仪处理过程的图像将被保存以便分析。"
+
+#: backend/hp3900_sane.c:1532
+#, no-c-format
+msgid "Reset chipset"
+msgstr "重置芯片组"
+
+#: backend/hp3900_sane.c:1533
+#, no-c-format
+msgid "Resets chipset data"
+msgstr "重置芯片组数据"
+
+#: backend/hp3900_sane.c:1546
+#, no-c-format
+msgid "Information"
+msgstr "信息"
+
+#: backend/hp3900_sane.c:1559
+#, no-c-format
+msgid "Chipset name"
+msgstr "芯片组名称"
+
+#: backend/hp3900_sane.c:1560
+#, no-c-format
+msgid "Shows chipset name used in device."
+msgstr "显示设备使用的芯片组名称。"
+
+#: backend/hp3900_sane.c:1564
+#, no-c-format
+msgid "Unknown"
+msgstr "未知"
+
+#: backend/hp3900_sane.c:1570
+#, no-c-format
+msgid "Chipset ID"
+msgstr "芯片组 ID"
+
+#: backend/hp3900_sane.c:1571
+#, no-c-format
+msgid "Shows the chipset ID"
+msgstr "显示芯片组 ID"
+
+#: backend/hp3900_sane.c:1581
+#, no-c-format
+msgid "Scan counter"
+msgstr "扫描计数器"
+
+#: backend/hp3900_sane.c:1583
+#, no-c-format
+msgid "Shows the number of scans made by scanner"
+msgstr "显示扫描仪扫描次数"
+
+#: backend/hp3900_sane.c:1593
+#, no-c-format
+msgid "Update information"
+msgstr "更新信息"
+
+#: backend/hp3900_sane.c:1594
+#, no-c-format
+msgid "Updates information about device"
+msgstr "更新设备的有关信息"
+
+#: backend/hp3900_sane.c:1634
+#, no-c-format
+msgid "This option reflects a front panel scanner button"
+msgstr "此选项反映扫描仪前面板按钮的功能"
+
+#: backend/hp5400_sane.c:417
+#, no-c-format
+msgid "web"
+msgstr "网络分享"
+
+#: backend/hp5400_sane.c:418
+#, no-c-format
+msgid "Share-To-Web button"
+msgstr "网络分享按钮"
+
+#: backend/hp5400_sane.c:419
+#, no-c-format
+msgid "Scan an image and send it on the web"
+msgstr "扫描图像并发送到互联网"
+
+#: backend/hp5400_sane.c:425
+#, no-c-format
+msgid "reprint"
+msgstr "重印"
+
+#: backend/hp5400_sane.c:426
+#, no-c-format
+msgid "Reprint Photos button"
+msgstr "重印照片按钮"
+
+#: backend/hp5400_sane.c:427
+#, no-c-format
+msgid "Button for reprinting photos"
+msgstr "用于重新打印照片的按钮"
+
+#: backend/hp5400_sane.c:449
+#, no-c-format
+msgid "more-options"
+msgstr "更多选项"
+
+#: backend/hp5400_sane.c:450
+#, no-c-format
+msgid "More Options button"
+msgstr "更多选项按钮"
+
+#: backend/hp5400_sane.c:451
+#, no-c-format
+msgid "Button for additional options/configuration"
+msgstr "用于额外选项和配置的按钮"
+
+#: backend/hp5400_sane.c:465
+#, no-c-format
+msgid "power-save"
+msgstr "节能"
+
+#: backend/hp5400_sane.c:466
+#, no-c-format
+msgid "Power Save button"
+msgstr "节能按钮"
+
+#: backend/hp5400_sane.c:467
+#, no-c-format
+msgid "Puts the scanner in an energy-conservation mode"
+msgstr "让扫描仪进入节能模式"
+
+#: backend/hp5400_sane.c:473
+#, no-c-format
+msgid "copies-up"
+msgstr "增加份数"
+
+#: backend/hp5400_sane.c:474
+#, no-c-format
+msgid "Increase Copies button"
+msgstr "增加份数按钮"
+
+#: backend/hp5400_sane.c:475
+#, no-c-format
+msgid "Increase the number of copies"
+msgstr "增加份数"
+
+#: backend/hp5400_sane.c:481
+#, no-c-format
+msgid "copies-down"
+msgstr "减少份数"
+
+#: backend/hp5400_sane.c:482
+#, no-c-format
+msgid "Decrease Copies button"
+msgstr "减少份数按钮"
+
+#: backend/hp5400_sane.c:483
+#, no-c-format
+msgid "Decrease the number of copies"
+msgstr "减少份数"
+
+#: backend/hp5400_sane.c:489
+#, no-c-format
+msgid "color-bw"
+msgstr "彩色/黑白"
+
+#: backend/hp5400_sane.c:490
+#, no-c-format
+msgid "Select color/BW button"
+msgstr "切换彩色/黑白按钮"
+
+#: backend/hp5400_sane.c:491
+#, no-c-format
+msgid "Alternates between color and black/white scanning"
+msgstr "切换彩色/黑白扫描模式"
+
+#: backend/hp5400_sane.c:497
+#, no-c-format
+msgid "color-bw-state"
+msgstr "彩色/黑白状态"
+
+#: backend/hp5400_sane.c:498
+#, no-c-format
+msgid "Read color/BW button state"
+msgstr "读取彩色/黑白按钮的状态"
+
+#: backend/hp5400_sane.c:499
+#, no-c-format
+msgid "Reads state of BW/colour panel setting"
+msgstr "读取彩色/黑白面板设置的状态"
+
+#: backend/hp5400_sane.c:507
+#, no-c-format
+msgid "copies-count"
+msgstr "份数"
+
+#: backend/hp5400_sane.c:508
+#, no-c-format
+msgid "Read copy count value"
+msgstr "读取份数数值"
+
+#: backend/hp5400_sane.c:509
+#, no-c-format
+msgid "Reads state of copy count panel setting"
+msgstr "读取份数面板设置"
+
+#: backend/hp5400_sane.c:518 backend/niash.c:706
+#, no-c-format
+msgid "Miscellaneous"
+msgstr "其他"
+
+#: backend/hp5400_sane.c:525 backend/niash.c:713
+#, no-c-format
+msgid "Lamp status"
+msgstr "背光灯状态"
+
+#: backend/hp5400_sane.c:526 backend/niash.c:714
+#, no-c-format
+msgid "Switches the lamp on or off."
+msgstr "开/关背光灯"
+
+#: backend/hp5400_sane.c:536 backend/niash.c:724
+#, no-c-format
+msgid "Calibrates for black and white level."
+msgstr "校准黑白级别。"
+
+#: backend/hp5590.c:93
+#, no-c-format
+msgid "TMA Slides"
+msgstr "透扫器幻灯片"
+
+#: backend/hp5590.c:94
+#, no-c-format
+msgid "TMA Negatives"
+msgstr "透扫器负片"
+
+#: backend/hp5590.c:106
+#, no-c-format
+msgid "Color (48 bits)"
+msgstr "彩色 (48 位)"
+
+#: backend/hp5590.c:110
+#, no-c-format
+msgid "Extend lamp timeout"
+msgstr "延长背光灯超时"
+
+#: backend/hp5590.c:111
+#, no-c-format
+msgid "Extends lamp timeout (from 15 minutes to 1 hour)"
+msgstr "延长背光灯超时 (15 分钟到 1 小时)"
+
+#: backend/hp5590.c:113
+#, no-c-format
+msgid "Wait for button"
+msgstr "等待按钮"
+
+#: backend/hp5590.c:114
+#, no-c-format
+msgid "Waits for button before scanning"
+msgstr "扫描前等待按钮"
+
+#: backend/hp5590.c:116
+#, no-c-format
+msgid "Last button pressed"
+msgstr "最近一次按下的按钮"
+
+#: backend/hp5590.c:117
+#, no-c-format
+msgid "Get ID of last button pressed (read only)"
+msgstr "获取最近一次按下的按钮的 ID (只读)"
+
+#: backend/hp5590.c:119
+#, no-c-format
+msgid "LCD counter"
+msgstr "LCD 计数器"
+
+#: backend/hp5590.c:120
+#, no-c-format
+msgid "Get value of LCD counter (read only)"
+msgstr "获取 LCD 计数器的数值 (只读)"
+
+#: backend/hp5590.c:122
+#, no-c-format
+msgid "Color LED indicator"
+msgstr "彩色 LED 指示灯"
+
+#: backend/hp5590.c:123
+#, no-c-format
+msgid "Get value of LED indicator (read only)"
+msgstr "获取 LED 指示灯的数值 (只读)"
+
+#: backend/hp5590.c:125
+#, no-c-format
+msgid "Document available in ADF"
+msgstr "自动输稿器中的文稿"
+
+#: backend/hp5590.c:126
+#, no-c-format
+msgid "Get state of document-available indicator in ADF (read only)"
+msgstr "获取自动输稿器中可用文稿的状态 (只读)"
+
+#: backend/hp5590.c:128
+#, no-c-format
+msgid "Hide end-of-page pixel"
+msgstr "隐藏页面末尾像素"
+
+#: backend/hp5590.c:129
+#, no-c-format
+msgid ""
+"Hide end-of-page indicator pixels and overwrite with neighbor pixels"
+msgstr "隐藏页面末尾指示像素,用相邻的相符覆盖它"
+
+#: backend/hp5590.c:131
+#, no-c-format
+msgid "Filling mode of trailing lines after scan data (ADF)"
+msgstr "扫描数据后轨迹线填充模式 (自动输稿器)"
+
+#: backend/hp5590.c:132
+#, no-c-format
+msgid ""
+"raw = raw scan data, last = repeat last scan line, raster = b/w raster, "
+"white = white color, black = black color, color = RGB or gray color value"
+msgstr ""
+"raw = 扫描原始数据,last = 重复上一扫描线,raster = 黑白光栅,white = 白"
+"色,black = 黑色,color = RGB 或灰阶彩色数值"
+
+#: backend/hp5590.c:135
+#, no-c-format
+msgid "RGB or gray color value for filling mode 'color'"
+msgstr "“color”填充模式的RGB 或灰阶颜色数值"
+
+#: backend/hp5590.c:136
+#, no-c-format
+msgid ""
+"Color value for trailing lines filling mode 'color'. RGB color as "
+"r*65536+256*g+b or gray value (default=violet or gray)"
+msgstr ""
+"“color”填充模式的RGB 或灰阶颜色数值RGB 颜色数值为 r*65536+256*g+b 或灰阶"
+"数值 (默认为紫或灰)"
+
+#: backend/kvs1025.h:51 backend/kvs20xx_opt.c:295 backend/kvs40xx_opt.c:516
+#: backend/matsushita.h:213
+#, no-c-format
+msgid "Paper size"
+msgstr "纸张尺寸"
+
+#: backend/kvs1025.h:52 backend/kvs1025.h:67 backend/matsushita.h:214
+#: backend/matsushita.h:221
+#, no-c-format
+msgid "Automatic separation"
+msgstr "自动分离"
+
+#: backend/kvs1025.h:53 backend/kvs20xx_opt.c:307 backend/kvs40xx_opt.c:531
+#, no-c-format
+msgid "Landscape"
+msgstr "横向"
+
+#: backend/kvs1025.h:54 backend/kvs40xx_opt.c:693
+#, no-c-format
+msgid "Inverse Image"
+msgstr "反相图像"
+
+#: backend/kvs1025.h:56 backend/kvs40xx_opt.c:404
+#, no-c-format
+msgid "Long paper mode"
+msgstr "加长纸张模式"
+
+#: backend/kvs1025.h:57 backend/kvs20xx_opt.c:230 backend/kvs40xx_opt.c:393
+#, no-c-format
+msgid "Length control mode"
+msgstr "长度控制模式"
+
+#: backend/kvs1025.h:58 backend/kvs20xx_opt.c:242 backend/kvs40xx_opt.c:416
+#, no-c-format
+msgid "Manual feed mode"
+msgstr "手动送纸模式"
+
+#: backend/kvs1025.h:59 backend/kvs20xx_opt.c:254 backend/kvs40xx_opt.c:428
+#, no-c-format
+msgid "Manual feed timeout"
+msgstr "手动送纸超时"
+
+#: backend/kvs1025.h:60 backend/kvs20xx_opt.c:267 backend/kvs40xx_opt.c:441
+#, no-c-format
+msgid "Double feed detection"
+msgstr "双张进纸检测"
+
+#: backend/kvs1025.h:63 backend/kvs20xx_opt.c:205 backend/kvs40xx_opt.c:354
+#: backend/matsushita.h:217
+#, no-c-format
+msgid "Enable Duplex (Dual-Sided) Scanning"
+msgstr "启用双面扫描"
+
+#: backend/kvs1025.h:65 backend/kvs20xx_opt.c:296 backend/kvs40xx_opt.c:517
+#: backend/matsushita.h:219
+#, 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:108
+#: backend/kvs40xx_opt.c:1047
+#, no-c-format
+msgid "adf"
+msgstr "自动输稿器"
+
+#: backend/kvs1025_opt.c:62 backend/kvs40xx_opt.c:50
+#: backend/kvs40xx_opt.c:109
+#, no-c-format
+msgid "fb"
+msgstr "前按钮"
+
+#: backend/kvs1025_opt.c:72 backend/kvs20xx_opt.c:55
+#: backend/kvs40xx_opt.c:101
+#, no-c-format
+msgid "single"
+msgstr "单张"
+
+#: backend/kvs1025_opt.c:73 backend/kvs20xx.c:462 backend/kvs20xx_opt.c:56
+#: backend/kvs40xx.c:705 backend/kvs40xx.c:723 backend/kvs40xx_opt.c:102
+#: backend/kvs40xx_opt.c:1087
+#, no-c-format
+msgid "continuous"
+msgstr "连续"
+
+#: backend/kvs1025_opt.c:83 backend/kvs20xx_opt.c:62
+#: backend/kvs40xx_opt.c:115
+#, no-c-format
+msgid "off"
+msgstr "关闭"
+
+#: backend/kvs1025_opt.c:84 backend/kvs20xx_opt.c:63
+#: backend/kvs40xx_opt.c:116
+#, no-c-format
+msgid "wait_doc"
+msgstr "等待文稿"
+
+#: backend/kvs1025_opt.c:85 backend/kvs20xx_opt.c:64
+#: backend/kvs40xx_opt.c:118
+#, no-c-format
+msgid "wait_key"
+msgstr "等待按钮"
+
+#: backend/kvs1025_opt.c:96 backend/kvs20xx_opt.c:70
+#: backend/kvs40xx_opt.c:124 backend/kvs40xx_opt.c:141
+#, no-c-format
+msgid "user_def"
+msgstr "用户定义"
+
+#: backend/kvs1025_opt.c:97 backend/kvs20xx_opt.c:71
+#: backend/kvs40xx_opt.c:125 backend/kvs40xx_opt.c:142
+#, no-c-format
+msgid "business_card"
+msgstr "名片"
+
+#: backend/kvs1025_opt.c:98 backend/kvs40xx_opt.c:126
+#: backend/kvs40xx_opt.c:143
+#, no-c-format
+msgid "Check"
+msgstr "检查"
+
+#: backend/kvs1025_opt.c:101 backend/kvs20xx_opt.c:75
+#: backend/kvs40xx_opt.c:129 backend/kvs40xx_opt.c:146
+#, no-c-format
+msgid "A5"
+msgstr "A5"
+
+#: backend/kvs1025_opt.c:102 backend/kvs20xx_opt.c:76
+#: backend/kvs40xx_opt.c:130 backend/kvs40xx_opt.c:147
+#, no-c-format
+msgid "A6"
+msgstr "A6"
+
+#: backend/kvs1025_opt.c:106 backend/kvs20xx_opt.c:80
+#: backend/kvs40xx_opt.c:134 backend/kvs40xx_opt.c:151
+#, no-c-format
+msgid "B5"
+msgstr "B5"
+
+#: backend/kvs1025_opt.c:107 backend/kvs20xx_opt.c:81
+#: backend/kvs40xx_opt.c:135 backend/kvs40xx_opt.c:152
+#, no-c-format
+msgid "B6"
+msgstr "B6"
+
+#: backend/kvs1025_opt.c:108 backend/kvs20xx_opt.c:82
+#: backend/kvs40xx_opt.c:136 backend/kvs40xx_opt.c:153
+#, no-c-format
+msgid "Legal"
+msgstr "美国法务用纸 (Legal)"
+
+#: backend/kvs1025_opt.c:148 backend/kvs40xx_opt.c:239
+#, no-c-format
+msgid "bayer_64"
+msgstr "bayer_64"
+
+#: backend/kvs1025_opt.c:149 backend/kvs40xx_opt.c:240
+#, no-c-format
+msgid "bayer_16"
+msgstr "bayer_16"
+
+#: backend/kvs1025_opt.c:150 backend/kvs40xx_opt.c:241
+#, no-c-format
+msgid "halftone_32"
+msgstr "半调_32"
+
+#: backend/kvs1025_opt.c:151 backend/kvs40xx_opt.c:242
+#, no-c-format
+msgid "halftone_64"
+msgstr "半调_64"
+
+#: backend/kvs1025_opt.c:152
+#, no-c-format
+msgid "diffusion"
+msgstr "扩散"
+
+#: backend/kvs1025_opt.c:165 backend/kvs1025_opt.c:227
+#: backend/kvs1025_opt.c:240 backend/kvs20xx_opt.c:129
+#: backend/kvs20xx_opt.c:137 backend/kvs40xx_opt.c:215
+#: backend/kvs40xx_opt.c:223 backend/kvs40xx_opt.c:258
+#, no-c-format
+msgid "normal"
+msgstr "正常"
+
+#: backend/kvs1025_opt.c:166 backend/kvs40xx_opt.c:259
+#, no-c-format
+msgid "light"
+msgstr "亮调"
+
+#: backend/kvs1025_opt.c:167 backend/kvs40xx_opt.c:260
+#, no-c-format
+msgid "dark"
+msgstr "暗调"
+
+#: backend/kvs1025_opt.c:178 backend/kvs40xx_opt.c:271
+#, no-c-format
+msgid "From scanner"
+msgstr "来自扫描仪"
+
+#: backend/kvs1025_opt.c:179 backend/kvs40xx_opt.c:272
+#: backend/matsushita.c:174
+#, no-c-format
+msgid "From paper"
+msgstr "来自纸张"
+
+#: backend/kvs1025_opt.c:191 backend/kvs40xx_opt.c:284
+#, no-c-format
+msgid "default"
+msgstr "默认"
+
+#: backend/kvs1025_opt.c:210 backend/kvs20xx_opt.c:123
+#: backend/kvs40xx_opt.c:209
+#, no-c-format
+msgid "smooth"
+msgstr "平滑"
+
+#: backend/kvs1025_opt.c:211 backend/kvs20xx_opt.c:119
+#: backend/kvs40xx_opt.c:205
+#, no-c-format
+msgid "none"
+msgstr "无"
+
+#: backend/kvs1025_opt.c:212 backend/kvs20xx_opt.c:120
+#: backend/kvs40xx_opt.c:206
+#, no-c-format
+msgid "low"
+msgstr "低"
+
+#: backend/kvs1025_opt.c:213 backend/kvs1025_opt.c:803
+#: backend/kvs20xx_opt.c:121 backend/kvs40xx_opt.c:207
+#, no-c-format
+msgid "medium"
+msgstr "中"
+
+#: backend/kvs1025_opt.c:214 backend/kvs20xx_opt.c:122
+#: backend/kvs40xx_opt.c:208
+#, no-c-format
+msgid "high"
+msgstr "高"
+
+#: backend/kvs1025_opt.c:228 backend/kvs20xx_opt.c:130
+#: backend/kvs40xx_opt.c:216
+#, no-c-format
+msgid "crt"
+msgstr "CRT"
+
+#: backend/kvs1025_opt.c:229
+#, no-c-format
+msgid "linear"
+msgstr "线性"
+
+#: backend/kvs1025_opt.c:241 backend/kvs20xx_opt.c:138
+#: backend/kvs40xx_opt.c:224
+#, no-c-format
+msgid "red"
+msgstr "红"
+
+#: backend/kvs1025_opt.c:242 backend/kvs20xx_opt.c:139
+#: backend/kvs40xx_opt.c:225
+#, no-c-format
+msgid "green"
+msgstr "绿"
+
+#: backend/kvs1025_opt.c:243 backend/kvs20xx_opt.c:140
+#: backend/kvs40xx_opt.c:226
+#, no-c-format
+msgid "blue"
+msgstr "蓝"
+
+#: backend/kvs1025_opt.c:561
+#, no-c-format
+msgid "Sets the scan source"
+msgstr "设置扫描来源"
+
+#: backend/kvs1025_opt.c:572 backend/kvs20xx_opt.c:218
+#: backend/kvs40xx_opt.c:367 backend/matsushita.c:1123
+#, no-c-format
+msgid "Feeder mode"
+msgstr "输稿器模式"
+
+#: backend/kvs1025_opt.c:573 backend/kvs20xx_opt.c:219
+#: backend/kvs40xx_opt.c:368 backend/matsushita.c:1124
+#, no-c-format
+msgid "Sets the feeding mode"
+msgstr "设置送纸模式"
+
+#: backend/kvs1025_opt.c:583
+#, no-c-format
+msgid "Enable/Disable long paper mode"
+msgstr "启用/禁用加长纸张模式"
+
+#: backend/kvs1025_opt.c:592
+#, no-c-format
+msgid "Enable/Disable length control mode"
+msgstr "启用/禁用长度控制模式"
+
+#: backend/kvs1025_opt.c:600 backend/kvs20xx_opt.c:243
+#: backend/kvs40xx_opt.c:417
+#, no-c-format
+msgid "Sets the manual feed mode"
+msgstr "设置手动送纸模式"
+
+#: backend/kvs1025_opt.c:611 backend/kvs20xx_opt.c:255
+#: backend/kvs40xx_opt.c:429
+#, no-c-format
+msgid "Sets the manual feed timeout in seconds"
+msgstr "设置手动送纸超时,单位为秒"
+
+#: backend/kvs1025_opt.c:624 backend/kvs20xx_opt.c:268
+#: backend/kvs40xx_opt.c:442
+#, no-c-format
+msgid "Enable/Disable double feed detection"
+msgstr "启用/禁用双张进纸检测"
+
+#: backend/kvs1025_opt.c:630 backend/kvs20xx_opt.c:276
+#: backend/kvs40xx_opt.c:497
+#, no-c-format
+msgid "fit-to-page"
+msgstr "适合页面大小"
+
+#: backend/kvs1025_opt.c:631 backend/kvs20xx_opt.c:277
+#: backend/kvs40xx_opt.c:498
+#, no-c-format
+msgid "Fit to page"
+msgstr "适合页面大小"
+
+#: backend/kvs1025_opt.c:633 backend/kvs20xx_opt.c:278
+#: backend/kvs40xx_opt.c:499
+#, no-c-format
+msgid "Scanner shrinks image to fit scanned page"
+msgstr "扫描仪将缩小图像以适合扫描的页面"
+
+#: backend/kvs1025_opt.c:660 backend/kvs20xx_opt.c:309
+#: backend/kvs40xx_opt.c:533
+#, no-c-format
+msgid "Set paper position : true for landscape, false for portrait"
+msgstr "设置纸张位置:勾选为横向,不勾选为纵向"
+
+#: backend/kvs1025_opt.c:734 backend/matsushita.c:1221
+#, no-c-format
+msgid "Automatic threshold"
+msgstr "自动阈值"
+
+#: backend/kvs1025_opt.c:737 backend/matsushita.c:1224
+#, no-c-format
+msgid ""
+"Automatically sets brightness, contrast, white level, gamma, noise "
+"reduction and image emphasis"
+msgstr "自动设置亮度、对比度、白平衡、伽玛值、降噪和图像重点"
+
+#: backend/kvs1025_opt.c:782 backend/kvs40xx_opt.c:764
+#: backend/matsushita.c:1272
+#, no-c-format
+msgid "Noise reduction"
+msgstr "降噪"
+
+#: backend/kvs1025_opt.c:784 backend/kvs40xx_opt.c:765
+#: backend/matsushita.c:1274
+#, no-c-format
+msgid "Reduce the isolated dot noise"
+msgstr "减少单个噪点"
+
+#: backend/kvs1025_opt.c:795 backend/kvs20xx_opt.c:412
+#: backend/kvs40xx_opt.c:655 backend/matsushita.c:1285
+#, no-c-format
+msgid "Image emphasis"
+msgstr "图像重点"
+
+#: backend/kvs1025_opt.c:796 backend/kvs20xx_opt.c:413
+#: backend/kvs40xx_opt.c:656 backend/matsushita.c:1286
+#, no-c-format
+msgid "Sets the image emphasis"
+msgstr "设置图像重点"
+
+#: backend/kvs1025_opt.c:807 backend/kvs1025_opt.c:808
+#: backend/matsushita.c:1297 backend/matsushita.c:1298
+#: backend/pixma/pixma_sane_options.c:113
+#, no-c-format
+msgid "Gamma"
+msgstr "伽玛值"
+
+#: backend/kvs1025_opt.c:817 backend/kvs20xx_opt.c:436
+#: backend/kvs40xx_opt.c:681
+#, no-c-format
+msgid "Lamp color"
+msgstr "背光灯颜色"
+
+#: backend/kvs1025_opt.c:818 backend/kvs20xx_opt.c:437
+#: backend/kvs40xx_opt.c:682
+#, no-c-format
+msgid "Sets the lamp color (color dropout)"
+msgstr "设置背光灯颜色 (颜色丢弃)"
+
+#: backend/kvs1025_opt.c:831
+#, no-c-format
+msgid "Inverse image in B/W or halftone mode"
+msgstr "反相处理黑白或半调模式下的图像"
+
+#: backend/kvs1025_opt.c:839
+#, no-c-format
+msgid "Mirror image (left/right flip)"
+msgstr "水平镜像翻转图像"
+
+#: backend/kvs1025_opt.c:846
+#, no-c-format
+msgid "jpeg compression"
+msgstr "JPEG 压缩"
+
+#: backend/kvs1025_opt.c:849
+#, no-c-format
+msgid "JPEG Image Compression with Q parameter, '0' - no compression"
+msgstr "JPEG 图像压缩品质参数 (Q),0 为无压缩"
+
+#: backend/kvs1025_opt.c:859
+#, no-c-format
+msgid "Rotate image clockwise"
+msgstr "顺时针旋转图像"
+
+#: backend/kvs1025_opt.c:861
+#, no-c-format
+msgid "Request driver to rotate pages by a fixed amount"
+msgstr "请求驱动程序按照固定角度旋转页面"
+
+#: backend/kvs1025_opt.c:873
+#, no-c-format
+msgid "Request driver to rotate skewed pages digitally"
+msgstr "请求驱动程序对倾斜页面进行数码旋转"
+
+#: backend/kvs1025_opt.c:882
+#, no-c-format
+msgid "Maximum diameter of lone dots to remove from scan"
+msgstr "要从扫描图像中移除的单个噪点的最大直径"
+
+#: backend/kvs1025_opt.c:892
+#, no-c-format
+msgid "Software derotate"
+msgstr "软件去旋转"
+
+#: backend/kvs1025_opt.c:894
+#, no-c-format
+msgid "Request driver to detect and correct 90 degree image rotation"
+msgstr "请求驱动程序检测并修正被旋转 90 度的图像"
+
+#: backend/kvs1025_opt.c:901
+#, no-c-format
+msgid "Software automatic cropping"
+msgstr "软件自动裁剪"
+
+#: backend/kvs1025_opt.c:903
+#, no-c-format
+msgid "Request driver to remove border from pages digitally"
+msgstr "请求驱动程序对页面外框进行数码裁剪"
+
+#: backend/kvs1025_opt.c:912
+#, no-c-format
+msgid "Request driver to discard pages with low numbers of dark pixels"
+msgstr "请求驱动程序丢弃暗调像素较少的页面"
+
+#: backend/kvs20xx_opt.c:233
+#, no-c-format
+msgid ""
+"Length Control Mode causes the scanner to read the shorter of either the "
+"length of the actual paper or logical document length."
+msgstr "长度控制模式会令扫描仪读取实际页面的短边长度或文稿的逻辑长度"
+
+#: backend/kvs20xx_opt.c:424 backend/kvs20xx_opt.c:425
+#: backend/kvs40xx_opt.c:668 backend/kvs40xx_opt.c:669
+#: backend/microtek2.h:638
+#, no-c-format
+msgid "Gamma correction"
+msgstr "伽玛校正"
+
+#: backend/kvs40xx_opt.c:117
+#, no-c-format
+msgid "wait_doc_hopper_up"
+msgstr "等待文档盒关闭"
+
+#: backend/kvs40xx_opt.c:127
+#, no-c-format
+msgid "A3"
+msgstr "A3"
+
+#: backend/kvs40xx_opt.c:132
+#, no-c-format
+msgid "Double letter 11x17 in"
+msgstr "双面美国信纸 (Letter) 11x17 英寸"
+
+#: backend/kvs40xx_opt.c:133
+#, no-c-format
+msgid "B4"
+msgstr "B4"
+
+#: backend/kvs40xx_opt.c:231
+#, no-c-format
+msgid "High sensitivity"
+msgstr "高灵敏度"
+
+#: backend/kvs40xx_opt.c:232
+#, no-c-format
+msgid "Low sensitivity"
+msgstr "低灵敏度"
+
+#: backend/kvs40xx_opt.c:243
+#, no-c-format
+msgid "err_diffusion"
+msgstr "偏差扩散"
+
+#: backend/kvs40xx_opt.c:249
+#, no-c-format
+msgid "No detection"
+msgstr "无检测"
+
+#: backend/kvs40xx_opt.c:250
+#, no-c-format
+msgid "Normal mode"
+msgstr "正常模式"
+
+#: backend/kvs40xx_opt.c:251
+#, no-c-format
+msgid "Enhanced mode"
+msgstr "增强模式"
+
+#: backend/kvs40xx_opt.c:396
+#, no-c-format
+msgid ""
+"Length Control Mode causes the scanner to read the shorter of either the "
+"length of the actual paper or logical document length"
+msgstr "长度控制模式会令扫描仪读取实际页面的短边长度或文稿的逻辑长度"
+
+#: backend/kvs40xx_opt.c:405
+#, 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:449
+#, no-c-format
+msgid "Double feed detector sensitivity"
+msgstr "双张进纸检测灵敏度"
+
+#: backend/kvs40xx_opt.c:450
+#, no-c-format
+msgid "Set the double feed detector sensitivity"
+msgstr "设置双张进纸检测灵敏度"
+
+#: backend/kvs40xx_opt.c:461 backend/kvs40xx_opt.c:462
+#, no-c-format
+msgid "Do not stop after double feed detection"
+msgstr "检测到双张进纸后不停止"
+
+#: backend/kvs40xx_opt.c:470 backend/kvs40xx_opt.c:471
+#, no-c-format
+msgid "Ignore left double feed sensor"
+msgstr "忽略左侧双张进纸传感器"
+
+#: backend/kvs40xx_opt.c:479 backend/kvs40xx_opt.c:480
+#, no-c-format
+msgid "Ignore center double feed sensor"
+msgstr "忽略中间双张进纸传感器"
+
+#: backend/kvs40xx_opt.c:488 backend/kvs40xx_opt.c:489
+#, no-c-format
+msgid "Ignore right double feed sensor"
+msgstr "忽略右侧双张进纸传感器"
+
+#: backend/kvs40xx_opt.c:642
+#, no-c-format
+msgid "Automatic threshold mode"
+msgstr "自动阈值模式"
+
+#: backend/kvs40xx_opt.c:643
+#, no-c-format
+msgid "Sets the automatic threshold mode"
+msgstr "设置自动阈值模式"
+
+#: backend/kvs40xx_opt.c:694
+#, no-c-format
+msgid "Inverse image in B/W mode"
+msgstr "反相黑白模式图像"
+
+#: backend/kvs40xx_opt.c:715
+#, no-c-format
+msgid "JPEG compression"
+msgstr "JPEG 压缩"
+
+#: backend/kvs40xx_opt.c:718
+#, no-c-format
+msgid "JPEG compression (your application must be able to uncompress)"
+msgstr "JPEG 压缩 (扫描应用程序必须支持解压缩)"
+
+#: backend/kvs40xx_opt.c:737 backend/kvs40xx_opt.c:738
+#, no-c-format
+msgid "Detect stapled document"
+msgstr "检测带订书钉文稿"
+
+#: backend/kvs40xx_opt.c:776
+#, no-c-format
+msgid "chroma of red"
+msgstr "红色品"
+
+#: backend/kvs40xx_opt.c:777
+#, no-c-format
+msgid "Set chroma of red"
+msgstr "设置红色品数值"
+
+#: backend/kvs40xx_opt.c:787
+#, no-c-format
+msgid "chroma of blue"
+msgstr "蓝色品"
+
+#: backend/kvs40xx_opt.c:788
+#, no-c-format
+msgid "Set chroma of blue"
+msgstr "设置蓝色品数值"
+
+#: backend/kvs40xx_opt.c:798 backend/kvs40xx_opt.c:799
+#, no-c-format
+msgid "Skew adjustment"
+msgstr "倾斜调整"
+
+#: backend/kvs40xx_opt.c:808
+#, no-c-format
+msgid "Stop scanner if a sheet is skewed"
+msgstr "纸张倾斜时停止扫描"
+
+#: backend/kvs40xx_opt.c:809
+#, no-c-format
+msgid "Scanner will stop if a sheet is skewed"
+msgstr "纸张倾斜时停止扫描"
+
+#: backend/kvs40xx_opt.c:816
+#, no-c-format
+msgid "Crop actual image area"
+msgstr "裁剪实际图像区域"
+
+#: backend/kvs40xx_opt.c:817
+#, no-c-format
+msgid "Scanner will automatically detect image area and crop to it"
+msgstr "扫描仪将自动检测图像区域并按此裁剪"
+
+#: backend/kvs40xx_opt.c:827
+#, no-c-format
+msgid "Left/right mirror image"
+msgstr "水平镜像翻转图像"
+
+#: backend/kvs40xx_opt.c:834 backend/kvs40xx_opt.c:835
+#, no-c-format
+msgid "Addition of space in top position"
+msgstr "增加顶部空间"
+
+#: backend/kvs40xx_opt.c:842 backend/kvs40xx_opt.c:843
+#, no-c-format
+msgid "Addition of space in bottom position"
+msgstr "增加底部空间"
+
+#: backend/leo.c:107
+#, no-c-format
+msgid "Diamond"
+msgstr "菱形"
+
+#: backend/leo.c:108
+#, no-c-format
+msgid "8x8 Coarse Fatting"
+msgstr "8x8 粗糙"
+
+#: backend/leo.c:109
+#, no-c-format
+msgid "8x8 Fine Fatting"
+msgstr "8x8 精细"
+
+#: backend/leo.c:110
+#, no-c-format
+msgid "8x8 Bayer"
+msgstr "8x8 Bayer"
+
+#: backend/leo.c:111
+#, no-c-format
+msgid "8x8 Vertical Line"
+msgstr "8x8 垂直线"
+
+#: backend/lexmark.c:271 backend/umax_pp.c:704
+#, no-c-format
+msgid "Gain"
+msgstr "增益"
+
+#: backend/lexmark.c:272 backend/umax_pp.c:705
+#, no-c-format
+msgid "Color channels gain settings"
+msgstr "颜色通道增益设置"
+
+#: backend/lexmark.c:281 backend/umax_pp.c:712
+#, no-c-format
+msgid "Gray gain"
+msgstr "灰增益"
+
+#: backend/lexmark.c:282 backend/umax_pp.c:713
+#, no-c-format
+msgid "Sets gray channel gain"
+msgstr "设置灰阶通道增益"
+
+#: backend/lexmark.c:295 backend/plustek.c:999 backend/umax_pp.c:724
+#, no-c-format
+msgid "Red gain"
+msgstr "红增益"
+
+#: backend/lexmark.c:296 backend/umax_pp.c:725
+#, no-c-format
+msgid "Sets red channel gain"
+msgstr "设置红通道增益"
+
+#: backend/lexmark.c:309 backend/plustek.c:1015 backend/umax_pp.c:736
+#, no-c-format
+msgid "Green gain"
+msgstr "绿增益"
+
+#: backend/lexmark.c:310 backend/umax_pp.c:737
+#, no-c-format
+msgid "Sets green channel gain"
+msgstr "设置绿通道增益"
+
+#: backend/lexmark.c:323 backend/plustek.c:1031 backend/umax_pp.c:748
+#, no-c-format
+msgid "Blue gain"
+msgstr "蓝增益"
+
+#: backend/lexmark.c:324 backend/umax_pp.c:749
+#, no-c-format
+msgid "Sets blue channel gain"
+msgstr "设置蓝通道增益"
+
+#: backend/matsushita.c:136
+#, no-c-format
+msgid "Bayer Dither 16"
+msgstr "Bayer 抖动 16"
+
+#: backend/matsushita.c:137
+#, no-c-format
+msgid "Bayer Dither 64"
+msgstr "Bayer 抖动 64"
+
+#: backend/matsushita.c:138
+#, no-c-format
+msgid "Halftone Dot 32"
+msgstr "半调网点 32"
+
+#: backend/matsushita.c:139
+#, no-c-format
+msgid "Halftone Dot 64"
+msgstr "半调网点 64"
+
+#: backend/matsushita.c:140
+#, no-c-format
+msgid "Error Diffusion"
+msgstr "偏差扩散"
+
+#: backend/matsushita.c:157
+#, no-c-format
+msgid "Mode 1"
+msgstr "模式 1"
+
+#: backend/matsushita.c:158
+#, no-c-format
+msgid "Mode 2"
+msgstr "模式 2"
+
+#: backend/matsushita.c:159
+#, no-c-format
+msgid "Mode 3"
+msgstr "模式 3"
+
+#: backend/matsushita.c:173
+#, no-c-format
+msgid "From white stick"
+msgstr "来自白条"
+
+#: backend/matsushita.c:209
+#, no-c-format
+msgid "Smooth"
+msgstr "平滑"
+
+#: backend/matsushita.c:211 backend/matsushita.c:226
+#, no-c-format
+msgid "Low"
+msgstr "低"
+
+#: backend/matsushita.c:212 backend/matsushita.c:227
+#: backend/matsushita.c:1293
+#, no-c-format
+msgid "Medium"
+msgstr "中"
+
+#: backend/matsushita.c:213 backend/matsushita.c:228
+#, no-c-format
+msgid "High"
+msgstr "高"
+
+#: backend/matsushita.c:242
+#, no-c-format
+msgid "CRT"
+msgstr "CRT"
+
+#: backend/matsushita.c:254
+#, no-c-format
+msgid "One page"
+msgstr "单页"
+
+#: backend/matsushita.c:255
+#, no-c-format
+msgid "All pages"
+msgstr "所有页面"
+
+#: backend/matsushita.c:1031 backend/p5_device.c:8 backend/plustek.c:1331
+#, no-c-format
+msgid "sheetfed scanner"
+msgstr "馈纸式扫描仪"
+
+#: backend/matsushita.h:203
+#, no-c-format
+msgid "Grayscale 4 bits"
+msgstr "灰阶 4 位"
+
+#: backend/matsushita.h:204
+#, no-c-format
+msgid "Grayscale 8 bits"
+msgstr "灰阶 8 位"
+
+#: backend/microtek2.h:599
+#, no-c-format
+msgid "Shadow, midtone, highlight, exposure time"
+msgstr "暗调、中间调、亮调、曝光时间"
+
+#: backend/microtek2.h:601
+#, no-c-format
+msgid "Special options"
+msgstr "特殊选项"
+
+#: backend/microtek2.h:602
+#, no-c-format
+msgid "Color balance"
+msgstr "颜色平衡"
+
+#: backend/microtek2.h:605
+#, no-c-format
+msgid "Disable backtracking"
+msgstr "禁用反退"
+
+#: backend/microtek2.h:606
+#, no-c-format
+msgid "If checked the scanner does not perform backtracking"
+msgstr "勾选后扫描仪将不执行反退"
+
+#: backend/microtek2.h:610
+#, no-c-format
+msgid "Toggle lamp of flatbed"
+msgstr "平板背光灯开关"
+
+#: backend/microtek2.h:611
+#, no-c-format
+msgid "Toggles the lamp of the flatbed"
+msgstr "开/关平板背光灯"
+
+#: backend/microtek2.h:614
+#, no-c-format
+msgid "Calibration by backend"
+msgstr "由后端程序进行校准"
+
+#: backend/microtek2.h:615
+#, no-c-format
+msgid ""
+"If checked the color calibration before a scan is done by the backend"
+msgstr "勾选后将在每次扫描前由后端程序进行色彩校准"
+
+#: backend/microtek2.h:619
+#, no-c-format
+msgid "Use the lightlid-35mm adapter"
+msgstr "使用 lightlid-35mm 适配器"
+
+#: backend/microtek2.h:620
+#, no-c-format
+msgid "This option turns off the lamp of the flatbed during a scan"
+msgstr "此选项将在扫描时关闭平板的背光灯"
+
+#: backend/microtek2.h:624 backend/snapscan-options.c:421
+#, no-c-format
+msgid "Quality scan"
+msgstr "高品质扫描"
+
+#: backend/microtek2.h:625 backend/snapscan-options.c:422
+#, no-c-format
+msgid "Highest quality but lower speed"
+msgstr "扫描品质最高,速度较慢"
+
+#: backend/microtek2.h:628
+#, no-c-format
+msgid "Fast scan"
+msgstr "快速扫描"
+
+#: backend/microtek2.h:629
+#, no-c-format
+msgid "Highest speed but lower quality"
+msgstr "扫描速度最快,但品质较差"
+
+#: backend/microtek2.h:632
+#, no-c-format
+msgid "Automatic adjustment of threshold"
+msgstr "自动调整阈值"
+
+#: backend/microtek2.h:633
+#, no-c-format
+msgid ""
+"If checked the backend automatically tries to determine an optimal value "
+"for the threshold."
+msgstr "勾选后,后端程序将尝试自动确定最佳阈值"
+
+#: backend/microtek2.h:639
+#, no-c-format
+msgid "Selects the gamma correction mode."
+msgstr "选择伽玛校正模式"
+
+#: backend/microtek2.h:642
+#, no-c-format
+msgid "Bind gamma"
+msgstr "绑定伽玛"
+
+#: backend/microtek2.h:643
+#, no-c-format
+msgid "Use same gamma values for all colour channels."
+msgstr "为所有颜色通道使用相同的伽玛数值。"
+
+#: backend/microtek2.h:647
+#, no-c-format
+msgid "Scalar gamma"
+msgstr "标量伽玛"
+
+#: backend/microtek2.h:648
+#, no-c-format
+msgid "Selects a value for scalar gamma correction."
+msgstr "设置标量伽玛校正数值"
+
+#: backend/microtek2.h:652
+#, no-c-format
+msgid "Scalar gamma red"
+msgstr "标量伽玛红"
+
+#: backend/microtek2.h:653
+#, no-c-format
+msgid "Selects a value for scalar gamma correction (red channel)"
+msgstr "设置标量伽玛校正数值 (红通道)"
+
+#: backend/microtek2.h:657
+#, no-c-format
+msgid "Scalar gamma green"
+msgstr "标量伽玛绿"
+
+#: backend/microtek2.h:658
+#, no-c-format
+msgid "Selects a value for scalar gamma correction (green channel)"
+msgstr "设置标量伽玛校正数值 (绿通道)"
+
+#: backend/microtek2.h:662
+#, no-c-format
+msgid "Scalar gamma blue"
+msgstr "标量伽玛蓝"
+
+#: backend/microtek2.h:663
+#, no-c-format
+msgid "Selects a value for scalar gamma correction (blue channel)"
+msgstr "设置标量伽玛校正数值 (蓝通道)"
+
+#: backend/microtek2.h:667
+#, no-c-format
+msgid "Channel"
+msgstr "通道"
+
+#: backend/microtek2.h:668
+#, no-c-format
+msgid ""
+"Selects the colour band, \"Master\" means that all colours are affected."
+msgstr "选择颜色通道。“Master/主”将影响所有颜色。"
+
+#: backend/microtek2.h:672
+#, no-c-format
+msgid "Midtone"
+msgstr "中间调"
+
+#: backend/microtek2.h:673
+#, no-c-format
+msgid "Selects which radiance level should be considered \"50 % gray\"."
+msgstr "选择被视作 50% 灰的亮度等级。"
+
+#: backend/microtek2.h:677
+#, no-c-format
+msgid "Midtone for red"
+msgstr "红中间调"
+
+#: backend/microtek2.h:678
+#, no-c-format
+msgid "Selects which radiance level should be considered \"50 % red\"."
+msgstr "选择被视作 50% 红的亮度等级。"
+
+#: backend/microtek2.h:682
+#, no-c-format
+msgid "Midtone for green"
+msgstr "绿中间调"
+
+#: backend/microtek2.h:683
+#, no-c-format
+msgid "Selects which radiance level should be considered \"50 % green\"."
+msgstr "选择被视作 50% 绿的亮度等级。"
+
+#: backend/microtek2.h:687
+#, no-c-format
+msgid "Midtone for blue"
+msgstr "蓝中间调"
+
+#: backend/microtek2.h:688
+#, no-c-format
+msgid "Selects which radiance level should be considered \"50 % blue\"."
+msgstr "选择被视作 50% 蓝的亮度等级。"
+
+#: backend/microtek2.h:692
+#, no-c-format
+msgid "Red balance"
+msgstr "红平衡"
+
+#: backend/microtek2.h:693
+#, no-c-format
+msgid "Balance factor for red. A value of 100% means no correction."
+msgstr "红平衡系数。100% 意味着无校正。"
+
+#: backend/microtek2.h:697
+#, no-c-format
+msgid "Green balance"
+msgstr "绿平衡"
+
+#: backend/microtek2.h:698
+#, no-c-format
+msgid "Balance factor for green. A value of 100% means no correction."
+msgstr "绿平衡系数。100% 意味着无校正。"
+
+#: backend/microtek2.h:702
+#, no-c-format
+msgid "Blue balance"
+msgstr "蓝平衡"
+
+#: backend/microtek2.h:703
+#, no-c-format
+msgid "Balance factor for blue. A value of 100% means no correction."
+msgstr "蓝平衡系数。100% 意味着无校正。"
+
+#: backend/microtek2.h:707
+#, no-c-format
+msgid "Firmware balance"
+msgstr "固件平衡"
+
+#: backend/microtek2.h:708
+#, no-c-format
+msgid "Sets the color balance values to the firmware provided values."
+msgstr "设置颜色平衡数值为固件提供的数值。"
+
+#: backend/mustek.c:147
+#, no-c-format
+msgid "Slowest"
+msgstr "最慢"
+
+#: backend/mustek.c:147
+#, no-c-format
+msgid "Slower"
+msgstr "慢"
+
+#: backend/mustek.c:148
+#, no-c-format
+msgid "Faster"
+msgstr "快"
+
+#: backend/mustek.c:148
+#, no-c-format
+msgid "Fastest"
+msgstr "最快"
+
+#: backend/mustek.c:175
+#, no-c-format
+msgid "8x8 coarse"
+msgstr "8x8 粗糙"
+
+#: backend/mustek.c:175
+#, no-c-format
+msgid "8x8 normal"
+msgstr "8x8 正常"
+
+#: backend/mustek.c:175
+#, no-c-format
+msgid "8x8 fine"
+msgstr "8x8 精细"
+
+#: backend/mustek.c:176
+#, no-c-format
+msgid "8x8 very fine"
+msgstr "8x8 超精细"
+
+#: backend/mustek.c:176
+#, no-c-format
+msgid "6x6 normal"
+msgstr "6x6 正常"
+
+#: backend/mustek.c:177
+#, no-c-format
+msgid "5x5 coarse"
+msgstr "5x5 粗糙"
+
+#: backend/mustek.c:177
+#, no-c-format
+msgid "5x5 fine"
+msgstr "5x5 精细"
+
+#: backend/mustek.c:177
+#, no-c-format
+msgid "4x4 coarse"
+msgstr "4x4 粗糙"
+
+#: backend/mustek.c:178
+#, no-c-format
+msgid "4x4 normal"
+msgstr "4x4 正常"
+
+#: backend/mustek.c:178
+#, no-c-format
+msgid "4x4 fine"
+msgstr "4x4 精细"
+
+#: backend/mustek.c:178
+#, no-c-format
+msgid "3x3 normal"
+msgstr "3x3 正常"
+
+#: backend/mustek.c:179
+#, no-c-format
+msgid "2x2 normal"
+msgstr "2x2 正常"
+
+#: backend/mustek.c:179
+#, no-c-format
+msgid "8x8 custom"
+msgstr "8x8 自定义"
+
+#: backend/mustek.c:180
+#, no-c-format
+msgid "6x6 custom"
+msgstr "6x6 自定义"
+
+#: backend/mustek.c:181
+#, no-c-format
+msgid "5x5 custom"
+msgstr "5x5 自定义"
+
+#: backend/mustek.c:181
+#, no-c-format
+msgid "4x4 custom"
+msgstr "4x4 自定义"
+
+#: backend/mustek.c:182
+#, no-c-format
+msgid "3x3 custom"
+msgstr "3x3 自定义"
+
+#: backend/mustek.c:183
+#, no-c-format
+msgid "2x2 custom"
+msgstr "2x2 自定义"
+
+#: backend/mustek.c:4245
+#, no-c-format
+msgid "Fast gray mode"
+msgstr "快速灰阶模式"
+
+#: backend/mustek.c:4246
+#, no-c-format
+msgid "Scan in fast gray mode (lower quality)."
+msgstr "使用快速灰阶模式扫描 (低品质)。"
+
+#: backend/mustek.c:4343
+#, 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 ""
+"请求所有预览均在最快模式 (低品质) 扫描。它可以是单色模式或低分辨率模式。"
+
+#: backend/mustek.c:4351
+#, no-c-format
+msgid "Lamp off time (minutes)"
+msgstr "背光灯关闭时间 (分钟)"
+
+#: backend/mustek.c:4352
+#, no-c-format
+msgid "Set the time (in minutes) after which the lamp is shut off."
+msgstr "设置背光灯关闭的等待时间 (分钟)。"
+
+#: backend/mustek.c:4363
+#, no-c-format
+msgid "Turn lamp off"
+msgstr "关闭背光灯"
+
+#: backend/mustek.c:4364
+#, no-c-format
+msgid "Turns the lamp off immediately."
+msgstr "立即关闭背光灯。"
+
+#: backend/mustek.c:4441
+#, no-c-format
+msgid "Red brightness"
+msgstr "红亮度"
+
+#: backend/mustek.c:4442
+#, no-c-format
+msgid "Controls the brightness of the red channel of the acquired image."
+msgstr "控制捕获图像的红通道亮度。"
+
+#: backend/mustek.c:4454
+#, no-c-format
+msgid "Green brightness"
+msgstr "绿亮度"
+
+#: backend/mustek.c:4455
+#, no-c-format
+msgid "Controls the brightness of the green channel of the acquired image."
+msgstr "控制捕获图像的绿通道亮度。"
+
+#: backend/mustek.c:4467
+#, no-c-format
+msgid "Blue brightness"
+msgstr "蓝亮度"
+
+#: backend/mustek.c:4468
+#, no-c-format
+msgid "Controls the brightness of the blue channel of the acquired image."
+msgstr "控制捕获图像的蓝通道亮度。"
+
+#: backend/mustek.c:4493
+#, no-c-format
+msgid "Contrast red channel"
+msgstr "红通道对比度"
+
+#: backend/mustek.c:4494
+#, no-c-format
+msgid "Controls the contrast of the red channel of the acquired image."
+msgstr "控制捕获图像的红通道对比度。"
+
+#: backend/mustek.c:4506
+#, no-c-format
+msgid "Contrast green channel"
+msgstr "绿通道对比度"
+
+#: backend/mustek.c:4507
+#, no-c-format
+msgid "Controls the contrast of the green channel of the acquired image."
+msgstr "控制捕获图像的绿通道对比度。"
+
+#: backend/mustek.c:4519
+#, no-c-format
+msgid "Contrast blue channel"
+msgstr "蓝通道对比度"
+
+#: backend/mustek.c:4520
+#, no-c-format
+msgid "Controls the contrast of the blue channel of the acquired image."
+msgstr "控制捕获图像的蓝通道对比度。"
+
+#: backend/mustek_usb2.c:103
+#, no-c-format
+msgid "Color48"
+msgstr "彩色 48 位"
+
+#: backend/mustek_usb2.c:104 backend/mustek_usb2.c:112
+#, no-c-format
+msgid "Color24"
+msgstr "彩色 24 位"
+
+#: backend/mustek_usb2.c:105
+#, no-c-format
+msgid "Gray16"
+msgstr "灰阶 16 位"
+
+#: backend/mustek_usb2.c:106
+#, no-c-format
+msgid "Gray8"
+msgstr "灰阶 8 位"
+
+#: backend/mustek_usb2.c:117
+#, no-c-format
+msgid "Reflective"
+msgstr "反射文稿"
+
+#: backend/mustek_usb2.c:118
+#, no-c-format
+msgid "Positive"
+msgstr "正片"
+
+#: backend/mustek_usb2.c:419
+#, no-c-format
+msgid ""
+"Warm-up until the lamp's brightness is constant instead of insisting on "
+"40 seconds warm-up time."
+msgstr "预热背光灯直至亮度稳定,而不是强制预热 40 秒。"
+
+#: backend/niash.c:675
+#, no-c-format
+msgid "Image"
+msgstr "图像"
+
+#: backend/p5.c:1926
+#, no-c-format
+msgid "Need calibration"
+msgstr "需要校准"
+
+#: backend/pixma/pixma.c:402
+#, no-c-format
+msgid "Negative color"
+msgstr "负片彩色"
+
+#: backend/pixma/pixma.c:407
+#, no-c-format
+msgid "Negative gray"
+msgstr "负片灰阶"
+
+#: backend/pixma/pixma.c:420
+#, no-c-format
+msgid "48 bits color"
+msgstr "48 位彩色"
+
+#: backend/pixma/pixma.c:425
+#, no-c-format
+msgid "16 bits gray"
+msgstr "16 位彩色"
+
+#: backend/pixma/pixma.c:513 backend/pixma/pixma_sane_options.c:415
+#, no-c-format
+msgid "Once"
+msgstr "一次"
+
+#: backend/pixma/pixma.c:516
+#, no-c-format
+msgid "Always"
+msgstr "总是"
+
+#: backend/pixma/pixma.c:519
+#, no-c-format
+msgid "Never"
+msgstr "从不"
+
+#: backend/pixma/pixma.c:1031
+#, no-c-format
+msgid ""
+"Gamma-correction table with 4096 entries. In color mode this option "
+"equally affects the red, green, and blue channels simultaneously (i.e., "
+"it is an intensity gamma table)."
+msgstr ""
+"伽玛校正表,基于亮度,含 4096 项数值。在彩色模式下此选项同时对红、绿、蓝"
+"通道发挥同等效果。"
+
+#: backend/pixma/pixma_sane_options.c:85
+#, 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/pixma_sane_options.c:99
+#, no-c-format
+msgid "Button-controlled scan"
+msgstr "按钮控制扫描"
+
+#: backend/pixma/pixma_sane_options.c:100
+#, 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 ""
+"启用后,扫描进程将不会立即开始。要开始扫描,按“扫描”按钮 (MP150) 或“彩"
+"色”按钮 (其他型号)。要取消扫描,按“灰阶”按钮。"
+
+#: backend/pixma/pixma_sane_options.c:134
+#, no-c-format
+msgid ""
+"Gamma-correction table with 1024 entries. In color mode this option "
+"equally affects the red, green, and blue channels simultaneously (i.e., "
+"it is an intensity gamma table)."
+msgstr ""
+"伽玛校正表,基于亮度,含 1024 项数值。在彩色模式下此选项同时对红、绿、蓝"
+"通道发挥同等效果。"
+
+#: backend/pixma/pixma_sane_options.c:233
+#, no-c-format
+msgid "Update button state"
+msgstr "更新按钮状态"
+
+#: backend/pixma/pixma_sane_options.c:245
+#, no-c-format
+msgid "Button 1"
+msgstr "按钮 1"
+
+#: backend/pixma/pixma_sane_options.c:259
+#, no-c-format
+msgid "Button 2"
+msgstr "按钮 2"
+
+#: backend/pixma/pixma_sane_options.c:273
+#, no-c-format
+msgid "Type of original to scan"
+msgstr "扫描原件类型"
+
+#: backend/pixma/pixma_sane_options.c:287
+#, no-c-format
+msgid "Target operation type"
+msgstr "目标操作类型"
+
+#: backend/pixma/pixma_sane_options.c:315
+#, no-c-format
+msgid "Document type"
+msgstr "文稿类型"
+
+#: backend/pixma/pixma_sane_options.c:329
+#, no-c-format
+msgid "ADF status"
+msgstr "自动输稿器状态"
+
+#: backend/pixma/pixma_sane_options.c:343
+#, no-c-format
+msgid "ADF orientation"
+msgstr "自动输稿器朝向"
+
+#: backend/pixma/pixma_sane_options.c:379
+#, no-c-format
+msgid "Dynamic threshold curve, from light to dark, normally 50-65"
+msgstr "动态阈值曲线,由亮到暗,一般为 50-65"
+
+#: backend/pixma/pixma_sane_options.c:391
+#, no-c-format
+msgid "ADF Waiting Time"
+msgstr "自动输稿器等待时间"
+
+#: backend/pixma/pixma_sane_options.c:392
+#, no-c-format
+msgid ""
+"When set, the scanner waits up to the specified time in seconds for a "
+"new document inserted into the automatic document feeder."
+msgstr ""
+"设置后,扫描仪将等待指定的时间 (单位为秒)以便新文稿能够装入自动输稿器。"
+
+#: backend/pixma/pixma_sane_options.c:407
+#, fuzzy, no-c-format
+msgid ""
+"When to perform scanner calibration. If you choose \"Once\" it will be "
+"performed a single time per driver init for single page scans, and for "
+"the first page for each ADF scan."
+msgstr ""
+"执行扫描仪校准的时机。“一次”意味着每次驱动程序初始化单张页面扫描时,或者"
+"自动输稿器扫描第一张页面时。"
+
+#: backend/plustek.c:233 backend/plustek_pp.c:202 backend/u12.c:154
+#, no-c-format
+msgid "Transparency"
+msgstr "透扫"
+
+#: backend/plustek.c:911
+#, no-c-format
+msgid "Device-Settings"
+msgstr "设备设置"
+
+#: backend/plustek.c:918
+#, no-c-format
+msgid "Lampswitch"
+msgstr "背光灯开关"
+
+#: backend/plustek.c:919
+#, no-c-format
+msgid "Manually switching the lamp(s)."
+msgstr "手动开关背光灯。"
+
+#: backend/plustek.c:924
+#, no-c-format
+msgid "Lamp off during dark calibration"
+msgstr "校准黑点时关闭背光灯"
+
+#: backend/plustek.c:925
+#, no-c-format
+msgid "Always switches lamp off when doing dark calibration."
+msgstr "校准黑点时总是关闭背光灯。"
+
+#: backend/plustek.c:933
+#, no-c-format
+msgid "Calibration data cache"
+msgstr "校准数据缓存"
+
+#: backend/plustek.c:934
+#, no-c-format
+msgid "Enables or disables calibration data cache."
+msgstr "启用或禁用校准数据缓存。"
+
+#: backend/plustek.c:940
+#, no-c-format
+msgid "Performs calibration"
+msgstr "执行校准"
+
+#: backend/plustek.c:957
+#, no-c-format
+msgid "Speedup sensor"
+msgstr "加速传感器"
+
+#: backend/plustek.c:958
+#, no-c-format
+msgid "Enables or disables speeding up sensor movement."
+msgstr "启用或禁用加速传感器移动"
+
+#: backend/plustek.c:972
+#, no-c-format
+msgid "Warmup-time"
+msgstr "预热时间"
+
+#: backend/plustek.c:973
+#, no-c-format
+msgid "Warmup-time in seconds."
+msgstr "预热时间 (秒)。"
+
+#: backend/plustek.c:985
+#, no-c-format
+msgid "Lampoff-time"
+msgstr "背光灯关闭时间"
+
+#: backend/plustek.c:986
+#, no-c-format
+msgid "Lampoff-time in seconds."
+msgstr "背光灯关闭时间 (秒)。"
+
+#: backend/plustek.c:993
+#, no-c-format
+msgid "Analog frontend"
+msgstr "模拟前端"
+
+#: backend/plustek.c:1000
+#, no-c-format
+msgid "Red gain value of the AFE"
+msgstr "模拟前端的红增益"
+
+#: backend/plustek.c:1007 backend/umax_pp.c:781
+#, no-c-format
+msgid "Red offset"
+msgstr "红偏移"
+
+#: backend/plustek.c:1008
+#, no-c-format
+msgid "Red offset value of the AFE"
+msgstr "模拟前端的红偏移"
+
+#: backend/plustek.c:1016
+#, no-c-format
+msgid "Green gain value of the AFE"
+msgstr "模拟前端的绿增益"
+
+#: backend/plustek.c:1024
+#, no-c-format
+msgid "Green offset value of the AFE"
+msgstr "模拟前端的绿偏移"
+
+#: backend/plustek.c:1032
+#, no-c-format
+msgid "Blue gain value of the AFE"
+msgstr "模拟前端的蓝增益"
+
+#: backend/plustek.c:1040
+#, no-c-format
+msgid "Blue offset value of the AFE"
+msgstr "模拟前端的蓝偏移"
+
+#: backend/plustek.c:1047
+#, no-c-format
+msgid "Red lamp off"
+msgstr "红背光灯关闭"
+
+#: backend/plustek.c:1048
+#, no-c-format
+msgid "Defines red lamp off parameter"
+msgstr "指定红背光灯关闭参数"
+
+#: backend/plustek.c:1055
+#, no-c-format
+msgid "Green lamp off"
+msgstr "绿背光灯关闭"
+
+#: backend/plustek.c:1056
+#, no-c-format
+msgid "Defines green lamp off parameter"
+msgstr "指定绿背光灯关闭参数"
+
+#: backend/plustek.c:1063
+#, no-c-format
+msgid "Blue lamp off"
+msgstr "蓝背光灯关闭"
+
+#: backend/plustek.c:1064
+#, no-c-format
+msgid "Defines blue lamp off parameter"
+msgstr "指定蓝背光灯关闭参数"
+
+#: backend/plustek.c:1094
+#, no-c-format
+msgid "This option reflects the status of the scanner buttons."
+msgstr "此选项反映扫描仪按钮的状态。"
+
+#: backend/plustek_pp.c:195
+#, no-c-format
+msgid "Color36"
+msgstr "彩色 36 位"
+
+#: backend/plustek_pp.c:209
+#, no-c-format
+msgid "Dithermap 1"
+msgstr "抖动图案 1"
+
+#: backend/plustek_pp.c:210
+#, no-c-format
+msgid "Dithermap 2"
+msgstr "抖动图案 2"
+
+#: backend/plustek_pp.c:211
+#, no-c-format
+msgid "Randomize"
+msgstr "随机"
+
+#: backend/pnm.c:166
+#, no-c-format
+msgid "Source Selection"
+msgstr "来源选择"
+
+#: backend/pnm.c:203
+#, no-c-format
+msgid "Image Enhancement"
+msgstr "图像增强"
+
+#: backend/pnm.c:239
+#, no-c-format
+msgid "Grayify"
+msgstr "灰阶化"
+
+#: backend/pnm.c:240
+#, no-c-format
+msgid "Load the image as grayscale."
+msgstr "加载图像为灰阶"
+
+#: backend/pnm.c:251
+#, no-c-format
+msgid "Three-Pass Simulation"
+msgstr "三遍扫描模拟"
+
+#: backend/pnm.c:253
+#, no-c-format
+msgid ""
+"Simulate a three-pass scanner by returning 3 separate frames. For "
+"kicks, it returns green, then blue, then red."
+msgstr ""
+"通过返回三个独立扫描帧来模拟三遍式扫描仪。例如按顺序返回绿、蓝、红三帧。"
+
+#: backend/pnm.c:265
+#, no-c-format
+msgid "Hand-Scanner Simulation"
+msgstr "手持式扫描仪模拟"
+
+#: backend/pnm.c:266
+#, 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 one to test whether a frontend can handle this correctly."
+msgstr ""
+"模拟手持式扫描仪。手持式扫描仪通常无法事先推断图像的高度,而是返回高度值 "
+"-1。设置此选项以便测试前端程序能否正确处理此情况。"
+
+#: backend/pnm.c:281
+#, no-c-format
+msgid ""
+"Set default values for enhancement controls (brightness & contrast)."
+msgstr "设置增强控制默认值 (亮度/对比度)。"
+
+#: backend/pnm.c:293
+#, no-c-format
+msgid "Read only test-option"
+msgstr "只读测试选项"
+
+#: backend/pnm.c:294
+#, no-c-format
+msgid "Let's see whether frontends can treat this right"
+msgstr "检查前端程序是否能正确识别此选项"
+
+#: backend/pnm.c:305
+#, no-c-format
+msgid "Gamma Tables"
+msgstr "伽玛表"
+
+#: backend/pnm.c:377
+#, no-c-format
+msgid "Status Code Simulation"
+msgstr "状态代码模拟"
+
+#: backend/pnm.c:389
+#, no-c-format
+msgid "Do not force status code"
+msgstr "不要强制状态代码"
+
+#: backend/pnm.c:390
+#, no-c-format
+msgid "Do not force the backend to return a status code."
+msgstr "不要强制后端程序返回状态代码。"
+
+#: backend/pnm.c:401
+#, no-c-format
+msgid "Return SANE_STATUS_EOF"
+msgstr "返回 SANE_STATUS_EOF"
+
+#: backend/pnm.c:402
+#, no-c-format
+msgid ""
+"Force the backend to return the status code SANE_STATUS_EOF after "
+"sane_read() has been called."
+msgstr "在调用sane_read() 之后强制后端程序返回状态代码 SANE_STATUS_EOF。"
+
+#: backend/pnm.c:414
+#, no-c-format
+msgid "Return SANE_STATUS_JAMMED"
+msgstr "返回 SANE_STATUS_JAMMED"
+
+#: backend/pnm.c:416
+#, no-c-format
+msgid ""
+"Force the backend to return the status code SANE_STATUS_JAMMED after "
+"sane_read() has been called."
+msgstr ""
+"在调用sane_read() 之后强制后端程序返回状态代码 SANE_STATUS_JAMMED。"
+
+#: backend/pnm.c:428
+#, no-c-format
+msgid "Return SANE_STATUS_NO_DOCS"
+msgstr "返回 SANE_STATUS_NO_DOCS"
+
+#: backend/pnm.c:429
+#, no-c-format
+msgid ""
+"Force the backend to return the status code SANE_STATUS_NO_DOCS after "
+"sane_read() has been called."
+msgstr ""
+"在调用sane_read() 之后强制后端程序返回状态代码 SANE_STATUS_NO_DOCS。"
+
+#: backend/pnm.c:441
+#, no-c-format
+msgid "Return SANE_STATUS_COVER_OPEN"
+msgstr "返回 SANE_STATUS_COVER_OPEN"
+
+#: backend/pnm.c:442
+#, no-c-format
+msgid ""
+"Force the backend to return the status code SANE_STATUS_COVER_OPEN after "
+"sane_read() has been called."
+msgstr ""
+"在调用sane_read() 之后强制后端程序返回状态代码 SANE_STATUS_COVER_OPEN。"
+
+#: backend/pnm.c:454
+#, no-c-format
+msgid "Return SANE_STATUS_IO_ERROR"
+msgstr "返回 SANE_STATUS_IO_ERROR"
+
+#: backend/pnm.c:455
+#, no-c-format
+msgid ""
+"Force the backend to return the status code SANE_STATUS_IO_ERROR after "
+"sane_read() has been called."
+msgstr ""
+"在调用sane_read() 之后强制后端程序返回状态代码 SANE_STATUS_IO_ERROR。"
+
+#: backend/pnm.c:467
+#, no-c-format
+msgid "Return SANE_STATUS_NO_MEM"
+msgstr "返回 SANE_STATUS_NO_MEM"
+
+#: backend/pnm.c:469
+#, no-c-format
+msgid ""
+"Force the backend to return the status code SANE_STATUS_NO_MEM after "
+"sane_read() has been called."
+msgstr ""
+"在调用sane_read() 之后强制后端程序返回状态代码 SANE_STATUS_NO_MEM。"
+
+#: backend/pnm.c:481
+#, no-c-format
+msgid "Return SANE_STATUS_ACCESS_DENIED"
+msgstr "返回 SANE_STATUS_ACCESS_DENIED"
+
+#: backend/pnm.c:482
+#, no-c-format
+msgid ""
+"Force the backend to return the status code SANE_STATUS_ACCESS_DENIED "
+"after sane_read() has been called."
+msgstr ""
+"在调用sane_read() 之后强制后端程序返回状态代码 "
+"SANE_STATUS_ACCESS_DENIED。"
+
+#: backend/rts8891.c:2808
+#, no-c-format
+msgid "This option reflects the status of a scanner button."
+msgstr "此选项反映扫描仪按钮的状态。"
+
+#: backend/rts8891.c:2839 backend/umax.c:5793 backend/umax_pp.c:628
+#, no-c-format
+msgid "Lamp on"
+msgstr "背光灯开"
+
+#: backend/rts8891.c:2840 backend/umax.c:5794
+#, no-c-format
+msgid "Turn on scanner lamp"
+msgstr "打开扫描仪背光灯"
+
+#: backend/rts8891.c:2850 backend/umax.c:5810 backend/umax1220u.c:246
+#, no-c-format
+msgid "Lamp off"
+msgstr "背光灯关"
+
+#: backend/rts8891.c:2851 backend/umax.c:5811 backend/umax1220u.c:247
+#, no-c-format
+msgid "Turn off scanner lamp"
+msgstr "关闭扫描仪背光灯"
+
+#: backend/sm3840.c:758
+#, no-c-format
+msgid "Lamp timeout"
+msgstr "背光灯超时"
+
+#: backend/sm3840.c:760
+#, no-c-format
+msgid "Minutes until lamp is turned off after scan"
+msgstr "扫描后背光灯关闭前的等待时间 (分钟)"
+
+#: backend/sm3840.c:770
+#, no-c-format
+msgid "Threshold value for lineart mode"
+msgstr "线稿模式的阈值数值"
+
+#: backend/snapscan-options.c:88
+#, no-c-format
+msgid "Document Feeder"
+msgstr "输稿器"
+
+#: backend/snapscan-options.c:92
+#, no-c-format
+msgid "6x4 (inch)"
+msgstr "6x4 (英寸)"
+
+#: backend/snapscan-options.c:93
+#, no-c-format
+msgid "8x10 (inch)"
+msgstr "8x10 (英寸)"
+
+#: backend/snapscan-options.c:94
+#, no-c-format
+msgid "8.5x11 (inch)"
+msgstr "8.5x11 (英寸)"
+
+#: backend/snapscan-options.c:97
+#, no-c-format
+msgid "Halftoning Unsupported"
+msgstr "不支持半调"
+
+#: backend/snapscan-options.c:98
+#, no-c-format
+msgid "DispersedDot8x8"
+msgstr "分散点 8x8"
+
+#: backend/snapscan-options.c:99
+#, no-c-format
+msgid "DispersedDot16x16"
+msgstr "分散点 16x16"
+
+#: backend/snapscan-options.c:103
+#, 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 ""
+"在一次 SCSI 读取操作中请求的扫描线数。更改此参数可以对扫描时数据读取速度"
+"进行微调。如果此数值设置得太低,扫描仪将不得不在扫描过程中进行周期性停"
+"顿。如果此数值设置得太高,基于 X 的前端程序可能会失去对 X 事件的响应,造"
+"成系统拖慢。"
+
+#: backend/snapscan-options.c:111
+#, no-c-format
+msgid "Frame number of media holder that should be scanned."
+msgstr "介质支架应被扫描的帧数。"
+
+#: backend/snapscan-options.c:114
+#, no-c-format
+msgid "Use manual or automatic selection of focus point."
+msgstr "使用手动或自动对焦点选择。"
+
+#: backend/snapscan-options.c:117
+#, no-c-format
+msgid "Focus point for scanning."
+msgstr "扫描对焦点。"
+
+#: backend/snapscan-options.c:482
+#, no-c-format
+msgid "Preview mode"
+msgstr "预览模式"
+
+#: backend/snapscan-options.c:484
+#, no-c-format
+msgid ""
+"Select the mode for previews. Greyscale previews usually give the best "
+"combination of speed and detail."
+msgstr "选择预览模式。灰阶预览在通常情况下能兼顾速度和细节。"
+
+#: backend/snapscan-options.c:601
+#, no-c-format
+msgid "Predefined settings"
+msgstr "预设设置"
+
+#: backend/snapscan-options.c:603
+#, no-c-format
+msgid ""
+"Provides standard scanning areas for photographs, printed pages and the "
+"like."
+msgstr "提供照片、打印页面等介质的标准扫描区域。"
+
+#: backend/snapscan-options.c:884
+#, no-c-format
+msgid "Frame"
+msgstr "帧"
+
+#: backend/snapscan-options.c:885
+#, no-c-format
+msgid "Frame to be scanned"
+msgstr "要扫描的帧"
+
+#: backend/snapscan-options.c:897
+#, no-c-format
+msgid "Focus-mode"
+msgstr "对焦模式"
+
+#: backend/snapscan-options.c:898
+#, no-c-format
+msgid "Auto or manual focus"
+msgstr "自动或手动对焦"
+
+#: backend/snapscan-options.c:911
+#, no-c-format
+msgid "Focus-point"
+msgstr "对焦点"
+
+#: backend/snapscan-options.c:912
+#, no-c-format
+msgid "Focus point"
+msgstr "对焦点"
+
+#: backend/snapscan-options.c:930
+#, no-c-format
+msgid "Color lines per read"
+msgstr "每次读取彩色线数"
+
+#: backend/snapscan-options.c:942
+#, no-c-format
+msgid "Grayscale lines per read"
+msgstr "每次读取灰阶线数"
+
+#: backend/stv680.c:971
+#, no-c-format
+msgid "webcam"
+msgstr "网络摄像头"
+
+#: backend/stv680.h:109
+#, no-c-format
+msgid "Color RAW"
+msgstr "彩色 RAW"
+
+#: backend/stv680.h:110
+#, no-c-format
+msgid "Color RGB"
+msgstr "彩色 RGB"
+
+#: backend/stv680.h:111
+#, no-c-format
+msgid "Color RGB TEXT"
+msgstr "彩色 RGB 文本"
+
+#: backend/test.c:141
+#, no-c-format
+msgid "Solid black"
+msgstr "纯黑"
+
+#: backend/test.c:141
+#, no-c-format
+msgid "Solid white"
+msgstr "纯白"
+
+#: backend/test.c:142
+#, no-c-format
+msgid "Color pattern"
+msgstr "彩色图案"
+
+#: backend/test.c:142
+#, no-c-format
+msgid "Grid"
+msgstr "网格"
+
+#: backend/test.c:167 backend/test.c:175
+#, no-c-format
+msgid "First entry"
+msgstr "第一项"
+
+#: backend/test.c:167 backend/test.c:175
+#, no-c-format
+msgid "Second entry"
+msgstr "第二项"
+
+#: backend/test.c:169
+#, no-c-format
+msgid ""
+"This is the very long third entry. Maybe the frontend has an idea how to "
+"display it"
+msgstr "这是非常长的第三项。前端程序可能知道该如何显示它"
+
+#: backend/test.c:419
+#, no-c-format
+msgid "Hand-scanner simulation"
+msgstr "手持式扫描仪模拟"
+
+#: backend/test.c:420
+#, 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 one to test whether a frontend can handle this correctly. This "
+"option also enables a fixed width of 11 cm."
+msgstr ""
+"模拟手持式扫描仪。手持式扫描仪通常无法事先推断图像的高度,而是返回高度值 "
+"-1。设置此选项以便测试前端程序能否正确处理此情况。此选项将同时启用 11 厘"
+"米固定宽度。"
+
+#: backend/test.c:437
+#, no-c-format
+msgid "Three-pass simulation"
+msgstr "三遍式扫描模拟"
+
+#: backend/test.c:438
+#, no-c-format
+msgid ""
+"Simulate a three-pass scanner. In color mode, three frames are "
+"transmitted."
+msgstr "模拟三遍式扫描仪。在彩色模式下将传输三帧图像。"
+
+#: backend/test.c:453
+#, no-c-format
+msgid "Set the order of frames"
+msgstr "设置图像帧顺序"
+
+#: backend/test.c:454
+#, no-c-format
+msgid "Set the order of frames in three-pass color mode."
+msgstr "设置三遍式彩色模式的图像帧顺序。"
+
+#: backend/test.c:487
+#, no-c-format
+msgid ""
+"If Automatic Document Feeder is selected, the feeder will be 'empty' "
+"after 10 scans."
+msgstr "如果选择了自动输稿器,它将在 10 次扫描后处于“空”状态。"
+
+#: backend/test.c:502
+#, no-c-format
+msgid "Special Options"
+msgstr "特殊选项"
+
+#: backend/test.c:515
+#, no-c-format
+msgid "Select the test picture"
+msgstr "选择测试图像"
+
+#: backend/test.c:517
+#, no-c-format
+msgid ""
+"Select the kind of test picture. Available options:\n"
+"Solid black: fills the whole scan with black.\n"
+"Solid white: fills the whole scan with white.\n"
+"Color pattern: draws various color test patterns depending on the mode.\n"
+"Grid: draws a black/white grid with a width and height of 10 mm per "
+"square."
+msgstr ""
+"选择测试图像。可用选项有:\n"
+"纯黑:用纯黑填充整个扫描图像。\n"
+"纯白:用纯白填充整个扫描图像。\n"
+"彩色图案:根据模式选择不同的彩色测试图案进行绘制。\n"
+"网格:绘制宽高为 10 毫米的黑白网格。"
+
+#: backend/test.c:538
+#, no-c-format
+msgid "Invert endianness"
+msgstr "倒转字节顺序"
+
+#: backend/test.c:539
+#, 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 ""
+"倒转 16 位模式下图像数据的字节高低顺序。此选项可用于测试前端程序的 16 位"
+"模式。例如测试它是否在使用正确的字节顺序。"
+
+#: backend/test.c:555
+#, no-c-format
+msgid "Read limit"
+msgstr "读取限制"
+
+#: backend/test.c:556
+#, no-c-format
+msgid "Limit the amount of data transferred with each call to sane_read()."
+msgstr "限制每次调用 sane_read() 时传输的数据量。"
+
+#: backend/test.c:569
+#, no-c-format
+msgid "Size of read-limit"
+msgstr "读取限制大小"
+
+#: backend/test.c:570
+#, no-c-format
+msgid ""
+"The (maximum) amount of data transferred with each call to sane_read()."
+msgstr "每次调用 sane_read() 时传输的最大数据量。"
+
+#: backend/test.c:585
+#, no-c-format
+msgid "Read delay"
+msgstr "读取延迟"
+
+#: backend/test.c:586
+#, no-c-format
+msgid "Delay the transfer of data to the pipe."
+msgstr "延迟传输数据到管线"
+
+#: backend/test.c:598
+#, no-c-format
+msgid "Duration of read-delay"
+msgstr "读取延迟持续时间"
+
+#: backend/test.c:599
+#, no-c-format
+msgid ""
+"How long to wait after transferring each buffer of data through the pipe."
+msgstr "在通过管线传输每一次缓冲数据后的等待时间。"
+
+#: backend/test.c:614
+#, no-c-format
+msgid "Return-value of sane_read"
+msgstr "sane_read 的返回数值"
+
+#: backend/test.c:616
+#, 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 ""
+"选择 sane_read() 的返回数值。“默认”是扫描的正常处理方式。所有其他状态代码"
+"均用于测试前端程序的处理方式。"
+
+#: backend/test.c:633
+#, no-c-format
+msgid "Loss of pixels per line"
+msgstr "每线像素损失"
+
+#: backend/test.c:635
+#, no-c-format
+msgid "The number of pixels that are wasted at the end of each line."
+msgstr "每线末尾损失的像素数量。"
+
+#: backend/test.c:648
+#, no-c-format
+msgid "Fuzzy parameters"
+msgstr "模糊参数"
+
+#: backend/test.c:649
+#, no-c-format
+msgid ""
+"Return fuzzy lines and bytes per line when sane_parameters() is called "
+"before sane_start()."
+msgstr ""
+"当在 sane_start() 之前调用 sane_parameters() 时返回模糊线数和每线字节数。"
+
+#: backend/test.c:676
+#, no-c-format
+msgid "Offer select file descriptor"
+msgstr "提供选择文件描述符"
+
+#: backend/test.c:677
+#, no-c-format
+msgid ""
+"Offer a select filedescriptor for detecting if sane_read() will return "
+"data."
+msgstr "提供一个选择文件描述符以检测 sane_read() 是否返回数据。"
+
+#: backend/test.c:690
+#, no-c-format
+msgid "Enable test options"
+msgstr "启用测试选项"
+
+#: backend/test.c:691
+#, 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 ""
+"启用各种测试选项。用于测试前端程序的查看和调整不同 SANE 选项类型的能力。"
+
+#: backend/test.c:705
+#, no-c-format
+msgid "Print options"
+msgstr "打印选项"
+
+#: backend/test.c:706
+#, no-c-format
+msgid "Print a list of all options."
+msgstr "打印所有选项的列表。"
+
+#: backend/test.c:783
+#, no-c-format
+msgid "Bool test options"
+msgstr "布尔测试选项"
+
+#: backend/test.c:796
+#, no-c-format
+msgid "(1/6) Bool soft select soft detect"
+msgstr "(1/6) 布尔软件选择和软件检测"
+
+#: backend/test.c:798
+#, 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) 具备软件选择和软件检测 (和高级) 功能的布尔测试选项。这是一个正常的"
+"布尔选项。"
+
+#: backend/test.c:814
+#, no-c-format
+msgid "(2/6) Bool hard select soft detect"
+msgstr "(2/6) 布尔硬件选择和软件检测"
+
+#: backend/test.c:816
+#, 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) 具备硬件选择和软件检测 (和高级) 功能的布尔测试选项。这意味着该选项"
+"无法由前端程序设置。它只能由用户设置,例如按下设备的某个按钮。"
+
+#: backend/test.c:833
+#, no-c-format
+msgid "(3/6) Bool hard select"
+msgstr "(3/6) 布尔硬件选择"
+
+#: backend/test.c:834
+#, 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) 具备硬件选择 (和高级) 功能的布尔测试选项。这意味着该选项无法由前端"
+"程序设置,且无法被前端程序读取。它只能由用户设置。例如按下设备的某个按"
+"钮。"
+
+#: backend/test.c:852
+#, no-c-format
+msgid "(4/6) Bool soft detect"
+msgstr "(4/6) 布尔软件检测"
+
+#: backend/test.c:853
+#, 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) 具备软件检测 (和高级) 功能的布尔测试选项。这意味着该选项为只读。"
+
+#: backend/test.c:869
+#, no-c-format
+msgid "(5/6) Bool soft select soft detect emulated"
+msgstr "(5/6) 布尔软件选择和软件检测模拟"
+
+#: backend/test.c:870
+#, no-c-format
+msgid ""
+"(5/6) Bool test option that has soft select, soft detect, and emulated "
+"(and advanced) capabilities."
+msgstr "(5/6) 具备软件选择、软件检测、模拟 (和高级) 功能的布尔测试选项。"
+
+#: backend/test.c:886
+#, no-c-format
+msgid "(6/6) Bool soft select soft detect auto"
+msgstr "(6/6) 布尔软件选择和软件检测自动"
+
+#: backend/test.c:887
+#, 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) 具备软件选择、软件检测、自动 (和高级) 功能的布尔测试选项。此选项可"
+"由后端程序自动设置。"
+
+#: backend/test.c:904
+#, no-c-format
+msgid "Int test options"
+msgstr "整数测试选项"
+
+#: backend/test.c:917
+#, no-c-format
+msgid "(1/6) Int"
+msgstr "(1/6) 整数"
+
+#: backend/test.c:918
+#, no-c-format
+msgid "(1/6) Int test option with no unit and no constraint set."
+msgstr "(1/6) 不带单位,不设约束条件的整数测试。"
+
+#: backend/test.c:933
+#, no-c-format
+msgid "(2/6) Int constraint range"
+msgstr "(2/6) 整数约束范围"
+
+#: backend/test.c:934
+#, 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) 带有单位像素,设有约束范围的整数测试选项。最小值为 4,最大值为 "
+"192,数量为 2。"
+
+#: backend/test.c:950
+#, no-c-format
+msgid "(3/6) Int constraint word list"
+msgstr "(3/6) 整数约束单词列表"
+
+#: backend/test.c:951
+#, no-c-format
+msgid "(3/6) Int test option with unit bits and constraint word list set."
+msgstr "(3/6) 带有单位比特,设有约束单词列表的整数测试选项。"
+
+#: backend/test.c:966
+#, no-c-format
+msgid "(4/6) Int array"
+msgstr "(4/6) 整数数组"
+
+#: backend/test.c:967
+#, no-c-format
+msgid ""
+"(4/6) Int test option with unit mm and using an array without "
+"constraints."
+msgstr "(4/6) 带有单位毫米,使用不设约束条件数组的整数测试选项。"
+
+#: backend/test.c:982
+#, no-c-format
+msgid "(5/6) Int array constraint range"
+msgstr "(5/6) 整数数组约束范围"
+
+#: backend/test.c:983
+#, 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) 带有单位 DPI,使用设有范围约束的数组的测试选项。最小值为 4,最大值"
+"为 192,数量为 2。"
+
+#: backend/test.c:1057
+#, no-c-format
+msgid "(6/6) Int array constraint word list"
+msgstr "(6/6) 整数数组约束单词列表"
+
+#: backend/test.c:1058
+#, no-c-format
+msgid ""
+"(6/6) Int test option with unit percent and using an array with a word "
+"list constraint."
+msgstr "(6/6) 带有单位百分比,使用设有单词列表约束数组的整数测试选项。"
+
+#: backend/test.c:1074
+#, no-c-format
+msgid "Fixed test options"
+msgstr "固定测试选项"
+
+#: backend/test.c:1087
+#, no-c-format
+msgid "(1/3) Fixed"
+msgstr "(1/3) 固定"
+
+#: backend/test.c:1088
+#, no-c-format
+msgid "(1/3) Fixed test option with no unit and no constraint set."
+msgstr "(1/3) 不带单位,不设约束的固定测试选项。"
+
+#: backend/test.c:1103
+#, no-c-format
+msgid "(2/3) Fixed constraint range"
+msgstr "(2/3) 固定约束范围"
+
+#: backend/test.c:1104
+#, 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) 带有单位毫秒,设有约束范围的固定测试选项。最小值为 -42.17,最大值"
+"为 32767.9999,数量为 2.0。"
+
+#: backend/test.c:1120
+#, no-c-format
+msgid "(3/3) Fixed constraint word list"
+msgstr "(3/3) 固定约束单词列表"
+
+#: backend/test.c:1121
+#, no-c-format
+msgid "(3/3) Fixed test option with no unit and constraint word list set."
+msgstr "(3/3) 不带单位,设有约束单词列表的固定测试选项。"
+
+#: backend/test.c:1136
+#, no-c-format
+msgid "String test options"
+msgstr "字符串测试选项"
+
+#: backend/test.c:1149
+#, no-c-format
+msgid "(1/3) String"
+msgstr "(1/3) 字符串"
+
+#: backend/test.c:1150
+#, no-c-format
+msgid "(1/3) String test option without constraint."
+msgstr "(1/3) 不设约束的字符串测试选项。"
+
+#: backend/test.c:1167
+#, no-c-format
+msgid "(2/3) String constraint string list"
+msgstr "(2/3) 字符串约束字符串列表"
+
+#: backend/test.c:1168
+#, no-c-format
+msgid "(2/3) String test option with string list constraint."
+msgstr "(2/3) 设有字符串列表约束的字符串测试选项。"
+
+#: backend/test.c:1187
+#, no-c-format
+msgid "(3/3) String constraint long string list"
+msgstr "(3/3) 字符串约束长字符串列表"
+
+#: backend/test.c:1188
+#, no-c-format
+msgid ""
+"(3/3) String test option with string list constraint. Contains some more "
+"entries..."
+msgstr "(3/3) 设有字符串列表约束的字符串测试选项。包含更多的项目..."
+
+#: backend/test.c:1208
+#, no-c-format
+msgid "Button test options"
+msgstr "按钮测试选项"
+
+#: backend/test.c:1221
+#, no-c-format
+msgid "(1/1) Button"
+msgstr "(1/1) 按钮"
+
+#: backend/test.c:1222
+#, no-c-format
+msgid "(1/1) Button test option. Prints some text..."
+msgstr "(1/1) 按钮测试选项。打印某些文本..."
+
+#: backend/u12.c:147
+#, no-c-format
+msgid "Color 36"
+msgstr "彩色 36 位"
+
+#: backend/umax.c:233
+#, no-c-format
+msgid "Use Image Composition"
+msgstr "使用图像合成"
+
+#: backend/umax.c:234
+#, no-c-format
+msgid "Bi-level black and white (lineart mode)"
+msgstr "黑白二值 (线稿模式)"
+
+#: backend/umax.c:235
+#, no-c-format
+msgid "Dithered/halftone black & white (halftone mode)"
+msgstr "抖动/半调黑白 (半调模式)"
+
+#: backend/umax.c:236
+#, no-c-format
+msgid "Multi-level black & white (grayscale mode)"
+msgstr "黑白多级 (灰阶模式)"
+
+#: backend/umax.c:237
+#, no-c-format
+msgid "Multi-level RGB color (one pass color)"
+msgstr "彩色 RGB 多级 (单遍彩色)"
+
+#: backend/umax.c:238
+#, no-c-format
+msgid "Ignore calibration"
+msgstr "忽略校准"
+
+#: backend/umax.c:5731
+#, no-c-format
+msgid "Disable pre focus"
+msgstr "禁用预对焦"
+
+#: backend/umax.c:5732
+#, no-c-format
+msgid "Do not calibrate focus"
+msgstr "不要校准焦点"
+
+#: backend/umax.c:5743
+#, no-c-format
+msgid "Manual pre focus"
+msgstr "手动预对焦"
+
+#: backend/umax.c:5755
+#, no-c-format
+msgid "Fix focus position"
+msgstr "固定对焦位置"
+
+#: backend/umax.c:5767
+#, no-c-format
+msgid "Lens calibration in doc position"
+msgstr "镜头校准到文稿位置"
+
+#: backend/umax.c:5768
+#, no-c-format
+msgid "Calibrate lens focus in document position"
+msgstr "在文稿位置校准镜头对焦"
+
+#: backend/umax.c:5779
+#, no-c-format
+msgid "Holder focus position 0mm"
+msgstr "支架对焦位置 0 毫米"
+
+#: backend/umax.c:5780
+#, no-c-format
+msgid "Use 0mm holder focus position instead of 0.6mm"
+msgstr "使用 0 毫米支架对焦位置而不是 0.6 毫米"
+
+#: backend/umax.c:5883
+#, no-c-format
+msgid "Calibration mode"
+msgstr "校准模式"
+
+#: backend/umax.c:5884
+#, no-c-format
+msgid "Define calibration mode"
+msgstr "指定校准模式"
+
+#: backend/umax_pp.c:629
+#, no-c-format
+msgid "Sets lamp on/off"
+msgstr "设置背光灯开关"
+
+#: backend/umax_pp.c:638
+#, no-c-format
+msgid "UTA on"
+msgstr "透扫光罩开"
+
+#: backend/umax_pp.c:639
+#, no-c-format
+msgid "Sets UTA on/off"
+msgstr "设置透扫光罩开/关"
+
+#: backend/umax_pp.c:760
+#, no-c-format
+msgid "Offset"
+msgstr "偏移"
+
+#: backend/umax_pp.c:762
+#, no-c-format
+msgid "Color channels offset settings"
+msgstr "颜色通道偏移设置"
+
+#: backend/umax_pp.c:769
+#, no-c-format
+msgid "Gray offset"
+msgstr "灰阶偏移"
+
+#: backend/umax_pp.c:770
+#, no-c-format
+msgid "Sets gray channel offset"
+msgstr "设置灰阶通道偏移"
+
+#: backend/umax_pp.c:782
+#, no-c-format
+msgid "Sets red channel offset"
+msgstr "设置红通道偏移"
+
+#: backend/umax_pp.c:794
+#, no-c-format
+msgid "Sets green channel offset"
+msgstr "设置绿通道偏移"
+
+#: backend/umax_pp.c:806
+#, no-c-format
+msgid "Sets blue channel offset"
+msgstr "设置蓝通道偏移"
diff --git a/testsuite/backend/genesys/tests_image_pipeline.cpp b/testsuite/backend/genesys/tests_image_pipeline.cpp
index 8edeff8..8c46e8d 100644
--- a/testsuite/backend/genesys/tests_image_pipeline.cpp
+++ b/testsuite/backend/genesys/tests_image_pipeline.cpp
@@ -468,7 +468,7 @@ void test_node_invert_1_bits()
ASSERT_EQ(out_data, expected_data);
}
-void test_node_merge_mono_lines()
+void test_node_merge_mono_lines_to_color()
{
using Data = std::vector<std::uint8_t>;
@@ -481,7 +481,7 @@ void test_node_merge_mono_lines()
ImagePipelineStack stack;
stack.push_first_node<ImagePipelineNodeArraySource>(8, 3, PixelFormat::I8,
std::move(in_data));
- stack.push_node<ImagePipelineNodeMergeMonoLines>(ColorOrder::RGB);
+ stack.push_node<ImagePipelineNodeMergeMonoLinesToColor>(ColorOrder::RGB);
ASSERT_EQ(stack.get_output_width(), 8u);
ASSERT_EQ(stack.get_output_height(), 1u);
@@ -500,6 +500,37 @@ void test_node_merge_mono_lines()
ASSERT_EQ(out_data, expected_data);
}
+void test_node_merge_color_to_gray()
+{
+ using Data = std::vector<std::uint8_t>;
+
+ Data in_data = {
+ 0x10, 0x20, 0x30, 0x11, 0x21, 0x31,
+ 0x12, 0x22, 0x32, 0x13, 0x23, 0x33,
+ 0x14, 0x24, 0x34, 0x15, 0x25, 0x35,
+ 0x16, 0x26, 0x36, 0x17, 0x27, 0x37,
+ };
+
+ ImagePipelineStack stack;
+ stack.push_first_node<ImagePipelineNodeArraySource>(8, 1, PixelFormat::RGB888,
+ std::move(in_data));
+ stack.push_node<ImagePipelineNodeMergeColorToGray>();
+
+ ASSERT_EQ(stack.get_output_width(), 8u);
+ ASSERT_EQ(stack.get_output_height(), 1u);
+ ASSERT_EQ(stack.get_output_row_bytes(), 8u);
+ ASSERT_EQ(stack.get_output_format(), PixelFormat::I8);
+
+ auto out_data = stack.get_all_data();
+
+ Data expected_data = {
+ 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24
+ };
+
+ ASSERT_EQ(out_data, expected_data);
+}
+
+
void test_node_split_mono_lines()
{
using Data = std::vector<std::uint8_t>;
@@ -937,7 +968,8 @@ void test_image_pipeline()
test_node_invert_16_bits();
test_node_invert_8_bits();
test_node_invert_1_bits();
- test_node_merge_mono_lines();
+ test_node_merge_mono_lines_to_color();
+ test_node_merge_color_to_gray();
test_node_split_mono_lines();
test_node_component_shift_lines();
test_node_pixel_shift_columns_no_switch();
diff --git a/testsuite/tools/Makefile.am b/testsuite/tools/Makefile.am
index 99af9db..c9122ac 100644
--- a/testsuite/tools/Makefile.am
+++ b/testsuite/tools/Makefile.am
@@ -32,7 +32,7 @@ check.local:
for mode in ascii html-backends-split html-mfgs xml statistics usermap db udev udev+acl udev+hwdb hwdb plist hal hal-new; \
do \
$(SANEDESC) -m $$mode -s $(srcdir)/data >$$mode.res ;\
- if diff -I "sane-backends 1\.0\.[0-9]\+\([-.0-9a-fgdirty]\+\)\?$$" \
+ if diff -I "sane-backends 1\.[0-9]\.[0-9]\+\([-.0-9a-fgdirty]\+\)\?$$" \
$(srcdir)/data/$$mode.ref $$mode.res ; \
then \
echo "PASS: sane-desc -m $$mode -s $(srcdir)/data"; \
diff --git a/tools/NEWS.template.jinja b/tools/NEWS.template.jinja
new file mode 100644
index 0000000..afb5c11
--- /dev/null
+++ b/tools/NEWS.template.jinja
@@ -0,0 +1,30 @@
+{% for section, _ in sections|dictsort(by='key') %}
+{% set underline = "-" %}
+{% if section %}
+----- {{section}}
+
+{% endif %}
+{% if sections[section] %}
+{% for category, val in definitions|dictsort if category in sections[section]%}
+
+### {{ definitions[category]['name'] }}
+
+{% for text, values in sections[section][category]|dictsort(by='value') %}
+- {{ text }}
+{% endfor %}
+
+{% if sections[section][category]|length == 0 %}
+
+No significant changes.
+
+
+{% else %}
+{% endif %}
+{% endfor %}
+{% else %}
+
+No significant changes.
+
+
+{% endif %}
+{% endfor %}
diff --git a/tools/epson2usb.pl b/tools/epson2usb.pl
index 6d542d7..b1e63dd 100755
--- a/tools/epson2usb.pl
+++ b/tools/epson2usb.pl
@@ -42,11 +42,8 @@ use warnings;
next unless $m->{'usbid'} =~ /"0x04b8"\s+"(0x[[:xdigit:]]+)"/;
my $id = $1;
-
# print $id, "\n";
- $id =~ s/0x0/0x/;
-
$m->{'model'} =~ s/;.+$//;
$m->{'model'} =~ s/\"//g;
$m->{'model'} =~ s/\s+$//;
diff --git a/towncrier.toml b/towncrier.toml
new file mode 100644
index 0000000..54ee6c4
--- /dev/null
+++ b/towncrier.toml
@@ -0,0 +1,34 @@
+[tool.towncrier]
+ package = ""
+ directory = "newsfragments"
+ filename = "NEWS"
+ template = "tools/NEWS.template.jinja"
+ title_format = "\n## New with {version} (released {project_date})\n"
+ start_string = "<!--(towncrier release notes start)-->"
+ [[tool.towncrier.section]]
+ path = ""
+
+ [[tool.towncrier.type]]
+ directory = "security"
+ name = "Security fixes"
+ showcontent = false
+
+ [[tool.towncrier.type]]
+ directory = "backend"
+ name = "Backends"
+ showcontent = true
+
+ [[tool.towncrier.type]]
+ directory = "frontend"
+ name = "Frontends"
+ showcontent = true
+
+ [[tool.towncrier.type]]
+ directory = "removal"
+ name = "Deprecations and removals"
+ showcontent = true
+
+ [[tool.towncrier.type]]
+ directory = "misc"
+ name = "Miscellaneous"
+ showcontent = true