From b3158059c78332c62b02a426cc9529c8cf82e8d9 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Sat, 6 Jul 2024 00:19:58 -0500 Subject: [PATCH] Progress: Continue migrating the project. This gets the last of the print functions moved into the print directories and files. Additional organizational changes may come in the future but for now I am considering the print format re-organization to be complete. --- sources/c/main/entry/action.c | 98 ++------------------ sources/c/main/print/error/entry/action.c | 130 ++++++++++++++++++++++++++- sources/c/main/print/error/entry/action.h | 144 +++++++++++++++++++++++++++++- 3 files changed, 276 insertions(+), 96 deletions(-) diff --git a/sources/c/main/entry/action.c b/sources/c/main/entry/action.c index 02e809e..7aaf080 100644 --- a/sources/c/main/entry/action.c +++ b/sources/c/main/entry/action.c @@ -179,39 +179,7 @@ extern "C" { if (main->thread.cache.content_actions.array[i].used < at_least || main->thread.cache.content_actions.array[i].used > at_most) { action->status = controller_status_simplify_error(F_parameter); - if (main->program.error.verbosity > f_console_verbosity_quiet_e) { - f_thread_mutex_lock(&main->thread.lock.print); - - f_file_stream_lock(main->program.error.to); - - fl_print_format("%r%[%QThe %r Item Action '%]", main->program.error.to, f_string_eol_s, main->program.error.context, main->program.error.prefix, entry->flag & controller_entry_flag_is_e ? controller_entry_s : controller_exit_s, main->program.error.context); - fl_print_format(f_string_format_Q_single_s.string, main->program.error.to, main->program.error.notable, main->thread.cache.action.name_action, main->program.error.notable); - fl_print_format("%[' requires ", main->program.error.to, main->program.error.context); - - if (at_least == at_most) { - f_print_terminated("exactly ", main->program.error.to); - } - - fl_print_format("%]%[%un%]", main->program.error.to, main->program.error.context, main->program.error.notable, at_least, main->program.error.notable); - - if (action->type == controller_entry_action_type_consider_e || controller_entry_action_type_is_rule(action->type)) { - fl_print_format("%[ or more parameters.%]%r", main->program.error.to, main->program.error.context, main->program.error.context, f_string_eol_s); - } - else { - if (at_least == at_most) { - fl_print_format("%[ parameters.%]%r", main->program.error.to, main->program.error.context, main->program.error.context, f_string_eol_s); - } - else { - fl_print_format("%[ to %]", main->program.error.to, main->program.error.context, main->program.error.context); - fl_print_format("%[%un%]", main->program.error.to, main->program.error.notable, at_most, main->program.error.notable); - fl_print_format("%[ parameters.%]%r", main->program.error.to, main->program.error.context, main->program.error.context, f_string_eol_s); - } - } - - f_file_stream_unlock(main->program.error.to); - - f_thread_mutex_unlock(&main->thread.lock.print); - } + controller_print_error_entry_action_requires_range(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, main->thread.cache.action.name_action, at_least, at_most, action->type); } else { action->status = F_okay; @@ -295,9 +263,7 @@ extern "C" { status_action = action->status; } - if (main->program.error.verbosity > f_console_verbosity_quiet_e) { - fll_print_format("%r%[%QThe %r Item Action must not have an empty string for a path (the first parameter).%]%r", main->program.error.to, f_string_eol_s, main->program.error.context, main->program.error.prefix, entry->flag & controller_entry_flag_is_e ? controller_entry_s : controller_exit_s, main->program.error.context, f_string_eol_s); - } + controller_print_error_entry_action_parameter_empty(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, "first parameter"); } if (action->parameters.array[1].used) { @@ -322,17 +288,7 @@ extern "C" { } else { if (f_compare_dynamic(action->parameters.array[1], main->thread.cache.buffer_path) == F_equal_to_not) { - if (main->program.error.verbosity > f_console_verbosity_quiet_e) { - f_file_stream_lock(main->program.error.to); - - fl_print_format("%r%[%QThe %r Item Action second parameter '%]", main->program.error.to, f_string_eol_s, main->program.error.context, main->program.error.prefix, entry->flag & controller_entry_flag_is_e ? controller_entry_s : controller_exit_s, main->program.error.context); - fl_print_format(f_string_format_Q_single_s.string, main->program.error.to, main->program.error.notable, action->parameters.array[1], main->program.error.notable); - fl_print_format("%[' must be a base path name, such as '%]", main->program.error.to, main->program.error.context, main->program.error.context); - fl_print_format(f_string_format_Q_single_s.string, main->program.error.to, main->program.error.notable, main->thread.cache.buffer_path, main->program.error.notable); - fl_print_format(f_string_format_sentence_end_quote_s.string, main->program.error.to, main->program.error.context, main->program.error.context, f_string_eol_s); - - f_file_stream_unlock(main->program.error.to); - } + controller_print_error_entry_action_parameter_second_base(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, action->parameters.array[1], main->thread.cache.buffer_path); action->status = controller_status_simplify_error(F_parameter); @@ -349,9 +305,7 @@ extern "C" { status_action = action->status; } - if (main->program.error.verbosity > f_console_verbosity_quiet_e) { - fll_print_format("%r%[%QThe %r Item Action must not have an empty string for a rule name (the second parameter).%]", main->program.error.to, f_string_eol_s, main->program.error.context, main->program.error.prefix, entry->flag & controller_entry_flag_is_e ? controller_entry_s : controller_exit_s, main->program.error.context, f_string_eol_s); - } + controller_print_error_entry_action_parameter_empty(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, "second parameter"); } for (j = 2; j < action->parameters.used; ++j) { @@ -374,21 +328,7 @@ extern "C" { } } - if (main->program.error.verbosity > f_console_verbosity_quiet_e) { - f_file_stream_lock(main->program.error.to); - - fl_print_format("%r%[%QThe %r Item Action third parameter (and beyond) must be one of '%]", main->program.error.to, f_string_eol_s, main->program.error.context, main->program.error.prefix, entry->flag & controller_entry_flag_is_e ? controller_entry_s : controller_exit_s, main->program.error.context); - fl_print_format(f_string_format_r_single_s.string, main->program.error.to, main->program.error.notable, controller_asynchronous_s, main->program.error.notable); - fl_print_format("%[', '%]", main->program.error.to, main->program.error.context, main->program.error.context); - fl_print_format(f_string_format_r_single_s.string, main->program.error.to, main->program.error.notable, controller_require_s, main->program.error.notable); - fl_print_format("%[', or '%]", main->program.error.to, main->program.error.context, main->program.error.context); - fl_print_format(f_string_format_r_single_s.string, main->program.error.to, main->program.error.notable, controller_wait_s, main->program.error.notable); - fl_print_format("%[' but instead has '%]", main->program.error.to, main->program.error.context, main->program.error.context); - fl_print_format(f_string_format_Q_single_s.string, main->program.error.to, main->program.error.notable, action->parameters.array[j], main->program.error.notable); - fl_print_format(f_string_format_sentence_end_quote_s.string, main->program.error.to, main->program.error.context, main->program.error.context, f_string_eol_s); - - f_file_stream_unlock(main->program.error.to); - } + controller_print_error_entry_action_invalid_allow_3(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, "third parameter (and beyond)", action->parameters.array[j], controller_asynchronous_s, controller_require_s, controller_wait_s); } } // for } @@ -400,15 +340,7 @@ extern "C" { status_action = action->status; } - if (main->program.error.verbosity > f_console_verbosity_quiet_e) { - f_file_stream_lock(main->program.error.to); - - fl_print_format("%r%[%QThe %r Item Action may not specify the reserved item '%]", main->program.error.to, f_string_eol_s, main->program.error.context, main->program.error.prefix, entry->flag & controller_entry_flag_is_e ? controller_entry_s : controller_exit_s, main->program.error.context); - fl_print_format(f_string_format_r_single_s.string, main->program.error.to, main->program.error.notable, controller_main_s, main->program.error.notable); - fl_print_format(f_string_format_sentence_end_quote_s.string, main->program.error.to, main->program.error.context, main->program.error.context, f_string_eol_s); - - f_file_stream_unlock(main->program.error.to); - } + controller_print_error_entry_action_unsupported_reserve(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, controller_main_s); } } else if (action->type == controller_entry_action_type_timeout_e) { @@ -429,21 +361,7 @@ extern "C" { status_action = action->status; } - if (main->program.error.verbosity > f_console_verbosity_quiet_e) { - f_file_stream_lock(main->program.error.to); - - fl_print_format("%r%[%QThe %r Item Action must have one of '%]", main->program.error.to, f_string_eol_s, main->program.error.context, main->program.error.prefix, entry->flag & controller_entry_flag_is_e ? controller_entry_s : controller_exit_s, main->program.error.context); - fl_print_format(f_string_format_r_single_s.string, main->program.error.to, main->program.error.notable, controller_kill_s, main->program.error.notable); - fl_print_format("%[', '%]", main->program.error.to, main->program.error.context, main->program.error.context); - fl_print_format(f_string_format_r_single_s.string, main->program.error.to, main->program.error.notable, controller_start_s, main->program.error.notable); - fl_print_format("%[', or '%]", main->program.error.to, main->program.error.context, main->program.error.context); - fl_print_format(f_string_format_r_single_s.string, main->program.error.to, main->program.error.notable, controller_stop_s, main->program.error.notable); - fl_print_format("%[' but instead has '%]", main->program.error.to, main->program.error.context, main->program.error.context); - fl_print_format(f_string_format_Q_single_s.string, main->program.error.to, main->program.error.notable, action->parameters.array[0], main->program.error.notable); - fl_print_format(f_string_format_sentence_end_quote_s.string, main->program.error.to, main->program.error.context, main->program.error.context, f_string_eol_s); - - f_file_stream_unlock(main->program.error.to); - } + controller_print_error_entry_action_invalid_allow_3(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, 0, action->parameters.array[0], controller_kill_s, controller_start_s, controller_stop_s); } if (action->status == F_okay) { @@ -486,7 +404,7 @@ extern "C" { else { action->status = controller_status_simplify_error(F_support_not); - controller_print_error_entry_action_invalid_allow_1(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, action->parameters.array[0], controller_wait_s); + controller_print_error_entry_action_invalid_allow_1(&main->program.error, &main->thread.cache.action, entry->flag & controller_entry_flag_is_e, 0, action->parameters.array[0], controller_wait_s); } } } diff --git a/sources/c/main/print/error/entry/action.c b/sources/c/main/print/error/entry/action.c index 6555e59..e6f65ac 100644 --- a/sources/c/main/print/error/entry/action.c +++ b/sources/c/main/print/error/entry/action.c @@ -49,7 +49,7 @@ extern "C" { #endif // _di_controller_print_error_entry_action_execution_missing_ #ifndef _di_controller_print_error_entry_action_invalid_allow_1_ - f_status_t controller_print_error_entry_action_invalid_allow_1(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t has, const f_string_static_t allow) { + f_status_t controller_print_error_entry_action_invalid_allow_1(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_t message, const f_string_static_t has, const f_string_static_t allow) { if (!print || !print->custom || !action) return F_status_set_error(F_output_not); if (print->verbosity < f_console_verbosity_error_e) return F_output_not; @@ -58,7 +58,14 @@ extern "C" { controller_lock_print(print->to, &main->thread); - fl_print_format("%r%[%QThe %r Item Action may only have '%]", print->to, f_string_eol_s, print->context, print->prefix, is_entry ? controller_entry_s : controller_exit_s, print->context); + fl_print_format("%r%[%QThe %r Item Action ", print->to, f_string_eol_s, print->context, print->prefix, is_entry ? controller_entry_s : controller_exit_s, print->context); + + if (!message) { + fl_print_format("%S ", print->to, message); + } + + fl_print_format("may only have one '%]", print->to, print->context); + fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, allow, print->notable); fl_print_format("%[' but instead has '%]", print->to, print->context, print->context); fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, has, print->notable); @@ -73,7 +80,7 @@ extern "C" { #endif // _di_controller_print_error_entry_action_invalid_allow_1_ #ifndef _di_controller_print_error_entry_action_invalid_allow_3_ - f_status_t controller_print_error_entry_action_invalid_allow_3(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t has, const f_string_static_t allow_1, const f_string_static_t allow_2, const f_string_static_t allow_3) { + f_status_t controller_print_error_entry_action_invalid_allow_3(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_t message, const f_string_static_t has, const f_string_static_t allow_1, const f_string_static_t allow_2, const f_string_static_t allow_3) { if (!print || !print->custom || !action) return F_status_set_error(F_output_not); if (print->verbosity < f_console_verbosity_error_e) return F_output_not; @@ -82,7 +89,13 @@ extern "C" { controller_lock_print(print->to, &main->thread); - fl_print_format("%r%[%QThe %r Item Action must have one of '%]", print->to, f_string_eol_s, print->context, print->prefix, is_entry ? controller_entry_s : controller_exit_s, print->context); + fl_print_format("%r%[%QThe %r Item Action ", print->to, f_string_eol_s, print->context, print->prefix, is_entry ? controller_entry_s : controller_exit_s, print->context); + + if (!message) { + fl_print_format("%S ", print->to, message); + } + + fl_print_format("may only have one of '%]", print->to, print->context); fl_print_format(f_string_format_r_single_s.string, print->to, print->notable, allow_1, print->notable); fl_print_format("%[', '%]", print->to, print->context, print->context); fl_print_format(f_string_format_r_single_s.string, print->to, print->notable, allow_2, print->notable); @@ -100,6 +113,93 @@ extern "C" { } #endif // _di_controller_print_error_entry_action_invalid_allow_3_ +#ifndef _di_controller_print_error_entry_action_parameter_empty_ + f_status_t controller_print_error_entry_action_parameter_empty(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_t message) { + + if (!print || !print->custom || !action) return F_status_set_error(F_output_not); + if (print->verbosity < f_console_verbosity_error_e) return F_output_not; + + controller_t * const main = (controller_t *) print->custom; + + controller_lock_print(print->to, &main->thread); + + fl_print_format("%r%[%QThe %r Item Action %S must not be an empty string.%]", print->to, f_string_eol_s, print->context, print->prefix, is_entry ? controller_entry_s : controller_exit_s, message, print->context); + + controller_print_error_entry_cache(print, action, is_entry); + + controller_unlock_print_flush(print->to, &main->thread); + + return F_okay; + } +#endif // _di_controller_print_error_entry_action_parameter_empty_ + +#ifndef _di_controller_print_error_entry_action_parameter_second_base_ + f_status_t controller_print_error_entry_action_parameter_second_base(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t has, const f_string_static_t example) { + + if (!print || !print->custom || !action) return F_status_set_error(F_output_not); + if (print->verbosity < f_console_verbosity_error_e) return F_output_not; + + controller_t * const main = (controller_t *) print->custom; + + controller_lock_print(print->to, &main->thread); + + fl_print_format("%r%[%QThe %r Item Action second parameter '%]", print->to, f_string_eol_s, print->context, print->prefix, is_entry ? controller_entry_s : controller_exit_s, print->context); + fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, has, print->notable); + fl_print_format("%[' must be a base path name, such as '%]", print->to, print->context, print->context); + fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, example, print->notable); + fl_print_format(f_string_format_sentence_end_quote_s.string, print->to, print->context, print->context, f_string_eol_s); + + controller_print_error_entry_cache(print, action, is_entry); + + controller_unlock_print_flush(print->to, &main->thread); + + return F_okay; + } +#endif // _di_controller_print_error_entry_action_parameter_second_base_ + +#ifndef _di_controller_print_error_entry_action_requires_range_ + f_status_t controller_print_error_entry_action_requires_range(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t name, const f_number_unsigned_t at_least, const f_number_unsigned_t at_most, const uint8_t type) { + + if (!print || !print->custom || !action) return F_status_set_error(F_output_not); + if (print->verbosity < f_console_verbosity_error_e) return F_output_not; + + controller_t * const main = (controller_t *) print->custom; + + controller_lock_print(print->to, &main->thread); + + fl_print_format("%r%[%QThe %r Item Action '%]", print->to, f_string_eol_s, print->context, print->prefix, is_entry ? controller_entry_s : controller_exit_s, print->context); + fl_print_format(f_string_format_Q_single_s.string, print->to, print->notable, name, print->notable); + fl_print_format("%[' requires ", print->to, print->context); + + if (at_least == at_most) { + f_print_terminated("exactly ", print->to); + } + + fl_print_format(f_string_format_bracket_close_s.string, print->to, print->context); + fl_print_format(f_string_format_un_single_s.string, print->to, print->notable, at_least, print->notable); + + if (type == controller_entry_action_type_consider_e || controller_entry_action_type_is_rule(type)) { + fl_print_format("%[ or more parameters.%]%r", print->to, print->context, print->context, f_string_eol_s); + } + else { + if (at_least == at_most) { + fl_print_format("%[ parameters.%]%r", print->to, print->context, print->context, f_string_eol_s); + } + else { + fl_print_format("%[ to %]", print->to, print->context, print->context); + fl_print_format(f_string_format_un_single_s.string, print->to, print->notable, at_most, print->notable); + fl_print_format("%[ parameters.%]%r", print->to, print->context, print->context, f_string_eol_s); + } + } + + controller_print_error_entry_cache(print, action, is_entry); + + controller_unlock_print_flush(print->to, &main->thread); + + return F_okay; + } +#endif // _di_controller_print_error_entry_action_requires_range_ + #ifndef _di_controller_print_error_entry_action_unsupported_number_ f_status_t controller_print_error_entry_action_unsupported_number(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t has) { @@ -122,6 +222,28 @@ extern "C" { } #endif // _di_controller_print_error_entry_action_unsupported_number_ +#ifndef _di_controller_print_error_entry_action_unsupported_reserve_ + f_status_t controller_print_error_entry_action_unsupported_reserve(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t item) { + + if (!print || !print->custom || !action) return F_status_set_error(F_output_not); + if (print->verbosity < f_console_verbosity_error_e) return F_output_not; + + controller_t * const main = (controller_t *) print->custom; + + controller_lock_print(print->to, &main->thread); + + fl_print_format("%r%[%QThe %r Item Action may not specify the reserved item '%]", print->to, f_string_eol_s, print->context, print->prefix, is_entry ? controller_entry_s : controller_exit_s, print->context); + fl_print_format(f_string_format_r_single_s.string, print->to, print->notable, item, print->notable); + fl_print_format(f_string_format_sentence_end_quote_s.string, print->to, print->context, print->context, f_string_eol_s); + + controller_print_error_entry_cache(print, action, is_entry); + + controller_unlock_print_flush(print->to, &main->thread); + + return F_okay; + } +#endif // _di_controller_print_error_entry_action_unsupported_reserve_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/sources/c/main/print/error/entry/action.h b/sources/c/main/print/error/entry/action.h index 32ceebf..43c7e4d 100644 --- a/sources/c/main/print/error/entry/action.h +++ b/sources/c/main/print/error/entry/action.h @@ -98,6 +98,10 @@ extern "C" { * @param is_entry * If TRUE, then this loads as an entry. * If FALSE, then this loads as an exit. + * @param message + * (optional) An additional message to add. + * + * Set to NULL to not use. * @param has * The invalid value that is not supported. * @param allow @@ -110,7 +114,7 @@ extern "C" { * F_output_not (with error bit) if setting is NULL. */ #ifndef _di_controller_print_error_entry_action_invalid_allow_1_ - extern f_status_t controller_print_error_entry_action_invalid_allow_1(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t has, const f_string_static_t allow); + extern f_status_t controller_print_error_entry_action_invalid_allow_1(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_t message, const f_string_static_t has, const f_string_static_t allow); #endif // _di_controller_print_error_entry_action_invalid_allow_1_ /** @@ -133,6 +137,10 @@ extern "C" { * @param is_entry * If TRUE, then this loads as an entry. * If FALSE, then this loads as an exit. + * @param message + * (optional) An additional message to add. + * + * Set to NULL to not use. * @param has * The invalid value that is not supported. * @param allow_1 @@ -149,10 +157,111 @@ extern "C" { * F_output_not (with error bit) if setting is NULL. */ #ifndef _di_controller_print_error_entry_action_invalid_allow_3_ - extern f_status_t controller_print_error_entry_action_invalid_allow_3(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t has, const f_string_static_t allow_1, const f_string_static_t allow_2, const f_string_static_t allow_3); + extern f_status_t controller_print_error_entry_action_invalid_allow_3(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_t message, const f_string_static_t has, const f_string_static_t allow_1, const f_string_static_t allow_2, const f_string_static_t allow_3); #endif // _di_controller_print_error_entry_action_invalid_allow_3_ /** + * Print an error when an Item Action parameter is empty. + * + * @param print + * The output structure to print to. + * + * This requires print.custom to be controller_t. + * + * This does not alter print.custom.setting.state.status. + * + * Must not be NULL. + * @param action + * The Action cache. + * + * Must not be NULL. + * @param is_entry + * If TRUE, then this loads as an entry. + * If FALSE, then this loads as an exit. + * @param message + * A message describing which parameter is empty. + * + * @return + * F_okay on success. + * F_output_not on success, but no printing is performed. + * + * F_output_not (with error bit) if setting is NULL. + */ +#ifndef _di_controller_print_error_entry_action_parameter_empty_ + extern f_status_t controller_print_error_entry_action_parameter_empty(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_t message); +#endif // _di_controller_print_error_entry_action_parameter_empty_ + +/** + * Print an error when an Item Action second parameter is not a base path name. + * + * @param print + * The output structure to print to. + * + * This requires print.custom to be controller_t. + * + * This does not alter print.custom.setting.state.status. + * + * Must not be NULL. + * @param action + * The Action cache. + * + * Must not be NULL. + * @param is_entry + * If TRUE, then this loads as an entry. + * If FALSE, then this loads as an exit. + * @param has + * The second parameter value. + * @param example + * An example of a valid base path name. + * + * @return + * F_okay on success. + * F_output_not on success, but no printing is performed. + * + * F_output_not (with error bit) if setting is NULL. + */ +#ifndef _di_controller_print_error_entry_action_parameter_second_base_ + extern f_status_t controller_print_error_entry_action_parameter_second_base(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t has, const f_string_static_t example); +#endif // _di_controller_print_error_entry_action_parameter_second_base_ + +/** + * Print an error when an Item Action requires a given range for the number. + * + * @param print + * The output structure to print to. + * + * This requires print.custom to be controller_t. + * + * This does not alter print.custom.setting.state.status. + * + * Must not be NULL. + * @param action + * The Action cache. + * + * Must not be NULL. + * @param is_entry + * If TRUE, then this loads as an entry. + * If FALSE, then this loads as an exit. + * @param name + * The Action name. + * @param at_least + * The minimum number that is allowed. + * @param at_most + * The maximum number that is allowed. + * @param type + * The Action type code. + * + * @return + * F_okay on success. + * F_output_not on success, but no printing is performed. + * + * F_output_not (with error bit) if setting is NULL. + */ +#ifndef _di_controller_print_error_entry_action_requires_range_ + extern f_status_t controller_print_error_entry_action_requires_range(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t name, const f_number_unsigned_t at_least, const f_number_unsigned_t at_most, const uint8_t type); +#endif // _di_controller_print_error_entry_action_requires_range_ + +/** * Print an error when an Item Action is not a valid number. * * @param print @@ -183,6 +292,37 @@ extern "C" { extern f_status_t controller_print_error_entry_action_unsupported_number(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t has); #endif // _di_controller_print_error_entry_action_unsupported_number_ +/** + * Print an error when an Item Action is using a reserved item, which is not allowed. + * + * @param print + * The output structure to print to. + * + * This requires print.custom to be controller_t. + * + * This does not alter print.custom.setting.state.status. + * + * Must not be NULL. + * @param action + * The Action cache. + * + * Must not be NULL. + * @param is_entry + * If TRUE, then this loads as an entry. + * If FALSE, then this loads as an exit. + * @param item + * The reserved item that is not allowed to be used. + * + * @return + * F_okay on success. + * F_output_not on success, but no printing is performed. + * + * F_output_not (with error bit) if setting is NULL. + */ +#ifndef _di_controller_print_error_entry_action_unsupported_reserve_ + extern f_status_t controller_print_error_entry_action_unsupported_reserve(fl_print_t * const print, controller_cache_action_t * const action, const uint8_t is_entry, const f_string_static_t item); +#endif // _di_controller_print_error_entry_action_unsupported_reserve_ + #ifdef __cplusplus } // extern "C" #endif -- 1.8.3.1