From f9c15d22adc47148b1188110ae314576f3a0bfaf Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Thu, 13 Jul 2023 22:52:16 -0500 Subject: [PATCH] Progress: Add -I/--interval parameter to TacocaT. --- sources/c/tacocat/main/common.c | 34 ++++++++++++++++++++++++++ sources/c/tacocat/main/common/enumeration.h | 4 ++- sources/c/tacocat/main/common/print.c | 1 + sources/c/tacocat/main/common/print.h | 1 + sources/c/tacocat/main/common/string.c | 2 ++ sources/c/tacocat/main/common/string.h | 38 +++++++++++++++++------------ sources/c/tacocat/main/common/type.h | 5 +++- sources/c/tacocat/main/print/message.c | 7 +++--- sources/c/tacocat/main/receive.c | 2 +- 9 files changed, 72 insertions(+), 22 deletions(-) diff --git a/sources/c/tacocat/main/common.c b/sources/c/tacocat/main/common.c index 9fee6f0..0331b1b 100644 --- a/sources/c/tacocat/main/common.c +++ b/sources/c/tacocat/main/common.c @@ -139,6 +139,40 @@ extern "C" { #endif // _kt_resolve_default_kevux_ } + if (main->program.parameters.array[kt_tacocat_parameter_interval_e].result & f_console_result_value_e) { + index = main->program.parameters.array[kt_tacocat_parameter_interval_e].values.array[main->program.parameters.array[kt_tacocat_parameter_interval_e].values.used - 1]; + + f_number_unsigned_t number = 0; + + main->setting.state.status = fl_conversion_dynamic_to_unsigned_detect(fl_conversion_data_base_10_c, main->program.parameters.arguments.array[index], &number); + + if (F_status_is_error(main->setting.state.status)) { + macro_setting_load_print_first(); + kt_tacocat_print_error(&main->program.error, macro_kt_tacocat_f(fl_conversion_dynamic_to_unsigned_detect)); + + return; + } + + if (number == 0 || main->setting.state.status == F_number_negative) { + main->setting.state.status = F_status_set_error(F_parameter); + + fll_program_print_error_parameter_integer_less_than(&main->program.error, f_console_symbol_long_normal_s, kt_tacocat_long_interval_s, main->program.parameters.arguments.array[index], f_string_ascii_1_s); + + return; + } + + main->setting.interval = number; + } + else if (main->program.parameters.array[kt_tacocat_parameter_interval_e].result & f_console_result_found_e) { + main->setting.state.status = F_status_set_error(F_parameter); + + macro_setting_load_print_first(); + + fll_program_print_error_parameter_missing_value(&main->program.error, f_console_symbol_long_normal_s, kt_tacocat_long_interval_s); + + return; + } + // Only process these when needed to avoid unnecessary operations. if (main->callback.setting_load_send_receive && !(main->setting.flag & (kt_tacocat_main_flag_copyright_e | kt_tacocat_main_flag_version_e |kt_tacocat_main_flag_help_e))) { main->callback.setting_load_send_receive(arguments, (void *) main); diff --git a/sources/c/tacocat/main/common/enumeration.h b/sources/c/tacocat/main/common/enumeration.h index 7935e7f..a37d632 100644 --- a/sources/c/tacocat/main/common/enumeration.h +++ b/sources/c/tacocat/main/common/enumeration.h @@ -77,6 +77,7 @@ extern "C" { kt_tacocat_parameter_line_first_no_e, kt_tacocat_parameter_line_last_no_e, + kt_tacocat_parameter_interval_e, kt_tacocat_parameter_receive_e, kt_tacocat_parameter_resolve_e, kt_tacocat_parameter_send_e, @@ -86,12 +87,13 @@ extern "C" { { \ macro_fll_program_console_parameter_standard_initialize, \ \ + macro_f_console_parameter_t_initialize_3(kt_tacocat_short_interval_s, kt_tacocat_long_interval_s, 1, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_3(kt_tacocat_short_receive_s, kt_tacocat_long_receive_s, 2, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_3(kt_tacocat_short_resolve_s, kt_tacocat_long_resolve_s, 1, f_console_flag_normal_e), \ macro_f_console_parameter_t_initialize_3(kt_tacocat_short_send_s, kt_tacocat_long_send_s, 2, f_console_flag_normal_e), \ } - #define kt_tacocat_parameter_total_d 16 + #define kt_tacocat_parameter_total_d 17 #endif // _di_kt_tacocat_parameter_e_ /** diff --git a/sources/c/tacocat/main/common/print.c b/sources/c/tacocat/main/common/print.c index ff8f56b..bb5cb10 100644 --- a/sources/c/tacocat/main/common/print.c +++ b/sources/c/tacocat/main/common/print.c @@ -27,6 +27,7 @@ extern "C" { "f_string_dynamic_increase_by", "f_string_dynamics_increase_by", "f_thread_create", + "fl_conversion_dynamic_to_unsigned_detect", "fll_program_parameter_process_context", "fll_program_parameter_process_verbosity", "kt_tacocat_process_socket_set_error_has", diff --git a/sources/c/tacocat/main/common/print.h b/sources/c/tacocat/main/common/print.h index d8dfe2d..c4448fe 100644 --- a/sources/c/tacocat/main/common/print.h +++ b/sources/c/tacocat/main/common/print.h @@ -60,6 +60,7 @@ extern "C" { kt_tacocat_f_f_string_dynamic_increase_by_e, kt_tacocat_f_f_string_dynamics_increase_by_e, kt_tacocat_f_f_thread_create_e, + kt_tacocat_f_fl_conversion_dynamic_to_unsigned_detect_e, kt_tacocat_f_fll_program_parameter_process_context_e, kt_tacocat_f_fll_program_parameter_process_verbosity_e, kt_tacocat_f_kt_tacocat_process_socket_set_error_has_e, diff --git a/sources/c/tacocat/main/common/string.c b/sources/c/tacocat/main/common/string.c index 3969de9..9815871 100644 --- a/sources/c/tacocat/main/common/string.c +++ b/sources/c/tacocat/main/common/string.c @@ -29,10 +29,12 @@ extern "C" { #endif // _di_kt_tacocat_s_ #ifndef _di_kt_tacocat_parameter_s_ + const f_string_static_t kt_tacocat_short_interval_s = macro_f_string_static_t_initialize_1(KT_TACOCAT_short_interval_s, 0, KT_TACOCAT_short_interval_s_length); const f_string_static_t kt_tacocat_short_receive_s = macro_f_string_static_t_initialize_1(KT_TACOCAT_short_receive_s, 0, KT_TACOCAT_short_receive_s_length); const f_string_static_t kt_tacocat_short_resolve_s = macro_f_string_static_t_initialize_1(KT_TACOCAT_short_resolve_s, 0, KT_TACOCAT_short_resolve_s_length); const f_string_static_t kt_tacocat_short_send_s = macro_f_string_static_t_initialize_1(KT_TACOCAT_short_send_s, 0, KT_TACOCAT_short_send_s_length); + const f_string_static_t kt_tacocat_long_interval_s = macro_f_string_static_t_initialize_1(KT_TACOCAT_long_interval_s, 0, KT_TACOCAT_long_interval_s_length); const f_string_static_t kt_tacocat_long_receive_s = macro_f_string_static_t_initialize_1(KT_TACOCAT_long_receive_s, 0, KT_TACOCAT_long_receive_s_length); const f_string_static_t kt_tacocat_long_resolve_s = macro_f_string_static_t_initialize_1(KT_TACOCAT_long_resolve_s, 0, KT_TACOCAT_long_resolve_s_length); const f_string_static_t kt_tacocat_long_send_s = macro_f_string_static_t_initialize_1(KT_TACOCAT_long_send_s, 0, KT_TACOCAT_long_send_s_length); diff --git a/sources/c/tacocat/main/common/string.h b/sources/c/tacocat/main/common/string.h index 308ea81..148eafe 100644 --- a/sources/c/tacocat/main/common/string.h +++ b/sources/c/tacocat/main/common/string.h @@ -104,26 +104,32 @@ extern "C" { * The main program parameters. */ #ifndef _di_kt_tacocat_parameter_s_ - #define KT_TACOCAT_short_receive_s "r" - #define KT_TACOCAT_short_resolve_s "R" - #define KT_TACOCAT_short_send_s "s" - - #define KT_TACOCAT_long_receive_s "receive" - #define KT_TACOCAT_long_resolve_s "resolve" - #define KT_TACOCAT_long_send_s "send" - - #define KT_TACOCAT_short_receive_s_length 1 - #define KT_TACOCAT_short_resolve_s_length 1 - #define KT_TACOCAT_short_send_s_length 1 - - #define KT_TACOCAT_long_receive_s_length 7 - #define KT_TACOCAT_long_resolve_s_length 7 - #define KT_TACOCAT_long_send_s_length 4 - + #define KT_TACOCAT_short_interval_s "I" + #define KT_TACOCAT_short_receive_s "r" + #define KT_TACOCAT_short_resolve_s "R" + #define KT_TACOCAT_short_send_s "s" + + #define KT_TACOCAT_long_interval_s "interval" + #define KT_TACOCAT_long_receive_s "receive" + #define KT_TACOCAT_long_resolve_s "resolve" + #define KT_TACOCAT_long_send_s "send" + + #define KT_TACOCAT_short_interval_s_length 1 + #define KT_TACOCAT_short_receive_s_length 1 + #define KT_TACOCAT_short_resolve_s_length 1 + #define KT_TACOCAT_short_send_s_length 1 + + #define KT_TACOCAT_long_interval_s_length 8 + #define KT_TACOCAT_long_receive_s_length 7 + #define KT_TACOCAT_long_resolve_s_length 7 + #define KT_TACOCAT_long_send_s_length 4 + + extern const f_string_static_t kt_tacocat_short_interval_s; extern const f_string_static_t kt_tacocat_short_receive_s; extern const f_string_static_t kt_tacocat_short_resolve_s; extern const f_string_static_t kt_tacocat_short_send_s; + extern const f_string_static_t kt_tacocat_long_interval_s; extern const f_string_static_t kt_tacocat_long_receive_s; extern const f_string_static_t kt_tacocat_long_resolve_s; extern const f_string_static_t kt_tacocat_long_send_s; diff --git a/sources/c/tacocat/main/common/type.h b/sources/c/tacocat/main/common/type.h index f91767d..631e25a 100644 --- a/sources/c/tacocat/main/common/type.h +++ b/sources/c/tacocat/main/common/type.h @@ -71,7 +71,8 @@ extern "C" { * This is passed to the program-specific main entry point to designate program settings. * These program settings are often processed from the program arguments (often called the command line arguments). * - * flag: Flags passed to the main function. + * flag: Flags passed to the main function. + * interval: The poll interval to use. * * status_receive: A status used eclusively by the receive thread. * status_send: A status used eclusively by the send thread. @@ -87,6 +88,7 @@ extern "C" { #ifndef _di_kt_tacocat_setting_t_ typedef struct { uint64_t flag; + uint64_t interval; f_status_t status_receive; f_status_t status_send; @@ -103,6 +105,7 @@ extern "C" { #define kt_tacocat_setting_t_initialize \ { \ kt_tacocat_main_flag_none_e, \ + kt_tacocat_interval_poll_d, \ F_none, \ F_none, \ F_none, \ diff --git a/sources/c/tacocat/main/print/message.c b/sources/c/tacocat/main/print/message.c index a3159d6..d56bf3c 100644 --- a/sources/c/tacocat/main/print/message.c +++ b/sources/c/tacocat/main/print/message.c @@ -19,9 +19,10 @@ extern "C" { f_print_dynamic_raw(f_string_eol_s, print->to); - fll_program_print_help_option(print, kt_tacocat_short_receive_s, kt_tacocat_long_receive_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, "Specify an address or socket file to listen to and a file to write to."); - fll_program_print_help_option(print, kt_tacocat_short_resolve_s, kt_tacocat_long_resolve_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, "Specify a custom DNS resolution methodology."); - fll_program_print_help_option(print, kt_tacocat_short_send_s, kt_tacocat_long_send_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Specify an address or socket file send transmit to and a file to read from."); + fll_program_print_help_option(print, kt_tacocat_short_interval_s, kt_tacocat_long_interval_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, "Specify a custom poll interval in milliseconds to use."); + fll_program_print_help_option(print, kt_tacocat_short_receive_s, kt_tacocat_long_receive_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Specify an address or socket file to listen to and a file to write to."); + fll_program_print_help_option(print, kt_tacocat_short_resolve_s, kt_tacocat_long_resolve_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Specify a custom DNS resolution methodology."); + fll_program_print_help_option(print, kt_tacocat_short_send_s, kt_tacocat_long_send_s, f_console_symbol_short_normal_s, f_console_symbol_long_normal_s, " Specify an address or socket file send transmit to and a file to read from."); f_print_dynamic_raw(f_string_eol_s, print->to); diff --git a/sources/c/tacocat/main/receive.c b/sources/c/tacocat/main/receive.c index 7300ec9..05db49e 100644 --- a/sources/c/tacocat/main/receive.c +++ b/sources/c/tacocat/main/receive.c @@ -17,7 +17,7 @@ extern "C" { if (F_status_is_error_not(main->setting.status_receive)) { do { - main->setting.status_receive = f_file_poll(main->setting.receive.polls, kt_tacocat_interval_poll_d); + main->setting.status_receive = f_file_poll(main->setting.receive.polls, main->setting.interval); if (main->program.signal_received) { main->setting.status_receive = F_status_set_error(F_interrupt); -- 1.8.3.1