]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
refactor option descriptor isolate
authorBastian Dehn <hhaalo@arcor.de>
Tue, 13 Feb 2024 19:15:11 +0000 (20:15 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Tue, 13 Feb 2024 19:15:11 +0000 (20:15 +0100)
src/kds_s2000w_net.c
src/kds_s2000w_option_descriptors.c
src/kds_s2000w_option_descriptors.h

index 22c4b477a73d4029e0692225b8ebe13c03e7173c..68f68ececfafb7f7e79c33c79b2d78bb9faf2ee5 100644 (file)
@@ -16,7 +16,6 @@ typedef struct {
 } readinfo;
 
 readinfo read_info;
-SANE_Option_Descriptor* option_descriptors = NULL;
 SANE_Device* device_info = NULL;
 
 readinfo* get_read_info()
@@ -47,7 +46,7 @@ int _sane_kds_s2000w_net_find_first_data_byte(const char* data)
 SANE_Status _sane_kds_s2000w_net_init(SANE_Int* version_code, SANE_Auth_Callback authorize)
 {
        *version_code = SANE_VERSION_CODE(1, 0, 0);
-       option_descriptors = kds_s2000w_option_descriptor_init_option_descriptors();
+       kds_s2000w_option_descriptor_init_option_descriptors();
        device_info = malloc(sizeof(SANE_Device));
        return SANE_STATUS_GOOD;
 }
@@ -58,7 +57,7 @@ void _sane_kds_s2000w_net_exit(void)
 
        free(device_info);
        device_info = NULL;
-       kds_s2000w_option_descriptor_free_option_descriptors(option_descriptors);
+       kds_s2000w_option_descriptor_free_option_descriptors();
 }
 
 SANE_Status _sane_kds_s2000w_net_get_devices(SANE_Device*** device_list,
@@ -101,88 +100,7 @@ void _sane_kds_s2000w_net_close(SANE_Handle handle)
 const SANE_Option_Descriptor* _sane_kds_s2000w_net_get_option_descriptor(
        SANE_Handle handle, SANE_Int option)
 {
-       switch (option) {
-               case 0:
-                       kds_s2000w_option_descriptor_num_options(&option_descriptors[option]);
-                       break;
-               case 1:
-                       kds_s2000w_option_descriptor_standard_group(&option_descriptors[option]);
-                       break;
-               case 2:
-                       kds_s2000w_option_descriptor_dpi(&option_descriptors[option]);
-                       break;
-               case 3:
-                       kds_s2000w_option_descriptor_scanside(&option_descriptors[option]);
-                       break;
-               case 4:
-                       kds_s2000w_option_descriptor_color_mode(&option_descriptors[option]);
-                       break;
-               case 5:
-                       kds_s2000w_option_descriptor_skip_blank_pages(&option_descriptors[option]);
-                       break;
-               case 6:
-                       kds_s2000w_option_descriptor_auto_start(&option_descriptors[option]);
-                       break;
-               case 7:
-                       kds_s2000w_option_descriptor_color_drop(&option_descriptors[option]);
-                       break;
-               case 8:
-                       kds_s2000w_option_descriptor_color_drop_out_aggressiveness(&option_descriptors[option]);
-                       break;
-               case 9:
-                       kds_s2000w_option_descriptor_output_type(&option_descriptors[option]);
-                       break;
-               case 10:
-                       kds_s2000w_option_descriptor_color_auto_brightness_mode(&option_descriptors[option]);
-                       break;
-               case 11:
-                       kds_s2000w_option_descriptor_color_balance_mode(&option_descriptors[option]);
-                       break;
-               case 12:
-                       kds_s2000w_option_descriptor_color_balancea_ggressiveness(&option_descriptors[option]);
-                       break;
-               case 13:
-                       kds_s2000w_option_descriptor_color_balance_red(&option_descriptors[option]);
-                       break;
-               case 14:
-                       kds_s2000w_option_descriptor_color_balance_green(&option_descriptors[option]);
-                       break;
-               case 15:
-                       kds_s2000w_option_descriptor_color_balance_blue(&option_descriptors[option]);
-                       break;
-               case 16:
-                       kds_s2000w_option_descriptor_foreground_boldness_mode(&option_descriptors[option]);
-                       break;
-               case 17:
-                       kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(&option_descriptors[option]);
-                       break;
-               case 18:
-                       kds_s2000w_option_descriptor_background_smoothing_mode(&option_descriptors[option]);
-                       break;
-               case 19:
-                       kds_s2000w_option_descriptor_background_smoothing_aggressiveness(&option_descriptors[option]);
-                       break;
-               case 20:
-                       kds_s2000w_option_descriptor_binarization_mode(&option_descriptors[option]);
-                       break;
-               case 21:
-                       kds_s2000w_option_descriptor_binarization_contrast(&option_descriptors[option]);
-                       break;
-               case 22:
-                       kds_s2000w_option_descriptor_max_document_length(&option_descriptors[option]);
-                       break;
-               case 23:
-                       kds_s2000w_option_descriptor_scan_source(&option_descriptors[option]);
-                       break;
-               case 24:
-                       kds_s2000w_option_descriptor_config_reset(&option_descriptors[option]);
-                       break;
-               default:
-                       return NULL;
-                       break;
-       }
-
-       return &option_descriptors[option];
+       return kds_s2000w_option_get_descriptor(option);
 }
 
 SANE_Status _sane_kds_s2000w_net_control_option(SANE_Handle handle,
index 88884c09f40fa0a65ab6ed7eea133b398b03e20c..0a633a32db16363d438b06a8752c9aa1d2e32282 100644 (file)
 #include <sane/saneopts.h>
 #include "kds_s2000w_option_descriptors.h"
 
-SANE_Word* constraint_dpi = NULL;
-SANE_String_Const* constraint_scanside = NULL;
-SANE_String_Const* constraint_colormode = NULL;
-SANE_String_Const* constraint_colordrop = NULL;
-SANE_Range* constraint_color_drop_out_aggressiveness_range = NULL;
-SANE_String_Const* constraint_output_type = NULL;
-SANE_String_Const* constraint_color_auto_brightnessmode = NULL;
-SANE_String_Const* constraint_color_balance_mode = NULL;
-SANE_Range* constraint_color_balance_aggressiveness = NULL;
-SANE_Range* constraint_color_balance_red = NULL;
-SANE_Range* constraint_color_balance_green = NULL;
-SANE_Range* constraint_color_balance_blue = NULL;
-SANE_String_Const* constraint_foreground_boldness_mode = NULL;
-SANE_Range* constraint_foreground_boldness_aggressiveness = NULL;
-SANE_String_Const* constraint_background_smoothing_mode = NULL;
-SANE_Range* constraint_background_smoothing_aggressivness = NULL;
-SANE_String_Const* constraint_binarization_mode = NULL;
-SANE_Range* constraint_binarization_contrast = NULL;
-SANE_String_Const* constraint_max_document_length = NULL;
-SANE_String_Const* constraint_scan_source = NULL;
-
-SANE_Option_Descriptor* kds_s2000w_option_descriptor_init_option_descriptors()
-{
-       constraint_dpi = malloc(sizeof(SANE_Int) * 3);
-       constraint_scanside = malloc(sizeof(char*) * 3);
-       constraint_colormode = malloc(sizeof(char*) * 5);
-       constraint_colordrop = malloc(sizeof(char*) * 9);
-       constraint_color_drop_out_aggressiveness_range = malloc(sizeof(SANE_Range));
-       constraint_output_type = malloc(sizeof(char*) * 3);
-       constraint_color_auto_brightnessmode = malloc(sizeof(char*) * 3);
-       constraint_color_balance_mode = malloc(sizeof(char*) * 5);
-       constraint_color_balance_aggressiveness = malloc(sizeof(SANE_Range));
-       constraint_color_balance_red = malloc(sizeof(SANE_Range));
-       constraint_color_balance_green = malloc(sizeof(SANE_Range));
-       constraint_color_balance_blue = malloc(sizeof(SANE_Range));
-       constraint_foreground_boldness_mode = malloc(sizeof(char*) * 4);
-       constraint_foreground_boldness_aggressiveness = malloc(sizeof(SANE_Range));
-       constraint_background_smoothing_mode = malloc(sizeof(char*) * 4);
-       constraint_background_smoothing_aggressivness = malloc(sizeof(SANE_Range));
-       constraint_binarization_mode = malloc(sizeof(char*) * 2);
-       constraint_binarization_contrast = malloc(sizeof(SANE_Range));
-       constraint_max_document_length = malloc(sizeof(char*) * 2);
-       constraint_scan_source = malloc(sizeof(char*) * 4);
+SANE_Option_Descriptor** descriptor_array = NULL;
 
-       SANE_Option_Descriptor* descriptor_array = malloc(sizeof(SANE_Option_Descriptor) * MAX_OPTION_COUNT);
-       return descriptor_array;
-}
-
-void kds_s2000w_option_descriptor_free_option_descriptors(SANE_Option_Descriptor* descriptor_array)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_num_options()
 {
-       free(constraint_dpi);
-       constraint_dpi = NULL;
-       free(constraint_scanside);
-       constraint_scanside = NULL;
-       free(constraint_colormode);
-       constraint_colormode = NULL;
-       free(constraint_colordrop);
-       constraint_colordrop = NULL;
-       free(constraint_color_drop_out_aggressiveness_range);
-       constraint_color_drop_out_aggressiveness_range = NULL;
-       free(constraint_output_type);
-       constraint_output_type = NULL;
-       free(constraint_color_auto_brightnessmode);
-       constraint_color_auto_brightnessmode = NULL;
-       free(constraint_color_balance_mode);
-       constraint_color_balance_mode = NULL;
-       free(constraint_color_balance_aggressiveness);
-       constraint_color_balance_aggressiveness = NULL;
-       free(constraint_color_balance_red);
-       constraint_color_balance_red = NULL;
-       free(constraint_color_balance_green);
-       constraint_color_balance_green = NULL;
-       free(constraint_color_balance_blue);
-       constraint_color_balance_blue = NULL;
-       free(constraint_foreground_boldness_mode);
-       constraint_foreground_boldness_mode = NULL;
-       free(constraint_foreground_boldness_aggressiveness);
-       constraint_foreground_boldness_aggressiveness = NULL;
-       free(constraint_background_smoothing_mode);
-       constraint_background_smoothing_mode = NULL;
-       free(constraint_background_smoothing_aggressivness);
-       constraint_background_smoothing_aggressivness = NULL;
-       free(constraint_binarization_mode);
-       constraint_binarization_mode = NULL;
-       free(constraint_binarization_contrast);
-       constraint_binarization_contrast = NULL;
-       free(constraint_max_document_length);
-       constraint_max_document_length = NULL;
-       free(constraint_scan_source);
-       constraint_scan_source = NULL;
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
 
-       free(descriptor_array);
-       descriptor_array = NULL;
-}
-
-void kds_s2000w_option_descriptor_num_options(SANE_Option_Descriptor* descriptor)
-{
        descriptor->name = SANE_NAME_NUM_OPTIONS;
        descriptor->title = SANE_TITLE_NUM_OPTIONS;
        descriptor->desc = SANE_DESC_NUM_OPTIONS;
@@ -107,10 +16,14 @@ void kds_s2000w_option_descriptor_num_options(SANE_Option_Descriptor* descriptor
        descriptor->constraint_type = SANE_CONSTRAINT_NONE;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_standard_group(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_standard_group()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = SANE_NAME_STANDARD;
        descriptor->title = SANE_TITLE_STANDARD;
        descriptor->desc = SANE_DESC_STANDARD;
@@ -119,31 +32,43 @@ void kds_s2000w_option_descriptor_standard_group(SANE_Option_Descriptor* descrip
        descriptor->constraint_type = SANE_CONSTRAINT_NONE;
        descriptor->type = SANE_TYPE_GROUP;
        descriptor->size = 0;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_dpi(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_dpi()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = SANE_NAME_SCAN_RESOLUTION;
        descriptor->title = SANE_TITLE_SCAN_RESOLUTION;
        descriptor->desc = SANE_DESC_SCAN_RESOLUTION;
        descriptor->unit = SANE_UNIT_DPI;
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_WORD_LIST;
+       SANE_Word* constraint_dpi = NULL;
+       constraint_dpi = malloc(sizeof(SANE_Int) * 3);
        constraint_dpi[0] = 2;
        constraint_dpi[1] = 200;
        constraint_dpi[2] = 300;
        descriptor->constraint.word_list = constraint_dpi;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_scanside(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_scanside()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "scanside";
        descriptor->title = "Duplex Mode";
        descriptor->desc = "Duplex Mode";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_scanside = NULL;
+       constraint_scanside = malloc(sizeof(char*) * 3);
        constraint_scanside[0] = "Simplex";
        constraint_scanside[1] = "Duplex";
        constraint_scanside[2] = NULL;
@@ -151,15 +76,21 @@ void kds_s2000w_option_descriptor_scanside(SANE_Option_Descriptor* descriptor)
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_mode(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_mode()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = SANE_NAME_SCAN_MODE;
        descriptor->title = SANE_TITLE_SCAN_MODE;
        descriptor->desc = SANE_DESC_SCAN_MODE;
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_colormode = NULL;
+       constraint_colormode = malloc(sizeof(char*) * 5);
        constraint_colormode[0] = "Color";
        constraint_colormode[1] = "Gray";
        constraint_colormode[2] = "BW";
@@ -169,10 +100,14 @@ void kds_s2000w_option_descriptor_color_mode(SANE_Option_Descriptor* descriptor)
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_skip_blank_pages(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_skip_blank_pages()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "skip-blank-pages";
        descriptor->title = "Blank Image Deletion Mode";
        descriptor->desc = "Blank Image Deletion Mode";
@@ -180,10 +115,14 @@ void kds_s2000w_option_descriptor_skip_blank_pages(SANE_Option_Descriptor* descr
        descriptor->constraint_type = SANE_CONSTRAINT_NONE;
        descriptor->type = SANE_TYPE_BOOL;
        descriptor->size = sizeof(SANE_Bool);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_auto_start(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_auto_start()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "autostart";
        descriptor->title = "autostart";
        descriptor->desc = "autostart";
@@ -191,15 +130,21 @@ void kds_s2000w_option_descriptor_auto_start(SANE_Option_Descriptor* descriptor)
        descriptor->constraint_type = SANE_CONSTRAINT_NONE;
        descriptor->type = SANE_TYPE_BOOL;
        descriptor->size = sizeof(SANE_Bool);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_drop(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_drop()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "colordrop";
        descriptor->title = "colordrop";
        descriptor->desc = "colordrop";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_colordrop = NULL;
+       constraint_colordrop = malloc(sizeof(char*) * 9);
        constraint_colordrop[0] = "None";
        constraint_colordrop[1] = "Red";
        constraint_colordrop[2] = "Green";
@@ -213,30 +158,42 @@ void kds_s2000w_option_descriptor_color_drop(SANE_Option_Descriptor* descriptor)
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_drop_out_aggressiveness(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_drop_out_aggressiveness()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "colordropoutaggressiveness";
        descriptor->title = "colordropoutaggressiveness";
        descriptor->desc = "colordropoutaggressiveness";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_RANGE;
+       SANE_Range* constraint_color_drop_out_aggressiveness_range = NULL;
+       constraint_color_drop_out_aggressiveness_range = malloc(sizeof(SANE_Range));
        constraint_color_drop_out_aggressiveness_range->min = -10;
        constraint_color_drop_out_aggressiveness_range->max = 10;
        constraint_color_drop_out_aggressiveness_range->quant = 1;
        descriptor->constraint.range = constraint_color_drop_out_aggressiveness_range;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_output_type(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_output_type()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "outputtype";
        descriptor->title = "outputtype";
        descriptor->desc = "outputtype";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_output_type = NULL;
+       constraint_output_type = malloc(sizeof(char*) * 3);
        constraint_output_type[0] = "Images";
        constraint_output_type[1] = "SinglePageColorPDFPlus2TIFs";
        constraint_output_type[2] = NULL;
@@ -244,15 +201,21 @@ void kds_s2000w_option_descriptor_output_type(SANE_Option_Descriptor* descriptor
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_auto_brightness_mode(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_auto_brightness_mode()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "colorautobrightnessmode";
        descriptor->title = "colorautobrightnessmode";
        descriptor->desc = "colorautobrightnessmode";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_color_auto_brightnessmode = NULL;
+       constraint_color_auto_brightnessmode = malloc(sizeof(char*) * 3);
        constraint_color_auto_brightnessmode[0] = "None";
        constraint_color_auto_brightnessmode[1] = "Automatic";
        constraint_color_auto_brightnessmode[2] = NULL;
@@ -260,15 +223,21 @@ void kds_s2000w_option_descriptor_color_auto_brightness_mode(SANE_Option_Descrip
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_balance_mode(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_mode()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "colorbalancemode";
        descriptor->title = "colorbalancemode";
        descriptor->desc = "colorbalancemode";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_color_balance_mode = NULL;
+       constraint_color_balance_mode = malloc(sizeof(char*) * 5);
        constraint_color_balance_mode[0] = "None";
        constraint_color_balance_mode[1] = "Manual";
        constraint_color_balance_mode[2] = "Automatic";
@@ -278,75 +247,107 @@ void kds_s2000w_option_descriptor_color_balance_mode(SANE_Option_Descriptor* des
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_balancea_ggressiveness(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balancea_ggressiveness()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "colorbalanceaggressiveness";
        descriptor->title = "colorbalanceaggressiveness";
        descriptor->desc = "colorbalanceaggressiveness";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_RANGE;
+       SANE_Range* constraint_color_balance_aggressiveness = NULL;
+       constraint_color_balance_aggressiveness = malloc(sizeof(SANE_Range));
        constraint_color_balance_aggressiveness->min = -2;
        constraint_color_balance_aggressiveness->max = 2;
        constraint_color_balance_aggressiveness->quant = 1;
        descriptor->constraint.range = constraint_color_balance_aggressiveness;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_balance_red(SANE_Option_Descriptor* descriptor)
+
+
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_red()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "colorbalancered";
        descriptor->title = "colorbalancered";
        descriptor->desc = "colorbalancered";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_RANGE;
+       SANE_Range* constraint_color_balance_red = NULL;
+       constraint_color_balance_red = malloc(sizeof(SANE_Range));
        constraint_color_balance_red->min = -50;
        constraint_color_balance_red->max = 50;
        constraint_color_balance_red->quant = 1;
        descriptor->constraint.range = constraint_color_balance_red;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_balance_green(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_green()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "colorbalancegreen";
        descriptor->title = "colorbalancegreen";
        descriptor->desc = "colorbalancegreen";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_RANGE;
+       SANE_Range* constraint_color_balance_green = NULL;
+       constraint_color_balance_green = malloc(sizeof(SANE_Range));
        constraint_color_balance_green->min = -50;
        constraint_color_balance_green->max = 50;
        constraint_color_balance_green->quant = 1;
        descriptor->constraint.range = constraint_color_balance_green;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_color_balance_blue(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_color_balance_blue()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "color-balance-blue";
        descriptor->title = "colorbalanceblue";
        descriptor->desc = "colorbalanceblue";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_RANGE;
+       SANE_Range* constraint_color_balance_blue = NULL;
+       constraint_color_balance_blue = malloc(sizeof(SANE_Range));
        constraint_color_balance_blue->min = -50;
        constraint_color_balance_blue->max = 50;
        constraint_color_balance_blue->quant = 1;
        descriptor->constraint.range = constraint_color_balance_blue;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_foreground_boldness_mode(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_foreground_boldness_mode()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "foreground-boldness-mode";
        descriptor->title = "Foreground Boldness Mode";
        descriptor->desc = "Foreground Boldness Mode";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_foreground_boldness_mode = NULL;
+       constraint_foreground_boldness_mode = malloc(sizeof(char*) * 4);
        constraint_foreground_boldness_mode[0] = "None";
        constraint_foreground_boldness_mode[1] = "AutomaticAdvanced";
        constraint_foreground_boldness_mode[2] = "Automatic";
@@ -355,30 +356,42 @@ void kds_s2000w_option_descriptor_foreground_boldness_mode(SANE_Option_Descripto
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "foreground-boldness-aggressiveness";
        descriptor->title = "Foreground Boldness Mode";
        descriptor->desc = "Foreground Boldness Mode";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_RANGE;
+       SANE_Range* constraint_foreground_boldness_aggressiveness = NULL;
+       constraint_foreground_boldness_aggressiveness = malloc(sizeof(SANE_Range));
        constraint_foreground_boldness_aggressiveness->min = -10;
        constraint_foreground_boldness_aggressiveness->max = 10;
        constraint_foreground_boldness_aggressiveness->quant = 1;
        descriptor->constraint.range = constraint_foreground_boldness_aggressiveness;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_background_smoothing_mode(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_background_smoothing_mode()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "background-smoothing-mode";
        descriptor->title = "Background Smoothing Mode";
        descriptor->desc = "Background Smoothing Mode";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_background_smoothing_mode = NULL;
+       constraint_background_smoothing_mode = malloc(sizeof(char*) * 4);
        constraint_background_smoothing_mode[0] = "None";
        constraint_background_smoothing_mode[1] = "AutomaticAdvanced";
        constraint_background_smoothing_mode[2] = "Automatic";
@@ -387,74 +400,104 @@ void kds_s2000w_option_descriptor_background_smoothing_mode(SANE_Option_Descript
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_background_smoothing_aggressiveness(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_background_smoothing_aggressiveness()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "background-smoothing-aggressiveness";
        descriptor->title = "Background Smoothing Aggressivenes";
        descriptor->desc = "Background Smoothing Aggressivenes";
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_RANGE;
+       SANE_Range* constraint_background_smoothing_aggressivness = NULL;
+       constraint_background_smoothing_aggressivness = malloc(sizeof(SANE_Range));
        constraint_background_smoothing_aggressivness->min = -10;
        constraint_background_smoothing_aggressivness->max = 10;
        constraint_background_smoothing_aggressivness->quant = 1;
        descriptor->constraint.range = constraint_background_smoothing_aggressivness;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_binarization_mode(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_binarization_mode()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "binarization-mode";
        descriptor->title = "binarizationmode";
        descriptor->desc = "binarizationmode";
        descriptor->cap = SANE_CAP_SOFT_DETECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_binarization_mode = NULL;
+       constraint_binarization_mode = malloc(sizeof(char*) * 2);
        constraint_binarization_mode[0] = "iThresholding";
        constraint_binarization_mode[1] = NULL;
        descriptor->constraint.string_list = constraint_binarization_mode;
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_binarization_contrast(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_binarization_contrast()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = SANE_NAME_CONTRAST;
        descriptor->title = SANE_TITLE_CONTRAST;
        descriptor->desc = SANE_DESC_CONTRAST;
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;
        descriptor->constraint_type = SANE_CONSTRAINT_RANGE;
+       SANE_Range* constraint_binarization_contrast = NULL;
+       constraint_binarization_contrast = malloc(sizeof(SANE_Range));
        constraint_binarization_contrast->min = -50;
        constraint_binarization_contrast->max = 50;
        constraint_binarization_contrast->quant = 1;
        descriptor->constraint.range = constraint_binarization_contrast;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_max_document_length(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_max_document_length()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "maxdocumentlength";
        descriptor->title = "maxdocumentlength";
        descriptor->desc = "maxdocumentlength";
        descriptor->cap = SANE_CAP_SOFT_DETECT;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_max_document_length = NULL;
+       constraint_max_document_length = malloc(sizeof(char*) * 2);
        constraint_max_document_length[0] = "#NoPrimaryControl#";
        constraint_max_document_length[1] = NULL;
        descriptor->constraint.string_list = constraint_max_document_length;
        descriptor->type = SANE_TYPE_INT;
        descriptor->size = sizeof(SANE_Int);
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_scan_source(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_scan_source()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = SANE_NAME_SCAN_SOURCE;
        descriptor->title = SANE_TITLE_SCAN_SOURCE;
        descriptor->desc = SANE_DESC_SCAN_SOURCE;
        descriptor->cap = SANE_CAP_SOFT_DETECT | SANE_CAP_SOFT_SELECT;;
        descriptor->constraint_type = SANE_CONSTRAINT_STRING_LIST;
+       SANE_String_Const* constraint_scan_source = NULL;
+       constraint_scan_source = malloc(sizeof(char*) * 4);
        constraint_scan_source[0] = "DocumentFeeder";
        constraint_scan_source[1] = "Automatic";
        constraint_scan_source[2] = "Flatbed";
@@ -463,10 +506,14 @@ void kds_s2000w_option_descriptor_scan_source(SANE_Option_Descriptor* descriptor
        descriptor->type = SANE_TYPE_STRING;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = sizeof(SANE_String) * 50;
+
+       return descriptor;
 }
 
-void kds_s2000w_option_descriptor_config_reset(SANE_Option_Descriptor* descriptor)
+SANE_Option_Descriptor* _kds_s2000w_option_descriptor_config_reset()
 {
+       SANE_Option_Descriptor* descriptor = malloc(sizeof(SANE_Option_Descriptor));
+
        descriptor->name = "config-reset";
        descriptor->title = "Konfiguration zuruecksetzen";
        descriptor->desc = "Laedt die default Konfiguration des Scanners";
@@ -475,4 +522,52 @@ void kds_s2000w_option_descriptor_config_reset(SANE_Option_Descriptor* descripto
        descriptor->type = SANE_TYPE_BUTTON;
        descriptor->unit = SANE_UNIT_NONE;
        descriptor->size = 0;
+
+       return descriptor;
+}
+
+void kds_s2000w_option_descriptor_init_option_descriptors()
+{
+       descriptor_array = malloc(sizeof(SANE_Option_Descriptor*) * MAX_OPTION_COUNT);
+
+       descriptor_array[0] = _kds_s2000w_option_descriptor_num_options();
+       descriptor_array[1] = _kds_s2000w_option_descriptor_standard_group();
+       descriptor_array[2] = _kds_s2000w_option_descriptor_dpi();
+       descriptor_array[3] = _kds_s2000w_option_descriptor_scanside();
+       descriptor_array[4] = _kds_s2000w_option_descriptor_color_mode();
+       descriptor_array[5] = _kds_s2000w_option_descriptor_skip_blank_pages();
+       descriptor_array[6] = _kds_s2000w_option_descriptor_auto_start();
+       descriptor_array[7] = _kds_s2000w_option_descriptor_color_drop();
+       descriptor_array[8] = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness();
+       descriptor_array[9] = _kds_s2000w_option_descriptor_output_type();
+       descriptor_array[10] = _kds_s2000w_option_descriptor_color_auto_brightness_mode();
+       descriptor_array[11] = _kds_s2000w_option_descriptor_color_balance_mode();
+       descriptor_array[12] = _kds_s2000w_option_descriptor_color_balancea_ggressiveness();
+       descriptor_array[13] = _kds_s2000w_option_descriptor_color_balance_red();
+       descriptor_array[14] = _kds_s2000w_option_descriptor_color_balance_green();
+       descriptor_array[15] = _kds_s2000w_option_descriptor_color_balance_blue();
+       descriptor_array[16] = _kds_s2000w_option_descriptor_foreground_boldness_mode();
+       descriptor_array[17] = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness();
+       descriptor_array[18] = _kds_s2000w_option_descriptor_background_smoothing_mode();
+       descriptor_array[19] = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness();
+       descriptor_array[20] = _kds_s2000w_option_descriptor_binarization_mode();
+       descriptor_array[21] = _kds_s2000w_option_descriptor_binarization_contrast();
+       descriptor_array[22] = _kds_s2000w_option_descriptor_max_document_length();
+       descriptor_array[23] = _kds_s2000w_option_descriptor_scan_source();
+       descriptor_array[24] = _kds_s2000w_option_descriptor_config_reset();
+}
+
+void kds_s2000w_option_descriptor_free_option_descriptors()
+{
+       for (int i = 0; i < MAX_OPTION_COUNT; i++) {
+               free(descriptor_array[i]);
+       }
+
+       free(descriptor_array);
+       descriptor_array = NULL;
+}
+
+SANE_Option_Descriptor* kds_s2000w_option_get_descriptor(int option)
+{
+       return descriptor_array[option];
 }
\ No newline at end of file
index 0f14846ca1fbf6da10b95389135f11b2f7e02390..c057e75eaa92800b1747d0ac67b180217919e2ed 100644 (file)
@@ -4,32 +4,7 @@
 
 #define MAX_OPTION_COUNT 25
 
-SANE_Option_Descriptor* kds_s2000w_option_descriptor_init_option_descriptors();
-void kds_s2000w_option_descriptor_free_option_descriptors(SANE_Option_Descriptor* descriptor_array);
-
-void kds_s2000w_option_descriptor_num_options(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_standard_group(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_dpi(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_scanside(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_mode(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_skip_blank_pages(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_auto_start(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_drop(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_drop_out_aggressiveness(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_output_type(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_auto_brightness_mode(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_balance_mode(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_balancea_ggressiveness(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_balance_red(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_balance_green(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_color_balance_blue(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_foreground_boldness_mode(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_background_smoothing_mode(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_background_smoothing_aggressiveness(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_binarization_mode(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_binarization_contrast(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_max_document_length(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_scan_source(SANE_Option_Descriptor* descriptor);
-void kds_s2000w_option_descriptor_config_reset(SANE_Option_Descriptor* descriptor);
+void kds_s2000w_option_descriptor_init_option_descriptors();
+void kds_s2000w_option_descriptor_free_option_descriptors();
+SANE_Option_Descriptor* kds_s2000w_option_get_descriptor(int option);
 #endif
\ No newline at end of file