From 75c7c424feacaf6675ff0a8f4866e7a9d5991a2b Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 22 Mar 2026 11:22:56 +0100 Subject: [PATCH] define profile array with fn then alloc --- src/kds_s2000w_option_descriptors.c | 203 +++++++++++++++------------- 1 file changed, 110 insertions(+), 93 deletions(-) diff --git a/src/kds_s2000w_option_descriptors.c b/src/kds_s2000w_option_descriptors.c index f0d3b18..db0d71f 100644 --- a/src/kds_s2000w_option_descriptors.c +++ b/src/kds_s2000w_option_descriptors.c @@ -3,10 +3,7 @@ #include #include "kds_s2000w_option_descriptors.h" -#define PROFILE_FULL_MAX_OPTION_COUNT 48 -#define PROFILE_230802_V1_0_36_MAX_OPTION_COUNT 26 -#define PROFILE_MIN_MAX_OPTION_COUNT 12 - +typedef option_descriptor_t* (*descriptor_fn)(); typedef struct { option_descriptor_t** descriptors; size_t size; @@ -1447,7 +1444,22 @@ option_descriptor_t* _kds_s2000w_option_descriptor_document_feeder_timeout_respo ******************************************************************************/ SANE_Status _kds_s2000w_option_descriptors_init_min_profile() { - kds_s2000w_option_descriptors->size = PROFILE_MIN_MAX_OPTION_COUNT; + descriptor_fn fn[] = { + _kds_s2000w_option_descriptor_num_options, + _kds_s2000w_option_descriptor_standard_group, + _kds_s2000w_option_descriptor_color_mode, + _kds_s2000w_option_descriptor_dpi, + _kds_s2000w_option_descriptor_scanside, + _kds_s2000w_option_descriptor_boldness_color_group, + _kds_s2000w_option_descriptor_color_drop, + _kds_s2000w_option_descriptor_config_reset, + _kds_s2000w_option_descriptor_image_processing_group, + _kds_s2000w_option_descriptor_skip_blank_pages, + _kds_s2000w_option_descriptor_feeder_group, + _kds_s2000w_option_descriptor_autostart + }; + + kds_s2000w_option_descriptors->size = sizeof(fn) / sizeof(descriptor_fn);; kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); if (kds_s2000w_option_descriptors->descriptors == NULL) { free(kds_s2000w_option_descriptors); @@ -1455,25 +1467,46 @@ SANE_Status _kds_s2000w_option_descriptors_init_min_profile() return SANE_STATUS_NO_MEM; } - kds_s2000w_option_descriptors->descriptors[0] = _kds_s2000w_option_descriptor_num_options();; - kds_s2000w_option_descriptors->descriptors[1] = _kds_s2000w_option_descriptor_standard_group(); - kds_s2000w_option_descriptors->descriptors[2] = _kds_s2000w_option_descriptor_color_mode(); - kds_s2000w_option_descriptors->descriptors[3] = _kds_s2000w_option_descriptor_dpi(); - kds_s2000w_option_descriptors->descriptors[4] = _kds_s2000w_option_descriptor_scanside(); - kds_s2000w_option_descriptors->descriptors[5] = _kds_s2000w_option_descriptor_boldness_color_group(); - kds_s2000w_option_descriptors->descriptors[6] = _kds_s2000w_option_descriptor_color_drop(); - kds_s2000w_option_descriptors->descriptors[7] = _kds_s2000w_option_descriptor_config_reset(); - kds_s2000w_option_descriptors->descriptors[8] = _kds_s2000w_option_descriptor_image_processing_group(); - kds_s2000w_option_descriptors->descriptors[9] = _kds_s2000w_option_descriptor_skip_blank_pages(); - kds_s2000w_option_descriptors->descriptors[10] = _kds_s2000w_option_descriptor_feeder_group(); - kds_s2000w_option_descriptors->descriptors[11] = _kds_s2000w_option_descriptor_autostart(); + + for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) { + kds_s2000w_option_descriptors->descriptors[i] = fn[i](); + } return _kds_s2000w_option_descriptor_validate(); } SANE_Status _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile() { - kds_s2000w_option_descriptors->size = PROFILE_230802_V1_0_36_MAX_OPTION_COUNT; + descriptor_fn fn[] = { + _kds_s2000w_option_descriptor_num_options, + _kds_s2000w_option_descriptor_standard_group, + _kds_s2000w_option_descriptor_scan_source, + _kds_s2000w_option_descriptor_color_mode, + _kds_s2000w_option_descriptor_dpi, + _kds_s2000w_option_descriptor_scanside, + _kds_s2000w_option_descriptor_boldness_smoothing_group, + _kds_s2000w_option_descriptor_foreground_boldness_mode, + _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness, + _kds_s2000w_option_descriptor_background_smoothing_mode, + _kds_s2000w_option_descriptor_background_smoothing_aggressiveness, + _kds_s2000w_option_descriptor_boldness_color_group, + _kds_s2000w_option_descriptor_color_drop, + _kds_s2000w_option_descriptor_color_drop_out_aggressiveness, + _kds_s2000w_option_descriptor_color_auto_brightness_mode, + _kds_s2000w_option_descriptor_color_balance_mode, + _kds_s2000w_option_descriptor_color_balance_agressiveness, + _kds_s2000w_option_descriptor_color_balance_red, + _kds_s2000w_option_descriptor_color_balance_green, + _kds_s2000w_option_descriptor_color_balance_blue, + _kds_s2000w_option_descriptor_binarization_contrast, + _kds_s2000w_option_descriptor_config_reset, + _kds_s2000w_option_descriptor_image_processing_group, + _kds_s2000w_option_descriptor_skip_blank_pages, + _kds_s2000w_option_descriptor_feeder_group, + _kds_s2000w_option_descriptor_autostart + }; + + kds_s2000w_option_descriptors->size = sizeof(fn) / sizeof(descriptor_fn); kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); if (kds_s2000w_option_descriptors->descriptors == NULL) { free(kds_s2000w_option_descriptors); @@ -1481,39 +1514,68 @@ SANE_Status _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile() return SANE_STATUS_NO_MEM; } - kds_s2000w_option_descriptors->descriptors[0] = _kds_s2000w_option_descriptor_num_options(); - kds_s2000w_option_descriptors->descriptors[1] = _kds_s2000w_option_descriptor_standard_group(); - kds_s2000w_option_descriptors->descriptors[2] = _kds_s2000w_option_descriptor_scan_source(); - kds_s2000w_option_descriptors->descriptors[3] = _kds_s2000w_option_descriptor_color_mode(); - kds_s2000w_option_descriptors->descriptors[4] = _kds_s2000w_option_descriptor_dpi(); - kds_s2000w_option_descriptors->descriptors[5] = _kds_s2000w_option_descriptor_scanside(); - kds_s2000w_option_descriptors->descriptors[6] = _kds_s2000w_option_descriptor_boldness_smoothing_group(); - kds_s2000w_option_descriptors->descriptors[7] = _kds_s2000w_option_descriptor_foreground_boldness_mode(); - kds_s2000w_option_descriptors->descriptors[8] = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(); - kds_s2000w_option_descriptors->descriptors[9] = _kds_s2000w_option_descriptor_background_smoothing_mode(); - kds_s2000w_option_descriptors->descriptors[10] = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness(); - kds_s2000w_option_descriptors->descriptors[11] = _kds_s2000w_option_descriptor_boldness_color_group(); - kds_s2000w_option_descriptors->descriptors[12] = _kds_s2000w_option_descriptor_color_drop(); - kds_s2000w_option_descriptors->descriptors[13] = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness(); - kds_s2000w_option_descriptors->descriptors[14] = _kds_s2000w_option_descriptor_color_auto_brightness_mode(); - kds_s2000w_option_descriptors->descriptors[15] = _kds_s2000w_option_descriptor_color_balance_mode(); - kds_s2000w_option_descriptors->descriptors[16] = _kds_s2000w_option_descriptor_color_balance_agressiveness(); - kds_s2000w_option_descriptors->descriptors[17] = _kds_s2000w_option_descriptor_color_balance_red(); - kds_s2000w_option_descriptors->descriptors[18] = _kds_s2000w_option_descriptor_color_balance_green(); - kds_s2000w_option_descriptors->descriptors[19] = _kds_s2000w_option_descriptor_color_balance_blue(); - kds_s2000w_option_descriptors->descriptors[20] = _kds_s2000w_option_descriptor_binarization_contrast(); - kds_s2000w_option_descriptors->descriptors[21] = _kds_s2000w_option_descriptor_config_reset(); - kds_s2000w_option_descriptors->descriptors[22] = _kds_s2000w_option_descriptor_image_processing_group(); - kds_s2000w_option_descriptors->descriptors[23] = _kds_s2000w_option_descriptor_skip_blank_pages(); - kds_s2000w_option_descriptors->descriptors[24] = _kds_s2000w_option_descriptor_feeder_group(); - kds_s2000w_option_descriptors->descriptors[25] = _kds_s2000w_option_descriptor_autostart(); + for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) { + kds_s2000w_option_descriptors->descriptors[i] = fn[i](); + } + return _kds_s2000w_option_descriptor_validate(); } SANE_Status _kds_s2000w_option_descriptors_init_full_profile() { - kds_s2000w_option_descriptors->size = PROFILE_FULL_MAX_OPTION_COUNT; + descriptor_fn fn[] = { + _kds_s2000w_option_descriptor_num_options, + _kds_s2000w_option_descriptor_standard_group, + _kds_s2000w_option_descriptor_scan_source, + _kds_s2000w_option_descriptor_color_mode, + _kds_s2000w_option_descriptor_dpi, + _kds_s2000w_option_descriptor_scanside, + _kds_s2000w_option_descriptor_geometry_group, + _kds_s2000w_option_descriptor_cropping_mode, + _kds_s2000w_option_descriptor_cropping_image, + _kds_s2000w_option_descriptor_image_offset_x, + _kds_s2000w_option_descriptor_image_offset_y, + _kds_s2000w_option_descriptor_image_width, + _kds_s2000w_option_descriptor_image_height, + _kds_s2000w_option_descriptor_boldness_smoothing_group, + _kds_s2000w_option_descriptor_foreground_boldness_mode, + _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness, + _kds_s2000w_option_descriptor_background_smoothing_mode, + _kds_s2000w_option_descriptor_background_smoothing_aggressiveness, + _kds_s2000w_option_descriptor_boldness_color_group, + _kds_s2000w_option_descriptor_color_drop, + _kds_s2000w_option_descriptor_color_drop_out_aggressiveness, + _kds_s2000w_option_descriptor_color_auto_brightness_mode, + _kds_s2000w_option_descriptor_color_brightness, + _kds_s2000w_option_descriptor_color_contrast, + _kds_s2000w_option_descriptor_color_balance_mode, + _kds_s2000w_option_descriptor_color_balance_agressiveness, + _kds_s2000w_option_descriptor_color_balance_red, + _kds_s2000w_option_descriptor_color_balance_green, + _kds_s2000w_option_descriptor_color_balance_blue, + _kds_s2000w_option_descriptor_color_sharpen, + _kds_s2000w_option_descriptor_binarization_contrast, + _kds_s2000w_option_descriptor_config_reset, + _kds_s2000w_option_descriptor_image_processing_group, + _kds_s2000w_option_descriptor_skip_blank_pages, + _kds_s2000w_option_descriptor_skip_blank_page_content, + _kds_s2000w_option_descriptor_hole_fill, + _kds_s2000w_option_descriptor_post_scan_rotation, + _kds_s2000w_option_descriptor_edge_fill, + _kds_s2000w_option_descriptor_image_border, + _kds_s2000w_option_descriptor_jpeg_quality, + _kds_s2000w_option_descriptor_feeder_group, + _kds_s2000w_option_descriptor_autostart, + _kds_s2000w_option_descriptor_max_document_length, + _kds_s2000w_option_descriptor_transport_handling, + _kds_s2000w_option_descriptor_multifeed_sensitivity, + _kds_s2000w_option_descriptor_multifeed_response, + _kds_s2000w_option_descriptor_document_feeder_timeout, + _kds_s2000w_option_descriptor_document_feeder_timeout_response + }; + + kds_s2000w_option_descriptors->size = sizeof(fn) / sizeof(descriptor_fn); kds_s2000w_option_descriptors->descriptors = malloc(sizeof(option_descriptor_t*) * kds_s2000w_option_descriptors->size); if (kds_s2000w_option_descriptors->descriptors == NULL) { free(kds_s2000w_option_descriptors); @@ -1521,54 +1583,9 @@ SANE_Status _kds_s2000w_option_descriptors_init_full_profile() return SANE_STATUS_NO_MEM; } - kds_s2000w_option_descriptors->descriptors[0] = _kds_s2000w_option_descriptor_num_options(); - kds_s2000w_option_descriptors->descriptors[1] = _kds_s2000w_option_descriptor_standard_group(); - kds_s2000w_option_descriptors->descriptors[2] = _kds_s2000w_option_descriptor_scan_source(); - kds_s2000w_option_descriptors->descriptors[3] = _kds_s2000w_option_descriptor_color_mode(); - kds_s2000w_option_descriptors->descriptors[4] = _kds_s2000w_option_descriptor_dpi(); - kds_s2000w_option_descriptors->descriptors[5] = _kds_s2000w_option_descriptor_scanside(); - kds_s2000w_option_descriptors->descriptors[6] = _kds_s2000w_option_descriptor_geometry_group(); - kds_s2000w_option_descriptors->descriptors[7] = _kds_s2000w_option_descriptor_cropping_mode(); - kds_s2000w_option_descriptors->descriptors[8] = _kds_s2000w_option_descriptor_cropping_image(); - kds_s2000w_option_descriptors->descriptors[9] = _kds_s2000w_option_descriptor_image_offset_x(); - kds_s2000w_option_descriptors->descriptors[10] = _kds_s2000w_option_descriptor_image_offset_y(); - kds_s2000w_option_descriptors->descriptors[11] = _kds_s2000w_option_descriptor_image_width(); - kds_s2000w_option_descriptors->descriptors[12] = _kds_s2000w_option_descriptor_image_height(); - kds_s2000w_option_descriptors->descriptors[13] = _kds_s2000w_option_descriptor_boldness_smoothing_group(); - kds_s2000w_option_descriptors->descriptors[14] = _kds_s2000w_option_descriptor_foreground_boldness_mode(); - kds_s2000w_option_descriptors->descriptors[15] = _kds_s2000w_option_descriptor_foreground_boldness_aggressiveness(); - kds_s2000w_option_descriptors->descriptors[16] = _kds_s2000w_option_descriptor_background_smoothing_mode(); - kds_s2000w_option_descriptors->descriptors[17] = _kds_s2000w_option_descriptor_background_smoothing_aggressiveness(); - kds_s2000w_option_descriptors->descriptors[18] = _kds_s2000w_option_descriptor_boldness_color_group(); - kds_s2000w_option_descriptors->descriptors[19] = _kds_s2000w_option_descriptor_color_drop(); - kds_s2000w_option_descriptors->descriptors[20] = _kds_s2000w_option_descriptor_color_drop_out_aggressiveness(); - kds_s2000w_option_descriptors->descriptors[21] = _kds_s2000w_option_descriptor_color_auto_brightness_mode(); - kds_s2000w_option_descriptors->descriptors[22] = _kds_s2000w_option_descriptor_color_brightness(); - kds_s2000w_option_descriptors->descriptors[23] = _kds_s2000w_option_descriptor_color_contrast(); - kds_s2000w_option_descriptors->descriptors[24] = _kds_s2000w_option_descriptor_color_balance_mode(); - kds_s2000w_option_descriptors->descriptors[25] = _kds_s2000w_option_descriptor_color_balance_agressiveness(); - kds_s2000w_option_descriptors->descriptors[26] = _kds_s2000w_option_descriptor_color_balance_red(); - kds_s2000w_option_descriptors->descriptors[27] = _kds_s2000w_option_descriptor_color_balance_green(); - kds_s2000w_option_descriptors->descriptors[28] = _kds_s2000w_option_descriptor_color_balance_blue(); - kds_s2000w_option_descriptors->descriptors[29] = _kds_s2000w_option_descriptor_color_sharpen(); - kds_s2000w_option_descriptors->descriptors[30] = _kds_s2000w_option_descriptor_binarization_contrast(); - kds_s2000w_option_descriptors->descriptors[31] = _kds_s2000w_option_descriptor_config_reset(); - kds_s2000w_option_descriptors->descriptors[32] = _kds_s2000w_option_descriptor_image_processing_group(); - kds_s2000w_option_descriptors->descriptors[33] = _kds_s2000w_option_descriptor_skip_blank_pages(); - kds_s2000w_option_descriptors->descriptors[34] = _kds_s2000w_option_descriptor_skip_blank_page_content(); - kds_s2000w_option_descriptors->descriptors[35] = _kds_s2000w_option_descriptor_hole_fill(); - kds_s2000w_option_descriptors->descriptors[36] = _kds_s2000w_option_descriptor_post_scan_rotation(); - kds_s2000w_option_descriptors->descriptors[37] = _kds_s2000w_option_descriptor_edge_fill(); - kds_s2000w_option_descriptors->descriptors[38] = _kds_s2000w_option_descriptor_image_border(); - kds_s2000w_option_descriptors->descriptors[39] = _kds_s2000w_option_descriptor_jpeg_quality(); - kds_s2000w_option_descriptors->descriptors[40] = _kds_s2000w_option_descriptor_feeder_group(); - kds_s2000w_option_descriptors->descriptors[41] = _kds_s2000w_option_descriptor_autostart(); - kds_s2000w_option_descriptors->descriptors[42] = _kds_s2000w_option_descriptor_max_document_length(); - kds_s2000w_option_descriptors->descriptors[43] = _kds_s2000w_option_descriptor_transport_handling(); - kds_s2000w_option_descriptors->descriptors[44] = _kds_s2000w_option_descriptor_multifeed_sensitivity(); - kds_s2000w_option_descriptors->descriptors[45] = _kds_s2000w_option_descriptor_multifeed_response(); - kds_s2000w_option_descriptors->descriptors[46] = _kds_s2000w_option_descriptor_document_feeder_timeout(); - kds_s2000w_option_descriptors->descriptors[47] = _kds_s2000w_option_descriptor_document_feeder_timeout_response(); + for (size_t i = 0; i < kds_s2000w_option_descriptors->size; i++) { + kds_s2000w_option_descriptors->descriptors[i] = fn[i](); + } return _kds_s2000w_option_descriptor_validate(); } -- 2.47.3