From 2d8988521156f7a673e2d0caaecb13263c8773fa Mon Sep 17 00:00:00 2001 From: Alessandro Zummo Date: Wed, 17 Jun 2009 17:36:49 +0200 Subject: [PATCH 01/12] epson2: fixed network issue --- backend/epson2.c | 2 +- backend/epson2_net.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/backend/epson2.c b/backend/epson2.c index 3c8139b4c..060f9894d 100644 --- a/backend/epson2.c +++ b/backend/epson2.c @@ -907,7 +907,7 @@ sane_get_devices(const SANE_Device ***device_list, SANE_Bool __sane_unused__ loc DBG(5, "%s - results:\n", __func__); - for (i = 0, dev = first_dev; i < num_devices; dev = dev->next, i++) { + for (i = 0, dev = first_dev; i < num_devices && dev; dev = dev->next, i++) { DBG(1, " %d (%d): %s\n", i, dev->connection, dev->model); devlist[i] = &dev->sane; } diff --git a/backend/epson2_net.c b/backend/epson2_net.c index f06952a7a..a0c0f89fd 100644 --- a/backend/epson2_net.c +++ b/backend/epson2_net.c @@ -115,11 +115,12 @@ sanei_epson_net_read(Epson_Scanner *s, unsigned char *buf, size_t wanted, return 0; } - } else if (wanted < size && s->netlen == size) { +/* } else if (wanted < size && s->netlen == size) { */ + } else { DBG(23, "%s: partial read\n", __func__); read = sanei_tcp_read(s->fd, s->netbuf, size); - if (read < 0) { + if (read != size) { *status = SANE_STATUS_IO_ERROR; return 0; } From a2e6237f6e99cfc3b4cec37b815c6d07d118be66 Mon Sep 17 00:00:00 2001 From: Alessandro Zummo Date: Thu, 18 Jun 2009 02:25:17 +0200 Subject: [PATCH 02/12] epson2: code cleanup Style and dead code cleanup. --- backend/epson2-ops.c | 165 +++++++++--------------- backend/epson2.c | 3 - backend/epson2.h | 299 +++++++++++++++++++++---------------------- 3 files changed, 209 insertions(+), 258 deletions(-) diff --git a/backend/epson2-ops.c b/backend/epson2-ops.c index 134841162..64460c555 100644 --- a/backend/epson2-ops.c +++ b/backend/epson2-ops.c @@ -19,12 +19,10 @@ #include "sane/config.h" -#include /* malloc */ #include /* sleep */ #include -#include #include "byteorder.h" @@ -34,107 +32,68 @@ #include "epson2-io.h" #include "epson2-commands.h" -static EpsonCmdRec epson_cmd[] = { - /* - * request identity - * | request identity2 - * | | request status - * | | | request command parameter - * | | | | set color mode - * | | | | | start scanning - * | | | | | | set data format - * | | | | | | | set resolution - * | | | | | | | | set zoom - * | | | | | | | | | set scan area - * | | | | | | | | | | set brightness - * | | | | | | | | | | | set gamma - * | | | | | | | | | | | | set halftoning - * | | | | | | | | | | | | | set color correction - * | | | | | | | | | | | | | | initialize scanner - * | | | | | | | | | | | | | | | set speed - * | | | | | | | | | | | | | | | | set lcount - * | | | | | | | | | | | | | | | | | mirror image - * | | | | | | | | | | | | | | | | | | set gamma table - * | | | | | | | | | | | | | | | | | | | set outline emphasis - * | | | | | | | | | | | | | | | | | | | | set dither - * | | | | | | | | | | | | | | | | | | | | | set color correction coefficients - * | | | | | | | | | | | | | | | | | | | | | | request extended status - * | | | | | | | | | | | | | | | | | | | | | | | control an extension - * | | | | | | | | | | | | | | | | | | | | | | | | forward feed / eject - * | | | | | | | | | | | | | | | | | | | | | | | | | feed - * | | | | | | | | | | | | | | | | | | | | | | | | | | request push button status - * | | | | | | | | | | | | | | | | | | | | | | | | | | | control auto area segmentation - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | set film type - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set exposure time - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set bay - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set threshold - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set focus position - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request focus position - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request extended identity - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request scanner status - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + * request identity + * | request identity2 + * | | request status + * | | | request condition + * | | | | set color mode + * | | | | | start scanning + * | | | | | | set data format + * | | | | | | | set resolution + * | | | | | | | | set zoom + * | | | | | | | | | set scan area + * | | | | | | | | | | set brightness + * | | | | | | | | | | | set gamma + * | | | | | | | | | | | | set halftoning + * | | | | | | | | | | | | | set color correction + * | | | | | | | | | | | | | | initialize scanner + * | | | | | | | | | | | | | | | set speed + * | | | | | | | | | | | | | | | | set lcount + * | | | | | | | | | | | | | | | | | mirror image + * | | | | | | | | | | | | | | | | | | set gamma table + * | | | | | | | | | | | | | | | | | | | set outline emphasis + * | | | | | | | | | | | | | | | | | | | | set dither + * | | | | | | | | | | | | | | | | | | | | | set color correction coefficients + * | | | | | | | | | | | | | | | | | | | | | | request extension status + * | | | | | | | | | | | | | | | | | | | | | | | control an extension + * | | | | | | | | | | | | | | | | | | | | | | | | forward feed / eject + * | | | | | | | | | | | | | | | | | | | | | | | | | feed + * | | | | | | | | | | | | | | | | | | | | | | | | | | request push button status + * | | | | | | | | | | | | | | | | | | | | | | | | | | | control auto area segmentation + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | set film type + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set exposure time + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set bay + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set threshold + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | set focus position + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request focus position + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request extended identity + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | request scanner status + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + * | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | */ - {"A1", 'I', 0x0, 'F', 'S', 0x0, 'G', 0x0, 'R', 0x0, 'A', 0x0, - {-0, 0, 0}, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0}, - {"A2", 'I', 0x0, 'F', 'S', 0x0, 'G', 'D', 'R', 'H', 'A', 'L', - {-3, 3, 0}, 'Z', 'B', 0x0, '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"B1", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 0x0, 'A', 0x0, - {-0, 0, 0}, 0x0, 'B', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"B2", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', - {-3, 3, 0}, 'Z', 'B', 0x0, '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"B3", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', - {-3, 3, 0}, 'Z', 'B', 'M', '@', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 'm', - 'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"B4", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', - {-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 0x0, 'z', 'Q', 'b', 'm', - 'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"B5", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', - {-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm', - 'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"B6", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', - {-3, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm', - 'f', 'e', 0x00, 0x00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"B7", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', - {-4, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm', - 'f', 'e', '\f', 0x00, '!', 's', 'N', 0x0, 0x0, 't', 0x0, 0x0, 'I', - 'F'}, - {"B8", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', - {-4, 3, 0}, 'Z', 'B', 'M', '@', 'g', 'd', 'K', 'z', 'Q', 'b', 'm', - 'f', 'e', '\f', 0x19, '!', 's', 'N', 0x0, 0x0, 0x0, 'p', 'q', 'I', - 'F'}, - {"F5", 'I', 0x0, 'F', 'S', 'C', 'G', 'D', 'R', 'H', 'A', 'L', - {-3, 3, 0}, 'Z', 0x0, 'M', '@', 'g', 'd', 'K', 'z', 'Q', 0x0, 'm', - 0x0, 'e', '\f', 0x00, 0x0, 0x0, 'N', 'T', 'P', 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"D1", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0, - {-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0, - 'f', 0x0, 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"D7", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0, - {-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0, - 'f', 0x0, 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, - {"D8", 'I', 'i', 'F', 0x0, 'C', 'G', 'D', 'R', 0x0, 'A', 0x0, - {-0, 0, 0}, 'Z', 0x0, 0x0, '@', 'g', 'd', 0x0, 'z', 0x0, 0x0, 0x0, - 'f', 'e', 0x00, 0x00, '!', 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0}, + +static struct EpsonCmd epson_cmd[] = { + {"A1",'I', 0 ,'F','S', 0 ,'G', 0 ,'R', 0 ,'A', 0 ,{ 0, 0, 0}, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, + {"A2",'I', 0 ,'F','S', 0 ,'G','D','R','H','A','L',{-3, 3, 0},'Z','B', 0 ,'@', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, + {"B1",'I', 0 ,'F','S','C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0}, 0 ,'B', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, + {"B2",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B', 0 ,'@', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, + {"B3",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@', 0 , 0 , 0 , 0 , 0 , 0 ,'m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, + {"B4",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d', 0 ,'z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, + {"B5",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, + {"B6",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e', 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, + {"B7",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-4, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e','\f', 0 ,'!','s','N', 0 , 0 ,'t', 0 , 0 ,'I','F'}, + {"B8",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-4, 3, 0},'Z','B','M','@','g','d','K','z','Q','b','m','f','e','\f', 0x19,'!','s','N', 0 , 0 ,'t','p','q','I','F'}, +/* XXX 'f' probably not supported on F5 */ + {"F5",'I', 0 ,'F','S','C','G','D','R','H','A','L',{-3, 3, 0},'Z', 0 ,'M','@','g','d','K','z','Q', 0 ,'m','f','e','\f', 0 , 0 , 0 ,'N','T','P', 0 , 0 , 0 , 0 , 0 }, + {"D1",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'m','f', 0 , 0 , 0 ,'!', 0 , 0 , 0 , 0 ,'t', 0 , 0 , 0 , 0 }, + {"D2",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'m','f','e', 0 , 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 }, + {"D7",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 , 0 ,'f','e','\f', 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 }, + {"D8",'I','i','F', 0 ,'C','G','D','R', 0 ,'A', 0 ,{ 0, 0, 0},'Z', 0 , 0 ,'@','g','d', 0 ,'z', 0 , 0 ,'0','f','e','\f', 0 ,'!', 0 ,'N', 0 , 0 ,'t', 0 , 0 , 0 , 0 }, }; + + extern struct mode_param mode_params[]; /* Define the different scan sources */ @@ -156,10 +115,10 @@ static int film_params[] = { 0, 1, 2, 3 }; extern const int halftone_params[]; static const int dropout_params[] = { - 0x00, /* none */ - 0x10, /* red */ - 0x20, /* green */ - 0x30 /* blue */ + 0x00, /* none */ + 0x10, /* red */ + 0x20, /* green */ + 0x30 /* blue */ }; /* diff --git a/backend/epson2.c b/backend/epson2.c index 060f9894d..a5a96beb8 100644 --- a/backend/epson2.c +++ b/backend/epson2.c @@ -1880,12 +1880,9 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) DBG(17, "%s: constrained val = %d\n", __func__, *(SANE_Word *) value); - s->option_has_changed = SANE_TRUE; - optval = NULL; optindex = 0; - if (sopt->constraint_type == SANE_CONSTRAINT_STRING_LIST) { optval = search_string_list(sopt->constraint.string_list, (char *) value); diff --git a/backend/epson2.h b/backend/epson2.h index 30c3ef133..8ab5f6508 100644 --- a/backend/epson2.h +++ b/backend/epson2.h @@ -19,7 +19,7 @@ #define epson2_h #undef BACKEND_NAME -#define BACKEND_NAME epson2 +#define BACKEND_NAME epson2 #define DEBUG_NOT_STATIC #include @@ -36,13 +36,12 @@ #include #endif -#include /* for memset and memcpy */ +#include /* for memset and memcpy */ #include - -#include "../include/sane/sane.h" -#include "../include/sane/sanei_backend.h" -#include "../include/sane/sanei_debug.h" +#include "sane/sane.h" +#include "sane/sanei_backend.h" +#include "sane/sanei_debug.h" #ifdef __GNUC__ #define __func__ __FUNCTION__ @@ -51,10 +50,10 @@ /* I cast my vote for C99... :) */ #endif -#define EPSON2_CONFIG_FILE "epson2.conf" +#define EPSON2_CONFIG_FILE "epson2.conf" #ifndef PATH_MAX -#define PATH_MAX (1024) +#define PATH_MAX (1024) #endif #ifndef XtNumber @@ -67,12 +66,6 @@ #define DEVICE_NAME_LEN (16) /* length of device name in extended status */ -/* some string constants that are used in the config file */ - -#define SANE_EPSON_CONFIG_USB "usb" -#define SANE_EPSON_CONFIG_PIO "pio" -#define SANE_EPSON_CONFIG_NET "net" - /* string constants for GUI elements that are not defined SANE-wide */ #define SANE_NAME_GAMMA_CORRECTION "gamma-correction" @@ -86,14 +79,12 @@ #define SANE_EPSON_WAIT_FOR_BUTTON_TITLE SANE_I18N("Wait for Button") #define SANE_EPSON_WAIT_FOR_BUTTON_DESC SANE_I18N("After sending the scan command, wait until the button on the scanner is pressed to actually start the scan process."); +/* misc constants */ #define LINES_SHUFFLE_MAX 17 /* 2 x 8 lines plus 1 */ - -#define SANE_EPSON_MAX_RETRIES 120 /* how often do we retry during warmup ? */ - -#ifndef MM_PER_INCH +#define SANE_EPSON_MAX_RETRIES 14 /* warmup max retry */ #define MM_PER_INCH 25.4 -#endif +#define CMD_SIZE_EXT_STATUS 42 /* NOTE: you can find these codes with "man ascii". */ #define STX 0x02 @@ -107,6 +98,8 @@ #define S_ACK "\006" #define S_CAN "\030" +/* status bits */ + #define STATUS_FER 0x80 /* fatal error */ #define STATUS_NOT_READY 0x40 /* scanner is in use on another interface */ #define STATUS_AREA_END 0x20 /* area end */ @@ -114,8 +107,6 @@ #define STATUS_EXT_COMMANDS 0x02 /* scanners supports extended commands */ #define STATUS_RESERVED 0x01 /* this should be always 0 */ -#define CMD_SIZE_EXT_STATUS 42 - #define EXT_STATUS_FER 0x80 /* fatal error */ #define EXT_STATUS_FBF 0x40 /* flat bed scanner */ #define EXT_STATUS_ADFT 0x20 /* page type ADF */ @@ -181,170 +172,174 @@ * scanner with SANE get in touch with me and we can work something out - khk */ -#define EPSON_LEVEL_DEFAULT EPSON_LEVEL_B3 +#define EPSON_LEVEL_DEFAULT EPSON_LEVEL_B3 -typedef struct +struct EpsonCmd { - char *level; + char *level; - unsigned char request_identity; - unsigned char request_identity2; /* new request identity command for Dx command level */ - unsigned char request_status; - unsigned char request_condition; - unsigned char set_color_mode; - unsigned char start_scanning; - unsigned char set_data_format; - unsigned char set_resolution; - unsigned char set_zoom; - unsigned char set_scan_area; - unsigned char set_bright; - SANE_Range bright_range; - unsigned char set_gamma; - unsigned char set_halftoning; - unsigned char set_color_correction; - unsigned char initialize_scanner; - unsigned char set_speed; /* B4 and later */ - unsigned char set_lcount; - unsigned char mirror_image; /* B5 and later */ - unsigned char set_gamma_table; /* B4 and later */ - unsigned char set_outline_emphasis; /* B4 and later */ - unsigned char set_dither; /* B4 and later */ - unsigned char set_color_correction_coefficients; /* B3 and later */ - unsigned char request_extended_status; /* get extended status from scanner */ - unsigned char control_an_extension; /* for extension control */ - unsigned char eject; /* for extension control */ - unsigned char feed; - unsigned char request_push_button_status; - unsigned char control_auto_area_segmentation; - unsigned char set_film_type; /* for extension control */ - unsigned char set_exposure_time; /* F5 only */ - unsigned char set_bay; /* F5 only */ - unsigned char set_threshold; - unsigned char set_focus_position; /* B8 only */ - unsigned char request_focus_position; /* B8 only */ - unsigned char request_extended_identity; - unsigned char request_scanner_status; -} EpsonCmdRec, *EpsonCmd; + unsigned char request_identity; + unsigned char request_identity2; /* new request identity level Dx */ + unsigned char request_status; + unsigned char request_condition; + unsigned char set_color_mode; + unsigned char start_scanning; + unsigned char set_data_format; + unsigned char set_resolution; + unsigned char set_zoom; + unsigned char set_scan_area; + unsigned char set_bright; + SANE_Range bright_range; + unsigned char set_gamma; + unsigned char set_halftoning; + unsigned char set_color_correction; + unsigned char initialize_scanner; + unsigned char set_speed; /* B4 and later */ + unsigned char set_lcount; + unsigned char mirror_image; /* B5 and later */ + unsigned char set_gamma_table; /* B4 and later */ + unsigned char set_outline_emphasis; /* B4 and later */ + unsigned char set_dither; /* B4 and later */ + unsigned char set_color_correction_coefficients; /* B3 and later */ + unsigned char request_extended_status; /* get extended status from scanner */ + unsigned char control_an_extension; /* for extension control */ + unsigned char eject; /* for extension control */ + unsigned char feed; + unsigned char request_push_button_status; + unsigned char control_auto_area_segmentation; + unsigned char set_film_type; /* for extension control */ + unsigned char set_exposure_time; /* F5 only */ + unsigned char set_bay; /* F5 only */ + unsigned char set_threshold; + unsigned char set_focus_position; /* B8 only */ + unsigned char request_focus_position; /* B8 only */ + unsigned char request_extended_identity; + unsigned char request_scanner_status; +}; -enum -{ OPT_NUM_OPTS = - 0, OPT_MODE_GROUP, OPT_MODE, OPT_BIT_DEPTH, OPT_HALFTONE, OPT_DROPOUT, - OPT_BRIGHTNESS, OPT_SHARPNESS, OPT_GAMMA_CORRECTION, OPT_COLOR_CORRECTION, - OPT_RESOLUTION, OPT_THRESHOLD, OPT_ADVANCED_GROUP, OPT_MIRROR, - OPT_AAS, OPT_GAMMA_VECTOR_R, OPT_GAMMA_VECTOR_G, OPT_GAMMA_VECTOR_B, - OPT_WAIT_FOR_BUTTON, OPT_CCT_GROUP, OPT_CCT_1, OPT_CCT_2, OPT_CCT_3, - OPT_CCT_4, OPT_CCT_5, OPT_CCT_6, OPT_CCT_7, OPT_CCT_8, OPT_CCT_9, - OPT_PREVIEW_GROUP, OPT_PREVIEW, OPT_GEOMETRY_GROUP, - OPT_TL_X, OPT_TL_Y, OPT_BR_X, OPT_BR_Y, OPT_EQU_GROUP, - OPT_SOURCE, OPT_AUTO_EJECT, OPT_FILM_TYPE, OPT_FOCUS, OPT_BAY, - OPT_EJECT, OPT_ADF_MODE, NUM_OPTIONS +enum { + OPT_NUM_OPTS = 0, + OPT_MODE_GROUP, OPT_MODE, OPT_BIT_DEPTH, OPT_HALFTONE, OPT_DROPOUT, + OPT_BRIGHTNESS, OPT_SHARPNESS, OPT_GAMMA_CORRECTION, OPT_COLOR_CORRECTION, + OPT_RESOLUTION, OPT_THRESHOLD, OPT_ADVANCED_GROUP, OPT_MIRROR, + OPT_AAS, OPT_GAMMA_VECTOR_R, OPT_GAMMA_VECTOR_G, OPT_GAMMA_VECTOR_B, + OPT_WAIT_FOR_BUTTON, OPT_CCT_GROUP, OPT_CCT_1, OPT_CCT_2, OPT_CCT_3, + OPT_CCT_4, OPT_CCT_5, OPT_CCT_6, OPT_CCT_7, OPT_CCT_8, OPT_CCT_9, + OPT_PREVIEW_GROUP, OPT_PREVIEW, OPT_GEOMETRY_GROUP, + OPT_TL_X, OPT_TL_Y, OPT_BR_X, OPT_BR_Y, OPT_EQU_GROUP, + OPT_SOURCE, OPT_AUTO_EJECT, OPT_FILM_TYPE, OPT_FOCUS, OPT_BAY, + OPT_EJECT, OPT_ADF_MODE, NUM_OPTIONS }; typedef enum -{ /* hardware connection to the scanner */ - SANE_EPSON_NODEV, /* default, no HW specified yet */ - SANE_EPSON_SCSI, /* SCSI interface */ - SANE_EPSON_PIO, /* parallel interface */ - SANE_EPSON_USB, /* USB interface */ - SANE_EPSON_NET /* network interface */ +{ /* hardware connection to the scanner */ + SANE_EPSON_NODEV, /* default, no HW specified yet */ + SANE_EPSON_SCSI, /* SCSI interface */ + SANE_EPSON_PIO, /* parallel interface */ + SANE_EPSON_USB, /* USB interface */ + SANE_EPSON_NET /* network interface */ } Epson_Connection_Type; +/* hardware description */ + struct Epson_Device { - struct Epson_Device *next; + struct Epson_Device *next; - char *name; - char *model; + char *name; + char *model; + SANE_Device sane; + SANE_Int level; + SANE_Range dpi_range; - SANE_Device sane; - SANE_Int level; - SANE_Range dpi_range; + SANE_Range *x_range; /* x range w/out extension */ + SANE_Range *y_range; /* y range w/out extension */ - SANE_Range *x_range; /* x range w/out extension */ - SANE_Range *y_range; /* y range w/out extension */ + SANE_Range fbf_x_range; /* flattbed x range */ + SANE_Range fbf_y_range; /* flattbed y range */ + SANE_Range adf_x_range; /* autom. document feeder x range */ + SANE_Range adf_y_range; /* autom. document feeder y range */ + SANE_Range tpu_x_range; /* transparency unit x range */ + SANE_Range tpu_y_range; /* transparency unit y range */ - SANE_Range fbf_x_range; /* flattbed x range */ - SANE_Range fbf_y_range; /* flattbed y range */ - SANE_Range adf_x_range; /* autom. document feeder x range */ - SANE_Range adf_y_range; /* autom. document feeder y range */ - SANE_Range tpu_x_range; /* transparency unit x range */ - SANE_Range tpu_y_range; /* transparency unit y range */ + Epson_Connection_Type connection; - Epson_Connection_Type connection; - /* hardware interface type */ + SANE_Int *res_list; /* list of resolutions */ + SANE_Int res_list_size; /* number of entries in this list */ + SANE_Int last_res; /* last selected resolution */ + SANE_Int last_res_preview; /* last selected preview resolution */ - SANE_Int *res_list; /* list of resolutions */ - SANE_Int res_list_size; /* number of entries in this list */ - SANE_Int last_res; /* last selected resolution */ - SANE_Int last_res_preview; /* last selected preview resolution */ + SANE_Word *resolution_list; /* for display purposes we store a second copy */ - SANE_Word *resolution_list; /* for display purposes we store a second copy */ + SANE_Bool extension; /* extension is installed */ + SANE_Int use_extension; /* use the installed extension */ + SANE_Bool TPU; /* TPU is installed */ + SANE_Bool TPU2; /* TPU2 is installed */ + SANE_Bool ADF; /* ADF is installed */ + SANE_Bool duplex; /* does the ADF handle duplex scanning */ + SANE_Bool focusSupport; /* does this scanner have support for "set focus position" ? */ + SANE_Bool color_shuffle; /* does this scanner need color shuffling */ - SANE_Bool extension; /* extension is installed */ - SANE_Int use_extension; /* use the installed extension */ - SANE_Bool TPU; /* TPU is installed */ - SANE_Bool TPU2; /* TPU2 is installed */ - SANE_Bool ADF; /* ADF is installed */ - SANE_Bool duplex; /* does the ADF handle duplex scanning */ - SANE_Bool focusSupport; /* does this scanner have support for "set focus position" ? */ - SANE_Bool color_shuffle; /* does this scanner need color shuffling */ + SANE_Int maxDepth; /* max. color depth */ + SANE_Word *depth_list; - SANE_Int maxDepth; /* max. color depth */ - SANE_Word *depth_list; + SANE_Int optical_res; /* optical resolution */ + SANE_Int max_line_distance; - SANE_Int optical_res; /* optical resolution */ - SANE_Int max_line_distance; + SANE_Bool need_double_vertical; + SANE_Bool need_color_reorder; + SANE_Bool need_reset_on_source_change; - SANE_Bool need_double_vertical; - SANE_Bool need_color_reorder; - SANE_Bool need_reset_on_source_change; + SANE_Bool wait_for_button; /* do we have to wait until the scanner button is pressed? */ - SANE_Bool wait_for_button; /* do we have to wait until the scanner button is pressed? */ + SANE_Bool extended_commands; - SANE_Bool extended_commands; - - EpsonCmd cmd; + struct EpsonCmd *cmd; }; typedef struct Epson_Device Epson_Device; - +/* an instance of a scanner */ struct Epson_Scanner { - struct Epson_Scanner *next; - int fd; - Epson_Device *hw; - SANE_Option_Descriptor opt[NUM_OPTIONS]; - Option_Value val[NUM_OPTIONS]; - SANE_Parameters params; - SANE_Bool block; - SANE_Bool eof; - SANE_Byte *buf, *end, *ptr; - SANE_Bool canceling; - SANE_Bool focusOnGlass; - SANE_Byte currentFocusPosition; -/* SANE_Word gamma_table [ 4] [ 256]; */ - SANE_Word gamma_table[3][256]; - SANE_Int retry_count; - SANE_Byte *line_buffer[LINES_SHUFFLE_MAX]; - /* buffer lines for color shuffling */ - SANE_Int color_shuffle_line; /* current line number for color shuffling */ - SANE_Int line_distance; /* current line distance */ - SANE_Int current_output_line; /* line counter when color shuffling */ - SANE_Int lines_written; /* debug variable */ - SANE_Bool option_has_changed; /* did one of the options change it's value? */ - SANE_Int left, top, lcount; - unsigned char *netbuf, *netptr; - size_t netlen; + struct Epson_Scanner *next; + struct Epson_Device *hw; + int fd; - /* extended image data handshaking */ - SANE_Int ext_block_len; - SANE_Int ext_last_len; - SANE_Int ext_blocks; - SANE_Int ext_counter; + SANE_Option_Descriptor opt[NUM_OPTIONS]; + Option_Value val[NUM_OPTIONS]; + SANE_Parameters params; + + SANE_Bool block; + SANE_Bool eof; + SANE_Byte *buf, *end, *ptr; + SANE_Bool canceling; + SANE_Word gamma_table[3][256]; + SANE_Int retry_count; + + /* buffer lines for color shuffling */ + SANE_Byte *line_buffer[LINES_SHUFFLE_MAX]; + SANE_Int color_shuffle_line; /* current line number for color shuffling */ + SANE_Int line_distance; /* current line distance */ + SANE_Int current_output_line; /* line counter when color shuffling */ + SANE_Int lines_written; /* debug variable */ + + SANE_Int left, top, lcount; + SANE_Bool focusOnGlass; + SANE_Byte currentFocusPosition; + + /* network buffers */ + unsigned char *netbuf, *netptr; + size_t netlen; + + /* extended image data handshaking */ + SANE_Int ext_block_len; + SANE_Int ext_last_len; + SANE_Int ext_blocks; + SANE_Int ext_counter; }; typedef struct Epson_Scanner Epson_Scanner; @@ -357,4 +352,4 @@ struct mode_param int depth; }; -#endif /* epson2_h */ +#endif From b39c12dd7b3129749e62ec7f7afc94dc8070ac36 Mon Sep 17 00:00:00 2001 From: Alessandro Zummo Date: Thu, 18 Jun 2009 15:54:09 +0200 Subject: [PATCH 03/12] Define MM_PER_INCH once for all --- backend/abaton.c | 1 - backend/agfafocus.c | 1 - backend/apple.c | 1 - backend/artec.c | 1 - backend/artec_eplus48u.h | 1 - backend/as6e.h | 1 - backend/avision.c | 1 - backend/bh.h | 1 - backend/canon.c | 1 - backend/canon_dr.h | 1 - backend/cardscan.h | 1 - backend/coolscan.c | 1 - backend/epjitsu.h | 1 - backend/epson.c | 4 ---- backend/epson2.h | 1 - backend/fujitsu.h | 1 - backend/genesys_low.h | 1 - backend/gt68xx_low.h | 1 - backend/hp-accessor.c | 1 + backend/hp-option.c | 1 + backend/hp.h | 1 - backend/hp3500.c | 1 - backend/hp4200.h | 1 - backend/hs2p-scsi.h | 1 - backend/ibm.c | 1 - backend/leo.h | 1 - backend/ma1509.h | 1 - backend/matsushita.h | 1 - backend/microtek.c | 1 - backend/microtek2.h | 1 - backend/mustek.h | 1 - backend/mustek_usb.h | 1 - backend/mustek_usb2.h | 1 - backend/pie.c | 1 - backend/pint.c | 1 - backend/plustek-pp.h | 1 - backend/plustek.h | 1 - backend/ricoh.c | 1 - backend/rts8891_low.h | 1 - backend/s9036.c | 1 - backend/sceptre.h | 1 - backend/sm3840.h | 1 - backend/sp15c.h | 1 - backend/st400.c | 1 - backend/tamarack.c | 1 - backend/teco1.h | 1 - backend/teco2.h | 1 - backend/teco3.h | 1 - backend/test.h | 1 - backend/umax.c | 1 - backend/umax_pp.c | 1 - backend/xerox_mfp.h | 1 - include/sane/sanei_backend.h | 4 ++++ 53 files changed, 6 insertions(+), 53 deletions(-) diff --git a/backend/abaton.c b/backend/abaton.c index d6b21ac81..548785d17 100644 --- a/backend/abaton.c +++ b/backend/abaton.c @@ -81,7 +81,6 @@ #include "abaton.h" -#define MM_PER_INCH 25.4 static int num_devices; static Abaton_Device *first_dev; diff --git a/backend/agfafocus.c b/backend/agfafocus.c index 1b518a566..bc215585f 100644 --- a/backend/agfafocus.c +++ b/backend/agfafocus.c @@ -47,7 +47,6 @@ # define PATH_MAX 1024 #endif -#define MM_PER_INCH 25.4 #undef Byte #define Byte SANE_Byte diff --git a/backend/apple.c b/backend/apple.c index a120f9a24..1f5ae9ded 100644 --- a/backend/apple.c +++ b/backend/apple.c @@ -135,7 +135,6 @@ #include "apple.h" -#define MM_PER_INCH 25.4 static int num_devices; static Apple_Device *first_dev; diff --git a/backend/artec.c b/backend/artec.c index ea120ce1f..21b7c292d 100644 --- a/backend/artec.c +++ b/backend/artec.c @@ -85,7 +85,6 @@ #define ARTEC_SUB 16 #define ARTEC_LAST_MOD "05/26/2001 17:28 EST" -#define MM_PER_INCH 25.4 #ifndef PATH_MAX #define PATH_MAX 1024 diff --git a/backend/artec_eplus48u.h b/backend/artec_eplus48u.h index 7c3b90751..cc30214e8 100644 --- a/backend/artec_eplus48u.h +++ b/backend/artec_eplus48u.h @@ -36,7 +36,6 @@ typedef SANE_Byte Artec48U_Packet[ARTEC48U_PACKET_SIZE]; #define HIBYTE(w) ((SANE_Byte)(((SANE_Word)(w) >> 8) & 0xFF)) #define LOBYTE(w) ((SANE_Byte)(w)) -#define MM_PER_INCH 25.4 #define CHECK_DEV_NOT_NULL(dev, func_name) \ do { \ diff --git a/backend/as6e.h b/backend/as6e.h index 118a40887..7132d6b8e 100644 --- a/backend/as6e.h +++ b/backend/as6e.h @@ -118,7 +118,6 @@ typedef struct AS6E_Scan #define READPIPE 0 #define WRITEPIPE 1 -#define MM_PER_INCH 25.4 #define SCAN_BUF_SIZE 32768 diff --git a/backend/avision.c b/backend/avision.c index da5bcccd9..26646642b 100644 --- a/backend/avision.c +++ b/backend/avision.c @@ -1182,7 +1182,6 @@ Lexmark X4500 MFP #define AVISION_INQUIRY_SIZE_V2 0x88 #define AVISION_INQUIRY_SIZE_MAX AVISION_INQUIRY_SIZE_V2 -#define MM_PER_INCH 25.4 #define AVISION_BASE_RES 300 diff --git a/backend/bh.h b/backend/bh.h index bb04e60bc..62115c63a 100644 --- a/backend/bh.h +++ b/backend/bh.h @@ -206,7 +206,6 @@ typedef enum } BH_Option; /* macros for accessing the value for an option within a scanning context */ -#define MM_PER_INCH 25.4 #define _OPT_VAL_WORD(s, o) ((s)->val[(o)].w) #define _OPT_VAL_WORD_THOUSANDTHS(s, o) \ (SANE_UNFIX(_OPT_VAL_WORD((s), (o))) * 1000.0 / MM_PER_INCH) diff --git a/backend/canon.c b/backend/canon.c index f3dcf4bb5..bfb430044 100644 --- a/backend/canon.c +++ b/backend/canon.c @@ -127,7 +127,6 @@ #define SANE_I18N(text) text #endif -#define MM_PER_INCH 25.4 static SANE_Byte primaryHigh[256], primaryLow[256], secondaryHigh[256], secondaryLow[256]; /* modification for FB1200S */ diff --git a/backend/canon_dr.h b/backend/canon_dr.h index 65e833b33..3bb737c51 100644 --- a/backend/canon_dr.h +++ b/backend/canon_dr.h @@ -397,7 +397,6 @@ enum { /* ------------------------------------------------------------------------- */ -#define MM_PER_INCH 25.4 #define MM_PER_UNIT_UNFIX SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)) #define MM_PER_UNIT_FIX SANE_FIX(SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))) diff --git a/backend/cardscan.h b/backend/cardscan.h index 43d2a9739..41fd2c35a 100644 --- a/backend/cardscan.h +++ b/backend/cardscan.h @@ -117,7 +117,6 @@ struct scanner /* ------------------------------------------------------------------------- */ -#define MM_PER_INCH 25.4 #define MM_PER_UNIT_UNFIX SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)) #define MM_PER_UNIT_FIX SANE_FIX(SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))) diff --git a/backend/coolscan.c b/backend/coolscan.c index 4a1f9b324..e093885ae 100644 --- a/backend/coolscan.c +++ b/backend/coolscan.c @@ -1872,7 +1872,6 @@ sense_handler (int scsi_fd, unsigned char * result, void *arg) /* ------------------------------------------------------------------------- */ -#define MM_PER_INCH 25.4 /* ilu per mm */ #define length_quant SANE_UNFIX(SANE_FIX(MM_PER_INCH / 2700.0)) diff --git a/backend/epjitsu.h b/backend/epjitsu.h index 9dbb530fa..26017abda 100644 --- a/backend/epjitsu.h +++ b/backend/epjitsu.h @@ -263,7 +263,6 @@ struct scanner /* ------------------------------------------------------------------------- */ -#define MM_PER_INCH 25.4 #define MM_PER_UNIT_UNFIX SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)) #define MM_PER_UNIT_FIX SANE_FIX(SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))) diff --git a/backend/epson.c b/backend/epson.c index f80647fb1..91cfe5379 100644 --- a/backend/epson.c +++ b/backend/epson.c @@ -341,10 +341,6 @@ #define PATH_MAX (1024) #endif -#ifndef MM_PER_INCH -#define MM_PER_INCH 25.4 -#endif - #define walloc(x) (x *)malloc(sizeof(x)) #define walloca(x) (x *)alloca(sizeof(x)) diff --git a/backend/epson2.h b/backend/epson2.h index 8ab5f6508..9a56caceb 100644 --- a/backend/epson2.h +++ b/backend/epson2.h @@ -83,7 +83,6 @@ #define LINES_SHUFFLE_MAX 17 /* 2 x 8 lines plus 1 */ #define SANE_EPSON_MAX_RETRIES 14 /* warmup max retry */ -#define MM_PER_INCH 25.4 #define CMD_SIZE_EXT_STATUS 42 /* NOTE: you can find these codes with "man ascii". */ diff --git a/backend/fujitsu.h b/backend/fujitsu.h index 6bff688ac..3305c9652 100644 --- a/backend/fujitsu.h +++ b/backend/fujitsu.h @@ -640,7 +640,6 @@ struct fujitsu /* ------------------------------------------------------------------------- */ -#define MM_PER_INCH 25.4 #define MM_PER_UNIT_UNFIX SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)) #define MM_PER_UNIT_FIX SANE_FIX(SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0))) diff --git a/backend/genesys_low.h b/backend/genesys_low.h index 409e8e6eb..ccc47d021 100644 --- a/backend/genesys_low.h +++ b/backend/genesys_low.h @@ -69,7 +69,6 @@ if (status != SANE_STATUS_GOOD) return status; \ } while (SANE_FALSE) -#define MM_PER_INCH 25.4 /* Flags */ #define GENESYS_FLAG_UNTESTED (1 << 0) /* Print a warning for these scanners */ diff --git a/backend/gt68xx_low.h b/backend/gt68xx_low.h index 0a3355f34..182c748bf 100644 --- a/backend/gt68xx_low.h +++ b/backend/gt68xx_low.h @@ -70,7 +70,6 @@ #define HIBYTE(w) ((SANE_Byte)(((SANE_Word)(w) >> 8) & 0xFF)) #define LOBYTE(w) ((SANE_Byte)(w)) -#define MM_PER_INCH 25.4 /* return if an error occured while the function was called */ #ifdef MAX_DEBUG diff --git a/backend/hp-accessor.c b/backend/hp-accessor.c index f405b8011..b1acd7ceb 100644 --- a/backend/hp-accessor.c +++ b/backend/hp-accessor.c @@ -47,6 +47,7 @@ extern int sanei_debug_hp; */ #define DEBUG_DECLARE_ONLY #include "../include/sane/config.h" +#include "../include/sane/sanei_backend.h" #include "../include/lassert.h" #include diff --git a/backend/hp-option.c b/backend/hp-option.c index f2336658c..4d80098d0 100644 --- a/backend/hp-option.c +++ b/backend/hp-option.c @@ -69,6 +69,7 @@ extern int sanei_debug_hp; */ #define DEBUG_DECLARE_ONLY #include "../include/sane/config.h" +#include "../include/sane/sanei_backend.h" #include "../include/lalloca.h" #include diff --git a/backend/hp.h b/backend/hp.h index cf4d4eb04..9e7a7022c 100644 --- a/backend/hp.h +++ b/backend/hp.h @@ -70,7 +70,6 @@ #define HP_CONFIG_FILE STRINGIFY(BACKEND_NAME) ".conf" -#define MM_PER_INCH 25.4 #define DEVPIX_PER_INCH 300.0 #define MM_PER_DEVPIX (MM_PER_INCH / DEVPIX_PER_INCH) diff --git a/backend/hp3500.c b/backend/hp3500.c index f40b58a85..56b48b03c 100644 --- a/backend/hp3500.c +++ b/backend/hp3500.c @@ -117,7 +117,6 @@ typedef int (*rts8801_callback) (void *param, unsigned bytes, void *data); #define DEBUG 1 -#define MM_PER_INCH 25.4 #define SCANNER_UNIT_TO_FIXED_MM(number) SANE_FIX(number * MM_PER_INCH / 1200) #define FIXED_MM_TO_SCANNER_UNIT(number) SANE_UNFIX(number) * 1200 / MM_PER_INCH diff --git a/backend/hp4200.h b/backend/hp4200.h index 1a3d2453a..13c0d7fd8 100644 --- a/backend/hp4200.h +++ b/backend/hp4200.h @@ -27,7 +27,6 @@ #define min(a, b) (((a) < (b)) ? (a) : (b)) #define max(a, b) (((a) > (b)) ? (a) : (b)) -#define MM_PER_INCH 25.4 /*--------------------------------------------------------------------------*/ diff --git a/backend/hs2p-scsi.h b/backend/hs2p-scsi.h index 335390e2d..eecb60c9f 100644 --- a/backend/hs2p-scsi.h +++ b/backend/hs2p-scsi.h @@ -521,7 +521,6 @@ typedef struct mode_page_connect } MP_CXN; /* 1 inch = 6 picas = 72 points = 25.4 mm */ -#define MM_PER_INCH 25.4 #define DEFAULT_MUD 1200 /* WHY ? */ /* BASIC MEASUREMENT UNIT * 00H INCH diff --git a/backend/ibm.c b/backend/ibm.c index 5dcce9ca0..e1c11ebd0 100644 --- a/backend/ibm.c +++ b/backend/ibm.c @@ -76,7 +76,6 @@ #include "ibm.h" #include "ibm-scsi.c" -#define MM_PER_INCH 25.4 #define MAX(a,b) ((a) > (b) ? (a) : (b)) static int num_devices = 0; diff --git a/backend/leo.h b/backend/leo.h index 1ce60ece5..e90271d3f 100644 --- a/backend/leo.h +++ b/backend/leo.h @@ -201,7 +201,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift) /*--------------------------------------------------------------------------*/ -#define MM_PER_INCH 25.4 #define mmToIlu(mm) (((mm) * dev->x_resolution) / MM_PER_INCH) #define iluToMm(ilu) (((ilu) * MM_PER_INCH) / dev->x_resolution) diff --git a/backend/ma1509.h b/backend/ma1509.h index cbec0d9ce..455ca9cd0 100644 --- a/backend/ma1509.h +++ b/backend/ma1509.h @@ -63,7 +63,6 @@ #endif #define MA1509_CONFIG_FILE "ma1509.conf" -#define MM_PER_INCH 25.4 /* Convenience macros */ #if defined(MIN) diff --git a/backend/matsushita.h b/backend/matsushita.h index b8f93bd58..77301cf9a 100644 --- a/backend/matsushita.h +++ b/backend/matsushita.h @@ -162,7 +162,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift) /*--------------------------------------------------------------------------*/ -#define MM_PER_INCH 25.4 #define mmToIlu(mm) (((mm) * 1200) / MM_PER_INCH) #define iluToMm(ilu) (((ilu) * MM_PER_INCH) / 1200) diff --git a/backend/microtek.c b/backend/microtek.c index e4fc466cf..74a0af9cc 100644 --- a/backend/microtek.c +++ b/backend/microtek.c @@ -85,7 +85,6 @@ # define PATH_MAX 1024 #endif -#define MM_PER_INCH 25.4 #define SCSI_BUFF_SIZE sanei_scsi_max_request_size diff --git a/backend/microtek2.h b/backend/microtek2.h index 0cace8635..474973848 100644 --- a/backend/microtek2.h +++ b/backend/microtek2.h @@ -78,7 +78,6 @@ #endif /* HAVE_AUTHORIZATION */ -#define MM_PER_INCH 25.4 #define ENDIAN_TYPE(d) { unsigned i, test = 0; \ for (i=0; i < sizeof(int); i++ ) \ diff --git a/backend/mustek.h b/backend/mustek.h index 57db2954f..5532af598 100644 --- a/backend/mustek.h +++ b/backend/mustek.h @@ -55,7 +55,6 @@ # define PATH_MAX 1024 #endif #define MUSTEK_CONFIG_FILE "mustek.conf" -#define MM_PER_INCH 25.4 #define MAX_WAITING_TIME 60 /* How long to wait for scanner to become ready */ #define MAX_LINE_DIST 40 /* Extra lines needed for LD correction */ diff --git a/backend/mustek_usb.h b/backend/mustek_usb.h index 9babd2a71..7e6840287 100644 --- a/backend/mustek_usb.h +++ b/backend/mustek_usb.h @@ -56,7 +56,6 @@ #define DISABLE(OPTION) s->opt[OPTION].cap |= SANE_CAP_INACTIVE #define IS_ACTIVE(OPTION) (((s->opt[OPTION].cap) & SANE_CAP_INACTIVE) == 0) -#define MM_PER_INCH 25.4 #define MUSTEK_USB_CONFIG_FILE "mustek_usb.conf" #define SCAN_BUFFER_SIZE (64 * 1024) diff --git a/backend/mustek_usb2.h b/backend/mustek_usb2.h index a85546d87..b80c51a83 100644 --- a/backend/mustek_usb2.h +++ b/backend/mustek_usb2.h @@ -60,7 +60,6 @@ #define RIE(function) do {status = function; if (status != SANE_STATUS_GOOD) \ return status;} while (SANE_FALSE) -#define MM_PER_INCH 25.4 #define SCAN_BUFFER_SIZE (64 * 1024) #define MAX_RESOLUTIONS 12 #define DEF_LINEARTTHRESHOLD 128 diff --git a/backend/pie.c b/backend/pie.c index 136f492aa..33768900a 100644 --- a/backend/pie.c +++ b/backend/pie.c @@ -115,7 +115,6 @@ #define BUILD 9 #define PIE_CONFIG_FILE "pie.conf" -#define MM_PER_INCH 25.4 #define LINEART_STR "Lineart" #define HALFTONE_STR "Halftone" diff --git a/backend/pint.c b/backend/pint.c index 58ecd25da..638d68b8a 100644 --- a/backend/pint.c +++ b/backend/pint.c @@ -63,7 +63,6 @@ extern int errno; #include "pint.h" -#define MM_PER_INCH 25.4 #define DECIPOINTS_PER_MM (720.0 / MM_PER_INCH) #define TWELVEHUNDS_PER_MM (1200.0 / MM_PER_INCH) diff --git a/backend/plustek-pp.h b/backend/plustek-pp.h index 65759c8a0..e63b1ccb8 100644 --- a/backend/plustek-pp.h +++ b/backend/plustek-pp.h @@ -475,7 +475,6 @@ typedef struct { #ifndef __KERNEL__ -#define MM_PER_INCH 25.4 #define PLUSTEK_CONFIG_FILE "plustek_pp.conf" diff --git a/backend/plustek.h b/backend/plustek.h index 68cf5711a..be657c159 100644 --- a/backend/plustek.h +++ b/backend/plustek.h @@ -106,7 +106,6 @@ /************************ some definitions ***********************************/ -#define MM_PER_INCH 25.4 #define PLUSTEK_CONFIG_FILE "plustek.conf" diff --git a/backend/ricoh.c b/backend/ricoh.c index 5b8f46395..fa6a2286f 100644 --- a/backend/ricoh.c +++ b/backend/ricoh.c @@ -71,7 +71,6 @@ #include "ricoh.h" -#define MM_PER_INCH 25.4 #define MAX(a,b) ((a) > (b) ? (a) : (b)) static int num_devices = 0; diff --git a/backend/rts8891_low.h b/backend/rts8891_low.h index b09f6b13d..78e86f202 100644 --- a/backend/rts8891_low.h +++ b/backend/rts8891_low.h @@ -57,7 +57,6 @@ #define DBG_io2 7 /* io functions that are called very often */ #define DBG_data 8 /* log image data */ -#define MM_PER_INCH 25.4 /* Flags */ #define RTS8891_FLAG_UNTESTED (1 << 0) /* Print a warning for these scanners */ diff --git a/backend/s9036.c b/backend/s9036.c index 1bc30f669..9313622dc 100644 --- a/backend/s9036.c +++ b/backend/s9036.c @@ -41,7 +41,6 @@ #define BACKEND_NAME s9036 #include "../include/sane/sanei_backend.h" -#define MM_PER_INCH 25.4 #undef Byte #define Byte SANE_Byte diff --git a/backend/sceptre.h b/backend/sceptre.h index 8bc41029d..53dfeae33 100644 --- a/backend/sceptre.h +++ b/backend/sceptre.h @@ -229,7 +229,6 @@ CDB; /*--------------------------------------------------------------------------*/ -#define MM_PER_INCH 25.4 #define length_quant SANE_UNFIX(SANE_FIX(MM_PER_INCH / 600)) #define mmToIlu(mm) ((mm) / length_quant) #define iluToMm(ilu) ((ilu) * length_quant) diff --git a/backend/sm3840.h b/backend/sm3840.h index 0edcf44fc..abcd1b742 100755 --- a/backend/sm3840.h +++ b/backend/sm3840.h @@ -119,7 +119,6 @@ typedef struct SM3840_Scan #define SM3840_CONFIG_FILE "sm3840.conf" -#define MM_PER_INCH 25.4 #define SCAN_BUF_SIZE 65536 diff --git a/backend/sp15c.h b/backend/sp15c.h index 6522abe02..52535e057 100644 --- a/backend/sp15c.h +++ b/backend/sp15c.h @@ -192,7 +192,6 @@ struct sp15c /* ------------------------------------------------------------------------- */ -#define MM_PER_INCH 25.4 #define length_quant SANE_UNFIX(SANE_FIX(MM_PER_INCH / 1200.0)) #define mmToIlu(mm) ((mm) / length_quant) #define iluToMm(ilu) ((ilu) * length_quant) diff --git a/backend/st400.c b/backend/st400.c index 891600f25..6801ffa9a 100644 --- a/backend/st400.c +++ b/backend/st400.c @@ -103,7 +103,6 @@ static ST400_Model st400_models[] = { { 0, NULL, 0, NULL, 0, 0, 0, NULL, NULL, NULL, NULL } }; -#define MM_PER_INCH 25.4 static ST400_Device *st400_devices = NULL; static unsigned int st400_num_devices = 0; diff --git a/backend/tamarack.c b/backend/tamarack.c index 7820b2760..c5b8d878b 100644 --- a/backend/tamarack.c +++ b/backend/tamarack.c @@ -76,7 +76,6 @@ #define TAMARACK_CONFIG_FILE "tamarack.conf" -#define MM_PER_INCH 25.4 static int num_devices; static Tamarack_Device *first_dev; diff --git a/backend/teco1.h b/backend/teco1.h index 8fe0cd641..ae86d0047 100644 --- a/backend/teco1.h +++ b/backend/teco1.h @@ -214,7 +214,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift) /*--------------------------------------------------------------------------*/ -#define MM_PER_INCH 25.4 #define mmToIlu(mm) (((mm) * dev->def->x_resolution_max) / MM_PER_INCH) #define iluToMm(ilu) (((ilu) * MM_PER_INCH) / dev->def->x_resolution_max) diff --git a/backend/teco2.h b/backend/teco2.h index 680b68ea1..9975f034c 100644 --- a/backend/teco2.h +++ b/backend/teco2.h @@ -237,7 +237,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift) /*--------------------------------------------------------------------------*/ -#define MM_PER_INCH 25.4 #define mmToIlu(mm) (((mm) * dev->def->x_resolution_max) / MM_PER_INCH) #define iluToMm(ilu) (((ilu) * MM_PER_INCH) / dev->def->x_resolution_max) diff --git a/backend/teco3.h b/backend/teco3.h index a5ecc46e1..b239981bb 100644 --- a/backend/teco3.h +++ b/backend/teco3.h @@ -228,7 +228,6 @@ getbitfield (unsigned char *pageaddr, int mask, int shift) /*--------------------------------------------------------------------------*/ -#define MM_PER_INCH 25.4 #define mmToIlu(mm) (((mm) * 300) / MM_PER_INCH) #define iluToMm(ilu) (((ilu) * MM_PER_INCH) / 300) diff --git a/backend/test.h b/backend/test.h index 6d253fd63..dcd54b635 100644 --- a/backend/test.h +++ b/backend/test.h @@ -46,7 +46,6 @@ #ifndef test_h #define test_h -#define MM_PER_INCH 25.4 typedef enum { diff --git a/backend/umax.c b/backend/umax.c index a98ac922b..adaa924c8 100644 --- a/backend/umax.c +++ b/backend/umax.c @@ -101,7 +101,6 @@ in ADF mode this is done often: #define BACKEND_NAME umax #define UMAX_CONFIG_FILE "umax.conf" -#define MM_PER_INCH 25.4 /* ------------------------------------------------------------ SANE INTERNATIONALISATION ------------------ */ diff --git a/backend/umax_pp.c b/backend/umax_pp.c index 746d5654f..00f9e26d7 100644 --- a/backend/umax_pp.c +++ b/backend/umax_pp.c @@ -182,7 +182,6 @@ static const SANE_String_Const astra_models[] = #define UMAX_PP_MODE_GRAYSCALE 1 #define UMAX_PP_MODE_COLOR 2 -#define MM_PER_INCH 25.4 #define MM_TO_PIXEL(mm, res) (SANE_UNFIX(mm) * (float )res / MM_PER_INCH) #define PIXEL_TO_MM(px, res) (SANE_FIX((float )(px * MM_PER_INCH / (res / 10)) / 10.0)) diff --git a/backend/xerox_mfp.h b/backend/xerox_mfp.h index 0f1f87147..094b40fab 100644 --- a/backend/xerox_mfp.h +++ b/backend/xerox_mfp.h @@ -16,7 +16,6 @@ #define UNCONST(ptr) ((void *)(long)(ptr)) -#define MM_PER_INCH 25.4 #define PNT_PER_MM (1200. / MM_PER_INCH) #define PADDING_SIZE 16 diff --git a/include/sane/sanei_backend.h b/include/sane/sanei_backend.h index 2f1842f8e..a3d3d4461 100644 --- a/include/sane/sanei_backend.h +++ b/include/sane/sanei_backend.h @@ -56,6 +56,10 @@ #define M_PI 3.14159265358979323846 #endif +#ifndef MM_PER_INCH +#define MM_PER_INCH 25.4 +#endif + #ifdef HAVE_SIGPROCMASK # define SIGACTION sigaction #else From b369664c42483b1808f75d10fb2ec14492e3c56a Mon Sep 17 00:00:00 2001 From: Nicolas Martin Date: Thu, 18 Jun 2009 22:19:04 +0200 Subject: [PATCH 04/12] Fixed typo in commit id 5938421e25d0da8b95908925611ebc445977a3dd - backend/pixma_mp150.c: fixed MX320 declaration. --- ChangeLog | 4 ++++ backend/pixma_mp150.c | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 8aaa7b01e..247148d87 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2009-06-18 Nicolas Martin + * backend/pixma_mp150.c: + Fixed typo in pixma backend for MX320 declaration. + 2009-06-17 m. allan noah * backend/canon_dr.[ch], backend/canon_dr-cmd.h: backend v30 - add fine cal support for machines with internal buffer (2050/2080) diff --git a/backend/pixma_mp150.c b/backend/pixma_mp150.c index 064f3e95e..f819dfafa 100644 --- a/backend/pixma_mp150.c +++ b/backend/pixma_mp150.c @@ -1441,7 +1441,7 @@ const pixma_config_t pixma_mp150_devices[] = { DEVICE ("Canon PIXMA MP190", "MP190", MP190_PID, 600, 638, 877, PIXMA_CAP_CIS), /* PIXMA 2009 vintage */ - DEVICE ("Canon PIXMA MX320", "MX320", MX330_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), + DEVICE ("Canon PIXMA MX320", "MX320", MX320_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), DEVICE ("Canon PIXMA MX330", "MX330", MX330_PID, 1200, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADF), DEVICE ("Canon PIXMA MX860", "MX860", MX860_PID, 2400, 638, 1050, PIXMA_CAP_CIS | PIXMA_CAP_ADFDUP), From 098f576ab94ddfd2ba4ddc652e3bccc3f1bf0e23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=E9phane=20Voltz?= Date: Sat, 20 Jun 2009 07:53:37 +0200 Subject: [PATCH 05/12] revert f3/f4 register assignement change --- backend/lexmark_low.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/lexmark_low.c b/backend/lexmark_low.c index 2c8a8888a..adb33938f 100644 --- a/backend/lexmark_low.c +++ b/backend/lexmark_low.c @@ -519,8 +519,8 @@ sanei_lexmark_low_init (Lexmark_Device * dev) dev->shadow_regs[0xc9] = 0x3b; dev->shadow_regs[0xed] = 0xc2; dev->shadow_regs[0xee] = 0x02; - dev->shadow_regs[0xf5] = 0xf8; - dev->shadow_regs[0xf6] = 0x7f; + dev->shadow_regs[0xf3] = 0xf8; + dev->shadow_regs[0xf4] = 0x7f; status = SANE_STATUS_GOOD; break; case X1100_2C_SENSOR: @@ -1124,8 +1124,8 @@ sanei_lexmark_low_open_device (Lexmark_Device * dev) shadow_regs[0xb0] = 0x2c; shadow_regs[0x10] = 0x97; shadow_regs[0x10] = 0x87; - shadow_regs[0xf4] = 0xf8; - shadow_regs[0xf5] = 0x7f; + shadow_regs[0xf3] = 0xf8; + shadow_regs[0xf4] = 0x7f; #else result = sanei_usb_open (dev->sane.name, &(dev->devnum)); #endif From 7c187f2b1b162f6a3900b05c95a838c6c6e87759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=E9phane=20Voltz?= Date: Sat, 20 Jun 2009 07:59:23 +0200 Subject: [PATCH 06/12] clean up f3/f4 registers assignement --- backend/lexmark_low.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/backend/lexmark_low.c b/backend/lexmark_low.c index adb33938f..be3a137b4 100644 --- a/backend/lexmark_low.c +++ b/backend/lexmark_low.c @@ -477,6 +477,9 @@ sanei_lexmark_low_init (Lexmark_Device * dev) } /* set up per model constant values */ + dev->shadow_regs[0xf3] = 0xf8; + dev->shadow_regs[0xf4] = 0x7f; + switch (dev->model.sensor_type) { case X1100_B2_SENSOR: @@ -519,8 +522,6 @@ sanei_lexmark_low_init (Lexmark_Device * dev) dev->shadow_regs[0xc9] = 0x3b; dev->shadow_regs[0xed] = 0xc2; dev->shadow_regs[0xee] = 0x02; - dev->shadow_regs[0xf3] = 0xf8; - dev->shadow_regs[0xf4] = 0x7f; status = SANE_STATUS_GOOD; break; case X1100_2C_SENSOR: @@ -604,8 +605,6 @@ sanei_lexmark_low_init (Lexmark_Device * dev) dev->shadow_regs[0xca] = 0x0a; dev->shadow_regs[0xe2] = 0xf8; dev->shadow_regs[0xe3] = 0x2a; - dev->shadow_regs[0xf3] = 0xf8; - dev->shadow_regs[0xf4] = 0x7f; status = SANE_STATUS_GOOD; break; case X1200_USB2_SENSOR: @@ -652,8 +651,6 @@ sanei_lexmark_low_init (Lexmark_Device * dev) dev->shadow_regs[0xca] = 0x0a; dev->shadow_regs[0xe2] = 0xf8; dev->shadow_regs[0xe3] = 0x2a; - dev->shadow_regs[0xf3] = 0xf8; - dev->shadow_regs[0xf4] = 0x7f; status = SANE_STATUS_GOOD; break; case A920_SENSOR: @@ -702,8 +699,6 @@ sanei_lexmark_low_init (Lexmark_Device * dev) dev->shadow_regs[0xc2] = 0x80; dev->shadow_regs[0xc4] = 0x20; dev->shadow_regs[0xc8] = 0x04; - dev->shadow_regs[0xf3] = 0xf8; - dev->shadow_regs[0xf4] = 0x7f; status = SANE_STATUS_GOOD; break; case X1200_SENSOR: @@ -2341,8 +2336,6 @@ sanei_lexmark_low_find_start_line (Lexmark_Device * dev) dev->shadow_regs[0x92] = 0x20; dev->shadow_regs[0xea] = 0x00; dev->shadow_regs[0xeb] = 0x00; - dev->shadow_regs[0xf3] = 0xf8; - dev->shadow_regs[0xf4] = 0x7f; break; case A920_SENSOR: dev->shadow_regs[0x2c] = 0x0d; From 7358951e0b045e56b4a99294441888252d444af6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=E9phane=20Voltz?= Date: Sat, 20 Jun 2009 08:03:23 +0200 Subject: [PATCH 07/12] chnagelog for lexmark_low.c fixes --- ChangeLog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index 247148d87..b05c8beca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2009-06-17 Stéphane Voltz + * backend/lexmark_low.c: f3/f4 registers assignement cleanup + 2009-06-18 Nicolas Martin * backend/pixma_mp150.c: Fixed typo in pixma backend for MX320 declaration. From 0e7b03252517a4e83986dc21631271ab84246971 Mon Sep 17 00:00:00 2001 From: Nicolas Martin Date: Sat, 20 Jun 2009 15:05:57 +0200 Subject: [PATCH 08/12] Add Canon imageCLASS D480 support to the pixma backend. - backend/pixma_imageclass.c: new model imageCLASS D480 declaration. - doc/descriptions/pixma.desc and doc/sane-pixma.man: documentation update. --- ChangeLog | 4 ++++ backend/pixma_imageclass.c | 9 ++++----- doc/descriptions/pixma.desc | 6 ++++++ doc/sane-pixma.man | 2 +- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index b05c8beca..596350efe 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2009-06-20 Nicolas Martin + * backend/pixma_imageclass.c, doc/descriptions/pixma.desc, doc/sane-pixma.man: + Added Canon imageCLASS D480 support to the pixma backend. + 2009-06-17 Stéphane Voltz * backend/lexmark_low.c: f3/f4 registers assignement cleanup diff --git a/backend/pixma_imageclass.c b/backend/pixma_imageclass.c index dc179481f..3ead873d6 100644 --- a/backend/pixma_imageclass.c +++ b/backend/pixma_imageclass.c @@ -71,17 +71,17 @@ #define MF4100_PID 0x26a3 #define MF4600_PID 0x26b0 #define MF4010_PID 0x26b4 +#define D480_PID 0x26ed /* the following are all untested */ #define MF5630_PID 0x264e #define MF5650_PID 0x264f #define MF8100_PID 0x2659 -#define MF5730_PID 0x265d -#define MF5750_PID 0x265e #define MF3110_PID 0x2660 #define MF3200_PID 0x2684 #define MF6500_PID 0x2686 + enum iclass_state_t { state_idle, @@ -667,16 +667,15 @@ static const pixma_scan_ops_t pixma_iclass_ops = { const pixma_config_t pixma_iclass_devices[] = { DEV ("Canon imageCLASS MF4270", "MF4270", MF4200_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF4150", "MF4100", MF4100_PID, 600, 640, 877, PIXMA_CAP_ADF), + DEV ("Canon imageCLASS MF4690", "MF4690", MF4600_PID, 600, 640, 877, PIXMA_CAP_ADF), + DEV ("Canon imageCLASS D480", "D480", D480_PID, 600, 640, 877, PIXMA_CAP_ADF), /* FIXME: the following capabilities all need updating/verifying */ DEV ("Canon imageCLASS MF5630", "MF5630", MF5630_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon laserBase MF5650", "MF5650", MF5650_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF8170c", "MF8170c", MF8100_PID, 600, 640, 877, PIXMA_CAP_ADF), - DEV ("Canon imageCLASS MF5730", "MF5730", MF5730_PID, 600, 640, 877, PIXMA_CAP_ADF), - DEV ("Canon imageCLASS MF5750", "MF5750", MF5750_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF3110", "MF3110", MF3110_PID, 600, 640, 877, 0), DEV ("Canon imageCLASS MF3240", "MF3240", MF3200_PID, 600, 640, 877, 0), DEV ("Canon imageClass MF6500", "MF6500", MF6500_PID, 600, 640, 877, PIXMA_CAP_ADF), - DEV ("Canon imageCLASS MF4690", "MF4690", MF4600_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF4010", "MF4010", MF4010_PID, 600, 640, 877, 0), DEV (NULL, NULL, 0, 0, 0, 0, 0) }; diff --git a/doc/descriptions/pixma.desc b/doc/descriptions/pixma.desc index 5c343a042..7c45604f7 100644 --- a/doc/descriptions/pixma.desc +++ b/doc/descriptions/pixma.desc @@ -297,6 +297,12 @@ :status :good :comment "All resolutions supported (up to 600DPI)" +:model "imageCLASS D480" +:interface "USB" +:usbid "0x04a9" "0x26ed" +:status :good +:comment "All resolutions supported (up to 600DPI)" + :model "imageCLASS MF5630" :interface "USB" :usbid "0x04a9" "0x264e" diff --git a/doc/sane-pixma.man b/doc/sane-pixma.man index 0481159f8..8acb349db 100644 --- a/doc/sane-pixma.man +++ b/doc/sane-pixma.man @@ -30,7 +30,7 @@ MultiPASS MP700, MP730, PIXMA MP750 (no grayscale) .br ImageCLASS MF4010, MF4018, MF4120, MF4122, MF4140, MF4150 .br -ImageCLASS MF4270, MF5770 +ImageCLASS MF4270, MF5770, D480 .RE .PP The following models are not well tested and/or the scanner sometimes hangs From e46c5200088871b008e1abe59749ef4564df3641 Mon Sep 17 00:00:00 2001 From: Mattias Ellert Date: Sun, 21 Jun 2009 06:46:44 +0200 Subject: [PATCH 09/12] Updated Swedish translations --- ChangeLog | 3 + po/sane-backends.sv.po | 2427 ++++++++++++++++++++-------------------- 2 files changed, 1214 insertions(+), 1216 deletions(-) diff --git a/ChangeLog b/ChangeLog index 596350efe..472a7ac9e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,6 @@ +2009-06-20 Mattias Ellert + * po/sane-backends.sv.po: Updated Swedish translations. + 2009-06-20 Nicolas Martin * backend/pixma_imageclass.c, doc/descriptions/pixma.desc, doc/sane-pixma.man: Added Canon imageCLASS D480 support to the pixma backend. diff --git a/po/sane-backends.sv.po b/po/sane-backends.sv.po index 44ad59194..bc4d6ad54 100644 --- a/po/sane-backends.sv.po +++ b/po/sane-backends.sv.po @@ -11,56 +11,56 @@ msgid "" msgstr "" "Project-Id-Version: sane-backends 1.0.18\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-29 21:03-0400\n" -"PO-Revision-Date: 2008-05-29 21:07+0200\n" +"POT-Creation-Date: 2009-06-21 06:29+0200\n" +"PO-Revision-Date: 2009-06-21 06:34+0200\n" "Last-Translator: Mattias Ellert \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: .tmp/artec_eplus48u.c:154 .tmp/canon-sane.c:703 .tmp/canon-sane.c:1060 +#: .tmp/artec_eplus48u.c:154 .tmp/canon.c:139 .tmp/canon.c:150 +#: .tmp/canon.c:156 .tmp/canon-sane.c:703 .tmp/canon-sane.c:1060 #: .tmp/canon-sane.c:1269 .tmp/canon-sane.c:1302 .tmp/canon-sane.c:1398 -#: .tmp/canon-sane.c:1623 .tmp/canon.c:140 .tmp/canon.c:151 -#: .tmp/canon.c:157 .tmp/hp-option.c:2926 .tmp/hp3900_sane.c:381 -#: .tmp/hp3900_sane.c:1038 .tmp/ma1509.c:101 .tmp/mustek.c:129 -#: .tmp/mustek.c:134 .tmp/mustek_usb.c:270 .tmp/mustek_usb2.c:109 -#: .tmp/saneopts.h:456 .tmp/sceptre.h:289 .tmp/sm3840.c:82 -#: .tmp/sm3840.c:339 .tmp/snapscan-options.c:79 .tmp/umax.c:186 +#: .tmp/canon-sane.c:1623 .tmp/hp3900_sane.c:381 .tmp/hp3900_sane.c:1038 +#: .tmp/hp-option.c:2927 .tmp/ma1509.c:101 .tmp/mustek.c:129 +#: .tmp/mustek.c:134 .tmp/mustek_usb2.c:109 .tmp/mustek_usb.c:270 +#: .tmp/saneopts.h:456 .tmp/sceptre.h:288 .tmp/sm3840.c:82 +#: .tmp/sm3840.c:339 .tmp/snapscan-options.c:79 .tmp/umax.c:185 #: .tmp/umax_pp.c:138 #, no-c-format msgid "Lineart" msgstr "Streckteckning" -#: .tmp/artec_eplus48u.c:155 .tmp/hp-option.c:2928 .tmp/leo.h:261 -#: .tmp/teco1.h:292 .tmp/teco3.h:295 .tmp/umax_pp.c:138 +#: .tmp/artec_eplus48u.c:155 .tmp/hp-option.c:2929 .tmp/leo.h:260 +#: .tmp/teco1.h:291 .tmp/teco3.h:294 .tmp/umax_pp.c:138 #, no-c-format msgid "Grayscale" msgstr "GrÃ¥skala" -#: .tmp/artec_eplus48u.c:156 .tmp/canon-sane.c:731 .tmp/canon-sane.c:939 -#: .tmp/canon-sane.c:1075 .tmp/canon-sane.c:1317 .tmp/canon-sane.c:1635 -#: .tmp/canon-sane.c:1740 .tmp/canon-sane.c:2057 .tmp/canon.c:141 -#: .tmp/canon.c:146 .tmp/canon.c:151 .tmp/canon.c:157 .tmp/epson.c:490 -#: .tmp/epson2.c:201 .tmp/hp-option.c:2929 .tmp/hp3900_sane.c:381 -#: .tmp/hp3900_sane.c:1034 .tmp/hp5590.c:87 .tmp/leo.h:262 -#: .tmp/ma1509.c:101 .tmp/mustek.c:130 .tmp/mustek.c:134 +#: .tmp/artec_eplus48u.c:156 .tmp/canon.c:140 .tmp/canon.c:145 +#: .tmp/canon.c:150 .tmp/canon.c:156 .tmp/canon-sane.c:731 +#: .tmp/canon-sane.c:939 .tmp/canon-sane.c:1075 .tmp/canon-sane.c:1317 +#: .tmp/canon-sane.c:1635 .tmp/canon-sane.c:1740 .tmp/canon-sane.c:2057 +#: .tmp/epson2.c:94 .tmp/epson.c:486 .tmp/hp3900_sane.c:381 +#: .tmp/hp3900_sane.c:1034 .tmp/hp5590.c:88 .tmp/hp-option.c:2930 +#: .tmp/leo.h:261 .tmp/ma1509.c:101 .tmp/mustek.c:130 .tmp/mustek.c:134 #: .tmp/mustek_usb.c:268 .tmp/pixma.c:644 .tmp/pixma_sane_options.c:70 -#: .tmp/saneopts.h:454 .tmp/sceptre.h:292 .tmp/sm3840.c:81 -#: .tmp/snapscan-options.c:76 .tmp/teco1.h:293 .tmp/teco3.h:296 -#: .tmp/test.c:126 .tmp/umax.c:191 .tmp/umax_pp.c:138 +#: .tmp/saneopts.h:454 .tmp/sceptre.h:291 .tmp/sm3840.c:81 +#: .tmp/snapscan-options.c:76 .tmp/teco1.h:292 .tmp/teco3.h:295 +#: .tmp/test.c:126 .tmp/umax.c:190 .tmp/umax_pp.c:138 #, no-c-format msgid "Color" msgstr "Färg" -#: .tmp/artec_eplus48u.c:2805 .tmp/canon.c:1482 .tmp/genesys.c:5002 -#: .tmp/gt68xx.c:667 .tmp/hp-option.c:2952 .tmp/leo.c:871 -#: .tmp/ma1509.c:597 .tmp/matsushita.c:1189 .tmp/microtek2.h:601 -#: .tmp/mustek.c:4407 .tmp/mustek_usb.c:353 .tmp/mustek_usb2.c:431 +#: .tmp/artec_eplus48u.c:2805 .tmp/canon.c:1483 .tmp/genesys.c:5002 +#: .tmp/gt68xx.c:667 .tmp/hp-option.c:2953 .tmp/leo.c:871 +#: .tmp/ma1509.c:597 .tmp/matsushita.c:1189 .tmp/microtek2.h:600 +#: .tmp/mustek.c:4407 .tmp/mustek_usb2.c:431 .tmp/mustek_usb.c:353 #: .tmp/niash.c:756 .tmp/plustek.c:853 .tmp/plustek_pp.c:792 #: .tmp/saneopts.h:158 .tmp/sceptre.c:750 .tmp/snapscan-options.c:561 #: .tmp/stv680.c:1067 .tmp/teco1.c:1143 .tmp/teco2.c:1962 .tmp/teco3.c:968 -#: .tmp/u12.c:592 .tmp/umax.c:5227 .tmp/umax_pp.c:627 +#: .tmp/u12.c:592 .tmp/umax.c:5226 .tmp/umax_pp.c:626 #, no-c-format msgid "Enhancement" msgstr "Förbättring" @@ -75,20 +75,20 @@ msgstr "Standardvärden" msgid "Set default values for enhancement controls." msgstr "Använd standardvärden för förbättringsinställningar." -#: .tmp/artec_eplus48u.c:2884 .tmp/epson.c:3288 .tmp/epson2.c:2149 -#: .tmp/genesys.c:4951 .tmp/gt68xx.c:698 .tmp/hp-option.c:3296 -#: .tmp/hp3500.c:976 .tmp/leo.c:823 .tmp/lexmark.c:214 .tmp/ma1509.c:549 -#: .tmp/matsushita.c:1135 .tmp/microtek2.h:600 .tmp/mustek.c:4359 -#: .tmp/mustek_usb.c:305 .tmp/mustek_usb2.c:465 +#: .tmp/artec_eplus48u.c:2884 .tmp/epson2.c:1323 .tmp/epson.c:3284 +#: .tmp/genesys.c:4951 .tmp/gt68xx.c:698 .tmp/hp3500.c:975 +#: .tmp/hp-option.c:3297 .tmp/leo.c:823 .tmp/lexmark.c:189 +#: .tmp/ma1509.c:549 .tmp/matsushita.c:1135 .tmp/microtek2.h:599 +#: .tmp/mustek.c:4359 .tmp/mustek_usb2.c:465 .tmp/mustek_usb.c:305 #: .tmp/pixma_sane_options.c:144 .tmp/plustek.c:807 .tmp/plustek_pp.c:746 #: .tmp/saneopts.h:157 .tmp/sceptre.c:702 .tmp/snapscan-options.c:494 #: .tmp/teco1.c:1095 .tmp/teco2.c:1914 .tmp/teco3.c:920 .tmp/test.c:646 -#: .tmp/u12.c:546 .tmp/umax.c:5177 .tmp/umax_pp.c:578 +#: .tmp/u12.c:546 .tmp/umax.c:5176 .tmp/umax_pp.c:577 #, no-c-format msgid "Geometry" msgstr "Geometri" -#: .tmp/artec_eplus48u.c:2932 .tmp/canon.c:1600 +#: .tmp/artec_eplus48u.c:2932 .tmp/canon.c:1601 #, no-c-format msgid "Calibration" msgstr "Kalibrering" @@ -149,496 +149,6 @@ msgid "" "Duplex scan provide a scan of the front and back side of the document" msgstr "Dubbelsidig inläsning läser in dokumentets framsida och baksida" -#: .tmp/canon-sane.c:674 .tmp/canon.c:163 -#, no-c-format -msgid "Correction according to transparency ratio" -msgstr "Korrigering beroende pÃ¥ genomlysningskvot" - -#: .tmp/canon-sane.c:680 .tmp/canon.c:162 -#, no-c-format -msgid "Correction according to film type" -msgstr "Korrigering beroende pÃ¥ filmtyp" - -#: .tmp/canon-sane.c:704 .tmp/canon-sane.c:1061 .tmp/canon-sane.c:1270 -#: .tmp/canon-sane.c:1307 .tmp/canon.c:140 .tmp/hp-option.c:2927 -#: .tmp/mustek.c:129 .tmp/plustek_pp.c:182 .tmp/plustek_pp.c:191 -#: .tmp/sceptre.h:290 .tmp/sm3840.c:82 .tmp/sm3840.c:337 -#: .tmp/snapscan-options.c:77 .tmp/umax.c:187 -#, no-c-format -msgid "Halftone" -msgstr "Raster" - -#: .tmp/canon-sane.c:732 .tmp/canon-sane.c:940 .tmp/canon-sane.c:1076 -#: .tmp/canon-sane.c:1318 .tmp/canon-sane.c:1487 .tmp/canon-sane.c:1636 -#: .tmp/canon.c:152 -#, no-c-format -msgid "Fine color" -msgstr "Fin färg" - -#: .tmp/canon-sane.c:776 .tmp/canon.c:168 -#, no-c-format -msgid "Negatives" -msgstr "Negativ" - -#: .tmp/canon-sane.c:937 .tmp/canon-sane.c:1069 .tmp/canon-sane.c:1312 -#: .tmp/canon-sane.c:1633 .tmp/canon-sane.c:2070 .tmp/canon.c:140 -#: .tmp/canon.c:151 .tmp/canon.c:157 .tmp/canon.c:566 .tmp/epson.c:489 -#: .tmp/epson2.c:200 .tmp/hp3900_sane.c:381 .tmp/hp3900_sane.c:1036 -#: .tmp/ma1509.c:101 .tmp/mustek.c:129 .tmp/mustek.c:134 -#: .tmp/mustek_usb.c:269 .tmp/pixma.c:647 .tmp/saneopts.h:455 -#: .tmp/sceptre.h:291 .tmp/sm3840.c:81 .tmp/sm3840.c:335 -#: .tmp/snapscan-options.c:78 .tmp/test.c:126 .tmp/umax.c:188 -#, no-c-format -msgid "Gray" -msgstr "GrÃ¥" - -#: .tmp/canon-sane.c:1323 .tmp/canon.c:146 -#, no-c-format -msgid "Raw" -msgstr "RÃ¥" - -#: .tmp/canon.c:161 -#, no-c-format -msgid "No transparency correction" -msgstr "Ingen genomlysningskorrigering" - -#: .tmp/canon.c:168 -#, no-c-format -msgid "Slides" -msgstr "Diapositiv" - -#: .tmp/canon.c:178 .tmp/matsushita.c:178 -#, no-c-format -msgid "Automatic" -msgstr "Automatisk" - -#: .tmp/canon.c:178 -#, no-c-format -msgid "Normal speed" -msgstr "Normal hastighet" - -#: .tmp/canon.c:179 -#, no-c-format -msgid "1/2 normal speed" -msgstr "1/2 av normal hastighet" - -#: .tmp/canon.c:179 -#, no-c-format -msgid "1/3 normal speed" -msgstr "1/3 av normal hastighet" - -#: .tmp/canon.c:362 -#, no-c-format -msgid "rounded parameter" -msgstr "avrundad parameter" - -#: .tmp/canon.c:365 .tmp/canon.c:381 .tmp/canon.c:416 .tmp/canon.c:466 -#: .tmp/canon.c:484 .tmp/canon.c:527 -#, no-c-format -msgid "unknown" -msgstr "okänd" - -#: .tmp/canon.c:375 -#, no-c-format -msgid "ADF jam" -msgstr "stopp i den automatiska dokumentmataren" - -#: .tmp/canon.c:378 -#, no-c-format -msgid "ADF cover open" -msgstr "automatiska dokumentmatarens lock är öppet" - -#: .tmp/canon.c:391 -#, no-c-format -msgid "lamp failure" -msgstr "lampfel" - -#: .tmp/canon.c:394 -#, no-c-format -msgid "scan head positioning error" -msgstr "inläsningshuvudspositioneringsfel" - -#: .tmp/canon.c:397 -#, no-c-format -msgid "CPU check error" -msgstr "CPU-kontrollfel" - -#: .tmp/canon.c:400 -#, no-c-format -msgid "RAM check error" -msgstr "RAM-kontrollfel" - -#: .tmp/canon.c:403 -#, no-c-format -msgid "ROM check error" -msgstr "ROM-kontrollfel" - -#: .tmp/canon.c:406 -#, no-c-format -msgid "hardware check error" -msgstr "hÃ¥rdvarukontrollfel" - -#: .tmp/canon.c:409 -#, no-c-format -msgid "transparency unit lamp failure" -msgstr "genomlysningsenhetslampfel" - -#: .tmp/canon.c:412 -#, no-c-format -msgid "transparency unit scan head positioning failure" -msgstr "genomlysningsenhetsinläsningshuvudspositioneringsfel" - -#: .tmp/canon.c:426 -#, no-c-format -msgid "parameter list length error" -msgstr "parameterlistlängdsfel" - -#: .tmp/canon.c:430 -#, no-c-format -msgid "invalid command operation code" -msgstr "ogiltig kommandooperationskod" - -#: .tmp/canon.c:434 -#, no-c-format -msgid "invalid field in CDB" -msgstr "ogiltigt fält i CDB" - -#: .tmp/canon.c:438 -#, no-c-format -msgid "unsupported LUN" -msgstr "ostött LUN" - -#: .tmp/canon.c:442 -#, no-c-format -msgid "invalid field in parameter list" -msgstr "ogiltigt fält i parameterlista" - -#: .tmp/canon.c:446 -#, no-c-format -msgid "command sequence error" -msgstr "kommandosekvensfel" - -#: .tmp/canon.c:450 -#, no-c-format -msgid "too many windows specified" -msgstr "för mÃ¥nga fönster specificerade" - -#: .tmp/canon.c:454 -#, no-c-format -msgid "medium not present" -msgstr "media icke närvarande" - -#: .tmp/canon.c:458 -#, no-c-format -msgid "invalid bit IDENTIFY message" -msgstr "ogiltigt bit-IDENTIFY-meddelande" - -#: .tmp/canon.c:462 -#, no-c-format -msgid "option not connect" -msgstr "inställning inte anslut" - -#: .tmp/canon.c:476 -#, no-c-format -msgid "power on reset / bus device reset" -msgstr "pÃ¥slagningsÃ¥terställning / bussenhetsÃ¥terställning" - -#: .tmp/canon.c:480 -#, no-c-format -msgid "parameter changed by another initiator" -msgstr "parameter ändrad av en annan initiator" - -#: .tmp/canon.c:494 -#, no-c-format -msgid "no additional sense information" -msgstr "ingen ytterligare sense-information" - -#: .tmp/canon.c:498 -#, no-c-format -msgid "reselect failure" -msgstr "Ã¥tervalsfel" - -#: .tmp/canon.c:502 -#, no-c-format -msgid "SCSI parity error" -msgstr "SCSI-paritetsfel" - -#: .tmp/canon.c:506 -#, no-c-format -msgid "initiator detected error message received" -msgstr "intitator upptäckte mottaget felmeddelande" - -#: .tmp/canon.c:511 -#, no-c-format -msgid "invalid message error" -msgstr "ogiltigt meddelande-fel" - -#: .tmp/canon.c:515 -#, no-c-format -msgid "timeout error" -msgstr "timeoutfel" - -#: .tmp/canon.c:519 -#, no-c-format -msgid "transparency unit shading error" -msgstr "genomlysningsenhetsskuggningsfel" - -#: .tmp/canon.c:523 -#, no-c-format -msgid "lamp not stabilized" -msgstr "lampa ej stabiliserad" - -#: .tmp/canon.c:537 -#, no-c-format -msgid "problem not analyzed (unknown SCSI class)" -msgstr "problem ej analyserat (okänd SCSI-klass)" - -#: .tmp/canon.c:855 .tmp/canon.c:870 -#, no-c-format -msgid "film scanner" -msgstr "filmbildläsare" - -#: .tmp/canon.c:885 .tmp/canon.c:900 .tmp/canon.c:915 -#: .tmp/hp3900_sane.c:1681 .tmp/plustek.c:1334 .tmp/plustek_pp.c:1014 -#: .tmp/sceptre.c:593 .tmp/teco2.c:1836 .tmp/u12.c:851 -#, no-c-format -msgid "flatbed scanner" -msgstr "flatbäddsbildläsare" - -#: .tmp/canon.c:1133 .tmp/leo.c:781 .tmp/pixma_sane_options.c:40 -#: .tmp/saneopts.h:165 -#, no-c-format -msgid "Scan mode" -msgstr "Bildläsarläge" - -#: .tmp/canon.c:1171 .tmp/epson.c:3376 .tmp/epson2.c:2223 -#, no-c-format -msgid "Film type" -msgstr "Filmtyp" - -#: .tmp/canon.c:1172 -#, no-c-format -msgid "Selects the film type, i.e. negatives or slides" -msgstr "Väljer filmtyp, t.ex. negativ eller diapositiv" - -#: .tmp/canon.c:1184 -#, no-c-format -msgid "Negative film type" -msgstr "Negativfilmtyp" - -#: .tmp/canon.c:1185 -#, no-c-format -msgid "Selects the negative film type" -msgstr "Väljer negativfilmtyp" - -#: .tmp/canon.c:1209 .tmp/saneopts.h:173 -#, no-c-format -msgid "Scan resolution" -msgstr "Upplösning" - -#: .tmp/canon.c:1224 -#, no-c-format -msgid "Hardware resolution" -msgstr "HÃ¥rdvaruupplösning" - -#: .tmp/canon.c:1225 -#, no-c-format -msgid "Use only hardware resolutions" -msgstr "Använd endast hÃ¥rdvaruupplösningar" - -#: .tmp/canon.c:1306 -#, no-c-format -msgid "Focus" -msgstr "Fokus" - -#: .tmp/canon.c:1316 -#, no-c-format -msgid "Auto focus" -msgstr "Autofokus" - -#: .tmp/canon.c:1317 -#, no-c-format -msgid "Enable/disable auto focus" -msgstr "Aktivera/avaktivera autofokus" - -#: .tmp/canon.c:1324 -#, no-c-format -msgid "Auto focus only once" -msgstr "Autofokusera endast en gÃ¥ng" - -#: .tmp/canon.c:1325 -#, no-c-format -msgid "Do auto focus only once between ejects" -msgstr "Autofokusera endast en gÃ¥ng mellan utmatningar" - -#: .tmp/canon.c:1333 -#, no-c-format -msgid "Manual focus position" -msgstr "Manuell fokuseringspunkt" - -#: .tmp/canon.c:1334 -#, no-c-format -msgid "Set the optical system's focus position by hand (default: 128)." -msgstr "" -"Ställ in det optiska systemets fokuseringspunkt för hand (förval: 128)." - -#: .tmp/canon.c:1344 -#, no-c-format -msgid "Scan margins" -msgstr "Inläsningsmarginaler" - -#: .tmp/canon.c:1391 -#, no-c-format -msgid "Extra color adjustments" -msgstr "Extra färgjusteringar" - -#: .tmp/canon.c:1522 .tmp/epson.c:3195 .tmp/epson2.c:2103 -#, no-c-format -msgid "Mirror image" -msgstr "Spegla bild" - -#: .tmp/canon.c:1523 -#, no-c-format -msgid "Mirror the image horizontally" -msgstr "Spegla bilden vÃ¥grätt" - -#: .tmp/canon.c:1592 -#, no-c-format -msgid "Auto exposure" -msgstr "Automatisk exponeringstid" - -#: .tmp/canon.c:1593 -#, no-c-format -msgid "Enable/disable the auto exposure feature" -msgstr "Aktivera/avaktivera automatisk exponeringstid" - -#: .tmp/canon.c:1609 -#, no-c-format -msgid "Calibration now" -msgstr "Kalibrera nu" - -#: .tmp/canon.c:1610 -#, no-c-format -msgid "Execute calibration *now*" -msgstr "Genomför kalibrering *nu*" - -#: .tmp/canon.c:1620 -#, no-c-format -msgid "Self diagnosis" -msgstr "Självdiagnos" - -#: .tmp/canon.c:1621 -#, no-c-format -msgid "Perform scanner self diagnosis" -msgstr "Genomför bildläsarsjälvdiagnos" - -#: .tmp/canon.c:1632 -#, no-c-format -msgid "Reset scanner" -msgstr "Ã…terställ bildläsare" - -#: .tmp/canon.c:1633 -#, no-c-format -msgid "Reset the scanner" -msgstr "Ã…terställ bildläsaren" - -#: .tmp/canon.c:1643 -#, no-c-format -msgid "Medium handling" -msgstr "Mediahantering" - -#: .tmp/canon.c:1652 -#, no-c-format -msgid "Eject film after each scan" -msgstr "Mata ut film efter varje inläsning" - -#: .tmp/canon.c:1653 -#, no-c-format -msgid "Automatically eject the film from the device after each scan" -msgstr "Mata ut filmen frÃ¥n enheten efter varje inläsning automatiskt" - -#: .tmp/canon.c:1662 -#, no-c-format -msgid "Eject film before exit" -msgstr "Mata ut filmen före avslut" - -#: .tmp/canon.c:1663 -#, no-c-format -msgid "" -"Automatically eject the film from the device before exiting the program" -msgstr "Mata ut filmen frÃ¥n enheten automatiskt före programmet avslutas" - -#: .tmp/canon.c:1672 -#, no-c-format -msgid "Eject film now" -msgstr "Mata ut filmen nu" - -#: .tmp/canon.c:1673 -#, no-c-format -msgid "Eject the film *now*" -msgstr "Mata ut filmen *nu*" - -#: .tmp/canon.c:1682 -#, no-c-format -msgid "Document feeder extras" -msgstr "Dokumentmatarinställningar" - -#: .tmp/canon.c:1689 -#, no-c-format -msgid "Flatbed only" -msgstr "Endast flatbädd" - -#: .tmp/canon.c:1690 -#, no-c-format -msgid "Disable auto document feeder and use flatbed only" -msgstr "" -"Stäng av den automatiska dokumentmataren och använd endast flatbädden" - -#: .tmp/canon.c:1700 .tmp/canon.c:1710 -#, no-c-format -msgid "Transparency unit" -msgstr "Genomlysningsenhet" - -#: .tmp/canon.c:1711 -#, no-c-format -msgid "Switch on/off the transparency unit (FAU, film adapter unit)" -msgstr "SlÃ¥ pÃ¥/av genomlysningsenheten (filmadapterenheten)" - -#: .tmp/canon.c:1721 -#, no-c-format -msgid "Negative film" -msgstr "Negativ film" - -#: .tmp/canon.c:1722 -#, no-c-format -msgid "Positive or negative film" -msgstr "Positiv eller negativ film" - -#: .tmp/canon.c:1731 -#, no-c-format -msgid "Density control" -msgstr "Densitetsinställning" - -#: .tmp/canon.c:1732 -#, no-c-format -msgid "Set density control mode" -msgstr "Ställer in densitetsinställningsläge" - -#: .tmp/canon.c:1743 -#, no-c-format -msgid "Transparency ratio" -msgstr "Genomlysningskvot" - -#: .tmp/canon.c:1757 -#, no-c-format -msgid "Select film type" -msgstr "Välj filmtyp" - -#: .tmp/canon.c:1758 -#, no-c-format -msgid "Select the film type" -msgstr "Välj filmtyp" - #: .tmp/canon630u.c:158 #, no-c-format msgid "Calibrate Scanner" @@ -669,7 +179,7 @@ msgstr "Analog förstärkning" msgid "Increase or decrease the analog gain of the CCD array" msgstr "Öka eller minska CCD-sensorns analoga förstärkning" -#: .tmp/canon630u.c:346 .tmp/epson.h:68 .tmp/epson2.h:64 +#: .tmp/canon630u.c:346 .tmp/epson2.h:72 .tmp/epson.h:68 #, no-c-format msgid "Gamma Correction" msgstr "Gammakorrigering" @@ -679,456 +189,896 @@ msgstr "Gammakorrigering" msgid "Selects the gamma corrected transfer curve" msgstr "Väljer gammakorrigerad överföringskurva" -#: .tmp/epson.c:488 .tmp/epson2.c:199 +#: .tmp/canon.c:139 .tmp/canon-sane.c:704 .tmp/canon-sane.c:1061 +#: .tmp/canon-sane.c:1270 .tmp/canon-sane.c:1307 .tmp/hp-option.c:2928 +#: .tmp/mustek.c:129 .tmp/plustek_pp.c:182 .tmp/plustek_pp.c:191 +#: .tmp/sceptre.h:289 .tmp/sm3840.c:82 .tmp/sm3840.c:337 +#: .tmp/snapscan-options.c:77 .tmp/umax.c:186 +#, no-c-format +msgid "Halftone" +msgstr "Raster" + +#: .tmp/canon.c:139 .tmp/canon.c:150 .tmp/canon.c:156 .tmp/canon.c:567 +#: .tmp/canon-sane.c:937 .tmp/canon-sane.c:1069 .tmp/canon-sane.c:1312 +#: .tmp/canon-sane.c:1633 .tmp/canon-sane.c:2070 .tmp/epson2.c:93 +#: .tmp/epson.c:485 .tmp/hp3900_sane.c:381 .tmp/hp3900_sane.c:1036 +#: .tmp/ma1509.c:101 .tmp/mustek.c:129 .tmp/mustek.c:134 +#: .tmp/mustek_usb.c:269 .tmp/pixma.c:647 .tmp/saneopts.h:455 +#: .tmp/sceptre.h:290 .tmp/sm3840.c:81 .tmp/sm3840.c:335 +#: .tmp/snapscan-options.c:78 .tmp/test.c:126 .tmp/umax.c:187 +#, no-c-format +msgid "Gray" +msgstr "GrÃ¥" + +#: .tmp/canon.c:145 .tmp/canon-sane.c:1323 +#, no-c-format +msgid "Raw" +msgstr "RÃ¥" + +#: .tmp/canon.c:151 .tmp/canon-sane.c:732 .tmp/canon-sane.c:940 +#: .tmp/canon-sane.c:1076 .tmp/canon-sane.c:1318 .tmp/canon-sane.c:1487 +#: .tmp/canon-sane.c:1636 +#, no-c-format +msgid "Fine color" +msgstr "Fin färg" + +#: .tmp/canon.c:160 +#, no-c-format +msgid "No transparency correction" +msgstr "Ingen genomlysningskorrigering" + +#: .tmp/canon.c:161 .tmp/canon-sane.c:680 +#, no-c-format +msgid "Correction according to film type" +msgstr "Korrigering beroende pÃ¥ filmtyp" + +#: .tmp/canon.c:162 .tmp/canon-sane.c:674 +#, no-c-format +msgid "Correction according to transparency ratio" +msgstr "Korrigering beroende pÃ¥ genomlysningskvot" + +#: .tmp/canon.c:167 .tmp/canon-sane.c:776 +#, no-c-format +msgid "Negatives" +msgstr "Negativ" + +#: .tmp/canon.c:167 +#, no-c-format +msgid "Slides" +msgstr "Diapositiv" + +#: .tmp/canon.c:177 .tmp/matsushita.c:178 +#, no-c-format +msgid "Automatic" +msgstr "Automatisk" + +#: .tmp/canon.c:177 +#, no-c-format +msgid "Normal speed" +msgstr "Normal hastighet" + +#: .tmp/canon.c:178 +#, no-c-format +msgid "1/2 normal speed" +msgstr "1/2 av normal hastighet" + +#: .tmp/canon.c:178 +#, no-c-format +msgid "1/3 normal speed" +msgstr "1/3 av normal hastighet" + +#: .tmp/canon.c:363 +#, no-c-format +msgid "rounded parameter" +msgstr "avrundad parameter" + +#: .tmp/canon.c:366 .tmp/canon.c:382 .tmp/canon.c:417 .tmp/canon.c:467 +#: .tmp/canon.c:485 .tmp/canon.c:528 +#, no-c-format +msgid "unknown" +msgstr "okänd" + +#: .tmp/canon.c:376 +#, no-c-format +msgid "ADF jam" +msgstr "stopp i den automatiska dokumentmataren" + +#: .tmp/canon.c:379 +#, no-c-format +msgid "ADF cover open" +msgstr "automatiska dokumentmatarens lock är öppet" + +#: .tmp/canon.c:392 +#, no-c-format +msgid "lamp failure" +msgstr "lampfel" + +#: .tmp/canon.c:395 +#, no-c-format +msgid "scan head positioning error" +msgstr "inläsningshuvudspositioneringsfel" + +#: .tmp/canon.c:398 +#, no-c-format +msgid "CPU check error" +msgstr "CPU-kontrollfel" + +#: .tmp/canon.c:401 +#, no-c-format +msgid "RAM check error" +msgstr "RAM-kontrollfel" + +#: .tmp/canon.c:404 +#, no-c-format +msgid "ROM check error" +msgstr "ROM-kontrollfel" + +#: .tmp/canon.c:407 +#, no-c-format +msgid "hardware check error" +msgstr "hÃ¥rdvarukontrollfel" + +#: .tmp/canon.c:410 +#, no-c-format +msgid "transparency unit lamp failure" +msgstr "genomlysningsenhetslampfel" + +#: .tmp/canon.c:413 +#, no-c-format +msgid "transparency unit scan head positioning failure" +msgstr "genomlysningsenhetsinläsningshuvudspositioneringsfel" + +#: .tmp/canon.c:427 +#, no-c-format +msgid "parameter list length error" +msgstr "parameterlistlängdsfel" + +#: .tmp/canon.c:431 +#, no-c-format +msgid "invalid command operation code" +msgstr "ogiltig kommandooperationskod" + +#: .tmp/canon.c:435 +#, no-c-format +msgid "invalid field in CDB" +msgstr "ogiltigt fält i CDB" + +#: .tmp/canon.c:439 +#, no-c-format +msgid "unsupported LUN" +msgstr "ostött LUN" + +#: .tmp/canon.c:443 +#, no-c-format +msgid "invalid field in parameter list" +msgstr "ogiltigt fält i parameterlista" + +#: .tmp/canon.c:447 +#, no-c-format +msgid "command sequence error" +msgstr "kommandosekvensfel" + +#: .tmp/canon.c:451 +#, no-c-format +msgid "too many windows specified" +msgstr "för mÃ¥nga fönster specificerade" + +#: .tmp/canon.c:455 +#, no-c-format +msgid "medium not present" +msgstr "media icke närvarande" + +#: .tmp/canon.c:459 +#, no-c-format +msgid "invalid bit IDENTIFY message" +msgstr "ogiltigt bit-IDENTIFY-meddelande" + +#: .tmp/canon.c:463 +#, no-c-format +msgid "option not connect" +msgstr "inställning inte anslut" + +#: .tmp/canon.c:477 +#, no-c-format +msgid "power on reset / bus device reset" +msgstr "pÃ¥slagningsÃ¥terställning / bussenhetsÃ¥terställning" + +#: .tmp/canon.c:481 +#, no-c-format +msgid "parameter changed by another initiator" +msgstr "parameter ändrad av en annan initiator" + +#: .tmp/canon.c:495 +#, no-c-format +msgid "no additional sense information" +msgstr "ingen ytterligare sense-information" + +#: .tmp/canon.c:499 +#, no-c-format +msgid "reselect failure" +msgstr "Ã¥tervalsfel" + +#: .tmp/canon.c:503 +#, no-c-format +msgid "SCSI parity error" +msgstr "SCSI-paritetsfel" + +#: .tmp/canon.c:507 +#, no-c-format +msgid "initiator detected error message received" +msgstr "intitator upptäckte mottaget felmeddelande" + +#: .tmp/canon.c:512 +#, no-c-format +msgid "invalid message error" +msgstr "ogiltigt meddelande-fel" + +#: .tmp/canon.c:516 +#, no-c-format +msgid "timeout error" +msgstr "timeoutfel" + +#: .tmp/canon.c:520 +#, no-c-format +msgid "transparency unit shading error" +msgstr "genomlysningsenhetsskuggningsfel" + +#: .tmp/canon.c:524 +#, no-c-format +msgid "lamp not stabilized" +msgstr "lampa ej stabiliserad" + +#: .tmp/canon.c:538 +#, no-c-format +msgid "problem not analyzed (unknown SCSI class)" +msgstr "problem ej analyserat (okänd SCSI-klass)" + +#: .tmp/canon.c:856 .tmp/canon.c:871 +#, no-c-format +msgid "film scanner" +msgstr "filmbildläsare" + +#: .tmp/canon.c:886 .tmp/canon.c:901 .tmp/canon.c:916 +#: .tmp/hp3900_sane.c:1681 .tmp/plustek.c:1334 .tmp/plustek_pp.c:1014 +#: .tmp/sceptre.c:593 .tmp/teco2.c:1836 .tmp/u12.c:851 +#, no-c-format +msgid "flatbed scanner" +msgstr "flatbäddsbildläsare" + +#: .tmp/canon.c:1134 .tmp/leo.c:781 .tmp/pixma_sane_options.c:40 +#: .tmp/saneopts.h:165 +#, no-c-format +msgid "Scan mode" +msgstr "Bildläsarläge" + +#: .tmp/canon.c:1172 .tmp/epson2.c:1397 .tmp/epson.c:3372 +#, no-c-format +msgid "Film type" +msgstr "Filmtyp" + +#: .tmp/canon.c:1173 +#, no-c-format +msgid "Selects the film type, i.e. negatives or slides" +msgstr "Väljer filmtyp, t.ex. negativ eller diapositiv" + +#: .tmp/canon.c:1185 +#, no-c-format +msgid "Negative film type" +msgstr "Negativfilmtyp" + +#: .tmp/canon.c:1186 +#, no-c-format +msgid "Selects the negative film type" +msgstr "Väljer negativfilmtyp" + +#: .tmp/canon.c:1210 .tmp/saneopts.h:173 +#, no-c-format +msgid "Scan resolution" +msgstr "Upplösning" + +#: .tmp/canon.c:1225 +#, no-c-format +msgid "Hardware resolution" +msgstr "HÃ¥rdvaruupplösning" + +#: .tmp/canon.c:1226 +#, no-c-format +msgid "Use only hardware resolutions" +msgstr "Använd endast hÃ¥rdvaruupplösningar" + +#: .tmp/canon.c:1307 +#, no-c-format +msgid "Focus" +msgstr "Fokus" + +#: .tmp/canon.c:1317 +#, no-c-format +msgid "Auto focus" +msgstr "Autofokus" + +#: .tmp/canon.c:1318 +#, no-c-format +msgid "Enable/disable auto focus" +msgstr "Aktivera/avaktivera autofokus" + +#: .tmp/canon.c:1325 +#, no-c-format +msgid "Auto focus only once" +msgstr "Autofokusera endast en gÃ¥ng" + +#: .tmp/canon.c:1326 +#, no-c-format +msgid "Do auto focus only once between ejects" +msgstr "Autofokusera endast en gÃ¥ng mellan utmatningar" + +#: .tmp/canon.c:1334 +#, no-c-format +msgid "Manual focus position" +msgstr "Manuell fokuseringspunkt" + +#: .tmp/canon.c:1335 +#, no-c-format +msgid "Set the optical system's focus position by hand (default: 128)." +msgstr "" +"Ställ in det optiska systemets fokuseringspunkt för hand (förval: 128)." + +#: .tmp/canon.c:1345 +#, no-c-format +msgid "Scan margins" +msgstr "Inläsningsmarginaler" + +#: .tmp/canon.c:1392 +#, no-c-format +msgid "Extra color adjustments" +msgstr "Extra färgjusteringar" + +#: .tmp/canon.c:1523 .tmp/epson2.c:1287 .tmp/epson.c:3191 +#, no-c-format +msgid "Mirror image" +msgstr "Spegla bild" + +#: .tmp/canon.c:1524 +#, no-c-format +msgid "Mirror the image horizontally" +msgstr "Spegla bilden vÃ¥grätt" + +#: .tmp/canon.c:1593 +#, no-c-format +msgid "Auto exposure" +msgstr "Automatisk exponeringstid" + +#: .tmp/canon.c:1594 +#, no-c-format +msgid "Enable/disable the auto exposure feature" +msgstr "Aktivera/avaktivera automatisk exponeringstid" + +#: .tmp/canon.c:1610 +#, no-c-format +msgid "Calibration now" +msgstr "Kalibrera nu" + +#: .tmp/canon.c:1611 +#, no-c-format +msgid "Execute calibration *now*" +msgstr "Genomför kalibrering *nu*" + +#: .tmp/canon.c:1621 +#, no-c-format +msgid "Self diagnosis" +msgstr "Självdiagnos" + +#: .tmp/canon.c:1622 +#, no-c-format +msgid "Perform scanner self diagnosis" +msgstr "Genomför bildläsarsjälvdiagnos" + +#: .tmp/canon.c:1633 +#, no-c-format +msgid "Reset scanner" +msgstr "Ã…terställ bildläsare" + +#: .tmp/canon.c:1634 +#, no-c-format +msgid "Reset the scanner" +msgstr "Ã…terställ bildläsaren" + +#: .tmp/canon.c:1644 +#, no-c-format +msgid "Medium handling" +msgstr "Mediahantering" + +#: .tmp/canon.c:1653 +#, no-c-format +msgid "Eject film after each scan" +msgstr "Mata ut film efter varje inläsning" + +#: .tmp/canon.c:1654 +#, no-c-format +msgid "Automatically eject the film from the device after each scan" +msgstr "Mata ut filmen frÃ¥n enheten efter varje inläsning automatiskt" + +#: .tmp/canon.c:1663 +#, no-c-format +msgid "Eject film before exit" +msgstr "Mata ut filmen före avslut" + +#: .tmp/canon.c:1664 +#, no-c-format +msgid "" +"Automatically eject the film from the device before exiting the program" +msgstr "Mata ut filmen frÃ¥n enheten automatiskt före programmet avslutas" + +#: .tmp/canon.c:1673 +#, no-c-format +msgid "Eject film now" +msgstr "Mata ut filmen nu" + +#: .tmp/canon.c:1674 +#, no-c-format +msgid "Eject the film *now*" +msgstr "Mata ut filmen *nu*" + +#: .tmp/canon.c:1683 +#, no-c-format +msgid "Document feeder extras" +msgstr "Dokumentmatarinställningar" + +#: .tmp/canon.c:1690 +#, no-c-format +msgid "Flatbed only" +msgstr "Endast flatbädd" + +#: .tmp/canon.c:1691 +#, no-c-format +msgid "Disable auto document feeder and use flatbed only" +msgstr "" +"Stäng av den automatiska dokumentmataren och använd endast flatbädden" + +#: .tmp/canon.c:1701 .tmp/canon.c:1711 +#, no-c-format +msgid "Transparency unit" +msgstr "Genomlysningsenhet" + +#: .tmp/canon.c:1712 +#, no-c-format +msgid "Switch on/off the transparency unit (FAU, film adapter unit)" +msgstr "SlÃ¥ pÃ¥/av genomlysningsenheten (filmadapterenheten)" + +#: .tmp/canon.c:1722 +#, no-c-format +msgid "Negative film" +msgstr "Negativ film" + +#: .tmp/canon.c:1723 +#, no-c-format +msgid "Positive or negative film" +msgstr "Positiv eller negativ film" + +#: .tmp/canon.c:1732 +#, no-c-format +msgid "Density control" +msgstr "Densitetsinställning" + +#: .tmp/canon.c:1733 +#, no-c-format +msgid "Set density control mode" +msgstr "Ställer in densitetsinställningsläge" + +#: .tmp/canon.c:1744 +#, no-c-format +msgid "Transparency ratio" +msgstr "Genomlysningskvot" + +#: .tmp/canon.c:1758 +#, no-c-format +msgid "Select film type" +msgstr "Välj filmtyp" + +#: .tmp/canon.c:1759 +#, no-c-format +msgid "Select the film type" +msgstr "Välj filmtyp" + +#: .tmp/epson2.c:92 .tmp/epson.c:484 #, no-c-format msgid "Binary" msgstr "Binär" -#: .tmp/epson.c:495 .tmp/epson2.c:206 +#: .tmp/epson2.c:99 .tmp/epson.c:491 #, no-c-format msgid "Simplex" msgstr "Enkelsidigt" -#: .tmp/epson.c:496 .tmp/epson2.c:207 .tmp/matsushita.h:219 +#: .tmp/epson2.c:100 .tmp/epson.c:492 .tmp/matsushita.h:218 #, no-c-format msgid "Duplex" msgstr "Dubbelsidigt" -#: .tmp/epson.c:505 .tmp/epson2.c:213 .tmp/genesys.c:106 .tmp/gt68xx.c:146 +#: .tmp/epson2.c:106 .tmp/epson.c:501 .tmp/genesys.c:106 .tmp/gt68xx.c:146 #: .tmp/hp3900_sane.c:418 .tmp/hp3900_sane.c:427 .tmp/hp3900_sane.c:1017 -#: .tmp/hp5590.c:81 .tmp/ma1509.c:106 .tmp/mustek.c:152 .tmp/mustek.c:156 +#: .tmp/hp5590.c:82 .tmp/ma1509.c:106 .tmp/mustek.c:152 .tmp/mustek.c:156 #: .tmp/mustek.c:160 .tmp/pixma.c:652 .tmp/pixma_sane_options.c:85 -#: .tmp/snapscan-options.c:82 .tmp/test.c:191 .tmp/umax.c:182 +#: .tmp/snapscan-options.c:82 .tmp/test.c:191 .tmp/umax.c:181 #, no-c-format msgid "Flatbed" msgstr "Flatbädd" -#: .tmp/epson.c:506 .tmp/epson2.c:214 .tmp/pixma.c:669 +#: .tmp/epson2.c:107 .tmp/epson.c:502 .tmp/pixma.c:669 #, no-c-format msgid "Transparency Unit" msgstr "Genomlysningsenhet" -#: .tmp/epson.c:507 .tmp/epson2.c:215 .tmp/mustek.c:156 .tmp/pixma.c:657 -#: .tmp/test.c:191 .tmp/umax.c:184 +#: .tmp/epson2.c:108 .tmp/epson.c:503 .tmp/mustek.c:156 .tmp/pixma.c:657 +#: .tmp/test.c:191 .tmp/umax.c:183 #, no-c-format msgid "Automatic Document Feeder" msgstr "Automatisk dokumentmatare" -#: .tmp/epson.c:527 .tmp/epson2.c:235 +#: .tmp/epson2.c:124 .tmp/epson.c:523 #, no-c-format msgid "Positive Film" msgstr "Positiv film" -#: .tmp/epson.c:528 .tmp/epson2.c:236 +#: .tmp/epson2.c:125 .tmp/epson.c:524 #, no-c-format msgid "Negative Film" msgstr "Negativ film" -#: .tmp/epson.c:533 .tmp/epson2.c:245 +#: .tmp/epson2.c:126 +#, no-c-format +msgid "Positive Slide" +msgstr "Diapositiv" + +#: .tmp/epson2.c:127 +#, no-c-format +msgid "Negative Slide" +msgstr "Dianegativ" + +#: .tmp/epson2.c:132 .tmp/epson.c:529 #, no-c-format msgid "Focus on glass" msgstr "Fokusera pÃ¥ glaset" -#: .tmp/epson.c:534 .tmp/epson2.c:246 +#: .tmp/epson2.c:133 .tmp/epson.c:530 #, no-c-format msgid "Focus 2.5mm above glass" msgstr "Fokusera 2,5 mm ovanför glaset" -#: .tmp/epson.c:560 .tmp/epson.c:568 .tmp/epson.c:580 .tmp/epson.c:602 -#: .tmp/epson2.c:268 .tmp/epson2.c:276 .tmp/epson2.c:288 .tmp/epson2.c:310 +#: .tmp/epson2.c:155 .tmp/epson2.c:163 .tmp/epson2.c:175 .tmp/epson2.c:190 +#: .tmp/epson.c:556 .tmp/epson.c:564 .tmp/epson.c:576 .tmp/epson.c:598 #: .tmp/leo.c:109 .tmp/matsushita.c:138 .tmp/matsushita.c:159 #: .tmp/matsushita.c:191 .tmp/matsushita.c:213 .tmp/snapscan-options.c:87 #, no-c-format msgid "None" msgstr "Inget" -#: .tmp/epson.c:561 .tmp/epson.c:569 .tmp/epson.c:581 .tmp/epson2.c:269 -#: .tmp/epson2.c:277 .tmp/epson2.c:289 +#: .tmp/epson2.c:156 .tmp/epson2.c:164 .tmp/epson2.c:176 .tmp/epson.c:557 +#: .tmp/epson.c:565 .tmp/epson.c:577 #, no-c-format msgid "Halftone A (Hard Tone)" msgstr "Raster A (hÃ¥rt)" -#: .tmp/epson.c:562 .tmp/epson.c:570 .tmp/epson.c:582 .tmp/epson2.c:270 -#: .tmp/epson2.c:278 .tmp/epson2.c:290 +#: .tmp/epson2.c:157 .tmp/epson2.c:165 .tmp/epson2.c:177 .tmp/epson.c:558 +#: .tmp/epson.c:566 .tmp/epson.c:578 #, no-c-format msgid "Halftone B (Soft Tone)" msgstr "Raster B (mjukt)" -#: .tmp/epson.c:563 .tmp/epson.c:571 .tmp/epson.c:583 .tmp/epson2.c:271 -#: .tmp/epson2.c:279 .tmp/epson2.c:291 +#: .tmp/epson2.c:158 .tmp/epson2.c:166 .tmp/epson2.c:178 .tmp/epson.c:559 +#: .tmp/epson.c:567 .tmp/epson.c:579 #, no-c-format msgid "Halftone C (Net Screen)" msgstr "Raster C (nätskärm)" -#: .tmp/epson.c:572 .tmp/epson.c:584 .tmp/epson2.c:280 .tmp/epson2.c:292 +#: .tmp/epson2.c:167 .tmp/epson2.c:179 .tmp/epson.c:568 .tmp/epson.c:580 #, no-c-format msgid "Dither A (4x4 Bayer)" msgstr "Gitter A (4x4 Bayer)" -#: .tmp/epson.c:573 .tmp/epson.c:585 .tmp/epson2.c:281 .tmp/epson2.c:293 +#: .tmp/epson2.c:168 .tmp/epson2.c:180 .tmp/epson.c:569 .tmp/epson.c:581 #, no-c-format msgid "Dither B (4x4 Spiral)" msgstr "Gitter B (4x4 spiral)" -#: .tmp/epson.c:574 .tmp/epson.c:586 .tmp/epson2.c:282 .tmp/epson2.c:294 +#: .tmp/epson2.c:169 .tmp/epson2.c:181 .tmp/epson.c:570 .tmp/epson.c:582 #, no-c-format msgid "Dither C (4x4 Net Screen)" msgstr "Gitter C (4x4 nätskärm)" -#: .tmp/epson.c:575 .tmp/epson.c:587 .tmp/epson2.c:283 .tmp/epson2.c:295 +#: .tmp/epson2.c:170 .tmp/epson2.c:182 .tmp/epson.c:571 .tmp/epson.c:583 #, no-c-format msgid "Dither D (8x4 Net Screen)" msgstr "Gitter D (8x4 nätskärm)" -#: .tmp/epson.c:588 .tmp/epson2.c:296 +#: .tmp/epson2.c:183 .tmp/epson.c:584 #, no-c-format msgid "Text Enhanced Technology" msgstr "Textförbättringsteknik" -#: .tmp/epson.c:589 .tmp/epson2.c:297 +#: .tmp/epson2.c:184 .tmp/epson.c:585 #, no-c-format msgid "Download pattern A" msgstr "Nedladdat mönster A" -#: .tmp/epson.c:590 .tmp/epson2.c:298 +#: .tmp/epson2.c:185 .tmp/epson.c:586 #, no-c-format msgid "Download pattern B" msgstr "Nedladdat mönster B" -#: .tmp/epson.c:603 .tmp/epson.c:3086 .tmp/epson2.c:311 .tmp/epson2.c:2015 -#: .tmp/genesys.c:99 .tmp/gt68xx_low.h:135 .tmp/hp-option.c:3092 +#: .tmp/epson2.c:191 .tmp/epson2.c:1199 .tmp/epson.c:599 .tmp/epson.c:3082 +#: .tmp/genesys.c:99 .tmp/gt68xx_low.h:134 .tmp/hp-option.c:3093 #, no-c-format msgid "Red" msgstr "Röd" -#: .tmp/epson.c:604 .tmp/epson.c:3082 .tmp/epson2.c:312 .tmp/epson2.c:2011 -#: .tmp/genesys.c:100 .tmp/gt68xx_low.h:136 .tmp/hp-option.c:3093 +#: .tmp/epson2.c:192 .tmp/epson2.c:1195 .tmp/epson.c:600 .tmp/epson.c:3078 +#: .tmp/genesys.c:100 .tmp/gt68xx_low.h:135 .tmp/hp-option.c:3094 #, no-c-format msgid "Green" msgstr "Grön" -#: .tmp/epson.c:605 .tmp/epson.c:3090 .tmp/epson2.c:313 .tmp/epson2.c:2019 -#: .tmp/genesys.c:101 .tmp/gt68xx_low.h:137 .tmp/hp-option.c:3094 +#: .tmp/epson2.c:193 .tmp/epson2.c:1203 .tmp/epson.c:601 .tmp/epson.c:3086 +#: .tmp/genesys.c:101 .tmp/gt68xx_low.h:136 .tmp/hp-option.c:3095 #, no-c-format msgid "Blue" msgstr "BlÃ¥" -#: .tmp/epson.c:635 .tmp/epson2.c:342 +#: .tmp/epson2.c:207 .tmp/epson.c:631 #, no-c-format msgid "No Correction" msgstr "Ingen korrigering" -#: .tmp/epson.c:636 .tmp/epson.c:661 .tmp/epson2.c:343 .tmp/epson2.c:367 +#: .tmp/epson2.c:208 .tmp/epson2.c:233 .tmp/epson.c:632 .tmp/epson.c:657 #, no-c-format msgid "User defined" msgstr "Användardefinierat" -#: .tmp/epson.c:637 .tmp/epson2.c:344 +#: .tmp/epson2.c:209 .tmp/epson.c:633 #, no-c-format msgid "Impact-dot printers" msgstr "Matrisskrivare" -#: .tmp/epson.c:638 .tmp/epson2.c:345 +#: .tmp/epson2.c:210 .tmp/epson.c:634 #, no-c-format msgid "Thermal printers" msgstr "Termoskrivare" -#: .tmp/epson.c:639 .tmp/epson2.c:346 +#: .tmp/epson2.c:211 .tmp/epson.c:635 #, no-c-format msgid "Ink-jet printers" msgstr "BläckstrÃ¥leskrivare" -#: .tmp/epson.c:640 .tmp/epson2.c:347 +#: .tmp/epson2.c:212 .tmp/epson.c:636 #, no-c-format msgid "CRT monitors" msgstr "Bildskärmar (CRT)" -#: .tmp/epson.c:660 .tmp/epson2.c:366 .tmp/hp-option.c:3225 +#: .tmp/epson2.c:232 .tmp/epson.c:656 .tmp/hp-option.c:3226 #: .tmp/test.c:142 #, no-c-format msgid "Default" msgstr "Standard" -#: .tmp/epson.c:662 .tmp/epson2.c:368 +#: .tmp/epson2.c:234 .tmp/epson.c:658 #, no-c-format msgid "High density printing" msgstr "Utskrift med hög densitet" -#: .tmp/epson.c:663 .tmp/epson2.c:369 +#: .tmp/epson2.c:235 .tmp/epson.c:659 #, no-c-format msgid "Low density printing" msgstr "Utskrift med lÃ¥g densitet" -#: .tmp/epson.c:664 .tmp/epson2.c:370 +#: .tmp/epson2.c:236 .tmp/epson.c:660 #, no-c-format msgid "High contrast printing" msgstr "Utskrift med hög kontrast" -#: .tmp/epson.c:682 .tmp/epson2.c:388 +#: .tmp/epson2.c:254 .tmp/epson.c:678 #, no-c-format msgid "User defined (Gamma=1.0)" msgstr "Användardefinierat (gamma=1,0)" -#: .tmp/epson.c:683 .tmp/epson2.c:389 +#: .tmp/epson2.c:255 .tmp/epson.c:679 #, no-c-format msgid "User defined (Gamma=1.8)" msgstr "Användardefinierat (gamma=1,8)" -#: .tmp/epson.c:761 -#, no-c-format -msgid "CD" -msgstr "CD" - -#: .tmp/epson.c:762 -#, no-c-format -msgid "A5 portrait" -msgstr "A5 stÃ¥ende" - -#: .tmp/epson.c:763 -#, no-c-format -msgid "A5 landscape" -msgstr "A5 liggande" - -#: .tmp/epson.c:764 -#, no-c-format -msgid "Letter" -msgstr "US-Letter" - -#: .tmp/epson.c:765 -#, no-c-format -msgid "A4" -msgstr "A4" - -#: .tmp/epson.c:766 -#, no-c-format -msgid "Max" -msgstr "Max" - -#: .tmp/epson.c:2803 .tmp/epson2.c:1733 .tmp/genesys.c:4882 -#: .tmp/gt68xx.c:455 .tmp/hp-option.c:2913 .tmp/ma1509.c:499 -#: .tmp/matsushita.c:1084 .tmp/microtek2.h:599 .tmp/mustek.c:4201 -#: .tmp/mustek_usb.c:260 .tmp/mustek_usb2.c:344 .tmp/niash.c:736 +#: .tmp/epson2.c:940 .tmp/epson.c:2799 .tmp/genesys.c:4882 +#: .tmp/gt68xx.c:455 .tmp/hp-option.c:2914 .tmp/ma1509.c:499 +#: .tmp/matsushita.c:1084 .tmp/microtek2.h:598 .tmp/mustek.c:4201 +#: .tmp/mustek_usb2.c:344 .tmp/mustek_usb.c:260 .tmp/niash.c:736 #: .tmp/plustek.c:720 .tmp/plustek_pp.c:657 .tmp/sceptre.c:673 #: .tmp/snapscan-options.c:315 .tmp/stv680.c:1030 .tmp/teco2.c:1886 -#: .tmp/test.c:305 .tmp/u12.c:473 .tmp/umax.c:5055 +#: .tmp/test.c:305 .tmp/u12.c:473 .tmp/umax.c:5054 #, no-c-format msgid "Scan Mode" msgstr "Bildläsarläge" -#: .tmp/epson.c:2835 .tmp/epson2.c:1765 +#: .tmp/epson2.c:972 .tmp/epson.c:2831 #, no-c-format msgid "Selects the halftone." msgstr "Väljer raster." -#: .tmp/epson.c:2857 .tmp/epson2.c:1786 +#: .tmp/epson2.c:993 .tmp/epson.c:2853 #, no-c-format msgid "Dropout" msgstr "Blindfärg" -#: .tmp/epson.c:2858 .tmp/epson2.c:1787 +#: .tmp/epson2.c:994 .tmp/epson.c:2854 #, no-c-format msgid "Selects the dropout." msgstr "Väljer blindfärg." -#: .tmp/epson.c:2870 .tmp/epson2.c:1799 +#: .tmp/epson2.c:1006 .tmp/epson.c:2866 #, no-c-format msgid "Selects the brightness." msgstr "Väljer ljusstyrka." -#: .tmp/epson.c:2885 .tmp/epson2.c:1813 +#: .tmp/epson2.c:1019 .tmp/epson.c:2881 #, no-c-format msgid "Sharpness" msgstr "Skärpa" -#: .tmp/epson.c:3021 .tmp/epson2.c:1949 +#: .tmp/epson2.c:1135 .tmp/epson.c:3017 #, no-c-format msgid "Color correction" msgstr "Färgkorrigering" -#: .tmp/epson.c:3024 .tmp/epson2.c:1952 +#: .tmp/epson2.c:1138 .tmp/epson.c:3020 #, 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." -#: .tmp/epson.c:3065 .tmp/epson2.c:1993 +#: .tmp/epson2.c:1177 .tmp/epson.c:3061 #, no-c-format msgid "Color correction coefficients" msgstr "Färgkorrigeringskoefficienter" -#: .tmp/epson.c:3066 .tmp/epson2.c:1995 +#: .tmp/epson2.c:1179 .tmp/epson.c:3062 #, no-c-format msgid "Matrix multiplication of RGB" msgstr "Matrismultiplikation av RGB" -#: .tmp/epson.c:3083 .tmp/epson2.c:2012 +#: .tmp/epson2.c:1196 .tmp/epson.c:3079 #, no-c-format msgid "Shift green to red" msgstr "Skifta grön till röd" -#: .tmp/epson.c:3084 .tmp/epson2.c:2013 +#: .tmp/epson2.c:1197 .tmp/epson.c:3080 #, no-c-format msgid "Shift green to blue" msgstr "Skifta grön till blÃ¥" -#: .tmp/epson.c:3085 .tmp/epson2.c:2014 +#: .tmp/epson2.c:1198 .tmp/epson.c:3081 #, no-c-format msgid "Shift red to green" msgstr "Skifta röd till grön" -#: .tmp/epson.c:3087 .tmp/epson2.c:2016 +#: .tmp/epson2.c:1200 .tmp/epson.c:3083 #, no-c-format msgid "Shift red to blue" msgstr "Skifta röd till blÃ¥" -#: .tmp/epson.c:3088 .tmp/epson2.c:2017 +#: .tmp/epson2.c:1201 .tmp/epson.c:3084 #, no-c-format msgid "Shift blue to green" msgstr "Skifta blÃ¥ till grön" -#: .tmp/epson.c:3089 .tmp/epson2.c:2018 +#: .tmp/epson2.c:1202 .tmp/epson.c:3085 #, no-c-format msgid "Shift blue to red" msgstr "Skifta blÃ¥ till röd" -#: .tmp/epson.c:3092 .tmp/epson2.c:2021 +#: .tmp/epson2.c:1205 .tmp/epson.c:3088 #, no-c-format msgid "Controls green level" msgstr "Bestämmer grönnivÃ¥n" -#: .tmp/epson.c:3093 .tmp/epson2.c:2023 +#: .tmp/epson2.c:1207 .tmp/epson.c:3089 #, no-c-format msgid "Adds to red based on green level" msgstr "Lägger till till rött beroende pÃ¥ grönnivÃ¥n" -#: .tmp/epson.c:3094 .tmp/epson2.c:2025 +#: .tmp/epson2.c:1209 .tmp/epson.c:3090 #, no-c-format msgid "Adds to blue based on green level" msgstr "Lägger till till blÃ¥tt beroende pÃ¥ grönnivÃ¥n" -#: .tmp/epson.c:3095 .tmp/epson2.c:2027 +#: .tmp/epson2.c:1211 .tmp/epson.c:3091 #, no-c-format msgid "Adds to green based on red level" msgstr "Lägger till till grönt beroende pÃ¥ rödnivÃ¥n" -#: .tmp/epson.c:3096 .tmp/epson2.c:2028 +#: .tmp/epson2.c:1212 .tmp/epson.c:3092 #, no-c-format msgid "Controls red level" msgstr "Bestämmer rödnivÃ¥n" -#: .tmp/epson.c:3097 .tmp/epson2.c:2029 +#: .tmp/epson2.c:1213 .tmp/epson.c:3093 #, no-c-format msgid "Adds to blue based on red level" msgstr "Lägger till till blÃ¥tt beroende pÃ¥ rödnivÃ¥n" -#: .tmp/epson.c:3098 .tmp/epson2.c:2031 +#: .tmp/epson2.c:1215 .tmp/epson.c:3094 #, no-c-format msgid "Adds to green based on blue level" msgstr "Lägger till till grönt beroende pÃ¥ blÃ¥nivÃ¥n" -#: .tmp/epson.c:3099 .tmp/epson2.c:2032 +#: .tmp/epson2.c:1216 .tmp/epson.c:3095 #, no-c-format msgid "Adds to red based on blue level" msgstr "Lägger till till rött beroende pÃ¥ blÃ¥nivÃ¥n" -#: .tmp/epson.c:3100 .tmp/epson2.c:2033 +#: .tmp/epson2.c:1217 .tmp/epson.c:3096 #, no-c-format msgid "Controls blue level" msgstr "Bestämmer blÃ¥nivÃ¥n" -#: .tmp/epson.c:3187 .tmp/epson2.c:2096 .tmp/rts8891.c:2766 -#: .tmp/saneopts.h:159 .tmp/snapscan-options.c:816 .tmp/umax.c:5566 +#: .tmp/epson2.c:1280 .tmp/epson.c:3183 .tmp/rts8891.c:2766 +#: .tmp/saneopts.h:159 .tmp/snapscan-options.c:816 .tmp/umax.c:5565 #, no-c-format msgid "Advanced" msgstr "Avancerat" -#: .tmp/epson.c:3196 .tmp/epson2.c:2104 +#: .tmp/epson2.c:1288 .tmp/epson.c:3192 #, no-c-format msgid "Mirror the image." msgstr "Spegla bilden." -#: .tmp/epson.c:3222 .tmp/mustek.c:4330 -#, no-c-format -msgid "Fast preview" -msgstr "Snabb förhandsgranskning" - -#: .tmp/epson.c:3235 .tmp/epson2.c:2114 +#: .tmp/epson2.c:1298 .tmp/epson.c:3231 #, no-c-format msgid "Auto area segmentation" msgstr "Automatisk ytuppdelning" -#: .tmp/epson.c:3248 .tmp/epson2.c:2127 -#, no-c-format -msgid "Short resolution list" -msgstr "Kort lista med upplösningar" - -#: .tmp/epson.c:3250 -#, no-c-format -msgid "Display short resolution list" -msgstr "Visa en kort lista med upplösningar" - -#: .tmp/epson.c:3257 -#, no-c-format -msgid "Zoom" -msgstr "Zoom" - -#: .tmp/epson.c:3259 -#, no-c-format -msgid "Defines the zoom factor the scanner will use" -msgstr "Anger zoom-faktorn som bildläsaren kommer att använda" - -#: .tmp/epson.c:3339 -#, no-c-format -msgid "Quick format" -msgstr "Snabbformatera" - -#: .tmp/epson.c:3350 .tmp/epson2.c:2199 +#: .tmp/epson2.c:1373 .tmp/epson.c:3346 #, no-c-format msgid "Optional equipment" msgstr "Tillvalsutrustning" -#: .tmp/epson.c:3421 .tmp/epson2.c:2253 +#: .tmp/epson2.c:1426 .tmp/epson.c:3417 #, no-c-format msgid "Eject" msgstr "Mata ut" -#: .tmp/epson.c:3422 .tmp/epson2.c:2254 +#: .tmp/epson2.c:1427 .tmp/epson.c:3418 #, no-c-format msgid "Eject the sheet in the ADF" msgstr "Mata ut bladet i dokumentmataren" -#: .tmp/epson.c:3434 .tmp/epson2.c:2264 +#: .tmp/epson2.c:1437 .tmp/epson.c:3430 #, no-c-format msgid "Auto eject" msgstr "Mata ut automatiskt" -#: .tmp/epson.c:3435 .tmp/epson2.c:2266 +#: .tmp/epson2.c:1439 .tmp/epson.c:3431 #, no-c-format msgid "Eject document after scanning" msgstr "Mata ut dokument efter inläsning" -#: .tmp/epson.c:3447 .tmp/epson2.c:2276 +#: .tmp/epson2.c:1449 .tmp/epson.c:3443 #, no-c-format msgid "ADF Mode" msgstr "Dokumentmatarläge" -#: .tmp/epson.c:3449 .tmp/epson2.c:2278 +#: .tmp/epson2.c:1451 .tmp/epson.c:3445 #, no-c-format msgid "Selects the ADF mode (simplex/duplex)" msgstr "" "Väljer läge för den automatiska dokumentmataren (enkelsidigt/" "dubbelsidigt)" -#: .tmp/epson.c:3463 .tmp/epson2.c:2290 +#: .tmp/epson2.c:1463 .tmp/epson.c:3459 #, no-c-format msgid "Bay" msgstr "Fack" -#: .tmp/epson.c:3464 .tmp/epson2.c:2291 +#: .tmp/epson2.c:1464 .tmp/epson.c:3460 #, no-c-format msgid "Select bay to scan" msgstr "Välj fack att läsa in frÃ¥n" -#: .tmp/epson.h:69 .tmp/epson2.h:65 +#: .tmp/epson2.h:73 .tmp/epson.h:69 #, no-c-format msgid "" "Selects the gamma correction value from a list of pre-defined devices or " @@ -1137,12 +1087,12 @@ msgstr "" "Väljer gammakorrigeringsvärdet frÃ¥n en lista av fördefinierade enheter " "eller en användardefinierad tabell som kan laddas ner till bildläsaren" -#: .tmp/epson.h:72 .tmp/epson2.h:68 +#: .tmp/epson2.h:76 .tmp/epson.h:72 #, no-c-format msgid "Focus Position" msgstr "Fokuseringspunkt" -#: .tmp/epson.h:73 .tmp/epson2.h:69 +#: .tmp/epson2.h:77 .tmp/epson.h:73 #, no-c-format msgid "" "Sets the focus position to either the glass or 2.5mm above the glass" @@ -1150,12 +1100,12 @@ msgstr "" "Ställer in fokuseringspunkten antingen pÃ¥ glaset eller 2,5 mm ovanför " "glaset" -#: .tmp/epson.h:75 .tmp/epson2.h:71 +#: .tmp/epson2.h:79 .tmp/epson.h:75 #, no-c-format msgid "Wait for Button" msgstr "Vänta pÃ¥ knapp" -#: .tmp/epson.h:76 .tmp/epson2.h:72 +#: .tmp/epson2.h:80 .tmp/epson.h:76 #, no-c-format msgid "" "After sending the scan command, wait until the button on the scanner is " @@ -1164,23 +1114,68 @@ msgstr "" "Efter att ha skickat inläsningskommandot, vänta tills knappen pÃ¥ läsaren " "trycks in för att starta inläsningen." -#: .tmp/epson2.c:237 +#: .tmp/epson.c:757 #, no-c-format -msgid "Positive Slide" -msgstr "Diapositiv" +msgid "CD" +msgstr "CD" -#: .tmp/epson2.c:238 +#: .tmp/epson.c:758 #, no-c-format -msgid "Negative Slide" -msgstr "Dianegativ" +msgid "A5 portrait" +msgstr "A5 stÃ¥ende" -#: .tmp/epson2.c:2129 +#: .tmp/epson.c:759 #, no-c-format -msgid "Display a shortened resolution list" +msgid "A5 landscape" +msgstr "A5 liggande" + +#: .tmp/epson.c:760 +#, no-c-format +msgid "Letter" +msgstr "US-Letter" + +#: .tmp/epson.c:761 +#, no-c-format +msgid "A4" +msgstr "A4" + +#: .tmp/epson.c:762 +#, no-c-format +msgid "Max" +msgstr "Max" + +#: .tmp/epson.c:3218 .tmp/mustek.c:4330 +#, no-c-format +msgid "Fast preview" +msgstr "Snabb förhandsgranskning" + +#: .tmp/epson.c:3244 +#, no-c-format +msgid "Short resolution list" +msgstr "Kort lista med upplösningar" + +#: .tmp/epson.c:3246 +#, no-c-format +msgid "Display short resolution list" msgstr "Visa en kort lista med upplösningar" +#: .tmp/epson.c:3253 +#, no-c-format +msgid "Zoom" +msgstr "Zoom" + +#: .tmp/epson.c:3255 +#, no-c-format +msgid "Defines the zoom factor the scanner will use" +msgstr "Anger zoom-faktorn som bildläsaren kommer att använda" + +#: .tmp/epson.c:3335 +#, no-c-format +msgid "Quick format" +msgstr "Snabbformatera" + #: .tmp/genesys.c:107 .tmp/gt68xx.c:147 .tmp/ma1509.c:106 -#: .tmp/mustek.c:160 .tmp/snapscan-options.c:83 .tmp/umax.c:183 +#: .tmp/mustek.c:160 .tmp/snapscan-options.c:83 .tmp/umax.c:182 #, no-c-format msgid "Transparency Adapter" msgstr "Genomlysningsadapter" @@ -1232,19 +1227,19 @@ msgstr "" "0 betyder att lampan inte kommer att stängas av." #: .tmp/genesys.c:5128 .tmp/genesys.c:5129 -#, fuzzy, no-c-format +#, no-c-format msgid "File button" -msgstr "E-postknapp" +msgstr "Filknapp" #: .tmp/genesys.c:5181 .tmp/genesys.c:5182 -#, fuzzy, no-c-format +#, no-c-format msgid "OCR button" -msgstr "Kopieringsknapp" +msgstr "Optisk teckenigenkännings-knapp" #: .tmp/genesys.c:5195 .tmp/genesys.c:5196 -#, fuzzy, no-c-format +#, no-c-format msgid "Power button" -msgstr "PDF-knapp" +msgstr "PÃ¥slagningsknapp" #: .tmp/genesys.c:5209 .tmp/genesys.c:5210 .tmp/pixma_sane_options.c:210 #: .tmp/plustek.c:1079 @@ -1252,26 +1247,26 @@ msgstr "PDF-knapp" msgid "Buttons" msgstr "Knappar" -#: .tmp/genesys.c:5216 .tmp/hp-option.h:97 .tmp/hp5400_sane.c:392 +#: .tmp/genesys.c:5216 .tmp/hp5400_sane.c:392 .tmp/hp-option.h:97 #: .tmp/niash.c:728 .tmp/plustek.c:940 #, no-c-format msgid "Calibrate" msgstr "Kalibrera" #: .tmp/genesys.c:5217 -#, fuzzy, no-c-format +#, no-c-format msgid "Start calibration using special sheet" -msgstr "PÃ¥börja kalibreringsprocessen." +msgstr "PÃ¥börja kalibrering med specialark" #: .tmp/genesys.c:5229 -#, fuzzy, no-c-format +#, no-c-format msgid "Clear calibration" -msgstr "Grovkalibrering" +msgstr "Rensa kalibrering" #: .tmp/genesys.c:5230 -#, fuzzy, no-c-format +#, no-c-format msgid "Clear calibration cache" -msgstr "Kalibreringsdatacache" +msgstr "Rensa kalibreringsdatacache" #: .tmp/gt68xx.c:474 #, no-c-format @@ -1377,352 +1372,28 @@ msgstr "Gammavärde" msgid "Sets the gamma value of all channels." msgstr "Ställer in gammavärdet för alla kanaler." -#: .tmp/hp-option.c:2983 -#, no-c-format -msgid "Advanced Options" -msgstr "Avancerade inställningar" - -#: .tmp/hp-option.c:3040 -#, no-c-format -msgid "Coarse" -msgstr "Grovt" - -#: .tmp/hp-option.c:3041 -#, no-c-format -msgid "Fine" -msgstr "Fint" - -#: .tmp/hp-option.c:3042 -#, no-c-format -msgid "Bayer" -msgstr "Bayer" - -#: .tmp/hp-option.c:3043 -#, no-c-format -msgid "Vertical" -msgstr "Lodrätt" - -#: .tmp/hp-option.c:3044 -#, no-c-format -msgid "Horizontal" -msgstr "VÃ¥grätt" - -#: .tmp/hp-option.c:3045 .tmp/hp-option.c:3096 -#, no-c-format -msgid "Custom" -msgstr "Användardefinierat" - -#: .tmp/hp-option.c:3086 .tmp/hp-option.c:3142 .tmp/hp-option.c:3157 -#, no-c-format -msgid "Auto" -msgstr "Automatiskt" - -#: .tmp/hp-option.c:3087 -#, no-c-format -msgid "NTSC RGB" -msgstr "NTSC-RGB" - -#: .tmp/hp-option.c:3088 -#, no-c-format -msgid "XPA RGB" -msgstr "XPA-RGB" - -#: .tmp/hp-option.c:3089 -#, no-c-format -msgid "Pass-through" -msgstr "Oförändrat" - -#: .tmp/hp-option.c:3090 -#, no-c-format -msgid "NTSC Gray" -msgstr "NTSC-grÃ¥" - -#: .tmp/hp-option.c:3091 -#, no-c-format -msgid "XPA Gray" -msgstr "XPA-grÃ¥" - -#: .tmp/hp-option.c:3143 -#, no-c-format -msgid "Slow" -msgstr "LÃ¥ngsam" - -#: .tmp/hp-option.c:3144 .tmp/hp-option.c:3251 .tmp/matsushita.c:244 -#: .tmp/mustek.c:145 .tmp/plustek.c:233 .tmp/plustek_pp.c:200 -#: .tmp/u12.c:155 -#, no-c-format -msgid "Normal" -msgstr "Normal" - -#: .tmp/hp-option.c:3145 -#, no-c-format -msgid "Fast" -msgstr "Snabb" - -#: .tmp/hp-option.c:3146 -#, no-c-format -msgid "Extra Fast" -msgstr "Extra snabb" - -#: .tmp/hp-option.c:3158 .tmp/hp-option.c:3325 .tmp/hp-option.c:3338 -#, no-c-format -msgid "Off" -msgstr "Av" - -#: .tmp/hp-option.c:3159 -#, no-c-format -msgid "2-pixel" -msgstr "2 pixlar" - -#: .tmp/hp-option.c:3160 -#, no-c-format -msgid "4-pixel" -msgstr "4 pixlar" - -#: .tmp/hp-option.c:3161 -#, no-c-format -msgid "8-pixel" -msgstr "8 pixlar" - -#: .tmp/hp-option.c:3172 -#, no-c-format -msgid "Print" -msgstr "Fotografi" - -#: .tmp/hp-option.c:3173 .tmp/hp3900_sane.c:427 .tmp/hp3900_sane.c:1019 -#, no-c-format -msgid "Slide" -msgstr "Diapositiv" - -#: .tmp/hp-option.c:3174 -#, no-c-format -msgid "Film-strip" -msgstr "Filmremsa" - -#: .tmp/hp-option.c:3234 .tmp/hp3900_sane.c:428 .tmp/hp3900_sane.c:1021 -#: .tmp/hp3900_sane.c:1420 .tmp/mustek_usb2.c:121 .tmp/plustek.c:235 -#: .tmp/plustek_pp.c:202 .tmp/saneopts.h:206 .tmp/u12.c:157 -#, no-c-format -msgid "Negative" -msgstr "Negativ" - -#: .tmp/hp-option.c:3252 .tmp/hp5590.c:82 -#, no-c-format -msgid "ADF" -msgstr "Automatisk dokumentmatare" - -#: .tmp/hp-option.c:3253 -#, no-c-format -msgid "XPA" -msgstr "XPA" - -#: .tmp/hp-option.c:3326 .tmp/hp-option.c:3339 -#, no-c-format -msgid "On" -msgstr "PÃ¥" - -#: .tmp/hp-option.c:3327 .tmp/hp-option.c:3340 -#, no-c-format -msgid "Conditional" -msgstr "Villkorlig" - -#: .tmp/hp-option.c:3413 -#, no-c-format -msgid "Experiment" -msgstr "Experiment" - -#: .tmp/hp-option.h:60 -#, no-c-format -msgid "Sharpening" -msgstr "Skärpa" - -#: .tmp/hp-option.h:61 -#, no-c-format -msgid "Set sharpening value." -msgstr "Ställer in skärpevärdet." - -#: .tmp/hp-option.h:66 -#, no-c-format -msgid "Auto Threshold" -msgstr "Automatiskt tröskelvärde" - -#: .tmp/hp-option.h:68 -#, no-c-format -msgid "Enable automatic determination of threshold for line-art scans." -msgstr "" -"Möjliggör automatisk bestämning av tröskelvärde för " -"streckteckningsinläsningar." - -#: .tmp/hp-option.h:73 -#, no-c-format -msgid "Smoothing" -msgstr "Utjämning" - -#: .tmp/hp-option.h:74 -#, no-c-format -msgid "Select smoothing filter." -msgstr "Välj utjämningsfilter." - -#: .tmp/hp-option.h:79 -#, no-c-format -msgid "Unload media after scan" -msgstr "Mata ut media efter inläsning" - -#: .tmp/hp-option.h:80 -#, no-c-format -msgid "Unloads the media after a scan." -msgstr "Matar ut media efter en inläsning." - -#: .tmp/hp-option.h:85 -#, no-c-format -msgid "Change document" -msgstr "Byt dokument" - -#: .tmp/hp-option.h:86 -#, no-c-format -msgid "Change Document." -msgstr "Byt dokument." - -#: .tmp/hp-option.h:91 -#, no-c-format -msgid "Unload" -msgstr "Mata ut" - -#: .tmp/hp-option.h:92 -#, no-c-format -msgid "Unload Document." -msgstr "Mata ut dokument." - -#: .tmp/hp-option.h:98 -#, no-c-format -msgid "Start calibration process." -msgstr "PÃ¥börja kalibreringsprocessen." - -#: .tmp/hp-option.h:103 -#, no-c-format -msgid "Media" -msgstr "Media" - -#: .tmp/hp-option.h:104 -#, no-c-format -msgid "Set type of media." -msgstr "Välj mediatyp." - -#: .tmp/hp-option.h:109 -#, no-c-format -msgid "Exposure time" -msgstr "Exponeringstid" - -#: .tmp/hp-option.h:111 -#, no-c-format -msgid "" -"A longer exposure time lets the scanner collect more light. Suggested " -"use is 175% for prints, 150% for normal slides and \"Negative\" for " -"negative film. For dark (underexposed) images you can increase this " -"value." -msgstr "" -"En längre exponeringstid lÃ¥ter bildläsaren samla in mer ljus. Föreslagen " -"användning är 175% för fotografier, 150% för diapositiv och \"Negativ\" " -"för negativ film. För mörka (underexponerade) bilder kan du öka detta " -"värde." - -#: .tmp/hp-option.h:119 .tmp/hp-option.h:126 -#, no-c-format -msgid "Color Matrix" -msgstr "Färgmatris" - -#: .tmp/hp-option.h:121 -#, no-c-format -msgid "Set the scanners color matrix." -msgstr "Ställer in bildläsarens färgmatris." - -#: .tmp/hp-option.h:127 -#, no-c-format -msgid "Custom color matrix." -msgstr "Användardefinierad färgmatris." - -#: .tmp/hp-option.h:132 -#, no-c-format -msgid "Mono Color Matrix" -msgstr "Enfärgsmatris" - -#: .tmp/hp-option.h:133 -#, no-c-format -msgid "Custom color matrix for grayscale scans." -msgstr "Användardefinierad färgmatris för grÃ¥skaleinläsningar." - -#: .tmp/hp-option.h:138 -#, no-c-format -msgid "Mirror horizontal" -msgstr "Spegla vÃ¥grätt" - -#: .tmp/hp-option.h:139 -#, no-c-format -msgid "Mirror image horizontally." -msgstr "Spegla bilden vÃ¥grätt." - -#: .tmp/hp-option.h:144 -#, no-c-format -msgid "Mirror vertical" -msgstr "Spegla lodrätt" - -#: .tmp/hp-option.h:145 -#, no-c-format -msgid "Mirror image vertically." -msgstr "Spegla bilden lodrätt." - -#: .tmp/hp-option.h:150 -#, no-c-format -msgid "Update options" -msgstr "Uppdatera inställningsvärden" - -#: .tmp/hp-option.h:151 -#, no-c-format -msgid "Update options." -msgstr "Uppdatera inställningsvärden." - -#: .tmp/hp-option.h:156 -#, no-c-format -msgid "8 bit output" -msgstr "8 bitars utdata" - -#: .tmp/hp-option.h:158 -#, no-c-format -msgid "Use bit depth greater eight internally, but output only eight bits." -msgstr "" -"Använd ett bitdjup större än 8 internt, men ge endast 8 bitars utdata." - -#: .tmp/hp-option.h:164 -#, no-c-format -msgid "Front button wait" -msgstr "Invänta knapptryck" - -#: .tmp/hp-option.h:165 -#, no-c-format -msgid "Wait to scan for front-panel button push." -msgstr "" -"Vänta med inläsningen tills dess att knappen pÃ¥ frontpanelen trycks in." - -#: .tmp/hp-option.h:172 -#, no-c-format -msgid "Shut off lamp" -msgstr "SlÃ¥ av lampan" - -#: .tmp/hp-option.h:173 -#, no-c-format -msgid "Shut off scanner lamp." -msgstr "SlÃ¥ av bildläsarlampan." - -#: .tmp/hp3500.c:977 +#: .tmp/hp3500.c:976 #, no-c-format msgid "Geometry Group" msgstr "Geometrigrupp" -#: .tmp/hp3500.c:1033 .tmp/hp3500.c:1034 +#: .tmp/hp3500.c:1032 .tmp/hp3500.c:1033 #, no-c-format msgid "Scan Mode Group" msgstr "Bildläsarlägesgrupp" +#: .tmp/hp3900_sane.c:427 .tmp/hp3900_sane.c:1019 .tmp/hp-option.c:3174 +#, no-c-format +msgid "Slide" +msgstr "Diapositiv" + +#: .tmp/hp3900_sane.c:428 .tmp/hp3900_sane.c:1021 .tmp/hp3900_sane.c:1420 +#: .tmp/hp-option.c:3235 .tmp/mustek_usb2.c:121 .tmp/plustek.c:235 +#: .tmp/plustek_pp.c:202 .tmp/saneopts.h:206 .tmp/u12.c:157 +#, no-c-format +msgid "Negative" +msgstr "Negativ" + #: .tmp/hp3900_sane.c:1404 #, no-c-format msgid "Scanner model" @@ -1924,46 +1595,370 @@ msgstr "Sätter pÃ¥ eller av lampan." msgid "Calibrates for black and white level." msgstr "Kalibrerar för svart- och vitnivÃ¥." -#: .tmp/hp5590.c:83 .tmp/pixma.c:663 +#: .tmp/hp5590.c:83 .tmp/hp-option.c:3253 +#, no-c-format +msgid "ADF" +msgstr "Automatisk dokumentmatare" + +#: .tmp/hp5590.c:84 .tmp/pixma.c:663 #, no-c-format msgid "ADF Duplex" msgstr "Automatisk dokumentmatare dubbelsidigt" -#: .tmp/hp5590.c:84 +#: .tmp/hp5590.c:85 #, no-c-format msgid "TMA Slides" msgstr "TMA-positiv" -#: .tmp/hp5590.c:85 +#: .tmp/hp5590.c:86 #, no-c-format msgid "TMA Negatives" msgstr "TMA-negativ" -#: .tmp/hp5590.c:88 +#: .tmp/hp5590.c:89 #, no-c-format msgid "Color (48 bits)" msgstr "Färg (48 bitar)" -#: .tmp/hp5590.c:91 +#: .tmp/hp5590.c:92 #, no-c-format msgid "Extend lamp timeout" msgstr "Utöka lampavstängningstid" -#: .tmp/hp5590.c:92 +#: .tmp/hp5590.c:93 #, no-c-format msgid "Extends lamp timeout (from 15 minutes to 1 hour)" msgstr "Utökar lampavstängningstiden (frÃ¥n 15 minuter till 1 timme)" -#: .tmp/hp5590.c:94 +#: .tmp/hp5590.c:95 #, no-c-format msgid "Wait for button" msgstr "Vänta pÃ¥ knapp" -#: .tmp/hp5590.c:95 +#: .tmp/hp5590.c:96 #, no-c-format msgid "Waits for button before scanning" msgstr "Vänta pÃ¥ knapp innan inläsning" +#: .tmp/hp-option.c:2984 +#, no-c-format +msgid "Advanced Options" +msgstr "Avancerade inställningar" + +#: .tmp/hp-option.c:3041 +#, no-c-format +msgid "Coarse" +msgstr "Grovt" + +#: .tmp/hp-option.c:3042 +#, no-c-format +msgid "Fine" +msgstr "Fint" + +#: .tmp/hp-option.c:3043 +#, no-c-format +msgid "Bayer" +msgstr "Bayer" + +#: .tmp/hp-option.c:3044 +#, no-c-format +msgid "Vertical" +msgstr "Lodrätt" + +#: .tmp/hp-option.c:3045 +#, no-c-format +msgid "Horizontal" +msgstr "VÃ¥grätt" + +#: .tmp/hp-option.c:3046 .tmp/hp-option.c:3097 +#, no-c-format +msgid "Custom" +msgstr "Användardefinierat" + +#: .tmp/hp-option.c:3087 .tmp/hp-option.c:3143 .tmp/hp-option.c:3158 +#, no-c-format +msgid "Auto" +msgstr "Automatiskt" + +#: .tmp/hp-option.c:3088 +#, no-c-format +msgid "NTSC RGB" +msgstr "NTSC-RGB" + +#: .tmp/hp-option.c:3089 +#, no-c-format +msgid "XPA RGB" +msgstr "XPA-RGB" + +#: .tmp/hp-option.c:3090 +#, no-c-format +msgid "Pass-through" +msgstr "Oförändrat" + +#: .tmp/hp-option.c:3091 +#, no-c-format +msgid "NTSC Gray" +msgstr "NTSC-grÃ¥" + +#: .tmp/hp-option.c:3092 +#, no-c-format +msgid "XPA Gray" +msgstr "XPA-grÃ¥" + +#: .tmp/hp-option.c:3144 +#, no-c-format +msgid "Slow" +msgstr "LÃ¥ngsam" + +#: .tmp/hp-option.c:3145 .tmp/hp-option.c:3252 .tmp/matsushita.c:244 +#: .tmp/mustek.c:145 .tmp/plustek.c:233 .tmp/plustek_pp.c:200 +#: .tmp/u12.c:155 +#, no-c-format +msgid "Normal" +msgstr "Normal" + +#: .tmp/hp-option.c:3146 +#, no-c-format +msgid "Fast" +msgstr "Snabb" + +#: .tmp/hp-option.c:3147 +#, no-c-format +msgid "Extra Fast" +msgstr "Extra snabb" + +#: .tmp/hp-option.c:3159 .tmp/hp-option.c:3326 .tmp/hp-option.c:3339 +#, no-c-format +msgid "Off" +msgstr "Av" + +#: .tmp/hp-option.c:3160 +#, no-c-format +msgid "2-pixel" +msgstr "2 pixlar" + +#: .tmp/hp-option.c:3161 +#, no-c-format +msgid "4-pixel" +msgstr "4 pixlar" + +#: .tmp/hp-option.c:3162 +#, no-c-format +msgid "8-pixel" +msgstr "8 pixlar" + +#: .tmp/hp-option.c:3173 +#, no-c-format +msgid "Print" +msgstr "Fotografi" + +#: .tmp/hp-option.c:3175 +#, no-c-format +msgid "Film-strip" +msgstr "Filmremsa" + +#: .tmp/hp-option.c:3254 +#, no-c-format +msgid "XPA" +msgstr "XPA" + +#: .tmp/hp-option.c:3327 .tmp/hp-option.c:3340 +#, no-c-format +msgid "On" +msgstr "PÃ¥" + +#: .tmp/hp-option.c:3328 .tmp/hp-option.c:3341 +#, no-c-format +msgid "Conditional" +msgstr "Villkorlig" + +#: .tmp/hp-option.c:3414 +#, no-c-format +msgid "Experiment" +msgstr "Experiment" + +#: .tmp/hp-option.h:60 +#, no-c-format +msgid "Sharpening" +msgstr "Skärpa" + +#: .tmp/hp-option.h:61 +#, no-c-format +msgid "Set sharpening value." +msgstr "Ställer in skärpevärdet." + +#: .tmp/hp-option.h:66 +#, no-c-format +msgid "Auto Threshold" +msgstr "Automatiskt tröskelvärde" + +#: .tmp/hp-option.h:68 +#, no-c-format +msgid "Enable automatic determination of threshold for line-art scans." +msgstr "" +"Möjliggör automatisk bestämning av tröskelvärde för " +"streckteckningsinläsningar." + +#: .tmp/hp-option.h:73 +#, no-c-format +msgid "Smoothing" +msgstr "Utjämning" + +#: .tmp/hp-option.h:74 +#, no-c-format +msgid "Select smoothing filter." +msgstr "Välj utjämningsfilter." + +#: .tmp/hp-option.h:79 +#, no-c-format +msgid "Unload media after scan" +msgstr "Mata ut media efter inläsning" + +#: .tmp/hp-option.h:80 +#, no-c-format +msgid "Unloads the media after a scan." +msgstr "Matar ut media efter en inläsning." + +#: .tmp/hp-option.h:85 +#, no-c-format +msgid "Change document" +msgstr "Byt dokument" + +#: .tmp/hp-option.h:86 +#, no-c-format +msgid "Change Document." +msgstr "Byt dokument." + +#: .tmp/hp-option.h:91 +#, no-c-format +msgid "Unload" +msgstr "Mata ut" + +#: .tmp/hp-option.h:92 +#, no-c-format +msgid "Unload Document." +msgstr "Mata ut dokument." + +#: .tmp/hp-option.h:98 +#, no-c-format +msgid "Start calibration process." +msgstr "PÃ¥börja kalibreringsprocessen." + +#: .tmp/hp-option.h:103 +#, no-c-format +msgid "Media" +msgstr "Media" + +#: .tmp/hp-option.h:104 +#, no-c-format +msgid "Set type of media." +msgstr "Välj mediatyp." + +#: .tmp/hp-option.h:109 +#, no-c-format +msgid "Exposure time" +msgstr "Exponeringstid" + +#: .tmp/hp-option.h:111 +#, no-c-format +msgid "" +"A longer exposure time lets the scanner collect more light. Suggested " +"use is 175% for prints, 150% for normal slides and \"Negative\" for " +"negative film. For dark (underexposed) images you can increase this " +"value." +msgstr "" +"En längre exponeringstid lÃ¥ter bildläsaren samla in mer ljus. Föreslagen " +"användning är 175% för fotografier, 150% för diapositiv och \"Negativ\" " +"för negativ film. För mörka (underexponerade) bilder kan du öka detta " +"värde." + +#: .tmp/hp-option.h:119 .tmp/hp-option.h:126 +#, no-c-format +msgid "Color Matrix" +msgstr "Färgmatris" + +#: .tmp/hp-option.h:121 +#, no-c-format +msgid "Set the scanners color matrix." +msgstr "Ställer in bildläsarens färgmatris." + +#: .tmp/hp-option.h:127 +#, no-c-format +msgid "Custom color matrix." +msgstr "Användardefinierad färgmatris." + +#: .tmp/hp-option.h:132 +#, no-c-format +msgid "Mono Color Matrix" +msgstr "Enfärgsmatris" + +#: .tmp/hp-option.h:133 +#, no-c-format +msgid "Custom color matrix for grayscale scans." +msgstr "Användardefinierad färgmatris för grÃ¥skaleinläsningar." + +#: .tmp/hp-option.h:138 +#, no-c-format +msgid "Mirror horizontal" +msgstr "Spegla vÃ¥grätt" + +#: .tmp/hp-option.h:139 +#, no-c-format +msgid "Mirror image horizontally." +msgstr "Spegla bilden vÃ¥grätt." + +#: .tmp/hp-option.h:144 +#, no-c-format +msgid "Mirror vertical" +msgstr "Spegla lodrätt" + +#: .tmp/hp-option.h:145 +#, no-c-format +msgid "Mirror image vertically." +msgstr "Spegla bilden lodrätt." + +#: .tmp/hp-option.h:150 +#, no-c-format +msgid "Update options" +msgstr "Uppdatera inställningsvärden" + +#: .tmp/hp-option.h:151 +#, no-c-format +msgid "Update options." +msgstr "Uppdatera inställningsvärden." + +#: .tmp/hp-option.h:156 +#, no-c-format +msgid "8 bit output" +msgstr "8 bitars utdata" + +#: .tmp/hp-option.h:158 +#, no-c-format +msgid "Use bit depth greater eight internally, but output only eight bits." +msgstr "" +"Använd ett bitdjup större än 8 internt, men ge endast 8 bitars utdata." + +#: .tmp/hp-option.h:164 +#, no-c-format +msgid "Front button wait" +msgstr "Invänta knapptryck" + +#: .tmp/hp-option.h:165 +#, no-c-format +msgid "Wait to scan for front-panel button push." +msgstr "" +"Vänta med inläsningen tills dess att knappen pÃ¥ frontpanelen trycks in." + +#: .tmp/hp-option.h:172 +#, no-c-format +msgid "Shut off lamp" +msgstr "SlÃ¥ av lampan" + +#: .tmp/hp-option.h:173 +#, no-c-format +msgid "Shut off scanner lamp." +msgstr "SlÃ¥ av bildläsarlampan." + #: .tmp/leo.c:110 #, no-c-format msgid "Diamond" @@ -1989,57 +1984,57 @@ msgstr "8x8 Bayer" msgid "8x8 Vertical Line" msgstr "8x8 lodrät linje" -#: .tmp/leo.h:260 .tmp/matsushita.h:209 .tmp/teco1.h:291 .tmp/teco3.h:294 +#: .tmp/leo.h:259 .tmp/matsushita.h:208 .tmp/teco1.h:290 .tmp/teco3.h:293 #, no-c-format msgid "Black & White" msgstr "Svart-vit" -#: .tmp/lexmark.c:288 .tmp/umax_pp.c:713 +#: .tmp/lexmark.c:263 .tmp/umax_pp.c:712 #, no-c-format msgid "Gain" msgstr "Förstärking" -#: .tmp/lexmark.c:289 .tmp/umax_pp.c:714 +#: .tmp/lexmark.c:264 .tmp/umax_pp.c:713 #, no-c-format msgid "Color channels gain settings" msgstr "Inställningar för färgkanalernas förstärkning" -#: .tmp/lexmark.c:298 .tmp/umax_pp.c:721 +#: .tmp/lexmark.c:273 .tmp/umax_pp.c:720 #, no-c-format msgid "Gray gain" msgstr "GrÃ¥ förstärkning" -#: .tmp/lexmark.c:299 .tmp/umax_pp.c:722 +#: .tmp/lexmark.c:274 .tmp/umax_pp.c:721 #, no-c-format msgid "Sets gray channel gain" msgstr "Ställer in den grÃ¥ kanalens förstärkning" -#: .tmp/lexmark.c:312 .tmp/plustek.c:1000 .tmp/umax_pp.c:733 +#: .tmp/lexmark.c:287 .tmp/plustek.c:1000 .tmp/umax_pp.c:732 #, no-c-format msgid "Red gain" msgstr "Röd förstärkning" -#: .tmp/lexmark.c:313 .tmp/umax_pp.c:734 +#: .tmp/lexmark.c:288 .tmp/umax_pp.c:733 #, no-c-format msgid "Sets red channel gain" msgstr "Ställer in den röda kanalens förstärkning" -#: .tmp/lexmark.c:326 .tmp/plustek.c:1016 .tmp/umax_pp.c:745 +#: .tmp/lexmark.c:301 .tmp/plustek.c:1016 .tmp/umax_pp.c:744 #, no-c-format msgid "Green gain" msgstr "Grön förstärkning" -#: .tmp/lexmark.c:327 .tmp/umax_pp.c:746 +#: .tmp/lexmark.c:302 .tmp/umax_pp.c:745 #, no-c-format msgid "Sets green channel gain" msgstr "Ställer in den gröna kanalens förstärkning" -#: .tmp/lexmark.c:340 .tmp/plustek.c:1032 .tmp/umax_pp.c:757 +#: .tmp/lexmark.c:315 .tmp/plustek.c:1032 .tmp/umax_pp.c:756 #, no-c-format msgid "Blue gain" msgstr "BlÃ¥ förstärkning" -#: .tmp/lexmark.c:341 .tmp/umax_pp.c:758 +#: .tmp/lexmark.c:316 .tmp/umax_pp.c:757 #, no-c-format msgid "Sets blue channel gain" msgstr "Ställer in den blÃ¥ kanalens förstärkning" @@ -2184,77 +2179,77 @@ msgstr "Ställer in bildton" msgid "Gamma" msgstr "Gamma" -#: .tmp/matsushita.h:210 +#: .tmp/matsushita.h:209 #, no-c-format msgid "Grayscale 4 bits" msgstr "4 bitars grÃ¥skala" -#: .tmp/matsushita.h:211 +#: .tmp/matsushita.h:210 #, no-c-format msgid "Grayscale 8 bits" msgstr "8 bitars grÃ¥skala" -#: .tmp/matsushita.h:220 +#: .tmp/matsushita.h:219 #, no-c-format msgid "Paper size" msgstr "Pappersstorlek" -#: .tmp/matsushita.h:221 .tmp/matsushita.h:228 +#: .tmp/matsushita.h:220 .tmp/matsushita.h:227 #, no-c-format msgid "Automatic separation" msgstr "Automatisk separering" -#: .tmp/matsushita.h:224 +#: .tmp/matsushita.h:223 #, no-c-format msgid "Enable Duplex (Dual-Sided) Scanning" msgstr "Sätt pÃ¥ dubbelsidig inläsning" -#: .tmp/matsushita.h:226 +#: .tmp/matsushita.h:225 #, no-c-format msgid "Physical size of the paper in the ADF" msgstr "Verklig storlek pÃ¥ papperet i den automatiska dokumentmataren" -#: .tmp/microtek2.h:602 +#: .tmp/microtek2.h:601 #, no-c-format msgid "Shadow, midtone, highlight, exposure time" msgstr "Skugga, mittvärde, belysning, exponeringstid" -#: .tmp/microtek2.h:604 +#: .tmp/microtek2.h:603 #, no-c-format msgid "Special options" msgstr "Specialinställningar" -#: .tmp/microtek2.h:605 +#: .tmp/microtek2.h:604 #, no-c-format msgid "Color balance" msgstr "Färgbalans" -#: .tmp/microtek2.h:608 +#: .tmp/microtek2.h:607 #, no-c-format msgid "Disable backtracking" msgstr "Stäng av bakspÃ¥rning" -#: .tmp/microtek2.h:609 +#: .tmp/microtek2.h:608 #, no-c-format msgid "If checked the scanner does not perform backtracking" msgstr "Om denna inställning är vald utför bildläsaren ingen bakspÃ¥rning" -#: .tmp/microtek2.h:613 +#: .tmp/microtek2.h:612 #, no-c-format msgid "Toggle lamp of flatbed" msgstr "SlÃ¥ av eller pÃ¥ lampan" -#: .tmp/microtek2.h:614 +#: .tmp/microtek2.h:613 #, no-c-format msgid "Toggles the lamp of the flatbed" msgstr "SlÃ¥r av eller pÃ¥ flatbäddsbildläsarens lampa" -#: .tmp/microtek2.h:617 +#: .tmp/microtek2.h:616 #, no-c-format msgid "Calibration by backend" msgstr "Bakplanskalibrering" -#: .tmp/microtek2.h:618 +#: .tmp/microtek2.h:617 #, no-c-format msgid "" "If checked the color calibration before a scan is done by the backend" @@ -2262,44 +2257,44 @@ msgstr "" "Om denna inställning är vald utförs färgkalibreringen före en inläsning " "av bakplanet" -#: .tmp/microtek2.h:622 +#: .tmp/microtek2.h:621 #, no-c-format msgid "Use the lightlid-35mm adapter" msgstr "Använd lightlid-35 mm-adaptern" -#: .tmp/microtek2.h:623 +#: .tmp/microtek2.h:622 #, no-c-format msgid "This option turns off the lamp of the flatbed during a scan" msgstr "" "Denna inställning slÃ¥r av lampan pÃ¥ flatbäddsbildläsaren under en " "inläsning" -#: .tmp/microtek2.h:627 .tmp/snapscan-options.c:375 +#: .tmp/microtek2.h:626 .tmp/snapscan-options.c:375 #, no-c-format msgid "Quality scan" msgstr "Kvalitetsinläsning" -#: .tmp/microtek2.h:628 .tmp/snapscan-options.c:376 +#: .tmp/microtek2.h:627 .tmp/snapscan-options.c:376 #, no-c-format msgid "Highest quality but lower speed" msgstr "Högsta kvalitet men lägre hastighet" -#: .tmp/microtek2.h:631 +#: .tmp/microtek2.h:630 #, no-c-format msgid "Fast scan" msgstr "Snabbinläsning" -#: .tmp/microtek2.h:632 +#: .tmp/microtek2.h:631 #, no-c-format msgid "Highest speed but lower quality" msgstr "Högsta hastighet men lägre kvalitet" -#: .tmp/microtek2.h:635 +#: .tmp/microtek2.h:634 #, no-c-format msgid "Automatic adjustment of threshold" msgstr "Automatisk inställning av tröskelvärde" -#: .tmp/microtek2.h:636 +#: .tmp/microtek2.h:635 #, no-c-format msgid "" "If checked the backend automatically tries to determine an optimal value " @@ -2308,154 +2303,154 @@ msgstr "" "Om denna inställning är vald försöker bakplanet automatiskt bestämma ett " "optimalt tröskelvärde." -#: .tmp/microtek2.h:641 +#: .tmp/microtek2.h:640 #, no-c-format msgid "Gamma correction" msgstr "Gammakorrigering" -#: .tmp/microtek2.h:642 +#: .tmp/microtek2.h:641 #, no-c-format msgid "Selects the gamma correction mode." msgstr "Väljer gammakorrigeringsläge." -#: .tmp/microtek2.h:645 +#: .tmp/microtek2.h:644 #, no-c-format msgid "Bind gamma" msgstr "Koppla gamma" -#: .tmp/microtek2.h:646 +#: .tmp/microtek2.h:645 #, no-c-format msgid "Use same gamma values for all colour channels." msgstr "Använd samma gammavärde för alla färgkanaler." -#: .tmp/microtek2.h:650 +#: .tmp/microtek2.h:649 #, no-c-format msgid "Scalar gamma" msgstr "Skalärt gamma" -#: .tmp/microtek2.h:651 +#: .tmp/microtek2.h:650 #, no-c-format msgid "Selects a value for scalar gamma correction." msgstr "Väljer värde för skalär gammakorrigering." -#: .tmp/microtek2.h:655 +#: .tmp/microtek2.h:654 #, no-c-format msgid "Scalar gamma red" msgstr "Skalärt gamma rött" -#: .tmp/microtek2.h:656 +#: .tmp/microtek2.h:655 #, no-c-format msgid "Selects a value for scalar gamma correction (red channel)" msgstr "Väljer värde för skalär gammakorrigering (röd kanal)" -#: .tmp/microtek2.h:660 +#: .tmp/microtek2.h:659 #, no-c-format msgid "Scalar gamma green" msgstr "Skalärt gamma grönt" -#: .tmp/microtek2.h:661 +#: .tmp/microtek2.h:660 #, no-c-format msgid "Selects a value for scalar gamma correction (green channel)" msgstr "Väljer värde för skalär gammakorrigering (grön kanal)" -#: .tmp/microtek2.h:665 +#: .tmp/microtek2.h:664 #, no-c-format msgid "Scalar gamma blue" msgstr "Skalärt gamma blÃ¥tt" -#: .tmp/microtek2.h:666 +#: .tmp/microtek2.h:665 #, no-c-format msgid "Selects a value for scalar gamma correction (blue channel)" msgstr "Väljer värde för skalär gammakorrigering (blÃ¥ kanal)" -#: .tmp/microtek2.h:670 +#: .tmp/microtek2.h:669 #, no-c-format msgid "Channel" msgstr "Kanal" -#: .tmp/microtek2.h:671 +#: .tmp/microtek2.h:670 #, no-c-format msgid "" "Selects the colour band, \"Master\" means that all colours are affected." msgstr "" "Väljer färgkanal, \"Master\" betyder att alla färgkanaler pÃ¥verkas." -#: .tmp/microtek2.h:675 +#: .tmp/microtek2.h:674 #, no-c-format msgid "Midtone" msgstr "Mittvärde" -#: .tmp/microtek2.h:676 +#: .tmp/microtek2.h:675 #, no-c-format msgid "Selects which radiance level should be considered \"50 % gray\"." msgstr "Väljer vilken strÃ¥lglansnivÃ¥ som skall tolkas som \"50% grÃ¥\"." -#: .tmp/microtek2.h:680 +#: .tmp/microtek2.h:679 #, no-c-format msgid "Midtone for red" msgstr "Mittvärde för rött" -#: .tmp/microtek2.h:681 +#: .tmp/microtek2.h:680 #, no-c-format msgid "Selects which radiance level should be considered \"50 % red\"." msgstr "Väljer vilken strÃ¥lglansnivÃ¥ som skall tolkas som \"50% röd\"." -#: .tmp/microtek2.h:685 +#: .tmp/microtek2.h:684 #, no-c-format msgid "Midtone for green" msgstr "Mittvärde för grönt" -#: .tmp/microtek2.h:686 +#: .tmp/microtek2.h:685 #, no-c-format msgid "Selects which radiance level should be considered \"50 % green\"." msgstr "Väljer vilken strÃ¥lglansnivÃ¥ som skall tolkas som \"50% grön\"." -#: .tmp/microtek2.h:690 +#: .tmp/microtek2.h:689 #, no-c-format msgid "Midtone for blue" msgstr "Mittvärde för blÃ¥tt" -#: .tmp/microtek2.h:691 +#: .tmp/microtek2.h:690 #, no-c-format msgid "Selects which radiance level should be considered \"50 % blue\"." msgstr "Väljer vilken strÃ¥lglansnivÃ¥ som skall tolkas som \"50% blÃ¥\"." -#: .tmp/microtek2.h:695 +#: .tmp/microtek2.h:694 #, no-c-format msgid "Red balance" msgstr "Röd färgbalans" -#: .tmp/microtek2.h:696 +#: .tmp/microtek2.h:695 #, no-c-format msgid "Balance factor for red. A value of 100% means no correction." msgstr "Balanseringsfaktor för rött. 100% betyder ingen korrigering." -#: .tmp/microtek2.h:700 +#: .tmp/microtek2.h:699 #, no-c-format msgid "Green balance" msgstr "Grön färgbalans" -#: .tmp/microtek2.h:701 +#: .tmp/microtek2.h:700 #, no-c-format msgid "Balance factor for green. A value of 100% means no correction." msgstr "Balanseringsfaktor för grönt. 100% betyder ingen korrigering." -#: .tmp/microtek2.h:705 +#: .tmp/microtek2.h:704 #, no-c-format msgid "Blue balance" msgstr "BlÃ¥ färgbalans" -#: .tmp/microtek2.h:706 +#: .tmp/microtek2.h:705 #, no-c-format msgid "Balance factor for blue. A value of 100% means no correction." msgstr "Balanseringsfaktor för blÃ¥tt. 100% betyder ingen korrigering." -#: .tmp/microtek2.h:710 +#: .tmp/microtek2.h:709 #, no-c-format msgid "Firmware balance" msgstr "Färgbalans frÃ¥n fast programvara" -#: .tmp/microtek2.h:711 +#: .tmp/microtek2.h:710 #, no-c-format msgid "Sets the color balance values to the firmware provided values." msgstr "" @@ -2827,7 +2822,7 @@ msgstr "Analogt framplan" msgid "Red gain value of the AFE" msgstr "Det analoga framplanets rödförstärkningsvärde" -#: .tmp/plustek.c:1008 .tmp/umax_pp.c:790 +#: .tmp/plustek.c:1008 .tmp/umax_pp.c:789 #, no-c-format msgid "Red offset" msgstr "Röd offset" @@ -2842,7 +2837,7 @@ msgstr "Det analoga framplanets rödoffsetvärde" msgid "Green gain value of the AFE" msgstr "Det analoga framplanets grönförstärkningsvärde" -#: .tmp/plustek.c:1024 .tmp/umax_pp.c:802 +#: .tmp/plustek.c:1024 .tmp/umax_pp.c:801 #, no-c-format msgid "Green offset" msgstr "Grön offset" @@ -2857,7 +2852,7 @@ msgstr "Det analoga framplanets grönoffsetvärde" msgid "Blue gain value of the AFE" msgstr "Det analoga framplanets blÃ¥förstärkningsvärde" -#: .tmp/plustek.c:1040 .tmp/umax_pp.c:814 +#: .tmp/plustek.c:1040 .tmp/umax_pp.c:813 #, no-c-format msgid "Blue offset" msgstr "BlÃ¥ offset" @@ -3113,96 +3108,26 @@ msgstr "" msgid "This option reflects the status of a scanner button." msgstr "Denna inställing avspeglar status pÃ¥ en av bildläsarens knappar." -#: .tmp/rts8891.c:2775 .tmp/umax.c:5796 .tmp/umax_pp.c:637 +#: .tmp/rts8891.c:2775 .tmp/umax.c:5795 .tmp/umax_pp.c:636 #, no-c-format msgid "Lamp on" msgstr "Lampa pÃ¥" -#: .tmp/rts8891.c:2776 .tmp/umax.c:5797 +#: .tmp/rts8891.c:2776 .tmp/umax.c:5796 #, no-c-format msgid "Turn on scanner lamp" msgstr "SlÃ¥ pÃ¥ bildläsarlampan" -#: .tmp/rts8891.c:2786 .tmp/umax.c:5813 .tmp/umax1220u.c:248 +#: .tmp/rts8891.c:2786 .tmp/umax1220u.c:248 .tmp/umax.c:5812 #, no-c-format msgid "Lamp off" msgstr "Lampa av" -#: .tmp/rts8891.c:2787 .tmp/umax.c:5814 .tmp/umax1220u.c:249 +#: .tmp/rts8891.c:2787 .tmp/umax1220u.c:249 .tmp/umax.c:5813 #, no-c-format msgid "Turn off scanner lamp" msgstr "SlÃ¥ av bildläsarlampan" -#: .tmp/sane_strstatus.c:59 -#, no-c-format -msgid "Success" -msgstr "OK" - -#: .tmp/sane_strstatus.c:62 -#, no-c-format -msgid "Operation not supported" -msgstr "Kommandot ej understött" - -#: .tmp/sane_strstatus.c:65 -#, no-c-format -msgid "Operation was cancelled" -msgstr "Kommandot avbröts" - -#: .tmp/sane_strstatus.c:68 -#, no-c-format -msgid "Device busy" -msgstr "Enheten upptagen" - -#: .tmp/sane_strstatus.c:71 -#, no-c-format -msgid "Invalid argument" -msgstr "Ogiltigt argument" - -#: .tmp/sane_strstatus.c:74 -#, no-c-format -msgid "End of file reached" -msgstr "Filslut nÃ¥tt" - -#: .tmp/sane_strstatus.c:77 -#, no-c-format -msgid "Document feeder jammed" -msgstr "Stopp i dokumentmataren" - -#: .tmp/sane_strstatus.c:80 -#, no-c-format -msgid "Document feeder out of documents" -msgstr "Slut pÃ¥ dokument i dokumentmataren" - -#: .tmp/sane_strstatus.c:83 -#, no-c-format -msgid "Scanner cover is open" -msgstr "Bildläsarens lock är öppet" - -#: .tmp/sane_strstatus.c:86 -#, no-c-format -msgid "Error during device I/O" -msgstr "Fel under enhets-I/O" - -#: .tmp/sane_strstatus.c:89 -#, no-c-format -msgid "Out of memory" -msgstr "Slut pÃ¥ minne" - -#: .tmp/sane_strstatus.c:92 -#, no-c-format -msgid "Access to resource has been denied" -msgstr "Tillträde till resursen har förvägrats" - -#: .tmp/sane_strstatus.c:96 -#, no-c-format -msgid "Lamp not ready, please retry" -msgstr "Lampan ej klar, vanligen försök igen" - -#: .tmp/sane_strstatus.c:101 -#, no-c-format -msgid "Scanner mechanism locked for transport" -msgstr "Bildläsaren lÃ¥st för transport" - #: .tmp/saneopts.h:154 #, no-c-format msgid "Number of options" @@ -3538,7 +3463,7 @@ msgstr "Inläsningslampdensitet" msgid "Set lamp density" msgstr "Ställ in lampdensitet" -#: .tmp/saneopts.h:231 .tmp/umax.c:5830 +#: .tmp/saneopts.h:231 .tmp/umax.c:5829 #, no-c-format msgid "Lamp off at exit" msgstr "Lampa av vid avslut" @@ -3938,7 +3863,7 @@ msgstr "Ange lampdensitet för inläsning" msgid "Enable selection of lamp density" msgstr "Möjliggör val av lampdensitet" -#: .tmp/saneopts.h:441 .tmp/umax.c:5831 +#: .tmp/saneopts.h:441 .tmp/umax.c:5830 #, no-c-format msgid "Turn off lamp when program exits" msgstr "SlÃ¥ av lampan när programmet avslutas" @@ -3983,6 +3908,76 @@ msgstr "Sida laddad" msgid "Cover open" msgstr "Locket öppet" +#: .tmp/sane_strstatus.c:59 +#, no-c-format +msgid "Success" +msgstr "OK" + +#: .tmp/sane_strstatus.c:62 +#, no-c-format +msgid "Operation not supported" +msgstr "Kommandot ej understött" + +#: .tmp/sane_strstatus.c:65 +#, no-c-format +msgid "Operation was cancelled" +msgstr "Kommandot avbröts" + +#: .tmp/sane_strstatus.c:68 +#, no-c-format +msgid "Device busy" +msgstr "Enheten upptagen" + +#: .tmp/sane_strstatus.c:71 +#, no-c-format +msgid "Invalid argument" +msgstr "Ogiltigt argument" + +#: .tmp/sane_strstatus.c:74 +#, no-c-format +msgid "End of file reached" +msgstr "Filslut nÃ¥tt" + +#: .tmp/sane_strstatus.c:77 +#, no-c-format +msgid "Document feeder jammed" +msgstr "Stopp i dokumentmataren" + +#: .tmp/sane_strstatus.c:80 +#, no-c-format +msgid "Document feeder out of documents" +msgstr "Slut pÃ¥ dokument i dokumentmataren" + +#: .tmp/sane_strstatus.c:83 +#, no-c-format +msgid "Scanner cover is open" +msgstr "Bildläsarens lock är öppet" + +#: .tmp/sane_strstatus.c:86 +#, no-c-format +msgid "Error during device I/O" +msgstr "Fel under enhets-I/O" + +#: .tmp/sane_strstatus.c:89 +#, no-c-format +msgid "Out of memory" +msgstr "Slut pÃ¥ minne" + +#: .tmp/sane_strstatus.c:92 +#, no-c-format +msgid "Access to resource has been denied" +msgstr "Tillträde till resursen har förvägrats" + +#: .tmp/sane_strstatus.c:96 +#, no-c-format +msgid "Lamp not ready, please retry" +msgstr "Lampan ej klar, vanligen försök igen" + +#: .tmp/sane_strstatus.c:101 +#, no-c-format +msgid "Scanner mechanism locked for transport" +msgstr "Bildläsaren lÃ¥st för transport" + #: .tmp/sm3840.c:758 #, no-c-format msgid "Lamp timeout" @@ -4651,142 +4646,142 @@ msgstr "(1/1) Knapptestinställning. Skriver ut lite text..." msgid "Color 36" msgstr "Färg 36" -#: .tmp/umax.c:189 +#: .tmp/umax.c:188 #, no-c-format msgid "Color Lineart" msgstr "Färgstreckteckning" -#: .tmp/umax.c:190 +#: .tmp/umax.c:189 #, no-c-format msgid "Color Halftone" msgstr "Färgraster" -#: .tmp/umax.c:236 +#: .tmp/umax.c:235 #, no-c-format msgid "Use Image Composition" msgstr "Använd bildkomponering" -#: .tmp/umax.c:237 +#: .tmp/umax.c:236 #, no-c-format msgid "Bi-level black and white (lineart mode)" msgstr "TvÃ¥nivÃ¥-svart-vit (streckteckningsläge)" -#: .tmp/umax.c:238 +#: .tmp/umax.c:237 #, no-c-format msgid "Dithered/halftone black & white (halftone mode)" msgstr "Gittrad/rastrerad svart-vit (rasterläge)" -#: .tmp/umax.c:239 +#: .tmp/umax.c:238 #, no-c-format msgid "Multi-level black & white (grayscale mode)" msgstr "FlernivÃ¥-svart-vit (grÃ¥skaleläge)" -#: .tmp/umax.c:240 +#: .tmp/umax.c:239 #, no-c-format msgid "Multi-level RGB color (one pass color)" msgstr "FlernivÃ¥-RGB-färg (enpass-färg)" -#: .tmp/umax.c:241 +#: .tmp/umax.c:240 #, no-c-format msgid "Ignore calibration" msgstr "Ignorera kalibrering" -#: .tmp/umax.c:5734 +#: .tmp/umax.c:5733 #, no-c-format msgid "Disable pre focus" msgstr "Stäng av förfokusering" -#: .tmp/umax.c:5735 +#: .tmp/umax.c:5734 #, no-c-format msgid "Do not calibrate focus" msgstr "Kalibrera inte fokus" -#: .tmp/umax.c:5746 +#: .tmp/umax.c:5745 #, no-c-format msgid "Manual pre focus" msgstr "Manuell förfokusering" -#: .tmp/umax.c:5758 +#: .tmp/umax.c:5757 #, no-c-format msgid "Fix focus position" msgstr "Fast fokuseringspunkt" -#: .tmp/umax.c:5770 +#: .tmp/umax.c:5769 #, no-c-format msgid "Lens calibration in doc position" msgstr "Kalibrera linsen i dokumentets läge" -#: .tmp/umax.c:5771 +#: .tmp/umax.c:5770 #, no-c-format msgid "Calibrate lens focus in document position" msgstr "Kalibrera linsens fokus i dokumentets läge" -#: .tmp/umax.c:5782 +#: .tmp/umax.c:5781 #, no-c-format msgid "Holder focus position 0mm" msgstr "HÃ¥llarens fokuseringspunkt 0 mm" -#: .tmp/umax.c:5783 +#: .tmp/umax.c:5782 #, no-c-format msgid "Use 0mm holder focus position instead of 0.6mm" msgstr "Använd 0 mm i stället för 0,6 mm för hÃ¥llarens fokuseringspunkt" -#: .tmp/umax.c:5886 +#: .tmp/umax.c:5885 #, no-c-format msgid "Calibration mode" msgstr "Kalibreringsläge" -#: .tmp/umax.c:5887 +#: .tmp/umax.c:5886 #, no-c-format msgid "Define calibration mode" msgstr "Definiera kalibreringsläge" -#: .tmp/umax_pp.c:638 +#: .tmp/umax_pp.c:637 #, no-c-format msgid "Sets lamp on/off" msgstr "Sätt pÃ¥/av lampan" -#: .tmp/umax_pp.c:647 +#: .tmp/umax_pp.c:646 #, no-c-format msgid "UTA on" msgstr "UTA pÃ¥" -#: .tmp/umax_pp.c:648 +#: .tmp/umax_pp.c:647 #, no-c-format msgid "Sets UTA on/off" msgstr "Sätter pÃ¥/av UTA" -#: .tmp/umax_pp.c:769 +#: .tmp/umax_pp.c:768 #, no-c-format msgid "Offset" msgstr "Offset" -#: .tmp/umax_pp.c:771 +#: .tmp/umax_pp.c:770 #, no-c-format msgid "Color channels offset settings" msgstr "Inställningar för färgkanalernas offset" -#: .tmp/umax_pp.c:778 +#: .tmp/umax_pp.c:777 #, no-c-format msgid "Gray offset" msgstr "GrÃ¥ offset" -#: .tmp/umax_pp.c:779 +#: .tmp/umax_pp.c:778 #, no-c-format msgid "Sets gray channel offset" msgstr "Ställer in den grÃ¥ kanalens offset" -#: .tmp/umax_pp.c:791 +#: .tmp/umax_pp.c:790 #, no-c-format msgid "Sets red channel offset" msgstr "Ställer in den röda kanalens offset" -#: .tmp/umax_pp.c:803 +#: .tmp/umax_pp.c:802 #, no-c-format msgid "Sets green channel offset" msgstr "Ställer in den gröna kanalens offset" -#: .tmp/umax_pp.c:815 +#: .tmp/umax_pp.c:814 #, no-c-format msgid "Sets blue channel offset" msgstr "Ställer in den blÃ¥ kanalens offset" From aaa18be7e323f559b04891f196d2b21bad71e35a Mon Sep 17 00:00:00 2001 From: Mattias Ellert Date: Sun, 21 Jun 2009 09:12:09 +0200 Subject: [PATCH 10/12] Add missing includes --- ChangeLog | 2 ++ backend/hp5400_internal.h | 1 + backend/hp5590_cmds.c | 1 + backend/hp5590_low.c | 1 + backend/net.c | 1 + 5 files changed, 6 insertions(+) diff --git a/ChangeLog b/ChangeLog index 472a7ac9e..bd84313e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2009-06-20 Mattias Ellert * po/sane-backends.sv.po: Updated Swedish translations. + * backend/hp5400_internal.h, backend/hp5590_cmds.c, + backend/hp5590_low.c, backend/net.c: Add missing includes. 2009-06-20 Nicolas Martin * backend/pixma_imageclass.c, doc/descriptions/pixma.desc, doc/sane-pixma.man: diff --git a/backend/hp5400_internal.h b/backend/hp5400_internal.h index f1175debb..981ce0b04 100644 --- a/backend/hp5400_internal.h +++ b/backend/hp5400_internal.h @@ -52,6 +52,7 @@ tables and stores the results of a scan. - 19/02/2003 Martijn */ +#include "../include/_stdint.h" #ifdef __GNUC__ #define PACKED __attribute__ ((packed)) diff --git a/backend/hp5590_cmds.c b/backend/hp5590_cmds.c index e4d010526..e1885838e 100644 --- a/backend/hp5590_cmds.c +++ b/backend/hp5590_cmds.c @@ -55,6 +55,7 @@ #include #include "../include/sane/sanei_debug.h" +#include "../include/_stdint.h" #include "hp5590_low.h" #include "hp5590_cmds.h" diff --git a/backend/hp5590_low.c b/backend/hp5590_low.c index e5987409a..387539208 100644 --- a/backend/hp5590_low.c +++ b/backend/hp5590_low.c @@ -53,6 +53,7 @@ #include "../include/sane/sanei_debug.h" #include "../include/sane/sanei_usb.h" +#include "../include/_stdint.h" #include "hp5590_low.h" /* Debug levels */ diff --git a/backend/net.c b/backend/net.c index 2c29ff7ef..316d5b2ce 100644 --- a/backend/net.c +++ b/backend/net.c @@ -49,6 +49,7 @@ #include "../include/sane/config.h" #include "../include/lalloca.h" +#include "../include/_stdint.h" #include #include From a05e6e078b6918f5b4131366eebdc45c10171f7a Mon Sep 17 00:00:00 2001 From: Nicolas Martin Date: Mon, 22 Jun 2009 21:31:30 +0200 Subject: [PATCH 11/12] ImageCLASS MF5770 grayscale mode and D480 duplex ADF support. - backend/pixma_imageclass.c: Added duplex ADF scan for Canon ImageCLASS D480 - backend/pixma_mp730.c: . Fixed ImageCLASS MF5770 grayscale scanning. . Declared ImageCLASS MF5730 and MF5750 (similarity with MF5770). - doc/descriptions/pixma.desc: Documentation updates. --- ChangeLog | 7 ++++ backend/pixma_imageclass.c | 10 ++++- backend/pixma_mp730.c | 75 ++++++++++++++++++++++++++----------- doc/descriptions/pixma.desc | 6 +-- 4 files changed, 71 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index bd84313e7..c27de894e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-06-22 Nicolas Martin + * backend/pixma_imageclass.c, backend/pixma_mp730.c, doc/descriptions/pixma.desc: + - Added duplex ADF scan for Canon ImageCLASS D480. + - Fixed ImageCLASS MF5770 grayscale scanning. + - Moved ImageCLASS MF5730 and MF5750 to pixma_mp730.c (similarity with MF5770). + - Updated documentation. + 2009-06-20 Mattias Ellert * po/sane-backends.sv.po: Updated Swedish translations. * backend/hp5400_internal.h, backend/hp5590_cmds.c, diff --git a/backend/pixma_imageclass.c b/backend/pixma_imageclass.c index 3ead873d6..da59d5e58 100644 --- a/backend/pixma_imageclass.c +++ b/backend/pixma_imageclass.c @@ -178,6 +178,7 @@ activate (pixma_t * s, uint8_t x) { case MF4200_PID: case MF4600_PID: + case D480_PID: return iclass_exec (s, &mf->cb, 1); break; case MF4100_PID: @@ -198,11 +199,14 @@ select_source (pixma_t * s) { iclass_t *mf = (iclass_t *) s->subdriver; uint8_t *data = pixma_newcmd (&mf->cb, cmd_select_source, 10, 0); - data[0] = (s->param->source == PIXMA_SOURCE_ADF) ? 2 : 1; + data[0] = (s->param->source == PIXMA_SOURCE_ADF || + s->param->source == PIXMA_SOURCE_ADFDUP) ? 2 : 1; + data[5] = (s->param->source == PIXMA_SOURCE_ADFDUP) ? 3 : 0; switch (s->cfg->pid) { case MF4200_PID: case MF4600_PID: + case D480_PID: return iclass_exec (s, &mf->cb, 0); break; case MF4100_PID: @@ -233,6 +237,7 @@ send_scan_param (pixma_t * s) { case MF4200_PID: case MF4600_PID: + case D480_PID: return iclass_exec (s, &mf->cb, 0); break; case MF4100_PID: @@ -308,6 +313,7 @@ read_error_info (pixma_t * s, void *buf, unsigned size) { case MF4200_PID: case MF4600_PID: + case D480_PID: error = iclass_exec (s, &mf->cb, 0); break; case MF4100_PID: @@ -668,7 +674,7 @@ const pixma_config_t pixma_iclass_devices[] = { DEV ("Canon imageCLASS MF4270", "MF4270", MF4200_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF4150", "MF4100", MF4100_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon imageCLASS MF4690", "MF4690", MF4600_PID, 600, 640, 877, PIXMA_CAP_ADF), - DEV ("Canon imageCLASS D480", "D480", D480_PID, 600, 640, 877, PIXMA_CAP_ADF), + DEV ("Canon imageCLASS D480", "D480", D480_PID, 600, 640, 877, PIXMA_CAP_ADFDUP), /* FIXME: the following capabilities all need updating/verifying */ DEV ("Canon imageCLASS MF5630", "MF5630", MF5630_PID, 600, 640, 877, PIXMA_CAP_ADF), DEV ("Canon laserBase MF5650", "MF5650", MF5650_PID, 600, 640, 877, PIXMA_CAP_ADF), diff --git a/backend/pixma_mp730.c b/backend/pixma_mp730.c index 8ade8cf9a..fb499a4db 100644 --- a/backend/pixma_mp730.c +++ b/backend/pixma_mp730.c @@ -62,18 +62,20 @@ #define IMAGE_BLOCK_SIZE (0xc000) #define CMDBUF_SIZE 512 +#define MP730_PID 0x262f +#define MP700_PID 0x2630 + #define MP360_PID 0x263c #define MP370_PID 0x263d #define MP390_PID 0x263e -#define MP700_PID 0x2630 #define MP740_PID 0x264c /* Untested */ #define MP710_PID 0x264d -#define MP730_PID 0x262f +#define MF5730_PID 0x265d /* Untested */ +#define MF5750_PID 0x265e /* Untested */ #define MF5770_PID 0x265f - enum mp730_state_t { state_idle, @@ -285,6 +287,8 @@ handle_interrupt (pixma_t * s, int timeout) case MP360_PID: case MP370_PID: case MP390_PID: + case MF5730_PID: + case MF5750_PID: case MF5770_PID: if (len != 16) { @@ -332,6 +336,8 @@ has_ccd_sensor (pixma_t * s) return (s->cfg->pid == MP360_PID || s->cfg->pid == MP370_PID || s->cfg->pid == MP390_PID || + s->cfg->pid == MF5730_PID || + s->cfg->pid == MF5750_PID || s->cfg->pid == MF5770_PID); } @@ -369,27 +375,47 @@ step1 (pixma_t * s) return PIXMA_ENO_PAPER; if (has_ccd_sensor (s)) { - /* MF5770: Wait 10 sec before starting for 1st page only */ - if (s->cfg->pid == MF5770_PID && s->param->adf_pageid == 0) + switch (s->cfg->pid) { - tmo = 10; /* like Windows driver, 10 sec CCD calibration ? */ - while (--tmo >= 0) - { - error = handle_interrupt (s, 1000); \ - if (s->cancel) \ - return PIXMA_ECANCELED; \ - if (error != PIXMA_ECANCELED && error < 0) \ - return error; - PDBG (pixma_dbg (2, "CCD Calibration ends in %d sec.\n", tmo)); - } + case MF5730_PID: + case MF5750_PID: + case MF5770_PID: + /* MF57x0: Wait 10 sec before starting for 1st page only */ + if (s->param->adf_pageid == 0) + { + tmo = 10; /* like Windows driver, 10 sec CCD calibration ? */ + while (--tmo >= 0) + { + error = handle_interrupt (s, 1000); \ + if (s->cancel) \ + return PIXMA_ECANCELED; \ + if (error != PIXMA_ECANCELED && error < 0) \ + return error; + PDBG (pixma_dbg (2, "CCD Calibration ends in %d sec.\n", tmo)); + } + } + break; + + default: + break; } activate (s, 0); error = calibrate (s); - /* MF5770: calibration returns PIXMA_STATUS_FAILED */ - if (s->cfg->pid == MF5770_PID && error == PIXMA_ECANCELED) - error = read_error_info (s, NULL, 0); + switch (s->cfg->pid) + { + case MF5730_PID: + case MF5750_PID: + case MF5770_PID: + /* MF57x0: calibration returns PIXMA_STATUS_FAILED */ + if (error == PIXMA_ECANCELED) + error = read_error_info (s, NULL, 0); + break; + + default: + break; + } } if (error >= 0) error = activate (s, 0); @@ -582,14 +608,17 @@ mp730_fill_buffer (pixma_t * s, pixma_imagebuf_t * ib) /* n = number of full lines (rows) we have in the buffer. */ if (n != 0) { - if (s->param->channels != 1 && s->cfg->pid != MF5770_PID) + if (s->param->channels != 1 && + s->cfg->pid != MF5730_PID && + s->cfg->pid != MF5750_PID && + s->cfg->pid != MF5770_PID) { - /* color */ + /* color, and not an MF57x0 */ pack_rgb (mp->imgbuf, n, mp->raw_width, mp->lbuf); } else { - /* grayscale */ + /* grayscale or MF57x0 */ memcpy (mp->lbuf, mp->imgbuf, n * s->param->line_size); } block_size = n * s->param->line_size; @@ -690,7 +719,9 @@ const pixma_config_t pixma_mp730_devices[] = { DEVICE ("Canon MultiPASS MP730", "MP730", MP730_PID, 1200, 637, 868, PIXMA_CAP_ADF), DEVICE ("Canon MultiPASS MP740", "MP740", MP740_PID, 1200, 637, 868, PIXMA_CAP_ADF), - DEVICE ("Canon imageCLASS MF5770", "MF5770", MF5770_PID, 600, 640, 877, PIXMA_CAP_ADF), + DEVICE ("Canon imageCLASS MF5730", "MF5730", MF5730_PID, 1200, 636, 868, PIXMA_CAP_ADF), + DEVICE ("Canon imageCLASS MF5750", "MF5750", MF5750_PID, 1200, 636, 868, PIXMA_CAP_ADF), + DEVICE ("Canon imageCLASS MF5770", "MF5770", MF5770_PID, 1200, 636, 868, PIXMA_CAP_ADF), DEVICE (NULL, NULL, 0, 0, 0, 0, 0) }; diff --git a/doc/descriptions/pixma.desc b/doc/descriptions/pixma.desc index 7c45604f7..b75fce9f9 100644 --- a/doc/descriptions/pixma.desc +++ b/doc/descriptions/pixma.desc @@ -241,7 +241,7 @@ :interface "USB Ethernet" :usbid "0x04a9" "0x172c" :status :good -:comment "Works in flatbed and ADF simplex. ADF Duplex supported, but no report yet." +:comment "All resolutions supported (up to 2400DPI). Flatbed, ADF simplex and Duplex supported." :model "PIXMA MX7600" :interface "USB Ethernet" @@ -301,7 +301,7 @@ :interface "USB" :usbid "0x04a9" "0x26ed" :status :good -:comment "All resolutions supported (up to 600DPI)" +:comment "All resolutions supported (up to 600DPI). Flatbed, ADF simplex and Duplex supported." :model "imageCLASS MF5630" :interface "USB" @@ -337,7 +337,7 @@ :interface "USB" :usbid "0x04a9" "0x265f" :status :good -:comment "All resolutions supported (up to 600DPI) in color. Grayscale not working yet in preview (75 dpi capable ?)." +:comment "All resolutions supported (up to 600DPI)." :model "imageCLASS MF3110" :interface "USB" From 3730e34c9184737593ea1b5e65506190ecf5f868 Mon Sep 17 00:00:00 2001 From: Alessandro Zummo Date: Tue, 26 May 2009 23:39:37 +0200 Subject: [PATCH 12/12] epson2: added support for color correction profiles Color correction profiles have been imported from the epkowa driver. The user can specify his own or let the backend choice. The feature is not enabled by default. This feature is in beta stage, works only for color scans and automatic mode. Enable with --color-correction 'Automatic' --- backend/Makefile.am | 4 +- backend/Makefile.in | 18 +- backend/epson2-cct.c | 552 ++++++++++++++++++++++++++++++++++++++ backend/epson2-commands.c | 172 +++++++++++- backend/epson2-commands.h | 2 +- backend/epson2-ops.c | 32 ++- backend/epson2.c | 263 ++++++++---------- backend/epson2.h | 27 +- 8 files changed, 889 insertions(+), 181 deletions(-) create mode 100644 backend/epson2-cct.c diff --git a/backend/Makefile.am b/backend/Makefile.am index f1c7cb65b..2a3d4568e 100644 --- a/backend/Makefile.am +++ b/backend/Makefile.am @@ -456,13 +456,13 @@ 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) EXTRA_DIST += epson.conf.in -libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h +libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h epson2-cct.c libepson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2 nodist_libsane_epson2_la_SOURCES = epson2-s.c libsane_epson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2 libsane_epson2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) -libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) +libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB) EXTRA_DIST += epson2.conf.in libfujitsu_la_SOURCES = fujitsu.c fujitsu.h fujitsu-scsi.h diff --git a/backend/Makefile.in b/backend/Makefile.in index 25bda886b..80be8757c 100644 --- a/backend/Makefile.in +++ b/backend/Makefile.in @@ -132,7 +132,8 @@ libepson2_la_LIBADD = am_libepson2_la_OBJECTS = libepson2_la-epson2.lo \ libepson2_la-epson2_scsi.lo libepson2_la-epson_usb.lo \ libepson2_la-epson2_net.lo libepson2_la-epson2-io.lo \ - libepson2_la-epson2-commands.lo libepson2_la-epson2-ops.lo + libepson2_la-epson2-commands.lo libepson2_la-epson2-ops.lo \ + libepson2_la-epson2-cct.lo libepson2_la_OBJECTS = $(am_libepson2_la_OBJECTS) libfujitsu_la_LIBADD = am_libfujitsu_la_OBJECTS = libfujitsu_la-fujitsu.lo @@ -510,7 +511,8 @@ libsane_epson2_la_DEPENDENCIES = $(COMMON_LIBS) libepson2.la \ sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo \ ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo \ ../sanei/sanei_udp.lo $(am__DEPENDENCIES_1) \ - $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) nodist_libsane_epson2_la_OBJECTS = libsane_epson2_la-epson2-s.lo libsane_epson2_la_OBJECTS = $(nodist_libsane_epson2_la_OBJECTS) libsane_epson2_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ @@ -1852,12 +1854,12 @@ 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) -libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h +libepson2_la_SOURCES = epson2.c epson2.h epson2_scsi.c epson2_scsi.h epson_usb.c epson2_net.c epson2_net.h epson2-io.c epson2-io.h epson2-commands.c epson2-commands.h epson2-ops.c epson2-ops.h epson2-cct.c libepson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2 nodist_libsane_epson2_la_SOURCES = epson2-s.c libsane_epson2_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=epson2 libsane_epson2_la_LDFLAGS = $(DIST_SANELIBS_LDFLAGS) -libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) +libsane_epson2_la_LIBADD = $(COMMON_LIBS) libepson2.la ../sanei/sanei_init_debug.lo ../sanei/sanei_constrain_value.lo ../sanei/sanei_config.lo ../sanei/sanei_config2.lo sane_strstatus.lo ../sanei/sanei_usb.lo ../sanei/sanei_scsi.lo ../sanei/sanei_pio.lo ../sanei/sanei_tcp.lo ../sanei/sanei_udp.lo $(SCSI_LIBS) $(USB_LIBS) $(SOCKET_LIBS) $(MATH_LIB) libfujitsu_la_SOURCES = fujitsu.c fujitsu.h fujitsu-scsi.h libfujitsu_la_CPPFLAGS = $(AM_CPPFLAGS) -DBACKEND_NAME=fujitsu nodist_libsane_fujitsu_la_SOURCES = fujitsu-s.c @@ -2674,6 +2676,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdll_la-dll.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdmc_la-dmc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepjitsu_la-epjitsu.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-cct.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-commands.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-io.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libepson2_la-epson2-ops.Plo@am__quote@ @@ -3108,6 +3111,13 @@ libepson2_la-epson2-ops.lo: epson2-ops.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libepson2_la-epson2-ops.lo `test -f 'epson2-ops.c' || echo '$(srcdir)/'`epson2-ops.c +libepson2_la-epson2-cct.lo: epson2-cct.c +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libepson2_la-epson2-cct.lo -MD -MP -MF $(DEPDIR)/libepson2_la-epson2-cct.Tpo -c -o libepson2_la-epson2-cct.lo `test -f 'epson2-cct.c' || echo '$(srcdir)/'`epson2-cct.c +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libepson2_la-epson2-cct.Tpo $(DEPDIR)/libepson2_la-epson2-cct.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epson2-cct.c' object='libepson2_la-epson2-cct.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libepson2_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libepson2_la-epson2-cct.lo `test -f 'epson2-cct.c' || echo '$(srcdir)/'`epson2-cct.c + libfujitsu_la-fujitsu.lo: fujitsu.c @am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libfujitsu_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libfujitsu_la-fujitsu.lo -MD -MP -MF $(DEPDIR)/libfujitsu_la-fujitsu.Tpo -c -o libfujitsu_la-fujitsu.lo `test -f 'fujitsu.c' || echo '$(srcdir)/'`fujitsu.c @am__fastdepCC_TRUE@ mv -f $(DEPDIR)/libfujitsu_la-fujitsu.Tpo $(DEPDIR)/libfujitsu_la-fujitsu.Plo diff --git a/backend/epson2-cct.c b/backend/epson2-cct.c new file mode 100644 index 000000000..b2ac748eb --- /dev/null +++ b/backend/epson2-cct.c @@ -0,0 +1,552 @@ +/* epson2 hardware colour correction coefficients + * Copyright (C) 2001-2009 SEIKO EPSON Corporation + * Copyright (C) 2009 Tower Technologies + * + * License: GPLv2 + * + * This file is part of the SANE epson2 backend and has been derived + * from the epkowa backend distributed with Image Scan! + * + */ + +/*! Hardware colour correction coefficients (CCC). + + Each entry starts with a unique identifier, followed by four CCC + profiles; the first is for reflective materials, the second for + colour negatives, the third for monochrome negatives, and the + fourth and last one is for colour positives. +*/ + +#define DEBUG_DECLARE_ONLY + +#include "epson2.h" + +const struct epson_profile epson_cct_profiles[] = { + {0x00, /* default */ + {{1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x05, /* ES-6000H */ + {{1.1419,-0.0596,-0.0825,-0.1234, 1.2812,-0.1413, 0.0703,-0.5720, 1.5016}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1419,-0.0596,-0.0825,-0.1234, 1.2812,-0.1413, 0.0703,-0.5720, 1.5016}}}, + {0x06, /* GT-6600 */ + {{1.1442,-0.0705,-0.0737,-0.0702, 1.1013,-0.0311,-0.0080,-0.3588, 1.3668}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x07, /* GT-7600 */ + {{1.1967,-0.1379,-0.0588,-0.0538, 1.0385, 0.0153, 0.0348,-0.4070, 1.3721}, + {1.0010,-0.0010, 0.0000,-0.1120, 1.1710,-0.0590, 0.0000,-0.0910, 1.0920}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1967,-0.1379,-0.0588,-0.0538, 1.0385, 0.0153, 0.0348,-0.4070, 1.3721}}}, + {0x0D, /* ES-2000 */ + {{1.1980,-0.1365,-0.0616,-0.1530, 1.1729,-0.0198,-0.0025,-0.2776, 1.2801}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1980,-0.1365,-0.0616,-0.1530, 1.1729,-0.0198,-0.0025,-0.2776, 1.2801}}}, + {0x0F, /* ES-8500 */ + {{1.0961,-0.0181,-0.0779,-0.1279, 1.1957,-0.0678, 0.0315,-0.3891, 1.3576}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0961,-0.0181,-0.0779,-0.1279, 1.1957,-0.0678, 0.0315,-0.3891, 1.3576}}}, + {0x15, /* GT-6700 */ + {{1.0999,-0.0425,-0.0574,-0.0806, 1.0835,-0.0028, 0.0057,-0.2924, 1.2866}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x16, /* GT-8700 */ + {{1.2020,-0.1518,-0.0502,-0.0847, 1.1385,-0.0538, 0.0059,-0.3255, 1.3196}, + {1.0030,-0.0030, 0.0000,-0.0980, 1.1500,-0.0520,-0.0030,-0.0840, 1.0880}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2456,-0.1617,-0.0839,-0.1160, 1.1862,-0.0702,-0.0036,-0.3438, 1.3473}}}, + {0x18, /* GT-7700 */ + {{1.1339,-0.0526,-0.0813,-0.1177, 1.1661,-0.0485,-0.0030,-0.3298, 1.3328}, + {1.0010,-0.0010, 0.0000,-0.1120, 1.1710,-0.0590, 0.0000,-0.0910, 1.0920}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2066,-0.0360,-0.1706,-0.1313, 1.2523,-0.1210,-0.0299,-0.3377, 1.3676}}}, + {0x1A, /* ES-9000H */ + {{1.0986, 0.0235,-0.1221,-0.1294, 1.0896, 0.0399, 0.0928,-0.6043, 1.5115}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x1B, /* ES-2200 */ + {{1.1855,-0.1372,-0.0483,-0.2060, 1.2468,-0.0407, 0.0358,-0.3059, 1.2701}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1976,-0.1182,-0.0794,-0.1578, 1.2720,-0.1142, 0.0122,-0.3467, 1.3345}}}, + {0x1D, /* GT-7200 */ + {{1.0675,-0.0586,-0.0088,-0.0332, 0.9716, 0.0616, 0.0175,-0.4054, 1.3879}, + {1.0090,-0.0090, 0.0000,-0.0390, 1.0750,-0.0360,-0.0070,-0.1060, 1.1130}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1394,-0.0829,-0.0564,-0.0003, 1.0008,-0.0004,-0.0059,-0.3674, 1.3733}}}, + {0x1F, /* GT-8200 */ + {{1.0800,-0.0607,-0.0193,-0.0787, 1.0846,-0.0059, 0.0135,-0.3334, 1.3199}, + {1.0040,-0.0040, 0.0000,-0.0780, 1.1360,-0.0570,-0.0020,-0.0810, 1.0830}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1334,-0.0929,-0.0405,-0.0418, 1.0689,-0.0271,-0.0521,-0.3262, 1.3783}}}, + {0x21, /* GT-9700 */ + {{1.0919,-0.0739,-0.0180,-0.0941, 1.1150,-0.0209, 0.0220,-0.3744, 1.3524}, + {1.0090,-0.0100, 0.0010,-0.0720, 1.1310,-0.0600, 0.0000,-0.1000, 1.1000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1374,-0.1396, 0.0021,-0.0489, 1.0655,-0.0166, 0.0081,-0.3492, 1.3411}}}, + {0x23, /* GT-7300 */ + {{1.0339,-0.0166,-0.0173,-0.0117, 0.9797, 0.0319, 0.0010,-0.3609, 1.3599}, + {1.0090,-0.0090, 0.0000,-0.0390, 1.0750,-0.0360,-0.0070,-0.1060, 1.1130}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1666,-0.0898,-0.0768,-0.0076, 1.0157,-0.0081, 0.0012,-0.3048, 1.3036}}}, + {0x25, /* GT-8300 */ + {{1.0800,-0.0607,-0.0193,-0.0787, 1.0846,-0.0059, 0.0135,-0.3334, 1.3199}, + {1.0040,-0.0040, 0.0000,-0.0780, 1.1360,-0.0570,-0.0020,-0.0810, 1.0830}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1334,-0.0929,-0.0405,-0.0418, 1.0689,-0.0271,-0.0521,-0.3262, 1.3783}}}, + {0x27, /* GT-9300 */ + {{1.0919,-0.0739,-0.0180,-0.0941, 1.1150,-0.0209, 0.0220,-0.3744, 1.3524}, + {1.0083,-0.0094, 0.0011,-0.0760, 1.1379,-0.0619,-0.0002,-0.0945, 1.0947}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1952,-0.1519,-0.0433,-0.0932, 1.1613,-0.0681,-0.0418,-0.3140, 1.3558}}}, + {0x29, /* GT-9800F */ + {{1.0369,-0.0210,-0.0160,-0.0820, 1.1160,-0.0341, 0.0150,-0.5035, 1.4885}, + {1.0122,-0.0151, 0.0029,-0.0861, 1.1402,-0.0542,-0.0061,-0.1607, 1.1669}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1764,-0.1749,-0.0014,-0.0590, 1.0983,-0.0393, 0.0208,-0.5194, 1.4986}}}, + {0x2B, /* ES-7000H */ + {{1.0305,-0.0116,-0.0189,-0.0936, 1.1245,-0.0309,-0.0072,-0.1413, 1.1485}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x32, /* GT-9400 */ + {{1.0932,-0.0529,-0.0403,-0.1077, 1.1416,-0.0338, 0.0079,-0.5525, 1.5446}, + {1.0259,-0.0356, 0.0097,-0.1085, 1.2225,-0.1140,-0.0046,-0.1848, 1.1894}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2720,-0.2665,-0.0054,-0.0672, 1.1301,-0.0629,-0.0048,-0.3917, 1.3965}}}, + {0x2D, /* CC-600PX */ + {{1.0436,-0.0078,-0.0359,-0.0169, 1.0114, 0.0056, 0.0308,-0.4425, 1.4117}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x3A, /* PM-A850 */ + {{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806}, + {1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}}, + {0x36, /* CX5300/CX5400 */ + {{1.0848,-0.0153,-0.0695,-0.0902, 1.0611, 0.0291, 0.0344,-0.5002, 1.4658}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x34, /* GT-X700 */ + {{1.1032,-0.0590,-0.0442,-0.1915, 1.3371,-0.1456, 0.0387,-0.5804, 1.5417}, + {1.0232,-0.0258, 0.0026,-0.1296, 1.2882,-0.1587,-0.0011,-0.1928, 1.1940}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2662,-0.2664, 0.0002,-0.1050, 1.3168,-0.2118,-0.0058,-0.4370, 1.4428}}}, + {0x38, /* RX500/RX510 */ + {{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806}, + {1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}}, + {0x37, /* CX6300/CX6400 */ + {{0.9640, 0.1455,-0.1095, 0.0108, 1.1933,-0.2041, 0.0071,-0.3487, 1.3416}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x3F, /* ES-10000G */ + {{1.1223,-0.0985,-0.0238,-0.0847, 1.1502,-0.0655, 0.0118,-0.5022, 1.4904}, + {1.0077,-0.0129, 0.0052,-0.0904, 1.1785,-0.0881, 0.0000,-0.1528, 1.1528}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1927,-0.1646,-0.0280,-0.0655, 1.1033,-0.0378, 0.0034,-0.4173, 1.4139}}}, + {0x41, /* GT-F500/F550 */ + {{1.0732,-0.0581,-0.0150,-0.0897, 1.1553,-0.0657,-0.0179,-0.6500, 1.6679}, + {1.0163,-0.0203, 0.0040,-0.1125, 1.1797,-0.0672,-0.0091,-0.2343, 1.2434}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2437,-0.2022,-0.0415,-0.0352, 1.0735,-0.0383,-0.0188,-0.5020, 1.5209}}}, + {0x43, /* GT-F600 */ + {{1.0782,-0.0697,-0.0085,-0.1605, 1.2862,-0.1257, 0.0148,-0.5854, 1.5706}, + {1.0136,-0.0151, 0.0016,-0.1836, 1.3422,-0.1586,-0.0014,-0.1851, 1.1865}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1491,-0.1456,-0.0035,-0.0990, 1.2657,-0.1666, 0.0015,-0.3868, 1.3853}}}, + {0x46, /* CX3500/CX3600/CX4500/CX4600 */ + {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x48, /* PM-A700/RX420/RX430 */ + {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x49, /* CX6500/CX6600 */ + {{0.9640, 0.1455,-0.1095, 0.0108, 1.1933,-0.2041, 0.0071,-0.3487, 1.3416}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x4B, /* PM-A870 */ + {{1.1150,-0.0677,-0.0473,-0.1179, 1.1681,-0.0502, 0.0052,-0.4858, 1.4806}, + {1.0133,-0.0151, 0.0017,-0.1216, 1.2207,-0.0991,-0.0003,-0.1512, 1.1515}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2105,-0.1644,-0.0461,-0.1124, 1.1945,-0.0820,-0.0450,-0.3367, 1.3817}}}, + {0x4D, /* PM-A900 */ + {{1.1011,-0.0824,-0.0186,-0.0970, 1.1991,-0.1021,-0.0161,-0.6247, 1.6408}, + {1.0259,-0.0356, 0.0097,-0.1085, 1.2225,-0.1140,-0.0046,-0.1848, 1.1894}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2150,-0.2074,-0.0076,-0.0521, 1.1430,-0.0909,-0.0204,-0.4156, 1.4360}}}, + {0x4F, /* GT-X800 */ + {{1.1052,-0.0850,-0.0202,-0.1050, 1.2294,-0.1245,-0.0486,-0.4160, 1.4646}, + {1.0255,-0.0272, 0.0017,-0.0919, 1.2098,-0.1180,-0.0021,-0.1296, 1.1317}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2950,-0.2619,-0.0332,-0.0562, 1.1587,-0.1025,-0.0397,-0.3100, 1.3497}}}, + {0x51, /* LP-A500 */ + {{1.0614,-0.0361,-0.0253,-0.1081, 1.1320,-0.0240,-0.0536,-0.2045, 1.2580}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x52, /* GT-F520/F570 */ + {{1.0978,-0.0806,-0.0173,-0.0802, 1.1515,-0.0713,-0.0476,-0.4656, 1.5132}, + {1.0192,-0.0192, 0.0000,-0.0974, 1.1846,-0.0872,-0.0031,-0.1797, 1.1828}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2490,-0.2030,-0.0460,-0.0469, 1.1046,-0.0577,-0.0361,-0.3857, 1.4217}}}, + {0x54, /* GT-X750 */ + {{1.0905,-0.0654,-0.0251,-0.1030, 1.1801,-0.0771,-0.0685,-0.4238, 1.4923}, + {1.0206,-0.0207, 0.0000,-0.0890, 1.1770,-0.0880,-0.0014,-0.1450, 1.1464}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.3041,-0.2907,-0.0134,-0.0383, 1.0908,-0.0525,-0.0327,-0.2947, 1.3275}}}, + {0x56, /* LP-M5500 */ + {{1.0784,-0.0560,-0.0224,-0.1793, 1.2234,-0.0441,-0.0041,-0.2636, 1.2677}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x57, /* Stylus CX3700/CX3800/DX3800 */ + {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x58, /* PX-A650/Stylus CX4700/CX4800/DX4800 */ + {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x59, /* Stylus CX4100/CX4200/DX4200 */ + {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x5B, /* Stylus CX7700/CX7800 */ + {{0.9764, 0.1095,-0.0859, 0.0149, 1.1154,-0.1303, 0.0051,-0.2851, 1.2800}, + {1.0024,-0.0149, 0.0124,-0.2569, 1.3432,-0.0864,-0.0043,-0.1306, 1.1349}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1003,-0.0493,-0.0510,-0.1607, 1.2748,-0.1142,-0.0059,-0.3161, 1.3220}}}, + {0x5D, /* Stylus Photo RX520/RX530 */ + {{0.9764, 0.1095,-0.0859, 0.0149, 1.1154,-0.1303, 0.0051,-0.2851, 1.2800}, + {1.0024,-0.0149, 0.0124,-0.2569, 1.3432,-0.0864,-0.0043,-0.1306, 1.1349}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.1003,-0.0493,-0.0510,-0.1607, 1.2748,-0.1142,-0.0059,-0.3161, 1.3220}}}, + {0x5F, /* Stylus Photo RX640/RX650 */ + {{1.0697,-0.0561,-0.0137,-0.0824, 1.1291,-0.0467,-0.0390,-0.5218, 1.5608}, + {1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2606,-0.2125,-0.0482,-0.0567, 1.1441,-0.0874,-0.0431,-0.3490, 1.3921}}}, + {0x61, /* PM-A950 */ + {{1.0921,-0.0722,-0.0199,-0.0831, 1.1550,-0.0718,-0.0452,-0.3721, 1.4173}, + {1.0168,-0.0168, 0.0000,-0.0953, 1.1928,-0.0975,-0.0012,-0.1235, 1.1247}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2603,-0.2763, 0.0155,-0.0398, 1.1033,-0.0635,-0.0249,-0.2675, 1.2924}}}, + {0x63, /* GT-X900 */ + {{1.0976,-0.0789,-0.0187,-0.0958, 1.1821,-0.0863,-0.0565,-0.4179, 1.4744}, + {1.0250,-0.0267, 0.0016,-0.0930, 1.2108,-0.1178,-0.0022,-0.1296, 1.1317}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.3111,-0.2979,-0.0132,-0.0441, 1.1148,-0.0707,-0.0348,-0.2971, 1.3319}}}, + {0x65, /* ES-H300 */ + {{1.0359,-0.0146,-0.0213,-0.0752, 1.0963,-0.0211,-0.0456,-0.3238, 1.3693}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x66, /* GT-S600/F650, Perfection V10/V100 */ + {{1.0878,-0.0667,-0.0211,-0.0892, 1.1513,-0.0622,-0.0654,-0.5175, 1.5829}, + {1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2688,-0.2522,-0.0166,-0.0559, 1.1291,-0.0733,-0.0377,-0.3519, 1.3896}}}, + {0x68, /* GT-F700, Perfection V350 */ + {{1.0950,-0.0646,-0.0305,-0.0792, 1.1398,-0.0606,-0.0123,-0.5175, 1.5298}, + {1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2697,-0.2501,-0.0195,-0.0351, 1.1236,-0.0885,-0.0131,-0.3268, 1.3400}}}, + {0x6A, /* Stylus CX2800/CX2900/ME200 */ + {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x6B, /* Stylus PX-A620, CX3900/DX4000 */ + {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x6C, /* Stylus CX5900/CX6000/DX6000 */ + {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x70, /* Stylus Photo RX560/RX580/RX590 */ + {{0.9533, 0.0885,-0.0418, 0.0033, 1.0627,-0.0660,-0.0137,-0.1904, 1.2041}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x71, /* PM-A920 */ + {{1.0697,-0.0561,-0.0137,-0.0824, 1.1291,-0.0467,-0.0390,-0.5218, 1.5608}, + {1.0208,-0.0209, 0.0000,-0.0923, 1.2017,-0.1093,-0.0020,-0.1290, 1.1310}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2606,-0.2125,-0.0482,-0.0567, 1.1441,-0.0874,-0.0431,-0.3490, 1.3921}}}, + {0x73, /* PM-A970 */ + {{1.0828,-0.0739,-0.0089,-0.0895, 1.1597,-0.0702,-0.0531,-0.4291, 1.4822}, + {1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2579,-0.2384,-0.0195,-0.0569, 1.1454,-0.0884,-0.0411,-0.3072, 1.3483}}}, + {0x75, /* PM-T990 */ + {{1.0828,-0.0739,-0.0089,-0.0895, 1.1597,-0.0702,-0.0531,-0.4291, 1.4822}, + {1.0258,-0.0306, 0.0048,-0.0995, 1.2173,-0.1178,-0.0054,-0.1242, 1.1296}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.2579,-0.2384,-0.0195,-0.0569, 1.1454,-0.0884,-0.0411,-0.3072, 1.3483}}}, + {0x77, /* Stylus CX4900/CX5000/DX5000 */ + {{0.9716, 0.0927,-0.0643, 0.0010, 1.1068,-0.1078, 0.0101,-0.3046, 1.2945}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x78, /* LP-M5600 */ + {{1.0784,-0.0560,-0.0224,-0.1793, 1.2234,-0.0441,-0.0041,-0.2636, 1.2677}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x79, /* AcuLaser CX21 */ + {{1.0614,-0.0361,-0.0253,-0.1081, 1.1320,-0.0240,-0.0536,-0.2045, 1.2580}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x7A, /* GT-F670, Perfection V200 */ + {{1.1754,-0.1173,-0.0580,-0.0687, 1.1307,-0.0620,-0.0255,-0.4699, 1.4954}, + {1.0150,-0.0173, 0.0022,-0.0853, 1.2238,-0.1384,-0.0073,-0.1490, 1.1562}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.4283,-0.4335, 0.0052,-0.0170, 1.1308,-0.1138,-0.0147,-0.2230, 1.2377}}}, + {0x7C, /* GT-X770, Perfection V500 */ + {{1.2470,-0.2041,-0.0429,-0.1920, 1.2918,-0.0998,-0.0100,-0.2503, 1.2603}, + {1.0050,-0.0076, 0.0026,-0.2532, 1.1289, 0.1243,-0.0733,-0.0960, 1.1693}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.4724,-0.4599,-0.0125,-0.0876, 1.1562,-0.0686,-0.0097,-0.2278, 1.2375}}}, + {0x7E, /* Stylus CX4300/CX4400/CX5500/CX5600/DX4400 */ + {{0.9828, 0.0924,-0.0752, 0.0255, 1.1510,-0.1765, 0.0049,-0.3250, 1.3201}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x7F, /* PX-A640, Stylus CX7300/CX7400/DX7400 */ + {{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x80, /* PX-A740, Stylus CX8300/CX8400/DX8400 */ + {{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x81, /* PX-FA700, Stylus CX9300F/CX9400Fax/DX9400F */ + {{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x82, /* PM-T960 */ + {{1.1622,-0.1102,-0.0519,-0.0717, 1.1060,-0.0343,-0.0248,-0.4138, 1.4385}, + {0.9913, 0.0082, 0.0005,-0.1259, 1.0452, 0.0807,-0.0072,-0.0767, 1.0839}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.3900,-0.3008,-0.0892,-0.0254, 1.0890,-0.0636,-0.0300,-0.2501, 1.2801}}}, + {0x84, /* PM-A940, Stylus Photo RX680/RX685/RX690 */ + {{1.0934,-0.0042,-0.0892, 0.0052, 1.1019,-0.1071, 0.0259,-0.2651, 1.2392}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x85, /* PM-A840/A840S, Stylus Photo RX585/RX595/RX610 */ + {{1.0534, 0.0399,-0.0934, 0.0098, 1.0589,-0.0687, 0.0016,-0.1131, 1.1115}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x86, /* GT-D1000, GT-1500 */ + {{1.1945,-0.1413,-0.0532,-0.1929, 1.2525,-0.0596,-0.0235,-0.2761, 1.2996}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x87, /* GT-X970 */ + {{1.1978,-0.1417,-0.0561,-0.0852, 1.1610,-0.0758,-0.0395,-0.3212, 1.3607}, + {1.0000, 0.0009,-0.0009,-0.1268, 1.0523, 0.0745,-0.0075,-0.0873, 1.0948}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.4475,-0.3957,-0.0518,-0.0138, 1.0644,-0.0506,-0.0199,-0.2050, 1.2249}}}, + {0x97, /* LP-M5000 */ + {{1.1115,-0.0377,-0.0738,-0.0658, 1.0624, 0.0034, 0.0042,-0.2883, 1.2841}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x89, /* LP-M6000 */ + {{1.1115,-0.0377,-0.0738,-0.0658, 1.0624, 0.0034, 0.0042,-0.2883, 1.2841}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x8A, /* ES-H7200, GT-20000 */ + {{1.1221,-0.0396,-0.0825,-0.0718, 1.0822,-0.0104, 0.0112,-0.2995, 1.2883}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x8B, /* GT-F720/S620, Perfection V30/V300 */ + {{1.2402,-0.1891,-0.0511,-0.1535, 1.2008,-0.0473,-0.0316,-0.3293, 1.3609}, + {1.0027,-0.0048, 0.0021,-0.2067, 1.0878, 0.1189,-0.0408,-0.0767, 1.1175}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.4524,-0.4346,-0.0178,-0.0601, 1.1273,-0.0672,-0.0173,-0.1823, 1.1996}}}, + {0x8D, /* Stylus NX200/SX200/TX200 */ + {{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x8E, /* PX-501A, Stylus NX400/SX400/TX400 */ + {{1.0936,-0.0142,-0.0795,-0.0001, 1.0951,-0.0949, 0.0308,-0.2967, 1.2659}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x8F, /* Stylus NX300 / Stylus Office BX300F/TX300F / ME Office 600F */ + {{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x90, /* PX-601F, Stylus SX600FW/TX600FW / Stylus Office BX600FW / WorkForce 600 */ + {{1.0316, 0.0864,-0.1180, 0.0268, 1.1111,-0.1379, 0.0213,-0.2235, 1.2022}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x91, /* EP-901A/901F, Artisan 800 / Stylus Photo PX800FW/FX800FW */ + {{1.0777, 0.0152,-0.0929, 0.0244, 1.1221,-0.1465, 0.0103,-0.1544, 1.1441}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x92, /* EP-801A, Artisan 700 / Stylus Photo PX700W/TX700W */ + {{1.0777, 0.0152,-0.0929, 0.0244, 1.1221,-0.1465, 0.0103,-0.1544, 1.1441}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x93, /* PX-401A, Stylus NX100/SX100/TX100 / ME 300 */ + {{1.0934,-0.0042,-0.0892, 0.0052, 1.1019,-0.1071, 0.0259,-0.2651, 1.2392}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + {0x96, /* WorkForce 500 */ + {{1.1090,-0.0304,-0.0786, 0.0194, 1.1078,-0.1272,-0.0077,-0.1293, 1.1370}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}, + {1.0000, 0.0000, 0.0000, 0.0000, 1.0000, 0.0000, 0.0000, 0.0000, 1.0000}}}, + + { 0xFF, { } } /* terminator */ +}; + +const struct epson_profile_map epson_cct_models[] = { + {"GT-10000", 0x05 }, + {"ES-6000", 0x05 }, + {"Perfection610", 0x06 }, + {"GT-6600", 0x06A }, + {"Perfection1200", 0x07 }, + {"GT-7600", 0x07 }, + {"Expression1600", 0x0D }, + {"ES-2000", 0x0D }, + {"Expression1640XL", 0x0F }, + {"ES-8500", 0x0F }, + {"Perfection640", 0x15 }, + {"GT-6700", 0x15 }, + {"Perfection1640", 0x16 }, + {"GT-8700", 0x16 }, + {"Perfection1240", 0x18 }, + {"GT-7700", 0x18 }, + {"GT-30000", 0x1A }, + {"ES-9000H", 0x1A }, + {"Expression1680", 0x1B }, + {"ES-2200", 0x1B }, + {"GT-7200", 0x1D }, + {"GT-8200", 0x1F }, + {"GT-9700", 0x21 }, + {"GT-7300", 0x23 }, + {"GT-8300", 0x25 }, + {"GT-9300", 0x27 }, + {"GT-9800", 0x29 }, + {"ES-7000H", 0x2B }, + {"LP-A500", 0x51 }, + {"AL-CX11", 0x51 }, + {"GT-9400", 0x32 }, + {"CC-600PX", 0x2D }, + {"PM-A850", 0x3A }, + {"CX5400", 0x36 }, + {"GT-X700", 0x34 }, + {"RX500", 0x38 }, + {"PX-A650", 0x37 }, + {"ES-10000G", 0x3F }, + {"Expression10000", 0x3F }, + {"CX4600", 0x46 }, + {"CX6600", 0x49 }, + {"CX3600", 0x46 }, + {"RX420", 0x48 }, + {"PM-A700", 0x48 }, + {"PM-A870", 0x4B }, + {"GT-F500", 0x41 }, + {"GT-F600", 0x43 }, + {"PM-A900", 0x4D }, + {"GT-X800", 0x4F }, + {"GT-X750", 0x54 }, + {"LP-M5500", 0x56 }, + {"LP-M5600", 0x78 }, + {"GT-F520", 0x52 }, + {"CX3800", 0x57 }, + {"CX7800", 0x5B }, + {"PM-A750", 0x5D }, + {"CX4800", 0x58 }, + {"CX4200", 0x59 }, + {"PM-A950", 0x61 }, + {"PM-A890", 0x5F }, + {"GT-X900", 0x63 }, + {"CX4000", 0x6B }, + {"CX3000v", 0x6A }, + {"ES-H300", 0x65 }, + {"CX6000", 0x6C }, + {"PM-A820", 0x70 }, + {"PM-A920", 0x71 }, + {"PM-A970", 0x73 }, + {"PM-T990", 0x75 }, + {"CX5000", 0x77 }, + {"GT-S600", 0x66 }, + {"GT-F700", 0x68 }, + {"AL-CX21", 0x79 }, + {"GT-F670", 0x7A }, + {"GT-X770", 0x7C }, + {"CX4400", 0x7E }, + {"CX7400", 0x7F }, + {"CX8400", 0x80 }, + {"CX9400Fax", 0x81 }, + {"PM-T960", 0x82 }, + {"PM-A940", 0x84 }, + {"PM-A840", 0x85 }, + {"GT-D1000", 0x86 }, + {"GT-X970", 0x87 }, + {"LP-M5000", 0x97 }, + {"LP-M6000", 0x89 }, + {"ES-H7200", 0x8A }, + {"GT-20000", 0x8A }, + {"NX200", 0x8D }, + {"NX400", 0x8E }, + {"NX100", 0x93 }, + {"NX300", 0x8F }, + {"WorkForce 600", 0x90 }, + {"Artisan 800", 0x91 }, + {"Artisan 700", 0x92 }, + {"WorkForce 500", 0x96 }, + {"GT-F720", 0x8B }, + {"GT-S620", 0x8B }, + {"GT-S50", 0x00 }, + {"GT-S80", 0x00 }, + {"PID 0851", 0x98 }, + {"PID 084D", 0x99 }, + {"PID 084F", 0x9A }, + {"PID 0854", 0x9B }, + {"PID 0856", 0x9C }, + + { } /* terminator */ +}; diff --git a/backend/epson2-commands.c b/backend/epson2-commands.c index a67bdadab..f2a1a01ce 100644 --- a/backend/epson2-commands.c +++ b/backend/epson2-commands.c @@ -20,6 +20,7 @@ #include "sane/config.h" #include +#include #include "epson2.h" #include "epson2-io.h" @@ -125,17 +126,158 @@ esci_set_scan_area(Epson_Scanner * s, int x, int y, int width, int height) return e2_cmd_simple(s, params, 8); } +static int +get_roundup_index(double frac[], int n) +{ + int i, index = -1; + double max_val = 0.0; + + for (i = 0; i < n; i++) { + + if (frac[i] < 0) + continue; + + if (max_val < frac[i]) { + index = i; + max_val = frac[i]; + } + } + + return index; +} + +static int +get_rounddown_index(double frac[], int n) +{ + int i, index = -1; + double min_val = 1.0; + + for (i = 0; i < n; i++) { + + if (frac[i] > 0) + continue; + + if (min_val > frac[i]) { + index = i; + min_val = frac[i]; + } + } + + return index; +} + +static unsigned char +int2cpt(int val) +{ + if (val >= 0) { + + if (val > 127) + val = 127; + + return (unsigned char) val; + + } else { + + val = -val; + + if (val > 127) + val = 127; + + return (unsigned char) (0x80 | val); + } +} + +static void +round_cct(double org_cct[], int rnd_cct[]) +{ + int loop = 0; + int i, j, sum[3]; + double mult_cct[9], frac[9]; + + for (i = 0; i < 9; i++) { + mult_cct[i] = org_cct[i] * 32; + rnd_cct[i] = (int) floor(mult_cct[i] + 0.5); + } + + do { + for (i = 0; i < 3; i++) { + + int k = i * 3; + + if ((rnd_cct[k] == 11) && + (rnd_cct[k] == rnd_cct[k + 1]) && + (rnd_cct[k] == rnd_cct[k + 2])) { + + rnd_cct[k + i]--; + mult_cct[k + i] = rnd_cct[k + i]; + } + } + + for (i = 0; i < 3; i++) { + + int k = i * 3; + + for (sum[i] = j = 0; j < 3; j++) + sum[i] += rnd_cct[k + j]; + } + + for (i = 0; i < 9; i++) + frac[i] = mult_cct[i] - rnd_cct[i]; + + for (i = 0; i < 3; i++) { + + int k = i * 3; + + if (sum[i] < 32) { + + int index = get_roundup_index(&frac[k], 3); + if (index != -1) { + rnd_cct[k + index]++; + mult_cct[k + index] = rnd_cct[k + index]; + sum[i]++; + } + + } else if (sum[i] > 32) { + + int index = get_rounddown_index(&frac[k], 3); + if (index != -1) { + rnd_cct[k + index]--; + mult_cct[k + index] = rnd_cct[k + index]; + sum[i]--; + } + } + } + } + + while ((++loop < 2) + && ((sum[0] != 32) || (sum[1] != 32) || (sum[2] != 32))); +} + +static void +profile_to_colorcoeff(double *profile, unsigned char *color_coeff) +{ + int cc_idx[] = { 4, 1, 7, 3, 0, 6, 5, 2, 8 }; + int i, color_table[9]; + + round_cct(profile, color_table); + + for (i = 0; i < 9; i++) + color_coeff[i] = int2cpt(color_table[cc_idx[i]]); +} + + /* * Sends the "set color correction coefficients" command with the * currently selected parameters to the scanner. */ SANE_Status -esci_set_color_correction_coefficients(Epson_Scanner * s) +esci_set_color_correction_coefficients(Epson_Scanner * s, SANE_Word *table) { SANE_Status status; unsigned char params[2]; - signed char cct[9]; + unsigned char data[9]; + double cct[9]; DBG(8, "%s\n", __func__); if (!s->hw->cmd->set_color_correction_coefficients) { @@ -150,21 +292,23 @@ esci_set_color_correction_coefficients(Epson_Scanner * s) if (status != SANE_STATUS_GOOD) return status; - cct[0] = s->val[OPT_CCT_1].w; - cct[1] = s->val[OPT_CCT_2].w; - cct[2] = s->val[OPT_CCT_3].w; - cct[3] = s->val[OPT_CCT_4].w; - cct[4] = s->val[OPT_CCT_5].w; - cct[5] = s->val[OPT_CCT_6].w; - cct[6] = s->val[OPT_CCT_7].w; - cct[7] = s->val[OPT_CCT_8].w; - cct[8] = s->val[OPT_CCT_9].w; + cct[0] = SANE_UNFIX(table[0]); + cct[1] = SANE_UNFIX(table[1]); + cct[2] = SANE_UNFIX(table[2]); + cct[3] = SANE_UNFIX(table[3]); + cct[4] = SANE_UNFIX(table[4]); + cct[5] = SANE_UNFIX(table[5]); + cct[6] = SANE_UNFIX(table[6]); + cct[7] = SANE_UNFIX(table[7]); + cct[8] = SANE_UNFIX(table[8]); + + profile_to_colorcoeff(cct, data); DBG(11, "%s: %d,%d,%d %d,%d,%d %d,%d,%d\n", __func__, - cct[0], cct[1], cct[2], cct[3], - cct[4], cct[5], cct[6], cct[7], cct[8]); + data[0] , data[1], data[2], data[3], + data[4], data[5], data[6], data[7], data[8]); - return e2_cmd_simple(s, params, 9); + return e2_cmd_simple(s, data, 9); } SANE_Status diff --git a/backend/epson2-commands.h b/backend/epson2-commands.h index 934565373..575a6e657 100644 --- a/backend/epson2-commands.h +++ b/backend/epson2-commands.h @@ -39,7 +39,7 @@ SANE_Status esci_set_zoom(Epson_Scanner * s, unsigned char x, unsigned char y); SANE_Status esci_set_resolution(Epson_Scanner * s, int x, int y); SANE_Status esci_set_scan_area(Epson_Scanner * s, int x, int y, int width, int height); -SANE_Status esci_set_color_correction_coefficients(Epson_Scanner * s); +SANE_Status esci_set_color_correction_coefficients(Epson_Scanner * s, SANE_Word *table); SANE_Status esci_set_gamma_table(Epson_Scanner * s); SANE_Status esci_request_status(SANE_Handle handle, unsigned char *scanner_status); diff --git a/backend/epson2-ops.c b/backend/epson2-ops.c index 64460c555..113bd9933 100644 --- a/backend/epson2-ops.c +++ b/backend/epson2-ops.c @@ -128,17 +128,15 @@ static const int dropout_params[] = { * and one array to mark the user defined color correction (color_userdefined[]). */ static const int color_params[] = { - 0x00, - 0x01, + 0x00, /* None */ + 0x01, /* Auto */ + 0x01, /* User defined */ 0x10, 0x20, 0x40, 0x80 }; -static const SANE_Range outline_emphasis_range = { -2, 2, 0 }; - - void e2_dev_init(Epson_Device *dev, const char *devname, int conntype) { @@ -146,6 +144,8 @@ e2_dev_init(Epson_Device *dev, const char *devname, int conntype) dev->model = NULL; dev->connection = conntype; + dev->model_id = 0; + dev->sane.name = devname; dev->sane.model = NULL; @@ -160,6 +160,8 @@ e2_dev_init(Epson_Device *dev, const char *devname, int conntype) dev->need_color_reorder = SANE_FALSE; dev->need_double_vertical = SANE_FALSE; + dev->cct_profile = &epson_cct_profiles[0]; /* default profile */ + dev->cmd = &epson_cmd[EPSON_LEVEL_DEFAULT]; /* Change default level when using a network connection */ @@ -176,6 +178,26 @@ e2_dev_init(Epson_Device *dev, const char *devname, int conntype) SANE_Status e2_dev_post_init(struct Epson_Device *dev) { + int i; + + /* find cct model id */ + for (i = 0; epson_cct_models[i].name != NULL; i++) { + if (strcmp(epson_cct_models[i].name, dev->model) == 0) { + dev->model_id = epson_cct_models[i].id; + break; + } + } + + /* find cct profile */ + for (i = 0; epson_cct_profiles[i].model != 0xFF; i++) { + if (epson_cct_profiles[i].model == dev->model_id) { + dev->cct_profile = &epson_cct_profiles[i]; + break; + } + } + + DBG(1, "CCT model id is 0x%02x, profile offset %d\n", dev->model_id, i); + /* If we have been unable to obtain supported resolutions * due to the fact we are on the network transport, * add some convenient ones diff --git a/backend/epson2.c b/backend/epson2.c index a5a96beb8..c1c5ef199 100644 --- a/backend/epson2.c +++ b/backend/epson2.c @@ -197,6 +197,7 @@ static const SANE_String_Const dropout_list[] = { static const SANE_Bool color_userdefined[] = { SANE_FALSE, SANE_TRUE, + SANE_TRUE, SANE_FALSE, SANE_FALSE, SANE_FALSE, @@ -204,7 +205,8 @@ static const SANE_Bool color_userdefined[] = { }; static const SANE_String_Const color_list[] = { - SANE_I18N("No Correction"), + SANE_I18N("None"), + SANE_I18N("Automatic"), SANE_I18N("User defined"), SANE_I18N("Impact-dot printers"), SANE_I18N("Thermal printers"), @@ -213,6 +215,21 @@ static const SANE_String_Const color_list[] = { NULL }; +/* cct profile has precedence over normal color correction */ +static const SANE_String_Const cct_mode_list[] = { + "Automatic", + "Reflective", + "Colour negatives", + "Monochrome negatives", + "Colour positives", + NULL +}; + +enum { + CCT_AUTO, CCT_REFLECTIVE, CCT_COLORNEG, CCT_MONONEG, + CCT_COLORPOS +}; + /* * Gamma correction: * The A and B level scanners work differently than the D level scanners, @@ -282,6 +299,7 @@ static const SANE_String_Const bay_list[] = { /* minimum, maximum, quantization */ static const SANE_Range u8_range = { 0, 255, 0 }; static const SANE_Range s8_range = { -127, 127, 0 }; +static const SANE_Range fx_range = { SANE_FIX(-2.0), SANE_FIX(2.0), 0 }; static const SANE_Range outline_emphasis_range = { -2, 2, 0 }; @@ -924,7 +942,7 @@ init_options(Epson_Scanner *s) { int i; - for (i = 0; i < NUM_OPTIONS; ++i) { + for (i = 0; i < NUM_OPTIONS; i++) { s->opt[i].size = sizeof(SANE_Word); s->opt[i].cap = SANE_CAP_SOFT_SELECT | SANE_CAP_SOFT_DETECT; } @@ -1134,16 +1152,14 @@ init_options(Epson_Scanner *s) s->opt[OPT_COLOR_CORRECTION].name = "color-correction"; s->opt[OPT_COLOR_CORRECTION].title = SANE_I18N("Color correction"); s->opt[OPT_COLOR_CORRECTION].desc = - SANE_I18N - ("Sets the color correction table for the selected output device."); + SANE_I18N("Sets the color correction table for the selected output device."); s->opt[OPT_COLOR_CORRECTION].type = SANE_TYPE_STRING; - s->opt[OPT_COLOR_CORRECTION].size = 32; + s->opt[OPT_COLOR_CORRECTION].size = max_string_size(color_list); s->opt[OPT_COLOR_CORRECTION].cap |= SANE_CAP_ADVANCED; - s->opt[OPT_COLOR_CORRECTION].constraint_type = - SANE_CONSTRAINT_STRING_LIST; + s->opt[OPT_COLOR_CORRECTION].constraint_type = SANE_CONSTRAINT_STRING_LIST; s->opt[OPT_COLOR_CORRECTION].constraint.string_list = color_list; - s->val[OPT_COLOR_CORRECTION].w = 5; /* scanner default: CRT monitors */ + s->val[OPT_COLOR_CORRECTION].w = 0; if (!s->hw->cmd->set_color_correction) s->opt[OPT_COLOR_CORRECTION].cap |= SANE_CAP_INACTIVE; @@ -1173,25 +1189,7 @@ init_options(Epson_Scanner *s) if (!s->hw->cmd->set_threshold) s->opt[OPT_THRESHOLD].cap |= SANE_CAP_INACTIVE; - s->opt[OPT_CCT_GROUP].title = - SANE_I18N("Color correction coefficients"); - s->opt[OPT_CCT_GROUP].desc = - SANE_I18N("Matrix multiplication of RGB"); - s->opt[OPT_CCT_GROUP].type = SANE_TYPE_GROUP; - s->opt[OPT_CCT_GROUP].cap = SANE_CAP_ADVANCED; - - - /* color correction coefficients */ - s->opt[OPT_CCT_1].name = "cct-1"; - s->opt[OPT_CCT_2].name = "cct-2"; - s->opt[OPT_CCT_3].name = "cct-3"; - s->opt[OPT_CCT_4].name = "cct-4"; - s->opt[OPT_CCT_5].name = "cct-5"; - s->opt[OPT_CCT_6].name = "cct-6"; - s->opt[OPT_CCT_7].name = "cct-7"; - s->opt[OPT_CCT_8].name = "cct-8"; - s->opt[OPT_CCT_9].name = "cct-9"; - +/* s->opt[OPT_CCT_1].title = SANE_I18N("Green"); s->opt[OPT_CCT_2].title = SANE_I18N("Shift green to red"); s->opt[OPT_CCT_3].title = SANE_I18N("Shift green to blue"); @@ -1215,72 +1213,44 @@ init_options(Epson_Scanner *s) SANE_I18N("Adds to green based on blue level"); s->opt[OPT_CCT_8].desc = SANE_I18N("Adds to red based on blue level"); s->opt[OPT_CCT_9].desc = SANE_I18N("Controls blue level"); - - s->opt[OPT_CCT_1].type = SANE_TYPE_INT; - s->opt[OPT_CCT_2].type = SANE_TYPE_INT; - s->opt[OPT_CCT_3].type = SANE_TYPE_INT; - s->opt[OPT_CCT_4].type = SANE_TYPE_INT; - s->opt[OPT_CCT_5].type = SANE_TYPE_INT; - s->opt[OPT_CCT_6].type = SANE_TYPE_INT; - s->opt[OPT_CCT_7].type = SANE_TYPE_INT; - s->opt[OPT_CCT_8].type = SANE_TYPE_INT; - s->opt[OPT_CCT_9].type = SANE_TYPE_INT; - - s->opt[OPT_CCT_1].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - s->opt[OPT_CCT_2].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - s->opt[OPT_CCT_3].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - s->opt[OPT_CCT_4].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - s->opt[OPT_CCT_5].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - s->opt[OPT_CCT_6].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - s->opt[OPT_CCT_7].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - s->opt[OPT_CCT_8].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - s->opt[OPT_CCT_9].cap |= SANE_CAP_ADVANCED | SANE_CAP_INACTIVE; - - s->opt[OPT_CCT_1].unit = SANE_UNIT_NONE; - s->opt[OPT_CCT_2].unit = SANE_UNIT_NONE; - s->opt[OPT_CCT_3].unit = SANE_UNIT_NONE; - s->opt[OPT_CCT_4].unit = SANE_UNIT_NONE; - s->opt[OPT_CCT_5].unit = SANE_UNIT_NONE; - s->opt[OPT_CCT_6].unit = SANE_UNIT_NONE; - s->opt[OPT_CCT_7].unit = SANE_UNIT_NONE; - s->opt[OPT_CCT_8].unit = SANE_UNIT_NONE; - s->opt[OPT_CCT_9].unit = SANE_UNIT_NONE; - - s->opt[OPT_CCT_1].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_CCT_2].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_CCT_3].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_CCT_4].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_CCT_5].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_CCT_6].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_CCT_7].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_CCT_8].constraint_type = SANE_CONSTRAINT_RANGE; - s->opt[OPT_CCT_9].constraint_type = SANE_CONSTRAINT_RANGE; - - s->opt[OPT_CCT_1].constraint.range = &s8_range; - s->opt[OPT_CCT_2].constraint.range = &s8_range; - s->opt[OPT_CCT_3].constraint.range = &s8_range; - s->opt[OPT_CCT_4].constraint.range = &s8_range; - s->opt[OPT_CCT_5].constraint.range = &s8_range; - s->opt[OPT_CCT_6].constraint.range = &s8_range; - s->opt[OPT_CCT_7].constraint.range = &s8_range; - s->opt[OPT_CCT_8].constraint.range = &s8_range; - s->opt[OPT_CCT_9].constraint.range = &s8_range; - - s->val[OPT_CCT_1].w = 32; - s->val[OPT_CCT_2].w = 0; - s->val[OPT_CCT_3].w = 0; - s->val[OPT_CCT_4].w = 0; - s->val[OPT_CCT_5].w = 32; - s->val[OPT_CCT_6].w = 0; - s->val[OPT_CCT_7].w = 0; - s->val[OPT_CCT_8].w = 0; - s->val[OPT_CCT_9].w = 32; +*/ /* "Advanced" group: */ s->opt[OPT_ADVANCED_GROUP].title = SANE_I18N("Advanced"); s->opt[OPT_ADVANCED_GROUP].desc = ""; s->opt[OPT_ADVANCED_GROUP].type = SANE_TYPE_GROUP; - s->opt[OPT_ADVANCED_GROUP].cap = SANE_CAP_ADVANCED; + s->opt[OPT_ADVANCED_GROUP].cap |= SANE_CAP_ADVANCED; + + /* "Color correction" group: */ + s->opt[OPT_CCT_GROUP].title = SANE_I18N("Color correction"); + s->opt[OPT_CCT_GROUP].desc = ""; + s->opt[OPT_CCT_GROUP].type = SANE_TYPE_GROUP; + s->opt[OPT_CCT_GROUP].cap |= SANE_CAP_ADVANCED; + + s->opt[OPT_CCT_MODE].name = "cct-mode"; + s->opt[OPT_CCT_MODE].title = "CCT Mode"; + s->opt[OPT_CCT_MODE].desc = "Color correction profile mode"; + s->opt[OPT_CCT_MODE].type = SANE_TYPE_STRING; + s->opt[OPT_CCT_MODE].cap |= SANE_CAP_ADVANCED; + s->opt[OPT_CCT_MODE].size = max_string_size(cct_mode_list); + s->opt[OPT_CCT_MODE].constraint_type = SANE_CONSTRAINT_STRING_LIST; + s->opt[OPT_CCT_MODE].constraint.string_list = cct_mode_list; + s->val[OPT_CCT_MODE].w = CCT_AUTO; + + s->opt[OPT_CCT_PROFILE].name = "cct-profile"; + s->opt[OPT_CCT_PROFILE].title = "CCT Profile"; + s->opt[OPT_CCT_PROFILE].desc = "Color correction profile data"; + s->opt[OPT_CCT_PROFILE].type = SANE_TYPE_FIXED; + s->opt[OPT_CCT_PROFILE].cap |= SANE_CAP_ADVANCED; + s->opt[OPT_CCT_PROFILE].unit = SANE_UNIT_NONE; + s->opt[OPT_CCT_PROFILE].constraint_type = SANE_CONSTRAINT_RANGE; + s->opt[OPT_CCT_PROFILE].constraint.range = &fx_range; + s->opt[OPT_CCT_PROFILE].size = 9 * sizeof(SANE_Word); + s->val[OPT_CCT_PROFILE].wa = s->cct_table; + +/* if (!s->hw->cmd->set_color_correction) + s->opt[OPT_FILM_TYPE].cap |= SANE_CAP_INACTIVE; +*/ /* mirror */ s->opt[OPT_MIRROR].name = "mirror"; @@ -1663,6 +1633,7 @@ getvalue(SANE_Handle handle, SANE_Int option, void *value) case OPT_GAMMA_VECTOR_R: case OPT_GAMMA_VECTOR_G: case OPT_GAMMA_VECTOR_B: + case OPT_CCT_PROFILE: memcpy(value, sval->wa, sopt->size); break; @@ -1678,15 +1649,8 @@ getvalue(SANE_Handle handle, SANE_Int option, void *value) case OPT_BRIGHTNESS: case OPT_SHARPNESS: case OPT_AUTO_EJECT: - case OPT_CCT_1: - case OPT_CCT_2: - case OPT_CCT_3: - case OPT_CCT_4: - case OPT_CCT_5: - case OPT_CCT_6: - case OPT_CCT_7: - case OPT_CCT_8: - case OPT_CCT_9: +/* case OPT_CCT_1: +*/ case OPT_THRESHOLD: case OPT_BIT_DEPTH: case OPT_WAIT_FOR_BUTTON: @@ -1694,6 +1658,7 @@ getvalue(SANE_Handle handle, SANE_Int option, void *value) break; case OPT_MODE: + case OPT_CCT_MODE: case OPT_ADF_MODE: case OPT_HALFTONE: case OPT_DROPOUT: @@ -1865,8 +1830,8 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) Option_Value *sval = &(s->val[option]); SANE_Status status; - const SANE_String_Const *optval; - int optindex; + const SANE_String_Const *optval = NULL; + int optindex = 0; SANE_Bool reload = SANE_FALSE; DBG(17, "%s: option = %d, value = %p\n", __func__, option, value); @@ -1880,13 +1845,9 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) DBG(17, "%s: constrained val = %d\n", __func__, *(SANE_Word *) value); - optval = NULL; - optindex = 0; - if (sopt->constraint_type == SANE_CONSTRAINT_STRING_LIST) { optval = search_string_list(sopt->constraint.string_list, (char *) value); - if (optval == NULL) return SANE_STATUS_INVAL; optindex = optval - sopt->constraint.string_list; @@ -1897,21 +1858,12 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) case OPT_GAMMA_VECTOR_R: case OPT_GAMMA_VECTOR_G: case OPT_GAMMA_VECTOR_B: + case OPT_CCT_PROFILE: memcpy(sval->wa, value, sopt->size); /* Word arrays */ break; - case OPT_CCT_1: - case OPT_CCT_2: - case OPT_CCT_3: - case OPT_CCT_4: - case OPT_CCT_5: - case OPT_CCT_6: - case OPT_CCT_7: - case OPT_CCT_8: - case OPT_CCT_9: - sval->w = *((SANE_Word *) value); /* Simple values */ - break; - + case OPT_CCT_MODE: + case OPT_ADF_MODE: case OPT_DROPOUT: case OPT_FILM_TYPE: case OPT_BAY: @@ -1954,16 +1906,19 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) case OPT_MODE: { SANE_Bool isColor = mode_params[optindex].color; - SANE_Bool userDefined = +/* SANE_Bool userDefined = color_userdefined[s->val[OPT_COLOR_CORRECTION].w]; + SANE_Bool canCCT = isColor && userDefined; */ + sval->w = optindex; + /* halftoning available only on bw scans */ if (s->hw->cmd->set_halftoning != 0) - setOptionState(s, - mode_params[optindex].depth == - 1, OPT_HALFTONE, &reload); + setOptionState(s, mode_params[optindex].depth == 1, + OPT_HALFTONE, &reload); + /* disable dropout on non-color scans */ setOptionState(s, !isColor, OPT_DROPOUT, &reload); if (s->hw->cmd->set_color_correction) @@ -1971,24 +1926,9 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) OPT_COLOR_CORRECTION, &reload); if (s->hw->cmd->set_color_correction_coefficients) { - setOptionState(s, isColor +/*XXX setOptionState(s, isColor && userDefined, OPT_CCT_1, &reload); - setOptionState(s, isColor - && userDefined, OPT_CCT_2, &reload); - setOptionState(s, isColor - && userDefined, OPT_CCT_3, &reload); - setOptionState(s, isColor - && userDefined, OPT_CCT_4, &reload); - setOptionState(s, isColor - && userDefined, OPT_CCT_5, &reload); - setOptionState(s, isColor - && userDefined, OPT_CCT_6, &reload); - setOptionState(s, isColor - && userDefined, OPT_CCT_7, &reload); - setOptionState(s, isColor - && userDefined, OPT_CCT_8, &reload); - setOptionState(s, isColor - && userDefined, OPT_CCT_9, &reload); +*/ } /* if binary, then disable the bit depth selection */ @@ -2012,10 +1952,6 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) break; } - case OPT_ADF_MODE: - sval->w = optindex; - break; - case OPT_BIT_DEPTH: sval->w = *((SANE_Word *) value); mode_params[s->val[OPT_MODE].w].depth = sval->w; @@ -2029,18 +1965,10 @@ setvalue(SANE_Handle handle, SANE_Int option, void *value, SANE_Int *info) case OPT_COLOR_CORRECTION: { - SANE_Bool f = color_userdefined[optindex]; +/* SANE_Bool f = color_userdefined[optindex]; */ sval->w = optindex; - setOptionState(s, f, OPT_CCT_1, &reload); - setOptionState(s, f, OPT_CCT_2, &reload); - setOptionState(s, f, OPT_CCT_3, &reload); - setOptionState(s, f, OPT_CCT_4, &reload); - setOptionState(s, f, OPT_CCT_5, &reload); - setOptionState(s, f, OPT_CCT_6, &reload); - setOptionState(s, f, OPT_CCT_7, &reload); - setOptionState(s, f, OPT_CCT_8, &reload); - setOptionState(s, f, OPT_CCT_9, &reload); +/*XXX setOptionState(s, f, OPT_CCT_1, &reload); */ break; } @@ -2238,6 +2166,19 @@ sane_get_parameters(SANE_Handle handle, SANE_Parameters *params) return SANE_STATUS_GOOD; } +static void e2_load_cct_profile(struct Epson_Scanner *s, unsigned int index) +{ + s->cct_table[0] = SANE_FIX(s->hw->cct_profile->cct[index][0]); + s->cct_table[1] = SANE_FIX(s->hw->cct_profile->cct[index][1]); + s->cct_table[2] = SANE_FIX(s->hw->cct_profile->cct[index][2]); + s->cct_table[3] = SANE_FIX(s->hw->cct_profile->cct[index][3]); + s->cct_table[4] = SANE_FIX(s->hw->cct_profile->cct[index][4]); + s->cct_table[5] = SANE_FIX(s->hw->cct_profile->cct[index][5]); + s->cct_table[6] = SANE_FIX(s->hw->cct_profile->cct[index][6]); + s->cct_table[7] = SANE_FIX(s->hw->cct_profile->cct[index][7]); + s->cct_table[8] = SANE_FIX(s->hw->cct_profile->cct[index][8]); +} + /* * This function is part of the SANE API and gets called from the front end to * start the scan process. @@ -2286,9 +2227,26 @@ sane_start(SANE_Handle handle) return status; } + + if (s->val[OPT_COLOR_CORRECTION].w == 1) { /* Automatic */ + + if (0) { /* XXX TPU */ + + /* XXX check this */ + if (s->val[OPT_FILM_TYPE].w == 0) + e2_load_cct_profile(s, CCTP_COLORPOS); + else + e2_load_cct_profile(s, CCTP_COLORNEG); + + } else { + e2_load_cct_profile(s, CCTP_REFLECTIVE); + } + } + /* ESC m, user defined color correction */ - if (s->val[OPT_COLOR_CORRECTION].w == 1) { - status = esci_set_color_correction_coefficients(s); + if (color_userdefined[s->val[OPT_COLOR_CORRECTION].w]) { + status = esci_set_color_correction_coefficients(s, + s->cct_table); if (status != SANE_STATUS_GOOD) return status; } @@ -2301,7 +2259,6 @@ sane_start(SANE_Handle handle) if (status != SANE_STATUS_GOOD) return status; - /* status = sane_get_parameters(handle, NULL); if (status != SANE_STATUS_GOOD) diff --git a/backend/epson2.h b/backend/epson2.h index 9a56caceb..a95cf2d03 100644 --- a/backend/epson2.h +++ b/backend/epson2.h @@ -222,8 +222,7 @@ enum { OPT_BRIGHTNESS, OPT_SHARPNESS, OPT_GAMMA_CORRECTION, OPT_COLOR_CORRECTION, OPT_RESOLUTION, OPT_THRESHOLD, OPT_ADVANCED_GROUP, OPT_MIRROR, OPT_AAS, OPT_GAMMA_VECTOR_R, OPT_GAMMA_VECTOR_G, OPT_GAMMA_VECTOR_B, - OPT_WAIT_FOR_BUTTON, OPT_CCT_GROUP, OPT_CCT_1, OPT_CCT_2, OPT_CCT_3, - OPT_CCT_4, OPT_CCT_5, OPT_CCT_6, OPT_CCT_7, OPT_CCT_8, OPT_CCT_9, + OPT_WAIT_FOR_BUTTON, OPT_CCT_GROUP, OPT_CCT_MODE, OPT_CCT_PROFILE, OPT_PREVIEW_GROUP, OPT_PREVIEW, OPT_GEOMETRY_GROUP, OPT_TL_X, OPT_TL_Y, OPT_BR_X, OPT_BR_Y, OPT_EQU_GROUP, OPT_SOURCE, OPT_AUTO_EJECT, OPT_FILM_TYPE, OPT_FOCUS, OPT_BAY, @@ -239,6 +238,26 @@ typedef enum SANE_EPSON_NET /* network interface */ } Epson_Connection_Type; +struct epson_profile +{ + unsigned int model; + double cct[4][9]; +}; + +enum { + CCTP_REFLECTIVE = 0, CCTP_COLORNEG, + CCTP_MONONEG, CCTP_COLORPOS +}; + +struct epson_profile_map +{ + char *name; + unsigned int id; +}; + +extern const struct epson_profile epson_cct_profiles[]; +extern const struct epson_profile_map epson_cct_models[]; + /* hardware description */ struct Epson_Device @@ -248,6 +267,8 @@ struct Epson_Device char *name; char *model; + unsigned int model_id; + SANE_Device sane; SANE_Int level; SANE_Range dpi_range; @@ -295,6 +316,7 @@ struct Epson_Device SANE_Bool extended_commands; struct EpsonCmd *cmd; + const struct epson_profile *cct_profile; }; typedef struct Epson_Device Epson_Device; @@ -317,6 +339,7 @@ struct Epson_Scanner SANE_Byte *buf, *end, *ptr; SANE_Bool canceling; SANE_Word gamma_table[3][256]; + SANE_Word cct_table[9]; SANE_Int retry_count; /* buffer lines for color shuffling */