2022-05-03 03:56:07 +00:00
|
|
|
|
#include "common_setting.h"
|
2022-05-13 08:39:21 +00:00
|
|
|
|
#include "sane/sane_option_definitions.h"
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
static struct _fixed_option
|
|
|
|
|
{
|
|
|
|
|
std::string str;
|
|
|
|
|
int enum_val;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
g_color_mode[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_YSMS_HB, COLOR_MODE_BLACK_WHITE},
|
|
|
|
|
{OPTION_VALUE_YSMS_256JHD, COLOR_MODE_256_GRAY},
|
|
|
|
|
{OPTION_VALUE_YSMS_24WCS, COLOR_MODE_24_BITS},
|
|
|
|
|
{OPTION_VALUE_YSMS_YSZDSB, COLOR_MODE_AUTO_MATCH}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
g_multi_out[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_DLSC_W, MULTI_OUT_NOT},
|
|
|
|
|
{OPTION_VALUE_DLSC_CS_HD_HB, MULTI_OUT_ALL},
|
|
|
|
|
{OPTION_VALUE_DLSC_CS_HD, MULTI_COLOR_AND_GRAY},
|
|
|
|
|
{OPTION_VALUE_DLSC_CS_HB, MULTI_COLOR_AND_BW},
|
|
|
|
|
{OPTION_VALUE_DLSC_HD_HB, MULTI_GRAY_AND_BW}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
g_rid_color[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_HDHHBTX_CS_BCS, RID_COLOR_NONE},
|
|
|
|
|
{OPTION_VALUE_HDHHBTX_CS_CHS, RID_COLOR_RID_RED},
|
|
|
|
|
{OPTION_VALUE_HDHHBTX_CS_CLS, RID_COLOR_RID_GREEN},
|
|
|
|
|
{OPTION_VALUE_HDHHBTX_CS_CHULANSE, RID_COLOR_RID_BLUE},
|
|
|
|
|
{OPTION_VALUE_HDHHBTX_CS_HSZQ, RID_COLOR_ENHANCE_RED},
|
|
|
|
|
{OPTION_VALUE_HDHHBTX_CS_LSZQ, RID_COLOR_ENHANCE_GREEN},
|
|
|
|
|
{OPTION_VALUE_HDHHBTX_CS_LANSEZENGQIANG, RID_COLOR_ENHANCE_BLUE}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
g_paper[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_ZZCC_A3, PAPER_A3},
|
|
|
|
|
{OPTION_VALUE_ZZCC_A4, PAPER_A4},
|
|
|
|
|
{OPTION_VALUE_ZZCC_A5, PAPER_A5},
|
|
|
|
|
{OPTION_VALUE_ZZCC_A6, PAPER_A6},
|
|
|
|
|
{OPTION_VALUE_ZZCC_B4, PAPER_B4},
|
|
|
|
|
{OPTION_VALUE_ZZCC_B5, PAPER_B5},
|
|
|
|
|
{OPTION_VALUE_ZZCC_B6, PAPER_B6},
|
|
|
|
|
{OPTION_VALUE_ZZCC_8K, PAPER_8K},
|
|
|
|
|
{OPTION_VALUE_ZZCC_16K, PAPER_16K},
|
|
|
|
|
{OPTION_VALUE_ZZCC_Letter, PAPER_LETTER},
|
|
|
|
|
{OPTION_VALUE_ZZCC_A4HX, PAPER_A4_LATERAL},
|
|
|
|
|
{OPTION_VALUE_ZZCC_A5HX, PAPER_A5_LATERAL},
|
|
|
|
|
{OPTION_VALUE_ZZCC_A6HX, PAPER_A6_LATERAL},
|
|
|
|
|
{OPTION_VALUE_ZZCC_B5HX, PAPER_B5_LATERAL},
|
|
|
|
|
{OPTION_VALUE_ZZCC_B6HX, PAPER_B6_LATERAL},
|
|
|
|
|
{OPTION_VALUE_ZZCC_16KHX, PAPER_16K_LATERAL},
|
|
|
|
|
{OPTION_VALUE_ZZCC_LetterHX, PAPER_LETTER_LATERAL},
|
|
|
|
|
{OPTION_VALUE_ZZCC_DoubleLetter, PAPER_DOUBLE_LETTER},
|
|
|
|
|
{OPTION_VALUE_ZZCC_LEGAL, PAPER_LEGAL},
|
|
|
|
|
{OPTION_VALUE_ZZCC_PPYSCC, PAPER_AUTO_MATCH},
|
|
|
|
|
{OPTION_VALUE_ZZCC_ZDSMCC, PAPER_MAX_SIZE},
|
|
|
|
|
{OPTION_VALUE_ZZCC_ZDSMCCZDCQ, PAPER_MAX_SIZE_CLIP},
|
|
|
|
|
{OPTION_VALUE_ZZCC_SLSJ, PAPER_TRIGEMINY}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
g_page[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_SMYM_DM, PAGE_SINGLE},
|
|
|
|
|
{OPTION_VALUE_SMYM_SM, PAGE_DOUBLE},
|
|
|
|
|
{OPTION_VALUE_SMYM_TGKBYTY, PAGE_OMIT_EMPTY},
|
|
|
|
|
{OPTION_VALUE_SMYM_TGKBYFPZ, PAGE_OMIT_EMPTY_RECEIPT},
|
|
|
|
|
{OPTION_VALUE_SMYM_DZ, PAGE_FOLIO}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
g_sharpen[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_RHYMH_W, SHARPEN_NONE},
|
|
|
|
|
{OPTION_VALUE_RHYMH_RH, SHARPEN_SHARPEN},
|
|
|
|
|
{OPTION_VALUE_RHYMH_JYBRH, SHARPEN_SHARPEN_MORE},
|
|
|
|
|
{OPTION_VALUE_RHYMH_MH, SHARPEN_HAZY},
|
|
|
|
|
{OPTION_VALUE_RHYMH_JYBMH, SHARPEN_HAZY_MORE}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
g_fill_bkg[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_BJTCFS_TDBX, FILL_BKG_CONVEX_POLYGON},
|
|
|
|
|
{OPTION_VALUE_BJTCFS_ADBX, FILL_BKG_CONCAVE_POLYGON}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
g_scan_mode[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_SMZS_LXSM, SCAN_MODE_CONTINUOUS},
|
|
|
|
|
{OPTION_VALUE_SMZS_SMZDZS, SCAN_MODE_GIVEN_COUNT}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
g_text_direction[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_WGFX_0, TEXT_DIRECTION_0},
|
|
|
|
|
{OPTION_VALUE_WGFX_90, TEXT_DIRECTION_90},
|
|
|
|
|
{OPTION_VALUE_WGFX_180, TEXT_DIRECTION_180},
|
|
|
|
|
{OPTION_VALUE_WGFX__90, TEXT_DIRECTION_270},
|
|
|
|
|
{OPTION_VALUE_WGFX_ZDWBFXSB, TEXT_DIRECTION_AUTO}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
g_permeate_lv[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_FZSTDJ_JR, PERMAEATE_WEAKER},
|
|
|
|
|
{OPTION_VALUE_FZSTDJ_R, PERMAEATE_WEAK},
|
|
|
|
|
{OPTION_VALUE_FZSTDJ_YB, PERMAEATE_ORDINARY},
|
|
|
|
|
{OPTION_VALUE_FZSTDJ_Q, PERMAEATE_STRONG},
|
|
|
|
|
{OPTION_VALUE_FZSTDJ_JQ, PERMAEATE_STRONGER}
|
2022-05-09 07:02:00 +00:00
|
|
|
|
},
|
|
|
|
|
g_img_quality[] =
|
|
|
|
|
{
|
2022-05-13 08:39:21 +00:00
|
|
|
|
{OPTION_VALUE_HZ_W, IMG_NONE},
|
|
|
|
|
{OPTION_VALUE_HZ_SDYX, IMG_SPEED},
|
|
|
|
|
{OPTION_VALUE_HZ_HZYX, IMG_QUALITY}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
};
|
|
|
|
|
|
2022-05-20 06:46:25 +00:00
|
|
|
|
static struct paper_size
|
|
|
|
|
{
|
|
|
|
|
int paper;
|
|
|
|
|
SIZE size;
|
|
|
|
|
}g_paper_size[] =
|
|
|
|
|
{
|
|
|
|
|
{PAPER_A3, {297, 420}},
|
|
|
|
|
{PAPER_A4, {210, 297}},
|
|
|
|
|
{PAPER_A5, {148, 210}},
|
|
|
|
|
{PAPER_A6, {105, 148}},
|
|
|
|
|
{PAPER_B4, {257, 364}},
|
|
|
|
|
{PAPER_B5, {176, 250}}, // {PAPER_B5, {182, 257}},
|
|
|
|
|
{PAPER_B6, {125, 176}},
|
|
|
|
|
{PAPER_8K, {297, 420}},
|
|
|
|
|
{PAPER_16K, {210, 285}}, // {PAPER_16K, {185, 260}}
|
|
|
|
|
{PAPER_A4_LATERAL, {297, 210}},
|
|
|
|
|
{PAPER_A5_LATERAL, {210, 148}},
|
|
|
|
|
{PAPER_A6_LATERAL, {148, 105}},
|
|
|
|
|
{PAPER_B5_LATERAL, {250, 176}}, // {PAPER_B5, {182, 257}},
|
|
|
|
|
{PAPER_B6_LATERAL, {176, 125}}
|
|
|
|
|
};
|
2022-05-09 07:02:00 +00:00
|
|
|
|
|
2022-05-03 03:56:07 +00:00
|
|
|
|
static int match_best(struct _fixed_option* arr, size_t num, std::string& val, bool& exact)
|
|
|
|
|
{
|
|
|
|
|
exact = true;
|
|
|
|
|
for (size_t i = 0; i < num; ++i)
|
|
|
|
|
{
|
|
|
|
|
if (arr[i].str == val)
|
|
|
|
|
return arr[i].enum_val;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
exact = false;
|
|
|
|
|
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
static std::string get_str(struct _fixed_option* arr, int num, int enm, int default_v = 0)
|
|
|
|
|
{
|
|
|
|
|
if (enm >= 0 && enm < num)
|
|
|
|
|
return arr[enm].str;
|
|
|
|
|
else
|
|
|
|
|
return arr[default_v].str;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define INVOKE_MATCH(arr, val, yes) match_best(arr, ARRAY_SIZE(arr), val, yes)
|
|
|
|
|
#define INVOKE_STR(arr, val, def) get_str(arr, ARRAY_SIZE(arr), val, def)
|
2022-05-13 08:39:21 +00:00
|
|
|
|
#define SET_DEFAULT_ON_FAIL(map_array, ind, val, def) \
|
|
|
|
|
if(ind == -1) \
|
|
|
|
|
{ \
|
|
|
|
|
ind = def; \
|
|
|
|
|
val = INVOKE_STR(map_array, def, def); \
|
2022-05-03 03:56:07 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int match_best_color_mode(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_color_mode, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_color_mode, ind, val, COLOR_MODE_24_BITS);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
int match_best_multi_out(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_multi_out, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_multi_out, ind, val, MULTI_OUT_NOT);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
int match_best_rid_color(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_rid_color, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_rid_color, ind, val, RID_COLOR_NONE);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
2022-05-20 06:46:25 +00:00
|
|
|
|
SIZE paper_size(int paper)
|
|
|
|
|
{
|
|
|
|
|
for (size_t i = 0; i < ARRAY_SIZE(g_paper_size); ++i)
|
|
|
|
|
{
|
|
|
|
|
if (g_paper_size[i].paper == paper)
|
|
|
|
|
return g_paper_size[i].size;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return SIZE{ 2338, 3307 };
|
|
|
|
|
}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
int match_best_paper(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_paper, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_paper, ind, val, PAPER_A4);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
int match_best_page(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_page, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_page, ind, val, PAGE_DOUBLE);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
int match_best_sharpen(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_sharpen, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_sharpen, ind, val, SHARPEN_NONE);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
int match_best_fill_background(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_fill_bkg, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_fill_bkg, ind, val, FILL_BKG_CONVEX_POLYGON);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
int match_best_scan_mode(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_scan_mode, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_scan_mode, ind, val, SCAN_MODE_CONTINUOUS);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
int match_best_text_direction(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_text_direction, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_text_direction, ind, val, TEXT_DIRECTION_0);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int match_best_permaeate_lv(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_permeate_lv, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_permeate_lv, ind, val, TEXT_DIRECTION_0);
|
2022-05-03 03:56:07 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
|
|
|
|
|
2022-05-09 07:02:00 +00:00
|
|
|
|
int match_best_img_quality(std::string& val, bool* exact)
|
|
|
|
|
{
|
|
|
|
|
bool yes = true;
|
|
|
|
|
int ind = INVOKE_MATCH(g_img_quality, val, yes);
|
|
|
|
|
|
2022-05-13 08:39:21 +00:00
|
|
|
|
SET_DEFAULT_ON_FAIL(g_img_quality, ind, val, IMG_SPEED);
|
2022-05-09 07:02:00 +00:00
|
|
|
|
if (exact)
|
|
|
|
|
*exact = yes;
|
|
|
|
|
|
|
|
|
|
return ind;
|
|
|
|
|
}
|
2022-05-03 03:56:07 +00:00
|
|
|
|
|
|
|
|
|
std::string color_mode_string(int clr_mode)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_color_mode, clr_mode, 0);
|
|
|
|
|
}
|
|
|
|
|
std::string multi_out_string(int multi_out)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_multi_out, multi_out, 0);
|
|
|
|
|
}
|
|
|
|
|
std::string rid_color_string(int rid_color)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_rid_color, rid_color, 0);
|
|
|
|
|
}
|
|
|
|
|
std::string paper_string(int paper)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_paper, paper, 1);
|
|
|
|
|
}
|
|
|
|
|
bool is_lateral(int paper)
|
|
|
|
|
{
|
|
|
|
|
return paper == PAPER_A4_LATERAL
|
|
|
|
|
|| paper == PAPER_A5_LATERAL
|
|
|
|
|
|| paper == PAPER_A6_LATERAL
|
|
|
|
|
|| paper == PAPER_B5_LATERAL
|
|
|
|
|
|| paper == PAPER_B6_LATERAL
|
|
|
|
|
|| paper == PAPER_16K_LATERAL
|
|
|
|
|
|| paper == PAPER_LETTER_LATERAL;
|
|
|
|
|
}
|
|
|
|
|
std::string page_string(int page)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_page, page, 1);
|
|
|
|
|
}
|
|
|
|
|
std::string sharpen_string(int sharpen)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_sharpen, sharpen, 0);
|
|
|
|
|
}
|
|
|
|
|
std::string fill_background_string(int fill)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_fill_bkg, fill, 0);
|
|
|
|
|
}
|
|
|
|
|
std::string scan_mode_string(int mode)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_scan_mode, mode, 0);
|
|
|
|
|
}
|
|
|
|
|
std::string text_direction_string(int text_dir)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_text_direction, text_dir, 0);
|
|
|
|
|
}
|
|
|
|
|
std::string is_permaeate_string(int permaeate_lv)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_permeate_lv, permaeate_lv, 0);
|
|
|
|
|
}
|
2022-05-09 07:02:00 +00:00
|
|
|
|
std::string is_img_quality(int is_quakuty)
|
|
|
|
|
{
|
|
|
|
|
return INVOKE_STR(g_img_quality, is_quakuty, 0);
|
|
|
|
|
}
|